Weapon selector with Derma

From GMod Wiki

Jump to: navigation, search
Lua: Weapon selection menu
Page white text.png Description:This is a tutorial about making a weapon selector menu.
link=User:JohnnyThunders Original Author:JohnnyThunders
Calendar.png Created:October 24, 2010



Knowledge prior to using this tutorial:

- basic Lua knowledge

- A brain


In this tutorial I will guide you through the making of a working Derma menu that will allow us to give ourselves a weapon when we click a button. We'll make use of console commands, "why would you need a console command for such thing as a weapon selection menu?" you ask, the answer is that console commands are the only client->server functions that we can use, and we can't create or give weapons clientside (imagine people on CSS or TF2 giving weapons to themself).

Coding our "weapon_give" console command

What we want our "weapon_take" console command is to give us a certain weapon that's specified in the 1st argument:

function GivePlayerAWeapon( ply, cmd, args ) --Starting our function, ply is the player who ran the console command, cmd is the command name (in this case "weapon_give"), args is the arguments of the console command
	if args[1] == "pistol" then --if the 1st argument is "pistol" then do:
	        ply:Give("weapon_pistol") --give the player a pistol
		ply:ChatPrint("You got a pistol!") --print "You got a pistol!" in the chat
	end --close our if loop
	if args[1] == "smg" then --if the 1st argument is "smg" then do:
		ply:Give("weapon_smg") --give the player an SMG
		ply:ChatPrint("You got an SMG!") --print "You got an SMG!" in the chat
        end--close our if loop
end --close our function
concommand.Add("weapon_take", GivePlayerAWeapon) --make the console command "weapon_take" run the GivePlayerAWeapon function

Place the code above in a file named "weapongive.lua" and place it in "garrysmod/lua/autorun/server" (if you don't have the folders create them)

Coding our Derma menu

Our derma menu will be a frame with 2 buttons in it, one that will give us a pistol and one that will give us an SMG

function WeaponSelectorDerma()
local WeaponFrame = vgui.Create("DFrame") --create a frame
WeaponFrame:SetSize(250, 80) --set its size
WeaponFrame:Center() --position it at the center of the screen
WeaponFrame:SetTitle("Take the weapon that you want") --set the title of the menu 
WeaponFrame:SetDraggable(true) --can you move it around
WeaponFrame:SetSizable(false) --can you resize it?
WeaponFrame:ShowCloseButton(true) --can you close it
WeaponFrame:MakePopup() --make it appear
local PistolButton = vgui.Create("DButton", WeaponFrame)
PistolButton:SetSize(100, 30)
PistolButton:SetPos(10, 35)
PistolButton.DoClick = function() RunConsoleCommand("weapon_take", "pistol") WeaponFrame:Close() end --make it run our "weapon_take" console command with "pistol" as the 1st argument and then close the menu
local SMGButton = vgui.Create("DButton", WeaponFrame)
SMGButton:SetSize(100, 30)
SMGButton:SetPos(140, 35)
SMGButton:SetText("SMG") --Set the name of the button
SMGButton.DoClick = function() RunConsoleCommand("weapon_take", "smg") WeaponFrame:Close() end
concommand.Add("selectweapon", WeaponSelectorDerma) --make the console command to make this menu popup

Place this script in garrysmod/lua/autorun/client (if you don't have the folders create them)

Personal tools
Lua Scripting