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

подобных систем 100500 же
да и делается изи
атачим к юниту его точку респавна (для тех у кого боязнь джасса можно юзать кастом вэлью)
когда юнит умирает то извлекаем приатаченную точку и запускаем вейт
по окончанию вейта создаём юнита в точке и атачим к нему эту точку
на гуи это 2 триггера
если хочется оптимально то стоит перейти на джасс и не насиловать себе мозги этими окошками
`
ОЖИДАНИЕ РЕКЛАМЫ...
32
использовать local unit u = getDyingUnit()
потом триггерно по прошествию времени (вейта какого либо) - воскрешать и очищать локалку.
Но для этого нужны минимальные знания джасса.
Можно геммороиться с группами, занося юнита в группу для воскрешения, и периодически по таймеру воскрешая всех юнитов в группе.
26
Можно и без JASS, значение (Diyng unit) для триггера не будет меняться.
6
8gabriel8:
Можно и без JASS, значение (Diyng unit) для триггера не будет меняться.
По подробнее можно?
Fakov:
использовать local unit u = getDyingUnit()
потом триггерно по прошествию времени (вейта какого либо) - воскрешать и очищать локалку.
Но для этого нужны минимальные знания джасса.
Можно геммороиться с группами, занося юнита в группу для воскрешения, и периодически по таймеру воскрешая всех юнитов в группе.
Мне нужно каждого моба спавнить в стартовой его точке, причём на каждого своя точка. И не нужно чтобы в одной точке было 2 и больше мобов.
Насколько я понял без регистрации каждого моба не обойтись?..
  1. Резервировать массив для каждого юнита.
  2. Устанавливать переменную макс. кол-ва юнитов
  3. По циклу записывать позицию в отдельные масивы.
  4. Раз в 60с прогонять цикл и проверять умер юнит или нет, с каждым созданием присваивать переменной отвечающую за юнита последнего создавшегося.
Это единственный вариант?
17
qzGoon:
8gabriel8:
Можно и без JASS, значение (Diyng unit) для триггера не будет меняться.
По подробнее можно?
Fakov:
использовать local unit u = getDyingUnit()
потом триггерно по прошествию времени (вейта какого либо) - воскрешать и очищать локалку.
Но для этого нужны минимальные знания джасса.
Можно геммороиться с группами, занося юнита в группу для воскрешения, и периодически по таймеру воскрешая всех юнитов в группе.
Мне нужно каждого моба спавнить в стартовой его точке, причём на каждого своя точка. И не нужно чтобы в одной точке было 2 и больше мобов.
Насколько я понял без регистрации каждого моба не обойтись?..
  1. Резервировать массив для каждого юнита.
  2. Устанавливать переменную макс. кол-ва юнитов
  3. По циклу записывать позицию в отдельные масивы.
  4. Раз в 60с прогонять цикл и проверять умер юнит или нет, с каждым созданием присваивать переменной отвечающую за юнита последнего создавшегося.
Это единственный вариант?
Если я правильно понял, тебе нужно сделать так, чтобы умершие юниты возрождались в определенной точке? Тогда вот карта, в ней нужный триггер.
Если потом нужно чтобы он автоматически бежал куда-то, просто добавить триггер -перейти к точке нападая на противника- в адрес замененному юниту.
Загруженные файлы
28
подобных систем 100500 же
да и делается изи
атачим к юниту его точку респавна (для тех у кого боязнь джасса можно юзать кастом вэлью)
когда юнит умирает то извлекаем приатаченную точку и запускаем вейт
по окончанию вейта создаём юнита в точке и атачим к нему эту точку
на гуи это 2 триггера
если хочется оптимально то стоит перейти на джасс и не насиловать себе мозги этими окошками
Принятый ответ
26
qzGoon:
По подробнее можно?

nvc123 вкратце изложил самую суть. У меня ещё добавлена проверка невидимости точки респавна юнита для игрока, удаление группы при создании юнита и удаление убитых юнитов, чтобы не плодить утечек.
P. S. Нужно открывать карту в редакторе JNGP, обычный не содержит некоторых функций.
Загруженные файлы
21
8gabriel8, не открывается твоя карта. Ты часом не баловался с кастомными нативками или руссификатором триггеров?
26
Raised, проверил, открывается. Новый редактор?
Загруженные файлы
18
8gabriel8:
Можно и без JASS, значение (Diyng unit) для триггера не будет меняться.
нет нельзя, GetDyingUnit() не уникален для каждого потока, это как глобалка, но в триггере, туда записывается последний умерший юнит
18
8gabriel8:
UrsaBoss, попробуй сам.
если нужно что то сделать в потоке через некоторое время, то тут без локалок не обойтись.
А GetDyingUnit() будет всегда возвращать последнего умершего юнита, поэтому с ним муи никак не получится
А вот так будет работать
function Trig_trg_Actions takes nothing returns nothing
    local unit u = GetDyingUnit()
    call PolledWait( 6.00 )
    call ReviveHero( u, GetUnitX(u), GetUnitY(u), true )
    set u = null
endfunction

//===========================================================================
function InitTrig_trg takes nothing returns nothing
    set gg_trg_trg = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_trg, EVENT_PLAYER_UNIT_DEATH )
    call TriggerAddAction( gg_trg_trg, function Trig_trg_Actions )
endfunction
Даже можно дать "Перерождение" без кд, так будет проще
26
UrsaBoss, раз сам ты всё равно ленишься посмотреть, специально для тебя сделал.
Загруженные файлы
26
Обнаружил в сделанной системе косяк. Один раз воскрешается крип, а потом не хочет. Сейчас посмотрю в чём дело.
18
8gabriel8:
UrsaBoss, да поставил там разных, посмотри уже!
блин, действительно
странно, очень странно. Когда я ещё только только учился делать гуи триггеры, то эта фича не прокатывала
26
Ступил, новых юнитов в группу не добавляю, а старых не удаляю, вот и не работает после одного раза)
18
8gabriel8 лучше сделать на основе "Перерождение", так будет оптимальнее
21
Ивент
  • Юнет умир
Действие
  • Запустить таймер
  • Сохранить данные по юниту за хендлом таймера
Таймер истек
  • выгрузить данные
  • создать юнитов
26
UrsaBoss, а они в своей стартовой позиции будут перерождаться?
Но вообще ты прав, юниты при смерти от атаки по области не перерождаются. Подозреваю, что меняется их тип юнита, потому либо "Перерождение", либо сохранение ещё всех типов юнитов.

qzGoon, вот исправленная карта, где юниты респавнятся от атаки с руки, от способностей, при массовых смертях, но не респавнятся при атаке по области. Если у тебя нет а-ля мортир на карте, то тебе подойдёт эта система, если есть, то либо делай через Перерождение и мгновенное перемещение к стартовой позиции юнита, либо делай ещё один массив с типами юнитов.
UrsaBoss, а знаешь как отлавливать Перерождение?
Когда я ещё только только учился делать гуи триггеры, то эта фича не прокатывала.
Как-то смотрел карту одну, там герой должен был воскрешаться таким триггером, но не воскрешался. Среди прочих глюков сообщаю это автору, а он отвечает, что всё нормально, попробуй чуть обновлённую версию. Там тот же триггер. Всё работает) Ну как так?
Загруженные файлы
18
8gabriel8 не знаю не знаю, кроме перерождения можно ещё на структуре + таймер сделать. Урон по области тоже должен агрить триггер
26
UrsaBoss:
Урон по области тоже должен агрить триггер
Тела же пропадают, на их месте появляется эффект крови и костей. Их не воскресить и не создать скелетов, поэтому может быть, что игра их просто Remove, если Перерождения нет.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.