hch
2018-09-01 7d72b082da27e949902ef083eb4ea2da201a013f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#!/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