From a075f7841fb2d0a3b32bf10c8bc2df5bf02d6acb Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期日, 14 十二月 2025 14:24:28 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(贾诩所有技能;5022效果支持配置buff额外属性计算方式;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py |   58 ++++++++++++++++++++++++----------------------------------
 1 files changed, 24 insertions(+), 34 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
index 0ba5348..28703f6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -27,7 +27,6 @@
 import TurnPassive
 import TurnAttack
 import TurnBuff
-import ObjPool
 import FBLogic
 
 import random
@@ -140,12 +139,9 @@
                          objID, skillID, len(tagObjList), batType, bySkillID, curBatObj.GetHP(), curBatObj.GetMaxHP(), angerOverflow, curXP, oneActionUseCnt)
     # 以下为技能可以使用的处理,之后的逻辑默认技能使用成功
     
-    poolMgr = ObjPool.GetPoolMgr()
-    usePoolSkill = False
     if isinstance(useSkill, IpyGameDataPY.IPY_Skill):
-        usePoolSkill = True
         # 统一使用 BattleObj.PySkill
-        useSkill = poolMgr.acquire(BattleObj.PySkill, useSkill, objID)
+        useSkill = BattleObj.PySkill(useSkill, objID)
         
     useSkill.ResetUseRec()
     useSkill.SetTagObjList(tagObjList)
@@ -192,8 +188,6 @@
             
     # 最后重置、回收对象
     useSkill.ResetUseRec()
-    if usePoolSkill:
-        poolMgr.release(useSkill)
     return True
 
 def CheckSkillUseCntLimit(batObj, useSkill):
@@ -1018,8 +1012,7 @@
     #    hurtValue *= (10000 + FinalDamPer) / 10000.0
     #    GameWorld.DebugLogEx("    增伤: hurtValue=%s,FinalDamPer=%s", hurtValue, FinalDamPer)
     
-    poolMgr = ObjPool.GetPoolMgr()
-    useSkill = poolMgr.acquire(BattleObj.PySkill, skillIpyData, atkID)
+    useSkill = BattleObj.PySkill(skillIpyData, atkID)
     useSkill.SetTagObjList([defObj])
     useSkill.SetBatType(ChConfig.TurnBattleType_Cot)
     
@@ -1055,7 +1048,6 @@
     Sync_TurnFightTag(turnFight, useTag, 1)
     
     useSkill.ResetUseRec()
-    poolMgr.release(useSkill)
     return
 
 def SkillModule_6(turnFight, curBatObj, useSkill, opType):
@@ -1287,16 +1279,14 @@
     
     # 优先处理afterLogic,可再预先汇总一些会触发被动的信息
     relatedSkillID = useSkill.GetSkillID()
-    shieldBrokenList = [] # 记录盾破
+    delBuffAfterEffList = [] # buff消失后要触发的被动,一般用于后置处理的逻辑
     afterLogicList = useSkill.GetAfterLogicList()
     for logicType, logicData in afterLogicList:
         if logicType == ChConfig.AfterLogic_DelBuff:
-            buffObjID, buff, tagObjID = logicData
-            buffSkillData = buff.GetSkillData()
-            buffSkillTypeID = buffSkillData.GetSkillTypeID()
+            buffObjID, buff, tagObjID, afterTriggerData = logicData
             TurnBuff.DoBuffDelAfterLogicOver(turnFight, buffObjID, buff, useSkill)
-            if SkillCommon.isDamageShieldSkill(buffSkillData):
-                shieldBrokenList.append([buffObjID, tagObjID, buffSkillTypeID])
+            if afterTriggerData:
+                delBuffAfterEffList.append([buffObjID, buff, tagObjID, afterTriggerData])
                 
         elif logicType == ChConfig.AfterLogic_AddBuff:
             batObj = logicData[0]
@@ -1405,11 +1395,13 @@
     
     # ========== 以下触发被动 ==========
     
