Jump to content

návod Scydovy YSI návody | #6 | YSI_Visual\y_commands + YSI_Players\y_groups [**]


Scydo

Recommended Posts

YSI_Visual\y_commands + YSI_Players\y_groups
*****

 V tomto návodě se hodí ukázat obojí, protože oba includy z knihovny můžou být výborně spojené, ale zároveň lze použít pouze ycmd. y_groups je právě takové rozšíření na skupiny a levely(příklad podobnosti: oprávnění z Minecraftu).

Jestliže se někdo chce naučit YSI, tak doporučuji si k ruce vzít také tento topic, protože obsahuje většinu kódu, na který je zaměřen i tento návod.

Začneme y_commands. Nejdříve si načteme include z knihovny samozřejmě:

#include <YSI_Visual\y_commands>

A následně, jeho volání příkazů je poměrně snadné, příklad:

YCMD:prikaz(playerid, params[], help) {
	//Sample code
	return 1;
}

S tím, že argumenty jsou jasné a to playerid pro hráče co příkaz zavolal, params[] pro parametry a help, to si ukážeme za chvilku.
Pozor! Každý příkaz se MUSÍ vracet přes hodnotu 0 či 1. Nikdy true či false. Je to z důvodu, že každý příkaz má několiko vlastních návratových hodnot(později si ukážeme ve funkci).

Argument help je argument, ktery se vyvolá poté, co hráč za příkaz napíše znak '?', příklad "help ?" nebo "kick ?". Do podmínky se vkláda tak, že znak hráč napsal správně(ostatní je klasifikované jako parametry). Ukázka použití:

#include <YSI_Server\y_colours>

YCMD:tajnyprikaz(playerid, params[], help) {
	if (help) return SendClientMessage(playerid, X11_YELLOW1, "Tento příkaz ti dá všechna práva !");
	return 1;
}

Pokud ale máte raději starý dobrý i-zcmd / zcmd styl, tak to y_commands ho také podporuje a to:

CMD:name(playerid, params[]) {
    // Sample code
	return 1;
}

Návod a více informací:

Akorát jediná nevýhoda je, že nepodporuje následný argument help. Takže, jestliže ho někdo chcete používát, musí i použít formu YCMD.
A kdo je nadšenec do zcmd, tak ví, že při nepoužívání params, tento argument lze vynechat. To bohužel y_commands nepodporuje(to samé s argumentem help).

Dále y_commands obsahuje i možnosti alternativních příkazů. Jsou dva způsoby, a to původní starý ve funkci OnGameModeInit() / OnFilterScriptInit() / OnScriptInit():

#include <YSI_Server\y_scriptinit>

public OnScriptInit() {
	Command_AddAltNamed("primarni", "sekundarni");
	return 1;
}

A nebo novější a zajímavější metoda a to rovnou nad příkaz do kódu:

YCMD:statistiky(playerid, params[], help) = stats;
YCMD:stats(playerid, params[], help) {
	//Sample code
	return 1;
}

Pokud jde o y_groups:
Jak jistě víme, že jedna z možností, jak kontrolovat, jestliže má hráč oprávnění můžeme podmínkou v každém příkazu, příklad:

#include <YSI_Server\y_colours>
YCMD:me(playerid, params[], help) {
	if (!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, X11_RED, "Nemáš dostatečné Admin oprávnění!");
	// Sample code
	return 1;
}

Teď to zkusíme s y_groups. Nejdříve si samozřejmě nahrajeme include z knihovny:

#include <YSI_Players\y_groups>

Dále si deklarujeme samotnou skupina. Každá skupina má vlastní tag, stejně jako u y_bit/y_playerarray:

new Group:Admins;

Ale pozor. Samotná proměnná, tedy skupina teď sama o sobě nic není, přesnějí je takzvaně UNDEF a nebude správně fungovat, dokud si jí nevytvoříme opět ve funkci OnGameModeInit() / OnFilterScriptInit() / OnScriptInit():

#include <YSI_Server\y_scriptinit>

public OnScriptInit() {

	Admins = Group_Create();
	return 1;
}

Funkce Group_Create() má ještě jeden argument a to jméno. Jde o jméno, které pak vrací jiná funkce(o ní později) a jde o jméno, které bude mít každý vlastnít dané skupiny (jestliže to uživatel nastaví). Můžeme jí tedy nastavit nejen jméno ale také i barvu. A jméno ani nemusíme nastavovat při vytváření. Můžeme si ho nastavit později dle sebe:

