Jump to content

script Dynamic GroupSystem


Scydo

Recommended Posts

DYMAMIC GROUPS SYSTEM
není potřeba žádný jiný include!

VÝHODA

Zdravím vás u include z nacistické dílny. Největší výhoda je, že include nemá řádné zásadní možné zpracování(například ukládání údajů). Uživatel tak má naprostý přehled, nemusí se vrtat v několika funkcích o desítkách parametrů, takže může kreativně vytvářet spousty systémů, jak AdminSystém či VipSystém.

SEZNAM FUNKCÍ

  • IsGroupExist
  • GetGroupID
  • GetFreeGroup
  • GetGroupCount
  • GetGroupIdef
  • GetGroupName
  • GetGroupObjName
  • GroupInConsoleCheck
  • CreateGroup
  • SetPlayerGroup
  • SetMainGroup
  • bool:GetPlayerGroup
  • RemovePlayerGroup
  • GetPlayerGroupEx

VYSVĚTLENÍ FUNKCÍ

CreateGroup
Parametry (sGroup[], sObjName[], Idef)

Základní funkce. Vytváří skupinu. Nejdůležitější pro uživatele je parametr sGroup. Pracuje se s ním stejně jako s id, akorát slovně. Parametr sObjName značí jméno pak ve hře. Idef je spíše jen číslo, ale může se brát i jako level či pořadí.

Použití:



public OnFilterScriptInit() {

	CreateGroup("vip", "{FFFF00}VIP", 1);
	CreateGroup("premium", "{00FF00}Premium", 1);
	CreateGroup("helper", "{0000FF}Pomocník", 2);
	CreateGroup("admins", "{FF0000}Administrátor", 3);
	return 1;
}

GetGroupID
Parametry (sGroup[])
Systémová funkce - Zjistí ID skupiny a vrátí jí. Pokud jí nenajde, vrátí -1.

Použití:



public OnFilterScriptInit() {

	/* Globál = id 0 */
	CreateGroup("vip", "{FFFF00}VIP", 1); /* VIP = id 1 */
	CreateGroup("premium", "{00FF00}Premium", 1); /* Premium = id 2 */

	new premium_id = GetGroupID("premium"); /* Vrátí 2 */

GetFreeGroup
Parametry (Žádne parametry)
Systémová funkce - Zjistí ID volného slotu pro skupinu a vrátí jí.

Použití:



	new 
		freeid = GetFreeGroup(); /* Vrátí 1 */
	CreateGroup("vip", "{FFFF00}VIP", 1);
	CreateGroup("premium", "{00FF00}Premium", 2);
	new 
		freeid2 = GetFreeGroup(); /* Vrátí 3 */

GetGroupCount
Parametry (Žádne parametry)
Systémová funkce - Zjistí počet uživatelem vytvořených skupin a vrátí tento počet.

Použití:



	CreateGroup("vip", "{FFFF00}VIP", 1);
	CreateGroup("premium", "{00FF00}Premium", 1);
	CreateGroup("helper", "{0000FF}Pomocník", 2);
	CreateGroup("admins", "{FF0000}Administrátor", 3);
	new 
		count = GetGroupCount(); /* Vrátí 4 */

GroupInConsoleCheck
Parametry (Žádne parametry)

Použití:

 

public OnFilterScriptInit() {

	CreateGroup("vip", "{FFFF00}VIP", 1);
	CreateGroup("helper", "{00FF00}Helper", 2);
	CreateGroup("admin", "{FF0000}Admin", 3);
	CreateGroup("owner", "{FF0000}Owner", 4);
	GroupInConsoleCheck();
	return 1;
}

 



Ed8M.png

IsGroupExist
Parametry (sGroup[])
Zjistí, zda daná skupina existuje. Jesltiže ano, vrátí true, jinak vrátí false.

Použití:

 

	if (IsGroupExist("admins")) print("Admine existuji !");

GetGroupName
Parametry (iGroup_ID)
Vrátí zjištěné jméno skupiny z id.

Použití:



public OnFilterScriptInit() {
	
	CreateGroup("skupina1", "Skupina1", 0);
	CreateGroup("skupina2", "Skupina2", 0);
	new grpid = GetGroupName(2); /* Vrátí "skupina2" */

SetMainGroup
Parametry (sGroup[], sObjName[])
Podobně jako CreateGroup, akorát nastaví globální/hlavní skupinu, kterou bude mít defaultně každý hráč.

Použití:



public OnFilterScriptInit() {
	
	SetMainGroup("players", "Hráč");

GetGroupIdef
Parametry (sGroup[])
Vrátí idef číslo dané skupiny.

Použití:



	CreateGroup("admins", "Admins", 3);
	new 
		sString[34 + 1];
	format(sString, sizeof(sString), "Administrátoři mají nyní level %i", GetGroupIdef("admins"));
	SendClientMessage(playerid, -1, sString); /* Administrátoři mají nyní level 3 */

GetGroupObjName
Parametry (sGroup[])
Vrátí jméno ve hře dané skupiny.

Použití:



	CreateGroup("admins", "Admins", 3);
	new 
		sString[20 + 1];
	format(sString, sizeof(sString), "%s má level %i", GetGroupObjName("admins"), GetGroupIdef("admins"));
	SendClientMessage(playerid, -1, sString); /* Admins mají nyní level 3 */

SetPlayerGroup
Parametry (playerid, sGroup[])
Nastaví hráči danou skupinu.

Použití:



public OnFilterScriptInit() {
	
	CreateGroup("vip", "{FFFF00}VIP", 1);
	return 1;
}

public OnPlayerSpawn(playerid) {
	
	if (Zazrak[playerid]) SetPlayerGroup(playerid, "vip");
	return 1;
}

GetPlayerGroup
Parametry (playerid, sGroup[])
Zjistí zda hráč je v dané skupině. Jestliže je, vrátí true, jinak vrátí false

Použití



public OnFilterScriptInit() {
	
	CreateGroup("admins", "{FF0000}Admins", 1);
	return 1;

CMD:hp(playerid, params[]) {
	
	if (!GetPlayerGroup(playerid, "admins")) return SendClientMessage(playerid, -1, "Nemáš dostatečné oprávnění !");

GetPlayerGroupEx
Parametry (playerid)
Vrátí id skupiny, ve které se hráč nachází.


RemovePlayerGroup
Parametry (playerid)
Odstraní skupinu danému hráči.

Použití




RemovePlayerGroup(playerid, "admins");

UKÁZKY

sa_mp_027.png
sa_mp_026.pngsa_mp_024.pngsa_mp_025.png
sa_mp_028.png

NĚKOLIK UKÁZEK POUŽITÍ

JEDNODUCHÉ NASTAVENÍ SKUPIN VE HŘE

 


/* i-zcmd ! */
CMD:setlvl(...) {
	
	/* Some code */
	new 
		iId,
		iLevel
	if (sscanf(..., "ii", iId, iLevel)...) return SendClientMessage(...);
	SetPlayerGroup(playerid, GetGroupName(iLevel));
	/* Some code */
}

CMD:setowner(...) {
	
	/* Some code */
	return SetPlayerGroup(playerid, "owners");
}

 



JEDNODUCHÁ KONTROLA SKUPINY/IDEFU HRÁČE

 

	if (!GetPlayerGroup(playerid, "admins")) 
		return SendClientMessage(playerid, -1, "Nemáš dostatečné oprávnění !");

		/* NEBO */

	if (GetGroupIdef(GetGroupName(GetPlayerGroupEx(playerid))) < 3) 
		return SendClientMessage(playerid, -1, "Nemáš dostatečné oprávnění !");

 




TITUL V CHATĚ PRO VŠECHNY HRÁČE

 

public OnFilterScriptInit() {

	SetMainGroup("players", "{575454}Hráč");
	return 1;
}

public OnPlayerText(...) {

	if (GetPlayerGroup(playerid, "players")) {

		new 
			sString[144 + 1];
		format(sString, sizeof(sString), "%s {FFFFFF}[ %s {FFFFFF}]: %s", PlayerName(playerid), GetGroupObjName("players"), text);
		SendClientMessageToAll(GetPlayerColor(playerid), sString);
		return 0;
	}

 



TITUL VŠECH SKUPIN V CHATĚ

 

public OnFilterScriptInit() {

	SetMainGroup("players", "{575454}Hráč");
	CreateGroup("helper", "{00FF00}Helper", 3);
	CreateGroup("admin", "{FF0000}Admin", 4);
}

public OnPlayerText(...) {

	/* Some code */

		new 
			sString[144 + 1];
		format(sString, sizeof(sString), "%s{FFFFFF}[ %s {FFFFFF}]: %s", PlayerName(playerid), GetGroupName(GetPlayerGroupEx(playerid)), text);
		SendClientMessageToAll(GetPlayerColor(playerid), sString);
		return 0;
	}/* Some code */

 



JEDNODUCHÝ VIP SYSTÉM

 

	if (/* Vypršel čas */) RemovePlayerGroup(playerid);

	/* Some code */

	SetPlayerGroup(playerid, "vips");

	/* Some code */

	if (!GetPlayerGroup(playerid, "vips")) return SendClientMessage(/* Nejsi VIP */

 



DOWNLOAD

Stačí include vložit do složky pawno/include

Pawno Pastebin


Enjoy.

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

Tím asi myslí, že nepoužiješ jeřáb na přesunutí počítače :d

 

Vskutku :d

 

a to je spatne ?

Ne, ale chtěl jsem vytvořit samostatný include. Bez knihovny.

Link to comment
Share on other sites

  • Hlavní moderátor

Tak gratuluji, ten kód je přesně to, co jsi z něho chtěl mít – mindf*ck. Když se odvrátím od Scydovských zhovadilostí typu then*, (!true), do-while (ten bych tam nedával), pvar0 apod., tak se dá říct, že je to poměrně čistá práce.

 

Jasně, máš tam neošetřeno tohle:


stock
	GetFreeGroup() return (GetGroupCount() + 1);


Ale to už je třeba touto dobou opravené (jinak Bůh s těmi, co vytvoří hodně skupin). Taky by některé věci šly udělat lépe (zjišťování hráčovy skupiny pomocí porovnávání řetězců, více skupin pro hráče apod.), ale budiž.

 

Za kód máš -∞/10, za script 6/10.

 

P. S. Jinak co musím uznat, tak je to jedna z těch hezčích prezentací na fóru, fakt že jo. Žádné křiklavé barvy, Comic Sans (HighPrinte, ahoj :d) a nestrukturované úseky.

Link to comment
Share on other sites

Dobrý deň. 
Podľa môjho názoru, je to veľmi pekná práca. Konečne niekto uvažuje, aj nad tím, že YSI je nepotrebné, a keď chce niekto iba mlieko, nezoberie si predsa celú kravu. 
 

Link to comment
Share on other sites

  • Administrátor

Dobrý deň. 

Podľa môjho názoru, je to veľmi pekná práca. Konečne niekto uvažuje, aj nad tím, že YSI je nepotrebné, a keď chce niekto iba mlieko, nezoberie si predsa celú kravu. 

 

 

Pawneři se dělí na :

1. Ti kteří mají rádi YSI

2. Ti kteří s YSI neumí 

 

 

:d

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

Pěkný, hezky zpracovaná prezentace. Dobrá práce bratře nacisto :d
  

 

Díky. Nechť žije říše.

 

Dobrý deň. 

Podľa môjho názoru, je to veľmi pekná práca. Konečne niekto uvažuje, aj nad tím, že YSI je nepotrebné, a keď chce niekto iba mlieko, nezoberie si predsa celú kravu.

Ale já neříkám, že je YSI nepotřebné nebo blbné. YSI je úžasné. Jenom jsem udělal jednu z jeho vymožeností, bez použití knihovny.

Link to comment
Share on other sites

  • Hlavní moderátor

Pawneři se dělí na :

1. Ti kteří mají rádi YSI

2. Ti kteří s YSI neumí 

 

 

:d

To mi tak hlavou proběhla vzpomínka, jak jsi jednoho dne nadával v chatu, jak ti něco s YSI nefunguje. :HAhaa:

Link to comment
Share on other sites

strasny kod
Citatelnost 0, rozsiritelnost 0, pomenovanie premennych a funkcii 0, ziadne komentare ktore by pripadne vysvetlili kod, makra definovane v strede suboru
ako spominal vend, slaba bezpecnost, napr. ak si vytvorim grupu s nazvom ako uz grupa existuje, tak sa nijak nedozviem ze sa daco buglo ne? Vzdy by mi bralo pri vyhladavani ptm tu prvu grupu s rovnakym nazvom.
Btw ak vytvorim nejaku grupu este pred main grupou, tak ta main grupa ju prepise nie, kedze pouziva staticky

format(GInfo[0][sGroupName], MAX_GROUP_NAME_LEN, sGroup);
format(GInfo[0][sGroupObj], MAX_GROUP_NAME_OBJ_LEN, sObjName);

musis potom pri GetGroupCount() zacat od indexu 1, nie 0 ak sa nemylim


Inak uzitocnost 7, napad zaujimavy 6 a za aktivitu na fore 11/10.
Takze tak no, kod mohol byt lepsi, ale inak celkovo je to v pohode, 7/10.

  • Líbí se mi to! (+1) 1
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...