Ещё одна вариация по замене текстур объектов. Пошагово.
В 0.3e RC6 добавили новую функцию - SetObjectMaterial. Что же она даёт? Она позволяет взять текстуру у другого объекта. Например, вы поставили какой-то объект, он идеально подходит, а сам выглядит не очень. Тогда эта функция то что вам надо! Данная функция имеет 6 параметров, которые можно посмотреть на Wiki.
Итак, весь необходимый софт для работы.
1. objectid
ID объекта на сервере. Заменять можно только созданные объекты. Для примера возьмём мой объект. В начало мода:
Затем в OnGameModeInit:
Затем вписываем в первый аргумент obj и вот что у нас должно получится:
2. materialindex
Тут нам понадобиться мап едитор. Запускаем его, нам нужно поставить объект у которого вы хотите заменить текстуру. В моём случае это 18843. Нажимаем кнопку Insert и прописываем ID объекта. Нажимаем enter и перед нами появится объект. Кликаем на него два раза и смотрим строчку Model textures:
Там две строчки, где написано Material 0. Значит, у этого объекта только один индекс и заморочек будет меньше. В противном же случае, если объект большой (не в плане размера, а в плане кол-ва цветов и частей), то придётся подбирать индекс. Другого способа я не знаю. Итак, по этому пункту у нас должно получиться вот что:
3. modelid
Следующий пункт, это ID модели, у который мы хотим "стырить" текстуру. В моём случае это танцпол, у которого ID 19129:
4. txdname
По-моему, самый интересный пункт. Чтобы узнать файл текстуры не надо лезть в .img файлы и что-то там искать. Нам всегда поможет Map Editor! Теперь нам нужно уже вставить объект modelid из предыдущего пункта. Нажимаем Insert, пишем ID объекта, нажимаем enter, кликаем два раза на появившийся объект и смотрим строчку Texture:
В моём случае это "dancefloors":
5. texturename
Предпоследний пункт, в котором нам придётся брать методом подбора в некоторых случаях. Смотрим скрин из пункта 4, только уже в строчку TXD textures. В этом случае мне повезло, т.к. там всего лишь две модели (верхняя и нижняя часть танцпола):
6. materialcolor
Последний пункт, с помощью которого можно задать материала. Я не нашёл от него особой пользы, так что его можно пропустить, вставив туда просто 0. А для любопытных - вы можете изменить альфа канал объекта и его цвет. Важное замечание: если вы хотите пропустить изменение текстуры объекта, а изменить лишь только цвет, то вы можете выставить в двух предыдущих аргументах (4 и 5) значение "none". В моём же случае, в 6-й аргумент я просто поставил 0:
Ну вот и всё. Если вы не допустили ошибки, то у вас должно получиться вот что:
Тому, кому лень ехать до объекта, вот телепорт:
Автор: EvgeN 1137
В 0.3e RC6 добавили новую функцию - SetObjectMaterial. Что же она даёт? Она позволяет взять текстуру у другого объекта. Например, вы поставили какой-то объект, он идеально подходит, а сам выглядит не очень. Тогда эта функция то что вам надо! Данная функция имеет 6 параметров, которые можно посмотреть на Wiki.
Итак, весь необходимый софт для работы.
- Клиент 0.3e RC6 или младше
- Сервер 0.3e RC6 или младше с инклудами
- Чистый мод (хотя бы lvdm из стандартных модов)
- JernejL's Map Editor
- Прямые руки, мозги
1. objectid
ID объекта на сервере. Заменять можно только созданные объекты. Для примера возьмём мой объект. В начало мода:
PHP:
new obj;
PHP:
obj = CreateObject(18843, 315.57, 1715.77, 69.36, 0.00, 0.00, 359.96);
PHP:
SetObjectMaterial(obj, ?, ?, ?, ?, ?);
Тут нам понадобиться мап едитор. Запускаем его, нам нужно поставить объект у которого вы хотите заменить текстуру. В моём случае это 18843. Нажимаем кнопку Insert и прописываем ID объекта. Нажимаем enter и перед нами появится объект. Кликаем на него два раза и смотрим строчку Model textures:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Там две строчки, где написано Material 0. Значит, у этого объекта только один индекс и заморочек будет меньше. В противном же случае, если объект большой (не в плане размера, а в плане кол-ва цветов и частей), то придётся подбирать индекс. Другого способа я не знаю. Итак, по этому пункту у нас должно получиться вот что:
PHP:
SetObjectMaterial(obj, 0, ?, ?, ?, ?);
Следующий пункт, это ID модели, у который мы хотим "стырить" текстуру. В моём случае это танцпол, у которого ID 19129:
PHP:
SetObjectMaterial(obj, 0, 19129, ?, ?, ?);
По-моему, самый интересный пункт. Чтобы узнать файл текстуры не надо лезть в .img файлы и что-то там искать. Нам всегда поможет Map Editor! Теперь нам нужно уже вставить объект modelid из предыдущего пункта. Нажимаем Insert, пишем ID объекта, нажимаем enter, кликаем два раза на появившийся объект и смотрим строчку Texture:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
В моём случае это "dancefloors":
PHP:
SetObjectMaterial(obj, 0, 19129, "dancefloors", ?, ?);
Предпоследний пункт, в котором нам придётся брать методом подбора в некоторых случаях. Смотрим скрин из пункта 4, только уже в строчку TXD textures. В этом случае мне повезло, т.к. там всего лишь две модели (верхняя и нижняя часть танцпола):
PHP:
SetObjectMaterial(obj, 0, 19129, "dancefloors", "DanceFloor1", ?);
Последний пункт, с помощью которого можно задать материала. Я не нашёл от него особой пользы, так что его можно пропустить, вставив туда просто 0. А для любопытных - вы можете изменить альфа канал объекта и его цвет. Важное замечание: если вы хотите пропустить изменение текстуры объекта, а изменить лишь только цвет, то вы можете выставить в двух предыдущих аргументах (4 и 5) значение "none". В моём же случае, в 6-й аргумент я просто поставил 0:
PHP:
SetObjectMaterial(obj, 0, 19129, "dancefloors", "DanceFloor1", 0);
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Тому, кому лень ехать до объекта, вот телепорт:
PHP:
SetPlayerPos(playerid, 126.6348,1778.1600,17.6481);