Files
jailbreakplusplus/gamemode/core/cl_hud_weaponselection.lua

222 lines
7.8 KiB
Lua
Raw Normal View History

2026-01-04 18:21:33 -06:00
-- ####################################################################################
-- ## ##
-- ## ##
-- ## CASUAL BANANAS CONFIDENTIAL ##
-- ## ##
-- ## __________________________ ##
-- ## ##
-- ## ##
-- ## Copyright 2014 (c) Casual Bananas ##
-- ## All Rights Reserved. ##
-- ## ##
-- ## NOTICE: All information contained herein is, and remains ##
-- ## the property of Casual Bananas. The intellectual and technical ##
-- ## concepts contained herein are proprietary to Casual Bananas and may be ##
-- ## covered by U.S. and Foreign Patents, patents in process, and are ##
-- ## protected by trade secret or copyright law. ##
-- ## Dissemination of this information or reproduction of this material ##
-- ## is strictly forbidden unless prior written permission is obtained ##
-- ## from Casual Bananas ##
-- ## ##
-- ## _________________________ ##
-- ## ##
-- ## ##
-- ## Casual Bananas is registered with the "Kamer van Koophandel" (Dutch ##
-- ## chamber of commerce) in The Netherlands. ##
-- ## ##
-- ## Company (KVK) number : 59449837 ##
-- ## Email : info@casualbananas.com ##
-- ## ##
-- ## ##
-- ####################################################################################
local selectedTab = 0;
local c = 0;
local slots = {}
local slotPos = 1;
local function ArrangeSlots()
slots = {};
c = 0;
for k,v in pairs(LocalPlayer():GetWeapons())do
if v.Slot then
if not slots[v.Slot+1] then
slots[v.Slot+1] = {}
end
slots[v.Slot+1][#slots[v.Slot+1]+1] = v;
if v.Slot == 3 then
c = c+1;
end
end
end
if selectedTab == 4 then
slotPos = (((slotPos-1)%c)+1);
else
slotPos = 1;
end
end
surface.CreateFont("JBWeaponSelectionFont",{
font = JB.Config.font,
size = 28,
})
surface.CreateFont("JBWeaponSelectionFontBlur",{
font = JB.Config.font,
size = 28,
blursize = 2
})
local tabX = {-256,-256,-256,-256};
local matTile = Material("materials/jailbreak_excl/weapon_selection_tile.png");
local mul;
hook.Add("Think","JB.Think.WeaponSelection.Animate",function()
if selectedTab > 0 and LocalPlayer():Alive() and LocalPlayer():Team() < 3 then
mul=FrameTime()*40;
tabX[1] = math.Clamp(Lerp(0.20 * mul,tabX[1],1),-256,0);
tabX[2] = math.Clamp(Lerp(0.18 * mul,tabX[2],1),-256,0);
tabX[3] = math.Clamp(Lerp(0.16 * mul,tabX[3],1),-256,0);
tabX[4] = math.Clamp(Lerp(0.14 * mul,tabX[4],1),-256,0);
else
mul=FrameTime()*40;
tabX[1] = math.Clamp(Lerp(0.40 * mul,tabX[1],-256),-256,0);
tabX[2] = math.Clamp(Lerp(0.39 * mul,tabX[2],-256),-256,0);
tabX[3] = math.Clamp(Lerp(0.38 * mul,tabX[3],-256),-256,0);
tabX[4] = math.Clamp(Lerp(0.37 * mul,tabX[4],-256),-256,0);
end
end);
hook.Add("HUDPaint","JB.HUDPaint.WeaponSelection",function()
if tabX[1] >= -256 and LocalPlayer():Alive() and LocalPlayer():Team() < 3 then
for i=1,4 do
local y = 250 + ((i-1) * 54);
local x = math.Round(tabX[i]);
surface.SetDrawColor(selectedTab == i and JB.Color.white or JB.Color["#888"]);
surface.SetMaterial(matTile);
surface.DrawTexturedRect(x + 0,y,256,64);
if slots[i] and slots[i][1] then
draw.SimpleText(slots[i][1].PrintName or "Invalid","JBWeaponSelectionFontBlur",x + 210,y+(64-40)/2+40/2, JB.Color.black,2,1)
draw.SimpleText(slots[i][1].PrintName or "Invalid","JBWeaponSelectionFont",x + 210,y+(64-40)/2+40/2, selectedTab == i and JB.Color.white or JB.Color["#888"],2,1)
end
draw.SimpleText(i == 1 and "UNARMED" or i == 2 and "PRIMARY" or i == 3 and "SECONDARY" or i == 4 and "OTHER","JBNormal",x + 4,y+(64-40)/2+3,Color(255,255,255,2));
end
end
end)
timer.Create("UpdateSWEPSelectthings",1,0,function()
if selectedTab > 0 then
ArrangeSlots();
end
end)
local nScroll = 1;
function JB.Gamemode:PlayerBindPress(p, bind, pressed)
if not pressed then return false end
if string.find(bind, "invnext") then
if LocalPlayer():Team() > 2 or !LocalPlayer():Alive() then return true end
nScroll = nScroll + 1;
if nScroll > 4 then
nScroll = 1;
end
if selectedTab ~= nScroll then
surface.PlaySound("common/wpn_moveselect.wav");
end
selectedTab = nScroll;
ArrangeSlots();
return true;
elseif string.find(bind, "invprev") then
if LocalPlayer():Team() > 2 or !LocalPlayer():Alive() then return true end
nScroll = nScroll-1;
if nScroll < 1 then
nScroll = 4;
end
if selectedTab ~= nScroll then
surface.PlaySound("common/wpn_moveselect.wav");
end
selectedTab = nScroll;
ArrangeSlots();
return true;
elseif string.find(bind, "slot0") then
selectedTab = 0;
return true
elseif string.find(bind, "slot1") then
if LocalPlayer():Team() > 2 or !LocalPlayer():Alive() then return true end
if selectedTab ~= 1 then
surface.PlaySound("common/wpn_moveselect.wav");
else
selectedTab = 0;
return true;
end
selectedTab = 1;
ArrangeSlots();
return true
elseif string.find(bind, "slot2") then
if LocalPlayer():Team() > 2 or !LocalPlayer():Alive() then return true end
if selectedTab ~= 2 then
surface.PlaySound("common/wpn_moveselect.wav");
else
selectedTab = 0;
return true;
end
selectedTab = 2;
ArrangeSlots();
return true
elseif string.find(bind, "slot3") then
if LocalPlayer():Team() > 2 or !LocalPlayer():Alive() then return true end
if selectedTab ~= 3 then
surface.PlaySound("common/wpn_moveselect.wav");
else
selectedTab = 0;
return true;
end
selectedTab = 3;
ArrangeSlots();
return true
elseif string.find(bind, "slot4") then
if LocalPlayer():Team() > 2 or !LocalPlayer():Alive() then return true end
if selectedTab ~= 4 then
surface.PlaySound("common/wpn_moveselect.wav");
else
selectedTab = 0;
return true;
end
selectedTab = 4;
ArrangeSlots();
return true
elseif string.find(bind, "slot5") then
selectedTab = 0;
return true
elseif string.find(bind, "slot6") then
selectedTab = 0;
return true
elseif string.find(bind, "slot7") then
selectedTab = 0;
return true
elseif string.find(bind, "slot8") then
selectedTab = 0;
return true
elseif string.find(bind, "slot9") then
selectedTab = 0;
return true
elseif string.find(bind, "+attack") then
if LocalPlayer():Team() > 2 then return true end
if selectedTab > 0 and slots[selectedTab] then
if not slots[selectedTab][slotPos] or not IsValid(slots[selectedTab][slotPos]) then return true end
RunConsoleCommand("use",slots[selectedTab][slotPos]:GetClass())
nScroll = selectedTab;
selectedTab = 0;
return true;
end
end
return false
end