Jump to content

[Tutorial] Jak zacit s pawnem -- Jinak nez obvykle ;)


ffredyk

Recommended Posts

  • Majitel

Tutorial 1.

Jak zacit..

 

Uvod

Taakze .. Jsem se rozhodl (Pac tdy na foru je plno lidi co pawn neumeji a umet ho chteji) udelat dalsi (sry to all) topicy kde budu psat tutorialy jak zacit s pawnem a jak se ho co nejkratsi cestou nasprtat..

 

Program pawno

Program pawno je usnadnujici aplikace, diky ktere muzeme snadneji psat jazyk pawn.. Vyuzit muzeme samozrejme jakykoliv poznamkovy blok nebo wordpad nebo cokoliv jineho (Nevim jak je to s Wordem).. Takze ja se vrhnu na oficialni program pro psani pawno od tymu SA:MP.

Ze vseho nejdriv kdyz si pustime program vidime prazdnou obrazovku:

 

Obrazek.1

 

Vysvetlivky:

1. Vytvorit novy projekt = Otevre se okno kde muzete psat vase scripty. Tam budeme pracovat..

2. Otevrit jiz existujici projekt = Otevre se okno kde musite najit jiz jednou ulozeny projekt kde muzete pokracovat ve psani scriptu..

 

Takze my klikneme na "Vytvorit novy projekt" (Obr.1 , 1.) a tam potom mame toto:

 

Obrazek.2

 

Vsimete si, ze se nam nahore "rozsvitili" dalsi tlacitka.. Disketa znamena "Ulozit projekt", Dalekohled je zkratka pro "Najit ve scriptu", ktera je velice vhodna jakmile mate script o hodnote 1 000 radku a vice ;) (Ja osobne tuto funkce hojne vyuzivam)..

Dalsi 2 tlacitka znaci najit dalsi a najit predchozi (Jen kdyz jste pred tim vyuzili funkci "Najit ve scriptu") a dalsi tlacitko je funkce, kterou moc lidi nevyuziva (V moji blizkosti opravdu nikdo) a tak ji vynechame (Sam moc nwm k cemu slouzi :d)..

No a dalsi 2 tlacitka ( -_- ) Jsou pro kompilaci scriptu (Velice dulezite!), budeme ji potrebovat pri kontrole chyb a po dokonceni scriptu pro prevedeni .pwn do .amx a posleze dalsimu pouziti na serveru..

Posledni tlacitko je napoveda, kde mate ruzne prispevky a komentare.. Anglicky samozrejme..

 

Prvni script

Ted je na case udelat si jednoduchou, ale dulezitou pro nas script.. Pro novacky je nejjednodusi pouzit system rychlych prikazu DCMD, proto budeme delat v nem (Ja v nem delam porad).. Pro pouzivani DCMD potrebujeme jeji definici:

 

#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1

 

Tu dame na zacatek (nahoru) naseho scriptu.. Takze pote muzeme zacit delat DCMD prikazy.. My si tu udelame jednoduchy prikaz /help v DCMD.. Takze si najdeme public "OnPlayerCommandText" (public je volan serverem kdyz ho hrac splni.. To znamena ze kdyz hrac zemre vyvola se public OnPlayerDeath), kde si napiseme jednoduchy kod:

 

dcmd(help,4,cmdtext); //Prikaz piseme bez "/" a 4 je tam proto ze slovicko "help" ma 4 znaky.. "cmdtext" je tam proto, ze nam ho public dodava a DCMD si potrebuje tuto promenou prevzit..

 

Kdyz mame tohle napsane.. A zmackneme F5 (Kompilace scriptu), tak nam pawno vyplivne chybu (error 017: undefined symbol "dcmd_help").. Ta je tam proto ze prikaz nema kde byt volan.. Proto sjedeme v pawnu az dolu, kde napiseme kod:

 

dcmd_help(playerid,params[]){ //dcmd_help proto, ze DCMD potrebuje vedet, ze je to prave jeho volaci funkce.. "playerid" a "params[]" jsou promene ktere muzeme vyuzit.. (Ale take nemusime)

 

To ale neni vse! Aby nas prikaz mohl fungovat potrebujeme take nejake funkce uvnitr a nakonec DCMD take zavrit :) .. Takze napiseme pod to:

 

