27

» WarCraft 3 / Отслеживание мышки

Bergi_Bear, а как этот крит получить? обычно же мышь нельзя за пределы экрана затащить. возможно стоило было повторить ошибку, когда помнишь фреймы-потомки не могли за пределы экрана 4:3 уходить. Мб найти такого предка 8:6, и привязать?
надо будет потом потестить
и что делают
BlzGetLocalClientWidth
BlzGetLocalClientHeight
это не размеры экрана?
27

» WarCraft 3 / Отслеживание мышки

ну че? система хорошая? fps-просадки устранили? пока выглядит даже интересно. даже на хайве нет)) но находил всякие интересные системы управления мышью камерой как Wow
27

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

ScopteRectuS, ты прав, пошел исправлять. просто я не все дописал. просто там было 2 аргумента на jass, с переходом на lua стало 4. и забываю где ставить. 2-3 назад искал полчаса где end не дописал, а оказывается там наоборот - лишнюю end написал
27

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

ScopteRectuS, так дебаг показывает перед как использовать функцию. Что с переменные норм, координаты есть, а потом бац.. И почему то эта функция перестает работать.
Я понял, но че делать?
print("проверка: "..Ax1..","..Ay1 )
Ai = CountFreePointsInArea(rt,Ax1,Ay1,ns )
27

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

ScopteRectuS, в циклах? так она и должна. Проверяют может ли точка образовать еше диагонали с другими точками, если может, то оставляем. Если диагоналей нет, удаляем из структуры-2 и все. Проверяют с каждым тактом, взял точку-подобрал пару, диагоналей стало меньше. Диагоналей станет меньше. Взял еще пару нашел, -1 диагонелей. И так чекаем, пока совсем не убудет.
27

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

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, знаю про это, не впервой. мб другие ошибки. я просто перенес, и щас исправляю. поэтому исправлял ошибки, пока на это натолкнулся.
27

» Wisp TD / Wisp TD

PT153, как вы делаете подсвечивание радиуса? тоже используете image или модель? и отображение клеток? это самое интересное
27

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

PT153, Nelloy, благодаря вашим подсказкам я понял. выполняется, пока условие истинно. А не наоборот.

А вообще, тут for нужен.
for не подходил потому, что у меня было другое условие. я просто это так вставил, чтобы посмотреть что оно делает. Проверить из за чего не работает
типа такого. как всегда не читаю, методом тыка
while ((RAbsBJ(x - Bx) < 0.001)and(RAbsBJ(y - By) < 0.001)and (CountVertexRegion[ns] > 1)) or exit do
понятно, что для простого было так правильно. Но у меня по логике цикл выполняется до сих пор пока соблюдается условие
27

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

цикл while ... do используется в варкрафте?
while .. do

end
сначала я думал дело в конкретном коде. В итоге убрал все. принты не запускались, так и не запускаются. Пока не додумался об этой мысли.

короче я понял. внутрь while ... do условие выхода не прописывается. пишут while true do. типа условие запуска цикла? нужно break прописывать. в учебнике lua все не так.

Фарион: что то не так
Загруженные файлы
27

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

а может ли таблица хранить несколько значении? просто вспомнил, что у lua return можно вернуть несколько значении. или это опять волшебство lua
27

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

вопрос: нужно ли удалять таблицу? если нужно, то это в корне меняет дело. Я еще думал тысячи таблиц плодить под свою систему.
ладно нужно
27

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

prog, че то метатаблицы очень сложны в понимании. нет примеров для новичков.. Я смотрел справочник.

Color содержит таблицы в индексах 1 и 2, как и таблица Setting.
теперь понял

PT153, я так понял
Color = {{}}
равнозначно как
Color = [1][1]
или
Color = {{{}}}
равнозначно как
Color = [1][1][1]

Color = { {},{} } -- > равнозначно Color = { {}=1,{}=2 }
т.е. получается так:
Color[1][1] = ...
Color[1][2] = ...
Color = { {},{},{} } -- > равнозначно Color = { {}=1,{}=2,{}=3 }
т.е. получается так:
Color[1][1] = ...
Color[1][2] = ...
Color[1][3] = ...
так?

чтобы создать двумерный массив, надо создать две таблицы
A = {} --одномерный массив, создаем таблицу
A[1] = ...
A[2] = ...
A[3] = ...

--для двумерного создаем две таблицы
Color = {} --одномерный массив, создаем таблицу
Color[1] = {} --двумерный массив, создаем таблицу
Color[1][1] = ...
Color[1][2] = ...
чтобы использовать 2 индекс, нужно создать еще одну таблицу
Color[2] = {}
Color[2][1] = ...
Color[2][2] = ...

--для 3-его индекса создаем еще одну таблицу
Color[3] = {}
Color[3][1] = ...
Color[3][2] = ...

рабочий код
						Color = {}
                        Setting = {}  
                        
                        --Gold Bounty
                            Color[1] = {}
                            Color[1][1] = 255
                            Color[1][2] = 220
                            Color[1][3] = 0
                            Color[1][4] = 255
                            Setting[1] = {}
                            Setting[1][1] = 0.0 -- Velocity 1
                            Setting[1][2] = 0.03 -- Velocity 2
                            Setting[1][3] = 2.0 -- Fadepoint
                            Setting[1][4] = 3.0 -- Lifespan
                            Setting[1][5] = -16.0 -- OffsetX
                        --Lumber Bounty
                            Color[2] = {}
                            Color[2][1] = 0
                            Color[2][2] = 200
                            Color[2][3] = 80
                            Color[2][4] = 255
                            Setting[2] = {}
                            Setting[2][1] = 0.0 -- Velocity 1
                            Setting[2][2] = 0.03 -- Velocity 2
                            Setting[2][3] = 2.0 -- Fadepoint
                            Setting[2][4] = 3.0 -- Lifespan
                            Setting[2][5] = -16.0 -- OffsetX
Если циклом буду работать, ниче не поломается)

prog, таблицы надо удалять или не надо? где-то видел, что используют точки в переменных, тоже своего рода способ описания .
27

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

PT153, я с ними ничего такого не делал.
AdjustPlayerStateBJ( gold, GetTriggeringPlayer(), PLAYER_STATE_RESOURCE_GOLD )
AdjustPlayerStateBJ( wood, GetTriggeringPlayer(), PLAYER_STATE_RESOURCE_LUMBER )
27

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

очень хорошо, что не нужно объявлять =)) просто супер

мне кажется или BJ-функции тоже не работают?
27

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

ладно бд сделаем и все. с lua с этим легче чем на jass. нету лимита на индексы
GetUnitGoldCost[равкод]
GetUnitWoodCost[равкод]
или
GetUnitGoldCostH[handle]
GetUnitGoldCostH[handle]