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

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

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

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

Урок Использование SetObjectMaterial (замена текстур, вариант 2)

OKStyle

Адвокат по делам семейным
Administrator
Wiki Team
Регистрация
4 Мар 2011
Сообщения
7,092
Лучшие ответы
226
Репутация
2,455
Награды
11
Ещё одна вариация по замене текстур объектов. Пошагово.

В 0.3e RC6 добавили новую функцию - SetObjectMaterial. Что же она даёт? Она позволяет взять текстуру у другого объекта. Например, вы поставили какой-то объект, он идеально подходит, а сам выглядит не очень. Тогда эта функция то что вам надо! Данная функция имеет 6 параметров, которые можно посмотреть на Wiki.

Итак, весь необходимый софт для работы.
  • Клиент 0.3e RC6 или младше
  • Сервер 0.3e RC6 или младше с инклудами
  • Чистый мод (хотя бы lvdm из стандартных модов)
  • JernejL's Map Editor
  • Прямые руки, мозги
У нас есть всё необходимое для замены модели объекта, и теперь можно начать.

1. objectid
ID объекта на сервере. Заменять можно только созданные объекты. Для примера возьмём мой объект. В начало мода:
PHP:
new obj;
Затем в OnGameModeInit:
PHP:
obj = CreateObject(18843, 315.57, 1715.77, 69.36,   0.00, 0.00, 359.96);
Затем вписываем в первый аргумент obj и вот что у нас должно получится:
PHP:
SetObjectMaterial(obj, ?, ?, ?, ?, ?);
2. materialindex
Тут нам понадобиться мап едитор. Запускаем его, нам нужно поставить объект у которого вы хотите заменить текстуру. В моём случае это 18843. Нажимаем кнопку Insert и прописываем ID объекта. Нажимаем enter и перед нами появится объект. Кликаем на него два раза и смотрим строчку Model textures:

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


Там две строчки, где написано Material 0. Значит, у этого объекта только один индекс и заморочек будет меньше. В противном же случае, если объект большой (не в плане размера, а в плане кол-ва цветов и частей), то придётся подбирать индекс. Другого способа я не знаю. Итак, по этому пункту у нас должно получиться вот что:
PHP:
SetObjectMaterial(obj, 0, ?, ?, ?, ?);
3. modelid
Следующий пункт, это ID модели, у который мы хотим "стырить" текстуру. В моём случае это танцпол, у которого ID 19129:
PHP:
SetObjectMaterial(obj, 0, 19129, ?, ?, ?);
4. txdname
По-моему, самый интересный пункт. Чтобы узнать файл текстуры не надо лезть в .img файлы и что-то там искать. Нам всегда поможет Map Editor! Теперь нам нужно уже вставить объект modelid из предыдущего пункта. Нажимаем Insert, пишем ID объекта, нажимаем enter, кликаем два раза на появившийся объект и смотрим строчку Texture:

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


В моём случае это "dancefloors":
PHP:
SetObjectMaterial(obj, 0, 19129, "dancefloors", ?, ?);
5. texturename
Предпоследний пункт, в котором нам придётся брать методом подбора в некоторых случаях. Смотрим скрин из пункта 4, только уже в строчку TXD textures. В этом случае мне повезло, т.к. там всего лишь две модели (верхняя и нижняя часть танцпола):
PHP:
SetObjectMaterial(obj, 0, 19129, "dancefloors", "DanceFloor1", ?);
6. materialcolor
Последний пункт, с помощью которого можно задать материала. Я не нашёл от него особой пользы, так что его можно пропустить, вставив туда просто 0. А для любопытных - вы можете изменить альфа канал объекта и его цвет. Важное замечание: если вы хотите пропустить изменение текстуры объекта, а изменить лишь только цвет, то вы можете выставить в двух предыдущих аргументах (4 и 5) значение "none". В моём же случае, в 6-й аргумент я просто поставил 0:
PHP:
SetObjectMaterial(obj, 0, 19129, "dancefloors", "DanceFloor1", 0);
Ну вот и всё. Если вы не допустили ошибки, то у вас должно получиться вот что:

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


Тому, кому лень ехать до объекта, вот телепорт:
PHP:
SetPlayerPos(playerid, 126.6348,1778.1600,17.6481);
Автор: EvgeN 1137
 
Сверху Снизу