[Help] Account saves when click Quit
#1

Script i use: my scrpit
Detailed problem description:
here i have login register script, but if i go on server and wish not to registrate...I click quit but it saves my account to scriptfiles/racuni.... if i try to enter with that account again it says that account exists but i can't login because i clicked quit and not specified password....i wish script do not creates a new file when clicking quit...how can I do it?
Script:
Код:
#include <a_samp>
#include <YSI\y_ini>
#include <YSI\y_commands>
#include <YSI\y_timers>
#include <foreach>
#include <sscanf2>

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

#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2

#define COLOR_WHITE "{FFFFFF}"
#define COLOR_RED "{F81414}"
#define COLOR_GREEN "{00FF22}"

enum USER_ENUM { Password[ 129 ], Score, Deaths, Money, Admin_Level }
new
    userData[ MAX_PLAYERS ][ USER_ENUM ];

stock user_account_path(playerid)
{
    new
        string_path[ 128 ],
        player_name[ MAX_PLAYER_NAME ];

    GetPlayerName( playerid, player_name, MAX_PLAYER_NAME );
    format( string_path, sizeof ( string_path ), "racuni/%s.ini", player_name);
    return
        string_path;
}

forward @load_user_statistics(playerid, name[], value[]);

@load_user_statistics(playerid, name[], value[])
{
    INI_String("Password", userData[ playerid ][ Password ], 129);
    INI_Int("Money", userData[ playerid ][ Money ]);
    INI_Int("AdminLevel", userData[ playerid ][ Admin_Level ]);
    INI_Int("Deaths", userData[ playerid ][ Deaths ]);
    INI_Int("Score", userData[ playerid ][ Score ]);
    return 1;
}

#if defined FILTERSCRIPT

public OnFilterScriptInit()
{
    print("\n--------------------------------------");
    print(" Blank Filterscript by your name here");
    print("--------------------------------------\n");

    Command_AddAltNamed("teleport", "tp");
    repeat UpdatePermissions();
    return 1;
}

public OnFilterScriptExit()
{
    return 1;
}

#else

main()
{
    print("\n----------------------------------");
    print("iStrow RolePlay ucitan!");
    print("----------------------------------\n");
}

#endif

public OnGameModeInit()
{
    // Don't use these lines if it's a filterscript
    SetGameModeText("iSRP 1.0");
    AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    return 1;
}

public OnGameModeExit()
{
    return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
    return 1;
}

public OnPlayerConnect(playerid)
{
    if( fexist ( user_account_path ( playerid ) ) )
    {
        INI_ParseFile(user_account_path ( playerid ), "load_user_%s", .bExtra = true, .extra = playerid);
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,"Welcome.Please log-in",""COLOR_WHITE"Type your "COLOR_GREEN"password "COLOR_WHITE"here to log-in", #Log-in, #Quit);
    }
    else
    {
        ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,"Please register!",""COLOR_WHITE"Type your "COLOR_GREEN"password "COLOR_WHITE"here to register.", #Register, #Quit);
    }
    userData[ playerid ][ Admin_Level ] = 0;
    userData[ playerid ][ Money ] = 0;
    userData[ playerid ][ Deaths ] = 0;
    userData[ playerid ][ Score ] = 0;
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    new INI:File = INI_Open( user_account_path ( playerid ) );
    INI_SetTag(File, "statistics" );
    INI_WriteInt(File, "Money", GetPlayerMoney( playerid ) );
    INI_WriteInt(File, "AdminLevel", userData[ playerid ][ Admin_Level ] );
    INI_WriteInt(File, "Deaths", userData[ playerid ][ Deaths ] );
    INI_WriteInt(File, "Score", GetPlayerScore( playerid ) );
    INI_Close(File);
    return 1;
}

public OnPlayerSpawn(playerid)
{
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    if( killerid != INVALID_PLAYER_ID ) SetPlayerScore( killerid, GetPlayerScore( killerid ) + 1 );

    userData[ playerid ][ Deaths ] ++;

    return 1;
}

public OnVehicleSpawn(vehicleid)
{
    return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
    return 1;
}

public OnPlayerText(playerid, text[])
{
    return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
    if (strcmp("/mycommand", cmdtext, true, 10) == 0)
    {
        // Do something here
        return 1;
    }
    return 0;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
    return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
    return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
    return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
    return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
    return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
    return 1;
}

