From b4fb7260236577f618304faf49cb88eb9ef0a1cc Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 24 十二月 2025 13:49:51 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(刘备所有技能;增加触发方式54-不死时,支持不死逻辑;增加效果6032;5022效果增加计算规则102;5507效果支持复活触发来源友军;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 53 ++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 44 insertions(+), 9 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 dadceb8..2670102 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -1348,16 +1348,21 @@
# 统计击杀
killObjList = [] # 击杀其他阵营目标列表
dieObjList = [] # 死亡的单位列表,包含友方单位或自己
+ nodeadObjList = [] # 不死的单位列表
tagObjList = useSkill.GetTagObjList() # 主要目标列表
tagObjListEx = useSkill.GetTagObjListEx() # 额外目标列表
tagObjListAll = tagObjList + tagObjListEx
for tagObj in tagObjListAll:
tagID = tagObj.GetID()
if tagObj.IsAlive() and tagObj.GetHP() <= 0:
- dieObjList.append(tagObj)
- if tagObj.GetFaction() != curObj.GetFaction():
- killObjList.append(tagObj)
- TurnAttack.SetObjKilled(turnFight, tagObj, curObj, useSkill)
+ if tagObj.CanNoDead():
+ tagObj.SetHP(1, True) # 触发不死,保留1点血量
+ nodeadObjList.append(tagObj)
+ else:
+ dieObjList.append(tagObj)
+ if tagObj.GetFaction() != curObj.GetFaction():
+ killObjList.append(tagObj)
+ TurnAttack.SetObjKilled(turnFight, tagObj, curObj, useSkill)
useSkill.SetKillObjList(killObjList)
# 统计伤血,可能单个技能对同一目标造成多次伤害
@@ -1368,6 +1373,7 @@
beHurtObjIDList = [] # 受伤的对象ID列表
reviveObjList = [] # 复活的对象列表
bounceObjList = [] # 有反弹的对象列表
+ caorenProtectList = [] # 有被曹仁防护的对象列表
for hurtObj in useSkill.GetHurtObjListAll():
hurtObjID = hurtObj.GetObjID()
tagObj = batObjMgr.getBatObj(hurtObjID)
@@ -1415,14 +1421,22 @@
if hurtObjID not in stunObjIDList:
stunObjIDList.append(hurtObjID)
+ if hurtObj.HaveHurtType(ChConfig.HurtAtkType_CaorenProtect):
+ if tagObj not in caorenProtectList:
+ caorenProtectList.append(tagObj)
+
if hurtObj.GetSuckHP() > 0:
isSuckHP = True
# 判断自己死亡,因为反弹、平摊伤害的原因,有可能自己干死自己
if curObj.IsAlive() and curObj.GetHP() <= 0:
- dieObjList.append(curObj)
- killer = bounceObjList[0] if bounceObjList else None
- TurnAttack.SetObjKilled(turnFight, curObj, killer)
+ if curObj.CanNoDead():
+ curObj.SetHP(1, True) # 触发不死,保留1点血量
+ nodeadObjList.append(curObj)
+ else:
+ dieObjList.append(curObj)
+ killer = bounceObjList[0] if bounceObjList else None
+ TurnAttack.SetObjKilled(turnFight, curObj, killer)
# 记录最后一次总伤害,有伤害目标才记录
if totalHurtValue:
@@ -1483,7 +1497,11 @@
# 己方单位死亡时
else:
TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendDie, dieObj, connSkill=useSkill, byFriendObj=dieObj)
-
+
+ # 触发不死
+ for tagObj in nodeadObjList:
+ TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_NoDead, curObj, connSkill=useSkill)
+
# 复活时
for tagObj in reviveObjList:
# 同步最新的怒气及buff,血量已经在技能中通知了
@@ -1492,6 +1510,20 @@
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Revive, curObj, connSkill=useSkill)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_InBattlefield, curObj, connSkill=useSkill)
+ # 曹仁防护触发,暂写死
+ for tagObj in caorenProtectList:
+ tagBatLineup = tagObj.GetBatLineup()
+ caorenObj = tagBatLineup.getHeroObj(ChConfig.HeroID_Caoren) # 获取被防护目标阵容的曹仁
+ if not caorenObj or not caorenObj.IsAlive():
+ continue
+ caoRenSkill = caorenObj.GetSkillManager().FindSkillByID(ChConfig.SkillID_CaorenProtect)
+ if not caoRenSkill:
+ continue
+ passiveSkillID = caoRenSkill.GetEffect(0).GetEffectValue(0) # 防护成功后的触发技能ID,默认写在效果1的值
+ GameWorld.DebugLogEx("曹仁防护后触发技能: caorenID=%s,protectID=%s,passiveSkillID=%s", caorenObj.GetID(), tagObj.GetID(), passiveSkillID)
+ if passiveSkillID:
+ OnUsePassiveSkill(turnFight, caorenObj, curObj, passiveSkillID, connSkill=useSkill)
+
triggerOne = False
batType = useSkill.GetBatType()
isAttackDirect = (isUseSkill and SkillCommon.isAttackDirectSkill(useSkill)) # 是否直接攻击
@@ -2412,7 +2444,7 @@
# 曹仁的分担触发条件暂时程序内固定,有修改时程序同步修改
# 曹仁: 我方英雄受到直接攻击时(受到群攻时选择血量最低的友方进行防护),曹仁有30%概率为其分担一半所受伤害,每成功分担一次,曹仁获得1层坚韧,使我方全体减伤提升5%,最多6层,曹仁死亡效果消失
# 董白怒气 同命锁 对敌方攻击最高的1个目标造成攻击力450%物理伤害,并与其连接,使两人受到的任意伤害平摊(平摊伤害不会被再次平摊),持续2回合
- caorenSkillID = 1015070
+ caorenSkillID = ChConfig.SkillID_CaorenProtect
effHeroIDList = [ChConfig.HeroID_Zhenfu, ChConfig.HeroID_Caoren, ChConfig.HeroID_Dongbai] # 暂固定,有增加武将再同步修改
isAve = False
@@ -2777,6 +2809,9 @@
cureHP += cureHPEx
GameWorld.DebugLogEx(" 额外治疗值(%s): cureType=%s,baseValue=%s,skillPer=%s,cureHP=%s", cureHPEx, cureType, baseValue, skillPer, cureHP)
+ addCureMulti = TurnPassive.GetTriggerEffectValue(turnFight, userObj, tagObj, ChConfig.PassiveEff_AddCureMultiBySkillType, curSkill)
+ if addCureMulti:
+ multiValue += addCureMulti / 100.0
if multiValue and multiValue != 1:
cureHP = int(cureHP * multiValue)
GameWorld.DebugLogEx(" 治疗倍值: cureHP=%s,multiValue=%s", cureHP, multiValue)
--
Gitblit v1.8.0