Hali
Most lerom nektek hogyan kell paramteres parancsokat kszteni. (Pl.: /parancs [playerid] vagy /parancs [szveg] stb.)
Ezeket a parancsokat strtokkal vagy sscanf-al lehet megoldani
n az sscanfot s dcmd-t ajnlom mert pofon egyszer
Elszr is a pawnoba be kell ezt illesztennk
s ezt is (kb a mod elejre):
#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 ezutn egy j sorba rjuk
dcmd_heal(playerid, params[])
{
new giveplayerid; //ez lesz a msik jtkos
if (sscanf(params, "u", giveplayerid)) SendClientMessage(playerid, 0xFF0000AA, "Hasznlat: /heal [playerid]");
else if (giveplayerid == INVALID_PLAYER_ID) SendClientMessage(playerid, 0xFF0000AA, "Hiba: Nincs ilyen jtkos!");
else{
new name[MAX_PLAYER_NAME],string[200];
GetPlayerName(playerid, name, sizeof(name));
format(string, sizeof string, "%s feltlttte valakinek az lett", name);
SendClientMessageToAll(0xFF0000AA,string);
SetPlayerHealth(playerid, 100);
}
return 1;
}
Magyarzat:
if (sscanf(params, "u", giveplayerid)) - A giveplayerid-t rtesszk az U betre azaz egy jtkosid-re
else if (giveplayerid == INVALID_PLAYER_ID) - Hogyha a msik jtkos azaz a giveplayerid nem ltezik
Ilyenkor most a giveplayerid lesz mindig a msik jtkos s a playerid pedig az aki berta a /heal parancsot
pl.: SendClientMessage(giveplayerid, szn, "Cs"); - Ilyenkor annak a jtkosnak kldi el akinek bertad a parancs utn az id-jt
SendClientMessage(playerid, szin, "Kldtl valakinek egy Cs zenetet"); - Ezt pedig annak a jtkosnak rja ki aki berta a parancsot
Pirossal kijelltem az U bett mert azt t lehet rni msra ha nem pont jtkos id-t akarsz, hanem plul egy szmot vagy szveget
Betk/karakterek |
Adat tpus |
Plda |
d |
Egsz szm |
Pnz |
i |
Egsz szm |
Pnz |
c |
Karakter |
Egy karakter |
u |
Jtkos ID / Nv |
Jtkos |
s |
Szveg / karakterlnc |
Brmilyen hosszsg szveg pl.: /elad [zenet] |
h |
Hexa szm |
Szn |
x |
Hexa szm |
Szn |
f |
Float |
Koordinta |
z |
Indok |
Pldul egy /ban vagy /kick parancsnl az indok
|
Ha megvagy akkor ezutn az OnPlayerCommandText-hez rakd a return 0; -val egyvonalba rakjuk ezt
dcmd(heal, 4, cmdtext);
Az a piros ngyes azt jelzi hogy a parancs 4 betbl ll
Teht mondjuk egy REPORT parancssnl gy nzne ki: dcmd(report, 6, cmdtext);
Mivel a "report" sz 6 betbl ll
s itt a vgeredmny: KATT
Pldul egy PM-nl ([playerid] [zenet])
dcmd_pm(playerid, params[])
{
new giveplayerid, mess[200]; //ez lesz a msik jtkos
if (sscanf(params, "us", giveplayerid, mess)) SendClientMessage(playerid, 0xFF0000AA, "Hasznlat: /pm [playerid] [zenet]");
else if (giveplayerid == INVALID_PLAYER_ID) SendClientMessage(playerid, 0xFF0000AA, "Hiba: Nincs ilyen jtkos!");
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 elkldve!");
}
return 1;
}
s persze le ne felejtsk az onplayercommandtext-nl a: dcmd(pm, 2, cmdtext); -et
Magyarzat:
US - Az U a jtkos id, az S pedig a szveg
Remlem segtettem ;)
Tltsd le a nagy pldt itt
|
Hello..Azt meglehet oldani hogy kiirja hogy kit healeztl fel???Elre is ksz