From f6e55772b80bf536223e6e949e28fb7b1812a54d Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期五, 19 九月 2025 12:02:36 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(甘夫人潜能1、3;增加使用技能后触发方式9;层级buff属性支持;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py | 51 ++++++++++---------------
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 9 +++-
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 4 +-
3 files changed, 28 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 0594b0b..8832fed 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4278,8 +4278,8 @@
TriggerWay_HeroActionStart, # 武将行动前 6
TriggerWay_HeroActionEnd, # 武将行动后 7
TriggerWay_CalcEffValue, # 统计计算效果值时 8
-TriggerWay_9, # 9
-TriggerWay_AttackOverDirect, # 直接攻击后 (非buff攻击)10
+TriggerWay_UseSkillOver, # 使用技能后(每个目标触发一次)9
+TriggerWay_AttackOverDirect, # 直接攻击后(除dot或buff外的攻击,每个目标触发一次)10
TriggerWay_BeAttackedDirect, # 受到直接攻击时 (非buff攻击)11
TriggerWay_ShieldBroken, # 承伤盾被击破时 12
TriggerWay_CurSkillEff, # 本技能/buff释放后,一般用于本技能/buff释放后触发,仅该技能释放后有效 13
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
index b75f844..e8240c1 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnBuff.py
@@ -100,11 +100,11 @@
if buff.GetOwnerID() != ownerID:
continue
buffID = buff.GetBuffID()
+ nowLayerCnt = buff.GetLayer()
GameWorld.DebugLog(" 已经存在该buff: buffID=%s,skillTypeID=%s,ownerID=%s,buffRepeat=%s" % (buffID, skillTypeID, ownerID, buffRepeat))
updLayerCnt = addLayerCnt
if buffRepeat == 3: # 叠加层级
- nowLayerCnt = buff.GetLayer()
maxLayerCnt = buffSkill.GetLayerMax()
updLayerCnt = nowLayerCnt + addLayerCnt
if maxLayerCnt and updLayerCnt > maxLayerCnt:
@@ -123,6 +123,8 @@
else:
SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID, isNewAdd=True)
+ if nowLayerCnt != updLayerCnt:
+ RefreshBuffEffect(turnFight, batObj, buff, False)
break
return True
@@ -157,58 +159,44 @@
else:
SyncBuffRefresh(turnFight, batObj, buff, relatedSkillID, isNewAdd=True)
- DoBuffAddOver(turnFight, batObj, buffSkill, buff, buffOwner)
+ RefreshBuffEffect(turnFight, batObj, buff, True)
return
-def DoBuffAddOver(turnFight, batObj, buffSkill, addBuff, buffOwner):
- ## buff添加成功后处理
+def RefreshBuffEffect(turnFight, batObj, curBuff, isNewBuff=False):
+ ## 刷新buff效果
isRefreshAttr = False # 是否刷属性
- #atkType = buffSkill.GetAtkType()
- #if atkType:
- # callFunc = GameWorld.GetExecFunc(TurnBuffs, "BuffAtkType_%d.%s" % (atkType, "OnBuffAddOver"))
- # if callFunc:
- # callFunc(turnFight, batObj, buffSkill, addBuff, buffOwner)
-
+ skillData = curBuff.GetSkillData()
passiveEffMgr = batObj.GetPassiveEffManager()
# buff效果加入
- for effectIndex in range(0, buffSkill.GetEffectCount()):
- curEffect = buffSkill.GetEffect(effectIndex)
+ for effectIndex in range(0, skillData.GetEffectCount()):
+ curEffect = skillData.GetEffect(effectIndex)
effectID = curEffect.GetEffectID()
if effectID == 0:
continue
if curEffect.GetTriggerWay():
- if curEffect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf]:
- passiveEffMgr.AddBuffPassiveEffect(addBuff, buffSkill, curEffect)
+ if curEffect.GetTriggerSrc() not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_SkillSelf] and isNewBuff:
+ passiveEffMgr.AddBuffPassiveEffect(curBuff, skillData, curEffect)
elif effectID in ChConfig.AttrIDList:
isRefreshAttr = True
- else:
- callFunc = GameWorld.GetExecFunc(TurnBuffs, "Buff_%d.%s" % (effectID, "OnBuffAddOver"))
- if callFunc:
- callFunc(turnFight, batObj, buffSkill, addBuff, curEffect, buffOwner)
-
if isRefreshAttr:
RefreshBuffAttr(batObj)
return
-def DecBuffLayer(turnFight, batObj, curBuff, decLayer=1, relatedSkillID=0):
- ## 减少buff层级
- curLayer = curBuff.GetLayer()
- if not curLayer:
- return
- updLayer = max(0, curLayer - decLayer)
- curBuff.SetLayer(updLayer)
+def DoBuffLayerChange(turnFight, batObj, curBuff, updLayer, relatedSkill=None):
+ ## buff层级变更
if updLayer > 0:
+ curBuff.SetLayer(updLayer)
+ relatedSkillID = relatedSkill.GetSkillID() if relatedSkill else 0
SyncBuffRefresh(turnFight, batObj, curBuff, relatedSkillID)
+ RefreshBuffEffect(turnFight, batObj, curBuff, False)
return
- objID = batObj.GetID()
- buffID = curBuff.GetBuffID()
- SyncBuffDel(turnFight, objID, buffID, relatedSkillID)
+ DoBuffDel(turnFight, batObj, curBuff, relatedSkill)
return
def DoBuffDel(turnFight, batObj, curBuff, relatedSkill=None, afterLogic=False, tagObj=None):
@@ -303,6 +291,7 @@
buffMgr = batObj.GetBuffManager()
for index in range(buffMgr.GetBuffCount()):
buff = buffMgr.GetBuffByIndex(index)
+ layer = max(1, buff.GetLayer())
skillData = buff.GetSkillData()
for eIndex in range(skillData.GetEffectCount()):
effect = skillData.GetEffect(eIndex)
@@ -310,13 +299,13 @@
if effID not in ChConfig.AttrIDList:
continue
attrID = effID
- attrValue = effect.GetEffectValue(0)
+ attrValue = effect.GetEffectValue(0) * layer
calcType = effect.GetEffectValue(1)
if calcType == 2: # 减少,其他默认增加
attrValue = -attrValue
buffAttrDict[attrID] = buffAttrDict.get(attrID, 0) + attrValue
- GameWorld.DebugLog(" __addBuffAttr buffAttrDict=%s" % buffAttrDict)
+ GameWorld.DebugLog(" buffAttrDict=%s" % buffAttrDict)
objID = batObj.GetID()
# 先计算百分比加成或降低的
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 69bc764..f22dcf8 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -766,14 +766,17 @@
for tagObj in useSkill.GetTagObjList():
tagID = tagObj.GetID()
- if tagID == curID or tagID in missObjIDList:
- # 自己或对方闪避了不再触发被动
+ if tagID in missObjIDList:
continue
# 直接攻击
if isUseSkill and not SkillCommon.IsBuff(useSkill) and useSkill.GetSkillType() in [ChConfig.Def_SkillType_Atk]:
TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_AttackOverDirect, tagObj, connSkill=useSkill)
TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeAttackedDirect, curObj, connSkill=useSkill)
+
+ # 使用技能后
+ if isUseSkill:
+ TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_UseSkillOver, tagObj, connSkill=useSkill)
if killObjList:
tagObj = killObjList[0]
@@ -1237,7 +1240,7 @@
parryYJBuff = buffMgr.FindBuffByState(ChConfig.BatObjState_ParryYJ)
if parryYJBuff and parryYJBuff.GetLayer():
GameWorld.DebugLog("格挡印记格挡了: buffID=%s,buffLayer=%s" % (parryYJBuff.GetBuffID(), parryYJBuff.GetLayer()))
- TurnBuff.DecBuffLayer(turnFight, defObj, parryYJBuff, 1, curSkill.GetSkillID())
+ TurnBuff.DoBuffLayerChange(turnFight, defObj, parryYJBuff, parryYJBuff.GetLayer() - 1, curSkill)
return True
aParryRateDef = atkObj.GetBatAttrValue(ChConfig.AttrID_ParryRateDef)
--
Gitblit v1.8.0