Jump to content

Recommended Posts

Předmluva

Předem bych chtěl podotknout, že návod je vážně určen absolutním nováčkům, a už mírně pokročilí si budou říkat, že to umí každý.


Proč dělám tento návod? Když jsem s pawnem začínal úplně, nenašel jsem žádný návod, jež by byl pro největší „lamy“


Pak jsem ale narazil na nejmenovaného člověka, a ten mě naučil začátky. Momentálně bych řekl, že jsem mírně pokročilý. A nyní k samotnému návodu

 

Obtížnost: 1.png

Úvod - základy


Komentář v codu
- Chcete-li si udělat nějakou poznámku v kodu, použijte „//“ (bez uvozovek), pokud to je na více řádků, tak „/*“ a na konci „*/“ (opět bez uvozovek)

Include
- Abyste vůbec mohli jakýkoliv FS / GM vytvořit, musíte mít na začátku codu „#include <a_samp>“
- Dále Vám doporučuji „#include <izcmd>“, jež slouží k snažšímu psaní příkazů. Stáhnete jej tady:
https://www.mediafire.com/file/76kh8qfmckpwzcx/izcmd.inc
nebo
http://forum.sa-mp.com/showthread.php?t=576114
- A existují různé další includy, jež Vám ulehčí práci.

Upozornění:
- Za každou funkcí se musí psát „;“, za podmínkou ne




První příkazy

- Na začátek modu si dáme „#include <a_samp“, na další řádek „#include <izcmd>“.
- Tento příkaz bude sloužit k doplnění HP a vesty. Níže si jej i rozebereme.

Code:
 

#include <a_samp>
#include <izcmd>


CMD:heal(playerid, params[])
{
     SetPlayerHealth(playerid, 100);
     SetPlayerArmour(playerid, 100);
     SendClientMessage(playerid, 0xFF0000AA, "Doplnil sis HP a vestu");
     return 1;
}

Vysvětlení
CMD:heal(playerid, params[])
- Vytvoří nám příkaz /heal
- „playerid“ nám zjišťuje ID hráče, jež příkaz zadal
- „params[]“ Parametry, jež hráč zadal za samotným příkazem.

}

- Do těchto závorek se dávají kody. Kod se těmito závorkami "otevírá" a "uzavírá" Příklad:

{
     //Náš kod
     return 1;
}

SetPlayerHealth(playerid, 100);
- „SetPlayerHealth“ je funkce na nastavování HP
- „playerid“ nám zjišťuje ID hráče, jež příkaz zadal
- „100“ je počet HP, kolik daná funkce nastaví

SetPlayerArmour(playerid, 100);
- „SetPlayerArmour“ je funkce na nastavování vesty
- „playerid“ nám zjišťuje ID hráče, jež příkaz zadal
- „100“ je počet vesty, kolik daná funkce nastaví

SendClientMessage(playerid, 0xFF0000AA, "Doplnil sis HP a vestu");
- „SendClientMessage“ je funkce na odeslání zprávy konkrétnímu hráči (v našem případě hráči, jež zadal příkaz /heal)
- „playerid“ nám zjišťuje ID hráče, jež příkaz zadal
- „0xFF0000AA“ je hexadecimální kod barvy, touto barvou bude daná zpráva odeslána
- "Doplnil sis HP a vestu" je zpráva, jež to danému hráči odešle

return 1;
- Vrátí hodnotu, resp. ukončí danou funkci

 

Jak odeslat zprávu všem?

stock Nick(playerid)
{
     new name[25];
     GetPlayerName(playerid, name, 25);
     return name;
}

CMD:zprava(playerid, params[])
{
     new string[128];
     format(string, sizeof(string), "Hráč %s zadal příkaz /zprava", Nick(playerid));
     SendClientMessageToAll(0xFF0000AA, string);
     return 1;
}

Vysvětlení:
stock Nick(playerid)
{
new name[25];
GetPlayerName(playerid, name, 25);
return name;
}

