| #!/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 PlayerActTask  | 
| import PlayerWeekParty  | 
| import PlayerFeastTravel  | 
| import PlayerActivity  | 
| import PlayerSuccess  | 
| import PlayerGubao  | 
|   | 
| 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  | 
|       | 
|     if tagPlayerID >= 10000:  | 
|         if result:  | 
|             GameWorld.DebugLog("ÕæÈËÓɺó¶Ë¾µÏñPK¾ö¶¨Ê¤¸º! tagPlayerID=%s" % tagPlayerID, playerID)  | 
|             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"]  | 
|     offlineRecTime = retDict.get("offlineRecTime", 0)  | 
|       | 
|     # ¿Û´ÎÊý  | 
|     if not offlineRecTime or GameWorld.CheckTimeIsSameServerDayEx(offlineRecTime):  | 
|         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)  | 
|     PlayerSuccess.DoAddSuccessProgress(curPlayer, ShareDefine.SuccType_Arena, 1)  | 
|     PlayerGubao.AddGubaoItemEffValue(curPlayer, PlayerGubao.GubaoEffType_Arena, 1)  | 
|     PlayerActTask.AddActTaskValue(curPlayer, ChConfig.ActTaskType_Arena)  | 
|     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  | 
|   |