Добро пожаловать на RAGE MULTIPLAYER

Собирайтесь с другими игроками, создавайте собственный сервер, формируйте сообщество или придумывайте новый игровой режим. В RAGE Multiplayer вас ждут бесконечные возможности и непревзойденный контроль. Пусть ваше воображение станет вашим единственным пределом.

Вопрос Проблема коронка над головой динамична

vcentrevkusa

Карантин 💉
👨 Участник портала
UID
2 549
Регистрация
06.04.2025
Сообщения
10
Розыгрыши
0
Реакции
0
Баллы
11
💰 RC
14
помогите решить проблему, коронка админа над головой динамическая, приближается и отдаляется при любом движении, я бы хотел ее закрепить ровно над ником, как это сделать?

JavaScript:
if (login && staticInfo) {
                const position = player.getBoneCoords(12844, 0, 0, 0.1);
                const screenPos = mp.game.graphics.world3dToScreen2d(position);

                if (screenPos) {
                    const distance = mp.game.system.vdist(localPlayer.position.x, localPlayer.position.y, localPlayer.position.z, position.x, position.y, position.z);

                    if (distance < 15) {
                        if (player.getVariable('invisible') === 255) {
                            let positiontag;
                            positiontag = player.position;
                            mp.game.graphics.drawText(`${login} [#${staticInfo}]`, [position.x, position.y, position.z+0.4], {
                                scale: [0.3, 0.3],
                                outline: true,
                                color: [255, 0, 0, 255],
                                font: 4
                            });

                            const staticPosY = screenPos.y + 0.035;
                            mp.game.graphics.drawText(``, [screenPos.x, staticPosY], {
                                font: 0,
                                color: [255, 255, 255, 255],
                                scale: [0.35, 0.35],
                                outline: true
                            });

                            if (player.getVariable('voice') === true) {
                                const dotPosY = screenPos.y - 0.05;
                                mp.game.graphics.drawText('•', [screenPos.x, dotPosY], {
                                    font: 0,
                                    color: [255, 0, 0, 255],
                                    scale: [0.6, 0.6],
                                    outline: false,
                                    centre: true
                                });
                            }

                            if (player.getVariable('mute') === true) {
                                const dotPosY = screenPos.y - 0.05;
                                mp.game.graphics.drawText('x', [screenPos.x, dotPosY], {
                                    font: 0,
                                    color: [255, 0, 0, 255],
                                    scale: [0.6, 0.6],
                                    outline: false,
                                    centre: true
                                });
                            }

                            if (adminlvl >= 1 && radname === true) {
                                const crownPosY = screenPos.y - 0.03;               
                                mp.game.graphics.drawSprite('redage_textures_001', 'admin', screenPos.x, crownPosY, 0.027, 0.027, 0, 255, 255, 255, 255);
                            }
 
Для того чтобы закрепить коронку админа над ником игрока, можно использовать следующий подход:

1. Определите позицию игрока в мировых координатах и преобразуйте её в экранные координаты с помощью функции `mp.game.graphics.world3dToScreen2d(position)`.

2. Используйте полученные экранные координаты, чтобы правильно расположить текст и спрайт над ником игрока.

3. Для того чтобы коронка оставалась фиксированной над ником даже при движении игрока, рекомендуется обновлять её позицию в каждом кадре или при изменении позиции игрока.

Примерно таким образом можно обновить код:

```javascript
const adminCrownOffset = 0.03; // Расстояние от ника до короны админа по вертикали

if (adminlvl >= 1 && radname === true) {
const crownPosY = screenPos.y - adminCrownOffset;
mp.game.graphics.drawSprite('redage_textures_001', 'admin', screenPos.x, crownPosY, 0.027, 0.027, 0, 255, 255, 255, 255);
}
```

Пожалуйста, убедитесь, что переменные `adminlvl` и `radname` определены и корректно работают в вашем скрипте. Также вы можете настроить `adminCrownOffset` в зависимости от того, как далеко от ника должна быть коронка админа.
 
Для того чтобы закрепить коронку админа над ником игрока, можно использовать следующий подход:

1. Определите позицию игрока в мировых координатах и преобразуйте её в экранные координаты с помощью функции `mp.game.graphics.world3dToScreen2d(position)`.

2. Используйте полученные экранные координаты, чтобы правильно расположить текст и спрайт над ником игрока.

3. Для того чтобы коронка оставалась фиксированной над ником даже при движении игрока, рекомендуется обновлять её позицию в каждом кадре или при изменении позиции игрока.

Примерно таким образом можно обновить код:

```javascript
const adminCrownOffset = 0.03; // Расстояние от ника до короны админа по вертикали

if (adminlvl >= 1 && radname === true) {
const crownPosY = screenPos.y - adminCrownOffset;
mp.game.graphics.drawSprite('redage_textures_001', 'admin', screenPos.x, crownPosY, 0.027, 0.027, 0, 255, 255, 255, 255);
}
```

Пожалуйста, убедитесь, что переменные `adminlvl` и `radname` определены и корректно работают в вашем скрипте. Также вы можете настроить `adminCrownOffset` в зависимости от того, как далеко от ника должна быть коронка админа.
коронка все равно динамична, она должна быть статична и ровно закреплена над ником админа и не приближаться и отдаляться при любом движении
 
коронка все равно динамична, она должна быть статична и ровно закреплена над ником админа и не приближаться и отдаляться при любом движении
Для того, чтобы коронка админа оставалась статичной и ровно закреплена над ником админа, даже при движении игрока, вам необходимо использовать относительные координаты при отображении короны. Вместо обновления экранных координат каждый кадр, вы можете задать фиксированные координаты короны относительно экранных координат ника игрока.

Примерно таким образом можно обновить код:

```javascript
const adminCrownOffsetX = 0; // Смещение по X относительно ника
const adminCrownOffsetY = -30; // Смещение по Y относительно ника

if (adminlvl >= 1 && radname === true) {
const playerPos = mp.players.local.position; // Получить позицию игрока
const screenPos = mp.game.graphics.world3dToScreen2d(playerPos); // Преобразовать в экранные координаты

const crownPosX = screenPos.x + adminCrownOffsetX;
const crownPosY = screenPos.y + adminCrownOffsetY;

mp.game.graphics.drawSprite('rage_textures', 'admin', crownPosX, crownPosY, 0.027, 0.027, 0, 255, 255, 255, 255);
}
```

В этом коде мы задаем фиксированные относительные координаты `adminCrownOffsetX` и `adminCrownOffsetY` относительно ника игрока. Теперь коронка админа будет оставаться статичной и закреплена над ником игрока даже при его движении. Не забудьте настроить значения `adminCrownOffsetX` и `adminCrownOffsetY` в соответствии с вашими потребностями.
 
Попробуй так

JavaScript:
if (login && staticInfo) {
    const pos = player.position;
    const screenPos = mp.game.graphics.world3dToScreen2d(new mp.Vector3(pos.x, pos.y, pos.z + 1));

    if (screenPos) {
        const distance = mp.game.system.vdist(
            localPlayer.position.x, localPlayer.position.y, localPlayer.position.z,
            pos.x, pos.y, pos.z
        );

        if (distance < 15) {
            if (player.getVariable('invisible') === 255) {
                mp.game.graphics.drawText(`${login} [#${staticInfo}]`, [pos.x, pos.y, pos.z + 1], {
                    scale: [0.3, 0.3],
                    outline: true,
                    color: [255, 0, 0, 255],
                    font: 4
                });

                if (player.getVariable('voice') === true) {
                    mp.game.graphics.drawText('•', [screenPos.x, screenPos.y - 0.05], {
                        font: 0,
                        color: [255, 0, 0, 255],
                        scale: [0.6, 0.6],
                        outline: false,
                        centre: true
                    });
                }

                if (player.getVariable('mute') === true) {
                    mp.game.graphics.drawText('x', [screenPos.x, screenPos.y - 0.05], {
                        font: 0,
                        color: [255, 0, 0, 255],
                        scale: [0.6, 0.6],
                        outline: false,
                        centre: true
                    });
                }

                if (adminlvl >= 1 && radname === true) {
                    mp.game.graphics.drawSprite(
                        'redage_textures_001', 'admin',
                        screenPos.x,
                        screenPos.y - 0.08,
                        0.027, 0.027, 0,
                        255, 255, 255, 255
                    );
                }
            }
        }
    }
}
 
Попробуй так

JavaScript:
if (login && staticInfo) {
    const pos = player.position;
    const screenPos = mp.game.graphics.world3dToScreen2d(new mp.Vector3(pos.x, pos.y, pos.z + 1));

    if (screenPos) {
        const distance = mp.game.system.vdist(
            localPlayer.position.x, localPlayer.position.y, localPlayer.position.z,
            pos.x, pos.y, pos.z
        );

        if (distance < 15) {
            if (player.getVariable('invisible') === 255) {
                mp.game.graphics.drawText(`${login} [#${staticInfo}]`, [pos.x, pos.y, pos.z + 1], {
                    scale: [0.3, 0.3],
                    outline: true,
                    color: [255, 0, 0, 255],
                    font: 4
                });

                if (player.getVariable('voice') === true) {
                    mp.game.graphics.drawText('•', [screenPos.x, screenPos.y - 0.05], {
                        font: 0,
                        color: [255, 0, 0, 255],
                        scale: [0.6, 0.6],
                        outline: false,
                        centre: true
                    });
                }

                if (player.getVariable('mute') === true) {
                    mp.game.graphics.drawText('x', [screenPos.x, screenPos.y - 0.05], {
                        font: 0,
                        color: [255, 0, 0, 255],
                        scale: [0.6, 0.6],
                        outline: false,
                        centre: true
                    });
                }

                if (adminlvl >= 1 && radname === true) {
                    mp.game.graphics.drawSprite(
                        'redage_textures_001', 'admin',
                        screenPos.x,
                        screenPos.y - 0.08,
                        0.027, 0.027, 0,
                        255, 255, 255, 255
                    );
                }
            }
        }
    }
}
стала более статичной, но все равно немного плавает
 
стала более статичной, но все равно немного плавает
JavaScript:
if (login && staticInfo) {
    const pos = player.position;
    const distance = mp.game.system.vdist(
        localPlayer.position.x, localPlayer.position.y, localPlayer.position.z,
        pos.x, pos.y, pos.z
    );

    if (distance < 15) {
        if (player.getVariable('invisible') === 255) {
            const baseZ = 1.1;


            mp.game.graphics.drawText(`${login} [#${staticInfo}]`, [pos.x, pos.y, pos.z + baseZ], {
                scale: [0.3, 0.3],
                outline: true,
                color: [255, 0, 0, 255],
                font: 4
            });


            if (player.getVariable('voice') === true) {
                mp.game.graphics.drawText('•', [pos.x, pos.y, pos.z + baseZ + 0.05], {
                    font: 0,
                    color: [255, 0, 0, 255],
                    scale: [0.6, 0.6],
                    outline: false,
                    centre: true
                });
            }


            if (player.getVariable('mute') === true) {
                mp.game.graphics.drawText('x', [pos.x, pos.y, pos.z + baseZ + 0.05], {
                    font: 0,
                    color: [255, 0, 0, 255],
                    scale: [0.6, 0.6],
                    outline: false,
                    centre: true
                });
            }


            if (adminlvl >= 1 && radname === true) {
                mp.game.graphics.drawSprite(
                    'redage_textures_001', 'admin',
                    pos.x, pos.y, pos.z + baseZ + 0.09,
                    0.027, 0.027, 0,
                    255, 255, 255, 255
                );
            }
        }
    }
}
 
JavaScript:
if (login && staticInfo) {
    const pos = player.position;
    const distance = mp.game.system.vdist(
        localPlayer.position.x, localPlayer.position.y, localPlayer.position.z,
        pos.x, pos.y, pos.z
    );

    if (distance < 15) {
        if (player.getVariable('invisible') === 255) {
            const baseZ = 1.1;


            mp.game.graphics.drawText(`${login} [#${staticInfo}]`, [pos.x, pos.y, pos.z + baseZ], {
                scale: [0.3, 0.3],
                outline: true,
                color: [255, 0, 0, 255],
                font: 4
            });


            if (player.getVariable('voice') === true) {
                mp.game.graphics.drawText('•', [pos.x, pos.y, pos.z + baseZ + 0.05], {
                    font: 0,
                    color: [255, 0, 0, 255],
                    scale: [0.6, 0.6],
                    outline: false,
                    centre: true
                });
            }


            if (player.getVariable('mute') === true) {
                mp.game.graphics.drawText('x', [pos.x, pos.y, pos.z + baseZ + 0.05], {
                    font: 0,
                    color: [255, 0, 0, 255],
                    scale: [0.6, 0.6],
                    outline: false,
                    centre: true
                });
            }


            if (adminlvl >= 1 && radname === true) {
                mp.game.graphics.drawSprite(
                    'redage_textures_001', 'admin',
                    pos.x, pos.y, pos.z + baseZ + 0.09,
                    0.027, 0.027, 0,
                    255, 255, 255, 255
                );
            }
        }
    }
}
теперь ее вообще не видно
 
Назад
Верх