#!/usr/bin/python  
 | 
# -*- coding: GBK -*-  
 | 
#-------------------------------------------------------------------------------  
 | 
#  
 | 
##@package Player.PlayerArena  
 | 
#  
 | 
# @todo:¾º¼¼³¡ - ±¾·þ  
 | 
# @author hxp  
 | 
# @date 2020-12-07  
 | 
# @version 1.0  
 | 
#  
 | 
# ÏêϸÃèÊö: ¾º¼¼³¡ - ±¾·þ  
 | 
#  
 | 
#-------------------------------------------------------------------------------  
 | 
#"""Version = 2020-12-07 19:30"""  
 | 
#-------------------------------------------------------------------------------  
 | 
  
 | 
import ShareDefine  
 | 
import GameFuncComm  
 | 
import PlayerControl  
 | 
import IpyGameDataPY  
 | 
import ChPyNetSendPack  
 | 
import NetPackCommon  
 | 
import GameWorld  
 | 
import ChConfig  
 | 
import FBCommon  
 | 
import IPY_GameWorld  
 | 
import ItemControler  
 | 
import EventShell  
 | 
import PlayerWeekParty  
 | 
import PlayerFeastTravel  
 | 
import PlayerActivity  
 | 
  
 | 
def DoArenaOpen(curPlayer):  
 | 
    ## ¾º¼¼³¡¹¦ÄÜ¿ªÆô  
 | 
    __DoArenaSeasonReset(curPlayer)  
 | 
    return  
 | 
  
 | 
def OnLogin(curPlayer):  
 | 
    if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Arena):  
 | 
        return  
 | 
    OSSeasonState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaOSSeasonState)  
 | 
    if not OSSeasonState:  
 | 
        __DoArenaSeasonReset(curPlayer)  
 | 
    else:  
 | 
        Sync_ArenaInfo(curPlayer)  
 | 
    return  
 | 
  
 | 
def OnDayEx(curPlayer):  
 | 
    if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Arena):  
 | 
        return  
 | 
      
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaItemAddCount, 0)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaBattleCountDay, 0)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaMatchRefreshCount, 0)  
 | 
    Sync_ArenaInfo(curPlayer)  
 | 
      
 | 
    openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1  
 | 
    customMaxServerDay = IpyGameDataPY.GetFuncCfg("OperationAction", 1)  
 | 
    if openServerDay <= customMaxServerDay:  
 | 
        GameWorld.DebugLog("OnDayExʱ¾º¼¼³¡¿ª·þ¶¨ÖÆÈü¼¾½øÐÐÖУ¬²»´¦Àí! openServerDay=%s <= %s" % (openServerDay, customMaxServerDay))  
 | 
        return  
 | 
      
 | 
    OSSeasonState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaOSSeasonState)  
 | 
    if OSSeasonState > 1:  
 | 
        GameWorld.DebugLog("OnDayExʱ¾º¼¼³¡¿ª·þ¶¨ÖÆÈü¼¾ÒѽáËã¹ý£¬²»´¦Àí! OSSeasonState=%s" % (OSSeasonState))  
 | 
        return  
 | 
      
 | 
    __DoArenaSeasonReset(curPlayer)  
 | 
    return  
 | 
  
 | 
def OnWeekEx(curPlayer):  
 | 
    if not GameFuncComm.GetFuncCanUse(curPlayer, ShareDefine.GameFuncID_Arena):  
 | 
        return  
 | 
      
 | 
    openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1  
 | 
    customMaxServerDay = IpyGameDataPY.GetFuncCfg("OperationAction", 1)  
 | 
    if openServerDay <= customMaxServerDay:  
 | 
        GameWorld.DebugLog("OnWeekExʱÔÚ¿ª·þ¶¨ÖÆÌìÄÚ£¬²»´¦Àí¾º¼¼³¡Èü¼¾ÖØÖÃ! openServerDay=%s <= %s" % (openServerDay, customMaxServerDay))  
 | 
        return  
 | 
      
 | 
    OSSeasonState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaOSSeasonState)  
 | 
    if not OSSeasonState or OSSeasonState == 1 or OSSeasonState == openServerDay:  
 | 
        GameWorld.DebugLog("OnWeekExʱ¾º¼¼³¡¿ª·þ¶¨ÖÆÈü¼¾½øÐÐÖлòͬһÌì½áË㣬²»´¦ÀíÖØÖÃ! openServerDay=%s,OSSeasonState=%s" % (openServerDay, OSSeasonState))       
 | 
        return  
 | 
      
 | 
    __DoArenaSeasonReset(curPlayer)  
 | 
    return  
 | 
  
 | 
