From 697e46856089c0a05d6a4c5fbee3778f8eb942fa Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 26 九月 2025 16:17:47 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(孙尚香技能;技能增加buff驱散限制字段;增加目标细分6 - 灼烧/玄火优先;增加效果5008 - 转化目标身上类型buff;优化效果5004 5006 5007;)

---
 PySysDB/生成IpyGameDataPY/IpyGameDataPYTemp.py                                                                |   14 +-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py                       |   22 +++--
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py                     |    4 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py                        |   18 ++--
 PySysDB/PySysDBPY.h                                                                                         |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5006.py |    7 +
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5004.py |   12 +-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/TurnFight.py                |   36 +++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5008.py |   67 ++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py                      |   19 ++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5007.py |   26 +++---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                             |    6 +
 12 files changed, 183 insertions(+), 50 deletions(-)

diff --git a/PySysDB/PySysDBPY.h b/PySysDB/PySysDBPY.h
index 2daf835..dd09dae 100644
--- a/PySysDB/PySysDBPY.h
+++ b/PySysDB/PySysDBPY.h
@@ -117,7 +117,7 @@
 	BYTE		LayerCnt;	//Buff层数
 	BYTE		LayerMax;	//最大层数
 	DWORD		BuffRepeat;	//Buff叠加规则
-	DWORD		DieContinue;	//Buff死亡存在
+	BYTE		DispersedLimit;	//驱散限制
 	DWORD		FightPower;	//技能战斗力
 	char		SkillMotionName; //技能动作名
 };
diff --git "a/PySysDB/\347\224\237\346\210\220IpyGameDataPY/IpyGameDataPYTemp.py" "b/PySysDB/\347\224\237\346\210\220IpyGameDataPY/IpyGameDataPYTemp.py"
index 896cd0c..93bb497 100644
--- "a/PySysDB/\347\224\237\346\210\220IpyGameDataPY/IpyGameDataPYTemp.py"
+++ "b/PySysDB/\347\224\237\346\210\220IpyGameDataPY/IpyGameDataPYTemp.py"
@@ -291,13 +291,7 @@
     
     def __StrToList(self, strValue):
         setList = []
-        if (strValue.startswith("[") and strValue.endswith("]")) or (strValue.startswith("(") and strValue.endswith(")")):
-            setList = eval(strValue)
-        elif strValue in ["0", "-", ""]:
-            pass
-        elif strValue.isdigit():
-            setList = (int(strValue),)
-        else:
+        if ChConfig.Def_Str_Montant in strValue: # |分割的优先
             for value in strValue.split(ChConfig.Def_Str_Montant):
                 if value.isdigit():
                     value = int(value)
@@ -311,6 +305,12 @@
                 setList.append(value)
             if setList:
                 setList = tuple(setList)
+        elif (strValue.startswith("[") and strValue.endswith("]")) or (strValue.startswith("(") and strValue.endswith(")")):
+            setList = eval(strValue)
+        elif strValue in ["0", "-", ""]:
+            pass
+        elif strValue.isdigit():
+            setList = (int(strValue),)
         return setList
     
 #<%Ipy_Cache_Func%>
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
index 7c32629..df3016b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -344,7 +344,7 @@
     def GetLayerCnt(self): return self._ipyData.GetLayerCnt()
     def GetLayerMax(self): return self._ipyData.GetLayerMax()
     def GetBuffRepeat(self): return self._ipyData.GetBuffRepeat() # Buff叠加规则
-    def GetDieContinue(self): return self._ipyData.GetDieContinue() # Buff死亡存在
+    def GetDispersedLimit(self): return self._ipyData.GetDispersedLimit() # 驱散限制
     def GetFightPower(self): return self._ipyData.GetFightPower()
     def GetSkillMotionName(self): return self._ipyData.GetSkillMotionName()
     
@@ -604,7 +604,7 @@
     def GetLayerCnt(self): return self._skillData.GetLayerCnt()
     def GetLayerMax(self): return self._skillData.GetLayerMax()
     def GetBuffRepeat(self): return self._skillData.GetBuffRepeat() # Buff叠加规则
