Начнем с C++, немного расскажу как оно работает там.
Каждая переменная с командой имеет свой ID: http://prntscr.com/nupb8s
Функция проверки доступа к команде:
bool CMDCheck (uint32_t cmd, uint32_t acc) { uint32_t Mask = 1; if (cmd != 0) for (unsigned int k=1;k<=cmd;k++) Mask = Mask * 2; if (acc & Mask) return true; else return false; }
Я вывел данные чтобы посмотреть что приходит в них: http://prntscr.com/nupbqo http://prntscr.com/nupbv3
CMD - ID команды.
ACC - доступ админа выставленный в базе данных.
MASK - это ID умноженный на 2.
----------------------------------
Мне нужно вычислить из ACC к каким именно командам есть доступ.
$commands = array( '1' => 'wc3_admins_cmd_abort', '2' => 'wc3_admins_cmd_ban', '4' => 'wc3_admins_cmd_autostart', '8' => 'wc3_admins_cmd_banlast', '16' => 'wc3_admins_cmd_check', '32' => 'wc3_admins_cmd_checkban', '64' => 'wc3_admins_cmd_clearhcl', '128' => 'wc3_admins_cmd_close', '256' => 'wc3_admins_cmd_closeall', '512' => 'wc3_admins_cmd_download', '1024' => 'wc3_admins_cmd_drop', '2048' => 'wc3_admins_cmd_end', '4096' => 'wc3_admins_cmd_fakeplayer', '8192' => 'wc3_admins_cmd_fppause', '16384' => 'wc3_admins_cmd_from' );
Т.е что-то вроде такого мне нужно:
foreach ( $this->commands() as $key => $value ) { if ($key == 128) { $test[] = $value; } }
Где 128 это ACC, здесь оно работает так как выбрана одна команда, если несколько, например 1 и 128 = 129
foreach ( $this->commands() as $key => $value ) { if ($key == 129) { $test[] = $value; } }
так уже не определяет к какой команде есть доступ, я так понимаю здесь нужен еще цикл, верно?