local CountTable = require('Script.Global.Table.CountTable') local CountItem = CountTable:new(); EBuffType = { AddHealth = CountItem:Add(), -- 增加血量 AddMaxHealth = CountItem:Add(), -- 增加最大血量 AddSpeed = CountItem:Add(), -- 添加速度 AddDamage = CountItem:Add(), -- 添加伤害 AddJump = CountItem:Add(), -- 添加跳跃 AddArmor = CountItem:Add(), -- 添加护甲 BreathingHeal = CountItem:Add(), -- 呼吸回血 Poison = CountItem:Add(), -- 毒伤 BombExplosion = CountItem:Add(), -- 爆炸 RangeAddHealth = CountItem:Add(), -- 范围回血 Electric = CountItem:Add(), -- 电击 Ice = CountItem:Add(), -- 冰冻 Light = CountItem:Add(), -- 冰冻 Burning = CountItem:Add(), -- 燃烧 Invincible = CountItem:Add(), -- 无敌 ShowEnemyPos = CountItem:Add(), -- 看到别人 AllDefence = CountItem:Add(), -- 所有人增加护甲 IgnoreHit1 = CountItem:Add(), -- 下一次攻击无效 InfiniteBullets = CountItem:Add(), -- 无限子弹 IgnorePoison = CountItem:Add(), -- 忽视毒伤 }; --- Buff 状态 EBuffState = { None = 1, Using = 2, Cooling = 3, }; --- 该操作是按位操作 EBuffHitType = { Location = 0x01, Pawn = 0x02, AllEnemy = 0x04, Self = 0x08, AllFriend = 0x10, }; EBuffErrorType = { Cooling = 1, -- 正在冷却 OverStack = 2, -- 超过最大叠加层数限制 } ---@type table Buff 配置类 BuffConfig = { [EBuffType.AddHealth] = { Name = "AddHealth", -- 可以通过该值找到 Script = 'AddHealth', bAuto = false, -- 是否可以自动执行 Continue = 0, -- 如果是 -1, 那么就是永久的,如果是 nil,就是添加的时候执行的;如果是 0 表示没有持续时间,如果 > 0, 表示当前是持续执行这么长时间的 Cooldown = 5, -- 冷却时间,如果 > 0 表示具体冷却时间;如果 == 0 / nil 表示没有冷却时间 MaxStack = 1; -- 最大叠加数量,超过该值将无法叠加 HitType = EBuffHitType.Self | EBuffHitType.AllFriend, -- 针对什么有效 bRemoveDead = true, -- 死亡是否移除 bAutoDestroy = false, -- 自动销毁是在冷却之后了 ClientInfo = { Chinese = "回血", Desc = '回复特定的生命值', Icon = UGCGameSystem.GetUGCResourcesFullPath('Asset/Art/UITexture/BUFFIcon/T_AddHealth.T_AddHealth'), Color = "Red", Particle = "P_MedicSoldier_djf01", }, Params = { AddHealth = 20, -- 瞬间加血 }; }, [EBuffType.AddSpeed] = { Name = "AddSpeed", -- 可以通过该值找到 Script = 'AddSpeed', bAuto = false, -- 是否可以自动执行 Continue = 5, -- 如果是 -1, 那么就是永久的,如果是 nil,就是添加的时候执行的;如果是 0 表示没有持续时间,如果 > 0, 表示当前是持续执行这么长时间的 Cooldown = 10, -- 冷却时间,如果 > 0 表示具体冷却时间;如果 == 0 / nil 表示没有冷却时间 MaxStack = 1; -- 最大叠加数量,超过该值将无法叠加 HitType = EBuffHitType.Self, -- 针对什么有效 bRemoveDead = true, -- 死亡是否移除 bAutoDestroy = false, -- 自动销毁是在冷却之后了 ClientInfo = { Chinese = "加速", Desc = '在一段时间内速度大增', Particle = "P_Speed", }, Params = { AddSpeed = 3, -- 瞬间加血 }; }, [EBuffType.AddArmor] = { Name = "AddArmor", -- 可以通过该值找到 Script = 'AddArmor', bAuto = false, -- 是否可以自动执行 Continue = 5, -- 如果是 -1, 那么就是永久的,如果是 nil,就是添加的时候执行的;如果是 0 表示没有持续时间,如果 > 0, 表示当前是持续执行这么长时间的 Cooldown = 10, -- 冷却时间,如果 > 0 表示具体冷却时间;如果 == 0 / nil 表示没有冷却时间 MaxStack = 1; -- 最大叠加数量,超过该值将无法叠加 HitType = EBuffHitType.Self, -- 针对什么有效 bRemoveDead = true, -- 死亡是否移除 bAutoDestroy = false, -- 自动销毁是在冷却之后了 ClientInfo = { Chinese = "加速", Desc = '在一段时间内速度大增', --Particle = "P_Speed", }, Params = { Armor = 0.3, --- 减伤比 }; }, [EBuffType.AddDamage] = { Name = "AddDamage", -- 可以通过该值找到 Script = 'AddDamage', bAuto = false, -- 是否可以自动执行 Continue = 5, -- 如果是 -1, 那么就是永久的,如果是 nil,就是添加的时候执行的;如果是 0 表示没有持续时间,如果 > 0, 表示当前是持续执行这么长时间的 Cooldown = 10, -- 冷却时间,如果 > 0 表示具体冷却时间;如果 == 0 / nil 表示没有冷却时间 MaxStack = 1; -- 最大叠加数量,超过该值将无法叠加 HitType = EBuffHitType.Self, -- 针对什么有效 bRemoveDead = true, -- 死亡是否移除 bAutoDestroy = true, -- 自动销毁是在冷却之后了 ClientInfo = { Chinese = "加伤害", Icon = UGCGameSystem.GetUGCResourcesFullPath('Asset/Art/UITexture/BUFFIcon/T_Strengthen.T_Strengthen'), Color = "Cyan", Desc = '在一段时间内增加伤害', }, Params = { Damage = 0.3, --- 减伤比 }; }, [EBuffType.BreathingHeal] = { Name = "BreathingHeal", -- 可以通过该值找到 Script = 'BreathingHeal', InitScript = "BreathingHeal", bAuto = true, -- 是否可以自动执行 Continue = -1, -- 如果是 -1, 那么就是永久的,如果是 nil,就是添加的时候执行的;如果是 0 表示没有持续时间,如果 > 0, 表示当前是持续执行这么长时间的 Cooldown = -1, -- 冷却时间,如果 > 0 表示具体冷却时间;如果 == 0 / nil 表示没有冷却时间 MaxStack = 1; -- 最大叠加数量,超过该值将无法叠加 HitType = EBuffHitType.Self, -- 针对什么有效 bRemoveDead = true, -- 死亡是否移除 bAutoDestroy = false, -- 自动销毁是在冷却之后了 ClientInfo = { Chinese = "呼吸回血", Desc = '脱离战斗一段时间后,会缓慢回血到上限', }, Params = { Interrupt = 4.5, -- 打断时间 BaseHeal = 8; -- 每秒回复 Interval = 0.2; -- 回复间隔 Limit = 0.8; }; }, [EBuffType.BombExplosion] = { Name = 'BombExplosion', Script = 'BombExplosion', bAuto = true, Cooldown = 0.2, -- 每一秒才执行一次 --MaxStack = 10, HitType = EBuffHitType.Location, bAutoDestroy = true, ClientInfo = { Chinese = "爆炸箭矢", Desc = "涉及到的位置会发生爆炸产生伤害", Particle = "P_AH6_baozha_01", }, Params = { BaseDamage = 150, InnerRadius = 50, OuterRadius = 250, Falloff = 4, }; }, [EBuffType.Ice] = { Name = 'Ice', Script = 'Ice', bAuto = true, Continue = 3.5, HitType = EBuffHitType.Pawn, ClientInfo = { Chinese = "冷冻效果", Desc = '玩家速度会大减', Particle = "P_TDM2_Absorb_01", }, Params = { Speed = 0.5, -- 速度 }, }, [EBuffType.AddMaxHealth] = { Name = 'AddMaxHealth', Script = 'AddMaxHealth', bAuto = false, HitType = EBuffHitType.Self, MaxStack = 1, Continue = 5, Continue = 10, ClientInfo = { Chinese = "增加最大血量", Desc = '最大血量同比增加一部分', Particle = "P_MedicSoldier_djf01", }, Params = { Speed = 0.5, -- 速度 }, }, [EBuffType.Poison] = { Name = 'Poison', Script = 'Poison', bAuto = true, HitType = EBuffHitType.Pawn, Continue = 2.5, MaxStack = 1, ClientInfo = { Chinese = "毒伤", Desc = '玩家每过一段时间会掉血', Particle = "P_TDM2_lnfectedMan_05", }, Params = { Damage = 8; -- 每秒伤害 Interval = 0.3; -- 伤害间隔 }; }, [EBuffType.Burning] = { Name = 'Burning', Script = 'Burning', bAuto = true, HitType = EBuffHitType.Pawn, Continue = 2.5, --Continue = 10, MaxStack = 1, ClientInfo = { Chinese = "燃烧", Desc = '玩家每过一段时间会掉血', Particle = "P_bonfire_01", }, Params = { Damage = 8; -- 每秒伤害 Interval = 0.5; -- 伤害间隔 }; }, --[EBuffType.RangeAddHealth] = { -- Script = 'RangeAddHealth', -- Desc = '范围回血/伤害', -- Icon = '', -- Params = {}; --}, [EBuffType.Electric] = { Name = 'Electric', Script = 'Electric', bAuto = true, MaxStack = 1, Continue = 4.5, HitType = EBuffHitType.Pawn, ClientInfo = { Chinese = "电击", Desc = '每过一段时间,玩家将被麻痹不动', Particle = "P_bonfire_01", }, Params = { Interval = 1, StunTime = 0.3, }; }, [EBuffType.Light] = { Name = 'Light', Script = 'Light', bAuto = true, MaxStack = 1, Continue = 2.5, HitType = EBuffHitType.Location, ClientInfo = { Chinese = "闪光", Desc = "面朝闪光的玩家将会白屏", }, Params = { LightTime = 3.2, Radius = 6; -- 范围 Angle = 45; -- 会被照射到的一半角度 }; }, [EBuffType.Invincible] = { Name = 'Invincible', Script = 'Invincible', bAuto = false; Continue = 5, Cooldown = 10, MaxStack = 1, HitType = EBuffHitType.Self, ClientInfo = { Chinese = "无敌", Icon = UGCGameSystem.GetUGCResourcesFullPath('Asset/Art/UITexture/BUFFIcon/T_Invincible.T_Invincible'), Color = "Orange", Desc = "玩家在接下来的一段时间内不会遭受任何攻击", }, Params = {}; }, [EBuffType.ShowEnemyPos] = { Name = 'ShowEnemyPos', Script = 'ShowEnemyPos', bAuto = false; Continue = 8, Cooldown = 55 - 8, MaxStack = 1, HitType = EBuffHitType.Self, ClientInfo = { Chinese = "鹰眼", Icon = UGCGameSystem.GetUGCResourcesFullPath('Asset/Art/UITexture/BUFFIcon/T_ShowEnemyPos.T_ShowEnemyPos'), Color = "Blue", Desc = "玩家在接下来的一段时间内不会遭受任何攻击", }, Params = {}; }, [EBuffType.AllDefence] = { Name = 'AllDefence', Script = 'AllDefence', bAuto = false; Continue = 5, Cooldown = 10, MaxStack = 1, HitType = EBuffHitType.Self, ClientInfo = { Chinese = "增加护甲", Icon = UGCGameSystem.GetUGCResourcesFullPath('Asset/Art/UITexture/BUFFIcon/T_Shield.T_Shield'), Color = "Yellow", Desc = "玩家护甲增强,受到伤害减弱", }, Params = { Armor = 1; }; }, [EBuffType.InfiniteBullets] = { Name = 'InfiniteBullets', Script = 'InfiniteBullets', bAuto = true; Continue = -1, Cooldown = -1, MaxStack = 1, HitType = EBuffHitType.Self, ClientInfo = { Chinese = "无限子弹", Color = "Green", Icon = UGCGameSystem.GetUGCResourcesFullPath('Asset/Art/UITexture/BUFFIcon/T_BulletInf.T_BulletInf'), Desc = "所有同队玩家护甲都变强", }, Params = {}; }, [EBuffType.IgnorePoison] = { Name = 'IgnorePoison', Script = 'IgnorePoison', bAuto = false; Continue = -1, Cooldown = -1, MaxStack = 1, HitType = EBuffHitType.Self, ClientInfo = { Chinese = "忽略毒伤", Icon = UGCGameSystem.GetUGCResourcesFullPath('Asset/Art/UITexture/BUFFIcon/T_IgnorePoison.T_IgnorePoison'), Color = "Pink", Desc = "安全区外免疫信号值", }, Params = {}; }, }; if UE_SERVER then for i, v in pairs(BuffConfig) do v.ClientInfo = nil; end end function InitBuffConfigImage() if IsClient then for i, v in pairs(BuffConfig) do if v.ClientInfo and v.ClientInfo.Icon then ObjectPath.LoadObject(v.ClientInfo.Icon); end end end end function FindBuffByName(InName) for i, v in pairs(BuffConfig) do if (v.Name ~= nil and v.Name == InName) or (v.Script ~= nil and v.Script == InName) then return i; end end return nil; end return BuffConfig;