THE CREW
Doriți să reacționați la acest mesaj? Creați un cont în câteva clickuri sau conectați-vă pentru a continua.

THE CREWConectare

THE CREW


descriptionTUTORIAL : Callbacks  EmptyTUTORIAL : Callbacks

more_horiz
allback-urile sunt, de fapt, parti de cod care sunt "executate" cand o anumita actiune se petrece(OnGameModeInit atunci cand gamemode-ul porneste, OnPlayerConnect cand un jucator se conecteaza, OnPlayerDeath cand un jucator moare si asa mai departe). Callback-urile, de obicei, au deja in nume evenimentul cand se petrec - deci e foarte usor sa iti dai seama ce face un callback doar uitandu-te la numele lui.


public OnPlayerDeath(playerid, killerid, reason)
{
new string[128], sendername[MAX_PLAYER_NAME];

GetPlayerName(killerid, sendername, sizeof(sendername));

format(string, sizeof(string), "Ai fost omorat de catre {DC0C0C}%s{FFFFFF}!", sendername);
SendClientMessage(playerid, 0xFFFFFFFF, string);
return 1;
}


Exemplul de mai sus prezinta un simplu cod care este executat atunci cand jucatorul moare, si ii trimite un mesaj care ii spune cine l-a omorat.


Cu putin efort, in script iti poti face propriul callback, ori pentru a "comprima" multele functii pe care le folosesti, ori pentru a face ceva atunci cand vrei tu.

Desigur, pentru a face un callback mai intai trebuie sa arati scriptului ce vrei sa faci, asa ca folosim functia forward pentru a defini callback-ul tau. Desigur, callback-ul poate avea mai multi parametri.

Functia forward se pune la inceputul scriptului.


forward Callback(playerid, toplayerid, money);


Vreau sa definesc un callback care se va executa la comanda /pay, pentru a afla suma, jucatorul care plateste si jucatorul care primeste banii, deci callback-ul va avea 2 membri care interactioneaza.

Acum, sa va explic functia de mai sus pe parti:

forward - Functia care defineste callback-ul.
playerid - Ca sa stiu pe cine sa imi execut functiile din interiorul callback-ului, folosesc playerid.
toplayerid - Pentru ca voi avea 2 jucatori care interactioneaza intre ei, folosesc toplayerid pentru a sti cine primeste banii.
money - Banii pe care ii primeste toplayerid/pe care ii plateste playerid.

Acum, ca am definit callback-ul, trebuie sa il si creez. Pentru asta, urmam structura clasica:

public Callback(playerid, toplayerid, money)
{
return 1;
}

Pentru ca callback-ul este gol, este clar ca nu se va intampla nimic, asa ca am sa creez un mesaj atunci cand toplayerid primeste banii.


public Callback(playerid, toplayerid, money)
{
new string[128], sendername[MAX_PLAYER_NAME], sendername1[MAX_PLAYER_NAME];

GetPlayerName(playerid, sendername, sizeof(sendername)); // Verific numele jucatorului care da banii
GetPlayerName(toplayerid, sendername1, sizeof(sendername1)); // Verific numele jucatorului care primeste banii

format(string, sizeof(string), "Ai primit $%d de la %s!", money, sendername);
SendClientMessage(toplayerid, 0xFFFFFFFF, string);

format(string, sizeof(string), "I-ai dat $%d lui %s!", money, sendername1);
SendClientMessage(playerid, 0xFFFFFFFF, string);
}


Acum, mai ramane sa ii arat scriptului cand va fi executat acest callback. Asa ca il execut de fiecare data cand un jucator foloseste comanda /pay.


if(strcmp(cmdtext, "/pay", true) == 0)
{
new tmp[256], idx;
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "Folosire: /pay <jucator> <suma>");
new giveplayerid = ReturnUser(tmp);
new suma = strval(tmp);
if(suma >= 1 && suma < 1000000) {} else return 1;
GivePlayerMoney(giveplayerid, suma);
GivePlayerMoney(playerid, -suma);
// PARTEA CEA MAI IMPORTANTA
Callback(playerid, giveplayerid, suma);
return 1;
}


Pentru a executa un callback, trebuie sa ii scrii corect numele si sa ii pui parametrii corecti, adica: Callback(parametrul1, parametrul2, parametrul3);

In principiu, am adaugat Callback la sfarsitul comenzii /pay, si am adaugat parametrii corecti:

playerid este cel care plateste, care in comanda /pay are acelasi nume: playerid.
toplayerid este cel care primeste banii, adica giveplayerid.
money este suma, care in comanda /pay am notat-o ca "suma", deci am sa pun "suma" in loc de money.

SURSA : http://forum.sa-mp.com/archive/index.php/f-77.htm

descriptionTUTORIAL : Callbacks  EmptyRe: TUTORIAL : Callbacks

more_horiz
Gj pentru efort . cheers
privacy_tip Permisiunile acestui forum:
Nu puteti raspunde la subiectele acestui forum
power_settings_newConectați-vă pentru a răspunde