From 5442da19166041144cf69ac36d9f8728ae597692 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期六, 13 十二月 2025 19:36:46 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(修复曹仁、甄宓破盾无法触发bug;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py | 5 +++--
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py | 10 +++++++++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 24 +++++++++++++-----------
3 files changed, 25 insertions(+), 14 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
index 355f8a7..e9bb3bc 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
@@ -361,13 +361,14 @@
DoBuffDel(turnFight, batObj, curBuff, relatedSkill)
return
-def DoBuffDel(turnFight, batObj, curBuff, relatedSkill=None, afterLogic=False, tagObj=None, noRefreshAttr=False, isSync=True):
+def DoBuffDel(turnFight, batObj, curBuff, relatedSkill=None, afterLogic=False, tagObj=None, noRefreshAttr=False, isSync=True, afterTriggerData=None):
'''删除buff
@param relatedSkill: 关联的技能
@param afterLogic: 是否需要在关联技能处理完毕后才处理删除后续逻辑,如通知,触发被动等
@param tagObj: 由谁引起的buff删除
@param noRefreshAttr: 不刷新属性
@return: isRefreshAttr 是否需要刷属性,如果设置了 noRefreshAttr,则要在外层刷属性
+ @return: afterTriggerData afterLogic为True时,附带的被动触发数据,因为buff被删除后该buff自带的被动效果也会被删除,所以先缓存供后续处理
'''
release = True # 释放buff实例
@@ -398,7 +399,7 @@
SyncBuffDel(turnFight, buffObjID, buffID, relatedSkillID)
if afterLogic and relatedSkill:
tagObjID = tagObj.GetID() if tagObj else buffObjID
- relatedSkill.AddAfterLogic(ChConfig.AfterLogic_DelBuff, [buffObjID, curBuff, tagObjID])
+ relatedSkill.AddAfterLogic(ChConfig.AfterLogic_DelBuff, [buffObjID, curBuff, tagObjID, afterTriggerData])
#buff消失的触发
for effectIndex in range(0, skillData.GetEffectCount()):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
index d16dfec..1609937 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
@@ -17,6 +17,8 @@
import GameWorld
import PassiveTrigger
+import IpyGameDataPY
+import BattleObj
import ChConfig
GameWorld.ImportAll("Script\\Skill\\", "PassiveTrigger")
@@ -41,7 +43,13 @@
effInfoList = passiveEffMgr.GetPassiveEffByTrigger(triggerWay, connSkill, connSkillTypeID, connBuff)
if not effInfoList:
return
- # [["skill/buff", skillID, buffID, effIDList], ...]
+ OnTriggerPassiveEffList(turnFight, batObj, triggerWay, tagObj, effInfoList, connSkill, connBuff, **kwargs)
+ return
+
+def OnTriggerPassiveEffList(turnFight, batObj, triggerWay, tagObj, effInfoList, connSkill=None, connBuff=None, **kwargs):
+ '''触发外部指定的被动效果列表
+ @param effInfoList: [["skill/buff", skillID, buffID, effIDList], ...]
+ '''
tagID = tagObj.GetID() if tagObj else 0
GameWorld.DebugLogEx("触发被动: triggerWay=%s,objID=%s,tagID=%s,%s", triggerWay, batObj.GetID(), tagID, effInfoList)
for effInfo in effInfoList:
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 e4f017d..28703f6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -1279,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]
@@ -1397,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):
@@ -2471,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)
--
Gitblit v1.8.0