From 39880fd93db2a34b4553d7c3ac5bc2dae7e92925 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期六, 29 六月 2019 18:51:54 +0800
Subject: [PATCH] 6603 【后端】【2.0】增加新版的sp和被动技能 - 修复无法清除buff问题

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4101.py |    2 +-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_30.py     |   13 +++++++++----
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py        |   27 +++++++++++++++++++++++++++
 3 files changed, 37 insertions(+), 5 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
index 59ffe87..512409f 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillCommon.py
@@ -1797,7 +1797,34 @@
         return curBuff
     
     return None
+
+def FindBuffByOwnerEx(gameObj, skillTypeID, ownerID, ownerType):
+    findSkill = GameWorld.GetGameData().GetSkillBySkillID(skillTypeID)
+    buffType = GetBuffType(findSkill)
+    buffTuple = GetBuffManagerByBuffType(gameObj, buffType)
+    if buffTuple == ():
+        return None, None, None, None
     
+    buffManager = buffTuple[0]
+    for i in range(0, buffManager.GetBuffCount()):
+        curBuff = buffManager.GetBuff(i)
+        if not curBuff:
+            continue
+        
+        #判断是否拥有同一类型的技能
+        if curBuff.GetSkill().GetSkillTypeID() != skillTypeID:
+            continue
+        
+        #判断是否拥有同一类型的技能
+        if curBuff.GetOwnerID() != ownerID:
+            continue
+        
+        if curBuff.GetOwnerType() != ownerType:
+            continue
+    
+        return curBuff, buffManager, buffType, findSkill
+    
+    return None, None, None, None
 #---------------------------------------------------------------------
 ## 执行清空命令 参数:玩家, 保留技能类型列表
 #  @param curPlayer 玩家
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 fde6f13..cfce1bf 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
@@ -30,23 +30,28 @@
 def UseSkill(attacker, defender, curSkill, tagRoundPosX, tagRoundPosY, isEnhanceSkill, tick):
     if not defender:
         return
-    
     if not GameWorld.CanHappen(curSkill.GetHappenRate(), ChConfig.Def_MaxRateValue):
         #清除失败也触发CD
         return BaseAttack.DoSkillEx_AttackSucess(attacker, defender, curSkill, tick, isEnhanceSkill)
     
     delSuccess = False
-    
     # 优先清理指定技能
     mark = curSkill.GetEffect(0).GetEffectValue(1)
     theSkillID = mark if mark > 10 else 0
     cleanCnt = mark if 0< mark <= 10 else 1
     if theSkillID:
         if not curSkill.GetEffect(0).GetEffectValue(2):
-            findBuff = SkillCommon.FindBuffByID(defender, theSkillID)
+            findBuff, buffManager, buffType, buffSkill = SkillCommon.FindBuffByID(defender, theSkillID)
         else:
-            findBuff = SkillCommon.FindBuffByOwner(defender, theSkillID, attacker.GetID(), attacker.GetGameObjType())
+            findBuff, buffManager, buffType, buffSkill = SkillCommon.FindBuffByOwnerEx(defender, theSkillID, attacker.GetID(), attacker.GetGameObjType())
         if findBuff:
+            ownerID, ownerType = findBuff.GetOwnerID(), findBuff.GetOwnerType()
+            
+            #删除Buff
+            BuffSkill.DoBuffDisApperEx(defender, findBuff, tick)
+            skillID = buffSkill.GetSkillID()
+            buffManager.DeleteBuffByTypeID(buffSkill.GetSkillTypeID())
+            SkillShell.ClearBuffEffectBySkillID(defender, skillID, ownerID, ownerType)
             delSuccess = True
     else:
         # 某类技能中的一个
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4101.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4101.py
index e11c5d0..8d7a537 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4101.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveBuff/PassiveSkill_4101.py
@@ -30,4 +30,4 @@
     findBuff = SkillCommon.FindBuffByOwner(defender, effect.GetEffectValue(1), attacker.GetID(), attacker.GetGameObjType())
     if not findBuff:
         return 0
-    return effect.GetEffectValue(0)*findBuff.GetLayer()
+    return effect.GetEffectValue(2)*findBuff.GetLayer()

--
Gitblit v1.8.0