32

» WarCraft 3 / Чистка ненужных переменных из Blizzard.j

Друга зачем? Нинада, так толку не будет...
Просто используешь 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 и его знания.
32

» WarCraft 3 / Где -то видел в обсуждении но не могу сейчас найти

Просто RemoveItem( ItemBeginManipulated () ) - удаляем предмет сразу после покупки и все, так же можно заменить модель книжки\руны на импортную (так сделал фрог в доте) или вовсе dummy.mdx если эта руна покупается из магазина.
Блин ну что вы нечего не знаете, вам статью чтоли про руны расписать?
32

» WarCraft 3 / Как ждать меньше 0.10?

Каком к верху, в гуях все через жопу, чтобы использовать таймер, нужно еще и триггер... Ну думаю намек про JASS понятен?
32

» WarCraft 3 / Генерация handle'ов в Warcraft 3

Не все объекты удаляются, яркий пример события триггеров - увы но даже удалив триггер и объект на который было повышено событие ( речь о событиях на конкретный виджет) + часть памяти занимают объекты сидящие на карте, вроде юнитов, Предметов и так далее.
32

» WarCraft 3 / Конфликт способностей предмета и героя

Я так понял фейзы делаем?
Кстати рунами можно очень много чего интересного сделать, к примеру каст аое абилки не сбивающий приказа в любую точку
32

» WarCraft 3 / Zyxel hero siege Пришло время узнать все !

Что то я там jass не увидел, обычная олдовая гуи карта, у автора было много времени и терпения... (скока триггеров по 1-2 действия)
32

» WarCraft 3 / Замена паузы - стан?

