From e797b694ee5320e50e4da933352b93ad811a3277 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 22 十二月 2025 16:38:52 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(周瑜技能,除了最后一个觉醒;增加效果5028 5509;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5509.py |   41 +++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5008.py |   15 ++--
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py                      |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5028.py |   79 ++++++++++++++++++++++++++
 4 files changed, 129 insertions(+), 8 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5008.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5008.py
index eeaaa6b..28f11bb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5008.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5008.py
@@ -47,20 +47,21 @@
         effSkillTypeID = effSkill.GetSkillTypeID()
         changeLayers += TurnPassive.GetTriggerEffectValue(turnFight, batObj, tagObj, ChConfig.PassiveEff_AddChangeLayers5008, connSkillTypeID=effSkillTypeID, **kwargs)
         
-    changeToLayer = 0
+    remainLayers = changeLayers # 剩余可转层数
+    changeToLayer = 0 # 最终转层数
     for tagBuff in tagBuffList:
-        if changeLayers <= 0:
+        if remainLayers <= 0:
             break
         skillID = tagBuff.GetSkillID()
         curLayer = max(1, tagBuff.GetLayer()) # 至少算1层
-        if curLayer > changeLayers:
-            updLayer = curLayer - changeLayers
-            changeLayers = 0
-            changeToLayer += changeLayers
+        if curLayer > remainLayers:
+            updLayer = curLayer - remainLayers
+            changeToLayer += remainLayers
+            remainLayers = 0
         else:
             updLayer = 0
-            changeLayers -= curLayer
             changeToLayer += curLayer
+            remainLayers -= curLayer
         GameWorld.DebugLog("转化buff: tagID=%s,tagBuffID=%s,skillID=%s,curLayer=%s,updLayer=%s,changeToLayer=%s" 
                            % (tagObj.GetID(), tagBuff.GetBuffID(), skillID, curLayer, updLayer, changeToLayer))
         TurnBuff.DoBuffLayerChange(turnFight, tagObj, tagBuff, updLayer, connSkill)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5028.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5028.py
new file mode 100644
index 0000000..aa0db6a
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5028.py
@@ -0,0 +1,79 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveTrigger.PassiveEff_5028
+#
+# @todo:转化目标身上某种状态buff(删除旧的转换成其他buff)
+# @author hxp
+# @date 2025-12-22
+# @version 1.0
+#
+# 详细描述: 转化目标身上某种状态buff(删除旧的转换成其他buff)
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-12-22 16:30"""
+#-------------------------------------------------------------------------------
+
+import TurnBuff
+import GameWorld
+import TurnPassive
+import ChConfig
+import random
+
+def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
+    buffState = curEffect.GetEffectValue(0) # buff状态
+    changeLayers = max(1, curEffect.GetEffectValue(1)) # 转化层数
+    rate = curEffect.GetEffectValue(2) # 转化概率
+    changeToSkillID = curEffect.GetEffectValue(3) # 转化为其他buff技能ID
+    
+    if not GameWorld.CanHappen(rate):
+        GameWorld.DebugLogEx("5028概率不转化! rate=%s", rate)
+        return
+    
+    tagBuffList = []
+    buffMgr = tagObj.GetBuffManager()
+    for buff in buffMgr.FindBuffListByState(buffState):
+        skillData = buff.GetSkillData()
+        if skillData.GetDispersedLimit():
+            continue
+        tagBuffList.append(buff)
+        
+    if not tagBuffList:
+        GameWorld.DebugLog("目标没有可转化的buff: tagID=%s,buffState=%s" % (tagObj.GetID(), buffState))
+        return
+    
+    random.shuffle(tagBuffList) # 随机
+    if changeLayers < len(tagBuffList):
+        # 不足时才额外取其他被动增加的
+        effSkillTypeID = effSkill.GetSkillTypeID()
+        changeLayers += TurnPassive.GetTriggerEffectValue(turnFight, batObj, tagObj, ChConfig.PassiveEff_AddChangeLayers5008, connSkillTypeID=effSkillTypeID, **kwargs)
+        
+    remainLayers = changeLayers # 剩余可转层数
+    changeToLayer = 0 # 最终转层数
+    for tagBuff in tagBuffList:
+        if remainLayers <= 0:
+            break
+        skillID = tagBuff.GetSkillID()
+        curLayer = max(1, tagBuff.GetLayer()) # 至少算1层
+        if curLayer > remainLayers:
+            updLayer = curLayer - remainLayers
+            changeToLayer += remainLayers
+            remainLayers = 0
+        else:
+            updLayer = 0
+            changeToLayer += curLayer
+            remainLayers -= curLayer
+        GameWorld.DebugLog("转化buff: tagID=%s,tagBuffID=%s,skillID=%s,curLayer=%s,updLayer=%s,changeToLayer=%s" 
+                           % (tagObj.GetID(), tagBuff.GetBuffID(), skillID, curLayer, updLayer, changeToLayer))
+        TurnBuff.DoBuffLayerChange(turnFight, tagObj, tagBuff, updLayer, connSkill)
+        
+    if changeToLayer <= 0:
+        return
+    
+    if not changeToSkillID:
+        changeToSkillID = effSkill.GetSkillID()
+        
+    buffOwner = batObj
+    TurnBuff.DoAddBuffBySkillID(turnFight, tagObj, changeToSkillID, buffOwner, connSkill, setLayerCnt=changeToLayer)
+    return True
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5509.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5509.py
new file mode 100644
index 0000000..7dac9f2
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5509.py
@@ -0,0 +1,41 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveTrigger.PassiveEff_5509
+#
+# @todo:触发释放技能(验证是否为指定友军来源)
+# @author hxp
+# @date 2025-12-22
+# @version 1.0
+#
+# 详细描述: 触发释放技能(验证是否为指定友军来源)
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-12-22 16:30"""
+#-------------------------------------------------------------------------------
+
+import TurnSkill
+import GameWorld
+
+def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
+    if "byFriendObj" not in kwargs:
+        return
+    byFriendObj = kwargs.pop("byFriendObj") # 直接取出,防止传递
+    
+    passiveSkillID = curEffect.GetEffectValue(0) # 技能ID,为0时释放本技能
+    byHeorID = curEffect.GetEffectValue(1) # 仅友军武将ID时有效(验证用,不一定是技能目标)
+    
+    friendHeroID = byFriendObj.GetHeroID()
+    if friendHeroID != byHeorID:
+        GameWorld.DebugLogEx("5509非友军触发来源不处理! friendHeroID=%s != %s", friendHeroID, byHeorID)
+        return
+    
+    if not passiveSkillID:
+        passiveSkillID = effSkill.GetSkillID()
+    if not passiveSkillID:
+        return
+    
+    effectID = curEffect.GetEffectID()
+    effSkillID = effSkill.GetSkillID()
+    return TurnSkill.OnUsePassiveSkill(turnFight, batObj, byFriendObj, passiveSkillID, connSkill, effSkillID, effectID, connBuff, **kwargs)
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 d593e48..3474507 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -1469,7 +1469,7 @@
                             TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_EnemyDie, dieObj, connSkill=useSkill)
                         # 己方单位死亡时
                         else:
-                            TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendDie, dieObj, connSkill=useSkill)
+                            TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendDie, dieObj, connSkill=useSkill, byFriendObj=dieObj)
                  
     # 复活时
     for tagObj in reviveObjList:

--
Gitblit v1.8.0