From d2d8ca57a661abb973550f35b8112b5078c1defb Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 16 十二月 2024 15:27:39 +0800
Subject: [PATCH] 10297 【越南】【英语】【砍树】【tqxbqy】轮回殿-服务端(奖励类型增加类型3 - 消耗物品,目前支持坐骑经验丹、灵宠经验丹)

---
 ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/Championship.py |   76 ++++++++++++++++++++++++++++++++++----
 1 files changed, 68 insertions(+), 8 deletions(-)

diff --git a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/Championship.py b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/Championship.py
index 76d5fc5..2666ce2 100644
--- a/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/Championship.py
+++ b/ServerPython/CoreServerGroup/GameServer/Script/GM/Commands/Championship.py
@@ -19,6 +19,7 @@
 import CrossChampionship
 import PlayerDBGSEvent
 import ShareDefine
+import time
 
 
 #逻辑实现
@@ -44,6 +45,9 @@
         GameWorld.DebugAnswer(curPlayer, "如果没有指定ID则该组重新随机匹配")
         GameWorld.DebugAnswer(curPlayer, "命令需在对应的阶段设置才有效;")
         GameWorld.DebugAnswer(curPlayer, "重置活动数据需在非活动时间重置,不然可能导致活动状态异常")
+        GameWorld.DebugAnswer(curPlayer, "虚拟结算排名: Championship 8 分区 第1名ID ...")
+        GameWorld.DebugAnswer(curPlayer, "虚拟结算执行: Championship over")
+        GameWorld.DebugAnswer(curPlayer, "注:虚拟结算的命令主要用于快速测试结算用,玩家ID不足则假人代替")
         
     else:
         value1 = gmList[0]
@@ -78,7 +82,7 @@
     
     state = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossChampionshipState)
     champMgr = CrossChampionship.GetChampionshipMgr()
-    pkZoneIDList = champMgr.GetChampPKZoneIDList()
+    #pkZoneIDList = champMgr.GetChampPKZoneIDList()
     if value1 == 0:
         if state in ShareDefine.CrossChampionshipStateList and state != ShareDefine.CrossChampionshipStateList[0]:
             GameWorld.DebugAnswerCross(playerID, serverGroupID, "重置数据需在非活动中或64强分组前")
@@ -89,6 +93,7 @@
         PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossChampionshipID, 0)
         PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossChampionshipState, 0)
         PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossChampionshipStateError, 0)
+        PlayerDBGSEvent.SetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossChampionshipErrorDo, 0)
         
         champMgr.ClearPKZone()
         if isResetOfficial:
@@ -119,15 +124,15 @@
         zoneID = gmList[1]
         batPlayerCount = min(maxPlayerCount, gmList[2])
         setPlayerIDList = gmList[3:]
-        if zoneID not in pkZoneIDList:
+        pkZoneMgr = champMgr.GetChampPKZoneMgr(zoneID)
+        if not pkZoneMgr:
             GameWorld.DebugAnswerCross(playerID, serverGroupID, "不存在该分区!zoneID=%s" % zoneID)
             return
         if len(setPlayerIDList) < batPlayerCount:
             # 不足的机器人补足
             setPlayerIDList += range(1001, 1001 + (batPlayerCount - len(setPlayerIDList)))
-        pkZoneMgr = champMgr.GetChampPKZoneMgr(zoneID)
         pkZoneMgr.playerDict = {} # 清空玩家,重新设置
-        CrossChampionship.Send_CrossServerMsg_ChampionshipPlayer(isSync=True)
+        CrossChampionship.Send_CrossServerMsg_ChampionshipPlayer(isSync=True, clearPlayer=True)
         for pID in setPlayerIDList:
             batPlayer = CrossChampionship.ChampionshipBatPlayer()
             batPlayer.zoneID = zoneID
@@ -149,6 +154,9 @@
         zoneID = gmList[1]
         groupPlayerIDList = gmList[2:]
         pkZoneMgr = champMgr.GetChampPKZoneMgr(zoneID)
+        if not pkZoneMgr:
+            GameWorld.DebugAnswerCross(playerID, serverGroupID, "不存在该分区!zoneID=%s" % zoneID)
+            return
         if not groupPlayerIDList:
             pkZoneMgr.battleInfo.pop(groupMark, None)
             CrossChampionship.DoCrossChampionshipGroupRand(groupMark)
@@ -203,7 +211,57 @@
         CrossChampionship.Send_CrossServerMsg_ChampionshipGroup(groupMark)
         return
     
+    if value1 == 8:
+        __FackOverData(playerID, serverGroupID, gmList)
+        return
+    if value1 == "over":
+        GameWorld.DebugAnswerCross(playerID, serverGroupID, "虚拟结算执行")
+        CrossChampionship.DoCrossChampionshipFinalOver()
+        return
     GameWorld.DebugAnswerCross(playerID, serverGroupID, "命令参数错误,详见命令说明")
