Newbie in need of help
#6

Quote:
Originally Posted by Dwane
Посмотреть сообщение
I started with a register system too and because I have tried so many until now, I chose SQLite, it is very easy and I can provide you my first registration system. If you want to use it, go ahead!
pawn Код:
#include < a_samp >

#define MAX_INI_ENTRY_TEXT      80
#define SERVER_DATABASE        "server.db"

#define DIALOG_REGISTER         2100
#define DIALOG_LOGIN            2150

#define COL_CYAN                "{96FFFF}"
#define COL_GREEN               "{00FF00}"
#define COL_RED                 "{FF0000}"
#define COL_SERVER_TIP          "{96FF96}"
#define COL_WHITE               "{FFFFFF}"
#define COL_YELLOW              "{FFFF00}"

native WP_Hash( buffer[ ], len, const str[ ] );

new
    DB:Database,
    Query[ 512 ],
    ip[ 16 ],
    hashed_password[ 129 ],
    DBResult:Result
;

main( ) { }

public OnGameModeInit( )
{
    Database = db_open( SERVER_DATABASE );
    db_free_result( db_query( Database, "CREATE TABLE IF NOT EXISTS `USERS` (`NAME`, `PASSWORD`, `IP`, `SCORE`)" ) );
    return 1;
}

public OnGameModeExit( )
{
    db_close( Database );
    return 1;
}

public OnPlayerConnect( playerid )
{
    format( Query, sizeof( Query ), "SELECT * FROM `USERS` WHERE `NAME` = '%s'", GetName( playerid ) );
    Result = db_query( Database, Query );
    if( db_num_rows( Result ) )
    {
        format( Query, sizeof( Query ), ""COL_WHITE"Hey, "COL_CYAN"%s"COL_WHITE"! \nYour account is registered.\nPlease enter the password to log in!", GetName( playerid ) );
        ShowPlayerDialog( playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, ""COL_YELLOW"Login", Query, "Login", "Leave" );
    }
    else
    {
        format( Query, sizeof( Query ), ""COL_WHITE"Hey, "COL_CYAN"%s"COL_WHITE"! \nYour account is not registered. \nPlease register to continue!", GetName( playerid ) );
        ShowPlayerDialog( playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, ""COL_YELLOW"Register", Query, "Register", "" );
    }
    return 1;
}

public OnPlayerDisconnect( playerid, reason )
{
    OnPlayerLogout( playerid );
    return 1;
}

public OnDialogResponse( playerid, dialogid, response, listitem, inputtext[ ] )
{
    switch( dialogid )
    {
        case DIALOG_REGISTER: if( response ) return OnPlayerRegister( playerid, inputtext );
        case DIALOG_LOGIN:
        {
            if( !response ) return Kick( playerid );
            if( response ) return OnPlayerLogin( playerid, inputtext );
        }
    }
    return 0;
}

OnPlayerRegister( playerid, password[ ] )
{
    if( !strlen( password ) )
    {
        SendClientMessage( playerid, -1, "You have entered an invalid password." );
        ShowPlayerDialog( playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, ""COL_YELLOW"Register", ""COL_WHITE"Your account is not registered. \nPlease register to continue!", "Register", "" );
        return 1;
    }

    GetPlayerIp( playerid, ip, sizeof( ip ) );
    WP_Hash( hashed_password, 129, password );

    format( Query, sizeof( Query ), "SELECT * FROM `USERS` WHERE `NAME` = '%s'", GetName( playerid ) );
    Result = db_query( Database, Query );

    if( !db_num_rows( Result ) )
    {
        format( Query, sizeof( Query ), "INSERT INTO `USERS` (`NAME`, `PASSWORD`, `IP`, `SCORE`) VALUES('%s','%s','%s','%d')", GetName( playerid ), DB_Escape( hashed_password ), DB_Escape( ip ), 0 );
        db_free_result( db_query( Database, Query ) );

        SendClientMessage( playerid, -1, "Successful Registration." );
    }
    return 1;
}

OnPlayerLogin( playerid, password[ ] )
{
    GetPlayerIp( playerid, ip, sizeof( ip ) );
    WP_Hash( hashed_password, 129, password );

    format( Query, sizeof( Query ), "SELECT * FROM `USERS` WHERE `NAME` = '%s' AND `PASSWORD` = '%s'", GetName( playerid ), DB_Escape( hashed_password ) );
    Result = db_query( Database, Query );
    if( db_num_rows( Result ) )
    {
        new
            Field[ 30 ]
        ;
        db_get_field_assoc( Result, "SCORE", Field, 30 );
        SetPlayerScore( playerid, strval( Field ) );

        SendClientMessage( playerid, -1, "Correct Password." );
    }
    else
    {
        SendClientMessage( playerid, -1, "Incorrect password." );
        ShowPlayerDialog( playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT, ""COL_YELLOW"Login", ""COL_WHITE"! \nYour account is registered.\nPlease enter the password to log in!", "Login", "Leave" );
        return 1;
    }
    return 1;
}

OnPlayerLogout( playerid )
{
    GetPlayerIp( playerid, ip, sizeof( ip ) );

    format( Query, sizeof( Query ), "SELECT * FROM `USERS` WHERE `NAME` = '%s'", GetName( playerid ) );
    Result = db_query( Database, Query );
    if( db_num_rows( Result ) )
    {
        format( Query, sizeof( Query ), "UPDATE `USERS` SET IP = '%s', SCORE = '%d' WHERE `NAME` = '%s'", DB_Escape( ip ), GetPlayerScore( playerid ), GetName( playerid ) );
        db_free_result( db_query( Database, Query ) );
    }
    return 1;
}

DB_Escape( text[ ] )
{
    new
        ret[ MAX_INI_ENTRY_TEXT * 2 ],
        ch,
        i,
        j
    ;
    while( ( ch = text[ i ++ ] ) && j < sizeof( ret ) )
    {
        if( ch == '\'' )
        {
            if( j < sizeof( ret ) - 2 )
            {
                ret[ j ++ ] = '\'';
                ret[ j ++ ] = '\'';
            }
        }
        else if( j < sizeof( ret ) ) ret[ j ++ ] = ch;
        else j ++;
    }
    ret[ sizeof( ret ) - 1 ] = '\0';
    return ret;
}

GetName( playerid )
{
    new
        pname[ MAX_PLAYER_NAME ]
    ;
    GetPlayerName( playerid, pname, sizeof( pname ) );
    return pname;
}
Wow thank you this was very nice of you! I will use this. However I would still like to know what im doing wrong so that I may fix it in the future.

EDIT: I just complied it and no errors. I will now run it on the server and let you know.
Reply


Messages In This Thread
Newbie in need of help - by zero4000 - 10.11.2012, 06:20
Re: Newbie in need of help - by Plovix - 10.11.2012, 06:50
Re: Newbie in need of help - by Mmartin - 10.11.2012, 08:20
Re: Newbie in need of help - by zero4000 - 10.11.2012, 10:41
Re: Newbie in need of help - by Konstantinos - 10.11.2012, 10:50
Re: Newbie in need of help - by zero4000 - 10.11.2012, 10:55
Re: Newbie in need of help - by Konstantinos - 10.11.2012, 10:57
Re: Newbie in need of help - by zero4000 - 10.11.2012, 11:15
Re: Newbie in need of help - by zero4000 - 10.11.2012, 12:39

Forum Jump:


Users browsing this thread: 1 Guest(s)