From 68c06a7abc6ad911baf81bde36e68019ecd1a11d Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 22 十二月 2025 19:06:15 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(小乔所有技能;增加触发方式53-友方造成持续伤害时;优化效果5022 5507 5509;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 45 ++++++++++++++++++++++++++++++++-------------
1 files changed, 32 insertions(+), 13 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 3474507..ed4d6c5 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -62,8 +62,8 @@
skillType = useSkill.GetSkillType()
byTriggerWay = kwargs["byTriggerWay"] if "byTriggerWay" in kwargs else 0 # 不使用参数名 triggerWay, 防止传递过程中参数混乱
if not curBatObj.IsAlive():
- if skillType == ChConfig.Def_SkillType_Revive and useSkill.GetTagAim() == ChConfig.SkillTagAim_Self:
- GameWorld.DebugLogEx("死亡时使用复活自己的技能! skillID=%s", skillID)
+ if skillType == ChConfig.Def_SkillType_Revive:
+ GameWorld.DebugLogEx("死亡时使用复活技能! skillID=%s", skillID)
else:
if byTriggerWay in ChConfig.DeadCanTriggerWayList:
GameWorld.DebugLogEx("死亡可触发的方式触发技能可释放! skillID=%s,byTriggerWay=%s", skillID, byTriggerWay)
@@ -756,9 +756,13 @@
return
harmPer = harmEff.GetEffectValue(0) # 自残百分比
noEnoughDo = harmEff.GetEffectValue(1) # 不足时扣除方式 0-不扣;1-自杀;2-扣剩1点
+ calcType = harmEff.GetEffectValue(2) # 计算方式:0-按最大血量;1-按当前血量
curHP = curBatObj.GetHP()
maxHP = curBatObj.GetMaxHP()
- harmHP = int(maxHP * harmPer / 100.0)
+ if calcType == 1:
+ harmHP = int(curHP * harmPer / 100.0)
+ else:
+ harmHP = int(maxHP * harmPer / 100.0)
lostHP = harmHP
if curHP <= harmHP:
if noEnoughDo == 0:
@@ -768,8 +772,8 @@
updHP = max(curHP - lostHP, 0)
curBatObj.SetHP(updHP, False)
- GameWorld.DebugLogEx("使用技能时自残: curHP=%s/%s,harmPer=%s,harmHP=%s,lostHP=%s,updHP=%s,noEnoughDo=%s",
- curHP, maxHP, harmPer, harmHP, lostHP, updHP, noEnoughDo)
+ GameWorld.DebugLogEx("使用技能时自残: curHP=%s/%s,harmPer=%s,harmHP=%s,lostHP=%s,updHP=%s,noEnoughDo=%s,calcType=%s",
+ curHP, maxHP, harmPer, harmHP, lostHP, updHP, noEnoughDo, calcType)
curBatObj.SetHarmSelfHP(harmHP) # 无视实际扣血量,直接更新
@@ -1355,11 +1359,7 @@
killObjList.append(tagObj)
TurnAttack.SetObjKilled(turnFight, tagObj, curObj, useSkill)
useSkill.SetKillObjList(killObjList)
- # 判断自己,因为反弹、平摊伤害的原因,有可能自己干死自己
- if curObj.IsAlive() and curObj.GetHP() <= 0:
- dieObjList.append(curObj)
- TurnAttack.SetObjKilled(turnFight, curObj)
-
+
# 统计伤血,可能单个技能对同一目标造成多次伤害
totalHurtValue = 0
isSuckHP = False
@@ -1367,11 +1367,18 @@
stunObjIDList, superHitObjIDList, parryObjIDList = [], [], []
beHurtObjIDList = [] # 受伤的对象ID列表
reviveObjList = [] # 复活的对象列表
+ bounceObjList = [] # 有反弹的对象列表
for hurtObj in useSkill.GetHurtObjListAll():
hurtObjID = hurtObj.GetObjID()
tagObj = batObjMgr.getBatObj(hurtObjID)
if not tagObj:
continue
+
+ bounceHP = hurtObj.GetBounceHP()
+ if bounceHP:
+ if tagObj not in bounceObjList:
+ bounceObjList.append(tagObj)
+
if hurtObj.HaveHurtType(ChConfig.HurtAtkType_Hurt) and not hurtObj.HaveHurtType(ChConfig.HurtAtkType_Immune) \
and (isTurnNormalSkill or isAngerSkill) and tagObj.IsAlive():
__doSkillHurtAnger(tagObj, hurtObj.GetLostHP(), useSkill)
@@ -1411,6 +1418,12 @@
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 totalHurtValue:
curObj.SetLastHurtValue(totalHurtValue)
@@ -1466,7 +1479,7 @@
for dieObj in dieObjList:
# 敌方单位死亡时
if lineupObj.GetFaction() != dieObj.GetFaction():
- TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_EnemyDie, dieObj, connSkill=useSkill)
+ TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_EnemyDie, dieObj, connSkill=useSkill, byKiller=curObj)
# 己方单位死亡时
else:
TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendDie, dieObj, connSkill=useSkill, byFriendObj=dieObj)
@@ -1509,6 +1522,7 @@
if isExObj:
continue
+ isDotHurt = False
# 直接攻击
if isAttackDirect:
if not triggerOne:
@@ -1519,6 +1533,7 @@
elif not isAttackDirect:
# 受到持续伤害
if tagID in beHurtObjIDList:
+ isDotHurt = True
TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_DOTHurt, tagObj, connSkill=useSkill, connBuff=timeBuff)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeDOTHurt, curObj, connSkill=useSkill, connBuff=timeBuff)
@@ -1558,7 +1573,7 @@
# 敌友方
- if isAttackDirect or batType in [ChConfig.TurnBattleType_Combo, ChConfig.TurnBattleType_Pursue]:
+ if isAttackDirect or batType in [ChConfig.TurnBattleType_Combo, ChConfig.TurnBattleType_Pursue] or isDotHurt:
if not curBatLineup:
curBatLineup = curObj.GetBatLineup()
for lineupObjID in curBatLineup.posObjIDDict.values():
@@ -1572,7 +1587,11 @@
TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendAttackOverDirectOne, tagObj, connSkill=useSkill, byFriendObj=curObj)
if curID != lineupObj.GetID():
TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendAttackOverDirectOneNoSelf, tagObj, connSkill=useSkill, byFriendObj=curObj)
-
+ # 持续伤害
+ elif isDotHurt:
+ if not triggerOne:
+ TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendDotHurt, tagObj, connSkill=useSkill, byFriendObj=curObj)
+
# 连击
if batType == ChConfig.TurnBattleType_Combo:
TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendCombo, tagObj, connSkill=useSkill, byFriendObj=curObj)
--
Gitblit v1.8.0