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