def __DoArenaSeasonReset(curPlayer):  
 | 
    ## Íæ¼ÒÖØÖþº¼¼³¡  
 | 
      
 | 
    OSSeasonState = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaOSSeasonState)  
 | 
    openServerDay = GameWorld.GetGameWorld().GetGameWorldDictByKey(ShareDefine.Def_Notify_WorldKey_ServerDay) + 1  
 | 
      
 | 
    customMaxServerDay = IpyGameDataPY.GetFuncCfg("OperationAction", 1)  
 | 
    if openServerDay <= customMaxServerDay and OSSeasonState != 0:  
 | 
        GameWorld.DebugLog("¿ª·þ¶¨ÖÆÌìÄÚ²»ÄÜÖØÖã¡")  
 | 
        return  
 | 
      
 | 
    setScoreMin, setScoreMax, refScoreMax = IpyGameDataPY.GetFuncEvalCfg("ArenaSet", 2)  
 | 
    setScore = setScoreMin  
 | 
    if openServerDay <= customMaxServerDay and OSSeasonState == 0:  
 | 
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaOSSeasonState, 1)  
 | 
        GameWorld.DebugLog("¾º¼¼³¡¿ª·þ¶¨ÖÆÈü¼¾£¡ setScore=%s" % setScore)  
 | 
    else:  
 | 
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaOSSeasonState, customMaxServerDay + 1)  
 | 
          
 | 
        preSeasonscore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaScore)  
 | 
        if preSeasonscore <= setScoreMin:  
 | 
            setScore = setScoreMin  
 | 
        elif preSeasonscore >= refScoreMax:  
 | 
            setScore = setScoreMax  
 | 
        else:  
 | 
            # °´±ÈÀý½µµÍ»ý·Ö£¬¶¼¼õÈ¥×îµÍ·ÖµÄ²îÖµËã±ÈÀý  
 | 
            calcScore = preSeasonscore - setScoreMin  
 | 
            setScore = setScoreMin + int(calcScore * (setScoreMax - setScoreMin) / float(refScoreMax - setScoreMin))  
 | 
              
 | 
        GameWorld.DebugLog("¾º¼¼³¡Èü¼¾ÖØÖã¡ preSeasonscore=%s,setScore=%s" % (preSeasonscore, setScore))  
 | 
          
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaScore, setScore)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaItemAddCount, 0)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaBattleCountDay, 0)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaMatchRefreshCount, 0)  
 | 
    Sync_ArenaInfo(curPlayer, True)  
 | 
    return  
 | 
  
 | 
def CheckArenaBattleCount(curPlayer):  
 | 
    ## ÑéÖ¤ÊÇ·ñ»¹ÓжÔÕ½´ÎÊý  
 | 
    todayBattleCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaBattleCountDay)  
 | 
    itemAddCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaItemAddCount)  
 | 
    dayFreeCount = IpyGameDataPY.GetFuncCfg("ArenaSet", 3)  
 | 
    return todayBattleCount < (dayFreeCount + itemAddCount)  
 | 
  
 | 
#// B2 09 ¾º¼¼³¡Æ¥ÅäÍæ¼Ò #tagCMArenaMatch  
 | 
#  
 | 
#struct    tagCMArenaMatch  
 | 
#{  
 | 
#    tagHead         Head;  
 | 
