| | |
| | | import PlayerMagicWeapon
|
| | | import PlayerBossReborn
|
| | | import PlayerFairyCeremony
|
| | | import FamilyRobBoss
|
| | | import IpyGameDataPY
|
| | | import PyGameData
|
| | | import PlayerTeam
|
| | |
| | | #因为存在boss分流,所以用gameFB字典,但是存活状态还是用GameWorld字典
|
| | | GameWorld.GetGameFB().SetGameFBDict(ChConfig.Map_NPC_WorldBossDeadTick % npcid, GameWorld.GetGameWorld().GetTick())
|
| | |
|
| | | if GetDropOwnerType(curNPC) == ChConfig.DropOwnerType_Family:
|
| | | FamilyRobBoss.ClearFamilyOwnerBossHurt(curNPC)
|
| | | |
| | |
|
| | | # 清除队伍成员伤血列表
|
| | | AttackCommon.ClearTeamPlayerHurtValue(curNPC)
|
| | | # 清除自定义伤血列表
|
| | | BossHurtMng.ClearHurtValueList(curNPC)
|
| | | #BossHurtMng.ClearHurtValueList(curNPC)
|
| | |
|
| | | # C++设置npc死亡
|
| | | curNPC.SetDead(curNPC.GetDictByKey(ChConfig.Def_NPCDead_Reason),
|
| | |
| | | self.__Killer = None # 击杀者, 由各种规则得出, 一般也是物品归属的代表, 用于广播、记录等确保与归属一致
|
| | | self.__AllKillerDict = {} # 所有击杀的玩家ID对应字典, 非队伍, 一般也是归属的拥有者
|
| | | self.__FeelPlayerList = [] # 所有摸怪玩家列表,处理任务及某些逻辑用
|
| | | |
| | | self.__OwnerHurtType = 0
|
| | | self.__OwnerHurtID = 0
|
| | | return
|
| | | #---------------------------------------------------------------------
|
| | | ## 移动到某一个点的附近点
|
| | |
| | | GameWorld.GetPlayerManager().GameServer_QueryPlayerResult(0, 0, 0, 'GameWorldBossState',
|
| | | '%s' % (msgList), len(str(msgList)))
|
| | |
|
| | | if GetDropOwnerType(curNPC) == ChConfig.DropOwnerType_Family:
|
| | | FamilyRobBoss.FamilyOwnerBossOnReborn(curNPC)
|
| | | |
| | | # 检查是否有光环, 在重生时处理,不然可能导致有些无战斗逻辑的怪物无法套上光环buff
|
| | | skillManager = curNPC.GetSkillManager()
|
| | | for index in xrange(skillManager.GetSkillCount()):
|
| | |
| | | #=====================================================================================================
|
| | |
|
| | | #boss伤血排行榜击杀逻辑
|
| | | BossHurtMng.BossOnKilled(curNPC)
|
| | | #BossHurtMng.BossOnKilled(curNPC)
|
| | |
|
| | | #掉落需要用到摸怪,所以在处理掉落奖励之前设置
|
| | | self.__SetFeelNPCPlayerList()
|
| | |
| | | # 记录boss击杀信息的NPC
|
| | | bossIpyData = IpyGameDataPY.GetIpyGameDataListNotLog('BOSSInfo', npcID)
|
| | | if bossIpyData:
|
| | | if GetDropOwnerType(curNPC) == ChConfig.DropOwnerType_Family:
|
| | | killerName = FamilyRobBoss.FamilyOwnerBossOnKilled(curNPC, self.__OwnerHurtID)
|
| | | #KillerJob = 0 if not self.__Killer else self.__Killer.GetJob()
|
| | | GameServer_KillGameWorldBoss(curNPC.GetNPCID(), killerName, 0)
|
| | | #===========================================================================================
|
| | |
| | | self.__MaxHurtPlayer = self.__FindBossMaxHurtObj() # py自定义伤血所得到的Boss最大伤血玩家
|
| | |
|
| | | self.__AllKillerDict, curTeam, hurtType, hurtID = self.__FindNPCKillerInfo()
|
| | | self.__OwnerHurtType, self.__OwnerHurtID = hurtType, hurtID
|
| | |
|
| | | #最后一击处理
|
| | | self.__DoLastTimeHurtLogic()
|
| | |
| | | #被队伍杀死
|
| | | elif curTeam != None:
|
| | | self.__KilledByTeamSetPrize(curTeam, hurtType, hurtID)
|
| | | |
| | | #被仙盟杀死
|
| | | elif hurtType == ChConfig.Def_NPCHurtTypeFamily:
|
| | | self.__KilledByFamilySetPrize(hurtType, hurtID)
|
| | |
|
| | | else:
|
| | | GameWorld.ErrLog("NPC归属异常:npcID=%s,hurtType=%s,hurtID=%s" % (npcID, hurtType, hurtID))
|
| | |
| | | #GameWorld.Log("队伍杀死怪物奖励,逻辑成功结束")
|
| | | return
|
| | |
|
| | | def __KilledByFamilySetPrize(self, hurtType, hurtID):
|
| | | ## 仙盟杀死NPC奖励逻辑
|
| | | curNPC = self.__Instance
|
| | | |
| | | maxLV = 0
|
| | | dropPlayer = None
|
| | | ownerPlayerList = []
|
| | | refreshPoint = curNPC.GetRefreshPosAt(curNPC.GetCurRefreshPointIndex())
|
| | | copyPlayerMgr = GameWorld.GetMapCopyPlayerManager()
|
| | | for index in xrange(copyPlayerMgr.GetPlayerCount()):
|
| | | player = copyPlayerMgr.GetPlayerByIndex(index)
|
| | | if not player:
|
| | | continue
|
| | | |
| | | if player.GetFamilyID() != hurtID or not self.GetIsInRefreshPoint(player.GetPosX(), player.GetPosY(), refreshPoint):
|
| | | continue
|
| | | |
| | | curPlayerLV = player.GetLV()
|
| | | if maxLV < curPlayerLV:
|
| | | maxLV = curPlayerLV
|
| | | dropPlayer = player
|
| | | ownerPlayerList.append(player)
|
| | | |
| | | if not ownerPlayerList:
|
| | | GameWorld.Log("奖励归属仙盟,但是不存在可获得该奖励的成员!npcID=%s,hurtType=%s,hurtID=%s" |
| | | % (curNPC.GetNPCID(), hurtType, hurtID))
|
| | | |
| | | # 因为仙盟归属boss归属伤血第一的仙盟,仙盟伤血有保护,可能存在伤血第一仙盟在boss死亡的时候都不在
|
| | | # 此时掉落计算玩家算最后一击玩家,归属还是算伤血第一仙盟的
|
| | | if not dropPlayer:
|
| | | dropPlayer = self.__LastHurtPlayer
|
| | | |
| | | if not dropPlayer:
|
| | | GameWorld.ErrLog("奖励归属仙盟,找不到掉落玩家!npcID=%s,hurtType=%s,hurtID=%s" |
| | | % (curNPC.GetNPCID(), hurtType, hurtID))
|
| | | return
|
| | | |
| | | # 赶时间,先简单处理直接取最大等级的,之后可按实际情况来
|
| | | if not self.__LastHurtPlayer:
|
| | | self.__LastHurtPlayer = dropPlayer
|
| | | if not self.__MaxHurtPlayer:
|
| | | self.__MaxHurtPlayer = dropPlayer
|
| | | if not self.__Killer:
|
| | | self.__Killer = dropPlayer
|
| | | maxHurtID = dropPlayer.GetPlayerID()
|
| | | |
| | | for curPlayer in ownerPlayerList:
|
| | | self.__KillNPCFuncEx(curPlayer, curNPC, maxHurtID, False)
|
| | | |
| | | #调用物品掉落
|
| | | self.__NPCDropItem(dropPlayer, hurtType, hurtID, ownerPlayerList)
|
| | | return
|
| | | |
| | | ## 队伍或自己击杀NPC扩展功能
|
| | | # @param curPlayer
|
| | | # @return None
|