From a410c052ad4992ca846e3e30f0ccf9ab0b85a1d7 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期三, 17 九月 2025 17:14:32 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(甄姬、曹操技能;增加本次技能万分比效果ID6004;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6004.py | 40 ++++++++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py | 33 ++++++++++++++++
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py | 11 +++--
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 16 ++++++--
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py | 1
5 files changed, 91 insertions(+), 10 deletions(-)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
index b11f819..59773b3 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -37,13 +37,40 @@
self._AffectBuffDict = {} # 被动buff {(触发方式, 有效来源):{buffID:[effID, ...], ...}, ...}
return
- def GetPassiveEffByTrigger(self, triggerWay, connSkillTypeID=0):
+ def GetPassiveEffByTrigger(self, triggerWay, connSkill=None, connSkillTypeID=0):
'''获取可触发的效果列表,技能跟buff根据触发优先级按顺序触发,优先级越高越先执行,相同时技能优先
优先级之后有需要再扩展
@return: [["skill/buff", skillID/buffID, effIDList], ...]
'''
effList = []
+ if not connSkillTypeID and connSkill:
+ connSkillTypeID = connSkill.GetSkillTypeID()
+
+ if connSkill:
+ skillID = connSkill.GetSkillID()
+ skillManager = self._batObj.GetSkillManager()
+ # 非对象身上的技能,读取本技能被动触发的效果,一般是主技能拆分的子技能
+ if not skillManager.FindSkillByID(skillID):
+ effIDList = []
+ for index in xrange(connSkill.GetEffectCount()):
+ effect = connSkill.GetEffect(index)
+ effectID = effect.GetEffectID()
+ if effectID == 0:
+ continue
+ triggerWay = effect.GetTriggerWay()
+ triggerSrc = effect.GetTriggerSrc()
+ if not triggerWay:
+ continue
+ if triggerWay == ChConfig.TriggerWay_CurSkillEff:
+ continue
+ if triggerSrc != ChConfig.TriggerSrc_SkillSelf:
+ # 仅添加本技能的
+ continue
+ effIDList.append(effectID)
+ if effIDList:
+ effList.append(["skill", skillID, effIDList])
+
# 优先取关联技能的
if connSkillTypeID and connSkillTypeID not in [ChConfig.TriggerSrc_Skill, ChConfig.TriggerSrc_Buff, ChConfig.TriggerSrc_SkillSelf, ChConfig.TriggerSrc_BuffSelf]:
# 技能
@@ -641,6 +668,7 @@
self._buffMgr = ObjPool.GetPoolMgr().acquire(BuffManager, self)
self._passiveEffMgr = ObjPool.GetPoolMgr().acquire(PassiveEffManager, self)
self._lastHurtValue = 0
+ self._mainTagIDList = [] # 主技能目标ID列表,一般用于技能拆分成多个技能效果时,子技能可能会用到主技能的对象做逻辑
# 统计
self.hurtStat = 0 # 输出统计
@@ -832,6 +860,9 @@
def GetLastHurtValue(self): return self._lastHurtValue
def SetLastHurtValue(self, lastHurtValue): self._lastHurtValue = lastHurtValue
+ def GetMainTagIDList(self): return self._mainTagIDList
+ def SetMainTagIDList(self, mainTagIDList): self._mainTagIDList = mainTagIDList
+
def StatHurtValue(self, hurtValue):
## 统计输出
self.hurtStat += hurtValue
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
index c21574c..8d63b64 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/ChConfig.py
@@ -4291,6 +4291,7 @@
PassiveEff_AddBuffLayerByWeight = 6001 # 根据权重随机添加buff层数 数值1-[[权重,层级], ...]
PassiveEff_ChangeHurtType = 6002 # 变更伤害类型: 值1-伤害类型;值2-可附加验证处于xx状态 [状态1, 状态2, ...]
PassiveEff_ChangeHurtMulti = 6003 # 变更伤害倍值(可增可减): 值1-变更倍值;值2-可附加验证处于xx状态 [状态1, 状态2, ...]
+PassiveEff_AddSkillPer = 6004 # 增加本次技能万分比: 值1-增加的万分比;值2-可附加验证处于xx状态 [状态1, 状态2, ...]
# 被动效果ID有触发值时就返回的
PassiveEffHappenValueList = [PassiveEff_ChangeHurtType]
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6004.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6004.py
new file mode 100644
index 0000000..218145c
--- /dev/null
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/PassiveTrigger/PassiveEff_6004.py
@@ -0,0 +1,40 @@
+#!/usr/bin/python
+# -*- coding: GBK -*-
+#-------------------------------------------------------------------------------
+#
+##@package Skill.PassiveTrigger.PassiveEff_6004
+#
+# @todo:增加本次技能万分比
+# @author hxp
+# @date 2025-09-17
+# @version 1.0
+#
+# 详细描述: 增加本次技能万分比
+#
+#-------------------------------------------------------------------------------
+#"""Version = 2025-09-17 17:30"""
+#-------------------------------------------------------------------------------
+
+import BattleObj
+#import GameWorld
+
+def GetHappenValue(attacker, defender, curEffect, effSkill, **skillkwargs):
+ checkInStateList = curEffect.GetEffectValue(1)
+ if checkInStateList:
+ checkMainSkillTag = curEffect.GetEffectValue(2)
+ if checkMainSkillTag:
+ inState = False
+ objMgr = BattleObj.GetBatObjMgr()
+ for tagID in attacker.GetMainTagIDList():
+ tagObj = objMgr.getBatObj(tagID)
+ if tagObj.CheckInState(checkInStateList):
+ inState = True
+ #GameWorld.DebugLog("主技能的目标在状态中! tagID=%s,%s" % (tagID, checkInStateList))
+ break
+ if not inState:
+ #GameWorld.DebugLog("主技能的目标都不在状态中! tagID=%s,%s" % (attacker.GetMainTagIDList(), checkInStateList))
+ return
+ else:
+ if not defender.CheckInState(checkInStateList):
+ return
+ return curEffect.GetEffectValue(0)
diff --git a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
index d8537a5..f91000e 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnPassive.py
@@ -35,9 +35,7 @@
''' 触发被动效果,可能触发技能、buff,需根据优先级触发
'''
passiveEffMgr = batObj.GetPassiveEffManager()
- if not connSkillTypeID and connSkill:
- connSkillTypeID = connSkill.GetSkillTypeID()
- effInfoList = passiveEffMgr.GetPassiveEffByTrigger(triggerWay, connSkillTypeID)
+ effInfoList = passiveEffMgr.GetPassiveEffByTrigger(triggerWay, connSkill, connSkillTypeID)
if not effInfoList:
return
# [["skill/buff", skillID/buffID, effIDList], ...]
@@ -58,6 +56,8 @@
def __doTriggerPassiveEffectBySkill(turnFight, batObj, tagObj, triggerWay, skillID, effIDList, connSkill=None):
skillMgr = batObj.GetSkillManager()
effSkill = skillMgr.FindSkillByID(skillID)
+ if not effSkill and connSkill and connSkill.GetSkillID() == skillID:
+ effSkill = connSkill
if not effSkill:
return
@@ -114,8 +114,7 @@
triggerWay = ChConfig.TriggerWay_CalcEffValue
passiveEffMgr = atkObj.GetPassiveEffManager()
- connSkillTypeID = connSkill.GetSkillTypeID() if connSkill else 0
- effInfoList = passiveEffMgr.GetPassiveEffByTrigger("%s_%s" % (triggerWay, calcEffID), connSkillTypeID)
+ effInfoList = passiveEffMgr.GetPassiveEffByTrigger("%s_%s" % (triggerWay, calcEffID), connSkill)
if not effInfoList:
return 0
@@ -130,6 +129,8 @@
if sign == "skill":
skillID, effIDList = effInfo[1:]
effSkill = skillMgr.FindSkillByID(skillID)
+ if not effSkill and connSkill and connSkill.GetSkillID() == skillID:
+ effSkill = connSkill
elif sign == "buff":
buffID, effIDList = effInfo[1:]
effBuff = buffMgr.GetBuff(buffID)
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 25b07f3..c571d8c 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -94,8 +94,14 @@
useSkill.SetBySkill(bySkill)
curBatObj.ClearSkillTempAttr()
+ tagIDList = []
for tagObj in tagObjList:
+ tagIDList.append(tagObj.GetID())
tagObj.ClearSkillTempAttr()
+
+ # 有功能分类的技能都认为是主技能
+ if useSkill.GetFuncType():
+ curBatObj.SetMainTagIDList(tagIDList)
objID = curBatObj.GetID()
useTag = ""
@@ -448,7 +454,7 @@
skillID = useSkill.GetSkillID()
for tagBatObj in useSkill.GetTagObjList():
- cureHP = CalcCureHP(curBatObj, tagBatObj, useSkill, largeNum=True)
+ cureHP = CalcCureHP(turnFight, curBatObj, tagBatObj, useSkill, largeNum=True)
if cureHP <= 0:
continue
@@ -858,7 +864,7 @@
continue
effID = curEffect.GetEffectID()
- GameWorld.DebugLog("执行额外技能效果: %s, triggerWay=%s,missObjIDList=%s" % (effID, triggerWay, missObjIDList))
+ GameWorld.DebugLog("◆执行额外技能效果: %s, triggerWay=%s,missObjIDList=%s" % (effID, triggerWay, missObjIDList))
if effID == 5010:
# 额外技能效果
__doUseEnhanceSkill(turnFight, curObj, useSkill, curEffect, missObjIDList)
@@ -1088,6 +1094,8 @@
dHP = defObj.GetHP()
dDef = 0 if ignoreDef else defObj.GetDef() # 防守方防御力
+ atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPer, curSkill)
+
aFinalDamPer = atkObj.GetBatAttrValue(ChConfig.AttrID_FinalDamPer) # 最终加成
dFinalDamPerDef = defObj.GetBatAttrValue(ChConfig.AttrID_FinalDamPerDef) # 最终减伤
@@ -1313,7 +1321,7 @@
TurnAttack.AddTurnObjCureHP(atkObj, atkObj, suckHP, cureHP)
return
-def CalcCureHP(userObj, tagObj, curSkill, largeNum=False):
+def CalcCureHP(turnFight, userObj, tagObj, curSkill, largeNum=False):
''' 计算治疗值
'''
cureType = curSkill.GetCalcType()
@@ -1322,7 +1330,7 @@
cureBaseValue = GetCalcBaseValue(cureType, userObj, tagObj)
- #skillPer += PassiveBuffEffMng.GetPassiveSkillValueByTriggerType(userObj, None, curSkill, ChConfig.TriggerType_AddHP)
+ skillPer += TurnPassive.GetTriggerEffectValue(turnFight, userObj, tagObj, ChConfig.PassiveEff_AddSkillPer, curSkill)
# 回合制
curePer = 0 # 治疗加成
--
Gitblit v1.8.0