Need help [me again]
#1

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;
}
Reply
#2

Код:
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;
}
Reply
#3

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;
}
Reply
#4

SetPlayerScore makes no sense if you let his function load "deaths" as score...
Reply
#5

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
Reply
#6

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:
Reply
#7

Yeah true shit.
Reply
#8

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....
Reply
#9

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)
Reply
#10

I change stuffs from user folder%user file.
Like this looks a file
[data]
Cash = 3000
Admin = 0
Kills = 0
Deaths = 0
pScores = 100
Reply
#11

You're not helping here Edii, post the whole thingy that's used to change these values.
Reply
#12

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.
Reply
#13

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]
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)