Друга зачем? Нинада, так толку не будет...
Просто используешь Inject main (vjass) или Define (Cjass) чтобы убрать 1 только строчку из main
//***************************************************************************
//*
//* Map Configuration
//*
//***************************************************************************
//***************************************************************************
//*
//* Main Initialization
//*
//***************************************************************************
//===========================================================================
function main takes nothing returns nothing
call SetCameraBounds(- 3328.0 + GetCameraMargin(CAMERA_MARGIN_LEFT), - 3584.0 + GetCameraMargin(CAMERA_MARGIN_BOTTOM), 3328.0 - GetCameraMargin(CAMERA_MARGIN_RIGHT), 3072.0 - GetCameraMargin(CAMERA_MARGIN_TOP), - 3328.0 + GetCameraMargin(CAMERA_MARGIN_LEFT), 3072.0 - GetCameraMargin(CAMERA_MARGIN_TOP), 3328.0 - GetCameraMargin(CAMERA_MARGIN_RIGHT), - 3584.0 + GetCameraMargin(CAMERA_MARGIN_BOTTOM))
call SetDayNightModels("Environment\\DNC\\DNCLordaeron\\DNCLordaeronTerrain\\DNCLordaeronTerrain.mdl", "Environment\\DNC\\DNCLordaeron\\DNCLordaeronUnit\\DNCLordaeronUnit.mdl")
call NewSoundEnvironment("Default")
call SetAmbientDaySound("SunkenRuinsDay")
call SetAmbientNightSound("SunkenRuinsNight")
call SetMapMusic("Music", true, 0)
call InitBlizzard() // вот и все, удалим и не будет бж объектов.
call InitGlobals()
call InitCustomTriggers()
call RunInitializationTriggers()
endfunction
Совсем забыл, функция main генерируется при сохранении карты в редакторе
Без cjass или vjass придется выколупывать war3map.j (код карты) файл из карты и править ручками в блокнотике, геморойно до безобразия, за то ненужен c\vjass и его знания.
Просто RemoveItem( ItemBeginManipulated () ) - удаляем предмет сразу после покупки и все, так же можно заменить модель книжки\руны на импортную (так сделал фрог в доте) или вовсе dummy.mdx если эта руна покупается из магазина. Блин ну что вы нечего не знаете, вам статью чтоли про руны расписать?
Не все объекты удаляются, яркий пример события триггеров - увы но даже удалив триггер и объект на который было повышено событие ( речь о событиях на конкретный виджет) + часть памяти занимают объекты сидящие на карте, вроде юнитов, Предметов и так далее.
Можно использовать магические сети и или одержимость для станов с регулируемой длительностью (пока на юните бафф он неподвижен, ну а триггерно проверяем если на юните бафф от 1 стана, то продлим время жизни даммику (время жизни делаем триггерно, а не дефолтно 1 коммандой). Есть 1 большое НО
'Apos' possesion (rus - одержимость) - багнутая абилка, если цель заклинания и даммик умрут то вылетит фатальная ошибка, будьте осторожны используя одержимость в качесте оглушающей способности...
когда кативируешь предмет создавай под ногами руну с виндвалком и функцией UnitAddItem добавляй герою, у него будет виндвал и неважно у него там сало, юзнут свой виндвалк и так далее.
Руне нужно ставит модель dummy.mdx и удалять руну сразу же после функции UnitAddItem.
Простите я вовсе не понимаю как оно должно работать и в что тут играть, если тут копипаст наработок нету не импорта, не способностей ни дамммиков, голая карта с копированым кодом из тест мапов...
Для начале сделайте карту, а потом уже играйте с игроками, вам еще далеко до мультиплеера.
Кароче что я проверял:
Триггер удаляется полностью с условиями и действиями, боллекспры остаются висеть но они не плодятся как тараканы.
События повешенные на конкретного юнита не удаляются, а остаются висеть в памяти даже если полностью удалить юнита.
Посему юзать периодические триггеры или события работающие на конкретного юнита но имеющие аналоги на всех юнитов игрока стоит только в крайнем случаи (когда иначе никак).
Увы но локалки не обнуляются при выходе из функции сами, исключение это локалка аргумент функции...
Я недавно тоже тестил создание 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 как в гуях на инглише) это всего лишь номер строчки в слк таблице, которая сохранена на диске - своего рода база данных откуда движок игры берет начальные данные для создания объекта в оперативной памяти ну и только потом назначает ему уникальный хендл (ну почти всегда, близзарды еще не полечили все баги рекурсии хендлов)
» WarCraft 3 / Чистка ненужных переменных из Blizzard.j
Просто используешь Inject main (vjass) или Define (Cjass) чтобы убрать 1 только строчку из main
Без cjass или vjass придется выколупывать war3map.j (код карты) файл из карты и править ручками в блокнотике, геморойно до безобразия, за то ненужен c\vjass и его знания.
» WarCraft 3 / Где -то видел в обсуждении но не могу сейчас найти
Блин ну что вы нечего не знаете, вам статью чтоли про руны расписать?
» WarCraft 3 / Как ждать меньше 0.10?
» WarCraft 3 / Генерация handle'ов в Warcraft 3
» WarCraft 3 / Конфликт способностей предмета и героя
Кстати рунами можно очень много чего интересного сделать, к примеру каст аое абилки не сбивающий приказа в любую точку
» WarCraft 3 / Zyxel hero siege Пришло время узнать все !
» WarCraft 3 / Замена паузы - стан?
Есть 1 большое НО
'Apos' possesion (rus - одержимость) - багнутая абилка, если цель заклинания и даммик умрут то вылетит фатальная ошибка, будьте осторожны используя одержимость в качесте оглушающей способности...
» WarCraft 3 / Конфликт способностей предмета и героя
» WarCraft 3 / Конфликт способностей предмета и героя
Руне нужно ставит модель dummy.mdx и удалять руну сразу же после функции UnitAddItem.
» 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 при волнах