public OnRconCommand(cmd[])
{
    return 1;
}

public OnPlayerRequestSpawn(playerid)
{
    return 1;
}

public OnObjectMoved(objectid)
{
    return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
    return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
    return 1;
}

public OnVehicleMod(playerid, vehicleid, componentid)
{
    return 1;
}

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
    return 1;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
    return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
    return 1;
}

public OnPlayerExitedMenu(playerid)
{
    return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
    return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    return 1;
}

public OnRconLoginAttempt(ip[], password[], success)
{
    return 1;
}

public OnPlayerUpdate(playerid)
{
    return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
    return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
    return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
    return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch( dialogid )
    {
        case DIALOG_REGISTER:
        {
            if (!response) return Kick( playerid );
            if ( response )
            {
                if( !strlen ( inputtext ) ) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COLOR_WHITE"Welcome.Please log-in","You have enteCOLOR_RED an "COLOR_RED"invalid"COLOR_WHITE" password\n"COLOR_WHITE"Type your "COLOR_GREEN"password "COLOR_WHITE"here to log-in", #Register, #Quit);

                new
                    hashed_password[ 129 ];
                WP_Hash( hashed_password, sizeof ( hashed_password ), inputtext );

                new INI:File = INI_Open( user_account_path( playerid ) );
                INI_SetTag(File, "statistics" );
                INI_WriteString(File, "Password", hashed_password );
                INI_WriteInt(File, "Money", 0 );
                INI_WriteInt(File, "AdminLevel", 0 );
                INI_WriteInt(File, "Deaths", 0 );
                INI_WriteInt(File, "Score", 0 );
                INI_Close(File);
                SetSpawnInfo( playerid, 0, 0, 1958.33, 1343.12, 15.36, 269.15, 0, 0, 0, 0, 0, 0 );
                SpawnPlayer( playerid );
            }
        }
        case DIALOG_LOGIN:
        {
            if ( !response ) return Kick ( playerid );
            if( response )
            {
                new
                    hashed_password[ 129 ];
                WP_Hash( hashed_password, sizeof ( hashed_password ), inputtext );

                if( !strcmp ( hashed_password, userData[ playerid ][ Password ] ) )
                {
                    INI_ParseFile(user_account_path ( playerid ), "load_user_%s", .bExtra = true, .extra = playerid);
                    GivePlayerMoney( playerid, userData[ playerid ][ Money ] );
                    SetPlayerScore( playerid, userData[ playerid ][ Score ] );
                }
                else
                {
                    ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COLOR_WHITE"Login",""COLOR_RED"You have entered an incorrect password.\n"COLOR_WHITE"Type your password below to login.","Login","Quit");
                }
                return 1;
            }
        }
    }
    return 1;
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
    return 1;
}

/*      OPTIONAL


public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
    if( !success )
    {
        format( cmdtext, 128, "ERROR: Command %s does not exist, type /commands for all available commands", cmdtext );
        SendClientMessage( playerid, -1, cmdtext );
    }
    return 1;
}


public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
    if( !success ) return false;
    return true;
}
*/

/* timers */

timer UpdatePermissions[1000]()
{
    foreach( Player, i )
    {
        if ( IsPlayerAdmin ( i ) )
        {
            Command_SetPlayerNamed("setadmin", i, true );
            Command_SetPlayerNamed("stats", i, false );
        }
        if ( userData[ i ][ Admin_Level ] == 2 )
        {
            Command_SetPlayerNamed("stats", i, true );
            Command_SetPlayerNamed("setadmin", i, false );
        }
        else
        {
            Command_SetPlayerNamed("setadmin", i, false );
            Command_SetPlayerNamed("stats", i, false );
        }
    }
}

/* stocks */

stock GetPlayerAdminLevel(playerid)
{
    new
        a_level_string[ 128 ];

    if ( userData[ playerid ][ Admin_Level ] == 1 )
        format( a_level_string, sizeof ( a_level_string ), "server uklonjen! Admin" );
    else if ( userData[ playerid ][ Admin_Level ] == 2 )
        format( a_level_string, sizeof ( a_level_string ), "Medium Admin" );
    else if ( userData[ playerid ][ Admin_Level ] == 3 )
        format( a_level_string, sizeof ( a_level_string ), "Head Admin" );
    else
        format( a_level_string, sizeof ( a_level_string ), "Unknown admin level!" );

    return a_level_string;
}

/* commands */

