Всем здравствуйте! Я работаю над своим проектом Relict War, в Warcraft 3. Рассказывать что из себя представляет этот проект не буду, возможно выложу отдельную статью.
Так вот! В моем проекте задумывается много кастомного контента. И вот один из режимов, ЗАХВАТ ГЕНЕРАТОРА.
Хочу спросить, как мне сделать захват самого генератора?
На картинке собственно не видно самого генератора но в игре он отображается. Так вот, хочу сделать чтобы при заходе в нижний круг (там будет область) надо ждать минуту.
После того как мы подождали минуту, генератор переходит под контроль игрока который его захватил. И после, нам нужно подождать 10 минут отбиваясь от других игроков которые тоже хотят захватить генератор.
Если же, пока мы сражаемся с кем-то, и приходит другой игрок и встает на точку, таймер останавливается и потом генератор спустя минуту переходит к тому игроку который перехватил его у нас.
Побеждает тот, который продержится до конца таймера.
Надеюсь все ясно. Если есть вопросы, задавайте.
`
ОЖИДАНИЕ РЕКЛАМЫ...
38
Это же стандартный захват базы, тебе нужен массив генераторов и массив чисел - процент захвата
Ответы (4)
38
Например, переменные:
unit array captureGenerators - сюда запихать юнитов генераторов
timer array captureTimers
real array captureProgress
  • заходит в точку
  • ищем юнит типа генератор поблизости, записываем как текущий
  • проверяем, он того же игрока/команды?
    • если да, ничего не делать
  • ищем генератор в captureGenerators сравнением с текущим, записываем index
  • запускаем периодический таймер типа 10 раз в секунду и записываем его в captureTimers[index]
  • по периоду ищем таймер getExpiredTimer() в массиве таймеров, берем индекс этого массива и записываем в массив чисел captureProgress[index] = captureProgress[index] + speed (где speed - это количество делений за единицу тика таймера, можешь руками просто зафигачить константу типа 0.001)
  • если captureProgress[index] >= 1, то ставим captureProgress[index] в 0, останавливаем таймер, ищем генератор в массиве по index и меняем ему игрока
  • проверяем все генераторы, если они все этого игрока, то вин
  • выходит из точки или умирает
  • ищем юнит типа генератор поблизости
  • ищем в массиве captureGenerators этот генератор, чтобы записать его индекс
  • устанавливаем captureProgress[index] в 0
  • останавливаем captureTimers[index] если он не пустой
Третьим триггером можно выводить значение captureProgress над конкретным генератором визуально, но это на усмотрение.
Тут еще будет проблема с заходом/выходом нескольких юнитов в область, возможно, надо добавить массив captureHeroes, при заходе записывать, и при заходе/выходе/смерти сравнивать, тот же ли это юнит, для других ничего не делать
Ищем перебором по всему массиву сравнением с getExpiredTimer(), но можно делать на хештайблицах
30
ScorpioT1000, я бы по другому сделал. На каждый генератор повесил бы событие UnitEntresRange. И запускал бы таймер, который бы выибрал всех юнитов вокруг генератора, проверял условия и считал прогресс.
25
Еще не понятно, а что такое "захват генератора"? Типа зашел юнитом, и что дальше? Юнит должен стоять или "занят процессом захвата", то есть выполнять захват? А если враг нападет, что делать юниту? Или он должен просто стоять и если кто=то нападет и он выйдет с зоны то все, весь прогресс захвата в ноль? А если в зону зашел враг во время захвата, то прогресс должен остановится или отменится?
21
Мне кажется, просто нужно использовать строительство рабочих у орды. В принципе, пока работник строит - идет процесс. Самого работника можно сделать невидимым, москитным и неуязвимым.
Теперь, пока твой герой стоит в области, невидимый рабочий строит( захватывает твой генератор)
Когда расстояние между кругом захвата и юнитом слишком большой - юнит перестает строить.
Тут тебе и шкала прогесса есть
Надписи, типа "постройка завершена" на "абгрейд завершен" можно изменить в игровых константах. Тут даже думать особенно не надо)))
23
Немного кривая механика задумана. Обычно "захват флага" в играх делается так:
Юнит подходит к флагу
Запускается время N минут
Если спустя N юнит находится у флага, то флаг захвачен
Если за время N приходит юнит владелец флага, то захват останавливается
Если флаг нейтральный и к нему приходят 2+ разных юнита, то флаг достаётся тому, чьих юнитов больше у флага спустя N
Примерно так же, как в серии battlefield, в общем)
Ответы (2)
38
EugeAl, я ему в комментах уже отписал, но видимо автор троль и ему ничего не надо
23
ScorpioT1000, похоже, что он довольно тонкий тролль )
4
В карте UZW 1.03 есть такая система убиваешь контрольную точку она возрождается и становится твоей и все к ней прикрепленные пушки. Правда там текста под 7к строчек попробуй разбери да и лагает.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.