This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

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

Robert_Easter

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

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

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

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
Реакции: 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
спраебырло

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

enotit

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

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

Vermilion

Мастер
29 Сен 2021
972
748
151
34
У меня такой стиль кода, я всегда игнорирую ;
 
Реакции: enotit

enotit

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

Vermilion

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

Robert_Easter

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

enotit

Гуру
13 Ноя 2020
1,092
493
147
21
Переводчиком пользуешься? пожалуйста, пиши поменьше предложение.

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

Robert_Easter

Активный участник
17 Июл 2024
103
13
28
Хорошо если игрок в машине что указать ?
И если игрок не в машине что сделать ?

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

enotit

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