#!/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