Jump to content

Recommended Posts

Obtížnost:  :1:

 

 

Obsah:

 

- Věci ke stažení

- Vysvětlení

- Příklady

- Návod

- Závěr

 

Věci ke stažení:

 

ZCMD plugin: http://samp-scripts.com/post/INC_zcmd_031__Fast_amp_Simple_Command_Processor_updated_30102009-MatrixBoY-other_include-15/

 

 

Vysvětlení:

 

Pocity jsou jednoduché měl by to zvládnout i pouhý začátečník. Jde o to že hráč napíše nějaký pocit např. /lol a napíše to do chatu všem "Hráč Ponozka se směje!". Ponozka to je jen nick, který jsem si vymyslel. :d

 

 

Příklady:

 

Zde je příklad kdybych chtěl příkaz /lol :

 

CMD:lol(playerid,params[])
{
new string[136];
format(string,sizeof(string),"Hráč %s se směje!", PlayerName(playerid));
SendClientMessageToAll(0xFFFFFF,string);
return 1;
}

 

 

 

NÁVOD:

 

Takže jako neprve si vytvoříme tento stock: (Dejte ho třeba úplně dolů)

 

stock PlayerName(playerid)// zjištění jména 1
{
new name[255];
GetPlayerName(playerid, name, 255);
return name;
}

 

 

Potom pod include <a_samp> si zapíšeme:

 

#include <zcmd> 

 

 

A nyní k samotnému příkazu :d

Takže vytvoříme si příkaz lol:

 

CMD:lol(playerid,params[])

 

Pod to dáme { na další řádek dáme TAB a return 1; potom zas další řádek a }.

Nyní jsme si vytvořili samotný příkaz, ale bez žádné funkce tudíž to nic neudělá. ZATÍM! :d

 

Tákže nad return 1; si uděláme takovou funkci na maximální počet písmen

 

new string[136];

 

Dále si uděláme formát, aby to vypisovalo hráčův nick:

 

format(string,sizeof(string),"Hráč %s se směje!", PlayerName(playerid));

 

 A nakonec samoszřejmě funkce SendClientMessageToAll, aby to napsalo všem hráčům na serveru:

 

SendClientMessageToAll(0xFFFFFF,string);

 

 

To je vše k příkazu lol a nyní si uděláme ještě dialog ve kterém budou všechny pocity.

Takže začneme zase tím, že si uděláme příkaz třeba /pocity:

 

CMD:pocity(playerid,params[])
{
return 1;
}

 

Vložíme funkci aby to zobrazilo dialog:

 

ShowPlayerDialog(playerid,1457,DIALOG_STYLE_MSGBOX,"SEZNAM POCITŮ","/lol","Zavřít","");

 

1457 - ID dialogu

DIALOG_STYLE_MSGBOX - Styl dialogu

"SEZNAM POCITŮ" - Nadpis, který je nahoře v dialogu

 

ZÁVĚR:

 

Ták a tohle je už úplně vše k těm pocitům můžete si samozřejmě těch pocitů udělat víc princip je stejný akorát upravíte text :d

Já se loučím ČAU!

Edited by Stringer_CZE
Link to comment
Share on other sites

Toto neni návod ale len kopíračka:
 

stock PlayerName(playerid)// zjištění jména 1
{
new name[255];
GetPlayerName(playerid, name, 255);
return name;
}

Čo to robí ? čo to je ? ako to funguje ? prečo si zadefinoval name ? a meno aby obsahovalo 255 znakov ? neni snad limit iný ?

#include <zcmd> 

A načo slúži ZCMD ? čo tak odkaz na to ?
 

CMD:lol(playerid,params[])

Pod to dáme { na další řádek dáme TAB a return 1; potom zas další řádek a }.

Nyní jsme si vytvořili samotný příkaz, ale bez žádné funkce tudíž to nic neudělá. ZATÍM!  :d

Ty si to strašne dokonale vysvetlil čo tak to aj naznačiť ?
A čo je zase toto ?
 

format(string,sizeof(string),"Hráč %s se směje!", PlayerName(playerid));

Ako to funguje ? prečo sizeof(string) čo to robí ?
 

ShowPlayerDialog(playerid,1457,DIALOG_STYLE_MSGBOX,"SEZNAM POCITŮ","/lol","Zavřít","");

Toto si trošku vysvetlil...

Edited by eXpresS
Link to comment
Share on other sites

  • Hlavní moderátor

Co se týče formy návodu, tak je to sepsané dobře (což zejména moderátoři dokáží ocenit :d), ale obsah návodu za moc nestojí. Když to píšeš pro nováčky (1 hvězda z pěti), musíš to vysvětlovat krok po kroku a každou novou myšlenku, ale stejně jako u jiných, tak i u tebe mám pocit, že bys sám těch návodů pár potřeboval.

 

