From d7b133b94edd396d691893769c7c91cca8bab13b Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 17 十二月 2025 17:32:00 +0800
Subject: [PATCH] 92 【主界面】主线任务-服务端(增加任务类型22 - 武将招募X次)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py |   74 +++++++++++++++++++++++++++++++------
 1 files changed, 62 insertions(+), 12 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 9b56267..912d3cb 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -59,13 +59,15 @@
     if not skillID:
         return
     
+    byTriggerWay = kwargs["byTriggerWay"] if "byTriggerWay" in kwargs else 0 # 不使用参数名 triggerWay, 防止传递过程中参数混乱
     if not curBatObj.IsAlive():
         if useSkill.GetSkillType() == ChConfig.Def_SkillType_Revive and useSkill.GetTagAim() == ChConfig.SkillTagAim_Self:
             GameWorld.DebugLogEx("死亡时使用复活自己的技能! skillID=%s", skillID)
         else:
-            triggerWay = kwargs.get("triggerWay", 0)
-            if triggerWay in ChConfig.DeadCanTriggerWayList:
-                GameWorld.DebugLogEx("死亡可触发的方式触发技能可释放! skillID=%s,triggerWay=%s", skillID, triggerWay)
+            if byTriggerWay in ChConfig.DeadCanTriggerWayList:
+                GameWorld.DebugLogEx("死亡可触发的方式触发技能可释放! skillID=%s,byTriggerWay=%s", skillID, byTriggerWay)
+            elif batType == ChConfig.TurnBattleType_Enhance:
+                GameWorld.DebugLogEx("死亡状态额外技能不限制,主技能能放的话也就能放! skillID=%s", skillID)                
             else:
                 GameWorld.DebugLogEx("死亡状态下无法释放该技能! skillID=%s", skillID)
                 return
@@ -148,6 +150,7 @@
     useSkill.SetBatType(batType)
     useSkill.SetBySkill(bySkill)
     useSkill.SetByBuff(byBuff)
+    useSkill.SetByTriggerWay(byTriggerWay)
     
     isTurnNormalSkill = SkillCommon.isTurnNormalSkill(useSkill)
     if isTurnNormalSkill:
@@ -176,7 +179,7 @@
     else:
         __doUseSkill(turnFight, curBatObj, useSkill)
         
-    DoAttackResult(turnFight, curBatObj, useSkill)
+    DoAttackResult(turnFight, curBatObj, useSkill, **kwargs)
     
     if useTag:
         Sync_TurnFightTag(turnFight, useTag, 1)
@@ -218,7 +221,8 @@
 
 def IsNeedSyncSkill(useSkill):
     ## 使用需要同步B427使用技能
-    if useSkill.GetSkillType() in [ChConfig.Def_SkillType_Atk, ChConfig.Def_SkillType_Cure, ChConfig.Def_SkillType_Revive, ChConfig.Def_SkillType_CleanBuff]:
+    if useSkill.GetSkillType() in [ChConfig.Def_SkillType_Atk, ChConfig.Def_SkillType_Cure, ChConfig.Def_SkillType_Revive, ChConfig.Def_SkillType_CleanBuff, 
+                                   ChConfig.Def_SkillType_AtkEx]:
         return True
     if useSkill.GetFuncType() in [ChConfig.Def_SkillFuncType_TurnNormaSkill, ChConfig.Def_SkillFuncType_AngerSkill]:
         return True
@@ -845,8 +849,13 @@
     
     calcCureResults = []
     relativeObj = GetRelativeObj(turnFight, curBatObj)
+    multiValue = 1
+    addCureMulti = TurnPassive.GetTriggerEffectValue(turnFight, curBatObj, None, ChConfig.PassiveEff_AddCureMulti, useSkill)
+    if addCureMulti:
+        multiValue += addCureMulti / 100.0
+        
     for tagBatObj in useSkill.GetTagObjList():
