Наработка, позволяющая проверять проходимость точки используя скрытый предмет. По сути является TerrainPathability переписанной на lua.
Список функций
---@param x real
---@param y real
---@return boolean
function IsTerrainWalkable(x, y) end
---@param x real
---@param y real
---@return boolean
function IsTerrainDeepWater(x, y) end
---@param x real
---@param y real
---@return boolean
function IsTerrainShallowWater(x, y) end
---@param x real
---@param y real
---@return boolean
function IsTerrainLand(x, y) end
Настройка
local RANGE = 10 -- Расстояние, на котором проходит проверка
local DUMMY = FourCC('wolg') -- Ид предмета для проверки проходимости
Код
do
local RANGE = 10 -- Расстояние, на котором проходит проверка
local DUMMY = FourCC('wolg') -- Ид предмета для проверки проходимости
local rect---@type rect
local item ---@type item
local InitGlobalsOrigin = InitGlobals
function InitGlobals()
InitGlobalsOrigin()
rect = Rect(0, 0, 128, 128)
item = CreateItem(DUMMY, 0, 0)
SetItemVisible(item, false)
end
local items = {}
local function hide()
local target = GetEnumItem()
if not IsItemVisible(target) then return end
table.insert(items, target)
SetItemVisible(target, false)
end
---@param x real
---@param y real
---@return boolean
function IsTerrainWalkable(x, y)
MoveRectTo(rect, x, y)
EnumItemsInRect(rect, nil, hide)
SetItemPosition(item, x, y)
local dx = GetItemX(item) - x
local dy = GetItemY(item) - y
SetItemVisible(item, false)
for i = 1, #items do
SetItemVisible(items[i], true)
end
items = {}
return dx * dx + dy * dy <= RANGE * RANGE and not IsTerrainPathable(x, y, PATHING_TYPE_WALKABILITY)
end
end
---@param x real
---@param y real
---@return boolean
function IsTerrainDeepWater (x, y)
return not IsTerrainPathable(x, y, PATHING_TYPE_FLOATABILITY) and IsTerrainPathable(x, y, PATHING_TYPE_WALKABILITY)
end
---@param x real
---@param y real
---@return boolean
function IsTerrainShallowWater (x, y)
return not IsTerrainPathable(x, y, PATHING_TYPE_FLOATABILITY) and not IsTerrainPathable(x, y, PATHING_TYPE_WALKABILITY) and IsTerrainPathable(x, y, PATHING_TYPE_BUILDABILITY)
end
---@param x real
---@param y real
---@return boolean
function IsTerrainLand(x, y)
return IsTerrainPathable(x, y, PATHING_TYPE_FLOATABILITY)
end
---@param x real
---@param y real
---@return boolean
function IsTerrainPlatform (x, y)
return not IsTerrainPathable(x, y, PATHING_TYPE_FLOATABILITY) and not IsTerrainPathable(x, y, PATHING_TYPE_WALKABILITY) and not IsTerrainPathable(x, y, PATHING_TYPE_BUILDABILITY)
end