27

» WarCraft 3 / как разбить фигуры на прямоугольники?

Ладно. Открываю вопрос заново. Тк работает не очень хорошо (см. пример карты ). В принципе работает все хорошо, но изредко багуется. Не знаю почему.
большая картинка
Как это можно проверить то?
Загруженные файлы
27

» WarCraft 3 / как разбить фигуры на прямоугольники?

все дописал свою наработку. сам дорабатывать буду.
недостаток с регионом
обнаружил пару месяцев назад еще один недостаток: это все же добавления ректа в регион. эта сама нативка
native RegionAddRect takes region whichRegion, rect r returns nothing
есть добавить рект с вершинами (minx=0, miny=0,maxx=32.,maxy=32). То рект он добавляет с размерами (minx=0,miny=0,maxx=64.,maxy=64). Короче берет ближайшую координату кратно числу 32. Если взять число 64, то вставит 96. Если 96, то 128. Пробовал меньше 31, подправляет на 32. В нативке RegionAddRect специально убавлять пришлось maxx-32, maxy-32. Тогда не работает норм проверка IsPointInRegion, точки (32. , 32.) не существует. Здесь скажет что IsPointInRegion(maxx,maxy) не существует
Загруженные файлы
27

» WarCraft 3 / Пересечение двух отрезков

GetLocalPlayer, спасибо. интересный материал. Если что пригодиться =))
quq_CCCP, да я помню скидывал мне. К сожалению, я пока не нашел применения ему. Взаимодействую со прямыми сторонами многоугольника. но думаю мб пригодиться
алгоритм пересечения круга
function Is2cc takes real r, real cx, real cy, real px1, real py1, real px2, real py2 returns boolean
        local real dx = 0.00 
        local real dy =  0.00 
        local real a =  0.00 
        local real b = 0.00  
        local real c = 0.00 
        
        set px1 = px1 - cx
        set py1 = py1 - cy
        set px2 = px2 - cx
        set py2 = py2 - cy
        set dx = px2 - px1
        set dy = py2 - py1
        set a = dx * dx + dy * dy
        set b = 2.00 * ( px1 * dx + py1 * dy )
        set c = px1 * px1 + py1 * py1 - r * r
        
        if ( -b < 0.00 ) then
            return ( c < 0.00 )
        elseif ( -b < ( 2.00 * a ) ) then
            return ( ( 4.0 * a * c - b * b ) < 0 )
        endif
        return ( a + b + c < 0 )
    endfunction
ScorpioT1000, что то действительно не знал, что в дгуи все это есть. включая пересечение векторов.
27

» WarCraft 3 / Пересечение двух отрезков

PT153, как векторы помогут найти точку пересечения? и разве до этого не векторы юзали

удлиняется отрезок подобно лучу
подкрутил условие
if((a1<=x and x <=a2)or(a1>=x and x >=a2))and((b1<=y and y<=b2)or (b1>=y and y>=b2))then

endif
Загруженные файлы
27

» WarCraft 3 / Пересечение двух отрезков

функция InterLineLine дает больше точек пересечения, чем должны быть.
если отверстия застраивать, то нечестный обуз игры будет
карту пример скинул
Загруженные файлы
27

» WarCraft 3 / Пересечение двух отрезков

вот пример хотел показать
тфу четвертый случай, ладно посмотрю карту червей

в карте worm war вот такая функция (вполне рабочая)
function InterLineLine takes real x1, real y1, real x2, real y2, real a1, real b1, real a2, real b2, location loc returns boolean
    local real p = (x2-x1)*(b2-b1)-(y2-y1)*(a2-a1)
    local real x
    local real y

    if ( p == 0 ) then
        return false
    endif

    set x =  ((x2-x1)*(a2-a1)*(y1-b1)+(x2-x1)*(b2-b1)*a1-(y2-y1)*(a2-a1)*x1)/p
    set y = -((y2-y1)*(b2-b1)*(x1-a1)+(y2-y1)*(a2-a1)*b1-(x2-x1)*(b2-b1)*y1)/p
    call MoveLocation( loc, x, y )
    return true
endfunction
Загруженные файлы
27

» WarCraft 3 / Пересечение двух отрезков

эх... почему-то у меня алгоритмы точек пересечения работают не стабильно
27

» WarCraft 3 / Помогите создать способность.

мб руну с омоложением давать цели?

если память не изменяет,там можно настраивать. смотря что это за способность (равкод ее)
27

» WarCraft 3 / Как создать юнит...?

немного не понятно. вам нужно создать в центре ректа (области)?
есть нативки возвращающие центр GetRectCenterX, GetRectCenterY
или
centerx = (minx+maxx)/2
centery = (miny+maxy)/2
в варкрафте область это прямоугольник
27

» WarCraft 3 / Продажа предмета

easypeasy, ты мог бы в константах (переменных) прочитать олисания. обычно инфа краткая и не всегда понятно, и что там там есть на гуи и в библиотеки функции. Обычно дебагом проверяешь какой это юнит или итем и прочее
27

» WarCraft 3 / Продажа предмета

Принятый ответ
используй подходящие константы к конкретным событиям триггера.
продажа итема
событие - юнит закладывает предмет в лавку
переменные:
GetSellingUnit() =продающий торговец (типа всякие предметы закладывает в магазин и получает деньги)
GetBuyingUnit()=GetTriggerUnit() = покупающий торговец (это обычно магазин)
покупка итема
событие - продает предмет (из лавки)
GetSellingUnit()=GetTriggerUnit() =продающий торговец (в данном случае магазин продает нам)
GetBuyingUnit() = покупающий торговец (это наш герой отдает денюшку, а сам получает артефает или лошадь)

