Extremator, и что? этим мы проверим удаляется ли юнит из групп когда юнит исчезает. А задача узнать очищается ли уничтоженная группа без создания утечек.
Скороу сделаю анонс карты, увидишь -) проще показать чем рассказывать.
Вообще я сделал по другому - отказался от работы с многочисленными группами юнитов. Посмотрел как работают функции на работу с ними - мне показалось они слишком затратные. Например - чтобы проверить пуста ли группа - цикл зачем-то проходит по каждому юниту из занесёных в группу, а не прерывается на первом встреченном юните.
Так что вместо массивных групп - я делаю массивные счётчики, и работаю с ними обращаясь в массиве через index = GetUnitUserData . При смерти юнитов убавляется счётчик udg_uGroup_enum[index], и когда он возникает нуля - запускаю триггер udg_uGroup_trigUnDead[index] - таким образом на карте постоянно спавнятся группы юнитов и я могу отлавливать события на уничтожения этих групп по факту используя только одно событие.
когда в группе юниты спавнятся - я раздаю им index, идентичный шаблону по которому они спавнятся и наращиваю udg_uGroup_enum[index] чтобы отслеживать количества в группах
quq_CCCP, это не герои, это юниты, и они постоянно пересоздаются. Означает ли это что когда юнит удаляется - удаляются и все события с ним связанные? т. е. не будет захламляться память?
в одной теме прочёл "событие удаляется само когда объекта завязанного на него не существует" - это правда? Не будет утечек если за игру на один триггер будет подвешено 5000+ событий на смерть юнитов, при условии что одновременно будет существовать не больше 12 из них?
и что ты там учить для джнгп такое сложно собрался?
для меня это из области "я не знаю чего я не знаю", я не знаю что там учить и сколько там подводных камней, что это мне заблокирует какие противопоказания и т. д.. - чтобы об этом узнать тоже нужно шерстить поисковик. Но если варик воскреснет и в джнгп появится поддержка новой версии - то я приступлю к его изучению
Extremator, проблем возникает ещё больше.
У меня должен быть array unitpool с поддержкой весов
если unitpool переделать в array типов - то получится двумерный массив, которые в варике не поддерживаются.
А так как я на протяжении игры постоянно модифицирую unitpool (добавляю и удаляю юнитов по тем или иным событиям) то вмещать множество массивов в один массив не вариант (при изменении размера одного массива должны смещаться остальные массивы)
ScopteRectuS, не знаю имеет ли смысл тратить время и учить новую для себя утилиту по варику ради одной задачи. Я пока разберусь с ней, пойму что она делает, как с ней быть, пройду через подводные камни - 100 лет уйдёт. Если нет возможности решить через JASS данную проблему - то буду сохранять unitpool в хештаблицах.
ssbbssc, мне нет дела до срача, мне есть дело до того, что на моей предыдущей карте (на которую угрохал кучу времени) были жуткие задержки в сетевой игре из-за непонятных причин (это не утечки, инфа 100%). Поэтому я стараюсь аккуратно подходить в вопросу.
unitpool - список типов боевых единиц с весами.
Туда, например, можно добавить водного элементаля с весом 9, и огненного элементаля с весом 1
Потом можно извлечь из юнитпула случайный тип юнита, и при этом с вероятносью в 90% получишь водного элементаля, и с вероятностью в 10% получишь огненного элементаля
В моей карте нужно сделать массив юнитпулов, чтобы для каждого региона генерировались разные войска, а так как генерация проходит часто и по многу - не хочется сохранять unitpool в хеш-таблице. В соседней теме мне подсказали что хеш работает медленно
function Trig_init_unitpools_from_excel_Actions takes nothing returns nothing
local unitpool units
set units = CreateUnitPool()
set udg_contSmall[0] = units
call UnitPoolAddUnitType(units, 'n005', 3)
call UnitPoolAddUnitType(units, 'n002', 1)
set units = null
endfunction
Чёрт, всё равно возникла проблема - как обращаться к сохранённым unitpool?
нашёл решение - надо глобалку udg_contSmall создавать типа handle array
function Trig_init_unitpools_from_excel_Actions takes nothing returns nothing
local unitpool units
set units = CreateUnitPool()
set udg_contSmall[0] = units
call UnitPoolAddUnitType(units, 'n005', 3)
call UnitPoolAddUnitType(units, 'n002', 1)
set units = null
endfunction
А, ну всё понятно - параметр - это как далеко юниты друг друга распихивают, приоритет - юниты более низкого приоритета отталкиваются от юнитов более высокого приоритета, но не наоборот. Юниты равных приоритетов друг друга расталкивают. Номер отряда - юниты расталкивают друг друга только если они из одного номера
Например - если ты хочешь сделать жирную нагу, от которой другие наги отталкиваются - поставь всех наг в общий номер отряда, но жирному поставь повыше приоритет чем у остальных. В итоге он всех будет распихивать, но сам сещаться остальными не будет (кроме своих собратьев с тем же приоритетом
Я гарантировать не могу, но судя по тому, что этот вариант true у всех летающих юнитов - то предположу что это позволяет юнитам передвигаться отрываясь от основного отряда (если пешим надо обходить лес, то летающие могут через него перелететь). Попробуй летающий поставить false и приказать группе в которой есть и пешие и летающие - пересечь лес, и посмотреть станут ли летуны сопровожать пеших.
А вопросы, почему близзарды до сих пор продают игру 15-летней давности по цене новой, тщетны. Жадность, сэр.
Нет, не жадность, если бы они варкрафт отдавали бесплатно или за копейки - меньше людей покупали бы старкрафт. А теперь когда старкрафт бесплатен - возможно они готовят и варкрафт к бесплатной версии.
» WarCraft 3 / Надо ли очищать группу перед уничтожением
» WarCraft 3 / Надо ли очищать группу перед уничтожением
» WarCraft 3 / удаление событий
Вообще я сделал по другому - отказался от работы с многочисленными группами юнитов. Посмотрел как работают функции на работу с ними - мне показалось они слишком затратные. Например - чтобы проверить пуста ли группа - цикл зачем-то проходит по каждому юниту из занесёных в группу, а не прерывается на первом встреченном юните.
Так что вместо массивных групп - я делаю массивные счётчики, и работаю с ними обращаясь в массиве через index = GetUnitUserData . При смерти юнитов убавляется счётчик udg_uGroup_enum[index], и когда он возникает нуля - запускаю триггер udg_uGroup_trigUnDead[index] - таким образом на карте постоянно спавнятся группы юнитов и я могу отлавливать события на уничтожения этих групп по факту используя только одно событие.
когда в группе юниты спавнятся - я раздаю им index, идентичный шаблону по которому они спавнятся и наращиваю udg_uGroup_enum[index] чтобы отслеживать количества в группах
» WarCraft 3 / удаление событий
Ред. Cancel
» WarCraft 3 / удаление событий
» WarCraft 3 / Jass создать глоабльную переменную
» WarCraft 3 / handle в unitpool - что не так
» WarCraft 3 / handle в unitpool - что не так
» WarCraft 3 / handle в unitpool - что не так
» WarCraft 3 / handle в unitpool - что не так
» WarCraft 3 / handle в unitpool - что не так
Ред. Cancel
» WarCraft 3 / handle в unitpool - что не так
У меня должен быть array unitpool с поддержкой весов
если unitpool переделать в array типов - то получится двумерный массив, которые в варике не поддерживаются.
А так как я на протяжении игры постоянно модифицирую unitpool (добавляю и удаляю юнитов по тем или иным событиям) то вмещать множество массивов в один массив не вариант (при изменении размера одного массива должны смещаться остальные массивы)
» WarCraft 3 / handle в unitpool - что не так
» WarCraft 3 / handle в unitpool - что не так
» WarCraft 3 / handle в unitpool - что не так
» WarCraft 3 / handle в unitpool - что не так
» WarCraft 3 / handle в unitpool - что не так
Туда, например, можно добавить водного элементаля с весом 9, и огненного элементаля с весом 1
Потом можно извлечь из юнитпула случайный тип юнита, и при этом с вероятносью в 90% получишь водного элементаля, и с вероятностью в 10% получишь огненного элементаля
В моей карте нужно сделать массив юнитпулов, чтобы для каждого региона генерировались разные войска, а так как генерация проходит часто и по многу - не хочется сохранять unitpool в хеш-таблице. В соседней теме мне подсказали что хеш работает медленно
Ред. Cancel
» WarCraft 3 / handle в unitpool - что не так
Ред. Cancel
» WarCraft 3 / Jass создать глоабльную переменную
» WarCraft 3 / Jass создать глоабльную переменную
» WarCraft 3 / Jass создать глоабльную переменную
» WarCraft 3 / Jass создать глоабльную переменную
Ред. Cancel
» WarCraft 3 / WE - OE - Движение - Разделение отрядов [...]
Например - если ты хочешь сделать жирную нагу, от которой другие наги отталкиваются - поставь всех наг в общий номер отряда, но жирному поставь повыше приоритет чем у остальных. В итоге он всех будет распихивать, но сам сещаться остальными не будет (кроме своих собратьев с тем же приоритетом
» WarCraft 3 / WE - OE - Движение - Разделение отрядов [...]
» WarCraft 3 / Патч 1.29 вышел на основных серверах
Нет, не жадность, если бы они варкрафт отдавали бесплатно или за копейки - меньше людей покупали бы старкрафт. А теперь когда старкрафт бесплатен - возможно они готовят и варкрафт к бесплатной версии.