From caba629e01f8f603b8e05f588688c40e82eb6c88 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 21 十一月 2025 16:44:33 +0800
Subject: [PATCH] 358 【内政】红颜系统-服务端

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py |   90 +++++++++++++++++++++++++++++++++++----------
 1 files changed, 70 insertions(+), 20 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 63485a9..c505673 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -1207,8 +1207,9 @@
         
     # 统计伤血,可能单个技能对同一目标造成多次伤害
     totalHurtValue = 0
-    isSuperHit, isStun, isSuckHP = False, False, False
+    isSuckHP = False
     missObjIDList, immuneObjIDList = [], [] # 闪避、免疫对象ID列表
+    stunObjIDList, superHitObjIDList, parryObjIDList = [], [], []
     beHurtObjIDList = [] # 受伤的对象ID列表
     for hurtObj in useSkill.GetHurtObjListAll():
         hurtObjID = hurtObj.GetObjID()
@@ -1236,13 +1237,17 @@
                 
         if hurtObj.HaveHurtType(ChConfig.HurtType_Parry):
             DoHeroSpecialty(turnFight, tagObj, ChConfig.HeroSpecialty_Parry, relatedSkillID)
-            
+            if hurtObjID not in parryObjIDList:
+                parryObjIDList.append(hurtObjID)
+                
         if hurtObj.HaveHurtType(ChConfig.HurtType_SuperHit):
-            isSuperHit = True
-            
+            if hurtObjID not in superHitObjIDList:
+                superHitObjIDList.append(hurtObjID)
+                
         if hurtObj.HaveHurtType(ChConfig.HurtType_Stun):
-            isStun = True
-            
+            if hurtObjID not in stunObjIDList:
+                stunObjIDList.append(hurtObjID)
+                
         if hurtObj.GetSuckHP() > 0:
             isSuckHP = True
             
@@ -1251,9 +1256,9 @@
         curObj.SetLastHurtValue(totalHurtValue)
         
     # 群攻只触发一次特长
-    if isSuperHit:
+    if superHitObjIDList:
         DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_SuperHit, relatedSkillID)
-    if isStun:
+    if stunObjIDList:
         DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_Stun, relatedSkillID)
     if isSuckHP:
         DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_SuckHP, relatedSkillID)
@@ -1314,31 +1319,64 @@
         if tagID in beHurtObjIDList:
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeHurt, curObj, connSkill=useSkill)
             
+        #  受到任意效果时(除直接攻击外的任意效果,如buff、dot、治疗、额外怒技)
+        if not isAttackDirect:
+            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAnyEffect, curObj, connSkill=useSkill)
+            
+        # 额外目标不再触发以下内容
+        if isExObj:
+            continue
+        
         # 直接攻击
-        if isAttackDirect and not isExObj:
+        if isAttackDirect:
             if not triggerOne:
                 TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AttackOverDirectOne, tagObj, connSkill=useSkill)
             TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AttackOverDirect, tagObj, connSkill=useSkill)
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAttackedDirect, curObj, connSkill=useSkill)
         # 持续伤害
         elif not isAttackDirect:
-            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAnyEffect, curObj, connSkill=useSkill)
             # 受到持续伤害
-            if tagID in beHurtObjIDList and not isExObj:
+            if tagID in beHurtObjIDList:
                 TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeDOTHurt, curObj, connSkill=useSkill)
                 
         # 使用技能后
-        if isUseSkill and not isExObj:
+        if isUseSkill:
             if not triggerOne:
                 TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_UseSkillOverOne, tagObj, connSkill=useSkill)
             TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_UseSkillOver, tagObj, connSkill=useSkill)
             
+        # 击晕
+        if tagID in stunObjIDList:
+            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Stun, tagObj, connSkill=useSkill)
+            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeStun, curObj, connSkill=useSkill)
+            
+        # 暴击
+        if tagID in superHitObjIDList:
+            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_SuperHit, tagObj, connSkill=useSkill)
+            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeSuperHit, curObj, connSkill=useSkill)
+            
+        # 格挡
+        if tagID in missObjIDList:
+            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeParry, tagObj, connSkill=useSkill)
+            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Parry, curObj, connSkill=useSkill)
+            
+        # 闪避
+        if tagID in missObjIDList:
+            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_BeMiss, tagObj, connSkill=useSkill)
+            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Miss, curObj, connSkill=useSkill)
+            
         # 连击
-        if batType == ChConfig.TurnBattleType_Combo and not isExObj:
+        if batType == ChConfig.TurnBattleType_Combo:
+            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Combo, tagObj, connSkill=useSkill)
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeCombo, curObj, connSkill=useSkill)
         # 追击
-        elif batType == ChConfig.TurnBattleType_Pursue and not isExObj:
+        elif batType == ChConfig.TurnBattleType_Pursue:
+            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Pursue, tagObj, connSkill=useSkill)
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BePursue, curObj, connSkill=useSkill)
+        # 反击
+        elif batType == ChConfig.TurnBattleType_AtkBack:
+            TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AtkBack, tagObj, connSkill=useSkill)
+            TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAtkBack, curObj, connSkill=useSkill)
             
         triggerOne = True # 设置已经触发过一次
         
@@ -1557,7 +1595,7 @@
 
 def OnUsePassiveSkill(turnFight, batObj, tagObj, passiveSkill, connSkill=None, effSkillID=0, effectID=0, connBuff=None):
     '''被动触发使用技能
-    @param passiveSkill: 释放的被动技能
+    @param passiveSkill: 释放的被动技能 或 技能ID
     @param connSkill: 由什么技能引起的
     @param effSkillID: 被动效果所属的技能ID
     @param effectID: 被动效果ID
@@ -1565,6 +1603,14 @@
     '''
     if not passiveSkill:
         return
+    if isinstance(passiveSkill, int):
+        passiveSkillID = passiveSkill
+        passiveSkill = batObj.GetSkillManager().FindSkillByID(passiveSkillID)
+        if not passiveSkill:
+            passiveSkill = IpyGameDataPY.GetIpyGameData("Skill", passiveSkillID)
+        if not passiveSkill:
+            return
+        
     bySkillID = 0
     if connSkill:
         bySkillID = connSkill.GetSkillID()
@@ -1710,8 +1756,10 @@
         dDOTPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_DOTPerDef)
         GameWorld.DebugLog("aDOTPer=%s,dDOTPerDef=%s" % (aDOTPer, dDOTPerDef))
         
-    aAddSkillPer = 0 # 技能增伤
-    aAddSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_SkillPer, curSkill)
+    #aAddSkillPer = 0 # 技能增伤
+    aBatDamPer, dBatDamPerDef = 0, 0 # 战斗增减伤
+    aBatDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_BatDamPer, curSkill)
+    aBatDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddBatDamPerByTagLostHP, curSkill)
     
     # 物法增减伤
     if pmType == IPY_GameWorld.ghtMag: # 法伤
@@ -1756,7 +1804,8 @@
     dAngerSkillPerDef /= 10000.0
     aDOTPer /= 10000.0
     dDOTPerDef /= 10000.0
-    aAddSkillPer /= 10000.0
+    aBatDamPer /= 10000.0
+    dBatDamPerDef /= 10000.0
     aPMDamPer /= 10000.0
     dPMDamPerDef /= 10000.0
     aSuperDamPer /= 10000.0
@@ -1774,8 +1823,8 @@
     
     if calcType != ChConfig.Def_Calc_Attack:
         aAtk = GetCalcBaseValue(calcType, atkObj, defObj, curSkill)
-    GameWorld.DebugLog("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,calcType=%s,aAtk=%s,dDef=%s,dHP=%s/%s,hurtTypes=%s,aAddSkillPer=%s,aFinalDamPer=%s" 
-                       % (atkID, defID, skillID, atkSkillPer, calcType, aAtk, dDef, dHP, dMaxHP, hurtTypes, aAddSkillPer, aFinalDamPer))
+    GameWorld.DebugLog("伤血计算: atkID=%s,defID=%s,skillID=%s,atkSkillPer=%s,calcType=%s,aAtk=%s,dDef=%s,dHP=%s/%s,hurtTypes=%s,aBatDamPer=%s,aFinalDamPer=%s" 
+                       % (atkID, defID, skillID, atkSkillPer, calcType, aAtk, dDef, dHP, dMaxHP, hurtTypes, aBatDamPer, aFinalDamPer))
     GameWorld.DebugLog("aCountry=%s,dCountry=%s,aCountryDamPer=%s,dCountryDamPerDef=%s" % (aCountry, dCountry, aCountryDamPer, dCountryDamPerDef))
     
     if isTurnNormalSkill:
@@ -1832,6 +1881,7 @@
     atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByJob, curSkill)
     atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByBuffLayer, curSkill)
     atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByDeadTeammate, curSkill)
+    atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByBuffState, curSkill)
     return atkSkillPer
 
 def CanSuperHit(turnFight, atkObj, defObj, curSkill):

--
Gitblit v1.8.0