• Из-за обновления 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) последний раз были обновлены:

Проблема Синхронизация hp игрока

Robert_Easter

Активный участник
17 Июл 2024
103
13
28
Сделал свой Hp и Armor бар но проблема в том что синхронизация иногда не моментальная и долгая.
Тоесть если человек подезжает к другому человеку; сначало показаывает что у того полно hp и armor а только потом правильно показывает их количество.
Это проблема особенно возникает когда другой человек в машине сидит.
Получаю хпшки на клиентском часте вот таким образом :
let health = targetPlayer.getHealth();
let armour = targetPlayer.getArmour();

Не использую серверскую часть для этого

Пожалуйста помогите
 

Inoi

/dev/null
VIP
15 Окт 2020
3,372
2,121
208
35
а можно полностью функцию
где ты получаешь
какие условия выборки этого таргетплеера

где ты обновляешь хп
 

Robert_Easter

Активный участник
17 Июл 2024
103
13
28
Код:
mp.nametags.enabled = false;
mp.events.add('render', (nametags) => {
    const graphics = mp.game.graphics;
    const player = mp.players.local;

    nametags.forEach(nametag => {
        let [targetPlayer, x, y, distance] = nametag;


        if (distance <= maxDistance) {
            let health = targetPlayer.getHealth();
            health = Math.min(Math.max(health, 0), 100) / 100;


            let armour = targetPlayer.getArmour();
            armour = Math.min(Math.max(armour, 0), 100) / 100;

(.......) Остальное просто дизайн с drawText

Просто в рендере когда дистанция ниже maxDistance считать и отоброжать target health и армор
 

Inoi

/dev/null
VIP
15 Окт 2020
3,372
2,121
208
35
  • Like
Реакции: Robert_Easter

Robert_Easter

Активный участник
17 Июл 2024
103
13
28
Проблема в том что я постоянно показываю хп а не только тогда когда целюсь. Та же проблема
 

Vermilion

Мастер
29 Сен 2021
972
748
151
34
Почему бы не сделать что то типо этого?
JavaScript:
const localPlayer = mp.players.local

mp.events.add('render', () => {
    // Проходим по всем игрокам в радиусе 50 метров
    mp.players.forEachInRange(localPlayer.position, 50, (player) => {
        if (player.handle !== localPlayer.handle) {
            const health = player.getHealth()
            const armour = player.getArmour()

            // Получаем позицию игрока
            const { x, y, z } = player.position

            // Смещаем текст немного выше головы игрока
            const textPositionZ = z + 1.2

            // Форматируем текст для отображения HP и брони
            const displayText = `HP: ${health} | Armour: ${armour}`

            // Рендерим текст над игроком
            mp.game.graphics.drawText(displayText, [x, y, textPositionZ], {
                font: 4, // шрифт
                color: [255, 255, 255, 185], // цвет белый с прозрачностью
                scale: [0.4, 0.4], // размер текста
                outline: true, // добавляем обводку, чтобы текст был лучше виден
            })
        }
    })
})
 

Vermilion

Мастер
29 Сен 2021
972
748
151
34
а почему не forEachInStreamRange кста?
Потому что нужно будет дополнительную проверку писать на дистанцию на которой отображать HP, потому что streamRange может быть 300 метров. Ты же не будешь отображать HP на 300 метров, когда игрок где то за картой
 

Inoi

/dev/null
VIP
15 Окт 2020
3,372
2,121
208
35
Потому что нужно будет дополнительную проверку писать на дистанцию на которой отображать HP, потому что streamRange может быть 300 метров. Ты же не будешь отображать HP на 300 метров, когда игрок где то за картой
спраебырло

ну хотя бы функцию по человечески вынести можно из рендера
а там только вызывать
ну это я так, надо же доебаться хоть до чего нибудь
 
  • Like
Реакции: enotit и Vermilion

enotit

Гуру
13 Ноя 2020
1,091
493
147
21
спраебырло

ну хотя бы функцию по человечески вынести можно из рендера
а там только вызывать
ну это я так, надо же доебаться хоть до чего нибудь
Ну погнали, если берем философию дяди Бена, то комментарии не нужны.
Зачем такая огромная вложенность, сделай return при "player.handle === localPlayer.handle"?
Что за магические числа? Вынеси в константы.
Почему игнориуешь ";", сколько кодстайлов смотрел, то большинство (если не все ; )?
Мейби всё-таки не player, а target, игрок какой, а? Будешь расширять, запутаешься в нейминге.

Получите распишитесь
 

Vermilion

Мастер
29 Сен 2021
972
748
151
34
Ну погнали, если берем философию дяди Бена, то комментарии не нужны.
Зачем такая огромная вложенность, сделай return при "player.handle === localPlayer.handle"?
Что за магические числа? Вынеси в константы.
Почему игнориуешь ";", сколько кодстайлов смотрел, то большинство (если не все ; )?
Мейби всё-таки не player, а target, игрок какой, а? Будешь расширять, запутаешься в нейминге.

Получите распишитесь
У меня такой стиль кода, я всегда игнорирую ;
 
  • OK
Реакции: enotit

enotit

Гуру
13 Ноя 2020
1,091
493
147
21

Vermilion

Мастер
29 Сен 2021
972
748
151
34
  • Like
Реакции: enotit

Robert_Easter

Активный участник
17 Июл 2024
103
13
28
Почему бы не сделать что то типо этого?
JavaScript:
const localPlayer = mp.players.local

mp.events.add('render', () => {
    // Проходим по всем игрокам в радиусе 50 метров
    mp.players.forEachInRange(localPlayer.position, 50, (player) => {
        if (player.handle !== localPlayer.handle) {
            const health = player.getHealth()
            const armour = player.getArmour()

            // Получаем позицию игрока
            const { x, y, z } = player.position

            // Смещаем текст немного выше головы игрока
            const textPositionZ = z + 1.2

            // Форматируем текст для отображения HP и брони
            const displayText = `HP: ${health} | Armour: ${armour}`

            // Рендерим текст над игроком
            mp.game.graphics.drawText(displayText, [x, y, textPositionZ], {
                font: 4, // шрифт
                color: [255, 255, 255, 185], // цвет белый с прозрачностью
                scale: [0.4, 0.4], // размер текста
                outline: true, // добавляем обводку, чтобы текст был лучше виден
            })
        }
    })
})
Попробывал этот код одна и та же проблема; хп и армор полно когда подезжаешь к незнакомому человеку и даже тут хуже тут еще навечно так будет если игрок не выйдет с машины. Пожалуйста помогите
 

enotit

Гуру
13 Ноя 2020
1,091
493
147
21
Попробывал этот код одна и та же проблема; хп и армор полно когда подезжаешь к незнакомому человеку и даже тут хуже тут еще навечно так будет если игрок не выйдет с машины. Пожалуйста помогите
Переводчиком пользуешься? пожалуйста, пиши поменьше предложение.

Сделай проверку, если игрок не в машине
 

Robert_Easter

Активный участник
17 Июл 2024
103
13
28
Переводчиком пользуешься? пожалуйста, пиши поменьше предложение.

Сделай проверку, если игрок не в машине
Хорошо если игрок в машине что указать ?
И если игрок не в машине что сделать ?

Спасибо ранее
 

enotit

Гуру
13 Ноя 2020
1,091
493
147
21