Jump to content

návod Zakladní Admin Systém [Základ]


WaterSmoke

Recommended Posts

Takže ahoj,

Ukážu vám jednoduchý základ admin systému :d vše jsem dělal já až na příkaz ten do 35% sem dělal já sám xD

Pusťme se do toho :-)

#include <a_samp>//zakladní include
#include <dini>//ukladací include
#include <izcmd>//přikazový include

#define MAX_PLAYERS_EX 100 //zadejte si počet slotů které máte na serveru
new al[MAX_PLAYERS_EX]; //podmínka kterou vzniká celý admin systém

//========tak a pustíme se do práce========//
//========1 věc ukladání========//
stock SaveLevel(playerid)//ukladání admin levelu zapotřebí include dini
{
	new cesta[64];
	format(cesta, sizeof(cesta),"WS/%s.cfg", Meno(playerid));// 'WS' je složka kterou máte vytvořenou ve scriptfiles jestli nemáte  vytvořte jí
	if(!fexist(cesta)) dini_Create(cesta);
	{
		dini_IntSet(cesta, "ALevel", al[playerid]);//uložíme
	}
	return 1;
}

public OnPlayerDisconnect(playerid,reason)//když se hráč odpojí ze hry (/q)
{
	SaveLevel(playerid);//uloží mu to admin level
	return 1;
}
//========2.načitání========//

stock LoadLevel(playerid)//načitání admin levelu zapotřebí include dini
{
	new cesta[64];
	format(cesta, sizeof(cesta),"WS/%s.cfg", Meno(playerid));
	if(fexist(cesta))
	{
		al[playerid] = dini_Int(cesta,"ALevel");//načteme
	}
 	if(!fexist(cesta)) fremove(cesta);
	return 1;
}

public OnPlayerConnect(playerid)//když se hráč připojí
{
	LoadLevel(playerid);//načte mu to uložený admin level
        return 1;
}
//========3.Admin přikaz========//
CMD:vyhra(playerid,params[])//výhra přikaz
{//zacatek
 	if(al[playerid] < 3) return  SendClientMessage(playerid,  -1, "{ff0066}[ ES ] {ffffff}Musíš mít {00ccff}Dostatečný Level.");//když hráč má admin level stejný jak 3 a nebo i 3+ admin level např lvl 4 může použit příkaz
	if(!strlen(params)||!IsNumeric(params)) return SendClientMessage(playerid,-1,"{ff0000}[ ES ] Použití: {ffffff}/Vyhra [ ID ]"); //použití = když hráč zadal např.: /vyhra 0 500000 vyjede mu tato zpráva že je špatně příkaz
 	new string[1000];//[1000] = délka písma jinak string je použít pro format a pro zprávu všem může být použit i na jiné věci než je sendclientmessagetoall
	new CMD_ID = strval(params);//definice id zvoleného hráče
	if(!IsPlayerConnected(CMD_ID)) return SendClientMessage(playerid,-1,"{ff0066}[ ES ] {ffffff}Tento Hráč neni pripojený.");//když hráč není připojený
	format(string,sizeof(string),"{ff0000}Eventér {ffffff}%s {ff0000}udělil výhru hráčovi {ffffff}%s [{ff0000} 7.000.000{ffffff}]",Meno(playerid),Meno(CMD_ID));//format který použijeme níze pro zprávu všem
	SendClientMessageToAll(0x0000FFFF,string);//zpráva do chatu pro všechny barva, format který jsme použili víš
	GivePlayerMoney(CMD_ID, 7000000);//zakladní samp funcke pro davání pěněz POZOR!! ve rze 8 a nižší verze nejde
	return CMD_SUCCESS;//samotný return
}//konec


//=======potřebné věci=====//
stock IsNumeric(const string[])
{
   new length=strlen(string);
   if (length==0) return false;
   for (new i = 0; i < length; i++)
   {
      if ((string[i] > '9' || string[i] < '0' && string[i]!='-' && string[i]!='+')|| (string[i]=='-' && i!=0)|| (string[i]=='+' && i!=0)) return false;
   }
   if (length==1 && (string[0]=='-' || string[0]=='+')) return false;
   return true;
}

stock Meno(playerid)
{
   new pName[MAX_PLAYER_NAME];
   if(IsPlayerConnected(playerid))
   {
         GetPlayerName(playerid, pName, sizeof(pName));
   }
   return pName;
}
//=======KONEC=====//

Includy máte v attachments xD

Admin.rar

Link to comment
Share on other sites

  • Hlavní moderátor

Vyčerpávající návod, ale mám k němu několik výhrad:

1. Nesplňuješ kritéria pro ověřený návod. V praxi to znamená, že skončí mezi neověřenými, takže je malá šance, že si to někdo přečte. Abys zjistil, co nesplňuješ, rozklikni a přečti si tohle.

 

2. Máš tam chyby, jak v kódu, tak ve vysvětlovací části.

 

 

new al[MAX_PLAYERS_EX]; //podmínka kterou vzniká celý admin systém

Tohle určitě není podmínka.

 

 

 

