• Из-за обновления GTA 5 (был добавлен новый патч) может временно не работать вход в RAGE Multiplayer.

    Ошибка: Ваша версия Grand Theft Auto V не поддерживается RAGE Multiplayer.
    ERROR: Your game version is not supported by RAGE Multiplayer.

    Данная ошибка говорит о том, что GTA V обновилась до новой версии (GTA Online тоже). Вам необходимо обновить саму игру в главном меню вашего приложения (Steam / Epic Games / Rockstar Games).
    Если после этого RAGE:MP все равно не работает - вам нужно дождаться выхода патча для самого мультиплеера (обычно это занимает от нескольких часов до нескольких дней).

    Новости и апдейты Rockstar Games - https://www.rockstargames.com/newswire/
    Статус всех служб для Rockstar Games Launcher и поддерживаемых игр: https://support.rockstargames.com/ru/servicestatus


    Grand Theft Auto 5 (+ GTA Online) последний раз были обновлены:

Помощь с одеждой.

ghostnuller

Мошенник
21 Июл 2025
78
-16
18
Нужна помощь с одеждой, а конкретнее с шапками.
При попытке установить текстурку шапки через серверный метод NAPI.Player.SetPlayerAccessory(player, slot, drawable, texture); больше 255 все модельки просто зацыкливается ничего не отображается правильно, текстурки начинают заного идти с 256 как будто это 0 и так до бессконечности.
При этом через клиентский метод player.setPropIndex(componentId, drawableId, TextureId, attach); всё отображается, в итоге вопрос как быть?
 
Последнее редактирование:
Реакции: Sidney

Jerry (ChatGPT)

AI-powered language model
VIP
helper
17 Окт 2023
2,920
293
100
Проблема в ограничении сервера на значения texture, обычно максимум 255. Чтобы обойти это, лучше делать изменение текстур на клиенте через player.setComponentVariation, как вы и заметили — это работает корректно. Серверный метод NAPI.Player.SetPlayerAccessory подходит для простых случаев с небольшими ID. Рекомендую синхронизировать изменения через клиентский скрипт, вызываемый с сервера, чтобы корректно менять текстуру шапки без зацикливания.
 

nafanych!

naffanch
BackEnd developer
FrontEnd developer
25 Ноя 2023
348
70
70
сервер не поддерживает больше 255, доставай текстурку и кидай ее в клиент, ставь методом который ты написал и синхронизируй прост эту текстуру между другими игроками
 

ghostnuller

Мошенник
21 Июл 2025
78
-16
18
сервер не поддерживает больше 255, доставай текстурку и кидай ее в клиент, ставь методом который ты написал и синхронизируй прост эту текстуру между другими игроками
Я если честно не имею вообще понимая как сделать синхронизацию, пробовал по примеру такого сделать https://rage.mp/files/file/285-synced-player-component-variations/
Но не получается что-то.
 
Реакции: Sidney

nafanych!

naffanch
BackEnd developer
FrontEnd developer
25 Ноя 2023
348
70
70
ну просто цикл по игрокам делай) и в цикле кидай самого игрока на которого надо поставить текстуру
 

Vermilion

Искусственный Интеллект
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,765
1,111
181
35
ну просто цикл по игрокам делай) и в цикле кидай самого игрока на которого надо поставить текстуру
Ага, а потом удивляются а почему их сборки так тормозят. Больше циклов, больше рендеров. Желательно еще это все дело в интервал оборачивать, что бы на верняка
 

Vermilion

Искусственный Интеллект
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,765
1,111
181
35
Это так, если в общих чертах, логику думаю поймешь. И зачем это все в циклы какие то не понятные добавлять?

Server-side
JavaScript:
player.setVariable("clothes", {
    componentId: 1,
    drawableId: 2,
    textureId: 0,
    attach: true,
});

Client-side
JavaScript:
mp.events.add("entityStreamIn", async (target: PlayerMp) => {
    if (target.type !== "player") return;
    const clothes = target.getVariable("clothes");
    if (clothes) {
        target.setPropIndex(
            clothes.componentId,
            clothes.drawableId,
            clothes.textureId,
            clothes.attach,
        );
    }
});
 
Реакции: ghostnuller и ounezz77

ghostnuller

Мошенник
21 Июл 2025
78
-16
18
Это так, если в общих чертах, логику думаю поймешь. И зачем это все в циклы какие то не понятные добавлять?

Server-side
JavaScript:
player.setVariable("clothes", {
    componentId: 1,
    drawableId: 2,
    textureId: 0,
    attach: true,
});

Client-side
JavaScript:
mp.events.add("entityStreamIn", async (target: PlayerMp) => {
    if (target.type !== "player") return;
    const clothes = target.getVariable("clothes");
    if (clothes) {
        target.setPropIndex(
            clothes.componentId,
            clothes.drawableId,
            clothes.textureId,
            clothes.attach,
        );
    }
});
Спасибо, помог.
 
Реакции: Sidney

UchihaMadara

Гений
VIP
FrontEnd developer
27 Окт 2020
1,283
481
166
Это так, если в общих чертах, логику думаю поймешь. И зачем это все в циклы какие то не понятные добавлять?

Server-side
JavaScript:
player.setVariable("clothes", {
    componentId: 1,
    drawableId: 2,
    textureId: 0,
    attach: true,
});

Client-side
JavaScript:
mp.events.add("entityStreamIn", async (target: PlayerMp) => {
    if (target.type !== "player") return;
    const clothes = target.getVariable("clothes");
    if (clothes) {
        target.setPropIndex(
            clothes.componentId,
            clothes.drawableId,
            clothes.textureId,
            clothes.attach,
        );
    }
});
addDataHandler не хватает. Будет ли это работать, если игрок в зоне стрима переодевается?
 
Реакции: Vermilion

ghostnuller

Мошенник
21 Июл 2025
78
-16
18
addDataHandler не хватает. Будет ли это работать, если игрок в зоне стрима переодевается?
Данный код не работает, если переодевается в зоне стрима, но я просто сделал что бы всем кто в зоне стрима ивент отсылался, что игрок какой то переоделся и ему надо шмотки обновить.
 
Реакции: Sidney

ghostnuller

Мошенник
21 Июл 2025
78
-16
18
Вот так я в общем сделал:

Сервер:
C#:
        public static void SetPropsIndex(ExtPlayer player, int id, int draw, int texture)
        {
            try
            {
                if (id == 0)
                {
                    Trigger.ClientEventForAll("client::setPropIndex", player, id, draw, texture);
                    player.SetSharedData("HAT_DATA", JsonConvert.SerializeObject(new List<int>() { draw, texture }));
                }
                else
                {
                    NAPI.Player.SetPlayerAccessory(player, id, draw, texture);
                }
            }
            catch (Exception e)
            {
                Log.Write($"SetPropsIndex Exception: {e.ToString()}");
            }
        }
Клиент:
JavaScript:
mp.events.add("client::setPropIndex", (entity, id, drawable, texture) => {
    if (entity.type !== 'player') return;
    entity.setPropIndex(id, drawable, texture, true);
});

mp.events.add('entityStreamIn', (entity) => {
    if (entity.type !== 'player') return;

    if (entity.getVariable('HAT_DATA') != undefined) {
        var data = JSON.parse(entity.getVariable('HAT_DATA'));
        if (data[0] != -1)
            entity.setPropIndex(0, data[0], data[1], true);
    }
});
 
Реакции: Sidney и Vermilion