From 5ca218ac01201f10c196a07b61ef3b1fe59040e5 Mon Sep 17 00:00:00 2001
From: hxp <ale99527@vip.qq.com>
Date: 星期四, 18 九月 2025 18:30:07 +0800
Subject: [PATCH] 129 【战斗】战斗系统-服务端(B427使用技能无伤血时默认发目标;)
---
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py | 72 +++++++++++++++++++++++++++++++----
1 files changed, 63 insertions(+), 9 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 59773b3..433c306 100644
--- a/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
+++ b/ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -47,7 +47,7 @@
if not connSkillTypeID and connSkill:
connSkillTypeID = connSkill.GetSkillTypeID()
- if connSkill:
+ if connSkill and self._batObj.GetID() == connSkill.GetObjID():
skillID = connSkill.GetSkillID()
skillManager = self._batObj.GetSkillManager()
# 非对象身上的技能,读取本技能被动触发的效果,一般是主技能拆分的子技能
@@ -493,7 +493,8 @@
class PySkill():
- def __init__(self, ipyData):
+ def __init__(self, ipyData, objID):
+ self._objID = objID # 该技能谁的
self._skillData = ObjPool.GetPoolMgr().acquire(SklllData, ipyData)
self._calcTime = 0
self._remainTime = 0
@@ -502,6 +503,12 @@
self._hurtList = [] # 本次伤血列表,可能同一个对象有多个伤害,如弹射等 [HurtObj, ...]
self._bySkill = None # 由哪个技能触发的
self._afterLogicList = [] # 技能释放后需要处理逻辑 [[logicType, logicParams], ...]
+
+ # 连击相关
+ self._comboState = 0 # 连击状态 0-未重置,1-初始化连击相关可连击,2-连击已中断
+ self._comboNum = 0 # 连击次数
+ self._missTagIDDict = {} # 单次连续连击中对方已闪避次数 {tagID:missNum, ...}
+ self._parryTagIDDict = {} # 单次连续连击中对方已格挡次数 {tagID:parryNum, ...}
return
def ResetUseRec(self):
@@ -512,6 +519,7 @@
self.ClearHurtObj()
return
+ def GetObjID(self): return self._objID
def GetSkillID(self): return self._skillData.GetSkillID()
def GetSkillTypeID(self): return self._skillData.GetSkillTypeID()
def GetSkillLV(self): return self._skillData.GetSkillLV()
@@ -580,10 +588,44 @@
return hurtObj
def GetHurtObjList(self): return self._hurtList
+ def __commboClear(self):
+ ## 连击相关清空
+ self._comboState = 0
+ self._comboNum = 0
+ self._missTagIDDict = {}
+ self._parryTagIDDict = {}
+ return
+
+ def ComboCheckStart(self, force=False):
+ ## 检查并设置开始连击相关,一般是开始使用技能时调用
+ if not force:
+ if self._comboState == 1:
+ #GameWorld.DebugLog("连击进行中,不重置")
+ return
+ self.__commboClear()
+ self._comboState = 1 # 设置已初始化连击相关
+ #GameWorld.DebugLog("连击重置")
+ return
+
+ def ComboEnable(self): return self._comboState == 1 ## 可否执行连击相关
+
+ def ComboInterrupt(self):
+ ## 连击中断,概率不再触发连击时需要设置中断
+ self._comboState = 2
+ return
+
+ def GetComboNum(self): return self._comboNum # 已连击次数
+ def SetComboNum(self, comboNum): self._comboNum = comboNum
+ def GetTagMissNum(self, tagID): return self._missTagIDDict.get(tagID, 0)
+ def SetTagMissNum(self, tagID, missNum): self._missTagIDDict[tagID] = missNum
+ def GetTagParryNum(self, tagID): return self._parryTagIDDict.get(tagID, 0)
+ def SetTagParryNum(self, tagID, parryNum): self._parryTagIDDict[tagID] = parryNum
+
class SkillManager():
## 战斗对象技能管理器
- def __init__(self):
+ def __init__(self, batObj):
+ self._batObj = batObj
self._skillList = [] # 技能列表 [PySkill, ...]
self._skillDict = {} # {skillID:PySkill, ...}
return
@@ -622,7 +664,7 @@
self.__deleteSkill(curSkill)
# 学新技能
- curSkill = ObjPool.GetPoolMgr().acquire(PySkill, ipyData)
+ curSkill = ObjPool.GetPoolMgr().acquire(PySkill, ipyData, self._batObj.GetID())
self._skillDict[skillID] = curSkill
self._skillList.append(curSkill)
return curSkill
@@ -664,7 +706,7 @@
self._kvDict = {} # 自定义kv字典
self._skillUseCntDict = {} # 技能累计使用次数 {skillID:useCnt, ...}
self._skillTurnUseCntDict = {} # 技能单回合累计使用次数 {skillID:useCnt, ...}
- self._skillMgr = ObjPool.GetPoolMgr().acquire(SkillManager)
+ self._skillMgr = ObjPool.GetPoolMgr().acquire(SkillManager, self)
self._buffMgr = ObjPool.GetPoolMgr().acquire(BuffManager, self)
self._passiveEffMgr = ObjPool.GetPoolMgr().acquire(PassiveEffManager, self)
self._lastHurtValue = 0
@@ -684,9 +726,10 @@
self._initAttrDict = initAttrDict
self._batAttrDict = {}
self._batAttrDict.update(initAttrDict)
+ self.__onUpdBatAttr()
self._skillTempAttrDict = {}
- self._xp = initXP
- self._hp = initAttrDict.get(ChConfig.AttrID_MaxHP, 1)
+ self.SetXP(initXP, False)
+ self.SetHPFull(False)
TurnBuff.RefreshBuffAttr(self)
TurnPassive.RefreshPassive(self)
return
@@ -710,6 +753,7 @@
def ResetBattleEffect(self):
self._batAttrDict = {}
self._batAttrDict.update(self._initAttrDict)
+ self.__onUpdBatAttr()
return self._batAttrDict
def GetTFGUID(self): return self.tfGUID # 所属的某场战斗
@@ -814,14 +858,16 @@
def SetDead(self):
self._isAlive = False
self._hp = 0
- def GetMaxHP(self): return self._batAttrDict.get(ChConfig.AttrID_MaxHP, 0)
+ def GetMaxHP(self): return int(self._batAttrDict.get(ChConfig.AttrID_MaxHP, 0))
def SetMaxHP(self, maxHP, isNotify=False):
+ maxHP = int(maxHP)
self._batAttrDict[ChConfig.AttrID_MaxHP] = maxHP
if isNotify:
NotifyObjInfoRefresh(self, ChConfig.AttrID_MaxHP, maxHP)
return
def GetHP(self): return self._hp
def SetHP(self, hp, isNotify=False):
+ hp = int(hp)
self._hp = hp
if isNotify:
NotifyObjInfoRefresh(self, ChConfig.AttrID_HP, hp)
@@ -829,6 +875,7 @@
def SetHPFull(self, isNotify=True): self.SetHP(self.GetMaxHP(), isNotify)
def GetXP(self): return self._xp
def SetXP(self, xp, isNotify=True):
+ xp = int(xp)
self._xp = xp
if isNotify:
NotifyObjInfoRefresh(self, ChConfig.AttrID_XP, xp)
@@ -844,7 +891,14 @@
value += self._skillTempAttrDict[attrID] # 支持正负值
#value = max(1, value)
return value
- def SetBatAttrValue(self, attrID, value): self._batAttrDict[attrID] = value
+ def SetBatAttrValue(self, attrID, value):
+ self._batAttrDict[attrID] = value
+ self.__onUpdBatAttr()
+ return
+ def __onUpdBatAttr(self):
+ for attrID in [ChConfig.AttrID_MaxHP]:
+ self._batAttrDict[attrID] = int(self._batAttrDict.get(attrID, 0))
+ return
def AddSkillTempAttr(self, attrID, value):
## 增加技能临时属性,支持正负值
# @param value: 正值-加属性;负值-减属性
--
Gitblit v1.8.0