From 0a4a2cfd37d600edee7f7d7cc35c0f43273fe97f Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 10 三月 2025 14:57:30 +0800
Subject: [PATCH] 10415 【英文】【bt】【GM】【砍树】玩家属性果实封包优化(EatCnt已使用个数改为DWORD)
---
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