10.03.2012, 09:58
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:
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; }