Установки позиции игрокам

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
33
Реакции
0
Всем привет. Может кто нибудь знает, как можно сделать, чтоб чтоб плагин взял всех игроков определённой команды и сделал из них ровный круг? То есть например я КТ со всеми админ правами написал в чате /krug, то все заключённые ТТ относится моей позиции, то есть вокруг меня выстраились в круг и нельзя было сходить с места. Не важно где они находятся по карте, чтоб прописал и сразу их всех живых ТТ образовался ровный круг с расстоянием друг от друга. Расстояние между ТТ должно быть небольшое.
Надеюсь кто нибудь поможет. Заранее спасибо.
 
Сообщения
271
Реакции
347
Помог
15 раз(а)
искать координаты по окружности относительно центра
 
Сообщения
67
Реакции
85
Всем привет. Может кто нибудь знает, как можно сделать, чтоб чтоб плагин взял всех игроков определённой команды и сделал из них ровный круг? То есть например я КТ со всеми админ правами написал в чате /krug, то все заключённые ТТ относится моей позиции, то есть вокруг меня выстраились в круг и нельзя было сходить с места. Не важно где они находятся по карте, чтоб прописал и сразу их всех живых ТТ образовался ровный круг с расстоянием друг от друга. Расстояние между ТТ должно быть небольшое.
Надеюсь кто нибудь поможет. Заранее спасибо.
Gidroponiks, это задача по геометрии. Пусть точка K - центральная точка, относительно которой нужно выстроить геометрическую фигуру. Значение координат K равно позиции игрока, вызвавшего команду постройки круга. Задача: узнать точки T1, T2, T3 и так далее, на которые должны телепортироваться игроки-террористы. При этом, расстояние между соседними точками T должно быть равным (например, если игроков террористов будет 4, то и точек должно быть 4, а следующие расстояния должны быть равны: T1T2=T2T3=T3T4=T4T1. Это - равносторонний четырехугольник, то есть квадрат)),

Вводим переменную X, которая будет отвечать за расстояние между точкой K и любой из точек T - это радиус круга. Но на самом деле, чтобы решить эту задачу, нам не нужно создавать круг, а нужно создать геометрическую фигуру, точки которой будут равноудаленные от точки K и равноудаленные от соседних точек T между собой. Пусть количество точек T, которое равно количеству живых игроков террористов, будет равно N.

Мы имеем функцию с двумя переменными.
  • Переменная X - расстояние между центром фигуры и крайними точками, где центром фигуры будут координаты админинистратора, использовавшего команду /krug, а крайние точки (T) - координаты, куда следует телепортировать террористов. Значение X ты можешь задать самостоятельно (если это расстояние будет всегда однаково, можно сделать X константой как один из вариантов).
  • Переменная N - количество точек T, то есть количество живых игроков террористов, которых нужно телепортивать.

Какую фигуру нам придется построить, прямо зависит от значения N. У этой фигуры все стороны должны быть равны. А дальше все элементарно. Если N равно 3, нам нужен треугольник. 4 - четырехугольник. 5 - пятиугольник, 6 - шестиугольник и так далее (вплоть до 31, чтобы наверняка).

Исключения: Если точек T будет 1 или 2, мы не получим геометрическую фигуру. Есть точка будет одна, мы просто телепортируем террориста на указанное расстояние под указанным углом относительно K. Если точек будет две, мы телепортируем двух террористов, где точки K, T1, T2 будут лежать на одной прямой, а T1K=T2K, но K лежит между T1 и T2.

Теоретически, я рассказал как решить эту задачу. Переходя к программированию, для создания плагина понадобятся функции получения и установки координат (origin), и углов (angle). Также хорошей идеей будет добавить следующее: задать угол поворота игрокам-террористам после телепортации, чтобы их взгляд был направлен в центр, то есть на начальника-админа. А чтобы нельзя было сходить с места, можно установить максимальную скорость в 0 единиц всем в момент "создания круга".

Подробнее о возможных методах реализаций вы сможете найти в документации по функциям AMXX: https://dev-cs.ru/amxx/
 
Последнее редактирование:
Сообщения
67
Реакции
85
Изложить суть задачи сжато можно так: Построить правильный многоугольник с центром в точке K.
Координаты точки K нам известны. Количество углов фигуры равно N. N может иметь значения от 3 до 31.
X - расстояние между K и крайними точками фигуры можете выбрать на свое усмотрение.

На фото пример, если N = 8,
 

Вложения

