From 61bae8814450e86b1851cb892086b7081a675ff1 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 25 六月 2024 16:08:13 +0800
Subject: [PATCH] 10185 【越南】【港台】【主干】BOSS凭证修改

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBossTrial.py |  220 ++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 194 insertions(+), 26 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBossTrial.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBossTrial.py
index d6fd2ae..ad83198 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBossTrial.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerActBossTrial.py
@@ -21,6 +21,7 @@
 import PlayerControl
 import IpyGameDataPY
 import ChPyNetSendPack
+import CrossRealmPlayer
 import PlayerBillboard
 import ItemControler
 import NetPackCommon
@@ -53,6 +54,34 @@
             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):
@@ -84,6 +113,7 @@
     
     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:
@@ -91,6 +121,50 @@
         Sync_BossTrialPlayerInfo(curPlayer, actNum)
         
     return True
+
+def RefreshCrossActBossTrialInfo():
+    ## 收到GameServer同步的活动信息,刷新活动信息
+    playerManager = GameWorld.GetPlayerManager()
+    for index in xrange(playerManager.GetPlayerCount()):
+        curPlayer = playerManager.GetPlayerByIndex(index)
+        if curPlayer.GetID() == 0:
+            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
+    
+    # 活动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 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
 #
@@ -110,6 +184,9 @@
     if not actInfo.get(ShareDefine.ActKey_State):
         GameWorld.DebugLog("Boss历练非活动中: actNum=%s" % actNum, playerID)
         return
+    if not actInfo.get(ShareDefine.ActKey_StateJoin):
+        GameWorld.Log("Boss历练非参与活动中: actNum=%s" % actNum, playerID)
+        return
     
     itemID = IpyGameDataPY.GetFuncCfg("BossTrial", 1)
     itemPack = curPlayer.GetItemManager().GetPack(IPY_GameWorld.rptItem)
@@ -119,14 +196,21 @@
         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" % (actNum, itemID, submitCount, updSubmitCount), playerID)
+    GameWorld.DebugLog("Boss历练提交凭证: actNum=%s,itemID=%s,submitCount=%s,updSubmitCount=%s,updSubmitAwardCount=%s" 
+                       % (actNum, itemID, submitCount, updSubmitCount, updSubmitAwardCount), playerID)
     
     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
@@ -158,7 +242,7 @@
         return
     recordIndex, awardItemList = submitItemAwardInfo[submitCount]
     
-    nowSubmitCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitCount % actNum)
+    nowSubmitCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitAwardCount % actNum)
     if nowSubmitCount < submitCount:
         GameWorld.DebugLog("Boss历练提交凭证个数不足,无法领奖: actNum=%s,nowSubmitCount=%s < %s" % (actNum, nowSubmitCount, submitCount), playerID)
         return
@@ -185,16 +269,26 @@
     dropCountTotal = 0
     itemID = IpyGameDataPY.GetFuncCfg("BossTrial", 1)
     
-    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)
-        if not dropCount:
-            continue
-        dropCountTotal += dropCount
-        
+    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):
@@ -205,13 +299,13 @@
     clientPack = ChPyNetSendPack.tagMCActBossTrialPlayerInfo()
     clientPack.ActNum = actNum
     clientPack.SubmitCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitCount % actNum)
-    clientPack.SubmitCountAward = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_BossTrialSubmitAward % 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
@@ -221,22 +315,29 @@
     ipyData = IpyGameDataPY.GetIpyGameData("ActBossTrial", cfgID)
     if not ipyData:
         return
-    templateID = GameWorld.GetTemplateID(ipyData, cfgID, dayIndex)
-    if not templateID:
-        return
-    tempIpyDataList = IpyGameDataPY.GetIpyGameDataList("ActBossTrialTemplate", templateID)
-    if not tempIpyDataList:
-        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.SubResetType = ipyData.GetSubmitAwardResetType()
     
     actInfo.SubmitInfoList = []
     submitItemAwardInfo = ipyData.GetSubmitItemAwardInfo()
@@ -260,12 +361,24 @@
         actInfo.SubmitInfoList.append(subInfo)
     actInfo.SubmitCount = len(actInfo.SubmitInfoList)
     
-    actInfo.BillboardInfoList = []
-    for tempIpyData in tempIpyDataList:
+    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()
@@ -275,8 +388,63 @@
             item.IsBind = isAuctionItem
             rankInfo.AwardItemList.append(item)
         rankInfo.Count = len(rankInfo.AwardItemList)
-        actInfo.BillboardInfoList.append(rankInfo)
-    actInfo.BillardCount = len(actInfo.BillboardInfoList)
+        
+        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)
+        
+        packBillList.append(rankInfo)
+    return packBillList
+
+def Sync_CrossActBossTrialActionInfo(curPlayer):
+    ## 通知活动信息
+    actInfo = CrossRealmPlayer.GetPlayerCrossActInfo(curPlayer, ShareDefine.CrossActName_BossTrial)
+    if not actInfo:
+        return
     
-    NetPackCommon.SendFakePack(curPlayer, actInfo)
+    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)
+    RankLimitList = ipyDataDict.get("RankLimitList", [0, 0])
+    actPack.RankLimitPersonal = RankLimitList[0]
+    actPack.RankLimitFamily = RankLimitList[1]
+    
+    actPack.PersonalBillboardInfoList = __GetTempRankBillPackList(personalTempIpyDataList)
+    actPack.PersonalBillCount = len(actPack.PersonalBillboardInfoList)
+    
+    actPack.FamilyBillboardInfoList = __GetTempRankBillPackList(familyTempIpyDataList)
+    actPack.FamilyBillCount = len(actPack.FamilyBillboardInfoList)
+    
+    NetPackCommon.SendFakePack(curPlayer, actPack)
     return

--
Gitblit v1.8.0