diff options
Diffstat (limited to 'lua/autorun/cl_nadmin.lua')
| -rw-r--r-- | lua/autorun/cl_nadmin.lua | 724 |
1 files changed, 350 insertions, 374 deletions
diff --git a/lua/autorun/cl_nadmin.lua b/lua/autorun/cl_nadmin.lua index 31f7730..5b87058 100644 --- a/lua/autorun/cl_nadmin.lua +++ b/lua/autorun/cl_nadmin.lua @@ -1,374 +1,350 @@ -AddCSLuaFile() -if SERVER then return end -local nadmin = include("sh_nadmin.lua") - ---Functions -local add_group_to_groupsheet -local remove_group_from_groupsheet - ---Override what print() does, just for this file -local oldprint = print -local print = function(...) - local args = {...} - table.insert(args,1,"[NADMIN]") - oldprint(unpack(args)) -end ---The variables that hold things ---local groups = nadmin.groups ---local players = nadmin.players ---local privileges = nadmin.privileges - -local usergroup_dropdowns = {} -local function add_usergroup_to_usergroup_dropdowns(name) - for k,v in pairs(usergroup_dropdowns) do - if v:IsValid() then - v:AddChoice(name) - else - usergroup_dropdowns[k] = nil - end - end -end -local function delete_usergroup_from_usergroup_dropdowns(group) - for _,v in pairs(usergroup_dropdowns) do - print("Looking at object:",v) - table.RemoveByValue(v.Choices, name) - if v.Menu then - v.Menu:Remove() - v.Menu = nil - end - if v:GetText() == group.group.Name then - v:SetText(group.group.MinAccess) - end - end -end -net.Receive("nadmin_init_privileges", function(len) - print("got privileges") - nadmin.privileges = net.ReadTable() -end) -net.Receive("nadmin_init_players", function(len) - print("got players") - nadmin.players = net.ReadTable() -end) -net.Receive("nadmin_init_groups", function(len) - print("got groups") - nadmin.groups = net.ReadTable() - PrintTable(nadmin.groups) -end) - -net.Receive("nadmin_update_privilege", function(len) - local exists = net.ReadBool() - local privilege = net.ReadTable() - if exists then - nadmin.privileges[privilege.Name] = privilege - else - nadmin.privileges[privilege.Name] = nil - end -end) -net.Receive("nadmin_create_group", function(len) - local name = net.ReadString() - local inherits = net.ReadString() - local source = net.ReadString() - nadmin.groups[name] = { - name = name, - group = { - Name = name, - Inherits = inherits - }, - privileges = {}, - nadmin = source == "nadmin", - src = source - } - add_group_to_groupsheet(nadmin.groups[name]) - add_usergroup_to_usergroup_dropdowns(name) - CAMI.RegisterUsergroup(nadmin.groups[name].group, "nadmin") -end) -net.Receive("nadmin_update_group", function(len) - local name = net.ReadString() - local privilege = net.ReadString() - local exists = net.ReadBool() - if exists then - nadmin.groups[name].privileges[privilege] = exists - else - nadmin.groups[name].privileges[privilege] = nil - end -end) -net.Receive("nadmin_delete_group", function(len) - local name = net.ReadString() - remove_group_from_groupsheet(nadmin.groups[name]) - delete_usergroup_from_usergroup_dropdowns(nadmin.groups[name]) - nadmin.groups[name] = nil - CAMI.UnregisterUsergroup(name,"nadmin") -end) -net.Receive("nadmin_update_player", function(len) - local player = net.ReadEntity() - local group = net.ReadString() - local sid = player:SteamID64() - print("At time of nadmin_update_player, player is", player) - nadmin.players[sid] = nadmin.players[sid] or {} - nadmin.players[sid].group = group - nadmin.players[sid].last_name = player:Name() - if nadmin.players[sid].combo then - nadmin.players[sid].combo:SetValue(group) - end - if nadmin.players[sid].line then - nadmin.players[sid].line:SetColumnText(2,player:Name()) - end - CAMI.SignalSteamIDUserGroupChanged(sid,group,"nadmin") -end) - -concommand.Add("cl_print_privileges", function(ply,cmd,args) - PrintTable(nadmin.privileges) -end) -concommand.Add("cl_print_groups", function(ply,cmd,args) - print("NAdmin groups:",nadmin.groups) - PrintTable(nadmin.groups) - print("Local groups:",groups) - PrintTable(nadmin.groups) -end) -concommand.Add("cl_print_players", function(ply,cmd,args) - PrintTable(nadmin.players) -end) - -local function create_usergroup_combo(parent) - local ret = vgui.Create("DComboBox",parent) - for groupname, _ in pairs(nadmin.groups) do - ret:AddChoice(groupname) - end - table.insert(usergroup_dropdowns, ret) - return ret -end - -local nadmin_frame,users_tbl,groups_tbl = nil,nil,nil -local users_sheet,groups_sheet = nil,nil ---ply :: entity -local function add_user_to_usersheet(steamid,ply) - if not nadmin_frame then return end - local player_ent = player.GetBySteamID64(steamid) - local line = users_tbl:AddLine(steamid, ply.last_name, ply.group) - local dropdown = create_usergroup_combo(line) - if nadmin.players[steamid] then - dropdown:SetValue(nadmin.players[steamid].group) - else - dropdown:SetValue("user") - end - dropdown.OnSelect = function(self, index, value) - net.Start("nadmin_request_set_user_group") - net.WriteEntity(player_ent) - net.WriteString(value) - net.SendToServer() - end - line:SetColumnText(3,dropdown) - ply.combo = dropdown --Update the combo box when someone else updates the group - ply.line = line -end - ---ply :: entity -local function remove_user_from_usersheet(ply) - if not nadmin_frame then return end - if not ply.line then return end - users_tbl:RemoveLine(ply.line.m_iID) -end - -local privilege_checkboxes = {} -local function add_privilege_to_groupsheet(privilege) - local ordered_privileges = {} - for _,privilege in pairs(nadmin.privileges) do - table.insert(ordered_privileges,privilege) - end - table.sort(ordered_privileges, function(a,b) return a.Name > b.Name end) - local privilege_num = 0 - for num,ordered_privilege in pairs(ordered_privileges) do - if ordered_privilege == privilege then - privilege_num = num - break - end - end - local column = groups_tbl:AddColumn(privilege.Name) - column.DoClick = function(self) - local explain_frame = vgui.Create("DFrame") - explain_frame:SetTitle(privilege.Name) - local description = vgui.Create("DLabel",explain_frame) - description:SetWrap(true) - if privilege.Description then - description:SetText(privilege.Description) - else - description:SetText("This privilege does not have a description") - end - explain_frame:SetSize(ScrW() / 6, ScrH() / 4) - explain_frame:SetPos(ScrW() / 4 + 100,ScrH() / 4 + 50) - explain_frame:MakePopup() - description:Dock(FILL) - end - column:SetWrap(true) - for groupname,group in pairs(nadmin.groups) do - local checkbox = vgui.Create("DCheckBox", group.line) - privilege_checkboxes[groupname] = checkbox - print("Group:") - PrintTable(group) - if group.nadmin then - checkbox:SetChecked(group.privileges[privilege.Name]) - checkbox.OnChange = function(self,value) - net.Start("nadmin_request_update_group") - net.WriteString(groupname) - net.WriteString(privilege.Name) - net.WriteBool(value) - net.SendToServer() - end - else - checkbox:SetDisabled(true) - end - group.line:SetColumnText(privilege_num + 2,checkbox) - end -end - -local function remove_privilege_from_groupsheet(privilege) - -end - -add_group_to_groupsheet = function(group) - if not groups_tbl then return end - local line = groups_tbl:AddLine(group.group.Name) - local ordered_privileges = {} - for _,privilege in pairs(nadmin.privileges) do - table.insert(ordered_privileges,privilege) - end - table.sort(ordered_privileges, function(a,b) return a.Name > b.Name end) - local delete_group_button = vgui.Create("DButton",line) - delete_group_button:SetText("-") - delete_group_button:SetEnabled(group.nadmin) - delete_group_button.DoClick = function(self) - net.Start("nadmin_request_delete_group")--(group :: string) - net.WriteString(group.group.Name) - net.SendToServer() - end - line:SetColumnText(2,delete_group_button) - for n,privilege_name in pairs(ordered_privileges) do - local privilege_checkbox = vgui.Create("DCheckBox",line) - line:SetColumnText(n + 2,privilege_checkbox) - if group.nadmin then - privilege_checkbox:SetChecked(group.privileges[privilege_name]) - privilege_checkbox.OnChange = function(self,val) - net.Start("nadmin_request_update_group") --(group :: string, privilege :: string, set :: bool) - net.WriteString(group.group.Name) - net.WriteString(privilege_name.Name) - net.WriteBool(val) - net.SendToServer() - end - else - privilege_checkbox:SetDisabled(true) - end - end - group.line = line - group.line_id = #groups_tbl.Lines -end - -function remove_group_from_groupsheet(group) - groups_tbl:RemoveLine(group.line_id) -end - -local function create_new_group_dialog() - local dialog = vgui.Create("DFrame") - dialog:SetTitle("Create Group") - - local inherits_label = vgui.Create("DLabel",dialog) - inherits_label:Dock(TOP) - inherits_label:SetText("Inherits from") - - local inherits = create_usergroup_combo(dialog) - inherits:Dock(TOP) - - local groupname_label = vgui.Create("DLabel",dialog) - groupname_label:Dock(TOP) - groupname_label:SetText("Group Name") - - local groupname = vgui.Create("DTextEntry",dialog) - groupname:Dock(TOP) - - local createbtn = vgui.Create("DButton",dialog) - createbtn:SetText("Create Group") - createbtn.DoClick = function(self) - net.Start("nadmin_request_create_group") - net.WriteString(groupname:GetText()) - net.WriteString(inherits:GetText()) - net.SendToServer() - dialog:Close() - end - createbtn:Dock(BOTTOM) - - dialog:SetSize(250,150) - dialog:Center() - dialog:MakePopup() -end - -local function create_nadmin_panel() - if nadmin_frame ~= nil and nadmin_frame:IsValid() then - nadmin_frame:SetVisible(true) - return - end - - nadmin_frame = vgui.Create("DFrame") - nadmin_frame:SetTitle("nAdmin") - nadmin_frame.OnClose = function(self) - self:SetVisible(false) - return false - end - nadmin_frame:SetSizable(true) - local prop_sheet = vgui.Create("DPropertySheet",nadmin_frame) - prop_sheet:Dock(FILL) - users_tbl = vgui.Create("DListView",prop_sheet) - users_tbl:AddColumn("SteamID") - users_tbl:AddColumn("Name") - users_tbl:AddColumn("Group") - for steamid,player in pairs(nadmin.players) do - add_user_to_usersheet(steamid,player) - end - - prop_sheet:AddSheet("Users",users_tbl,nil,true,true,"Sets users to particular groups") - - users_tbl:Dock(FILL) - - local groups_scroller = vgui.Create("DHorizontalScroller",prop_sheet) - groups_tbl = vgui.Create("DListView",groups_scroller) - groups_scroller:Dock(FILL) - local gcol = groups_tbl:AddColumn("Group") - local dcol = groups_tbl:AddColumn("Delete") - gcol:SetEnabled(false) - dcol:SetEnabled(false) - local tot_columns = 0 - local tot_width = 0 - --Don't do anything if the user clicks the Group or Delete headers - for _,v in pairs(groups_tbl.Columns) do - v.DoClick = function() end - end - local add_line = groups_tbl:AddLine("") - local add_btn = vgui.Create("DButton",add_line) - add_btn:SetText("+") - add_btn.DoClick = function(self) - create_new_group_dialog() - end - add_line:SetColumnText(1,add_btn) - for groupname,group in pairs(nadmin.groups) do - tot_columns = tot_columns + 1 - add_group_to_groupsheet(group) - tot_width = tot_width + string.len(groupname)*30 --10 pixels for each character? - end - - for privilegename, privilege in pairs(nadmin.privileges) do - add_privilege_to_groupsheet(privilege) - end - groups_tbl:SetWidth(tot_width) - prop_sheet:AddSheet("Groups",groups_scroller,nil,true,true,"Set the privileges for a group") - groups_scroller:AddPanel(groups_tbl) - - nadmin_frame:SetSize(ScrW() / 2, ScrH() / 2) - nadmin_frame:SetPos(ScrW() / 4, ScrH() / 4) - nadmin_frame:MakePopup() -end - -concommand.Add("cl_nadmin", function(ply,cmd,args) - create_nadmin_panel() -end) -concommand.Add("cl_nadmin_new", function(ply,cmd,args) - nadmin_frame = nil - create_nadmin_panel() -end) +AddCSLuaFile()
+if SERVER then return end
+local nadmin = include("sh_nadmin.lua")
+
+--Functions
+local add_group_to_groupsheet
+local remove_group_from_groupsheet
+
+--Override what print() does, just for this file
+local oldprint = print
+local print = function(...)
+ local args = {...}
+ table.insert(args,1,"[NADMIN]")
+ oldprint(unpack(args))
+end
+
+local usergroup_dropdowns = {}
+local function add_usergroup_to_usergroup_dropdowns(name)
+ for k,v in pairs(usergroup_dropdowns) do
+ if v:IsValid() then
+ v:AddChoice(name)
+ else
+ usergroup_dropdowns[k] = nil
+ end
+ end
+end
+local function delete_usergroup_from_usergroup_dropdowns(group)
+ for _,v in pairs(usergroup_dropdowns) do
+ table.RemoveByValue(v.Choices, name)
+ if v.Menu then
+ v.Menu:Remove()
+ v.Menu = nil
+ end
+ if v:GetText() == group.group.Name then
+ v:SetText(group.group.MinAccess)
+ end
+ end
+end
+
+net.Receive("nadmin_init_privileges", function(len)
+ nadmin.privileges = net.ReadTable()
+end)
+net.Receive("nadmin_init_players", function(len)
+ nadmin.players = net.ReadTable()
+end)
+net.Receive("nadmin_init_groups", function(len)
+ nadmin.groups = net.ReadTable()
+end)
+
+net.Receive("nadmin_update_privilege", function(len)
+ local exists = net.ReadBool()
+ local privilege = net.ReadTable()
+ if exists then
+ nadmin.privileges[privilege.Name] = privilege
+ else
+ nadmin.privileges[privilege.Name] = nil
+ end
+end)
+net.Receive("nadmin_create_group", function(len)
+ local name = net.ReadString()
+ local inherits = net.ReadString()
+ local source = net.ReadString()
+ nadmin.groups[name] = {
+ name = name,
+ group = {
+ Name = name,
+ Inherits = inherits
+ },
+ privileges = {},
+ nadmin = source == "nadmin",
+ src = source
+ }
+ add_group_to_groupsheet(nadmin.groups[name])
+ add_usergroup_to_usergroup_dropdowns(name)
+ CAMI.RegisterUsergroup(nadmin.groups[name].group, "nadmin")
+end)
+net.Receive("nadmin_update_group", function(len)
+ local name = net.ReadString()
+ local privilege = net.ReadString()
+ local exists = net.ReadBool()
+ if exists then
+ nadmin.groups[name].privileges[privilege] = exists
+ else
+ nadmin.groups[name].privileges[privilege] = nil
+ end
+end)
+net.Receive("nadmin_delete_group", function(len)
+ local name = net.ReadString()
+ remove_group_from_groupsheet(nadmin.groups[name])
+ delete_usergroup_from_usergroup_dropdowns(nadmin.groups[name])
+ nadmin.groups[name] = nil
+ CAMI.UnregisterUsergroup(name,"nadmin")
+end)
+net.Receive("nadmin_update_player", function(len)
+ local player = net.ReadEntity()
+ local group = net.ReadString()
+ local sid = player:SteamID64()
+ nadmin.players[sid] = nadmin.players[sid] or {}
+ nadmin.players[sid].group = group
+ nadmin.players[sid].last_name = player:Name()
+ if nadmin.players[sid].combo then
+ nadmin.players[sid].combo:SetValue(group)
+ end
+ if nadmin.players[sid].line then
+ nadmin.players[sid].line:SetColumnText(2,player:Name())
+ end
+ CAMI.SignalSteamIDUserGroupChanged(sid,group,"nadmin")
+end)
+
+local function create_usergroup_combo(parent)
+ local ret = vgui.Create("DComboBox",parent)
+ for groupname, _ in pairs(nadmin.groups) do
+ ret:AddChoice(groupname)
+ end
+ table.insert(usergroup_dropdowns, ret)
+ return ret
+end
+
+local nadmin_frame,users_tbl,groups_tbl = nil,nil,nil
+local users_sheet,groups_sheet = nil,nil
+--ply :: entity
+local function add_user_to_usersheet(steamid,ply)
+ if not nadmin_frame then return end
+ local player_ent = player.GetBySteamID64(steamid)
+ local line = users_tbl:AddLine(steamid, ply.last_name, ply.group)
+ local dropdown = create_usergroup_combo(line)
+ if nadmin.players[steamid] then
+ dropdown:SetValue(nadmin.players[steamid].group)
+ else
+ dropdown:SetValue("user")
+ end
+ dropdown.OnSelect = function(self, index, value)
+ net.Start("nadmin_request_set_user_group")
+ net.WriteEntity(player_ent)
+ net.WriteString(value)
+ net.SendToServer()
+ end
+ line:SetColumnText(3,dropdown)
+ ply.combo = dropdown --Update the combo box when someone else updates the group
+ ply.line = line
+end
+
+--ply :: entity
+local function remove_user_from_usersheet(ply)
+ if not nadmin_frame then return end
+ if not ply.line then return end
+ users_tbl:RemoveLine(ply.line.m_iID)
+end
+
+local privilege_checkboxes = {}
+local function add_privilege_to_groupsheet(privilege)
+ local ordered_privileges = {}
+ for _,privilege in pairs(nadmin.privileges) do
+ table.insert(ordered_privileges,privilege)
+ end
+ table.sort(ordered_privileges, function(a,b) return a.Name > b.Name end)
+ local privilege_num = 0
+ for num,ordered_privilege in pairs(ordered_privileges) do
+ if ordered_privilege == privilege then
+ privilege_num = num
+ break
+ end
+ end
+ local column = groups_tbl:AddColumn(privilege.Name)
+ column.DoClick = function(self)
+ local explain_frame = vgui.Create("DFrame")
+ explain_frame:SetTitle(privilege.Name)
+ local description = vgui.Create("DLabel",explain_frame)
+ description:SetWrap(true)
+ if privilege.Description then
+ description:SetText(privilege.Description)
+ else
+ description:SetText("This privilege does not have a description")
+ end
+ explain_frame:SetSize(ScrW() / 6, ScrH() / 4)
+ explain_frame:SetPos(ScrW() / 4 + 100,ScrH() / 4 + 50)
+ explain_frame:MakePopup()
+ description:Dock(FILL)
+ end
+ column:SetWrap(true)
+ for groupname,group in pairs(nadmin.groups) do
+ local checkbox = vgui.Create("DCheckBox", group.line)
+ privilege_checkboxes[groupname] = checkbox
+ if group.nadmin then
+ checkbox:SetChecked(group.privileges[privilege.Name])
+ checkbox.OnChange = function(self,value)
+ net.Start("nadmin_request_update_group")
+ net.WriteString(groupname)
+ net.WriteString(privilege.Name)
+ net.WriteBool(value)
+ net.SendToServer()
+ end
+ else
+ checkbox:SetDisabled(true)
+ end
+ group.line:SetColumnText(privilege_num + 2,checkbox)
+ end
+end
+
+local function remove_privilege_from_groupsheet(privilege)
+
+end
+
+add_group_to_groupsheet = function(group)
+ if not groups_tbl then return end
+ local line = groups_tbl:AddLine(group.group.Name)
+ local ordered_privileges = {}
+ for _,privilege in pairs(nadmin.privileges) do
+ table.insert(ordered_privileges,privilege)
+ end
+ table.sort(ordered_privileges, function(a,b) return a.Name > b.Name end)
+ local delete_group_button = vgui.Create("DButton",line)
+ delete_group_button:SetText("-")
+ delete_group_button:SetEnabled(group.nadmin)
+ delete_group_button.DoClick = function(self)
+ net.Start("nadmin_request_delete_group")--(group :: string)
+ net.WriteString(group.group.Name)
+ net.SendToServer()
+ end
+ line:SetColumnText(2,delete_group_button)
+ for n,privilege_name in pairs(ordered_privileges) do
+ local privilege_checkbox = vgui.Create("DCheckBox",line)
+ line:SetColumnText(n + 2,privilege_checkbox)
+ if group.nadmin then
+ privilege_checkbox:SetChecked(group.privileges[privilege_name])
+ privilege_checkbox.OnChange = function(self,val)
+ net.Start("nadmin_request_update_group") --(group :: string, privilege :: string, set :: bool)
+ net.WriteString(group.group.Name)
+ net.WriteString(privilege_name.Name)
+ net.WriteBool(val)
+ net.SendToServer()
+ end
+ else
+ privilege_checkbox:SetDisabled(true)
+ end
+ end
+ group.line = line
+ group.line_id = #groups_tbl.Lines
+end
+
+function remove_group_from_groupsheet(group)
+ groups_tbl:RemoveLine(group.line_id)
+end
+
+local function create_new_group_dialog()
+ local dialog = vgui.Create("DFrame")
+ dialog:SetTitle("Create Group")
+
+ local inherits_label = vgui.Create("DLabel",dialog)
+ inherits_label:Dock(TOP)
+ inherits_label:SetText("Inherits from")
+
+ local inherits = create_usergroup_combo(dialog)
+ inherits:Dock(TOP)
+
+ local groupname_label = vgui.Create("DLabel",dialog)
+ groupname_label:Dock(TOP)
+ groupname_label:SetText("Group Name")
+
+ local groupname = vgui.Create("DTextEntry",dialog)
+ groupname:Dock(TOP)
+
+ local createbtn = vgui.Create("DButton",dialog)
+ createbtn:SetText("Create Group")
+ createbtn.DoClick = function(self)
+ net.Start("nadmin_request_create_group")
+ net.WriteString(groupname:GetText())
+ net.WriteString(inherits:GetText())
+ net.SendToServer()
+ dialog:Close()
+ end
+ createbtn:Dock(BOTTOM)
+
+ dialog:SetSize(250,150)
+ dialog:Center()
+ dialog:MakePopup()
+end
+
+local function create_nadmin_panel()
+ if nadmin_frame ~= nil and nadmin_frame:IsValid() then
+ nadmin_frame:SetVisible(true)
+ return
+ end
+
+ nadmin_frame = vgui.Create("DFrame")
+ nadmin_frame:SetTitle("nAdmin")
+ nadmin_frame.OnClose = function(self)
+ self:SetVisible(false)
+ return false
+ end
+ nadmin_frame:SetSizable(true)
+ local prop_sheet = vgui.Create("DPropertySheet",nadmin_frame)
+ prop_sheet:Dock(FILL)
+ users_tbl = vgui.Create("DListView",prop_sheet)
+ users_tbl:AddColumn("SteamID")
+ users_tbl:AddColumn("Name")
+ users_tbl:AddColumn("Group")
+ for steamid,player in pairs(nadmin.players) do
+ add_user_to_usersheet(steamid,player)
+ end
+
+ prop_sheet:AddSheet("Users",users_tbl,nil,true,true,"Sets users to particular groups")
+
+ users_tbl:Dock(FILL)
+
+ local groups_scroller = vgui.Create("DHorizontalScroller",prop_sheet)
+ groups_tbl = vgui.Create("DListView",groups_scroller)
+ groups_scroller:Dock(FILL)
+ local gcol = groups_tbl:AddColumn("Group")
+ local dcol = groups_tbl:AddColumn("Delete")
+ gcol:SetEnabled(false)
+ dcol:SetEnabled(false)
+ local tot_columns = 0
+ local tot_width = 0
+ --Don't do anything if the user clicks the Group or Delete headers
+ for _,v in pairs(groups_tbl.Columns) do
+ v.DoClick = function() end
+ end
+ local add_line = groups_tbl:AddLine("")
+ local add_btn = vgui.Create("DButton",add_line)
+ add_btn:SetText("+")
+ add_btn.DoClick = function(self)
+ create_new_group_dialog()
+ end
+ add_line:SetColumnText(1,add_btn)
+ for groupname,group in pairs(nadmin.groups) do
+ tot_columns = tot_columns + 1
+ add_group_to_groupsheet(group)
+ tot_width = tot_width + string.len(groupname)*30 --10 pixels for each character?
+ end
+
+ for privilegename, privilege in pairs(nadmin.privileges) do
+ add_privilege_to_groupsheet(privilege)
+ end
+ groups_tbl:SetWidth(tot_width)
+ prop_sheet:AddSheet("Groups",groups_scroller,nil,true,true,"Set the privileges for a group")
+ groups_scroller:AddPanel(groups_tbl)
+
+ nadmin_frame:SetSize(ScrW() / 2, ScrH() / 2)
+ nadmin_frame:SetPos(ScrW() / 4, ScrH() / 4)
+ nadmin_frame:MakePopup()
+end
+
+concommand.Add("cl_nadmin", function(ply,cmd,args)
+ create_nadmin_panel()
+end)
+concommand.Add("cl_nadmin_new", function(ply,cmd,args)
+ nadmin_frame = nil
+ create_nadmin_panel()
+end)
|