-        cureHP = CalcCureHP(turnFight, curBatObj, tagBatObj, useSkill, relativeObj=relativeObj)
+        cureHP = CalcCureHP(turnFight, curBatObj, tagBatObj, useSkill, relativeObj=relativeObj, multiValue=multiValue)
         poisonCureOwner = GetPoisonCureOwner(tagBatObj)
         calcCureResults.append([tagBatObj, cureHP, poisonCureOwner])
         
@@ -1115,7 +1124,7 @@
         
     return
 
-def DoAttackResult(turnFight, curBatObj, useSkill):
+def DoAttackResult(turnFight, curBatObj, useSkill, **kwargs):
     '''执行攻击结果
     @param curBatObj: 施法方或buff归属方
     '''
@@ -1132,6 +1141,14 @@
     if useSkill.GetCoolDownTime():
         useSkill.SetRemainTime(useSkill.GetCoolDownTime())
         
+    if "byEffSkill" in kwargs:
+        byEffSkill = kwargs["byEffSkill"]
+        cdTime = byEffSkill.GetCoolDownTime()
+        if cdTime:
+            if hasattr(byEffSkill, "GetRemainTime"):
+                byEffSkill.SetRemainTime(cdTime)
+                GameWorld.DebugLogEx("提前设置效果技能触发后CD,防止嵌套循环触发! effSkillID=%s,cdTime=%s", byEffSkill.GetSkillID(), cdTime)
+                
     __doCostZhanchui(turnFight, curBatObj, useSkill) # 先扣除再同步技能
     
     # 需先技能使用 - 前端按顺序优先表现技能释放内容,前端需要动作或有伤血则通知
@@ -1313,9 +1330,7 @@
             TurnAttack.SetObjKilled(turnFight, tagObj, curObj, useSkill)
     useSkill.SetKillObjList(killObjList)
     # 判断自己,因为反弹、平摊伤害的原因,有可能自己干死自己
-    selfAlive = curObj.IsAlive()
-    if selfAlive and curObj.GetHP() <= 0:
-        selfAlive = False
+    if curObj.IsAlive() and curObj.GetHP() <= 0:
         dieObjList.append(curObj)
         TurnAttack.SetObjKilled(turnFight, curObj)
         
@@ -1390,7 +1405,7 @@
     effIgnoreObjIDList = missObjIDList + immuneObjIDList
     useSkill.SetEffIgnoreObjIDList(effIgnoreObjIDList)
     # 优先触发本技能额外效果,注:仅该技能释放后该技能的额外效果视为主技能的效果,优先级最高
-    if selfAlive:
+    if curObj not in dieObjList:
         __DoCurSkillEff(turnFight, curObj, useSkill, effIgnoreObjIDList, isUseSkill)
     
     # ========== 以下触发被动 ==========
@@ -1412,6 +1427,7 @@
     if dieObjList:
         for dieObj in dieObjList:
             TurnPassive.OnTriggerPassiveEffect(turnFight, dieObj, ChConfig.TriggerWay_WhenDie, curObj, connSkill=useSkill)
+            __dongbaiRevive(turnFight, dieObj, useSkill) # 写死特殊处理董白复活
             
         for faction in [ChConfig.Def_FactionA, ChConfig.Def_FactionB]:
             batFaction = turnFight.getBatFaction(faction)
@@ -1456,6 +1472,7 @@
         # 掉血时
         if tagID in beHurtObjIDList:
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeHurt, curObj, connSkill=useSkill)
+            #TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_HurtTag, tagObj, connSkill=useSkill) 暂时用不到先屏蔽
             
         #  受到任意效果时(除直接攻击外的任意效果,如buff、dot、治疗、额外怒技)
         if not isAttackDirect:
@@ -1517,6 +1534,33 @@
     if dieObjList:
         turnFight.checkOverByKilled()
         
