Herzlich Willkommen zur Vorstellung meiner MySQL basierten Whitelist Klasse.
Diese Klasse sorgt, dass nur bestimme Spieler mit ihrer Serial auf den Server joinen können.
Die Daten werden in Echtzeit gespeichert, sodass keine Daten verloren gehen können.
Und noch vielen Dank an @Jusonex: für seine Hilfe.
Der Code
Die 'Whitelist' Klasse
Lua
Whitelist = {}Whitelist.__index = Whitelistfunction Whitelist:constructor( message, host, dbname, user, pass ) self.message = message self.serials = {} self.handle = new( MySQL, host, dbname, user, pass ) self.func = function( playerNick, playerIP, playerUsername, playerSerial ) self:serialCheck( playerSerial ) end self:initialize()endfunction Whitelist:destructor() delete( self.handle ) removeEventHandler( 'onPlayerConnect', root, self.func )endfunction Whitelist:initialize() local str = [[ CREATE TABLE IF NOT EXISTS `whitelist` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `NAME` varchar(32) NOT NULL, `SERIAL` varchar(32) NOT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; ]] self.handle:query( -1, str ) self:loadData() addEventHandler( 'onPlayerConnect', root, self.func )end-- //--|| SERIAL METHODEN-- \\function Whitelist:addSerial( serial, name ) if ( not self.serials[serial] ) then self.serials[serial] = name self.handle:query( -1, 'INSERT INTO `whitelist`( `SERIAL`, `NAME` ) VALUES(?, ?)', serial, name ) outputDebugString( serial..' added to this Whitelist!' ) else outputDebugString( serial..' is already in this Whitelist!' ) endendfunction Whitelist:removeSerial( serial ) if ( self.serials[serial] ) then self.serials[serial] = nil self.handle:query( -1, 'DELETE FROM `whitelist` WHERE SERIAL = ?', serial ) outputDebugString( serial..' was removed from this Whitelist!' ) else outputDebugString( serial..' is not in this Whitelist!' ) endendfunction Whitelist:serialCheck( playerSerial ) if ( not self.serials[playerSerial] ) then cancelEvent( true, self.message ) endend-- //--|| SAVE/LOAD METHODEN-- \\function Whitelist:loadData() local result = self.handle:query( -1, 'SELECT * FROM `whitelist`' ) if ( #result > 0 ) then for k, v in ipairs( result ) do self.serials[v['SERIAL']] = v['NAME'] end endend
Die 'MySQL' Klasse
Lua
MySQL = {}MySQL.__index = MySQLfunction MySQL:constructor( host, dbname, user, pass ) self.handler = dbConnect( 'mysql', ('host=%s;dbname=%s;unix_socket=/var/run/mysqld/mysqld.sock'):format( host, dbname ), user, pass, 'autoreconnect=1;log=1;tag=wl' ) if ( not self.handler ) then critical_error( 'Couldn\'t connect to the MySQL-Server!' ) endendfunction MySQL:destructor() return ( destroyElement( self.handler ) )endfunction MySQL:exec( query, ... ) return ( dbExec( self.handler, query, ... ) )endfunction MySQL:query( timeout, query, ... ) local qh = dbQuery( self.handler, query, ... ) return ( dbPoll( qh, timeout ) )end
Die 'Utils'
Lua
function new(class, ...) local obj = setmetatable( {}, { __index = class } ) if obj.constructor then obj:constructor( ... ) end return objendfunction delete(obj) if obj.destructor then obj:destructor( ) end obj = nilendfunction critical_error( reason ) outputServerLog( reason ) outputDebugString( reason, 1 ) stopResource( getThisResource() )end
Die Anwendung
Die Methoden
Download: http://bit.ly/1bCqxeX
MfG LarSoWiTsH von Codeart.