Можно использовать магические сети и или одержимость для станов с регулируемой длительностью (пока на юните бафф он неподвижен, ну а триггерно проверяем если на юните бафф от 1 стана, то продлим время жизни даммику (время жизни делаем триггерно, а не дефолтно 1 коммандой).
Есть 1 большое НО
'Apos' possesion (rus - одержимость) - багнутая абилка, если цель заклинания и даммик умрут то вылетит фатальная ошибка, будьте осторожны используя одержимость в качесте оглушающей способности...
32

» WarCraft 3 / Конфликт способностей предмета и героя

Событие приводит способность в действие примененная способность = способность твоего тапка...
32

» WarCraft 3 / Конфликт способностей предмета и героя

когда кативируешь предмет создавай под ногами руну с виндвалком и функцией UnitAddItem добавляй герою, у него будет виндвал и неважно у него там сало, юзнут свой виндвалк и так далее.
Руне нужно ставит модель dummy.mdx и удалять руну сразу же после функции UnitAddItem.
32

» WarCraft 3 / Конфликт способностей предмета и героя

Разные виндвалки надо использовать, а не и тот же что у героя чо у предмета...
Или руны
32

» WarCraft 3 / Десинхронизация на карте (выложил карту)

Простите я вовсе не понимаю как оно должно работать и в что тут играть, если тут копипаст наработок нету не импорта, не способностей ни дамммиков, голая карта с копированым кодом из тест мапов...
Для начале сделайте карту, а потом уже играйте с игроками, вам еще далеко до мультиплеера.
32

» WarCraft 3 / Освобождается ли память корректно после удаления триггера

Кароче что я проверял:
Триггер удаляется полностью с условиями и действиями, боллекспры остаются висеть но они не плодятся как тараканы.
События повешенные на конкретного юнита не удаляются, а остаются висеть в памяти даже если полностью удалить юнита.
Посему юзать периодические триггеры или события работающие на конкретного юнита но имеющие аналоги на всех юнитов игрока стоит только в крайнем случаи (когда иначе никак).
Загруженные файлы
32

» WarCraft 3 / Утечка при вызове функции

Увы но локалки не обнуляются при выходе из функции сами, исключение это локалка аргумент функции...
Я недавно тоже тестил создание 100500 юнитов и смотрел что к чему, с юнитами не все так просто...
как выяснилось ивенты повешенные на конкретного юнита никуда не пропадают даже после удаления триггера и юнита .
32

» WarCraft 3 / Утечка при вызове функции

Во втором случаи неудивительно, не обнуленная локлка осталась висеть в функции, пробуй юзать глобалки либо делай так:
function CreateUnitBj takes uniut u returns unit 
set u = CreateUnit( Player(0), 'hpea', 0.00, 0.00, 0.00 )
return u
endfunction
32

» WarCraft 3 / Существует вообще такой способ?

Создавать триггеры в потоке прелоада низя, точнее вешать на них ивенты ибо заканчивается фаталом, но зато работает кеш и можно записать в кешь из прелоада все что вздумается.
32

» WarCraft 3 / Как бороться с утечкой Handle при волнах

Diaboliko:
Так же советую сделать всех юнитов суммонами, чтобы они не разлагались
call UnitApplayTimedLife( unit, 'BFig', 0.00 ) это существенно снизит нагрузку на движок
Мм... Дай сабж с такой инфой почитать.
У говорящего с думами вызови волка и убей, кости останутся ? (нет, вызванные не разлагаются а сразу каюк, без кишков и крови)
32

» WarCraft 3 / Недоступная книга заклинаний

Что мешает тупо её запретить? Ну или указать требование в виде апгрейда или юнита?
32

» WarCraft 3 / Как бороться с утечкой Handle при волнах

Ну еще и 100500 юнитов могут начать лагать, 60+ на игрока которые куда то бегут уже не хорошо.
Так же советую сделать всех юнитов суммонами, чтобы они не разлагались
call UnitApplayTimedLife( unit, 'BFig', 0.00 ) это существенно снизит нагрузку на движок
P.S в ваших юнитах совсем не разобрался, какой то кавардак - нету четкого разделения на юнитов для волн, боссы, суммоны героев, герои игроков....
32

» WarCraft 3 / Как бороться с утечкой Handle при волнах

Ну про волы поподробнее, то у вас там не все так уж явно, с верху вниз пробежался и глянул, еще у вас походу крипы спаунятся постоянно?
32

» WarCraft 3 / Как бороться с утечкой Handle при волнах

Дикая смешь простого jassа с cjass (не пишите так, потом будет плохо - я вас предупредил)
Как оно выглядит у тебя, переменные мы объявляем где хотим а не вначале...
 call SetUnitInvulnerable( gg_unit_ubon_0063, true )
    call SetUnitInvulnerable( gg_unit_ubon_0115, true )
    call SetUnitInvulnerable( gg_unit_ubon_0120, true )
    call SetUnitInvulnerable( gg_unit_ubon_0126, true )
    call SetUnitInvulnerable( gg_unit_ubon_0131, true )
    call SetUnitInvulnerable( gg_unit_ubon_0177, true )
    call SetUnitInvulnerable( gg_unit_ubon_0176, true )
    call SetUnitInvulnerable( gg_unit_ubon_0175, true )
    call SetUnitInvulnerable( gg_unit_ubon_0174, true )
    call SetUnitInvulnerable( gg_unit_ubon_0173, true )
    call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 45.00, "TRIGSTR_1489")
    local integer start = 0
    loop
        call Spawn_Initialization(start)
        set start = start + 1
        exitwhen start > 9
    endloop
    local location SpawnLoc = Location(GetRectCenterX(gg_rct_Start_Sorl), GetRectCenterY(gg_rct_Start_Sorl))
    call PanCameraToTimed(GetLocationX(SpawnLoc), GetLocationY(SpawnLoc), 0)
    call ClearSelection()
    RemoveLocation(SpawnLoc)
    set udg_FlyingSheep = 3
    set udg_FlyingSheepBeginning = true
    call SetTimeOfDayScale(70.00 * 0.01)
    call ForForce( bj_FORCE_ALL_PLAYERS, function Trig_Initialization_jass_Func016002 )
    call ForForce( bj_FORCE_ALL_PLAYERS, function Trig_Initialization_jass_Func017002 )
    call ForForce( bj_FORCE_ALL_PLAYERS, function Trig_Initialization_jass_Func019002 )
    call SetFloatGameState(GAME_STATE_TIME_OF_DAY, bj_MELEE_STARTING_TOD)
    call SetPlayerState( Player(11) , PLAYER_STATE_GIVES_BOUNTY, IntegerTertiaryOp(true, 1, 0))
    call SetPlayerFlagBJ( PLAYER_STATE_GIVES_BOUNTY, true, Player(11) )
    call PlayThematicMusic("Sound\\Music\\mp3Music\\Undead3.mp3")
    call SetSoundVolume(bj_lastPlayedSound, PercentToInt(100.00, 127))
    call TriggerExecute( gg_trg_CreateLeaderBoard )
    set Hash = InitHashtable()
