Jump to content

návod Návod - pro úplné začátečníky


Recommended Posts

Úvod

Takže zdravím všechny lidi kteří zabloudily na tento topic, tenhle tut je hlavně pro začátečníky takže se prosím zdržte komentářu jako ":D To je úplná blbost to by dokázal každý." tohle může napsat každý ale nějakým začátečníkům se to snad hodit může takže jdeme na věc.

 

Samotné příkazy a vysvětlivky

Jako první si můsíme v FS/GM najít

public OnPlayerCommandText(playerid, cmdtext[])

tento "kód" je takzvaný public do něj se píšou všechny funkce samotného pracování FS/GM (samozřejmně jen příkazy a dcmd definy).

 

A pro začátek je podle mě nejlepší si vysvětlit příkaz /kill a pak si ho vysvětlíme i v dcmd formě.

 

Takže ten public viz. nahoře defaultně vypadá takto:

public OnPlayerCommandText(playerid, cmdtext[])
{
	if (strcmp("/mycommand", cmdtext, true, 10) == 0)
	{
		// Do something here
		return 1;
	}
	return 0;
}

Místo /mycommand si dáme příkaz který chceme aby hráč napsal a vykonala se příslušná funkc. My si místo // Do something here dáme samotnou funkci na odebrání nebo přidání hráčovi zdraví. Místo // Do something here si dáme toto:

SetPlayerHealth(playerid, 0);

SetPlayerHealth = Tato funkce hráčovi přídá/odebere zdraví

playerid = to znamená že ten hráč který zadal příkaz tak tomu se funkce vykoná !! nikomu jinému !!

= tohle je "počet" zdraví 100 maximum 0 minimum pokud nastavíme na 0 umře na 100 plně se mu doplní zdraví

A pardon sem zapoměl můžeme si nastavit i aby se mu napsalo že úspěšně spáchal sebevraždu i barevně.

Pokud to chcete tak si pod SetPlayerHealth dejte toto:

SendClientMessage(playerid, 0xFFFF00AA,"Úspěšně si spáchal sebevraždu!");

SendClientMessage = Funkce která hráči vypíše zprávu

playerid = to znamená že ten hráč který zadal příkaz tak tomu se funkce vykoná !! nikomu jinému !!

0xFFFF00AA = toto je kód barvy ( v HEX kódu který si někde najděte třeba zde: http://pawno.cz/topic/24346-barvy-bez-prace/ )
"Úspěšně si spáchal sebevraždu!" = Toto je co chcete aby se hráči vypsalo za zprávu !! vždy musí zpráva obsahovat uvozovky !!
 

Tak to by byl příkaz na /kill a ve výsledku celý public bude vypadat asi takto:

public OnPlayerCommandText(playerid, cmdtext[])
{
	if (strcmp("/kill", cmdtext, true, 10) == 0)
	{
		SetPlayerHealth(playerid, 0);
                SendClientMessage(playerid, 0xFFFF00AA,"Úspěšně si spáchal sebevraždu!");
		return 1;
	}
	return 0;
}

A jak vytvořit příkaz je hodně způsobu třeba tento přes ten public nebo přes dcmd a to si teď ukážeme.

Takže kamkoliv do FS/GM !! né do publicu !! napíšeme:

dcmd_kill(playerid, params[])
{
	return 1;
}

to je samotný příkaz ale aby nám to nepsalo errory tak si úplně nahoru do FS/GM pod #include <a_samp> dáme toto:

#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

to je definice pro funkci dcmd aby nám fungovala a teď ještě jednu věc aby vám dcmd příkaz fungoval si musíme do publicu jak jsme dělaly první příkaz napsat jednu věc takže váš public by měl celkově vypdat asi takto:

public OnPlayerCommandText(playerid, cmdtext[])
{
	dcmd(kill,4,cmdtext);
	if (strcmp("/kill", cmdtext, true, 10) == 0)
	{
		SetPlayerHealth(playerid, 0);
		SendClientMessage(playerid, 0xFFFF00AA,"Úspěšně si spáchal sebevraždu!");
		return 1;
	}
	return 0;
}

a jak jsme si už předem vytvořily toto:

dcmd_kill(playerid, params[])
{
  return 1;
}

tak nad return 1; napíšeme toto:

SetPlayerHealth(playerid, 0);
SendClientMessage(playerid, 0xFFFF00AA,"Úspěšně si spáchal sebevraždu!");

Tak a vysvětlím vám poslední věc tohle:

dcmd(kill,4,cmdtext);

To je to jak jsme si vložily k starému příkazu takže

dcmd = typ příkazu

kill = jméno příkazu !! bez / !!

4 = počet písmen v slově kill

cmdtext = že se píše do chatu

 

Tak a to je všechno tak čau a doufám že jsem někomu pomohl :)

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

 

tento "kód" je takzvaný public do něj se píšou všechny funkce samotného pracování FS/GM (samozřejmně jen příkazy a dcmd definy).

 

Ten kod neni tzv. public ale je to callbackova funkce ktora je volana pri konkretnych eventoch, tato konkretne ked niekdo napise nejaky prikaz.

