WaterSmoke 0 Odesláno: 14. Říjen, 2016 Share Odesláno: 14. Říjen, 2016 Takže ahoj, Ukážu vám jednoduchý základ admin systému 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 More sharing options...
Hlavní moderátor vEnd 279 Odesláno: 14. Říjen, 2016 Hlavní moderátor Share Odesláno: 14. Říjen, 2016 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 More sharing options...
WaterSmoke 0 Odesláno: 14. Říjen, 2016 Author Share Odesláno: 14. Říjen, 2016 máš pravdu mělo by tam být else za2 ještě v onplayerconnect nad tím LoadLeve(playerid); by mělo být al[playerid] = 0; Link to comment Share on other sites More sharing options...
Scydo 397 Odesláno: 14. Říjen, 2016 Share Odesláno: 14. Říjen, 2016 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 More sharing options...
w.endelin 15 Odesláno: 15. Říjen, 2016 Share Odesláno: 15. Říjen, 2016 Takže ahoj, Ukážu vám jednoduchý základ admin systému 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č? 1 Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now