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

Голосовой чат

Dale1ter

Новый участник
10 Окт 2022
14
0
58
пишу на С# серв сайд и клиент сайд, не нашел нормального вики где описывается работа войс чата. Это стандартная ГТА 5 войс чат или GTANetworkAPI? если так тогда подскажите, как она реализуется на стороне клиента или сервера и какие именно.

RAGE.Voice.Allowed;
прописал но на N в игре ничего не происходит, заранее спасибо
 

Jerry (ChatGPT)

AI-powered language model
VIP
helper
17 Окт 2023
2,763
271
100
В GTANetworkAPI голосовой чат реализуется через RAGE.Voice — на сервере контролируешь RAGE.Voice.Allowed и RAGE.Voice.Mode, на клиенте реакция появляется автоматически. Если N не работает, проверь, что RAGE.Voice.Enabled = true в настройках, и что микрофон доступен. Также убедись, что используешь последнюю версию API и правильно инициализируешь голос на клиенте.
 

ghostnuller

Новый участник
Мошенник
21 Июл 2025
24
1
13
NAPI.Player.EnablePlayerVoiceTo(player, target); // Вкл

NAPI.Player.DisablePlayerVoiceTo(player, target); // Выкл
 

ghostnuller

Новый участник
Мошенник
21 Июл 2025
24
1
13
Братан есть же сурс в открытом доступе, берёшь и переписываешь под себя просто

Client:
JavaScript:
const Use3d = true;
const UseAutoVolume = false;

const MaxRange = 50.0;

mp.keys.bind(0x73, true, function() {
    mp.voiceChat.muted = !mp.voiceChat.muted;
    mp.game.graphics.notify("Voice Chat: " + ((!mp.voiceChat.muted) ? "~g~enabled" : "~r~disabled"));
});

let g_voiceMgr =
{
    listeners: [],
    
    add: function(player)
    {
        this.listeners.push(player);
        
        player.isListening = true;       
        mp.events.callRemote("add_voice_listener", player);
        
        if(UseAutoVolume)
        {
            player.voiceAutoVolume = true;
        }
        else
        {
            player.voiceVolume = 1.0;
        }
        
        if(Use3d)
        {
            player.voice3d = true;
        }
    },
    
    remove: function(player, notify)
    {
        let idx = this.listeners.indexOf(player);
            
        if(idx !== -1)
            this.listeners.splice(idx, 1);
            
        player.isListening = false;       
        
        if(notify)
        {
            mp.events.callRemote("remove_voice_listener", player);
        }
    }
};

mp.events.add("playerQuit", (player) =>
{
    if(player.isListening)
    {
        g_voiceMgr.remove(player, false);
    }
});

setInterval(() =>
{
    let localPlayer = mp.players.local;
    let localPos = localPlayer.position;
    
    mp.players.forEachInStreamRange(player =>
    {
        if(player != localPlayer)
        {
            if(!player.isListening)
            {
                const playerPos = player.position;       
                let dist = mp.game.system.vdist(playerPos.x, playerPos.y, playerPos.z, localPos.x, localPos.y, localPos.z);
                
                if(dist <= MaxRange)
                {
                    g_voiceMgr.add(player);
                }
            }
        }
    });
    
    g_voiceMgr.listeners.forEach((player) =>
    {
        if(player.handle !== 0)
        {
            const playerPos = player.position;       
            let dist = mp.game.system.vdist(playerPos.x, playerPos.y, playerPos.z, localPos.x, localPos.y, localPos.z);
            
            if(dist > MaxRange)
            {
                g_voiceMgr.remove(player, true);
            }
            else if(!UseAutoVolume)
            {
                player.voiceVolume = 1 - (dist / MaxRange);
            }
        }
        else
        {
            g_voiceMgr.remove(player, true);
        }
    });
}, 500);

Server:

JavaScript:
mp.events.add("add_voice_listener", (player, target) =>
{
    if(target)
    {
        player.enableVoiceTo(target);
    }
});

mp.events.add("remove_voice_listener", (player, target) =>
{
    if(target)
    {
        player.disableVoiceTo(target);
    }
});
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
3,221
1,928
216
28
Само по себе работать на кнопку ничего не будет.
Для этого тебе нужно создать бинд клавиши на клиентской стороне, внутри прописать её действие. Действием является mute и unmute локального игрока, а доступ к голосовому чату включается при входе в нужную зону. Есть публичные скрипты, есть игровые моды, скачиваешь и находишь решение.