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