From 81fd2426b2f8ca34e07e9eaea1f3af54b0ae9527 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 21 一月 2026 10:16:42 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(命格技能玄武;增加效果7012;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py |   63 +++++++++++++++++++++++++++++--
 1 files changed, 58 insertions(+), 5 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 6851048..47f606b 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -1422,6 +1422,7 @@
     relatedSkillID = useSkill.GetSkillID()
     delBuffAfterEffList = [] # buff消失后要触发的被动,一般用于后置处理的逻辑
     beControlledHardDict = {} # 受控目标 {objID:buff, ...}
+    beDotBuffDict = {} # 被添加dot的目标 {objID:buff, ...}
     afterLogicList = useSkill.GetAfterLogicList()
     for logicType, logicData in afterLogicList:
         if logicType == ChConfig.AfterLogic_DelBuff:
@@ -1446,6 +1447,8 @@
             if buffOwner.GetID() == curID:
                 if triggerType == ChConfig.TriggerWay_BeControlledHard:
                     beControlledHardDict[batObj.GetID()] = buff
+                elif triggerType == ChConfig.TriggerWay_AddDOTBuff:
+                    beDotBuffDict[batObj.GetID()] = buff
                     
     # 统计击杀
     killObjList = [] # 击杀其他阵营目标列表
@@ -1566,6 +1569,10 @@
     
     # ========== 以下触发被动 ==========
     
+    curBatLineup = curObj.GetTFBatLineup()
+    curMGObj = curBatLineup.getMinggeObj()
+    mgTriggerWayList = [] # 命格本次技能已触发方式列表,命格固定只触发一次
+    
     # buff消失后置处理的被动,优先处理,如破盾,区别于被动方式  ChConfig.TriggerWay_BuffDel(立即触发)
     for buffObjID, buff, tagObjID, afterTriggerData in delBuffAfterEffList:
         triggerWay, effInfoList = afterTriggerData
@@ -1612,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:
@@ -1630,8 +1640,6 @@
     triggerOne = False
     batType = useSkill.GetBatType()
     isAttackDirect = (isUseSkill and SkillCommon.isAttackDirectSkill(useSkill)) # 是否直接攻击
-    curBatLineup = curObj.GetTFBatLineup()
-    curMGObj = curBatLineup.getMinggeObj()
     for tagObj in tagObjListAll:
         tagID = tagObj.GetID()
         
@@ -1692,10 +1700,17 @@
         if tagID in beControlledHardDict:
             buff = beControlledHardDict[tagID]
             if buff.GetCurBuffState() == ChConfig.BatObjState_Frozen:
-                if curMGObj:
+                if curMGObj and ChConfig.TriggerWay_Frozen not in mgTriggerWayList:
+                    mgTriggerWayList.append(ChConfig.TriggerWay_Frozen)
                     TurnPassive.OnTriggerPassiveEffect(turnFight, curMGObj, ChConfig.TriggerWay_Frozen, tagObj, connSkill=useSkill, byBatObj=curObj)
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeControlledHard, curObj, connSkill=useSkill, connBuff=buff)
             
+        # 附加dot
+        if tagID in beDotBuffDict:
+            if curMGObj and ChConfig.TriggerWay_AddDOTBuff not in mgTriggerWayList:
+                mgTriggerWayList.append(ChConfig.TriggerWay_AddDOTBuff)
+                TurnPassive.OnTriggerPassiveEffect(turnFight, curMGObj, ChConfig.TriggerWay_AddDOTBuff, tagObj, connSkill=useSkill, byBatObj=curObj)
+                
         # 暴击
         if tagID in superHitObjIDList:
             TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_SuperHit, tagObj, connSkill=useSkill)
@@ -1720,7 +1735,8 @@
         elif batType == ChConfig.TurnBattleType_Pursue:
             TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Pursue, tagObj, connSkill=useSkill)
             if isAttackDirect:
-                if curMGObj:
+                if curMGObj and ChConfig.TriggerWay_PursueAtk not in mgTriggerWayList:
+                    mgTriggerWayList.append(ChConfig.TriggerWay_PursueAtk)
                     TurnPassive.OnTriggerPassiveEffect(turnFight, curMGObj, ChConfig.TriggerWay_PursueAtk, tagObj, connSkill=useSkill, byBatObj=curObj)
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BePursue, curObj, connSkill=useSkill)
         # 反击
@@ -2031,7 +2047,7 @@
     @param effectID: 被动效果ID
     注:可能由A引起触发B技能的效果释放技能C
     '''
-    if not passiveSkill:
+    if not passiveSkill or not batObj:
         return
     if isinstance(passiveSkill, int):
         passiveSkillID = passiveSkill
@@ -3103,6 +3119,43 @@
     useSkill.ResetUseRec()
     return
 
+def DoHurtExAtk(turnFight, atkObj, defObj, hurtValue, skillID, hurtTypes=0):
+    ## 额外结算指定伤害
+    skillIpyData = IpyGameDataPY.GetIpyGameData("Skill", skillID)
+    if not skillIpyData:
+        return
+    
+    atkID = atkObj.GetID()
+    defID = defObj.GetID()
+    
+    # 结算需要同步标签
+    useTag = "Skill_%s_%s_Dot_%s" % (atkID, skillID, atkObj.GetIncrementValue()) # 复用dot的标签
+    Sync_TurnFightTag(turnFight, useTag, 0)
+    
+    dHP = defObj.GetHP()
+    dMaxHP = defObj.GetMaxHP()
+    GameWorld.DebugLogEx("额外结算指定伤害: atkID=%s,defID=%s,skillID=%s,hurtValue=%s,,dHP=%s/%s", 
+                         atkID, defID, skillID, hurtValue, dHP, dMaxHP)
+    
+    useSkill = BattleObj.PySkill(skillIpyData, atkID)
+    useSkill.SetTagObjList([defObj])
+    useSkill.SetBatType(ChConfig.TurnBattleType_Dot) # 要修改表现的话等前端同步修改
+    
+    hurtTypes |= pow(2, ChConfig.HurtAtkType_Hurt) # 确保有基础的伤害类型
+    hurtValue, hurtTypes, immuneHurt = CalcHurtWithBuff(turnFight, atkObj, defObj, hurtValue, hurtTypes)
+    calcHurtResults = [[defObj, hurtValue, hurtTypes, immuneHurt]]
+    DoSkillHurtHP(turnFight, atkObj, useSkill, calcHurtResults, "HurtExAtk")
+    
+    Sync_UseSkill(turnFight, atkObj, useSkill)
+    
+    DoBeAttackResult(turnFight, atkObj, useSkill)
+    
+    # 通知结束标签
+    Sync_TurnFightTag(turnFight, useTag, 1)
+    
+    useSkill.ResetUseRec()
+    return True
+
 def Sync_TurnFightTag(turnFight, useTag, sign):
     ## 通知技能标签
     clientPack = ChPyNetSendPack.tagSCTurnFightTag()

--
Gitblit v1.8.0