Derma & VGUI Help

Ehm.
So.
How do I make so the menu I make, will be there when I start up the server?
Like.
I start up the server -> I join -> The first things that comes is the menu, where I have the jobs.
Thanks.

You need to have a server-side lua file which hooks into the Gamemode.PlayerInitialSpawn.

The code would presumably be something like this (untested):

Server Side File
[lua]
function FirstSpawn( ply )
ply:ConCommand("{CustomCommand}")
end

hook.Add( “PlayerInitialSpawn”, “playerInitialSpawn”, FirstSpawn )
[/lua]

Client Side File
[lua]
function LaunchVGui()
{
/* code here */
}
concommand.add(“launchVgui”, LaunchVGui)
[/lua]

Well im such a noob in lua, so.
I dont even know what client side files and server side files is.
I got these files: shared.lua , cl_init.lua, init.lua

cl_init.lua is a clientside file, init.lua is a serverside file, shared.lua is a shared file(Shared gets sent to both serverside and clientside)

Ok, so im just trying to learn some coding.
And I cant get the gamemode to work.
Look through this please.

shared.lua
[lua]
----------Colors---------
local clrTable = {} //Color table
clrTable[“Green”] = Color(20, 150, 20, 255)
clrTable[“Blue”] = Color(25, 25, 170, 255)
clrTable[“Red”] = Color(150, 20, 20, 255)
clrTable[“Brown”] = Color(102, 34, 0, 255)

GM.Name = “Test Mod”
GM.Author = “Markus Olsen”
GM.Email = “”
GM.Website = “www.serveraim.net

TEAM_1 = Mayor
TEAM_2 = SWAT
TEAM_3 = Police
TEAM_4 = Army

team.SetUp( TEAM_1, “Mayor”, clrTable[“Green”] )
team.SetUp( TEAM_2, “SWAT”, clrTable[“Blue”] )
team.SetUp( TEAM_3, “Police”, clrTable[“Red”] )
team.SetUp( TEAM_4, “Army”, clrTable[“Brown”] )
[/lua]

init.lua
[lua]

AddCSLuaFile( “shared.lua” )
AddCSLuaFile( “cl_init.lua” )


// You can make a simple function using arguements to make this less messier but this would be the simplest way to explain what it does.
function TEAM_Mayor( ply ) – Creating the function.
ply:UnSpectate() – As soon as the person joins the team, he get’s Un-spectated
ply:SetTeam( 1 ) – We’ll set him to team 1
ply:Spawn() – Let’s spawn him.
ply:Give( “weapon_physgun” ) – …then give them the Gravity Gun.
ply:Give( “weapon_physcannon” )
ply:Give( “keys” )
ply:Give( “weapon_mad_fists” )

end – End the function
concommand.Add(“TEAM_Mayor”, TEAM_Mayor) – Adding a concommand (Console Command) for the team.

function TEAM_SWAT( ply )
ply:UnSpectate()
ply:SetTeam( 2 )
ply:Spawn()
ply:Give( “weapon_physgun” ) – …then give them the Phys Gun.
ply:Give( “weapon_physcannon” )
ply:Give( “keys” )
ply:Give( “arrest_stick” )
ply:Give( “unarrest_stick” )
ply:Give( “stunstick” )
ply:Give( “weapon_mad_fists” )
ply:Give( “weapon_mad_mp5” )
end
concommand.Add(“TEAM_SWAT”, TEAM_SWAT)

function TEAM_Police( ply )
ply:UnSpectate()
ply:SetTeam( 3 )
ply:Spawn()
ply:Give( “weapon_physgun” ) – …then give them the Phys Gun.
ply:Give( “weapon_physcannon” )
ply:Give( “keys” )
ply:Give( “arrest_stick” )
ply:Give( “unarrest_stick” )
ply:Give( “stunstick” )
ply:Give( “weapon_mad_fists” )
ply:Give( “weapon_mad_mp5” )

end
concommand.Add(“TEAM_Police”, TEAM_Police)

function TEAM_Army( ply )
ply:UnSpectate()
ply:SetTeam( 4 )
ply:Spawn()
ply:Give( “weapon_physgun” ) – …then give them the Phys Gun.
ply:Give( “weapon_physcannon” )
ply:Give( “keys” )
ply:Give( “arrest_stick” )
ply:Give( “unarrest_stick” )
ply:Give( “stunstick” )
ply:Give( “weapon_mad_fists” )
ply:Give( “weapon_mad_mp5” )
ply:Give( “weapon_mad_m3” )

end
concommand.Add(“TEAM_Army”, TEAM_Army)

end

function GM:PlayerInitialSpawn( ply ) --“When the player first joins the server and spawns” function

ply:ConCommand( "TeamMenu" ) --Run the console command when the player first spawns

end --End the “when player first joins server and spawn” function

function GM:PlayerLoadout( ply ) --“The weapons/items that the player spawns with” function

ply:StripWeapons() -- This command strips all weapons from the player.
		
end -- This ends the if/elseif.

end – This ends the function.
[/lua]

cl_init.lua
[lua]

