From 89becadae97fd5656523609b1272493b827b5ea0 Mon Sep 17 00:00:00 2001 From: hch <305670599@qq.com> Date: 星期五, 17 五月 2019 23:56:39 +0800 Subject: [PATCH] 6603 【后端】【2.0】增加新版的sp和被动技能 - 新版 --- ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AICommon.py | 85 +++++++++++++++++++++++++++++++++--------- 1 files changed, 66 insertions(+), 19 deletions(-) diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AICommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AICommon.py index d449a62..eaa23fa 100644 --- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AICommon.py +++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AICommon.py @@ -333,18 +333,21 @@ useSkill = changeSkill #GameWorld.DebugLog("----随机技能 %s"%useSkill.GetSkillID()) - if PetControl.IsPet(curNPC): - petOwner = PetControl.GetPetOwner(curNPC) - - if petOwner == None: - GameWorld.ErrLog("宠物(%s)找不到主人"%curNPC.GetRolePet().PetID) - return False - - #血量条件判定 - effect = SkillCommon.GetSkillEffectByEffectID(useSkill, ChConfig.Def_Skill_Effect_HPPerLimit) - if effect: - if GameObj.GetHP(petOwner)*ChConfig.Def_MaxRateValue/GameObj.GetMaxHP(petOwner) >= effect.GetEffectValue(0): - return False + #=========================================================================== + # 改成被动触发 + # if PetControl.IsPet(curNPC): + # petOwner = PetControl.GetPetOwner(curNPC) + # + # if petOwner == None: + # GameWorld.ErrLog("宠物(%s)找不到主人"%curNPC.GetRolePet().PetID) + # return False + # + # #血量条件判定 + # effect = SkillCommon.GetSkillEffectByEffectID(useSkill, ChConfig.Def_Skill_Effect_HPPerLimit) + # if effect: + # if GameObj.GetHP(petOwner)*ChConfig.Def_MaxRateValue/GameObj.GetMaxHP(petOwner) >= effect.GetEffectValue(0): + # return False + #=========================================================================== skillTag = SkillShell.GetSkillAffectTag(useSkill) skillAim = SkillShell.GetSkillFireAim(useSkill) @@ -395,6 +398,44 @@ #--------------------------------------------------------------------- + + +def GetCanUseRealmSuppressSkll(curNPC, curSkill): + if curSkill.GetFuncType() != ChConfig.Def_SkillFuncType_RealmSuppress: + # 非境界压制技能返回可用 + return True + + # 境界压制技能需判断 周围是否有低境界玩家 + npcRealmLV = NPCCommon.GetRealmLV(curNPC) + angryManager = curNPC.GetNPCAngry() + + for i in range(0, angryManager.GetAngryCount()) : + curAngry = angryManager.GetAngryValueTag(i) + if curAngry == None or curAngry.GetObjID() == 0: + continue + + #仇恨值 + curAngryValue = curAngry.GetAngryValue() + if curAngryValue == 0: + continue + + if curAngry.GetIsDisable(): + continue + + angryID = curAngry.GetObjID() + angryObjType = curAngry.GetObjType() + if angryObjType != IPY_GameWorld.gotPlayer: + continue + + curTag = GameWorld.GetObj(angryID, angryObjType) + if not curTag: + continue + if curTag.GetOfficialRank() < npcRealmLV: + return True + + return False + + ##NPC自动释放技能 # @param curNPC NPC实例 # @param curTag 攻击目标 @@ -442,17 +483,22 @@ if SkillShell.GetSkillFireAim(useSkill) == ChConfig.Def_UseSkillAim_Obj: # 主目标对象判定, 不能释放则不进入队列 curSkillUseTag = SkillShell.GetSkillAffectTag(useSkill) - hurtTypeList = ChConfig.Def_Dict_UseSkillTag_ObjType.get(curSkillUseTag) - if not hurtTypeList: - continue - - if tagObjType not in hurtTypeList: - continue + if curSkillUseTag != ChConfig.Def_UseSkillTag_AppointNPC: + hurtTypeList = ChConfig.Def_Dict_UseSkillTag_ObjType.get(curSkillUseTag) + if not hurtTypeList: + continue + + if tagObjType not in hurtTypeList: + continue if triggerDict != {}: if not CheckSkillTrigger(curNPC, triggerDict, index, tick): continue + # 境界压制需要根据仇恨列表中的玩家是否有压制 + if not GetCanUseRealmSuppressSkll(curNPC, useSkill): + continue + useCnt = curNPC.GetDictByKey(ChConfig.Def_NPC_Dict_SkillUseCnt % useSkill.GetSkillTypeID()) # 该技能已使用次数 useSkillList.append([useCnt, index, useSkill]) @@ -477,9 +523,10 @@ # @return 布尔值 def CheckSkillTrigger(curNPC, triggerDict, npcSkillindex, tick): skillInfo = triggerDict.get(npcSkillindex) + if skillInfo != None: #当前血量 - hpPercent = int(curNPC.GetHP()/float(GameObj.GetMaxHP(curNPC))*100) + hpPercent = int(GameObj.GetHP(curNPC)/float(GameObj.GetMaxHP(curNPC))*100) checkHP = skillInfo[0] #血量未到 -- Gitblit v1.8.0