Need help [me again] -
Edii - 16.05.2012
SORRY FOR MY ENGLISH
Hello,is here somebody who can help me to make that script to save score too?I mean,when player press TAB,because what i have now saves the score in user file but not when a user press TAB (when i restart the gamemode the player loose his points from players scores [TAB key] but his score is still in user folder%file)
pawn Код:
#include <a_samp>
#include <YSI\y_ini>
#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2
#define DIALOG_SUCCESS_1 3
#define DIALOG_SUCCESS_2 4
#define PATH "/Users/%s.ini"
#define COL_WHITE "{FFFFFF}"
#define COL_RED "{F81414}"
#define COL_GREEN "{00FF22}"
#define COL_LIGHTBLUE "{00CED1}"
enum pInfo
{
pPass,
pCash,
pAdmin,
pKills,
pDeaths,
pScores
}
new PlayerInfo[MAX_PLAYERS][pInfo];
forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[])
{
INI_Int("Password",PlayerInfo[playerid][pPass]);
INI_Int("Cash",PlayerInfo[playerid][pCash]);
INI_Int("Admin",PlayerInfo[playerid][pAdmin]);
INI_Int("Kills",PlayerInfo[playerid][pKills]);
INI_Int("Deaths",PlayerInfo[playerid][pDeaths]);
INI_Int("pScores",PlayerInfo[playerid][pDeaths]);
return 1;
}
stock UserPath(playerid)
{
new string[128],playername[MAX_PLAYER_NAME];
GetPlayerName(playerid,playername,sizeof(playername));
format(string,sizeof(string),PATH,playername);
return string;
}
/*Credits to Dracoblue*/
stock udb_hash(buf[]) {
new length=strlen(buf);
new s1 = 1;
new s2 = 0;
new n;
for (n=0; n<length; n++)
{
s1 = (s1 + buf[n]) % 65521;
s2 = (s2 + s1) % 65521;
}
return (s2 << 16) + s1;
}
public OnGameModeInit()
{
return 1;
}
public OnGameModeExit()
{
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
return 1;
}
public OnPlayerConnect(playerid)
{
if(fexist(UserPath(playerid)))
{
INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_WHITE"Scrie parola pentru a te loga.","Login","Quit");
}
else
{
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,""COL_WHITE"Inregistrare.",""COL_WHITE"Scrie o parola pentru a te inregistra.","Register","Quit");
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
new INI:File = INI_Open(UserPath(playerid));
INI_SetTag(File,"data");
INI_WriteInt(File,"Cash",GetPlayerMoney(playerid));
INI_WriteInt(File,"Admin",PlayerInfo[playerid][pAdmin]);
INI_WriteInt(File,"Kills",PlayerInfo[playerid][pKills]);
INI_WriteInt(File,"Deaths",PlayerInfo[playerid][pDeaths]);
INI_WriteInt(File,"pScores",GetPlayerScore(playerid));
INI_Close(File);
return 1;
}
public OnPlayerSpawn(playerid)
{
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
PlayerInfo[killerid][pKills]++;
PlayerInfo[playerid][pDeaths]++;
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("/para", cmdtext, true, 10) == 0)
{
SetPlayerPos(playerid,387.0465,2522.4529,375.4442);
GivePlayerWeapon(playerid,46,1);
return 1;
}
if (strcmp("/heal", cmdtext, true, 10) == 0)
{
if(GetPlayerMoney(playerid) < 500) return SendClientMessage(playerid, 0xFFFFFFFF, "ERROR: Nu ai destui bani pentru a cumpara viata.");
SetPlayerHealth(playerid,100);
GivePlayerMoney(playerid,-500);
SendClientMessage(playerid,0x33AA33AA," [INFO]Ti-ai incarcat viata pentru 500$");
return 1;
}
if (strcmp("/cmds", cmdtext, true, 10) == 0)
{
SendClientMessage(playerid,0x33AA33AA,"-------------------------------------------------------------------------");
SendClientMessage(playerid,0xFFFFFFAA,"[COMENZI]/v -Meniu vehicule || /arme -Meniu arme(Costa $) || /para -Sari cu parasuta ");
SendClientMessage(playerid,0xFFFFFFAA,"[COMENZI]/armour -Cumperi armura(1000$) || /heal Iti umpli viata (500$) || /stunt -Zona StunT || /nrg -SUPER JUMP NRG");
SendClientMessage(playerid,0xFFFFFFAA,"[COMENZI]/jetpack -Folosesti Jetpack || /nj -Sari cu NRG || /aa -Te duci la spawn || /minigun -DM cu MiniGun");
SendClientMessage(playerid,0xFFFFFFAA,"[COMENZI]/race -Super RACE ||");
SendClientMessage(playerid,0x33AA33AA,"-------------------------------------------------------------------------");
return 1;
}
if (strcmp("/nj", cmdtext, true, 10) == 0)
{
SendPlayerMessageToAll(playerid," M-am dus la /nj -Sari cu NRG");
SetPlayerPos(playerid,-659.1250,2329.0410,138.6085);
return 1;
}
if (strcmp("/aa", cmdtext, true, 10) == 0)
{
SetPlayerPos(playerid,405.5293,2444.9414,16.5000);
return 1;
}
if (strcmp("/minigun", cmdtext, true, 10) == 0)
{
SendPlayerMessageToAll(playerid," M-am dus la /minigun -DM cu MiniGun");
SetPlayerPos(playerid,-1320.0061,2491.6899,87.0469);
GivePlayerWeapon(playerid,38,50000);
return 1;
}
if (strcmp("/jetpack", cmdtext, true, 10) == 0)
{
GivePlayerWeapon(playerid,21,1);
return 1;
}
if (strcmp("/stunt", cmdtext, true, 10) == 0)
{
SendPlayerMessageToAll(playerid," M-am dus la /stunt -Super STUNT");
SetPlayerPos(playerid,-2351.4375,-1634.3124,483.7031); // chiliada
return 1;
}
if (strcmp("/nrg", cmdtext, true, 10) == 0)
{
SendClientMessage(playerid,0x33AA33AA," [SFAT]Foloseste sageata pentru a putea sari.");
SendPlayerMessageToAll(playerid," M-am dus la /nrg -Super Jump cu NRG!!!");
SetPlayerPos(playerid,2870.4695,-2819.0728,66.4666); // nrg
return 1;
}
if (strcmp("/armour", cmdtext, true, 10) == 0)
{
if(GetPlayerMoney(playerid) < 500) return SendClientMessage(playerid, 0xFFFFFFFF, "ERROR: Nu ai destui bani pentru a cumpara armura.");
SendClientMessage(playerid,0x33AA33AA," [INFO]Ai cumparat armura pentru 1000$.");
SetPlayerArmour(playerid,100);
GivePlayerMoney(playerid,-1000);
return 1;
}
if (strcmp("/race", cmdtext, true, 10) == 0)
{
SendClientMessage(playerid,0x33AA33AA," [INFO]Scrie /start pentru a incepe numaratoare inversa si pt. a face cursa cu cineva!");
SendPlayerMessageToAll(playerid," M-am dus la /race -Super RACE!!!");
SetPlayerPos(playerid,3130.3564,-2402.4946,9.7465);
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_REGISTER, DIALOG_STYLE_INPUT, ""COL_WHITE"Inregistrare.",""COL_RED"Ai scris o parola invalida.\n"COL_WHITE"Introdu o parola pentru a te inregistra.","Register","Quit");
new INI:File = INI_Open(UserPath(playerid));
INI_SetTag(File,"data");
INI_WriteInt(File,"Password",udb_hash(inputtext));
INI_WriteInt(File,"Cash",10000);
INI_WriteInt(File,"Admin",0);
INI_WriteInt(File,"Kills",0);
INI_WriteInt(File,"Deaths",0);
INI_WriteInt(File,"Scores",0);
INI_Close(File);
GivePlayerMoney(playerid,10000);
SetSpawnInfo(playerid, 0, 0, 1958.33, 1343.12, 15.36, 269.15, 0, 0, 0, 0, 0, 0);
SpawnPlayer(playerid);
ShowPlayerDialog(playerid, DIALOG_SUCCESS_1, DIALOG_STYLE_MSGBOX,""COL_WHITE"Success!",""COL_GREEN"Felicitari,te-ai inregistrat.","Ok","");
}
}
case DIALOG_LOGIN:
{
if ( !response ) return Kick ( playerid );
if( response )
{
if(udb_hash(inputtext) == PlayerInfo[playerid][pPass])
{
INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
GivePlayerMoney(playerid, PlayerInfo[playerid][pCash]);
SetPlayerScore(playerid, PlayerInfo[playerid][pScores]);
ShowPlayerDialog(playerid, DIALOG_SUCCESS_2, DIALOG_STYLE_MSGBOX,""COL_WHITE"Success!",""COL_GREEN"Te-ai logat!","Ok","");
}
else
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_RED"Ai introdus o parola incorecta.\n"COL_WHITE"Introdu parola pentru a te inregistra.","Login","Quit");
}
return 1;
}
}
}
return 1;
}
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
return 1;
}
AW: Need help [me again] -
EthanR - 16.05.2012
Код:
forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[])
{
INI_Int("Password",PlayerInfo[playerid][pPass]);
INI_Int("Cash",PlayerInfo[playerid][pCash]);
INI_Int("Admin",PlayerInfo[playerid][pAdmin]);
INI_Int("Kills",PlayerInfo[playerid][pKills]);
INI_Int("Deaths",PlayerInfo[playerid][pDeaths]);
INI_Int("pScores",PlayerInfo[playerid][pDeaths]);
return 1;
}
looks wrong to me, should be:
Код:
forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[])
{
INI_Int("Password",PlayerInfo[playerid][pPass]);
INI_Int("Cash",PlayerInfo[playerid][pCash]);
INI_Int("Admin",PlayerInfo[playerid][pAdmin]);
INI_Int("Kills",PlayerInfo[playerid][pKills]);
INI_Int("Deaths",PlayerInfo[playerid][pDeaths]);
INI_Int("pScores",PlayerInfo[playerid][pScores]);
SetPlayerScore(playerid, PlayerInfo[playerid][pScores]);
return 1;
}
Re: Need help [me again] -
Ballu Miaa - 16.05.2012
Add this Under public OnPlayerSpawn(playerid) callback.
pawn Код:
SetPlayerScore(playerid, PlayerInfo[playerid][pScores]);
And this will be the same as :
pawn Код:
forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[])
{
INI_Int("Password",PlayerInfo[playerid][pPass]);
INI_Int("Cash",PlayerInfo[playerid][pCash]);
INI_Int("Admin",PlayerInfo[playerid][pAdmin]);
INI_Int("Kills",PlayerInfo[playerid][pKills]);
INI_Int("Deaths",PlayerInfo[playerid][pDeaths]);
INI_Int("pScores",PlayerInfo[playerid][pDeaths]);
return 1;
}
AW: Need help [me again] -
EthanR - 16.05.2012
SetPlayerScore makes no sense if you let his function load "deaths" as score...
Re: Need help [me again] -
Edii - 16.05.2012
Doesn't works,i think it's from script,i can change player moneys,score in user file because in game they do notghing (if you understand what i mean) and then they are changing back to 0
AW: Need help [me again] -
EthanR - 16.05.2012
You have to LOAD the score before you can set it. In your script you write Score "0" on registering, but then you try to load "DEATHS" in the login part.
Код:
forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[])
{
INI_Int("Password",PlayerInfo[playerid][pPass]);
INI_Int("Cash",PlayerInfo[playerid][pCash]);
INI_Int("Admin",PlayerInfo[playerid][pAdmin]);
INI_Int("Kills",PlayerInfo[playerid][pKills]);
INI_Int("Deaths",PlayerInfo[playerid][pDeaths]);
INI_Int("pScores",PlayerInfo[playerid][pDeaths]);
return 1;
}
^ is wrong. Why deaths? Your file has "score=0" in it so you want to get score, not deaths.
Код:
forward LoadUser_data(playerid,name[],value[]);
public LoadUser_data(playerid,name[],value[])
{
INI_Int("Password",PlayerInfo[playerid][pPass]);
INI_Int("Cash",PlayerInfo[playerid][pCash]);
INI_Int("Admin",PlayerInfo[playerid][pAdmin]);
INI_Int("Kills",PlayerInfo[playerid][pKills]);
INI_Int("Deaths",PlayerInfo[playerid][pDeaths]);
INI_Int("pScores",PlayerInfo[playerid][pScores]);
return 1;
}
And then OnPlayerSpawn or so, you SetPlayerScore(playerid, PlayerInfo[playerid][pScores]); so it appears in the TAB list. Do it AFTER your LoadUser comes.
EDIT: If you want the user to have another level than 0, change it in the Registering code:
Re: Need help [me again] -
Ballu Miaa - 16.05.2012
Yeah true shit.
Re: Need help [me again] -
Edii - 16.05.2012
Ok,thank you very much,that thing with score works,but now i have another problem that i have it from start.I can change players cash,deaths,kills but them wont change in game and then they will change again to 0....
AW: Need help [me again] -
EthanR - 16.05.2012
Post the commands with which you change the stuff, so we can help.
We need to see it to fix it. (I don't see any command that sets Score or Death etc btw)
Re: Need help [me again] -
Edii - 16.05.2012
I change stuffs from user folder%user file.
Like this looks a file
[data]
Cash = 3000
Admin = 0
Kills = 0
Deaths = 0
pScores = 100
Re: Need help [me again] -
iRage - 16.05.2012
You're not helping here Edii, post the whole thingy that's used to change these values.
AW: Need help [me again] -
EthanR - 16.05.2012
Since you use y_ini you have to Kick people before you upload your charfiles. Else OnPlayerDisconnect will save the script values that you loaded and your upload will have no effect.
What you can do is upload a file on your FTP userfolder, and then call OnPlayerConnect with a command, so the new charfile will load without saving the old userfiles. (or kick the players before you upload)
if you don't wanna kick them before uploading, call OnPlayerConnect on the player after you uploaded.
Re: Need help [me again] -
Edii - 16.05.2012
I change those things after i start the gamemode (it's in my PC,the server is in testing)
And when a player earn money in game,he can exit an login again and he's moneys/kills/deaths will be 0 [but score remain,with the things i did with EthanR's help]