From 9f13daf65e0f6acc43ffab6462b737a70879f5cc Mon Sep 17 00:00:00 2001 From: hxp <ale99527@vip.qq.com> Date: 星期三, 29 八月 2018 20:17:08 +0800 Subject: [PATCH] Add: 2961 【后端】仙盟抢Boss活动; --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py | 78 +++++++++++++++++++++++++++++++++++++-- 1 files changed, 74 insertions(+), 4 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py index 7224177..4ce8874 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCCommon.py @@ -52,6 +52,7 @@ import PlayerMagicWeapon import PlayerBossReborn import PlayerFairyCeremony +import FamilyRobBoss import IpyGameDataPY import PyGameData import PlayerTeam @@ -1946,11 +1947,14 @@ #因为存在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), @@ -1984,6 +1988,9 @@ self.__Killer = None # 击杀者, 由各种规则得出, 一般也是物品归属的代表, 用于广播、记录等确保与归属一致 self.__AllKillerDict = {} # 所有击杀的玩家ID对应字典, 非队伍, 一般也是归属的拥有者 self.__FeelPlayerList = [] # 所有摸怪玩家列表,处理任务及某些逻辑用 + + self.__OwnerHurtType = 0 + self.__OwnerHurtID = 0 return #--------------------------------------------------------------------- ## 移动到某一个点的附近点 @@ -3359,6 +3366,9 @@ 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()): @@ -3736,7 +3746,7 @@ #===================================================================================================== #boss伤血排行榜击杀逻辑 - BossHurtMng.BossOnKilled(curNPC) + #BossHurtMng.BossOnKilled(curNPC) #掉落需要用到摸怪,所以在处理掉落奖励之前设置 self.__SetFeelNPCPlayerList() @@ -3752,6 +3762,8 @@ # 记录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) #=========================================================================================== @@ -4197,7 +4209,8 @@ self.__MaxHurtPlayer = self.__FindBossMaxHurtObj() # py自定义伤血所得到的Boss最大伤血玩家 self.__AllKillerDict, curTeam, hurtType, hurtID = self.__FindNPCKillerInfo() - + self.__OwnerHurtType, self.__OwnerHurtID = hurtType, hurtID + #最后一击处理 self.__DoLastTimeHurtLogic() @@ -4227,6 +4240,10 @@ 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)) @@ -4621,7 +4638,60 @@ self.__NPCDropItem(dropPlayer, hurtType, hurtID, ownerPlayerList) #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 -- Gitblit v1.8.0