Szerző Téma: [TuT] PAWN kódok bemutatása, leírása [folyamatos bõvítés]  (Megtekintve 3991 alkalommal)

Nem elérhető ShoCk

[TuT] PAWN kódok bemutatása, leírása [folyamatos bõvítés]
« Dátum: 2013. április 16. - 19:38:42 »
0 Show voters
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
« Utoljára szerkesztve: 2013. április 16. - 23:32:05 írta ShoCk »

Nem elérhető Legend

  • Adminisztrátor
  • 1830
    • Profil megtekintése
[TuT] PAWN kódok bemutatása, leírása [folyamatos bõvítés]
« Válasz #1 Dátum: 2013. április 16. - 20:03:56 »
0 Show voters
[mod]Ezek nagyon alapok, és már számtalan ilyen téma található a fórumon + minden egyes funkció külön is megtalálható, példával. Ki tudnád-e bõvíteni esetleg olyannal, ami hasznos lehet egy kezdõ számára?[/mod]

Nem elérhető ShoCk

[TuT] PAWN kódok bemutatása, leírása [folyamatos bõvítés]
« Válasz #2 Dátum: 2013. április 16. - 21:39:50 »
0 Show voters
Persze csak nem nagyon volt idõm és gondoltam mivel elég sokat akarok majd ide írni, hogy gyorsan elõször összegyûjtöm a könnyebbeket és fokozatosan egyre jobban beleméjülünk a pawnoba. Most este is írok hozzá még.

Nem elérhető DrAkE

  • 2078
    • Profil megtekintése
[TuT] PAWN kódok bemutatása, leírása [folyamatos bõvítés]
« Válasz #3 Dátum: 2013. április 16. - 23:23:39 »
0 Show voters
Most nem azért, de ez a leírás úgy ahogy van (elnézést Moderátorok), SZAR. A megnevezés amit te keresel az nem az hogy KÓD, hanem hogy FUNKCIÓ! Illetve ezen funkciók nem arra szolgálnak, hogy \"parancshoz kössük\" õket, hanem utasítás(ok) végrehajtására. A paraméterek listázása megint csak rossz, hiszen vegyük például a SendClientMessage-t: nem annak fogja kiküldeni az üzenetet, aki beírta a parancsot, hanem amit megadtunk az elsõ paraméterbe. Ez persze függ attól, hogy az adott játékos fent van-e a szerveren, vagy nincs. Illetve a példában nincs definiálva a \"KEK\" sem, így megint csak errort kapna, aki lefordítja. Illetve a leírásban sehol nem látom, hogy ZCMD-t használnál. Sõt! ha már elvileg az alapoktól kezded, akkor minek kezded egybõl ZCMD-vel amit a kezdõk fel se tudnak fogni?

Nem elérhető ShoCk

[TuT] PAWN kódok bemutatása, leírása [folyamatos bõvítés]
« Válasz #4 Dátum: 2013. április 16. - 23:36:44 »
+1 Show voters
Idézetet írta: DrAkE date=1366147419\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"36252\" data-ipsquote-contentclass=\"forums_Topic
Most nem azért, de ez a leírás úgy ahogy van (elnézést Moderátorok), sz*r. A megnevezés amit te keresel az nem az hogy KÓD, hanem hogy FUNKCIÓ! Illetve ezen funkciók nem arra szolgálnak, hogy \"parancshoz kössük\" õket, hanem utasítás(ok) végrehajtására. A paraméterek listázása megint csak rossz, hiszen vegyük például a SendClientMessage-t: nem annak fogja kiküldeni az üzenetet, aki beírta a parancsot, hanem amit megadtunk az elsõ paraméterbe. Ez persze függ attól, hogy az adott játékos fent van-e a szerveren, vagy nincs. Illetve a példában nincs definiálva a \"KEK\" sem, így megint csak errort kapna, aki lefordítja. Illetve a leírásban sehol nem látom, hogy ZCMD-t használnál. Sõt! ha már elvileg az alapoktól kezded, akkor minek kezded egybõl ZCMD-vel amit a kezdõk fel se tudnak fogni?
 
Köszi az észrevételeket, mihelyt lesz idõm átnézem és kijavítom. Nem akartam most még annyira keményen fogalmazni, de ha gondolod kijavítom õket...Azért szól kezdõknek, hogy õk is megértsék...Most jönne az, hogy ha valamit magyarázunk, akkor azt helyesen...Jogos...De te is értsd meg az én érveim... Idõvel át fogok térni a szakszerûbb fogalmazásra, de ez még nagyon az eleje...

Nem elérhető scripter01

  • 1035
  • Ex Moderálisan Globális
    • Profil megtekintése
[TuT] PAWN kódok bemutatása, leírása [folyamatos bõvítés]
« Válasz #5 Dátum: 2013. április 24. - 14:22:39 »
0 Show voters
Jó,jó de ezt még az is tudja aki nem scriptel :)

