#!/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