mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 05:43:46 +03:00
160 lines
5.7 KiB
Lua
160 lines
5.7 KiB
Lua
--[[
|
|
| This file was obtained through the combined efforts
|
|
| of Madbluntz & Plymouth Antiquarian Society.
|
|
|
|
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
|
| Maloy, DrPepper10 @ RIP, Atle!
|
|
|
|
|
| Visit for more: https://plymouth.thetwilightzone.ru/
|
|
--]]
|
|
|
|
local math = math
|
|
local L = L
|
|
local string = string
|
|
local timer = timer
|
|
local LocalPlayer = LocalPlayer
|
|
local CreateSound = CreateSound
|
|
local surface = surface
|
|
local ScrW, ScrH = ScrW, ScrH
|
|
local Color = Color
|
|
local ix = ix
|
|
|
|
local PLUGIN = PLUGIN
|
|
|
|
function PLUGIN:AdjustGasPoints(points)
|
|
if (!points) then return 0 end
|
|
|
|
if (points >= self.LETHAL_GAS) then return 1, true end
|
|
if (points <= 0) then return 0 end
|
|
|
|
local fl, cl = math.floor(points), math.ceil(points)
|
|
local divideBy = points >= 60 and PLUGIN.LETHAL_GAS or 61
|
|
if (fl == cl) then
|
|
return PLUGIN.gasToCooldown[fl] / PLUGIN.gasToCooldown[divideBy], points >= 60
|
|
else
|
|
return math.Remap(points, fl, cl, PLUGIN.gasToCooldown[fl], PLUGIN.gasToCooldown[cl]) / PLUGIN.gasToCooldown[divideBy], points >= 60
|
|
end
|
|
end
|
|
|
|
local gasMaterial = ix.util.GetMaterial("willardnetworks/nlrbleedout/gas-background.png")
|
|
function PLUGIN:DrawHUDOverlays(client, character)
|
|
local gasPoints = math.min(character:GetGasPoints() / self.LETHAL_GAS, 1)
|
|
if (gasPoints > 0.2) then
|
|
surface.SetDrawColor(Color(255, 255, 255, math.Remap(gasPoints, 0.2, 1, 0, 255)))
|
|
surface.SetMaterial(gasMaterial)
|
|
surface.DrawTexturedRect(0, 0, ScrW(), ScrH())
|
|
end
|
|
end
|
|
|
|
local gasIcon = ix.util.GetMaterial("willardnetworks/hud/toxic.png")
|
|
function PLUGIN:DrawBars(client, character, alwaysShow, minimalShow, DrawBar)
|
|
local faction = ix.faction.Get(client:Team())
|
|
if (!faction or faction.noGas) then return end
|
|
|
|
local gasPoints, secondary = self:AdjustGasPoints(character:GetGasPoints())
|
|
if (alwaysShow or gasPoints > 0 and !(secondary and gasPoints == 1)) then
|
|
if (alwaysShow or !minimalShow or (gasPoints > 0.5 and !secondary)) then
|
|
if (!secondary) then
|
|
DrawBar(gasIcon, gasPoints)
|
|
else
|
|
DrawBar(gasIcon, 1, nil, gasPoints)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function PLUGIN:DrawAlertBars(client, character, DrawBar)
|
|
local faction = ix.faction.Get(client:Team())
|
|
if (!faction or faction.noGas) then return end
|
|
|
|
local gasPoints, secondary = self:AdjustGasPoints(character:GetGasPoints())
|
|
if (secondary) then
|
|
DrawBar(L(gasPoints >= 1 and "gasLethal" or "gasHigh"))
|
|
end
|
|
end
|
|
|
|
function PLUGIN:GetPlayerESPText(client, toDraw, distance, alphaFar, alphaMid, alphaClose)
|
|
local character = client:GetCharacter()
|
|
local gasPoints = character:GetGasPoints()
|
|
if (gasPoints >= self.LETHAL_GAS) then
|
|
toDraw[#toDraw + 1] = {alpha = alphaMid, priority = 16, text = string.format("Gas: LETHAL (%dm left)", math.ceil(180 - gasPoints))}
|
|
elseif (gasPoints > 0) then
|
|
toDraw[#toDraw + 1] = {alpha = alphaClose, priority = 24, text = "Gas: "..math.Round(character:GetGasPoints(), 1)}
|
|
end
|
|
end
|
|
|
|
local heartbeatSound
|
|
local breathingSound
|
|
local breathingPlaying = false
|
|
function PLUGIN:InitPostEntity()
|
|
timer.Create("ixBetterGasHeartbeat", 5, 0, function()
|
|
local client = LocalPlayer()
|
|
local faction = ix.faction.Get(client:Team())
|
|
if (faction and faction.noGas) then return end
|
|
|
|
local timerDelay = 60
|
|
local playedHeartbeatSound = false
|
|
|
|
if (client:Alive() and client:GetCharacter()) then
|
|
local gasPointFraction = math.min(client:GetCharacter():GetGasPoints() / self.LETHAL_GAS, 1)
|
|
if (gasPointFraction > 0.5) then
|
|
if (!heartbeatSound) then
|
|
heartbeatSound = CreateSound(client, "player/heartbeat1.wav")
|
|
end
|
|
|
|
timerDelay = 0.75 + math.Remap(gasPointFraction, 0.5, 1, 1.25, 0)
|
|
heartbeatSound:PlayEx(math.Remap(gasPointFraction, 0.5, 1, 0.05, 0.75), 100)
|
|
playedHeartbeatSound = true
|
|
end
|
|
end
|
|
|
|
if (!playedHeartbeatSound and heartbeatSound) then
|
|
heartbeatSound:Stop()
|
|
end
|
|
|
|
timer.Adjust("ixBetterGasHeartbeat", timerDelay)
|
|
end)
|
|
|
|
timer.Create("ixBetterGasBreathing", 5, 0, function()
|
|
local client = LocalPlayer()
|
|
local faction = ix.faction.Get(client:Team())
|
|
if (faction and faction.noGas) then return end
|
|
|
|
if (breathingPlaying) then
|
|
breathingSound:Stop()
|
|
timer.Adjust("ixBetterGasBreathing", 5)
|
|
end
|
|
|
|
if (client:Alive() and client:GetCharacter()) then
|
|
local gasPointFraction = math.min(client:GetCharacter():GetGasPoints() / 100, 1)
|
|
if (gasPointFraction > 0.3) then
|
|
if (!breathingSound) then
|
|
breathingSound = CreateSound(client, "player/breathe1.wav")
|
|
end
|
|
|
|
local clamped = math.Clamp(gasPointFraction, 0.3, 1)
|
|
if (!breathingPlaying and math.Remap(clamped, 0.3, 1, 0, 1) >= math.random()) then
|
|
local delay = math.Remap(clamped, 0.3, 1, 60, 20)
|
|
local duration = math.Remap(clamped, 0.3, 1, 3, 20)
|
|
breathingSound:PlayEx(math.Remap(clamped, 0.3, 1, 0.05, 0.75), 100)
|
|
breathingPlaying = true
|
|
if (duration < delay) then
|
|
timer.Simple(duration, function()
|
|
breathingSound:Stop()
|
|
breathingPlaying = false
|
|
end)
|
|
end
|
|
|
|
timer.Adjust("ixBetterGasBreathing", delay)
|
|
return
|
|
end
|
|
|
|
timer.Adjust("ixBetterGasBreathing", 5)
|
|
else
|
|
timer.Adjust("ixBetterGasBreathing", 60)
|
|
end
|
|
end
|
|
end)
|
|
end
|
|
|
|
PLUGIN.OnReloaded = PLUGIN.InitPostEntity |