From 986730e2725816f2eb9ad6fd645c513de931aa41 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 21 一月 2026 11:52:04 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(命格技能七杀、皇灵、贪狼、司命、破军、天机;增加绝对闪避及抗性属性 81 82;格挡buff支持层级;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 62 ++++++++++++++++++++++--------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 8 +++-
2 files changed, 51 insertions(+), 19 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 5b0b0b8..ab1ba79 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -182,7 +182,9 @@
AttrID_GuanchuanDef, # 抗贯穿 78
AttrID_Zhaojia, # 招架 79
AttrID_ZhaojiaDef, # 抗招架 80
-) = range(1, 1 + 80)
+AttrID_AbsoluteMissRate, # 绝对闪避 81
+AttrID_AbsoluteMissRateDef, # 抗绝对闪避 82
+) = range(1, 1 + 82)
# 需要计算的武将战斗属性ID列表
CalcBattleAttrIDList = [AttrID_Atk, AttrID_Def, AttrID_MaxHP, AttrID_AtkSpeed, AttrID_StunRate, AttrID_StunRateDef,
@@ -199,6 +201,7 @@
AttrID_ComboDamPer, AttrID_ComboDamPerDef, AttrID_XPRecoverPer, AttrID_PVPDamPer, AttrID_PVPDamPerDef,
AttrID_ReviveHPPer, AttrID_ReviveXPPer, AttrID_DOTBurnPer, AttrID_DOTBurnPerDef,
AttrID_Guanchuan, AttrID_GuanchuanDef, AttrID_Zhaojia, AttrID_ZhaojiaDef,
+ AttrID_AbsoluteMissRate, AttrID_AbsoluteMissRateDef,
]
# 基础三维属性ID列表
@@ -902,7 +905,8 @@
HurtAtkType_IgnoreShield, # 无视承伤盾 14
HurtAtkType_Guanchuan, # 贯穿 15
HurtAtkType_Zhaojia, # 招架 16
-) = range(17)
+HurtAtkType_AbsoluteMiss, # 绝对闪避 17
+) = range(18)
#伤害类型
(
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 47f606b..3636b76 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -163,8 +163,8 @@
angerOverflow = curBatObj.GetAngerOverflow()
bySkillID = bySkill.GetSkillID() if bySkill else 0
- GameWorld.DebugLogEx("◆使用技能: curID=%s,skillID=%s,tagCnt=%s,batType=%s,bySkillID=%s,HP:%s/%s,angerOverflow=%s,curXP=%s,oneActionUseCnt=%s",
- objID, skillID, len(tagObjList), batType, bySkillID, curBatObj.GetHP(), curBatObj.GetMaxHP(), angerOverflow, curXP, oneActionUseCnt)
+ GameWorld.DebugLogEx("◆使用技能: skillID=%s,curID=%s,tagCnt=%s,batType=%s,bySkillID=%s,HP:%s/%s,angerOverflow=%s,curXP=%s,oneActionUseCnt=%s",
+ skillID, objID, len(tagObjList), batType, bySkillID, curBatObj.GetHP(), curBatObj.GetMaxHP(), angerOverflow, curXP, oneActionUseCnt)
# 以下为技能可以使用的处理,之后的逻辑默认技能使用成功
if isinstance(useSkill, IpyGameDataPY.IPY_Skill):
@@ -1647,7 +1647,11 @@
if tagID in missObjIDList:
TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeMiss, tagObj, connSkill=useSkill)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Miss, curObj, connSkill=useSkill)
-
+ tagMGObj = tagObj.GetTFBatLineup().getMinggeObj()
+ if tagMGObj and ChConfig.TriggerWay_Miss not in mgTriggerWayList:
+ mgTriggerWayList.append(ChConfig.TriggerWay_Miss)
+ TurnPassive.OnTriggerPassiveEffect(turnFight, tagMGObj, ChConfig.TriggerWay_Miss, curObj, connSkill=useSkill, byBatObj=tagObj)
+
# 免疫
if tagID in immuneObjIDList:
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_ImmuneHurt, curObj, connSkill=useSkill)
@@ -1695,7 +1699,10 @@
if tagID in stunObjIDList:
TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Stun, tagObj, connSkill=useSkill)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeStun, curObj, connSkill=useSkill)
-
+ if curMGObj and ChConfig.TriggerWay_Stun not in mgTriggerWayList:
+ mgTriggerWayList.append(ChConfig.TriggerWay_Stun)
+ TurnPassive.OnTriggerPassiveEffect(turnFight, curMGObj, ChConfig.TriggerWay_Stun, tagObj, connSkill=useSkill, byBatObj=curObj)
+
# 控制
if tagID in beControlledHardDict:
buff = beControlledHardDict[tagID]
@@ -1715,22 +1722,35 @@
if tagID in superHitObjIDList:
TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_SuperHit, tagObj, connSkill=useSkill)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeSuperHit, curObj, connSkill=useSkill)
-
+ if curMGObj and ChConfig.TriggerWay_SuperHit not in mgTriggerWayList:
+ mgTriggerWayList.append(ChConfig.TriggerWay_SuperHit)
+ TurnPassive.OnTriggerPassiveEffect(turnFight, curMGObj, ChConfig.TriggerWay_SuperHit, tagObj, connSkill=useSkill, byBatObj=curObj)
+
# 格挡
if tagID in parryObjIDList:
TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeParry, tagObj, connSkill=useSkill)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Parry, curObj, connSkill=useSkill)
-
+ tagMGObj = tagObj.GetTFBatLineup().getMinggeObj()
+ if tagMGObj and ChConfig.TriggerWay_Parry not in mgTriggerWayList:
+ mgTriggerWayList.append(ChConfig.TriggerWay_Parry)
+ TurnPassive.OnTriggerPassiveEffect(turnFight, tagMGObj, ChConfig.TriggerWay_Parry, curObj, connSkill=useSkill, byBatObj=tagObj)
+
# 吸血
if tagID in suckObjIDList:
if not triggerOne:
TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_SuckHPOne, tagObj, connSkill=useSkill)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeSuckHP, curObj, connSkill=useSkill)
-
+ if curMGObj and ChConfig.TriggerWay_SuckHPOne not in mgTriggerWayList:
+ mgTriggerWayList.append(ChConfig.TriggerWay_SuckHPOne)
+ TurnPassive.OnTriggerPassiveEffect(turnFight, curMGObj, ChConfig.TriggerWay_SuckHPOne, tagObj, connSkill=useSkill, byBatObj=curObj)
+
# 连击
if batType == ChConfig.TurnBattleType_Combo:
TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Combo, tagObj, connSkill=useSkill)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeCombo, curObj, connSkill=useSkill)
+ if curMGObj and ChConfig.TriggerWay_Combo not in mgTriggerWayList:
+ mgTriggerWayList.append(ChConfig.TriggerWay_Combo)
+ TurnPassive.OnTriggerPassiveEffect(turnFight, curMGObj, ChConfig.TriggerWay_Combo, tagObj, connSkill=useSkill, byBatObj=curObj)
# 追击
elif batType == ChConfig.TurnBattleType_Pursue:
TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Pursue, tagObj, connSkill=useSkill)
@@ -2148,23 +2168,31 @@
isAngerSkill = SkillCommon.isAngerSkill(curSkill)
isDot = ("damageoftime" in kwargs)
- mustHit = False # 是否必命中
- if not isTurnNormalSkill: # 仅普攻判断是否闪避
- mustHit = True
-
- angerOverflow = atkObj.GetAngerOverflow() # 怒气溢出值
-
- #命中公式 攻击方类型不同,公式不同
- if not mustHit and not curSkill.GetEffectByID(ChConfig.SkillEff_MustHit) and not defObj.IsInControlledHard():
+ # 常规闪避 - 仅针对普攻
+ if isTurnNormalSkill 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)
missRate = eval(IpyGameDataPY.GetFuncCompileCfg("MissCfg", 1))
if GameWorld.CanHappen(missRate):
GameWorld.DebugLogEx("闪避了! missRate=%s,dMissRate=%s,aMissRateDef=%s,missNum=%s", missRate, dMissRate, aMissRateDef, missNum)
- curSkill.SetTagMissNum(defID, missRate + 1)
+ curSkill.SetTagMissNum(defID, missNum + 1)
return 0, pow(2, ChConfig.HurtAtkType_Miss)
+ # 绝对闪避 - 除dot外的所有技能,因为绝对闪避不触发常规闪避的被动,所以在常规闪避后判断
+ if not isDot:
+ aMissRateDef = atkObj.GetBatAttrValue(ChConfig.AttrID_AbsoluteMissRateDef)
+ dMissRate = defObj.GetBatAttrValue(ChConfig.AttrID_AbsoluteMissRate)
+ missNum = curSkill.GetTagMissNum(defID)
+ if dMissRate > 0:
+ missRate = eval(IpyGameDataPY.GetFuncCompileCfg("MissCfg", 1))
+ if GameWorld.CanHappen(missRate):
+ GameWorld.DebugLogEx("绝对闪避了! missRate=%s,dAbsoluteMissRate=%s,aAbsoluteMissRateDef=%s,missNum=%s", missRate, dMissRate, aMissRateDef, missNum)
+ curSkill.SetTagMissNum(defID, missNum + 1)
+ return 0, pow(2, ChConfig.HurtAtkType_AbsoluteMiss)
+
+ angerOverflow = atkObj.GetAngerOverflow() # 怒气溢出值
+
hurtTypes = pow(2, ChConfig.HurtAtkType_Hurt)
isSuperHit, isParry, isStun = False, False, False
@@ -2895,7 +2923,7 @@
damBackPer = 0
buffMgr = defObj.GetBuffManager()
for buff in buffMgr.FindBuffListByState(ChConfig.BatObjState_DamBackShield):
- damBackPer += buff.GetValue1()
+ damBackPer += buff.GetValue1() * max(1, buff.GetLayer())
connSkillTypeID = buff.GetSkillTypeID()
damBackPer += TurnPassive.GetTriggerEffectValue(turnFight, defObj, atkObj, ChConfig.PassiveEff_AddDamBackPerByBuffLayer, connSkillTypeID=connSkillTypeID)
--
Gitblit v1.8.0