From b4ba68e227370e3dc9dfca06ce5b9c8225bf4faa Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期六, 24 十一月 2018 00:13:49 +0800
Subject: [PATCH] 4997 【后端】【1.3】冰晶矿脉AI--技能指定NPCID使用

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py  |   33 +++++++++++++++++++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py |    4 ++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py          |    4 +++-
 3 files changed, 40 insertions(+), 1 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
index 9cdb1eb..5eece2f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BaseAttack.py
@@ -557,6 +557,10 @@
         #关系
         relation = GetTagRelation(attacker, defender, curSkill, tick)
         return relation[0] == ChConfig.Type_Relation_Friend
+    elif curSkillUseTag == ChConfig.Def_UseSkillTag_AppointNPC:
+        if defender and GameObj.GetHP(defender) > 0 :
+            return True
+        return False
     
     return __CheckCanAttack(attacker , defender , curSkill , tick)
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 5d2c27b..e71aeff 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -573,7 +573,7 @@
 Def_Skill_Effect_AttackMove = 2100    # NPC位移战斗
 Def_Skill_Effect_RandSkill = 2101    # 从效果值获取随机技能
 Def_Skill_Effect_HPPerLimit = 2102    # 血量限制
-
+Def_Skill_Effect_AppointNPC = 2103    # 指定释放的NPCID 和 Def_UseSkillTag_AppointNPC 搭配使用
 #-----------
 #变身技能(召唤)效果ID
 Def_Skill_Effect_SummonMapNPC = 1162
@@ -1181,6 +1181,7 @@
     Def_UseSkillTag_SummonMaster,      #召唤兽主人 12
     Def_UseSkillTag_CanAttackBaseNPC,      #可攻击的野外小怪(含精英)怪物 13
     Def_UseSkillTag_FriendNPC,         #友好NPC 14
+    Def_UseSkillTag_AppointNPC,         #指定NPC 15 必须和效果值配合 Def_Skill_Effect_AppointNPC
     
 ) = range( 0, Def_UseSkillTag_Type )
 
@@ -1202,6 +1203,7 @@
     Def_UseSkillTag_SummonMaster : [IPY_GameWorld.gotPlayer, IPY_GameWorld.gotNPC],
     Def_UseSkillTag_CanAttackBaseNPC : [IPY_GameWorld.gotNPC],
     Def_UseSkillTag_FriendNPC : [IPY_GameWorld.gotNPC],
+    Def_UseSkillTag_AppointNPC : [IPY_GameWorld.gotNPC],
 }
 
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
index c504d6d..2984c64 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/SkillShell.py
@@ -347,6 +347,13 @@
 # @return 返回值真, 检查通过
 # @remarks 自定义函数, NPC使用有对象技能
 def NPCUseSkillTag(curNPC, curTag, curSkill, tick):
+    skillTag = GetSkillAffectTag(curSkill)
+    if skillTag == ChConfig.Def_UseSkillTag_AppointNPC:
+        # 指定释放的NPCID 和 Def_UseSkillTag_AppointNPC 搭配使用
+        curTag = GetAppointNPCBySkillEffect(curSkill)
+        if not curTag:
+            return False
+    
     if not NPCCanUseSkillTag(curNPC, curTag, curSkill, tick):
         return False
     
@@ -363,6 +370,29 @@
         curNPC.SetDict(ChConfig.Def_NPC_Dict_AtkMovePosY, 0)
         
     return result
+
+# 指定释放的NPCID 和 Def_UseSkillTag_AppointNPC 搭配使用
+def GetAppointNPCBySkillEffect(curSkill):
+    npcID = 0
+    effectID = ChConfig.Def_Skill_Effect_AppointNPC
+    for i in xrange(0, curSkill.GetEffectCount()):
+        curEffect = curSkill.GetEffect(i)
+        curEffectID = curEffect.GetEffectID()
+        
+        if not curEffectID:
+            #策划有可能中途删除,不用return
+            continue
+        
+        #不是需要的效果
+        if curEffectID != effectID:
+            continue
+
+        npcID = curEffect.GetEffectValue(0)
+        break
+
+    if not npcID:
+        return None
+    return GameWorld.FindNPCByNPCID(npcID)
 
 
 # 计算NPC技能位移坐标,预警和非预警都可以用
@@ -511,6 +541,9 @@
 # @return 返回值真, 检查通过
 def NPCCanUseSkillTag(curNPC, curTag, curSkill, tick):
     skillTag = GetSkillAffectTag(curSkill)
+    if skillTag == ChConfig.Def_UseSkillTag_AppointNPC:
+        return True
+    
     #---对象判定---
     if IsToPetOwnerSkill(curNPC, skillTag):
         return True

--
Gitblit v1.8.0