YCMD:help( playerid, params[], help )
{
    if ( help ) return SendClientMessage( playerid, -1, #Displays help about a command );
    if ( isnull ( params ) ) return SendClientMessage( playerid, -1, #Syntax: /help [command] );
    Command_ReProcess(playerid, params, true);
    return 1;
}

YCMD:teleport( playerid, params[], help )
{
    if ( help ) return SendClientMessage( playerid, -1, #This command teleports you somewhere! );
    return 1;
}

YCMD:commands(playerid, params[], help)
{
    if ( help ) return SendClientMessage(playerid, -1, #Lists all the commands a player can use! );
    new
        count = Command_GetPlayerCommandCount( playerid );
    for ( new i = 0; i != count; ++i) SendClientMessage( playerid, -1, Command_GetNext ( i, playerid ) );
    return 1;
}

YCMD:setadmin( playerid, params[], help )
{
    new
        TargetID, AdminLevel, PlayerName[ MAX_PLAYER_NAME ], TargetName[ MAX_PLAYER_NAME ], _message[ 128 ];

    if ( help ) return SendClientMessage( playerid, -1, #This command promotes someone to admin );
    if ( sscanf ( params, "ri", TargetID, AdminLevel ) ) return SendClientMessage( TargetID, -1, #Syntax /setadmin <playername/id> <level> );
    if ( TargetID == INVALID_PLAYER_ID ) return SendClientMessage( playerid, -1, #Player offline );

    GetPlayerName( playerid, PlayerName, sizeof ( PlayerName ) );
    GetPlayerName( TargetID, TargetName, sizeof ( TargetName ) );

    format( _message, sizeof ( _message ), "You have been promoted to admin level %d by %s", AdminLevel, PlayerName );
    SendClientMessage( TargetID, -1, _message );

    format( _message, sizeof ( _message ), "You have promoted %s to admin level %d", TargetName, AdminLevel );
    SendClientMessage( playerid, -1, _message );

    userData[ TargetID ][ Admin_Level ] = AdminLevel;

    return 1;
}

YCMD:stats( playerid, params[], help )
{
    if ( help ) return SendClientMessage( playerid, -1, #This command displays your current statistics );
    if ( isnull ( params ) )
    {
        new
            sString[ 128 ],
            a_level = userData[ playerid ][ Admin_Level ],
            money = userData[ playerid ][ Money ],
            score = userData[ playerid ][ Score ],
            deaths = userData[ playerid ][ Deaths ];

        format (  sString, sizeof ( sString ), "Your stats are: Admin Level: %d | Money: %d | Score: %d | Deaths: %d", a_level, money, score, deaths );
        SendClientMessage( playerid, -1, sString );
    }
    return 1;
}

YCMD:myadminlevel(playerid, params[], help)
{
    if ( help ) return SendClientMessage( playerid, -1, #This command displays your current admin level );
    if ( isnull ( params ) )
    {
        new
            sString[ 128 ];

        format( sString, sizeof ( sString ), "Your current admin level is: %s", GetPlayerAdminLevel(playerid) );
        SendClientMessage( playerid, -1, sString );
    }
    return 1;
}
Reply
#2

Just like OnPlayerConnect check if the file exists:
pawn Код:
if( fexist ( user_account_path ( playerid ) ) )
Then it should be saved
Reply
#3

you didn't understood me well, when i enter server with Name_Username...and CLICK QUIT it saves a file Name_Username.ini to scripitfiles/racuni, and I don't won't it to be saved when i click QUIT because someone other will not be able to registrate with that username if it's in folder and not working ofcourse because there is no password
Reply
#4

Yes I got that.
You need this:
pawn Код:
public OnPlayerDisconnect(playerid, reason)
{
    if( fexist( user_account_path ( playerid ) )) { // if the player is already registered, so there is already a user file
        new INI:File = INI_Open( user_account_path ( playerid ) );
        INI_SetTag(File, "statistics" );
        INI_WriteInt(File, "Money", GetPlayerMoney( playerid ) );
        INI_WriteInt(File, "AdminLevel", userData[ playerid ][ Admin_Level ] );
        INI_WriteInt(File, "Deaths", userData[ playerid ][ Deaths ] );
        INI_WriteInt(File, "Score", GetPlayerScore( playerid ) );
        INI_Close(File);
    }
    return 1;
}
Reply
#5

woha, WORKS! ty man
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)