Вот как Adic Helper переделает код
function Trig_Initialization_jass_Actions takes nothing returns nothing
    local location SpawnLoc = null
    local integer start = 0
    call SetUnitInvulnerable( gg_unit_ubon_0063, true )
    call SetUnitInvulnerable( gg_unit_ubon_0115, true )
    call SetUnitInvulnerable( gg_unit_ubon_0120, true )
    call SetUnitInvulnerable( gg_unit_ubon_0126, true )
    call SetUnitInvulnerable( gg_unit_ubon_0131, true )
    call SetUnitInvulnerable( gg_unit_ubon_0177, true )
    call SetUnitInvulnerable( gg_unit_ubon_0176, true )
    call SetUnitInvulnerable( gg_unit_ubon_0175, true )
    call SetUnitInvulnerable( gg_unit_ubon_0174, true )
    call SetUnitInvulnerable( gg_unit_ubon_0173, true )
    call DisplayTimedTextToPlayer(GetLocalPlayer(), 0, 0, 45.00, "TRIGSTR_1489")
    loop
        call Spawn_Initialization(start)
        set start = start + 1
        exitwhen start > 9
    endloop
    set SpawnLoc = Location(GetRectCenterX(gg_rct_Start_Sorl), GetRectCenterY(gg_rct_Start_Sorl))
    call PanCameraToTimed(GetLocationX(SpawnLoc), GetLocationY(SpawnLoc), 0)
    call ClearSelection()
    call RemoveLocation(SpawnLoc)
    set udg_FlyingSheep = 3
    set udg_FlyingSheepBeginning = true
    call SetTimeOfDayScale(70.00 * 0.01)
    call ForForce( bj_FORCE_ALL_PLAYERS, function Trig_Initialization_jass_Func016002 )
    call ForForce( bj_FORCE_ALL_PLAYERS, function Trig_Initialization_jass_Func017002 )
    call ForForce( bj_FORCE_ALL_PLAYERS, function Trig_Initialization_jass_Func019002 )
    call SetFloatGameState(GAME_STATE_TIME_OF_DAY, bj_MELEE_STARTING_TOD)
    call SetPlayerState( Player(11) , PLAYER_STATE_GIVES_BOUNTY, IntegerTertiaryOp(true, 1, 0))
    call SetPlayerFlagBJ( PLAYER_STATE_GIVES_BOUNTY, true, Player(11) )
    call PlayThematicMusic("Sound\\Music\\mp3Music\\Undead3.mp3")
    call SetSoundVolume(bj_lastPlayedSound, PercentToInt(100.00, 127))
    call TriggerExecute( gg_trg_CreateLeaderBoard )
    set Hash = InitHashtable()
endfunction
Кстати неужели нельзя было написать так
call PanCameraToTimed( GetRectCenterY(gg_rct_Start_Sorl), GetRectCenterX(gg_rct_Start_Sorl), 0)
В 1 сточку и не надо даже никаких переменных, которые ты все равно не обнуляешь и ловишь утечки.
32

» WarCraft 3 / Как бороться с утечкой Handle при волнах

так же
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 байте оперативки, не забываем об этом, не нужно обнулять только базовые типы не массивы.)
32

» WarCraft 3 / Как бороться с утечкой Handle при волнах

Сударь, а теперь внимательно посмотрите скрин и прочитайте что я там написал...
Trig_Star_Set_Add_Actions не обнулена локалка, кучка бж функций.
32

» WarCraft 3 / Как бороться с утечкой Handle при волнах

Ну как и думал, туча гуи триггеров и все те же ошибки - location мы не удаляем (а лучше и вовсе не юзать, ну кроме редких случаев )
Загруженные файлы
32

» WarCraft 3 / Как бороться с утечкой Handle при волнах

FlyTab:
l_Avenger_l:
"если скопировать юнита в редакторе, он будет иметь одинаков handle"
Серьезно?
Не хочу расстраивать, но именно из за такого бага я долго не мог понять, почему мой код не работает, пока не перевел id юнита в текст и не вывел себе сообщением и был удивлен что у двоих юнитов он одинаков.
Хендл - номер структуры в памяти, хендлы находятся в оперативной памяти, а raw-код ( type id как в гуях на инглише) это всего лишь номер строчки в слк таблице, которая сохранена на диске - своего рода база данных откуда движок игры берет начальные данные для создания объекта в оперативной памяти ну и только потом назначает ему уникальный хендл (ну почти всегда, близзарды еще не полечили все баги рекурсии хендлов)