-    # 破盾时
-    for buffObjID, tagObjID, buffSkillTypeID in shieldBrokenList:
+    # buff消失后置处理的被动,优先处理,如破盾,区别于被动方式  ChConfig.TriggerWay_BuffDel(立即触发)
+    for buffObjID, buff, tagObjID, afterTriggerData in delBuffAfterEffList:
+        triggerWay, effInfoList = afterTriggerData
         buffObj = batObjMgr.getBatObj(buffObjID)
-        tagObj = batObjMgr.getBatObj(tagObjID)
-        TurnPassive.OnTriggerPassiveEffect(turnFight, buffObj, ChConfig.TriggerWay_ShieldBroken, tagObj, connSkillTypeID=buffSkillTypeID)
+        tagObj = batObjMgr.getBatObj(tagObjID) # 导致该buff消失的目标
+        GameWorld.DebugLogEx("buff消失后置处理的被动: buffObjID=%s,tagObjID=%s,triggerWay=%s,%s", buffObjID, tagObjID, triggerWay, effInfoList)
+        TurnPassive.OnTriggerPassiveEffList(turnFight, buffObj, triggerWay, tagObj, effInfoList, connSkill=useSkill, connBuff=buff)
         
     # 有击杀时
     for index, tagObj in enumerate(killObjList):
@@ -2479,7 +2471,9 @@
             shieldHurtValue -= decShieldValue # 承伤值
             if decShieldValue >= buffValue:
                 GameWorld.DebugLogEx("        删除盾: buffID=%s,剩余盾伤=%s", buffID, shieldHurtValue)
-                TurnBuff.DoBuffDel(turnFight, defObj, buff, relatedSkill=curSkill, afterLogic=True, tagObj=atkObj)
+                #盾破时buff会被删除,导致绑定在该buff上的被动效果同步被清除,后续就无法触发盾破后被动,固先取出来
+                effInfoList = defObj.GetPassiveEffManager().GetPassiveEffByTrigger(ChConfig.TriggerWay_ShieldBroken, connSkillTypeID=buffSkillID)
+                TurnBuff.DoBuffDel(turnFight, defObj, buff, relatedSkill=curSkill, afterLogic=True, tagObj=atkObj, afterTriggerData=[ChConfig.TriggerWay_ShieldBroken, effInfoList])
             else:
                 updShieldValue = buffValue - decShieldValue
                 GameWorld.DebugLogEx("        更新盾: updShieldValue=%s,剩余盾伤=%s", updShieldValue, shieldHurtValue)
@@ -2710,8 +2704,7 @@
         hurtValue *= (10000 + FinalDamPer) / 10000.0
         GameWorld.DebugLogEx("    增伤: hurtValue=%s,FinalDamPer=%s", hurtValue, FinalDamPer)
         
-    poolMgr = ObjPool.GetPoolMgr()
-    useSkill = poolMgr.acquire(BattleObj.PySkill, skillIpyData, atkID)
+    useSkill = BattleObj.PySkill(skillIpyData, atkID)
     useSkill.SetTagObjList([defObj])
     useSkill.SetBatType(ChConfig.TurnBattleType_Dot)
     
@@ -2727,12 +2720,11 @@
     Sync_TurnFightTag(turnFight, useTag, 1)
     
     useSkill.ResetUseRec()
-    poolMgr.release(useSkill)
     return
 
 def Sync_TurnFightTag(turnFight, useTag, sign):
     ## 通知技能标签
-    clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCTurnFightTag)
+    clientPack = ChPyNetSendPack.tagSCTurnFightTag()
     clientPack.Tag = useTag
     clientPack.Len = len(clientPack.Tag)
     clientPack.Sign = sign
@@ -2743,8 +2735,7 @@
     ## 通知释放技能
     bySkill = useSkill.GetBySkill()
     relatedSkillID = bySkill.GetSkillID() if bySkill else 0
