From a410c052ad4992ca846e3e30f0ccf9ab0b85a1d7 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 17 九月 2025 17:14:32 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(甄姬、曹操技能;增加本次技能万分比效果ID6004;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6004.py |   40 ++++++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py                     |   33 ++++++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py                    |   11 +++--
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py                      |   16 ++++++--
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                             |    1 
 5 files changed, 91 insertions(+), 10 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
index b11f819..59773b3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -37,13 +37,40 @@
         self._AffectBuffDict = {} # 被动buff {(触发方式, 有效来源):{buffID:[effID, ...], ...}, ...}
         return
     
-    def GetPassiveEffByTrigger(self, triggerWay, connSkillTypeID=0):
+    def GetPassiveEffByTrigger(self, triggerWay, connSkill=None, connSkillTypeID=0):
         '''获取可触发的效果列表,技能跟buff根据触发优先级按顺序触发,优先级越高越先执行,相同时技能优先
                         优先级之后有需要再扩展
         @return: [["skill/buff", skillID/buffID, effIDList], ...]
         '''
         effList = []
         
+        if not connSkillTypeID and connSkill:
+            connSkillTypeID = connSkill.GetSkillTypeID()
+            
+        if connSkill:
+            skillID = connSkill.GetSkillID()
+            skillManager = self._batObj.GetSkillManager()
+            # 非对象身上的技能,读取本技能被动触发的效果,一般是主技能拆分的子技能
+            if not skillManager.FindSkillByID(skillID):
+                effIDList = []
+                for index in xrange(connSkill.GetEffectCount()):
+                    effect = connSkill.GetEffect(index)
+                    effectID = effect.GetEffectID()
+                    if effectID == 0:
+                        continue
+                    triggerWay = effect.GetTriggerWay()
+                    triggerSrc = effect.GetTriggerSrc()
+                    if not triggerWay:
+                        continue
+                    if triggerWay == ChConfig.TriggerWay_CurSkillEff:
+                        continue
+                    if triggerSrc != ChConfig.TriggerSrc_SkillSelf:
+                        # 仅添加本技能的
+                        continue
+                    effIDList.append(effectID)
+                if effIDList:
+                    effList.append(["skill", skillID, effIDList])
+                    
         # 优先取关联技能的
         if connSkillTypeID and connSkillTypeID not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_Buff, ChConfig.TriggerSrc_SkillSelf, ChConfig.TriggerSrc_BuffSelf]:
             # 技能
@@ -641,6 +668,7 @@
         self._buffMgr = ObjPool.GetPoolMgr().acquire(BuffManager, self)
         self._passiveEffMgr = ObjPool.GetPoolMgr().acquire(PassiveEffManager, self)
         self._lastHurtValue = 0
+        self._mainTagIDList = [] # 主技能目标ID列表,一般用于技能拆分成多个技能效果时,子技能可能会用到主技能的对象做逻辑
         
         # 统计
         self.hurtStat = 0 # 输出统计
@@ -832,6 +860,9 @@
     def GetLastHurtValue(self): return self._lastHurtValue
     def SetLastHurtValue(self, lastHurtValue): self._lastHurtValue = lastHurtValue
     
+    def GetMainTagIDList(self): return self._mainTagIDList
+    def SetMainTagIDList(self, mainTagIDList): self._mainTagIDList = mainTagIDList
+    
     def StatHurtValue(self, hurtValue):
         ## 统计输出
         self.hurtStat += hurtValue
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index c21574c..8d63b64 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4291,6 +4291,7 @@
 PassiveEff_AddBuffLayerByWeight = 6001 # 根据权重随机添加buff层数 数值1-[[权重,层级], ...]
 PassiveEff_ChangeHurtType = 6002 # 变更伤害类型: 值1-伤害类型;值2-可附加验证处于xx状态 [状态1, 状态2, ...]
 PassiveEff_ChangeHurtMulti = 6003 # 变更伤害倍值(可增可减): 值1-变更倍值;值2-可附加验证处于xx状态 [状态1, 状态2, ...]
+PassiveEff_AddSkillPer = 6004 # 增加本次技能万分比: 值1-增加的万分比;值2-可附加验证处于xx状态 [状态1, 状态2, ...]
 
 # 被动效果ID有触发值时就返回的
 PassiveEffHappenValueList = [PassiveEff_ChangeHurtType]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6004.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6004.py
