2025-01-04 23:00:19 +08:00

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;