Добавлен
все еще перевожу на lua, какая-то непонятная ошибка в lua
хотел код скинуть, но точно не могу сказать. Мб карту скинуть. ссылка

Я не разбирался в коде, но у тебя на 997-ой строке:
Bi = CountFreePointsInArea(Bx1,By1 )
Хотя функция принимает 4 аргумента:
function CountFreePointsInArea(rt,x,y,n)
В итоге у тебя функция запускается со следующими параметрами:
CountFreePointsInArea(Bx1,By1,nil,nil)
А на 610-ой строке у тебя:
-- Здесь ты складываешь (y + r), но игрек ты не передал для этой функции. Из-за чего в данном месте обрывается поток.
if IsPointInArea_3(rt,x-r,y+r,n) then
`
ОЖИДАНИЕ РЕКЛАМЫ...
23
Похожие вопросы:

ответ
Я полагаю, надо сравнивать вот так, ибо индексация идёт с 1.
GROUP[GetHandleId(unit)][1] == nil
Ну и нужно вот так присваивать.
GROUP[caster_uid][1] = CreateGroup()
ответ
У тебя сломался реестр. Эта ошибка надстройки JNGP (там тоже часть кода на lua, не относится к reforged)

ответ
вижу цикл вложеный на икс и игрек, а в условиях обоих циклов только игрек
while y >= maxy do
   x=minx
      while y >= maxy do
ответ
У вас не работает, потому что вы перезаписали нативки на свои функции. В луа не нужно ничего объявлять. Всё работает и так из коробки.

21
Там же указан номер строки в war3map.lua


На 610-ой строке происходит арифметические действия с переменной ''y'', которая равно нилу.
33
Всё верно, но не разобрался как пользоваться ещё. Но стремление твоё похвально. Вот у тебя в 610 строке идёт код y+nil
давай сюда файл war3map.lua

Нашел там карта
27
ScopteRectuS, я знаю. указывают на y в 610 строке, что она там почему то не существует
код
                    --принадлежит ли точка Region[n]
                        --@param real x
                        --@param real y
                        --@param integer k
                        ---@return boolean
                        function IsPointInArea(x,y,k)
                            return (IsPointInRegion(Region[k], x, y))
                        end


                    --лежит ли точка в незанятом ActiveArea и внутри игровой карты
                        --помогает искать первую точку при создании региона
                        --а также при расширении ищет незанятую никем землю/и не упирается в границы карты
                        --@param rect rt <-ActiveArea
                        --@param real x
                        --@param real y
                        ---@return boolean
                        function IsPointInArea_1 (rt,x,y) 
                            return ( RectContainsCoords(rt,x,y) and (not IsPointInRegionVillage(x, y)))and RectContainsCoords(bj_mapInitialPlayableArea,x,y)
                        end
                    --лежит ли точка внутри региона или в незанятом ActiveArea
                        --юзается при создании региона, только там еще земля не внесена в регион, тут ищут только по ActiveArea.
                        --и при расширении региона юзается жта функция, она ищет вершины
                        --@param rect rt <-ActiveArea
                        --@param real x
                        --@param real y
                        --@param integer n <= number of region
                        ---@return boolean
                        function IsPointInArea_2(rt,x,y,n)
                            return IsPointInArea(x,y,n) or IsPointInArea_1(rt,x, y)
                        end


                    --Точка лежит внутри poligon или в незанятом ActiveArea, и свободна точка от CheckArea
                        --используется для разбивки многоугольника на ректы. Когда находим рект, его записываем в CheckArea, так мы будем знать что участок разбит.
                        --при создании региона или расширении мы учитываем ActiveArea
                        --@param rect rt <-ActiveArea
                        --@param real x
                        --@param real y
                        --@param integer n <= number of region
                        ---@return boolean
                        function IsPointInArea_3(rt,x,y,n)
                            return (IsPointInArea_2(rt,x,y,n))and (not IsPointInRegion(CheckArea, x,y) )
                        end

                    --число диагоналей, принадлежащих свободному ActiveArea и Region, не принадлежащих CheckArea (разбивает участок на ректы при создании)
                        --@param rect rt <-ActiveArea
                        --@param real x
                        --@param real y
                        --@param integer n <= number of region
                        ---@return integer
                        function CountFreePointsInArea(rt,x,y,n)
                            local a = 0
                            local r = 4.00
                            local angle
                            --local px = {} 
                            --local py = {}

                            --1) берем 4 точки от точки x,y и считаем кол-во свободных точек
                            if IsPointInArea_3(rt,x-r,y+r,n) then
                                px[a] = x-r
                                py[a] = y+r
                                a = a + 1
                            end
                            if IsPointInArea_3(rt,x+r,y+r,n) then
                                px[a] = x+r
                                py[a] = y+r
                                a = a + 1
                            end
                            if IsPointInArea_3(rt,x+r,y-r,n) then
                                px[a] = x+r
                                py[a] = y-r
                                a = a + 1
                            end
                            if IsPointInArea_3(rt,x-r,y-r,n) then
                                px[a] = x-r
                                py[a] = y-r
                                a = a + 1
                            end

                            --print("число точек (для напр): "..a )
                            if a == 2 then
                                angle = Acos(AngleBetweenTwoVectors(px[0]-x,py[0]-y, px[1]-x,py[1]-y)) * bj_RADTODEG
                                --print("угол: "..angle )
                                if angle == 90.00 then
                                    return 2
                                else
                                    return 5
                                end

                            end

                            return a
                        end
сразу первая проверка if IsPointInArea_3(rt,x-r,y+r,n) then , и перестает работать

Bergi_Bear, знаю про это, не впервой. мб другие ошибки. я просто перенес, и щас исправляю. поэтому исправлял ошибки, пока на это натолкнулся.
21
Там же утебя функция CountFreePointsInArea() вызывется несколько раз с 2-мя переданными аргументами, хотя она принимает 4.

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

Вот ты запустил через "CountFreePointsInArea(Bx1,By1 )", в итоге в функции "CountFreePointsInArea" у тебя
rt = Bx1;
x = By1;
y = nil;
n = nil.
27
ScopteRectuS, в циклах? так она и должна. Проверяют может ли точка образовать еше диагонали с другими точками, если может, то оставляем. Если диагоналей нет, удаляем из структуры-2 и все. Проверяют с каждым тактом, взял точку-подобрал пару, диагоналей стало меньше. Диагоналей станет меньше. Взял еще пару нашел, -1 диагонелей. И так чекаем, пока совсем не убудет.
21
function CountFreePointsInArea(rt,x,y,n)
            local a = 0
            local r = 4.00
            local angle
            --local px = {}
            --local py = {}

            --1) берем 4 точки от точки x,y и считаем кол-во свободных точек
           --****************
            -- А Здесь ты складываешь y + r, но игрик у тебя равен нил, потому что ты его не передал!!!
           --****************
            if IsPointInArea_3(rt,x-r,y+r,n) then
                px[a] = x-r
                py[a] = y+r
                a = a + 1
            end
27
ScopteRectuS, так дебаг показывает перед как использовать функцию. Что с переменные норм, координаты есть, а потом бац.. И почему то эта функция перестает работать.
Я понял, но че делать?
print("проверка: "..Ax1..","..Ay1 )
Ai = CountFreePointsInArea(rt,Ax1,Ay1,ns )
21
Я не разбирался в коде, но у тебя на 997-ой строке:
Bi = CountFreePointsInArea(Bx1,By1 )
Хотя функция принимает 4 аргумента:
function CountFreePointsInArea(rt,x,y,n)
В итоге у тебя функция запускается со следующими параметрами:
CountFreePointsInArea(Bx1,By1,nil,nil)
А на 610-ой строке у тебя:
-- Здесь ты складываешь (y + r), но игрек ты не передал для этой функции. Из-за чего в данном месте обрывается поток.
if IsPointInArea_3(rt,x-r,y+r,n) then
Принятый ответ
27
ScopteRectuS, ты прав, пошел исправлять. просто я не все дописал. просто там было 2 аргумента на jass, с переходом на lua стало 4. и забываю где ставить. 2-3 назад искал полчаса где end не дописал, а оказывается там наоборот - лишнюю end написал
27
ScopteRectuS, спасибо за ответ. благодарю. пойду дальше переносить
33
ScopteRectuS, Тут всё хорошо, наконец-то МрачныйВорон, приобщается работать с луа, тут главное понять принцип, недостающие аргументы, неверные типы. Как только это поймёт, то сразу дело пойдёт, не будет ни ошибок ни вопросов

Работая с ЛУА придётся прокачать внимательность до 999
Чтобы оставить комментарий, пожалуйста, войдите на сайт.