Перейти к содержимому

Рекомендуемые сообщения

Все добрый день.

 

Эта тема создана чтобы обсудить турели.

 

Пишите в комментарии свои идеи использования турелей.

У меня такая идея:

Берём entitydetector из opensecurity (возможно несколько штук), подключаем к компу для того чтобы их сообщить и получать более большую карту с координатами игроков и мобов.

В прошлой версии я использовал сканер из OpenPeripheral, который выдавал относительные координаты, но несколько таких сканеров согласовать намного сложнее чем один и это минус (а так же там радиус поменьше)

 

Далее с базой данных мобов и игроков мы проводим фильтрацию, заносим в таблицу тех кого можно убить.

А далее идут интересные куски кода. Вместо того чтобы как в первой версии закрепиться за одной целью, турель будет поворачиваться к той цели к которой ей ближе повернуться что повысит её эффективность. Второй же кусок кода будет смотреть, есть ли на пути выстрела мирные мобы/игроки. Если есть - стрелять не будет. Ибо таким образом можно встать сзади афкашника-хозяина привата и убить его. Эта часть кода не позволит убить тех кого не нужно убивать, заставляя турель соблюдать 3 закона робототехники Айзека Азимова.

Другие крутые части кода можете понакидать в комментарии, было бы интересно посмотреть что вы придумаете.

А так в принципе и всё что хотел сказать. 1 комп - управляющий несколькими турелями, у каждой турели свой сектор (комната за которой он не целиться) и один или несколько детекторов для обнаружения игроков.

Хоть такая система и будет лагодромить, но увы красота требует жертв. Придётся не выкладывать на форум в случае успеха написанную программу, чтобы игроки не залагодромили сервер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Первым делом следует определиться с задачей, которую будет выполнять система турелей.

* Будут ли целью турелей случайно заспавнишиеся или укрывающиеся от солнца мобы, либо игроки, одетые в квант?

* Как быстро квантовик должен убиваться, оставаясь в охраняемой зоне?.

* Какой объект охраняется: площадь с равномерно расставленными на ней турелями, или замкнутая комната или коридор с турелями по периметру? Вторая задача решается существенно легче, а в первой сложнее найти оптимальный алгоритм распределения секторов обстрела для имеющихся турелей.

 

Об «интересных» кусках кода:

* Запрещать выстрел турели, если на пути стоит мирный моб или игрок из белого списка, можно, но тут имеются другие сложности. Между выстрелом турели и попаданием в цель проходит время, за которое успевает сместиться и цель и защищаемый игрок. Защищаемый всегда рискует попасть под огонь если не одной, так другой турели. Поэтому лучшим решением для защищаемого будет как можно скорее убраться с защищаемой территории.

* Если всё же использовать фильтр, защищающих «своих» от обстрела, то он должен идти первым, чтобы турель смогла переориентироваться на другую ближайшую к текущему прицелу цель. Можно, конечно, продолжать удерживать прицел на изначальной цели, и ждать, пока мирный игрок покинет линию огня, но будет проще отдать недоступную в данный момент цель другим турелям, а эта тем временем может стрелять в других мобов, находящихся в ее секторе.

* Можно было бы определять характер движений защищаемого игрока. Пока он стоит в AFK – исключать из обстрела линии, проходящие через его координаты, а как только он начнет движение – стрелять без разбора в надежде, что защищаемый бежит в укрытие. Вепрочем, для AFK'шника лучшим решением будет провалиться в подземный бункер – сохраннее будет.

 

Что-то из моих давних соображений:

* Для эффективного уничтожения целей следует стрелять на упреждение, учитывая как скорость цели, так и скорость «пули». Также не следует забывать об ограниченной скорости поворота турели и о кулдауне. То есть, турель должна заранее повернуться на нужные координаты и в нужный момент произвести выстрел.

* Зная об упреждающем алгоритме, квантовик будет вынужден двигаться неравномерно, зигзагами, замедляясь и ускоряясь. В таком случае эффективной окажется стрельба наугад, но так, чтобы простреливалось всё пространство вокруг цели, не давая врагу возможности стоять на месте. Тут потребуется алгоритм, который производит обстрел, равномерный как по времени, так и по защищаемому объему, но при этом максимально сосредоточенный вокруг цели.

