#!/usr/bin/python # -*- coding: GBK -*- #------------------------------------------------------------------------------- # ##@package Player.PlayerActBossTrial # # @todo:bossÀúÁ· # @author hxp # @date 2023-10-20 # @version 1.0 # # ÏêϸÃèÊö: bossÀúÁ· # #------------------------------------------------------------------------------- #"""Version = 2023-10-20 16:00""" #------------------------------------------------------------------------------- import PyGameData import ItemCommon import ShareDefine import PlayerControl import IpyGameDataPY import ChPyNetSendPack import CrossRealmPlayer import FunctionNPCCommon import PlayerBillboard import ItemControler import NetPackCommon import IPY_GameWorld import GameWorld import ChConfig def OnMixFirstLogin(curPlayer): for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_BossTrial, {}).values(): actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0) if not actInfo.get(ShareDefine.ActKey_State): continue submitCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitCount % actNum) if not submitCount: continue GameWorld.Log("BossÀúÁ·ºÏ·þÊ×µÇͬ²½Æ¾Ö¤°ñµ¥: actNum=%s,submitCount=%s" % (actNum, submitCount), curPlayer.GetPlayerID()) PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_BossTrialSubmit, submitCount, autoSort=True) break return def OnPlayerLogin(curPlayer): for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_BossTrial, {}).values(): actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0) isReset = __CheckPlayerBossTrialAction(curPlayer, actNum) # »î¶¯ÖÐͬ²½»î¶¯ÐÅÏ¢ if not isReset and actInfo.get(ShareDefine.ActKey_State): Sync_BossTrialActionInfo(curPlayer, actNum) Sync_BossTrialPlayerInfo(curPlayer, actNum) if not __CheckPlayerCrossActBossTrial(curPlayer): Sync_CrossActBossTrialActionInfo(curPlayer) return def PlayerOnDay(curPlayer, onEventType): for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_BossTrial, {}).values(): if not actInfo.get(ShareDefine.ActKey_State): continue actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0) cfgID = actInfo.get(ShareDefine.ActKey_CfgID) ipyData = IpyGameDataPY.GetIpyGameData("ActBossTrial", cfgID) if not ipyData: continue submitAwardResetType = ipyData.GetSubmitAwardResetType() if not submitAwardResetType: continue if onEventType != submitAwardResetType: continue GameWorld.DebugLog("bossÀúÁ·»î¶¯ÖØÖÃÌá½»½±Àø: actNum=%s,cfgID=%s,submitAwardResetType=%s" % (actNum, cfgID, submitAwardResetType), curPlayer.GetPlayerID()) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialSubmitAwardCount % actNum, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialSubmitAward % actNum, 0) Sync_BossTrialPlayerInfo(curPlayer, actNum) return def RefreshBossTrialActionInfo(actNum): ## ÊÕµ½GameServerͬ²½µÄ»î¶¯ÐÅÏ¢£¬Ë¢Ð»ÐÅÏ¢ playerManager = GameWorld.GetPlayerManager() for index in xrange(playerManager.GetPlayerCount()): curPlayer = playerManager.GetPlayerByIndex(index) if not GameWorld.IsNormalPlayer(curPlayer): continue __CheckPlayerBossTrialAction(curPlayer, actNum) return def __CheckPlayerBossTrialAction(curPlayer, actNum): ## ¼ì²éÍæ»î¶¯Êý¾ÝÐÅÏ¢ playerID = curPlayer.GetPlayerID() actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_BossTrial, actNum) actID = actInfo.get(ShareDefine.ActKey_ID, 0) state = actInfo.get(ShareDefine.ActKey_State, 0) playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialID % actNum) # Íæ¼ÒÉíÉϵĻID __CheckActItemRecycle(curPlayer) # ±ØÐëÔڻID¸üÐÂ֮ǰ´¦Àí # »î¶¯ID ÏàͬµÄ»°²»´¦Àí if actID == playerActID: GameWorld.DebugLog("BossÀúÁ·»î¶¯ID²»±ä£¬²»´¦Àí£¡ actID=%s" % actID, curPlayer.GetPlayerID()) return GameWorld.DebugLog("BossÀúÁ·»î¶¯ÖØÖÃ! actID=%s,playerActID=%s,state=%s" % (actID, playerActID, state), playerID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialID % actNum, actID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialSubmitCount % actNum, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialSubmitAwardCount % actNum, 0) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialSubmitAward % actNum, 0) if state: cfgID = actInfo.get(ShareDefine.ActKey_CfgID) ipyData = IpyGameDataPY.GetIpyGameData("ActBossTrial", cfgID) if ipyData and ipyData.GetActShopType(): FunctionNPCCommon.ResetShopItemBuyCountByShopType(curPlayer, [ipyData.GetActShopType()]) Sync_BossTrialActionInfo(curPlayer, actNum) Sync_BossTrialPlayerInfo(curPlayer, actNum) return True def RefreshCrossActBossTrialInfo(): ## ÊÕµ½GameServerͬ²½µÄ»î¶¯ÐÅÏ¢£¬Ë¢Ð»ÐÅÏ¢ playerManager = GameWorld.GetPlayerManager() for index in xrange(playerManager.GetPlayerCount()): curPlayer = playerManager.GetPlayerByIndex(index) if not GameWorld.IsNormalPlayer(curPlayer): continue __CheckPlayerCrossActBossTrial(curPlayer) return def __CheckPlayerCrossActBossTrial(curPlayer): playerID = curPlayer.GetPlayerID() actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_BossTrial) cfgID = actInfo.get(ShareDefine.ActKey_CfgID, 0) actID = actInfo.get(ShareDefine.ActKey_ID, 0) state = actInfo.get(ShareDefine.ActKey_State, 0) dayIndex = actInfo.get(ShareDefine.ActKey_DayIndex, 0) playerActID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_CA_BossTrialID) # Íæ¼ÒÉíÉϵĻID __CheckActItemRecycle(curPlayer) # ±ØÐëÔڻID¸üÐÂ֮ǰ´¦Àí # »î¶¯ID ÏàͬµÄ»°²»´¦Àí if actID == playerActID: GameWorld.DebugLog("¿ç·þBossÀúÁ·»î¶¯ID²»±ä£¬²»´¦Àí£¡cfgID=%s,dayIndex=%s,actID=%s" % (cfgID, dayIndex, actID), playerID) return GameWorld.DebugLog("¿ç·þBossÀúÁ·»î¶¯ÖØÖÃ! cfgID=%s,actID=%s,playerActID=%s,state=%s" % (cfgID, actID, playerActID, state), playerID) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_CA_BossTrialID, actID) if not state: CrossRealmPlayer.NotifyCrossActEnd(curPlayer, ShareDefine.CrossActName_BossTrial) Sync_CrossActBossTrialActionInfo(curPlayer) return True def __CheckActItemRecycle(curPlayer): ## ¼ì²é»î¶¯ÎïÆ·»ØÊÕ£¬Íæ¼ÒËùÓвÎÓë¹ýµÄ»î¶¯ID¶¼½áÊøºó²Å´¦Àí if IsInActBossTrial(curPlayer): # »¹ÓлÖУ¬±ê¼Ç´ý»ØÊÕ£¬Èç¹ûÒ»Ö±Óн»ÌæµÄ»î¶¯¿ªÆôÖУ¬Ôò¸Ã״̬һֱΪµÈ´ý»ØÊÕ״̬ PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialRecycleState, 1) return playerID = curPlayer.GetPlayerID() recycleState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialRecycleState) if not recycleState: # ÕâÑù¿ÉÒÔ¼æÈÝ»ØÊÕ¹¦ÄÜÉÏÏߺó£¬È·±£ÀÏÍæ¼Ò֮ǰÍ͵ĻÎïÆ·²»»á±»»ØÊÕ£¬ÖÁÉÙ¿ÉÒÔ²ÎÓëÒ»´Î GameWorld.DebugLog("BossÀúÁ·»î¶¯Íæ¼ÒûÓбê¼Ç¹ýµÈ´ý»ØÊջÎïÆ·£¬²»´¦Àí!", playerID) return if recycleState == 2: # ÒòΪ½áÊø²ÎÓë¼°»î¶¯½áÊø¶¼»á´¥·¢¼ì²é£¬ËùÒÔÐèÒª±ê¼ÇÒÑ´¦Àí¹ý£¬·ÀÖ¹Ò»´Î»î¶¯¶à´Î»ØÊÕ GameWorld.DebugLog("BossÀúÁ·»î¶¯ÒÑ»ØÊÕ¹ý»î¶¯ÎïÆ·!", playerID) return actItemID = IpyGameDataPY.GetFuncCfg("BossTrial", 1) clearCountDict = ItemControler.ClearItemID(curPlayer, [actItemID]) clearCount = clearCountDict.get(actItemID, 0) GameWorld.Log("BossÀúÁ·»î¶¯»ØÊջÎïÆ·! actItemID=%s,clearCount=%s" % (actItemID, clearCount), playerID) if clearCount > 0: addMoney = clearCount PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_BossTrial, addMoney, "BossTrialRecycle") paramList = [clearCount, actItemID, actItemID, addMoney] PlayerControl.SendMailByKey("BossTrialRecycle", [playerID], [], paramList) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialRecycleState, 2) return def CheckActItemAutoTransform(curPlayer, tagItem, itemID, tagItemCount): ## ¼ì²é»î¶¯ÎïÆ·×Ô¶¯×ª»¯Îª¶ÔÓ¦»ý·Ö£¬ÎïÆ·ÊµÀýÍⲿͳһÇåÀí if itemID != IpyGameDataPY.GetFuncCfg("BossTrial", 1): return False if IsInActBossTrial(curPlayer): return False GameWorld.DebugLog("BossÀúÁ·»î¶¯·Ç²ÎÓëÖУ¬×Ô¶¯»ØÊÕ»ñµÃµÄ»î¶¯ÎïÆ·! itemID=%s,itemCount=%s" % (itemID, tagItemCount)) PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_BossTrial, tagItemCount, "BossTrialRecycle") return True def IsInActBossTrial(curPlayer): ## Íæ¼ÒÊÇ·ñÓÐÕýÔÚ½øÐÐÖл£¬²»º¬²ÎÓë½áÊø½×¶Î return PlayerControl.IsInOperationAction(curPlayer, ShareDefine.OperationActionName_BossTrial, ChConfig.Def_PDict_BossTrialID, ShareDefine.CrossActName_BossTrial, ChConfig.Def_PDict_CA_BossTrialID) def SendToGameServer_BossTrial(curPlayer, msgType, dataMsg=""): playerID = curPlayer.GetPlayerID() msgList = str([msgType, dataMsg]) GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(playerID, 0, 0, "BossTrial", msgList, len(msgList)) GameWorld.Log("BossÀúÁ··¢ËÍGameServer: %s, %s" % (msgType, dataMsg), playerID) return #// AA 23 BossÀúÁ·Ìύƾ֤ #tagCMActBossTrialSubmit # #struct tagCMActBossTrialSubmit #{ # tagHead Head; # BYTE ActNum; //»î¶¯±àºÅ # WORD SubmitCount; //Ìύƾ֤¸öÊý #}; def OnActBossTrialSubmit(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) actNum = clientData.ActNum submitCount = clientData.SubmitCount playerID = curPlayer.GetPlayerID() actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_BossTrial, actNum) if not actInfo.get(ShareDefine.ActKey_State): GameWorld.DebugLog("BossÀúÁ··Ç»î¶¯ÖÐ: actNum=%s" % actNum, playerID) return crossActInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_BossTrial) if crossActInfo.get(ShareDefine.ActKey_State, 0): if crossActInfo.get(ShareDefine.ActKey_StateJoin) != ShareDefine.ActStateJoin_Start: GameWorld.Log("¿ç·þBossÀúÁ··Ç²ÎÓë»î¶¯ÖÐ: actNum=%s" % actNum, playerID) return else: if actInfo.get(ShareDefine.ActKey_StateJoin) != ShareDefine.ActStateJoin_Start: GameWorld.Log("BossÀúÁ··Ç²ÎÓë»î¶¯ÖÐ: actNum=%s" % actNum, playerID) return itemID = IpyGameDataPY.GetFuncCfg("BossTrial", 1) itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem) lackItemDict, delInfoDict = ItemCommon.GetCostItemIndexList({itemID:submitCount}, itemPack) if lackItemDict: GameWorld.DebugLog("BossÀúÁ·Ìύƾ֤ÎïÆ·²»×㣡 actNum=%s,itemID=%s,submitCount=%s,lackItemDict=%s" % (actNum, itemID, submitCount, lackItemDict), playerID) return ItemCommon.DelCostItem(curPlayer, itemPack, delInfoDict, "BossTrialSubmit") submitAwardCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitAwardCount % actNum) updSubmitAwardCount = submitAwardCount + submitCount PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialSubmitAwardCount % actNum, updSubmitAwardCount) nowSubmitCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitCount % actNum) updSubmitCount = nowSubmitCount + submitCount PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialSubmitCount % actNum, updSubmitCount) GameWorld.DebugLog("BossÀúÁ·Ìύƾ֤: actNum=%s,itemID=%s,submitCount=%s,updSubmitCount=%s,updSubmitAwardCount=%s" % (actNum, itemID, submitCount, updSubmitCount, updSubmitAwardCount), playerID) PlayerControl.GiveMoney(curPlayer, ShareDefine.TYPE_Price_BossTrial, submitCount, "BossTrialSubmit") PlayerBillboard.UpdatePlayerBillboard(curPlayer, ShareDefine.Def_BT_BossTrialSubmit, updSubmitCount, autoSort=True) Sync_BossTrialPlayerInfo(curPlayer, actNum) SendToGameServer_BossTrial(curPlayer, "BossTrialSubmit", [submitCount, updSubmitCount]) return #// AA 24 BossÀúÁ·Áì½± #tagCMActBossTrialGetAward # #struct tagCMActBossTrialGetAward #{ # tagHead Head; # BYTE ActNum; //»î¶¯±àºÅ # WORD SubmitCount; //Áìȡƾ֤¸öÊý¶ÔÓ¦½±Àø #}; def OnActBossTrialGetAward(index, clientData, tick): curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index) actNum = clientData.ActNum submitCount = clientData.SubmitCount playerID = curPlayer.GetPlayerID() actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_BossTrial, actNum) if not actInfo.get(ShareDefine.ActKey_State): GameWorld.DebugLog("BossÀúÁ··Ç»î¶¯ÖÐ: actNum=%s" % actNum, playerID) return cfgID = actInfo.get(ShareDefine.ActKey_CfgID) ipyData = IpyGameDataPY.GetIpyGameData("ActBossTrial", cfgID) if not ipyData: return submitItemAwardInfo = ipyData.GetSubmitItemAwardInfo() if submitCount not in submitItemAwardInfo: GameWorld.DebugLog("BossÀúÁ·Ã»Óиý±Àø: actNum=%s,submitCount=%s not in %s" % (actNum, submitCount, submitItemAwardInfo.keys()), playerID) return recordIndex, awardItemList = submitItemAwardInfo[submitCount] nowSubmitCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitAwardCount % actNum) if nowSubmitCount < submitCount: GameWorld.DebugLog("BossÀúÁ·Ìύƾ֤¸öÊý²»×㣬ÎÞ·¨Áì½±: actNum=%s,nowSubmitCount=%s < %s" % (actNum, nowSubmitCount, submitCount), playerID) return awardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitAward % actNum) if awardState & pow(2, recordIndex): GameWorld.DebugLog("BossÀúÁ·Áì½±ÒÑÁìÈ¡¹ý: actNum=%s,submitCount=%s,recordIndex=%s,awardState=%s" % (actNum, submitCount, recordIndex, awardState), playerID) return updAwardState = awardState | pow(2, recordIndex) PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_BossTrialSubmitAward % actNum, updAwardState) GameWorld.DebugLog("BossÀúÁ·Áì½±: actNum=%s,submitCount=%s,recordIndex=%s,awardState=%s,updAwardState=%s" % (actNum, submitCount, recordIndex, awardState, updAwardState), playerID) ItemControler.GivePlayerItemOrMail(curPlayer, awardItemList, event=["BossTrial", False, {}]) Sync_BossTrialPlayerInfo(curPlayer, actNum) return def GetBossTrialDropItemIDList(curPlayer, limitIndex): bossIndexDropRateDict = IpyGameDataPY.GetFuncEvalCfg("BossTrial", 4) if limitIndex not in bossIndexDropRateDict: return dropCountRateList = bossIndexDropRateDict[limitIndex] dropCountTotal = 0 itemID = IpyGameDataPY.GetFuncCfg("BossTrial", 1) if not GameWorld.IsCrossServer(): for actInfo in PyGameData.g_operationActionDict.get(ShareDefine.OperationActionName_BossTrial, {}).values(): actNum = actInfo.get(ShareDefine.ActKey_ActNum, 0) if not actInfo.get(ShareDefine.ActKey_State): GameWorld.DebugLog("BossÀúÁ··Ç»î¶¯ÖУ¬²»µôÂä! actNum=%s" % actNum) continue dropCount = GameWorld.GetResultByRandomList(dropCountRateList) GameWorld.DebugLog("±¾·þBossÀúÁ·µôÂä! bossIndex=%s,actNum=%s,dropCount=%s" % (limitIndex, actNum, dropCount)) if not dropCount: continue dropCountTotal += dropCount else: crossActInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_BossTrial) if crossActInfo.get(ShareDefine.ActKey_State): dropCount = GameWorld.GetResultByRandomList(dropCountRateList) GameWorld.DebugLog("¿ç·þBossÀúÁ·µôÂä! bossIndex=%s,dropCount=%s" % (limitIndex, dropCount)) if dropCount: dropCountTotal += dropCount return itemID, dropCountTotal def Sync_BossTrialPlayerInfo(curPlayer, actNum): ## Í¨ÖªÍæ¼ÒÊý¾ÝÐÅÏ¢ actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_BossTrial, actNum) if not actInfo.get(ShareDefine.ActKey_State): return clientPack = ChPyNetSendPack.tagMCActBossTrialPlayerInfo() clientPack.ActNum = actNum clientPack.SubmitCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitCount % actNum) clientPack.SubmitAwardCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitAwardCount % actNum) clientPack.SubmitAwardState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitAward % actNum) NetPackCommon.SendFakePack(curPlayer, clientPack) return def Sync_BossTrialActionInfo(curPlayer, actNum): ## ֪ͨ»î¶¯ÐÅÏ¢ actInfo = GameWorld.GetActInfo(ShareDefine.OperationActionName_BossTrial, actNum) if not actInfo.get(ShareDefine.ActKey_State): return cfgID = actInfo.get(ShareDefine.ActKey_CfgID) dayIndex = actInfo.get(ShareDefine.ActKey_DayIndex, 0) ipyData = IpyGameDataPY.GetIpyGameData("ActBossTrial", cfgID) if not ipyData: return personalTempIpyDataList = [] personalTempID = GameWorld.GetTemplateIDByList(ipyData.GetTemplateIDList(), dayIndex) if personalTempID: personalTempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActBossTrialTemplate", personalTempID) familyTempIpyDataList = [] familyTempID = GameWorld.GetTemplateIDByList(ipyData.GetFamilyTemplateIDList(), dayIndex) if familyTempID: familyTempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActBossTrialTemplate", familyTempID) startDateStr, endDateStr = GameWorld.GetOperationActionDateStr(ipyData) startDateSync = actInfo.get(ShareDefine.ActKey_StartDateSync, startDateStr) actInfo = ChPyNetSendPack.tagMCActBossTrialInfo() actInfo.ActNum = actNum actInfo.StartDate = startDateSync actInfo.EndtDate = endDateStr actInfo.JoinStartTime = ipyData.GetJoinStartTime() actInfo.JoinEndTime = ipyData.GetJoinEndTime() actInfo.IsDayReset = ipyData.GetIsDayReset() actInfo.ResetType = ipyData.GetResetType() actInfo.LimitLV = ipyData.GetLVLimit() actInfo.ShopType = ipyData.GetActShopType() actInfo.SubResetType = ipyData.GetSubmitAwardResetType() actInfo.SubmitInfoList = [] submitItemAwardInfo = ipyData.GetSubmitItemAwardInfo() submitCountList = submitItemAwardInfo.keys() submitCountList.sort() for submitCount in submitCountList: recordIndex, awardItemList = submitItemAwardInfo[submitCount] subInfo = ChPyNetSendPack.tagMCActBossTrialSubmitInfo() subInfo.Clear() subInfo.RecordIndex = recordIndex subInfo.NeedCount = submitCount subInfo.AwardItemList = [] for itemID, itemCount, isAuctionItem in awardItemList: item = ChPyNetSendPack.tagMCActBossTrialItem() item.Clear() item.ItemID = itemID item.ItemCount = itemCount item.IsBind = isAuctionItem subInfo.AwardItemList.append(item) subInfo.Count = len(subInfo.AwardItemList) actInfo.SubmitInfoList.append(subInfo) actInfo.SubmitCount = len(actInfo.SubmitInfoList) actInfo.PersonalBillboardInfoList = __GetTempRankBillPackList(personalTempIpyDataList) actInfo.PersonalBillCount = len(actInfo.PersonalBillboardInfoList) actInfo.FamilyBillboardInfoList = __GetTempRankBillPackList(familyTempIpyDataList) actInfo.FamilyBillCount = len(actInfo.FamilyBillboardInfoList) NetPackCommon.SendFakePack(curPlayer, actInfo) return def __GetTempRankBillPackList(ipyDataList): packBillList = [] if not ipyDataList: return packBillList for tempIpyData in ipyDataList: rankInfo = ChPyNetSendPack.tagMCActBossTrialBillard() rankInfo.Rank = tempIpyData.GetRank() rankInfo.AwardItemList = [] awardItemList = tempIpyData.GetAwardItemList() for itemID, itemCount, isAuctionItem in awardItemList: item = ChPyNetSendPack.tagMCActBossTrialItem() item.Clear() item.ItemID = itemID item.ItemCount = itemCount item.IsBind = isAuctionItem rankInfo.AwardItemList.append(item) rankInfo.Count = len(rankInfo.AwardItemList) rankInfo.MemAwardItemList = [] memAwardItemList = tempIpyData.GetMemAwardItemList() for itemID, itemCount, isAuctionItem in memAwardItemList: item = ChPyNetSendPack.tagMCActBossTrialItem() item.Clear() item.ItemID = itemID item.ItemCount = itemCount item.IsBind = isAuctionItem rankInfo.MemAwardItemList.append(item) rankInfo.MemCount = len(rankInfo.MemAwardItemList) rankInfo.NeedScore = tempIpyData.GetNeedScore() rankInfo.AwardItemExList = [] scoreAwardEx = tempIpyData.GetScoreAwardEx() scoreExList = scoreAwardEx.keys() scoreExList.sort() for scoreEx in scoreExList: itemExList = scoreAwardEx[scoreEx] awardEx = ChPyNetSendPack.tagMCActBossTrialAwardEx() awardEx.NeedScore = scoreEx awardEx.AwardItemList = [] for itemID, itemCount, isAuctionItem in itemExList: item = ChPyNetSendPack.tagMCActBossTrialItem() item.Clear() item.ItemID = itemID item.ItemCount = itemCount item.IsBind = isAuctionItem awardEx.AwardItemList.append(item) awardEx.Count = len(awardEx.AwardItemList) rankInfo.AwardItemExList.append(awardEx) rankInfo.CountEx = len(rankInfo.AwardItemExList) packBillList.append(rankInfo) return packBillList def Sync_CrossActBossTrialActionInfo(curPlayer): ## ֪ͨ»î¶¯ÐÅÏ¢ actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_BossTrial) if not actInfo: return if not actInfo.get(ShareDefine.ActKey_State): return ipyDataDict = actInfo.get(ShareDefine.ActKey_IpyDataInfo, {}) if not ipyDataDict: return personalTempIpyDataList = [] personalTempID = ipyDataDict.get("PersonalTemplateID", 0) if personalTempID: personalTempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActBossTrialTemplate", personalTempID) familyTempIpyDataList = [] familyTempID = ipyDataDict.get("FamilyTemplateID", 0) if familyTempID: familyTempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActBossTrialTemplate", familyTempID) actPack = ChPyNetSendPack.tagMCCrossActBossTrialInfo() actPack.ServerIDRangeInfo = str(actInfo.get(ShareDefine.ActKey_ServerIDRangeList, [])) actPack.ServerInfoLen = len(actPack.ServerIDRangeInfo) actPack.GroupValue1 = ipyDataDict.get("ZoneID", 0) actPack.StartDate = ipyDataDict.get("StartDate", "") actPack.EndtDate = ipyDataDict.get("EndDate", "") actPack.JoinStartTime = ipyDataDict.get("JoinStartTime", "") actPack.JoinEndTime = ipyDataDict.get("JoinEndTime", "") actPack.IsDayReset = ipyDataDict.get("IsDayReset", 0) actPack.ResetType = ipyDataDict.get("ResetType", 0) actPack.PersonalBillboardInfoList = __GetTempRankBillPackList(personalTempIpyDataList) actPack.PersonalBillCount = len(actPack.PersonalBillboardInfoList) actPack.FamilyBillboardInfoList = __GetTempRankBillPackList(familyTempIpyDataList) actPack.FamilyBillCount = len(actPack.FamilyBillboardInfoList) NetPackCommon.SendFakePack(curPlayer, actPack) return