21

» WarCraft 3 / 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
21

» WarCraft 3 / lua: ошибка

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
21

» WarCraft 3 / lua: ошибка

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

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

Вот ты запустил через "CountFreePointsInArea(Bx1,By1 )", в итоге в функции "CountFreePointsInArea" у тебя
rt = Bx1;
x = By1;
y = nil;
n = nil.
21

» WarCraft 3 / lua: ошибка

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


На 610-ой строке происходит арифметические действия с переменной ''y'', которая равно нилу.
21

» WarCraft 3 / lua-дебаг система для варика существует? +двумерные массивы

Насколько я знаю, ничего удалять не нужно. Да и функции для удаления таблицы не существует. Таблица будет сама удалена сборщиком мусора, если на неё не будет активных ссылок. Но вот когда сборка мусора сработает - неизвестно. Сборку мусора можно запустить вручную через функцию collectgarbage()
21

» WarCraft 3 / lua-дебаг система для варика существует? +двумерные массивы

ScopteRectuS:
-- тут синтаксическая ошибка
Color = { {},{},{} } -- > равнозначно Color = { {}=1,{}=2,{}=3 }

--
Color = { {},{},{} } -- > равнозначно следующему коду:

Сolor = { }
Color[1] = { }
Color[2] = { }
Color[3] = { }
Двумерный массив нельзя просто создать и использовать как хеш-таблицу джазовую. Для каждой ячейки нужно создавать свою таблицу.
Создавать каждый индекс вручную муторно. Лично я делаю примерно так:
    my2dArray = { }

    setValue = function(parrentKey, childKey, value)
        if my2dArray[parrentKey] == nil then
            my2dArray[parrentKey] = { }
        end

        my2dArray[parrentKey][childKey] = value
    end
21

» WarCraft 3 / lua-дебаг система для варика существует? +двумерные массивы

-- тут синтаксическая ошибка
Color = { {},{},{} } -- > равнозначно Color = { {}=1,{}=2,{}=3 }

--
Color = { {},{},{} } -- > равнозначно следующему коду:

Сolor = { }
Color[1] = { }
Color[2] = { }
Color[3] = { }
21

» WarCraft 3 / в lua не работают AI нативки

МрачныйВорон, функции "GetTriggeringPlayer" не существует, правильно "GetTriggerPlayer". Это, если, конечно, это не кастомная функция у тебя.
21

» WarCraft 3 / в lua не работают AI нативки

У вас не работает, потому что вы перезаписали нативки на свои функции. В луа не нужно ничего объявлять. Всё работает и так из коробки.
21

» WarCraft 3 / Как работать с картой в виде папки?

Bergi_Bear, а куда Назар пропал? Будет ли обновление chepack'a? Хотелось бы обнову, чтобы весь код сохранялся не в нестандартном коде, а в папках и кастом скриптах. Так сохранялась бы иерархия даже в редакторе триггеров.
21

» WarCraft 3 / Как выделить значение из целочисленной массива?

x[ y ] = z

x - массив;
y - ячейка или индекс массива;
z - значение ячейки массива.
Попробуйте объяснить задуманное, используя эти слова.
21

» WarCraft 3 / Русификатор редактора карт Warcraft 3 Reforged

И почему "Урон по цели"? Это что гугл транслейт? Там же Damage Target - Юнит, получивший урон.
21

» WarCraft 3 / Русификатор редактора карт Warcraft 3 Reforged

"Инициирующая боевая единица" лучше, чем "Переключающий юнит", но почему бы не перевести как "Юнит запустивший триггер"?
21

» WarCraft 3 / Реалистичный снаряд

rsfghd, это нужно будет рассчитывать в зависимости от расстояния. Например, задаёте изначальную скорость и умножаете на процент пройденного пути. В итоге, когда снаряд долетит до конца пути - получит все 100 % ускорения. Или наоборот, тогда снаряд в конце будет иметь нулевое ускорение.

Ну или придумать свою формулу. Всё зависит от конкретного случая.
21

» WarCraft 3 / Реалистичный снаряд

Сам недавно делал способность с проджектайлом. Можно сделать без векторов и всяких косинусов и синусов. Код на Lua и Reforged, но тут главное арифметика, а не функции:
    -- arrowX/Y/Z - текущее положение снаряда
    -- arrowTargetX/Y/Z - куда должен лететь снаряд
    -- 32.8125 - скорость снаряда (расстояное, которое проходит снаряд за один тик таймера)

    local dx   = arrowTargetX - arrowX
    local dy   = arrowTargetY - arrowY
    local dz   = arrowTargetZ - arrowZ
    local dist = math.sqrt( ( dx ^ 2 ) + ( dy ^ 2 ) + ( dz ^ 2 ) )

    arrowX = arrowX + 32.8125 * ( dx / dist )
    arrowY = arrowY + 32.8125 * ( dy / dist )
    arrowZ = arrowZ + 32.8125 * ( dz / dist )

    BlzSetSpecialEffectX( arrow, arrowX )
    BlzSetSpecialEffectY( arrow, arrowY )
    BlzSetSpecialEffectZ( arrow, arrowZ )
Но тут правда прямолинейное движение.
21

» WarCraft 3 / Что лучше использовать?

LainMikoroso, все эти ваши столкновения, разные скорости и т. д. делаются через векторы, которые считаются обычной арифметикой. Нагрузка от таких операций минимальна. Как берги и сказал, всё зависит от моделей, которые прорисовываются на экране.
21

» WarCraft 3 / Что лучше использовать?

LainMikoroso, от новых глобалок не убудет. Да и читабельность кода значительно выше, если везде используются свои переменные. А когда одна и та же глобалка tempUnit используется везде где можно, то в таком коде чёрт ногу сломает. И какой тогда смысл от компактности?
21

» WarCraft 3 / Что лучше использовать?

LainMikoroso, потоки выполняются последовательно. Ничего у вас там не сломается, если всё делать правильно. Да и использовать одни и те же глобалки везде и всюду - не лучшая затея.
21

» WarCraft 3 / Что лучше использовать?

LainMikoroso, нет ничего ужасного в том, что создаётся новый поток. Если хотите всё делать так, как изначально всё задумывалось близзардами, то делаете через boolexpr и ForGroup. Не хотите заморачиваться - перебираете всех через цикл.
21

» WarCraft 3 / Что лучше использовать?

Для JASS плюс первого метода в том, что создаётся новый поток, и, если действий очень много, то такой метод более предпочтителен. Но все данные из локалок придётся переносить через глобальные переменные.
Второй метод хорош тем, что не нужно переносить локалки в глобалки, но опять же, если действий очень много, то поток может оборваться.
Опять же верхнего способа у них нет
Там вся суть в конце:
Заключение прекрасно написал Bergi_Bear к предыдущей версии статьи:
Нет никакой разницы каким вы способом будете перебираться своих 20 юнитов