-    def GetDieContinue(self): return self._skillData.GetDieContinue() # Buff死亡存在
+    def GetDispersedLimit(self): return self._skillData.GetDispersedLimit() # 驱散限制
     def GetFightPower(self): return self._skillData.GetFightPower()
     def GetSkillMotionName(self): return self._skillData.GetSkillMotionName()
     
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index f4b0eb3..b1320bf 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -1395,7 +1395,8 @@
 SkillTagAffect_Death, # 死亡单位 3
 SkillTagAffect_UncontrolledPriority, # 未被控制优先 4
 SkillTagAffect_AtkHighest, # 攻击力最高 5
-) = range(6)
+SkillTagAffect_Burn, # 灼烧/玄火目标优先 6
+) = range(7)
 
 #技能施法目标
 Def_UseSkillAim_Type = 3
@@ -3160,7 +3161,8 @@
     BatObjState_20, # 贯龙枪 20
     BatObjState_DamShield, # 承伤盾 21
     BatObjState_DamBackShield, # 荆棘盾 22
-) = range(1 + 22)
+    BatObjState_BurnPlus, # 玄火(灼烧2) 23
+) = range(1 + 23)
 
 #玩家状态定义,不能超过31个,如超过,需扩展多个key支持
 Def_PlayerStateList = (
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/TurnFight.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/TurnFight.py
index a3b0243..a989353 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/TurnFight.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/TurnFight.py
@@ -21,6 +21,7 @@
 import NetPackCommon
 import TurnAttack
 import BattleObj
+import TurnBuff
 
 FactionList = [1, 2]
 
@@ -33,6 +34,7 @@
     if not msgList:
         GameWorld.DebugAnswer(curPlayer, "设置属性: TurnFight a 属性ID 值 [阵营 位置] ")
         GameWorld.DebugAnswer(curPlayer, "击杀目标: TurnFight k 阵营 [位置 ...] ")
+        GameWorld.DebugAnswer(curPlayer, "添加buff: TurnFight b 阵营  位置 buff技能ID")
         GameWorld.DebugAnswer(curPlayer, "输出明细: TurnFight p [阵营 位置] ")
         GameWorld.DebugAnswer(curPlayer, "阵营: 1-左边;2-右边")
         GameWorld.DebugAnswer(curPlayer, "位置: 1~6号位")
@@ -44,6 +46,8 @@
         __doSetAttr(curPlayer, msgList)
     elif value == "k":
         __doKillObj(curPlayer, msgList)
+    elif value == "b":
+        __doAddBuff(curPlayer, msgList)
     elif value == "p":
         __printInfo(curPlayer, msgList)
         
@@ -132,6 +136,38 @@
     NetPackCommon.SendFakePack(curPlayer, clientPack)
     return
 
+def __doAddBuff(curPlayer, msgList):
+    faction = msgList[1] if len(msgList) > 1 else 2
+    posNum = msgList[2] if len(msgList) > 2 else 1
+    skillID = msgList[3] if len(msgList) > 3 else 0
+    if faction not in FactionList:
+        GameWorld.DebugAnswer(curPlayer, "阵营: 1-左边;2-右边")
+        return
+    mainFightMgr = TurnAttack.GetMainFightMgr(curPlayer)
+    turnFight = mainFightMgr.turnFight
+    if not turnFight.isInFight():
+        GameWorld.DebugAnswer(curPlayer, "主线非战斗中")
+        return
+    
+    batObjMgr = BattleObj.GetBatObjMgr()
+    batFaction = turnFight.getBatFaction(faction)
+    batLineup = batFaction.getBatlineup(1)
+    objID = batLineup.posObjIDDict.get(posNum)
+    batObj = batObjMgr.getBatObj(objID)
+    if not batObj:
+        GameWorld.DebugAnswer(curPlayer, "不存在该战斗对象:阵营:%s,位置:%s" % (faction, posNum))
+        return
+    if not batObj.IsAlive():
+        GameWorld.DebugAnswer(curPlayer, "该对象已被击杀:阵营:%s,位置:%s" % (faction, posNum))
+        return
+    
+    addBuff = TurnBuff.DoAddBuffBySkillID(turnFight, batObj, skillID)
+    if addBuff:
+        GameWorld.DebugAnswer(curPlayer, "添加buff成功! buffID=%s" % addBuff.GetBuffID())    
+    else:
+        GameWorld.DebugAnswer(curPlayer, "添加buff失败")
+    return
+
 def __printInfo(curPlayer, msgList):
     ## 输出信息
     faction = msgList[1] if len(msgList) > 1 else 0
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
index c5b679f..72f6bd6 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/IpyGameDataPY.py
@@ -139,7 +139,7 @@
                         ("BYTE", "LayerCnt", 0),
                         ("BYTE", "LayerMax", 0),
                         ("DWORD", "BuffRepeat", 0),
-                        ("DWORD", "DieContinue", 0),
+                        ("BYTE", "DispersedLimit", 0),
                         ("DWORD", "FightPower", 0),
                         ("char", "SkillMotionName", 0),
                         ),
