From 87c431cc1636c22f91e3baebd9c43d948369a0c0 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 19 一月 2026 18:23:36 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(命格意象技能支持、伤害等数据结算统计;支持命格技能青龙;增加触发方式59;增加命格技能功能类型5;增加物法类型3;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py |   24 ++++++++++++++++++++----
 1 files changed, 20 insertions(+), 4 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 1f81f1a..51f1029 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -38,6 +38,11 @@
     ght = useSkill.GetHurtType() % 10
     if ght == IPY_GameWorld.ghtMag: # 做配置兼容用,优先验证法伤,否则默认物伤
         return IPY_GameWorld.ghtMag
+    if ght == 3: # 由触发的技能决定
+        bySkill = useSkill.GetBySkill()
+        if bySkill:
+            #GameWorld.DebugLogEx("物法类型取触发的技能: useSkillID=%s,bySkillID=%s", useSkill.GetSkillID(), bySkill.GetSkillID())
+            return GetPMType(batObj, bySkill)
     return IPY_GameWorld.ghtPhy
 
 def IsIgnoreDef(useSkill):
@@ -158,6 +163,8 @@
     useSkill.SetBatType(batType)
     useSkill.SetBySkill(bySkill)
     useSkill.SetByBuff(byBuff)
+    # 注:理论上原先的 byFriendObj 都可以直接用这个,但是旧的代码先不修改了,后续的累计敌军、友军之类的触发可以统一使用 byBatObj
+    useSkill.SetByBatObj(kwargs.pop("byBatObj", None))
     useSkill.SetByTriggerWay(byTriggerWay)
     
     isTurnNormalSkill = SkillCommon.isTurnNormalSkill(useSkill)
@@ -1596,7 +1603,8 @@
     triggerOne = False
     batType = useSkill.GetBatType()
     isAttackDirect = (isUseSkill and SkillCommon.isAttackDirectSkill(useSkill)) # 是否直接攻击
-    curBatLineup = None
+    curBatLineup = curObj.GetBatLineup()
+    curMGObj = curBatLineup.getMinggeObj()
     for tagObj in tagObjListAll:
         tagID = tagObj.GetID()
         
@@ -1676,6 +1684,9 @@
         # 追击
         elif batType == ChConfig.TurnBattleType_Pursue:
             TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Pursue, tagObj, connSkill=useSkill)
+            if isAttackDirect:
+                if curMGObj:
+                    TurnPassive.OnTriggerPassiveEffect(turnFight, curMGObj, ChConfig.TriggerWay_PursueAtk, tagObj, connSkill=useSkill, byBatObj=curObj)
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BePursue, curObj, connSkill=useSkill)
         # 反击
         elif batType == ChConfig.TurnBattleType_AtkBack:
@@ -1685,8 +1696,6 @@
             
         # 敌友方
         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():
                 lineupObj = batObjMgr.getBatObj(lineupObjID)
                 if not lineupObj.IsAlive():
@@ -2065,8 +2074,15 @@
     '''按公式计算伤害,默认按攻击计算
     '''
     
-    #mapID = turnFight.mapID
     skillID = curSkill.GetSkillID()
+    # 命格攻击类技能,取触发者为施法方,因为部分战斗属性需要取施法方的,如最终增伤等
+    if curSkill.GetFuncType() == ChConfig.Def_SkillFuncType_MinggeSkill:
+        byBatObj = curSkill.GetByBatObj()
+        if byBatObj:
+            GameWorld.DebugLogEx("命格攻击类技能计算伤害属性取触发者! mgObjID=%s,byObjID=%s,skillID=%s", atkObj.GetID(), byBatObj.GetID(), skillID)
+            atkObj = byBatObj
+            
+    #mapID = turnFight.mapID
     pmType = GetPMType(atkObj, curSkill)
     ignoreDef = IsIgnoreDef(curSkill)
     batType = curSkill.GetBatType()

--
Gitblit v1.8.0