6

» WarCraft 3 / Проблема ТD карты

Мне как то советовали использовать, несколько игроков для врагов я решил иначе оптимизацией, но можно попробовать через несколько игроков.
6

» WarCraft 3 / Как в редакторе варкрафт 3 сделать команду -save?

Принятый ответ
Сделать триггер для проверки кода, ну и организовать систему для его считывания и поверь это очень много всего, придется продумать.
Если коротко ты цифрами будешь (условно) сохранять своего героя, каждый набор цифр отвечает за какой то параметр героя, силу, ловкость, уровень, предметы и так далее, когда я говорю что это очень много всего придется продумать так и есть, тебе придется создать базу данных, для всех чисел и все проверять при введении команды, для защиты можно сверять суму чисел и проверять героя за которого играет игрок.
Мой тебе совет, не поленись и вбей в поиск "сделать команду save для карты варкрафт 3", на твое удивление там будет то что тебе нужно, уже на второй ссылке.
6

» WarCraft 3 / Бросок условие

Rulex1:
Драконьчик, Спасибо
Драконьчик, Не реагируют на способность "Укрыться за щитом", для теста пробовал другую способность - работает, почему может не реагировать на способность "Укрыться за щитом"?
Драконьчик:
Вы немного ошиблись проектом.
И по делу: сделать всё достаточно просто.
  1. Создай нестандартного юнита без модели, без радиуса видимости со способностью Москиты (чтобы он не отображался нигде и его нельзя было выделить), затем создай требование в РО для "Броска", что требуется этот юнит. Дальше уже триггерно делаешь так, чтобы при использовании способности "Укрыться за щитом" игроку-владельцу давали нужного юнита и наоборот.
  1. При активировании способности "Укрыться за щитом" добавляй переключающего юнита в отряд и удаляй при деактивцаии. При начале применения броска проверяй - есть ли юнит в отряде. Если есть - ничего не делать, если нет - отменить приказ.
Не реагируют на способность "Укрыться за щитом", для теста пробовал другую способность - работает, почему может не реагировать на способность "Укрыться за щитом"?
Проверь уникальный ли у нее пункт "Порядок строк включен" он не должен совпадать с другими, которые используются в связке.
Могу скинуть триггер на Jass для отслежки ид приказа, при нажатии на клавишу способности, но вот как это тебе реализовать на GUI не скажу, не занимался таким. Там есть события и одно из них "EVENT_PLAYER_UNIT_ISSUED_ORDER" скорее оно тебе и нужно.
Посмотрел немного, вот такой вам вариант пойдет ?
Два триггера S001 и S002 первый удаляет способность при поднятии щита, второй добавляет при его опускании.
6

» WarCraft 3 / Ошибка, проверьте меня пожалуйста.

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

» WarCraft 3 / Как отследить баф (GUI)

Maxim105:
l_Avenger_l:
Каждую секунду пикаешь юнитов по всей карте,если есть бафф то дать способность если нету баффа и есть способность (крита) то удалить способность<
Нужна помощь, как остледить условием что у героя есть способность ниже на скрине, у меня абилитибейнкаст , может что-то другое, но что?
Есть аура "Aura Fate" и сам баф "Aura Fate ( aura)"
Как сделать чтобы те кто под бафом получили способность критический удар "Aura Fate ( item )" ? [на GUI]
______
Впервые делаю такое, чет не могу сообразить как это осуществить правильно
Вот то что нужно, как пример, если способности нету будет 0 и условия не выполниться, если есть будет больше.
Это только что бы отследить есть ли способность.

Конкретно то что тебе нужно, здесь достаточно просто изменить способность, которую удаляешь и даешь, ну и баф.
6

» WarCraft 3 / Проблема из способностью канал

Пушистый:
Тебе нужно изменить у способностей одну строку, которая называется базовый ID приказа (+порядок строк). Просто, если он одинаковый, то срабатывают все неправильно, если у героя все способности канала с одинаковым ID.
То что я и искал, спасибо тебе :)
6

» WarCraft 3 / 10 Hero's Siege Phoenix

Увы на карте, сейчас найдены утечки, я занимаюсь их устранением, оказались они в местах, от которых их не ждал, потому позже будет выложена версия без утечек, сейчас волны миньонов создают в карте проблему при длительной игре, а так же другие триггеры, на данный момент половину триггеров уже приведено в нужное состояние.
FlyTab:
Увы на карте, сейчас найдены утечки, я занимаюсь их устранением, оказались они в местах, от которых их не ждал, потому позже будет выложена версия без утечек, сейчас волны миньонов создают в карте проблему при длительной игре, а так же другие триггеры, на данный момент половину триггеров уже приведено в нужное состояние.
Ошибки исправил, смело играйте :)
6

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