if(!fexist(cesta)) dini_Create(cesta); { dini_IntSet(cesta, "ALevel", al[playerid]);//uložíme }

Nějak jsi opomněl na else, bez toho se ti to v blocích pod if vykoná vždy - neumíš větvit script.

 

 

 

if(!fexist(cesta)) fremove(cesta);

Odstraňuješ něco, co neexistuje. To nedává smysl, ne?

 

 

 

new string[1000];

Použít velikost 1000 na zprávu, která odešle ledatak 144 znaků, to je zbytečné zahlcování paměti.

 

 

Hele no, nevím, možná by ses měl sám podívat na pár místních návodů, než je sám začneš tvořit. Chybí ti elementární znalosti.

Link to comment
Share on other sites

No tak to vezmeme šupem:

 

1. dini... k tomu snad mám jenom otázku proč? Máš tam skvělý include na příkazy s parametry, velice rychlý a pak to celé poděláš tímhle. Lidi závislí na funkčnosti a rychlosti(jako např já) by tě za tohle zlynčovali, že mícháš dobré a blbé.

2. fce IsNumeric(která ti vrací true/false v případě, že daný řetězec je číslo) je docela užitečná fce, hodila by se vysvětlit a hlavně připsat, od koho je. Využíváš věci ze zdrojů jiných, než tvoje vlastní.

3. a u té fce Meno bych řekl, že je zbytečné zjišťovat, zda je hráč připojený. Voláš jí buď v příkazu, kde už kontroluješ id hráče a nebo v callbacku při připojování(ještě je ve fci vlastně), kde jsem zatím neslyšel, že by se připojilo něco jiného, než hráč s id.

 

4. Mimochodem, tohle nejsou základy admin systémů. To už je rovnou konkrétní tvorba admin příkazů. Pod základy si představím například proměnnou, u které vysvětlíš, že je to jen proměnná a ne už zázračně ten adminlevel, jak si všichni myslí, nebo co se hodí/musí využít za includy na to...

Link to comment
Share on other sites

Takže ahoj,

Ukážu vám jednoduchý základ admin systému :d vše jsem dělal já až na příkaz ten do 35% sem dělal já sám xD

Pusťme se do toho :-)

 

#include <a_samp>//zakladní include
#include <dini>//ukladací include
#include <izcmd>//přikazový include

#define MAX_PLAYERS_EX 100 //zadejte si počet slotů které máte na serveru
new al[MAX_PLAYERS_EX]; //podmínka kterou vzniká celý admin systém

//========tak a pustíme se do práce========//
//========1 věc ukladání========//
stock SaveLevel(playerid)//ukladání admin levelu zapotřebí include dini
{
	new cesta[64];
	format(cesta, sizeof(cesta),"WS/%s.cfg", Meno(playerid));// 'WS' je složka kterou máte vytvořenou ve scriptfiles jestli nemáte  vytvořte jí
	if(!fexist(cesta)) dini_Create(cesta);
	{
		dini_IntSet(cesta, "ALevel", al[playerid]);//uložíme
	}
	return 1;
}

public OnPlayerDisconnect(playerid,reason)//když se hráč odpojí ze hry (/q)
{
	SaveLevel(playerid);//uloží mu to admin level
	return 1;
}
//========2.načitání========//

stock LoadLevel(playerid)//načitání admin levelu zapotřebí include dini
{
	new cesta[64];
	format(cesta, sizeof(cesta),"WS/%s.cfg", Meno(playerid));
	if(fexist(cesta))
	{
		al[playerid] = dini_Int(cesta,"ALevel");//načteme
	}
 	if(!fexist(cesta)) fremove(cesta);
	return 1;
}

public OnPlayerConnect(playerid)//když se hráč připojí
{
	LoadLevel(playerid);//načte mu to uložený admin level
        return 1;
}
//========3.Admin přikaz========//
CMD:vyhra(playerid,params[])//výhra přikaz
{//zacatek
 	if(al[playerid] < 3) return  SendClientMessage(playerid,  -1, "{ff0066}[ ES ] {ffffff}Musíš mít {00ccff}Dostatečný Level.");//když hráč má admin level stejný jak 3 a nebo i 3+ admin level např lvl 4 může použit příkaz
	if(!strlen(params)||!IsNumeric(params)) return SendClientMessage(playerid,-1,"{ff0000}[ ES ] Použití: {ffffff}/Vyhra [ ID ]"); //použití = když hráč zadal např.: /vyhra 0 500000 vyjede mu tato zpráva že je špatně příkaz
 	new string[1000];//[1000] = délka písma jinak string je použít pro format a pro zprávu všem může být použit i na jiné věci než je sendclientmessagetoall
	new CMD_ID = strval(params);//definice id zvoleného hráče
	if(!IsPlayerConnected(CMD_ID)) return SendClientMessage(playerid,-1,"{ff0066}[ ES ] {ffffff}Tento Hráč neni pripojený.");//když hráč není připojený
	format(string,sizeof(string),"{ff0000}Eventér {ffffff}%s {ff0000}udělil výhru hráčovi {ffffff}%s [{ff0000} 7.000.000{ffffff}]",Meno(playerid),Meno(CMD_ID));//format který použijeme níze pro zprávu všem
	SendClientMessageToAll(0x0000FFFF,string);//zpráva do chatu pro všechny barva, format který jsme použili víš
	GivePlayerMoney(CMD_ID, 7000000);//zakladní samp funcke pro davání pěněz POZOR!! ve rze 8 a nižší verze nejde
	return CMD_SUCCESS;//samotný return
}//konec


//=======potřebné věci=====//
stock IsNumeric(const string[])
{
   new length=strlen(string);
   if (length==0) return false;
   for (new i = 0; i < length; i++)
   {
      if ((string[i] > '9' || string[i] < '0' && string[i]!='-' && string[i]!='+')|| (string[i]=='-' && i!=0)|| (string[i]=='+' && i!=0)) return false;
   }
   if (length==1 && (string[0]=='-' || string[0]=='+')) return false;
   return true;
}

stock Meno(playerid)
{
   new pName[MAX_PLAYER_NAME];
   if(IsPlayerConnected(playerid))
   {
         GetPlayerName(playerid, pName, sizeof(pName));
   }
   return pName;
}
//=======KONEC=====//

 

Includy máte v attachments xD

 

Přijde mi to spíše jako script, než návod, co si z toho nováček vezme? C+V? Děláš návod na něco, co sám nechápeš, bože proč? 

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