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;
PHP:
obj = CreateObject(18843, 315.57, 1715.77, 69.36, 0.00, 0.00, 359.96);
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
Код:
Для модераторов, прошу добавить префикс к название темы [Урок], у меня его нету.
Последнее редактирование:
