From 1dd273126494e6f8ffd7a994b637f45ad1128191 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 03 十二月 2025 19:55:27 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(战报改为存储B430包Buffer;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py | 92 ++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 81 insertions(+), 11 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 38074fd..831c4f4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
@@ -78,7 +78,7 @@
poolMgr.release(useSkill)
return addBuff
-def OnAddBuff(turnFight, batObj, buffSkill, buffOwner=None, bySkill=None, afterLogic=False, isSync=True, setLayerCnt=0):
+def OnAddBuff(turnFight, batObj, buffSkill, buffOwner=None, bySkill=None, afterLogic=False, isSync=True, **kwargs):
skillID = buffSkill.GetSkillID()
bySkill = buffSkill.GetBySkill() if not bySkill else bySkill
relatedSkillID = bySkill.GetSkillID() if bySkill else 0
@@ -114,6 +114,7 @@
skillTypeID = buffSkill.GetSkillTypeID()
buffRepeat = buffSkill.GetBuffRepeat()
+ setLayerCnt = kwargs.get("setLayerCnt", 0)
if setLayerCnt > 0:
addLayerCnt = setLayerCnt
GameWorld.DebugLog("外部直接指定添加的buff层级: setLayerCnt=%s" % setLayerCnt)
@@ -124,6 +125,7 @@
# 可指定来源技能技能才生效,不指定的话默认生效
if not addLayerEff.GetTriggerSrc() or addLayerEff.GetTriggerSrc() == relatedSkillID:
addLayerCnt = GameWorld.GetResultByWeightList(addLayerEff.GetEffectValues(), addLayerCnt)
+ addLayerCnt += TurnPassive.GetTriggerEffectValue(turnFight, buffOwner, batObj, ChConfig.PassiveEff_AddBuffLayer, buffSkill)
maxLayerCnt = buffSkill.GetLayerMax()
if maxLayerCnt:
maxLayerCnt += TurnPassive.GetTriggerEffectValue(turnFight, buffOwner, batObj, ChConfig.PassiveEff_AddBuffLayerMax, buffSkill)
@@ -255,7 +257,7 @@
continue
if curEffect.GetTriggerWay():
- if curEffect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf] and refreshType == 1:
+ if refreshType == 1 and curEffect.GetTriggerBuffEnable():
passiveEffMgr.AddBuffPassiveEffect(curBuff, skillData, curEffect)
elif effectID in ChConfig.AttrIDList:
@@ -334,15 +336,17 @@
DoBuffDel(turnFight, batObj, curBuff, relatedSkill)
return
-def DoBuffDel(turnFight, batObj, curBuff, relatedSkill=None, afterLogic=False, tagObj=None):
+def DoBuffDel(turnFight, batObj, curBuff, relatedSkill=None, afterLogic=False, tagObj=None, noRefreshAttr=False, isSync=True):
'''删除buff
@param relatedSkill: 关联的技能
@param afterLogic: 是否需要在关联技能处理完毕后才处理删除后续逻辑,如通知,触发被动等
@param tagObj: 由谁引起的buff删除
+ @param noRefreshAttr: 不刷新属性
+ @return: isRefreshAttr 是否需要刷属性,如果设置了 noRefreshAttr,则要在外层刷属性
'''
- release = True
- isSync = True
+ release = True # 释放buff实例
+ #isSync = True
relatedSkillID = relatedSkill.GetSkillID() if relatedSkill else 0
if afterLogic and relatedSkill:
release = False
@@ -384,7 +388,7 @@
if triggerWay == ChConfig.TriggerWay_BuffDel:
TurnPassive.OnTriggerPassiveEffect(turnFight, batObj, ChConfig.TriggerWay_BuffDel, connBuff=curBuff)
- if curEffect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf]:
+ if curEffect.GetTriggerBuffEnable():
haveBuffPassiveEff = True
elif effectID in ChConfig.AttrIDList:
@@ -393,7 +397,7 @@
if haveBuffPassiveEff:
batObj.GetPassiveEffManager().DelBuffPassiveEffect(buffID)
- if isRefreshAttr:
+ if isRefreshAttr and not noRefreshAttr:
RefreshBuffAttr(batObj)
if skillType == ChConfig.Def_SkillType_Halo and ownerID == buffObjID:
@@ -410,7 +414,7 @@
if not haloBuff:
continue
DoBuffDel(turnFight, haloObj, haloBuff, relatedSkill, afterLogic, tagObj)
- return
+ return isRefreshAttr
def DoBuffDelAfterLogicOver(turnFight, buffObjID, curBuff, relatedSkill):
## buff删除后续处理逻辑处理完毕
@@ -427,7 +431,73 @@
if callFunc:
callFunc(turnFight, batObj, curBuff, **kwargs)
return
+
+def DoBuffByDead(turnFight, batObj):
+ ## 死亡处理buff
+ isRefreshAttr = False
+ objID = batObj.GetID()
+ buffMgr = batObj.GetBuffManager()
+ for index in range(buffMgr.GetBuffCount())[::-1]:
+ buff = buffMgr.GetBuffByIndex(index)
+ buffID = buff.GetBuffID()
+ skillID = buff.GetSkillID()
+ if buff.GetBuffRetain()&pow(2, ChConfig.BuffRetainType_Dead):
+ GameWorld.DebugLog("死亡不清除的buff: objID=%s,buffID=%s,skillID=%s" % (objID, buffID, skillID))
+ continue
+ if DoBuffDel(turnFight, batObj, buff, noRefreshAttr=True, isSync=False): # 可不通知,前端默认都清除,复活后重新同步
+ isRefreshAttr = True
+
+ if isRefreshAttr:
+ RefreshBuffAttr(batObj)
+
+ return
+
+def DoBuffByRevive(turnFight, batObj):
+ ## 复活处理buff
+ isRefreshAttr = False
+ objID = batObj.GetID()
+ buffMgr = batObj.GetBuffManager()
+ for index in range(buffMgr.GetBuffCount()):
+ buff = buffMgr.GetBuffByIndex(index)
+ buffID = buff.GetBuffID()
+ skillID = buff.GetSkillID()
+ if buff.GetBuffRetain()&pow(2, ChConfig.BuffRetainType_Revive):
+ GameWorld.DebugLog("复活不清除的buff: objID=%s,buffID=%s,skillID=%s" % (objID, buffID, skillID))
+ SyncBuffRefresh(turnFight, batObj, buff, isNewAdd=True) # 复活时还存在的buff通知前端视为新添加的
+ continue
+ if DoBuffDel(turnFight, batObj, buff, noRefreshAttr=True, isSync=False): # 复活可不通知删除的buff
+ isRefreshAttr = True
+
+ if isRefreshAttr:
+ RefreshBuffAttr(batObj)
+
+ # 重新添加本阵营有效光环
+ batObjMgr = BattleObj.GetBatObjMgr()
+ batLineup = batObj.GetBatLineup()
+ for tagObjID in batLineup.posObjIDDict.values():
+ tagObj = batObjMgr.getBatObj(tagObjID)
+ if not tagObj.IsAlive():
+ continue
+ tagBuffMgr = tagObj.GetBuffManager()
+ for index in range(tagBuffMgr.GetBuffCount()):
+ buff = tagBuffMgr.GetBuffByIndex(index)
+ haloObjIDList = buff.GetHaloObjIDList()
+ if not haloObjIDList or objID not in haloObjIDList:
+ continue
+ if buff.GetOwnerID() != tagObjID:
+ # 非光源
+ continue
+ haloSkillID = buff.GetSkillID()
+ GameWorld.DebugLog("复活后重新添加本阵营光环: objID=%s,ownerID=%s,haloSkillID=%s" % (objID, tagObjID, haloSkillID))
+ haloSkill = tagObj.GetSkillManager().FindSkillByID(haloSkillID)
+ if not haloSkill:
+ continue
+ OnAddBuff(turnFight, batObj, haloSkill, buffOwner=tagObj)
+
+ # 光源重新添加有效光环,根据光源是否还有效规则优化,待处理
+ return
+
def RefreshBuffAttr(batObj, isInit=False):
''' 刷新buff属性,如果有涉及到buff属性变更的,只能全部buff重新刷
'''
@@ -455,8 +525,8 @@
effID = effect.GetEffectID()
if effID not in ChConfig.AttrIDList:
continue
- if effect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf]:
- # 技能时仅技能有效
+ if effect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill]:
+ # 技能属性仅技能时有效
continue
attrID = effID
attrValue = effect.GetEffectValue(0)
@@ -489,7 +559,7 @@
effID = effect.GetEffectID()
if effID not in ChConfig.AttrIDList:
continue
- if effect.GetTriggerSrc() and effect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Buff, ChConfig.TriggerSrc_BuffSelf]:
+ if not (not effect.GetTriggerSrc() or effect.GetTriggerBuffEnable()):
# buff时,不配默认有效,或仅buff有效
continue
attrID = effID
--
Gitblit v1.8.0