• Из-за обновления 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
3,078
301
100
Проблема в ограничении сервера на значения texture, обычно максимум 255. Чтобы обойти это, лучше делать изменение текстур на клиенте через player.setComponentVariation, как вы и заметили — это работает корректно. Серверный метод NAPI.Player.SetPlayerAccessory подходит для простых случаев с небольшими ID. Рекомендую синхронизировать изменения через клиентский скрипт, вызываемый с сервера, чтобы корректно менять текстуру шапки без зацикливания.
 

nafanych!

naffanch
BackEnd developer
FrontEnd developer
25 Ноя 2023
432
93
90
сервер не поддерживает больше 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
432
93
90
ну просто цикл по игрокам делай) и в цикле кидай самого игрока на которого надо поставить текстуру
 

November

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

nafanych!

naffanch
BackEnd developer
FrontEnd developer
25 Ноя 2023
432
93
90
Ага, а потом удивляются а почему их сборки так тормозят. Больше циклов, больше рендеров. Желательно еще это все дело в интервал оборачивать, что бы на верняка
ниче не тормозит
 

November

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

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

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

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 не хватает. Будет ли это работать, если игрок в зоне стрима переодевается?
 
Реакции: November

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 и November