Emerald Gem:
FlyTab:
после этого удалиться все даже его события и его нельзя будет вызвать командой TriggerExecute(gg_trg), я уже проверял это
Т.е. при следующем запуске карты, этот триггер невозможно будет включить обычными способами?
При запуске карты он создается снова, если вам нужно удалить его из карты, просто выберите его и удалите в редакторе, вместе с ним удалиться и переменная триггера, если у вас глобальная переменная триггера через cJass, ее нужно тоже будет убрать, если вы создавали его с помощью GUI и использовали переменную от GUI , там будет переменная которая сама удалиться при удалении триггера.
После удаления, при запуске триггера не будет.
Первая команда удаляет его через команды с другого триггера при игре, вторая просто отключает его условия, но не удаляет(его можно вызвать, но он работать не будет на своих событиях), не используйте их вместе.
А за безвозвратное удаление я написал выше.
Скиньте карту и что нужно удалить, тогда точней скажу. Может у вас чужая наработка, где просто создается лишний триггер, через другой.
Загруженные файлы
6

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

Я не знаю в чем суть вашей проблемы, триггер можно просто отключить, DisableTrigger(gg_trg) (при этом его события больше не будут работать) или как вы хотите DestroyTrigger(gg_trg), после этого удалиться все даже его события и его нельзя будет вызвать командой TriggerExecute(gg_trg), я уже проверял это, при повторной активации нужно добавлять снова события. Но говорят части в оператвке остаються.
Для повторной активации его нужно создать как в функции инициализации, но помните функция этого триггера работает только раз, по новой его можно создать с другого триггера.
6

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

Ige:
FlyTab, если уже имеются координаты х,у, зачем выполнять лишнее действие?)
Любим вот таким издевательством над собой заниматься :D
6

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

Ige:
FlyTab, рекомендую вместо
native CreateUnitAtLoc takes player id, integer unitid, location whichLocation, real face returns unit
использовать
native CreateUnit takes player id, integer unitid, real x, real y, real face returns unit
и тогда сразу же исчезнет надобность создавать точку (location)
Ну это уже кому как, я попробую тоже использовать это, просто увидел что при правильной очистке точек, удаляются и их Handle.
Увы но это чаще так, в Warcraft 3 нам предлагают возможность создать множество всего, но оптимизацию они складывают на плечи разработчиков карт, что не особо верно, не пробовал Dota 2 workshoop tools, но думаю там таки есть авто очистка мусора, аналогичная Java или других языков.
6

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

Ige:
FlyTab, как раз 6 выходит, последняя функция выполняется 3 раза, т.к. находится в цикле
    loop 
        exitwhen  IntVarA1 > 2
		//
        call IssuePointOrderLoc(LoadUnitHandle(Hash,GetHandleId(GetExpiredTimer()),6+IntVarA1), OrderId2String(852125), Location(LoadReal(Hash,GetHandleId(GetExpiredTimer()),2), LoadReal(Hash,GetHandleId(GetExpiredTimer()),3)))
		//
        set IntVarA1 = IntVarA1 + 1
    endloop
Уже выловил утечку, да уж, при цикле оказывается терялась ссылка на локацию и потому даляло 1 шт, вместо 3 и вот оттуда 2шт лишних, теперь нету спасибо.
quq_CCCP:
Ну еще и 100500 юнитов могут начать лагать, 60+ на игрока которые куда то бегут уже не хорошо.
Так же советую сделать всех юнитов суммонами, чтобы они не разлагались
call UnitApplayTimedLife( unit, 'BFig', 0.00 ) это существенно снизит нагрузку на движок
P.S в ваших юнитах совсем не разобрался, какой то кавардак - нету четкого разделения на юнитов для волн, боссы, суммоны героев, герои игроков....
Это как раз то что искал, проверил при спавне 200 монстров, Handle удалялись как положено и возвращались в исходное состояние, тем самым лишая проблемы. Тему закрываю.
Ige:
игра тормозит с командами если юнитов на карте больше какого то n-го количества и они попадают в ступор и идут по 3 шага, было такое до таймера смерти.
FlyTab, можно распределить монстров между игроками, тогда они не будут так "тупить". Используй нейтралов для этой цели.

И дело тут не в утечках, это баг/фича самого варкрафта
Я из за этого отказался от команды Атака, при которой был полезный эффект в виде, кастования магии врагами.
6

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

Ige:
FlyTab, создаёшь точки (location) и не удаляешь их

здесь
SaveUnitHandle(Hash,GetHandleId(GetExpiredTimer()),6,CreateUnitAtLoc(LoadPlayerHandle(Hash,GetHandleId(GetExpiredTimer()),4), 'h005', Location(LoadReal(Hash,GetHandleId(GetExpiredTimer()),2), LoadReal(Hash,GetHandleId(GetExpiredTimer()),3)), LoadReal(Hash,GetHandleId(GetExpiredTimer()),1) ))

