Szerző Téma: Összekeveri a dolgokat :(  (Megtekintve 574 alkalommal)

Összekeveri a dolgokat :(
« Dátum: 2013. július 18. - 09:00:32 »
0 Show voters
Üdv!  :Cry2:
Számolni se akarom mennyi témát írtam ehhez a problémához!
Mindent szépen lement kivéve az \'ExpLevelt\' összekeveri a sima EXP-vel
Szóval mikor megszerzem az EXP uppolom a szintet figyeltem is a .init még játszottam minden rendben de mikor Disconnectelek akkor bezavarodik az Level ugyanaz lesz mint az EXP és úgy is tölti be.. Mi az oka?
 
    #include <a_samp>
    #include <dudb>
    #include <progress>
     
    new Text:ExpText[MAX_PLAYERS];
    new Text:LevelText[MAX_PLAYERS];
    new Text:Textdraw0;
    new Bar:bar[MAX_PLAYERS];
    new Text3D:LevelLabel[MAX_PLAYERS];
    new pfile[100];
     
    //You can change these values.
    #define ExpForLevel 1000 //How much exp you need to pass a level. The Exp gets multiplied by the level. If you\'ve got 1000 total exp then for lvl 2 it will be 2000
    #define MaxLevel 99 //The maximum level a player can achieve.
    #define UseProgBar // Define wheater to use íthe progress bar or not. Comment the line if you don\'t want a progress bar and leave like that if you do want a progress bar.
    #define ProgBarColor 0x0000FFFF //The experience bar\'s color.
    #define TextLabelColor 0x00FFFFFF // The textlabel\'s color.
    #define CashForLevelUp 300 //This is the cash you get for levelling up. It gets multiplied by the level you achieved and one more time by a number you define.
    #define CashMultiplier 1 //This multiplies the Cash * Level achieved by the number you want.
    #define GameTextStyle 4 //This defines the GameText\'s style used for the GivePlayerExp function.
    #define GameTextTime 3000 //This defines the time for which the GameText for the GivePlayerExp function will be visible
    #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, \"\")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
     
    #pragma unused strtok
    #pragma unused ret_memcpy
     
    //Declaring New
    //new nev[MAX_PLAYER_NAME];
     
     
    //The function which gives exp. Usage: GivePlayerExp(playerid, ammount, reason);
    stock GivePlayerExp(playerid, exp, reason[])
    {
        new string2[126], string3[126], string4[126];
        format(pfile, sizeof(pfile), \"Szerver/%s.ini\",pName(playerid));
        dini_IntSet(pfile, \"Exp\", dini_Int(pfile, \"Exp\") +exp);
        if (dini_Int(pfile, \"Exp\") >= dini_Int(pfile, \"TotalExp\"))
        {
            if (dini_Int(pfile, \"ExpLevel\") < MaxLevel)
            {
                while (dini_Int(pfile, \"Exp\") >= dini_Int(pfile, \"TotalExp\"))
                {
                    dini_IntSet(pfile, \"Exp\", dini_Int(pfile, \"Exp\") - dini_Int(pfile, \"TotalExp\"));
                    dini_IntSet(pfile, \"ExpLevel\", dini_Int(pfile, \"ExpLevel\") + 1);
                    dini_IntSet(pfile, \"TotalExp\", dini_Int(pfile, \"ExpLevel\") * ExpForLevel);
                    format(string3, sizeof(string3), \"Level: %02d\",dini_Int(pfile, \"ExpLevel\"));
                    TextDrawSetString(LevelText[playerid], string3);
                    GivePlayerMoney(playerid, CashForLevelUp * dini_Int(pfile, \"ExpLevel\") * CashMultiplier);
                    format(string4, sizeof(string4), \"~p~You got %d Exp for ~n~%s !~n~~g~Level up!\", exp, reason);
                }
            }
            else
            {
                    GameTextForPlayer(playerid, \"~g~Max Level Reached!\", GameTextTime, GameTextStyle);
                dini_IntSet(pfile, \"Exp\", dini_Int(pfile, \"TotalExp\"));
                    }
        }
        else
        {
                format(string4, sizeof(string4), \"~p~You got %d Exp for ~n~%s !\", exp, reason);
        }
        format(string2, sizeof(string2), \"Exp: %05d/%05d\",dini_Int(pfile, \"Exp\"), dini_Int(pfile, \"TotalExp\"));
        TextDrawSetString(ExpText[playerid], string2);
        #if defined UseProgBar
       SetProgressBarValue(bar[playerid], dini_Int(pfile, \"Exp\"));
        SetProgressBarMaxValue(bar[playerid], dini_Int(pfile, \"TotalExp\"));
        UpdateProgressBar(bar[playerid], playerid);
        #endif
       GameTextForPlayer(playerid, string4, GameTextTime, GameTextStyle);
        format(string3, sizeof(string3), \"Level: %02d\",dini_Int(pfile, \"ExpLevel\"));
        Update3DTextLabelText(LevelLabel[playerid], TextLabelColor, string3);
    }
     
    //The function to get a player\'s level. Usage: GetPlayerLevel(playerid)
    stock GetPlayerExpLevel(playerid)
    {
        new Plevel;
        format(pfile, sizeof(pfile), \"Szerver/%s.ini\",pName(playerid));
        Plevel = dini_Int(pfile, \"ExpLevel\");
        return Plevel;
    }
     
    //The function to get a player\'s experience. Usage: GetPlayerExp(playerid)
    stock GetPlayerExp(playerid)
    {
        new PExp;
        format(pfile, sizeof(pfile), \"Szerver/%s.ini\",pName(playerid));
        PExp = dini_Int(pfile, \"Exp\");
        return PExp;
    }
     
    //The function to get a player\'s experience needed to lvl up. Usage: GetPlayerTotalExp(playerid)
    stock GetPlayerTotalExp(playerid)
    {
        new PTotalExp;
        format(pfile, sizeof(pfile), \"Szerver/%s.ini\",pName(playerid));
        PTotalExp = dini_Int(pfile, \"TotalExp\");
        return PTotalExp;
    }
     
     
     
    public OnPlayerConnect(playerid)
    {
        new string2[126], string3[126];
     
        format(pfile, sizeof(pfile), \"Szerver/%s.ini\",pName(playerid));
        if(dini_Exists(pfile)) // ha létezik..
        {
            format(string2, sizeof(string2), \"Exp: %05d/%05d\",GetPlayerExp(playerid), GetPlayerTotalExp(playerid));
                TextDrawSetString(ExpText[playerid], string2);
                format(string3, sizeof(string3), \"Level: %02d\",GetPlayerExpLevel(playerid));
                TextDrawSetString(LevelText[playerid], string3);
                SetPlayerMoney(playerid, dini_Int(pfile, \"Cash\"));
                    SetPlayerScore(playerid, dini_Int(pfile, \"Score\"));
        }
        else // ha nem..
        {
            dini_Create(pfile); // akkor csinálja meg
            dini_IntSet(pfile, \"ExpLevel\", 1);
                dini_IntSet(pfile, \"Exp\", 0);
                dini_IntSet(pfile, \"TotalExp\", ExpForLevel);
        }
        format(string2, sizeof(string2), \"Exp: %05d/%05d\",GetPlayerExp(playerid), GetPlayerTotalExp(playerid));
        TextDrawSetString(ExpText[playerid], string2);
        format(string3, sizeof(string3), \"Level: %02d\",GetPlayerExpLevel(playerid));
        TextDrawSetString(LevelText[playerid], string3);
     
        return 1;
    }
     
    public OnPlayerDisconnect(playerid, reason)
    {
            TextDrawHideForAll(Textdraw0);
        TextDrawDestroy(Textdraw0);
        TextDrawDestroy(ExpText[playerid]);
        TextDrawDestroy(ExpText[playerid]);
        format(pfile, sizeof(pfile), \"Szerver/%s.ini\",pName(playerid));
        dini_IntSet(pfile, \"Cash\", GetPlayerMoney(playerid));
        dini_IntSet(pfile, \"Score\", GetPlayerScore(playerid));
        dini_IntSet(pfile, \"ExpLevel\", GetPlayerExp(playerid)); // level elmentése
        dini_IntSet(pfile, \"Exp\", GetPlayerExpLevel(playerid)); // exp elmentése
        dini_IntSet(pfile, \"TotalExp\", GetPlayerTotalExp(playerid)); // totalexp elmentése
     
        return 1;
    }
     
    public OnPlayerSpawn(playerid)
    {
        TextDrawShowForPlayer(playerid, Textdraw0);
        TextDrawShowForPlayer(playerid, ExpText[playerid]);
        TextDrawShowForPlayer(playerid, LevelText[playerid]);
        return 1;
    }
     
     
    public OnPlayerDeath(playerid, killerid, reason)
    {
        if (killerid != playerid)
            {
            if (GetPlayerExpLevel(playerid) < GetPlayerExpLevel(killerid))
            {
                GivePlayerExp(killerid, 100, \"killing a lower level player\");
            }
            else if (GetPlayerExpLevel(playerid) > GetPlayerExpLevel(killerid))
            {
                GivePlayerExp(killerid, 300, \"killing a higher level player\");
            }
            else
            {
                GivePlayerExp(killerid, 200, \"killing a player at your own level\");
            }
        } // An example of using my exp system.
        return 1;
    }
     
    dcmd_addexp(playerid,params[])
    {
            #pragma unused params
            GivePlayerExp(playerid, 500, \"addexp parancs hasznalata\");
            return 1;
    }
     
    public OnPlayerCommandText(playerid, cmdtext[])
    {
            dcmd(addexp,6,cmdtext);
            return 0;
    }
     
    new pname[24];
    pName(playerid)
    {
            GetPlayerName(playerid, pname, sizeof(pname));
            return pname;
    }

Összekeveri a dolgokat :(
« Válasz #1 Dátum: 2013. július 18. - 10:16:03 »
+1 Show voters
Idézetet írta: ninjo98 date=1374130832\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"39972\" data-ipsquote-contentclass=\"forums_Topic
Üdv!  :Cry2:
Számolni se akarom mennyi témát írtam ehhez a problémához!
Mindent szépen lement kivéve az \'ExpLevelt\' összekeveri a sima EXP-vel
Szóval mikor megszerzem az EXP uppolom a szintet figyeltem is a .init még játszottam minden rendben de mikor Disconnectelek akkor bezavarodik az Level ugyanaz lesz mint az EXP és úgy is tölti be.. Mi az oka?
     
 
    public OnPlayerDisconnect(playerid, reason)
    {
        dini_IntSet(pfile, \"ExpLevel\", GetPlayerExp(playerid)); // level elmentése
        dini_IntSet(pfile, \"Exp\", GetPlayerExpLevel(playerid)); // exp elmentése
   
        return 1;
    }

[/quote]
Nem biztos hogy ez a hiba én csak az elnevezéseket olvasgattam.
Jha meg felejtsd el a dini-t, meg írj saját magad egy szkriptet, ne mások hibáit keresgéld, csak szenvedsz vele.
És még az benne a kurva jó hogy a fájlban lévõ adatokkal kínlódsz onnan olvasod be mennyi van azt olvasod be mikor növeled, miért nem hozol létre változókat ezeknek az exp pontoknak és változtatod értéküket pawn kódban, és csak akkor foglalkozol adatmentéssel meg beolvasással mikor egy játékos csatlakozik illetve kilép?

Összekeveri a dolgokat :(
« Válasz #2 Dátum: 2013. július 18. - 13:31:36 »
+1 Show voters
az elõzõ témánál elnéztem bocsi, megcseréltem a kettõt
ez lett volna jó
 
dini_IntSet(pfile, \"ExpLevel\", GetPlayerExpLevel(playerid)); // level elmentése
dini_IntSet(pfile, \"Exp\", GetPlayerExp(playerid)); // exp elmentése

 
de tényleg használj változókat mint ahogy ɐʞzssǝlosz írta..
felülre:
 
enum PlayerInfo {
pLevel, //ExpLevel
pExp,
pTotalExp,
pCash,
pScore
};
new pInfo[MAX_PLAYERS][PlayerInfo];

 

public OnPlayerConnect(playerid)
{
    new string2[126], string3[126];
    format(pfile, sizeof(pfile), \"Szerver/%s.ini\",pName(playerid));
    if(dini_Exists(pfile)) // ha létezik..
    {
        pInfo[playerid][pLevel] = dini_Int(pfile, \"ExpLevel\"); // Level lekérés
        pInfo[playerid][pExp] = dini_Int(pfile, \"Exp\"); // Exp lekérés
        pInfo[playerid][pTotalExp] = dini_Int(pfile, \"TotalExp\"); // TotalExp lekérés
        pInfo[playerid][pCash] = dini_Int(pfile, \"Cash\"); // pénz lekérés
        pInfo[playerid][pScore] = dini_Int(pfile, \"Score\"); // pont lekérés
        format(string2, sizeof(string2), \"Exp: %05d/%05d\",pInfo[playerid][pExp], pInfo[playerid][pTotalExp]);
    TextDrawSetString(ExpText[playerid], string2);
    format(string3, sizeof(string3), \"Level: %02d\",pInfo[playerid][pLevel]);
    TextDrawSetString(LevelText[playerid], string3);
    SetPlayerMoney(playerid, pInfo[playerid][pCash]); // beállítja a pénzt arra ami volt dinibe
SetPlayerScore(playerid, pInfo[playerid][pScore]); // beállítja a pontot arra ami volt dinibe
    }
    else // ha nem..
    {
       dini_Create(pfile); // akkor csinálja meg
       dini_IntSet(pfile, \"ExpLevel\", 1);
    dini_IntSet(pfile, \"Exp\", 0);
    dini_IntSet(pfile, \"TotalExp\", ExpForLevel);
pInfo[playerid][pLevel] = 0;
pInfo[playerid][pExp] = 0;
pInfo[playerid][pTotalExp] = ExpForLevel;
    }
    format(string2, sizeof(string2), \"Exp: %05d/%05d\",pInfo[playerid][pExp], pInfo[playerid][pTotalExp]);
    TextDrawSetString(ExpText[playerid], string2);
    format(string3, sizeof(string3), \"Level: %02d\",pInfo[playerid][pLevel]);
    TextDrawSetString(LevelText[playerid], string3);
    return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
TextDrawHideForAll(Textdraw0);
    TextDrawDestroy(Textdraw0);
    TextDrawDestroy(ExpText[playerid]);
    TextDrawDestroy(ExpText[playerid]);
    format(pfile, sizeof(pfile), \"Szerver/%s.ini\",pName(playerid));
    dini_IntSet(pfile, \"Cash\", GetPlayerMoney(playerid)); // pénz elmentése
    dini_IntSet(pfile, \"Score\", GetPlayerScore(playerid)); // pont elmentése
    dini_IntSet(pfile, \"ExpLevel\", pInfo[playerid][pLevel]); // level elmentése
    dini_IntSet(pfile, \"Exp\", pInfo[playerid][pExp]); // exp elmentése
    dini_IntSet(pfile, \"TotalExp\", pInfo[playerid][pTotalExp]); // totalexp elmentése
    return 1;
}

 
A többi diniset is majd cseréld át, szerintem érteni fogod :)
« Utoljára szerkesztve: 2013. július 18. - 13:36:50 írta anorennia »

Összekeveri a dolgokat :(
« Válasz #3 Dátum: 2013. július 18. - 14:09:51 »
0 Show voters
Idézetet írta: ɐʞzssǝlosz date=1374135363\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"39972\" data-ipsquote-contentclass=\"forums_Topic


Üdv!  :Cry2:
Számolni se akarom mennyi témát írtam ehhez a problémához!
Mindent szépen lement kivéve az \'ExpLevelt\' összekeveri a sima EXP-vel
Szóval mikor megszerzem az EXP uppolom a szintet figyeltem is a .init még játszottam minden rendben de mikor Disconnectelek akkor bezavarodik az Level ugyanaz lesz mint az EXP és úgy is tölti be.. Mi az oka?
     
 
    public OnPlayerDisconnect(playerid, reason)
    {
        dini_IntSet(pfile, \"ExpLevel\", GetPlayerExp(playerid)); // level elmentése
        dini_IntSet(pfile, \"Exp\", GetPlayerExpLevel(playerid)); // exp elmentése
   
        return 1;
    }

[/quote]
Nem biztos hogy ez a hiba én csak az elnevezéseket olvasgattam.
Jha meg felejtsd el a dini-t, meg írj saját magad egy szkriptet, ne mások hibáit keresgéld, csak szenvedsz vele.
És még az benne a k*rv* jó hogy a fájlban lévõ adatokkal kínlódsz onnan olvasod be mennyi van azt olvasod be mikor növeled, miért nem hozol létre változókat ezeknek az exp pontoknak és változtatod értéküket pawn kódban, és csak akkor foglalkozol adatmentéssel meg beolvasással mikor egy játékos csatlakozik illetve kilép?
 
[/quote]
Igazából ezt mintának töltöttem le én is próbálok hasonlót írni de még most kezdem megismerni a dinit :)

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal