#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package GM.Commands.Championship
|
#
|
# @todo:¿ç·þÅÅλÕù°ÔÈü
|
# @author hxp
|
# @date 2022-09-21
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: ¿ç·þÅÅλÕù°ÔÈü
|
#
|
#-------------------------------------------------------------------------------
|
#"""Version = 2022-09-21 21:30"""
|
#-------------------------------------------------------------------------------
|
|
import GameWorld
|
import CrossChampionship
|
import PlayerDBGSEvent
|
import ShareDefine
|
import time
|
|
|
#Â߼ʵÏÖ
|
## Ö´ÐÐÂß¼
|
# @param curPlayer µ±Ç°Íæ¼Ò
|
# @param gmList [cmdIndex gmAccID msg]
|
# @return None
|
# @remarks º¯ÊýÏêϸ˵Ã÷.
|
def OnExec(curPlayer, gmList):
|
## ±¾·þ´¦Àí
|
GameWorld.DebugAnswer(curPlayer, "----------------------------")
|
if not gmList:
|
champMgr = CrossChampionship.GetChampionshipMgr()
|
ID = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossChampionshipID)
|
State = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossChampionshipState)
|
GameWorld.DebugAnswer(curPlayer, "¿ç·þÅÅλÕù°Ô£ºID:%s,State:%s,%s" % (ID, State, champMgr.GetChampPKZoneIDList()))
|
GameWorld.DebugAnswer(curPlayer, "ÖØÖûÊý¾Ý: Championship 0 ÊÇ·ñÖØÖÃÏɹÙ")
|
GameWorld.DebugAnswer(curPlayer, "Êä³ö»î¶¯Êý¾Ý: Championship print")
|
GameWorld.DebugAnswer(curPlayer, "ÉèÖòÎÈüÍæ¼Ò: Championship 80 ·ÖÇø ÈËÊý Íæ¼ÒID1 ...")
|
GameWorld.DebugAnswer(curPlayer, "ÈËÊý×î´ó64£¬²»×ãÔò¿ÉÄÜÓÐÂÖ¿ÕµÄ×飬ָ¶¨Íæ¼ÒID²»×ãÈËÊýÔòÒÔ¼ÙÈË´úÌæ")
|
GameWorld.DebugAnswer(curPlayer, "Ö¸¶¨Íæ¼Ò·Ö×é: Championship ·Ö×é״̬ ·ÖÇøID Íæ¼ÒID1 ID2 ...")
|
GameWorld.DebugAnswer(curPlayer, "·Ö×é״̬:641-64Ç¿£»321-32Ç¿£»161-16Ç¿£»81-8Ç¿£»ID1ID2Á½Á½·ÖÔÚÒ»×é")
|
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]
|
|
if value1 == "print":
|
__PrintChampionshipInfo()
|
return
|
|
return
|
|
def OnGetMergeParam(curPlayer):
|
playerID = curPlayer.GetPlayerID()
|
serverGroupID = GameWorld.GetServerGroupID()
|
return [serverGroupID, playerID]
|
|
def OnMergeServerExec(gmList, tick):
|
## ¿ç·þ´¦Àí
|
|
serverGroupID = gmList[-2]
|
playerID = gmList[-1]
|
|
gmList = gmList[:-2]
|
if not gmList:
|
return
|
|
value1 = gmList[0]
|
|
if value1 == "print":
|
__PrintChampionshipInfo()
|
GameWorld.DebugAnswerCross(playerID, serverGroupID, "Êä³öÍê±Ï£¬Çë²é¿´¿ç·þGameServerÈÕÖ¾")
|
return
|
|
state = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossChampionshipState)
|
champMgr = CrossChampionship.GetChampionshipMgr()
|
#pkZoneIDList = champMgr.GetChampPKZoneIDList()
|
if value1 == 0:
|
if state in ShareDefine.CrossChampionshipStateList and state != ShareDefine.CrossChampionshipStateList[0]:
|
GameWorld.DebugAnswerCross(playerID, serverGroupID, "ÖØÖÃÊý¾ÝÐèÔڷǻÖлò64Ç¿·Ö×éǰ")
|
return
|
|
isResetOfficial = gmList[1] if len(gmList) > 1 else 0
|
|
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:
|
champMgr.ClearOfficialZone()
|
|
GameWorld.DebugAnswerCross(playerID, serverGroupID, "ÖØÖÃÊý¾Ý³É¹¦")
|
|
CrossChampionship.Sync_CrossChampionshipDataToClientServer()
|
CrossChampionship.OnMinuteProcess()
|
return
|
|
stateError = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossChampionshipStateError)
|
if stateError:
|
GameWorld.DebugAnswerCross(playerID, serverGroupID, "»î¶¯Êý¾Ý״̬˳ÐòÒѾÒì³££¬ÎÞ·¨´¦Àí")
|
return
|
|
if value1 in ShareDefine.CrossChampionshipStateList:
|
if state != value1:
|
GameWorld.DebugAnswerCross(playerID, serverGroupID, "·Ç¶ÔÓ¦»î¶¯×´Ì¬ÖУ¬ÎÞ·¨ÉèÖ㬵±Ç°×´Ì¬%s" % state)
|
return
|
|
maxPlayerCount = CrossChampionship.Def_CrossChampionshipPlayerMax
|
# ÉèÖòÎÈüÍæ¼Ò
|
if value1 == ShareDefine.CrossChampionshipState_Guess8:
|
if len(gmList) < 3:
|
GameWorld.DebugAnswerCross(playerID, serverGroupID, "²ÎÊý´íÎó£¬Ïê¼ûÃüÁî˵Ã÷")
|
return
|
zoneID = gmList[1]
|
batPlayerCount = min(maxPlayerCount, gmList[2])
|
setPlayerIDList = gmList[3:]
|
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.playerDict = {} # Çå¿ÕÍæ¼Ò£¬ÖØÐÂÉèÖÃ
|
CrossChampionship.Send_CrossServerMsg_ChampionshipPlayer(isSync=True, clearPlayer=True)
|
for pID in setPlayerIDList:
|
batPlayer = CrossChampionship.ChampionshipBatPlayer()
|
batPlayer.zoneID = zoneID
|
batPlayer.playerID = pID
|
pkZoneMgr.playerDict[pID] = batPlayer
|
|
GameWorld.DebugAnswerCross(playerID, serverGroupID, "ÉèÖòÎÈüÍæ¼Ò³É¹¦:zoneID=%s,ÈËÊý=%s" % (zoneID, len(setPlayerIDList)))
|
CrossChampionship.Send_CrossServerMsg_ChampionshipPlayer(isSync=True)
|
return
|
|
# Ö¸¶¨Íæ¼Ò·Ö×é
|
canSetGroupStateList = [ShareDefine.CrossChampionshipState_Group64, ShareDefine.CrossChampionshipState_Group32,
|
ShareDefine.CrossChampionshipState_Group16, ShareDefine.CrossChampionshipState_Group8]
|
if value1 in canSetGroupStateList:
|
if len(gmList) < 2:
|
GameWorld.DebugAnswerCross(playerID, serverGroupID, "·Ö×é²ÎÊý´íÎó£¬Ïê¼ûÃüÁî˵Ã÷")
|
return
|
groupMark = value1 / 10
|
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)
|
GameWorld.DebugAnswerCross(playerID, serverGroupID, "%sÇ¿ÈüÖØÐÂËæ»úÆ¥Åä!" % groupMark)
|
return
|
|
for i in range(len(groupPlayerIDList))[::2]:
|
vsI = i + 1
|
if len(groupPlayerIDList) < vsI:
|
GameWorld.DebugAnswerCross(playerID, serverGroupID, "ÉèÖ÷Ö×éÍæ¼ÒIDÊý²»Æ¥Åä")
|
break
|
APlayerID = groupPlayerIDList[i]
|
BPlayerID = groupPlayerIDList[vsI]
|
|
changeBatNum = None
|
vsPlayerIDList = [APlayerID, BPlayerID]
|
chPlayerIDList = []
|
|
battleDict = pkZoneMgr.battleInfo.get(groupMark, {})
|
for battleNum in battleDict.keys():
|
batObj = pkZoneMgr.GetBattle(groupMark, battleNum)
|
if not batObj:
|
continue
|
playerIDList = [batObj.playerIDA, batObj.playerIDB]
|
if APlayerID in playerIDList and BPlayerID in playerIDList:
|
GameWorld.DebugAnswerCross(playerID, serverGroupID, "ÉèÖóɹ¦:%s VS %s" % (APlayerID, BPlayerID))
|
break
|
if APlayerID not in playerIDList and BPlayerID not in playerIDList:
|
continue
|
|
for pID in playerIDList:
|
if pID not in vsPlayerIDList:
|
chPlayerIDList.append(pID)
|
|
if changeBatNum == None:
|
changeBatNum = battleNum
|
continue
|
|
changeBatObj = pkZoneMgr.GetBattle(groupMark, changeBatNum)
|
changeBatObj.playerIDA = vsPlayerIDList[0]
|
changeBatObj.playerIDB = vsPlayerIDList[1]
|
|
batObj.playerIDA = chPlayerIDList[0] if len(chPlayerIDList) > 0 else 0
|
batObj.playerIDB = chPlayerIDList[1] if len(chPlayerIDList) > 1 else 0
|
GameWorld.DebugAnswerCross(playerID, serverGroupID, "ÉèÖóɹ¦:%s VS %s" % (APlayerID, BPlayerID))
|
GameWorld.DebugAnswerCross(playerID, serverGroupID, "½»»»³É¹¦:%s VS %s" % (batObj.playerIDA, batObj.playerIDB))
|
changeBatNum = "OK"
|
|
if changeBatNum != "OK":
|
GameWorld.DebugAnswerCross(playerID, serverGroupID, "·Ö×éʧ°Ü£¬¼ì²éÍæ¼ÒÊÇ·ñÔÚ±¾·Ö×é:%s VS %s" % (APlayerID, BPlayerID))
|
|
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():
|
GameWorld.Log("================ ¿ç·þÅÅλµ±Ç°ÐÅÏ¢ ==================")
|
ID = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossChampionshipID)
|
state = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossChampionshipState)
|
stateError = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_CrossChampionshipStateError)
|
champMgr = CrossChampionship.GetChampionshipMgr()
|
pkZoneIDList = champMgr.GetChampPKZoneIDList()
|
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:Ö§³ÖÈËÊý, ...}, ...}
|
|
batPlayerIDList = pkZoneMgr.GetBatPlayerIDList()
|
GameWorld.Log("=== ²ÎÈüÍæ¼Ò === zoneID=%s,playerCount=%s" % (zoneID, len(batPlayerIDList)))
|
for i, playerID in enumerate(batPlayerIDList, 1):
|
batPlayer = pkZoneMgr.GetBatPlayer(playerID)
|
if not batPlayer:
|
continue
|
GameWorld.Log(" %s,playerID=%s,fightPower=%s,accID=%s" % (i, batPlayer.playerID, batPlayer.fightPower, batPlayer.accID))
|
|
groupMarkKeys = pkZoneMgr.battleInfo.keys()
|
GameWorld.Log("=== ·Ö×éÐÅÏ¢ === zoneID=%s,%s" % (zoneID, groupMarkKeys))
|
for groupMark, battleDict in pkZoneMgr.battleInfo.items():
|
GameWorld.Log(" groupMark=%s,battleCount=%s" % (groupMark, len(battleDict)))
|
for battleNum in battleDict.keys():
|
batObj = pkZoneMgr.GetBattle(groupMark, battleNum)
|
if not batObj:
|
continue
|
GameWorld.Log(" groupMark=%s,battleNum=%s,playerIDA=%s,playerIDB=%s,winPlayerID=%s"
|
% (groupMark, battleNum, batObj.playerIDA, batObj.playerIDB, batObj.winPlayerID))
|
|
GameWorld.Log("=== ¾º²ÂÐÅÏ¢ === zoneID=%s,%s" % (zoneID, pkZoneMgr.guessInfo.keys()))
|
for guessType, playerGuessDict in pkZoneMgr.guessInfo.items():
|
GameWorld.Log(" zoneID=%s,guessType=%s,supportCountInfo=%s" % (zoneID, guessType, pkZoneMgr.supportCountInfo.get(guessType, {})))
|
GameWorld.Log(" guessPlayerIDList=%s" % playerGuessDict.keys())
|
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,isClose=%s"
|
% (guessPlayerID, guessObj.tagPlayerID, guessObj.moneyTotal, guessObj.guessRank, guessObj.isClose))
|
GameWorld.Log(" ===")
|
|
offZoneIDList = champMgr.GetChampOfficialZoneIDList()
|
GameWorld.Log("ÏɹٷÖÇø: offZoneIDList=%s" % offZoneIDList)
|
for zoneID in offZoneIDList:
|
offZoneMgr = champMgr.GetChampOfficialZoneMgr(zoneID)
|
officialIDList = offZoneMgr.officialInfo.keys()
|
GameWorld.Log("=== ÏɹÙÐÅÏ¢ === zoneID=%s,%s" % (zoneID, officialIDList))
|
for officialID in officialIDList:
|
offObj = offZoneMgr.GetOfficialObj(officialID)
|
if not offObj:
|
continue
|
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
|
|