From 32f92cf196d36588653093f9a27d3ce41df2b9ca Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 07 四月 2021 17:42:12 +0800
Subject: [PATCH] 8886 【BT2】【后端】线下活动支持(增加单笔累充系统)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/NPC/NPCAI/AICommon.py | 89 ++++++++++++++++++++++++++++++++++----------
1 files changed, 68 insertions(+), 21 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..d05a84c 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
@@ -176,7 +176,7 @@
# SetIsNeedProcess(False) 应该及时清理仇恨,回血可以不用即时
curNPC.GetNPCAngry().Clear()
-# if curNPC.GetHP() != curNPC.GetMaxHP():
+# if GameObj.GetHP(curNPC) != GameObj.GetMaxHP(curNPC):
# if curNPC.GetIsBoss() != ChConfig.Def_NPCType_Ogre_Normal:
# return
#
@@ -232,7 +232,7 @@
curPlayer = GameWorld.GetObj(hurtObjID, IPY_GameWorld.gotPlayer)
#无法查找玩家,或者已经死亡
- if curPlayer == None or curPlayer.GetHP() <= 0:
+ if curPlayer == None or GameObj.GetHP(curPlayer) <= 0:
continue
if srcPlayer and curPlayer.GetID() == srcPlayer.GetID():
@@ -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 = GameObj.GetAngryValue(curAngry)
+ 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