Hali
Most leírom nektek hogyan kell paraméteres parancsokat készíteni. (Pl.: /parancs [playerid] vagy /parancs [szöveg] stb.)
Ezeket a parancsokat strtokkal vagy sscanf-al lehet megoldani
Én az sscanfot és dcmd-t ajánlom mert pofon egyszerű
Először is a pawnoba be kell ezt illesztenünk
És ezt is (kb a mod elejére):
#define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
Majd ezután egy új sorba írjuk
dcmd_heal(playerid, params[])
{
new giveplayerid; //ez lesz a másik játékos
if (sscanf(params, "u", giveplayerid)) SendClientMessage(playerid, 0xFF0000AA, "Használat: /heal [playerid]");
else if (giveplayerid == INVALID_PLAYER_ID) SendClientMessage(playerid, 0xFF0000AA, "Hiba: Nincs ilyen játékos!");
else{
new name[MAX_PLAYER_NAME],string[200];
GetPlayerName(playerid, name, sizeof(name));
format(string, sizeof string, "%s feltöltötte valakinek az életét", name);
SendClientMessageToAll(0xFF0000AA,string);
SetPlayerHealth(playerid, 100);
}
return 1;
}
Magyarázat:
if (sscanf(params, "u", giveplayerid)) - A giveplayerid-t rátesszük az U betűre azaz egy játékosid-re
else if (giveplayerid == INVALID_PLAYER_ID) - Hogyha a másik játékos azaz a giveplayerid nem létezik
Ilyenkor most a giveplayerid lesz mindig a másik játékos és a playerid pedig az aki beírta a /heal parancsot
pl.: SendClientMessage(giveplayerid, szín, "Cső"); - Ilyenkor annak a játékosnak küldi el akinek beírtad a parancs után az id-jét
SendClientMessage(playerid, szin, "Küldtél valakinek egy Csá üzenetet"); - Ezt pedig annak a játékosnak írja ki aki beírta a parancsot
Pirossal kijelöltem az U betűt mert azt át lehet írni másra ha nem pont játékos id-t akarsz, hanem pélául egy számot vagy szöveget
Betűk/karakterek |
Adat típus |
Példa |
d |
Egész szám |
Pénz |
i |
Egész szám |
Pénz |
c |
Karakter |
Egy karakter |
u |
Játékos ID / Név |
Játékos |
s |
Szöveg / karakterlánc |
Bármilyen hosszúságú szöveg pl.: /elad [Üzenet] |
h |
Hexa szám |
Szín |
x |
Hexa szám |
Szín |
f |
Float |
Koordináta |
z |
Indok |
Például egy /ban vagy /kick parancsnál az indok
|
Ha megvagy akkor ezután az OnPlayerCommandText-hez rakd a return 0; -val egyvonalba rakjuk ezt
dcmd(heal, 4, cmdtext);
Az a piros négyes azt jelzi hogy a parancs 4 betűből áll
Tehát mondjuk egy REPORT parancssnál így nézne ki: dcmd(report, 6, cmdtext);
Mivel a "report" szó 6 betűből áll
És itt a végeredmény: KATT
Például egy PM-nél ([playerid] [üzenet])
dcmd_pm(playerid, params[])
{
new giveplayerid, mess[200]; //ez lesz a másik játékos
if (sscanf(params, "us", giveplayerid, mess)) SendClientMessage(playerid, 0xFF0000AA, "Használat: /pm [playerid] [üzenet]");
else if (giveplayerid == INVALID_PLAYER_ID) SendClientMessage(playerid, 0xFF0000AA, "Hiba: Nincs ilyen játékos!");
else{
new name[MAX_PLAYER_NAME],string[200];
GetPlayerName(playerid, name, sizeof(name));
format(string, sizeof string, "[PM]%s:%s", name, mess);
SendClientMessage(giveplayerid, 0xFF0000AA,string);
SendClientMessage(playerid, 0xFF0000AA, "PM elküldve!");
}
return 1;
}
És persze le ne felejtsük az onplayercommandtext-nél a: dcmd(pm, 2, cmdtext); -et
Magyarázat:
US - Az U a játékos id, az S pedig a szöveg
Remélem segítettem ;)
Töltsd le a nagy példát itt
|
Hello..Azt meglehet oldani hogy kiirja hogy kit healeztél fel???Előre is kösz