Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
TemKa_SD

Помогите с циклом и foreach

Recommended Posts

Здравствуйте. У меня на боте реализована система доступа к команде с помощью цикла, я уже реализовал добавление в админке IPS, мне нужно сделать функцию, которая определяет к каким командам выставлен доступ.

 

Начнем с 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;
}
}

 

так уже не определяет к какой команде есть доступ, я так понимаю здесь нужен еще цикл, верно?

Share this post


Link to post
Share on other sites

Вроде работает, что скажите?

 

public function checkAccess( $access )
{
	$return = array();
	$Mask = 1;

	for ($k=1;$k<=\count($this->commands());$k++)
		$Mask = $access * 2;

	foreach ( $this->commands() as $key => $value ) {
		if ( $key * 2 & $Mask )
			$return[] = $value;
	}

	return $return;
}

Share this post


Link to post
Share on other sites

Спасибо, переделал.

 

public function checkAccess( $access )
{
	$return = array();
	$commands = $this->commands();

	foreach ( $commands as $key => $value ) {
	    $return[] = $key * 2 & $access;
	}

	return $return;
}

Share this post


Link to post
Share on other sites

Вы до первого примера дошли?

Там есть двойка?

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...