А предмет который продают или покупают
GetSoldItem()
27

» WarCraft 3 / Как сделать поглощение/блок урона в варкрафте 3.

Феникс, у каменных доспех вроде не меньше проблем. ему надо 300 единиц дамага отсчитать, чтобы убрать их в нужный момент. а с каменными доспехами урон всегда будет обнулен, и событие урона сегда будет показывать дамаг нулевым, и как он отсчитает. он наверн хочет сделать подобие энергетического щита. если я не ошибаюсь
27

» WarCraft 3 / Как сделать поглощение/блок урона в варкрафте 3.

Принятый ответ
  1. событие урона показывает сколько нанесет урона сейчас, но урон еще не пришел. урон происходит через 0.00 сек.
  2. у вас может быть в этот момент максимальный запас здоровья (например у курицы 10 хп). А урон противника получается слишком большим.
раскрыть
  • 2.1. Манипуляциями с хп через команды типа set life of unit вы не всегда можете наперед подправлять. Тк хп может упереться в лимит запаса здоровья юнита. А получаемый урон больше чем запас, и юнит умрет.
  • 2.2. Можно сделать юнита временно неуязвимым, тогда атака не срабатывает
2.3.поэтому самое идеальное даем абилку с максимальным запасом здоровья с 999999к хп. Юнит точно не умрет от урона.
после таймера 0.00 сек убираем абилу и подправляем как надо.
ты можешь делать проверки сколько очков осталось на поглощение

Nemezid, это незаметно, тк все происходит очень быстро.
27

» WarCraft 3 / Дали носит воздействия магазина и героя WarCraft 3

Принятый ответ
за дальность выбора героя магазином отвечает способность магазина - выбор героя, выбор воина и пр. тобы настроить, смотрите в настройках абилы
27

» WarCraft 3 / Таверна требует наличия героя

смотри раздел - для магазинов ссылка

а настройках абилы выборки
Радиус запуска - радиус действия (автоматически выбирает юнитов по типу взаимодействия. Кстати, в абилке можно настроить цели, но это бесполезно для автопоиска и автовыборки. Настройка цели в абилке не дает ничего).
тип взаимодействия, есть 4 галочки у выборки
"Нет" (никакая галочка не стоит) - действует только на героев (и не важно есть ли у него инвентарь или нету);
"Любая боевая единица с предметами" - юниты с наличием инвентаря (не важно герой или не герой, здание или не здание. Важно чтобы был у него инвентарь);
"Любое не здание" - действует на любых юнитов, кроме здания (и не важно есть ли у юнитов инвентарь или нету);
"Не важно" - действует на всех (здание в том числе)
27

» WarCraft 3 / UnitAddSleepPerm

самый интересный момент - пробуждение противником. это случается, если:
  1. если атаковали нейтрала, или ближайшего соратника-нейтрала. конечно, нейтралы должны проснуться.
  2. если рядом кто то из вражин кастует спел. По-моему нейтралы просыпаются, даже, если каст не направлен на них *(возможно ошибаюсь, надо проверить)
еще можно добавить:
  1. если два разных противника рядом с спящими нейтралами дерутся друг с другом, а нейтралы спят, то это было бы странно. Я играл классический вар, и замечал не раз такую странную механику. когда атакуют непадалеку нейтрала-соратника, они просыпаются, а когда идет драка между противниками спят. пофигизм,равнодушие, лень у них наверн. они же должны от дома прогнать, звери же. мб боятся. Обычно такое любят использовать, чтобы потом атакой будить и агром перенаправить на вражину
  2. если рядом бегают противники, а нейтралы спят. это еще страннее.особенно вплотную приблизился, побегал вокруг них. нейтралы глухие
27

» WarCraft 3 / По поводу импорта текстур (очередной нубо-вопрос)

а при чем тут вивер?
там внутри программы встроен конвертер: формат изображения на blp или наоборот. очень хорошо конвертирует большие изображения. других че-то не припомню. например button manager отсекает размер на 64x64, а blp Lab тоже с маленькими работает, 64x64 норм, а большие открыть не может (а не просто че то долго открывает).

можешь:
  1. заменить существующую. это рабочий вариант. берешь какой-нибудь тип терраина и заменяешь по тому же пути. когда импортируешь и укажешь путь. это не значит, что при запуске карты у тебя будет сразу, надо сохранить и потом перезапустить редактор (советую это просто как попробовать)
  2. создать новый. это надо лезть в slk и создавать, указывать новые пути и пр. не пробовал и не знаю. помню что кто то хотел импортнуть slk но внутри редактора ... оставалось все без изменении.
27

» WarCraft 3 / [Lua] Универсальный каст

А если у тебя несколько спелов: скажем близзард и блинк? так это прожмет два спела
27

» WarCraft 3 / UnitAddSleepPerm

UnitAddSleep - дает через true юниту возможность спать. Теперь каждую ночь будет засыпать. Если снять через false, то ночью бодрствует и никогда не будет спать ночью. В действии UnitAddSleep пишут что юниты игроков 1-12 никогда не спят, это значит, что действует на нейтралов (проверка и действие не работают на не нейтралов). Но и бывает плохо работало и в 1.26, даже на нейтралов.
есть еще функция UnitAddSleepPerm - аналогично, только вроде днем еще спят так?

Короче эта функция вообще не работает не понятная функция