* Можно комбинировать оба алгоритма, когда часть турелей деморализует квантовика случайным огнем, а другая – выцеливает его, если тот случайно сумел найти безопасный островок.

* По возможности турели должны вести согласованный огонь, и целиться не в просто ближайшего в своем секторе моба, а в первую очередь добивать наиболее слабых, пока те не успели восстановить свое здоровье.

 

Практическое применение турелей и вправду не впечатляет, на задачки получаются интересные, и разнообразных уровней сложности. Я бы начал с коридора, в котором игрок убегает от моба. А когда турели научаться эффективно выцеливать бегущего моба, при этом не раня игрока, можно попробовать научить их истреблять сразу нескольких мобов в комнате, опять же, щадя игрока. И только тогда уже можно будет подумать об унижении квантовиков.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тут опять же был бы полезен мод на чатбоксы.

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

Во вторых чатбокс можен посылать сообщение во время стрельбы, например враг вышел в поле зрения и турель пишет "я тебя вижу". Ушёл в укрытие и она пишет "где ты". А возможно даже и предупреждать игроков до того как они зайдут. Например нубов которых турель с 1 удара убьёт. Она им сразу скажет "не входи, убью" и всё, пусть нуб решает входить ему или нет. А можно и на крайние меры пойти и загрузить в словарь турели какие нибудь чёрные шуточки из игры портал. Тут стоит понимать что каждый код может изменить под себя при желании, не кто не запрещает.

 

Что же касается стрельбы на опережение. Да, можно вычислить вектор движения игрока по его координатам, но как именно будет выбираться угол поворота я не представляю. Может расскажешь про этот алгоритм, eu_tomat?

 

Что же касается не задевания мирных мобов. Тут всё предусмотрено. Турель будет учитывать то что игрок может быть в движении и будет создавать слепую зону. То есть не станет стрелять в зону по форме напоминающую круг. И чем дальше игрок, тем меньше будет эта слепая зона.

 

Против квантовиков сражаться не вижу смысла. Они же очень быстры. Если сделать турель настолько быстрой, она будет не сбалансирована и убивать всех не квантовиков. Кроме того что чтобы нанести урон квантовику (а не просто разрядить) опять же понадобится высокая мощность, которая не сбалансирована и будет валить с 1 удара всех не квантовиков.

Ну увы так уж получилось что квант и в особенности гравик очень читерные вещи. Практически креативные вещи. И на них ровняться не стоит. Лучше уж вообще вырезать из игры.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

...

 

...

Я тут почитал, что вы пишете и понял: что если вы напишете, эффективный алгоритм работы комплекса турелей, то его можно будет применять, как в игре, так и (как бы это не звучало фантастично) в реальной жизни, для охраны.реального периметра. :prankster:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я тут почитал, что вы пишете и понял: что если вы напишете, эффективный алгоритм работы комплекса турелей, то его можно будет применять, как в игре, так и (как бы это не звучало фантастично) в реальной жизни, для охраны.реального периметра. :prankster:

У меня планы разделить обязанности и по 1-2 турели в комнату установит. Каждая работает независимо. Тут никаким эффективным использованием комплекса турелей и не пахнет. Тут речь у меня идёт о том чтобы по одиночки турели использовать

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня планы разделить обязанности и по 1-2 турели в комнату установит. Каждая работает независимо. Тут никаким эффективным использованием комплекса турелей и не пахнет. Тут речь у меня идёт о том чтобы по одиночки турели использовать

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Есть новая идея!

 

Турели можно использовать совместно с тремя блоками навигации:

  • Sensor из мода OpenPeripheral
  • Entity Detector из мода OpenSecurity
  • Датчик движения из мода OpenComputers

С первым у меня используется первая прога для турелей. У этого детектора относительные координаты, кое где функция может ошибкой закрывать прогу, требуется адаптер и из-за этого он мне как то не нравится.

Второй детектор лучше. В нём мало функций, только все необходимые. Абсолютные координаты. И вообще я его планирую использовать.

С третьим блоков всё куда интереснее. Он реагирует только тогда когда есть прямая зона видимости. Он посылает сигнал когда кого то увидит (правда только 1 раз)

 

Предлагаю так как в OS открытые исходники, дать турели функции датчика движения. Чтобы он посыла сигналы когда кого то увидит. Это позволит не залагивать сервер лишними сканами детектора из OS на наличие врагов. Не стрелять в стены и не наводиться на противников за укрытиями (а ведь таким способом можно обманывать турель)

