Files
jailbreakplusplus/entities/weapons/weapon_jb_base/client.lua
2026-01-04 18:21:33 -06:00

220 lines
8.0 KiB
Lua

-- ####################################################################################
-- ## ##
-- ## ##
-- ## 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 MODE_NORMAL = 1;
local MODE_AIM = 2;
local MODE_SPRINT = 3;
SWEP.DrawAmmo = true;
SWEP.DrawCrosshair = false;
SWEP.ViewModelFOV = 52;
SWEP.ViewModelFlip = false;
SWEP.CSMuzzleFlashes = true;
SWEP.DrawWeaponInfoBox = true;
SWEP.Slot = 1;
SWEP.SlotPos = 1;
SWEP.lastFire = 0;
local matCrosshair = Material("materials/jailbreak_excl/crosshair.png");
local lastFire = 0;
function SWEP:FireCallback()
if IsFirstTimePredicted() then
local vm = self.Owner:GetViewModel();
local muz = vm:GetAttachment("1");
if not self.Em then
self.Em = ParticleEmitter(muz.Pos);
end
local par = self.Em:Add("particle/smokesprites_000" .. math.random(1, 9), muz.Pos);
par:SetStartSize(math.random(0.5, 1));
par:SetStartAlpha(100);
par:SetEndAlpha(0);
par:SetEndSize(math.random(4, 4.5));
par:SetDieTime(1 + math.Rand(-0.3, 0.3));
par:SetRoll(math.Rand(0.2, .8));
par:SetRollDelta(0.8 + math.Rand(-0.3, 0.3));
par:SetColor(140,140,140,200);
par:SetGravity(Vector(0, 0, .5));
local mup = (muz.Ang:Up()*-1);
par:SetVelocity(Vector(0, 0,7)-Vector(mup.x,mup.y,0));
local par = self.Em:Add("sprites/heatwave", muz.Pos);
par:SetStartSize(4);
par:SetEndSize(0);
par:SetDieTime(0.6);
par:SetGravity(Vector(0, 0, 1));
par:SetVelocity(Vector(0, 0, 1));
end
lastFire = CurTime();
end
function SWEP:AdjustMouseSensitivity()
return self:GetNWMode() == MODE_AIM and .5 or 1;
end
local gap = 5
local gap2 = 0
local color_sight = Color(255,255,255,255);
local x2 = (ScrW() - 1024) / 2
local y2 = (ScrH() - 1024) / 2
local x3 = ScrW() - x2
local y3 = ScrH() - y2
local dt;
function SWEP:DrawHUD()
dt = FrameTime();
x, y = ScrW() / 2, ScrH() / 2;
local scale = (10 * self.Primary.Cone)* (2 - math.Clamp( (CurTime() - self:GetNWLastShoot()) * 5, 0.0, 1.0 ))
if (self:GetNWMode() == MODE_AIM and not self.FakeIronSights) or self:GetNWMode() == MODE_SPRINT then
color_sight.a = math.Approach(color_sight.a, 0, dt / 0.0017)
else
color_sight.a = math.Approach(color_sight.a, 230, dt / 0.001)
end
gap = math.Approach(gap, 50 * ((10 / (self.Owner:GetFOV() / 90)) * self:GetNWLastShoot()), 1.5 + gap * 0.1)
surface.SetDrawColor(color_sight);
surface.SetMaterial(matCrosshair);
surface.DrawTexturedRectRotated(x - gap - 14/2,y,32,32,270+180);
surface.DrawTexturedRectRotated(x + gap + 14/2,y,32,32,90+180);
surface.DrawTexturedRectRotated(x, y + gap + 14/2,32,32,0+180);
surface.DrawTexturedRectRotated(x, y - gap - 14/2,32,32,180+180);
end
local time,fireTime,targetPos,targetAng,speed,speedReduced;
local idealPos = Vector(0,0,0);
function SWEP:GetViewModelPosition( pos, ang )
if not IsValid(self.Owner) then return end
local mode = self:GetNWMode();
if mode < 1 or mode > 3 then
mode = MODE_NORMAL;
end
time = math.Clamp(FrameTime() * 7,0,1);
idealPos.x = self.Positions[mode].pos.x;
idealPos.y = self.Positions[mode].pos.y;
if mode == MODE_AIM and self.FakeIronSights then
idealPos.z = self.Positions[mode].pos.z-1.4;
else
idealPos.z = self.Positions[mode].pos.z
end
self.smPos = LerpVector(time,self.smPos or self.Positions[mode].pos,idealPos);
self.smAng = LerpVector(time,self.smAng or self.Positions[mode].ang,self.Positions[mode].ang);
if !self.lastMode or mode ~= self.lastMode then
self.lastMode = mode;
if mode == MODE_AIM then
self.SwayScale = 0
self.BobScale = 0
else
self.SwayScale = 0.8
self.BobScale = 0.8
end
end
targetPos = self.smPos + vector_origin;
targetAng = self.smAng;
if mode == MODE_AIM then
local mul = 0;
fireTime = math.Clamp(FrameTime()*7,.05,.18);
lastFire = lastFire or 0;
if lastFire > CurTime() - fireTime then
mul = math.Clamp( (CurTime() - lastFire) / fireTime, 0, .5 )
mul = 1-mul;
end
targetPos.y = targetPos.y + (-self.Primary.IronShootForce * mul);
elseif mode == MODE_SPRINT then
speed = self.Owner:GetVelocity():Length();
local clamp = math.Clamp((4 + speed / 100) / (self.Owner:Crouching() and 1.5 or 1), 0, 7)
local co = math.cos(CurTime() * clamp);
local si = math.sin(CurTime() * clamp);
local ta = math.atan(co, si)
local ta2 = math.atan(co * si, co * si)
speedReduced = speed / 250
targetPos.x = targetPos.x + ta * 0.1375 * speedReduced;
targetPos.z = targetPos.z + ta2 * 0.0625 * speedReduced;
targetAng.y = targetAng.y + ta * 0.125 * speedReduced;
targetAng.x = targetAng.x + ta2 * 0.25 * speedReduced;
targetAng.z = targetAng.z + ta2 * 0.375 * speedReduced;
end
ang:RotateAroundAxis( ang:Right(), targetAng.x);
ang:RotateAroundAxis( ang:Up(), targetAng.y);
ang:RotateAroundAxis( ang:Forward(), targetAng.z);
pos = pos + targetPos.x * ang:Right();
pos = pos + targetPos.y * ang:Forward();
pos = pos + targetPos.z * ang:Up();
return pos, ang
end
local lp,wep;
hook.Add("HUDPaint","drawHitMarkers",function()
lp=LocalPlayer();
if IsValid(lp) then
wep = lp:GetActiveWeapon();
if IsValid(wep) and wep.Markers then
for k,v in pairs( wep.Markers)do
if v.alpha < 5 then
table.remove( wep.Markers,k);
continue;
end
local pos = v.pos:ToScreen();
surface.SetDrawColor(Color(255,255,255,v.alpha))
surface.DrawLine(pos.x-2,pos.y-2,pos.x-5,pos.y-5);
surface.DrawLine(pos.x+2,pos.y+2,pos.x+5,pos.y+5);
surface.DrawLine(pos.x-2,pos.y+2,pos.x-5,pos.y+5);
surface.DrawLine(pos.x+2,pos.y-2,pos.x+5,pos.y-5);
v.alpha = v.alpha-FrameTime()*240;
end
end
end
end)