-    poolMgr = ObjPool.GetPoolMgr()
-    clientPack = poolMgr.acquire(ChPyNetSendPack.tagSCUseSkill)
+    clientPack = ChPyNetSendPack.tagSCUseSkill()
     clientPack.ObjID = curBatObj.GetID()
     clientPack.PMType = GetPMType(curBatObj, useSkill)
     clientPack.BattleType = useSkill.GetBatType()
@@ -2755,7 +2746,7 @@
     # 技能的主要伤害
     clientPack.HurtList = []
     for hurtObj in useSkill.GetHurtObjList():
-        hurt = poolMgr.acquire(ChPyNetSendPack.tagSCUseSkillHurt)
+        hurt = ChPyNetSendPack.tagSCUseSkillHurt()
         hurt.ObjID = hurtObj.GetObjID()
         hurt.AttackTypes = hurtObj.GetHurtTypes()
         hurt.HurtHP = hurtObj.GetHurtHP() % ChConfig.Def_PerPointValue
@@ -2767,7 +2758,7 @@
         hurt.HurtListEx = []
         # 单个伤害的额外伤害,如弹射+平摊伤害
         for hurtObjEx in hurtObj.GetHurtObjListEx():
-            hurtEx = poolMgr.acquire(ChPyNetSendPack.tagSCUseSkillHurtEx)
+            hurtEx = ChPyNetSendPack.tagSCUseSkillHurtEx()
             hurtEx.ObjID = hurtObjEx.GetObjID()
             hurtEx.AttackTypes = hurtObjEx.GetHurtTypes()
             hurtEx.HurtHP = hurtObjEx.GetHurtHP() % ChConfig.Def_PerPointValue
@@ -2782,7 +2773,7 @@
     # 技能的额外伤害,如常规技能的平摊伤害
     clientPack.HurtListEx = []
     for hurtObjEx in useSkill.GetHurtObjListEx():
-        hurtEx = poolMgr.acquire(ChPyNetSendPack.tagSCUseSkillHurtEx)
+        hurtEx = ChPyNetSendPack.tagSCUseSkillHurtEx()
         hurtEx.ObjID = hurtObjEx.GetObjID()
         hurtEx.AttackTypes = hurtObjEx.GetHurtTypes()
         hurtEx.HurtHP = hurtObjEx.GetHurtHP() % ChConfig.Def_PerPointValue
@@ -2797,7 +2788,7 @@
     if not clientPack.HurtList:
         for tagObj in useSkill.GetTagObjList():
             tagID = tagObj.GetID()
-            hurt = poolMgr.acquire(ChPyNetSendPack.tagSCUseSkillHurt)
+            hurt = ChPyNetSendPack.tagSCUseSkillHurt()
             hurt.ObjID = tagID
             hurt.CurHP = tagObj.GetHP() % ChConfig.Def_PerPointValue
             hurt.CurHPEx = tagObj.GetHP() / ChConfig.Def_PerPointValue
@@ -2819,8 +2810,7 @@
     if attrID not in ChConfig.CDBRefresh_AttrIDDict:
         return
     refreshType, isBig = ChConfig.CDBRefresh_AttrIDDict[attrID]
-    poolMgr = ObjPool.GetPoolMgr()
-    clientPack = poolMgr.acquire(ChPyNetSendPack.tagSCObjPropertyRefreshView)
+    clientPack = ChPyNetSendPack.tagSCObjPropertyRefreshView()
     clientPack.ObjID = curBatObj.GetID()
     clientPack.RefreshType = refreshType
     clientPack.AttackTypes = hurtTypes    
@@ -2842,7 +2832,7 @@
 
 def Sync_HPRefresh(turnFight, curBatObj):
     hp, maxHP = curBatObj.GetHP(), curBatObj.GetMaxHP()
-    clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCObjHPRefresh)
+    clientPack = ChPyNetSendPack.tagSCObjHPRefresh()
     clientPack.ObjID = curBatObj.GetID()
     clientPack.HP = hp % ShareDefine.Def_PerPointValue
     clientPack.HPEx = hp / ShareDefine.Def_PerPointValue

--
Gitblit v1.8.0