SCM(playerid,BARVA,"Ahoj toto je muj prvni prikaz :)"); //Vysvetleno nize..
SCM(playerid,BARVA,"Jmenuji se tak a tak :)"); //Taktez vysvetleno nize..
return 1; //Toto je potreba pro to, aby nam server neplival, ze prikaz je nespravny..
} //Pro uzavreni prikazu.. Dulezite! Kdyz chybi pawno plive chybu!

 

SCM je zkratka pro "SendClientMessage".. Jenze to je moc dlouhe a tak si nahore udelame definici (Jednoduse napiseme pod definici DCMD ;) ) "#define SCM SendClientMessage"..

Tak ted mame definovano SCM a muzeme se pustit do parametru teto funkce.. "playerid" je promena kterou DCMD prevezme od publicu a doda ji nasemu prikazu.. Znaci ID hrace, ktery prikaz napsal.. Takze pri pouziti ve funkci ta funkce pusobi jen na daneho hrace..

"BARVA" je take definice.. Takze nahoru do modu "#define BARVA 0xFF0000AA" a muzeme jet dal..

Text ktery tam mame je ten text, ktery se zobrazi hraci pri napsani prikazu "/help" (Zmente si :) )

Ted mame nas vlastni prikaz.. Zde jsem vam vysvetlil definici a pouziti DCMD.. Je to podle me to hlavni co by se mel zacatecnik naucit.. Vim ze zacnete rikat ze se maji nejdriv ucit newy a includy.. Ale naco to kdyz to pri tak jednoduchem prikazu nebude potreba..

 

Tento tut je psan pro naproste "blbce" kdyz to tak reknu.. Kdyby to psal fakt jako poradnej pawno scripter tak sem prdne: Co to je new, define, include, forward a odesle.. Ja vam to chci vysvetlit od naprosto jednoduchych funkci az po ty tezsi..

 

Pls piste sem co nejvic kritiky, rad, dotazu apod.. Tut mi trval pul hodiny a rad bych vedel jestli ma cenu pokracovat.. Aneb chci rict, ze lama at se snazis sebevic si nenajde tu spravnou cestu.. (Hledat, procitani tutu atd..)

Link to comment
Share on other sites

Nj je to dobrý ale zarazilo me třeba:

 

"cmdtext" je tam proto, ze nam ho public dodava a DCMD si potrebuje tuto promenou prevzit..

 

jo a kde ji vidiš že ji převezme??... je to kvuli ty definici zadivej se do ní ;) je to prostě jako v strcmp ... porovnava to taky "cmdtext" s "cmdtextkterejzadal" (pitomost :d) takže on ji nikam nebere ... look at this:

 

dcmd_help(playerid,params[])

 

i can't see here "cmdtext" proměnnou ;)

 

Prostě si ji převezme ale tajně a nikoho s tim neotravuje ... a už neni pak dal použito jen na tu definici ... tak bych to řekl já .. a myslim že ty lamy to setejně nezajima k čemu to tam je ...

 

pokud se chcete hádat otý proměnný tak klidně :) argumentů mám dost ... (neberte me do puntíků nejsem žádnej puntíčkář, ale je to tkakovy divny tuto promennou prevzit...)

Link to comment
Share on other sites

  • Majitel
Nj je to dobrý ale zarazilo me třeba:

 

"cmdtext" je tam proto, ze nam ho public dodava a DCMD si potrebuje tuto promenou prevzit..

 

jo a kde ji vidiš že ji převezme??... je to kvuli ty definici zadivej se do ní ;) je to prostě jako v strcmp ... porovnava to taky "cmdtext" s "cmdtextkterejzadal" (pitomost :d) takže on ji nikam nebere ... look at this:

 

dcmd_help(playerid,params[])

 

i can't see here "cmdtext" proměnnou ;)

 

Prostě si ji převezme ale tajně a nikoho s tim neotravuje ... a už neni pak dal použito jen na tu definici ... tak bych to řekl já .. a myslim že ty lamy to setejně nezajima k čemu to tam je ...

 

