From e80aa0f81f59070d748e1a20410805f0a87bd381 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期日, 14 十二月 2025 17:34:07 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(关银屏所有技能;增加触发类型44-敌军行动后 45-友军行动后;增加效果6022 6023 6024)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py | 78 +++++++++++++++++++-------------------
1 files changed, 39 insertions(+), 39 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 0ba5348..9b56267 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Skill/TurnSkill.py
@@ -27,7 +27,6 @@
import TurnPassive
import TurnAttack
import TurnBuff
-import ObjPool
import FBLogic
import random
@@ -140,12 +139,9 @@
objID, skillID, len(tagObjList), batType, bySkillID, curBatObj.GetHP(), curBatObj.GetMaxHP(), angerOverflow, curXP, oneActionUseCnt)
# 以下为技能可以使用的处理,之后的逻辑默认技能使用成功
- poolMgr = ObjPool.GetPoolMgr()
- usePoolSkill = False
if isinstance(useSkill, IpyGameDataPY.IPY_Skill):
- usePoolSkill = True
# 统一使用 BattleObj.PySkill
- useSkill = poolMgr.acquire(BattleObj.PySkill, useSkill, objID)
+ useSkill = BattleObj.PySkill(useSkill, objID)
useSkill.ResetUseRec()
useSkill.SetTagObjList(tagObjList)
@@ -192,8 +188,6 @@
# 最后重置、回收对象
useSkill.ResetUseRec()
- if usePoolSkill:
- poolMgr.release(useSkill)
return True
def CheckSkillUseCntLimit(batObj, useSkill):
@@ -1018,8 +1012,7 @@
# hurtValue *= (10000 + FinalDamPer) / 10000.0
# GameWorld.DebugLogEx(" 增伤: hurtValue=%s,FinalDamPer=%s", hurtValue, FinalDamPer)
- poolMgr = ObjPool.GetPoolMgr()
- useSkill = poolMgr.acquire(BattleObj.PySkill, skillIpyData, atkID)
+ useSkill = BattleObj.PySkill(skillIpyData, atkID)
useSkill.SetTagObjList([defObj])
useSkill.SetBatType(ChConfig.TurnBattleType_Cot)
@@ -1055,7 +1048,6 @@
Sync_TurnFightTag(turnFight, useTag, 1)
useSkill.ResetUseRec()
- poolMgr.release(useSkill)
return
def SkillModule_6(turnFight, curBatObj, useSkill, opType):
@@ -1287,16 +1279,14 @@
# 优先处理afterLogic,可再预先汇总一些会触发被动的信息
relatedSkillID = useSkill.GetSkillID()
- shieldBrokenList = [] # 记录盾破
+ delBuffAfterEffList = [] # buff消失后要触发的被动,一般用于后置处理的逻辑
afterLogicList = useSkill.GetAfterLogicList()
for logicType, logicData in afterLogicList:
if logicType == ChConfig.AfterLogic_DelBuff:
- buffObjID, buff, tagObjID = logicData
- buffSkillData = buff.GetSkillData()
- buffSkillTypeID = buffSkillData.GetSkillTypeID()
+ buffObjID, buff, tagObjID, afterTriggerData = logicData
TurnBuff.DoBuffDelAfterLogicOver(turnFight, buffObjID, buff, useSkill)
- if SkillCommon.isDamageShieldSkill(buffSkillData):
- shieldBrokenList.append([buffObjID, tagObjID, buffSkillTypeID])
+ if afterTriggerData:
+ delBuffAfterEffList.append([buffObjID, buff, tagObjID, afterTriggerData])
elif logicType == ChConfig.AfterLogic_AddBuff:
batObj = logicData[0]
@@ -1405,11 +1395,13 @@
# ========== 以下触发被动 ==========
- # 破盾时
- for buffObjID, tagObjID, buffSkillTypeID in shieldBrokenList:
+ # buff消失后置处理的被动,优先处理,如破盾,区别于被动方式 ChConfig.TriggerWay_BuffDel(立即触发)
+ for buffObjID, buff, tagObjID, afterTriggerData in delBuffAfterEffList:
+ triggerWay, effInfoList = afterTriggerData
buffObj = batObjMgr.getBatObj(buffObjID)
- tagObj = batObjMgr.getBatObj(tagObjID)
- TurnPassive.OnTriggerPassiveEffect(turnFight, buffObj, ChConfig.TriggerWay_ShieldBroken, tagObj, connSkillTypeID=buffSkillTypeID)
+ tagObj = batObjMgr.getBatObj(tagObjID) # 导致该buff消失的目标
+ GameWorld.DebugLogEx("buff消失后置处理的被动: buffObjID=%s,tagObjID=%s,triggerWay=%s,%s", buffObjID, tagObjID, triggerWay, effInfoList)
+ TurnPassive.OnTriggerPassiveEffList(turnFight, buffObj, triggerWay, tagObj, effInfoList, connSkill=useSkill, connBuff=buff)
# 有击杀时
for index, tagObj in enumerate(killObjList):
@@ -1817,6 +1809,8 @@
batType = curSkill.GetBatType()
changeHurtType = TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_ChangeHurtType, curSkill)
+ if not changeHurtType:
+ changeHurtType = TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_ChangeHurtTypeByBuff, curSkill)
if changeHurtType == 1:
ignoreDef = True
GameWorld.DebugLogEx("强制变更本次伤害为无视防御! skillID=%s", skillID)
@@ -2135,8 +2129,10 @@
defObj, hurtValue, hurtTypes, immuneHurt = hurtInfo[:4]
isEx = hurtInfo[4] if len(hurtInfo) > 4 else 0 # 是否是额外目标
- lostHP = DoLostHP(turnFight, atkObj, defObj, hurtValue, curSkill, lostType, hpCanNegative=True, immuneHurt=immuneHurt)
-
+ lostHP, ignoreShield = DoLostHP(turnFight, atkObj, defObj, hurtValue, curSkill, lostType, hpCanNegative=True, immuneHurt=immuneHurt)
+ if ignoreShield:
+ hurtTypes |= pow(2, ChConfig.HurtAtkType_IgnoreShield)
+
#伤害结构体
defID = defObj.GetID()
if isEx:
@@ -2423,9 +2419,10 @@
@param hpCanNegative: 扣除后的生命是否允许负值
@param immuneHurt: 免疫的伤害值
@param isSkillSelfTag: 是否技能自身的直接目标,如平摊伤害目标、溅射伤害目标这种就不算直接目标
- @return: lostHP
+ @return: lostHP, ignoreShield
'''
+ ignoreShield = None
if immuneHurt > 0:
buffMgr = defObj.GetBuffManager()
wudiBuffList = buffMgr.FindBuffListByState(ChConfig.BatObjState_Wudi)
@@ -2440,7 +2437,7 @@
defObj.GetID(), buff.GetBuffID(), buffSkillID, buffValue, immuneHurt, updBuffValue, lostType)
if hurtValue <= 0:
- return 0
+ return 0, ignoreShield
atkID = atkObj.GetID()
defID = defObj.GetID()
@@ -2451,6 +2448,11 @@
shieldBuffList = []
buffMgr = defObj.GetBuffManager()
for buff in buffMgr.FindBuffListByState(ChConfig.BatObjState_DamShield):
+ if ignoreShield == None:
+ if TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_IgnoreShield, curSkill):
+ ignoreShield = True # 无视承伤盾
+ break
+ ignoreShield = False
skillData = buff.GetSkillData()
remainTime = buff.GetRemainTime() # 剩余回合
if not skillData.GetLastTime():
@@ -2479,7 +2481,9 @@
shieldHurtValue -= decShieldValue # 承伤值
if decShieldValue >= buffValue:
GameWorld.DebugLogEx(" 删除盾: buffID=%s,剩余盾伤=%s", buffID, shieldHurtValue)
- TurnBuff.DoBuffDel(turnFight, defObj, buff, relatedSkill=curSkill, afterLogic=True, tagObj=atkObj)
+ #盾破时buff会被删除,导致绑定在该buff上的被动效果同步被清除,后续就无法触发盾破后被动,固先取出来
+ effInfoList = defObj.GetPassiveEffManager().GetPassiveEffByTrigger(ChConfig.TriggerWay_ShieldBroken, connSkillTypeID=buffSkillID)
+ TurnBuff.DoBuffDel(turnFight, defObj, buff, relatedSkill=curSkill, afterLogic=True, tagObj=atkObj, afterTriggerData=[ChConfig.TriggerWay_ShieldBroken, effInfoList])
else:
updShieldValue = buffValue - decShieldValue
GameWorld.DebugLogEx(" 更新盾: updShieldValue=%s,剩余盾伤=%s", updShieldValue, shieldHurtValue)
@@ -2500,7 +2504,7 @@
GameWorld.DebugLogEx(" 扣血: atkID=%s,defID=%s,hurtValue=%s,lostType=%s,lostHP=%s,dHP=%s,updHP=%s/%s",
atkID, defID, hurtValue, lostType, lostHP, dHP, defObj.GetHP(), defObj.GetMaxHP())
TurnAttack.AddTurnObjHurtValue(atkObj, defObj, hurtValue, lostHP, skillID, lostType)
- return lostHP
+ return lostHP, ignoreShield
def CalcBounceHP(turnFight, atkObj, defObj, hurtObj, curSkill):
'''计算反弹反弹伤害
@@ -2710,8 +2714,7 @@
hurtValue *= (10000 + FinalDamPer) / 10000.0
GameWorld.DebugLogEx(" 增伤: hurtValue=%s,FinalDamPer=%s", hurtValue, FinalDamPer)
- poolMgr = ObjPool.GetPoolMgr()
- useSkill = poolMgr.acquire(BattleObj.PySkill, skillIpyData, atkID)
+ useSkill = BattleObj.PySkill(skillIpyData, atkID)
useSkill.SetTagObjList([defObj])
useSkill.SetBatType(ChConfig.TurnBattleType_Dot)
@@ -2727,12 +2730,11 @@
Sync_TurnFightTag(turnFight, useTag, 1)
useSkill.ResetUseRec()
- poolMgr.release(useSkill)
return
def Sync_TurnFightTag(turnFight, useTag, sign):
## 通知技能标签
- clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCTurnFightTag)
+ clientPack = ChPyNetSendPack.tagSCTurnFightTag()
clientPack.Tag = useTag
clientPack.Len = len(clientPack.Tag)
clientPack.Sign = sign
@@ -2743,8 +2745,7 @@
## 通知释放技能
bySkill = useSkill.GetBySkill()
relatedSkillID = bySkill.GetSkillID() if bySkill else 0
- poolMgr = ObjPool.GetPoolMgr()
- clientPack = poolMgr.acquire(ChPyNetSendPack.tagSCUseSkill)
+ clientPack = ChPyNetSendPack.tagSCUseSkill()
clientPack.ObjID = curBatObj.GetID()
clientPack.PMType = GetPMType(curBatObj, useSkill)
clientPack.BattleType = useSkill.GetBatType()
@@ -2755,7 +2756,7 @@
# 技能的主要伤害
clientPack.HurtList = []
for hurtObj in useSkill.GetHurtObjList():
- hurt = poolMgr.acquire(ChPyNetSendPack.tagSCUseSkillHurt)
+ hurt = ChPyNetSendPack.tagSCUseSkillHurt()
hurt.ObjID = hurtObj.GetObjID()
hurt.AttackTypes = hurtObj.GetHurtTypes()
hurt.HurtHP = hurtObj.GetHurtHP() % ChConfig.Def_PerPointValue
@@ -2767,7 +2768,7 @@
hurt.HurtListEx = []
# 单个伤害的额外伤害,如弹射+平摊伤害
for hurtObjEx in hurtObj.GetHurtObjListEx():
- hurtEx = poolMgr.acquire(ChPyNetSendPack.tagSCUseSkillHurtEx)
+ hurtEx = ChPyNetSendPack.tagSCUseSkillHurtEx()
hurtEx.ObjID = hurtObjEx.GetObjID()
hurtEx.AttackTypes = hurtObjEx.GetHurtTypes()
hurtEx.HurtHP = hurtObjEx.GetHurtHP() % ChConfig.Def_PerPointValue
@@ -2782,7 +2783,7 @@
# 技能的额外伤害,如常规技能的平摊伤害
clientPack.HurtListEx = []
for hurtObjEx in useSkill.GetHurtObjListEx():
- hurtEx = poolMgr.acquire(ChPyNetSendPack.tagSCUseSkillHurtEx)
+ hurtEx = ChPyNetSendPack.tagSCUseSkillHurtEx()
hurtEx.ObjID = hurtObjEx.GetObjID()
hurtEx.AttackTypes = hurtObjEx.GetHurtTypes()
hurtEx.HurtHP = hurtObjEx.GetHurtHP() % ChConfig.Def_PerPointValue
@@ -2797,7 +2798,7 @@
if not clientPack.HurtList:
for tagObj in useSkill.GetTagObjList():
tagID = tagObj.GetID()
- hurt = poolMgr.acquire(ChPyNetSendPack.tagSCUseSkillHurt)
+ hurt = ChPyNetSendPack.tagSCUseSkillHurt()
hurt.ObjID = tagID
hurt.CurHP = tagObj.GetHP() % ChConfig.Def_PerPointValue
hurt.CurHPEx = tagObj.GetHP() / ChConfig.Def_PerPointValue
@@ -2819,8 +2820,7 @@
if attrID not in ChConfig.CDBRefresh_AttrIDDict:
return
refreshType, isBig = ChConfig.CDBRefresh_AttrIDDict[attrID]
- poolMgr = ObjPool.GetPoolMgr()
- clientPack = poolMgr.acquire(ChPyNetSendPack.tagSCObjPropertyRefreshView)
+ clientPack = ChPyNetSendPack.tagSCObjPropertyRefreshView()
clientPack.ObjID = curBatObj.GetID()
clientPack.RefreshType = refreshType
clientPack.AttackTypes = hurtTypes
@@ -2842,7 +2842,7 @@
def Sync_HPRefresh(turnFight, curBatObj):
hp, maxHP = curBatObj.GetHP(), curBatObj.GetMaxHP()
- clientPack = ObjPool.GetPoolMgr().acquire(ChPyNetSendPack.tagSCObjHPRefresh)
+ clientPack = ChPyNetSendPack.tagSCObjHPRefresh()
clientPack.ObjID = curBatObj.GetID()
clientPack.HP = hp % ShareDefine.Def_PerPointValue
clientPack.HPEx = hp / ShareDefine.Def_PerPointValue
--
Gitblit v1.8.0