SaveUnitHandle(Hash,GetHandleId(GetExpiredTimer()),7,CreateUnitAtLoc(LoadPlayerHandle(Hash,GetHandleId(GetExpiredTimer()),4), 'h005', Location(LoadReal(Hash,GetHandleId(GetExpiredTimer()),2), LoadReal(Hash,GetHandleId(GetExpiredTimer()),3)), (LoadReal(Hash,GetHandleId(GetExpiredTimer()),1) - 45.00)))

SaveUnitHandle(Hash,GetHandleId(GetExpiredTimer()),8,CreateUnitAtLoc(LoadPlayerHandle(Hash,GetHandleId(GetExpiredTimer()),4), 'h005', Location(LoadReal(Hash,GetHandleId(GetExpiredTimer()),2), LoadReal(Hash,GetHandleId(GetExpiredTimer()),3)), (LoadReal(Hash,GetHandleId(GetExpiredTimer()),1) + 45.00)))
и здесь
        call IssuePointOrderLoc(LoadUnitHandle(Hash,GetHandleId(GetExpiredTimer()),6+IntVarA1), OrderId2String(852125), Location(LoadReal(Hash,GetHandleId(GetExpiredTimer()),2), LoadReal(Hash,GetHandleId(GetExpiredTimer()),3)))
Даже при таком изменении где то течет на 2 Handle, узнать бы где :(
6

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

Если хорошо разбираетесь помогите с утечкой 6 Handle в способности Волна Силы (Вождя минотавров), называется "Trigger0PowerWave" в способностях триггер. Уже кажись все перепробовал, но меньше 6 никогда не становится.
Количество переменных уменьшил до двух и Хеш таблицы. Но ниже 6 никак не падает, хотя хеш чиститься точно, после действий.
Загруженные файлы
6

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

avuremybe:
quq_CCCP, а если в редакторе просто поубирать галочки «разлагается», разве не то же самое будет?
Мне все равно их убивать нужно, игра тормозит с командами если юнитов на карте больше какого то n-го количества и они попадают в ступор и идут по 3 шага, было такое до таймера смерти.
quq_CCCP:
Ну еще и 100500 юнитов могут начать лагать, 60+ на игрока которые куда то бегут уже не хорошо.
Так же советую сделать всех юнитов суммонами, чтобы они не разлагались
call UnitApplayTimedLife( unit, 'BFig', 0.00 ) это существенно снизит нагрузку на движок
P.S в ваших юнитах совсем не разобрался, какой то кавардак - нету четкого разделения на юнитов для волн, боссы, суммоны героев, герои игроков....
За ту команду не знаю, вроде как она хуже 'BTLF', так как при этой команде юниты умирают без эффектов, а здесь они вызывают молнию и на примере Дамми юнитов уже плохо получается.
Подправил пока, тот что вы дали удалил там эффект молний из заклинания.
6

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

quq_CCCP:
Ну про волы поподробнее, то у вас там не все так уж явно, с верху вниз пробежался и глянул, еще у вас походу крипы спаунятся постоянно?
В зависимости от того сколько разрушенных костяных заводов, сначала 3 раза переключаються, отключая предыдущий спавн, а последний добавляется, дополнительно к предпоследнему. На центре когда атакуешь баззу отключаются пред последние и включается центральный финальный, последние с големами остаются. Функция в первом триггере. Переключения в SwitchAttacker, пока там не было никаких правок.
6

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

quq_CCCP:
Дикая смешь простого 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 сточку и не надо даже никаких переменных, которые ты все равно не обнуляешь и ловишь утечки.
Я в курсе как компилятор переделывает код и как переносит, так удобно понимать, а сам принцип я и так знаю.
Цитирую себя опять "Как бороться с утечкой Handle при волнах", эти ответы можно приравнять к оффтопу, мне интересен только этот момент, он ведет к огромным утечкам, остальные я рано или поздно исправлю.
6

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

quq_CCCP:
так же
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 байте оперативки, не забываем об этом, не нужно обнулять только базовые типы не массивы.)
Серьезно integer вы советуете обнулять или может boolean который по сути 1 байт (0 или 1) ?
6

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

quq_CCCP:
Сударь, а теперь внимательно посмотрите скрин и прочитайте что я там написал...
А теперь возьмите и отключите спавн юнитов и посмотрите на Handle, я пришел с этой проблемой с теми вещами на GUI я еще просто не добрался до тех функций, как следует, конкретно в моем случаи вы мне не подсказываете, а лишь тыкаете на места, про которые суть в этом вопросе и не стояла, здесь мне лишь интересен способ оптимизировать спав и не более.
6

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