Сообщения
33
Реакции
0
Спасибо, Вам большое) В теории почти все понятно. Вот осталось понять как на практике все это реализовать)
 
Сообщения
67
Реакции
85
Спасибо, Вам большое) В теории почти все понятно. Вот осталось понять как на практике все это реализовать)
По теме: Урок. Позиция,скорость и углы в Half-Life (Position, Velocity, and Angles)
Факт: в игре нет Севера, Юга, Востока и Запада. Есть только углы,
 
Сообщения
33
Реакции
0
X - будет одинакова получается? Для расстояния от центра до круга и расстояния между игроками?
Есть выстроить круг от центра в расстоянии 10 допустим, то и игроки будут стоять между друг друг в расстоянии 10? Это ведь 32 игрока не поместятся в один круг
18 Май 2020
И получается для каждой точки T, нужно делать свои координаты?
Получается 31 координат - для 32 игроков. А после делать проверки? Если живых 20, то телепортирование идет на 20 точек в ровный круг, если 6, то круг из 6. Верно?
18 Май 2020
И как правильно сделать телепорт игроков на эти позиции? В плане кода интересуюсь
 
Сообщения
67
Реакции
85
X - будет одинакова получается? Для расстояния от центра до круга и расстояния между игроками?
Есть выстроить круг от центра в расстоянии 10 допустим, то и игроки будут стоять между друг друг в расстоянии 10? Это ведь 32 игрока не поместятся в один круг
X - это радиус. X = расстояние между админом-начальником и каждым из террористов. X = расстояние T1K, T2K, T2K...
X не равно расстоянию между террористами, посмотри фото выше: выдели треугольник KT1T2 - X не равно T1T2

Как допустимый вариант, значения X можно изменять в зависимости от значения N (количества террористов), получая в итоге: чем больше игроков, тем шире круг. Но формулы здесь конкретной привести не могу, ведь лучше всего геймплейные тесты покажут, когда становиться слишком тесно и нужно расширять круг.
 
Сообщения
33
Реакции
0
Спасибо большое. В теории повторюсь почти все понятно.
Будем разбираться на практике как все это реализовать.
А еще вопросик? Уже по программированию.Мне придется создавать 31 точки со своими координатами (Пока маленько не понимаю как) и как потом игрокам их присваивать? Рандомно? То есть есть 20 игроков и получается 20 точек, каждому выдается рандомная точка? И нужно исключить выдачи токи которая уже выдана. Вообщем, сложно однако на практике, в теории все как-то более менее просто и понятно)
 
Сообщения
67
Реакции
85
Gidroponiks, Я вижу такой алгоритм:
Вызов команды → получить количество живых террористов (переменная N) → получить координаты админа (точка K) → рассчитать конечные точки для телепортации и телепортировать террористов → повернуть террористов лицом к админу → заблокировать передвижения у всех.

Рассчитать конечные точки для телепортации и телепортировать террористов здесь будут геометрические расчеты. Функция будет принимать аргументы K и N, её задачей будет построить правильный N-угольник с центром в точке K.

Как присваивать игрокам полученные координаты? Лучшим вариантом я считаю будет последовательно, сразу после получения координат точки . Просчитали одну точку → телепортировали игрока.

В плане кода, как правильно все это сделать, рекомендую почитать по теме статью, которую уже отправлял выше или её первоисточник на английском. Также можете посмотреть исходные коды других плагинов, которые используют телепортацию или поворот игрока, к примеру telemenu.sma с базового набора плагинов Amx Mod X.

Пример телепортации из плагина telemenu с использованием функций модуля fakemeta:
C-like:
getTeleportData(id, Float:origin[3], Float:vAngle[3])
{
    pev(id, pev_origin, origin) // получить координаты игрока с индексом id в значение origin
    pev(id, pev_v_angle, vAngle) // получить углы игрока с индексом id в значение vAngle
}

doTeleport(id, const Float:origin[3], const Float:vAngle[3])
{
    engfunc(EngFunc_SetOrigin, id, origin) // телепортировать игрока с индексом id в координаты равны значению origin
    set_pev(id, pev_angles, vAngle) // задать углы игроку с индексом id равным значению vAngle
    set_pev(id, pev_fixangle, 1) // исправить углы (должно присутствовать для корректного изменения угла)
}
 
Сообщения
33
Реакции
0
Хорошо, спасибо большое)
Буду пробовать, только надо разобраться с точками, как их все зарегистрировать и потом присваивать, одну точку я понял как.
Спасибо еще раз большое.
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу