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 |   56 +++++++++++++++++++++++---------------------------------
 1 files changed, 23 insertions(+), 33 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 1fb3da3..e8240c1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
@@ -38,9 +38,10 @@
     skillIpyData = IpyGameDataPY.GetIpyGameData("Skill", skillID)
     if not skillIpyData:
         return
+    ownerID = buffOwner.GetID() if buffOwner else 0
     tagObjList = [batObj]
     poolMgr = ObjPool.GetPoolMgr()
-    useSkill = poolMgr.acquire(BattleObj.PySkill, skillIpyData)
+    useSkill = poolMgr.acquire(BattleObj.PySkill, skillIpyData, ownerID)
     useSkill.SetTagObjList(tagObjList)
     
     OnAddBuff(turnFight, batObj, useSkill, buffOwner, bySkill, afterLogic)
@@ -99,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:
@@ -122,6 +123,8 @@
                 else:
                     SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID, isNewAdd=True)
                     
+                if nowLayerCnt != updLayerCnt:
+                    RefreshBuffEffect(turnFight, batObj, buff, False)
                 break
             
             return True
@@ -156,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):
@@ -302,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)
@@ -309,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()
     # 先计算百分比加成或降低的
@@ -327,7 +317,7 @@
         attrValue = batObj.GetBatAttrValue(attrID, False)
         if attrValue <= 0:
             continue
-        updValue = int(attrValue * (10000 + attrPerValue) / 10000.0)
+        updValue = attrValue * (10000 + attrPerValue) / 10000.0
         #updValue = max(0, updValue) # 最多减到0,最大无上限
         batObj.SetBatAttrValue(attrID, updValue)
         GameWorld.DebugLog("    attrID=%s(PerID:%s),attrValue=%s(PerValue:%s),updValue=%s" % (attrID, attrPerID, attrValue, attrPerValue, updValue))

--
Gitblit v1.8.0