mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
Upload
This commit is contained in:
336
lua/lvs_framework/autorun/lvs_player.lua
Normal file
336
lua/lvs_framework/autorun/lvs_player.lua
Normal file
@@ -0,0 +1,336 @@
|
||||
--[[
|
||||
| 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)
|
||||
Reference in New Issue
Block a user