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


Dodatki SourceMod













