Доступ к архиву

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

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

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

Использование SetObjectMaterial

Статус
В этой теме нельзя размещать новые ответы.

ReFix™

Специалист
1. Введение.​
В 0.3e RC6 добавили новую функцию - SetObjectMaterial. Что же она даёт? Она позволяет взять текстуру у другого объекта. Например, вы поставили какой-то объект, он идеально подходит, а сам выглядит не очень. Тогда эта функция то что вам надо! Данная функция имеет 6 параметров:
objectid - ID существующего на сервере объекта
materialindex - индекс части объекта
modelid - ID модели объекта, у которого мы хотим взять текстуру
txdname - название .txd файла модели объекта
texturename - имя текстуры для использования в качестве замены
materialcolor - цвет объекта формата ABGR (не RGBA)


2. Готовимся​
Итак, в этом пункте я опишу весь необходимый софт для работы

1. Client SA:MP 0.3e
2. Простой сервер с доступом к pwn
3. JernejL's Map Editor


3. Разрабатываем​

1. objectid​
У нас есть всё необходимое для замены модели объекта, и теперь можно начать.

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);
4. Заключение​

Ну вот и всё. Если вы не допустили ошибки, то у вас должно получиться вот что:

Автор: Mike



Код:
Для модераторов, прошу добавить префикс к название темы [Урок], у меня его нету.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу