- 14
- 1
Хуки для способностей. Как их сделать?
Спросил у нейронки выдала такие вот хуки, но они не работают
Спросил у нейронки выдала такие вот хуки, но они не работают
sv_effects:
if SERVER then
-- Модификатор получаемого урона
hook.Add("EntityTakeDamage", "UndergroundDamageModifiers", function(target, dmg)
if target:IsPlayer() then
local resist = target:GetNWFloat("UndmDamageResist", 1.0)
dmg:ScaleDamage(resist)
local taken = target:GetNWFloat("UndmDamageTaken", 1.0)
dmg:ScaleDamage(taken)
end
local attacker = dmg:GetAttacker()
if IsValid(attacker) and attacker:IsPlayer() then
if dmg:IsDamageType(DMG_CLUB) or dmg:IsDamageType(DMG_SLASH) then
local meleeBoost = attacker:GetNWFloat("UndmMeleeDamage", 1.0)
dmg:ScaleDamage(meleeBoost)
end
local damageBoost = attacker:GetNWFloat("UndmDamageDealt", 1.0)
dmg:ScaleDamage(damageBoost)
if attacker:GetNWBool("UndmElectroStun", false) and target:IsPlayer() then
target:SetVelocity(attacker:GetAimVector() * 500)
target:ScreenFade(SCREENFADE.IN, Color(0, 150, 255, 100), 0.5, 0.5)
target:ViewPunch(Angle(-10, 0, 0))
end
end
end)
-- Модификатор скорости атаки
hook.Add("PlayerSwitchWeapon", "UndergroundAttackSpeed", function(ply, oldWeapon, newWeapon)
local speedMulti = ply:GetNWFloat("UndmAttackSpeed", 1.0)
if speedMulti ~= 1.0 and IsValid(newWeapon) then
if newWeapon:GetClass() == "weapon_fists" and newWeapon.Primary then
newWeapon.Primary.Delay = (newWeapon.Primary.Delay or 0.5) / speedMulti
newWeapon:SetNextPrimaryFire(CurTime() + (newWeapon.Primary.Delay or 0.5) / speedMulti)
end
end
end)
hook.Add("WeaponReload", "UndergroundReloadSpeed", function(weapon)
local ply = weapon:GetOwner()
if not IsValid(ply) or not ply:IsPlayer() then return end
local reloadMulti = ply:GetNWFloat("UndmReloadSpeed", 1.0)
if reloadMulti ~= 1.0 and weapon.ReloadTime then
weapon:SetNextPrimaryFire(CurTime() + weapon.ReloadTime / reloadMulti)
return true
end
end)
hook.Add("PlayerStartCommand", "UndergroundSpreadModifier", function(ply, cmd)
local spreadMulti = ply:GetNWFloat("UndmSpreadMulti", 1.0)
if spreadMulti ~= 1.0 then
local wep = ply:GetActiveWeapon()
if IsValid(wep) and wep.Primary and wep.Primary.Cone then
wep.Primary.Cone = wep.Primary.Cone * spreadMulti
end
end
end)
hook.Add("SetupMove", "UndergroundRecoilModifier", function(ply, mv, cmd)
local recoilMulti = ply:GetNWFloat("UndmRecoilMulti", 1.0)
if recoilMulti ~= 1.0 and cmd:KeyDown(IN_ATTACK) then
local ang = cmd:GetViewAngles()
ang.p = ang.p - (recoilMulti - 1) * 0.5
cmd:SetViewAngles(ang)
end
end)
-- Очистка при смерти
hook.Add("PlayerDeath", "UndergroundClearEffects", function(ply)
ply.ActiveSubstances = {}
net.Start("UM_ClearEffects")
net.Send(ply)
local steamID = string.gsub(ply:SteamID(), ":", "_")
for _,v in pairs({"Biolink", "Spank", "DeathTouch", "Berserk", "ElectroCharge",
"QuickDraw", "BloodRage", "Steroids"}) do
timer.Remove(v .. "Effect_" .. steamID)
timer.Remove(v .. "AfterEffect_" .. steamID)
timer.Remove(v .. "Overdose_" .. steamID)
timer.Remove(v .. "Stun_" .. steamID)
end
end)
end