--BuffSkill:只会给自身添加buff,没有技能动画的技能,跟 技能(Skill) 不是一个东西 local KEYPOSITION_BUFFSKILL2 = LuaConst.ESkillKeyPosition.BuffSkill2 --副将 local FirstPersonEventDispatcher = require"Battle/Logic/Event/FirstPersonEventDispatcher" local BattleEffect = require"Battle/Logic/BattleEffect/BattleEffect" local BuffSkillSystem = {} local LuaConst=LuaConst local ipairs = ipairs local pairs = pairs local Index2BuffSkillKeyPositionDic = { [1] = LuaConst.ESkillKeyPosition["BuffSkill1"], [2] = LuaConst.ESkillKeyPosition["BuffSkill2"], [3] = LuaConst.ESkillKeyPosition["BuffSkill3"], [4] = LuaConst.ESkillKeyPosition["BuffSkill4"], [5] = LuaConst.ESkillKeyPosition["BuffSkill5"], } function BuffSkillSystem.IsGodBeastSkill(data) return data and data.KeyPosition == KEYPOSITION_BUFFSKILL2 end function BuffSkillSystem.AddBuffSkillById(entity, buffSkillId) entity.components.buffSkill:AddBuffSkillById(buffSkillId) end --可能返回nil function BuffSkillSystem.GetBuffSkillKeyPosByIndex(index) if Index2BuffSkillKeyPositionDic[index] then return Index2BuffSkillKeyPositionDic[index] else logging.error(LTAG.ERROR, "HYW : GetBuffSkillKeyPosByIndex failed! index : ", index) end end function BuffSkillSystem.ChangeBuffSkillCd(entity, buffSkillId, delta) entity.components.buffSkill:ChangeBuffSkillCd(buffSkillId, delta) end function BuffSkillSystem.SwitchRightGodBeastSkillOfEntity(entity) entity.components.buffSkill:SwitchRightGodBeastSkill() end function BuffSkillSystem.SwitchLeftGodBeastSkillOfEntity(entity) entity.components.buffSkill:SwitchLeftGodBeastSkill() end function BuffSkillSystem.OnLogicUpdate(entity) local buffSkillUpdateList = entity.components.buffSkill.buffSkillUpdateList -- 计略 主动技能的cd更新 for i,buffSkillUpdate in ipairs(buffSkillUpdateList) do if buffSkillUpdate.CD > 0 then buffSkillUpdate.CD = buffSkillUpdate.CD - LuaConst.TimeSpanMs if buffSkillUpdate.CD <= 0 then buffSkillUpdate.CD = 0 FirstPersonEventDispatcher.OnBuffSkillCDReady(entity, buffSkillUpdate) end end end end function BuffSkillSystem.CanUseBuffSkill(entity, keyPosition) local can = false local buffSkillUpdate repeat if entity.components.skillBase:IsKeyPosBanned(keyPosition) then break end if not entity.components.buff:HasBuff(LuaConst.SpecialBuffs.CanSkill) then break end local buffSkillComp = entity.components.buffSkill if buffSkillComp.buffSkillUpdateList == nil then break end for i,_buffSkillUpdate in ipairs(buffSkillComp.buffSkillUpdateList) do if _buffSkillUpdate.BuffSkillData.KeyPosition == keyPosition and not _buffSkillUpdate.IsHiding then buffSkillUpdate = _buffSkillUpdate break end end if not buffSkillUpdate then break end if buffSkillUpdate.CD > 0 then break end can = true until true return can, buffSkillUpdate end function BuffSkillSystem.ReleaseBuffSkill(entity, keyPosition) local canUse, buffSkillUpdate = BuffSkillSystem.CanUseBuffSkill(entity, keyPosition) if canUse then SystemManager.AddBuff(entity, buffSkillUpdate.BuffSkillData.BuffID) entity.components.skillBase:ClearSkillJoystickInfo() BattleEventSystem.OnUseBuffSkill(entity, buffSkillUpdate.BuffSkillData.ID) if not GlobalBattleData.Get_IsSkillNoCD() or not entity._logicInitData.IsPlayerSelf then BuffSkillSystem.EnterCD(entity, buffSkillUpdate) FirstPersonEventDispatcher.OnBuffSkillEnterCD(entity, buffSkillUpdate) end return true end return false end function BuffSkillSystem.EnterCD(entity, buffSkillUpdate) if BuffSkillSystem.IsGodBeastSkill(buffSkillUpdate.BuffSkillData) then --神兽技共用CD for k,v in pairs(entity.components.buffSkill.buffSkillUpdateList) do if BuffSkillSystem.IsGodBeastSkill(v.BuffSkillData) then v.CD = v.BuffSkillData.CD + buffSkillUpdate.CdChange end end else buffSkillUpdate.CD = buffSkillUpdate.BuffSkillData.CD + buffSkillUpdate.CdChange end end function BuffSkillSystem.OnSwitchHero(fromEntity, toEntity, dontBackground) toEntity.components.buffSkill:OnSwitchHero(fromEntity) end function BuffSkillSystem.GetBuffSkillUpdateByIndex(entity, index) local buffSkillUpdateList = entity.components.buffSkill.buffSkillUpdateList if buffSkillUpdateList then for i,_buffSkillUpdate in ipairs(buffSkillUpdateList) do if _buffSkillUpdate.BuffSkillData.KeyPosition == BuffSkillSystem.GetBuffSkillKeyPosByIndex(index) then return _buffSkillUpdate end end end end return BuffSkillSystem