From f6e55772b80bf536223e6e949e28fb7b1812a54d Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 19 九月 2025 12:02:36 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(甘夫人潜能1、3;增加使用技能后触发方式9;层级buff属性支持;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py |   51 ++++++++++++++++++++-------------------------------
 1 files changed, 20 insertions(+), 31 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 b75f844..e8240c1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
@@ -100,11 +100,11 @@
                 if buff.GetOwnerID() != ownerID:
                     continue
                 buffID = buff.GetBuffID()
+                nowLayerCnt = buff.GetLayer()
                 GameWorld.DebugLog("    已经存在该buff: buffID=%s,skillTypeID=%s,ownerID=%s,buffRepeat=%s" % (buffID, skillTypeID, ownerID, buffRepeat))
                 
                 updLayerCnt = addLayerCnt
                 if buffRepeat == 3: # 叠加层级
-                    nowLayerCnt = buff.GetLayer()
                     maxLayerCnt = buffSkill.GetLayerMax()
                     updLayerCnt = nowLayerCnt + addLayerCnt
                     if maxLayerCnt and updLayerCnt > maxLayerCnt:
@@ -123,6 +123,8 @@
                 else:
                     SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID, isNewAdd=True)
                     
+                if nowLayerCnt != updLayerCnt:
+                    RefreshBuffEffect(turnFight, batObj, buff, False)
                 break
             
             return True
@@ -157,58 +159,44 @@
     else:
         SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID, isNewAdd=True)
         
-    DoBuffAddOver(turnFight, batObj, buffSkill, buff, buffOwner)
+    RefreshBuffEffect(turnFight, batObj, buff, True)
     return
 
-def DoBuffAddOver(turnFight, batObj, buffSkill, addBuff, buffOwner):
-    ## buff添加成功后处理
+def RefreshBuffEffect(turnFight, batObj, curBuff, isNewBuff=False):
+    ## 刷新buff效果
     
     isRefreshAttr = False # 是否刷属性
     
-    #atkType = buffSkill.GetAtkType()
-    #if atkType:
-    #    callFunc = GameWorld.GetExecFunc(TurnBuffs, "BuffAtkType_%d.%s" % (atkType, "OnBuffAddOver"))
-    #    if callFunc:
-    #        callFunc(turnFight, batObj, buffSkill, addBuff, buffOwner)
-    
+    skillData = curBuff.GetSkillData()
     passiveEffMgr = batObj.GetPassiveEffManager()
     # buff效果加入
-    for effectIndex in range(0, buffSkill.GetEffectCount()):
-        curEffect = buffSkill.GetEffect(effectIndex)
+    for effectIndex in range(0, skillData.GetEffectCount()):
+        curEffect = skillData.GetEffect(effectIndex)
         effectID = curEffect.GetEffectID()
         if effectID == 0:
             continue
         
         if curEffect.GetTriggerWay():
-            if curEffect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf]:
-                passiveEffMgr.AddBuffPassiveEffect(addBuff, buffSkill, curEffect)
+            if curEffect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf] and isNewBuff:
+                passiveEffMgr.AddBuffPassiveEffect(curBuff, skillData, curEffect)
                 
         elif effectID in ChConfig.AttrIDList:
             isRefreshAttr = True
             
-        else:
-            callFunc = GameWorld.GetExecFunc(TurnBuffs, "Buff_%d.%s" % (effectID, "OnBuffAddOver"))
-            if callFunc:
-                callFunc(turnFight, batObj, buffSkill, addBuff, curEffect, buffOwner)
-                
     if isRefreshAttr:
         RefreshBuffAttr(batObj)
         
     return
 
-def DecBuffLayer(turnFight, batObj, curBuff, decLayer=1, relatedSkillID=0):
-    ## 减少buff层级
-    curLayer = curBuff.GetLayer()
-    if not curLayer:
-        return
-    updLayer = max(0, curLayer - decLayer)
-    curBuff.SetLayer(updLayer)
+def DoBuffLayerChange(turnFight, batObj, curBuff, updLayer, relatedSkill=None):
+    ## buff层级变更
     if updLayer > 0:
+        curBuff.SetLayer(updLayer)
+        relatedSkillID = relatedSkill.GetSkillID() if relatedSkill else 0
         SyncBuffRefresh(turnFight, batObj, curBuff, relatedSkillID)
+        RefreshBuffEffect(turnFight, batObj, curBuff, False)
         return
-    objID = batObj.GetID()
-    buffID = curBuff.GetBuffID()
-    SyncBuffDel(turnFight, objID, buffID, relatedSkillID)
+    DoBuffDel(turnFight, batObj, curBuff, relatedSkill)
     return
 
 def DoBuffDel(turnFight, batObj, curBuff, relatedSkill=None, afterLogic=False, tagObj=None):
@@ -303,6 +291,7 @@
     buffMgr = batObj.GetBuffManager()
     for index in range(buffMgr.GetBuffCount()):
         buff = buffMgr.GetBuffByIndex(index)
+        layer = max(1, buff.GetLayer())
         skillData = buff.GetSkillData()
         for eIndex in range(skillData.GetEffectCount()):
             effect = skillData.GetEffect(eIndex)
@@ -310,13 +299,13 @@
             if effID not in ChConfig.AttrIDList:
                 continue
             attrID = effID
-            attrValue = effect.GetEffectValue(0)
+            attrValue = effect.GetEffectValue(0) * layer
             calcType = effect.GetEffectValue(1)
             if calcType == 2: # 减少,其他默认增加
                 attrValue = -attrValue
             buffAttrDict[attrID] = buffAttrDict.get(attrID, 0) + attrValue
             
-    GameWorld.DebugLog("    __addBuffAttr buffAttrDict=%s" % buffAttrDict)
+    GameWorld.DebugLog("    buffAttrDict=%s" % buffAttrDict)
     
     objID = batObj.GetID()
     # 先计算百分比加成或降低的

--
Gitblit v1.8.0