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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
#!/usr/bin/python
# -*- coding: GBK -*-
#---------------------------------------------------------------------
#
#---------------------------------------------------------------------
##@package MergeBroadCastRecive.py
# ½ÓÊÕ¿ç·þÈü·þÎñÆ÷¹ã²¥ÐÅÏ¢
#
# @author wdb
# @date 2012-10-31 16:50
# @version 3.2
# @note
# @change: "2012-11-02 16:00" wdb Ôö¼Ó¿ç·þÈüÌÔÌ­Èü²ÎÈü½±Àø
# @change: "2012-11-29 13:00" hyx ½ÓÊÕ¿ç·þÈü±ÈÈüÂÖ´ÎÐÅÏ¢
# @change: "2012-11-29 19:00" wdb Ìí¼ÓÈ«·þ½±Àø
# @change: "2012-11-30 20:00" jiang ½ÓÊÕÍò¹ú·þÎñÆ÷Ï·¢µÄÐÅÏ¢
# @change: "2012-12-04 14:00" jiang ½ÓÊÕÍò¹ú·þÎñÆ÷Ï·¢µÄÐÅÏ¢__MergeWarStartTime
# @change: "2012-12-06 10:50" hyx Ìí¼Óµ÷ÊÔLOG
# @change: "2012-12-10 16:10" hyx É¾³ý¶àÓàµÄ¿ç·þ֪ͨ
# @change: "2012-12-13 19:00" wdb ¿ç·þ¹ã²¥ÐÞ¸Ä
# @change: "2012-12-13 19:00" wdb Îó´«»¹Ô­
# @change: "2012-12-14 19:30" hyx »î¶¯½áÊøÊ±Çå³ýÈËÔ±ºÍ¶ÔÕ½ÐÅÏ¢
# @change: "2013-01-11 11:00" wdb Ôö¼Ó ¹Ø±ÕÍò¹úÕ½ÉÏ´«Êý¾ÝÉÏ´«Êý¾Ý
# @change: "2013-01-21 17:30" hyx Ôö¼ÓÈÙÒ«Ö®Õ½½á¹û
# @change: "2013-01-29 14:00" wdb ¿ç·þÕ½½áÊø£¬É¾³ýÉÏ´«Êý¾ÝÐÅÏ¢
# @change: "2015-09-18 19:30" hxp Ôö¼Ó¿ç·þboss
# @change: "2015-10-25 22:00" hxp Ôö¼Ó¿ç·þPK
# @change: "2015-11-05 12:00" hxp Ôö¼Ó»Ö¸´¿ç·þÁ¬Ê¤£»¿ç·þÈ«·þ¹ã²¥
# @change: "2015-11-06 16:30" hxp Ôö¼ÓpyÀ®°È£¬Ö§³Ö¿ç·þ
# @change: "2015-11-13 17:00" hxp Ôö¼ÓÍõÕßÕù°Ô
# @change: "2016-01-11 16:00" hxp ¿ç·þPKδͬ²½µÄPK¼Ç¼֪ͨ×Ó·þ
# @change: "2017-05-24 16:00" hxp ¿ç·þ·þÎñÆ÷ÔÚÏßÍæ¼Ò
# @change: "2017-06-22 15:00" hxp Ôö¼Ó¿ç·þºé»ÄÖ®Á¦£»¿ç·þÍæ¼ÒÊý¾Ýʼþ£»¿ç·þ¹ã²¥Ôö¼ÓÌõ¼þ¹ýÂË×Ó·þÊÇ·ñÌáÐÑ
# @change: "2017-07-06 20:30" hxp Ôö¼Ó¿ç·þ·þÎñÆ÷¿ØÖƵĻ×Öµä״ֵ̬±ä¸üͬ²½
#---------------------------------------------------------------------
#""Version = 2017-07-06 20:30"""
#---------------------------------------------------------------------
import IPY_GameServer
import GameWorld
import ChConfig
import traceback
import GameConfig
import PlayerControl
import ChPlayer
import GameWorldActionControl
import PlayerMergeRegister
import GameWorldMergeBoss
import GameWorldMergeKing
import PlayerMergeEvent
import GameWorldMergePK
import PlayerDBGSEvent
import MergePlayer
import PlayerTalk
#---------------------------------------------------------------------
 
 
## ¿ç·þGameWorld×ÖµäkeyÖµ11
def __MergeDictKeyValue(infoDict):
    GameWorld.Log('ÊÕµ½¿ç·þ·þÎñÆ÷ͬ²½µÄ×ÖµäÖµ±ä¸ü£º infoDict=%s' % (infoDict))
    gameWorld = GameWorld.GetGameWorld()
    for key, value in infoDict.items():
        #֪ͨMapserver,ÉèÖÃ×Öµä
        GameWorld.SendMapServerMsgEx(key, value)
        #DZ¹æÔò£ºÔÚChConfig»î¶¯Ïà¹ØÉèÖÃÖУ¬ÌáÈ¡ÁË×ÖµäÃû
        gameWorld.SetDict(key, value)
        #´¦ÀíGameServer»î¶¯Âß¼­
        GameWorldActionControl.__DoLogic_GameServer_ActionState(key, value)
        
    return
 
