Vidie 5 Odesláno: 17. Únor, 2010 Share Odesláno: 17. Únor, 2010 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 More sharing options...
Guest D3luX Odesláno: 17. Únor, 2010 Share Odesláno: 17. Únor, 2010 No musim povedat dobra praca Link to comment Share on other sites More sharing options...
Vidie 5 Odesláno: 17. Únor, 2010 Author Share Odesláno: 17. Únor, 2010 No musim povedat dobra praca Dík Link to comment Share on other sites More sharing options...
biohazard545 0 Odesláno: 17. Únor, 2010 Share Odesláno: 17. Únor, 2010 No musim povedat dobra praca Ano , je to super 10/10 . Link to comment Share on other sites More sharing options...
ali007 1 Odesláno: 17. Únor, 2010 Share Odesláno: 17. Únor, 2010 je to super ale mohol by si dat aj setadmin ale dobre :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: Link to comment Share on other sites More sharing options...
Vidie 5 Odesláno: 17. Únor, 2010 Author Share Odesláno: 17. Únor, 2010 je to super ale mohol by si dat aj setadmin ale dobre :thumbup: :thumbup: :thumbup: :thumbup: :thumbup: OK vrhnu se dotoho Link to comment Share on other sites More sharing options...
AvestX 5 Odesláno: 17. Únor, 2010 Share Odesláno: 17. Únor, 2010 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 More sharing options...
Vidie 5 Odesláno: 17. Únor, 2010 Author Share Odesláno: 17. Únor, 2010 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 More sharing options...
ali007 1 Odesláno: 17. Únor, 2010 Share Odesláno: 17. Únor, 2010 je to super ale mohol by si dat aj setadmin ale dobre :thumbup: :thumbup: :thumbup: : OK vrhnu se dotoho diky helplo by mi to Link to comment Share on other sites More sharing options...
AvestX 5 Odesláno: 17. Únor, 2010 Share Odesláno: 17. Únor, 2010 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 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 More sharing options...
Vidie 5 Odesláno: 17. Únor, 2010 Author Share Odesláno: 17. Únor, 2010 SetLevel přidán Link to comment Share on other sites More sharing options...
AvestX 5 Odesláno: 17. Únor, 2010 Share Odesláno: 17. Únor, 2010 else { je nanic, zas o jeden řádek víc a o jednu závorku... else if používej .. Link to comment Share on other sites More sharing options...
Rayman 0 Odesláno: 17. Únor, 2010 Share Odesláno: 17. Únor, 2010 Pekne odvedená pracička :thumbup: Link to comment Share on other sites More sharing options...
Guest Denny159258 Odesláno: 17. Únor, 2010 Share Odesláno: 17. Únor, 2010 UPE SUPER CHLAPE! Du to vyskouset 15555000000 / 10 !! upe super ! Link to comment Share on other sites More sharing options...
Vidie 5 Odesláno: 17. Únor, 2010 Author Share Odesláno: 17. Únor, 2010 Díky... Avest: OMFG... Jedeto Link to comment Share on other sites More sharing options...
AvestX 5 Odesláno: 17. Únor, 2010 Share Odesláno: 17. Únor, 2010 Jede to hošku ale čim mín radku tim líp Link to comment Share on other sites More sharing options...
Guest Denny159258 Odesláno: 17. Únor, 2010 Share Odesláno: 17. Únor, 2010 hej chalani, kdo ma v PWN ten AS bez errorov?..pls poslite kto ta ma v pwn bez errorov Link to comment Share on other sites More sharing options...
Vidie 5 Odesláno: 17. Únor, 2010 Author Share Odesláno: 17. Únor, 2010 hej chalani, kdo ma v PWN ten AS bez errorov?..pls poslite kto ta ma v pwn bez errorov http://pastebin.com/m4f888c93 Link to comment Share on other sites More sharing options...
Guest Denny159258 Odesláno: 17. Únor, 2010 Share Odesláno: 17. Únor, 2010 a ty mena ale config?...ako je v exis tie logy atd, config..to jak mam dat? Link to comment Share on other sites More sharing options...
Vidie 5 Odesláno: 17. Únor, 2010 Author Share Odesláno: 17. Únor, 2010 a ty mena ale config?...ako je v exis tie logy atd, config..to jak mam dat? Bohužel to už není můj problém Link to comment Share on other sites More sharing options...
Guest PROst_nfs Odesláno: 8. Březen, 2010 Share Odesláno: 8. Březen, 2010 neviete ako nadefinovať do pawna toto??? "MAX_PLAYERS_EX" "PlayerName" je to s anticheatu Link to comment Share on other sites More sharing options...
Roox 1 Odesláno: 8. Březen, 2010 Share Odesláno: 8. Březen, 2010 #define MAX_PLAYERS_EX 100 stock PlayerName(playerid) { new j[64]; GetPlayerName(playerid,j,64); return j; } Link to comment Share on other sites More sharing options...
Guest PROst_nfs Odesláno: 8. Březen, 2010 Share Odesláno: 8. Březen, 2010 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 More sharing options...
Roox 1 Odesláno: 8. Březen, 2010 Share Odesláno: 8. Březen, 2010 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 More sharing options...
Guest PROst_nfs Odesláno: 8. Březen, 2010 Share Odesláno: 8. Březen, 2010 Dakujem 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 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