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

Проблема Не отображаются иконка когда говоришь

aBobA228

Новый участник
23 Ноя 2021
58
1
13
не знаю в чем проблема вот код gamertag.js

JavaScript:
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();

mp.nametags.enabled = false;

var showGamertags = true;
var reupdateTagLabel = [];
var tagLabelPool = [];

var playerPos = void 0;
var playerTarget = void 0;
var playerAimAt = void 0;
var width = 0.025;
var height = 0.004;
var border = 0.001;

mp.keys.bind(global.Keys.VK_5, false, function () {
    // Включить / Выключить.

    if (!global.loggedin || global.chatActive || global.editing || global.menuCheck()) return;
    showGamertags = !showGamertags;
});

function calculateDistance(v1, v2) {
    var dx = v1.x - v2.x;
    var dy = v1.y - v2.y;
    var dz = v1.z - v2.z;

    return Math.sqrt(dx * dx + dy * dy + dz * dz);
}

mp.events.add('render', function (nametags) {

    if (!global.loggedin) return;

    // Pre draw
    playerPos = mp.players.local.position;
    playerAimAt = mp.game.player.getEntityIsFreeAimingAt();
    playerTarget = mp.players.local;

    // Get variables
    var isAdmin = global.localplayer.getVariable('IS_ADMIN');

    // Admin get target info
    if (isAdmin == true) {
        var player = playerTarget;
        if (player === undefined || player.handle === undefined || !player.handle) player = playerAimAt;
        if (player === undefined || player.handle === undefined || !player.handle) {} else {
            if (player.getType() === 4 && player != global.localplayer) {
                mp.game.graphics.drawText(player.name + ' (' + player.remoteId + ')', [0.46, 0.4], { font: 4, color: [255, 255, 255, 235], scale: [2, 0.35], outline: true });
            }
        }
    }

    // Player gamertags
    if (showGamertags) {

        nametags.forEach(function (nametag) {
            try {
                var _nametag = _slicedToArray(nametag, 4),
                    _player = _nametag[0],
                    x = _nametag[1],
                    y = _nametag[2],
                    distance = _nametag[3];

                    var split = _player.name.split("_");
                    var _playerName = split[0] + " " + split[1];

                if (calculateDistance(playerPos, _player.position) < 15.0) {
                    if (_player.getVariable('INVISIBLE') != true && _player.getVariable('HideNick') != true) {
                        var passportText = '';
                        if (global.passports[_player.name] !== undefined) passportText = ' | ' + global.passports[_player.name];
                        if (tagLabelPool[_player.remoteId] === undefined || reupdateTagLabel[_player.remoteId] === undefined || new Date().getTime() - reupdateTagLabel[_player.remoteId] > 500) {

                            reupdateTagLabel[_player.remoteId] = new Date().getTime();

                            var text = void 0;
                            if (_player.getVariable('IS_MASK') == true) {
                                if (isAdmin === true) text = '\u0418\u0433\u0440\u043E\u043A \u0432 \u043C\u0430\u0441\u043A\u0435: ' + _playerName + ' (' + _player.remoteId + passportText + ')';else text = 'ID: ' + _player.remoteId;
                            } else {
                                if (isAdmin === true || mp.storage.data.friends[_player.name] !== undefined || global.passports[_player.name] !== undefined) text = _playerName + ' (' + _player.remoteId + passportText + ')';else text = 'ID: ' + _player.remoteId;;
                            }
                            var localFraction = global.localplayer.getVariable('fraction');
                            var playerFraction = _player.getVariable('fraction');
                            if (localFraction != null && playerFraction != null && localFraction === playerFraction && localFraction != 0 && playerFraction != 0)
                                //text = _playerName + ' (' + _player.remoteId + passportText + ')';
                            text = `[${_player.getVariable('fractionRankName')}] ${_playerName} (${_player.getVariable('REMOTE_ID')}${passportText}) `;

                            var color = _player.getVariable('REDNAME') === true ? [230, 230, 250, 250] : [255, 255, 255, 255];
                            tagLabelPool[_player.remoteId] = { text, color };
                        }
                        if (_player.vehicle) y += 0.065;
                        var label = tagLabelPool[_player.remoteId];
                        if (label !== undefined) {
                            drawPlayerTag(_player, x, y, label.text, label.color);
                            drawPlayerTag(_player, x, y, '\n #' + _player.getVariable('PERSON_ID'), [200,200,200,200]);
                            drawPlayerVoiceIcon(_player, x, y);
                            if (_player.getVariable('IS_DYING'))
                            {
                                drawPlayerTag(_player, x, y - 0.06, "Гражданин в коме", [255, 0, 0, 255]);
                            }
                            
                            if (_player.getVariable('IS_ADMIN') === true)
                            {
                                drawPlayercrown(_player, x, y );
                            }
                        }
                    }
                }
            } catch (e) {}
        });
    }
});
function drawPlayerTag(player, x, y, displayname, color) {
    //var position = player.getBoneCoords(12844, 0.6, 0, 0); //player.position;
    //position.z += 1.5;
    //var frameTime = lastFrameTime;
    //const frameRate = 1.0 / (mp.game.invoke("0x15C40837039FFAF7") / );

    // draw user name
    mp.game.graphics.drawText(displayname, [x, y], { font: 4, color: color, scale: [0.35, 0.35], outline: true });

    // draw health & ammo bar
    if (playerTarget != undefined && player.handle == playerTarget.handle || playerAimAt != undefined && player.handle == playerAimAt.handle || global.spectating) {
        y += 0.04;
        var health = player.getHealth();
        health = health <= 100 ? health / 100 : (health - 100) / 100;

        var armour = player.getArmour() / 100;
        if (armour > 0) {

            mp.game.graphics.drawRect(x, y, width + border * 2, height + border * 2, 0, 0, 0, 200);
            mp.game.graphics.drawRect(x, y, width, height, 150, 150, 150, 255);
            mp.game.graphics.drawRect(x - width / 2 * (1 - health), y, width * health, height, 255, 255, 255, 200);

            y -= 0.007;

            mp.game.graphics.drawRect(x, y, width + border * 2, height + border * 2, 0, 0, 0, 200);
            mp.game.graphics.drawRect(x, y, width, height, 41, 66, 78, 255);
            mp.game.graphics.drawRect(x - width / 2 * (1 - armour), y, width * armour, height, 48, 108, 135, 200);
        } else {

            mp.game.graphics.drawRect(x, y, width + border * 2, height + border * 2, 0, 0, 0, 200);
            mp.game.graphics.drawRect(x, y, width, height, 150, 150, 150, 255);
            mp.game.graphics.drawRect(x - width / 2 * (1 - health), y, width * health, height, 255, 255, 255, 200);
        }
    }
}