+    return
+
+def __dongbaiRevive(turnFight, batObj, useSkill):
+    '''特殊处理董白复活: 董白死亡之后的时间,若有敌方单位阵亡,董白以50%血量复活
+    '''
+    faction = batObj.GetFaction()
+    batFaction = turnFight.getBatFaction(ChConfig.Def_FactionA if faction == ChConfig.Def_FactionB else ChConfig.Def_FactionB)
+    if not batFaction:
+        return
+    batLineup = batFaction.getBatlineup(1)
+    if ChConfig.HeroID_Dongbai not in batLineup.heroObjIDDict:
+        return
+    dongbaiObj = BattleObj.GetBatObjMgr().getBatObj(batLineup.heroObjIDDict[ChConfig.HeroID_Dongbai])
+    if not dongbaiObj or dongbaiObj.IsAlive():
+        return
+    skill = dongbaiObj.GetSkillManager().FindSkillByID(ChConfig.SkillID_DongbaiRevive)
+    if not skill:
+        GameWorld.DebugLogEx("董白还还未学习特殊复活技能! %s", ChConfig.SkillID_DongbaiRevive)
+        return
+    enemyDeadCnt = dongbaiObj.GetDictByKey("EnemyDeadCnt") + 1
+    dongbaiObj.SetDict("EnemyDeadCnt", enemyDeadCnt)
+    GameWorld.DebugLogEx("董白记录自身死亡后的敌方阵亡单位数: %s" % enemyDeadCnt)
+    needDeadCnt = skill.GetEffect(0).GetEffectValue(0) # 固定配置在效果1值
+    if enemyDeadCnt < needDeadCnt:
+        return
+    dongbaiObj.SetDict("EnemyDeadCnt", 0)
+    OnUseSkill(turnFight, dongbaiObj, skill, batType=ChConfig.TurnBattleType_Passive, bySkill=useSkill)
     return
 
 def __doCostZhanchui(turnFight, curBatObj, useSkill):
@@ -1889,6 +1933,7 @@
     dFinalDamPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_FinalDamPerDef) # 最终减伤
     
     aFinalDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddFinalDamPer, curSkill)
+    aFinalDamPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.AttrID_FinalDamPer, curSkill)
     
     aNormalSkillPer, dNormalSkillPerDef = 0, 0
     if isTurnNormalSkill:
@@ -2010,6 +2055,7 @@
         
     hurtAtkPerMax = curSkill.GetHurtAtkPerMax() # 最大万分比,限制最终伤害不超过攻击力万分率
     if hurtAtkPerMax:
+        hurtAtkPerMax += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddHurtAtkPerMax, curSkill)
         aAtk = atkObj.GetAtk()
         hurtValueMax = aAtk * hurtAtkPerMax / 10000.0
         hurtValue = min(hurtValue, hurtValueMax)
@@ -2588,7 +2634,7 @@
     TurnAttack.AddTurnObjCureHP(atkObj, atkObj, suckHP, cureHP)
     return
 
-def CalcCureHP(turnFight, userObj, tagObj, curSkill, relativeObj=None):
+def CalcCureHP(turnFight, userObj, tagObj, curSkill, relativeObj=None, multiValue=1):
     ''' 计算治疗值
     '''
     
@@ -2629,6 +2675,10 @@
         cureHP += cureHPEx
         GameWorld.DebugLogEx("    额外治疗值(%s): cureType=%s,baseValue=%s,skillPer=%s,cureHP=%s", cureHPEx, cureType, baseValue, skillPer, cureHP)
         
+    if multiValue and multiValue != 1:
+        cureHP = int(cureHP * multiValue)
+        GameWorld.DebugLogEx("    治疗倍值: cureHP=%s,multiValue=%s", cureHP, multiValue)
+        
     hurtShareEff = curSkill.GetEffectByID(ChConfig.SkillEff_HurtShare)
     if hurtShareEff:
         tagCnt = max(1, len(curSkill.GetTagObjList()))

--
Gitblit v1.8.0