@@ -2708,7 +2708,7 @@
     def GetLayerCnt(self): return self.attrTuple[34] # Buff层数 BYTE
     def GetLayerMax(self): return self.attrTuple[35] # 最大层数 BYTE
     def GetBuffRepeat(self): return self.attrTuple[36] # Buff叠加规则 DWORD
-    def GetDieContinue(self): return self.attrTuple[37] # Buff死亡存在 DWORD
+    def GetDispersedLimit(self): return self.attrTuple[37] # 驱散限制 BYTE
     def GetFightPower(self): return self.attrTuple[38] # 技能战斗力 DWORD
     def GetSkillMotionName(self): return self.attrTuple[39] # 技能动作名 char
 
@@ -6913,13 +6913,7 @@
     
     def __StrToList(self, strValue):
         setList = []
-        if (strValue.startswith("[") and strValue.endswith("]")) or (strValue.startswith("(") and strValue.endswith(")")):
-            setList = eval(strValue)
-        elif strValue in ["0", "-", ""]:
-            pass
-        elif strValue.isdigit():
-            setList = (int(strValue),)
-        else:
+        if ChConfig.Def_Str_Montant in strValue: # |分割的优先
             for value in strValue.split(ChConfig.Def_Str_Montant):
                 if value.isdigit():
                     value = int(value)
@@ -6933,6 +6927,12 @@
                 setList.append(value)
             if setList:
                 setList = tuple(setList)
+        elif (strValue.startswith("[") and strValue.endswith("]")) or (strValue.startswith("(") and strValue.endswith(")")):
+            setList = eval(strValue)
+        elif strValue in ["0", "-", ""]:
+            pass
+        elif strValue.isdigit():
+            setList = (int(strValue),)
         return setList
     
 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5004.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5004.py
index 8da8fe6..77d6988 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5004.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5004.py
@@ -4,12 +4,12 @@
 #
 ##@package Skill.PassiveTrigger.PassiveEff_5004
 #
-# @todo:概率随机移除随机目标身上某种buff
+# @todo:概率移除随机目标身上某种类型buff
 # @author hxp
 # @date 2025-09-23
 # @version 1.0
 #
-# 详细描述: 概率随机移除随机目标身上某种buff
+# 详细描述: 概率移除随机目标身上某种类型buff
 #
 #-------------------------------------------------------------------------------
 #"""Version = 2025-09-23 18:30"""
@@ -23,7 +23,7 @@
 
 def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
     # buff技能类型    移除个数,0为全部    敌友,1-敌方;2-友方    随机目标个数    概率
-    skillType = curEffect.GetEffectValue(0) # buff技能类型
+    skillTypeList = curEffect.GetEffectValue(0) # buff技能类型
     delBuffCnt = curEffect.GetEffectValue(1) # 移除个数,0为全部
     isFriend = curEffect.GetEffectValue(2) # 敌友,0-敌方;1-友方
     delObjCnt = curEffect.GetEffectValue(3) # 随机目标个数
@@ -53,14 +53,16 @@
         for index in range(buffMgr.GetBuffCount()):
             buff = buffMgr.GetBuffByIndex(index)
             skillData = buff.GetSkillData()