Изменено пользователем qwertyMAN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Предлагаю так как в OS открытые исходники, дать турели функции датчика движения.
Во-первых, это сделает алгоритм управления турелью зависимым от реализации мода.

Во-вторых, это сильно упростит управление турелью. Обнаружил-шмальнул.

Есть датчик, который обнаруживает. Есть турель, которая стреляет. Есть компьютер, который всем этим управляет. Давай не лепить всё в одну кучу.

А дальше мы захотим туда же  встроить микроконтроллер. Купил в магазе турель, установил и она начала стрелять.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Во-первых, это сделает алгоритм управления турелью зависимым от реализации мода.

Во-вторых, это сильно упростит управление турелью. Обнаружил-шмальнул.

Есть датчик, который обнаруживает. Есть турель, которая стреляет. Есть компьютер, который всем этим управляет. Давай не лепить всё в одну кучу.

А дальше мы захотим туда же  встроить микроконтроллер. Купил в магазе турель, установил и она начала стрелять.

 

А ты попробуй датчики движения так расположить чтобы и блок турели не мешал обзору датчика и чтобы датчик не загораживал турель. Это нереально.

 

Хотя о чём вообще речь, если у нас даже копалки делают под наши конфиги, а не под дефолтные.

Изменено пользователем qwertyMAN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Во первых чатбоксы можно использовать для быстрой и удобной настройки турели.

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

Во вторых чатбокс можен посылать сообщение во время стрельбы, например враг вышел в поле зрения и турель пишет "я тебя вижу".

Так сообщение в чат и сейчас можно послать. Но предупредительный выстрел в голову донесет мысль о надвигающейся опасности куда лучше чата.

 

Против квантовиков сражаться не вижу смысла. Они же очень быстры. Если сделать турель настолько быстрой, она будет не сбалансирована и убивать всех не квантовиков. Кроме того что чтобы нанести урон квантовику (а не просто разрядить) опять же понадобится высокая мощность, которая не сбалансирована и будет валить с 1 удара всех не квантовиков.

Сбалансировано или не сбалансировано – это всего лишь вопрос количества. Квантовик один, а на один сервер OpenComputers можно повесить полсотни турелей. Про быстродействие такой системы не скажу, это будет зависеть от физического сервера и его настроек, надо проверять в каждом конкретном случае.

 

Что же касается стрельбы на опережение. Да, можно вычислить вектор движения игрока по его координатам, но как именно будет выбираться угол поворота я не представляю. Может расскажешь про этот алгоритм, eu_tomat?

Буду предполагать, что скорость цели ты вычислил, и даже смог определить скорость пули. Есть два варианта: либо турели стреляют залпом, либо время выстрела каждой из них переменно. У каждого способа свои особенности. Не буду в них вдаваться, сосредоточусь на вычислениях.

 

Если турели могут стрелять асинхронно, достаточно произвести выстрел чуть раньше. Время можно получить исходя из скорости пули и расстояния до точки поражения цели. Вычисления элементарны.

 

При залповой стрельбе требуется корректировать точку наведения. Узнать ее координаты можно, например, так:

Есть неизвестное время с момента выстрела до попадания в цель. Через него, а также через координаты цели в момент выстрела и ее скорость можно определить координаты в точке поражения цели. Через координаты можно выразить расстояние до этой точки, которое также можно выразить через время и скорость пули. Получится квадратное уравнение, решением которого будет время между выстрелом и поражением цели. Из времени вычисляются координаты, а из них углы и время поворота турели, оценка которого позволит наводить на цель лишь те турели, которые успевают за ее движением. Во избежание ситуации, когда ни одна из турелей системы не успевает за целью, следует аккуратно задать сектора обстрела каждой турели и запретить выход турелей за их пределы.

 

Предлагаю так как в OS открытые исходники, дать турели функции датчика движения.

Не вижу заметных преимеществ. К тому же задача решается имеющимися средствами.

Абсолютные координаты легко вычисляются из относительных, а в системе турелей они вообще не нужны. Ошибка сенсора из OpenPeripheral легко скрывается с помощью pcall. Один адаптер на один сенсор – некритичное усложнение системы.

 