## ¿ç·þbossµ¥boss»÷ɱ½á¹û12
#  @param infoDict ÐÅÏ¢×Öµä
#  @return None
def __MergeBossKilled(infoDict):
    GameWorldMergeBoss.RecvMergeBossKilled(infoDict)
    return
 
## ¿ç·þboss½á¹û13
#  @param infoDict ÐÅÏ¢×Öµä
#  @return None
def __MergeBossResult(infoDict):
    GameWorldMergeBoss.RecvMergeBossResult(infoDict)
    return
 
## ¿ç·þPKÆ¥ÅäÐÅÏ¢14
def __MergePKMatch(infoDict): GameWorldMergePK.OnRecvMergePKMatchInfo(infoDict)
## ¿ç·þPKÒÑ×¼±¸ºÃµÄ·¿¼äÁбí15
def __MergePKReadyOKRoom(infoDict): GameWorldMergePK.OnRecvMergePKReadyOKRoom(infoDict)
## ¿ç·þPKͬ²½ÅÅÐаñ16
def __MergePKSyncBillboard(infoDict): GameWorldMergePK.OnRecvMergePKSyncBillboard(infoDict)
## ¿ç·þPK»ñµÃÐÒÔËÎïÆ·17
def __MergePKLuckyItem(infoDict): GameWorldMergePK.OnRecvMergePKLuckyItem(infoDict)
## ¿ç·þPK»î¶¯×´Ì¬±ä¸ü18
def __MergePKActionState(infoDict): GameWorldMergePK.OnRecvMergePKActionState(infoDict)
## ¿ç·þPK»î¶¯¸ßÊÖ°ñÍæ¼ÒչʾÐÅÏ¢19
def __MergePKTopPlayerView(infoDict): GameWorldMergePK.OnRecvMergePKTopPlayerView(infoDict)
## ¿ç·þPK»Ö¸´Á¬Ê¤¿Û·ÑÐÅÏ¢20
def __RecoverMergePKWinCost(infoDict): GameWorldMergePK.OnRecvRecoverMergePKWinCost(infoDict)
## ¿ç·þPKδͬ²½µÄPK½á¹û24
def __MergePKUnNotifyOverInfo(infoDict): GameWorldMergePK.OnRecvMergePKUnNotifyOverInfo(infoDict)
 
## ¿ç·þÈ«·þ¹ã²¥21
def __MergeWorldNotify(infoDict):
    country = infoDict["country"]
    msgMark = infoDict["msgMark"]
    msgParamList = infoDict["msgParamList"]
    #lineID = infoDict["lineID"]
    mergeMinOSD = infoDict["mergeMinOSD"]
    mergeMaxOSD = infoDict["mergeMaxOSD"]
    mergeMapInfo = infoDict["mergeMapInfo"]
    openServerDay = PlayerDBGSEvent.GetDBGSTrig_ByKey(PlayerDBGSEvent.Def_ServerDay)
    if mergeMinOSD >= 0 and openServerDay < mergeMinOSD:
        GameWorld.DebugLog("±¾·þ¿ª·þÌìСÓÚ×îС¿ç·þ¹ã²¥Ì죬²»´¦Àí¿ç·þ¹ã²¥! openServerDay=%s,mergeMinOSD=%s" % (openServerDay, mergeMinOSD))
        return
    if mergeMaxOSD >= 0 and openServerDay > mergeMaxOSD:
        GameWorld.DebugLog("±¾·þ¿ª·þÌì´óÓÚ×î´ó¿ç·þ¹ã²¥Ì죬²»´¦Àí¿ç·þ¹ã²¥! openServerDay=%s,mergeMaxOSD=%s" % (openServerDay, mergeMaxOSD))
        return
    if mergeMapInfo and len(mergeMapInfo) == 2:
        mergeActionType, dataMapID = mergeMapInfo
        mapInfo = PlayerMergeRegister.GetMergeActionMapPos(mergeActionType)
        if mapInfo:
            curMergeMapID = mapInfo[0]
            if dataMapID != curMergeMapID:
                GameWorld.DebugLog("·Ç±¾·þËù·ÖÅäµÄ¿ç·þµØÍ¼£¬²»´¦Àí¿ç·þ¹ã²¥! curMergeMapID=%s,dataMapID=%s" % (curMergeMapID, dataMapID))
                return
    PlayerControl.WorldNotify(country, msgMark, msgParamList)
    return
 
## ¿ç·þÈ«·þÀ®°È22
def __MergeLoudspeaker(infoList):
    accID, playerID, playerName, SpeakerType, Text, extraValue, extras = infoList
    PlayerTalk.BroadCastPYSpeaker(accID, playerID, playerName, SpeakerType, Text, extraValue, extras)
    return
 
## ¿ç·þÍõÕßÕù°Ô23
def __MergePKKing(infoDict): GameWorldMergeKing.OnRecvMergeServerPKKing(infoDict)
 
## ¿ç·þ·þÎñÆ÷ÔÚÏßÍæ¼ÒÐÅÏ¢25
def __MergeOnLinePlayerInfo(infoDict): MergePlayer.OnRecvMergeServerOLPlayerInfo(infoDict)
 
## ¿ç·þÍæ¼Òʼþ27
def _MergePlayerEvent(infoDict): PlayerMergeEvent.OnRecvMergePlayerEvent(infoDict)
#---------------½ÓÊÕ¹ÜÀí-----------------
#²Ù×÷¶ÔÓ¦µÄ·½·¨
Def_FuncDict = {
                ChConfig.Def_MergeDictKeyValue:__MergeDictKeyValue,  # ¿ç·þGameWorld×ÖµäkeyÖµ11
                ChConfig.Def_MergeBossKilled:__MergeBossKilled,  # ¿ç·þbossµ¥boss»÷ɱ½á¹û12
                ChConfig.Def_MergeBossResult:__MergeBossResult,  # ¿ç·þboss½á¹û13
                ChConfig.Def_MergePKMatchResult:__MergePKMatch,  # ¿ç·þPKÆ¥ÅäÐÅÏ¢14
                ChConfig.Def_MergePKReadyOKRoomList:__MergePKReadyOKRoom,  # ¿ç·þPKÒÑ×¼±¸ºÃµÄ·¿¼äÁбí15
                ChConfig.Def_MergePKSyncBillboard:__MergePKSyncBillboard,  # ¿ç·þPKͬ²½ÅÅÐаñ16
                ChConfig.Def_MergePKLuckyItem:__MergePKLuckyItem,  # ¿ç·þPK»ñµÃÐÒÔËÎïÆ·17
                ChConfig.Def_MergePKActionState:__MergePKActionState,  # ¿ç·þPK»î¶¯×´Ì¬±ä¸ü18
                ChConfig.Def_MergePKTopPlayerView:__MergePKTopPlayerView,  # ¿ç·þPK»î¶¯¸ßÊÖ°ñÍæ¼ÒչʾÐÅÏ¢19
                ChConfig.Def_RecoverMergePKWinCost:__RecoverMergePKWinCost,  # ¿ç·þPK»Ö¸´Á¬Ê¤¿Û·ÑÐÅÏ¢20
                ChConfig.Def_MergePKUnNotifyOverInfo:__MergePKUnNotifyOverInfo,  # ¿ç·þPKδͬ²½µÄPK½á¹û24
                ChConfig.Def_MergeWorldNotify:__MergeWorldNotify,  # ¿ç·þÈ«·þ¹ã²¥21
                ChConfig.Def_MergeLoudspeaker:__MergeLoudspeaker,  # ¿ç·þÈ«·þÀ®°È22
                ChConfig.Def_MergePKKing:__MergePKKing,  # ¿ç·þÍõÕßÕù°Ô23
                ChConfig.Def_MergeOnLinePlayer:__MergeOnLinePlayerInfo,  # ¿ç·þ·þÎñÆ÷ÔÚÏßÍæ¼ÒÐÅÏ¢25
                ChConfig.Def_MergePlayerEvent:_MergePlayerEvent,  # ¿ç·þÍæ¼Òʼþ27
               }
 
 
## ¿ç·þÈü¹ã²¥ÐÅÏ¢
#  @param index Íæ¼ÒË÷Òý
#  @param tick µ±Ç°Ê±¼ä
#  @return None
def OnMergeBroadCastPack(index, tick):
        
    dataPack = IPY_GameServer.IPY_MGBroadcastMergeClient()
    dataMsg = dataPack.GetData()
    GameWorld.Log('merge broad cast :%s'%dataMsg)
    
    try:
        msgDict = eval(dataMsg)
        # ¼ì²â/´¦Àí¿ç·þÈü¹ã²¥ÐÅÏ¢
        OnMergeBroadCast(msgDict)
    except:
        GameWorld.ErrLog('OnMergeBroadCastPack:%s; except:%s'%(dataMsg, traceback.format_exc()))    
    return
 
 
## ¼ì²â/´¦Àí¿ç·þÈü¹ã²¥ÐÅÏ¢
#  @param index Íæ¼ÒË÷Òý
#  @param tick µ±Ç°Ê±¼ä
#  @return None
def OnMergeBroadCast(msgDict):
    mapConfig = GameConfig.GetConfig()
 
    # ÅжÏÊÇ·ñÀ´×ÔÌØ¶¨µÄµØÍ¼
    mapID = msgDict.get("MapID", 0)
    if mapID != 0 and mapID != mapConfig.get("MergeWarMapID", 0):
        return
            
    # »ñµÃ²Ù×÷Ë÷Òý
    operIndex = msgDict.get("Oper", -1)    
    func = Def_FuncDict.get(operIndex, None)
    
    if not func:
        GameWorld.ErrLog("MergeBroadcast  OnMergeBroadCast operIndex=%s"%operIndex)
        return
 
    infoDict = msgDict.get('Data', {})
    try:
        func(infoDict)
    except:
        GameWorld.ErrLog('OnMergeBroadCast:%s; except:%s'%(infoDict, traceback.format_exc()))
    return