- „stock Nick(playerid)“ je funkce na zjištění nicku hráče, aby jsme mohli odeslat formátovanou zprávu (v tomto případě s jeho nickem)
- „new name[25];“ Tady se nám uloží nick hráče
- „GetPlayerName“ Zjistí nám nick hráče
- „(playerid, name, 25);“ playerid nám opět zjistí ID hráče, name je název newu a 24 je maximální délka nicku + místo pro nulový znak = 25 (Nulový znak se musí přidávat do každého newu, jelikož by se nám jinak zpráva nevypsala celá.)
- „return name;“ nám vráti hodnotu, resp. ukončí danou funkci
 

CMD:zprava(playerid, params[])
{
     new string[128];
     format(string, sizeof(string), "Hráč %s zadal příkaz /zprava", Nick(playerid));
     SendClientMessageToAll(0xFF0000AA ,string);
     return 1;
}

CMD:zprava(playerid, params[])
- vysvětlili jsme si výše
- new string[128]; nám uloží zprávu, 128 je maximální délka zprávy
- format(string, sizeof(string), "Hráč %s zadal příkaz /zprava", Nick(playerid));
- format znamená formátování, resp. použití údajů zapsaných za (v našem případě) zprávou, ale může to být použito i v dialogu, nebo printf, ale to si vysvětlíme později
- string je naše zpráva
- sizeof(string) znamená, že velikost naší zprávy bude stejná jako velikost stringu
- "Hráč %s zadal příkaz /zprava" zpráva vypsaná do chatu
- Nick(playerid) je náš stock, jež nám zjistí údaj, v tomto případě nick, a vypíše ho
- return 1; vrátí hodnotu



Závěrem


Doufám, že se menší návod líbil, jak bylo vzpomenuto výše, je určen absolutním nováčkům, tak to vezměte na vědomí při hodnocení.
Nejspíše bude tento návod na více dílů, tady jsme si vysvětlili základy. Doufám, že návod bude označen jako platný, nováčkům by mohl pomoci.
 

 

A vy, nováčci, nekopírujte, ale snažte se to pochopit, kopírováním získáte.. Vlastně nezískáte vůbec nic, ale když to pochopíte, budete moci tvořit FS, jež nikdo jiný nemá.
Edited by Gameluner
  • Líbí se mi to! (+1) 1

Sdílet tento příspěvek


Link to post
Share on other sites

Sorry ale být nováček tak tohle nepochopím.

 

 

- proč začínat s izcmd když se učí základy

