Patrony 0 Odesláno: 2. Listopad, 2010 Share Odesláno: 2. Listopad, 2010 Takže, koukal jsem tak po fóru co tu je a co tu nění a přemýšlel co bych mohl ve volném čase udělat za scriptík. No nakonec mě napadlo trochu si procvičit práci s časem a datumem a udělat časový ban. Funguje to tak, že zadáte na jak dlouho bude mít hráč ban (roky, měsíce, dny, hodiny, minuty a vteřiny). Protože je lepší ho mít vbudovaný do modu a ne do filterscriptu, tak přidělám i návod jak... 1. část - Download Celý script ke stažení (.pwn, .amx) i s include do pawna zde: http://uloz.to/xAE4idt/timeban-rar 2. část - Funkce v include include obsahuje 2 proměnné, které jsou dále použity v kódu: BanedID - ID hráče, který bude zabanovaný BanTime - čas, na jak dlouho bude ban udělen (ve formátu: R:M:D:H:M:S) A následující funkce: BanedIPListCreate() - tato funkce se volá automaticky, vytváří soubor kam se zapisují bany AddBanedIp(IP[],time[]) - tato funkce přidá do seznamu banů IP adresu s už naformátovaným časem (volá se automaticky) FindBannedIp(IP[]) - zkontroluje jestli je IP adresa v seznamu zabanovaných a případně vrátí příslušný řádek TimeFromString(time[], TimeArray[][]) - No převede čas z formátu R:M:D:H:M:S do 2 rozměrného pole CompareDates(TimeArray[][]) - tato funkce porovná aktuální datum s datem které je obsaženo v 2 rozměrném poli SetBanTime(bantime[]) - funkce, která z délky banu kterou zadáte vygeneruje datum unbanu IsPlayerBanned(playerid) - funkce zkontroluje jestli je IP zabanovaná nebo ne PlayerIP(playerid) - zjistí hráčovu IP a vratí její podobu GiveTimeBanToPlayer(adminid, process, time[]) - funkce, která používá dialog k nastavení délky banu apod... tato funkce je vlastně jen ukázkou toho jak script funguje. RemoveIp(IP[]) - odstraní zablokovanou IP ze seznamu (banlistu) BanPlayer(playerid, time[]) - okamžitě zablokuje hráčovu IP bez nutnosti zadávání hodnoty do dialogu. (Použití: BanPlayer(playerid, "0:0:0:2:0:0"); - zabanuje hráče na 2 hodiny) 3. část - Kód do modu/scriptu Definice dcmd kvůli příkazu pro ban: #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 Tento script funguje tak, že při "zabanování" hráče nebude doslova zabanován, ale bude jeho IP adresa zablokována. Proto musí být v public OnPlayerConnect(playerid) podmínka, která kontroluje zda je IP adresa připojujícího-se hráče zablokována nebo ne. Pokud je zablokována tak je hráč vykopnut. Script funguje tak, že pokud je IP zablokována, rovnou to zkontroluje, jestli už nevypršela doba banu. pokud už doba banu vypršela, pak to hráče na server pustí. pokud ne tak ho to vyhodí. public OnPlayerConnect(playerid) { if(IsPlayerBanned(playerid)) // kontroluje jestli je IP blokována { // pokud ano spustí se následující kód new string[255], IP[16], TimeArray[6][5]; format(IP, 255, "%s-",PlayerIP(playerid)); format(string, 255, "%s",FindBannedIp(IP)); strdel(string,0,strlen(IP)); TimeFromString(string, TimeArray); // získá datum unbanu if(CompareDates(TimeArray)) // porovná dnešní datum a datum unbanu { // pokud doba banu vypršela je odbanován format(string, 255, "%s-",PlayerIP(playerid)); RemoveIp(string); // odblokuje SendClientMessage(playerid, 0xFFFFFFF, "Doba tvého banu vypršela."); } else // pokud nevypršela je vykopnut { SendClientMessage(playerid, 0xFFFFFFF, "Byl jsi zabanován na tomto serveru!"); Kick(playerid); } } return 1; } Co se samotného banování týče, udělal jsem názornou ukázku toho jak by mělo vypadat. Hráč zadá příkaz /timeban ID a objeví se dialog, kam se zadá doba banu v poměrně nepraktickém formátu: R:M:D:H:M:S tedy Roky:Měsíce:Dny:Hodiny:Minuty:Sekundy Příkaz: public OnPlayerCommandText(playerid, cmdtext[]) { dcmd(timeban,7, cmdtext); return 0; } dcmd_timeban(playerid, params[]) { if (!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0xFF0404FF,"Příkaz pouze pro adminy RCON!"); // Zde si dejte vlastní podmínku podle toho, kdo bude moct příkaz použít if (strlen(params)==0) return SendClientMessage(playerid,0xFF0404FF,"Použij [/timeban ID]"); BanedID = strval(params); // nastaví se proměnná BanedID if(!IsPlayerConnected(BanedID)) return SendClientMessage(playerid,0xFF0404FF,"Hráč s tímto ID není připojen!"); GiveTimeBanToPlayer(playerid, 0, ""); // spustí se dialog atd.. return true; } Poté se klikne na tlačítko Ban a zobrazí se další dialog který je něco jako potvrzení banu a zároveň se může zadat i důvod banu. Proto se musí ještě nastavit public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == (2*MAX_PLAYERS)+playerid) // (2*MAX_PLAYERS)+playerid zajistí vždy originální ID dialogu { if(!response) return 0; if(strlen(inputtext) < 11 || strlen(inputtext) > 23) return SendClientMessage(playerid,0xFF0404FF,"Zadal jsi špatný formát!"); format(BanTime, sizeof(BanTime), "%s", inputtext); GiveTimeBanToPlayer(playerid, 1,BanTime); return 1; } if(dialogid == (3*MAX_PLAYERS)+playerid) { if(!response) return 0; new msg[1024], Pname[25], TimeArray[6][5], Aname[25]; GetPlayerName(BanedID, Pname, sizeof(Pname)); GetPlayerName(playerid, Aname, sizeof(Aname)); TimeFromString(BanTime, TimeArray); format(msg, sizeof(msg), "Hráč %s byl zabanován administrátorem %s na %s let, %s měsíců, %s dní, %s hodin, %s minut, %s sekund [Důvod: %s]",Pname,Aname,TimeArray[0],TimeArray[1],TimeArray[2],TimeArray[3], TimeArray[4], TimeArray[5], inputtext); SendClientMessageToAll(0xFF0404FF, msg); printf("[TimeBan] %s", msg); BanPlayer(BanedID, BanTime); // zablokuje IP hráče Kick(BanedID); // a vyhodí ho ze serveru } return 1; } pro ty zaostalejší: celé jsem to dělal sám a nic z toho není "copy" takže se toho ušetřete Link to comment Share on other sites More sharing options...
BestRanger 0 Odesláno: 2. Listopad, 2010 Share Odesláno: 2. Listopad, 2010 GOOD Link to comment Share on other sites More sharing options...
-other-emilian 0 Odesláno: 2. Listopad, 2010 Share Odesláno: 2. Listopad, 2010 to je dobrý 10/10 Link to comment Share on other sites More sharing options...
_Killer_ 1 Odesláno: 2. Listopad, 2010 Share Odesláno: 2. Listopad, 2010 fajnovo 10/10 Link to comment Share on other sites More sharing options...
Patrony 0 Odesláno: 3. Listopad, 2010 Author Share Odesláno: 3. Listopad, 2010 Ještě jsem přidal anketu a kdyby někdo chtěl tak vysvětlím i jednotlivé funkce Link to comment Share on other sites More sharing options...
DooM 93 Odesláno: 3. Listopad, 2010 Share Odesláno: 3. Listopad, 2010 Cooo Timeban tu este nebyl?? Skoda bych udelal :'( Link to comment Share on other sites More sharing options...
Patrony 0 Odesláno: 3. Listopad, 2010 Author Share Odesláno: 3. Listopad, 2010 Cooo Timeban tu este nebyl??Skoda bych udelal :'( jo byly tu nějaký pokusy... Link to comment Share on other sites More sharing options...
RmT_Kjuba 10 Odesláno: 3. Listopad, 2010 Share Odesláno: 3. Listopad, 2010 tomuhle říkám [TuT/Script] 10/10 Link to comment Share on other sites More sharing options...
StarRock 7 Odesláno: 5. Listopad, 2010 Share Odesláno: 5. Listopad, 2010 Twl GOOD tut :thumbup: ,akorát tam chybí podmínka na rcon (možna jsem ji přehlédl xD). Protože time je zbytecne zdlouhavý tak by se tam mohlo něco doladit př.když dam /Voteban id tak se zobrazí 6boxu na rok,měsíc,den,hodina,minuta,sec(tam kliknu třeba na hodina,otevře se další okno a tam bude počet hodin). GOOD 10/10 Link to comment Share on other sites More sharing options...
Patrony 0 Odesláno: 5. Listopad, 2010 Author Share Odesláno: 5. Listopad, 2010 Twl GOOD tut :thumbup: ,akorát tam chybí podmínka na rcon (možna jsem ji přehlédl xD). Protože time je zbytecne zdlouhavý tak by se tam mohlo něco doladit př.když dam /Voteban id tak se zobrazí 6boxu na rok,měsíc,den,hodina,minuta,sec(tam kliknu třeba na hodina,otevře se další okno a tam bude počet hodin). GOOD 10/10 jo ta podmínka na rcon tam není... dělal jsem to jen jako ukázku, každý si to může už udělat podle sebe. K tomu je to inc aby se to dalo použít u více věcí třeba u toho /voteban apd.. jinak dik Link to comment Share on other sites More sharing options...
StarRock 7 Odesláno: 5. Listopad, 2010 Share Odesláno: 5. Listopad, 2010 NZ a opravil si ji ? (nedival jsem se) Nebo ji neopravuj aspon to lamky okopčej a budu jim moct zabanovat celý server "lol" :rap: :rap: :rap: :rap: :rap: :rap: Link to comment Share on other sites More sharing options...
Danny 37 Odesláno: 5. Listopad, 2010 Share Odesláno: 5. Listopad, 2010 10/10 Link to comment Share on other sites More sharing options...
Patrony 0 Odesláno: 5. Listopad, 2010 Author Share Odesláno: 5. Listopad, 2010 NZ a opravil si ji ? (nedival jsem se) Nebo ji neopravuj aspon to lamky okopčej a budu jim moct zabanovat celý server "lol" :rap: :rap: Aspoň na 100 let "cheers" Link to comment Share on other sites More sharing options...
Guest dodusko Odesláno: 23. Listopad, 2010 Share Odesláno: 23. Listopad, 2010 7/10!!! Ban moze dat hoci kto! Link to comment Share on other sites More sharing options...
Danny 37 Odesláno: 23. Listopad, 2010 Share Odesláno: 23. Listopad, 2010 tak si to nastav na svoju podmienku Link to comment Share on other sites More sharing options...
Patrony 0 Odesláno: 23. Listopad, 2010 Author Share Odesláno: 23. Listopad, 2010 7/10!!! Ban moze dat hoci kto! Omg, asi ti to moc nemyslí... Necpal jsem tam podmínku, protože si ji tam může dát každej podle sebe. Si asi jediný komu to nedošlo Link to comment Share on other sites More sharing options...
Vike 0 Odesláno: 23. Listopad, 2010 Share Odesláno: 23. Listopad, 2010 Luxus 10/10 Link to comment Share on other sites More sharing options...
Guest [BJ]boban88 Odesláno: 23. Listopad, 2010 Share Odesláno: 23. Listopad, 2010 jj je to good Link to comment Share on other sites More sharing options...
RockY.Balboa 0 Odesláno: 24. Listopad, 2010 Share Odesláno: 24. Listopad, 2010 Pěkná pracička, chválím a palec nahoru :rap2: Link to comment Share on other sites More sharing options...
MajkX 16 Odesláno: 7. Prosinec, 2010 Share Odesláno: 7. Prosinec, 2010 Nechyba tam podmienka pre admina ? mohol si ju doplnit lebo teraz si pride nejaky jefo na serveru , a vsetkych zbanuje IsPlayerAdmin(playerid) si mohol dat ale aj tak je to dobre, davam 9,5/10 Link to comment Share on other sites More sharing options...
Patrony 0 Odesláno: 7. Prosinec, 2010 Author Share Odesláno: 7. Prosinec, 2010 Nechyba tam podmienka pre admina ? mohol si ju doplnit lebo teraz si pride nejaky jefo na serveru , a vsetkych zbanuje IsPlayerAdmin(playerid) si mohol dat ale aj tak je to dobre, davam 9,5/10 Už si děláte srandu ne? KAŽDEJ si tam snad dokáže dát podmínku... kašlu na vás jdu ji tam dát, komentáře typu "nemáš tam podmínku pro admina" mě už štvou. Link to comment Share on other sites More sharing options...
Guest Odesláno: 7. Prosinec, 2010 Share Odesláno: 7. Prosinec, 2010 jeb na tú bandu kokotov keď tam nevedia dať podmienku tak je to stoka... Link to comment Share on other sites More sharing options...
JoZQo 1 Odesláno: 26. Leden, 2011 Share Odesláno: 26. Leden, 2011 prosím vás kde sa tam mení príkaz? v jakom riadku? možno som slepý, neviem to tam nájsť. Link to comment Share on other sites More sharing options...
DooM 93 Odesláno: 26. Leden, 2011 Share Odesláno: 26. Leden, 2011 prosím vás kde sa tam mení príkaz? v jakom riadku? možno som slepý, neviem to tam nájsť. pravdepodobne neovladas dcmd dcmd_timeban(playerid, params[]) Link to comment Share on other sites More sharing options...
JoZQo 1 Odesláno: 26. Leden, 2011 Share Odesláno: 26. Leden, 2011 ja ne ze neovladam dcmd ja neovladam pawno :D:D 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