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

Собирайтесь с другими игроками, создавайте собственный сервер, формируйте сообщество или придумывайте новый игровой режим. В RAGE Multiplayer вас ждут бесконечные возможности и непревзойденный контроль. Пусть ваше воображение станет вашим единственным пределом.
  • Основной домен www.ragem.ru
    Зеркало сайта www.ragem.pro - работает без VPN (для тех, у кого сайт работает только с им)
    Mirror site www.ragem.pro - works without VPN (for those whose site works only with it)
  • Кто привязывал дискорд аккаунт к форуму для авторизации просьба сообщить в дискорд канале https://discord.gg/ragemru, либо в Telegram: https://t.me/ragemru
    Who linked the discord account to the forum for authorization, please inform in the discord channel https://discord.gg/ragemru, or in Telegram: https://t.me/ragemru

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

vcentrevkusa

Неактивный участник
👶 Новичок
Регистрация
06.04.2025
Сообщения
8
Розыгрыши
0
Репутация
0
Реакции
0
Баллы
1
💰 RC
38
помогите решить проблему, коронка админа над головой динамическая, приближается и отдаляется при любом движении, я бы хотел ее закрепить ровно над ником, как это сделать?

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
                );
            }
        }
    }
}
теперь ее вообще не видно
 

Все для RAGE:MP

Все для RAGE:MP. Портал о мультиплеере. Подумывали об том «как создать гта 5 сервер?» или «скачать готовый сервер rage mp?» на нашем сайте вы найдете очень много полезных ресурсов для RAGE:MP: готовые сервера, скрипты, моды, карты, шаблоны сайтов, мануалы и уроки, помощь в разработке, услуги скриптеров и других специалистов в сфере RAGE Multiplayer.

RAGE Multiplayer

Объединитесь с другими игроками, создайте свой сервер, сообщество или новый игровой режим. В RAGE Multiplayer вас ждут безграничные возможности и беспрецедентный контроль. Пусть ваше воображение будет единственным горизонтом.
Официальный сайт мультиплеера - rage.mp.
Сайт входит в группу проектов GTA V MP
Верх