From 67d6a2a2fadc1f98f8316cf7e3a0717bfc971a43 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 28 八月 2025 10:23:45 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(技能变更主线阵容战斗中更新技能;B428增加通知是否是添加buff的;buff叠加规则0 4 5;增加效果5002结算目标某种状态持续buff所有回合效果)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5001.py | 14 +-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py | 78 ++++++++++----
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py | 2
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5011.py | 32 -----
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5002.py | 63 ++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py | 12 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py | 8 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py | 12 +-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 55 +++++++++-
9 files changed, 198 insertions(+), 78 deletions(-)
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 88d3808..b54abb1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -156,7 +156,9 @@
effDict = self._AffectBuffDict[key]
if buffID not in effDict:
effDict[buffID] = []
- effDict[buffID].append(effectID)
+ effIDList = effDict[buffID]
+ if effectID not in effIDList:
+ effIDList.append(effectID)
return
def DelBuffPassiveEffect(self, buffID):
@@ -633,10 +635,16 @@
TurnPassive.RefreshPassive(self)
return
- def UpdInitBatAttr(self, initAttrDict):
+ def UpdInitBatAttr(self, initAttrDict, skillIDList):
## 更新战斗属性,一般只有主阵容需要更新,战斗中养成、装备变化等引起的主阵容属性变更时需要实时更新
self._initAttrDict = initAttrDict
+ learnNewSkill = False
+ for skillID in skillIDList:
+ if self._skillMgr.LearnSkillByID(skillID):
+ learnNewSkill = True
TurnBuff.RefreshBuffAttr(self)
+ if learnNewSkill: # 有学新技能时重刷技能被动
+ self._passiveEffMgr.RefreshSkillPassiveEffect()
return
def ResetBattleEffect(self):
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
index 19a7250..ec7bda2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChPyNetSendPack.py
@@ -47164,6 +47164,7 @@
("Value1", c_int),
("Value2", c_int),
("Value3", c_int),
+ ("IsAdd", c_ubyte), # 是否是添加/覆盖的,1-是;0-否一般为buff的数据刷新
]
def __init__(self):
@@ -47190,6 +47191,7 @@
self.Value1 = 0
self.Value2 = 0
self.Value3 = 0
+ self.IsAdd = 0
return
def GetLength(self):
@@ -47211,7 +47213,8 @@
OwnerID:%d,
Value1:%d,
Value2:%d,
- Value3:%d
+ Value3:%d,
+ IsAdd:%d
'''\
%(
self.Cmd,
@@ -47225,7 +47228,8 @@
self.OwnerID,
self.Value1,
self.Value2,
- self.Value3
+ self.Value3,
+ self.IsAdd
)
return DumpString
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
index d9506f8..179464b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Player/PlayerOnline.py
@@ -788,7 +788,7 @@
continue
lineupHero = lineup.GetLineupHero(posNum)
if lineupHero.heroBatAttrDict:
- batObj.UpdInitBatAttr(lineupHero.heroBatAttrDict)
+ batObj.UpdInitBatAttr(lineupHero.heroBatAttrDict, lineupHero.heroSkillIDList)
else:
GameWorld.DebugLog("主阵容没有在战斗中,不需要处理", playerID)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5001.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5001.py
index d729cc2..3e18e05 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5001.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5001.py
@@ -17,16 +17,16 @@
import TurnBuff
-def DoBuffEffectLogic(turnFight, batObj, tagObj, curBuff, curEffect, connSkill):
+def DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill):
#结算一次扣除1回合
- remainTime = max(0, curBuff.GetRemainTime() - 1)
- curBuff.SetRemainTime(remainTime)
+ remainTime = max(0, effBuff.GetRemainTime() - 1)
+ effBuff.SetRemainTime(remainTime)
- TurnBuff.DoBuffProcess(turnFight, batObj, curBuff)
+ TurnBuff.DoBuffProcess(turnFight, batObj, effBuff)
if remainTime <= 0:
- TurnBuff.DoBuffDel(turnFight, batObj, curBuff)
+ TurnBuff.DoBuffDel(turnFight, batObj, effBuff)
else:
- TurnBuff.SyncBuffRefresh(turnFight, batObj, curBuff)
+ TurnBuff.SyncBuffRefresh(turnFight, batObj, effBuff)
- return
+ return True
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5002.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5002.py
new file mode 100644
index 0000000..c68d5a4
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5002.py
@@ -0,0 +1,63 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveTrigger.PassiveEff_5002
+#
+# @todo:结算目标某种状态持续buff所有回合效果
+# @author hxp
+# @date 2025-08-28
+# @version 1.0
+#
+# 详细描述: 结算目标某种状态持续buff所有回合效果
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-08-28 10:30"""
+#-------------------------------------------------------------------------------
+
+import TurnBuff
+import GameWorld
+import IpyGameDataPY
+import TurnSkill
+
+def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill):
+ effectID = curEffect.GetEffectID()
+ buffState = curEffect.GetEffectValue(0)
+ needLayers = curEffect.GetEffectValue(1) # 累计达到多少层时才结算
+ noDel = curEffect.GetEffectValue(2) # 是否不扣除剩余回合,默认0-扣除 1-不扣除
+ exSkillID = curEffect.GetEffectValue(3) # 额外释放技能ID,0不释放(可对buff携带者或重设目标)
+ #GameWorld.DebugLog("DoBuffEffectLogic: effectID=%s, buffState=%s, needLayers=%s, noDel=%s, exSkillID=%s" % (effectID, buffState, needLayers, noDel, exSkillID))
+ if not buffState or not needLayers:
+ return
+
+ layerTotal = 0
+ buffList = []
+ buffMgr = tagObj.GetBuffManager()
+ for index in range(buffMgr.GetBuffCount()):
+ buff = buffMgr.GetBuffByIndex(index)
+ skillData = buff.GetSkillData()
+ if skillData.GetCurBuffState() != buffState:
+ continue
+ layerTotal += buff.GetLayer()
+ buffList.append(buff)
+
+ if layerTotal < needLayers:
+ GameWorld.DebugLog("buff状态总层数不足不触发! buffState=%s,layerTotal=%s < %s" % (buffState, layerTotal, needLayers))
+ return
+
+ GameWorld.DebugLog("结算目标某种状态持续buff所有回合效果: layerTotal=%s,buffCnt=%s,noDel=%s" % (layerTotal, len(buffList), noDel))
+ for buff in buffList:
+ GameWorld.DebugLog("buffID=%s,RemainTime=%s" % (buff.GetBuffID(), buff.GetRemainTime()))
+ for _ in range(buff.GetRemainTime()):
+ TurnBuff.DoBuffProcess(turnFight, tagObj, buff)
+ if noDel:
+ continue
+ TurnBuff.DoBuffDel(turnFight, tagObj, buff)
+
+ if exSkillID:
+ effSkillID = effSkill.GetSkillID()
+ passiveSkill = IpyGameDataPY.GetIpyGameData("Skill", exSkillID)
+ if passiveSkill:
+ TurnSkill.OnUsePassiveSkill(turnFight, batObj, tagObj, passiveSkill, connSkill, effSkillID, effectID)
+
+ return True
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5011.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5011.py
index f6a554e..31934e2 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5011.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5011.py
@@ -17,11 +17,8 @@
import TurnSkill
import IpyGameDataPY
-import GameWorld
-import ChConfig
def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill):
- effectID = curEffect.GetEffectID()
skillID = curEffect.GetEffectValue(0) # 技能ID,为0时释放本技能
if not skillID:
passiveSkill = effSkill
@@ -29,30 +26,9 @@
passiveSkill = IpyGameDataPY.GetIpyGameData("Skill", skillID)
if not passiveSkill:
return
- passiveSkillID = passiveSkill.GetSkillID()
- # 继承主技能目标
- if passiveSkill.GetTagAim() == ChConfig.SkillTagAim_MainSkill:
- happenRate = passiveSkill.GetHappenRate()
- GameWorld.DebugLog("被动触发技能,继承主技能目标! effectID=%s,passiveSkillID=%s,happenRate=%s" % (effectID, passiveSkillID, happenRate))
- tagObjList = [tagObj]
- passiveTagObjList = []
- for tagObj in tagObjList:
- tagID = tagObj.GetID()
- if not tagObj.IsAlive():
- GameWorld.DebugLog(" 已被击杀不触发: tagID=%s" % (tagID))
- continue
- if happenRate and happenRate != ChConfig.Def_MaxRateValue and not GameWorld.CanHappen(happenRate, ChConfig.Def_MaxRateValue):
- GameWorld.DebugLog(" 概率不触发: tagID=%s,happenRate=%s" % (tagID, happenRate))
- continue
- passiveTagObjList.append(tagObj)
-
- if passiveTagObjList:
- TurnSkill.OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill)
- else:
- GameWorld.DebugLog("被动触发技能,重新锁定目标! effectID=%s,passiveSkillID=%s" % (effectID, passiveSkillID))
- TurnSkill.OnUseSkill(turnFight, batObj, passiveSkill, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill)
-
- return
+ effectID = curEffect.GetEffectID()
+ effSkillID = effSkill.GetSkillID()
+ return TurnSkill.OnUsePassiveSkill(turnFight, batObj, tagObj, passiveSkill, connSkill, effSkillID, effectID)
-def DoBuffEffectLogic(turnFight, batObj, tagObj, curBuff, curEffect, connSkill):
+def DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill):
return DoSkillEffectLogic(turnFight, batObj, tagObj, None, curEffect, connSkill)
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 68799eb..90f92e9 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
@@ -61,36 +61,65 @@
% (curID, skillID, buffSkill.GetAtkType(), buffValueList, ownerID, relatedSkillID))
skillTypeID = buffSkill.GetSkillTypeID()
- # 先简单做下能加上即可
- buffMgr = batObj.GetBuffManager()
- buffList = buffMgr.FindBuffBySkillTypeID(skillTypeID)
- if buffList:
- # buff堆叠逻辑,待处理,先直接通知
- for buff in buffList:
- if not buff:
- continue
- GameWorld.DebugLog(" 已经存在该buff: buffID=%s,skillTypeID=%s" % (buff.GetBuffID(), skillTypeID))
- if afterLogic and bySkill:
- bySkill.AddAfterLogic(ChConfig.AfterLogic_AddBuff, [batObj, buff, buffOwner])
- else:
- SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID)
-
- return True
+ buffRepeat = buffSkill.GetBuffRepeat()
+ #buff重复获得时的叠加规则
+ #以下规则默认针对的是相同施法者,即相同来源的处理
+ #如果有针对不同施法者的规则会说明
+ #0 覆盖:重置剩余回合,效果覆盖
+ #1 延长回合
+ #2
+ #3 叠加层级
+ #4 独立:回合、效果独立计算
+ #5 唯一,强制覆盖不同来源同状态buff,如嘲讽状态
- __AddNewBuff(turnFight, batObj, buffMgr, buffSkill, buffValueList, buffOwner, bySkill, afterLogic)
+ buffMgr = batObj.GetBuffManager()
+
+ if buffRepeat == 4: # 4 独立:回合、效果独立计算
+ pass # 不处理,直接跳过添加新buff
+ elif buffRepeat == 5: # 5 唯一,强制覆盖不同来源同状态buff,如嘲讽状态
+ buffState = buffSkill.GetCurBuffState()
+ for index in range(buffMgr.GetBuffCount())[::-1]:
+ buff = buffMgr.GetBuffByIndex(index)
+ if buffState and buff.GetCurBuffState() != buffState:
+ continue
+ # 删除相同状态的buff
+ DoBuffDel(turnFight, batObj, buff, bySkill, afterLogic, buffOwner)
+ else:
+ buffList = buffMgr.FindBuffBySkillTypeID(skillTypeID)
+ if buffList:
+ for buff in buffList:
+ if not buff:
+ continue
+ if buff.GetOwnerID() != ownerID:
+ continue
+ GameWorld.DebugLog(" 已经存在该buff,默认覆盖: buffID=%s,skillTypeID=%s,ownerID=%s" % (buff.GetBuffID(), skillTypeID, ownerID))
+ # 重置回合、CD、值等
+ buff.SetCalcTime(turnFight.getTimeline())
+ buff.SetRemainTime(buffSkill.GetLastTime())
+ buff.SetLayer(buffSkill.GetLayerCnt())
+ buff.SetBuffValueList(buffValueList)
+ if afterLogic and bySkill:
+ bySkill.AddAfterLogic(ChConfig.AfterLogic_AddBuff, [batObj, buff, buffOwner])
+ else:
+ SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID, isNewAdd=True)
+
+ return True
+
+ __addNewBuff(turnFight, batObj, buffMgr, buffSkill, buffValueList, buffOwner, bySkill, afterLogic)
return True
-def __AddNewBuff(turnFight, batObj, buffMgr, buffSkill, buffValueList, buffOwner, bySkill=None, afterLogic=False):
- skillID = buffSkill.GetSkillID()
- relatedSkillID = bySkill.GetSkillID() if bySkill else 0
+def __addNewBuff(turnFight, batObj, buffMgr, buffSkill, buffValueList, buffOwner, bySkill=None, afterLogic=False):
curID = batObj.GetID()
- ownerID = buffOwner.GetID()
+ skillID = buffSkill.GetSkillID()
buff = buffMgr.AddBuff(skillID)
if not buff:
GameWorld.DebugLog(" 添加buff失败! skillID=%s" % skillID, curID)
- return False
+ return
+ relatedSkillID = bySkill.GetSkillID() if bySkill else 0
+ ownerID = buffOwner.GetID()
buffID = buff.GetBuffID()
- GameWorld.DebugLog(" AddBuffOK. buffID=%s,skillID=%s,ownerID=%s,relatedSkillID=%s,timeline=%s"
+
+ GameWorld.DebugLog(" __addNewBuff. buffID=%s,skillID=%s,ownerID=%s,relatedSkillID=%s,timeline=%s"
% (buffID, skillID, ownerID, relatedSkillID, turnFight.getTimeline()), curID)
buff.SetOwnerID(ownerID)
buff.SetCalcTime(turnFight.getTimeline())
@@ -104,7 +133,7 @@
if afterLogic and bySkill:
bySkill.AddAfterLogic(ChConfig.AfterLogic_AddBuff, [batObj, buff, buffOwner])
else:
- SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID)
+ SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID, isNewAdd=True)
DoBuffAddOver(turnFight, batObj, buffSkill, buff, buffOwner)
return
@@ -287,7 +316,7 @@
GameWorld.DebugLog(" 最终属性 ID:%s,atk=%s,def=%s,hp=%s/%s" % (objID, batObj.GetAtk(), batObj.GetDef(), aftHP, aftMaxHP))
return
-def SyncBuffRefresh(turnFight, curBatObj, curBuff, relatedSkillID=0):
+def SyncBuffRefresh(turnFight, curBatObj, curBuff, relatedSkillID=0, isNewAdd=False):
clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCBuffRefresh)
clientPack.ObjID = curBatObj.GetID()
clientPack.BuffID = curBuff.GetBuffID()
@@ -299,6 +328,7 @@
clientPack.Value1 = curBuff.GetValue1()
clientPack.Value2 = curBuff.GetValue2()
clientPack.Value3 = curBuff.GetValue3()
+ clientPack.IsAdd = 1 if isNewAdd else 0
turnFight.addBatPack(clientPack)
return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
index 6dd05ed..03f9397 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
@@ -82,20 +82,20 @@
def __doTriggerPassiveEffectByBuff(turnFight, batObj, tagObj, triggerWay, buffID, effIDList, connSkill=None):
buffMgr = batObj.GetBuffManager()
- curBuff = buffMgr.GetBuff(buffID)
- if not curBuff:
+ effBuff = buffMgr.GetBuff(buffID)
+ if not effBuff:
return
- skillData = curBuff.GetSkillData()
+ skillData = effBuff.GetSkillData()
for effID in effIDList:
curEffect = skillData.GetEffectByID(effID, triggerWay)
if not curEffect:
continue
- DoBuffEffectLogic(turnFight, batObj, tagObj, curBuff, curEffect, connSkill)
+ DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill)
return
-def DoBuffEffectLogic(turnFight, batObj, tagObj, curBuff, curEffect, connSkill):
+def DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill):
effID = curEffect.GetEffectID()
if not effID:
return
@@ -103,7 +103,7 @@
callFunc = GameWorld.GetExecFunc(PassiveTrigger, "%s.%s" % (pyName, "DoBuffEffectLogic"))
if not callFunc:
return
- callFunc(turnFight, batObj, tagObj, curBuff, curEffect, connSkill)
+ callFunc(turnFight, batObj, tagObj, effBuff, curEffect, connSkill)
return
def GetTriggerPassiveValue(batObj, triggerType, tagObj=None, useSkill=None):
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 5322745..a5e2276 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -559,7 +559,7 @@
__doCostZhanchui(turnFight, curBatObj, useSkill)
__doSkillUserAnger(turnFight, curBatObj, useSkill)
- DoBeAttackResult(turnFight, curBatObj, useSkill)
+ DoBeAttackResult(turnFight, curBatObj, useSkill, True)
return
def DoCombo(turnFight, curBatObj, useSkill):
@@ -656,9 +656,10 @@
% (atkObj.GetID(), happenRate, aComboRate, dComboRateDef, comboNum))
return False
-def DoBeAttackResult(turnFight, curObj, useSkill):
+def DoBeAttackResult(turnFight, curObj, useSkill, isUseSkill=False):
'''被攻击结果
@param curObj: 施法方或buff归属方
+ @param isUseSkill: 是否是直接使用技能的攻击结果
'''
curID = curObj.GetID()
@@ -681,11 +682,13 @@
shieldBrokenList.append([buffObjID, tagObjID, buffSkillTypeID])
elif logicType == ChConfig.AfterLogic_AddBuff:
- batObj, buff, _ = logicData
- TurnBuff.SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID)
+ batObj = logicData[0]
+ buff = logicData[1]
+ TurnBuff.SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID, isNewAdd=True)
elif logicType == ChConfig.AfterLogic_SyncBuff:
- buffObj, buff, _, _ = logicData
+ buffObj = logicData[0]
+ buff = logicData[1]
TurnBuff.SyncBuffRefresh(turnFight, buffObj, buff, relatedSkillID)
# 统计击杀
@@ -716,8 +719,9 @@
FBLogic.OnPlayerLineupAttackResult(curPlayer, curObj, killObjIDList, useSkill, turnFight.mapID, turnFight.funcLineID)
# 优先触发本技能额外效果,注:仅该技能释放后该技能的额外效果视为主技能的效果,优先级最高
- __DoCurSkillEff(turnFight, curObj, useSkill, missObjIDList)
-
+ if isUseSkill:
+ __DoCurSkillEff(turnFight, curObj, useSkill, missObjIDList)
+
# ========== 以下触发被动 ==========
# 破盾时
@@ -733,7 +737,7 @@
continue
# 直接攻击
- if not SkillCommon.IsBuff(useSkill) and useSkill.GetSkillType() in [ChConfig.Def_SkillType_Atk]:
+ if isUseSkill and not SkillCommon.IsBuff(useSkill) and useSkill.GetSkillType() in [ChConfig.Def_SkillType_Atk]:
TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AttackOverDirect, tagObj, connSkill=useSkill)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAttackedDirect, curObj, connSkill=useSkill)
@@ -818,6 +822,7 @@
continue
effID = curEffect.GetEffectID()
+ GameWorld.DebugLog("执行额外技能效果: %s, missObjIDList=%s" % (effID, missObjIDList))
if effID == 5010:
# 额外技能效果
__doUseEnhanceSkill(turnFight, curObj, useSkill, curEffect, missObjIDList)
@@ -825,6 +830,7 @@
for tagObj in useSkill.GetTagObjList():
tagID = tagObj.GetID()
+ GameWorld.DebugLog(" tagID=%s" % (tagID))
if tagID in missObjIDList:
# 闪避了不触发
continue
@@ -901,6 +907,39 @@
OnUseSkill(turnFight, curBatObj, enhanceSkillData, batType=ChConfig.TurnBattleType_Enhance, bySkill=useSkill)
return
+def OnUsePassiveSkill(turnFight, batObj, tagObj, passiveSkill, connSkill=None, effSkillID=0, effectID=0):
+ '''被动触发使用技能
+ @param passiveSkill: 释放的被动技能
+ @param connSkill: 由什么技能引起的
+ @param effSkillID: 被动效果所属的技能ID
+ @param effectID: 被动效果ID
+ 注:可能由A引起触发B技能的效果释放技能C
+ '''
+ if not passiveSkill:
+ return
+ isOK = False
+ passiveSkillID = passiveSkill.GetSkillID()
+ # 继承主技能目标
+ if passiveSkill.GetTagAim() == ChConfig.SkillTagAim_MainSkill:
+ happenRate = passiveSkill.GetHappenRate()
+ GameWorld.DebugLog("被动触发技能,继承主技能目标! effSkillID=%s,effectID=%s,passiveSkillID=%s,happenRate=%s" % (effSkillID, effectID, passiveSkillID, happenRate))
+ if not tagObj:
+ return
+ tagID = tagObj.GetID()
+ if not tagObj.IsAlive():
+ GameWorld.DebugLog(" 已被击杀不触发: tagID=%s" % (tagID))
+ return
+ if happenRate and happenRate != ChConfig.Def_MaxRateValue and not GameWorld.CanHappen(happenRate, ChConfig.Def_MaxRateValue):
+ GameWorld.DebugLog(" 概率不触发: tagID=%s,happenRate=%s" % (tagID, happenRate))
+ return
+ passiveTagObjList = [tagObj]
+ isOK = OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill)
+ else:
+ GameWorld.DebugLog("被动触发技能,重新锁定目标! effSkillID=%s,effectID=%s,passiveSkillID=%s" % (effSkillID, effectID, passiveSkillID))
+ isOK = OnUseSkill(turnFight, batObj, passiveSkill, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill)
+
+ return isOK
+
def __doSkillHurtHP(turnFight, attacker, defObj, curSkill):
## 执行技能伤血,只计算伤血,其他逻辑等技能同步后再处理
# @return: None - 没有执行成功,即忽略该目标
--
Gitblit v1.8.0