From b5425051c9142c17be3953c939f055dc7c11f4ca Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 25 十二月 2025 19:11:42 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(张角所有技能;增加触发方式 56 57;优化效果6014支持直接配置首次增加概率;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6014.py |   14 +++++++-------
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py                      |   17 ++++++++++++-----
 2 files changed, 19 insertions(+), 12 deletions(-)

diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6014.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6014.py
index 34f9b4d..59d5158 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6014.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6014.py
@@ -20,17 +20,17 @@
 
 def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
     addRate = curEffect.GetEffectValue(0)
-    onlyFirstUse = curEffect.GetEffectValue(1) # 是否仅首次释放技能有效
+    firstTimeRate = curEffect.GetEffectValue(1) # 首次释放增加概率万分率
     skillID = connSkill.GetSkillID() if connSkill else skillkwargs.get("connSkillID", 0)
-    if onlyFirstUse:
+    if firstTimeRate:
         if not skillID:
             #GameWorld.DebugLog("没有增加概率的技能ID! %s" % skillkwargs)
             return
         useCnt = attacker.GetSkillUseCnt(skillID)
-        if useCnt > 0:
-            GameWorld.DebugLog("技能非首次使用不增加额外概率! skillID=%s,useCnt=%s" % (skillID, useCnt))
-            return
-        
+        if useCnt <= 0:
+            addRate = firstTimeRate
+            GameWorld.DebugLogEx("技能首次使用增加额外概率! skillID=%s,useCnt=%s,addRate=%s", skillID, useCnt, addRate)
+            
     failAddRateEx = curEffect.GetEffectValue(2) # 失败次数额外增加概率
     if failAddRateEx:
         failCnt = attacker.GetSkillHappenFailCnt(skillID)
@@ -39,7 +39,7 @@
             addRate = ChConfig.Def_MaxRateValue # 强制增加满概率
             GameWorld.DebugLog("技能概率失败次数必定成功: mustHappenFailCnt=%s,failCnt=%s,addRate=%s" % (mustHappenFailCnt, failCnt, addRate))
         elif failCnt > 0:
-            addRate = failAddRateEx * failCnt
+            addRate += failAddRateEx * failCnt
             GameWorld.DebugLog("技能概率失败次数增加概率: failAddRateEx=%s,failCnt=%s,addRate=%s" % (failAddRateEx, failCnt, addRate))
             
     if effBuff:
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 019e82f..3399483 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -1367,7 +1367,7 @@
     
     # 统计伤血,可能单个技能对同一目标造成多次伤害
     totalHurtValue = 0
-    isSuckHP = False
+    suckObjIDList = [] # 吸血的对象ID列表
     missObjIDList, immuneObjIDList = [], [] # 闪避、免疫对象ID列表
     stunObjIDList, superHitObjIDList, parryObjIDList = [], [], []
     beHurtObjIDList = [] # 受伤的对象ID列表
@@ -1425,9 +1425,10 @@
             if tagObj not in caorenProtectList:
                 caorenProtectList.append(tagObj)
                 
-        if hurtObj.GetSuckHP() > 0:
-            isSuckHP = True
-            
+        if hurtObj.GetSuckHP() > 0 and not hurtObj.HaveHurtType(ChConfig.HurtAtkType_PoisonCureSuck):
+            if hurtObjID not in suckObjIDList:
+                suckObjIDList.append(hurtObjID)
+                
     # 判断自己死亡,因为反弹、平摊伤害的原因,有可能自己干死自己
     if curObj.IsAlive() and curObj.GetHP() <= 0:
         if curObj.CanNoDead():
@@ -1447,7 +1448,7 @@
         DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_SuperHit, relatedSkillID)
     if stunObjIDList:
         DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_Stun, relatedSkillID)
-    if isSuckHP:
+    if suckObjIDList:
         DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_SuckHP, relatedSkillID)
         
     # 结算副本相关的攻击结果,仅主动发起玩家阵容武将触发
@@ -1594,6 +1595,12 @@
             TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeParry, tagObj, connSkill=useSkill)
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Parry, curObj, connSkill=useSkill)
             
+        # 吸血
+        if tagID in suckObjIDList:
+            if not triggerOne:
+                TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_SuckHPOne, tagObj, connSkill=useSkill)
+            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeSuckHP, curObj, connSkill=useSkill)
+            
         # 连击
         if batType == ChConfig.TurnBattleType_Combo:
             TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Combo, tagObj, connSkill=useSkill)

--
Gitblit v1.8.0