#    BYTE        IsRefresh;    // 0-´ò¿ª½çÃæÎÞÆ¥ÅäÊý¾Ýʱʱ²éѯ£¬1-Ç¿ÖÆË¢ÐÂÆ¥ÅäÁÐ±í  
 | 
#};  
 | 
def OnArenaMatch(index, clientData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    isRefresh = clientData.IsRefresh  
 | 
      
 | 
    playerID = curPlayer.GetPlayerID()  
 | 
    refreshCountLimit = IpyGameDataPY.GetFuncCfg("ArenaSet", 5)  
 | 
    if isRefresh and refreshCountLimit:  
 | 
        refreshCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaMatchRefreshCount)  
 | 
        if refreshCount >= refreshCountLimit:  
 | 
            GameWorld.DebugLog("¾º¼¼³¡Ë¢ÐÂÆ¥ÅäÍæ¼Ò´ÎÊýÒÑÂú£¡refreshCount=%s >= %s" % (refreshCount, refreshCountLimit), playerID)  
 | 
            return  
 | 
          
 | 
    if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_Arena, tick):  
 | 
        GameWorld.DebugLog("¾º¼¼³¡Æ¥Åä²Ù×÷CDÖÐ...", playerID)  
 | 
        PlayerControl.NotifyCode(curPlayer, "RequestLater")  
 | 
        return  
 | 
      
 | 
    playerLV = curPlayer.GetLV()  
 | 
    playerScore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaScore)  
 | 
    msgInfo = str(["MatchRefresh", {"isRefresh":isRefresh, "playerLV":playerLV, "playerScore":playerScore}])  
 | 
    GameWorld.DebugLog("¾º¼¼³¡·¢ËÍGameServerÆ¥Åä: %s" % msgInfo, playerID)  
 | 
    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "Arena", msgInfo, len(msgInfo))  
 | 
    return  
 | 
  
 | 
def GMArenaMatch(curPlayer, gmMatchIDList):  
 | 
    playerID = curPlayer.GetPlayerID()  
 | 
    playerLV = curPlayer.GetLV()  
 | 
    playerScore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaScore)  
 | 
    msgInfo = str(["MatchRefresh", {"isRefresh":1, "playerLV":playerLV, "playerScore":playerScore, "gmMatchIDList":gmMatchIDList}])  
 | 
    GameWorld.DebugLog("¾º¼¼³¡·¢ËÍGameServerÆ¥Åä: %s" % msgInfo, playerID)  
 | 
    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "Arena", msgInfo, len(msgInfo))  
 | 
    return  
 | 
  
 | 
#// B2 10 ¾º¼¼³¡ÌôÕ½Íæ¼Ò #tagCMArenaBattle  
 | 
#  
 | 
#struct    tagCMArenaBattle  
 | 
#{  
 | 
#    tagHead         Head;  
 | 
#    DWORD        TagPlayerID;    // Ä¿±êÍæ¼ÒID»ò»úÆ÷ÈËID  
 | 
#    BYTE        Result;    // 0-½øÈë×Ô¶¨Ò峡¾°·¢ËÍ֪ͨºó¶Ë£»1-ʤÀû£¨ºó¶Ë´¦Àí£¬ÔÝʱ²»ÐèÒª·¢ËÍ´Ë״̬£©£»2-ʧ°Ü£¨Ç°¶Ë±»¶ÔÊÖ»÷ɱÐèÒª·¢ËÍ´Ë״̬£©  
 | 
#};  
 | 
def OnArenaBattle(index, clientData, tick):  
 | 
    curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  
 | 
    playerID = curPlayer.GetPlayerID()  
 | 
    tagPlayerID = clientData.TagPlayerID  
 | 
    result = clientData.Result  
 | 
      
 | 
    GameWorld.DebugLog("¾º¼¼³¡ÌôÕ½Íæ¼Ò! tagPlayerID=%s,result=%s" % (tagPlayerID, result), playerID)  
 | 
    if not tagPlayerID:  
 | 
        return  
 | 
      
 | 
    if not result:  
 | 
        GameWorld.DebugLog("¸üоº¼¼³¡¶ÔÕ½¶ÔÊÖID! tagPlayerID=%s" % tagPlayerID, playerID)  
 | 
        # ¼Ç¼¶ÔÊÖID  
 | 
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaBattleTagID, tagPlayerID)  
 | 
        return  
 | 
      
 | 
    isWin = 1 if result == 1 else 0  
 | 