+    return
+
+def __FackOverData(playerID, serverGroupID, gmList):
+    ## 虚拟结算数据
+    zoneID = gmList[1] if len(gmList) > 1 else 0
+    rankPlayerIDList = gmList[2:]
+    batPlayerCount = CrossChampionship.Def_CrossChampionshipPlayerWFCount
+    # 先设置参赛玩家
+    champMgr = CrossChampionship.GetChampionshipMgr()
+    pkZoneMgr = champMgr.GetChampPKZoneMgr(zoneID, True)
+    if len(rankPlayerIDList) < batPlayerCount:
+        # 不足的机器人补足
+        zonePlayerIDStar = zoneID * 100 + 1 # 确保每个分区的假人不重复
+        rankPlayerIDList += range(zonePlayerIDStar, zonePlayerIDStar + (batPlayerCount - len(rankPlayerIDList)))
+    pkZoneMgr.playerDict = {} # 清空玩家,重新设置
+    CrossChampionship.Send_CrossServerMsg_ChampionshipPlayer(isSync=True, clearPlayer=True)
+    for pID in rankPlayerIDList:
+        batPlayer = CrossChampionship.ChampionshipBatPlayer()
+        batPlayer.zoneID = zoneID
+        batPlayer.playerID = pID
+        pkZoneMgr.playerDict[pID] = batPlayer
+    CrossChampionship.Send_CrossServerMsg_ChampionshipPlayer(isSync=True)
+    
+    # 虚拟战斗场次
+    overTime = int(time.time())
+    pkZoneMgr.battleInfo = {} # 清空对战记录
+    battleIndexDict = {8:[[1, 5], [3, 7], [2, 6], [4, 8]], 4:[[1, 3], [5, 7], [2, 4], [6, 8]], 2:[[1, 2], [3, 4], [5, 6], [7, 8]]}
+    for groupMark in [8, 4, 2]:
+        battleList = battleIndexDict[groupMark]
+        for battleNum in range(1, 1 + len(battleList)):
+            battleRankInfo = battleList[battleNum - 1]
+            battle = CrossChampionship.ChampionshipBattle()
+            battle.overTime = overTime
+            battle.zoneID = zoneID
+            battle.groupMark = groupMark
+            battle.battleNum = battleNum
+            battle.playerIDA = rankPlayerIDList[battleRankInfo[0] - 1]
+            battle.playerIDB = rankPlayerIDList[battleRankInfo[1] - 1]
+            battle.winPlayerID = battle.playerIDA
+            pkZoneMgr.AddBattle(groupMark, battleNum, battle)
+        CrossChampionship.Send_CrossServerMsg_ChampionshipGroup(groupMark)
+        
+    GameWorld.DebugAnswerCross(playerID, serverGroupID, "虚拟结算排名:分区%s,%s" % (zoneID, rankPlayerIDList))
     return
 
 def __PrintChampionshipInfo():
@@ -216,6 +274,8 @@
     GameWorld.Log("ID=%s,state=%s,stateError=%s,pkZoneIDList=%s" % (ID, state, stateError, pkZoneIDList))
     for zoneID in pkZoneIDList:
         pkZoneMgr = champMgr.GetChampPKZoneMgr(zoneID)
+        if not pkZoneMgr:
+            continue
         
 #            self.guessInfo = {} # 竞猜信息 {竞猜类型:[ChampionshipGuess, ...], ...}
 #            self.superPlayerCountInfo = {} # {竞猜类型:{playerID:支持人数, ...}, ...}
@@ -246,8 +306,8 @@
             for guessPlayerID, guessObjList in playerGuessDict.items():
                 GameWorld.Log("    guessPlayerID=%s,guessObjListLen=%s" % (guessPlayerID, len(guessObjList)))
                 for guessObj in guessObjList:
-                    GameWorld.Log("        guessPlayerID=%s,tagPlayerID=%s,moneyTotal=%s,guessRank=%s" 
-                                  % (guessPlayerID, guessObj.tagPlayerID, guessObj.moneyTotal, guessObj.guessRank))
+                    GameWorld.Log("        guessPlayerID=%s,tagPlayerID=%s,moneyTotal=%s,guessRank=%s,isClose=%s" 
+                                  % (guessPlayerID, guessObj.tagPlayerID, guessObj.moneyTotal, guessObj.guessRank, guessObj.isClose))
             GameWorld.Log("    ===")
             
     offZoneIDList = champMgr.GetChampOfficialZoneIDList()
@@ -260,8 +320,8 @@
             offObj = offZoneMgr.GetOfficialObj(officialID)
             if not offObj:
                 continue
-            GameWorld.Log("    officialID=%s,playerID=%s,rank=%s,worshipCount=%s,applyPlayerIDList=%s,challengeCount=%s" 
-                          % (officialID, offObj.playerID, offObj.rank, offObj.worshipCount, offObj.applyPlayerInfo.keys(), len(offObj.challengeList)))
+            GameWorld.Log("    officialID=%s,playerID=%s,rank=%s,worshipCount=%s,worshipDouble=%s,applyPlayerIDList=%s,challengeCount=%s,lastDismissJuniorTime=%s" 
+                          % (officialID, offObj.playerID, offObj.rank, offObj.worshipCount, offObj.worshipDouble, offObj.applyPlayerInfo.keys(), len(offObj.challengeList), offObj.lastDismissJuniorTime))
             
     GameWorld.Log("==================================================")
     return

--
Gitblit v1.8.0