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

подобных систем 100500 же
да и делается изи
атачим к юниту его точку респавна (для тех у кого боязнь джасса можно юзать кастом вэлью)
когда юнит умирает то извлекаем приатаченную точку и запускаем вейт
по окончанию вейта создаём юнита в точке и атачим к нему эту точку
на гуи это 2 триггера
если хочется оптимально то стоит перейти на джасс и не насиловать себе мозги этими окошками
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
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, раз сам ты всё равно ленишься посмотреть, специально для тебя сделал.
Загруженные файлы
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.