386 lines
12 KiB
Lua
386 lines
12 KiB
Lua
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<EBuffType, FBuffConfigItem> 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; |