Добавлен
Всем привет! Делаю РПГ. Решил, что мобы не должны быть просто разбросаны по карте и тупо спауниться в рандомных местах. Поэтому думаю, надо сделать лагеря. Ну наляпал я несколько по карте. Каждому лагерю я как бы присвоил номер, начиная с 0. А мобы спаунятся небольшими группами. Затем, после спауна, моя система высчитывает, где сколько юнитов зарегистрировано (юнитам, принадлежащим определённому номеру лагеря я присвоил соответствующий номер в SetUnitUserData). Ну и эта группа решает, куда им направиться, кого они смогут победить, ну или там просто свободный лагерь, перебитый игроком. Так вот. Я решил сделать систему наподобие той, что представлена в игре Сталкер, где используется система гулагов (кто понял, тот поймёт :В). Итак, лагерь любезно пригласил к себе отряд новозаспауненных крипов. Вот они пришли в лагерь. Теперь это их дом.
А вот и суть вопроса: у меня есть идея расставить в каждом лагере невидимые юниты-флаги, к каждому из которых бы "приклеивался" один из пришедших юнитов. Но как лучше всего это реализовать? Была идея с помощью абилок-пустышек, но пока не слишком удачно.

Принятый ответ

Zahanc:
Почему не массив точек или регионов?
Как вариант, такой невидимый юнит с помощью пустышек отдаёт разные приказы, симулирующие определенную работу юнита-цели (например, в 22.00 юнит идёт спать в палатку, а в 6.00 просыпается и идёт работать, естественно, если в лагере не объявлена тревога).

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
22
6 лет назад
Отредактирован Zahanc
0
Не понимаю зачем нужны какие-то пустышки. Kакие-либо приказы так или иначе придется отдавать с помощью скрипта.
Используйте регионы. (Я подразумеваю что каждый "флаг" может относится к одному и только к одному лагерю). Единственное что неудобно это двумерный массив для регионов, чтобы соотнести регионы ("флаги") и лагерь.
Я бы сделал что-то в духе (псевдокод):
struct Camp
  public location array locs
 // Define locs post instantiation.
endstruct
function SpreadUnitsOnCamp takes Camp targetCamp, group monsters returns nothing
  local integer i = 0
  local unit f = null
  local group g = CopyGroup(monsters)
  loop
  set f = FirstOfGroup(g)
  exitwhen null == f
  call IssueOrderMoveToLoc(f, targetCamp.locs[i])
  set i = i + 1
  call GroupRemoveUnit(g, f)
  endloop
endfunction
0
26
6 лет назад
0
^ Тут и обычного массива хватит
0
22
6 лет назад
Отредактирован Zahanc
0
Как соотнести один лагерь ко множеству локаций без переборов циклом? Я могу вымыслить только поделив массив локаций. В примере я использовал vJass для ясности.
0
23
6 лет назад
0
На основу лагерей так же можно взять разрушаемый объект, его можно захайдить при инициализации и пикаются они легко.
0
26
6 лет назад
0
Zahanc, а создание псевдо-двумерного массива разве уходит от использования цикла?
0
20
6 лет назад
0
Obelick:
На основу лагерей так же можно взять разрушаемый объект, его можно захайдить при инициализации и пикаются они легко.
как и варды \o/
0
21
6 лет назад
Отредактирован Raised
0
А вот и суть вопроса: у меня есть идея расставить в каждом лагере невидимые юниты-флаги, к каждому из которых бы "приклеивался" один из пришедших юнитов. Но как лучше всего это реализовать? Была идея с помощью абилок-пустышек, но пока не слишком удачно.
Боюсь, суть вопроса неясна.
Для чего нужны юниты-флаги? Чем массивы или группы не угодили? Или ты в этот недоязык не могёшь?
0
29
6 лет назад
0
Zahanc,
зачем тебе точки?
0
22
6 лет назад
Отредактирован Zahanc
0
16GB:
Zahanc,
зачем тебе точки?
Вопрос в том, насколько я понял, как расставить группу юнитов по "лагерю". Вроде как сторожи по периметру. Как тут без точек?
Или вопрос был в том почему не:
real array x
real array y
Тогда ответ: просто ради примера - меньше кода.
Extremator:
Zahanc, а создание псевдо-двумерного массива разве уходит от использования цикла?
В некоторой мере, в зависимости от использования. Вопрос в том насколько точно можно представить систему в виде графа, что я не могу угадать, пока автор не ответит.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.