From a7ee20f2467c3d04d23ad80ebd25e07b806b5c22 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 03 十一月 2025 10:47:21 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(词条技能1021、1022、1024;增加触发方式25-受到持续伤害,26-敌方单位死亡时,27-己方单位死亡时;优化效果6008可配置免控类型;)

---
 ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py |   89 ++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 80 insertions(+), 9 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 c3fe775..fd38c2c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -61,6 +61,10 @@
     
     objID = curBatObj.GetID()
     
+    if hasattr(useSkill, "GetRemainTime") and useSkill.GetRemainTime() > 0:
+        GameWorld.DebugLog("技能CD中! skillID=%s,RemainTime=%s" % (skillID, useSkill.GetRemainTime()))
+        return
+    
     buffStateGroups = useSkill.GetBuffStateLimit()
     if buffStateGroups:
         limitState = curBatObj.IsInBuffStateGroup(buffStateGroups)
@@ -189,7 +193,11 @@
 
 def IsNeedSyncSkill(useSkill):
     ## 使用需要同步B427使用技能
-    return useSkill.GetSkillType() in [ChConfig.Def_SkillType_Atk, ChConfig.Def_SkillType_Cure, ChConfig.Def_SkillType_CleanBuff]
+    if useSkill.GetSkillType() in [ChConfig.Def_SkillType_Atk, ChConfig.Def_SkillType_Cure, ChConfig.Def_SkillType_CleanBuff]:
+        return True
+    if useSkill.GetFuncType() in [ChConfig.Def_SkillFuncType_TurnNormaSkill, ChConfig.Def_SkillFuncType_AngerSkill]:
+        return True
+    return False
 
 def GetSkillTags(turnFight, curBatObj, useSkill):
     ## 获取技能目标
@@ -811,7 +819,7 @@
         else:
             diffType = 1
             tagXP = tagBatObj.GetXP()
-            diffValue = calcValue
+            diffValue = GetEnhanceXP(tagBatObj, calcValue)
             updValue = tagXP + diffValue
             tagBatObj.SetXP(updValue, False)
             GameWorld.DebugLog("    加怒气: tagID=%s,diffValue=%s,tagXP=%s,updXP=%s" % (tagID, diffValue, tagXP, updValue))
@@ -820,10 +828,10 @@
     if curStealTotal > 0:
         diffType = 1
         curXP = curBatObj.GetXP()
-        diffValue = curStealTotal
+        diffValue = GetEnhanceXP(tagBatObj, curStealTotal)
         updValue = curXP + diffValue
         curBatObj.SetXP(updValue, False)
-        GameWorld.DebugLog("    加总怒气: curID=%s,curStealTotal=%s,curXP=%s,updXP=%s" % (curID, curStealTotal, curXP, updValue))
+        GameWorld.DebugLog("    加总怒气: curID=%s,curStealTotal=%s,curXP=%s,diffValue=%s,updXP=%s" % (curID, curStealTotal, curXP, diffValue, updValue))
         Sync_PropertyRefreshView(turnFight, curBatObj, attrID, updValue, diffValue, diffType, skillID, relatedSkillID)
         
     return
@@ -993,13 +1001,17 @@
             
     # 统计击杀
     killObjList = [] # 击杀其他阵营目标列表
+    dieObjList = [] # 死亡的单位列表
     for tagObj in useSkill.GetTagObjList():
         tagID = tagObj.GetID()
-        if tagObj.IsAlive() and tagObj.GetHP() <= 0 and tagObj.GetFaction() != curObj.GetFaction():
-            killObjList.append(tagObj)
-            TurnAttack.SetObjKilled(turnFight, tagObj, curObj, useSkill)
+        if tagObj.IsAlive() and tagObj.GetHP() <= 0:
+            dieObjList.append(tagObj)
+            if tagObj.GetFaction() != curObj.GetFaction():
+                killObjList.append(tagObj)
+                TurnAttack.SetObjKilled(turnFight, tagObj, curObj, useSkill)
     useSkill.SetKillObjList(killObjList)
     if curObj.IsAlive() and curObj.GetHP() <= 0:
+        dieObjList.append(curObj)
         TurnAttack.SetObjKilled(turnFight, curObj)
         
     # 统计伤血,可能单个技能对同一目标造成多次伤害
@@ -1079,6 +1091,23 @@
             TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_KillOneObj, tagObj, connSkill=useSkill)
         TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_KillTagObj, tagObj, connSkill=useSkill)
         
+    if dieObjList:
+        for faction in [ChConfig.Def_FactionA, ChConfig.Def_FactionB]:
+            batFaction = turnFight.getBatFaction(faction)
+            for lineupNum in batFaction.lineupDict.keys():
+                batLineup = batFaction.getBatlineup(lineupNum)
+                for lineupObjID in batLineup.posObjIDDict.values():
+                    lineupObj = batObjMgr.getBatObj(lineupObjID)
+                    if not lineupObj.IsAlive():
+                        continue
+                    for dieObj in dieObjList:
+                        # 敌方单位死亡时
+                        if lineupObj.GetFaction() != dieObj.GetFaction():
+                            TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_EnemyDie, dieObj, connSkill=useSkill)
+                        # 己方单位死亡时
+                        else:
+                            TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendDie, dieObj, connSkill=useSkill)
+                            
     triggerOne = False
     batType = useSkill.GetBatType()
     isAttackDirect = (isUseSkill and not SkillCommon.IsBuff(useSkill) and useSkill.GetSkillType() in [ChConfig.Def_SkillType_Atk])
