Здравствуйте, уважаемые знатоки World Editorа третьего Варкрафта. Очень нужна ваша помощь.
Как сделать так, чтобы юнит, подходя к границе карты мгновенно оказывался возле другой, но так, чтобы появился именно на той координате, на какой был подходя к границе карты (Знаю, легко запутаться в этом вопросе). То есть, если, скажем, юнит подходит к углу левой границы карты, он мгновенно перемещается к углу правой границы карты.
Поиск по триггерам не принес должного результата. Из всех действий, на перемещение годиться лишь Боевая единица - Move, но там перемещение либо к центру региона, либо к рандомной точке региона.

Принятый ответ

ну вот смотрите
function MirrorCoords takes unit a returns nothing
        local real x_a = GetUnitX(a)
        local real y_a = GetUnitY(a)
        local real x
        local real y

            if x_a  < 0. then
                set x = RAbsBJ(x_a)
            else
                set x = x_a - (x_a + x_a)
            endif
            
            if y_a < 0. then
                set y = RAbsBJ(y_a)
            else
                set y = y_a - (y_a + y_a)
            endif
            
            call SetUnitX(a, x)
            call SetUnitY(a, y)
    endfunction
во первых .проверяем на ось Х, если меньше 0, то конвертируем функцией в противоположное значение, функция Absolute в гуи, иначе просто уменьшаем х на двойное значение самого себя
тоже самое по оси У
а затем просто присваиваем данные координаты
в гуи будет слишком криво, поэтому лучше скопируйте в шапку карты и вызывайте через кастом скрипт при покидании игрового региона
call MirrorCoords(GetTriggerUnit())
0
26
7 лет назад
0
вот зачем вы врете?
0
3
7 лет назад
Отредактирован TailsFox1
0
Hate:
вот зачем вы врете?
Я не договорил. Я создал два региона, размером с высоту карты, по одному с каждой стороны. Мне кажется, будет сложно для каждой малой координаты переписывать весь триггер. Хочется, чтобы не пришлось так заморачиваться, и написать один триггер на всю ось Y (или X)
0
26
7 лет назад
0
вам нужно именно что бы он зеркально появлялся относительно двух осей или одной?
если двух. то юнит будет зеркально менять свои координаты, если одной, то появляться зеркально только по одной стороне
0
3
7 лет назад
0
Hate:
вам нужно именно что бы он зеркально появлялся относительно двух осей или одной?
если двух. то юнит будет зеркально менять свои координаты, если одной, то появляться зеркально только по одной стороне
Вот, именно это я и хочу. Чтобы зеркально менял свои координаты по двум осям, но при этом, чтобы умещалось в минимум триггеров. Эффект планеты, типа
0
27
7 лет назад
Отредактирован MpW
0
можно относительно центра области считывать. Кстати есть функции макс. и мин. высоту и макс. и мин. ширину, то по этим можно углы областей найти
кстати можно использовать порталы, и можно триггерно назначать куда телепортнуть. Преимущество - у юнита составляет маршрут, типа кликаешь в нужную точку и он сам дойдет до телепорта и доберется куда надо.
0
3
7 лет назад
0
Steal nerves:
можно относительно центра области считывать. Кстати есть функции макс. и мин. высоту и макс. и мин. ширину, то по этим можно углы областей найти
кстати можно использовать порталы, и можно триггерно назначать куда телепортнуть. Преимущество - у юнита составляет маршрут, типа кликаешь в нужную точку и он сам дойдет до телепорта и доберется куда надо.
Тогда нарушится атмосфера карты. Я же делаю карту по мотивам этапа Цивилизации из игры Spore
4
26
7 лет назад
4
ну вот смотрите
function MirrorCoords takes unit a returns nothing
        local real x_a = GetUnitX(a)
        local real y_a = GetUnitY(a)
        local real x
        local real y

            if x_a  < 0. then
                set x = RAbsBJ(x_a)
            else
                set x = x_a - (x_a + x_a)
            endif
            
            if y_a < 0. then
                set y = RAbsBJ(y_a)
            else
                set y = y_a - (y_a + y_a)
            endif
            
            call SetUnitX(a, x)
            call SetUnitY(a, y)
    endfunction
во первых .проверяем на ось Х, если меньше 0, то конвертируем функцией в противоположное значение, функция Absolute в гуи, иначе просто уменьшаем х на двойное значение самого себя
тоже самое по оси У
а затем просто присваиваем данные координаты
в гуи будет слишком криво, поэтому лучше скопируйте в шапку карты и вызывайте через кастом скрипт при покидании игрового региона
call MirrorCoords(GetTriggerUnit())
Принятый ответ
0
3
7 лет назад
0
function MirrorCoords takes unit a returns nothing
local real x_a = GetUnitX(a)
local real y_a = GetUnitY(a)
local real x
local real y
if x_a < 0. then
set x = RAbsBJ(x_a)
else
set x = x_a - (x_a + x_a)
endif

if y_a < 0. then
set y = RAbsBJ(y_a)
else
set y = y_a - (y_a + y_a)
endif

call SetUnitX(a, x)
call SetUnitY(a, y)
endfunction
Это, я так понимаю, jass? Если да, то самое время мне научиться им пользоваться. А так, спасибо
2
18
7 лет назад
2
Вот рабочий пример на GUI с использованием Custom Script. В одном триггере. Центр карты должен быть с координатами 0;0, а области расположены симметрично.
Тапками не кидайте, делал по-быстрому)
Загруженные файлы
0
18
7 лет назад
0
Второй вариант, оптимизированный.
Загруженные файлы
Чтобы оставить комментарий, пожалуйста, войдите на сайт.