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