#    # Ä¾×®±»»÷ɱ£¬ºó¶ËÅжϣ¬ÆäËûǰ¶Ëͬ²½  
 | 
#    if isWin:  
 | 
#        GameWorld.ErrLog("ǰ¶Ë²»ÄÜͬ²½¾º¼¼³¡Ê¤Àû״̬£¡", playerID)  
 | 
#        return  
 | 
      
 | 
    recTagPlayerID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaBattleTagID)  
 | 
    if tagPlayerID != recTagPlayerID:  
 | 
        GameWorld.ErrLog("¾º¼¼³¡½áËãʱ¶ÔÊÖID²»Ò»ÖÂ! tagPlayerID(%s) != recTagPlayerID(%s)" % (tagPlayerID, recTagPlayerID), playerID)  
 | 
        __DoArenaBattleOver(curPlayer)  
 | 
        return  
 | 
      
 | 
    # Ê§°Ü½áËãÈë¿Ú£º Ç°¶Ëͬ²½  
 | 
    SendGameServer_ArenaBattleOver(curPlayer, isWin)  
 | 
    return  
 | 
  
 | 
def OnKillBattleNPC(curPlayer, curNPC):  
 | 
#    ## »÷ɱ¶ÔÊÖ£¬Ç°¶Ë±¾£¬Ê¹ÓÃľ׮NPC×÷Ϊ¶ÔÊÖ  
 | 
#      
 | 
#    if curNPC.GetGameObjType() != IPY_GameWorld.gotNPC or curNPC.GetType() not in [ChConfig.ntPriWoodPilePVE, ChConfig.ntPriWoodPilePVP]:  
 | 
#        GameWorld.DebugLog("»÷ɱ·Çľ׮NPC£¬²»½áËã!")  
 | 
#        return  
 | 
#      
 | 
#    # Ê¤Àû½áËãÈë¿Ú£ººó¶ËÑéÖ¤»÷ɱ¶ÔÊÖ  
 | 
#    tagPlayerID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaBattleTagID)  
 | 
#    GameWorld.DebugLog("¾º¼¼³¡»÷ɱ¶ÔÊÖ! tagPlayerID=%s" % tagPlayerID, curPlayer.GetPlayerID())  
 | 
#    isWin = 1  
 | 
#    SendGameServer_ArenaBattleOver(curPlayer, isWin)  
 | 
    return  
 | 
  
 | 
def SendGameServer_ArenaBattleOver(curPlayer, isWin):  
 | 
    ## ·¢ËÍGameServer֪ͨս¶·½áËã  
 | 
      
 | 
    playerID = curPlayer.GetPlayerID()  
 | 
    tagPlayerID = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaBattleTagID)  
 | 
    if not tagPlayerID:  
 | 
        GameWorld.ErrLog("¾º¼¼³¡½áËãʱûÓжÔÊÖID!", playerID)  
 | 
        __DoArenaBattleOver(curPlayer)  
 | 
        return  
 | 
      
 | 
    if not CheckArenaBattleCount(curPlayer):  
 | 
        GameWorld.ErrLog("¾º¼¼³¡ÒѾûÓжÔÕ½´ÎÊý!", playerID)  
 | 
        __DoArenaBattleOver(curPlayer)  
 | 
        return  
 | 
      
 | 
    tick = GameWorld.GetGameWorld().GetTick()  
 | 
    if not GameWorld.SetPlayerTickTime(curPlayer, ChConfig.TYPE_Player_Tick_Arena, tick):  
 | 
        GameWorld.ErrLog("½áË㾺¼¼³¡CDÖУ¡tagPlayerID=%s" % tagPlayerID, playerID)  
 | 
        return  
 | 
      
 | 
    playerLV = curPlayer.GetLV()  
 | 
    playerScore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaScore)  
 | 
    msgInfo = str(["BattleResult", {"tagPlayerID":tagPlayerID, "isWin":isWin, "playerLV":playerLV, "playerScore":playerScore,   
 | 
                                    "realmLV":curPlayer.GetOfficialRank(), "fightPower":PlayerControl.GetFightPower(curPlayer)}])  
 | 
    GameWorld.DebugLog("¾º¼¼³¡·¢ËÍGameServer½áËã: %s" % msgInfo, playerID)  
 | 
    GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(curPlayer.GetID(), 0, 0, "Arena", msgInfo, len(msgInfo))  
 | 
    return  
 | 
  
 | 