quq_CCCP:
Ну как и думал, туча гуи триггеров и все те же ошибки - location мы не удаляем (а лучше и вовсе не юзать, ну кроме редких случаев )
Какие еще те же ошибки я локации не удаляю, потому что буду после 1000 раз или более их создавать, а куски остаються в памяти, эх надеялся нормальный ответ услышать, а снова это, внимательней изучите и поймете, где локации и почему я не удаляю для юнитов их.
Там где нужно я их удаляю и это можно найти.
    set NeedLoc[0] = Location(GetRectCenterX(gg_rct_LL_032), GetRectCenterY(gg_rct_LL_032))
    set NeedLoc[1] = Location(GetRectCenterX(gg_rct_Region_LL2), GetRectCenterY(gg_rct_Region_LL2))
    set NeedLoc[2] = Location(GetRectCenterX(gg_rct_Far_Left_Left), GetRectCenterY(gg_rct_Far_Left_Left))
    set NeedLoc[3] = Location(GetRectCenterX(gg_rct_Region_L1), GetRectCenterY(gg_rct_Region_L1))
    set NeedLoc[4] = Location(GetRectCenterX(gg_rct_Far_Mid_Left), GetRectCenterY(gg_rct_Far_Mid_Left))
    set NeedLoc[5] = Location(GetRectCenterX(gg_rct_Region_C1), GetRectCenterY(gg_rct_Region_C1))
    set NeedLoc[6] = Location(GetRectCenterX(gg_rct_Far_Center), GetRectCenterY(gg_rct_Far_Center))
    set NeedLoc[7] = Location(GetRectCenterX(gg_rct_DarknessEnd), GetRectCenterY(gg_rct_DarknessEnd))
    set NeedLoc[8] = Location(GetRectCenterX(gg_rct_Region_R1), GetRectCenterY(gg_rct_Region_R1))
    set NeedLoc[9] = Location(GetRectCenterX(gg_rct_Far_Mid_Right), GetRectCenterY(gg_rct_Far_Mid_Right))
    set NeedLoc[10] = Location(GetRectCenterX(gg_rct_Region_RR2), GetRectCenterY(gg_rct_Region_RR2))
    set NeedLoc[11] = Location(GetRectCenterX(gg_rct_Far_Right_Right), GetRectCenterY(gg_rct_Far_Right_Right))
    set Attackloc = Location(GetRectCenterX(gg_rct_Base), GetRectCenterY(gg_rct_Base))
Эти локации служат для постоянных точек спавна (постоянных, зачем мне их каждый раз по новому объявлять).
Этим изменениям кода, я убавил утечки в два раза где то.
Все ясно, здесь я от вас жду реального ответа, а получаю лишь предрассудки, не прочитав кода, вы делаете вывод.
6

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

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

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

quq_CCCP:
Карту в студию, желательно с комментариями. то тут уже был один юнный IceFrog у которого в карте черт ногу сломит.
С комментариями к сожалению не помогу, слишком много кода, весь описывать долго будет.
GetLocalPlayer:
если скопировать юнита в редакторе, он будет иметь одинаков handle, такое нельзя как то использовать в карте, что бы для юнитов не создавались новые, переменная у меня одна, для юнитов(глобальная), что бы избежать частого создания, просто обнуляється в конце всех действий
Кто-нибудь вообще понял, что это означает?
Автор, разберись хотя бы в терминологии, что есть handle и что есть raw-код юнита. Ну полную ахинею же несешь.
id скопированного юнита идентичен, своему оригиналу, попробуй сделать проверку и какое то действия и убедишься, именно того кто скопирован с того кто стоит на карте.
6

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

l_Avenger_l:
"если скопировать юнита в редакторе, он будет иметь одинаков handle"
Серьезно?
Не хочу расстраивать, но именно из за такого бага я долго не мог понять, почему мой код не работает, пока не перевел id юнита в текст и не вывел себе сообщением и был удивлен что у двоих юнитов он одинаков.
6

» WarCraft 3 / Динамическая погода

Хотел добавить, а разве созданные эффекты погоды не ведут к утечкам без очистки. Может логично добавить как на скриншоте.
А так проблема у вас в разбросе чисел при проверке карты, уберите фиксированный и будет все в порядке.
Загруженные файлы
6

» WarCraft 3 / Динамическая погода

sleep:
Не надо выдумывать велосипеды, всё уже давно сделано другими. Смотри как здесь и учись:
Что тот вариант от автора, что ваш совсем верным не назвать в обоих авторы используют wait, когда нужно wait game time, так как при включении паузы таймер дальше работает, что глупо с точки зрения игры. Я уже молчу о Юните с аурой по сути, автор хотел просто погоду, а вы еще и дополнительные возможно не нужные функции предлагаете.