new file mode 100644
index 0000000..218145c
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6004.py
@@ -0,0 +1,40 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveTrigger.PassiveEff_6004
+#
+# @todo:增加本次技能万分比
+# @author hxp
+# @date 2025-09-17
+# @version 1.0
+#
+# 详细描述: 增加本次技能万分比
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-09-17 17:30"""
+#-------------------------------------------------------------------------------
+
+import BattleObj
+#import GameWorld
+
+def GetHappenValue(attacker, defender, curEffect, effSkill, **skillkwargs):
+    checkInStateList = curEffect.GetEffectValue(1)
+    if checkInStateList:
+        checkMainSkillTag = curEffect.GetEffectValue(2)
+        if checkMainSkillTag:
+            inState = False
+            objMgr = BattleObj.GetBatObjMgr()
+            for tagID in attacker.GetMainTagIDList():
+                tagObj = objMgr.getBatObj(tagID)
+                if tagObj.CheckInState(checkInStateList):
+                    inState = True
+                    #GameWorld.DebugLog("主技能的目标在状态中! tagID=%s,%s" % (tagID, checkInStateList))
+                    break
+            if not inState:
+                #GameWorld.DebugLog("主技能的目标都不在状态中! tagID=%s,%s" % (attacker.GetMainTagIDList(), checkInStateList))
+                return
+        else:
+            if not defender.CheckInState(checkInStateList):
+                return
+    return curEffect.GetEffectValue(0)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
index d8537a5..f91000e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
@@ -35,9 +35,7 @@
     ''' 触发被动效果,可能触发技能、buff,需根据优先级触发
     '''
     passiveEffMgr = batObj.GetPassiveEffManager()
-    if not connSkillTypeID and connSkill:
-        connSkillTypeID = connSkill.GetSkillTypeID()
-    effInfoList = passiveEffMgr.GetPassiveEffByTrigger(triggerWay, connSkillTypeID)
+    effInfoList = passiveEffMgr.GetPassiveEffByTrigger(triggerWay, connSkill, connSkillTypeID)
     if not effInfoList:
         return
     # [["skill/buff", skillID/buffID, effIDList], ...]
@@ -58,6 +56,8 @@
 def __doTriggerPassiveEffectBySkill(turnFight, batObj, tagObj, triggerWay, skillID, effIDList, connSkill=None):
     skillMgr = batObj.GetSkillManager()
     effSkill = skillMgr.FindSkillByID(skillID)
+    if not effSkill and connSkill and connSkill.GetSkillID() == skillID:
+        effSkill = connSkill
     if not effSkill:
         return
     
@@ -114,8 +114,7 @@
     
     triggerWay = ChConfig.TriggerWay_CalcEffValue
     passiveEffMgr = atkObj.GetPassiveEffManager()
-    connSkillTypeID = connSkill.GetSkillTypeID() if connSkill else 0
-    effInfoList = passiveEffMgr.GetPassiveEffByTrigger("%s_%s" % (triggerWay, calcEffID), connSkillTypeID)
+    effInfoList = passiveEffMgr.GetPassiveEffByTrigger("%s_%s" % (triggerWay, calcEffID), connSkill)
     if not effInfoList:
         return 0
     
@@ -130,6 +129,8 @@
         if sign == "skill":
             skillID, effIDList = effInfo[1:]
             effSkill = skillMgr.FindSkillByID(skillID)
+            if not effSkill and connSkill and connSkill.GetSkillID() == skillID:
+                effSkill = connSkill
         elif sign == "buff":
             buffID, effIDList = effInfo[1:]
             effBuff = buffMgr.GetBuff(buffID)
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 25b07f3..c571d8c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -94,8 +94,14 @@
     useSkill.SetBySkill(bySkill)
     
     curBatObj.ClearSkillTempAttr()
+    tagIDList = []
     for tagObj in tagObjList:
+        tagIDList.append(tagObj.GetID())
         tagObj.ClearSkillTempAttr()
+        
+    # 有功能分类的技能都认为是主技能
+    if useSkill.GetFuncType():
+        curBatObj.SetMainTagIDList(tagIDList)
         
     objID = curBatObj.GetID()
     useTag = ""
@@ -448,7 +454,7 @@
     
     skillID = useSkill.GetSkillID()
     for tagBatObj in useSkill.GetTagObjList():
-        cureHP = CalcCureHP(curBatObj, tagBatObj, useSkill, largeNum=True)
+        cureHP = CalcCureHP(turnFight, curBatObj, tagBatObj, useSkill, largeNum=True)
         if cureHP <= 0:
             continue
         
@@ -858,7 +864,7 @@
                 continue
             
         effID = curEffect.GetEffectID()
-        GameWorld.DebugLog("执行额外技能效果: %s, triggerWay=%s,missObjIDList=%s" % (effID, triggerWay, missObjIDList))
+        GameWorld.DebugLog("◆执行额外技能效果: %s, triggerWay=%s,missObjIDList=%s" % (effID, triggerWay, missObjIDList))
         if effID == 5010:
             # 额外技能效果
             __doUseEnhanceSkill(turnFight, curObj, useSkill, curEffect, missObjIDList)
@@ -1088,6 +1094,8 @@
     dHP = defObj.GetHP()
     dDef = 0 if ignoreDef else defObj.GetDef() # 防守方防御力
     
+    atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPer, curSkill)
+    
     aFinalDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_FinalDamPer) # 最终加成
     dFinalDamPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_FinalDamPerDef) # 最终减伤
     
@@ -1313,7 +1321,7 @@
     TurnAttack.AddTurnObjCureHP(atkObj, atkObj, suckHP, cureHP)
     return
 
-def CalcCureHP(userObj, tagObj, curSkill, largeNum=False):
+def CalcCureHP(turnFight, userObj, tagObj, curSkill, largeNum=False):
     ''' 计算治疗值
     '''
     cureType = curSkill.GetCalcType()
@@ -1322,7 +1330,7 @@
     
     cureBaseValue = GetCalcBaseValue(cureType, userObj, tagObj)
     
-    #skillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(userObj, None, curSkill, ChConfig.TriggerType_AddHP)
+    skillPer += TurnPassive.GetTriggerEffectValue(turnFight, userObj, tagObj, ChConfig.PassiveEff_AddSkillPer, curSkill)
     
     # 回合制
     curePer = 0 # 治疗加成

--
Gitblit v1.8.0