- u funkce Nick jsi nevysvětlil, že je to/co je to funkce a ani jak ji dále použít. To že tam napíšeš return a řekneš že vrátí nick je tudíž nepochopitelné.

 {

- Musí se psát všude, kde chceme vykonat jakoukoliv funkci, aby to mohlo fungovat.
 
- To taky není nejlépe vysvětlené
- „params[]“ znamená, že příkaz „/heal“ vykoná stejnou funkci, jako když hráč zadá příkaz „/heal sdfsdfadfgsdfg“ - taky nesmyl
new string[128]; nám uloží zprávu, 128 je maximální délka zprávy - další nesmysl.
 
řekl bych, že to nejzákladnější co by jsi měl právě úplným nováčkům říct, jsi neřekl. Neseznámil jsi je s proměnýma (namísto toho používáš new v kontextu "name je název newu a 25 je maximální"). Odkazuješ se na podmínky, ale to cílovka vůbec neví co je, atd.

Sdílet tento příspěvek


Link to post
Share on other sites

proč začínat s izcmd když se učí základy

-

Já hraji SA-MP na mnoho serverech s RZE 7.9 a jsou tam jen cizí scripty, nic vlastního - když jsem jednomu majiteli serveru vytvořil jednoduchý příkaz /heal, tak byl šťastný, ale fakt hodně, přitom to bylo toto. Proto chci, aby nováčci uměli si vytvořit svůj příkaz.

 

u funkce Nick jsi nevysvětlil, že je to/co je to funkce a ani jak ji dále použít. To že tam napíšeš return a řekneš že vrátí nick je tudíž nepochopitelné.

-

To máš pravdu, doteď mě však nenapadá, jak to lépe vysvětlit.

 

 {

- Musí se psát všude, kde chceme vykonat jakoukoliv funkci, aby to mohlo fungovat.
 
- To taky není nejlépe vysvětlené
-
No, tak já na tom nevidím nic nepochopitelného, když něco chci vykonat, tak to musím dát do  { }
 
- „params[]“ znamená, že příkaz „/heal“ vykoná stejnou funkci, jako když hráč zadá příkaz „/heal sdfsdfadfgsdfg“ - taky nesmyl
-
Tak toto tedy není nesmysl. Nováčci nepotřebují vědět, k čemu přesně to může sloužit, když to stejně s tím neudělají.
 
 
řekl bych, že to nejzákladnější co by jsi měl právě úplným nováčkům říct, jsi neřekl. Neseznámil jsi je s proměnýma (namísto toho používáš new v kontextu "name je název newu a 25 je maximální"). Odkazuješ se na podmínky, ale to cílovka vůbec neví co je, atd.
Pokud se nováček vážně něco chce naučit, tak tu je návod přímo na proměnné, i podmínky. Nováček, chce-li se něco naučit, si to přečte, byla by ztráta času vypisovat něco, co už tu je.
 
Podle mě jsem podstatné věci řekl, a navíc tady máš výtažek, co jsem napsal na konci

 

 

Nejspíše bude tento návod na více dílů, tady jsme si vysvětlili základy.

 

Edited by Gameluner

Sdílet tento příspěvek


Link to post
Share on other sites

Kazdy navod sa zide ak neni zle spraveny... Podla mna v pohode.
Akurat mozno greenhorn nebude vediet ci to moze dat ako filterscript, ako gamemod, alebo kde... :) Alebo kam prilepiť dany kod aby to fungovalo a tak. Ale inac vravim, v poho. :)

  • Líbí se mi to! (+1) 1

Sdílet tento příspěvek


Link to post
Share on other sites

tady jde o to, že když nováčkům něco vysvětluješ, tak jim to musíš vysvětlil na jednoduché věci a odkazovat se na to co znají, jinak to nemůžou chápat. Odkážeš je na podmínky, naučíš je je nejdříve. 

 

Beru že je chceš naučit příkaz heal, ale k tomu bohatě stačí příkaz strcmp a callback OnPlayerCommandText, takhle to mají mnohem komplikovanější protože používají knihovnu a ani o tom nevědí. Což je velký nedostatek.

  • Líbí se mi to! (+1) 1

Sdílet tento příspěvek


Link to post
Share on other sites

Zvolil jsi zajímavý přístup k tomu, jak to mají nováčci pochopit. Na rozdíl od mých návodů, kde se snažím o to, aby pochopili, co každá konstrukce znamená, ty se soustřeďuješ jen na to nejdůležitější – že to tam musí být a řekneš z praktického hlediska proč. Neříkám, že je to špatný přístup, ba naopak, myslím, že se to s tím mým přístupem pěkně doplňuje (u tebe se dozví, že new name[25]; je něco, kam se uloží nick, u mě se pak dozví, že to je pole znaků).

 

Každopádně si myslím, že se ti nepodařilo to úplně vystihnout.

 

 

 

- Za každou funkcí se musí psát „;“, za podmínkou ne

Tady třeba chybí informace, že za cyklem (klidně bych řekl " za for" či "za forem") se to též nedává. Nebo když vytvářím nový stock (ačkoliv to označení stock pro funkce nemám rád, no budiž :d).

 

 


- "Hráč %s zadal příkaz /zprava" zpráva vypsaná do chatu

- Nick(playerid) je náš stock, jež nám zjistí údaj, v tomto případě nick, a vypíše ho

