local auto = CreateClientConVar( "cl_simfphys_auto", 1 , true, true ) local sport = CreateClientConVar( "cl_simfphys_sport", 0 , true, true ) local sanic = CreateClientConVar( "cl_simfphys_sanic", 0 , true, true ) local ctenable = CreateClientConVar( "cl_simfphys_ctenable", 1 , true, true ) local ctmul = CreateClientConVar( "cl_simfphys_ctmul", 0.7 , true, true ) local ctang = CreateClientConVar( "cl_simfphys_ctang", 15 , true, true ) local hud = CreateClientConVar( "cl_simfphys_hud", "1", true, false ) local alt_hud = CreateClientConVar( "cl_simfphys_althud", "1", true, false ) local alt_hud_arc = CreateClientConVar( "cl_simfphys_althud_arcs", "0", true, false ) local hud_x = CreateClientConVar( "cl_simfphys_hud_offset_x", "0", true, false ) local hud_y = CreateClientConVar( "cl_simfphys_hud_offset_y", "0", true, false ) local hud_mph = CreateClientConVar( "cl_simfphys_hudmph", "0", true, false ) local hud_mpg = CreateClientConVar( "cl_simfphys_hudmpg", "0", true, false ) local hud_realspeed = CreateClientConVar( "cl_simfphys_hudrealspeed", "0", true, false ) local autostart = CreateClientConVar( "cl_simfphys_autostart", "1", true, true ) -- local mousesteer = CreateClientConVar( "cl_simfphys_mousesteer", "0", true, true ) local mssensitivity = CreateClientConVar( "cl_simfphys_ms_sensitivity", "1", true, true ) local msretract = CreateClientConVar( "cl_simfphys_ms_return", "1", true, true ) local msdeadzone = CreateClientConVar( "cl_simfphys_ms_deadzone", "3", true, true ) local msexponent = CreateClientConVar( "cl_simfphys_ms_exponent", "1.5", true, true ) local mslockpitch = CreateClientConVar( "cl_simfphys_ms_lockpitch", "0", true, true ) local mshud = CreateClientConVar( "cl_simfphys_ms_hud", "1", true, false ) local k_msfreelook = CreateClientConVar( "cl_simfphys_ms_keyfreelook", KEY_Y, true, true ) local mslockedpitch = CreateClientConVar( "cl_simfphys_ms_lockedpitch", "5", true, true ) local overwrite = CreateClientConVar( "cl_simfphys_overwrite", 0, true, true ) local smoothsteer = CreateClientConVar( "cl_simfphys_smoothsteer", 0, true, true ) local steerspeed = CreateClientConVar( "cl_simfphys_steerspeed", 8, true, true ) local faststeerang = CreateClientConVar( "cl_simfphys_steerangfast", 10, true, true ) local fadespeed = CreateClientConVar( "cl_simfphys_fadespeed", 535, true, true ) CreateClientConVar( "cl_simfphys_hidesprites", "0", true, false ) CreateClientConVar( "cl_simfphys_spritedamage", "1", true, false ) CreateClientConVar( "cl_simfphys_frontlamps", "1", true, false ) CreateClientConVar( "cl_simfphys_rearlamps", "1", true, false ) CreateClientConVar( "cl_simfphys_shadows", "0", true, false ) local function simplebinder_old( x, y, tbl, num, parent, sizex, sizey) local kentry = tbl[num] local key = kentry[1] local setdefault = key:GetInt() local sizex = sizex or 400 local sizey = sizey or 40 local Shape = vgui.Create( "DShape", parent) Shape:SetType( "Rect" ) Shape:SetPos( x, y ) Shape:SetSize( sizex, sizey ) Shape:SetColor( Color( 0, 0, 0, 255 ) ) local Shape = vgui.Create( "DShape", parent) Shape:SetType( "Rect" ) Shape:SetPos( x + 1, y + 1 ) Shape:SetSize( sizex - 2, sizey - 2 ) Shape:SetColor( Color( 241, 241, 241, 255 ) ) local binder = vgui.Create( "DBinder", parent) binder:SetPos( sizex * 0.5 + x, y ) binder:SetSize( sizex * 0.5, sizey ) binder:SetValue( setdefault ) function binder:SetSelectedNumber( num ) self.m_iSelectedNumber = num self:ConVarChanged( num ) self:UpdateText() self:OnChange( num ) key:SetInt( num ) end local TextLabel = vgui.Create( "DPanel", parent) TextLabel:SetPos( x, y ) TextLabel:SetSize( sizex * 0.5, sizey ) TextLabel.Paint = function() draw.SimpleText( kentry[3], "DSimfphysFont", sizex * 0.25, 20, Color( 100, 100, 100, 255 ), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER ) end return binder end local function createcheckbox(x, y, label, command, parent, default) local boxy = vgui.Create( "DCheckBoxLabel", parent) boxy:SetParent( parent ) boxy:SetPos( x, y ) boxy:SetText( label ) boxy:SetConVar( command ) boxy:SetValue( default ) boxy:SizeToContents() return boxy end local function createslider(x, y, sizex, sizey, label, command, parent,min,max,default) local slider = vgui.Create( "DNumSlider", parent) slider:SetPos( x, y ) slider:SetSize( sizex, sizey ) slider:SetText( label ) slider:SetMin( min ) slider:SetMax( max ) slider:SetDecimals( 2 ) slider:SetConVar( command ) slider:SetValue( default ) return slider end local function buildclientsettingsmenu( self ) local Shape = vgui.Create( "DShape", self.PropPanel) Shape:SetType( "Rect" ) Shape:SetPos( 20, 20 ) Shape:SetSize( 350, 180 ) Shape:SetColor( Color( 0, 0, 0, 200 ) ) createcheckbox(25,25,"Show Hud","cl_simfphys_hud",self.PropPanel,hud:GetInt()) createcheckbox(210,25,"Racing Hud","cl_simfphys_althud",self.PropPanel,alt_hud:GetInt()) createcheckbox(210,45,"Draw Arcs\n(will cause problems\nwith multicore!)","cl_simfphys_althud_arcs",self.PropPanel,alt_hud_arc:GetInt()) createcheckbox(25,45,"MPH instead of KMH","cl_simfphys_hudmph",self.PropPanel,hud_mph:GetInt()) createcheckbox(25,65,"Speed relative to \nplayersize instead \nworldsize","cl_simfphys_hudrealspeed",self.PropPanel,hud_realspeed:GetInt()) createcheckbox(25,110,"Fuel consumption \nin MPG instead \nof L/100KM","cl_simfphys_hudmpg",self.PropPanel,hud_mpg:GetInt()) createslider(30,155,345,20,"Hud offset X","cl_simfphys_hud_offset_x",self.PropPanel,-1,1,hud_x:GetFloat()) createslider(30,175,345,20,"Hud offset Y","cl_simfphys_hud_offset_y",self.PropPanel,-1,1,hud_y:GetFloat()) local Shape = vgui.Create( "DShape", self.PropPanel) Shape:SetType( "Rect" ) Shape:SetPos( 20, 210 ) Shape:SetSize( 350, 85 ) Shape:SetColor( Color( 0, 0, 0, 200 ) ) createcheckbox(25,215,"Hide Sprites","cl_simfphys_hidesprites",self.PropPanel,0) createcheckbox(210,215,"Allow light damaging","cl_simfphys_spritedamage",self.PropPanel,0) createcheckbox(25,235,"Front Projected Textures","cl_simfphys_frontlamps",self.PropPanel,0) createcheckbox(25,255,"Rear Projected Textures","cl_simfphys_rearlamps",self.PropPanel,0) createcheckbox(25,275,"Enable Shadows","cl_simfphys_shadows",self.PropPanel,0) local Shape = vgui.Create( "DShape", self.PropPanel) Shape:SetType( "Rect" ) Shape:SetPos( 20, 305 ) Shape:SetSize( 350, 85 ) Shape:SetColor( Color( 0, 0, 0, 200 ) ) createcheckbox(25,310,"Always Fullthrottle","cl_simfphys_sanic",self.PropPanel,sanic:GetInt()) createcheckbox(25,330,"Engine Auto Start/Stop","cl_simfphys_autostart",self.PropPanel,autostart:GetInt()) createcheckbox(25,350,"Automatic Transmission","cl_simfphys_auto",self.PropPanel,auto:GetInt()) createcheckbox(25,370,"Automatic Sportmode (late up and downshifts)","cl_simfphys_sport",self.PropPanel,sport:GetInt()) local Shape = vgui.Create( "DShape", self.PropPanel) Shape:SetType( "Rect" ) Shape:SetPos( 20, 400 ) Shape:SetSize( 350, 115 ) Shape:SetColor( Color( 0, 0, 0, 200 ) ) local ctitem_1 = createcheckbox(25,405,"Enable Countersteer","cl_simfphys_ctenable",self.PropPanel,ctenable:GetInt()) local ctitem_2 = createslider(30,425,345,40,"Countersteer Mul","cl_simfphys_ctmul",self.PropPanel,0.1,2,ctmul:GetFloat()) local ctitem_3 = createslider(30,445,345,40,"Countersteer MaxAng","cl_simfphys_ctang",self.PropPanel,1,90,ctang:GetFloat()) local Reset = vgui.Create( "DButton" ) Reset:SetParent( self.PropPanel ) Reset:SetText( "Reset" ) Reset:SetPos( 25, 485 ) Reset:SetSize( 340, 25 ) Reset.DoClick = function() ctitem_1:SetValue( 1 ) ctitem_2:SetValue( 0.7 ) ctitem_3:SetValue( 15 ) ctenable:SetInt( 1 ) ctmul:SetFloat( 0.7 ) ctang:SetFloat( 15 ) end local Shape = vgui.Create( "DShape", self.PropPanel) Shape:SetType( "Rect" ) Shape:SetPos( 20, 525 ) Shape:SetSize( 350, 165 ) Shape:SetColor( Color( 0, 0, 0, 200 ) ) local st_item_1 = createcheckbox(25,530,"Use these settings\n(you need to re-enter the vehicle)","cl_simfphys_overwrite",self.PropPanel,overwrite:GetInt()) local st_item_2 = createslider(30,550,345,40,"steer speed","cl_simfphys_steerspeed",self.PropPanel,1,16,steerspeed:GetFloat()) local st_item_3 = createslider(30,570,345,40,"fast speed steer angle","cl_simfphys_steerangfast",self.PropPanel,0,90,faststeerang:GetFloat()) local st_item_4 = createslider(30,595,345,40,"fade speed(units/seconds)\nfor fast speed steer angle","cl_simfphys_fadespeed",self.PropPanel,1,5000,fadespeed:GetFloat()) local st_item_5 = createcheckbox(25,635,"extra smooth steering","cl_simfphys_smoothsteer",self.PropPanel,smoothsteer:GetInt()) local Reset = vgui.Create( "DButton" ) Reset:SetParent( self.PropPanel ) Reset:SetText( "Reset" ) Reset:SetPos( 25, 660 ) Reset:SetSize( 340, 25 ) Reset.DoClick = function() st_item_1:SetValue( 0 ) st_item_2:SetValue( 8 ) st_item_3:SetValue( 10 ) st_item_4:SetValue( 535 ) st_item_5:SetValue( 0 ) overwrite:SetInt( 0 ) steerspeed:SetFloat( 8 ) faststeerang:SetFloat( 10 ) fadespeed:SetFloat( 535 ) smoothsteer:SetInt( 0 ) end end -- local function buildcontrolsmenu( self ) -- local Background = vgui.Create( "DShape", self.PropPanel) -- Background:SetType( "Rect" ) -- Background:SetPos( 20, 40 ) -- Background:SetColor( Color( 0, 0, 0, 200 ) ) -- local TextLabel = vgui.Create( "DPanel", self.PropPanel) -- TextLabel:SetPos( 0, 0 ) -- TextLabel:SetSize( 600, 40 ) -- TextLabel.Paint = function() -- draw.SimpleTextOutlined( "Чтобы настройки изменились, нужно зайти в машину заново!", "DSimfphysFont_hint", 300, 20, Color( 255, 0, 0, 255 ), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER , 1,Color( 0, 0, 0, 255 ) ) -- end -- local yy = 45 -- local binders = {} -- for i = 1, table.Count( k_list ) do -- binders[i] = simplebinder(25,yy,k_list,i,self.PropPanel) -- yy = yy + 45 -- end -- local ResetButton = vgui.Create( "DButton" ) -- ResetButton:SetParent( self.PropPanel ) -- ResetButton:SetText( "Reset" ) -- ResetButton:SetPos( 25, yy + 10 ) -- ResetButton:SetSize( 500, 25 ) -- ResetButton.DoClick = function() -- for i = 1, table.Count( binders ) do -- local kentry = k_list[i] -- local key = kentry[1] -- local default = kentry[2] -- key:SetInt( default ) -- binders[i]:SetValue( default ) -- end -- end -- Background:SetSize( 510, yy ) -- end local function buildmsmenu( self ) local Shape = vgui.Create( "DShape", self.PropPanel) Shape:SetType( "Rect" ) Shape:SetPos( 20, 20 ) Shape:SetSize( 350, 310 ) Shape:SetColor( Color( 0, 0, 0, 200 ) ) -- local msitem_1 = createcheckbox(25,25,"Enable Mouse Steering","cl_simfphys_mousesteer",self.PropPanel,mousesteer:GetInt()) local msitem_2 = createcheckbox(25,55,"Lock Pitch View","cl_simfphys_ms_lockpitch",self.PropPanel,mslockpitch:GetInt()) local msitem_8 = createcheckbox(25,85,"Show Hud","cl_simfphys_ms_hud",self.PropPanel,mshud:GetInt()) local msitem_9 = createslider(60,50,315,40,"","cl_simfphys_ms_lockedpitch",self.PropPanel,-90,90,mslockedpitch:GetFloat()) local msitem_4 = createslider(30,110,345,40,"Deadzone","cl_simfphys_ms_deadzone",self.PropPanel,0,16,msdeadzone:GetFloat()) local msitem_5 = createslider(30,140,345,40,"Exponent","cl_simfphys_ms_exponent",self.PropPanel,1,4,msexponent:GetFloat()) local msitem_6 = createslider(30,170,345,40,"Sensitivity","cl_simfphys_ms_sensitivity",self.PropPanel,0.01,10,mssensitivity:GetFloat()) local msitem_7 = createslider(30,200,345,40,"Return Speed","cl_simfphys_ms_return",self.PropPanel,0,10,msretract:GetFloat()) local msitem_3 = simplebinder_old(25,240,{{k_msfreelook,KEY_Y,"Unlock View"}},1,self.PropPanel,340, 40) local DermaButton = vgui.Create( "DButton" ) DermaButton:SetParent( self.PropPanel ) DermaButton:SetText( "Reset" ) DermaButton:SetPos( 25, 300 ) DermaButton:SetSize( 340, 25 ) DermaButton.DoClick = function() msitem_1:SetValue( 0 ) msitem_2:SetValue( 0 ) msitem_3:SetValue( KEY_Y ) msitem_4:SetValue( 3 ) msitem_5:SetValue( 1.5 ) msitem_6:SetValue( 1 ) msitem_7:SetValue( 1 ) msitem_8:SetValue( 1 ) msitem_9:SetValue( 5 ) mshud:SetInt( 1 ) -- mousesteer:SetInt( 0 ) mssensitivity:SetInt( 1 ) msretract:SetInt( 1 ) msdeadzone:SetFloat( 3 ) msexponent:SetFloat( 1.5 ) mslockpitch:SetInt( 0 ) k_msfreelook:SetInt( KEY_Y ) mslockedpitch:SetFloat( 5 ) end end local function buildserversettingsmenu( self ) local Background = vgui.Create( "DShape", self.PropPanel) Background:SetType( "Rect" ) Background:SetPos( 20, 20 ) Background:SetColor( Color( 0, 0, 0, 200 ) ) local y = 0 if LocalPlayer():IsSuperAdmin() then y = y + 25 local CheckBoxTeam = vgui.Create( "DCheckBoxLabel", self.PropPanel) CheckBoxTeam:SetPos( 25, y ) CheckBoxTeam:SetText( "Disallow players of different teams to enter the same vehicle" ) CheckBoxTeam:SetValue( GetConVar( "sv_simfphys_teampassenger" ) :GetInt() ) CheckBoxTeam:SizeToContents() y = y + 25 local CheckBoxDamage = vgui.Create( "DCheckBoxLabel", self.PropPanel) CheckBoxDamage:SetPos( 25, y ) CheckBoxDamage:SetText( "Enable Damage" ) CheckBoxDamage:SetValue( GetConVar( "sv_simfphys_enabledamage" ) :GetInt() ) CheckBoxDamage:SizeToContents() y = y + 18 local DamageMul = vgui.Create( "DNumSlider", self.PropPanel) DamageMul:SetPos( 30, y ) DamageMul:SetSize( 345, 30 ) DamageMul:SetText( "Damage Multiplicator" ) DamageMul:SetMin( 0 ) DamageMul:SetMax( 10 ) DamageMul:SetDecimals( 3 ) DamageMul:SetValue( GetConVar( "sv_simfphys_damagemultiplicator" ):GetFloat() ) y = y + 32 local CheckBoxpDamage = vgui.Create( "DCheckBoxLabel", self.PropPanel) CheckBoxpDamage:SetPos( 25, y ) CheckBoxpDamage:SetText( "Enable Player Damage (On Collision)" ) CheckBoxpDamage:SetValue( GetConVar( "sv_simfphys_playerdamage" ) :GetInt() ) CheckBoxpDamage:SizeToContents() y = y + 25 local GibRemoveTimer = vgui.Create( "DNumSlider", self.PropPanel) GibRemoveTimer:SetPos( 30, y ) GibRemoveTimer:SetSize( 345, 30 ) GibRemoveTimer:SetText( "Gib Lifetime\n(0 = never remove)" ) GibRemoveTimer:SetMin( 0 ) GibRemoveTimer:SetMax( 3600 ) GibRemoveTimer:SetDecimals( 0 ) GibRemoveTimer:SetValue( GetConVar( "sv_simfphys_gib_lifetime" ):GetInt() ) y = y + 45 local CheckBoxFuel = vgui.Create( "DCheckBoxLabel", self.PropPanel) CheckBoxFuel:SetPos( 25, y ) CheckBoxFuel:SetText( "Enable Fuelsystem" ) CheckBoxFuel:SetValue( GetConVar( "sv_simfphys_fuel" ) :GetInt() ) CheckBoxFuel:SizeToContents() y = y + 18 local ScaleFuel = vgui.Create( "DNumSlider", self.PropPanel) ScaleFuel:SetPos( 30, y ) ScaleFuel:SetSize( 345, 30 ) ScaleFuel:SetText( "Fuel tank size multiplier" ) ScaleFuel:SetMin( 0 ) ScaleFuel:SetMax( 1 ) ScaleFuel:SetDecimals( 2 ) ScaleFuel:SetValue( GetConVar( "sv_simfphys_fuelscale" ):GetFloat() ) y = y + 45 local tractionLabel = vgui.Create( "DLabel", self.PropPanel ) tractionLabel:SetPos( 25, y ) tractionLabel:SetText( "Traction Multiplicator for:" ) tractionLabel:SizeToContents() local NewTractionData = {} local DemSliders = {} y = y + 15 for k, v in pairs( simfphys.TractionData ) do DemSliders[k] = vgui.Create( "DNumSlider", self.PropPanel) DemSliders[k]:SetPos( 30, y ) DemSliders[k]:SetSize( 345, 30 ) DemSliders[k]:SetText( k ) DemSliders[k]:SetMin( 0 ) DemSliders[k]:SetMax( 2 ) DemSliders[k]:SetDecimals( 2 ) DemSliders[k]:SetValue( simfphys[k]:GetFloat() ) DemSliders[k].OnValueChanged = function( item, value ) NewTractionData[ k ] = value end y = y + 25 end y = y + 30 local DermaButton = vgui.Create( "DButton" ) DermaButton:SetParent( self.PropPanel ) DermaButton:SetText( "Apply" ) DermaButton:SetPos( 25, y - 10 ) DermaButton:SetSize( 340, 25 ) DermaButton.DoClick = function() net.Start("simfphys_settings") net.WriteBool( CheckBoxDamage:GetChecked() ) net.WriteFloat( GibRemoveTimer:GetValue() ) net.WriteFloat( DamageMul:GetValue() ) net.WriteBool( CheckBoxpDamage:GetChecked() ) net.WriteBool( CheckBoxFuel:GetChecked() ) net.WriteFloat( ScaleFuel:GetValue() ) net.WriteTable( NewTractionData ) net.WriteBool( CheckBoxTeam:GetChecked() ) net.SendToServer() end y = y + 30 local DermaButton = vgui.Create( "DButton" ) DermaButton:SetParent( self.PropPanel ) DermaButton:SetText( "Reset" ) DermaButton:SetPos( 25, y - 10 ) DermaButton:SetSize( 340, 25 ) DermaButton.DoClick = function() NewTractionData["ice"] = 0.35 NewTractionData["gmod_ice"] = 0.1 NewTractionData["slipperyslime"] = 0.2 NewTractionData["snow"] = 0.7 NewTractionData["grass"] = 1 NewTractionData["sand"] = 1 NewTractionData["dirt"] = 1 NewTractionData["concrete"] = 1 NewTractionData["metal"] = 1 NewTractionData["glass"] = 1 NewTractionData["gravel"] = 1 NewTractionData["rock"] = 1 NewTractionData["wood"] = 1 for k, v in pairs( NewTractionData ) do DemSliders[k]:SetValue( v ) end CheckBoxDamage:SetValue( 1 ) GibRemoveTimer:SetValue( 120 ) DamageMul:SetValue( 1 ) CheckBoxpDamage:SetValue( 1 ) CheckBoxFuel:SetValue( 1 ) ScaleFuel:SetValue( 0.1 ) CheckBoxTeam:SetValue( 0 ) net.Start("simfphys_settings") net.WriteBool( true ) net.WriteFloat( 120 ) net.WriteFloat( 1 ) net.WriteBool( true ) net.WriteBool( true ) net.WriteFloat( 0.1 ) net.WriteTable( NewTractionData ) net.WriteBool( false ) net.SendToServer() end else y = y + 25 local Label = vgui.Create( "DLabel", self.PropPanel ) Label:SetPos( 30, y ) Label:SetText( "Damage is "..((GetConVar( "sv_simfphys_enabledamage" ):GetInt() > 0) and "enabled" or "disabled") ) Label:SizeToContents() y = y + 25 local Label = vgui.Create( "DLabel", self.PropPanel ) Label:SetPos( 30, y ) Label:SetText( "Damage Multiplicator is: "..GetConVar( "sv_simfphys_damagemultiplicator" ):GetFloat() ) Label:SizeToContents() y = y + 25 local yes = "Players can take damage from collisions" local no = "Players can't take damage from collisions" local Label = vgui.Create( "DLabel", self.PropPanel ) Label:SetPos( 30, y ) Label:SetText( GetConVar( "sv_simfphys_playerdamage" ):GetBool() and yes or no ) Label:SizeToContents() y = y + 25 local Label = vgui.Create( "DLabel", self.PropPanel ) local lifetime = GetConVar( "sv_simfphys_gib_lifetime" ):GetInt() Label:SetPos( 30, y ) Label:SetText( (lifetime > 0) and ("Gib Lifetime = "..lifetime.." seconds") or "Gibs never despawn" ) Label:SizeToContents() y = y + 25 local Label = vgui.Create( "DLabel", self.PropPanel ) Label:SetPos( 30, y ) Label:SetText( "Vehicles "..(GetConVar( "sv_simfphys_fuel" ):GetBool() and "are running on fuel" or "don't use fuel") ) Label:SizeToContents() y = y + 25 local Label = vgui.Create( "DLabel", self.PropPanel ) local fuelscale = math.Round( GetConVar( "sv_simfphys_fuelscale" ):GetFloat() , 3 ) Label:SetPos( 30, y ) Label:SetText( "Fuel tank size multiplier is: "..fuelscale ) Label:SizeToContents() if GetConVar( "sv_simfphys_teampassenger" ):GetBool() then y = y + 25 local Label = vgui.Create( "DLabel", self.PropPanel ) Label:SetPos( 30, y ) Label:SetText( "Only players of the same team can enter the same vehicle" ) Label:SizeToContents() end y = y + 40 local Label = vgui.Create( "DLabel", self.PropPanel ) Label:SetPos( 30, y ) Label:SetText( "Traction multiplier for..." ) Label:SizeToContents() y = y + 15 for k, v in pairs( simfphys.TractionData ) do local tractionLabel = vgui.Create( "DLabel", self.PropPanel ) tractionLabel:SetPos( 105, y ) tractionLabel:SetText( k ) tractionLabel:SizeToContents() local tractionLabel = vgui.Create( "DLabel", self.PropPanel ) tractionLabel:SetPos( 170, y ) tractionLabel:SetText( "=" ) tractionLabel:SizeToContents() local tractionLabel = vgui.Create( "DLabel", self.PropPanel ) tractionLabel:SetPos( 185, y ) tractionLabel:SetText( math.Round(v,2) ) tractionLabel:SizeToContents() y = y + 25 end y = y - 25 end Background:SetSize( 350, y ) end hook.Add( "SimfphysPopulateVehicles", "AddEntityContent", function( pnlContent, tree, node ) local Categorised = {} -- Add this list into the tormoil local Vehicles = list.Get( "simfphys_vehicles" ) if Vehicles then for k, v in pairs( Vehicles ) do v.Category = v.Category or "Other" Categorised[ v.Category ] = Categorised[ v.Category ] or {} v.ClassName = k v.PrintName = v.Name table.insert( Categorised[ v.Category ], v ) end end -- -- Add a tree node for each category -- for CategoryName, v in SortedPairs( Categorised ) do -- Add a node to the tree local node = tree:AddNode( CategoryName, "icon16/bricks.png" ) -- When we click on the node - populate it using this function node.DoPopulate = function( self ) -- If we've already populated it - forget it. if self.PropPanel then return end -- Create the container panel self.PropPanel = vgui.Create( "ContentContainer", pnlContent ) self.PropPanel:SetVisible( false ) self.PropPanel:SetTriggerSpawnlistChange( false ) for k, ent in SortedPairsByMemberValue( v, "PrintName" ) do spawnmenu.CreateContentIcon( "simfphys_vehicles", self.PropPanel, { nicename = ent.PrintName or ent.ClassName, spawnname = ent.ClassName, material = "entities/"..ent.ClassName..".png", admin = ent.AdminOnly } ) end end -- If we click on the node populate it and switch to it. node.DoClick = function( self ) self:DoPopulate() pnlContent:SwitchPanel( self.PropPanel ) end end -- KEYBOARD -- local node = tree:AddNode( "Controls", "icon16/keyboard.png" ) -- node.DoPopulate = function( self ) -- if self.PropPanel then return end -- self.PropPanel = vgui.Create( "ContentContainer", pnlContent ) -- self.PropPanel:SetVisible( false ) -- self.PropPanel:SetTriggerSpawnlistChange( false ) -- buildcontrolsmenu( self ) -- end -- node.DoClick = function( self ) -- self:DoPopulate() -- pnlContent:SwitchPanel( self.PropPanel ) -- end -- MOUSE STEERING local node = tree:AddNode( "Mouse Steering", "icon16/mouse.png" ) node.DoPopulate = function( self ) if self.PropPanel then return end self.PropPanel = vgui.Create( "ContentContainer", pnlContent ) self.PropPanel:SetVisible( false ) self.PropPanel:SetTriggerSpawnlistChange( false ) buildmsmenu( self ) end node.DoClick = function( self ) self:DoPopulate() pnlContent:SwitchPanel( self.PropPanel ) end -- JOYSTICK if istable( jcon ) and file.Exists("lua/bin/gmcl_joystick_win32.dll", "GAME") then local node = tree:AddNode( "Joystick Configuration", "icon16/joystick.png" ) node.DoClick = function( self ) RunConsoleCommand("joyconfig") end end -- CLIENT SETTINGS -- local node = tree:AddNode( "Client Settings", "icon16/wrench.png" ) -- node.DoPopulate = function( self ) -- if self.PropPanel then return end -- -- self.PropPanel = vgui.Create( "ContentContainer", pnlContent ) -- self.PropPanel:SetVisible( false ) -- self.PropPanel:SetTriggerSpawnlistChange( false ) -- -- buildclientsettingsmenu( self ) -- end -- node.DoClick = function( self ) -- self:DoPopulate() -- pnlContent:SwitchPanel( self.PropPanel ) -- end -- SERVER SETTINGS local node = tree:AddNode( "Server Settings", "icon16/wrench_orange.png" ) node.DoPopulate = function( self ) self.PropPanel = vgui.Create( "ContentContainer", pnlContent ) self.PropPanel:SetVisible( false ) self.PropPanel:SetTriggerSpawnlistChange( false ) buildserversettingsmenu( self ) end node.DoClick = function( self ) self:DoPopulate() pnlContent:SwitchPanel( self.PropPanel ) end -- Select the first node local FirstNode = tree:Root():GetChildNode( 0 ) if IsValid( FirstNode ) then FirstNode:InternalDoClick() end end ) spawnmenu.AddCreationTab( "simfphys", function() local ctrl = vgui.Create( "SpawnmenuContentPanel" ) ctrl:CallPopulateHook( "SimfphysPopulateVehicles" ) return ctrl end, "icon16/car.png", 50 ) spawnmenu.AddContentType( "simfphys_vehicles", function( container, obj ) if not obj.material then return end if not obj.nicename then return end if not obj.spawnname then return end local icon = vgui.Create( "ContentIcon", container ) icon:SetContentType( "simfphys_vehicles" ) icon:SetSpawnName( obj.spawnname ) icon:SetName( obj.nicename ) icon:SetMaterial( obj.material ) icon:SetAdminOnly( obj.admin ) icon:SetColor( Color( 0, 0, 0, 255 ) ) icon.DoClick = function() RunConsoleCommand( "simfphys_spawnvehicle", obj.spawnname ) surface.PlaySound( "ui/buttonclickrelease.wav" ) end icon.OpenMenu = function( icon ) local menu = DermaMenu() menu:AddOption( "Copy to Clipboard", function() SetClipboardText( obj.spawnname ) end ) --menu:AddSpacer() --menu:AddOption( "Delete", function() icon:Remove() hook.Run( "SpawnlistContentChanged", icon ) end ) menu:Open() end if IsValid( container ) then container:Add( icon ) end return icon end )