Ragemp-roleplay-skript/Voice/Teamspeak.js
2019-04-16 13:59:07 +02:00

106 lines
No EOL
3 KiB
JavaScript

var tsBrowser = null;
var refresh = 0;
var oldDateTime = 0;
API.onResourceStart.connect(function() {
var res = API.getScreenResolution();
tsBrowser = API.createCefBrowser(0, 0, false);
API.setCefBrowserPosition(tsBrowser, 0, 0);
API.waitUntilCefBrowserInit(tsBrowser);
});
API.onServerEventTrigger.connect(function (name, args)
{
if (name == "ConnectTeamspeak")
{
refresh = 1;
} else if (name == "sendToNamesList") {
API.setEntitySyncedData(API.getLocalPlayer(), "CALLING_PLAYER_NAME", args[0]);
} else if (name == "removeToNamesList") {
API.setEntitySyncedData(API.getLocalPlayer(), "CALLING_PLAYER_NAME", "");
}
});
API.onKeyDown.connect(function (sender, e) {
if (e.KeyCode === Keys.Y) {
API.triggerServerEvent("ChangeVoiceRange", e);
}
});
API.onUpdate.connect(function ()
{
var dateTime = API.getGameTime();
if (!API.isCefBrowserLoading(tsBrowser))
{
if (refresh == 1 && (dateTime - oldDateTime) >= 500)
{
oldDateTime = dateTime;
var player = API.getLocalPlayer();
var playerPos = API.getEntityPosition(player);
var playerRot = API.getGameplayCamRot();
var rotation = Math.PI / 180 * (playerRot.Z * -1);
var streamedPlayers = API.getStreamedPlayers();
var playerNames = new Array();
if (API.hasEntitySyncedData(player, "CALLING_PLAYER_NAME"))
{
var callingPlayerName = API.getEntitySyncedData(player, "CALLING_PLAYER_NAME");
if (callingPlayerName != "")
{
playerNames.push(callingPlayerName + "~10~0~0~3");
}
}
for (var i = 0; i < streamedPlayers.Length; i++)
{
var streamedPlayerPos = API.getEntityPosition(streamedPlayers[i]);
var distance = playerPos.DistanceTo(streamedPlayerPos);
var voiceRange = API.getEntitySyncedData(streamedPlayers[i], "VOICE_RANGE");
var volumeModifier = 0;
var range = 25;
if (voiceRange == "Weit")
{
range = 50;
}
else if (voiceRange == "Kurz")
{
range = 5;
}
if (distance > 5)
{
volumeModifier = (distance * -5 / 10);
}
if (volumeModifier > 0)
{
volumeModifier = 0;
}
if (distance < range)
{
var subPos = streamedPlayerPos.Subtract(playerPos);
var x = subPos.X * Math.cos(rotation) - subPos.Y * Math.sin(rotation);
var y = subPos.X * Math.sin(rotation) + subPos.Y * Math.cos(rotation);
x = x * 10 / range;
y = y * 10 / range;
var isDeath = API.hasEntitySyncedData(streamedPlayers[i], "IS_DEATH") && API.getEntitySyncedData(streamedPlayers[i], "IS_DEATH");
if (!isDeath)
{
playerNames.push(API.getPlayerName(streamedPlayers[i]) + "~" + (Math.round(x * 1000) / 1000) + "~" + (Math.round(y * 1000) / 1000) + "~0~" + (Math.round(volumeModifier * 1000) / 1000));
}
}
}
API.loadPageCefBrowser(tsBrowser, "http://localhost:15555/players/" + API.getPlayerName(player) + "/" + playerNames.join(";") + "/");
}
}
});
API.onResourceStop.connect(function() {
if (tsBrowser != null) {
refresh = false;
API.destroyCefBrowser(tsBrowser);
}
});