def __DoArenaBattleOver(curPlayer, retDict={}):  
 | 
    ## Ö÷¶¯Õ½¶·½áËã½±Àø  
 | 
    # @param isOK: Trueʱ²Å½áËã½±Àø£¬·ÀֹijЩÒì³£Çé¿öÎÞ·¨½áËã֪ͨǰ¶ËFBOver£¬µ¼Ö¿¨¸±±¾  
 | 
      
 | 
    GameWorld.DebugLog("½áË㾺¼¼³¡¶ÔÕ½½±Àø! retDict=%s" % retDict)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaBattleTagID, 0)  
 | 
      
 | 
    isOK = retDict.get("isOK", False)  
 | 
    isWin = retDict.get("isWin", 0)  
 | 
    if not isOK:  
 | 
        # Ò»Ö±Òì³£µÄÇé¿öÖ±½Óͬ²½½áÊø°ü£¬·ÀÖ¹²»½áË㿨¸±±¾  
 | 
        FBCommon.NotifyFBOver(curPlayer, ChConfig.Def_FBMapID_ArenaBattle, 0, isWin)  
 | 
        return  
 | 
      
 | 
    #GameServer MapServer Í¬²½ÓÐÒ»¶¨Ê±¼ä²î£¬±¾¹¦ÄÜ´æÔÚ±»¶¯ÌôÕ½Òý·¢»ý·Ö±ä¶¯µÄÇé¿ö£¬  
 | 
    #curScore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaScore)  
 | 
    addScore = retDict["addScore"]  
 | 
    updScore = retDict["updScore"]  
 | 
    curOrder = retDict["curOrder"]  
 | 
    updOrder = retDict["updOrder"]  
 | 
      
 | 
    # ¿Û´ÎÊý  
 | 
    todayBattleCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaBattleCountDay) + 1  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaBattleCountDay, todayBattleCount)  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaMatchRefreshCount, 0)  
 | 
          
 | 
    # ¸üлý·Ö  
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaScore, updScore)  
 | 
    highestScore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaHighestScore)  
 | 
    if updScore > highestScore:  
 | 
        highestScore = updScore  
 | 
        PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaHighestScore, highestScore)  
 | 
        GameWorld.DebugLog("    ¸üоº¼¼³¡ÀúÊ·×î¸ß·Ö! %s" % highestScore)  
 | 
          
 | 
    # Ê¤Àû¸ø¶îÍâ½±Àø  
 | 
    itemList = retDict.get("awardItemList", [])  
 | 
    ItemControler.GivePlayerItemOrMail(curPlayer, itemList)  
 | 
    jsonItemList = FBCommon.GetJsonItemList(itemList)  
 | 
      
 | 
    overDict = {FBCommon.Over_itemInfo:jsonItemList, "addScore":addScore, "updScore":updScore, "curOrder":curOrder, "updOrder":updOrder}  
 | 
    FBCommon.NotifyFBOver(curPlayer, ChConfig.Def_FBMapID_ArenaBattle, 0, isWin, overDict)  
 | 
    Sync_ArenaInfo(curPlayer)  
 | 
      
 | 
    # ´¥·¢ÈÎÎñ  
 | 
    EventShell.EventRespons_ArenaBattleOver(curPlayer)  
 | 
    EventShell.EventRespons_ArenaHighestScore(curPlayer)  
 | 
      
 | 
    PlayerWeekParty.AddWeekPartyActionCnt(curPlayer, ChConfig.Def_WPAct_Arena, 1)  
 | 
    PlayerFeastTravel.AddFeastTravelTaskValue(curPlayer, ChConfig.Def_FeastTravel_Arena, 1)  
 | 
    PlayerActivity.AddDailyActionFinishCnt(curPlayer, ShareDefine.DailyActionID_Arena, 1)  
 | 
    return  
 | 
  
 | 