Pokial viem tak pawn nepodporuje neasted tj. vnorene fce tak ze ne, nepisu sa do nej ine fce.

 

 

 

 

Takže ten public viz. nahoře defaultně vypadá takto:

 

Neni to public, public je iba opravnenie fce, defaultne je private pokial viem.

 

 

 

 

playerid = to znamená že ten hráč který zadal příkaz tak tomu se funkce vykoná !! nikomu jinému !!

 

Tomu sa hovory parameter fce.

 

 

 

 

Takže kamkoliv do FS/GM !! né do publicu !! napíšeme:

 

Asi si myslel mimo tela fce ze?

Link to comment
Share on other sites

pokud chceš psát návody tak více rozepisuj
třeba né každý ví proč je na konci callbacku OnPlayTextCommand return 0;
ale v pžíkazu return 1; samozřejmě by to šlo logicky odvodit ale né každého by to napadlo
dále bych napsal co je strcmp jeho parametry a využití když to tam bude tak to neuškodí
že strcmp porovnává 2 stringy zda jsou stejné nebo ne na základě velikosti písmen početu znaků jestly jsou napsané znaky ve stringách stejné
1. parametr "/mycommand" provnávaný text uvozovky značí že je to string
2.cmdtext s čim porovnáváme 1 parametr
3.true // true znamená ,že nezáleží na velikosti písmen false naopak
4.10 //délka porovnávaného textu(lze vynechat)
return strcmp //co vrací funkce za hodnoty
teda by nás zajmalo jen return 0 využívá se že pokud je strcmp == 0(rovno) tak jsou stejné ale když strcmp != 0 (nejsou stejné)
0xFFFF00AA není hex kód barvy ale tzv pawn hex
samotný hex by tady vypadal
FFFF00
u pawn hex bych napsal z čeho se skládá
0x je daný začátek pawn hex(myslim nevim jistě)
FF(1.) je intenzita červené barvy
FF(2.) je intenzita zelené barvy
00 je intenzita modré barvy
AA je samotná intezita barvy pokud bude 00 nebude vidět(je průhledná) FF je maximální neprůhlednost
každý dvojčíslý z pawn hex kromě začátku tj 0x
nabývá hodnot 00 až FF
kadý znak z dvojčíslý jsou hodnoty
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
nejdříve se zvětšuje znak napravo z dvojčíslý
když dojde na F zvětší se o jednu ten levý znak z dvojčíslý

 

Link to comment
Share on other sites

 

0xFFFF00AA není hex kód barvy ale tzv pawn hex

 

LOL, preco by to nebol HEX kod farby? Akruad je to RGBA na miesto RGB. Si tu zas nevymyslajte nazvy niecoho co uz davno nazov ma

 

každý dvojčíslý z pawn hex kromě začátku tj 0x

nabývá hodnot 00 až FF

kadý znak z dvojčíslý jsou hodnoty

0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

nejdříve se zvětšuje znak napravo z dvojčíslý

když dojde na F zvětší se o jednu ten levý znak z dvojčíslý

 

Tomu sa vravy 16-kova sustava -_-

Link to comment
Share on other sites

Preco robis navody ak to sam nevies?? Mas tam napisane blbosri niekde, zle vysvetlene, nevues rozdiel medzi parametrom a funkciou, nechapes definovanie farieb v pawne, douc sa veci a tak :) nehovorim ze to nevies, hovorim ze to vies ale zle ;)

Link to comment
Share on other sites

LOL, preco by to nebol HEX kod farby? Akruad je to RGBA na miesto RGB. Si tu zas nevymyslajte nazvy niecoho co uz davno nazov ma

 

Tomu sa vravy 16-kova sustava -_-

tak je to upravený HEX pro účely pawn

já jsem nenapsal že to není HEX že to je tzv. "pawn HEX" samozřejmě v textu lez použít i obyč HEX

s tou 16 soustavou to jsem sice nevěděl jak se nazývá ale jak to funguje vím ale né každý to ví jak to funguje já jsem se pokusil vysvětlit systém barev

prostě jsem se snažil doplňit nedostatky daného tzv. "návodu"

 

Link to comment
Share on other sites

WTF o.O čo je na tom upravený HEX pre účel pawn? O.o

 

"0x" je iba symbol, ktorý umožňuje použitie hexadecimálnej sústavy (tak ako pri binárnej sa označuje "0b" pr. new 0b110)

tak sorry že nejsem Einstein, že nevim vše

prostě jsem nestudoval všechno no

Link to comment
Share on other sites

tak je to upravený HEX pro účely pawn

já jsem nenapsal že to není HEX že to je tzv. "pawn HEX" samozřejmě v textu lez použít i obyč HEX

s tou 16 soustavou to jsem sice nevěděl jak se nazývá ale jak to funguje vím ale né každý to ví jak to funguje já jsem se pokusil vysvětlit systém barev

prostě jsem se snažil doplňit nedostatky daného tzv. "návodu"

 

 

