Unverified Commit 0e5d24ca authored by Maximilian Grüttemeier's avatar Maximilian Grüttemeier Committed by GitHub
Browse files

Merge pull request #1 from Aperture-Development/development

Update CHEESE_0.2.1
parents 59a895ad 68644d13
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -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` (
+28 −10
Original line number Diff line number Diff line
@@ -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 ) )
@@ -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

@@ -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
@@ -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

@@ -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;
@@ -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
@@ -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

+7 −4
Original line number Diff line number Diff line
@@ -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

--[[
@@ -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
+13 −1
Original line number Diff line number Diff line
@@ -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 )

--[[
@@ -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
+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