Jump to content

Základy Adminscriptu.


Vidie

Recommended Posts

Zdravím,

 

Ukáži Vám Jednoduché základy Adminscriptu.

 

● Určitě začneme odlehčením Scriptu, Takže nadefinujeme si počet hráčů, který na Vašem serveru hraje. Např. Na Vašem serveru hraje průměrně 10 hráčů, tak si nadefinujeme pro jistotu 20. (Toto je jen Příklad, nadefinujte si své sloty).

 

#define MAX_PLAYERS_EX "Vaše sloty bez uvozovek."

 

● Takže, pokuď budete používát cyklus, tak aby zbytečně nezatěžoval Váš server, použijeme tuto definici. Jelikož na Vašem serveru bude např. online 10 hráčů, na serveru máte 500 slotů, tak je podle mě zbytečné projet všech 500, to zbytečně zatěžuje server.

 

Dalším krokem vytvoříme proměnu:

 

new AdminLevel[MAX_PLAYERS_EX];

 

● Zase, je zbytečné použít do Hranatých závorek počet slotů na Vašem serveru, jelikož budou nevyužité a zbytečné, tak použijeme "Šetřící proměnu".

Někteří mi možná vytknete že newy hodně žerou a že lepší je PVar, ale já nikdy PVary nepřijmu, jelikož jsou podle mého přehledné.

 

● Dalším krokem nadefinujeme DCMD a Zelenou Barvu. DCMD je lepší způsob CMD Příkazů.

 

#define COLOR_ZELENA 0x33AA33AA
#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

 

● Nyní si ukážeme jednoduchý příkaz pro smazání chatu. Chat se nepromaže úplně doslova, jen se pošle 65 zpráv hráčům, s prázdným textem, jinak to udělat asi nejde. Popisky jsou vedle daného řádku odděleny dvěma kolmými čárami. (//)

 

dcmd_clearchat(playerid, params[]) //Toto je začátek příkazu za dcmd_ je vždy, jaký příkaz se bude používát pro vykonání dané činosti.
{//Otevřeme příkaz.
#pragma unused params // Nebudeme využívat jiné místo než /Clearchat.
if(AdminLevel[playerid] > 0) //Když má AdminLevel vetší než 0.
{
	for(new c=0;c<65;c++) SendClientMessageToAll(-1," "); // 65 krát odešle všem hráčům prázdnou zprávu.
	new string[100], name[24]; // Definice textu zprávy a hráčova jména.
	GetPlayerName(playerid, name, sizeof(name)); //Zjistí hráčův nick.
	format(string, sizeof(string), "# Administrátor %s promazal chat.", name); //Nadefinujeme zprávu, která se odešle po vymazání chatu.
	SendClientMessageToAll(-1, string); //Odešle zprávu všem hráčům, kdo promazal chat.
}else{ //Nebo když má Admin Level menší nebo roven 0.
    SendClientMessage(playerid, -1, "Nemáš AdminLevel vetší než 0."); //Odešle zprávu hráči, že není administrátorem.
}//Ukončení zkoumání proměny.
return 1; //Ukončení příkazu pozitivně.
}//Ukončení příkazu.

 

A do Publicu OnPlayerCommandText, vložíme tento řádek.

 

dcmd(admins,6,cmdtext);

 

Takže by Public měl vypadat asi takto:

 

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

 

Vysvětlení pro dcmd(...)

 

● První kolonka, neoddělená čárkou "," s textem clearchat, je název příkazu, který budeme používat, takže /clearchat.

● Druhá kolonka, bude označená číslem, kolik má příkaz znamének, clearchat má 9.

● Do třetí kolonky napíšeme jen cmdtext.

● Když budete dělat vlastní příkaz, budeme vkládat do: dcmd(mujsuperprikaz, 14, cmdtext);

 

● A také Anticheat, je to jen základ, pro nedovolené zbraně a jetpack.

● Takže si vytvoříme nový Public, kterým budeme každou vteřinu kontrolovat stav hráče (Co má za stav, atd...)

 

● Forward, pro nový public:

 

forward Anticheat();

 

● Anticheat je název publicu.

 

public Anticheat() //Otevřeme public.
{//Otevřeme public 2. :-D
for(new i=0;i	{//Otevření cyklu
    if(IsPlayerConnected(i)) //Když je hráč daného ID, které cyklusem prijíždíme připojen.
    {//Otevření IsPlayerConnected.
		if(GetPlayerSpecialAction(i) == 2) //Zjistí, jestli nelítá s Jetpackem
		{ //Pokuď Ano.
			new string[256],name[24]; //Define.
			GetPlayerName(i, name, sizeof(name)); //Zjistí hráčovo jméno.
			format(string, sizeof(string), "# Hráč %s byl kicknut [ Důvod: JetPack ]",name); //naformatuje zprávu, že lítá s jetpackem a informuje tak hráče.
			SendClientMessageToAll(COLOR_GREEN, string); //Pošleme informační zprávu hráčům.
			Kick(i); //Vyhodíme hráče ze serveru.
		}
	}
}
}

 

● A do OnGameModeInit nebo OnFilterScriptInit (Podle toho jestli máte Gamemod nebo Filterscript) vložíme tento kod:

 

SetTime("Anticheat", 1000, 1);

 

● "Anticheat" je název publicu.

● 1000 je 1. sekunda v Milisekundách.

● 1 je opakování / 0 není opakování.

 

Takže public OnGameModeInit by měl vypadat Takto:

 

public OnGameModeInit()
{
       SetTime("Anticheat", 1000, 1);
return 1;
}

 

Doufám, že se Vám TUT líbil a něco jste si z něj odnesli. Děkuji za hodnocení, co mám zlepšit, co upravit nebo pokud jste našli chybu, reagujte na tento příspěvek, popřípadně chybu opravím.

 

S pozdravem,

 

nVidiaX.

Link to comment
Share on other sites

  • Replies 110
  • Created
  • Last Reply

Top Posters In This Topic

proč dáváš if(AdminLvl == Bla){}?

neni lepší

switch(AdminLvl[playerid])

{

case 1:

case 2:...

} ?

 

a MAX_PLAYERS už je nadefinované v a_samp nebo ja se to jmenuje

 

ještě bych přidal setadmin ;) nebo tak jen chrfind

Link to comment
Share on other sites

proč dáváš if(AdminLvl == Bla){}?

neni lepší

switch(AdminLvl[playerid])

{

case 1:

case 2:...

} ?

 

a MAX_PLAYERS už je nadefinované v a_samp nebo ja se to jmenuje

 

ještě bych přidal setadmin ;) nebo tak jen chrfind

 