def __DoUpdateArenaScore(curPlayer, cmdDict={}):  
 | 
    ''' Íæ¼ÒÖ±½Ó¸üлý·Ö£¬ÓÐÒÔϼ¸ÖÖÇé¿ö£¬¶¼ÊDZ»ÌôÕ½µÄ£¬Ö»¸üлý·Ö  
 | 
    1. ±»¶¯ÌôÕ½ÔÚÏßʱֱ½Ó¸üлý·Ö  
 | 
    2. ÀëÏß/ÍÑ»úʱ±»ÌôÕ½£¬ÉÏÏߺóͬ²½×îлý·Ö  
 | 
    '''  
 | 
      
 | 
    playerScore = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaScore)  
 | 
    updScore = cmdDict.get("updScore", playerScore)  
 | 
    if updScore == playerScore:  
 | 
        return  
 | 
      
 | 
    PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaScore, updScore)  
 | 
    Sync_ArenaInfo(curPlayer)  
 | 
    return  
 | 
  
 | 
def GameServer_ArenaResult(curPlayer, msgList, tick):  
 | 
    if not msgList:  
 | 
        return  
 | 
      
 | 
    cmd = msgList[0]  
 | 
    cmdDict = msgList[1] if len(msgList) > 1 else {}  
 | 
    retDict = msgList[2] if len(msgList) > 2 else {}  
 | 
      
 | 
    # Ë¢ÐÂÆ¥Åä  
 | 
    if cmd == "MatchRefresh":  
 | 
        isRefresh = cmdDict.get("isRefresh", False)  
 | 
        refreshCountLimit = IpyGameDataPY.GetFuncCfg("ArenaSet", 5)  
 | 
        if isRefresh and refreshCountLimit:  
 | 
            updRefreshCount = min(250, curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaMatchRefreshCount) + 1)  
 | 
            PlayerControl.NomalDictSetProperty(curPlayer, ChConfig.Def_PDict_ArenaMatchRefreshCount, updRefreshCount)  
 | 
            GameWorld.DebugLog("¸üоº¼¼³¡Ë¢ÐÂÆ¥Åä´ÎÊý! updRefreshCount=%s" % updRefreshCount)  
 | 
            Sync_ArenaInfo(curPlayer)  
 | 
              
 | 
    # Ö÷¶¯¶ÔÕ½½á¹û  
 | 
    elif cmd == "BattleResult":  
 | 
        __DoArenaBattleOver(curPlayer, retDict)  
 | 
          
 | 
    # ±»¶¯ÌôÕ½¸üлý·Ö  
 | 
    elif cmd == "UpdScore":  
 | 
        __DoUpdateArenaScore(curPlayer, cmdDict)  
 | 
          
 | 
    return  
 | 
  
 | 
def Sync_ArenaInfo(curPlayer, isReset=False):  
 | 
    clientPack = ChPyNetSendPack.tagMCArenaPlayerInfo()  
 | 
    clientPack.IsReset = 1 if isReset else 0  
 | 
    clientPack.Score = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaScore)  
 | 
    clientPack.BattleCountToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaBattleCountDay)  
 | 
    clientPack.MatchRefreshCount = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaMatchRefreshCount)  
 | 
    clientPack.ItemAddBattleCountToday = curPlayer.NomalDictGetProperty(ChConfig.Def_PDict_ArenaItemAddCount)  
 | 
    NetPackCommon.SendFakePack(curPlayer, clientPack)  
 | 
    return  
 | 
  
 |