Compare commits

...

5 commits

Author SHA1 Message Date
LostTrackpad
3907207dc9 Hopefully fix FOV changing 2024-06-06 19:09:37 +07:00
LostTrackpad
cfdf6fedac Fix invalid (S)WEP causing issues 2024-06-06 13:34:34 +07:00
LostTrackpad
5723dbed10 Remove some unused stuff 2024-06-06 13:29:07 +07:00
LostTrackpad
5a3edb21f8 Properly squash FOV bugs 2024-06-06 13:26:48 +07:00
LostTrackpad
f626a1d1a7 Further polish up the FOV fix 2024-06-06 12:46:16 +07:00

View file

@ -7,6 +7,13 @@ if CLIENT then
CreateConVar("cl_weaponcolor", "0.30 1.80 2.10", {FCVAR_ARCHIVE, FCVAR_USERINFO, FCVAR_DONTRECORD}, "The value is a Vector - so between 0-1 - not between 0-255") CreateConVar("cl_weaponcolor", "0.30 1.80 2.10", {FCVAR_ARCHIVE, FCVAR_USERINFO, FCVAR_DONTRECORD}, "The value is a Vector - so between 0-1 - not between 0-255")
CreateConVar("cl_playerskin", "0", {FCVAR_ARCHIVE, FCVAR_USERINFO, FCVAR_DONTRECORD}, "The skin to use, if the model has any") CreateConVar("cl_playerskin", "0", {FCVAR_ARCHIVE, FCVAR_USERINFO, FCVAR_DONTRECORD}, "The skin to use, if the model has any")
CreateConVar("cl_playerbodygroups", "0", {FCVAR_ARCHIVE, FCVAR_USERINFO, FCVAR_DONTRECORD}, "The bodygroups to use, if the model has any") CreateConVar("cl_playerbodygroups", "0", {FCVAR_ARCHIVE, FCVAR_USERINFO, FCVAR_DONTRECORD}, "The bodygroups to use, if the model has any")
local lframeswepclass = lframeswepclass or ""
local fovdelaytoggle = false
end
if SERVER then
util.AddNetworkString("Beatrun_ClientFOVChange")
end end
local PLAYER = {} local PLAYER = {}
@ -368,17 +375,32 @@ function PLAYER:CreateMove(cmd)
end end
function PLAYER:CalcView(view) function PLAYER:CalcView(view)
local fov = GetConVar("Beatrun_FOV"):GetInt()
local mult = (self.Player:InOverdrive() and 1.1) or 1 local mult = (self.Player:InOverdrive() and 1.1) or 1
local fixfovmult = 1 local fixfovmult = 1
if CLIENT then if CLIENT then
if !LocalPlayer():GetActiveWeapon().ARC9 and !FOVModifierBlock then -- VERY hacky and dirty code and I apologize in advance
fixfovmult = view.fov / fov
local fov = GetConVar("Beatrun_FOV"):GetInt()
if IsValid(LocalPlayer():GetActiveWeapon()) then
if lframeswepclass != LocalPlayer():GetActiveWeapon():GetClass() then
-- SP clientside weapon swap detection
FOVModifierBlock = true
timer.Simple(1, function() FOVModifierBlock = false end)
end
if !FOVModifierBlock and !LocalPlayer():GetActiveWeapon().ARC9 then
fixfovmult = view.fov / fov
else
fixfovmult = 1
end
view.fov = fov * mult * fixfovmult
lframeswepclass = LocalPlayer():GetActiveWeapon():GetClass()
else else
fixfovmult = 1 view.fov = fov * mult
end end
view.fov = fov * mult * fixfovmult
end end
if self.TauntCam:CalcView(view, self.Player, self.Player:IsPlayingTaunt()) then return true end if self.TauntCam:CalcView(view, self.Player, self.Player:IsPlayingTaunt()) then return true end
@ -536,17 +558,39 @@ hook.Add("PlayerSpawn", "ResetStateTransition", function(ply, transition)
end) end)
end) end)
hook.Add("PlayerSwitchWeapon", "BeatrunSwitchFOVFix", function(ply, oldwep) hook.Add("PlayerSwitchWeapon", "BeatrunSwitchFOVFix", function(ply)
-- This ENTIRE hook is for dealing with ARC9's stupid FOV reset -- This ENTIRE hook is for dealing with ARC9's stupid FOV reset
-- behavior after switching away from an ARC9 SWEP. -- behavior after switching away from an ARC9 SWEP.
-- Yes this is hacky as hell. -- Yes this is hacky as hell.
FOVModifierBlock = true
ply:SetFOV(ply:GetInfoNum("Beatrun_FOV", 120)) ply:SetFOV(ply:GetInfoNum("Beatrun_FOV", 120))
timer.Simple(0, function() timer.Simple(0, function()
ply:SetFOV(ply:GetInfoNum("Beatrun_FOV", 120)) ply:SetFOV(ply:GetInfoNum("Beatrun_FOV", 120))
end) end)
timer.Simple(0.8, function() FOVModifierBlock = false end)
end) end)
cvars.AddChangeCallback("Beatrun_FOV", function(convar, oldval, newval)
-- Live FOV change in SP, needs work for MP
if CLIENT and game.SinglePlayer() then
LocalPlayer():SetFOV(newval)
elseif CLIENT then
FOVModifierBlock = true
timer.Create("beatrunfovdelay", 0.16, 1, function()
FOVModifierBlock = false
if !FOVModifierBlock then
net.Start("Beatrun_ClientFOVChange")
net.WriteInt(newval, 16)
net.SendToServer()
FOVModifierBlock = true
end
end)
end
end)
if SERVER then
net.Receive("Beatrun_ClientFOVChange", function(len, ply)
ply:SetFOV((net.ReadInt(16)))
end)
end
player_manager.RegisterClass("player_beatrun", PLAYER, "player_default") player_manager.RegisterClass("player_beatrun", PLAYER, "player_default")