Известный случай, что используя различные физические размеры, GetUnitX/Y возвращает не очень корректные значения, либо же создание объектов используя полученные координаты немного смещаются, что приводит к заметным сдвигам, например при создании спецэффектов.
данный случай можно исправить данным алгоритмом
RealGetUnitX = GetUnitX
RealGetUnitY = GetUnitY
function GetUnitRealX(unit)
local collision = math.floor(BlzGetUnitCollisionSize(unit) + 0.5)
if not IsUnitType(unit, UNIT_TYPE_STRUCTURE) then
if (collision < 32 and collision > 15) or collision > 47 then return RealGetUnitX(unit) - 16. end
end
return RealGetUnitX(unit)
end
function GetUnitRealY(unit)
local collision = math.floor(BlzGetUnitCollisionSize(unit) + 0.5)
if not IsUnitType(unit, UNIT_TYPE_STRUCTURE) then
if (collision < 32 and collision > 15) or collision > 47 then return RealGetUnitY(unit) - 16. end
end
return RealGetUnitY(unit)
end
при инициализации карты, забиваем
local InitGlobalsOrigin = InitGlobals
--как пример
function InitGlobals()
InitGlobalsOrigin()
GetUnitX = GetUnitRealX
GetUnitY = GetUnitRealY
end
теперь, если все таки нужно получить реальные старые значения, вызываем RealGetUnitX(unit), во всех остальных случаях вызов нативки будет перехватываться и корректироваться
Ред. Hate
Ред. Hate