Tady bys mohl uvést, že "náš stock" se dosadí tam, kde je %s. Protože takhle by si mohli myslet, že cokoliv následuje za zprávou, tak že se vypisuje. Je to nepřesné.

 

Je tam pár vět, které by si zasloužily jinou formulaci, i pár úseků, které by chtěly doplnit další odpovědi, ale jinak dobré. Nápad to špatný není.

Sdílet tento příspěvek


Link to post
Share on other sites

Hip, toto přesně nechápu. Naučíte je na strcmp, až si na to zvyknou, tak na dcmd, a jakmile to budou umět, tak jim řeknete, že dělají špatně, že existuje izcmd. Tomu já předcházím.

Jo a vEnd, jelikož jsem se teprve nedávno naučil základy, tak jsem pochopil to přemýšlení úplných nováčků - sry za pravopis, píši z mobilu

  • Líbí se mi to! (+1) 2

Sdílet tento příspěvek


Link to post
Share on other sites

Neni to spatny icon_e_smile.gif

 

Nevim kolika z vam neco rekne kdyz napisu "Hed Shy mod". Kazdopadne mel jsem v planu (mam) neco takoveho udelat, tak jestli budes v budoucnu psat neco dalsiho podobneho na tenhle styl, tak by ses mohl do toho i pustit.

 

Kazdopadne jedna se o mod, ve kterem jsou ukazany ruzne featury sa-mpu na mensim ostruvku a kazdicky kod, radek je tam okomentovany. Delal to senochrup jeste v r. 2008 a neni to uplne dokonale napsany kod (neni ani odtabovany), ale kdyz jsem koukal co pawno.cz nabizi za navody, tak by se siklo i neco z praktickeho hlediska, kde si uzivatele ty veci sami osahaji.

 

 

Kazdopadne vice info a pwn zde: http://www.gta.cz/mp/clanek/sa-mp-pawno-hed-shy-mod

  • Líbí se mi to! (+1) 1

Sdílet tento příspěvek


Link to post
Share on other sites

Když jim ukážeš strcmp, tak ani nemusíš vysvětlovat params[], nemusíš vysvětlovat co je to knihovna a bohatě to stačí. Chceš je naučit totální základy a tady jim už dáváš do prvního tutoriálu knihovnu a docela pokročilé scriptování.  To že existuje něco jako knihovna, dcmd nebo dokonce izcmd, tak k tomu se dostanou pokud budou mít chuť se učit. :) 

 

btw. na Hed Shy modu jsem kdysi já začínal, pokud si dobře pamatuju tak mi to dalo opravdu hodně.

Sdílet tento příspěvek


Link to post
Share on other sites

Tak já se rozepíšu.

Naučíte je na strcmp, aby něco uměli. Ale jakmile to tak budou dělat, tak sem dají svůj třeba pátý FS. Jakmile vy ho přečtete, tak mu hned jdete říct, že to může dělat lépe, než-li jste ho dříve naučili, a řeknete mu o dcmd. Naučí se na dcmd. Ale jakmile to tak budou dělat, tak sem dají svůj třeba desátý FS. Jakmile vy ho přečtete, tak mu hned jdete říct, že to může dělat lépe, než-li jste ho dříve naučili, a řeknete mu o izcmd.

 

Tak se 2x bude přeučovat

 

Zato tady se rovnou naučí nejsnažší metodou.

Sdílet tento příspěvek


Link to post
Share on other sites

Tak já se rozepíšu.

Naučíte je na strcmp, aby něco uměli. Ale jakmile to tak budou dělat, tak sem dají svůj třeba pátý FS. Jakmile vy ho přečtete, tak mu hned jdete říct, že to může dělat lépe, než-li jste ho dříve naučili, a řeknete mu o dcmd. Naučí se na dcmd. Ale jakmile to tak budou dělat, tak sem dají svůj třeba desátý FS. Jakmile vy ho přečtete, tak mu hned jdete říct, že to může dělat lépe, než-li jste ho dříve naučili, a řeknete mu o izcmd.

 

Tak se 2x bude přeučovat

 

