Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Урок Добавление новых объектов в SA-MP

OKStyle

Адвокат по делам семейным
Administrator
Wiki Team
Регистрация
4 Мар 2011
Сообщения
7,094
Лучшие ответы
226
Репутация
2,455
Награды
11
После наиполнейшего манула про добавление новых анимаций в SA-MP, решил дополнить цикл уроков не менее интересным мануалом по добавлению новых объектов в SA-MP. В данном уроке мы рассмотрим все возможные варианты. Некоторые материалы были использованы и собирались с моих проектов CR-MP 0.3.7 и Vintage RP.

Для начала нужно понимать, что для нормальной работы объекта, должно быть 3 файла: модель *.dff, текстура *.txd и коллизия *.col. Первый файл определяет форму объекта, второй - его раскраску, а третий - осязаемость. Скинам достаточно только модель и текстуру, так как берётся осязаемость и физические параметры базового скина.

1. Метод 0.3DL

С выходом SA-MP 0.3.8 RC2 мы наконец-то получили возможность управления новыми объектами и скинами "из коробки", в автоматическом режиме. К сожалению, поддержки транспорта мы не имеем, поэтому рекомендую модели транспорта делать необязательными, отнеся их в соответствующий файл, который может быть скачен пользователями по своему желанию.

Модели *.dff и текстуры *.txd для закачивания на компьютер клиента должны храниться в папке models в корне сервера. Скаченные модели хранятся у игрока в папке Documents\GTA San Andreas User Files\SAMP\cache\ip-адрес_сервера:порт, переименованные в свой хэш, т.е. не с теми именами, которые указывали вы, а, например, 0x13EAFAB9.txd и 0xD7F5181B.dff

ВАЖНО: для поддержки кастомных моделей не забудьте добавить в конфигурационный файл сервера (server.cfg) параметр useartwork 1

ВНИМАНИЕ: так как 0.3DL не поддерживает закачку никаких других файлов, кроме *.dff и *.txd, то если не добавить файл коллизии к файлу модели, то игра зависнет и поможет только закрытие процесса gta_sa.exe через диспетчер задач.

1.1. С использованием artconfig.txt

В той же директории models хранится файл artconfig.txt, в который нужно вписывать загружаемые игроку модели объектов и скинов. Может использоваться для простого добавления аксессуаров или скинов на DM/RPG сервера, не требующие отслеживания этих объектов.

1.2. Без использования artconfig.txt

Отличается тем, что функции добавления будут находиться в *.pwn-файле напрямую. Данный метод кажется мне наиболее интересным и является по факту более востребованным для Role Play ситуаций, т.к. можно сразу присваивать идентификаторы объектам (например, чтобы двигать новые ворота).

Поскольку первый вариант не требует дополнительного объяснения, будем работать со вторым, управляя объектами. И игрой. Как в песне Delorenzy - Я управляю игрой :)
Все описываемые в уроке функции есть на нашей Wiki, поэтому объяснять значение каждой я не буду - там они описаны во всех подробностях.

I. Начнём с подготовки модели. Так как концепция моего проекта заключается в переносе III, VC и других частей игры в адекватных рамках к карте GTA SA, то перенос объектов из одной части в другую стало обыденным делом.
Брать готовое не в наших правилах, более того, ребята, занимавшиеся подобным раньше, допускали оплошности в своей работе, а временами меняли оригинальные модели в худшую сторону. Но это всё лирика, перейдём к делу.

К примеру, перенесём объект автосалона из GTA 3, где стоит Banshee на первом острове. Нам потребуется программа MapEditor от Tony Wroblewski. Я буду использовать последнюю версию - 0.32.

1. Открываем программу (впоследствии у вас сразу будет показывать список добавленных ранее игр, но сейчас начинаем с нуля) и жмём "Add..." для добавления игры в редактор карт.

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


2. Вводим название игры и нажимаем "Browse..." для выбора *.exe файла в директории игры.

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


3. Если путь указан неверно, мы получим ошибку Invalid GTA Installation, а если верно - GTA III Found! (или другая игра серии, в зависимости от того, что выбираете). К слову, парсер пути работает по разным параметрам, поэтому не получится указать путь в директорию, где только exe. Для запуска карты необходима правильное дерево файлов карты. Нажимаем OK.

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


4. Теперь в списке инсталляций у нас появилась добавленная игра. Выделяем и нажимаем "ОК".

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


5. У нас отобразился список всех IPL и IDE файлов. Нам нужно загрузить определённую сцену для просмотра объектов. Переходим во вкладку "Scene", выбираем "DATA/MAPS/INDUSTNE/INDUSTNE.IPL" и нажимаем "Render".

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


