В твоем случае даже появляется угроза превышения лимита операций, что приведет к прерыванию работы триггера, не говоря уже о невозможности поддержки такой гигантской лестницы условий.
function CopyGroup takes group g returns group
set bj_groupAddGroupDest = CreateGroup()
call ForGroup(g, function GroupAddGroupEnum)
return bj_groupAddGroupDest
endfunction
Вот так переделал
...
local group gg = null
...
set TempG = LoadGroupHandle(udg_Hash,i,4)
set TempReal = LoadReal(udg_Hash,i,3)
call ForGroup(g,function move1)
set gg = CopyGroup(TempG)
call SaveGroupHandle(udg_Hash,i,4,gg)
call GroupClear(TempG)
set TempG = null
...
Хотя вроде каждые 0.03 сек создаётся новая группа, а удаляется лишь один раз вместе с таймером, мне кажется там утечек из-за этого дофига. Но это чуть позже проверю, в таком случае откажусь от ForGroup
Да, к сожалению оно вызывает утечки, но это было очевидно. Копирование группы лучше использовать для локальных групп, которые можно будет потом уничтожить. В общем перенесу всё в луп
Код
private function move takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer i = GetHandleId(t)
local group g = LoadGroupHandle(udg_Hash,i,0)
local group gg = CopyGroup(g)
local group ggg = CreateGroup()
local group g1 = LoadGroupHandle(udg_Hash,i,4)
local real d = LoadReal(udg_Hash,i,2)+WavesSpeed
local real a
local unit u = null
local unit uu = null
loop
set u = FirstOfGroup(gg)
exitwhen u == null
set a = GetUnitFacing(u)*bj_DEGTORAD
call SetUnitX(u,GetUnitX(u)+WavesSpeed*Cos(a))
call SetUnitY(u,GetUnitY(u)+WavesSpeed*Sin(a))
set bj_groupEnumOwningPlayer = GetOwningPlayer(u)
call GroupEnumUnitsInRange(ggg,GetUnitX(u),GetUnitY(u),WaveRadius,Condition(function myfilt))
set bj_groupEnumOwningPlayer = null
loop
set uu = FirstOfGroup(ggg)
exitwhen uu == null
if not IsUnitInGroup(uu,g1) then
call UnitDamageTarget(u,uu,LoadReal(udg_Hash,i,3),true,false,AttackType,DamageType,WeaponType)
call GroupAddUnit(g1,uu)
endif
call GroupRemoveUnit(ggg,uu)
set uu = null
endloop
call GroupRemoveUnit(gg,u)
set u = null
endloop
if d >= LoadReal(udg_Hash,i,1) then
DisplayTextToPlayer(Player(0),0,0,I2S(1))
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash,i)
call ForGroup(g,function kill)
call GroupClear(g)
call DestroyGroup(g)
call GroupClear(g1)
call DestroyGroup(g1)
else
call SaveReal(udg_Hash,i,2,d)
endif
call DestroyGroup(gg)
call DestroyGroup(ggg)
set g = null
set gg = null
set ggg = null
set g1 = null
set t = null
set g = null
endfunction
Что это за абилку я делаю, можете посмотреть с 20.12.2020 вечером в моём блоге)) Да, это реклама говноабилок, я лох
Ну конкретно над одним юнитом контроль всем нельзя дать (могу глубоко ошибаться и в общем я лох), а вот чтобы всеми нейтральными можно было управлять..
Хотя можно сделать через клик по юниту. Типо если юнит в данный момент не выбран игроком-владельцем, то передать командование тому, кто кликнул по нему
» WarCraft 3 / Необходимо вывести стандартные модельки из варкрафта
» WarCraft 3 / Анимирование башни
» Блог им. rsfghd / Волны помойных волн
» Блог им. rsfghd / Барьер со свалки
» Мир безумного / WarThunder - «Раскалённые траки»
» Блог им. rsfghd / Волны помойных волн
» WarCraft 3 / На миллисекунду подвисает игра, после этого триггера. Что с ним?
» Мир безумного / WarCraft III - система изучения двух случайных способностей
» WarCraft 3 / Предмет меняющий характеристики
» WarCraft 3 / На миллисекунду подвисает игра, после этого триггера. Что с ним?
» WarCraft 3 / Предмет меняющий характеристики
» WarCraft 3 / Большое колво сторк
» WarCraft 3 / Большое колво сторк
» WarCraft 3 / Большое колво сторк
» WarCraft 3 / Большое колво сторк
Ред. rsfghd
» WarCraft 3 / Большое колво сторк
Оптимизация.
Ред. rsfghd
» WarCraft 3 / Вопрос по группам джасс
Помогла функция от quq_CCCP если не ошибаюсь
Да, это реклама говноабилок, я лох
» Блог им. rsfghd / Какой-то новый кал
» Блог им. rsfghd / Новый мусор, ура!
» Блог им. rsfghd / Каловая волна
» WarCraft 3 / Зафлудил вопросами сегодня, это последний честно.Насчет контроля
» WarCraft 3 / Ребята хочу создать тригерный скилл, помогите.
» WarCraft 3 / Зафлудил вопросами сегодня, это последний честно.Насчет контроля
Ред. rsfghd
» WarCraft 3 / Ребята хочу создать тригерный скилл, помогите.
Ред. rsfghd
» WarCraft 3 / Зафлудил вопросами сегодня, это последний честно.Насчет контроля
Хотя можно сделать через клик по юниту. Типо если юнит в данный момент не выбран игроком-владельцем, то передать командование тому, кто кликнул по нему