Нужно что-бы при уничтожении здания создавалась ровно на том-же месте другое здание.
При создании оно может сместится. Я так понял если вблизи есть юниты то оно смещается.
Подскажите, как с этим бороться? Думал попробовать создать здание с москитами, но UnitRemoveAbilityBJ не удаляет 'Aloc' внесенный в РО. X,Y тоже записывал не помогает(

Но я не знаю как вернуть всю группу(
После первого действия с группой вызови другую такуюже функцию с такой же группой, только в ней уже сделай call Unhide GetEnumUnit()
Под группу сделай переменную
local unit d = GetDyingUnit()
local player p = GetOwningPlayer(d)
local real x = GetUnitX(d)
local real y = GetUnitY(d)
local group g = CreateGroup()
function hideg takes nothing returns nothing
call ShowUnitHide( GetEnumUnit() )
endfunction
function unhideg takes nothing returns nothing
call ShowUnitShow( GetEnumUnit() )
endfunction
call GroupEnumUnitsInRange( g, x, y, 512, null )
call ForGroup( g, function hideg)
call CreateUnit( p, 'eate', x, y, 270 )
call ForGroup( g, function unhideg)
call DestroyGroup( g)
`
ОЖИДАНИЕ РЕКЛАМЫ...
17
А создать на области? Тогда по идее оно не должно смещаться, ибо появляется по центру выбранной зоны
Или не ставь/подводи воинов близко к зданию.
26
Смещение может происходить из-за разницы карты путей...
А вообще - записываешь точку, удаляешь одно, создаёшь другое.
Либо создаёшь и двигаешь по XY (ну что бы уж точно), тогда увидишь в чём косяк
3
Область точно не работает, если юнитов примерно на расстоянии 300 нету то оно норм создается. Я думаю есть функция, и работает она на рудниках плетеных и проклятых при их уничтожении возводиться рудник в том-же месте. Думаю так это работает
18
Событие срабатывает чуть раньше, чем происходит.
Попробуй создать не сразу, а хотя бы через 0.01 с.
7
Есть только одна причина смещения, это разная карта путей! Сделай карту путей одинаковую, но и проследи чтобы небыло синих путей, только красные, так как на синих юниты могут стоять, но здание размещается когда даже на синих путях никого нету.
3
Нет, причина не в картах путей и вообще всем выше сказанном. При создании проверяется есть ли рядом юниты, если они слишком близко, то смещается точка создание в свободную зону, мне удалось найти выход только как всегда есть проблемы от нехватки знаний)).
Оказалось нужно скрывать юнитов (hide) а после создания показыать (unhide).
Но я не знаю как вернуть всю группу(
Помогите разобраться!
function hideg takes nothing returns nothing

call GroupAddUnitSimple( GetEnumUnit(), udg_G )
call ShowUnitHide( GetEnumUnit() )
endfunction
function Trig_Untitled_Trigger_001_Copy_Actions takes nothing returns nothing
local player p
local unit d
local real x
local real y
local unit u
set d = GetDyingUnit()
set x = GetUnitX(d)
set y = GetUnitY(d)
set p = GetOwningPlayer(d)
call ForGroupBJ( GetUnitsInRangeOfLocAll(512, GetUnitLoc(d)), function hideg)
call CreateNUnitsAtLoc (1,'eate',p,Location(x,y),bj_UNIT_FACING)
как можно реализовать без глобалки
..........................................
call ShowUnitShow( GroupPickRandomUnit(udg_G))
Нужно чтобы тут возравщались все юниты
call SelectGroupForPlayerBJ( udg_G, p )

endfunction
Загруженные файлы
21
Но я не знаю как вернуть всю группу(
После первого действия с группой вызови другую такуюже функцию с такой же группой, только в ней уже сделай call Unhide GetEnumUnit()
Под группу сделай переменную
local unit d = GetDyingUnit()
local player p = GetOwningPlayer(d)
local real x = GetUnitX(d)
local real y = GetUnitY(d)
local group g = CreateGroup()
function hideg takes nothing returns nothing
call ShowUnitHide( GetEnumUnit() )
endfunction
function unhideg takes nothing returns nothing
call ShowUnitShow( GetEnumUnit() )
endfunction
call GroupEnumUnitsInRange( g, x, y, 512, null )
call ForGroup( g, function hideg)
call CreateUnit( p, 'eate', x, y, 270 )
call ForGroup( g, function unhideg)
call DestroyGroup( g)
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.