Sziasztok!
Ebben a topicban szeretnék bemutatni pár pawno kódot, azokat jellemezve, részletesen leírva mi-mit jelent.
Kezdjük is el. Elsõ kódunk a SendClientMessage
SendClientMessage(playerid, -1, \"www.sampforum.hu\");
Mit csinál a kód: Üzenetet küld annak a játékosnak aki beírja a hozzá kapcsolt parancsot. Pl.: /help
playerid - a játékos aki beírja a parancsot
-1 - Ez egy színkód, jelen esetben fehér. Lehet ez bármilyen, akár kóddal, akár definiálva írod be
idézõ jelbe írt szöveg - ezt az üzenetet fogja megkapni az, aki beírja a kódhoz kapcsolt parancsot
SendClientMessageToAll:
SendClientMessageToAll(-1, \"www.sampforum.hu\");
Mit csinál a kód: Minden játékosnak küld egy üzenetet, ha beírjuk a hozzá kapcsolt parancsot. Pl.: /reklám
-1 - Színkód, jelen esetben fehér
idézõ jelben írt szöveg: ezt az ütenetet kapják meg a playerek
if(IsPlayerInRangeOfPoint( playerid, 1.0, x,y,z))
Mit csinál a kód: Helyhez köt egy parancsot. Csak az adott helyen tudod használni
playerid - játékos aki beírja
1.0 - ez a kör sugarát jelenti, ami megadja, hogy mekkora távolságban használhasd a parancsot az adott helytõl
x,y,z - ide kerül a koordináta, ahol szeretnéd, hogy használható legyen a parancs
CreateObject(363, 1036.17, 1264.66, 21.19, 0.00, 0.00, 0.00);
Mi is ez a kód: Ezzel a kóddal tudsz objecteket létrehozni
elsõ 3 szám amit , választ el - az object helye (koordináta) ahol el fog helyezkedni
a dupla szóköz utáni 3 szám , elválasztva: forgástengelyek.
CreateVehicle(599, -756.3206, 2761.6204, 45.8912, 88.8508, -1, -1, 100);
Mi is ez a kód: Ezzel a kóddal jármûveket tehetsz le a mapon
elsõ szám (599) - kocsi id-je
következõ 3 szám , elválasztva: kocsi spawnolási helye (ide teszi le a kocsit)
-1, -1 - kocsi színe (wikin tudsz nézni színeket) ez jelen esetben fehér
Most akkor nézzünk egy egyszerû parancsot ezeknek a kódoknak a felhasználásával és egy fegyver adó kóddal:
CMD:lopfegyver(playerid, params[]) //parancs amit be kell írni
{ //megnyitjuk a parancsot
if(IsPlayerInRangeOfPoint(playerid, 30.0, 1237, 843, 1274)) //helyhez kötjük a parancsot
{ //megnyitjuk az if függvényt, ez arra jó, hogy csak akkor adja oda a fegyvert a játékosnak ha jó helyen írja be a parancsot
GivePlayerWeapon(playerid,WEAPON_MP5,100); //adunk egy MP5-t a játékosnak
SendClientMessageToAll(KEK, \"Valaki lopott egy MP5-t a fegyverraktárból!\"); //értesítjük a többi játékost a lopásról
SendClientMessage(playerid, KEK, \"Elloptál egy MP5-t a fegyverraktárból, most menekülj!\"); //közöljük a játékossal a lopás sikerességét
} //lezárjuk az if függvényt
else //az else szó megfelel nagyjából a magyar \"ha nem\" kifejezésnek, vagyis ezzel azt állítjuk be, hogy mi történjen, ha nem jó helyen írja be a parancsot valaki!
{ //megnyitás...
SendClientMessage(playerid, KEK, \"Nem vagy a fegyverraktárban!\"); //ez közli a játékossal, hogy nem megfelelõ helyen írta be a parancsot
} //zárás...
return 1; //lezárjuk a parancsot
} //lezárjuk a parancsot
Most, hogy láttuk, hogy is mûködnek ezek a parancsok a gyakorlatba, mutatok egy újabb kódot, részletesen elmagyarázva:
public OnPlayerDeath(playerid, killerid, reason) //playerid=meghalt játékos killerid=gyilkosa reason=indok/ok (igazából azt fejezi ki, hogy miért halt meg a játékos)
{
new string[32]; //errõl késõbb lesz szó!
GivePlayerMoney(killerid, 1000); //killerid=itt azt jelenti hogy ki kapja a pénzt, jelen esetben a gyilkos| 1000=pénz összege amit kap a gyilkos
format(string, sizeof(string), \"Jelenleg %d Ft-od van.\", GetPlayerMoney(killerid)); //ezt a sort lentebb hosszabban elmagyarázom
SendClientMessage(killerid, 0xFFFFFFFF, string); //ezzel már tisztába vagyunk, de leírom. Ez küldi az értesítést a gyilkosnak, hogy mennyi pénze van!
}
/* Vissza térve a
format(string, sizeof(string), \"Jelenleg %d Ft-od van.\", GetPlayerMoney(killerid));
sorra...Ami itt nekünk fontos most, az a \"%d\". Nos ez a jel mindig számot, mennyiséget fejez ki.
Hogy milyen mennyiséget is? Miután beírtuk a \"\"Jelenleg %d Ft-od van.\" szöveget, vesszõvel elválasztva
beírjuk, hogy pontosan minek az értékét is írja ki a \"%d\". Jelen esetben a GetPlayerMoney kódot
használjuk, mivel ez kéri le a játékos pénzét.
Csak zárójelbe megjegyezném, hogy ha elõtte mondjuk írunk egy
#define gyilkospenz GetPlayerMoney(killerid);
definíciót, akkor a GetPlayerMoney(killerid); helyére elég annyit írni, hogy gyilkospenz,
mivel definiálva van, vagyis ugyanazt jelenti.*/
Az elõzõ kódomban ígértem, hogy részletesen kitérek a string és %d részekre:
Hogy mik is ezek? - Igazából pontos magyar megfogalmazást nem tudok rá mondani, de talán az lenne rá a legjobb hogy változók!
Hol veszed hasznát? - Például egy olyan kódnál amit az elõbb bemutattam, vagy bármi olyannál, aminél nem tudsz megadni pontos összeget, mert az változhat!
Mostantól hívjuk õket a rendes nevükön! A Format Stringek fajtái:
- %b Számokat illeszt be bináris számrendszerben
- %c Beillesz egy egyedüli karaktert.
- %d Egész számokat illeszt be.
- %f Beilleszt egy lebegõpontos számot.
- %i Beilleszt egy egész számot.
- %s Beilleszt egy stringet.
- %x Beilleszt egy számot a hexadecimális(16-os) számrendszerbõl!
- %% Beilleszt egy szót!
A placeholdereket(ezeknek a format stringeknek az értelmezõi, mint a kódomban a getmoney) ugyanolyan sorrendben kell beírni vagy szakszóval \"rögzíteni\" mint amilyen sorrendben van a szövegben a format string. Erre vegyünk egy egyszerû példát:
new S[128]; //vegyünk fel azt az értéket amire szükségünk lesz
format(S, sizeof(S), \"%s adott neked $%d Ft-ot.\", Jatekosnev, Penz); //persze itt a Jatekosnev és a Penz szavak már értelmezve lettek