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 как в гуях на инглише) это всего лишь номер строчки в слк таблице, которая сохранена на диске - своего рода база данных откуда движок игры берет начальные данные для создания объекта в оперативной памяти ну и только потом назначает ему уникальный хендл (ну почти всегда, близзарды еще не полечили все баги рекурсии хендлов)
32

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

Карту в студию, желательно с комментариями. то тут уже был один юнный IceFrog у которого в карте черт ногу сломит.
32

» WarCraft 3 / Способность "Иллюзии" - (Мастер Клинка)

Принятый ответ
Ну у мастера клинка способность то посложнее...
Вот пример:
Для начала нам нужно создать иллюзии героя, а потом скрыть всех их, так же сделав визуальный эффект (если что то зеленые тени, это снаряды).
Загруженные файлы
32

» WarCraft 3 / есть ли ограничения EVENT на вк3?

Принятый ответ
Походу дело было в баганой модели спецэффекта, которая и вызывала просадку фпс.
32

» WarCraft 3 / Требуется формула для скилла jass.

Kinade:
А можно пример? Парабола там не робит
Open_Dota - смотрим тини и мирану, там как раз эта формула параболы.
32

» WarCraft 3 / Требуется формула для скилла jass.

GetLocationZ() + GetUnitFlyingHeigh() если в качестве снарада используется дамми юнит.
Если хочется сделать параболическую траекторию, то вот ссылочка
32

» WarCraft 3 / GetLocalPlayer и десинхрон

nvc123:
quq_CCCP, сокрытие объектов которые активно участвуют в игровом взаимодействии (юниты, разрушаемые) вызовет десинк
Ты это про хайды виджетов, я про тексты, мультиборды, цвета, пинги и прочие визуалки.
Разумеется локально хайдить виджеты низя.
32

» WarCraft 3 / GetLocalPlayer и десинхрон

DUSPLAY что то там дисинх не вызовит, ибо отвечает только за визуальный эффект. Смотри внимательно, испольщование GetRandomInt /real недопустимо использовать локально, как и создание хендлов, испольщование функций которые создадут или вернут некий объект...
32

» WarCraft 3 / Способности иллюзии, анимация иллюзии

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

» WarCraft 3 / есть ли ограничения EVENT на вк3?

nvc123:
quq_CCCP, религия айсфрога запрещает юзать таймеры
об этом даже в заповедях айсфрога сказано
Айсфрог и то ставит событие, что цель и кастер сдохли, чтобы не словить фатал допустим приказывая чо то делать иллюзии спектры, ну лано а тут тупо таймер, переодик триггер тяжелее таймера и нечем не лучше, не говоря о том что когда вы лепите pereodic event триггеру, то внутри его структуры создается такой же таймер как и обычный, который и тикает - смысл использовать триггер если можно использовать таймер?
Так же не забываем акшены и кондишены и боолеспры - это хендлы которые сидят в пямяти, таймер берет только аргумент code.
32

» WarCraft 3 / есть ли ограничения EVENT на вк3?

карту, код в студию...
Мб у тебя какие то ошибки в коде, дырявые триггеры которые по 100500 раз срабатывают в коде.
32

» WarCraft 3 / Для каждого юнита дами юнит

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

» WarCraft 3 / Замедление с малым периодом

nvc123:
Melissa, мы уже писали что ауры не подходят по некоторым причинам
quq_CCCP, что ты имеешь ввиду под белым мс?
если мс по умолчанию то есть функция
GetUnitDefaultMoveSpeed
всё проблема в модификаторах мс которые могут динамически добавляться/удаляться
То что сейчас у юнита, а что сьели замедления.
32

» WarCraft 3 / Плавное увеличение высоты юнита

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

» WarCraft 3 / Venomus Gale

Clamp:
забывая про то что можно вовсе не создавать boolexpr
Вот только использование null вместо переменной типа boolexpr вызывает утечку. За пруфами в поиск, это были слова ADOLF'а, и ему определённо можно (и нужно) верить в подобных темах
До 1.23 а, щяс вроде поправили.
32

» WarCraft 3 / Замедление с малым периодом

nvc123:
Diaboliko, ну удачи тогда
предоставишь пруф(с 2 переменными) и я с радостью соглашусь с тем что я нуб
и опыта накину
только не забывай что мс может даваться как в единицах (сапог например) так и в % (всякие баффы)
и может меняться в тот момент когда юнит находится под замедлением
в качестве пруфа сойдёт небольшой пример замедляющий юнита на 5 секунд на 20% сделанный триггерно без спелла замедления
Реализуймо только через ретурн баг, найти ячейку белой скорости в структуре юнита, ну а потом делать что хочется, так же подсмотреть есть ли стандартные модификаторы скорости, но вот пока наработок сего чуда не видел.
32

» WarCraft 3 / Построено ли здание

Событие триггера же вроде есть - завершает строительство...
32

» WarCraft 3 / Воостановление карты после вылета

Принятый ответ
Ток бекап, видимо синий экран вылетел в момен когда редактор удалил старую карту и начал создавать новую, сохраняя данные в архив - архив битый, т.к не содержит всех данных, которые не были сохранены редактором.
Если используешь JNGP - то папочка backups в помощь, там твои труды за полгода=)
32

» WarCraft 3 / Смещение юнитов в игре.

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