hxp
2026-03-06 2470d825e304e982261afd240d06ef03cd5366e8
ServerPython/ZoneServerGroup/map1_8G/MapServer/MapServerData/Script/Attack/BattleObj.py
@@ -33,6 +33,7 @@
        self._batObj = batObj
        self._objID = batObj.GetID() if batObj else 0
        self._skillIDList = [] # 已有技能ID列表,获取被动中快速判断已学技能用
        self.noDeadSkill = None # 不死技能效果,暂时只支持最多1个这种技能
        
        # 技能
        self._AffectSkillDict = {} # 被动技能 {(触发方式, 有效来源):{技能ID:[effID, ...], ...}, ...}
@@ -189,6 +190,11 @@
        effDict[skillID].append(effectID)
        if triggerWay not in self._skillTriggerWayList:
            self._skillTriggerWayList.append(triggerWay)
        # 加载不死技能效果
        if triggerWay == ChConfig.TriggerWay_NoDead:
            self.noDeadSkill = curSkill
        return
        
    def RefreshBuffPassiveEffect(self):
@@ -409,7 +415,7 @@
    def GetLayerCnt(self): return self._ipyData.GetLayerCnt()
    def GetLayerMax(self): return self._ipyData.GetLayerMax()
    def GetBuffRepeat(self): return self._ipyData.GetBuffRepeat() # Buff叠加规则
    def GetDispersedLimit(self): return self._ipyData.GetDispersedLimit() or self._ipyData.GetSkillType() == ChConfig.Def_SkillType_Halo # 驱散限制
    def GetDispersedLimit(self): return self._ipyData.GetDispersedLimit() or self._ipyData.GetSkillType() in ChConfig.Def_HaloSkill_List # 驱散限制
    def GetBuffRetain(self): return self._ipyData.GetBuffRetain()
    def GetFightPower(self): return self._ipyData.GetFightPower()
    
@@ -664,6 +670,7 @@
        self._hurtListEx = [] # 额外伤血列表,如平摊、溅射 [HurtObj, ...]
        self._bySkill = None # 由哪个技能触发的
        self._byBuff = None # 由哪个buff触发的
        self._byBatObj = None # 由哪个战斗对象触发的
        self._byTriggerWay = 0 # 由哪个被动方式触发的
        self._afterLogicList = [] # 技能释放后需要处理逻辑 [[logicType, logicParams], ...]
        self._energy = 0 # 技能能量,一般用于累计能量达到某种条件后做逻辑
@@ -690,6 +697,7 @@
        self._effIgnoreObjIDList = []
        self._bySkill = None
        self._byBuff = None
        self._byBatObj = None
        self._byTriggerWay = 0
        self._afterLogicList = []
        self.ClearHurtObj()
@@ -742,6 +750,8 @@
    def SetBySkill(self, bySkill): self._bySkill = bySkill
    def GetByBuff(self): return self._byBuff
    def SetByBuff(self, byBuff): self._byBuff = byBuff
    def GetByBatObj(self): return self._byBatObj
    def SetByBatObj(self, byBatObj): self._byBatObj = byBatObj
    def GetByTriggerWay(self): return self._byTriggerWay
    def SetByTriggerWay(self, byTriggerWay): self._byTriggerWay = byTriggerWay
    def GetTagObjList(self): return self._tagObjList # 技能主要目标列表
@@ -872,6 +882,12 @@
        curSkill = PySkill(ipyData, self._batObj.GetID())
        self._skillDict[skillID] = curSkill
        self._skillList.append(curSkill)
        learnSkillExEff = curSkill.GetEffectByID(ChConfig.SkillEff_LearnSkillEx)
        if learnSkillExEff:
            skillIDEx = learnSkillExEff.GetEffectValue(0)
            if skillIDEx:
                self.LearnSkillByID(skillIDEx)
        return curSkill
    
    def __deleteSkill(self, curSkill):
