From 0829a4c2b93d65e8ca2251c9477095ef65e93ef8 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期二, 30 十二月 2025 22:12:54 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(诸葛亮觉醒技能,剩最后一个概率未处理;优化效果5013;增加技能目标范围类型 11-继承主技能目标同横排,12-继承主技能目标同纵排;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5013.py |   30 +++++++++++----
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py                      |   85 ++++++++++++++++++++++++++++++++++++++++--
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                             |    4 +
 3 files changed, 105 insertions(+), 14 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 0835bf9..8082335 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -1355,7 +1355,9 @@
 SkillTagAim_MainSkillFriend, # 继承主技能友军 8
 SkillTagAim_Male, # 男性 9
 SkillTagAim_Female, # 女性 10
-) = range(11)
+SkillTagAim_MainSkillRow, # 继承主技能目标同横排 11
+SkillTagAim_MainSkillCol, # 继承主技能目标同纵排 12
+) = range(13)
 
 # 技能目标 - 细分
 (
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5013.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5013.py
index 195faae..0b29957 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5013.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_5013.py
@@ -16,8 +16,9 @@
 #-------------------------------------------------------------------------------
 
 import TurnSkill
-import IpyGameDataPY
 import BattleObj
+import TurnBuff
+import GameWorld
 
 def DoBuffEffectLogic(turnFight, batObj, tagObj, effBuff, curEffect, connSkill, connBuff, **kwargs):
     ownerID = effBuff.GetOwnerID()
@@ -28,12 +29,25 @@
         return
     effSkill = effBuff.GetSkillData().GetIpyData()
     skillID = curEffect.GetEffectValue(0) # 技能ID,为0时释放本技能
-    if not skillID:
-        passiveSkill = effSkill
-    else:
-        passiveSkill = IpyGameDataPY.GetIpyGameData("Skill", skillID)
-    if not passiveSkill:
-        return
+    delBuff = curEffect.GetEffectValue(1) # 是否删除buff
+    checkTriggerCnt = curEffect.GetEffectValue(2) # 附加验证触发次数达到x次后释放,0不验证
+    if checkTriggerCnt:
+        triggerCnt = effBuff.GetValue3() + 1
+        effBuff.SetValue3(triggerCnt)
+        if triggerCnt < checkTriggerCnt:
+            GameWorld.DebugLogEx("5013触发次数不足不释放! triggerCnt=%s < %s", triggerCnt, checkTriggerCnt)
+            return
+        
+    addBatDamPer = curEffect.GetEffectValue(3) # 每次触发额外增加技能增伤
+    if addBatDamPer:
+        addBatDamPer *= max(1, effBuff.GetValue3())
+        GameWorld.DebugLogEx("5013触发次数额外增伤! addBatDamPer=%s", addBatDamPer)
+        
+    if delBuff:
+        TurnBuff.DoBuffDel(turnFight, batObj, effBuff, connSkill)
+        
     effectID = curEffect.GetEffectID()
     effSkillID = effSkill.GetSkillID()
-    return TurnSkill.OnUsePassiveSkill(turnFight, buffOwner, batObj, passiveSkill, connSkill, effSkillID, effectID, connBuff)
+    if not skillID:
+        skillID = effSkillID
+    return TurnSkill.OnUsePassiveSkill(turnFight, buffOwner, batObj, skillID, connSkill, effSkillID, effectID, connBuff, addBatDamPer=addBatDamPer)
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 3c7d0fc..ffed692 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -185,7 +185,7 @@
     if SkillCommon.IsBuff(useSkill):
         __doAddBuff(turnFight, curBatObj, useSkill, **kwargs)
     else:
-        __doUseSkill(turnFight, curBatObj, useSkill)
+        __doUseSkill(turnFight, curBatObj, useSkill, **kwargs)
         
     DoAttackResult(turnFight, curBatObj, useSkill, **kwargs)
     
@@ -591,6 +591,64 @@
         
     return aimObjList
 
+def __getSameRowObjList(tagObj):
+    ## 获取目标对应的同排对象列表,只算活着的
+    
+    posNum = tagObj.GetPosNum()
+    inRowNum = ChConfig.GetInRowNum(posNum)
+    inColNum = ChConfig.GetInColNum(posNum)
+    # 优先目标所在纵,为主目标
+    colNumList = range(1, 1 + ChConfig.TurnFightCols)
+    if inColNum in colNumList:
+        colNumList.remove(inColNum)
+        colNumList.insert(0, inColNum)
+        
+    row = inRowNum # 目标玩家所在横排
+    
+    batObjMgr = BattleObj.GetBatObjMgr()
+    batLineup = tagObj.GetBatLineup()
+    aimObjList = []
+    for col in colNumList:
+        pNum = (row - 1) * ChConfig.TurnFightCols + col
+        if pNum not in batLineup.posObjIDDict:
+            continue
+        tagObjID = batLineup.posObjIDDict[pNum]
+        tagBatObj = batObjMgr.getBatObj(tagObjID)
+        if not tagBatObj.IsAlive():
+            continue
+        aimObjList.append(tagBatObj)
+        
+    return aimObjList
+
+def __getSameColObjList(tagObj):
+    ## 获取目标对应的同列对象列表,只算活着的
+    
+    posNum = tagObj.GetPosNum()
+    inRowNum = ChConfig.GetInRowNum(posNum)
+    inColNum = ChConfig.GetInColNum(posNum)
+    
+    rowNumList = range(1, 1 + ChConfig.TurnFightRows)
+    if inRowNum in rowNumList:
+        rowNumList.remove(inRowNum)
+        rowNumList.insert(0, inRowNum)
+        
+    col = inColNum # 目标玩家所在纵排
+    
+    batObjMgr = BattleObj.GetBatObjMgr()
+    batLineup = tagObj.GetBatLineup()
+    aimObjList = []
+    for row in range(1, 1 + ChConfig.TurnFightRows):
+        pNum = (row - 1) * ChConfig.TurnFightCols + col
+        if pNum not in batLineup.posObjIDDict:
+            continue
+        tagObjID = batLineup.posObjIDDict[pNum]
+        tagBatObj = batObjMgr.getBatObj(tagObjID)
+        if not tagBatObj.IsAlive():
+            continue
+        aimObjList.append(tagBatObj)
+        
+    return aimObjList
+
 def GetRelativeObj(turnFight, curBatObj):
     '''获取对位目标,仅用于非技能目标的对位逻辑,如连击、弱疗等相对属性的判断,技能目标统一使用 GetSkillTags
     '''
@@ -684,7 +742,7 @@
         
     return
 
-def __doUseSkill(turnFight, curBatObj, useSkill):
+def __doUseSkill(turnFight, curBatObj, useSkill, **kwargs):
     
     atkType = useSkill.GetAtkType()
     GameWorld.DebugLogEx("__doUseSkill: curID=%s,skillID=%s,atkType=%s", curBatObj.GetID(), useSkill.GetSkillID(), atkType)
@@ -694,7 +752,7 @@
     
     # 通用攻击
     if atkType == 1:
-        SkillModule_1(turnFight, curBatObj, useSkill)
+        SkillModule_1(turnFight, curBatObj, useSkill, **kwargs)
     # 治疗
     if atkType == 2:
         SkillModule_2(turnFight, curBatObj, useSkill)
@@ -789,7 +847,7 @@
     Sync_PropertyRefreshView(turnFight, curBatObj, ChConfig.AttrID_HP, updHP, diffValue, diffType, skillID, relatedSkillID, hurtTypes)
     return
 
-def SkillModule_1(turnFight, curBatObj, useSkill):
+def SkillModule_1(turnFight, curBatObj, useSkill, **kwargs):
     ## 通用攻击,单攻、群攻
     
     addPer = 0
@@ -805,7 +863,10 @@
             addPer = addPerMax
         GameWorld.DebugLogEx("司马懿特殊潜能技能额外增加比例: frozenCnt=%s,addPer=%s" % (frozenCnt, addPer))
         
-    addBatDamPer = TurnPassive.GetTriggerEffectValue(turnFight, curBatObj, None, ChConfig.PassiveEff_AddBatDamPerByLayer, useSkill)
+    addBatDamPer = 0
+    if "addBatDamPer" in kwargs:
+        addBatDamPer += kwargs.pop("addBatDamPer", 0)
+    addBatDamPer += TurnPassive.GetTriggerEffectValue(turnFight, curBatObj, None, ChConfig.PassiveEff_AddBatDamPerByLayer, useSkill)
     
     # 计算伤害
     calcHurtResults = []
@@ -1978,6 +2039,20 @@
         GameWorld.DebugLogEx("被动触发技能,针对来源友军! effSkillID=%s,effectID=%s,passiveSkillID=%s,bySkillID=%s,byFriendID=%s", 
                              effSkillID, effectID, passiveSkillID, bySkillID, byFriendObj.GetID())
         isOK = OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=batType, bySkill=connSkill, byBuff=connBuff, **kwargs)
