Увы но локалки не обнуляются при выходе из функции сами, исключение это локалка аргумент функции...
Я недавно тоже тестил создание 100500 юнитов и смотрел что к чему, с юнитами не все так просто... как выяснилось ивенты повешенные на конкретного юнита никуда не пропадают даже после удаления триггера и юнита .
Создавать триггеры в потоке прелоада низя, точнее вешать на них ивенты ибо заканчивается фаталом, но зато работает кеш и можно записать в кешь из прелоада все что вздумается.
Так же советую сделать всех юнитов суммонами, чтобы они не разлагались
call UnitApplayTimedLife( unit, 'BFig', 0.00 ) это существенно снизит нагрузку на движок
Мм... Дай сабж с такой инфой почитать.
У говорящего с думами вызови волка и убей, кости останутся ? (нет, вызванные не разлагаются а сразу каюк, без кишков и крови)
Ну еще и 100500 юнитов могут начать лагать, 60+ на игрока которые куда то бегут уже не хорошо.
Так же советую сделать всех юнитов суммонами, чтобы они не разлагались
call UnitApplayTimedLife( unit, 'BFig', 0.00 ) это существенно снизит нагрузку на движок
P.S в ваших юнитах совсем не разобрался, какой то кавардак - нету четкого разделения на юнитов для волн, боссы, суммоны героев, герои игроков....
Дикая смешь простого jassа с cjass (не пишите так, потом будет плохо - я вас предупредил)
Как оно выглядит у тебя, переменные мы объявляем где хотим а не вначале...
function Trig_Star_Set_Jass1_pickup_item_Actions takes nothing returns nothing
local integer array item_check
local unit Star_set_item_unit = GetManipulatingUnit()
local boolean array item_check_status
local integer start = 0
//local string text = "Предмет взят"
set item_check[0] = 'I00A'
set item_check[1] = 'I009'
set item_check[2] = 'I00E'
set item_check[3] = 'I00B'
set item_check[4] = 'I00D'
loop
exitwhen ((start > bj_MAX_INVENTORY) or ((item_check_status[0] == true) and (item_check_status[1] == true) and (item_check_status[2] == true) and (item_check_status[3] == true) and (item_check_status[4] == true)))
if ( GetItemTypeId(UnitItemInSlot(Star_set_item_unit, start)) == item_check[0] ) then
set item_check_status[0] = true
// call DisplayTextToForce( GetPlayersAll(), text )
endif
if ( GetItemTypeId(UnitItemInSlot(Star_set_item_unit, start)) == item_check[1] ) then
set item_check_status[1] = true
// call DisplayTextToForce( GetPlayersAll(), text )
endif
if ( GetItemTypeId(UnitItemInSlot(Star_set_item_unit, start)) == item_check[2] ) then
set item_check_status[2] = true
// call DisplayTextToForce( GetPlayersAll(), text )
endif
if ( GetItemTypeId(UnitItemInSlot(Star_set_item_unit, start)) == item_check[3]) then
set item_check_status[3] = true
// call DisplayTextToForce( GetPlayersAll(), text )
endif
if ( GetItemTypeId(UnitItemInSlot(Star_set_item_unit, start)) == item_check[4] ) then
set item_check_status[4] = true
// call DisplayTextToForce( GetPlayersAll(), text )
endif
set start = start + 1
endloop
if ((item_check_status[0] == true) and (item_check_status[1] == true) and (item_check_status[2] == true) and (item_check_status[3] == true) and (item_check_status[4] == true)) then
// call DisplayTextToForce( GetPlayersAll(), text )
call TriggerExecute( gg_trg_Star_Set_Add )
endif
set Star_set_item_unit = null
endfunction
В этой функции мы сделали локальный массив а обнулять его видимо будут чуваки с форума XGM (массивы переменных, если они созданы локально требуют обнуление, 1 значение 2 байте оперативки, не забываем об этом, не нужно обнулять только базовые типы не массивы.)
"если скопировать юнита в редакторе, он будет иметь одинаков handle"
Серьезно?
Не хочу расстраивать, но именно из за такого бага я долго не мог понять, почему мой код не работает, пока не перевел id юнита в текст и не вывел себе сообщением и был удивлен что у двоих юнитов он одинаков.
Хендл - номер структуры в памяти, хендлы находятся в оперативной памяти, а raw-код ( type id как в гуях на инглише) это всего лишь номер строчки в слк таблице, которая сохранена на диске - своего рода база данных откуда движок игры берет начальные данные для создания объекта в оперативной памяти ну и только потом назначает ему уникальный хендл (ну почти всегда, близзарды еще не полечили все баги рекурсии хендлов)
Ну у мастера клинка способность то посложнее...
Вот пример:
Для начала нам нужно создать иллюзии героя, а потом скрыть всех их, так же сделав визуальный эффект (если что то зеленые тени, это снаряды).
DUSPLAY что то там дисинх не вызовит, ибо отвечает только за визуальный эффект. Смотри внимательно, испольщование GetRandomInt /real недопустимо использовать локально, как и создание хендлов, испольщование функций которые создадут или вернут некий объект...
Иллюзии недо-юниты, они не могут использовать активки и предметы, лишь некоторые пассивки работают у иллюзий ( втом. числе и те что добавили триггерно).
Иллюзий найти плевое дело, есть проверка IsUnitIllision а так же событие Юнит призвал вызванное существо, ибо все иллюзии суммоны от конкретных способностей, создать иллюзию триггерно, без способности и юнита не получится...
Если вам нужны именно клоны героя (как арк варден в доте или мипо) то вам нужно создавать героя, обнулять у него все лишнее (вроде отображать как героя на карте команд, скрыть сообщение о гибели), так же необходимо триггерное слежение за такой иллюзией.
quq_CCCP, религия айсфрога запрещает юзать таймеры
об этом даже в заповедях айсфрога сказано
Айсфрог и то ставит событие, что цель и кастер сдохли, чтобы не словить фатал допустим приказывая чо то делать иллюзии спектры, ну лано а тут тупо таймер, переодик триггер тяжелее таймера и нечем не лучше, не говоря о том что когда вы лепите pereodic event триггеру, то внутри его структуры создается такой же таймер как и обычный, который и тикает - смысл использовать триггер если можно использовать таймер?
Так же не забываем акшены и кондишены и боолеспры - это хендлы которые сидят в пямяти, таймер берет только аргумент code.
» WarCraft 3 / Развеивание Жара Преисподней
» WarCraft 3 / Утечка при вызове функции
Я недавно тоже тестил создание 100500 юнитов и смотрел что к чему, с юнитами не все так просто...
как выяснилось ивенты повешенные на конкретного юнита никуда не пропадают даже после удаления триггера и юнита .
» WarCraft 3 / Утечка при вызове функции
» WarCraft 3 / Существует вообще такой способ?
» WarCraft 3 / Как бороться с утечкой Handle при волнах
» WarCraft 3 / Недоступная книга заклинаний
» WarCraft 3 / Как бороться с утечкой Handle при волнах
Так же советую сделать всех юнитов суммонами, чтобы они не разлагались
call UnitApplayTimedLife( unit, 'BFig', 0.00 ) это существенно снизит нагрузку на движок
P.S в ваших юнитах совсем не разобрался, какой то кавардак - нету четкого разделения на юнитов для волн, боссы, суммоны героев, герои игроков....
» WarCraft 3 / Как бороться с утечкой Handle при волнах
» WarCraft 3 / Как бороться с утечкой Handle при волнах
Как оно выглядит у тебя, переменные мы объявляем где хотим а не вначале...
» WarCraft 3 / Как бороться с утечкой Handle при волнах
» WarCraft 3 / Как бороться с утечкой Handle при волнах
Trig_Star_Set_Add_Actions не обнулена локалка, кучка бж функций.
» WarCraft 3 / Как бороться с утечкой Handle при волнах
» WarCraft 3 / Как бороться с утечкой Handle при волнах
» WarCraft 3 / Как бороться с утечкой Handle при волнах
» WarCraft 3 / Способность "Иллюзии" - (Мастер Клинка)
Вот пример:
Для начала нам нужно создать иллюзии героя, а потом скрыть всех их, так же сделав визуальный эффект (если что то зеленые тени, это снаряды).
» WarCraft 3 / есть ли ограничения EVENT на вк3?
» WarCraft 3 / Требуется формула для скилла jass.
» WarCraft 3 / Требуется формула для скилла jass.
Если хочется сделать параболическую траекторию, то вот ссылочка
» WarCraft 3 / GetLocalPlayer и десинхрон
Разумеется локально хайдить виджеты низя.
» WarCraft 3 / GetLocalPlayer и десинхрон
» WarCraft 3 / Способности иллюзии, анимация иллюзии
Иллюзий найти плевое дело, есть проверка IsUnitIllision а так же событие Юнит призвал вызванное существо, ибо все иллюзии суммоны от конкретных способностей, создать иллюзию триггерно, без способности и юнита не получится...
Если вам нужны именно клоны героя (как арк варден в доте или мипо) то вам нужно создавать героя, обнулять у него все лишнее (вроде отображать как героя на карте команд, скрыть сообщение о гибели), так же необходимо триггерное слежение за такой иллюзией.
» WarCraft 3 / есть ли ограничения EVENT на вк3?
» WarCraft 3 / есть ли ограничения EVENT на вк3?
Так же не забываем акшены и кондишены и боолеспры - это хендлы которые сидят в пямяти, таймер берет только аргумент code.
» WarCraft 3 / есть ли ограничения EVENT на вк3?
» WarCraft 3 / есть ли ограничения EVENT на вк3?
Мб у тебя какие то ошибки в коде, дырявые триггеры которые по 100500 раз срабатывают в коде.