1. Введение.
В 0.3e RC6 добавили новую функцию - SetObjectMaterial. Что же она даёт? Она позволяет взять текстуру у другого объекта. Например, вы поставили какой-то объект, он идеально подходит, а сам выглядит не очень. Тогда эта функция то что вам надо! Данная функция имеет 6 параметров:
objectid - ID существующего на сервере объекта
materialindex - индекс части объекта
modelid - ID модели объекта, у которого мы хотим взять текстуру
txdname - название .txd файла модели объекта
texturename - имя текстуры для использования в качестве замены
materialcolor - цвет объекта формата ARGB (не RGBA)
2. Готовимся.
Итак, в этом пункте я опишу весь необходимый софт для работы.
Клиент 0.3e RC6
Сервер 0.3e RC6 с инклудами
Чистый мод (хотя бы lvdm из стандартных модов)
JernejL's Map Editor
Прямые руки, мозги
3. Разрабатываем.
У нас есть всё необходимое для замены модели объекта, и теперь можно начать.
1. objectid
ID объекта на сервере. Заменять можно только созданные объекты. Для примера возьмём мой объект. В начало мода: . Затем в 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. Заключение.
Ну вот и всё. Если вы не допустили ошибки, то у вас должно получиться вот что:
Тому, кому лень ехать до объекта, вот телепорт: SetPlayerPos(playerid, 126.6348,1778.1600,17.6481);
Урок был написан мною (то есть EvgeN 1137) при помощи этого специально для lightcode.ru
Если вам этот туториал помог, то скажите спасибо, поставив +