У меня карта с множеством волн, проблема складывается из за утечки, которая появляется во время их долгого спавна где то на 50 мин игры. Уже и пробовал вынести локации отдельно в глобальне для уменьшения утечек, но все же текут именно Handle созданных юнитов, хотя при их смерти юниты удаляются. Карта делается на Jass. Ставил счетчик и при волнах, было множество утечек Handle. С этими волнами юнитов, возможно хоть как то бороться, знаю если скопировать юнита в редакторе, он будет иметь одинаков handle, такое нельзя как то использовать в карте, что бы для юнитов не создавались новые, переменная у меня одна, для юнитов(глобальная), что бы избежать частого создания, просто обнуляється в конце всех действий.
Или все таки придется усиливать монстров и делать их количество к минимуму, сейчас их не особо много бегает., но теперь начинаю думать и это уменьшить.

Принятый ответ

Ну еще и 100500 юнитов могут начать лагать, 60+ на игрока которые куда то бегут уже не хорошо.
Так же советую сделать всех юнитов суммонами, чтобы они не разлагались
call UnitApplayTimedLife( unit, 'BFig', 0.00 ) это существенно снизит нагрузку на движок
P.S в ваших юнитах совсем не разобрался, какой то кавардак - нету четкого разделения на юнитов для волн, боссы, суммоны героев, герои игроков....
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
7
8 лет назад
Отредактирован Ige
1
игра тормозит с командами если юнитов на карте больше какого то n-го количества и они попадают в ступор и идут по 3 шага, было такое до таймера смерти.
FlyTab, можно распределить монстров между игроками, тогда они не будут так "тупить". Используй нейтралов для этой цели.

И дело тут не в утечках, это баг/фича самого варкрафта
0
6
8 лет назад
Отредактирован FlyTab
0
Если хорошо разбираетесь помогите с утечкой 6 Handle в способности Волна Силы (Вождя минотавров), называется "Trigger0PowerWave" в способностях триггер. Уже кажись все перепробовал, но меньше 6 никогда не становится.
Количество переменных уменьшил до двух и Хеш таблицы. Но ниже 6 никак не падает, хотя хеш чиститься точно, после действий.
Загруженные файлы
1
7
8 лет назад
Отредактирован Ige
1
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)))
0
6
8 лет назад
0
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, узнать бы где :(
0
7
8 лет назад
0
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
0
6
8 лет назад
0
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, можно распределить монстров между игроками, тогда они не будут так "тупить". Используй нейтралов для этой цели.

И дело тут не в утечках, это баг/фича самого варкрафта
Я из за этого отказался от команды Атака, при которой был полезный эффект в виде, кастования магии врагами.
0
7
8 лет назад
0
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)
0
6
8 лет назад
Отредактирован FlyTab
0
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 или других языков.
0
7
8 лет назад
0
FlyTab, если уже имеются координаты х,у, зачем выполнять лишнее действие?)
2
6
8 лет назад
2
Ige:
FlyTab, если уже имеются координаты х,у, зачем выполнять лишнее действие?)
Любим вот таким издевательством над собой заниматься :D
Чтобы оставить комментарий, пожалуйста, войдите на сайт.