This commit is contained in:
lifestorm
2024-08-04 22:55:00 +03:00
parent 0e770b2b49
commit 94063e4369
7342 changed files with 1718932 additions and 14 deletions

View 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)