Jump to content

Salvare bani si level


IosifR

Recommended Posts

Acum 2 ore, Banditul a spus:

Daca arati ce cod ai facut, poate intelegem si noi ce ai facut gresit si ce trebuie reparat

E fix codul care l-a facut WiDuAIK, doar ca eu am editat putin textele.. Si cand incerc sa fac sa salveze bani si lvlul imi da o gramada de erori..  

(Am incercat sa-l fac singur, sa mai ma uit in alte gmuri.. pentru ca nu am gasit nik pe net) 

Si.... uite ca am apelat la sa-mp.ro :)

Edited by IosifR
Link to comment
Share on other sites

PS: Doar ce am recitit topicul si te intrebi cum ai putea adauga un astfel de sistem.

Daca te referi la acest tutorial

Din pacate in topic nu specifica nimic despre bani/level care din codul prezent in topic nu ar avea cum sa fie salvate mai ales ca nici schema bazei de date nu contine aceste date.

Desigur totusi ne poti arata ce ai incercat sa faci si ce erori primesti ca sa iti putem indica problemele si ce poti repara dar iti ofer un mic cod eventual care sper ca te poate ajuta. Va fi nevoie sa adaugi tu in baza date cum ti-a fost explicat si in tutorial coloana pentru bani si level

enum pInfo
{
    pParola, 
    pID, 

    Money, // Adaugi acestea la pInfo
    Level // Evident le redenumesti cum doresti
};
new P_Data[MAX_PLAYERS][pInfo];

GiveMoneyToPlayer(playerid, money)
{   
    P_Data[playerid][Money] += money;
    mysql_format(handle, query, sizeof(query), "UPDATE conturi SET `Money` = %i WHERE ID = %i", P_Data[playerid][Money], P_Data[playerid][pID]);
    mysql_tquery(handle, query);

    ResetPlayerMoney(playerid);
    GivePlayerMoney(playerid, P_Data[playerid][Money]);
}

GivePlayerLevel(playerid, level)
{
    P_Data[playerid][Level] += level;
    mysql_format(handle, query, sizeof(query), "UPDATE conturi SET `Level` = %i WHERE ID = %i", P_Data[playerid][Level], P_Data[playerid][pID]);
    mysql_tquery(handle, query);

    SetPlayerScore(playerid, P_Data[playerid][Level]) // Presupun ca level se reflecta in tabelul de score
}

forward OnLogin(playerid);
public OnLogin(playerid)
{
    new rows, fields,temporar[200];
    cache_get_data(rows, fields);
    if(rows)
    {
        cache_get_field_content(0, "Parola",temporar), format(P_Data[playerid][pParola], 25, temporar);
        P_Data[playerid][pID] = cache_get_field_content_int(0, "ID");
        P_Data[playerid][Money] = cache_get_field_content_int(0, "Money");
        ResetPlayerMoney(playerid);
        GivePlayerMoney(playerid, P_Data[playerid][Money]); 
        // Ii resetam bani si ii oferim ce ar in baza de date astfel incat bani pe care ii vede in joc sa fie aceiasi

        P_Data[playerid][Level] = cache_get_field_content_int(0, "Level");
        SetPlayerScore(playerid, P_Data[playerid][Level])

        SpawnPlayer(playerid);
    }
    else
    {
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Parola incorecta!", "Te rog sa iti introduci parola corecta, pentru a te loga pe server.", "Logare", "Exit");// ii va da dialogul cu mesajul specific.
    }
    return 1;
}

Poti folosi aceste 2 functii pe care ti le-am dat pentru a oferi jucatorului bani/level acolo unde ai nevoie. Astfel incat sa nu fi nevoit sa tot copiezi acelasi cod peste tot, doar chemi functia.

Link to comment
Share on other sites

Acum 27 minute, Banditul a spus:

PS: Doar ce am recitit topicul si te intrebi cum ai putea adauga un astfel de sistem.

Daca te referi la acest tutorial

Din pacate in topic nu specifica nimic despre bani/level care din codul prezent in topic nu ar avea cum sa fie salvate mai ales ca nici schema bazei de date nu contine aceste date.

Desigur totusi ne poti arata ce ai incercat sa faci si ce erori primesti ca sa iti putem indica problemele si ce poti repara dar iti ofer un mic cod eventual care sper ca te poate ajuta. Va fi nevoie sa adaugi tu in baza date cum ti-a fost explicat si in tutorial coloana pentru bani si level


enum pInfo
{
    pParola, 
    pID, 

    Money, // Adaugi acestea la pInfo
    Level // Evident le redenumesti cum doresti
};
new P_Data[MAX_PLAYERS][pInfo];

GiveMoneyToPlayer(playerid, money)
{   
    P_Data[playerid][Money] += money;
    mysql_format(handle, query, sizeof(query), "UPDATE conturi SET `Money` = %i WHERE ID = %i", P_Data[playerid][Money], P_Data[playerid][pID]);
    mysql_tquery(handle, query);

    ResetPlayerMoney(playerid);
    GivePlayerMoney(playerid, P_Data[playerid][Money]);
}

GivePlayerLevel(playerid, level)
{
    P_Data[playerid][Level] += level;
    mysql_format(handle, query, sizeof(query), "UPDATE conturi SET `Level` = %i WHERE ID = %i", P_Data[playerid][Level], P_Data[playerid][pID]);
    mysql_tquery(handle, query);

    SetPlayerScore(playerid, P_Data[playerid][Level]) // Presupun ca level se reflecta in tabelul de score
}

