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