6. Теперь у нас отрендерится выбранная сцена (загрузится участок карты). Выбираем нужный нам объект, дважды щёлкнув по нему левой кнопкой мыши.

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


7. Нажимаем правой кнопкой мыши для вызова контекстного меню и выбираем "Properties".

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


Далее я расскажу, как избежать экспорта требуемых файлов из gta3.img через IMG Tool (кроме коллизии). Поскольку этим у нас будет заниматься kdff, то и не будем рассматривать иной вариант.

8. В открывшемся окне рядом с полем "Model name" нажимаем кнопку "Browse". Появится маленько пустое окошко - не закрывайте его, иначе снова придётся нажимать "Browse". Слева откроется список моделей и текстур, будет выделена наша модель. Нажимаем правой кнопкой мыши на ней и выбираем в контекстном меню "Extract".

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


9. Указываем куда и нажимаем "ОК". Я буду выгружать на рабочий стол.

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


10. Далее закрываем мелкое окошко, чтобы закрылось большое и нажимаем "Browse" уже рядом с полем "Texture name". Проделываем всё то же самое: правая кнопка мыши, "Extract" в контекстном меню, выбираем путь распаковки, нажимаем "ОК" и закрываем маленькое окошко. Программу можно закрывать.

ВНИМАНИЕ: не всегда с первого раза удаётся выделить нужный объект, а также вызвать контекстное меню именно этого объекта, поэтому проверяйте в окне превью соответствие модели желаемому выбору.

Теперь нам потребуется TXD Workshop от JernejL Я буду использовать версию 5.3 (15 years edition) Build 160118.

11. Открываем программу и выбираем "Open TXD"

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


12. Выбираем нашу экспортированную текстуру и нажимаем "Открыть". Если будут ошибки Mipmap'ов, игнориуем их, нажатием на "ОК".

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


13. Теперь нужно выяснить какие текстуры из архива используются на нашей модели. Для этого выбираем "Dff check" из вкладки "File".

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


14. Выбираем наш *.dff файл модели и нажимаем "Открыть". Появится окошко с текстурами на модели и в архиве.

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


15. Отводим окошечко в сторону и смотрим неиспользуемые текстуры (указаны красным), удаляем их из *.txd (выделяем и жмём клавишу "Del"), периодически нажимая "Refresh" для проверки того, не удалили ли лишнюю текстуру. Если удалили - открываем *.txd заново, естественно не сохраняя предыдущую версию. Когда будет готово (слева и справа будет равное количество текстур и все они будут зелёные), выбираем снизу справа "San Andreas".

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


16. Теперь нужно поставить текстурам соответствующую компрессию (сжатие), поддерживаемую GTA SA. Для этого дважды нажимаем на каждую текстуру, ставим галочку "compressed" и нажимаем "ОК".

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


ВНИМАНИЕ: для текстур с альфа-каналом (прозрачностью), необходимо выставить компрессию 3 уровня, а без - 1 уровня. Они выставляются автоматически, но не меняются при переключении статуса наличия альфа-канала. Поэтому обращайте внимание.

17. Когда все текстуры будут сжаты, нажимаем "Save TXD". Кстати, на этом этапе необходимо экспортировать все текстуры в виде *.tga файлов, выбрав соответствующую опцию во вкладке "Export". Указываем папку куда сохранить, жмём "Сохранить" и закрываем программу.

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


18. Теперь нам нужна программа KDFF от Kalcor. Я буду использовать версию 0.2.5. Запускаем kdffgui.exe и выбираем модель и текстуру, выбрав соответствующие кнопки.

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


ВНИМАНИЕ: при загрузке текстур, который не конвертированы в GTA SA, они не отобразятся. На скрине ниже я показал, как это выглядит. Текстуру не выбирал, т.к. уже сконвертировал *.txd-файл.

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


Теперь нужно перевести модель из формата GTA 3 в формат GTA SA. Для этого нам потребуется ZModeler от Oleg. Я буду использовать версию v.2.2.3 Build 971

19. Выбираем пункт "Менеджер текстур" во вкладке "Рабочее пространство".

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


20. Нажимаем кнопку "Загрузить", выбираем папку с экспортированными на 17 шаге текстурами, выделяем все и нажимаем "Открыть". Все текстуры прогрузятся в программу. Нажимаем "ОК".

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


21. Сейчас необходимо загрузить модель объекта из GTA 3. Выбираем "Импортировать" из вкладки "Файл" и указываем наш *.dff файл модели.

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