public OnScriptInit() {
	Admins = Group_Create("Admin");
	Group_SetColour(Admins, X11_RED);

	/*** A NEBO ***/

	Admins = Group_Create();		
	Group_SetName(Admins, "Admin");
	Group_SetColour(Admins, X11_RED);

Teď, následně jméno skupiny můžeme dostat pomocí funkce Group_GetName(), příklad použití:

#include <YSI_Coding\y_va>
new Group:gPlayers;

YCMD:skupina(playerid, params[], help) {
	if (Group_IsValid(gPlayers) == false) return SendClientMessage(playerid, -1, "Tato skupina není validní!");
	if (Group_GetPlayer(gPlayers, playerid) == true) va_SendClientMessage(playerid, X11_YELLOW1, "Jsi ve skupině %s", Group_GetName(gPlayers));
	else return SendClientMessage(playerid, -1, "Nejsi v této skupině!");
	return 1;
}

A y_groups mají ještě jedno zajímavou funkci a to:

public OnScriptInit() {
	gPlayers = Group_Create();
	Group_SetGlobalGroup(gPlayers, true);

Jde o funkci, která danou skupinu nastaví jako defaultní, teda všichni kdo se připojí, i ti co přijdou na serveru po prvé, tak se jím automaticky nastaví. Do takové skupiny se právě hodí hráči jako základ.

A teď zpět ke y_commands. Jak jsem říkal, oba includy lze výborně propojit.
Jedna taková funkce je způsob, který defaultně všem zakáže všechny příkazy:

	Group_SetGlobalCommandDefault(false);

A teď jsou dva způsoby, jak povolovat/zakazovat příkazy.

1. Povolit/zakázat všechny příkazy určité skupině:

	// Povolí celé skupině
	Group_SetCommandDefault(jmenoSkupiny, ALLOW);
	// Zakáže celé skupině
	Group_SetCommandDefault(jmenoSkupiny, DENY);

Poznámka: V původní verzi YSI, se namísto ALLOW/DENY používalo true/false. Y_Less říká, že vám to pravděpodobně bude také fungovat, nicméně, více doporučuje používat ALLOW/DENY, hlavně protože boolean styl vám vyhodí stejně varování o tagu, více zde.

2. Povolit/zakázat určitý příkaz celé určité skupině.

	Group_SetCommand(jmenoSkupiny, YCMD:prikaz, ALLOW);

	Group_SetCommand(jmenoSkupiny, YCMD:prikaz, DENY);

Nezapomenout používat tag YCMD: u jmén příkazů.
A teď nemusíme neustále používat podmínku u každého příkazu na oprávnění. :v:

A nebo pokud se nechceme upsat k smrti funkcema, lze použít i zajímavější metoda:

	GROUP_ADD<jmenoSkupiny> {
		@YCMD:help;
		@YCMD:stats;
		@YCMD:vip;
		@YCMD:credits;
	}

Hráči se daná skupina nastaví pomocí funkci Group_SetPlayer(). Příklad použití:

new 
	Group:gPlayers,
	Group:gDeathMatch;

public OnScriptInit() {

	gPlayers = Group_Create();
	Group_SetGlobalGroup(gPlayers, true);	
	gDeathMatch = Group_Create();
	Group_SetCommandDefault(gPlayers, ALLOW);
	Group_SetCommandDefault(gDeathMatch, DENY);
	Group_SetCommand(jmenoSkupiny, YCMD:leave, ALLOW);
	return 1;
}

YCMD:tymcerveny(playerid, params[], help) {
	// Sample code
	SendClientMessage(playerid, X11_GREEN, "Připojil ses do Team DeathMatch!");
	Group_SetPlayer(gDeathMatch, playerid, true);
	return 1;
}

Jestliže použijeme y_groups ke y_commands, tak se nám také otevírá další možnost návratové hodnoty u příkazu a to, jestliže právě nemá dostatečné oprávnění. Stejně jako i-zcmd, tak i y_commands mají na to vlastní funkci a to:

public e_COMMAND_ERRORS:OnPlayerCommandReceived(playerid, cmdtext[], e_COMMAND_ERRORS:success) {
	if(success == COMMAND_DENIED) {
		SendClientMessage(playerid, X11_RED, "Nemáš dostatečné oprávnění!");
		return COMMAND_OK;
	}
	if(success == COMMAND_UNDEFINED) {
		SendClientMessage(playerid, X11_WHITE, "Tento příkaz neexistuje! Zkus použít /help");
		return COMMAND_OK;
	}
	return COMMAND_OK;
}

A návratové hodnoty u příkazů/ve funkci můžou být následujicí:

	// Příkaz vrátil 0.
	COMMAND_ZERO_RET      = 0 ,
	// Příkaz se správně zavolal.
	COMMAND_OK            = 1 ,
	// Příkaz neexistuje
	COMMAND_UNDEFINED     = 2 ,
	// Nemá oprávnění na příkaz.
	COMMAND_DENIED        = 3 ,
	// Také nemá oprávnění + nedá dát znát, že existuje.
	COMMAND_HIDDEN        = 4 ,
	// Příkaz použil hráč, který by neměl existovat.
	COMMAND_NO_PLAYER     = 6 ,
	// Všechny příkazy jsou deaktivované pro totoho hráče.
	COMMAND_DISABLED      = 7 ,
	// Použit například '/' namísto '#'.
	COMMAND_BAD_PREFIX    = 8 ,
	// Nenapsal správně příkaz jako '/neco'
	COMMAND_INVALID_INPUT = 10,

Hlavní topic - odkaz

Edited by Scydo
  • Děkuji (+1) 2
  • Líbí se mi to! (+1) 2
Link to comment
Share on other sites

před 26 minutami, NuMeRe said:

Pěkný tutoriál. Doteď jsem nevěděl že přes YSI se dají dělat i příkazy. Díky moc.

Přes YSI se opravdu dá dělat prakticky cokoliv a obsahuje includy prakticky na všechno. I scripty jako například anticheat, závody nebo i registrace/přihlášení. Všechno to má už udělané, a uživatel s tím může pracovat.

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