Поле зрения игрока

Как узнать, находится ли игрок в поле зрения у другого игрока?

учить тригонометрию и читать код старого нпс плагина NPC/NPC.php at master · onebone/NPC · GitHub

Это просто аим

ну так возьми алгоритм вычисления угла между двумя обьектами

if(lockIs($player, $player2)){
// Смотрит
} else {
// Нет
}

public function lookIs(Player $player, Player $player2) : bool{
		$horizontal = sqrt(($player2->getPosition()->getX() - $player->getPosition()->getX()) ** 2 + ($player2>getPosition()->getZ() - $player->getPosition()->getZ()) ** 2);
		$vertical = $player->getPosition()->getY() - ($player->getPosition()->getY() + $player->getEyeHeight());
		$pitch = -atan2($vertical, $horizontal) / M_PI * 180;

		$xDist = $player2->getPosition()->getX() - $player->getPosition()->getX();
		$zDist = $player2->getPosition()->getZ() - $player->getPosition()->getZ();

		$yaw = atan2($zDist, $xDist) / M_PI * 180 - 90;
		if($yaw < 0){
			$yaw += 360.0;
		}
        $yaw2 = max($player->getLocation()->getYaw(), $yaw) - min($player->getLocation()->getYaw(), $yaw);
		return $yaw < 45;
	}


Прямая линия - направление взгляда игрока. Вычисляешь угол между этой линией и линией, которая ведёт от одного игрока к другому и если он меньше 55 градусов, то теоретически игрок в поле зрения (при условии, что у игрока стоит максимальный fov)

О гкод подьехал

1 лайк

Однако, если ты таким образом хочешь сделать защиту от читов, то тебя ждёт огорчение из-за того, что движения передаются далеко не идеально и не полностью

Спасибо, сейчас проверю

Как раз-таки чит я и хочу сделать, ахах

анти чит ты имел в виду или именно чит?

Чит)

таки почему нет

если я не ошибаюсь, в пммп можно получить вектор взгляда игрока, не от него разве нужно плясать?

https://apidoc.pmmp.io/d1/d1d/_entity_8php_source.html#l00930

Нот

Вектор взгляда игрока выглядит так:
Vector3(0.435, 1, 1.234)

так а как ты найдешь угол без вектора направления игрока

Есть ещё вариант циклом пустить проверку блоков перед игроком по прямой линии (как я делал маг палку), но вот проблема, чекать он будет только по середине где крестик

Yaw, pitch