22. Теперь нажимаем "Импортировать" в той же вкладке. Тип файла выбираем GTA San Andreas .DFF (*.dff)

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


23. Далее в параметрах "Версия DFF" выбираем "San Andreas" и нажимаем "Экспорт". Закрываем программу.

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


24. Далее необходимо создать коллизию для объекта, если вы её не вытащили из игрового архива. Открываем KDFF снова и в разделе "Make Col" выбираем "Mesh Faces" и нажимаем кнопку "Make Col". Указываем место сохранения файла коллизии. Она нам может понадобится в другом методе. Нажимаем кнопку dff и иконкой дискеты.

ОБРАТИТЕ ВНИМАНИЕ: сейчас SA-MP Collision отмечен красным. Необходимо прикрепить коллизию к *.dff.

Сохраняем модель под тем же именем. Снова выбираем модель, нажав соответствующую кнопку для повторной загрузки. Теперь SA-MP Collision уже отмечен зелёным. Это значит, что модель готова к загрузке.

P.S. Просмотреть коллизию можно через программу Collision File Editor от SteveM. Я буду использовать версию II 0.4 Beta. Запускаем программу, выбираем "Open" во вкладке "File".

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


Откроется наша "осязаемость". Через эту программу можно редактировать необходимые вершины, поверхности и геометрию осязаемости.

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


25. Далее набросаем мини-скрипт для проверки объекта в игре. Для упрощения работы с новыми объектами сделаем функцию:

PHP:
stock CreateCustomObject(baseid = 19379, newid = -1000, dff[], txd[], Float:x, Float:y, Float:z, Float:rx = 0.0, Float:ry = 0.0, Float:rz = 0.0)
{
    AddSimpleModel(-1, baseid, newid, dff, txd);
    return CreateObject(newid, x, y, z, rx, ry, rz);
}
Использовать так:

PHP:
public OnGameModeInit()
{
    CreateCustomObject(_, -2000, "usdcrdlrbuild01.dff", "8balls.txd", 0.0, 0.0, 3.0); // имена модели и текстуры - ваши, я беру из примера
    return 1;
}
26. Закидываем наши файлы в папку models в директории сервера и запускаем его. Скачиваются модели и мы видим наш объект.

Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!


Не обращайте внимание на некоторые прозрачные текстуры - не хватает 2х с альфой, каких именно покажет на этапе импорта в ZModeller. Догружая их в рабочее пространство всё должно быть гуд.

2. Метод Custom.IMG

Почти всё то же самое, но в pwn файле достаточно прописать создание объекта с нашим новым ID. Давайте остановимся поподробнее. Для начала нужно занести в файл custom.ide необходимую нам информацию о сопоставлении модели и текстуры. Начинаться наш файл должен с секции objs, а заканчиваться секция должна словом end:

PHP:
objs
15066, usdcrdlrbuild01, 8balls, 100, 0 // 100 - дистанция видимости, 0 - флаг, ответственный за тип объекта
end
P.S. Прочитав в SAMP.ide информацию, мы понимаем, сколько доступно свободных ID для наших новых объектов:

15065 to 15999 (935 total) reserved for CUSTOM.IDE
Далее необходимо закинуть 3 файла в custom.img: *.dff, *.txd, *.col (ту, которую создала программа kdff). Как работать с *.img архивом я рассказал в предыдущем уроке, поэтому открываем, закидываем, закрываем.

ВНИМАНИЕ: в данном методе совершенно неважно, как называется сам файл коллизии, но внутри *.col файла должно быть название модели, иначе будет креш по определённому опкоду, который я сейчас не помню.

Прописываем в моде создание нашего объекта и ВУАЛЯ!

PHP:
public OnGameModeInit()
{
    CreateObject(15065, 0.0, 0.0, 3.0, 0.0, 0.0, 0.0); // ID объекта из нашего *.ide файла
    return 1;
}
P.S. Советую комбинировать оба метода, чтобы закачивать игроку необходимые файлы посредством 0.3DL (например, карту), а необязательные замены (например, автомобилей) - через custom.img.

3. Метод Custom.SAA

После изучения исходников SA-MP стало понятно, что в samp.saa были зашиты все стандартные параметры GTA SA, а также файлы карты. Данная программа позволяет использовать свои карты. Принцип примерно такой же: в *.ide прописываем новый ID объекта, в *.ipl нужного места вписываем создание объекта с новым ID по образцу уже представленных там объектов.

Хотел написать гораздо больше, но муза меня покинула) Возможно, распишу подробнее когда-нибудь. Пользуйтесь.

Автор: OKStyle
 
Сверху Снизу