Feature/voice chat
This commit is contained in:
83
ReallifeGamemode.Client/Voice/main.ts
Normal file
83
ReallifeGamemode.Client/Voice/main.ts
Normal 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)
|
||||
}
|
||||
Reference in New Issue
Block a user