From 22c0a62a2b77f5e9fff6faa1164216d310e73404 Mon Sep 17 00:00:00 2001
From: xdh <xiefantasy@qq.com>
Date: 星期三, 22 五月 2019 11:04:03 +0800
Subject: [PATCH] 6501 任务状态通知后再触发功能开启

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_30.py |   79 ++++++++++++++++++++++++++++++++-------
 1 files changed, 64 insertions(+), 15 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_30.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_30.py
index 123a4a1..18b1bbb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_30.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_30.py
@@ -21,6 +21,7 @@
 import PlayerControl
 import IPY_GameWorld
 import NPCCommon
+import GameWorld
 #------------------------------------------------------------------------------ 
 
 
@@ -30,24 +31,32 @@
     if not defender:
         return
     
-    buffType = ChConfig.Def_SkillBuffList.get(curSkill.GetEffect(0).GetEffectValue(0))
-    buffTuple = SkillCommon.GetBuffManagerByBuffType(defender, buffType)
-    if buffTuple == ():
-        return
+    if not GameWorld.CanHappen(curSkill.GetHappenRate(), ChConfig.Def_MaxRateValue):
+        #清除失败也触发CD
+        return BaseAttack.DoSkillEx_AttackSucess(attacker, defender, curSkill, tick, isEnhanceSkill)
     
-    buffManager = buffTuple[0]
-    if buffManager.GetBuffCount() == 0:
-        return
+    delSuccess = False
+    buffSkill = None
+    buffType = 0
     
-    curBuff = buffManager.GetBuff(0)
-    ownerID, ownerType = curBuff.GetOwnerID(), curBuff.GetOwnerType()
+    # 优先清理指定技能
+    theSkillID = curSkill.GetEffect(0).GetEffectValue(1)
+    if theSkillID:
+        if curSkill.GetEffect(0).GetEffectValue(1):
+            findBuff = SkillCommon.FindBuffByID(defender, theSkillID)
+        else:
+            findBuff = SkillCommon.FindBuffByOwner(defender, theSkillID, attacker.GetID(), attacker.GetGameObjType())
+        if findBuff:
+            delSuccess = True
+            buffSkill = findBuff.GetSkill()
+            buffType = ChConfig.Def_SkillBuffList.get(buffSkill.GetSkillType())
+    else:
+        # 某类技能中的一个
+        delSuccess, buffSkill, buffType = ClearBySkillType(curSkill, defender, tick)
     
-    #删除Buff
-    BuffSkill.DoBuffDisApper(defender, curBuff, tick)
-    buffSkill = curBuff.GetSkill()
-    skillID = buffSkill.GetSkillID()
-    buffManager.DeleteBuffByTypeID(buffSkill.GetSkillTypeID())
-    SkillShell.ClearBuffEffectBySkillID(defender, skillID, ownerID, ownerType)
+    if not delSuccess:
+        # 没有可清除BUFF也进入CD
+        return BaseAttack.DoSkillEx_AttackSucess(attacker, defender, curSkill, tick, isEnhanceSkill)
     
     #刷新属性
     curObjType = defender.GetGameObjType()
@@ -75,4 +84,44 @@
         
     return BaseAttack.DoSkillEx_AttackSucess(attacker, defender, curSkill, tick, isEnhanceSkill)
 
+def ClearBySkillType(curSkill, defender, tick):
+    skillType = curSkill.GetEffect(0).GetEffectValue(0)
+    if skillType == 0:
+        # 无配置代表清除负面buff任意1个
+        skillTypeList = [
+                           ChConfig.Def_SkillType_LstDepBuff   ,  #持续减益BUFF  4
+                           ChConfig.Def_SkillType_DepBuff      ,  #减益BUFF 6
+                           ChConfig.Def_SkillType_Action       ,  #影响行为BUFF 14
+                         ]
+    else:
+        skillTypeList = [skillType]
+    
+    delSuccess = False
+    buffSkill = None
+    buffType = 0
+    for skillType in skillTypeList:
+        
+        buffType = ChConfig.Def_SkillBuffList.get(skillType)
+        buffTuple = SkillCommon.GetBuffManagerByBuffType(defender, buffType)
+        if buffTuple == ():
+            continue
+        
+        buffManager = buffTuple[0]
+        if buffManager.GetBuffCount() == 0:
+            continue
+        
+        curBuff = buffManager.GetBuff(0)
+        ownerID, ownerType = curBuff.GetOwnerID(), curBuff.GetOwnerType()
+        
+        #删除Buff
+        BuffSkill.DoBuffDisApperEx(defender, curBuff, tick)
+        buffSkill = curBuff.GetSkill()
+        if not buffSkill:
+            continue
+        skillID = buffSkill.GetSkillID()
+        buffManager.DeleteBuffByTypeID(buffSkill.GetSkillTypeID())
+        SkillShell.ClearBuffEffectBySkillID(defender, skillID, ownerID, ownerType)
+        delSuccess = True
+        break
+    return delSuccess, buffSkill, buffType
     
\ No newline at end of file

--
Gitblit v1.8.0