Есть ли такая функция, которая поворачивает здание на необходимый угол?

а еще можно глянуть
UpdateStaticUnitVisually
функцию, если есть
function UpdateStaticUnitVisually takes unit u returns nothing
	local integer a=ConvertHandle(u)
	local integer h
	if a==0 then
		return
	endif
	set h=RMem(RMem(a)+0x148)
	call CallThisCallWith4Args(h,a,1,1,1)
	call CallThisCallWith2Args(GameDLL+0x283BC0,a,1)
	call CallThisCallWith1Args(GameDLL+0x28E170,a)
endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...
33
ScopteRectuS, а какие варианты ты уже попробовал?
А что у нас насчет снятия галочки "является зданием"? давно не проверял но помниться, что если галочку снять, то бывшие здания всё равно возвращают unit_type_structure и что там ещё надо,
Но однажды решил у себя так проблему, создав свой тип "является зданием", и им обладали обычные юниты
а как SetUnitFacingInstant себя ведёт на зданиях?
21
Bergi_Bear, мне нужно, чтобы у юнита оставалась галочка в пункте "является зданием". Обычная функция SetUnitFacing не работает на здания. SetUnitFacingInstant не поварачивет тоже.
16
если у юнита нет Amov , для него отключается перерисовка, попробуй добавить SetUnitPosition после поворота, если не поможет - то хз даже, надо копать, а я занят
21
DracoL1ch, работает, но только с задержкой и только после многократного повторения кода:
call SetUnitFacing( GetAttacker( ), AngleBetweenPoints( GetUnitLoc( GetAttacker( ) ), GetUnitLoc( GetTriggerUnit( ) ) ) )
call SetUnitPosition( GetAttacker( ), GetUnitX( GetAttacker( ) ), GetUnitY( GetAttacker( ) ) )
Также юнит перестает атаковать вообще.
16
в смысле перестает атаковать? здания не поворачиваются для атаки же оО или ты про то ,что SetPos отдает приказ стопа? не пойму
27
DracoL1ch, а у древ поворачиваются, правда в ту сторону, где находится противник. и это повернуть нельзя приказом. за это отвечает абила "пустить корни"
21
DracoL1ch, да, про то, что SetUnitPos( ) стопит юнита, но это можно исправить повторным приказом через триггер. А то, что юнит не поварачивается сразу же, портит всю картину.
21
Мне кажется,просто юниту дать внешность здания, а потом дать команду повернкться лицом куда то там(
26
ScopteRectuS, если здание с атакой, то почему бы не использовать вариант Steal nerves:
DracoL1ch, а у древ поворачиваются, правда в ту сторону, где находится противник. и это повернуть нельзя приказом. за это отвечает абила "пустить корни"
16
function SetUnitPositionNoStop takes unit u, real x, real y returns nothing
	set LastConvertedHandle=ConvertHandle(u)
	if LastConvertedHandle!=0 then
		call WRMem(pReservedWritableMemory,x)
		call WRMem(pReservedWritableMemory2,y)
		call CallThisCallWith11Args(RMem(RMem(LastConvertedHandle)+0x180),LastConvertedHandle,pReservedWritableMemory,pReservedWritableMemory2,1,1,-1,0,0,0,-1,0)
	endif
endfunction
18
Через CreateUnit(...) поворачивается
если не надо динамически поворачивать здание - то думаю сойдет)
16
а еще можно глянуть
UpdateStaticUnitVisually
функцию, если есть
function UpdateStaticUnitVisually takes unit u returns nothing
	local integer a=ConvertHandle(u)
	local integer h
	if a==0 then
		return
	endif
	set h=RMem(RMem(a)+0x148)
	call CallThisCallWith4Args(h,a,1,1,1)
	call CallThisCallWith2Args(GameDLL+0x283BC0,a,1)
	call CallThisCallWith1Args(GameDLL+0x28E170,a)
endfunction
Принятый ответ
18
DracoL1ch, это хук на функцию перерисовки?
как я помню зданию нужно пол секунды чтобы повернуться
вот костыль к примеру:
function myFunc takes nothing returns nothing
    call DestroyTimer(GetExpiredTimer())
	call ShowUnit(gg_unit_hbla_0002, false)
    call ShowUnit(gg_unit_hbla_0002, true)
endfunction

function Trig_s_Actions takes nothing returns nothing
    call SetUnitFacing(gg_unit_hbla_0002, 90.)
    call TimerStart(CreateTimer(), 0.5, false, function myFunc)
endfunction
28
"чтобы перерисоваться"
здание поворачивается пол секунды)
а ShowUnit тупо перерисовка
А если убрать скрытие юнита перед раскрытием, то второе будет иметь эффект?
18
PT153, я чуть поспешил с ответом, уже исправил
то второе будет иметь эффект?
нет

вот, нашел
шучу, это более убогий вариант того что я сделал выше
21
Cделал через абилу "Пустить корни" (Aro1), как сказал Steal nerves:
function SetBuildingFacing takes unit whichBuilding, real facingAngle returns nothing
    if IsUnitType( whichBuilding, UNIT_TYPE_STRUCTURE ) and GetUnitAbilityLevel( whichBuilding, 'Aatk' ) > 0 then
        call UnitAddAbility( whichBuilding, 'Aro1' )
        call SetUnitFacing( whichBuilding, facingAngle )
        call UnitRemoveAbility( whichBuilding, 'Aro1' )
    endif
endfunction
Правда имеется какой-то баг: если применить данную функцию не на здание, то юнит лишается возможности передвигаться и атаковать.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.