Zato tady se rovnou naučí nejsnažší metodou.

 

To se ale dá taky považovat za jednu z těch dobrých věcí, bude mít více znalostí

Jestli je to typ člověka co si zde snaží získat více a více reputace tak může pomoct ve více věcech když toho bude vědět více

Edited by RaWyN

Sdílet tento příspěvek


Link to post
Share on other sites

Zapojím se do té vaší debaty. Podle mě je dobře, že učí jen jeden způsob vytváření příkazů. Nač ho učit do začátku obojí? (i)zcmd hravě zvládne i příkazy s i bez parametrů, což se o strcmp způsobu říct nedá. Podstatou tohoto návodu, pokud jsem to správně pochopil, je naučit uživatele programovat praxí. Proč je učit strcmp i zcmd a složitě (ano, z jejich pohledu složitě) jim vysvětlovat, kdy použít první a kdy druhý? Nauč je jedno, v příštích tutoriálech či až se sami otrkají, může dojít řeč i na strcmp.

Sdílet tento příspěvek


Link to post
Share on other sites

to je právě ono. Začínat praxí není nejideálnější způsob. Např. na vysoké se OOP učí jenom teoreticky, protože ty lid potom nad tím přemýšlí jinak - lepší způsobem. To samé by mělo být tady. Naučíte je něco, ale nebude mít tušení co se děje a aby dále vymyslel něco svého tak maximálně udělá další příkaz. 

Sdílet tento příspěvek


Link to post
Share on other sites
(i)zcmd hravě zvládne i příkazy s i bez parametrů, což se o strcmp způsobu říct nedá.

Přesně tak.

 

 

 

Podstatou tohoto návodu, pokud jsem to správně pochopil, je naučit uživatele programovat praxí

To jsi pochopil naprosto správně. 

 

 

 

 Proč je učit strcmp i zcmd a složitě (ano, z jejich pohledu složitě) jim vysvětlovat, kdy použít první a kdy druhý?

 

Souhlasím

 

 

 

Nauč je jedno, v příštích tutoriálech či až se sami otrkají, může dojít řeč i na strcmp.

 

A přesně o toto mi jde.

 

 

 

 

to je právě ono. Začínat praxí není nejideálnější způsob. Např. na vysoké se OOP učí jenom teoreticky, protože ty lid potom nad tím přemýšlí jinak - lepší způsobem. To samé by mělo být tady. Naučíte je něco, ale nebude mít tušení co se děje a aby dále vymyslel něco svého tak maximálně udělá další příkaz. 

 

Lidé přemýšlí lepším způsobem. Teoretických návodů je tu dostatek, a já se jen snažím, že když nepochopí teorii, tak se jim to vysvětlí na praxi. My je naučíme něco, kde nebude mít tušení, co se děje. Pokud to tušení chce mít, bude se to učit

ne jen z jednoho návodu. Dále bych se vrátil k tématu příkazů, a podívej se na tohle:

 

 

 

aby dále vymyslel něco svého tak maximálně udělá další příkaz. 

 

Co by mohli kromě dalšího příkazu udělat přes ten slavnej strcmp? strcmp je v tomto návodu učit nechci, na strcmp tu myslím taky jsou návody. Znovu ti zopakuji to, co jsem již nejednou napsal

 

 

Teoretických návodů je tu dostatek, a já se jen snažím, že když nepochopí teorii, tak se jim to vysvětlí na praxi.

 

Doufám, že nyní již chápeš, oč mi jde, a chápeš, že návodů je tu dostatek, ale teoretických, nikoliv praktických. A to je dle mého názoru chyba.

To se ale dá taky považovat za jednu z těch dobrých věcí, bude mít více znalostí

Jestli je to typ člověka co si zde snaží získat více a více reputace tak může pomoct ve více věcech když toho bude vědět více

Ano, bude mít více znalostí, ale k čemu je využije? Bude znát 3 styly psaní příkazů, kolik jich bude používat? Jeden. Správně.