function drawPlayerVoiceIcon(player, x, y) {
    if (player.isVoiceActive) drawVoiceSprite("mpleaderboard", 'leaderboard_audio_3', [0.7, 0.7], 0, [255, 255, 255, 255], x, y - 0.02 * 0.7);else if (player.getVariable('voice.muted') == true) drawVoiceSprite("mpleaderboard", 'leaderboard_audio_mute', [0.7, 0.7], 0, [255, 0, 0, 255], x, y - 0.02 * 0.7);
}


function drawVoiceSprite(dist, name, scale, heading, colour, x, y, layer) {
    var resolution = mp.game.graphics.getScreenActiveResolution(0, 0),
        textureResolution = mp.game.graphics.getTextureResolution(dist, name),
        textureScale = [scale[0] * textureResolution.x / resolution.x, scale[1] * textureResolution.y / resolution.y];

    if (mp.game.graphics.hasStreamedTextureDictLoaded(dist) === 1) {
        if (typeof layer === 'number') mp.game.graphics.set2dLayer(layer);
        mp.game.graphics.drawSprite(dist, name, x, y, textureScale[0], textureScale[1], heading, colour[0], colour[1], colour[2], colour[3]);
    } else mp.game.graphics.requestStreamedTextureDict(dist, true);
}
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,766
1,581
211
28
JavaScript:
        var player = playerTarget;
        if (player === undefined || player.handle === undefined || !player.handle) player = playerAimAt;
        if (player === undefined || player.handle === undefined || !player.handle) {} else {

Стало страшно.Зачем дважды проверять на одно и то же? Убери второй if и оставь else.

JavaScript:
var split = _player.name.split("_");
Если вдруг в зону рендера попадёт персонаж, у которого никнейм еще не имеет "_" - получишь exception и сломанный ивент render (именно в этом файле).
Такое может случиться, например, если человек только зашел на сервер и у него в нике не то, что установил ты сервером, а тот стандартный ник из лаунчера мультиплеера.
 
Последнее редактирование:

aBobA228

Новый участник
23 Ноя 2021
58
1
13
JavaScript:
        var player = playerTarget;
        if (player === undefined || player.handle === undefined || !player.handle) player = playerAimAt;
        if (player === undefined || player.handle === undefined || !player.handle) {} else {

Стало страшно.Зачем дважды проверять на одно и то же? Убери второй if и оставь else.

JavaScript:
var split = _player.name.split("_");
Если вдруг в зону рендера попадёт персонаж, у которого никнейм еще не имеет "_" - получишь exception.
Такое может случиться, например, если человек только зашел на сервер и у него в нике не то, что установил ты сервером, а тот стандартный ник из лаунчера мультиплеера.
Так проблема не в стандартном нике, а в иконке голоса когда говоришь она не отображается, никаких ошибок вроде нет а она не отображается
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,766
1,581
211
28
Так проблема не в стандартном нике, а в иконке голоса когда говоришь она не отображается, никаких ошибок вроде нет а она не отображается
Я показал самые очевиднейшие моменты в коде. Честно говоря лень разбирать js код, поэтому не помогу, но вот эти два момента лучше поправить.
 

aBobA228

Новый участник
23 Ноя 2021
58
1
13
Я показал самые очевиднейшие моменты в коде. Честно говоря лень разбирать js код, поэтому не помогу, но вот эти два момента лучше поправить.
я поправил уже но проблема осталось проблемой не отображения иконок голоса
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,766
1,581
211
28
Попробуй заменить
JavaScript:
textureScale = [scale[0] * textureResolution.x / resolution.x, scale[1] * textureResolution.y / resolution.y];
На
JavaScript:
textureScale = [(scale[0] * textureResolution.x) / resolution.x, (scale[1] * textureResolution.y) / resolution.y];

И еще я не уверен в
JavaScript:
drawVoiceSprite("mpleaderboard", 'leaderboard_audio_3', [0.7, 0.7], 0, [255, 255, 255, 255], x, y - 0.02 * 0.7);
На
JavaScript:
drawVoiceSprite("mpleaderboard", "leaderboard_audio_3", [0.7, 0.7], 0, [255, 255, 255, 255], x, y - 0.02 * 0.7);

Не уверен, просто предположения. На JSе не работаю в основном, это первое, что я бы попробовал поменять по поводу этой ошибки. :poop:
 
Последнее редактирование:

JJIGolem

Старожил
High developer
BackEnd developer
19 Окт 2020
239
288
142
JavaScript:
// найди данную строку в gamertag.js
if (mp.game.graphics.hasStreamedTextureDictLoaded(dist) === 1) {
// и замени на эту
if (mp.game.graphics.hasStreamedTextureDictLoaded(dist)) {
 
Реакции: Gastello

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,766
1,581
211
28
JavaScript:
// найди данную строку в gamertag.js
if (mp.game.graphics.hasStreamedTextureDictLoaded(dist) === 1) {
// и замени на эту
if (mp.game.graphics.hasStreamedTextureDictLoaded(dist)) {
Первая строчка будет работать ровно так же.


Return value​

  • Boolean
=== 1 будет означать то же самое, что без него, потому что ты проверяешь на === true. 1 === true.
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,766
1,581
211
28

JJIGolem

Старожил
High developer
BackEnd developer
19 Окт 2020
239
288
142
Первая строчка будет работать ровно так же.


Return value​

  • Boolean
=== 1 будет означать то же самое, что без него, потому что ты проверяешь на === true. 1 === true.
Вы, конечно, извините, но строгое сравнение TRUE и 1 выдаст = False
1638474690876.png
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,766
1,581
211
28

JJIGolem

Старожил
High developer
BackEnd developer
19 Окт 2020
239
288
142
Я уже ответил по этому поводу, всё верно, действительно выдаст false, однако вариант с этой функцией === 1 абсолютно рабочий, вот я к чему.
Данная функция возвращает либо true, либо false. А как мы уже убедились true !== 1
1638474998530.png
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,766
1,581
211
28
Данная функция возвращает либо true, либо false. А как мы уже убедились true !== 1
Посмотреть вложение 3257
Спасибо за информацию, я это видел и сам, и даже скинул выше.
На RedAge работает до сих пор === 1. Ни в коем случае не говорю, что значит, что так нужно, просто констатирую факт, что это может работать даже так и является проверенным вариантом, а потому проблема не в этом участке кода.
 

JJIGolem

Старожил
High developer
BackEnd developer
19 Окт 2020
239
288
142
Спасибо за информацию, я это видел и сам, и даже скинул выше.
На RedAge работает до сих пор === 1. Ни в коем случае не говорю, что значит, что так нужно, просто констатирую факт, что это может работать даже так и является проверенным вариантом, а потому проблема не в этом участке кода.
у меня не работало пока не убрал === 1
Я ведь тоже не спроста написал
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,766
1,581
211
28
у меня не работало пока не убрал === 1
Я ведь тоже не спроста написал
Хз, я на жабе не пишу, поэтому не могу ничего сказать, кроме того, что у нас, в своё время, работало.
1638476182980.png


Мои догадки по этому коду я уже скидывал выше, думаю, что проблема там, а конкретно недоверие к кавычкам ' в месте, где должны быть ", по логике вещей.
 

JJIGolem

Старожил
High developer
BackEnd developer
19 Окт 2020
239
288
142
Хз, я на жабе не пишу, поэтому не могу ничего сказать, кроме того, что у нас, в своё время, работало.
Посмотреть вложение 3258

Мои догадки по этому коду я уже скидывал выше, думаю, что проблема там, а конкретно недоверие к кавычкам ' в месте, где должны быть ", по логике вещей.
"в свое время" - тогда оно работало, согласен. Но в один момент после обновлений рейджа, перестало.
 

UchihaMadara

Старожил
FrontEnd developer
27 Окт 2020
572
212
121
Хайкодер вертится как может. "Проверено, Абсолютно рабочий, Это я и сам знаю". Оно всегда возвращало Boolean
1638480437151.png
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,766
1,581
211
28
Хайкодер вертится как может. "Проверено, Абсолютно рабочий, Это я и сам знаю". Оно всегда возвращало Boolean
Посмотреть вложение 3259
А ты не перестаешь черкаши с трусов снюхивать? Всегда проходил мимо твоих комментариев, но тут даже немного улыбнуло, как ты пытаешься задеть меня при первой удобной возможности, продолжай держать в курсе и следить, диванный критик.
Не понимаю твоего негатива от слова совсем. Я написал, что так работало на RA и работает, скорее всего, ровно до сих пор, при том подчёркивая, что я в душе не ебу должно ли так работать и правильно ли это, факт работоспособности остаётся для меня фактом. Wiki заполняет не разраб и там может быть написано что угодно, поэтому верить этому "как последней инстанции" - дело твоё. Продолжай пукать, успехов, потешно наблюдать за размером твоего эго, ибо я со своим "хайкодер" для помощи на этом форуме, ты - для получения оценки и признаний, ибо не вижу, чтобы ты хоть кому-то безвозмездно помог. Ты - яркий пример русского токсичного комьюнити, не удавись. ;)
 
Последнее редактирование: