Простите я вовсе не понимаю как оно должно работать и в что тут играть, если тут копипаст наработок нету не импорта, не способностей ни дамммиков, голая карта с копированым кодом из тест мапов...
Для начале сделайте карту, а потом уже играйте с игроками, вам еще далеко до мультиплеера.
Кароче что я проверял:
Триггер удаляется полностью с условиями и действиями, боллекспры остаются висеть но они не плодятся как тараканы.
События повешенные на конкретного юнита не удаляются, а остаются висеть в памяти даже если полностью удалить юнита.
Посему юзать периодические триггеры или события работающие на конкретного юнита но имеющие аналоги на всех юнитов игрока стоит только в крайнем случаи (когда иначе никак).
Увы но локалки не обнуляются при выходе из функции сами, исключение это локалка аргумент функции...
Я недавно тоже тестил создание 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 а так же событие Юнит призвал вызванное существо, ибо все иллюзии суммоны от конкретных способностей, создать иллюзию триггерно, без способности и юнита не получится...
Если вам нужны именно клоны героя (как арк варден в доте или мипо) то вам нужно создавать героя, обнулять у него все лишнее (вроде отображать как героя на карте команд, скрыть сообщение о гибели), так же необходимо триггерное слежение за такой иллюзией.
» WarCraft 3 / Конфликт способностей предмета и героя
Или руны
» WarCraft 3 / Десинхронизация на карте (выложил карту)
Для начале сделайте карту, а потом уже играйте с игроками, вам еще далеко до мультиплеера.
» WarCraft 3 / Освобождается ли память корректно после удаления триггера
Триггер удаляется полностью с условиями и действиями, боллекспры остаются висеть но они не плодятся как тараканы.
События повешенные на конкретного юнита не удаляются, а остаются висеть в памяти даже если полностью удалить юнита.
Посему юзать периодические триггеры или события работающие на конкретного юнита но имеющие аналоги на всех юнитов игрока стоит только в крайнем случаи (когда иначе никак).
» 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?