From 1c4fc8c9115f81e106fa09d9a6dc44e8c1ef5d97 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 28 十月 2025 18:22:35 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(孟获技能;增加效果7005-必命中;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 38 ++++++++++++++++++++++++--------------
1 files changed, 24 insertions(+), 14 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 219354d..cde32e1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -1349,14 +1349,16 @@
angerOverflow = 0 # 怒气溢出值
mustHit = False # 是否必命中
- if isAngerSkill:
+ if not isTurnNormalSkill: # 仅普攻判断是否闪避
mustHit = True
+
+ if isAngerSkill:
curXP = atkObj.GetXP()
angerOverflow = max(atkObj.GetXP() - IpyGameDataPY.GetFuncCfg("AngerXP", 2), 0)
- GameWorld.DebugLog("XP必命中! curXP=%s,angerOverflow=%s" % (curXP, angerOverflow))
+ GameWorld.DebugLog("怒技攻击! curXP=%s,angerOverflow=%s" % (curXP, angerOverflow))
#命中公式 攻击方类型不同,公式不同
- if isTurnNormalSkill and not mustHit and not defObj.IsInControlledHard():
+ if not mustHit and not curSkill.GetEffectByID(ChConfig.SkillEff_MustHit) and not defObj.IsInControlledHard():
aMissRateDef = atkObj.GetBatAttrValue(ChConfig.AttrID_MissRateDef) #atkObj.GetHit() # 抗闪避率 - 命中
dMissRate = defObj.GetBatAttrValue(ChConfig.AttrID_MissRate) # 闪避率
missNum = curSkill.GetTagMissNum(defID)
@@ -1592,7 +1594,7 @@
# 减伤盾减伤, 会改变 hurtValue
hurtValue = max(0, hurtValue)
-
+
# 承伤盾承伤,剩余时间短的优先承伤,承伤不影响输出,相当于额外的HP,仅用于抵扣掉血,仅 改变 realHurtHP
realHurtHP = hurtValue
shieldBuffList = []
@@ -1605,27 +1607,35 @@
shieldBuffList.append([remainTime, buffValue, buff])
if shieldBuffList:
+ #可能需要同步盾伤跟实际扣血值给前端,具体看前端护盾怎么处理再优化
+ shieldHurtPer = 10000 # 对护盾伤害比
+ shieldHurtPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddShieldHurtPer, curSkill)
+ shieldHurtPer /= 10000.0
+ shieldHurtValue = int(hurtValue * shieldHurtPer) # 对护盾伤害
+ GameWorld.DebugLog(" 对护盾总伤害: shieldHurtValue=%s,shieldHurtPer=%s,hurtValue=%s" % (shieldHurtValue, shieldHurtPer, hurtValue))
shieldBuffList.sort()
for _, buffValue, buff in shieldBuffList:
- if realHurtHP <= 0:
+ if shieldHurtValue <= 0:
break
buffID = buff.GetBuffID()
- if realHurtHP < buffValue:
- damageShieldValue = realHurtHP
+ if shieldHurtValue < buffValue:
+ decShieldValue = shieldHurtValue
else:
- damageShieldValue = buffValue
- GameWorld.DebugLog(" 承伤盾: buffID=%s,buffValue=%s,realHurtHP=%s,damageShieldValue=%s" % (buffID, buffValue, realHurtHP, damageShieldValue))
- realHurtHP -= damageShieldValue # 承伤值
- if damageShieldValue >= buffValue:
- GameWorld.DebugLog(" 删除盾: buffID=%s,realHurtHP=%s" % (buffID, realHurtHP))
+ decShieldValue = buffValue
+ GameWorld.DebugLog(" 承伤盾抵扣: buffID=%s,buffValue=%s,剩余盾伤=%s,扣除盾值=%s" % (buffID, buffValue, shieldHurtValue, decShieldValue))
+ shieldHurtValue -= decShieldValue # 承伤值
+ if decShieldValue >= buffValue:
+ GameWorld.DebugLog(" 删除盾: buffID=%s,剩余盾伤=%s" % (buffID, shieldHurtValue))
TurnBuff.DoBuffDel(turnFight, defObj, buff, relatedSkill=curSkill, afterLogic=True, tagObj=atkObj)
else:
- updShieldValue = buffValue - damageShieldValue
- GameWorld.DebugLog(" 更新盾值: updShieldValue=%s,realHurtHP=%s" % (updShieldValue, realHurtHP))
+ updShieldValue = buffValue - decShieldValue
+ GameWorld.DebugLog(" 更新盾: updShieldValue=%s,剩余盾伤=%s" % (updShieldValue, shieldHurtValue))
buff.SetValue1(updShieldValue % ChConfig.Def_PerPointValue)
buff.SetValue2(updShieldValue / ChConfig.Def_PerPointValue)
curSkill.AddAfterLogic(ChConfig.AfterLogic_SyncBuff, [defObj, buff, atkObj, "ReduceShieldValue"])
+ realHurtHP = int(shieldHurtValue / shieldHurtPer)
+ GameWorld.DebugLog(" 承伤后剩余伤血: realHurtHP=%s" % (realHurtHP))
return hurtValue, max(0, realHurtHP), hurtTypes
def CalcBounceHP(turnFight, atkObj, defObj, hurtObj, curSkill):
--
Gitblit v1.8.0