From 9b026aee7db0db3e7c0f5efa354be73372a12a2a Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 21 一月 2026 14:07:26 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(PK攻击顺序规则调整: PVE固定玩家先手,PVP先手排序优先级: 总先攻值 > 战力 > 挑战方先手; )
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 72 ++++++++++++++++++++++++++----------
1 files changed, 52 insertions(+), 20 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 135eb26..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):
@@ -1569,6 +1569,10 @@
# ========== 以下触发被动 ==========
+ curBatLineup = curObj.GetTFBatLineup()
+ curMGObj = curBatLineup.getMinggeObj()
+ mgTriggerWayList = [] # 命格本次技能已触发方式列表,命格固定只触发一次
+
# buff消失后置处理的被动,优先处理,如破盾,区别于被动方式 ChConfig.TriggerWay_BuffDel(立即触发)
for buffObjID, buff, tagObjID, afterTriggerData in delBuffAfterEffList:
triggerWay, effInfoList = afterTriggerData
@@ -1615,6 +1619,9 @@
TurnBuff.DoBuffByRevive(turnFight, tagObj)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Revive, curObj, connSkill=useSkill)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_InBattlefield, curObj, connSkill=useSkill)
+ if reviveObjList and curMGObj:
+ tagObj = reviveObjList[0]
+ TurnPassive.OnTriggerPassiveEffect(turnFight, curMGObj, ChConfig.TriggerWay_Revive, tagObj, connSkill=useSkill, byFriendObj=curObj)
# 曹仁防护触发,暂写死
for tagObj in caorenProtectList:
@@ -1633,9 +1640,6 @@
triggerOne = False
batType = useSkill.GetBatType()
isAttackDirect = (isUseSkill and SkillCommon.isAttackDirectSkill(useSkill)) # 是否直接攻击
- curBatLineup = curObj.GetTFBatLineup()
- curMGObj = curBatLineup.getMinggeObj()
- mgTriggerWayList = [] # 命格本次技能已触发方式列表,命格固定只触发一次
for tagObj in tagObjListAll:
tagID = tagObj.GetID()
@@ -1643,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)
@@ -1691,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]
@@ -1711,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)
@@ -2144,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
@@ -2891,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