mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
274
gamemodes/helix/plugins/medical/cl_hooks.lua
Normal file
274
gamemodes/helix/plugins/medical/cl_hooks.lua
Normal file
@@ -0,0 +1,274 @@
|
||||
--[[
|
||||
| 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 PLUGIN = PLUGIN
|
||||
|
||||
ix.hud.DrawDeath = function() end
|
||||
|
||||
|
||||
do
|
||||
local healthIcon = ix.util.GetMaterial("willardnetworks/hud/hp.png")
|
||||
local armorIcon = ix.util.GetMaterial("willardnetworks/hud/armor.png")
|
||||
|
||||
function PLUGIN:DrawImportantBars(client, character, alwaysShow, minimalShow, DrawBar)
|
||||
local maxHealth = client:GetMaxHealth()
|
||||
local fractionHealth, fractionFakeHealth = client:Health() / maxHealth, character:GetHealing("fakeHealth") / maxHealth
|
||||
if (alwaysShow or ((fractionHealth < 1 or fractionFakeHealth > 0) and (!minimalShow or (fractionHealth < 0.8 and fractionFakeHealth < 0.2)))) then
|
||||
-- Health/Fake Health
|
||||
if (fractionFakeHealth == 0) then
|
||||
DrawBar(healthIcon, fractionHealth)
|
||||
else
|
||||
DrawBar(healthIcon, fractionHealth - fractionFakeHealth, fractionHealth)
|
||||
end
|
||||
end
|
||||
|
||||
-- Armor
|
||||
if (alwaysShow or client:Armor() > 0) then
|
||||
local isOTA = client:Team() == FACTION_OTA
|
||||
if (alwaysShow or !minimalShow or (isOTA and client:Armor() != 150) or (!isOTA and client:Armor() != 50)) then
|
||||
local fraction = client:Armor() / (isOTA and 150 or 50)
|
||||
DrawBar(armorIcon, fraction, nil, (fraction > 1 and (fraction - 1)) or nil)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:DrawAlertBars(client, character, DrawBar)
|
||||
if (character:GetBleedout() > 0) then
|
||||
DrawBar(L("areBleeding"))
|
||||
end
|
||||
end
|
||||
|
||||
local bleedoutMaterial = ix.util.GetMaterial("willardnetworks/nlrbleedout/bleedout-background.png")
|
||||
function PLUGIN:DrawHUDOverlays(client, character)
|
||||
local health = client:Health() * 100 / client:GetMaxHealth()
|
||||
if (health <= 90) then
|
||||
surface.SetDrawColor(Color(255, 0, 0, math.Remap(math.max(health, 0), 90, 0, 0, 80)))
|
||||
surface.SetMaterial(bleedoutMaterial)
|
||||
surface.DrawTexturedRect(0, 0, ScrW(), ScrH())
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:GetPlayerESPText(client, toDraw, distance, alphaFar, alphaMid, alphaClose)
|
||||
local character = client:GetCharacter()
|
||||
if (character:GetBleedout() > 0) then
|
||||
toDraw[#toDraw + 1] = {alpha = alphaFar, priority = 3, text = "Saignement : "..character:GetBleedout()}
|
||||
end
|
||||
|
||||
if (character:GetHealing() and
|
||||
(character:GetHealing("painkillers") > 0 or character:GetHealing("fakeHealth") > 0 or
|
||||
character:GetHealing("bandage") > 0 or character:GetHealing("disinfectant") > 0)) then
|
||||
local text1 = string.format("Soignement : B:%d/D:%ds",
|
||||
character:GetHealing("bandage"),
|
||||
character:GetHealing("disinfectant")
|
||||
)
|
||||
|
||||
toDraw[#toDraw + 1] = {alpha = alphaClose, priority = 22.001, text = text1}
|
||||
if (character:GetHealing("painkillers") > 0 or character:GetHealing("fakeHealth") > 0) then
|
||||
local text2 = string.format(" P:%d - %ds/F: %d",
|
||||
character:GetHealing("painkillers"),
|
||||
character:GetHealing("painkillersDuration"),
|
||||
character:GetHealing("fakeHealth")
|
||||
)
|
||||
toDraw[#toDraw + 1] = {alpha = alphaClose, priority = 22.002, text = text2}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:GetInjuredText(client)
|
||||
if (!client:Alive()) then
|
||||
return "injDead", self:GetColor(0)
|
||||
end
|
||||
|
||||
local character = client:GetCharacter()
|
||||
local health = client:Health()
|
||||
local maxHealth = client:GetMaxHealth()
|
||||
|
||||
local bandage = character:GetHealing("bandage")
|
||||
local disinfectant = character:GetHealing("disinfectant")
|
||||
local fakeHealth = character:GetHealing("fakeHealth")
|
||||
|
||||
-- totalHealthFraction
|
||||
local thf = math.Clamp((health - fakeHealth) / maxHealth, 0, 1)
|
||||
|
||||
if (character:GetBleedout() > 0) then
|
||||
return "bleedingOut", self:GetColor(thf - 0.1)
|
||||
end
|
||||
|
||||
if (bandage > 0) then
|
||||
if ((!ix.action or character:CanDoAction("check_sufficient_bandage")) and bandage + (health - fakeHealth) >= maxHealth) then
|
||||
if (disinfectant > 0) then
|
||||
return "allBandagedDis", self:GetColor(thf + 0.3)
|
||||
else
|
||||
return "allBandaged", self:GetColor(thf + 0.2)
|
||||
end
|
||||
else
|
||||
if (disinfectant > 0) then
|
||||
return "someBandagedDis", self:GetColor(thf + 0.1)
|
||||
else
|
||||
return "someBandaged", self:GetColor(thf)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if (thf < 0) then
|
||||
return "injWonder", self:GetColor(thf)
|
||||
elseif (thf < 0.2) then
|
||||
return "injNearDeath", self:GetColor(thf)
|
||||
elseif (thf < 0.4) then
|
||||
return "injCrit", self:GetColor(thf)
|
||||
elseif (thf < 0.6) then
|
||||
return "injMaj", self:GetColor(thf)
|
||||
elseif (thf < 0.8) then
|
||||
return "injLittle", self:GetColor(thf)
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:GetColor(totalHealthFraction)
|
||||
return Color(
|
||||
math.Clamp(255 * 2 * (1 - totalHealthFraction), 0, 255),
|
||||
math.Clamp(255 * 2 * totalHealthFraction, 0, 255),
|
||||
0
|
||||
)
|
||||
end
|
||||
|
||||
local function textStandard(parent, color, font, topMargin, text)
|
||||
parent:Dock(TOP)
|
||||
parent:DockMargin(0, SScaleMin(topMargin / 3), 0, 0)
|
||||
parent:SetText(text)
|
||||
parent:SetTextColor(color)
|
||||
parent:SetFont(font)
|
||||
parent:SetContentAlignment(5)
|
||||
parent:SizeToContents()
|
||||
end
|
||||
|
||||
function PLUGIN:HUDPaintBackground()
|
||||
local client = LocalPlayer()
|
||||
local character = client:GetCharacter()
|
||||
if (!character) then return end
|
||||
|
||||
if ix.bleedout and ix.bleedout:IsVisible() then return end
|
||||
|
||||
if (client:GetLocalVar("blur", 0) > 0 and !client:ShouldDrawLocalPlayer()) and
|
||||
character.wasBleeding then
|
||||
if ix.gui.bleedoutTextBackground then
|
||||
return
|
||||
end
|
||||
|
||||
ix.gui.bleedoutTextBackground = vgui.Create("Panel")
|
||||
ix.gui.bleedoutTextBackground:SetSize(ScrW(), ScrH())
|
||||
ix.gui.bleedoutTextBackground.Paint = function(_, w, h)
|
||||
surface.SetDrawColor(ColorAlpha(color_black, 200))
|
||||
surface.DrawRect(0, 0, w, h)
|
||||
end
|
||||
|
||||
local bleedoutTextPanel = ix.gui.bleedoutTextBackground:Add("Panel")
|
||||
|
||||
local hpInfoText = bleedoutTextPanel:Add("DLabel")
|
||||
local requiredHealth = math.ceil(client:GetMaxHealth() * ix.config.Get("WakeupTreshold") / 100)
|
||||
textStandard(hpInfoText, Color(200, 200, 200, 255), "TitlesFontNoBoldNoClamp", 0, L("requiredHealth", requiredHealth))
|
||||
|
||||
local currentHPText = bleedoutTextPanel:Add("DLabel")
|
||||
textStandard(currentHPText, Color(255, 78, 79, 255), "TitlesFontNoBoldNoClamp", 10, L("currentHP", client:Health()))
|
||||
|
||||
timer.Create("CurrentHPTextUpdate", 1, 0, function()
|
||||
if IsValid(currentHPText) then
|
||||
currentHPText:SetText("PV actuels : "..client:Health())
|
||||
currentHPText:SizeToContents()
|
||||
else
|
||||
timer.Remove("CurrentHPTextUpdate")
|
||||
end
|
||||
end)
|
||||
|
||||
bleedoutTextPanel:SetSize(SScaleMin(520 / 3), hpInfoText:GetTall() + currentHPText:GetTall() + SScaleMin(10 / 3))
|
||||
bleedoutTextPanel:Center()
|
||||
|
||||
local x, y = bleedoutTextPanel:GetPos()
|
||||
bleedoutTextPanel:SetPos(x, y - SScaleMin(65 / 3)) -- center but with less y position because Atle
|
||||
else
|
||||
if ix.gui.bleedoutTextBackground then
|
||||
ix.gui.bleedoutTextBackground:Remove()
|
||||
ix.gui.bleedoutTextBackground = nil
|
||||
end
|
||||
|
||||
if timer.Exists("CurrentHPTextUpdate_"..LocalPlayer():SteamID64()) then
|
||||
timer.Remove("CurrentHPTextUpdate_"..LocalPlayer():SteamID64())
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
netstream.Hook("BleedoutScreen", function(bWasBleeding)
|
||||
LocalPlayer():GetCharacter().wasBleeding = bWasBleeding
|
||||
end)
|
||||
|
||||
netstream.Hook("ixDeathScreen", function()
|
||||
if (IsValid(ix.bleedout)) then
|
||||
ix.bleedout:Remove()
|
||||
end
|
||||
|
||||
if (IsValid(ix.death)) then
|
||||
ix.death:Remove()
|
||||
end
|
||||
|
||||
ix.death = vgui.Create("ixDeathScreen")
|
||||
end)
|
||||
|
||||
netstream.Hook("ixBleedoutScreen", function(time)
|
||||
if (IsValid(ix.bleedout)) then
|
||||
ix.bleedout:Remove()
|
||||
end
|
||||
|
||||
if (IsValid(ix.death)) then
|
||||
ix.death:Remove()
|
||||
end
|
||||
|
||||
ix.bleedout = vgui.Create("ixBleedoutScreen")
|
||||
ix.bleedout:SetTime(time)
|
||||
end)
|
||||
|
||||
PLUGIN.netVars = {"table", "bandage", "disinfectant", "painkillers"}
|
||||
net.Receive("ixHealingData", function(len)
|
||||
local id = net.ReadUInt(32)
|
||||
local character = ix.char.loaded[id]
|
||||
local data = len > 32 and {} or nil
|
||||
|
||||
if (len > 32) then
|
||||
local healType = PLUGIN.netVars[net.ReadUInt(2) + 1]
|
||||
if (healType == "table") then
|
||||
data.bandage = net.ReadUInt(16)
|
||||
data.disinfectant = net.ReadUInt(16)
|
||||
data.painkillers = net.ReadUInt(16)
|
||||
data.painkillersDuration = net.ReadUInt(16)
|
||||
data.healingAmount = net.ReadFloat()
|
||||
data.fakeHealth = net.ReadFloat()
|
||||
else
|
||||
data[healType] = net.ReadUInt(16)
|
||||
if (healType == "painkillers") then
|
||||
data.painkillersDuration = ix.config.Get("HealingPainkillerDuration") * 60
|
||||
end
|
||||
end
|
||||
else
|
||||
if (character) then
|
||||
character.vars.healing = nil
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
if (character) then
|
||||
if (!character.vars.healing) then
|
||||
character.vars.healing = data
|
||||
else
|
||||
for k, v in pairs(data) do
|
||||
character.vars.healing[k] = v
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
Reference in New Issue
Block a user