mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
222
gamemodes/helix/plugins/wepselect.lua
Normal file
222
gamemodes/helix/plugins/wepselect.lua
Normal file
@@ -0,0 +1,222 @@
|
||||
--[[
|
||||
| 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/
|
||||
--]]
|
||||
|
||||
|
||||
PLUGIN.name = "Weapon Select"
|
||||
PLUGIN.author = "Chessnut"
|
||||
PLUGIN.description = "A replacement for the default weapon selection."
|
||||
|
||||
if (CLIENT) then
|
||||
PLUGIN.index = PLUGIN.index or 1
|
||||
PLUGIN.deltaIndex = PLUGIN.deltaIndex or PLUGIN.index
|
||||
PLUGIN.infoAlpha = PLUGIN.infoAlpha or 0
|
||||
PLUGIN.alpha = PLUGIN.alpha or 0
|
||||
PLUGIN.alphaDelta = PLUGIN.alphaDelta or PLUGIN.alpha
|
||||
PLUGIN.fadeTime = PLUGIN.fadeTime or 0
|
||||
|
||||
local matrixScale = Vector(1, 1, 0)
|
||||
|
||||
function PLUGIN:LoadFonts(font, genericFont)
|
||||
surface.CreateFont("ixWeaponSelectFont", {
|
||||
font = font,
|
||||
size = ScreenScale(16),
|
||||
extended = true,
|
||||
weight = 1000
|
||||
})
|
||||
end
|
||||
|
||||
function PLUGIN:HUDShouldDraw(name)
|
||||
if (name == "CHudWeaponSelection") then
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:HUDPaint()
|
||||
if LocalPlayer():GetNetVar("actEnterAngle") then
|
||||
return
|
||||
end
|
||||
|
||||
local frameTime = FrameTime()
|
||||
|
||||
self.alphaDelta = Lerp(frameTime * 10, self.alphaDelta, self.alpha)
|
||||
|
||||
local fraction = self.alphaDelta
|
||||
|
||||
if (fraction > 0.01) then
|
||||
local x, y = ScrW() * 0.5, ScrH() * 0.5
|
||||
local spacing = math.pi * 0.85
|
||||
local radius = 240 * self.alphaDelta
|
||||
local shiftX = ScrW() * .02
|
||||
|
||||
self.deltaIndex = Lerp(frameTime * 12, self.deltaIndex, self.index)
|
||||
|
||||
local weapons = LocalPlayer():GetWeapons()
|
||||
local index = self.deltaIndex
|
||||
|
||||
if (!weapons[self.index]) then
|
||||
self.index = #weapons
|
||||
end
|
||||
|
||||
for i = 1, #weapons do
|
||||
local theta = (i - index) * 0.1
|
||||
local color = ColorAlpha(
|
||||
i == self.index and ix.config.Get("color") or color_white,
|
||||
(255 - math.abs(theta * 3) * 255) * fraction
|
||||
)
|
||||
|
||||
local lastY = 0
|
||||
|
||||
if (self.markup and (i < self.index or i == 1)) then
|
||||
if (self.index != 1) then
|
||||
local _, h = self.markup:Size()
|
||||
lastY = h * fraction
|
||||
end
|
||||
|
||||
if (i == 1 or i == self.index - 1) then
|
||||
self.infoAlpha = Lerp(frameTime * 3, self.infoAlpha, 255)
|
||||
self.markup:Draw(x + 6 + shiftX, y + 30, 0, 0, self.infoAlpha * fraction)
|
||||
end
|
||||
end
|
||||
|
||||
surface.SetFont("ixWeaponSelectFont")
|
||||
local weaponName = weapons[i]:GetPrintName():utf8upper()
|
||||
local _, ty = surface.GetTextSize(weaponName)
|
||||
local scale = 1 - math.abs(theta * 2)
|
||||
|
||||
local matrix = Matrix()
|
||||
matrix:Translate(Vector(
|
||||
shiftX + x + math.cos(theta * spacing + math.pi) * radius + radius,
|
||||
y + lastY + math.sin(theta * spacing + math.pi) * radius - ty / 2 ,
|
||||
1))
|
||||
matrix:Scale(matrixScale * scale)
|
||||
|
||||
cam.PushModelMatrix(matrix)
|
||||
ix.util.DrawText(weaponName, 2, ty / 2, color, 0, 1, "ixWeaponSelectFont")
|
||||
cam.PopModelMatrix()
|
||||
end
|
||||
|
||||
if (self.fadeTime < CurTime() and self.alpha > 0) then
|
||||
self.alpha = 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:OnIndexChanged(weapon)
|
||||
if LocalPlayer():GetNetVar("actEnterAngle") then
|
||||
return
|
||||
end
|
||||
|
||||
self.alpha = 1
|
||||
self.fadeTime = CurTime() + 5
|
||||
self.markup = nil
|
||||
|
||||
if (IsValid(weapon)) then
|
||||
local instructions = weapon.Instructions
|
||||
local text = ""
|
||||
|
||||
if (instructions != nil and instructions:find("%S")) then
|
||||
local color = ix.config.Get("color")
|
||||
text = text .. string.format(
|
||||
"<font=ixItemBoldFont><color=%d,%d,%d>%s</font></color>\n%s\n",
|
||||
color.r, color.g, color.b, L("Talimatlar"), instructions
|
||||
)
|
||||
end
|
||||
|
||||
if (text != "") then
|
||||
self.markup = markup.Parse("<font=ixItemDescFont>"..text, ScrW() * 0.3)
|
||||
self.infoAlpha = 0
|
||||
end
|
||||
|
||||
local source, pitch = hook.Run("WeaponCycleSound")
|
||||
LocalPlayer():EmitSound(source or "common/talk.wav", 50, pitch or 180)
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:PlayerBindPress(client, bind, pressed)
|
||||
if LocalPlayer():GetNetVar("actEnterAngle") then
|
||||
return
|
||||
end
|
||||
|
||||
bind = bind:lower()
|
||||
|
||||
if (!pressed or !bind:find("invprev") and !bind:find("invnext")
|
||||
and !bind:find("slot") and !bind:find("attack")) then
|
||||
return
|
||||
end
|
||||
|
||||
local currentWeapon = client:GetActiveWeapon()
|
||||
local bValid = IsValid(currentWeapon)
|
||||
local bTool
|
||||
|
||||
if (client:InVehicle() or (bValid and currentWeapon:GetClass() == "weapon_physgun" and client:KeyDown(IN_ATTACK))) then
|
||||
return
|
||||
end
|
||||
|
||||
if (bValid and currentWeapon:GetClass() == "gmod_tool") then
|
||||
local tool = client:GetTool()
|
||||
bTool = tool and (tool.Scroll != nil)
|
||||
end
|
||||
|
||||
local weapons = client:GetWeapons()
|
||||
|
||||
if (bind:find("invprev") and !bTool) then
|
||||
local oldIndex = self.index
|
||||
self.index = math.min(self.index + 1, #weapons)
|
||||
|
||||
if (self.alpha == 0 or oldIndex != self.index) then
|
||||
self:OnIndexChanged(weapons[self.index])
|
||||
end
|
||||
|
||||
return true
|
||||
elseif (bind:find("invnext") and !bTool) then
|
||||
local oldIndex = self.index
|
||||
self.index = math.max(self.index - 1, 1)
|
||||
|
||||
if (self.alpha == 0 or oldIndex != self.index) then
|
||||
self:OnIndexChanged(weapons[self.index])
|
||||
end
|
||||
|
||||
return true
|
||||
elseif (bind:find("slot")) then
|
||||
self.index = math.Clamp(tonumber(bind:match("slot(%d)")) or 1, 1, #weapons)
|
||||
self:OnIndexChanged(weapons[self.index])
|
||||
|
||||
return true
|
||||
elseif (bind:find("attack") and self.alpha > 0) then
|
||||
local weapon = weapons[self.index]
|
||||
|
||||
if (IsValid(weapon)) then
|
||||
LocalPlayer():EmitSound(hook.Run("WeaponSelectSound", weapon) or "HL2Player.Use")
|
||||
|
||||
input.SelectWeapon(weapon)
|
||||
self.alpha = 0
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:Think()
|
||||
local client = LocalPlayer()
|
||||
if (!IsValid(client) or !client:Alive()) then
|
||||
self.alpha = 0
|
||||
end
|
||||
end
|
||||
|
||||
function PLUGIN:ScoreboardShow()
|
||||
self.alpha = 0
|
||||
end
|
||||
|
||||
function PLUGIN:ShouldPopulateEntityInfo(entity)
|
||||
if (self.alpha > 0) then
|
||||
return false
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user