XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Барахолка
Ник
Пароль

Результаты опроса: Полезен ли Вам этот набор?
Да 13 61.90%
Нет 8 38.10%
Голосовавшие: 21. Вы еще не голосовали в этом опросе

Ответ
 
Clamp
Silenced by Clamp
[Tool] LandscapeGenerator
Недавно мне понадобилось создавать ландшафт полностью триггерно, на изначально пустой карте, причём неоднократно.
Заполнять базу руками было немного неудобно и чуть-чуть долго, поэтому я через некоторое время забил на эту затею.
Однако недавно я натолкнулся на утилитку, позволяющую извлечь данные обо всех разрушаемых на карте из .doo файла, причём сразу в виде кода, который можно вставлять в карту, благо в файле оно всё в читабельном виде.
Это был прогресс. И всё таки для создания ландшафта этого было маловато... Необходимо было ещё найти способ извлекать данные о текстурах ландшафта, которые лежат отнюдь не так удобно, как декорации.
Внезапно накатила идея использовать exploit preload bug для считывания данных о текстурах прямо из игры.
Сказано - сделано, за часик написал библиотечку и программку для очистки получившегося в выходящем файле мусора.
Собственно, вот библиотечка:
» vJass
library generator
    globals
        integer i = 0
    endglobals
function codegenT takes real x, real y returns nothing
    call Preload("\")\r\ncall SetTerrainType("+R2S(x)+","+R2S(y)+","+I2S(GetTerrainType(x,y))+",-1,1​,1)\r\n")
endfunction

function Lsaver takes rect r returns nothing
    local real x = GetRectMinX(r)
    local real y = GetRectMinY(r)
    call PreloadGenClear()
    call PreloadGenStart()
    loop
    exitwhen x>GetRectMaxX(r)
        loop
        exitwhen y>GetRectMaxY(r)
        set y=y+128
        set i=i+1
        endloop
    set y=GetRectMinY(r)
    set x=x+128
    endloop
    call Preload("\")\r\n"+I2S(i)+"\r\n")
    set y=GetRectMinY(r)
    set x=GetRectMinX(r)
    loop
    exitwhen x>=GetRectMaxX(r)
        loop
        exitwhen y>=GetRectMaxY(r)
        call codegenT(x,y)
        set y=y+128
        endloop
    set y=GetRectMinY(r)
    set x=x+128
    endloop
    set i = 0
    call PreloadGenEnd("C:\\WC3GeneratedLands\\code.txt")
endfunction
endlibrary
» cJass
library generator
{
        private integer i = 0
nothing codegenT (real x, real y)
{
    Preload("\")\r\nSetTerrainType("+R2S(x)+","+R2S(y)+","+I2S(GetTer​rainType(x,y))+",-1,1,1)\r\n")
}
nothing Lsaver(rect r)
{
    local real x = GetRectMinX(r)
    local real y = GetRectMinY(r)
    PreloadGenClear()
    PreloadGenStart()
    loop
    {
        exitwhen x>GetRectMaxX(r)
            loop
            {
            exitwhen y>GetRectMaxY(r)
            y=y+128
            i++
            }
        y=GetRectMinY(r)
        x=x+128
    }
    Preload("\")\r\n"+I2S(i)+"\r\n")
    y=GetRectMinY(r)
    x=GetRectMinX(r)
    loop
    {
        exitwhen x>=GetRectMaxX(r)
        loop
            {
            exitwhen y>=GetRectMaxY(r)
            codegenT(x,y)
            y=y+128
            }
        y=GetRectMinY(r)
        x=x+128
    }
    i = 0
    PreloadGenEnd("C:\\WC3GeneratedLands\\code.txt")
}
}
вызов функции позволит скопировать ландшафт в области - от маленького кусочка карты до полной игровой площади:
call Lsaver(gg_rct_somerect)
наличие областей в целевой карте необязательно - всё создаётся по координатам.
есть ряд ограничений для использования этой наработки:
  • на карте не должно быть декораций, только разрушаемые и блокираторы.
  • на карте не должно быть склонов, вернее, они просто не будут скопированы.
  • пока что система не записывает высоты ландшафта, я работаю в этом направлении.
Порядок использования:
  • создать две карты с одинаковыми данными объектов.
  • скопировать библиотеку в первую карту.
  • разместить дестракты и тайлы в первой карте.
  • вызвать функцию Lsaver(rect).
  • извлечь файл war3map.doo в папку C:\WC3GeneratedLands.
  • зайти в папку C:\WC3GeneratedLands и запустить сначала doo extractor.exe, потом codeclearer1.0.exe.
  • код декораций будет находиться в code.j, код тайлов в файле result.txt.
функция CreateDestr:
function CreateDestr takes integer objectid, integer variation, real x, real y, real z, real face, real scale returns nothing
    call CreateDestructableZ(objectid,x,y,z,face,scale,variation)
endfunction
  • копируем код в целевую карту.
  • PROFIT!
автор doo extractor.exe - Anufis
автор остального контента - Clamp
Clamp добавил:
Пока что большой минус это невозможность полноценного копирования дестрактов из области, а не со всей карты
в принципе если немного покопаться, можно поставить фильтр, но не сегодня точно
Прикрепленные файлы
Тип файла: rar codeclearer1.0.rar (30.3 Кбайт, 39 просмотров )
Тип файла: rar dooextractor.rar (27.4 Кбайт, 35 просмотров )
________________
Well, you found me. And what you gonna do? Kill me?

Отредактировано Clamp, 27.04.2011 в 07:02.
Старый 28.02.2011, 19:45
ScorpioT1000
Indaxia
offline
Опыт: 127,472
Активность: 27492
копировать/вставить уже не в моде ?
Старый 01.03.2011, 00:50
Clamp
Silenced by Clamp
давно не в моде
у наработки немного другая цель
она создает весь ландшафт в моей карте много раз в одном и том же месте
Clamp добавил:
ах да... ещё утилита для декора выдаёт ";" на каждой строке, надо открывать блокнотом и заменять ";" на "".
________________
This awkward life.
Старый 01.03.2011, 04:06
alexprey
познающий Unity
Clamp, а сразу не смог это исправить?
________________
XGM не детский сад где вам подотрут сопельки (с), quq_CCCP
Старый 01.03.2011, 09:38
Clamp
Silenced by Clamp
прога не моя
я исправил исходник, но мой си не подумывает даже предложить мне его скомпилить
________________
This awkward life.
Старый 01.03.2011, 10:36
Clamp
Silenced by Clamp
неактивная кнопка "run"
вечером кину исходник, если на паскале раньше не напишу:)
________________
Well, you found me. And what you gonna do? Kill me?
Старый 01.03.2011, 11:16
J64_

offline
Опыт: 4,724
Активность: 215
может работать по всей карте?
в смысле 256х256 и bj_MapInitialPlayableArea
________________
это печально, придётся триггеры мучать -.- (с) ~EWA
Старый 19.06.2011, 15:59
Clamp
Silenced by Clamp
да
Clamp добавил:
но лучше разбивай на области и их делай, а то дикий лаг и глюки
________________
It's time to make the choice. The wrong choice.
Старый 19.06.2011, 16:10
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 00:15.