@@ -1099,7 +1128,10 @@
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAttackedDirect, curObj, connSkill=useSkill)
         else:
             TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAnyEffect, curObj, connSkill=useSkill)
-            
+            # 受到持续伤害
+            if tagID in beHurtObjIDList:
+                TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeDOTHurt, curObj, connSkill=useSkill)
+                
         # 使用技能后
         if isUseSkill:
             if not triggerOne:
@@ -1186,6 +1218,7 @@
     if posNum <= 0:
         #非主战单位不加
         return
+    addXP = GetEnhanceXP(gameObj, addXP)
     curXP = gameObj.GetXP()
     updXP = curXP + addXP
     gameObj.SetXP(updXP)
@@ -1200,12 +1233,24 @@
     if str(specialty) not in specialtyAddXPDict:
         return
     addXP = specialtyAddXPDict[str(specialty)]
+    addXP = GetEnhanceXP(gameObj, addXP)
     curXP = gameObj.GetXP()
     updXP = curXP + addXP
     gameObj.SetXP(updXP, False)
     GameWorld.DebugLog("        特长加XP: curID=%s,curXP=%s,addXP=%s,updXP=%s,特性=%s" % (gameObj.GetID(), curXP, addXP, updXP, specialty))
     Sync_PropertyRefreshView(turnFight, gameObj, ChConfig.AttrID_XP, updXP, addXP, diffType=1, relatedSkillID=relatedSkillID)
     return
+
+def GetEnhanceXP(gameObj, addXP):
+    ## 获取提升后的xp值
+    addPer = gameObj.GetBatAttrValue(ChConfig.AttrID_XPRecoverPer)
+    # 其他强化、弱化
+    if addPer == 0:
+        return addXP
+    objID = gameObj.GetID()
+    updAddXP = int(addXP * max(10000 + addPer, 0) / 10000.0)
+    GameWorld.DebugLog("怒气恢复提升: objID=%s,addXP=%s,addPer=%s,updAddXP=%s" % (objID, addXP, addPer, updAddXP))
+    return updAddXP
 
 def __DoCurSkillEff(turnFight, curObj, useSkill, effIgnoreObjIDList, isUseSkill):
     ## 执行本技能/buff释放后额外效果
@@ -1253,7 +1298,7 @@
     
     killObjList = useSkill.GetKillObjList()
     if killObjList:
-        invalidSkillID = TurnPassive.GetTriggerEffectValue(turnFight, curBatObj, None, ChConfig.PassiveEff_SkillInvalid, useSkill, 
+        invalidSkillID = TurnPassive.GetTriggerEffectValue(turnFight, curBatObj, None, ChConfig.PassiveEff_SkillInvalid, useSkill,
                                                            triggerWay=ChConfig.TriggerWay_KillOneObj)
         if invalidSkillID and invalidSkillID == enhanceSkillID:
             GameWorld.DebugLog("有击杀目标时该技能无效! enhanceSkillID=%s" % enhanceSkillID)
@@ -1331,6 +1376,10 @@
     passiveSkillID = passiveSkill.GetSkillID()
     if passiveSkillID == bySkillID:
         #GameWorld.DebugLog("###被动触发技能不触发自身,防止死循环! effSkillID=%s,effectID=%s,passiveSkillID=%s" % (effSkillID, effectID, passiveSkillID))
+        return
+    
+    if hasattr(passiveSkill, "GetRemainTime") and passiveSkill.GetRemainTime() > 0:
+        #GameWorld.DebugLog("被动触发技能CD中! skillID=%s,RemainTime=%s" % (passiveSkillID, passiveSkill.GetRemainTime()))
         return
     
     isOK = False
@@ -1896,6 +1945,16 @@
     elif calcType == ChConfig.Def_Calc_HarmSelfHP:
         baseValue = curObj.GetHarmSelfHP()
         GameWorld.DebugLog("根据自残值: %s" % baseValue)
+    elif calcType == ChConfig.Def_Calc_AtkedSkillHurtHP:
+        bySkill = curSkill.GetBySkill()
+        bySkillID = 0
+        if bySkill:
+            bySkillID = bySkill.GetSkillID()
+            curID = curObj.GetID()
+            for hurtObj in bySkill.GetHurtObjList():
+                if curID == hurtObj.GetObjID():
+                    baseValue += hurtObj.GetHurtHP()
+        GameWorld.DebugLog("根据最后受击技能伤害: %s,bySkillID=%s" % (baseValue, bySkillID))
         
     return baseValue
 
@@ -2028,3 +2087,15 @@
     clientPack.RelatedSkillID = relatedSkillID
     turnFight.addBatPack(clientPack)
     return
+
+def Sync_HPRefresh(turnFight, curBatObj):
+    hp, maxHP = curBatObj.GetHP(), curBatObj.GetMaxHP()
+    clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCObjHPRefresh)
+    clientPack.ObjID = curBatObj.GetID()
+    clientPack.HP = hp % ShareDefine.Def_PerPointValue
+    clientPack.HPEx = hp / ShareDefine.Def_PerPointValue
+    clientPack.MaxHP = maxHP % ShareDefine.Def_PerPointValue
+    clientPack.MaxHPEx = maxHP / ShareDefine.Def_PerPointValue
+    turnFight.addBatPack(clientPack)
+    return
+    
\ No newline at end of file

--
Gitblit v1.8.0