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