From c2c30fce8df5dc5ea69f4f93bc9a6c655b2928cd Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 05 十二月 2025 15:15:15 +0800
Subject: [PATCH] 376 【福利】兑换码
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py | 78 ++++++++++++++++++++++++++++++++++++--
1 files changed, 73 insertions(+), 5 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 193fe3a..831c4f4 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
@@ -336,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
@@ -395,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:
@@ -412,7 +414,7 @@
if not haloBuff:
continue
DoBuffDel(turnFight, haloObj, haloBuff, relatedSkill, afterLogic, tagObj)
- return
+ return isRefreshAttr
def DoBuffDelAfterLogicOver(turnFight, buffObjID, curBuff, relatedSkill):
## buff删除后续处理逻辑处理完毕
@@ -429,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重新刷
'''
--
Gitblit v1.8.0