129 【战斗】战斗系统-服务端(郭嘉所有技能;增加触发类型62、63、64、65;增加效果6038;增加技能类型16-减益光环,对自己无效,原类型10为增益光环对自己有效;)
| | |
| | | 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()
|
| | |
|
| | |
| | | self._mainTagIDList = [] # 主技能目标ID列表,一般用于技能拆分成多个技能效果时,子技能可能会用到主技能的对象做逻辑
|
| | | self._timing = 0 # 当前武将时间节点: 0-回合前;1-回合后
|
| | | self._angerOverflow = 0 # 怒气技能怒气溢出值,子技能也生效,因为主技能释放后怒气会被扣除,所以这里做个记录
|
| | | self._beFrozenCnt = 0 # 本场战斗累计被冰冻次数
|
| | |
|
| | | # 统计
|
| | | self.hurtStat = 0 # 输出统计
|
| | |
| | | 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
|
| | |
| | | if skillData.GetSkillType() in ChConfig.Def_LstBuff_List:
|
| | | #GameWorld.DebugLogEx(" 持续类buff由触发时机决定剩余时间! curID=%s,index=%s,skillID=%s,buffID=%s", curID, index, skillID, buffID)
|
| | | continue
|
| | | if skillData.GetSkillType() == ChConfig.Def_SkillType_Halo and buff.GetOwnerID() != curID:
|
| | | if skillData.GetSkillType() in ChConfig.Def_HaloSkill_List and buff.GetOwnerID() != curID:
|
| | | GameWorld.DebugLogEx(" 光环buff非光源不处理! curID=%s,index=%s,skillID=%s,buffID=%s", curID, index, skillID, buffID)
|
| | | continue
|
| | |
|
| | |
| | | if skillData.GetSkillType() in ChConfig.Def_LstBuff_List:
|
| | | #GameWorld.DebugLogEx(" 持续类buff由触发时机决定剩余时间! curID=%s,index=%s,skillID=%s,buffID=%s", curID, index, skillID, buffID)
|
| | | continue
|
| | | if skillData.GetSkillType() == ChConfig.Def_SkillType_Halo and buff.GetOwnerID() != curID:
|
| | | if skillData.GetSkillType() in ChConfig.Def_HaloSkill_List and buff.GetOwnerID() != curID:
|
| | | GameWorld.DebugLogEx(" 光环buff非光源不处理! curID=%s,index=%s,skillID=%s,buffID=%s", curID, index, skillID, buffID)
|
| | | continue
|
| | | remainTime = buff.GetRemainTime()
|
| | |
| | | Def_SkillType_Passive , #被动技能(与被动BUFF无直接关系) 7
|
| | | Def_SkillType_Revive , #复活 8
|
| | | Def_SkillType_Increment , #增值技能(不可清除)9
|
| | | Def_SkillType_Halo , #光环技能 10
|
| | | Def_SkillType_HaloPls , #增益光环 10
|
| | | Def_SkillType_AtkEx , #额外攻击 (一般用于额外造成的伤害,区分直接攻击)11
|
| | | Def_SkillType_Area , #场景技能(buff) 12
|
| | | Def_SkillType_Summon , #召唤 13
|
| | | Def_SkillType_Action , #影响行为BUFF 14
|
| | | Def_SkillType_CleanBuff , #清除buff类(如净化等) 15
|
| | | ) = range(0, 1 + 15)
|
| | | Def_SkillType_HaloDep , #减益光环 16
|
| | | ) = range(0, 1 + 16)
|
| | |
|
| | | # 以下废弃
|
| | | Def_SkillType_Aura = 10 #光环技能,旧命名 10
|
| | |
| | | Def_SkillType_PassiveBuff : IPY_GameWorld.btPassiveBuf, # 被动技能 7 (废弃,无此定义分散为其他buff)
|
| | | #Def_SkillType_Revive : IPY_GameWorld.bfIncBuff, #复活 8
|
| | | Def_SkillType_Increment : IPY_GameWorld.bfIncBuff, #增值技能(不可清除)9
|
| | | Def_SkillType_Aura : IPY_GameWorld.bfAura , #光环技能 10
|
| | | Def_SkillType_HaloPls : IPY_GameWorld.bfAura , #增益光环 10
|
| | | Def_SkillType_HaloDep : IPY_GameWorld.bfAura , #减益光环 10
|
| | | #Def_SkillType_Equip : IPY_GameWorld.bfEquipBuff,#装备技能 11
|
| | | Def_SkillType_Area : IPY_GameWorld.bfMapBuff , #场景技能(buff) 12
|
| | | Def_SkillType_Action : IPY_GameWorld.bfActionBuff , #影响行为BUFF 14
|
| | |
| | | Def_SkillType_PassiveLstPlsBuffAtk : IPY_GameWorld.bfProcessBuff , #持续增益BUFF 3
|
| | |
|
| | | }
|
| | |
|
| | | # 光环技能类型
|
| | | Def_HaloSkill_List = [Def_SkillType_HaloPls, Def_SkillType_HaloDep]
|
| | |
|
| | | # 伤害型技能
|
| | | Def_HurtSkill_List = [Def_SkillType_Atk, Def_SkillType_AtkEx, Def_SkillType_LstPlsBuffAtk, Def_SkillType_PassiveLstPlsBuffAtk]
|
| | |
| | | TriggerWay_PursueAtk, # 追击直接攻击时 59
|
| | | TriggerWay_Frozen, # 冰冻目标时 60
|
| | | TriggerWay_AddDOTBuff, # 附加持续伤害buff时 61
|
| | | ) = range(1, 1 + 61)
|
| | | TriggerWay_FriendComboHurt, # 友军连击时(包含自己)伤害类 62
|
| | | TriggerWay_FriendPursueHurt, # 友军追击时(包含自己)伤害类 63
|
| | | TriggerWay_FriendCausesFrozen, # 友方造成冰冻时(包含自己,多目标仅触发一次) 64
|
| | | TriggerWay_ComboOne, # 连击时 65
|
| | | ) = range(1, 1 + 65)
|
| | |
|
| | | # 不加载的被动触发方式,一般用于本技能固定触发逻辑用的
|
| | | TriggerWayNoLoadList = [TriggerWay_CurSkillEff, TriggerWay_CurSkillEffLst]
|
| | |
| | | PassiveEff_AddBuffTime = 6035 # 增加buff持续时间
|
| | | PassiveEff_AddSkillUseCntLimit = 6036 # 增加7009回合数
|
| | | PassiveEff_AddDamBackPerByBuffLayer = 6037 # 增加反弹伤害万分比(根据buff层级)
|
| | | PassiveEff_AddSkillPerByBeFrozenCnt = 6038 # 增加本次技能万分比(按目标累计被冰冻次数)
|
| | |
|
| | | # 被动效果ID有触发值时就返回的
|
| | | PassiveEffHappenValueList = [PassiveEff_ChangeHurtType, PassiveEff_ImmuneControlBuff, PassiveEff_MustSuperHit, PassiveEff_SkillInvalid,
|
| New file |
| | |
| | | #!/usr/bin/python
|
| | | # -*- coding: GBK -*-
|
| | | #-------------------------------------------------------------------------------
|
| | | #
|
| | | ##@package Skill.PassiveTrigger.PassiveEff_6038
|
| | | #
|
| | | # @todo:增加本次技能万分比(按目标累计被冰冻次数)
|
| | | # @author hxp
|
| | | # @date 2026-03-02
|
| | | # @version 1.0
|
| | | #
|
| | | # 详细描述: 增加本次技能万分比(按目标累计被冰冻次数)
|
| | | #
|
| | | #-------------------------------------------------------------------------------
|
| | | #"""Version = 2026-03-02 19:00"""
|
| | | #-------------------------------------------------------------------------------
|
| | |
|
| | | def GetHappenValue(attacker, defender, curEffect, effSkill, effBuff, connSkill, **skillkwargs):
|
| | | addPer = curEffect.GetEffectValue(0) # 每层增加的万分比
|
| | | maxPer = curEffect.GetEffectValue(1) # 最大增加的万分比
|
| | | addTotal = defender.GetBeFrozenCnt() * addPer
|
| | | if maxPer and addTotal > maxPer:
|
| | | addTotal = maxPer
|
| | | #import GameWorld
|
| | | #GameWorld.DebugLogEx("6038,addTotal=%s,defID=%s,BeFrozenCnt=%s", addTotal, defender.GetID(), defender.GetBeFrozenCnt())
|
| | | return addTotal
|
| | |
| | |
|
| | | #光环技能,默认施法者身上也必须有,时长与施法者身上的同步
|
| | | haloSrcBuff = None # 光源buff
|
| | | if skillType == ChConfig.Def_SkillType_Halo and ownerID != curID:
|
| | | if skillType in ChConfig.Def_HaloSkill_List and ownerID != curID:
|
| | | haloSrcBuff = buffOwner.GetBuffManager().FindBuffBySkillID(skillID, ownerID)
|
| | | if not haloSrcBuff:
|
| | | GameWorld.ErrLog("添加光环技能时找不到光源! skillID=%s,ownerID=%s" % (skillID, ownerID))
|
| | |
| | | if curBuffState:
|
| | | buffMgr.AddBuffState(curBuffState, buffID)
|
| | |
|
| | | if skillType == ChConfig.Def_SkillType_Halo:
|
| | | if skillType in ChConfig.Def_HaloSkill_List:
|
| | | __addHaloBuffEffObjID(curID, buff, skillID, ownerID, haloSrcBuff)
|
| | |
|
| | | if afterLogic and buffSkill:
|
| | |
| | | RefreshBuffAttr(batObj)
|
| | |
|
| | | if refreshType in [1, 2] and skillData.GetCurBuffState() == ChConfig.BatObjState_Frozen:
|
| | | batObj.SetBeFrozenCnt(batObj.GetBeFrozenCnt() + 1) # 后面加的通用逻辑,原司马懿的暂不动代码
|
| | | __smyRecordEnemyFrozen(turnFight, batObj, curBuff)
|
| | | return
|
| | |
|
| | |
| | | curBuff.SetRemainTime(remainTime)
|
| | | SyncBuffRefresh(turnFight, batObj, curBuff)
|
| | |
|
| | | if skillType == ChConfig.Def_SkillType_Halo and ownerID == buffObjID:
|
| | | if skillType in ChConfig.Def_HaloSkill_List and ownerID == buffObjID:
|
| | | haloObjIDList = curBuff.GetHaloObjIDList()
|
| | | GameWorld.DebugLogEx("光环buff回合变更同步其他有效目标该光环: skillID=%s,ownerID=%s,haloObjIDList=%s", skillID, ownerID, haloObjIDList)
|
| | | batObjMgr = BattleObj.GetBatObjMgr()
|
| | |
| | | if isRefreshAttr and not noRefreshAttr:
|
| | | RefreshBuffAttr(batObj)
|
| | |
|
| | | if skillType == ChConfig.Def_SkillType_Halo and ownerID == buffObjID:
|
| | | if skillType in ChConfig.Def_HaloSkill_List and ownerID == buffObjID:
|
| | | haloObjIDList = curBuff.GetHaloObjIDList()
|
| | | GameWorld.DebugLogEx("光环buff删除同步删除其他有效目标该光环: skillID=%s,ownerID=%s,haloObjIDList=%s", skillID, ownerID, haloObjIDList)
|
| | | batObjMgr = BattleObj.GetBatObjMgr()
|
| | |
| | |
|
| | | if isRefreshAttr:
|
| | | RefreshBuffAttr(batObj)
|
| | | |
| | | # 重新添加本阵营有效光环
|
| | | |
| | | # 重新添加有效光环
|
| | | batObjMgr = BattleObj.GetBatObjMgr()
|
| | | batLineup = batObj.GetTFBatLineup()
|
| | | for tagObjID in batLineup.getAllPosObjIDList():
|
| | | tagObj = batObjMgr.getBatObj(tagObjID)
|
| | | if not tagObj.IsAlive():
|
| | | continue
|
| | | tagBuffMgr = tagObj.GetBuffManager()
|
| | | for index in range(tagBuffMgr.GetBuffCount()):
|
| | | buff = tagBuffMgr.GetBuffByIndex(index)
|
| | | haloObjIDList = buff.GetHaloObjIDList()
|
| | | if not haloObjIDList or objID not in haloObjIDList:
|
| | | for faction, num in turnFight.actionSortList:
|
| | | batFaction = turnFight.getBatFaction(faction)
|
| | | batLineup = batFaction.getBatlineup(num)
|
| | | for tagObjID in batLineup.getAllPosObjIDList():
|
| | | tagObj = batObjMgr.getBatObj(tagObjID)
|
| | | if not tagObj.IsAlive():
|
| | | continue
|
| | | if buff.GetOwnerID() != tagObjID:
|
| | | # 非光源
|
| | | continue
|
| | | haloSkillID = buff.GetSkillID()
|
| | | GameWorld.DebugLogEx("复活后重新添加本阵营光环: objID=%s,ownerID=%s,haloSkillID=%s", objID, tagObjID, haloSkillID)
|
| | | haloSkill = tagObj.GetSkillManager().FindSkillByID(haloSkillID)
|
| | | if not haloSkill:
|
| | | DoAddBuffBySkillID(turnFight, batObj, haloSkillID, buffOwner=tagObj)
|
| | | continue
|
| | | OnAddBuff(turnFight, batObj, haloSkill, buffOwner=tagObj)
|
| | | tagBuffMgr = tagObj.GetBuffManager()
|
| | | for index in range(tagBuffMgr.GetBuffCount()):
|
| | | buff = tagBuffMgr.GetBuffByIndex(index)
|
| | | haloObjIDList = buff.GetHaloObjIDList()
|
| | | if not haloObjIDList or objID not in haloObjIDList:
|
| | | continue
|
| | | if buff.GetOwnerID() != tagObjID:
|
| | | # 非光源
|
| | | continue
|
| | | haloSkillID = buff.GetSkillID()
|
| | | GameWorld.DebugLogEx("复活后重新添加光环: objID=%s,ownerID=%s,haloSkillID=%s", objID, tagObjID, haloSkillID)
|
| | | haloSkill = tagObj.GetSkillManager().FindSkillByID(haloSkillID)
|
| | | if not haloSkill:
|
| | | DoAddBuffBySkillID(turnFight, batObj, haloSkillID, buffOwner=tagObj)
|
| | | continue
|
| | | OnAddBuff(turnFight, batObj, haloSkill, buffOwner=tagObj)
|
| | |
|
| | | # 光源重新添加有效光环,根据光源是否还有效规则优化,待处理
|
| | | return
|
| | |
| | | buff = buffMgr.GetBuffByIndex(index)
|
| | | layer = max(1, buff.GetLayer())
|
| | | skillData = buff.GetSkillData()
|
| | | |
| | | skillType = skillData.GetSkillType()
|
| | | if skillType == ChConfig.Def_SkillType_HaloDep:
|
| | | if buff.GetOwnerID() == objID:
|
| | | #GameWorld.DebugLogEx(" 减益光环对自己无效! buffSkillID=%s", skillData.GetSkillID(), objID)
|
| | | continue
|
| | | |
| | | effExDict = buff.GetEffectExDict()
|
| | | for effCalcInfo, effValueEx in effExDict.items():
|
| | | effID, calcType = effCalcInfo
|
| | |
| | | #执行添加buff
|
| | |
|
| | | #光环技能,需先添加施法者
|
| | | if useSkill.GetSkillType() == ChConfig.Def_SkillType_Halo:
|
| | | if useSkill.GetSkillType() in ChConfig.Def_HaloSkill_List:
|
| | | curID = curBatObj.GetID()
|
| | | skillID = useSkill.GetSkillID()
|
| | | GameWorld.DebugLogEx("光环技能先给施法者添加光源buff! skillID=%s,ownerID=%s", skillID, curID)
|
| | |
| | | triggerOne = False
|
| | | batType = useSkill.GetBatType()
|
| | | isAttackDirect = (isUseSkill and SkillCommon.isAttackDirectSkill(useSkill)) # 是否直接攻击
|
| | | objTriigerWayInfo = {} # 敌友已触发的列表,一般用于控制每人只触发一次的 {objID:{triggerWay:triggerCnt, ...}}
|
| | | for tagObj in tagObjListAll:
|
| | | tagID = tagObj.GetID()
|
| | |
|
| | |
| | |
|
| | | # 连击
|
| | | if batType == ChConfig.TurnBattleType_Combo:
|
| | | if not triggerOne:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_ComboOne, tagObj, connSkill=useSkill)
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, curObj, ChConfig.TriggerWay_Combo, tagObj, connSkill=useSkill)
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, tagObj, ChConfig.TriggerWay_BeCombo, curObj, connSkill=useSkill)
|
| | | if curMGObj and ChConfig.TriggerWay_Combo not in mgTriggerWayList:
|
| | |
| | | if not lineupObj.IsAlive():
|
| | | continue
|
| | |
|
| | | if lineupObjID not in objTriigerWayInfo:
|
| | | objTriigerWayInfo[lineupObjID] = {}
|
| | | objTriigerWayCntDict = objTriigerWayInfo[lineupObjID]
|
| | | |
| | | # 直接攻击
|
| | | if isAttackDirect:
|
| | | if not triggerOne:
|
| | |
| | | if not triggerOne:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendDotHurt, tagObj, connSkill=useSkill, byFriendObj=curObj)
|
| | |
|
| | | # 敌方被控时
|
| | | # 敌方被控时 - 默认为友军造成的
|
| | | if tagID in beControlledHardDict and lineupObj.GetFaction() != tagObj.GetFaction():
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_EnemyBeControlledHard, tagObj, connSkill=useSkill)
|
| | | |
| | | tagBuff = beControlledHardDict[tagID]
|
| | | # 敌方被冰冻
|
| | | if tagBuff.GetCurBuffState() == ChConfig.BatObjState_Frozen:
|
| | | if ChConfig.TriggerWay_FriendCausesFrozen not in objTriigerWayCntDict:
|
| | | objTriigerWayCntDict[ChConfig.TriggerWay_FriendCausesFrozen] = 1
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendCausesFrozen, tagObj, connSkill=useSkill)
|
| | | |
| | | # 连击
|
| | | if batType == ChConfig.TurnBattleType_Combo:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendCombo, tagObj, connSkill=useSkill, byFriendObj=curObj)
|
| | | |
| | | if isAttackDirect:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendComboHurt, tagObj, connSkill=useSkill, byFriendObj=curObj)
|
| | | # 追击
|
| | | elif batType == ChConfig.TurnBattleType_Pursue:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendPursue, tagObj, connSkill=useSkill, byFriendObj=curObj)
|
| | | if isAttackDirect:
|
| | | TurnPassive.OnTriggerPassiveEffect(turnFight, lineupObj, ChConfig.TriggerWay_FriendPursueHurt, tagObj, connSkill=useSkill, byFriendObj=curObj)
|
| | |
|
| | | triggerOne = True # 设置已经触发过一次
|
| | |
|
| | |
| | | atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByBuffLayer, curSkill)
|
| | | atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByDeadTeammate, curSkill)
|
| | | atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByBuffState, curSkill)
|
| | | atkSkillPer += TurnPassive.GetTriggerEffectValue(turnFight, atkObj, defObj, ChConfig.PassiveEff_AddSkillPerByBeFrozenCnt, curSkill)
|
| | | return atkSkillPer
|
| | |
|
| | | def CanSuperHit(turnFight, atkObj, defObj, curSkill):
|