331 lines
9.9 KiB
Lua
331 lines
9.9 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(), -- 毒伤
|
||
PoisonRange = CountItem:Add(), -- 毒伤
|
||
BombExplosion = CountItem:Add(), -- 爆炸
|
||
RangeAddHealth = CountItem:Add(), -- 范围回血
|
||
Electric = CountItem:Add(), -- 电击
|
||
Ice = CountItem:Add(), -- 冰冻
|
||
IceLoc = CountItem:Add(), -- 冰冻
|
||
Light = CountItem:Add(), -- 冰冻
|
||
Burning = CountItem:Add(), -- 燃烧
|
||
BurningLoc = CountItem:Add(), -- 燃烧
|
||
Invincible = 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 = '/Game/Actor_Timeliness/CG025_GW_YearBeast/Arts_UI/Texture/NoAtlas/CG025_YearBeast_Map01.CG025_YearBeast_Map01',
|
||
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 = '在一段时间内速度大增',
|
||
},
|
||
Params = {
|
||
Armor = 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] = { -- 传参:Location:FVector
|
||
Name = 'BombExplosion',
|
||
Script = 'BombExplosion',
|
||
bAuto = true,
|
||
Cooldown = 1, -- 每一秒才执行一次
|
||
MaxStack = 10,
|
||
HitType = EBuffHitType.Location,
|
||
bAutoDestroy = true,
|
||
ClientInfo = {
|
||
Chinese = "爆炸箭矢",
|
||
Desc = "涉及到的位置会发生爆炸产生伤害",
|
||
Particle = "P_AH6_baozha_01",
|
||
},
|
||
Params = {
|
||
BaseDamage = 75,
|
||
InnerRadius = 10,
|
||
OuterRadius = 200,
|
||
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.IceLoc] = {
|
||
Name = 'IceLoc',
|
||
Script = 'IceLoc',
|
||
bAuto = true,
|
||
Continue = 3.5,
|
||
HitType = EBuffHitType.Pawn,
|
||
ClientInfo = {
|
||
Chinese = "冷冻效果",
|
||
Desc = '玩家速度会大减',
|
||
Particle = "P_TDM2_Absorb_01",
|
||
},
|
||
Params = {
|
||
Speed = 0.5, -- 速度
|
||
Radius = 200,
|
||
},
|
||
},
|
||
[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.PoisonRange] = {
|
||
Name = 'PoisonRange',
|
||
Script = 'PoisonRange',
|
||
bAuto = true,
|
||
HitType = EBuffHitType.Location,
|
||
Continue = 2.5,
|
||
MaxStack = 1,
|
||
ClientInfo = {
|
||
Chinese = "毒伤",
|
||
Desc = '玩家每过一段时间会掉血',
|
||
Particle = "P_TDM2_lnfectedMan_05",
|
||
},
|
||
Params = {
|
||
Damage = 20; -- 每秒伤害
|
||
Interval = 0.3; -- 伤害间隔
|
||
Radius = 200,
|
||
};
|
||
},
|
||
[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.BurningLoc] = {
|
||
Name = 'BurningLoc',
|
||
Script = 'BurningLoc',
|
||
bAuto = true,
|
||
HitType = EBuffHitType.Location,
|
||
Continue = 2.5,
|
||
--Continue = 10,
|
||
MaxStack = 1,
|
||
ClientInfo = {
|
||
Chinese = "燃烧",
|
||
Desc = '玩家每过一段时间会掉血',
|
||
Particle = "P_bonfire_01",
|
||
},
|
||
Params = {
|
||
Damage = 20; -- 每秒伤害
|
||
Interval = 0.5; -- 伤害间隔
|
||
Radius = 200,
|
||
};
|
||
},
|
||
--[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 = "无敌",
|
||
Desc = "玩家在接下来的一段时间内不会遭受任何攻击",
|
||
},
|
||
Params = {};
|
||
},
|
||
};
|
||
|
||
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; |