Czy podając w cmd_access() sume bitową flag, funkcja sprawdzi czy gracz ma wszystkie flagi czy tylko jedną z podanych ?
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.
|

Działanie cmd_access
#1
Napisano 01.08.2019 20:33
#2
Napisano 01.08.2019 20:35
💸 SellYourSkins.com - Łatwo sprzedaj swoje skiny do CS:GO
💸⇄🃏 Automatyczny Bot Levelowania Steam - LVLUPSteam.com
🛒Coinsy CSGOPolygon Za SMS, PSC, Przelew - CoinSell.pro
Twój Sklep CS2 - CSGOPAKA
Coinsy do CSGOPolygon, CSGO500, CSGOEmpire - CSGOLombard.com
💸 Graj w CS2 / CS 1.6 i zarabiaj - BoostProject.pro
CS2 Gambling Sites and Free Betting Codes - DreamCodes.gg
Otwieraj skrzynki i wygrywaj najlepsze skiny CS2 na SkinsProject.gg
🤑 Accept CS2 skins for online payments and donations - SkinsMoney
Płatności SMS Premium Rate oraz Direct Biling - SimPay.pl
Szukasz noclegu? Kwatery, noclegi, tanie noclegi, wakacje oferty, wczasy nad jeziorem - RuszajWPolske.pl
#3
Napisano 01.08.2019 20:54
stock cmd_access(id, level, cid, num, bool:accesssilent = false) { new has_access = 0; if ( id==(is_dedicated_server()?0:1) ) { has_access = 1; } else if ( level==ADMIN_ADMIN ) { if ( is_user_admin(id) ) { has_access = 1; } } else if ( get_user_flags(id) & level ) { has_access = 1; } else if (level == ADMIN_ALL) { has_access = 1; } if ( has_access==0 ) { if (!accesssilent) { #if defined AMXMOD_BCOMPAT console_print(id, SIMPLE_T("You have no access to that command.")); #else console_print(id,"%L",id,"NO_ACC_COM"); #endif } return 0; } if (read_argc() < num) { new hcmd[32], hinfo[128], hflag; get_concmd(cid,hcmd,31,hflag,hinfo,127,level); #if defined AMXMOD_BCOMPAT console_print(id, SIMPLE_T("Usage: %s %s"), hcmd, SIMPLE_T(hinfo)); #else console_print(id,"%L: %s %s",id,"USAGE",hcmd,hinfo); #endif return 0; } return 1; }
get_user_flags(id) & level
Wystarczy, że jedną będzie mieć.
Natomiast można tą funkcją sprawdzić czy gracz nie ma żadnej flagi z podanych
#4
Napisano 01.08.2019 21:06
get_user_flags(id) & level
->
get_user_flags(id) & (ADMIN_VOTE|ADMIN_KICK)
Z tego powinno wynikać że funkcja sprawdza czy gracz ma wszystkie flagi (?)
#5
Napisano 01.08.2019 21:08
Nie, bo tam jest operator iloczynu bitowego a nie zwykłe porównanie.
Jak chcesz sprawdzić czy gracz ma dane flagi uzyj
get_user_flags(id) == level
#6
Napisano 01.08.2019 21:28
No nie tak łatwo bo na serwerze lokalnym mam wszystkie flagi. Ale masz racje, funkcja sprawdzi czy gracz ma jedną z flag.
Jeszcze jedno pytanie. Zastanawiam się czy operator '==' sprawdzi czy gracz ma dokładnie takie flagi jak po operatorze czy tylko wszystkie z tych które podam ? Wydaje się że '==' sprawdzi czy wartość get_user_flags(id) jest równe np. 516 (c,i) ale chyba ten operator nie działa tak przy pracy na bitach ?
#7
Napisano 01.08.2019 21:35
No nie tak łatwo bo na serwerze lokalnym mam wszystkie flagi.
Przeciez zmiana tego stocka to dwie sekundy
Zadziała, przeciez flagi to tak naprawdę kolejne potegi dwojki.
#8
Napisano 01.08.2019 21:39
No nie tak łatwo bo na serwerze lokalnym mam wszystkie flagi.Przeciez zmiana tego stocka to dwie sekundy
Zadziała, przeciez flagi to tak naprawdę kolejne potegi dwojki.
Czyli taka linijka:
get_user_flags(id) == (ADMIN_VOTE|ADMIN_KICK)
Sprawdzi czy jedynymi flagami gracza są 'c' i 'i' ? A więc jak sprawdzić w ten sposób czy gracz ma wszystkie z podanych flag ale niekoniecznie tylko te podane ?
#9
Napisano 01.08.2019 21:49
new f = read_flags('abc') get_user_flags(id) & f == f
#11
Napisano 01.08.2019 22:40
@asiorr w takim razie w dokumentacji jest zły opis działania has_flag(), to samo z access() przy którym pisze że gracz musi mieć wszystkie z podanych flag.
Jednak has_flag() powinno sprawdzać czy gracz ma jedną z flag, w amxmisc.inc widać że ta funkcja używa iloczynu bitowego do sprawdzania flag.
Użytkownik csMaster edytował ten post 01.08.2019 22:49
#12
Napisano 01.08.2019 23:49
U mnie był problem bo czasami z niewiadomych przyczyn coś nadawało graczom pare flag, potrzebowałem szybko się z tym uporać i też kombinowałem jak sprawdzić czy gracz posiada kilka flag na raz, na szybko ale skutecznie zadziałało to:
if((get_user_flags(id) & ADMIN_VOTE) && (get_user_flags(id) & ADMIN_KICK))
i tak po kolei jakie flagi chcesz, has_flag w moim wypadku też się nie sprawdzało jakkolwiek bym tego nie użył.
//edit
https://amxx.pl/topi...agezestaw-flag/
Użytkownik Żuk edytował ten post 01.08.2019 23:53
#13
Napisano 02.08.2019 05:30
has_flag tak nie działa...
/* Returns true if the user has ANY of the provided flags * false if they have none */ stock has_flag(id, const flags[]) { return (get_user_flags(id) & read_flags(flags)); } /* Returns true if the user has ALL of the provided flags * false otherwise */ stock has_all_flags(id, const flags[]) { new FlagsNumber=read_flags(flags); return ((get_user_flags(id) & FlagsNumber)==FlagsNumber); }
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych