From fd46c6afd9024b1739a449786c284461d0394d0b Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期一, 01 十二月 2025 15:05:47 +0800
Subject: [PATCH] 358 【内政】红颜系统-服务端(白骨盈野特殊效果改为固定奖励)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 61 ++++++++++++++++++++++--------
1 files changed, 45 insertions(+), 16 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 04cd13e..3bd8ffd 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)
@@ -211,7 +220,7 @@
def IsNeedSyncSkill(useSkill):
## 使用需要同步B427使用技能
- if 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_Revive, ChConfig.Def_SkillType_CleanBuff]:
return True
if useSkill.GetFuncType() in [ChConfig.Def_SkillFuncType_TurnNormaSkill, ChConfig.Def_SkillFuncType_AngerSkill]:
return True
@@ -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
@@ -1091,11 +1114,12 @@
if useSkill.GetCoolDownTime():
useSkill.SetRemainTime(useSkill.GetCoolDownTime())
+ __doCostZhanchui(turnFight, curBatObj, useSkill) # 先扣除再同步技能
+
# 需先技能使用 - 前端按顺序优先表现技能释放内容,前端需要动作或有伤血则通知
if IsNeedSyncSkill(useSkill):
Sync_UseSkill(turnFight, curBatObj, useSkill)
- __doCostZhanchui(turnFight, curBatObj, useSkill)
__doSkillUserAnger(turnFight, curBatObj, useSkill)
DoBeAttackResult(turnFight, curBatObj, useSkill)
@@ -1386,6 +1410,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 +1657,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 +1678,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 +1750,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