Prvně, zcmd není plugin, nýbrž include. To je soubor s kódem, který pomocí direktivy include připojuješ k jiným souborům. PlayerName je funkce, která vrací hráčův nick, a to tak, že jej zjistí pomocí funkce GetPlayerName, uloží do řetězce name a vrátí pomocí slova return (mimochodem, velikost řetězce name by měla být správně 25, maximální počet znaků v nicku je totiž 24).

 

A takhle bys ve vysvětlování pokračoval dál a dál, až bys došel ke konci. Chápeš, co tím chci říct? Pak by ti to lidé kladně ohodnotili a možná by ti to i moderátoři označili jako "ověřeno a schváleno". Teď to ale vypadá spíš tak, že to zapadne mezi ostatní návody, které jsou na tom podobně.

  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

Nějak hledám pointu návodu. Vlastně si jen vysvětlil, jak jinak můžeme použít 2 nejčastěji používané fce (formátování a odeslání zprávy). Je to prakticky to stejné, jako návod na tipy, nebo getinfo, akorát zaměním obsah.

 

A jen taková menší chybička: Není to tedy sice nějak extra chyba(jak pro koho), ale na 100% nebudu jediný, na kterou tě bude někdo upozorňovat, a to velikost pole u proměnné v fci, která vrací zjištěné jméno hráče(eXpresS such a pawner, že ano)(EDIT: ach... vidím, že mě vEnd předběhl :d...). I když stačí naprosto bohatě kolem 20, za MAX_PLAYER_NAME tě tady nikdo nezabije(určitě lepší než 255). To samé v tom příkaze lol. Stačí ti bohatě 37[ zpráva(16) + nick(20) + nul. znak(1) ].

Edited by SkiBig18
Link to comment
Share on other sites

Tento návod by nováček asi těžko pochopil. Kod jsi mohl dát do kodu. Ty dvě modré šipky vedle sebe. Skoro nic jsi nevysvětlil. A jméno nikdy nebude mít 255 znaků :d. Další návod na prd.

Link to comment
Share on other sites

Díky moc vEnd a SkiBig18 za rady jinak ještě bych se chtěl vrátit k tomu co psal vEnd.

Jak si tam psal že ZCMD není plugin ano to máš pravdu asi jsem se přepsal za to se omlouvám. A ještě jak si dole psal že to zapadne mezi ostatní návody tak to asi ano, ale mě to nevadí já stejně už od začátku s tím počítal. Přeci jen jsem takovej "Pokročilej začátečník" . Ale tak dělám to na tu kopíračku , aby si to ti nováčci hezky zkopírovali a potom to za nějakej čas pochopí možná i nazpaměť.

Link to comment
Share on other sites

No vytvoření příkazu v zcmd a umístění zprávy do příkazu je velice složité. -_-

#include <zcmd>

new bool:f=false;
#define SCMTAF(%0,%1,%2) do{ new _s[128]; format(_s, sizeof(_s), %1, %2); SendClientMessageToAll(%0, _s); } while(f)

stock PlayerName(playerid){
	new n[MAX_PLAYER_NAME];
	GetPlayerName(playerid, n, sizeof(n));
	return n;
}

CMD:lol(playerid, params[]) return SCMTAF(-1, "Hráč %s se směje tomuto návodu.", PlayerName(playerid));
Edited by rEf
Link to comment
Share on other sites

  • Administrátor

Jestli se ti ten Návod nelíbí tak na něj neodpovídej...

 

Pokud vím tak to není nikde podmíňěno

btw nerikam ze se mi nelibi jen rikam ze do návodu píšeš kraviny. Jméno v sampu je os vývojářů nadeinováno na 24 znaků. Samp client pustí jen 21 znaků. 

Troška matematiky

 

255*4 je 1024 bytů. 

21*4 je asi 80 bytů

 

To je ale rozdíl v paměti co ? 

A ted si ještě vynásob ty čísla poštem slotů resp pokud nemáš předefinováno MAX_PLAYERS tak si to vynásob 500 tolik paměti se ti naalokuje jen blbým číslem

Link to comment
Share on other sites

Jestli se ti ten Návod nelíbí tak na něj neodpovídej...

Svoboda projevu a vyjadřování ...

 

Tento návod je o ničem, nějaké začátečníky to může posunout špatným směrem. Jako to, že jméno má maximální délku 21 znaků. Tento návod bych smazal, nebo aspoň řádně upravil, aby tam nebyli takové, s prominutím, stupidní chyby.

Edited by PetrPaulik
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...