forward OnLogin(playerid);
public OnLogin(playerid)
{
    new rows, fields,temporar[200];
    cache_get_data(rows, fields);
    if(rows)
    {
        cache_get_field_content(0, "Parola",temporar), format(P_Data[playerid][pParola], 25, temporar);
        P_Data[playerid][pID] = cache_get_field_content_int(0, "ID");
        P_Data[playerid][Money] = cache_get_field_content_int(0, "Money");
        ResetPlayerMoney(playerid);
        GivePlayerMoney(playerid, P_Data[playerid][Money]); 
        // Ii resetam bani si ii oferim ce ar in baza de date astfel incat bani pe care ii vede in joc sa fie aceiasi

        P_Data[playerid][Level] = cache_get_field_content_int(0, "Level");
        SetPlayerScore(playerid, P_Data[playerid][Level])

        SpawnPlayer(playerid);
    }
    else
    {
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Parola incorecta!", "Te rog sa iti introduci parola corecta, pentru a te loga pe server.", "Logare", "Exit");// ii va da dialogul cu mesajul specific.
    }
    return 1;
}

Poti folosi aceste 2 functii pe care ti le-am dat pentru a oferi jucatorului bani/level acolo unde ai nevoie. Astfel incat sa nu fi nevoit sa tot copiezi acelasi cod peste tot, doar chemi functia.

Ms foarte multt. 

Fix la astea greseam: mysql_format(handle, query, sizeof(query), "UPDATE conturi SET `Money` = %i WHERE ID = %i", P_Data[playerid][Money], P_Data[playerid][pID]);

in loc sa pun mysql_format am pus mysql_Query 

Si nu puneam handle

Am sa incerc sa-l fac daca nu merge ceva bine am sa dau un edit... probabil maine

 

Link to comment
Share on other sites

Salut, a mers ce mi-ai dat tu acolo. Dar... 
Am facut comanda buylevel dar cand dau buylevel nu imi updateaza nivelul, in baza de date si nici in joc. Dar, banii ii ia. RespectPoints-urile nu mi le ia.
Dc? ce am facut gresit in comanda asta

Citat

CMD:buylevel(playerid, params[])
{
    new respect = (P_Data[playerid][pLevel] * 3), money = (P_Data[playerid][pLevel] * 250);
    
    if(P_Data[playerid][pRespectPoints] <  respect)
        return SCM(playerid, color_error, "Nu ai destule respect points!");

    if(GetPlayerMoney(playerid) < money)
        return SCM(playerid, color_error, "Nu ai destui bani!");

    new string[64];
    GivePlayerMoney(playerid, -money);
    P_Data[playerid][pRespectPoints] -= respect;
    P_Data[playerid][pLevel] ++;

    
    mysql_format(playerid, "UPDATE `conturi` SET `RespectPoints` = '%d', `Level` = '%d' WHERE `ID` = '%d'", P_Data[playerid][pRespectPoints], P_Data[playerid][pLevel], P_Data[playerid][pID]);
    format(string, sizeof(string), "Ai avansat la nivel %d!", P_Data[playerid][pLevel]);
    SendClientMessage(playerid, color_gray, string);
    return 1;
}

 

Link to comment
Share on other sites

schimba linia cu mysql format in asta:

mysql_format(handle, string, sizeof(string), "UPDATE `conturi` SET `RespectPoints` = '%d', `Level` = '%d' WHERE `ID` = '%d'", P_Data[playerid][pRespectPoints], P_Data[playerid][pLevel], P_Data[playerid][pID]);

si dedesubt adauga:

mysql_tquery(handle, string, "", "");

Edited by NERS
Link to comment
Share on other sites

Acum 3 minute, NERS a spus:

mysql_tquery(handle, string, "", "");

nah, tot asa e:

 

Acum 35 minute, IosifR a spus:

Salut, a mers ce mi-ai dat tu acolo. Dar... 
Am facut comanda buylevel dar cand dau buylevel nu imi updateaza nivelul, in baza de date si nici in joc. Dar, banii ii ia. RespectPoints-urile nu mi le ia.
Dc? ce am facut gresit in comanda asta

 

 

Link to comment
Share on other sites

Acum 34 minute, NERS a spus:

schimba linia cu mysql format in asta:

mysql_format(handle, string, sizeof(string), "UPDATE `conturi` SET `RespectPoints` = '%d', `Level` = '%d' WHERE `ID` = '%d'", P_Data[playerid][pRespectPoints], P_Data[playerid][pLevel], P_Data[playerid][pID]);

si dedesubt adauga:

mysql_tquery(handle, string, "", "");

@IosifR Ti-a explicat el ca la ####, iti e lene sa citesti?

Si oricum trebuie marit string-ul la 80-85 ca are 77 de caractere

 

@IosifR Pune mana si uita-te pe tutoriale intai de mysql, nu ca ai facut si iti da eroare sau ca nu primeste update la baza de date

 

Edited by iSkull
Link to comment
Share on other sites

Acum 32 minute, iSkull a spus:

@IosifR Ti-a explicat el ca la ####, iti e lene sa citesti?

Si oricum trebuie marit string-ul la 80-85 ca are 77 de caractere

 

@IosifR Pune mana si uita-te pe tutoriale intai de mysql, nu ca ai facut si iti da eroare sau ca nu primeste update la baza de date

 

Cine te-a trezit din hibernare? 
Am facut cum mi-au zis ei doi dar tot asa e.
Si eroare cu query am rezolvato dar nu imi da levelu cand dau buylevel si nu imi ia rpurile
trebuiea sa pun new query[100]; sus

Nu toata lumea e asa desteapta ca tine

Edited by IosifR
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.