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