From d624a48d2b11c1c2847764c3224319e702613f4b Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 26 九月 2025 10:34:55 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(丁奉反伤,孙鲁育技能;增加释放方式1004 - 反伤盾/荆棘;增加buff状态定义:21-承伤盾,22-反伤盾;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuffs/BuffAtkType_1004.py | 23 +++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 78 +++++++++++++++++++++-----------------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 5 ++
3 files changed, 70 insertions(+), 36 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index 91097da..f4b0eb3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -3157,7 +3157,10 @@
BatObjState_Chaos, # 混乱 17
BatObjState_18, # 权谋 18
BatObjState_FocusFire, # 军令/集火 19
-) = range(20)
+ BatObjState_20, # 贯龙枪 20
+ BatObjState_DamShield, # 承伤盾 21
+ BatObjState_DamBackShield, # 荆棘盾 22
+) = range(1 + 22)
#玩家状态定义,不能超过31个,如超过,需扩展多个key支持
Def_PlayerStateList = (
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuffs/BuffAtkType_1004.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuffs/BuffAtkType_1004.py
new file mode 100644
index 0000000..e7ff6f0
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuffs/BuffAtkType_1004.py
@@ -0,0 +1,23 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.TurnBuffs.BuffAtkType_1004
+#
+# @todo:荆棘盾
+# @author hxp
+# @date 2025-09-26
+# @version 1.0
+#
+# 详细描述: 荆棘盾
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-09-26 10:30"""
+#-------------------------------------------------------------------------------
+
+import TurnSkill
+
+def CalcBuffValue(turnFight, attacker, defender, curSkill):
+ skillPer = curSkill.GetSkillPer()
+ skillPer += TurnSkill.GetAddSkillPer(turnFight, attacker, defender, curSkill)
+ return [skillPer]
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 0e8ae44..dbba18d 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -124,21 +124,20 @@
curBatObj.SetMainTagIDList(tagIDList)
useTag = ""
-
+ # 主技能额外触发的技能可不下发,前端视为仅释放一个主技能
+ if batType != ChConfig.TurnBattleType_Enhance:
+ # 因为可能触发连击,所以标记需带上累计使用技能次数,确保唯一
+ useTag = "Skill_%s_%s_%s" % (objID, skillID, curBatObj.GetSkillUseCnt(skillID) + 1)
+ clientPack = poolMgr.acquire(ChPyNetSendPack.tagSCTurnFightTag)
+ clientPack.Tag = useTag
+ clientPack.Len = len(clientPack.Tag)
+ clientPack.Sign = 0
+ turnFight.addBatPack(clientPack)
+
#这个技能是Buff
if SkillCommon.IsBuff(useSkill):
__doAddBuff(turnFight, curBatObj, useSkill)
else:
- # 主技能额外触发的技能可不下发,前端视为仅释放一个主技能
- if batType != ChConfig.TurnBattleType_Enhance:
- # 因为可能触发连击,所以标记需带上累计使用技能次数,确保唯一
- useTag = "Skill_%s_%s_%s" % (objID, skillID, curBatObj.GetSkillUseCnt(skillID) + 1)
- clientPack = poolMgr.acquire(ChPyNetSendPack.tagSCTurnFightTag)
- clientPack.Tag = useTag
- clientPack.Len = len(clientPack.Tag)
- clientPack.Sign = 0
- turnFight.addBatPack(clientPack)
-
__doUseSkill(turnFight, curBatObj, useSkill)
DoAttackResult(turnFight, curBatObj, useSkill)
@@ -791,8 +790,10 @@
if hurtObj.GetSuckHP() > 0:
isSuckHP = True
- curObj.SetLastHurtValue(totalHurtValue) # 记录最后一次总伤害
-
+ # 记录最后一次总伤害,有伤害目标才记录
+ if useSkill.GetHurtObjList():
+ curObj.SetLastHurtValue(totalHurtValue)
+
# 群攻只触发一次特长
if isSuperHit:
DoHeroSpecialty(turnFight, curObj, ChConfig.HeroSpecialty_SuperHit, relatedSkillID)
@@ -1379,17 +1380,13 @@
if hurtValue <= 0:
return 0, 0, hurtTypes
- if defObj.CheckInState(ChConfig.BatObjState_Wudi):
+ buffMgr = defObj.GetBuffManager()
+ wudiBuffList = buffMgr.FindBuffListByState(ChConfig.BatObjState_Wudi)
+ if wudiBuffList:
hurtTypes |= pow(2, ChConfig.HurtType_Immune) # 添加免疫
- buffMgr = defObj.GetBuffManager()
- for index in range(buffMgr.GetBuffCount()):
- buff = buffMgr.GetBuffByIndex(index)
- if not buff:
- continue
+ for buff in wudiBuffList:
skillData = buff.GetSkillData()
- if skillData.GetCurBuffState() != ChConfig.BatObjState_Wudi:
- continue
- # 记录免疫的积攒伤害
+ # 记录免疫积攒的伤害
buffValue = buff.GetValue1() + buff.GetValue2() * ChConfig.Def_PerPointValue
updBuffValue = buffValue + hurtValue
buff.SetValue1(updBuffValue % ChConfig.Def_PerPointValue)
@@ -1404,18 +1401,14 @@
# 承伤盾承伤,剩余时间短的优先承伤,承伤不影响输出,相当于额外的HP,仅用于抵扣掉血,仅 改变 realHurtHP
realHurtHP = hurtValue
shieldBuffList = []
- buffMgr = defObj.GetBuffManager()
- for index in range(buffMgr.GetBuffCount()):
- buff = buffMgr.GetBuffByIndex(index)
+ for buff in buffMgr.FindBuffListByState(ChConfig.BatObjState_DamShield):
skillData = buff.GetSkillData()
- # 承伤盾
- if SkillCommon.isDamageShieldSkill(skillData):
- remainTime = buff.GetRemainTime() # 剩余回合
- if not skillData.GetLastTime():
- remainTime = 999 # 永久盾
- buffValue = buff.GetValue1() + buff.GetValue2() * ChConfig.Def_PerPointValue # 剩余盾值
- shieldBuffList.append([remainTime, buffValue, buff])
-
+ remainTime = buff.GetRemainTime() # 剩余回合
+ if not skillData.GetLastTime():
+ remainTime = 999 # 永久盾
+ buffValue = buff.GetValue1() + buff.GetValue2() * ChConfig.Def_PerPointValue # 剩余盾值
+ shieldBuffList.append([remainTime, buffValue, buff])
+
if shieldBuffList:
shieldBuffList.sort()
for _, buffValue, buff in shieldBuffList:
@@ -1442,15 +1435,24 @@
def CalcBounceHP(turnFight, atkObj, defObj, hurtObj, curSkill):
'''计算反弹反弹伤害
+ 注:反伤/荆棘暂不做属性支持,仅做buff效果支持
'''
if not atkObj.GetCanAttack():
return
- bounceHP = int(hurtObj.GetHurtHP() * random.uniform(0.1, 0.2))
+ damBackPer = 0
+ buffMgr = defObj.GetBuffManager()
+ for buff in buffMgr.FindBuffListByState(ChConfig.BatObjState_DamBackShield):
+ damBackPer += buff.GetValue1()
+
+ if damBackPer <= 0:
+ return
+
+ bounceHP = int(hurtObj.GetHurtHP() * damBackPer / 10000.0)
if bounceHP <= 0:
return
- GameWorld.DebugLog(" 反弹伤害=%s,%s/%s" % (bounceHP, atkObj.GetHP(), atkObj.GetMaxHP()))
+ GameWorld.DebugLog(" 反弹伤害=%s,%s/%s, damBackPer=%s" % (bounceHP, atkObj.GetHP(), atkObj.GetMaxHP(), damBackPer))
bounceHP, realBounceHP, _ = CalcHurtHPWithBuff(turnFight, defObj, atkObj, curSkill, bounceHP)
if bounceHP <= 0:
GameWorld.DebugLog(" bounceHP=%s" % (bounceHP))
@@ -1511,6 +1513,12 @@
cureHPEx = __calcCureHP(turnFight, userObj, tagObj, curSkill, cureType, skillPer, largeNum)
cureHP += cureHPEx
+ hurtShareEff = curSkill.GetEffectByID(ChConfig.SkillEff_HurtShare)
+ if hurtShareEff:
+ tagCnt = max(1, len(curSkill.GetTagObjList()))
+ cureHP = cureHP / tagCnt
+ GameWorld.DebugLog(" 目标均摊治疗: cureHP=%s,tagCnt=%s" % (cureHP, tagCnt))
+
return max(1, int(cureHP)) # 保底1点
def __calcCureHP(turnFight, userObj, tagObj, curSkill, cureType, skillPer, largeNum=False):
--
Gitblit v1.8.0