From 7195d1d30b81845d21e49461099e370ca4c812e1 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 31 十二月 2025 16:42:57 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(王异所有技能;优化效果6009;增加效果6036;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6036.py |   27 +++++++++++++
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6009.py |   30 ++++++++++++--
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py                    |    2 
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py                      |    7 ++-
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py                             |    3 +
 5 files changed, 59 insertions(+), 10 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 8082335..5eed441 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4068,7 +4068,7 @@
 PassiveEff_AddSkillPerByJob = 6006 # 增加本次技能万分比(验证目标职业)
 PassiveEff_AddSkillTagCnt = 6007 # 增加技能目标数
 PassiveEff_ImmuneControlBuff = 6008 # 生命值低于x%时免疫控制效果
-PassiveEff_MustSuperHit = 6009 # 生命值低于x%时必定暴击
+PassiveEff_MustSuperHit = 6009 # 必定暴击
 PassiveEff_AddSkillPerByHP = 6010 # 增加本次技能万分比(验证当前生命)
 PassiveEff_AddSkillPerByBuffLayer = 6011 # 增加本次技能万分比(根据buff层级)
 PassiveEff_AddBuffLayerMax = 6012 # 添加buff层级上限:  数值1-增加层级上限
@@ -4095,6 +4095,7 @@
 PassiveEff_ImmuneBadBuff = 6033 # 概率免疫buff类型(免疫添加,针对减益、控制、dot类)
 PassiveEff_IgnoreSex = 6034 # 去除性别验证
 PassiveEff_AddBuffTime = 6035 # 增加buff持续时间
+PassiveEff_AddSkillUseCntLimit = 6036 # 增加7009回合数
 
 # 被动效果ID有触发值时就返回的
 PassiveEffHappenValueList = [PassiveEff_ChangeHurtType, PassiveEff_ImmuneControlBuff, PassiveEff_MustSuperHit, PassiveEff_SkillInvalid, 
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6009.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6009.py
index 943909f..60ec420 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6009.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6009.py
@@ -4,18 +4,38 @@
 #
 ##@package Skill.PassiveTrigger.PassiveEff_6009
 #
-# @todo:目标生命值低于x%必定暴击
+# @todo:必定暴击
 # @author hxp
 # @date 2025-09-23
 # @version 1.0
 #
-# 详细描述: 目标生命值低于x%必定暴击
+# 详细描述: 必定暴击
 #
 #-------------------------------------------------------------------------------
 #"""Version = 2025-09-23 19:00"""
 #-------------------------------------------------------------------------------
 
+import GameWorld
+
 def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
-    lowerThanPer = curEffect.GetEffectValue(0)
-    nowPer = defender.GetHP() / float(defender.GetMaxHP()) * 100
-    return 1 if nowPer < lowerThanPer else 0
+    checkValue = curEffect.GetEffectValue(0) # 判断参数
+    checkType = curEffect.GetEffectValue(1) # 判断方式: 0-按目标生命, 1-按目标状态
+    defID = defender.GetID()
+    
+    # 0 - 按目标生命低于x%;参数:单值即可,如30就是30%
+    if checkType == 0:
+        lowerThanPer = checkValue
+        defHP = defender.GetHP()
+        defMaxHP = defender.GetMaxHP()
+        nowPer = defHP / float(defMaxHP) * 100
+        if nowPer < lowerThanPer:
+            GameWorld.DebugLogEx("必定暴击->目标血量低于%s%%: defID=%s,hp:%s/%s", lowerThanPer, defID, defHP, defMaxHP)
+            return 1
+        
+    # 1 - 按目标处于状态;参数:支持多状态列表 [状态1, ...]
+    elif checkType == 1:
+        if defender.CheckInState(checkValue):
+            GameWorld.DebugLogEx("必定暴击->目标处于状态%s: defID=%s", checkValue, defID)
+            return 1
+        
+    return
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6036.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6036.py
new file mode 100644
index 0000000..be43150
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6036.py
@@ -0,0 +1,27 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveTrigger.PassiveEff_6036
+#
+# @todo:增加最多触发回合数(对7009效果提升)
+# @author hxp
+# @date 2025-12-31
+# @version 1.0
+#
+# 详细描述: 增加最多触发回合数(对7009效果提升)
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-12-31 17:00"""
+#-------------------------------------------------------------------------------
+
+def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
+    LimitByTurnAll = skillkwargs.pop("LimitByTurnAll", 0)
+    if LimitByTurnAll:
+        return curEffect.GetEffectValue(0)
+    
+    LimitByTurnPer = skillkwargs.pop("LimitByTurnPer", 0)
+    if LimitByTurnPer:
+        return curEffect.GetEffectValue(1)
+    
+    return 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 fc4ec53..2bb86ef 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
@@ -92,7 +92,7 @@
     # 没有类型的,纯配被动效果,有类型的技能在 OnUseSkill 统一处理回合次数,这里只处理纯被动效果的
     useCntLimit = None
     if not effSkill.GetSkillType(): 
-        useCntLimit = TurnSkill.CheckSkillUseCntLimit(batObj, effSkill)
+        useCntLimit = TurnSkill.CheckSkillUseCntLimit(turnFight, batObj, effSkill)
         if useCntLimit:
             return
         
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 ffed692..46d36ce 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -86,7 +86,7 @@
             GameWorld.DebugLogEx("技能使用处于buff状态限制中! skillID=%s,buffStateGroups=%s,limitState=%s", skillID, buffStateGroups, limitState)
             return
         
-    if CheckSkillUseCntLimit(curBatObj, useSkill):
+    if CheckSkillUseCntLimit(turnFight, curBatObj, useSkill):
         return
     
     #没有指定目标,则按技能自身的目标逻辑
@@ -201,7 +201,7 @@
     useSkill.ResetUseRec()
     return True
 
-def CheckSkillUseCntLimit(batObj, useSkill):
+def CheckSkillUseCntLimit(turnFight, batObj, useSkill):
     ## 检查技能使用次数是否受限
     # @return: 是否受限,None-没有受限效果,False-不受限,True-受限了
     if not hasattr(useSkill, "GetEffectByID"):
@@ -214,12 +214,14 @@
     
     skillID = useSkill.GetSkillID()
     if useCntLimit:
+        useCntLimit += TurnPassive.GetTriggerEffectValue(turnFight, batObj, None, ChConfig.PassiveEff_AddSkillUseCntLimit, useSkill, LimitByTurnAll=1)
         useCnt = batObj.GetSkillUseCnt(skillID)
         if useCnt >= useCntLimit:
             GameWorld.DebugLogEx("技能每场战斗使用次数受限! skillID=%s,useCnt=%s >= %s", skillID, useCnt, useCntLimit)
             return True
         
     if turnUseCntLimit:
+        turnUseCntLimit += TurnPassive.GetTriggerEffectValue(turnFight, batObj, None, ChConfig.PassiveEff_AddSkillUseCntLimit, useSkill, LimitByTurnPer=1)
         turnUseCnt = batObj.GetSkillTurnUseCnt(skillID)
         if turnUseCnt >= turnUseCntLimit:
             GameWorld.DebugLogEx("技能每大回合使用次数受限! skillID=%s,turnUseCnt=%s >= %s", skillID, turnUseCnt, turnUseCntLimit)
@@ -2318,7 +2320,6 @@
 
 def CanSuperHit(turnFight, atkObj, defObj, curSkill):
     if TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_MustSuperHit, curSkill):
-        GameWorld.DebugLogEx("目标血量低于百分x时必定暴击: defID=%s,hp:%s/%s", defObj.GetID(), defObj.GetHP(), defObj.GetMaxHP())
         return True
     
     aSuperHitRate = atkObj.GetBatAttrValue(ChConfig.AttrID_SuperHitRate)

--
Gitblit v1.8.0