1) Muže to tak byt

2) MaxPlayers mas pravdu ale sloty se musi pridat

3) SetAdmin.... na tom už dělám ;)

Link to comment
Share on other sites

proč dáváš if(AdminLvl == Bla){}?

neni lepší

switch(AdminLvl[playerid])

{

case 1:

case 2:...

} ?

 

a MAX_PLAYERS už je nadefinované v a_samp nebo ja se to jmenuje

 

ještě bych přidal setadmin ;) nebo tak jen chrfind

 

1) Muže to tak byt

2) MaxPlayers mas pravdu ale sloty se musi pridat

3) SetAdmin.... na tom už dělám ;)

 

1) Nic neřikam :d ale tamto neni tak přehledný

2) MAX_PLAYERS se sloty přidat nemusí, a když už tak je lepší #define MAX_PLAYERS_EX SLOTY

3) už se těšim ;)

4) proč to omg dáváš tak velký ?

if (AdminLevel[playerid] >= 3)// když jeho admin level je 3 nebo větší

{

SendClientMessage(playerid,COLOR_GREEN, "[ LEVEL 3 ]:");

}

stačí

if(AdminLevel[playerid] > 3) SendClientMessage(playerid, COLOR_GREEN, "[    LEVEL 3    ]:");

a mam error Undefined symbol COLOR_GREEN

Link to comment
Share on other sites

  • 3 weeks later...
Guest PROst_nfs

aj tak mi to neide "lol" "lol" "lol"

vždy je tam toto

C:\Documents and Settings\spravca\Desktop\AdminScript\AdminFix.pwn(168) : warning 235: public function lacks forward declaration (symbol "AntiCheat")
C:\Documents and Settings\spravca\Desktop\AdminScript\AdminFix.pwn(170) : error 017: undefined symbol "MAX_PLAYERS_EX"
C:\Documents and Settings\spravca\Desktop\AdminScript\AdminFix.pwn(174) : error 017: undefined symbol "PlayerName"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


2 Errors.

Link to comment
Share on other sites

Asi sem mel dopsat, ze se to nedava do zadnyho publicu.... Doporucuju ti dat

#define MAX_PLAYERS_EX 100

úplně nahoru a

stock PlayerName(playerid)
{
new j[64];
GetPlayerName(playerid,j,64);
return j;
}

úplně dolů až třeba na konec módu/fs

Link to comment
Share on other sites

Guest PROst_nfs

Dakujem :d:d:d

ešte bi si mi pomohol zostalo mi toto

C:\Documents and Settings\spravca\Desktop\AdminScript\AdminFix.pwn(162) : warning 235: public function lacks forward declaration (symbol "AntiCheat")
C:\Documents and Settings\spravca\Desktop\AdminScript\AdminFix.pwn(168) : error 017: undefined symbol "playerid"
Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


1 Error.

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