Loading database.sql +9 −5 Original line number Diff line number Diff line Loading @@ -9,14 +9,18 @@ CREATE TABLE IF NOT EXISTS `tbl_msyncdb_version` ( `version` float NOT NULL ); CREATE TABLE IF NOT EXISTS `tbl_msync_servers` ( `p_id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `server_name` VARCHAR(15) NOT NULL, `server_name` VARCHAR(55) NOT NULL, `options` VARCHAR(100) NOT NULL DEFAULT '[]', `server_group` VARCHAR(45) `ip` INT NOT NULL, `port` VARCHAR(5) NOT NULL, `server_group` INT NOT NULL, UNIQUE INDEX `server_UNIQUE` (`ip`, `port`) ); CREATE TABLE IF NOT EXISTS `tbl_server_grp` ( `p_group_id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `group_name` VARCHAR(15) NOT NULL `group_name` VARCHAR(15) NOT NULL, UNIQUE INDEX `group_UNIQUE` (`group_name`) ); CREATE TABLE IF NOT EXISTS `tbl_users` ( Loading msync/client_gui/cl_admin_gui.lua +28 −10 Original line number Diff line number Diff line Loading @@ -10,55 +10,65 @@ function MSync.AdminPanel.InitMySQL( sheet ) local pnl = vgui.Create( "DPanel", sheet ) local mysqlip_text = vgui.Create( "DLabel", pnl ) mysqlip_text:SetPos( 25, 30 ) mysqlip_text:SetPos( 25, 10 ) mysqlip_text:SetColor( Color( 0, 0, 0 ) ) mysqlip_text:SetText( "Host IP" ) local mysqlip = vgui.Create( "DTextEntry", pnl ) mysqlip:SetPos( 25, 50 ) mysqlip:SetPos( 25, 30 ) mysqlip:SetSize( 150, 20 ) mysqlip:SetText( "127.0.0.1" ) local mysqlport_text = vgui.Create( "DLabel", pnl ) mysqlport_text:SetPos( 25, 75 ) mysqlport_text:SetPos( 25, 55 ) mysqlport_text:SetColor( Color( 0, 0, 0 ) ) mysqlport_text:SetText( "Host Port" ) local mysqlport = vgui.Create( "DTextEntry", pnl ) mysqlport:SetPos( 25, 95 ) mysqlport:SetPos( 25, 75 ) mysqlport:SetSize( 150, 20 ) mysqlport:SetText( "3306" ) local mysqldb_text = vgui.Create( "DLabel", pnl ) mysqldb_text:SetPos( 25, 120 ) mysqldb_text:SetPos( 25, 100 ) mysqldb_text:SetColor( Color( 0, 0, 0 ) ) mysqldb_text:SetText( "Database" ) local mysqldb = vgui.Create( "DTextEntry", pnl ) mysqldb:SetPos( 25, 140 ) mysqldb:SetPos( 25, 120 ) mysqldb:SetSize( 150, 20 ) mysqldb:SetText( "MSync" ) local mysqluser_text = vgui.Create( "DLabel", pnl ) mysqluser_text:SetPos( 25, 165 ) mysqluser_text:SetPos( 25, 145 ) mysqluser_text:SetColor( Color( 0, 0, 0 ) ) mysqluser_text:SetText( "Username" ) local mysqluser = vgui.Create( "DTextEntry", pnl ) mysqluser:SetPos( 25, 185 ) mysqluser:SetPos( 25, 165 ) mysqluser:SetSize( 150, 20 ) mysqluser:SetText( "root" ) local mysqlpassword_text = vgui.Create( "DLabel", pnl ) mysqlpassword_text:SetPos( 25, 210 ) mysqlpassword_text:SetPos( 25, 190 ) mysqlpassword_text:SetColor( Color( 0, 0, 0 ) ) mysqlpassword_text:SetText( "Password" ) local mysqlpassword = vgui.Create( "DTextEntry", pnl ) mysqlpassword:SetPos( 25, 230 ) mysqlpassword:SetPos( 25, 210 ) mysqlpassword:SetSize( 150, 20 ) mysqlpassword:SetText( "*****" ) local servergroup_text = vgui.Create( "DLabel", pnl ) servergroup_text:SetPos( 25, 235 ) servergroup_text:SetColor( Color( 0, 0, 0 ) ) servergroup_text:SetText( "Server Group" ) local servergroup = vgui.Create( "DTextEntry", pnl ) servergroup:SetPos( 25, 255 ) servergroup:SetSize( 150, 20 ) servergroup:SetText( "allserver" ) local title_info = vgui.Create( "DLabel", pnl ) title_info:SetPos( 200, 25 ) title_info:SetColor( Color( 0, 0, 0 ) ) Loading Loading @@ -96,6 +106,7 @@ function MSync.AdminPanel.InitMySQL( sheet ) MSync.settings.mysql.database = mysqldb:GetValue() MSync.settings.mysql.username = mysqluser:GetValue() MSync.settings.mysql.password = mysqlpassword:GetValue() MSync.settings.serverGroup = servergroup:GetValue() MSync.net.sendSettings(MSync.settings) end Loading @@ -109,6 +120,7 @@ function MSync.AdminPanel.InitMySQL( sheet ) MSync.settings.mysql.database = mysqldb:GetValue() MSync.settings.mysql.username = mysqluser:GetValue() MSync.settings.mysql.password = mysqlpassword:GetValue() MSync.settings.serverGroup = servergroup:GetValue() MSync.net.sendSettings(MSync.settings) MSync.net.connectDB() end Loading @@ -131,11 +143,13 @@ function MSync.AdminPanel.InitMySQL( sheet ) mysqldb:SetText("msync") mysqluser:SetText("root") mysqlpassword:SetText("****") servergroup:SetText("allserver") MSync.settings.mysql.host = mysqlip:GetValue() MSync.settings.mysql.port = mysqlport:GetValue() MSync.settings.mysql.database = mysqldb:GetValue() MSync.settings.mysql.username = mysqluser:GetValue() MSync.settings.mysql.password = "" MSync.settings.serverGroup = servergroup:GetValue() MSync.net.sendSettings(MSync.settings) end Loading @@ -144,6 +158,7 @@ function MSync.AdminPanel.InitMySQL( sheet ) mysqlport:SetText(MSync.settings.mysql.port) mysqldb:SetText(MSync.settings.mysql.database) mysqluser:SetText(MSync.settings.mysql.username) servergroup:SetText(MSync.settings.serverGroup) else timer.Create("msync.t.checkForSettings", 0.5, 0, function() if not MSync.settings or not MSync.settings.mysql then return end; Loading @@ -152,6 +167,7 @@ function MSync.AdminPanel.InitMySQL( sheet ) mysqlport:SetText(MSync.settings.mysql.port) mysqldb:SetText(MSync.settings.mysql.database) mysqluser:SetText(MSync.settings.mysql.username) servergroup:SetText(MSync.settings.serverGroup) timer.Remove("msync.t.checkForSettings") end) end Loading Loading @@ -210,6 +226,8 @@ function MSync.AdminPanel.InitModuleSettings( sheet ) for k, v in pairs(files) do local info = include("msync/client_gui/modules/"..v) MSync.modules[info.ModuleIdentifier]["init"]() MSync.modules[info.ModuleIdentifier]["net"]() pnl:AddSheet( info.Name, MSync.modules[info.ModuleIdentifier].adminPanel(pnl)) end Loading msync/client_gui/cl_modules.lua +7 −4 Original line number Diff line number Diff line Loading @@ -8,9 +8,11 @@ MSync.modules = MSync.modules or {} Returns: nothing ]] function MSync.loadModules() for k, v in pairs(file.Find("msync/client_gui/modules/*.lua", "LUA")[1]) do local files, _ = file.Find("msync/client_gui/modules/*.lua", "LUA") for k, v in pairs(files) do include("msync/client_gui/modules/"..v) end MSync.initModules() end --[[ Loading @@ -19,12 +21,13 @@ end ]] function MSync.initModules() for k,v in pairs(MSync.Modules) do for k,v in pairs(MSync.modules) do if not MSync.moduleState[v["info"]["ModuleIdentifier"]] then return end; v["init"]() v["net"]() v["ulx"]() v["hooks"]() print("["..v[info][Name].."] Module loaded") print("["..v["info"]["Name"].."] Module loaded") end end Loading msync/client_gui/cl_net.lua +13 −1 Original line number Diff line number Diff line Loading @@ -58,7 +58,11 @@ net.Receive( "msync.sendTable", function( len, pl ) local table = net.ReadTable() if type == "settings" then MSync.settings = table; print("Got Settings!") elseif type == "modules" then MSync.serverModules = table end elseif type == "modules" then MSync.serverModules = table elseif type == "modulestate" then MSync.moduleState = table MSync.loadModules() end end ) --[[ Loading @@ -84,3 +88,11 @@ end ) net.Receive( "msync.openAdminGUI", function( len, pl ) MSync.AdminPanel.InitPanel() end ) --[[ Description: Net Receiver - Gets called when server sent the db status Returns: nothing ]] net.Receive( "msync.dbStatus", function( len, pl ) MSync.DBStatus = net.ReadBool() end ) No newline at end of file msync/client_gui/modules/cl_mrsync.lua 0 → 100644 +225 −0 Original line number Diff line number Diff line MSync = MSync or {} MSync.modules = MSync.modules or {} MSync.modules.MRSync = MSync.modules.MRSync or {} --[[ * @file cl_mrsync.lua * @package MySQL Rank Sync * @author Aperture Development * @license root_dir/LICENCE * @version 2.0.0 ]] --[[ Define name, description and module identifier ]] MSync.modules.MRSync.info = { Name = "MySQL Rank Sync", ModuleIdentifier = "MRSync", Description = "Synchronise your ranks across your servers", Version = "2.0.0" } --[[ Define additional functions that are later used ]] function MSync.modules.MRSync.init() end --[[ Define the admin panel for the settings ]] function MSync.modules.MRSync.adminPanel(sheet) local pnl = vgui.Create( "DPanel", sheet ) pnl:Dock(FILL) local allserver_text = vgui.Create( "DLabel", pnl ) allserver_text:SetPos( 25, 0 ) allserver_text:SetColor( Color( 0, 0, 0 ) ) allserver_text:SetText( "Add Allserver ranks. Those ranks get Synced across all servers." ) allserver_text:SetSize(380, 15) local allserver_textentry = vgui.Create( "DTextEntry", pnl ) allserver_textentry:SetPos( 25, 15 ) allserver_textentry:SetSize( 250, 20 ) allserver_textentry:SetPlaceholderText( "Rank name as string. Example: superadmin" ) local allserver_table = vgui.Create( "DListView", pnl ) allserver_table:SetPos( 25, 35 ) allserver_table:SetSize( 380, 100 ) allserver_table:SetMultiSelect( false ) allserver_table:AddColumn( "Allserver Ranks" ) allserver_table.OnRowRightClick = function(panel, lineID, line) local ident = line:GetValue(1) local cursor_x, cursor_y = panel:CursorPos() local DMenu = vgui.Create("DMenu", panel) DMenu:SetPos(cursor_x, cursor_y) DMenu:AddOption("Remove") DMenu.OptionSelected = function(menu,optPnl,optStr) if MSync.modules.MRSync.settings.syncall[line:GetValue(1)] then allserver_table:RemoveLine(lineID) MSync.modules.MRSync.settings.syncall[line:GetValue(1)] = nil MSync.modules.MRSync.sendSettings() end end end local allserver_button = vgui.Create( "DButton", pnl ) allserver_button:SetText( "Add" ) allserver_button:SetPos( 275, 15 ) allserver_button:SetSize( 130, 20 ) allserver_button.DoClick = function() if allserver_textentry:GetValue() and not MSync.modules.MRSync.settings.nosync[allserver_textentry:GetValue()] and not MSync.modules.MRSync.settings.syncall[allserver_textentry:GetValue()] then allserver_table:AddLine(allserver_textentry:GetValue()) MSync.modules.MRSync.settings.syncall[allserver_textentry:GetValue()] = true allserver_textentry:SetText("") MSync.modules.MRSync.sendSettings() end end local nosync_text = vgui.Create( "DLabel", pnl ) nosync_text:SetPos( 25, 140 ) nosync_text:SetColor( Color( 0, 0, 0 ) ) nosync_text:SetText( "Add Nosync ranks. Those ranks do not get Synced at all." ) nosync_text:SetSize(380, 15) local nosync_textentry = vgui.Create( "DTextEntry", pnl ) nosync_textentry:SetPos( 25, 155 ) nosync_textentry:SetSize( 250, 20 ) nosync_textentry:SetPlaceholderText( "Rank name as string. Example: superadmin" ) local nosync_table = vgui.Create( "DListView", pnl ) nosync_table:SetPos( 25, 175 ) nosync_table:SetSize( 380, 100 ) nosync_table:SetMultiSelect( false ) nosync_table:AddColumn( "Nosync Ranks" ) nosync_table.OnRowRightClick = function(panel, lineID, line) local ident = line:GetValue(1) local cursor_x, cursor_y = panel:CursorPos() local DMenu = vgui.Create("DMenu", panel) DMenu:SetPos(cursor_x, cursor_y) DMenu:AddOption("Remove") DMenu.OptionSelected = function(menu,optPnl,optStr) if MSync.modules.MRSync.settings.nosync[line:GetValue(1)] then nosync_table:RemoveLine(lineID) MSync.modules.MRSync.settings.nosync[line:GetValue(1)] = nil MSync.modules.MRSync.sendSettings() end end end local nosync_button = vgui.Create( "DButton", pnl ) nosync_button:SetText( "Add" ) nosync_button:SetPos( 275, 155 ) nosync_button:SetSize( 130, 20 ) nosync_button.DoClick = function() if nosync_textentry:GetValue() and not MSync.modules.MRSync.settings.nosync[allserver_textentry:GetValue()] and not MSync.modules.MRSync.settings.syncall[allserver_textentry:GetValue()] then nosync_table:AddLine(nosync_textentry:GetValue()) MSync.modules.MRSync.settings.nosync[allserver_textentry:GetValue()] = true nosync_textentry:SetText("") MSync.modules.MRSync.sendSettings() end end if MSync.DBStatus then MSync.modules.MRSync.getSettings() end if not MSync.modules.MRSync.settings then timer.Create("mrsync.t.checkSettings", 1, 0, function() if not MSync.modules.MRSync.settings then return end for k,_ in pairs(MSync.modules.MRSync.settings.syncall) do allserver_table:AddLine(k) end for k,_ in pairs(MSync.modules.MRSync.settings.nosync) do nosync_table:AddLine(k) end timer.Remove("mrsync.t.checkSettings") end) else for k,_ in pairs(MSync.modules.MRSync.settings.syncall) do allserver_table:AddLine(k) end for k,_ in pairs(MSync.modules.MRSync.settings.nosync) do nosync_table:AddLine(k) end end return pnl end --[[ Define the client panel for client usage ( or as example: use it as additional admin gui which does not need msync.admingui permission) ]] function MSync.modules.MRSync.clientPanel() local pnl = vgui.Create( "DPanel" ) return pnl end --[[ Define net receivers and util.AddNetworkString ]] function MSync.modules.MRSync.net() --[[ Description: Function to send the mrsync settings to the client Arguments: player [player] - the player that wants to open the admin GUI Returns: nothing ]] function MSync.modules.MRSync.sendSettings() net.Start("msync.mrsync.sendSettings") net.WriteTable(MSync.modules.MRSync.settings) net.SendToServer() end --[[ Description: Function to send the mrsync settings to the client Arguments: player [player] - the player that wants to open the admin GUI Returns: nothing ]] function MSync.modules.MRSync.getSettings() net.Start("msync.mrsync.getSettings") net.SendToServer() end --[[ Description: Net Receiver - Gets called when the client requests the settings table Returns: nothing ]] net.Receive("msync.mrsync.sendSettingsPly", function(len, ply) MSync.modules.MRSync.settings = net.ReadTable() end ) end --[[ Define ulx Commands and overwrite common ulx functions (module does not get loaded until ulx has fully been loaded) ]] function MSync.modules.MRSync.ulx() end --[[ Define hooks your module is listening on e.g. PlayerDisconnect ]] function MSync.modules.MRSync.hooks() end --[[ Return info ( Just for single module loading ) ]] return MSync.modules.MRSync.info No newline at end of file Loading
database.sql +9 −5 Original line number Diff line number Diff line Loading @@ -9,14 +9,18 @@ CREATE TABLE IF NOT EXISTS `tbl_msyncdb_version` ( `version` float NOT NULL ); CREATE TABLE IF NOT EXISTS `tbl_msync_servers` ( `p_id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `server_name` VARCHAR(15) NOT NULL, `server_name` VARCHAR(55) NOT NULL, `options` VARCHAR(100) NOT NULL DEFAULT '[]', `server_group` VARCHAR(45) `ip` INT NOT NULL, `port` VARCHAR(5) NOT NULL, `server_group` INT NOT NULL, UNIQUE INDEX `server_UNIQUE` (`ip`, `port`) ); CREATE TABLE IF NOT EXISTS `tbl_server_grp` ( `p_group_id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `group_name` VARCHAR(15) NOT NULL `group_name` VARCHAR(15) NOT NULL, UNIQUE INDEX `group_UNIQUE` (`group_name`) ); CREATE TABLE IF NOT EXISTS `tbl_users` ( Loading
msync/client_gui/cl_admin_gui.lua +28 −10 Original line number Diff line number Diff line Loading @@ -10,55 +10,65 @@ function MSync.AdminPanel.InitMySQL( sheet ) local pnl = vgui.Create( "DPanel", sheet ) local mysqlip_text = vgui.Create( "DLabel", pnl ) mysqlip_text:SetPos( 25, 30 ) mysqlip_text:SetPos( 25, 10 ) mysqlip_text:SetColor( Color( 0, 0, 0 ) ) mysqlip_text:SetText( "Host IP" ) local mysqlip = vgui.Create( "DTextEntry", pnl ) mysqlip:SetPos( 25, 50 ) mysqlip:SetPos( 25, 30 ) mysqlip:SetSize( 150, 20 ) mysqlip:SetText( "127.0.0.1" ) local mysqlport_text = vgui.Create( "DLabel", pnl ) mysqlport_text:SetPos( 25, 75 ) mysqlport_text:SetPos( 25, 55 ) mysqlport_text:SetColor( Color( 0, 0, 0 ) ) mysqlport_text:SetText( "Host Port" ) local mysqlport = vgui.Create( "DTextEntry", pnl ) mysqlport:SetPos( 25, 95 ) mysqlport:SetPos( 25, 75 ) mysqlport:SetSize( 150, 20 ) mysqlport:SetText( "3306" ) local mysqldb_text = vgui.Create( "DLabel", pnl ) mysqldb_text:SetPos( 25, 120 ) mysqldb_text:SetPos( 25, 100 ) mysqldb_text:SetColor( Color( 0, 0, 0 ) ) mysqldb_text:SetText( "Database" ) local mysqldb = vgui.Create( "DTextEntry", pnl ) mysqldb:SetPos( 25, 140 ) mysqldb:SetPos( 25, 120 ) mysqldb:SetSize( 150, 20 ) mysqldb:SetText( "MSync" ) local mysqluser_text = vgui.Create( "DLabel", pnl ) mysqluser_text:SetPos( 25, 165 ) mysqluser_text:SetPos( 25, 145 ) mysqluser_text:SetColor( Color( 0, 0, 0 ) ) mysqluser_text:SetText( "Username" ) local mysqluser = vgui.Create( "DTextEntry", pnl ) mysqluser:SetPos( 25, 185 ) mysqluser:SetPos( 25, 165 ) mysqluser:SetSize( 150, 20 ) mysqluser:SetText( "root" ) local mysqlpassword_text = vgui.Create( "DLabel", pnl ) mysqlpassword_text:SetPos( 25, 210 ) mysqlpassword_text:SetPos( 25, 190 ) mysqlpassword_text:SetColor( Color( 0, 0, 0 ) ) mysqlpassword_text:SetText( "Password" ) local mysqlpassword = vgui.Create( "DTextEntry", pnl ) mysqlpassword:SetPos( 25, 230 ) mysqlpassword:SetPos( 25, 210 ) mysqlpassword:SetSize( 150, 20 ) mysqlpassword:SetText( "*****" ) local servergroup_text = vgui.Create( "DLabel", pnl ) servergroup_text:SetPos( 25, 235 ) servergroup_text:SetColor( Color( 0, 0, 0 ) ) servergroup_text:SetText( "Server Group" ) local servergroup = vgui.Create( "DTextEntry", pnl ) servergroup:SetPos( 25, 255 ) servergroup:SetSize( 150, 20 ) servergroup:SetText( "allserver" ) local title_info = vgui.Create( "DLabel", pnl ) title_info:SetPos( 200, 25 ) title_info:SetColor( Color( 0, 0, 0 ) ) Loading Loading @@ -96,6 +106,7 @@ function MSync.AdminPanel.InitMySQL( sheet ) MSync.settings.mysql.database = mysqldb:GetValue() MSync.settings.mysql.username = mysqluser:GetValue() MSync.settings.mysql.password = mysqlpassword:GetValue() MSync.settings.serverGroup = servergroup:GetValue() MSync.net.sendSettings(MSync.settings) end Loading @@ -109,6 +120,7 @@ function MSync.AdminPanel.InitMySQL( sheet ) MSync.settings.mysql.database = mysqldb:GetValue() MSync.settings.mysql.username = mysqluser:GetValue() MSync.settings.mysql.password = mysqlpassword:GetValue() MSync.settings.serverGroup = servergroup:GetValue() MSync.net.sendSettings(MSync.settings) MSync.net.connectDB() end Loading @@ -131,11 +143,13 @@ function MSync.AdminPanel.InitMySQL( sheet ) mysqldb:SetText("msync") mysqluser:SetText("root") mysqlpassword:SetText("****") servergroup:SetText("allserver") MSync.settings.mysql.host = mysqlip:GetValue() MSync.settings.mysql.port = mysqlport:GetValue() MSync.settings.mysql.database = mysqldb:GetValue() MSync.settings.mysql.username = mysqluser:GetValue() MSync.settings.mysql.password = "" MSync.settings.serverGroup = servergroup:GetValue() MSync.net.sendSettings(MSync.settings) end Loading @@ -144,6 +158,7 @@ function MSync.AdminPanel.InitMySQL( sheet ) mysqlport:SetText(MSync.settings.mysql.port) mysqldb:SetText(MSync.settings.mysql.database) mysqluser:SetText(MSync.settings.mysql.username) servergroup:SetText(MSync.settings.serverGroup) else timer.Create("msync.t.checkForSettings", 0.5, 0, function() if not MSync.settings or not MSync.settings.mysql then return end; Loading @@ -152,6 +167,7 @@ function MSync.AdminPanel.InitMySQL( sheet ) mysqlport:SetText(MSync.settings.mysql.port) mysqldb:SetText(MSync.settings.mysql.database) mysqluser:SetText(MSync.settings.mysql.username) servergroup:SetText(MSync.settings.serverGroup) timer.Remove("msync.t.checkForSettings") end) end Loading Loading @@ -210,6 +226,8 @@ function MSync.AdminPanel.InitModuleSettings( sheet ) for k, v in pairs(files) do local info = include("msync/client_gui/modules/"..v) MSync.modules[info.ModuleIdentifier]["init"]() MSync.modules[info.ModuleIdentifier]["net"]() pnl:AddSheet( info.Name, MSync.modules[info.ModuleIdentifier].adminPanel(pnl)) end Loading
msync/client_gui/cl_modules.lua +7 −4 Original line number Diff line number Diff line Loading @@ -8,9 +8,11 @@ MSync.modules = MSync.modules or {} Returns: nothing ]] function MSync.loadModules() for k, v in pairs(file.Find("msync/client_gui/modules/*.lua", "LUA")[1]) do local files, _ = file.Find("msync/client_gui/modules/*.lua", "LUA") for k, v in pairs(files) do include("msync/client_gui/modules/"..v) end MSync.initModules() end --[[ Loading @@ -19,12 +21,13 @@ end ]] function MSync.initModules() for k,v in pairs(MSync.Modules) do for k,v in pairs(MSync.modules) do if not MSync.moduleState[v["info"]["ModuleIdentifier"]] then return end; v["init"]() v["net"]() v["ulx"]() v["hooks"]() print("["..v[info][Name].."] Module loaded") print("["..v["info"]["Name"].."] Module loaded") end end Loading
msync/client_gui/cl_net.lua +13 −1 Original line number Diff line number Diff line Loading @@ -58,7 +58,11 @@ net.Receive( "msync.sendTable", function( len, pl ) local table = net.ReadTable() if type == "settings" then MSync.settings = table; print("Got Settings!") elseif type == "modules" then MSync.serverModules = table end elseif type == "modules" then MSync.serverModules = table elseif type == "modulestate" then MSync.moduleState = table MSync.loadModules() end end ) --[[ Loading @@ -84,3 +88,11 @@ end ) net.Receive( "msync.openAdminGUI", function( len, pl ) MSync.AdminPanel.InitPanel() end ) --[[ Description: Net Receiver - Gets called when server sent the db status Returns: nothing ]] net.Receive( "msync.dbStatus", function( len, pl ) MSync.DBStatus = net.ReadBool() end ) No newline at end of file
msync/client_gui/modules/cl_mrsync.lua 0 → 100644 +225 −0 Original line number Diff line number Diff line MSync = MSync or {} MSync.modules = MSync.modules or {} MSync.modules.MRSync = MSync.modules.MRSync or {} --[[ * @file cl_mrsync.lua * @package MySQL Rank Sync * @author Aperture Development * @license root_dir/LICENCE * @version 2.0.0 ]] --[[ Define name, description and module identifier ]] MSync.modules.MRSync.info = { Name = "MySQL Rank Sync", ModuleIdentifier = "MRSync", Description = "Synchronise your ranks across your servers", Version = "2.0.0" } --[[ Define additional functions that are later used ]] function MSync.modules.MRSync.init() end --[[ Define the admin panel for the settings ]] function MSync.modules.MRSync.adminPanel(sheet) local pnl = vgui.Create( "DPanel", sheet ) pnl:Dock(FILL) local allserver_text = vgui.Create( "DLabel", pnl ) allserver_text:SetPos( 25, 0 ) allserver_text:SetColor( Color( 0, 0, 0 ) ) allserver_text:SetText( "Add Allserver ranks. Those ranks get Synced across all servers." ) allserver_text:SetSize(380, 15) local allserver_textentry = vgui.Create( "DTextEntry", pnl ) allserver_textentry:SetPos( 25, 15 ) allserver_textentry:SetSize( 250, 20 ) allserver_textentry:SetPlaceholderText( "Rank name as string. Example: superadmin" ) local allserver_table = vgui.Create( "DListView", pnl ) allserver_table:SetPos( 25, 35 ) allserver_table:SetSize( 380, 100 ) allserver_table:SetMultiSelect( false ) allserver_table:AddColumn( "Allserver Ranks" ) allserver_table.OnRowRightClick = function(panel, lineID, line) local ident = line:GetValue(1) local cursor_x, cursor_y = panel:CursorPos() local DMenu = vgui.Create("DMenu", panel) DMenu:SetPos(cursor_x, cursor_y) DMenu:AddOption("Remove") DMenu.OptionSelected = function(menu,optPnl,optStr) if MSync.modules.MRSync.settings.syncall[line:GetValue(1)] then allserver_table:RemoveLine(lineID) MSync.modules.MRSync.settings.syncall[line:GetValue(1)] = nil MSync.modules.MRSync.sendSettings() end end end local allserver_button = vgui.Create( "DButton", pnl ) allserver_button:SetText( "Add" ) allserver_button:SetPos( 275, 15 ) allserver_button:SetSize( 130, 20 ) allserver_button.DoClick = function() if allserver_textentry:GetValue() and not MSync.modules.MRSync.settings.nosync[allserver_textentry:GetValue()] and not MSync.modules.MRSync.settings.syncall[allserver_textentry:GetValue()] then allserver_table:AddLine(allserver_textentry:GetValue()) MSync.modules.MRSync.settings.syncall[allserver_textentry:GetValue()] = true allserver_textentry:SetText("") MSync.modules.MRSync.sendSettings() end end local nosync_text = vgui.Create( "DLabel", pnl ) nosync_text:SetPos( 25, 140 ) nosync_text:SetColor( Color( 0, 0, 0 ) ) nosync_text:SetText( "Add Nosync ranks. Those ranks do not get Synced at all." ) nosync_text:SetSize(380, 15) local nosync_textentry = vgui.Create( "DTextEntry", pnl ) nosync_textentry:SetPos( 25, 155 ) nosync_textentry:SetSize( 250, 20 ) nosync_textentry:SetPlaceholderText( "Rank name as string. Example: superadmin" ) local nosync_table = vgui.Create( "DListView", pnl ) nosync_table:SetPos( 25, 175 ) nosync_table:SetSize( 380, 100 ) nosync_table:SetMultiSelect( false ) nosync_table:AddColumn( "Nosync Ranks" ) nosync_table.OnRowRightClick = function(panel, lineID, line) local ident = line:GetValue(1) local cursor_x, cursor_y = panel:CursorPos() local DMenu = vgui.Create("DMenu", panel) DMenu:SetPos(cursor_x, cursor_y) DMenu:AddOption("Remove") DMenu.OptionSelected = function(menu,optPnl,optStr) if MSync.modules.MRSync.settings.nosync[line:GetValue(1)] then nosync_table:RemoveLine(lineID) MSync.modules.MRSync.settings.nosync[line:GetValue(1)] = nil MSync.modules.MRSync.sendSettings() end end end local nosync_button = vgui.Create( "DButton", pnl ) nosync_button:SetText( "Add" ) nosync_button:SetPos( 275, 155 ) nosync_button:SetSize( 130, 20 ) nosync_button.DoClick = function() if nosync_textentry:GetValue() and not MSync.modules.MRSync.settings.nosync[allserver_textentry:GetValue()] and not MSync.modules.MRSync.settings.syncall[allserver_textentry:GetValue()] then nosync_table:AddLine(nosync_textentry:GetValue()) MSync.modules.MRSync.settings.nosync[allserver_textentry:GetValue()] = true nosync_textentry:SetText("") MSync.modules.MRSync.sendSettings() end end if MSync.DBStatus then MSync.modules.MRSync.getSettings() end if not MSync.modules.MRSync.settings then timer.Create("mrsync.t.checkSettings", 1, 0, function() if not MSync.modules.MRSync.settings then return end for k,_ in pairs(MSync.modules.MRSync.settings.syncall) do allserver_table:AddLine(k) end for k,_ in pairs(MSync.modules.MRSync.settings.nosync) do nosync_table:AddLine(k) end timer.Remove("mrsync.t.checkSettings") end) else for k,_ in pairs(MSync.modules.MRSync.settings.syncall) do allserver_table:AddLine(k) end for k,_ in pairs(MSync.modules.MRSync.settings.nosync) do nosync_table:AddLine(k) end end return pnl end --[[ Define the client panel for client usage ( or as example: use it as additional admin gui which does not need msync.admingui permission) ]] function MSync.modules.MRSync.clientPanel() local pnl = vgui.Create( "DPanel" ) return pnl end --[[ Define net receivers and util.AddNetworkString ]] function MSync.modules.MRSync.net() --[[ Description: Function to send the mrsync settings to the client Arguments: player [player] - the player that wants to open the admin GUI Returns: nothing ]] function MSync.modules.MRSync.sendSettings() net.Start("msync.mrsync.sendSettings") net.WriteTable(MSync.modules.MRSync.settings) net.SendToServer() end --[[ Description: Function to send the mrsync settings to the client Arguments: player [player] - the player that wants to open the admin GUI Returns: nothing ]] function MSync.modules.MRSync.getSettings() net.Start("msync.mrsync.getSettings") net.SendToServer() end --[[ Description: Net Receiver - Gets called when the client requests the settings table Returns: nothing ]] net.Receive("msync.mrsync.sendSettingsPly", function(len, ply) MSync.modules.MRSync.settings = net.ReadTable() end ) end --[[ Define ulx Commands and overwrite common ulx functions (module does not get loaded until ulx has fully been loaded) ]] function MSync.modules.MRSync.ulx() end --[[ Define hooks your module is listening on e.g. PlayerDisconnect ]] function MSync.modules.MRSync.hooks() end --[[ Return info ( Just for single module loading ) ]] return MSync.modules.MRSync.info No newline at end of file