Files
wnsrc/lua/lvs_framework/autorun/lvs_player.lua

337 lines
7.3 KiB
Lua
Raw Permalink Normal View History

2024-08-04 23:54:45 +03:00
--[[
| 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 meta = FindMetaTable( "Player" )
function meta:lvsGetAITeam()
return self:GetNWInt( "lvsAITeam", LVS.PlayerDefaultTeam )
end
function meta:lvsGetVehicle()
local Pod = self:GetVehicle()
if not IsValid( Pod ) then return NULL end
if Pod.LVSchecked then
return Pod.LVSBaseEnt
else
local Parent = Pod:GetParent()
if not IsValid( Parent ) then return NULL end
if not Parent.LVS then
Pod.LVSchecked = LVS.MapDoneLoading
Pod.LVSBaseEnt = NULL
return NULL
end
Pod.LVSchecked = LVS.MapDoneLoading
Pod.LVSBaseEnt = Parent
return Parent
end
end
function meta:lvsGetWeaponHandler()
local Pod = self:GetVehicle()
if not IsValid( Pod ) then return NULL end
local weapon = Pod:lvsGetWeapon()
if IsValid( weapon ) then
return weapon
else
local veh = self:lvsGetVehicle()
if not IsValid( veh ) then return NULL end
if veh:GetDriver() == self then
return veh
else
return NULL
end
end
end
function meta:lvsGetControls()
if not istable( self.LVS_BINDS ) then
self:lvsBuildControls()
end
return self.LVS_BINDS
end
function meta:lvsMouseAim()
if LVS:IsDirectInputForced() then
return false
end
return self._lvsMouseAim
end
function meta:lvsMouseSensitivity()
local X = self._lvsMouseX or 1
local Y = self._lvsMouseY or 1
local delta = self._lvsReturnDelta or 1
return X, Y, delta
end
function meta:lvsBuildControls()
if istable( self.LVS_BINDS ) then
table.Empty( self.LVS_BINDS )
end
if SERVER then
self._lvsMouseAim = self:GetInfoNum( "lvs_mouseaim", 0 ) == 1
self.LVS_BINDS = table.Copy( LVS.KEYS_CATEGORIES )
for _,v in pairs( LVS.KEYS_REGISTERED ) do
if v.id == "~SKIP~" then continue end
local ButtonID = self:GetInfoNum( v.cmd, 0 )
if not self.LVS_BINDS[v.category][ ButtonID ] then
self.LVS_BINDS[v.category][ ButtonID ] = {}
end
table.insert( self.LVS_BINDS[v.category][ ButtonID ], v.id )
end
net.Start( "lvs_buildcontrols" )
net.Send( self )
self._lvsMouseX = self:GetInfoNum( "lvs_sensitivity_x", 1 )
self._lvsMouseY = self:GetInfoNum( "lvs_sensitivity_y", 1 )
self._lvsReturnDelta = self:GetInfoNum( "lvs_return_delta", 1 )
else
self._lvsMouseAim = GetConVar( "lvs_mouseaim" ):GetInt() == 1
self._lvsMouseX = GetConVar( "lvs_sensitivity_x" ):GetFloat()
self._lvsMouseY = GetConVar( "lvs_sensitivity_y" ):GetFloat()
self._lvsReturnDelta = GetConVar( "lvs_return_delta" ):GetFloat()
self.LVS_BINDS = {}
local KeySpawnMenu = input.LookupBinding( "+menu" )
if isstring( KeySpawnMenu ) then
KeySpawnMenu = input.GetKeyCode( KeySpawnMenu )
end
local KeyContextMenu = input.LookupBinding( "+menu_context" )
if isstring( KeyContextMenu ) then
KeyContextMenu = input.GetKeyCode( KeyContextMenu )
end
self._lvsDisableSpawnMenu = nil
self._lvsDisableContextMenu = nil
for _,v in pairs( LVS.KEYS_REGISTERED ) do
if v.id == "~SKIP~" then continue end
local KeyCode = GetConVar( v.cmd ):GetInt()
self.LVS_BINDS[ v.id ] = KeyCode
if KeyCode == KeySpawnMenu then
self._lvsDisableSpawnMenu = true
end
if KeyCode == KeyContextMenu then
self._lvsDisableContextMenu = true
end
end
end
end
local IS_MOUSE_ENUM = {
[MOUSE_LEFT] = true,
[MOUSE_RIGHT] = true,
[MOUSE_MIDDLE] = true,
[MOUSE_4] = true,
[MOUSE_5] = true,
[MOUSE_WHEEL_UP] = true,
[MOUSE_WHEEL_DOWN] = true,
}
local function GetInput( ply, name )
if SERVER then
if not ply._lvsKeyDown then
ply._lvsKeyDown = {}
end
return ply._lvsKeyDown[ name ]
else
local Key = ply:lvsGetControls()[ name ]
if IS_MOUSE_ENUM[ Key ] then
return input.IsMouseDown( Key )
else
return input.IsKeyDown( Key )
end
end
end
function meta:lvsKeyDown( name )
if not self:lvsGetInputEnabled() then return false end
local Pressed = GetInput( self, name )
local NewPressed = hook.Run( "LVS.PlayerKeyDown", self, name, Pressed )
if isbool( NewPressed ) then
return NewPressed
else
return Pressed
end
end
function meta:lvsGetInputEnabled()
return (self._lvsKeyDisabler or 0) < CurTime()
end
function meta:lvsSetInputDisabled( disable )
if CLIENT then
net.Start( "lvs_buildcontrols" )
net.WriteBool( disable )
net.SendToServer()
end
if disable then
self._lvsKeyDisabler = CurTime() + 120
else
self._lvsKeyDisabler = CurTime() + 0.25
end
end
if CLIENT then
net.Receive( "lvs_buildcontrols", function( len )
local ply = LocalPlayer()
if not IsValid( ply ) then return end
ply:lvsBuildControls()
end )
local OldVisible = false
local function KeyBlocker()
local Visible = gui.IsGameUIVisible() or vgui.CursorVisible()
if Visible ~= OldVisible then
OldVisible = Visible
local ply = LocalPlayer()
if not IsValid( ply ) then return end
if Visible then
ply:lvsSetInputDisabled( true )
else
ply:lvsSetInputDisabled( false )
end
end
end
hook.Add( "LVS.PlayerEnteredVehicle", "!!!!!lvs_keyblocker_enable", function( ply, veh )
hook.Add("PostDrawHUD", "!!!lvs_keyblocker", KeyBlocker )
end )
hook.Add( "LVS.PlayerLeaveVehicle", "!!!!!lvs_keyblocker_disable", function( ply, veh )
hook.Remove("PostDrawHUD", "!!!lvs_keyblocker" )
end )
return
end
util.AddNetworkString( "lvs_buildcontrols" )
net.Receive( "lvs_buildcontrols", function( len, ply )
if not IsValid( ply ) then return end
ply:lvsSetInputDisabled( net.ReadBool() )
end )
function meta:lvsSetInput( name, value )
if not self._lvsKeyDown then
self._lvsKeyDown = {}
end
self._lvsKeyDown[ name ] = value
end
LVS.TEAMS = {
[0] = "FRIENDLY TO EVERYONE",
[1] = "Team 1",
[2] = "Team 2",
[3] = "HOSTILE TO EVERYONE",
}
function meta:lvsSetAITeam( nTeam )
nTeam = nTeam or LVS.PlayerDefaultTeam
if self:lvsGetAITeam() ~= nTeam then
self:PrintMessage( HUD_PRINTTALK, "[LVS] Your AI-Team has been updated to: "..(LVS.TEAMS[ nTeam ] or "") )
end
self:SetNWInt( "lvsAITeam", nTeam )
end
hook.Add( "PlayerButtonUp", "!!!lvsButtonUp", function( ply, button )
for _, KeyBind in pairs( ply:lvsGetControls() ) do
local KeyTBL = KeyBind[ button ]
if not KeyTBL then continue end
for _, KeyName in pairs( KeyTBL ) do
ply:lvsSetInput( KeyName, false )
end
end
end )
hook.Add( "PlayerButtonDown", "!!!lvsButtonDown", function( ply, button )
if not ply:lvsGetInputEnabled() then return end
local vehicle = ply:lvsGetVehicle()
local vehValid = IsValid( vehicle )
for _, KeyBind in pairs( ply:lvsGetControls() ) do
local KeyTBL = KeyBind[ button ]
if not KeyTBL then continue end
for _, KeyName in pairs( KeyTBL ) do
ply:lvsSetInput( KeyName, true )
if not vehValid then continue end
if string.StartWith( KeyName, "~SELECT~" ) then
local exp_string = string.Explode( "#", KeyName )
local base = ply:lvsGetWeaponHandler()
if exp_string[2] and IsValid( base ) then
base:SelectWeapon( tonumber( exp_string[2] ) )
end
end
if KeyName == "EXIT" then
if vehicle:GetDriver() == ply and vehicle:GetlvsLockedStatus() then vehicle:UnLock() end
if vehicle:GetlvsLockedStatus() then continue end
ply:ExitVehicle()
end
end
end
end )
hook.Add("CanExitVehicle","!!!lvsCanExitVehicle",function(vehicle,ply)
if IsValid( ply:lvsGetVehicle() ) then return false end
end)