- 12
- 1
- Версия MoonLoader
- .026-beta
Всем привет, учу луа 2 дня и столкнулся с проблемой и хочу узнать как ее исправить. В общем у меня есть функция которая берет из массива координаты и проверяет попадают они под зону или нет, но ИНОГДА в консоли СФ появляется это:
А так же может быть и так, что все работает без проблем
праблем:
[ML] (script) KladmenV0.7.1.lua: Coord zone is: -98.177215576172 -2188.9006347656 1101.8228759766 -988.90081787109
[ML] (script) KladmenV0.7.1.lua: Точка 361 -1747 5 входит в зону
[ML] (script) KladmenV0.7.1.lua: Точка 723 -1495 0.8 входит в зону
[ML] (script) KladmenV0.7.1.lua: Точка 609.4 -1872.8 7.4 входит в зону
[ML] (script) KladmenV0.7.1.lua: Точка 1031.1 -2076 22.4 входит в зону
[ML] (script) KladmenV0.7.1.lua: Точка 137.75 -1760.36 4.67 входит в зону
[ML] (error) KladmenV0.7.1.lua: ...GameWorld - GTA San Andreas\moonloader\KladmenV0.7.1.lua:1120: attempt to compare nil with number
stack traceback:
...GameWorld - GTA San Andreas\moonloader\KladmenV0.7.1.lua:1120: in function 'isPointInZone'
...GameWorld - GTA San Andreas\moonloader\KladmenV0.7.1.lua:1133: in function 'markers_check'
...GameWorld - GTA San Andreas\moonloader\KladmenV0.7.1.lua:1204: in function <...GameWorld - GTA San Andreas\moonloader\KladmenV0.7.1.lua:1203>
[ML] (error) KladmenV0.7.1.lua: Script died due to an error. (0EDA320C)
--Coord zone is: -98.177215576172 -2188.9006347656 1101.8228759766 -988.90081787109 это результат регистрации команды /zp (в коде ниже видно)
А так же может быть и так, что все работает без проблем
сф консоль все гуд:
[ML] (script) KladmenV0.7.1.lua: Coord zone is: -2480.8061523438 360.70733642578 -1280.8061523438 1560.7072753906
[ML] (script) KladmenV0.7.1.lua: Òî÷êà -2427.25 489.24 29.92 âõîäèò â çîíó
[ML] (script) KladmenV0.7.1.lua: Òî÷êà -1890 1369.3 0.4 âõîäèò â çîíó
[ML] (script) KladmenV0.7.1.lua: Òî÷êà -1647.7 1279.4 6.5 âõîäèò â çîíó
[ML] (script) KladmenV0.7.1.lua: Òî÷êà -1502.58 1373.73 2.66 âõîäèò â çîíó
-- и код полностью выполняет свою задачу
получение координат из общего массива и перебор их в зависимости от зоны:
function markers_check(coord, allCoords)
if #coord ~= 0 then
if coord:match('l: (.*); u: (.*); r: (.*); d: (.*)') then
pLeft, pUp, pRight, pDown = coord:match('l: (.*); u: (.*); r: (.*); d: (.*)')
cordtext = 'Coord zone is: '
print(cordtext, pLeft, pUp, pRight, pDown)
sampAddChatMessage('The territory has been successfully added to your map!', -1)
else
sampAddChatMessage('Insert normal coordinates!', -1)
return
end
else
sampAddChatMessage('It's empty here', -1)
return
end
pLeft = tonumber(pLeft)
pUp = tonumber(pUp)
pRight = tonumber(pRight)
pDown = tonumber(pDown)
-- pLeft = tonumber(pLeft)
-- pUp = tonumber(pUp)
-- pRight = tonumber(pRight)
-- pDown = tonumber(pDown)
if pLeft == nil or pUp == nil or pRight == nil or pDown == nil then
sampAddChatMessage('Error when parsing coordinates. Please check the input.', -1)
return
end
local function isPointInZone(x, y)
return x >= pLeft and x <= pRight and y >= pUp and y <= pDown
end
local coords = {}
for _, point in ipairs(allCoords) do
local splitCoords = {}
for coord in point:gmatch("%S+") do
table.insert(splitCoords, tonumber(coord))
end
local x, y = splitCoords[1], splitCoords[2]
local isInZone = isPointInZone(x, y)
if isInZone then
table.insert(coords, point)
print("Точка", point, "In zone")
end
end
return coords
end