From 95e5cc37cc097f506004f31cdfff1118953296f6 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 16 十二月 2025 15:58:24 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(董白全部技能; 增加效果5024 5504;buff持续规则字段支持配置每大回合-1层;动态属性ID变化增加计算方式11-根据自己已损失血量百分比;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 73 ++++++++++++++++++++++++++++++------
1 files changed, 61 insertions(+), 12 deletions(-)
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 28703f6..c77146a 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -59,13 +59,15 @@
if not skillID:
return
+ triggerWay = kwargs["triggerWay"] if "triggerWay" in kwargs else 0
if not curBatObj.IsAlive():
if useSkill.GetSkillType() == ChConfig.Def_SkillType_Revive and useSkill.GetTagAim() == ChConfig.SkillTagAim_Self:
GameWorld.DebugLogEx("死亡时使用复活自己的技能! skillID=%s", skillID)
else:
- triggerWay = kwargs.get("triggerWay", 0)
if triggerWay in ChConfig.DeadCanTriggerWayList:
GameWorld.DebugLogEx("死亡可触发的方式触发技能可释放! skillID=%s,triggerWay=%s", skillID, triggerWay)
+ elif batType == ChConfig.TurnBattleType_Enhance:
+ GameWorld.DebugLogEx("死亡状态额外技能不限制,主技能能放的话也就能放! skillID=%s", skillID)
else:
GameWorld.DebugLogEx("死亡状态下无法释放该技能! skillID=%s", skillID)
return
@@ -148,6 +150,7 @@
useSkill.SetBatType(batType)
useSkill.SetBySkill(bySkill)
useSkill.SetByBuff(byBuff)
+ useSkill.SetByTriggerWay(triggerWay)
isTurnNormalSkill = SkillCommon.isTurnNormalSkill(useSkill)
if isTurnNormalSkill:
@@ -845,8 +848,13 @@
calcCureResults = []
relativeObj = GetRelativeObj(turnFight, curBatObj)
+ multiValue = 1
+ addCureMulti = TurnPassive.GetTriggerEffectValue(turnFight, curBatObj, None, ChConfig.PassiveEff_AddCureMulti, useSkill)
+ if addCureMulti:
+ multiValue += addCureMulti / 100.0
+
for tagBatObj in useSkill.GetTagObjList():
- cureHP = CalcCureHP(turnFight, curBatObj, tagBatObj, useSkill, relativeObj=relativeObj)
+ cureHP = CalcCureHP(turnFight, curBatObj, tagBatObj, useSkill, relativeObj=relativeObj, multiValue=multiValue)
poisonCureOwner = GetPoisonCureOwner(tagBatObj)
calcCureResults.append([tagBatObj, cureHP, poisonCureOwner])
@@ -1313,9 +1321,7 @@
TurnAttack.SetObjKilled(turnFight, tagObj, curObj, useSkill)
useSkill.SetKillObjList(killObjList)
# 判断自己,因为反弹、平摊伤害的原因,有可能自己干死自己
- selfAlive = curObj.IsAlive()
- if selfAlive and curObj.GetHP() <= 0:
- selfAlive = False
+ if curObj.IsAlive() and curObj.GetHP() <= 0:
dieObjList.append(curObj)
TurnAttack.SetObjKilled(turnFight, curObj)
@@ -1390,7 +1396,7 @@
effIgnoreObjIDList = missObjIDList + immuneObjIDList
useSkill.SetEffIgnoreObjIDList(effIgnoreObjIDList)
# 优先触发本技能额外效果,注:仅该技能释放后该技能的额外效果视为主技能的效果,优先级最高
- if selfAlive:
+ if curObj not in dieObjList:
__DoCurSkillEff(turnFight, curObj, useSkill, effIgnoreObjIDList, isUseSkill)
# ========== 以下触发被动 ==========
@@ -1412,6 +1418,7 @@
if dieObjList:
for dieObj in dieObjList:
TurnPassive.OnTriggerPassiveEffect(turnFight, dieObj, ChConfig.TriggerWay_WhenDie, curObj, connSkill=useSkill)
+ __dongbaiRevive(turnFight, dieObj, useSkill) # 写死特殊处理董白复活
for faction in [ChConfig.Def_FactionA, ChConfig.Def_FactionB]:
batFaction = turnFight.getBatFaction(faction)
@@ -1517,6 +1524,33 @@
if dieObjList:
turnFight.checkOverByKilled()
+ return
+
+def __dongbaiRevive(turnFight, batObj, useSkill):
+ '''特殊处理董白复活: 董白死亡之后的时间,若有敌方单位阵亡,董白以50%血量复活
+ '''
+ faction = batObj.GetFaction()
+ batFaction = turnFight.getBatFaction(ChConfig.Def_FactionA if faction == ChConfig.Def_FactionB else ChConfig.Def_FactionB)
+ if not batFaction:
+ return
+ batLineup = batFaction.getBatlineup(1)
+ if ChConfig.HeroID_Dongbai not in batLineup.heroObjIDDict:
+ return
+ dongbaiObj = BattleObj.GetBatObjMgr().getBatObj(batLineup.heroObjIDDict[ChConfig.HeroID_Dongbai])
+ if not dongbaiObj or dongbaiObj.IsAlive():
+ return
+ skill = dongbaiObj.GetSkillManager().FindSkillByID(ChConfig.SkillID_DongbaiRevive)
+ if not skill:
+ GameWorld.DebugLogEx("董白还还未学习特殊复活技能! %s", ChConfig.SkillID_DongbaiRevive)
+ return
+ enemyDeadCnt = dongbaiObj.GetDictByKey("EnemyDeadCnt") + 1
+ dongbaiObj.SetDict("EnemyDeadCnt", enemyDeadCnt)
+ GameWorld.DebugLogEx("董白记录自身死亡后的敌方阵亡单位数: %s" % enemyDeadCnt)
+ needDeadCnt = skill.GetEffect(0).GetEffectValue(0) # 固定配置在效果1值
+ if enemyDeadCnt < needDeadCnt:
+ return
+ dongbaiObj.SetDict("EnemyDeadCnt", 0)
+ OnUseSkill(turnFight, dongbaiObj, skill, batType=ChConfig.TurnBattleType_Passive, bySkill=useSkill)
return
def __doCostZhanchui(turnFight, curBatObj, useSkill):
@@ -1809,6 +1843,8 @@
batType = curSkill.GetBatType()
changeHurtType = TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_ChangeHurtType, curSkill)
+ if not changeHurtType:
+ changeHurtType = TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_ChangeHurtTypeByBuff, curSkill)
if changeHurtType == 1:
ignoreDef = True
GameWorld.DebugLogEx("强制变更本次伤害为无视防御! skillID=%s", skillID)
@@ -1887,6 +1923,7 @@
dFinalDamPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_FinalDamPerDef) # 最终减伤
aFinalDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddFinalDamPer, curSkill)
+ aFinalDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_FinalDamPer, curSkill)
aNormalSkillPer, dNormalSkillPerDef = 0, 0
if isTurnNormalSkill:
@@ -2127,8 +2164,10 @@
defObj, hurtValue, hurtTypes, immuneHurt = hurtInfo[:4]
isEx = hurtInfo[4] if len(hurtInfo) > 4 else 0 # 是否是额外目标
- lostHP = DoLostHP(turnFight, atkObj, defObj, hurtValue, curSkill, lostType, hpCanNegative=True, immuneHurt=immuneHurt)
-
+ lostHP, ignoreShield = DoLostHP(turnFight, atkObj, defObj, hurtValue, curSkill, lostType, hpCanNegative=True, immuneHurt=immuneHurt)
+ if ignoreShield:
+ hurtTypes |= pow(2, ChConfig.HurtAtkType_IgnoreShield)
+
#伤害结构体
defID = defObj.GetID()
if isEx:
@@ -2415,9 +2454,10 @@
@param hpCanNegative: 扣除后的生命是否允许负值
@param immuneHurt: 免疫的伤害值
@param isSkillSelfTag: 是否技能自身的直接目标,如平摊伤害目标、溅射伤害目标这种就不算直接目标
- @return: lostHP
+ @return: lostHP, ignoreShield
'''
+ ignoreShield = None
if immuneHurt > 0:
buffMgr = defObj.GetBuffManager()
wudiBuffList = buffMgr.FindBuffListByState(ChConfig.BatObjState_Wudi)
@@ -2432,7 +2472,7 @@
defObj.GetID(), buff.GetBuffID(), buffSkillID, buffValue, immuneHurt, updBuffValue, lostType)
if hurtValue <= 0:
- return 0
+ return 0, ignoreShield
atkID = atkObj.GetID()
defID = defObj.GetID()
@@ -2443,6 +2483,11 @@
shieldBuffList = []
buffMgr = defObj.GetBuffManager()
for buff in buffMgr.FindBuffListByState(ChConfig.BatObjState_DamShield):
+ if ignoreShield == None:
+ if TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_IgnoreShield, curSkill):
+ ignoreShield = True # 无视承伤盾
+ break
+ ignoreShield = False
skillData = buff.GetSkillData()
remainTime = buff.GetRemainTime() # 剩余回合
if not skillData.GetLastTime():
@@ -2494,7 +2539,7 @@
GameWorld.DebugLogEx(" 扣血: atkID=%s,defID=%s,hurtValue=%s,lostType=%s,lostHP=%s,dHP=%s,updHP=%s/%s",
atkID, defID, hurtValue, lostType, lostHP, dHP, defObj.GetHP(), defObj.GetMaxHP())
TurnAttack.AddTurnObjHurtValue(atkObj, defObj, hurtValue, lostHP, skillID, lostType)
- return lostHP
+ return lostHP, ignoreShield
def CalcBounceHP(turnFight, atkObj, defObj, hurtObj, curSkill):
'''计算反弹反弹伤害
@@ -2578,7 +2623,7 @@
TurnAttack.AddTurnObjCureHP(atkObj, atkObj, suckHP, cureHP)
return
-def CalcCureHP(turnFight, userObj, tagObj, curSkill, relativeObj=None):
+def CalcCureHP(turnFight, userObj, tagObj, curSkill, relativeObj=None, multiValue=1):
''' 计算治疗值
'''
@@ -2619,6 +2664,10 @@
cureHP += cureHPEx
GameWorld.DebugLogEx(" 额外治疗值(%s): cureType=%s,baseValue=%s,skillPer=%s,cureHP=%s", cureHPEx, cureType, baseValue, skillPer, cureHP)
+ if multiValue and multiValue != 1:
+ cureHP = int(cureHP * multiValue)
+ GameWorld.DebugLogEx(" 治疗倍值: cureHP=%s,multiValue=%s", cureHP, multiValue)
+
hurtShareEff = curSkill.GetEffectByID(ChConfig.SkillEff_HurtShare)
if hurtShareEff:
tagCnt = max(1, len(curSkill.GetTagObjList()))
--
Gitblit v1.8.0