Добрый день всем, столкнулся вот с такой задачкой.
Хотел поменять через триггеры - текстуры земли в определенной области.
Есть ландшафт (Зона 1)

нужно при нужном действии заменить выбранные текстуры земли на другие.

(В тригеерах нашел только опцию создать тип земли в области)
Есть ли другой способ сделать то что я хочу?

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

Mechanicus, ты прав. можно массив точек сделать и все.

вот код изменения ланда в прямоугольных областях Rect (не квадратных)
//добавить ландшафт
function SetTerrainRect takes rect re, integer terrainType returns nothing

    local real r = 128.00  //size of pathing blocks
    local real x = GetRectMinX(re)
    local real y
    local real maxx = GetRectMaxX(re)
    local real maxy = GetRectMaxY(re)
    
    loop
        exitwhen x > maxx
        set y = GetRectMinY(re)
        //координаты установлены, теперь ищем координаты смещения
		//RealCoord128 может не пригодиться, тк варкрафт сам ищет, зачем еще доп работа
        //set x =RealCoord128(x)
        //set y =RealCoord128(y)
        loop
            exitwhen y > maxy
            call SetTerrainType( x, y, terrainType, -1, 1, 1 )
            set y = y + r
        endloop
        set x = x + r
    endloop

    set re = null

endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
7
4 года назад
0
В триггерах, в окружении есть триггер Change Terrain Type.
0
28
4 года назад
0
Mechanicus:
В триггерах, в окружении есть триггер Change Terrain Type.
Дело в том что эта функция меняет ландшафт в области.
а мне надо поменять

Зеленую полоску на один тип текстуры а красную на другую.

если использовать этот способ то надо создавать больше 30 областей и это только в одной такой зоне
Загруженные файлы
0
27
4 года назад
Отредактирован MpW
0
Roy Mustang, по-другому ты и не сделаешь, увы
если использовать этот способ то надо создавать больше 30 областей и это только в одной такой зоне
можно только кодом упростить (не создавать лишние 30), но все равно это только сократит число областей до 11 в вашем случае.
код
x,y - координаты центра текстуры (центр картинки смещают каждые 128 координаты, если задать координату 90, он автоматом находит ближайшую координату = 128. то есть центр не всегда там где хочешь). помогает такая функция
функция нахождения координаты
находит ближайшую координату
function RealCoord128 takes real a returns real
local real c
local integer b
local real e
local real coord = 0
if a != 0 then
set c = a/128.0
set b = R2I(c) отсекает дробь, например 1.7 равно 1
set e = c-b запись дроби, например 1.7 запишем 0.7
if a>0 and e > 0.5 then если координата положительна, и дробь больше 1/2
set b = b + 1
elseif a<0 and e < -0.5 then если координата отрицательна, и дробь меньше 1/2
set b = b - 1
endif
set coord = 128.0*b

endif
return coord
endfunction
set x =RealCoord128(x)
set y =RealCoord128(y)
terrainType - тип ланда
variation - вариация тайла (-1 = рандом)
area - размер (размер принимается в виде числа текстур (клеток), 1 - клетка, 2 - радиус круга или сторона квадрата имеет 1+2 клетки). текстура распространяется на клетку 128x128
shape - форма (квадратная круглая)
native SetTerrainType takes real x, real y, integer terrainType, integer variation, integer area, integer shape returns nothing
зная это можно написать код для больших прямоугольных (не квадратных) областей, где смещается центр
Загруженные файлы
2
7
4 года назад
2
А выбирать точку, перемещая её и менять текстуры не пойдет?
1
27
4 года назад
Отредактирован MpW
1
Mechanicus, ты прав. можно массив точек сделать и все.

вот код изменения ланда в прямоугольных областях Rect (не квадратных)
//добавить ландшафт
function SetTerrainRect takes rect re, integer terrainType returns nothing

    local real r = 128.00  //size of pathing blocks
    local real x = GetRectMinX(re)
    local real y
    local real maxx = GetRectMaxX(re)
    local real maxy = GetRectMaxY(re)
    
    loop
        exitwhen x > maxx
        set y = GetRectMinY(re)
        //координаты установлены, теперь ищем координаты смещения
		//RealCoord128 может не пригодиться, тк варкрафт сам ищет, зачем еще доп работа
        //set x =RealCoord128(x)
        //set y =RealCoord128(y)
        loop
            exitwhen y > maxy
            call SetTerrainType( x, y, terrainType, -1, 1, 1 )
            set y = y + r
        endloop
        set x = x + r
    endloop

    set re = null

endfunction
Принятый ответ
3
26
4 года назад
3
Если что, на скрине увидел две большие прямоугольные области, на которых сначала меняется текстура, а потом ещё две прямоугольные области поменьше, на которых потом меняется текстура)
3
27
4 года назад
3
8gabriel8, типа вот так
Загруженные файлы
0
26
4 года назад
0
Ага)
Чтобы оставить комментарий, пожалуйста, войдите на сайт.