Добавлен MpW
Игра дает не всегда точное значение высоты. Работаю давно с сферическими координатами, и начал замечать не точные расчеты высоты. Знаю б этом давно, так как кто-то говорил мне ссылка
вот стандартный такой использую код (чтоб предупредить что знаю, что можно использовать GetLocationZ)
globals
location LocationForGetZ = Location(0,0)
endglobals
function GetLocZ takes real x, real y returns real
call MoveLocation(LocationForGetZ, x, y)
return GetLocationZ(LocationForGetZ) //высота ландшафта
endfunction
function GetUnitZ takes unit u returns real
call MoveLocation(LocationForGetZ, GetUnitX(u), GetUnitY(u))
return GetLocationZ(LocationForGetZ) + GetUnitFlyHeight(u) //высота ландшафта + высота юнита
endfunction
function SetUnitZ takes unit u, real z returns nothing
call MoveLocation (LocationForGetZ, GetUnitX (u), GetUnitY (u))
call SetUnitFlyHeight (u, z - GetLocZ(LocationForGetZ), 0.)
endfunction
Если использовать в рельефе "Повысить/Понизить", то потом сложно определить высоту ландшафта
получается как говорил Nereval тут
Или тут
Про что говорил Diod здесь не понимаю. Порылся на форуме, на сайте, и ничего не нашел. Пробовал считать по-другому (есть попытки), но значение высоты или приблизительно (немного выше не достает) или все равно не достает
получается как говорил Nereval тут
Или тут
Про что говорил Diod здесь не понимаю. Порылся на форуме, на сайте, и ничего не нашел. Пробовал считать по-другому (есть попытки), но значение высоты или приблизительно (немного выше не достает) или все равно не достает
код карты
function AddLightningEx2 takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer id = GetHandleId(t)
local lightning lg = LoadLightningHandle(udg_Hash,id,1)
call DestroyLightning(lg)
call FlushChildHashtable(udg_Hash,id)
call DestroyTimer(t)
set t = null
set lg = null
endfunction
function AddLightningEx1 takes lightning lg returns nothing
local timer t = CreateTimer()
local integer id = GetHandleId(t)
call SaveLightningHandle(udg_Hash,id,1, lg)
call TimerStart(t,30,false, function AddLightningEx2)
set lg=null
set t =null
endfunction
function Trig_Cast_1_Conditions takes nothing returns boolean
return( GetSpellAbilityId() == 'A000' )
endfunction
function Abs takes real a, real b returns real
local real h = a + b
//a-ландшафт
//b-ландшафт+юнит
if a<0 and b>0 then //если ландшафт опушен вниз, а высота юнита больше нуля (или наооброт)
set h = b - a
elseif a>0 and b<0 then
set h = a - b
endif
return h
endfunction
function Trig_Cast_1_Actions takes nothing returns nothing
local unit u1 = GetTriggerUnit()
local unit u2 = GetSpellTargetUnit()
local real x1 = GetUnitX(u1)
local real y1 = GetUnitY(u1)
local real z1 = GetUnitZ(u1)
local real x2 = GetUnitX(gg_unit_hgry_0000)
local real y2 = GetUnitY(gg_unit_hgry_0000)
local real z2 = Abs(GetLocZ(x2,y2),GetUnitFlyHeight(gg_unit_hgry_0000))//GetUnitZ(gg_unit_hgry_0000)
set bj_lastCreatedLightning = AddLightningEx("CLPB", true, x1, y1, z1, x2, y2, z2)
call AddLightningEx1(bj_lastCreatedLightning)
call BJDebugMsg( "Высота ландшафта GetLocZ: "+R2S(GetLocZ(x2,y2)) )
call BJDebugMsg( "Текущая высота юнита GetUnitFlyHeight : "+R2S(GetUnitFlyHeight(gg_unit_hgry_0000)) )
call BJDebugMsg( "Высота юнита GetUnitZ = GetLocZ + GetUnitFlyHeight : "+R2S(GetUnitZ(gg_unit_hgry_0000)) )
call BJDebugMsg( "Высота ландшафта + текущая высота юнита: "+R2S(z2))
set u1 = null
set u2 = null
endfunction
//===========================================================================
function InitTrig_Cast_1 takes nothing returns nothing
set gg_trg_Cast_1 = CreateTrigger( )
call TriggerRegisterPlayerUnitEventSimple( gg_trg_Cast_1, Player(0), EVENT_PLAYER_UNIT_SPELL_EFFECT )
call TriggerAddCondition( gg_trg_Cast_1, Condition( function Trig_Cast_1_Conditions ) )
call TriggerAddAction( gg_trg_Cast_1, function Trig_Cast_1_Actions )
endfunction
Принятый ответ
Высоты чего? Ландшафта? Или юнита? Летающего юнита?Игра дает не всегда точное значение высоты.
Пока лучше используй наземных даммиков, ибо с летающими пока все запущено.
Возможно, в новом патче пофиксят. Если он вообще будет...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован quq_CCCP