[TuT] PAWN kódok bemutatása, leírása [folyamatos bõvítés]
« Válasz #6 Dátum: 2013. július 22. - 19:14:45 »
0 Show voters
Szentem jólett :) sokat segített köszönöm

Nem elérhető SnooP

  • 1798
  • SnooP
    • Profil megtekintése
[TuT] PAWN kódok bemutatása, leírása [folyamatos bõvítés]
« Válasz #7 Dátum: 2013. július 22. - 21:53:22 »
0 Show voters
Feleslegesnek érzem, aki beírja eme függvényeket a googlebe ugyan olyan leírást kap róluk. Másrészrõl azzal érvelsz, hogy te az érthetõségre törekedsz akkor ezeket elmagyarázhatnád bõvebben is akár linkelhetnél róla leírást, mert egy kezdõ nem feltétlen biztos, hogy megérti a lent felsorolásra kerülõ dolgokat:
- Ez inkább tanács: Miért akarsz belemenni a függvények / eljárásokba, ha az alapokat amik a legfontosabbak a változókat nem tudják még és csak azt írod, hogy \'errõl majd késõbb lesz szó\'
-Ha ZCMD-vel dolgozol írd le a mûködését, vagy ahogy említettem legalább linkelj róla egy leírást amiben szemlélteted a használatát. Mivel õk kezdõk ezért azt se tudják, hogy eszik vagy isszák.
 
    SendClientMessageToAll(KEK, \"Valaki lopott egy MP5-t a fegyverraktárból!\");

 
-Tapasztalatból mondom, ha elõzõleg egy makróban nem defineolod a színt, a kezdõ egybõl azzal jön, hogy errort kapott erre a sorra.
-\" %f     Beilleszt egy lebegõpontos számot.\" ez is inkább észrevétel volna, a kezdõknek fingjuk sincs mit jelent a lebegõpontos változó, inkább szebb és magyarosabb, ha azt mondod tizedes tört és tudják mirõl van szó.
-  \"%s     Beilleszt egy stringet.\" Szintén inkább mondd azt helyette, hogy karakter láncot (Emlékszem januárban kezdtem scriptelni és én se vágtam az idegen/szakszavakat)
- %x     Beilleszt egy számot a hexadecimális(16-os) számrendszerbõl! - Valóban helyes a megfogalmazás ugyanis értéket is lehet binárisan lehet számot hex-be konvertálni, de egy kezdõ számára ez nem mondd semmit. A leggyakrabban ezt színkódok formájában nyilvánul meg, és ha elmondásod szerint az egyszerûségre és a könnyen érthetõségre törekedsz akkor, inkább mondd azt, hogy egy \'színkód formátumot\' vagy valami hasonlót illeszt be és akkor mindenki számára érthetõ lesz.


Hibák:
 
   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!

 
-Az else szó jelentése nem azt jelenti \"ha nem\", hanem azt, hogy \"ellentétbe\". Ha leírást készítesz valamirõl akkor saját magad is légy tisztába a fogalmakkal.
 
CreateObject(363, 1036.17, 1264.66, 21.19,   0.00, 0.00, 0.00);

 - Drawdistance kihagyva (magyarázatnál)
 
CreateVehicle(599, -756.3206, 2761.6204, 45.8912, 88.8508, -1, -1, 100);

 
- Az kocsi angele (avagy ha jól tudom magyarul kb az, hogy merre nézzen a kocsi) kihagyva, ugyan úgy ahogy a kocsi respawnolási ideje (magyarázatnál)
 
    return 1; //lezárjuk a parancsot

 
-Ez a visszatérés és nem a lezárás, van közte különbség.
-\"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!\"
Helytelen, ezek string valamint output formátumok (lásd: http://wiki.sa-mp.com/wiki/Printf)
- \" %%     Beilleszt egy szót!\" Tudtommal ez egy %-jelet illeszt be (de ebben nem vagyok biztos és lehet én tudom rosszul)


Ha most azt gondolod, hogy kioktatni akartalak, ne érts félre, mert nem. De a megfogalmazás sokat számít az érthetõség szempontjából és voltak hibáid is és ezeket akartam javítani. Sok sikert a továbbiakban ennek a folytatásához, de véleményem szerint csak szélmalom harcot folytatsz mivel egy függvény leírásánál sokkal tagoltabban paraméterenként elmagyarázzák a dolgot, inkább változókra, megformázásokra és hasonlókra térj ki, hasznosabb. ;)

[TuT] PAWN kódok bemutatása, leírása [folyamatos bõvítés]
« Válasz #8 Dátum: 2013. augusztus 20. - 12:35:37 »
0 Show voters
Par napja nezegetem a pawn nyelv csinjat binjat, sok oldalt, videot es honlo leirasokat neztem, de eddig ez az egyetlen olyan leiras ami tenyleg segitett , hogy megertsem , hogy mi , hogyan , mere , mennyi. Nagyon szepen koszonoom.
Egy nagyon nagyon kezdo leendo scripter.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal