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 = new Array(); 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) }