pokud se chcete hádat otý proměnný tak klidně :) argumentů mám dost ... (neberte me do puntíků nejsem žádnej puntíčkář, ale je to tkakovy divny tuto promennou prevzit...)

 

No vidis ja vim k cemu to tam je ale nevedel em jak to vysvetlit tak aby to pochopil i ten intelient s IQ 20.. Thx..

Link to comment
Share on other sites

  • 1 month later...

freddyk vzdycky přijde s nějakym dobrym nápadem :clap: , jenom jsi psal že je tu PLNO lidí, kteří pawno neumí a chtějí ho umět. Potom taky platí že je tu PLNO lidí kteří tenhle tutoriál ani nedokáží najít :d . No a být newbie tak se hned zezačátku leknu tej definice DCMD a uteču :d . Ale jinak dobrej nápad a pěkně popsaný... teď je ještě nauč, aby si ten návod dokázali najít :arrow:

Link to comment
Share on other sites

Poradte prosím píše mi to chyby

 

C:\Documents and Settings\***\Plocha\***\***.pwn(114) : error 017: undefined symbol "dcmd"

C:\Documents and Settings\***\Plocha\***\***.pwn(188) : warning 203: symbol is never used: "dcmd_help"

 

 

poradíte mi prosím ? :)

Link to comment
Share on other sites

#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1

 

tohle si dej nahoru pod include a priste lepe cti...!

Link to comment
Share on other sites

#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1

 

tohle si dej nahoru pod include a priste lepe cti...!

 

 

Četl jsem to dobře ;) a dokonce to tam i mam. Ale přesto to nefunguje :(

Link to comment
Share on other sites

  • Majitel
#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1

 

tohle si dej nahoru pod include a priste lepe cti...!

 

 

Četl jsem to dobře ;) a dokonce to tam i mam. Ale přesto to nefunguje :(

 

Ukaz prikaz v publicu OnPlayerCommandText a ptom samotnou dcmd funkci ;)

Link to comment
Share on other sites

public OnPlayerCommandText(playerid, cmdtext[])

{

dcmd(help,4,cmdtext);

return 1;

}

 

 

 

dcmd_help(playerid,params[])

{ //dcmd_help proto, ze DCMD potrebuje vedet, ze je to prave jeho volaci funkce.. "playerid" a "params[]" jsou promene ktere muzeme vyuzit.. (Ale take nemusime)

 

SCM(playerid,B_MODR,"Ahoj toto je muj prvni prikaz :)"); //Vysvetleno nize..

SCM(playerid,B_MODR,"Jmenuji se tak a tak :)"); //Taktez vysvetleno nize..

return 1; //Toto je potreba pro to, aby nam server neplival, ze prikaz je nespravny..

} //Pro uzavreni prikazu.. Dulezite! Kdyz chybi pawno plive chybu!

Link to comment
Share on other sites

Mas neco blbe v ty definici.. Skus si ji prepsat...

 

definici mam tak jak tam je :) ˇˇ

 

#define dcmd(%1,%2,%3)if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2])))))return 1

 

edit definice je asi spatne dal sem tam :

 

#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1

 

(je to z jinyho tutu na register a login mno ale ted mi to pise :

 

C:\Documents and Settings\***\Plocha\***\***.pwn(186) : warning 203: symbol is never used: "params"

Link to comment
Share on other sites

Píše mi to túto chybu:

C:\samp\pawno\ktmr 0.1b.pwn(178) : warning 203: symbol is never used: "params"

Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase

 

 

1 Warning.

 

Mám to takto:

Riadok 178-182

 

dcmd_help(playerid,params[]){ //dcmd_help proto, ze DCMD potrebuje vedet, ze je to prave jeho volaci funkce.. "playerid" a "params[]" jsou promene ktere muzeme vyuzit.. (Ale take nemusime)

SCM(playerid,BARVA,"Zoznam príkazov:"); //Vysvetleno nize..

SCM(playerid,BARVA,"Doplním"); //Taktez vysvetleno nize..

return 1; //Toto je potreba pro to, aby nam server neplival, ze prikaz je nespravny..

} //Pro uzavreni prikazu.. Dulezite! Kdyz chybi pawno plive chybu!

 

Mám takú istú chybu ako on...

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...