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