| #!/usr/bin/python  | 
| # -*- coding: GBK -*-  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| #-------------------------------------------------------------------------------  | 
| #  | 
| ##@package GameWorldMergeBoss  | 
| #  | 
| # @todo:¿ç·þboss  | 
| # @author hxp  | 
| # @date 2015-9-21  | 
| # @version 1.3  | 
| #  | 
| # ÏêϸÃèÊö: ¿ç·þboss  | 
| # @change: "2015-10-10 10:10" hxp Ôö¼Ó¶àµØÍ¼Ö§³Ö  | 
| # @change: "2017-05-23 10:30" hxp ±¾·þ¿ç·þplayerIDΨһͨÓ÷½Ê½ÐÞ¸Ä  | 
| # @change: "2017-07-06 20:30" hxp Ôö¼Ó¹¦Ñ«·½Ê½Ð޸ģ»»î¶¯ÖÐÁÙʱ·þÎñÆ÷ά»¤´¦ÀíÖ§³Ö  | 
| #  | 
| #---------------------------------------------------------------------  | 
| #"""Version = 2017-07-06 20:30"""  | 
| #---------------------------------------------------------------------  | 
| import GameWorld  | 
| import ReadChConfig  | 
| import PlayerCompensation  | 
| import PlayerMergeRegister  | 
| import MergeBroadcast  | 
| import ShareDefine  | 
| import ChConfig  | 
| import PlayerControl  | 
| import PlayerMergeEvent  | 
|   | 
| import time  | 
|   | 
| g_mergeBossOverPlayerList = [] # ÒѾ½áËãÍê¿ç·þbossµÄ±¾·þÍæ¼ÒIDÁÐ±í  | 
|   | 
| def IsMergeBossOpen(curPlayer, isNotify):  | 
|     global g_mergeBossOverPlayerList  | 
|       | 
|     if GameWorld.GetGameWorld().GetDictByKey(ShareDefine.Def_Notify_WorldKey_MergeBoss) != 1:  | 
|         if isNotify:  | 
|             PlayerControl.NotifyCode(curPlayer, "GeRen_hgg_21675")  | 
|         return False  | 
|       | 
|     # ÒѾ´òÍê½áËãÁË  | 
|     if curPlayer.GetPlayerID() in g_mergeBossOverPlayerList:  | 
|         if isNotify:  | 
|             PlayerControl.NotifyCode(curPlayer, "GeRen_liubo_884824")  | 
|         return False  | 
|       | 
|     return True  | 
|   | 
| def OnClientServerInitOK(tick):  | 
|     # ×Ó·þÆô¶¯³É¹¦Ê±  ¿ç·þ·þÎñÆ÷֪ͨ×Ó·þÐÅÏ¢  | 
|     mergeBossState = GameWorld.GetGameWorld().GetDictByKey(ShareDefine.Def_Notify_WorldKey_MergeBoss)  | 
|     dictKeyValue = {ShareDefine.Def_Notify_WorldKey_MergeBoss:mergeBossState}  | 
|     MergeBroadcast.SendBroadcastMerge(ChConfig.Def_MergeDictKeyValue, 0, dictKeyValue, False)  | 
|     return  | 
|   | 
| def MergeBoss_ChangeState(state):  | 
|     ##¿ç·þboss»î¶¯×´Ì¬±ä¸ü  | 
|     global g_mergeBossOverPlayerList  | 
|       | 
|     if GameWorld.IsMergeServer():  | 
|         pass  | 
|     else:  | 
|         g_mergeBossOverPlayerList = []  | 
|           | 
|     return  | 
|   | 
| ## ¿ç·þboss±»»÷ɱÊÕµ½ÐÅÏ¢´¦Àí  | 
| #  @param infoDict ÐÅÏ¢×Öµä  | 
| #  @return None  | 
| def RecvMergeBossKilled(infoDict):  | 
|     if GameWorld.IsMergeServer():  | 
|         return  | 
|       | 
|     npcID = infoDict["NPCID"] # ±»»÷ɱµÄbossID  | 
|     lastHurtPlayerID = infoDict["LastHurtID"] # ×îºóÒ»»÷Íæ¼Ò  | 
|     orderPlayerIDList = infoDict["OrderIDList"] # Íæ¼ÒÉËѪÅÅÐÐ  | 
|       | 
|     __GiveMergeBossLastHurtAward(npcID, lastHurtPlayerID)  | 
|     __GiveMergeBossHurtOrderAward(npcID, orderPlayerIDList)  | 
|     return  | 
|   | 
| ## ¸ø¿ç·þboss×îºóÒ»»÷²¹µ¶½±Àø  | 
| def __GiveMergeBossLastHurtAward(npcID, lastHurtPlayerID):  | 
|     lastHurtAwardInfo = ReadChConfig.GetEvalChConfig("MergeBoss_LastHurtAward")  | 
|       | 
|     title, contentTemple, getDays = lastHurtAwardInfo[0]  | 
|     awardItemDict = lastHurtAwardInfo[1]  | 
|     if npcID not in awardItemDict:  | 
|         GameWorld.ErrLog("ÕÒ²»µ½¿ç·þboss×îºóÒ»»÷½±ÀøÐÅÏ¢£¡bossID=%s, ¼ì²éMergeBoss_LastHurtAward.txt" % npcID)  | 
|         return  | 
|       | 
|     regRecData = PlayerMergeRegister.GetRegisterPlayerRec(lastHurtPlayerID)  | 
|     # ²»ÊDZ¾·þÍæ¼Ò  | 
|     if not regRecData:  | 
|         GameWorld.DebugLog("²»ÊDZ¾·þÍæ¼ÒlastHurtPlayerID=%s" % lastHurtPlayerID)  | 
|         return  | 
|       | 
|     addItemList = awardItemDict[npcID]  | 
|     content = contentTemple % npcID  | 
|     PlayerCompensation.SendPersonalItemMailEx(title, content, getDays, [lastHurtPlayerID], addItemList)  | 
|     return  | 
|   | 
| ## ¸ø¿ç·þbossÉ˺¦ÅÅÐаñ½±Àø  | 
| def __GiveMergeBossHurtOrderAward(npcID, orderPlayerIDList):  | 
|     orderAwardInfo = ReadChConfig.GetEvalChConfig("MergeBoss_HurtOrderAward")  | 
|       | 
|     title, contentTemple, getDays = orderAwardInfo[0]  | 
|     awardItemDict = orderAwardInfo[1]  | 
|     if npcID not in awardItemDict:  | 
|         GameWorld.ErrLog("ÕÒ²»µ½¿ç·þbossÉ˺¦ÅÅÐн±ÀøÐÅÏ¢£¡bossID=%s, ¼ì²éMergeBoss_HurtOrderAward.txt" % npcID)  | 
|         return  | 
|       | 
|     orderItemDict = awardItemDict[npcID]  | 
|     for order, orderPlayerID in enumerate(orderPlayerIDList, 1):  | 
|         if order not in orderItemDict:  | 
|             GameWorld.ErrLog("ÕÒ²»µ½¿ç·þbossÉ˺¦ÅÅÐн±Àø£¡bossID=%s,order=%s,playerID=%s, ¼ì²éMergeBoss_HurtOrderAward.txt"   | 
|                              % (npcID, order, orderPlayerID))  | 
|             continue  | 
|   | 
|         regRecData = PlayerMergeRegister.GetRegisterPlayerRec(orderPlayerID)  | 
|         # ²»ÊDZ¾·þÍæ¼Ò  | 
|         if not regRecData:  | 
|             GameWorld.DebugLog("²»ÊDZ¾·þÍæ¼ÒorderPlayerID=%s" % orderPlayerID)  | 
|             continue  | 
|       | 
|         content = contentTemple % (npcID, order)  | 
|         addItemList = orderItemDict[order]  | 
|         PlayerCompensation.SendPersonalItemMailEx(title, content, getDays, [orderPlayerID], addItemList)  | 
|     return  | 
|   | 
|   | 
| ## ¿ç·þboss»î¶¯½áËãÊÕµ½ÐÅÏ¢´¦Àí  | 
| #  @param infoDict ÐÅÏ¢×Öµä  | 
| #  @return None  | 
| def RecvMergeBossResult(infoDict):  | 
|     global g_mergeBossOverPlayerList  | 
|       | 
|     if GameWorld.IsMergeServer():  | 
|         return  | 
|       | 
|     totalOrderAwardInfo = ReadChConfig.GetEvalChConfig("MergeBoss_TotalOrderAward")  | 
|     title, contentTemple, getDays = totalOrderAwardInfo[0]  | 
|     awardItemDict = totalOrderAwardInfo[1]  | 
|       | 
|     playerScoreDict = infoDict["PlayerScore"] # Íæ¼Ò×îÖջÃ÷ϸÇé¿ö  | 
|       | 
|     curTime = int(time.time())  | 
|     universalRecMgr = GameWorld.GetUniversalRecMgr()    | 
|     mergeEventRec = universalRecMgr.GetTypeList(ShareDefine.Def_UniversalGameRecType_MergeEvent)  | 
|       | 
|     for playerID, scoreInfo in playerScoreDict.items():  | 
|           | 
|         regRecData = PlayerMergeRegister.GetRegisterPlayerRec(playerID)  | 
|         # ²»ÊDZ¾·þÍæ¼Ò  | 
|         if not regRecData:  | 
|             GameWorld.DebugLog("²»ÊDZ¾·þÍæ¼ÒplayerID=%s" % playerID)  | 
|             continue  | 
|           | 
|         if playerID not in g_mergeBossOverPlayerList:  | 
|             g_mergeBossOverPlayerList.append(playerID)  | 
|               | 
|         accID = PlayerMergeRegister.GetMergeRegRecAccID(regRecData)  | 
|       | 
|         order, gongXun = scoreInfo  | 
|         content = contentTemple % (order)  | 
|         if order in awardItemDict:  | 
|             addItemList = awardItemDict[order]  | 
|             PlayerCompensation.SendPersonalItemMailEx(title, content, getDays, [playerID], addItemList)  | 
|         else:  | 
|             GameWorld.ErrLog("ÕÒ²»µ½¿ç·þbossÕóÓª×ÜÉ˺¦ÅÅÐн±Àø£¡order=%s, ¼ì²éMergeBoss_TotalOrderAward.txt" % (order))  | 
|           | 
|         if gongXun > 0:  | 
|             # ²åÈë½áËãʼþ  | 
|             player = GameWorld.GetPlayerManager().FindPlayerByID(playerID)  | 
|             eventData = gongXun  | 
|             PlayerMergeEvent.AddMergePlayerEvent(mergeEventRec, playerID, PlayerMergeEvent.Def_MSPEvent_AddGongXun,   | 
|                                                  curTime, eventData, player)  | 
|               | 
|         GameWorld.Log("¿ç·þBoss×ܽáËã: playerID=%s,accID=%s,order=%s,gongXun=%s"   | 
|                       % (playerID, accID, order, gongXun))  | 
|           | 
|     return  | 
|   | 
|   |