+    # 继承主技能目标同横排 11
+    elif tagAim == ChConfig.SkillTagAim_MainSkillRow:
+        if not tagObj:
+            return
+        GameWorld.DebugLogEx("被动触发技能,针对目标同排对象! effSkillID=%s,effectID=%s,passiveSkillID=%s,bySkillID=%s", effSkillID, effectID, passiveSkillID, bySkillID)
+        passiveTagObjList = __getSameRowObjList(tagObj)
+        isOK = OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=batType, bySkill=connSkill, byBuff=connBuff, **kwargs)
+    # 继承主技能目标同纵排 12
+    elif tagAim == ChConfig.SkillTagAim_MainSkillCol:
+        if not tagObj:
+            return
+        GameWorld.DebugLogEx("被动触发技能,针对目标同纵对象! effSkillID=%s,effectID=%s,passiveSkillID=%s,bySkillID=%s", effSkillID, effectID, passiveSkillID, bySkillID)
+        passiveTagObjList = __getSameColObjList(tagObj)
+        isOK = OnUseSkill(turnFight, batObj, passiveSkill, passiveTagObjList, batType=batType, bySkill=connSkill, byBuff=connBuff, **kwargs)
     else:
         GameWorld.DebugLogEx("被动触发技能,重新锁定目标! effSkillID=%s,effectID=%s,passiveSkillID=%s,bySkillID=%s", effSkillID, effectID, passiveSkillID, bySkillID)
         isOK = OnUseSkill(turnFight, batObj, passiveSkill, batType=batType, bySkill=connSkill, byBuff=connBuff, **kwargs)

--
Gitblit v1.8.0