Sdílet tento příspěvek


Link to post
Share on other sites

Např. na vysoké se OOP učí jenom teoreticky, protože ty lid potom nad tím přemýšlí jinak - lepší způsobem. To samé by mělo být tady. Naučíte je něco, ale nebude mít tušení co se děje a aby dále vymyslel něco svého tak maximálně udělá další příkaz. 

Pobavilo.

OOP som poznal este pred prichodom na VS, naucil som sa to praxou a ver mi, lepsi sposob to čo učia na VS nie je. ;) Naucia sa to rychlejsie, ale rozhodne tomu rozumeju menej. Najviac ma bavia ucitelia co mi nieco vysvetluju a rozumeju tomu horšie nez ja. :hyperlul: Neni takych vela samozrejme a niektorym nesiaham ani po paty, ale su taki.

 

@gameluner, je to dobry navod. Kvalitou je dobry, je iny akurat sposobom vykladu. A ten sposob si myslim ze je tiez dobry.

Sdílet tento příspěvek


Link to post
Share on other sites

Díky, jsem rád, že se ti to líbí :-)
A Hipe, ještě se vyjádřím k tobě, když jsi byl malý, učil ses chodit tak, že ses to šprtal, nebo tím, že jsi to zkoušel? Samozřejmě, prakticky. A argumenty typu: Tady to je jiné atp. neberu, jelikož je to to samé ve stylech učení. Praxe, a teorie.

Edited by Gameluner

Sdílet tento příspěvek


Link to post
Share on other sites

 

 

Začínat praxí není nejideálnější způsob. Např. na vysoké se OOP učí jenom teoreticky, protože ty lid potom nad tím přemýšlí jinak - lepší způsobem. To samé by mělo být tady. Naučíte je něco, ale nebude mít tušení co se děje a aby dále vymyslel něco svého tak maximálně udělá další příkaz. 

Musím souhlasit s Tangem, tohle je k smíchu. Já se naučil Pawn tak, že jsem si prohlížel již hotové kódy, pak nějakou dobu kopíroval, pak zkoušel něco svého a až pak teprve jsem začínal chápat programovací principy a jak to pracuje. Pak teprve se mi hodily teoretické návody, v mém případě výuka C na střední. Kdyby tě na vysoké učili programování teoreticky a nenutili tě do praktických cvičení či projektů, akorát bys ztrácel čas, co si neošaháš sám, brzo zapomeneš.

  • Líbí se mi to! (+1) 1

Sdílet tento příspěvek


Link to post
Share on other sites

Nevidím moc v problém v použití izcmd oproti strcmp, přestože by použití strcmp bylo možná vhodnější. Nováček nebude hned ze začátku psát stovky příkazů, kde se projeví výhoda izcmd, naopak bude psát pár příkazů a jednodušší scripty, kde se mu bude více hodit znalost strcmp (pro tvoje info, strcmp se nepoužívá jen pro "vytváření" příkazů). Parametry příkazu budou sice složitější, ale zase získá nějaké znalosti navíc.

 
Problém vidím ve tvém výkladu, který nováčky akorát zmate.

 „(playerid, name, 25);“ playerid nám opět zjistí ID hráče, name je název newu a 25 je maximální počet znaků, pokud má hráč delší nick (což mít nemůže), nevypíše se celý.

- „params[]“ znamená, že příkaz „/heal“ vykoná stejnou funkci, jako když hráč zadá příkaz „/heal sdfsdfadfgsdfg“

} - Musí se psát všude, kde chceme vykonat jakoukoliv funkci, aby to mohlo fungovat.

atd. vše špatně "vysvětleno".

.

  SCMTA(RED,string);

Co je to SCMTA, co je to RED? Praktický návod by měl být funkční.

 

Btw. na hed shy mod jsem kdysi koukl, ale nelíbil se mi :d Něco podobného dobře napsaného by mohlo být dobré.

Edited by Lukasz

Sdílet tento příspěvek


Link to post
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


×