Witamy w Nieoficjalnym polskim support'cie AMX Mod X
Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
|
Zablokowanie działania funkcji, gdy admin jest na serwerze.
#1
Napisano 12.04.2015 14:01
#2
Napisano 12.04.2015 15:34
przelecieć pętlą po graczach?
#3
Napisano 12.04.2015 15:56
Albo nawet lepiej.
#include <amxmodx> #include <amxmisc> #define PLUGIN "New Plug-In" #define VERSION "1.0" #define AUTHOR "author" new bool:admin_online; public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) } public client_connect(id) { if(get_user_flags(id) & ADMIN_BAN && !admin_online) admin_online = true; } public client_disconnect(id) { if(get_user_flags(id) & ADMIN_BAN && admin_online) admin_online = false; } public Funkcja() { if(admin_online) return PLUGIN_CONTINUE; //Kod return PLUGIN_CONTINUE; }
Użytkownik oeN. edytował ten post 12.04.2015 15:57
#5
Napisano 12.04.2015 16:07
No fakt... Czyli bez pętli się nie obejdzie.
#6
Napisano 12.04.2015 16:08
Niekoniecznie...
Można przy connect'ie jakąś zmienną inkrementować, a przy disconnect'ie dekrementować i tyle
#7
Napisano 12.04.2015 17:45
Wersja z pętlą:
stock bool:isAdminOnServer() { for(new id = 0; id <= get_maxplayers(); id++) { if(!is_user_connected(id)) continue; if(!(get_user_flags(id) & ADMIN_BAN)) continue; return true; } return false; }
Powinno zadziałać, pisane z fona, mogą być błędy
#8
Napisano 12.04.2015 18:14
Po 1. pamiętajcie moi drodzy, że w client_connect NIE WIEMY, czy gracz jest adminem czy nie. Nawet w client_authorized możemy się tego nie dowiedzieć! (np gdy na serwerze jest amxbans, a admini są wczytywani z bazy danych).
Po 2. pamiętajcie moi drodzy, że w client_disconnect również możemy się nie dowiedzieć czy gracz opuszczający serwer był adminem (jego flagi mogły zostać wyczyszczone wcześniej).
Po 3. pamiętajcie moi drodzy, że admin może stać się adminem właściwie w każdej chwili... Zmieni nick, ktoś wywoła przeładowanie adminów na serwerze, admin będzie miał na jakiś czas i akurat mu się skończy...
Dlatego wersja z pętlą wydaje się lepsza, ale nie jest najlepsza. Najlepszą i najbardziej optymalną wersję osiągniemy gdy przypilnujemy wszystkich okoliczności, tj: złapiemy dokładnie moment w którym ktoś adminem zostaje, złapiemy dokładnie moment w którym adminem przestaje być oraz w inny sposób w client_disconnect sprawdzimy czy to właśnie admin opuścił serwer (być może jakaś tablica typu boolean w której będziemy trzymać kto był adminem?).
NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
#9
Napisano 12.04.2015 21:46
A czy client_infochanged tutaj sprawdzi czy graczowi zmieniły się flagi?
#10
Napisano 13.04.2015 05:28
Nie, ale złapiesz tym np okoliczność zmiany nicku co może wiązać się z przypisaniem flag admina.
Ja bym zostawił pętle, jest pewniejsza i o ile nie będziesz tego używał x razy na sekundę to nie powinno być problemu. Eventów związanych z przypisaniem uprawnień możesz wszystkich nie przewidzieć przez co będziesz miał dziurawy plugin.
Użytkownik grankee edytował ten post 13.04.2015 05:30
#11
Napisano 13.04.2015 09:37
Skąd taki pomysł?
Po 2. pamiętajcie moi drodzy, że w client_disconnect również możemy się nie dowiedzieć czy gracz opuszczający serwer był adminem (jego flagi mogły zostać wyczyszczone wcześniej).
#12
Napisano 13.04.2015 10:51
Spotkałem się z tym w jakiejś starej wersji amxbans, modowanej przez kogośtam... Z jakiegoś powodu w client_disconnect czyścił on flagi, a że amxbans jest zwykle na szczycie pluginów to inne pluginy w client_disconnect miały już puste flagi.Skąd taki pomysł?Po 2. pamiętajcie moi drodzy, że w client_disconnect również możemy się nie dowiedzieć czy gracz opuszczający serwer był adminem (jego flagi mogły zostać wyczyszczone wcześniej).
Można pokombinować z wykrywaniem użycia set_user_flags w jakiś sposób...Eventów związanych z przypisaniem uprawnień możesz wszystkich nie przewidzieć przez co będziesz miał dziurawy plugin.
NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
#13
Napisano 13.04.2015 22:42
Można by w sumie zrobić to tak, aby było dość wydajne
/* Plugin generated by AMXX-Studio */ #include <amxmodx> #include <amxmisc> #define PLUGIN "Admin online" #define VERSION "0.1" #define AUTHOR "Sn!ff3r" #define FLAG ADMIN_BAN new bool:adminOnline = false new maxPlayers public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) maxPlayers = get_maxplayers() } public admin_check(id) { if(!(get_user_flags(id) & FLAG)) // no update needed { return } adminOnline = false for(new player = 1; player <= maxPlayers; id++) { if(is_user_connected(player) && (get_user_flags(player) & FLAG)) { adminOnline = true break } } } public client_infochanged(id) { if(!is_user_connected(id)) { return PLUGIN_CONTINUE } new newname[32], oldname[32] get_user_name(id, oldname, 31) get_user_info(id, "name", newname, 31) if(!equali(newname, oldname)) { admin_check(id) } return PLUGIN_CONTINUE } public client_disconnect(id) { admin_check(id) } public client_authorized(id) { admin_check(id) }
Użytkownik Puchate edytował ten post 13.04.2015 22:43
#14
Napisano 22.04.2015 19:28
A z tym przeładowaniem adminów to musiało by wykryć komendę na serwerze amx_reloadadmins? I wtedy pętlą po graczach w celu sprawdzenia/aktualizacji licznika adminów?
BTW:
for(new player = 1; player <= maxPlayers; id++) { if(is_user_connected(player) && (get_user_flags(player) & FLAG)) { adminOnline = true break } }
pętla w nieskończoność, niepoprawna inkrementacja.
Nie id++, a player++
Użytkownik Sooldierr edytował ten post 22.04.2015 19:31
#15
Napisano 22.04.2015 22:14
pętla w nieskończoność, niepoprawna inkrementacja.
Fakt, mała pomyłka przy zmianie nazw zmiennych
Jeżeli chce mieć braną pod uwagę obsługę tego to tak, trzeba dodać obsługę tej komendy co można bez problemu zrobić bez ingerencji w plik admin.sma
A z tym przeładowaniem adminów to musiało by wykryć komendę na serwerze amx_reloadadmins? I wtedy pętlą po graczach w celu sprawdzenia/aktualizacji licznika adminów?
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych