| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| ##@package MergePlayer  | 
| #  | 
| # @todo:¿ç·þÍæ¼Ò  | 
| # @author hxp  | 
| # @date 2017-05-24  | 
| # @version 1.0  | 
| #  | 
| # ÏêϸÃèÊö: ¿ç·þÍæ¼Ò  | 
| #  | 
| #-------------------------------------------------------------------------------  | 
| #"""Version = 2017-05-24 16:00"""  | 
| #-------------------------------------------------------------------------------  | 
| import GameWorld  | 
| import MergeBroadcast  | 
| import PlayerMergeRegister  | 
| import datetime  | 
| import ChConfig  | 
|   | 
| __g_mergeServerOLPlayerInfo = {} # ¿ç·þ·þÎñÆ÷ÔÚÏßÍæ¼ÒÐÅÏ¢ {playerID:[Íæ¼ÒÐÅÏ¢Áбí], ...}  | 
|   | 
| (  | 
| Def_MSOLPlayer_LV, # µÈ¼¶  | 
| ) = range(1)  | 
|   | 
| def __GetMergeServerPlayerInfo(curPlayer):  | 
|     return [curPlayer.GetLV()]  | 
|   | 
| def DisposeMergeServerOnlinePlayer():  | 
|     if not GameWorld.IsMergeServer():  | 
|         return  | 
|       | 
|     # Ã¿Õû5·ÖÖÓͳ¼ÆÒ»´Î  | 
|     if datetime.datetime.today().minute % 5 != 0:  | 
|         return  | 
|       | 
|     olPlayerDict = {}  | 
|     playerManager = GameWorld.GetPlayerManager()  | 
|     for index in xrange(playerManager.GetPlayerCount()):  | 
|         player = playerManager.GetPlayerByIndex(index)  | 
|         if player == None or not player.GetInitOK():  | 
|             continue  | 
|         olPlayerDict[player.GetPlayerID()] = __GetMergeServerPlayerInfo(player)  | 
|           | 
|     MergeBroadcast.SendBroadcastMerge(ChConfig.Def_MergeOnLinePlayer, 0, olPlayerDict, False)  | 
|     return  | 
|   | 
| def OnRecvMergeServerOLPlayerInfo(onlinePlayerDict):  | 
|     '''½ÓÊÕ¿ç·þ·þÎñÆ÷ͬ²½µÄÔÚ¿ç·þ·þÎñÆ÷µÄÍæ¼ÒÐÅÏ¢  | 
|     '''  | 
|     global __g_mergeServerOLPlayerInfo  | 
|     __g_mergeServerOLPlayerInfo = {} # Ã¿´ÎÊÕµ½Í¬²½ºóÇå¿Õ¡¢ÖØÐ¼Ç¼  | 
|       | 
|     playerMgr = GameWorld.GetPlayerManager()  | 
|     for playerID, playerInfo in onlinePlayerDict.items():  | 
|         regRecData = PlayerMergeRegister.GetRegisterPlayerRec(playerID)  | 
|         # ²»ÊDZ¾·þÍæ¼Ò  | 
|         if not regRecData:  | 
|             continue  | 
|           | 
|         # ÒѾÔÚ±¾·þµÄ²»´¦Àí  | 
|         player = playerMgr.FindPlayerByID(playerID)  | 
|         if player:  | 
|             continue  | 
|         __g_mergeServerOLPlayerInfo[playerID] = playerInfo  | 
|           | 
|     GameWorld.DebugLog("¿ç·þ·þÎñÆ÷±¾·þÔÚÏßÍæ¼ÒÐÅÏ¢: %s" % __g_mergeServerOLPlayerInfo)  | 
|     return  | 
|   | 
| def OnPlayerLogin(curPlayer):  | 
|     global __g_mergeServerOLPlayerInfo  | 
|       | 
|     # Ö»´¦Àí×Ó·þ  | 
|     if GameWorld.IsMergeServer():  | 
|         return  | 
|       | 
|     playerID = curPlayer.GetPlayerID()  | 
|     if playerID in __g_mergeServerOLPlayerInfo:  | 
|         __g_mergeServerOLPlayerInfo.pop(playerID)  | 
|         GameWorld.DebugLog("Íæ¼ÒµÇ¼±¾·þÒÆ³ý¿ç·þ·þÎñÆ÷ÔÚÏßÐÅÏ¢: %s" % __g_mergeServerOLPlayerInfo, playerID)  | 
|           | 
|     return  | 
|   | 
| def OnPlayerLeaveGotoMergeServer(curPlayer, tick):  | 
|     global __g_mergeServerOLPlayerInfo  | 
|   | 
|     # Ö»´¦Àí×Ó·þ  | 
|     if GameWorld.IsMergeServer():  | 
|         return  | 
|       | 
|     playerID = curPlayer.GetPlayerID()  | 
|     leaveTick = curPlayer.GetDictByKey(ChConfig.Def_PlayerKey_OnGotoMergeServerTick)  | 
|     if not leaveTick:  | 
|         return  | 
|     if tick - leaveTick > 60000:  | 
|         return  | 
|     __g_mergeServerOLPlayerInfo[playerID] = __GetMergeServerPlayerInfo(curPlayer)  | 
|     GameWorld.DebugLog("Íæ¼ÒµÇ¼µ½¿ç·þ·þÎñÆ÷, Ìí¼Ó¿ç·þ·þÎñÆ÷ÔÚÏßÍæ¼ÒÐÅÏ¢: tick=%s,leaveTick=%s, %s"   | 
|                        % (tick, leaveTick, __g_mergeServerOLPlayerInfo), playerID)  | 
|     return  | 
|   | 
| #// C0 15 Í¨Öª¼´½«µÇÂ¼Ìø×ªµ½¿ç·þ·þÎñÆ÷ #tagCGGotoMergeServer  | 
| #  | 
| #struct    tagCGGotoMergeServer  | 
| #{  | 
| #    tagHead        Head;      | 
| #};  | 
| def OnGotoMergeServer(index, clientData, tick):  | 
|     curPlayer = GameWorld.GetPlayerManager().GetPlayerByIndex(index)  | 
|     curPlayer.SetDict(ChConfig.Def_PlayerKey_OnGotoMergeServerTick, tick)  | 
|     GameWorld.DebugLog("Íæ¼Ò¼´½«µÇÂ¼Ìø×ªµ½¿ç·þ·þÎñÆ÷: tick=%s" % (tick), curPlayer.GetPlayerID())  | 
|     return  | 
|   | 
|   | 
| def GetMergeServerOnlinePlayerInfo(): return __g_mergeServerOLPlayerInfo  | 
| def GetMergeServerOnlinePlayerByID(playerID):  | 
|     if playerID in __g_mergeServerOLPlayerInfo:  | 
|         return __g_mergeServerOLPlayerInfo[playerID]  | 
|     return  | 
|   |