From abe94831e0fe835f9cc83611695a35f46ebcae7b Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 26 十一月 2025 20:34:07 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(蔡文姬所有技能;增加复活释放方式支持;增加触发方式40-在场时,41-复活时;增加效果5501、6021、7011;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5023.py | 4 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6021.py | 31 +++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py | 6 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py | 9 ++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5501.py | 33 ++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py | 9 +
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/GM/Commands/TurnFight.py | 5
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 82 +++++++++++++++-----
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 8 +
9 files changed, 158 insertions(+), 29 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 5e7ae6c..89f5f9d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -835,6 +835,7 @@
self._skillTempAttrDict = {} # 某次技能释放中临时的属性增减 {attrID:+-value, ...} value可能是负值
self._kvDict = {} # 自定义kv字典
self._bigTurnAtkbackCnt = 0 # 大回合累计反击次数
+ self._incrementValue = 0 # 自增值,每场战斗重置,用于确保唯一的场景,如 Skill tag 标签
self._skillUseCntDict = {} # 技能累计使用次数 {skillID:useCnt, ...}
self._skillTurnUseCntDict = {} # 技能单回合累计使用次数 {skillID:useCnt, ...}
self._skillMgr = ObjPool.GetPoolMgr().acquire(SkillManager, self)
@@ -1018,6 +1019,9 @@
def SetDead(self):
self._isAlive = False
self._hp = 0
+ def SetRevive(self, hp):
+ self._isAlive = True
+ self._hp = hp
def GetMaxHP(self): return int(self._batAttrDict.get(ChConfig.AttrID_MaxHP, 0))
def SetMaxHP(self, maxHP, isNotify=False):
maxHP = int(maxHP)
@@ -1070,6 +1074,7 @@
def ResetSkillUseCnt(self):
self._skillUseCntDict = {}
self._skillTurnUseCntDict = {}
+ self._incrementValue = 0
def AddSkillUseCnt(self, skillID):
self._skillUseCntDict[skillID] = self._skillUseCntDict.get(skillID, 0) + 1
self._skillTurnUseCntDict[skillID] = self._skillTurnUseCntDict.get(skillID, 0) + 1
@@ -1082,6 +1087,10 @@
self._bigTurnAtkbackCnt = 0
self._skillTurnUseCntDict = {}
+ def GetIncrementValue(self):
+ self._incrementValue += 1
+ return self._incrementValue
+
def GetLastHurtValue(self): return self._lastHurtValue
def SetLastHurtValue(self, lastHurtValue): self._lastHurtValue = lastHurtValue
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
index a6ac5ed..fb773af 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/TurnAttack.py
@@ -1551,6 +1551,7 @@
batObj = batObjMgr.getBatObj(objID)
turnFight.ResetOneActionUseSkillCnt()
TurnPassive.OnTriggerPassiveEffect(turnFight, batObj, ChConfig.TriggerWay_FightStart)
+ TurnPassive.OnTriggerPassiveEffect(turnFight, batObj, ChConfig.TriggerWay_InBattlefield)
turnFight.enterLogic = True
return True
@@ -1915,8 +1916,12 @@
turnFight.costTime = time.time() - turnFight.startTime
winFaction = turnFight.winFaction
turnFight.isWin = (winFaction == ChConfig.Def_FactionA)
+ mapID = turnFight.mapID
+ funcLineID = turnFight.funcLineID
GameWorld.DebugLog("--- 战斗结束处理 ---, winFaction=%s, costTime=%ss, %s" % (winFaction, turnFight.costTime, guid))
-
+ if mapID != ChConfig.Def_FBMapID_Main:
+ GameWorld.Log("战斗耗时: %ss, mapID=%s,funcLineID=%s" % (turnFight.costTime, mapID, funcLineID))
+
# 统计明细
batObjMgr = BattleObj.GetBatObjMgr()
statInfo = {}
@@ -1951,8 +1956,6 @@
overMsg = {"winFaction":winFaction, "statInfo":statInfo}
curPlayer = turnFight.curPlayer
- mapID = turnFight.mapID
- funcLineID = turnFight.funcLineID
FBLogic.OnTurnFightOver(curPlayer, turnFight, mapID, funcLineID, overMsg)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 368e745..80618ed 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -918,7 +918,7 @@
HurtType_Fail, # 失败 - 如概率没有触发 0
HurtType_Normal, # 伤害 1
HurtTYpe_Cure, # 治疗 2
-HurtType_3,
+HurtType_Revive, # 复活 3
HurtType_Immune, # 免疫 4
HurtType_Parry, # 格挡 5
HurtType_IgnoreDef, # 无视防御/真实伤害 6
@@ -3997,7 +3997,9 @@
TriggerWay_BeParry, # 被格挡时 37
TriggerWay_BeMiss, # 被闪避时 38
TriggerWay_BeAtkBack, # 被反击时 39
-) = range(1, 1 + 39)
+TriggerWay_InBattlefield, # 在场时 40
+TriggerWay_Revive, # 复活时 41
+) = range(1, 1 + 41)
# 不加载的被动触发方式,一般用于本技能固定触发逻辑用的
TriggerWayNoLoadList = [TriggerWay_CurSkillEff, TriggerWay_CurSkillEffLst]
@@ -4029,6 +4031,7 @@
PassiveEff_AddAngerSkillPerByXP = 6018 # 增加怒气技能伤害(按消耗怒气值)
PassiveEff_AddBatDamPerByTagLostHP = 6019 # 战斗增伤(按目标已损失生命)
PassiveEff_AddSkillPerByBuffState = 6020 # 增加技能系数(验证由buff状态触发的)
+PassiveEff_AddBuffLayer = 6021 # 添加buff层级时额外增加x层
# 被动效果ID有触发值时就返回的
PassiveEffHappenValueList = [PassiveEff_ChangeHurtType, PassiveEff_ImmuneControlBuff, PassiveEff_MustSuperHit, PassiveEff_SkillInvalid]
@@ -4048,6 +4051,7 @@
SkillEff_UseSkillHarmSelf = 7008 # 释放技能时自残(先扣血)
SkillEff_SkillUseCntLimit = 7009 # 限制技能最多触发次数
SkillEff_UseSkillStealBuff = 7010 # 释放技能前偷取buff
+SkillEff_ReviveNoUse = 7011 # 没有复活目标时释放其他技能
(
TriggerType_BeSuperHit, # 被暴击触发技能 1
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 9458607..e23483b 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
@@ -244,8 +244,9 @@
GameWorld.DebugAnswer(curPlayer, "Buff: %s" % buffMgr.GetBuffCount())
for index in range(buffMgr.GetBuffCount()):
buff = buffMgr.GetBuffByIndex(index)
- GameWorld.DebugAnswer(curPlayer, "ID:%s,SkillID:%s,回合:%s,层:%s,V:%s,来源:%s,光环:%s"
- % (buff.GetBuffID(), buff.GetSkillID(), buff.GetRemainTime(), buff.GetLayer(),
+ buffName = GameWorld.CodeToGbk(buff.GetSkillData().GetSkillName())
+ GameWorld.DebugAnswer(curPlayer, "ID:%s,%s(%s),回合:%s,层:%s,V:%s,来源:%s,光环:%s"
+ % (buff.GetBuffID(), buffName, buff.GetSkillID(), buff.GetRemainTime(), buff.GetLayer(),
[buff.GetValue1(), buff.GetValue2(), buff.GetValue3()], buff.GetOwnerID(), buff.GetHaloObjIDList()
))
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5023.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5023.py
index aef81a4..9168eeb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5023.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5023.py
@@ -43,3 +43,7 @@
TurnSkill.OnUsePassiveSkill(turnFight, batObj, tagObj, exSkillID, connBuff=connBuff)
return True
+
+def DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill, connBuff, **kwargs):
+ effSkill = effBuff.GetSkillData().GetIpyData()
+ return DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5501.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5501.py
new file mode 100644
index 0000000..61d768a
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5501.py
@@ -0,0 +1,33 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveTrigger.PassiveEff_5501
+#
+# @todo:触发释放技能(指定buff层级)
+# @author hxp
+# @date 2025-11-26
+# @version 1.0
+#
+# 详细描述: 触发释放技能(指定buff层级)
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-11-26 20:30"""
+#-------------------------------------------------------------------------------
+
+import TurnSkill
+import IpyGameDataPY
+
+def DoSkillEffectLogic(turnFight, batObj, tagObj, effSkill, curEffect, connSkill, connBuff, **kwargs):
+ skillID = curEffect.GetEffectValue(0) # 技能ID,为0时释放本技能
+ setLayerCnt = curEffect.GetEffectValue(1) # 指定buff层级
+ if not skillID:
+ passiveSkill = effSkill
+ else:
+ passiveSkill = IpyGameDataPY.GetIpyGameData("Skill", skillID)
+ if not passiveSkill:
+ return
+ effectID = curEffect.GetEffectID()
+ effSkillID = effSkill.GetSkillID()
+ return TurnSkill.OnUsePassiveSkill(turnFight, batObj, tagObj, passiveSkill, connSkill, effSkillID, effectID, connBuff, setLayerCnt=setLayerCnt)
+
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6021.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6021.py
new file mode 100644
index 0000000..f9f7a3a
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6021.py
@@ -0,0 +1,31 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveTrigger.PassiveEff_6021
+#
+# @todo:添加buff层级时额外增加x层
+# @author hxp
+# @date 2025-11-26
+# @version 1.0
+#
+# 详细描述: 添加buff层级时额外增加x层
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-11-26 20:30"""
+#-------------------------------------------------------------------------------
+
+import GameWorld
+
+def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
+ onlyFirstUse = curEffect.GetEffectValue(1) # 是否仅首次释放技能有效
+ if onlyFirstUse:
+ skillID = connSkill.GetSkillID() if connSkill else skillkwargs.get("connSkillID", 0)
+ if not skillID:
+ #GameWorld.DebugLog("没有技能ID! %s" % skillkwargs)
+ return
+ useCnt = attacker.GetSkillUseCnt(skillID)
+ if useCnt > 0:
+ GameWorld.DebugLog("技能非首次使用不增加额外层级! skillID=%s,useCnt=%s" % (skillID, useCnt))
+ return
+ return curEffect.GetEffectValue(0)
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 38074fd..ce8d2c3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
@@ -78,7 +78,7 @@
poolMgr.release(useSkill)
return addBuff
-def OnAddBuff(turnFight, batObj, buffSkill, buffOwner=None, bySkill=None, afterLogic=False, isSync=True, setLayerCnt=0):
+def OnAddBuff(turnFight, batObj, buffSkill, buffOwner=None, bySkill=None, afterLogic=False, isSync=True, **kwargs):
skillID = buffSkill.GetSkillID()
bySkill = buffSkill.GetBySkill() if not bySkill else bySkill
relatedSkillID = bySkill.GetSkillID() if bySkill else 0
@@ -114,6 +114,7 @@
skillTypeID = buffSkill.GetSkillTypeID()
buffRepeat = buffSkill.GetBuffRepeat()
+ setLayerCnt = kwargs.get("setLayerCnt", 0)
if setLayerCnt > 0:
addLayerCnt = setLayerCnt
GameWorld.DebugLog("外部直接指定添加的buff层级: setLayerCnt=%s" % setLayerCnt)
@@ -124,6 +125,7 @@
# 可指定来源技能技能才生效,不指定的话默认生效
if not addLayerEff.GetTriggerSrc() or addLayerEff.GetTriggerSrc() == relatedSkillID:
addLayerCnt = GameWorld.GetResultByWeightList(addLayerEff.GetEffectValues(), addLayerCnt)
+ addLayerCnt += TurnPassive.GetTriggerEffectValue(turnFight, buffOwner, batObj, ChConfig.PassiveEff_AddBuffLayer, buffSkill)
maxLayerCnt = buffSkill.GetLayerMax()
if maxLayerCnt:
maxLayerCnt += TurnPassive.GetTriggerEffectValue(turnFight, buffOwner, batObj, ChConfig.PassiveEff_AddBuffLayerMax, buffSkill)
@@ -455,7 +457,7 @@
effID = effect.GetEffectID()
if effID not in ChConfig.AttrIDList:
continue
- if effect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf]:
+ if effect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill]:
# 技能时仅技能有效
continue
attrID = effID
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 5323c9b..824d3d5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -45,7 +45,7 @@
## 是否无视防御
return useSkill.GetHurtType() / 10 == 1 # 2为真伤,待扩展
-def OnUseSkill(turnFight, curBatObj, useSkill, tagObjList=None, batType=ChConfig.TurnBattleType_Normal, bySkill=None, byBuff=None, comboLimit=False, atkBackTag=None):
+def OnUseSkill(turnFight, curBatObj, useSkill, tagObjList=None, batType=ChConfig.TurnBattleType_Normal, bySkill=None, byBuff=None, comboLimit=False, atkBackTag=None, **kwargs):
'''使用技能通用入口
@param useSkill: 使用的技能,注意并不一定是身上的技能,可能只是 SkillData 表数据
@param bySkill: 由哪个技能额外触发的,比如附加触发的技能或被动技能均可能由某个技能触发
@@ -92,6 +92,16 @@
if not tagObjList:
# 可扩展其他目标选择,如复活技能没有死亡单位时则使用另外的效果
GameWorld.DebugLog("找不到技能目标! skillID=%s,mapID=%s,funcLineID=%s" % (skillID, turnFight.mapID, turnFight.funcLineID), turnFight.playerID)
+ if useSkill.GetSkillType() == ChConfig.Def_SkillType_Revive:
+ otherEff = useSkill.GetEffectByID(ChConfig.SkillEff_ReviveNoUse)
+ if otherEff:
+ otherSkillID = otherEff.GetEffectValue(0)
+ GameWorld.DebugLog("没有可复活的目标,释放其他技能! otherSkillID=%s" % otherSkillID)
+ otherSkill = curBatObj.GetSkillManager().FindSkillByID(otherSkillID)
+ if not otherSkill:
+ otherSkill = IpyGameDataPY.GetIpyGameData("Skill", otherSkillID)
+ if otherSkill:
+ OnUseSkill(turnFight, curBatObj, otherSkill, None, batType, bySkill, byBuff, comboLimit, atkBackTag, **kwargs)
return
oneActionUseCnt = turnFight.GetOneActionUseSkillCnt(objID)
@@ -153,7 +163,7 @@
#这个技能是Buff
if SkillCommon.IsBuff(useSkill):
- __doAddBuff(turnFight, curBatObj, useSkill)
+ __doAddBuff(turnFight, curBatObj, useSkill, **kwargs)
else:
__doUseSkill(turnFight, curBatObj, useSkill)
@@ -608,7 +618,7 @@
# return False
return True
-def __doAddBuff(turnFight, curBatObj, useSkill):
+def __doAddBuff(turnFight, curBatObj, useSkill, **kwargs):
#执行添加buff
#光环技能,需先添加施法者
@@ -616,14 +626,14 @@
curID = curBatObj.GetID()
skillID = useSkill.GetSkillID()
GameWorld.DebugLog("光环技能先给施法者添加光源buff! skillID=%s,ownerID=%s" % (skillID, curID))
- if TurnBuff.OnAddBuff(turnFight, curBatObj, useSkill, buffOwner=curBatObj):
+ if TurnBuff.OnAddBuff(turnFight, curBatObj, useSkill, buffOwner=curBatObj, **kwargs):
for tagBatObj in useSkill.GetTagObjList():
if tagBatObj.GetID() == curBatObj.GetID():
continue
- TurnBuff.OnAddBuff(turnFight, tagBatObj, useSkill, buffOwner=curBatObj)
+ TurnBuff.OnAddBuff(turnFight, tagBatObj, useSkill, buffOwner=curBatObj, **kwargs)
else:
for tagBatObj in useSkill.GetTagObjList():
- TurnBuff.OnAddBuff(turnFight, tagBatObj, useSkill, buffOwner=curBatObj)
+ TurnBuff.OnAddBuff(turnFight, tagBatObj, useSkill, buffOwner=curBatObj, **kwargs)
return
@@ -643,7 +653,7 @@
SkillModule_2(turnFight, curBatObj, useSkill)
# 复活
elif atkType == 3:
- pass
+ SkillModule_3(turnFight, curBatObj, useSkill)
# 多次攻击(锁目标多次伤害,非前端的多段飘血)
elif atkType == 4:
pass
@@ -849,6 +859,27 @@
return
+def SkillModule_3(turnFight, curBatObj, useSkill):
+ ## 复活
+
+ skillPer = useSkill.GetSkillPer()
+ for tagBatObj in useSkill.GetTagObjList():
+ skillPer += GetAddSkillPer(turnFight, curBatObj, tagBatObj, useSkill) # 复活后的血量百分比
+
+ dID = tagBatObj.GetID()
+ dMapHP = tagBatObj.GetMaxHP()
+ cureHP = int(dMapHP * skillPer / 10000.0)
+ tagBatObj.SetRevive(cureHP)
+
+ hurtObj = useSkill.AddHurtObj(dID)
+ hurtObj.AddHurtType(ChConfig.HurtType_Revive)
+ hurtObj.SetHurtHP(cureHP)
+ hurtObj.SetLostHP(cureHP)
+ hurtObj.SetCurHP(tagBatObj.GetHP())
+ GameWorld.DebugLog(" 复活: dID=%s,cureHP=%s,skillPer=%s,%s/%s" % (dID, cureHP, skillPer, tagBatObj.GetHP(), dMapHP))
+
+ return
+
def DoSkillCureHP(turnFight, atkObj, curSkill, calcCureResults, lostType="", caorenProtectObj=None, isManyTimes=False):
'''结算技能治疗
@param calcCureResults: 技能公式计算后的伤害结果 [[tagBatObj, cureHP, poisonCureOwner], ...]
@@ -921,7 +952,7 @@
defID = defObj.GetID()
# 结算需要同步标签
- useTag = "Skill_%s_%s_Cot" % (atkID, skillID)
+ useTag = "Skill_%s_%s_Cot_%s" % (atkID, skillID, atkObj.GetIncrementValue())
Sync_TurnFightTag(turnFight, useTag, 0)
dHP = defObj.GetHP()
@@ -1252,6 +1283,7 @@
missObjIDList, immuneObjIDList = [], [] # 闪避、免疫对象ID列表
stunObjIDList, superHitObjIDList, parryObjIDList = [], [], []
beHurtObjIDList = [] # 受伤的对象ID列表
+ reviveObjList = [] # 复活的对象列表
for hurtObj in useSkill.GetHurtObjListAll():
hurtObjID = hurtObj.GetObjID()
tagObj = batObjMgr.getBatObj(hurtObjID)
@@ -1272,6 +1304,10 @@
missObjIDList.append(hurtObjID)
DoHeroSpecialty(turnFight, tagObj, ChConfig.HeroSpecialty_Miss, relatedSkillID)
+ if hurtObj.HaveHurtType(ChConfig.HurtType_Revive):
+ if tagObj not in reviveObjList:
+ reviveObjList.append(tagObj)
+
if hurtObj.HaveHurtType(ChConfig.HurtType_Immune):
if hurtObjID not in immuneObjIDList:
immuneObjIDList.append(hurtObjID)
@@ -1345,12 +1381,23 @@
# 己方单位死亡时
else:
TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendDie, dieObj, connSkill=useSkill)
-
+
+ # 复活时
+ for tagObj in reviveObjList:
+ TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Revive, curObj, connSkill=useSkill)
+ TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_InBattlefield, curObj, connSkill=useSkill)
+
triggerOne = False
batType = useSkill.GetBatType()
isAttackDirect = (isUseSkill and SkillCommon.isAttackDirectSkill(useSkill)) # 是否直接攻击
for tagObj in tagObjListAll:
tagID = tagObj.GetID()
+
+ # 闪避
+ if tagID in missObjIDList:
+ TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeMiss, tagObj, connSkill=useSkill)
+ TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Miss, curObj, connSkill=useSkill)
+
if tagID in effIgnoreObjIDList:
continue
@@ -1397,14 +1444,9 @@
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeSuperHit, curObj, connSkill=useSkill)
# 格挡
- if tagID in missObjIDList:
+ if tagID in parryObjIDList:
TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeParry, tagObj, connSkill=useSkill)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Parry, curObj, connSkill=useSkill)
-
- # 闪避
- if tagID in missObjIDList:
- TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeMiss, tagObj, connSkill=useSkill)
- TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Miss, curObj, connSkill=useSkill)
# 连击
if batType == ChConfig.TurnBattleType_Combo:
@@ -1643,7 +1685,7 @@
OnUseSkill(turnFight, curBatObj, enhanceSkillData, batType=ChConfig.TurnBattleType_Enhance, bySkill=useSkill)
return
-def OnUsePassiveSkill(turnFight, batObj, tagObj, passiveSkill, connSkill=None, effSkillID=0, effectID=0, connBuff=None):
+def OnUsePassiveSkill(turnFight, batObj, tagObj, passiveSkill, connSkill=None, effSkillID=0, effectID=0, connBuff=None, **kwargs):
'''被动触发使用技能
@param passiveSkill: 释放的被动技能 或 技能ID
@param connSkill: 由什么技能引起的
@@ -1684,17 +1726,17 @@
if not tagObj:
return
tagID = tagObj.GetID()
- if not tagObj.IsAlive():
+ if not tagObj.IsAlive() and passiveSkill.GetSkillType() != ChConfig.Def_SkillType_Revive:
GameWorld.DebugLog(" 已被击杀不触发: tagID=%s" % (tagID))
return
if happenRate 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, byBuff=connBuff)
+ isOK = OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill, byBuff=connBuff, **kwargs)
else:
GameWorld.DebugLog("被动触发技能,重新锁定目标! effSkillID=%s,effectID=%s,passiveSkillID=%s,bySkillID=%s" % (effSkillID, effectID, passiveSkillID, bySkillID))
- isOK = OnUseSkill(turnFight, batObj, passiveSkill, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill, byBuff=connBuff)
+ isOK = OnUseSkill(turnFight, batObj, passiveSkill, batType=ChConfig.TurnBattleType_Passive, bySkill=connSkill, byBuff=connBuff, **kwargs)
return isOK
@@ -2577,7 +2619,7 @@
defID = defObj.GetID()
# 结算需要同步标签
- useTag = "Skill_%s_%s_Dot" % (atkID, skillID)
+ useTag = "Skill_%s_%s_Dot_%s" % (atkID, skillID, atkObj.GetIncrementValue())
Sync_TurnFightTag(turnFight, useTag, 0)
dHP = defObj.GetHP()
--
Gitblit v1.8.0