include( “shared.lua”

– Welcome Message

function FirstSpawn( ply )

ply:PrintMessage(HUD_PRINTCENTER,"Welcome to the server!")

end

hook.Add( “PlayerInitialSpawn”, “playerInitialSpawn”, FirstSpawn )

– TEAMS

function TeamMenu( ) – Starting the function.

// all the buttons I’m about to create are just a simple way to explain everything. I would make a table and make buttons that way but look through some more tutorials about loops till you do that.
local TeamMenu = vgui.Create( “DFrame” ) – Creating the Vgui.
TeamMenu:SetPos( ScrW() +250, ScrH() / 2 -200 ) – Setting the position of the menu.
TeamMenu:SetSize( 260, 210 ) – Setting the size of the menu.
TeamMenu:SetTitle( “My test team selection menu” ) – The menu title.
TeamMenu:ShowCloseButton( false ) – Want us to see the close button? No.
TeamMenu:SetVisible( true ) – Want it visible?
TeamMenu:SetDraggable( false ) – Setting it draggable?
TeamMenu:MakePopup( ) – And now we’ll make it popup
function TeamMenu:Paint() – This is the funny part. Let’s paint it.
draw.RoundedBox( 8, 0, 0, self:GetWide(), self:GetTall(), Color( 0,0,0,200 ) ) – This paints, and round’s the corners etc.
end – Now we ONLY end the painting function.

– This is a part which I had to add for the fun sake.

if !TeamMenu.Open then – If the menu is closed, then
TeamMenu:MoveTo(ScrW() / 2 - 250, ScrH() / 2 - 200, 1.6, 0,1) – When you open it, it will slide trough the screen, not teleport.
end – Ending the if statement

– Button time.
local team_1 = vgui.Create( “DButton”, TeamMenu ) – Creating the vgui of the button.
team_1:SetPos( 5, 30 ) – Setting the position.
team_1:SetSize( 250, 30 ) – Setting the size
team_1:SetText( “Mayor” ) – Setting the text of the button

team_1.Paint = function() – The paint function
surface.SetDrawColor( 0, 255, 0, 255 ) – What color do You want to paint the button (R, B, G, A)
surface.DrawRect( 0, 0, team_1:GetWide(), team_1:GetTall() ) – Paint what cords
end – Ending the painting

team_1.DoClick = function() --Make the player join team 1
RunConsoleCommand( “TEAM_Mayor” )
TeamMenu:Close() – Close the DFrame (TeamMenu)
end – Ending the button.

– Now, this will be going on for 3 other buttons.
local team_2 = vgui.Create( “DButton”, TeamMenu )
team_2:SetPos( 5, 70 )
team_2:SetSize( 250, 30 )
team_2:SetText( “S.W.A.T” )

team_2.Paint = function() – The paint function
surface.SetDrawColor( 0, 0, 255, 255 ) – What color do You want to paint the button (R, B, G, A)
surface.DrawRect( 0, 0, team_2:GetWide(), team_2:GetTall() ) – Paint what cords (Used a function to figure that out)
end

team_2.DoClick = function() --Make the player join team 2
RunConsoleCommand( “TEAM_SWAT” )
TeamMenu:Close()
end

local team_3 = vgui.Create( “DButton”, TeamMenu )
team_3:SetPos( 5, 110 ) --Place it next to our previous one
team_3:SetSize( 250, 30 )
team_3:SetText( “Police” )

team_3.Paint = function() – The paint function
surface.SetDrawColor( 255, 0, 0, 255 ) – What color do You want to paint the button (R, B, G, A)
surface.DrawRect( 0, 0, team_3:GetWide(), team_3:GetTall() ) – Paint what cords (Used a function to figure that out)
end

team_3.DoClick = function() --Make the player join team 3
RunConsoleCommand( “TEAM_Police” )
TeamMenu:Close()
end

local team_4 = vgui.Create( “DButton”, TeamMenu )
team_4:SetPos( 5, 150 ) --Place it next to our previous one
team_4:SetSize( 250, 30 )
team_4:SetText( “Army” )

team_4.Paint = function() – The paint function
surface.SetDrawColor( 102, 34, 0, 255 ) – What color do You want to paint the button (R, B, G, A)
surface.DrawRect( 0, 0, team_3:GetWide(), team_3:GetTall() ) – Paint what cords (Used a function to figure that out)
end

team_4.DoClick = function() --Make the player join team 4
RunConsoleCommand( “TEAM_Army” )
TeamMenu:Close()
end

end – Now we’ll end the whole function.

concommand.Add(“TeamMenu”, TeamMenu) – Adding the Console Command. So whenever you enter your gamemode, simply type TeamMenu in console.
[/lua]

Okay good job on attempting to implement the code!! A few things to note: if you wrap the code with [ lua ] tags when you post it here, it makes it much easier to read.

Secondly, I don’t see anything that actually opens the vgui window. Try adding this at the end of your “TeamMenu” function.

[lua]
TeamMenu:Open()
[/lua]

I could be wrong, but I believe you need that. Lastly, probably a typo, but at the top you have:

[lua]
include( “shared.lua”
[/lua]

Notice it is missing a closing parenthesis. Make sure that is not how it looks in the real code!

Hope this helps.

Added lua tags.
Will check if it works now.
EDIT: Lua error: [lua\includes\modules eam.lua:30] table index is nil
Registering gamemode ‘Test’ derived from ‘base’
EDIT2:: There must be something wrong in this. I follow this topic, while I change some stuff.

If anyone wanna try to edit or something, I can send you the gamemode.

Well after downloading your code it looks like you still have a missing parenthesis.

[lua]
// This needs to be changed
include( “shared.lua”
// To
include( “shared.lua” )
// Notice how I have a close parenthesis at the end? You need that too.
[/lua]

Everything else looks fairly reasonable.

Well. I uploaded that version of the gamemode, before I changed it. I have changed it, and I got that error I wrote. May you try to launch it? And see what happens?