#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package Player.PlayerMineArea
|
#
|
# @todo:¿óÎ︣µØ
|
# @author hxp
|
# @date 2024-03-07
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: ¿óÎ︣µØ
|
#
|
#-------------------------------------------------------------------------------
|
#"""Version = 2024-03-07 19:30"""
|
#-------------------------------------------------------------------------------
|
|
import ChConfig
|
import PlayerControl
|
import IpyGameDataPY
|
import IPY_GameWorld
|
import ChPyNetSendPack
|
import PlayerActTask
|
import NetPackCommon
|
import ItemControler
|
import PlayerSuccess
|
import ShareDefine
|
import ItemCommon
|
import EventShell
|
import GameWorld
|
import time
|
|
# ¾Û±¦ÅèĬÈÏ×î´ó½ø¶È
|
MineTreasureProgressMax = 100
|
|
# Ë¢ÐÂÀàÐÍÁбí
|
RefreshTypeList = (
|
RefreshType_Comm, # ×Ô¼ºÎïÆ·ÆÕͨˢР0
|
RefreshType_Super, # ×Ô¼ºÎïÆ·³¬¼¶Ë¢Ð 1
|
RefreshType_Rob, # ÇÀ½ÙÖÜÎ§Íæ¼ÒˢР2
|
) = range(3)
|
|
def OnPlayerLogin(curPlayer):
|
freeWorkerCount = 0
|
workerNeedItemList = IpyGameDataPY.GetFuncEvalCfg("MineAreaWorker", 3)
|
for needItemCount in workerNeedItemList:
|
if needItemCount:
|
break
|
freeWorkerCount += 1
|
if freeWorkerCount > curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineWorkerCount):
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineWorkerCount, freeWorkerCount)
|
SyncPlayerMineAreaInfo(curPlayer)
|
return
|
|
def PlayerOnDay(curPlayer):
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineHelpAwardCount, 0)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineWorkerEnergyUsed, 0)
|
for refreshType in RefreshTypeList:
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineRefreshCount % refreshType, 0)
|
SyncPlayerMineAreaInfo(curPlayer)
|
return
|
|
def GetWorkerTotal(curPlayer):
|
## »ñÈ¡Íæ¼Ò¹¤ÈË×ÜÊý
|
initCount = 0 # ÆðʼĬÈϹ¤ÈËÊý
|
employCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineWorkerCount)
|
return initCount + employCount
|
|
def GetWorkerState(curPlayer):
|
## »ñÈ¡¹¤ÈËÆ£ÀÍ״̬
|
workerStateEnergyList = IpyGameDataPY.GetFuncEvalCfg("MineAreaWorker", 1) # ¹¤ÈËÆ£ÀÍ״̬ÌåÁ¦Áбí [³äÅæÌåÁ¦, Õý³£, ÐéÈõ, ¿Ý½ß]£¬×ÜÌåÁ¦=ËùÓÐÌåÁ¦Ïà¼Ó
|
funcEnergy = 0 # ÆäËû¹¦ÄÜÔö¼ÓµÄÌåÁ¦
|
stateEnergy = 0
|
energyUsed = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineWorkerEnergyUsed)
|
for state, energy in enumerate(workerStateEnergyList):
|
if state == 0:
|
energy += funcEnergy
|
stateEnergy += energy
|
if energyUsed < stateEnergy:
|
return state
|
return -1
|
|
#// B0 30 ¸£µØÎïÆ·À #tagCMMineItemPull
|
#
|
#struct tagCMMineItemPull
|
#{
|
# tagHead Head;
|
# DWORD PlayerID; // ¸£µØËùÊôÍæ¼ÒID£¬0ĬÈÏ×Ô¼º
|
# BYTE ItemIndex; // ÎïÆ·ËùÔÚλÖÃË÷Òý0~n
|
# BYTE WorkerCount; // ÉϹ¤ÈËÈËÊý
|
# BYTE IsPreview; // ÊÇ·ñÔ¤ÀÀ£»0-Ö±½ÓÀ£¬1-Ô¤ÀÀ´ó¸Åʱ¼ä
|
#};
|
def OnMineItemPull(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
areaPlayerID = clientData.PlayerID
|
itemIndex = clientData.ItemIndex
|
workerCount = clientData.WorkerCount
|
isPreview = clientData.IsPreview
|
if not areaPlayerID:
|
areaPlayerID = curPlayer.GetPlayerID()
|
|
workerTotal = GetWorkerTotal(curPlayer)
|
workerState = GetWorkerState(curPlayer)
|
if workerCount > 0 and workerState < 0:
|
energyUsed = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineWorkerEnergyUsed)
|
GameWorld.DebugLog("¸£µØÆ£ÀÍÖµÒÑÂú£¬ÎÞ·¨ÔÙÀÎïÆ·! energyUsed=%s" % energyUsed)
|
return
|
|
SendToGameServer_MineArea(curPlayer, "Pull", [areaPlayerID, itemIndex, workerCount, workerState, workerTotal, isPreview])
|
return
|
|
#// B0 31 ¸£µØÎïÆ·Ë¢Ð #tagCMMineItemRefresh
|
#
|
#struct tagCMMineItemRefresh
|
#
|
#{
|
# tagHead Head;
|
# BYTE RefreshType; // Ë¢ÐÂÀàÐÍ£º0-×Ô¼ºÎïÆ·ÆÕͨˢУ»1-×Ô¼ºÎïÆ·³¬¼¶Ë¢Ð£»2-ÖÜΧ¸£µØÍæ¼ÒÁбíË¢ÐÂ
|
#};
|
def OnMineItemRefresh(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
playerID = curPlayer.GetPlayerID()
|
refreshType = clientData.RefreshType
|
|
moneyType, moneyValue = 0, 0
|
moneyDict = IpyGameDataPY.GetFuncEvalCfg("MineAreaRefresh", 1, {})
|
if str(refreshType) in moneyDict:
|
moneyType, moneyValue = moneyDict[str(refreshType)]
|
if not PlayerControl.HaveMoney(curPlayer, moneyType, moneyValue):
|
return
|
|
costItemID, costItemCount = 0, 0
|
refreshMaxDict = IpyGameDataPY.GetFuncEvalCfg("MineAreaRefresh", 2, {})
|
refreshCountMax = refreshMaxDict.get(str(refreshType), 0)
|
refreshCountNow = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineRefreshCount % refreshType)
|
if refreshCountMax and refreshCountNow >= refreshCountMax:
|
if refreshType == RefreshType_Super:
|
employCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineWorkerCount)
|
employMax = len(IpyGameDataPY.GetFuncEvalCfg("MineAreaWorker", 3))
|
if employCount < employMax:
|
GameWorld.DebugLog("¸£µØ¹ÍÓ¶¹¤ÈËÊýδ´ïµ½ÉÏÏÞ£¬²»ÄÜʹÓùÍÓ¶µÀ¾ß½øÐг¬¼¶Ë¢ÐÂ! employCount=%s < %s" % (employCount, employMax), playerID)
|
return
|
costItemID = IpyGameDataPY.GetFuncCfg("MineAreaWorker", 2)
|
costItemCount = IpyGameDataPY.GetFuncCfg("MineAreaRefresh", 3)
|
costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID, costItemCount)
|
lackCnt = costItemCount - bindCnt - unBindCnt
|
if lackCnt > 0:
|
GameWorld.DebugLog("¸£µØ¹ÍÓ¶¹¤È˵À¾ß²»×㣬ÎÞ·¨³¬¼¶Ë¢ÐÂ! costItemID=%s,costItemCount=%s,bindCnt=%s,unBindCnt=%s,lackCnt=%s"
|
% (costItemID, costItemCount, bindCnt, unBindCnt, lackCnt))
|
return
|
else:
|
GameWorld.DebugLog("¸£µØÎïÆ·Ë¢Ð´ÎÊýÒÑ´ï½ñÈÕÉÏÏÞ! refreshType=%s,refreshCountNow=%s >= %s" % (refreshType, refreshCountNow, refreshCountMax), playerID)
|
return
|
|
GameWorld.DebugLog("¸£µØË¢ÐÂ: refreshType=%s,refreshCountNow=%s,moneyType=%s,moneyValue=%s,costItemID=%s,costItemCount=%s"
|
% (refreshType, refreshCountNow, moneyType, moneyValue, costItemID, costItemCount), playerID)
|
if moneyType and moneyValue:
|
PlayerControl.PayMoney(curPlayer, moneyType, moneyValue, "MineItemRefresh")
|
|
if costItemID and costItemCount:
|
delCnt = costItemCount
|
ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, delCnt, "MineItemRefresh")
|
|
if refreshCountMax and refreshCountNow < refreshCountMax:
|
refreshCountUpd = refreshCountNow + 1
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineRefreshCount % refreshType, refreshCountUpd)
|
SyncPlayerMineAreaInfo(curPlayer)
|
|
if refreshType == RefreshType_Rob:
|
SendToGameServer_MineArea(curPlayer, "MineRobRefresh", [])
|
else:
|
isSuper = 1 if refreshType == RefreshType_Super else 0
|
SendToGameServer_MineArea(curPlayer, "MineItemRefresh", [playerID, isSuper])
|
return
|
|
#// B0 32 ¸£µØ¹¤È˹ÍÓ¶ #tagCMMineWorkerEmploy
|
#
|
#struct tagCMMineWorkerEmploy
|
#
|
#{
|
# tagHead Head;
|
#};
|
def OnMineWorkerEmploy(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
playerID = curPlayer.GetPlayerID()
|
employCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineWorkerCount)
|
|
costItemCountList = IpyGameDataPY.GetFuncEvalCfg("MineAreaWorker", 3)
|
if employCount >= len(costItemCountList):
|
GameWorld.DebugLog("ÒÑ´ïµ½¸£µØ¹ÍÓ¶¹¤ÈËÊýÉÏÏÞ! employCount=%s" % employCount)
|
return
|
costItemCount = costItemCountList[employCount]
|
costItemID = IpyGameDataPY.GetFuncCfg("MineAreaWorker", 2)
|
if not costItemID:
|
return
|
|
# Ö§³ÖÅä0²»ÏûºÄ¸öÊý
|
if costItemCount > 0:
|
costItemIndexList, bindCnt, unBindCnt = ItemCommon.GetPackItemBindStateIndexInfo(curPlayer, costItemID, costItemCount)
|
lackCnt = costItemCount - bindCnt - unBindCnt
|
if lackCnt > 0:
|
GameWorld.DebugLog("¸£µØ¹ÍÓ¶¹¤È˵À¾ß²»×ã! costItemID=%s,costItemCount=%s,bindCnt=%s,unBindCnt=%s,lackCnt=%s,ÒѹÍÓ¶Êý=%s"
|
% (costItemID, costItemCount, bindCnt, unBindCnt, lackCnt, employCount))
|
return
|
delCnt = costItemCount
|
ItemCommon.DelCostItemByBind(curPlayer, costItemIndexList, bindCnt, unBindCnt, delCnt, "MineWorkerEmploy")
|
|
updEmployCount = employCount + 1
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineWorkerCount, updEmployCount)
|
SyncPlayerMineAreaInfo(curPlayer)
|
GameWorld.DebugLog("¸£µØ¹ÍÓ¶¹¤ÈË! costItemID=%s,costItemCount=%s,updEmployCount=%s" % (costItemID, costItemCount, updEmployCount), playerID)
|
return
|
|
def SendToGameServer_MineArea(curPlayer, msgType, dataMsg=""):
|
playerID = curPlayer.GetPlayerID()
|
msgList = str([msgType, dataMsg])
|
GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(playerID, 0, 0, "MineArea", msgList, len(msgList))
|
GameWorld.Log("¸£µØ·¢ËÍGameServer: %s, %s" % (msgType, dataMsg), playerID)
|
return
|
|
def GameServer_MineArea_DoResult(curPlayer, msgData):
|
|
msgType, dataMsg, _ = msgData
|
|
## ½áËã½±Àø
|
if msgType == "MineAreaAwardGet":
|
awardInfoList = dataMsg[0]
|
__DoGiveMineAreaAward(curPlayer, awardInfoList)
|
|
## È¡ÏûÀÈ¡ £¨°üº¬Ö÷¶¯ »ò ±»¶¯Çý¸Ï£©
|
elif msgType == "MineAreaCancelPull":
|
areaPlayerID, reason = dataMsg
|
__OnMineAreaPullEnd(curPlayer, areaPlayerID, reason)
|
|
## ÀÈ¡
|
elif msgType == "Pull":
|
areaPlayerID = dataMsg[0]
|
isRob = (areaPlayerID and curPlayer.GetPlayerID() != areaPlayerID)
|
EventShell.EventResponse_MineAreaPull(curPlayer, isRob)
|
return
|
|
def __DoGiveMineAreaAward(curPlayer, awardInfoList):
|
|
playerID = curPlayer.GetPlayerID()
|
energyUsed = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineWorkerEnergyUsed)
|
addEnergyUsed = 0
|
awardItemDict = {}
|
robCount = 0 # ÇÀ½ÙÊý
|
selfCount = 0 # ×Ô¼ºÊýÁ¿
|
GUIDList = []
|
for awardInfo in awardInfoList:
|
GUID, awardTime, workerCount, areaPlayerID, mineID, itemLV, itemID, itemCount = awardInfo
|
isToday = GameWorld.CheckTimeIsSameServerDayEx(awardTime)
|
if isToday:
|
addEnergyUsed += workerCount
|
if playerID != areaPlayerID:
|
robCount += 1
|
else:
|
selfCount += 1
|
awardItemDict[itemID] = awardItemDict.get(itemID, 0) + itemCount
|
GUIDList.append(GUID)
|
GameWorld.DebugLog("½áË㸣µØ½±Àø! areaPlayerID=%s,mineID=%s,itemLV=%s,itemID=%s,itemCount=%s,awardTime=%s,isToday=%s,workerCount=%s %s"
|
% (areaPlayerID, mineID, itemLV, itemID, itemCount, GameWorld.ChangeTimeNumToStr(awardTime), isToday, workerCount, GUID), playerID)
|
__OnMineAreaPullEnd(curPlayer, areaPlayerID, "OK")
|
|
if addEnergyUsed:
|
energyUsed += addEnergyUsed
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineWorkerEnergyUsed, energyUsed)
|
GameWorld.DebugLog(" Ôö¼Ó¸£µØ¹¤ÈËÒÑÓþ«Á¦! addEnergyUsed=%s,updEnergyUsed=%s" % (addEnergyUsed, energyUsed), playerID)
|
|
PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_MineAreaCnt, selfCount + robCount)
|
if selfCount:
|
PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_MineAreaSelfCnt, selfCount)
|
if robCount:
|
PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_MineAreaRobCnt, robCount)
|
OnAddMineTreasureProgress(curPlayer, robCount, False)
|
|
SyncPlayerMineAreaInfo(curPlayer)
|
|
awardItemList = [[itemID, itemCount, 0] for itemID, itemCount in awardItemDict.items()]
|
ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, None, ["MineAreaAward", False, {}])
|
|
SendToGameServer_MineArea(curPlayer, "MineAreaAwardGetOK", [GUIDList, awardItemList])
|
return
|
|
def __OnMineAreaPullEnd(curPlayer, areaPlayerID, reason):
|
## ÀÈ¡½áÊø¶îÍâ´¦Àí£¬ °üº¬ÀÍꡢȡÏû¡¢±»Çý¸ÏµÈ
|
GameWorld.DebugLog("__OnMineAreaPullEnd: areaPlayerID=%s, reason=%s" % (areaPlayerID, reason))
|
if curPlayer.GetPlayerID() == areaPlayerID:
|
PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_MineAreaEndSelf)
|
else:
|
PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_MineAreaEndOther)
|
return
|
|
#// B0 35 ¸£µØ¹Ü¼ÒÃâ·ÑÊÔÓà #tagCMMineHouseKeeperFreeUse
|
#
|
#struct tagCMMineHouseKeeperFreeUse
|
#{
|
# tagHead Head;
|
#};
|
def OnMineHouseKeeperFreeUse(index, clientData, tick):
|
curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)
|
OnActMineHousekeeper(curPlayer, 0)
|
return
|
|
def OnMineTreasureByCTGID(curPlayer, ctgID):
|
## ³äÖµ¼¤»î¾Û±¦Åè
|
treasureCTGIDList = IpyGameDataPY.GetFuncEvalCfg("MineAreaTreasure", 1)
|
for treasureType, ctgIDList in enumerate(treasureCTGIDList):
|
if not ctgIDList or ctgID not in ctgIDList: # Åä¿ÕÁбíµÄĬÈϼ¤»î
|
continue
|
state = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineTreasureState)
|
if state&pow(2, treasureType):
|
break
|
updState = state|pow(2, treasureType)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineTreasureState, updState)
|
SyncPlayerMineAreaInfo(curPlayer)
|
GameWorld.Log("¼¤»î¸£µØ¾Û±¦Åè: treasureType=%s,updState=%s" % (treasureType, updState), curPlayer.GetPlayerID())
|
break
|
|
keeperCTGIDList = IpyGameDataPY.GetFuncEvalCfg("MineAreaHousekeeper", 3)
|
for keeperIndex, ctgIDList in enumerate(keeperCTGIDList, 1):
|
if ctgID in ctgIDList:
|
OnActMineHousekeeper(curPlayer, keeperIndex)
|
break
|
|
return
|
|
def OnAddMineTreasureProgress(curPlayer, robCount, isNotify=True):
|
## Ôö¼Ó¾Û±¦Åè½ø¶È
|
# @param robCount: ÇÀ¶áÎïÆ·Êý
|
if robCount <= 0:
|
return
|
|
playerID = curPlayer.GetPlayerID()
|
treasureCTGIDList = IpyGameDataPY.GetFuncEvalCfg("MineAreaTreasure", 1)
|
treasureAddProgressList = IpyGameDataPY.GetFuncEvalCfg("MineAreaTreasure", 2)
|
treasureState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineTreasureState)
|
for treasureType, addProgressSet in enumerate(treasureAddProgressList):
|
ctgIDList = treasureCTGIDList[treasureType]
|
isActivite = 1 if (not ctgIDList or treasureState&pow(2, treasureType)) else 0
|
if not isActivite:
|
continue
|
curProgress = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineTreasureProgess % treasureType)
|
if curProgress >= MineTreasureProgressMax:
|
continue
|
addProgress = addProgressSet * robCount
|
updProgress = min(curProgress + addProgress, MineTreasureProgressMax)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineTreasureProgess % treasureType, updProgress)
|
GameWorld.DebugLog(" Ôö¼Ó¸£µØ¾Û±¦Åè½ø¶È: robCount=%s,treasureType=%s,curProgress=%s,addProgress=%s,updProgress=%s"
|
% (robCount, treasureType, curProgress, addProgress, updProgress), playerID)
|
|
if isNotify:
|
SyncPlayerMineAreaInfo(curPlayer)
|
return
|
|
def GetMineTreasureAward(curPlayer, treasureType):
|
## ÁìÈ¡¾Û±¦Åè½±Àø
|
|
playerID = curPlayer.GetPlayerID()
|
|
treasureAward = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineTreasureAward)
|
if treasureAward&pow(2, treasureType):
|
GameWorld.DebugLog("¸£µØ¾Û±¦Åè½±ÀøÒÑÁìÈ¡¹ý! treasureType=%s,treasureAward=%s" % (treasureType, treasureAward), playerID)
|
return
|
|
curProgress = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineTreasureProgess % treasureType)
|
if curProgress < MineTreasureProgressMax:
|
GameWorld.DebugLog("¸£µØ¾Û±¦Åè½ø¶ÈδÂú£¬ÎÞ·¨Áì½±! treasureType=%s,curProgress=%s" % (treasureType, curProgress), playerID)
|
return
|
|
treasureAwardList = IpyGameDataPY.GetFuncEvalCfg("MineAreaTreasure", 3)
|
if treasureType >= len(treasureAwardList):
|
return
|
awardItemList = treasureAwardList[treasureType]
|
|
if not ItemControler.CheckPackSpaceEnough(curPlayer, awardItemList):
|
return
|
|
updAward = treasureAward|pow(2, treasureType)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineTreasureAward, updAward)
|
SyncPlayerMineAreaInfo(curPlayer)
|
|
for itemID, itemCount, isAuctionItem in awardItemList:
|
ItemControler.GivePlayerItem(curPlayer, itemID, itemCount, isAuctionItem, [IPY_GameWorld.rptItem])
|
|
GameWorld.DebugLog("¸£µØ¾Û±¦ÅèÁì½±! treasureType=%s,updAward=%s,awardItemList=%s" % (treasureType, updAward, awardItemList), playerID)
|
return
|
|
def OnActMineHousekeeper(curPlayer, keeperIndex):
|
## ¼¤»î/Ôö¼Ó×Ô¶¯¹Ü¼Òʱ³¤
|
# @param keeperIndex: ¹Ü¼ÒµµÎ»Ë÷Òý£¬0-Ãâ·Ñ£¬>0-¸¶·Ñµµ
|
|
playerID = curPlayer.GetPlayerID()
|
endTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineHousekeeperEndTime)
|
if keeperIndex == 0:
|
if endTime:
|
GameWorld.DebugLog("¸£µØÃâ·Ñ¹Ü¼ÒÒÑÁìÈ¡¹ý£¡", playerID)
|
return
|
|
openServerDayLimit = IpyGameDataPY.GetFuncCfg("MineAreaHousekeeper", 1)
|
if openServerDayLimit:
|
openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1
|
if openServerDay <= openServerDayLimit:
|
GameWorld.ErrLog("¿ª·þÌìδµ½£¬ÎÞ·¨Ê¹Óø£µØ¹Ü¼Ò£¡ keeperIndex=%s,openServerDay=%s <= %s"
|
% (keeperIndex, openServerDay, openServerDayLimit), playerID)
|
return
|
|
keeperDaysList = IpyGameDataPY.GetFuncEvalCfg("MineAreaHousekeeper", 2)
|
if keeperIndex < 0 or keeperIndex >= len(keeperDaysList):
|
return
|
addDays = keeperDaysList[keeperIndex]
|
addSeconds = addDays * 24 * 3600
|
curTime = int(time.time())
|
|
endTimeStr = GameWorld.ChangeTimeNumToStr(endTime) if endTime else ""
|
GameWorld.DebugLog("¼¤»î¸£µØ¹Ü¼Ò: keeperIndex=%s,addDays=%s(%s)" % (keeperIndex, addDays, addSeconds), playerID)
|
GameWorld.DebugLog(" ¹Ü¼Òµ½ÆÚʱ¼ä: endTime=%s, %s" % (endTime, endTimeStr), playerID)
|
if not endTime:
|
updEndTime = curTime + addSeconds
|
GameWorld.DebugLog(" ¼¤»î¹Ü¼Ò", playerID)
|
elif curTime >= endTime:
|
updEndTime = curTime + addSeconds
|
GameWorld.DebugLog(" ÒѹýÆÚ£¬ÖØÐ¼¤»î¹Ü¼Ò", playerID)
|
else:
|
updEndTime = endTime + addSeconds
|
GameWorld.DebugLog(" Ðø·Ñ¹Ü¼Òʱ³¤", playerID)
|
|
GameWorld.DebugLog(" ¸üйܼÒʱ³¤: updEndTime=%s, %s" % (updEndTime, GameWorld.ChangeTimeNumToStr(updEndTime)), playerID)
|
PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_MineHousekeeperEndTime, updEndTime)
|
SyncPlayerMineAreaInfo(curPlayer)
|
return
|
|
def SyncPlayerMineAreaInfo(curPlayer):
|
clientPack = ChPyNetSendPack.tagMCPlayerMineAreaInfo()
|
clientPack.WorkerCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineWorkerCount)
|
clientPack.EnergyUsed = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineWorkerEnergyUsed)
|
clientPack.HousekeeperEndTime = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineHousekeeperEndTime)
|
clientPack.HelpAwardCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineHelpAwardCount)
|
clientPack.RefreshCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineRefreshCount % RefreshType_Comm)
|
clientPack.RefreshCountSuper = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineRefreshCount % RefreshType_Super)
|
clientPack.RefreshCountRob = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineRefreshCount % RefreshType_Rob)
|
|
treasureState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineTreasureState)
|
treasureAward = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineTreasureAward)
|
treasureCTGIDList = IpyGameDataPY.GetFuncEvalCfg("MineAreaTreasure", 1)
|
clientPack.TreasureCount = len(treasureCTGIDList)
|
clientPack.TreasureState = [0] * clientPack.TreasureCount
|
clientPack.TreasureAward = [0] * clientPack.TreasureCount
|
clientPack.TreasureProgress = [0] * clientPack.TreasureCount
|
for treasureType, ctgIDList in enumerate(treasureCTGIDList):
|
isActivite = 1 if (not ctgIDList or treasureState&pow(2, treasureType)) else 0
|
clientPack.TreasureState[treasureType] = isActivite
|
clientPack.TreasureAward[treasureType] = 1 if treasureAward&pow(2, treasureType) else 0
|
clientPack.TreasureProgress[treasureType] = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_MineTreasureProgess % treasureType)
|
|
NetPackCommon.SendFakePack(curPlayer, clientPack)
|
return
|