Ale on to neni ziadny "pawn hex" alebo obycajne RGBA hex cislo. viz. http://cs.wikipedia.org/wiki/RGBA

Obycajny HEX? co je obycajny HEX? Myslis ako farbu vo formate RGB?

 

A k tym farbam len tolko ze kazdy kanal RGBA ma 1 bajt, tj. hodnotu nadobudutelnu od 0 do 255 (0x0 - 0xFF)

Link to comment
Share on other sites

tak jsem se pomýlil no i to se stane někomu né přiliš vzdělanému v daném oboru v tomto případě ty barvy
já se o barvy nezajímal takže nestudoval ohledně jeho využití, definice apod. u počítačů, u programovacích nebo skriptovacích jazyků atd.

Link to comment
Share on other sites

  • 2 weeks later...

Otvor si Pawno (Ak ho nemáš stiahni si zo SA:MP stránky server a tam je zložka Pawno. Otvor Pawno.exe daj tam hore new, uprav tam ten "kód" a daj F5. Potom ten .amx prekopíruj do gamemodes alebo filterscripts (ak robíš mód, alebo len FS) a nezabudni to pripísať do server.cfg

Link to comment
Share on other sites

  • 3 months later...

Nahoře pod samp mám 

 

#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

 

V OnPlayerCommand.. mám toto

 

public OnPlayerCommandText(playerid, cmdtext[])
{
    if (strcmp("/kill", cmdtext, true, 10) == 0)
    {
        SetPlayerHealth(playerid, 0);
SendClientMessage(playerid, 0xFFFF00AA,"Úspěšně si spáchal sebevraždu!");
        return 1;
    }
    return 0;
}

 

A někde mimo mám 

 

dcmd_kill(playerid, params[])

{

SetPlayerHealth(playerid, 0);
SendClientMessage(playerid, 0xFFFF00AA,"Úspěšně si spáchal sebevraždu!");
    return 1;
}

 

 

 

Žádné errory všechno v pořádku ale při napsání /kill to napíše Unkown Command. Kde jsem udělal chybu soudruzi? Děkuji předem za odpověď pro uplného amatéra 

 

Link to comment
Share on other sites

Stačí když budeš mít jenom Tohle :)

public OnPlayerCommandText(playerid, cmdtext[])
{
    if (strcmp("/kill", cmdtext, true, 10) == 0)
    {
    SetPlayerHealth(playerid, 0);
    SendClientMessage(playerid, 0xFFFF00AA,"Úspěšně si spáchal sebevraždu!");
    return 1;
    }
    return 0;
}

To s tou definici s DCMD je to samé jako tohle :)

 

Když to budeš chtít přes DCMD tak dáš tu Definici Někam tohle

dcmd_kill(playerid, params[])
{
SetPlayerHealth(playerid, 0);
SendClientMessage(playerid, 0xFFFF00AA,"Úspěšně si spáchal sebevraždu!");
return 1;
}

A pod OnPlayerCommandText

{

dcmd(kill, 4, cmdtext); 
Link to comment
Share on other sites

public OnPlayerCommandText(playerid,cmdtext[])
 
{
    if (strcmp("/kill", cmdtext, true, 10) == 0)
    {
    SetPlayerHealth(playerid, 0);
    SendClientMessage(playerid, 0xFFFF00AA,"Úspěšně si spáchal sebevraždu!");
    return 1;
    }
    return 0;
}
 
Tohle mám v PWNU a stejně když jdu na ten pos_aný server po napsání /kill to napíše Unkown Command.
18hodin jsem nespal kvůli tomu protože chci na to přijít .. kde dělám chybu?

A ten druhý mám také dobře podívej se je to přesně.

oATUiH.jpg

A také při napsaní /kill to napíše Unkown command.

 

Pro mě je to ztracená odesea která je nemožná prostě tomu ani nevěřím že příkaz /kill jde vytvořit.

Podle mě se dá vytvořit pouze ve FilterScriptu prostě to nikdo nedokáže jinak :-)

Link to comment
Share on other sites

Nejde mě to neustále hahaha už mě s toho šibe.

Dělám příkaz /kill 7dní

Už mě s toho praskne žalud asi. Kašlu na to zůstanu u FileScriptu :d

Link to comment
Share on other sites


public OnPlayerCommandText(playerid,cmdtext[])
{
dcmd(kill,4,cmdtext);
return 1;
}
return 0;
}

dcmd_kill(playerid,params[])
{
#pragma unused params
SetPlayerHealth(playerid,-100);
SCM(playerid,0xff000fff,"[ ! ] {ffffff} spachal si samovraždu");
returrn 1;
}
Link to comment
Share on other sites

public OnPlayerCommandText(playerid,cmdtext[])
{
dcmd(kill,4,cmdtext);
return 1;
}
return 0;
}

dcmd_kill(playerid,params[])
{
#pragma unused params
SetPlayerHealth(playerid,-100);
SCM(playerid,0xff000fff,"[ ! ] {ffffff} spachal si samovraždu");
returrn 1;
}

Nadefinované SCM maš kde?

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...