From ff48a24b8da42998da61b4ff4000e758d8d1b041 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 27 一月 2021 11:18:52 +0800
Subject: [PATCH] 8710 【开发】【主干】【BT2】根据世界等级配置奖励(成长必买改为通知对应不同世界等级的物品信息);

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/GameSkills/SkillModule_30.py |  106 ++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 76 insertions(+), 30 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..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
@@ -21,6 +21,7 @@
 import PlayerControl
 import IPY_GameWorld
 import NPCCommon
+import GameWorld
 #------------------------------------------------------------------------------ 
 
 
@@ -29,25 +30,39 @@
 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)
     
-    buffType = ChConfig.Def_SkillBuffList.get(curSkill.GetEffect(0).GetEffectValue(0))
-    buffTuple = SkillCommon.GetBuffManagerByBuffType(defender, buffType)
-    if buffTuple == ():
-        return
-    
-    buffManager = buffTuple[0]
-    if buffManager.GetBuffCount() == 0:
-        return
-    
-    curBuff = buffManager.GetBuff(0)
-    ownerID, ownerType = curBuff.GetOwnerID(), curBuff.GetOwnerType()
-    
-    #删除Buff
-    BuffSkill.DoBuffDisApper(defender, curBuff, tick)
-    buffSkill = curBuff.GetSkill()
-    skillID = buffSkill.GetSkillID()
-    buffManager.DeleteBuffByTypeID(buffSkill.GetSkillTypeID())
-    SkillShell.ClearBuffEffectBySkillID(defender, skillID, ownerID, ownerType)
+    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, buffManager, buffType, buffSkill = SkillCommon.FindBuffByID(defender, theSkillID)
+        else:
+            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:
+        # 某类技能中的一个
+        for _ in range(cleanCnt):
+            delResult = ClearBySkillType(curSkill, defender, tick)
+            if delResult:
+                delSuccess = True
+
+    if not delSuccess:
+        # 没有可清除BUFF也进入CD
+        return BaseAttack.DoSkillEx_AttackSucess(attacker, defender, curSkill, tick, isEnhanceSkill)
     
     #刷新属性
     curObjType = defender.GetGameObjType()
@@ -56,23 +71,54 @@
         #刷新玩家属性
         playerControl = PlayerControl.PlayerControl(defender)
         
-        if buffType == IPY_GameWorld.bfActionBuff:
-            playerControl.RefreshPlayerActionState()
-            if BuffSkill.CheckBuffRefresh(buffSkill, False):
-                playerControl.RefreshPlayerAttrByBuff()
-        else:
-            playerControl.RefreshPlayerAttrByBuff()
+        playerControl.RefreshPlayerActionState()
+        playerControl.RefreshPlayerAttrByBuff()
     #NPC
     elif curObjType == IPY_GameWorld.gotNPC:
         npcControl = NPCCommon.NPCControl(defender)
         
-        if buffType == IPY_GameWorld.bfActionBuff:
-            npcControl.RefreshNPCActionState()
-            if BuffSkill.CheckBuffRefresh(buffSkill, False):
-                npcControl.RefreshNPCAttrState()
-        else:
-            npcControl.RefreshNPCAttrState()
+        npcControl.RefreshNPCActionState()
+        npcControl.RefreshNPCAttrState()
         
     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
+    
+    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
     
\ No newline at end of file

--
Gitblit v1.8.0