if ( CLIENT ) then CreateClientConVar( "numpad_set", 0, false, true ) // Menu. local function Menu( panel ) panel:NumSlider( "Numpad Set", "numpad_set", 1, 15, 0 ) end local function PopulateToolMenu() spawnmenu.AddToolMenuOption( "Utilities", "User", "Numpad Sets", "Numpad Sets", "", "", Menu ) end hook.Add( "PopulateToolMenu", "NumpadSets", PopulateToolMenu ) end if ( SERVER ) then AddCSLuaFile( "numpadSets.lua" ) // Here is where the magic happens. local function TranslateKey( ply, k ) // We don't want to bugger anything up. local ok, key = pcall( function() local key = tonumber( k ) if ( !key || key < 0 ) then return k end local set = math.max( tonumber( ply:GetInfo( "numpad_set" ) ) or 1, 1 ) if ( !set ) then return end set = set - 1 // We start at 0, just incase. return key + ( set * 16 ) end ) // If we weren't OK, the error is in the key var. if ( ok ) then return key else ErrorNoHalt( key ) return k end end // gm_special commands. local function Activate( ply, command, args ) args[ 1 ] = TranslateKey( ply, args[ 1 ] ) numpad.Activate( ply, command, args ) end concommand.Add( "+gm_special", Activate ) local function Deactivate( ply, command, args ) args[ 1 ] = TranslateKey( ply, args[ 1 ] ) numpad.Deactivate( ply, command, args ) end concommand.Add( "-gm_special", Deactivate ) // Up/down registers. numpad.OriginalOnUp = numpad.OriginalOnUp or numpad.OnUp function numpad.OnUp( ply, key, name, ... ) numpad.OriginalOnUp( ply, TranslateKey( ply, key ), name, ... ) end numpad.OriginalOnDown = numpad.OriginalOnDown or numpad.OnDown function numpad.OnDown( ply, key, name, ... ) numpad.OriginalOnDown( ply, TranslateKey( ply, key ), name, ... ) end end