From 985bdf70fd0022733f75bf2106e69c6de77c26b1 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 28 十一月 2025 17:29:51 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(卑弥呼所有技能;技能表增加字段Buff保留-BuffRetain,支持死亡保留、复活保留;增加触发方式42-大回合开始时(死亡后有效);增加属性ID 73复活生命加成、74复活怒气加成;优化效果6014-支持失败次数额外概率;优化死亡、复活时的buff处理;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 56 ++++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 42 insertions(+), 14 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 4cf9bae..dad7fca 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -61,8 +61,12 @@
return
if not curBatObj.IsAlive():
- return
-
+ if useSkill.GetSkillType() == ChConfig.Def_SkillType_Revive and useSkill.GetTagAim() == ChConfig.SkillTagAim_Self:
+ GameWorld.DebugLog("死亡时使用复活自己的技能! skillID=%s" % skillID)
+ else:
+ # 其他技能死亡状态下无法释放
+ return
+
objID = curBatObj.GetID()
if hasattr(useSkill, "GetRemainTime") and useSkill.GetRemainTime() > 0:
@@ -85,10 +89,15 @@
rate = useSkill.GetHappenRate()
if rate:
rate += TurnPassive.GetTriggerEffectValue(turnFight, curBatObj, None, ChConfig.PassiveEff_AddSkillRate, useSkill)
+ isRemove = False
for tagObj in tagObjList[::-1]:
- if not GameWorld.CanHappen(rate, ChConfig.Def_MaxRateValue):
+ if not curBatObj.IsSkillCanHappen(skillID, rate):
tagObjList.remove(tagObj)
-
+ isRemove = True
+ GameWorld.DebugLog(" 概率不触发,移除目标! rate=%s,skillID=%s,tagID=%s" % (rate, skillID, tagObj.GetID()))
+ if not tagObjList and isRemove:
+ return
+
if not tagObjList:
# 可扩展其他目标选择,如复活技能没有死亡单位时则使用另外的效果
GameWorld.DebugLog("找不到技能目标! skillID=%s,mapID=%s,funcLineID=%s" % (skillID, turnFight.mapID, turnFight.funcLineID), turnFight.playerID)
@@ -862,21 +871,35 @@
def SkillModule_3(turnFight, curBatObj, useSkill):
## 复活
- skillPer = useSkill.GetSkillPer()
+ initXP = IpyGameDataPY.GetFuncCfg("AngerXP", 1)
+ xpMax = IpyGameDataPY.GetFuncCfg("AngerXP", 2)
for tagBatObj in useSkill.GetTagObjList():
- skillPer += GetAddSkillPer(turnFight, curBatObj, tagBatObj, useSkill) # 复活后的血量百分比
+ skillPer = useSkill.GetSkillPer()
+ skillPer += GetAddSkillPer(turnFight, curBatObj, tagBatObj, useSkill)
+
+ reviveHPPer = tagBatObj.GetBatAttrValue(ChConfig.AttrID_ReviveHPPer)
+ reviveHPPer += skillPer
+ reviveHPPer += TurnPassive.GetTriggerEffectValue(turnFight, tagBatObj, curBatObj, ChConfig.AttrID_ReviveHPPer, useSkill)
+
+ reviveXPPer = tagBatObj.GetBatAttrValue(ChConfig.AttrID_ReviveXPPer)
+ reviveXPPer += TurnPassive.GetTriggerEffectValue(turnFight, tagBatObj, curBatObj, ChConfig.AttrID_ReviveXPPer, useSkill)
dID = tagBatObj.GetID()
dMapHP = tagBatObj.GetMaxHP()
- cureHP = int(dMapHP * skillPer / 10000.0)
+
+ cureHP = int(dMapHP * reviveHPPer / 10000.0)
+ xp = initXP + int(xpMax * reviveXPPer / 10000.0)
+
tagBatObj.SetRevive(cureHP)
+ tagBatObj.SetXP(xp, False)
hurtObj = useSkill.AddHurtObj(dID)
hurtObj.AddHurtType(ChConfig.HurtAtkType_Revive)
hurtObj.SetHurtHP(cureHP)
hurtObj.SetLostHP(cureHP)
hurtObj.SetCurHP(tagBatObj.GetHP())
- GameWorld.DebugLog(" 复活: dID=%s,cureHP=%s,skillPer=%s,%s/%s" % (dID, cureHP, skillPer, tagBatObj.GetHP(), dMapHP))
+ GameWorld.DebugLog(" 复活: dID=%s,cureHP=%s,skillPer=%s,reviveHPPer=%s,%s/%s,xp=%s,reviveXPPer=%s"
+ % (dID, cureHP, skillPer, reviveHPPer, tagBatObj.GetHP(), dMapHP, xp, reviveXPPer))
return
@@ -1386,6 +1409,9 @@
# 复活时
for tagObj in reviveObjList:
+ # 同步最新的怒气及buff,血量已经在技能中通知了
+ tagObj.SetXP(tagObj.GetXP())
+ TurnBuff.DoBuffByRevive(turnFight, tagObj)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_Revive, curObj, connSkill=useSkill)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_InBattlefield, curObj, connSkill=useSkill)
@@ -1630,7 +1656,8 @@
GameWorld.DebugLog("继承主技能目标! enhanceSkillID=%s" % enhanceSkillID)
# 额外触发的技能直接在外层检查概率,如果都没有触发则不需要再处理
enhanceRate = enhanceSkillData.GetHappenRate()
- enhanceRate += TurnPassive.GetTriggerEffectValue(turnFight, curBatObj, None, ChConfig.PassiveEff_AddSkillRate, connSkillTypeID=enhanceSkillData.GetSkillTypeID(), connSkillID=enhanceSkillID)
+ if enhanceRate:
+ enhanceRate += TurnPassive.GetTriggerEffectValue(turnFight, curBatObj, None, ChConfig.PassiveEff_AddSkillRate, connSkillTypeID=enhanceSkillData.GetSkillTypeID(), connSkillID=enhanceSkillID)
enchanceTagObjList = []
for tagObj in tagObjList:
tagID = tagObj.GetID()
@@ -1650,7 +1677,7 @@
if checkHeroSex and checkHeroSex != tagObj.GetSex():
GameWorld.DebugLog(" 非目标性别不触发: tagID=%s,sex=%s != %s" % (tagID, tagObj.GetSex(), checkHeroSex))
continue
- if enhanceRate and enhanceRate != ChConfig.Def_MaxRateValue and not GameWorld.CanHappen(enhanceRate, ChConfig.Def_MaxRateValue):
+ if not curBatObj.IsSkillCanHappen(enhanceSkillID, enhanceRate):
GameWorld.DebugLog(" 概率不触发: tagID=%s,enhanceRate=%s" % (tagID, enhanceRate))
continue
@@ -1722,16 +1749,17 @@
isOK = False
# 继承主技能目标
if passiveSkill.GetTagAim() == ChConfig.SkillTagAim_MainSkill:
- happenRate = passiveSkill.GetHappenRate()
- happenRate += TurnPassive.GetTriggerEffectValue(turnFight, batObj, None, ChConfig.PassiveEff_AddSkillRate, passiveSkill)
- GameWorld.DebugLog("被动触发技能,继承主技能目标! effSkillID=%s,effectID=%s,passiveSkillID=%s,happenRate=%s,bySkillID=%s" % (effSkillID, effectID, passiveSkillID, happenRate, bySkillID))
if not tagObj:
return
+ happenRate = passiveSkill.GetHappenRate()
+ if happenRate:
+ happenRate += TurnPassive.GetTriggerEffectValue(turnFight, batObj, None, ChConfig.PassiveEff_AddSkillRate, passiveSkill)
+ GameWorld.DebugLog("被动触发技能,继承主技能目标! effSkillID=%s,effectID=%s,passiveSkillID=%s,happenRate=%s,bySkillID=%s" % (effSkillID, effectID, passiveSkillID, happenRate, bySkillID))
tagID = tagObj.GetID()
if not tagObj.IsAlive() and passiveSkill.GetSkillType() != ChConfig.Def_SkillType_Revive:
GameWorld.DebugLog(" 已被击杀不触发: tagID=%s" % (tagID))
return
- if happenRate and not GameWorld.CanHappen(happenRate, ChConfig.Def_MaxRateValue):
+ if not batObj.IsSkillCanHappen(passiveSkillID, happenRate):
GameWorld.DebugLog(" 概率不触发: tagID=%s,happenRate=%s" % (tagID, happenRate))
return
passiveTagObjList = [tagObj]
--
Gitblit v1.8.0