Upd: Все-таки расскажу о тонкостях ведения огня.

Залповый огонь реализуется проще. Достаточно выбрать время цикла с запасом, чтобы успели выполниться необходимые вычисления. Синхронизация цикла не представляет сложностей.

Беглый огонь эффективнее залпового. Во-первых, он позволит каждому из орудий стрелять сразу, как оно будет готово, не дожидаясь момента залпа. Во-вторых, можно будет прогнозировать время выстрела турели задолго до входа бегущей цели в сектор данной турели. В-третьих, отсутствие общего ритма стрельбы не позволит игроку подстраиваться под него. С другой стороны, главный цикл при беглой стрельбе имеет непостоянное время выполнения, прогнозируемое лишь в некоторых пределах, что усложняет алгоритм, приоритетной задачей которого будет совершение выстрела в удобное для каждой из турелей время, а вычисления придется распределять между выстрелами. Задача в общем решаема, но с алгоритма залпового огня проще начать.

Изменено пользователем eu_tomat

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Кверти просто мечтает о турельках из Portal Gun
У OS турелек есть один очень неловкий момент, они вращаются против часовой стрелки, а в майне отсчет идет по часовой.

Кстати, я в одиночке тестил детектор OS, он почему-то работает только два раза, в чем может быть проблема?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У OS турелек есть один очень неловкий момент, они вращаются против часовой стрелки, а в майне отсчет идет по часовой.

Это не играет существенной роли. Направление вращения легко обращается зеркальными координатами. Или тригонометрическими преобразованиями, что то же самое.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Кстати, я в одиночке тестил детектор OS, он почему-то работает только два раза, в чем может быть проблема?

Вбивай радиус как аргумент

 

 

 

Кверти просто мечтает о турельках из Portal Gun
 

Они же статичный и не интересные. Программы под них не по писать.

Изменено пользователем qwertyMAN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Вспомнил, и это не ошибка. Связано с тем что там координата "y" или какая то другая в программировании идёт в другую сторону нежили чем в математике. На поворот это никак не сказывается

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Какой "y"? Ты про азимут не слышал?

Mайнкрафт|Туррель

180      |0

-135     |45

-90      |90

-45      |135

0        |180

........

Удивительно, как она у тебя куда-то попадает, если ты даже не заметил этого.

Там надо либо исходные координаты хитро разворачивать, либо отражать сферические.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Какой "y"? Ты про азимут не слышал?

...

Там надо либо исходные координаты хитро разворачивать, либо отражать сферические.

При том что в жизни по высоте всё измеряют снизу вверх. Удивительно что ты этого не знал.

И по координате z тоже. Если ты не заметил она в майне идёт сверху вниз. Удивительно насколько ты невнимательный.

Изменено пользователем qwertyMAN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Система координат является условностью, а переход из одной прямоугольной системы в другую легко преодолевается перестановкой и инвертированием аргументов: azimuth=math.deg(math.atan2(x,-z))%360

Спор же о правильных координатах не имеет большого смысла, т.к. в реальности всё относительно. Есть традиции, помогающие сделать более понятными учебники. На практике же приходится приспосабливаться к другим координатным системам, как, например, в Майнкрафте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

При том что в жизни по высоте всё измеряют снизу вверх. Удивительно что ты этого не знал.

И по координате z тоже. Если ты не заметил она в майне идёт сверху вниз. Удивительно насколько ты невнимательный.

А про азимут, ты все-таки ничего не знал, а верх и низ приплел, чтобы пыль в глаза пустить.

 

Хм... Да, можно и так, я отдельно вычислял sin и cos, инвертировал и возвращал градусы... Но тригонометрические функции сильно жрут процессор. Можно тоже самое, но с декартовыми координатами?

Изменено пользователем Doob

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

а верх и низ приплел, чтобы пыль в глаза пустить.

:smile3:  :smile3:  :smile3: 

Ну и троллинг у тебя.

Да знаю я про азимут, без него бы моя прога не работала. А речь вообще о другом была. О том что в принципе учитывая ось идущую в другую сторону можно понять что и вращение при градусе + 30, будет в обратную сторону. Это очевидные вещи и никаких поправок тут не нужно. Одна ось поменяла направление == вращение стало производиться в обратную сторону. И что? Не знаю зачем ты сюда азимут приплёл. Может хотел понтануться.  :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...