-            if skillData.GetSkillType() != skillType:
+            if skillData.GetSkillType() not in skillTypeList:
+                continue
+            if skillData.GetDispersedLimit():
                 continue
             buffList.append(buff)
             
         if buffList:
             objBuffList.append([tagObj, buffList])
             
-    GameWorld.DebugLog("概率随机移除随机目标身上某种buff: skillType=%s,objLen=%s" % (skillType, len(objBuffList)))
+    GameWorld.DebugLog("概率随机移除随机目标身上某种buff: skillTypeList=%s,objLen=%s" % (skillTypeList, len(objBuffList)))
     if not objBuffList:
         return
     
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5006.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5006.py
index 39e8ae8..f2db7d8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5006.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5006.py
@@ -4,12 +4,12 @@
 #
 ##@package Skill.PassiveTrigger.PassiveEff_5006
 #
-# @todo:移除目标身上某种状态buff
+# @todo:移除/驱散目标身上某种状态buff
 # @author hxp
 # @date 2025-09-24
 # @version 1.0
 #
-# 详细描述: 移除目标身上某种状态buff
+# 详细描述: 移除/驱散目标身上某种状态buff
 #
 #-------------------------------------------------------------------------------
 #"""Version = 2025-09-24 19:00"""
@@ -35,6 +35,9 @@
     
     buffMgr = delObj.GetBuffManager()
     for buff in buffMgr.FindBuffListByState(buffState):
+        skillData = buff.GetSkillData()
+        if skillData.GetDispersedLimit():
+            continue
         GameWorld.DebugLog("    移除buff状态: tagID=%s,buffID=%s" % (delObj.GetID(), buff.GetBuffID()))
         TurnBuff.DoBuffDel(turnFight, delObj, buff)
         
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5007.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5007.py
index 8d90e4e..a8aa970 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5007.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5007.py
@@ -4,46 +4,48 @@
 #
 ##@package Skill.PassiveTrigger.PassiveEff_5007
 #
-# @todo:偷取目标身上增益类型buff(技能类型3、5)
+# @todo:偷取目标身上类型buff(删除对方的加到自己身上)
 # @author hxp
 # @date 2025-09-25
 # @version 1.0
 #
-# 详细描述: 偷取目标身上增益类型buff(技能类型3、5)
+# 详细描述: 偷取目标身上类型buff(删除对方的加到自己身上)
 #
 #-------------------------------------------------------------------------------
 #"""Version = 2025-09-25 17:30"""
 #-------------------------------------------------------------------------------
 
 import TurnBuff
-import ChConfig
 import GameWorld
 import random
 
 def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
-    stealCnt = max(1, curEffect.GetEffectValue(0)) # 偷取个数
-    checkInStateList = curEffect.GetEffectValue(1) # 可附加验证处于xx状态 [状态1, 状态2, ...]
+    skillTypeList = curEffect.GetEffectValue(0) # buff技能类型
+    stealCnt = max(1, curEffect.GetEffectValue(1)) # 偷取个数
+    checkInStateList = curEffect.GetEffectValue(2) # 可附加验证处于xx状态 [状态1, 状态2, ...]
     if checkInStateList:
         if not tagObj.CheckInState(checkInStateList):
             GameWorld.DebugLog("目标不在以下状态不能偷: tagID=%s,checkInStateList=%s" % (tagObj.GetID(), checkInStateList))
             return
         
-    plsBuffList = []
+    tagBuffList = []
     buffMgr = tagObj.GetBuffManager()
     for index in range(buffMgr.GetBuffCount()):
         buff = buffMgr.GetBuffByIndex(index)
         skillData = buff.GetSkillData()
-        if skillData.GetSkillType() not in [ChConfig.Def_SkillType_LstPlsBuff, ChConfig.Def_SkillType_PlsBuff]:
+        if skillData.GetSkillType() not in skillTypeList:
             continue
-        plsBuffList.append(buff)
+        if skillData.GetDispersedLimit():
+            continue
+        tagBuffList.append(buff)
         
-    if not plsBuffList:
-        GameWorld.DebugLog("目标没有增益buff: tagID=%s" % (tagObj.GetID()))
+    if not tagBuffList:
+        GameWorld.DebugLog("目标没有可偷的buff: tagID=%s,skillTypeList=%s" % (tagObj.GetID(), skillTypeList))
         return
     
-    random.shuffle(plsBuffList) # 随机
+    random.shuffle(tagBuffList) # 随机
     
-    for tagBuff in plsBuffList:
+    for tagBuff in tagBuffList:
         if stealCnt <= 0:
             break
         skillID = tagBuff.GetSkillID()
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
new file mode 100644
index 0000000..f013a6b
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5008.py
@@ -0,0 +1,67 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveTrigger.PassiveEff_5008
+#
+# @todo:转化目标身上类型buff(删除旧的转换成其他buff)
+# @author hxp
+# @date 2025-09-26
+# @version 1.0
+#
+# 详细描述: 转化目标身上类型buff(删除旧的转换成其他buff)
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-09-26 16:30"""
+#-------------------------------------------------------------------------------
+
+import TurnBuff
+import GameWorld
+import random
+
+def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
+    skillTypeList = curEffect.GetEffectValue(0) # buff技能类型
+    changeLayers = max(1, curEffect.GetEffectValue(1)) # 转化层数
+    changeToSkillID = curEffect.GetEffectValue(2) # 转化为其他buff技能ID
+    
+    tagBuffList = []
+    buffMgr = tagObj.GetBuffManager()
+    for index in range(buffMgr.GetBuffCount()):
+        buff = buffMgr.GetBuffByIndex(index)
+        skillData = buff.GetSkillData()
+        if skillData.GetSkillType() not in skillTypeList:
+            continue
+        if skillData.GetDispersedLimit():
+            continue
+        tagBuffList.append(buff)
+        
+    if not tagBuffList:
+        GameWorld.DebugLog("目标没有可转化的buff: tagID=%s,skillTypeList=%s" % (tagObj.GetID(), skillTypeList))
+        return
+    
+    random.shuffle(tagBuffList) # 随机
+    
+    changeToLayer = 0
+    for tagBuff in tagBuffList:
+        if changeLayers <= 0:
+            break
+        skillID = tagBuff.GetSkillID()
+        curLayer = max(1, tagBuff.GetLayer()) # 至少算1层
+        if curLayer > changeLayers:
+            updLayer = curLayer - changeLayers
+            changeLayers = 0
+            changeToLayer += changeLayers
+        else:
+            updLayer = 0
+            changeLayers -= curLayer
+            changeToLayer += 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
+    
+    buffOwner = batObj
+    TurnBuff.DoAddBuffBySkillID(turnFight, tagObj, changeToSkillID, buffOwner, connSkill, setLayerCnt=changeToLayer)
+    return True
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 ad83602..f96f0fa 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
@@ -49,7 +49,7 @@
     SyncBuffRefresh(turnFight, curBatObj, curBuff, relatedSkillID, isNewAdd)
     return
     
-def DoAddBuffBySkillID(turnFight, batObj, skillID, buffOwner=None, bySkill=None, afterLogic=False, isSync=True):
+def DoAddBuffBySkillID(turnFight, batObj, skillID, buffOwner=None, bySkill=None, afterLogic=False, isSync=True, setLayerCnt=0):
     ## 根据技能ID添加buff
     if not skillID:
         return
@@ -62,12 +62,12 @@
     useSkill = poolMgr.acquire(BattleObj.PySkill, skillIpyData, ownerID)
     useSkill.SetTagObjList(tagObjList)
     
-    addBuff = OnAddBuff(turnFight, batObj, useSkill, buffOwner, bySkill, afterLogic, isSync=isSync)
+    addBuff = OnAddBuff(turnFight, batObj, useSkill, buffOwner, bySkill, afterLogic, isSync=isSync, setLayerCnt=setLayerCnt)
     
     poolMgr.release(useSkill)
     return addBuff
 
-def OnAddBuff(turnFight, batObj, buffSkill, buffOwner=None, bySkill=None, afterLogic=False, isSync=True):
+def OnAddBuff(turnFight, batObj, buffSkill, buffOwner=None, bySkill=None, afterLogic=False, isSync=True, setLayerCnt=0):
     skillID = buffSkill.GetSkillID()
     bySkill = buffSkill.GetBySkill() if not bySkill else bySkill
     relatedSkillID = bySkill.GetSkillID() if bySkill else 0
@@ -94,12 +94,16 @@
     
     skillTypeID = buffSkill.GetSkillTypeID()
     buffRepeat = buffSkill.GetBuffRepeat()
-    addLayerCnt = buffSkill.GetLayerCnt()
-    addLayerEff = buffSkill.GetEffectByID(ChConfig.PassiveEff_AddBuffLayerByWeight)
-    if addLayerEff:
-        # 可指定来源技能技能才生效,不指定的话默认生效
-        if not addLayerEff.GetTriggerSrc() or addLayerEff.GetTriggerSrc() == relatedSkillID:
-            addLayerCnt = GameWorld.GetResultByWeightList(addLayerEff.GetEffectValues(), addLayerCnt)
+    if setLayerCnt > 0:
+        addLayerCnt = setLayerCnt
+        GameWorld.DebugLog("外部直接指定添加的buff层级: setLayerCnt=%s" % setLayerCnt)
+    else:
+        addLayerCnt = buffSkill.GetLayerCnt()
+        addLayerEff = buffSkill.GetEffectByID(ChConfig.PassiveEff_AddBuffLayerByWeight)
+        if addLayerEff:
+            # 可指定来源技能技能才生效,不指定的话默认生效
+            if not addLayerEff.GetTriggerSrc() or addLayerEff.GetTriggerSrc() == relatedSkillID:
+                addLayerCnt = GameWorld.GetResultByWeightList(addLayerEff.GetEffectValues(), addLayerCnt)
     maxLayerCnt = buffSkill.GetLayerMax()
     if maxLayerCnt:
         maxLayerCnt += TurnPassive.GetTriggerEffectValue(turnFight, buffOwner, batObj, ChConfig.PassiveEff_AddBuffLayerMax, buffSkill)
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 74c9966..17d5e40 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -208,6 +208,7 @@
             if tagNum not in lineupNumList:
                 lineupNumList.append(tagNum)
                 
+    batLineup = None
     aimObjList = [] # 先筛选出范围目标
     for num in lineupNumList:
         batLineup = batFaction.getBatlineup(num)
@@ -304,6 +305,21 @@
         sneerObjFirst = False
         aimObjList.sort(key=lambda o:(o.IsInControlled()))
         GameWorld.DebugLog("未被控制优先: %s" % [[o.GetID(), o.IsInControlled()] for o in aimObjList])
+                
+    # 灼烧/玄火目标优先
+    elif tagAffect == ChConfig.SkillTagAffect_Burn:
+        relativeObj = __GetRelativeObjDefault(batObjMgr, curBatObj, posNum, batLineup)
+        sortObjList = [] # 优先灼烧目标,再对位
+        for aimObj in aimObjList:
+            sortValue = 0
+            buffMgr = aimObj.GetBuffManager()
+            if buffMgr.FindBuffListByState(ChConfig.BatObjState_Burn) or buffMgr.FindBuffListByState(ChConfig.BatObjState_BurnPlus):
+                sortValue = 2
+            elif relativeObj and relativeObj.GetID() == aimObj.GetID():
+                sortValue = 1
+            sortObjList.append([sortValue, aimObj])
+        sortObjList.sort(reverse=True)
+        aimObjList = [s[1] for s in sortObjList]
         
     else:
         # 范围目标超过个数,则随机取
@@ -408,7 +424,8 @@
 
 def __GetRelativeObjDefault(batObjMgr, curBatObj, posNum, batLineup):
     ## 获取在某一阵营中的默认对位目标
-    
+    if not batLineup:
+        return
     tagAffect = ChConfig.SkillTagAffect_None # 默认对位目标不需要细分目标,默认规则即可
     inColNum = ChConfig.GetInColNum(posNum) # 玩家所在纵列
     # 优先自己所在纵

--
Gitblit v1.8.0