| | |
| | | import ChNetSendPack
|
| | | import ShareDefine
|
| | | import ChConfig
|
| | | import ObjPool
|
| | | import TurnPassive
|
| | | import TurnBuff
|
| | |
|
| | |
| | | def GetBounceHP(self): return self._bounceHP
|
| | | def SetBounceHP(self, bounceHP): self._bounceHP = bounceHP
|
| | | def ClearHurtObjEx(self):
|
| | | poolMgr = ObjPool.GetPoolMgr()
|
| | | for hurtObjEx in self._hurtListEx:
|
| | | poolMgr.release(hurtObjEx)
|
| | | self._hurtListEx = []
|
| | | return
|
| | | def AddHurtObjEx(self, tagID):
|
| | | hurtObj = ObjPool.GetPoolMgr().acquire(HurtObj)
|
| | | hurtObj = HurtObj()
|
| | | hurtObj.SetObjID(tagID)
|
| | | self._hurtListEx.append(hurtObj)
|
| | | return hurtObj
|
| | |
| | | values = getattr(ipyData, "GetEffectValues%s" % num)()
|
| | | triggerWay = getattr(ipyData, "GetTriggerWay%s" % num)()
|
| | | triggerSrc = getattr(ipyData, "GetTriggerSrc%s" % num)()
|
| | | effect = ObjPool.GetPoolMgr().acquire(SkillEffect, effID, values, triggerWay, triggerSrc)
|
| | | effect = SkillEffect(effID, values, triggerWay, triggerSrc)
|
| | | self._effList.append(effect)
|
| | | self._effDict[(effID, triggerWay)] = effect
|
| | | return
|
| | |
| | | class PyBuff():
|
| | |
|
| | | def __init__(self, ipyData):
|
| | | self._skillData = ObjPool.GetPoolMgr().acquire(SklllData, ipyData)
|
| | | self._skillData = SklllData(ipyData)
|
| | | self._skillID = self._skillData.GetSkillID()
|
| | | self._skillTypeID = self._skillData.GetSkillTypeID()
|
| | | self._addTiming = 0 # 添加该buff时间点,0-自身回合前;1-自身回合后
|
| | |
| | | return
|
| | |
|
| | | def ClearBuff(self):
|
| | | poolMgr = ObjPool.GetPoolMgr()
|
| | | for buff in self._buffList:
|
| | | poolMgr.release(buff)
|
| | | self._buffList = []
|
| | | self._buffIDDict = {}
|
| | | self._skillTypeIDBuffIDs = {}
|
| | |
| | | self._buffID += 1
|
| | |
|
| | | buffID = self._buffID
|
| | | buff = ObjPool.GetPoolMgr().acquire(PyBuff, ipyData)
|
| | | buff = PyBuff(ipyData)
|
| | | buff.SetBuffID(buffID)
|
| | |
|
| | | self._buffList.append(buff)
|
| | |
| | | if not buffIDList:
|
| | | self._skillTypeIDBuffIDs.pop(skillTypeID)
|
| | | break
|
| | | if release:
|
| | | ObjPool.GetPoolMgr().release(buff)
|
| | | return
|
| | |
|
| | | def GetBuff(self, buffID):
|
| | |
| | |
|
| | | def __init__(self, ipyData, objID):
|
| | | self._objID = objID # 该技能谁的
|
| | | self._skillData = ObjPool.GetPoolMgr().acquire(SklllData, ipyData)
|
| | | self._skillData = SklllData(ipyData)
|
| | | self._skillID = self._skillData.GetSkillID()
|
| | | self._skillTypeID = self._skillData.GetSkillTypeID()
|
| | | self._remainTime = 0
|
| | |
| | | return
|
| | | def ClearHurtObj(self):
|
| | | ## 清空伤血统计
|
| | | poolMgr = ObjPool.GetPoolMgr()
|
| | | for hurtObj in self._hurtList:
|
| | | hurtObj.ClearHurtObjEx()
|
| | | poolMgr.release(hurtObj)
|
| | | self._hurtList = []
|
| | |
|
| | | for hurtObjEx in self._hurtListEx:
|
| | | hurtObjEx.ClearHurtObjEx()
|
| | | poolMgr.release(hurtObjEx)
|
| | | self._hurtListEx = []
|
| | | return
|
| | | def AddHurtObj(self, tagID, isEx=False):
|
| | | ## 添加某个伤血
|
| | | # @param isEx: 是否额外伤血
|
| | | hurtObj = ObjPool.GetPoolMgr().acquire(HurtObj)
|
| | | hurtObj = HurtObj()
|
| | | hurtObj.SetObjID(tagID)
|
| | | if isEx:
|
| | | self._hurtListEx.append(hurtObj)
|
| | |
| | | return
|
| | |
|
| | | def SkillReset(self):
|
| | | poolMgr = ObjPool.GetPoolMgr()
|
| | | for skill in self._skillList:
|
| | | poolMgr.release(skill)
|
| | | self._skillList = []
|
| | | self._skillDict = {}
|
| | | return
|
| | |
| | | self.__deleteSkill(curSkill)
|
| | |
|
| | | # 学新技能
|
| | | curSkill = ObjPool.GetPoolMgr().acquire(PySkill, ipyData, self._batObj.GetID())
|
| | | curSkill = PySkill(ipyData, self._batObj.GetID())
|
| | | self._skillDict[skillID] = curSkill
|
| | | self._skillList.append(curSkill)
|
| | | return curSkill
|
| | |
| | | self._skillDict.pop(skillID, None)
|
| | | if curSkill in self._skillList:
|
| | | self._skillList.remove(curSkill)
|
| | | ObjPool.GetPoolMgr().release(curSkill)
|
| | | return
|
| | |
|
| | | class BatObj():
|
| | |
| | | self._skillHappenFailCntDict = {} # 技能累计概率触发次数,使用成功后重置 {skillID:failCnt, ...}
|
| | | self._skillUseCntDict = {} # 技能累计使用次数 {skillID:useCnt, ...}
|
| | | self._skillTurnUseCntDict = {} # 技能单回合累计使用次数 {skillID:useCnt, ...}
|
| | | self._skillMgr = ObjPool.GetPoolMgr().acquire(SkillManager, self)
|
| | | self._buffMgr = ObjPool.GetPoolMgr().acquire(BuffManager, self)
|
| | | self._passiveEffMgr = ObjPool.GetPoolMgr().acquire(PassiveEffManager, self)
|
| | | self._skillMgr = SkillManager(self)
|
| | | self._buffMgr = BuffManager(self)
|
| | | self._passiveEffMgr = PassiveEffManager(self)
|
| | | self._lastHurtValue = 0
|
| | | self._harmSelfHP = 0 # 自残值
|
| | | self._mainTagIDList = [] # 主技能目标ID列表,一般用于技能拆分成多个技能效果时,子技能可能会用到主技能的对象做逻辑
|
| | |
| | | newObjID = self.__getNewObjID()
|
| | | if not newObjID:
|
| | | return newBatObj
|
| | | newBatObj = ObjPool.GetPoolMgr().acquire(BatObj)
|
| | | newBatObj = BatObj()
|
| | | newBatObj.objID = newObjID
|
| | | self.batObjDict[newObjID] = newBatObj
|
| | | GameWorld.DebugLogEx("添加战斗单位: objID=%s", newObjID)
|
| | |
| | | # turnFight.addBatPack(clientPack)
|
| | |
|
| | | # 最后回收对象
|
| | | ObjPool.GetPoolMgr().release(batObj)
|
| | | if objID not in self._freeIDList: # 回收ID,重复利用
|
| | | self._freeIDList.append(objID)
|
| | | return
|
| | |
| | | turnFight = TurnAttack.GetTurnFightMgr().getTurnFight(batObj.GetTFGUID())
|
| | | if not turnFight:
|
| | | return
|
| | | clientPack = ObjPool.GetPoolMgr().acquire(ChNetSendPack.tagObjInfoRefresh)
|
| | | clientPack = ChNetSendPack.tagObjInfoRefresh()
|
| | | clientPack.ObjID = batObj.GetID()
|
| | | clientPack.RefreshType = refreshType
|
| | | if isBig:
|