@@ -903,6 +919,7 @@
        self.faction = 0 # 所属阵营,一般只有双方阵营, 1 或 2,发起方默认1
        self.lineupNum = 1 # 阵容位置编号,一般多V多时有用,通常默认1
        self.posNum = 0 # 所在阵容站位
        self._batLineup = None # 所属战斗阵容对象
        self._hp = 0 # 当前生命值
        self._xp = 0 # 当前怒气值
        self._isAlive = True # 是否活着
@@ -924,6 +941,7 @@
        self._mainTagIDList = [] # 主技能目标ID列表,一般用于技能拆分成多个技能效果时,子技能可能会用到主技能的对象做逻辑
        self._timing = 0 # 当前武将时间节点: 0-回合前;1-回合后
        self._angerOverflow = 0 # 怒气技能怒气溢出值,子技能也生效,因为主技能释放后怒气会被扣除,所以这里做个记录
        self._beFrozenCnt = 0 # 本场战斗累计被冰冻次数
        
        # 统计
        self.hurtStat = 0 # 输出统计
@@ -988,10 +1006,12 @@
    def GetTFGUID(self): return self.tfGUID # 所属的某场战斗
    def SetTFGUID(self, tfGUID): self.tfGUID = tfGUID
    def GetTurnFight(self): return TurnAttack.GetTurnFightMgr().getTurnFight(self.tfGUID)
    def GetBatLineup(self):
        turnFight = self.GetTurnFight()
        batFaction = turnFight.getBatFaction(self.faction)
        return batFaction.getBatlineup(self.lineupNum)
    def GetTFBatLineup(self):
        if not self._batLineup:
            turnFight = self.GetTurnFight()
            batFaction = turnFight.getBatFaction(self.faction)
            self._batLineup = batFaction.getBatlineup(self.lineupNum)
        return self._batLineup
    def GetOwnerID(self): return self.ownerID # 如果是玩家战斗单位,则该值非0,为所属玩家ID
    def SetOwnerID(self, ownerID): self.ownerID = ownerID
    def GetID(self): return self.objID
@@ -1024,6 +1044,15 @@
    def GetPosNum(self): return self.posNum
    def GetFaction(self): return self.faction
    def SetFaction(self, faction): self.faction = faction
    def GetBatObjType(self):
        ## 战斗对象实例类型
        if 1 <= self.posNum <= ShareDefine.LineupObjMax:
            return ChConfig.BatObjType_BatHero
        if self.posNum == ChConfig.TFPosNum_Mingge:
            return ChConfig.BatObjType_Mingge
        if ChConfig.TFPosNum_Lingshou <= self.posNum:
            return ChConfig.BatObjType_Lingshou
        return 0
    def GetFightPower(self): return self.fightPower
    def SetFightPower(self, fightPower): self.fightPower = fightPower
    def GetLV(self): return self.lv
@@ -1085,6 +1114,17 @@
            return False
        if self.IsInControlledHard():
            return False
        return True
    def CanNoDead(self):
        '''是否还可触发不死效果
        暂定单个武将最多只支持配置1个不死效果,且单场战斗最多触发x次,即按技能cd判断即可
        '''
        noDeadSkill = self._passiveEffMgr.noDeadSkill # 固定有被动触发
        if not noDeadSkill:
            return
        if noDeadSkill.GetRemainTime():
            return
        return True
    
    def GetSneerTagObj(self):
@@ -1207,6 +1247,9 @@
    def GetTiming(self): return self._timing # 时间节点 0-回合前;1-回合后
    def SetTiming(self, timing): self._timing = timing
    
    def GetBeFrozenCnt(self): return self._beFrozenCnt
    def SetBeFrozenCnt(self, beFrozenCnt): self._beFrozenCnt = beFrozenCnt
    def StatHurtValue(self, hurtValue):
        ## 统计输出
        self.hurtStat += hurtValue