Merge branch 'feature/voice-chat' into 'develop'

Feature/voice chat

See merge request log-gtav/reallife-gamemode!12
This commit is contained in:
VegaZ
2019-04-25 17:30:04 +02:00
3 changed files with 111 additions and 0 deletions

View File

@@ -0,0 +1,83 @@
import playerInteraction from "Interaction/playerinteraction";
/**
* @overview Life of German Reallife - Voice Main main.ts
* @author Zeuto
* @copyright (c) 2008 - 2019 Life of German
*/
export default function voice() {
const Use3d = true;
const UseAutoVolume = false;
const MaxRange = 30.0;
mp.voiceChat.muted = true; // initialize muted
var listeners: Array<PlayerMp> = new Array<PlayerMp>();
mp.keys.bind(0x73, false, _ => {
mp.voiceChat.muted = !mp.voiceChat.muted;
mp.game.graphics.notify("[" + new Date().toLocaleTimeString() + "] Voice-Chat: " + (mp.voiceChat.muted ? '~g~aktiviert' : '~r~deaktiviert'));
});
function addListener(target: PlayerMp) {
listeners.push(target);
mp.events.callRemote("CLIENT:AddVoiceListener", target);
if (UseAutoVolume) {
target.voiceAutoVolume = true;
} else {
target.voiceVolume = 1.0;
}
if (Use3d) {
target.voice3d = true;
}
}
function removeListener(target: PlayerMp) {
let idx = listeners.indexOf(target)
if (idx !== -1) {
listeners.splice(idx, 1);
}
mp.events.callRemote("CLIENT:RemoveVoiceListener");
}
setInterval(() => {
let localPlayer = mp.players.local;
let localPos = localPlayer.position;
mp.players.forEachInStreamRange(player => {
if (player != localPlayer) {
if (!listeners.includes(player)) {
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) {
addListener(player);
}
}
}
});
listeners.forEach((player: PlayerMp) => {
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) {
removeListener(player);
} else if (!UseAutoVolume) {
player.voiceVolume = 1 - (dist / MaxRange);
}
}
else {
removeListener(player);
}
})
}, 500)
}

View File

@@ -11,6 +11,9 @@ let globalData: GlobalData = {
InChat: false,
};
import voice from './Voice/main';
voice();
import handMoney from './Gui/handmoney'
handMoney();

View File

@@ -0,0 +1,25 @@
using GTANetworkAPI;
/**
* @overview Life of German Reallife - Event Voice (Voice.cs)
* @author Zeuto
* @copyright (c) 2008 - 2019 Life of German
*/
namespace ReallifeGamemode.Server.Events
{
class Voice : Script
{
[RemoteEvent("CLIENT:AddVoiceListener")]
public void AddPlayerVoiceListenerEvent(Client player, Client target)
{
player.EnableVoiceTo(target);
}
[RemoteEvent("CLIENT:RemoveVoiceListener")]
public void RemovePlayerVoiceListenerEvent(Client player, Client target)
{
player.DisableVoiceTo(target);
}
}
}