Guten Tag,
ich benutze es_extended und habe das Script "MI-phone" hinzugefügt. Es funktioniert wunderbar, jedoch kann ich keinen anrufen. Ich habe das ganze unter die Lupe genommen und habe bemerkt, dass da standardmäßig tokovoip_script verwendet wird. Dies hab ich geändert, weil ich SaltyChat nutze und es weiterhin nutzen will.
- CancelCall = function()
- TriggerServerEvent('MI-phone:server:CancelCall', PhoneData.CallData)
- if PhoneData.CallData.CallType == "ongoing" then
- exports["saltychat"]:EndCall(PhoneData.CallData.CallId)
- end
- PhoneData.CallData.CallType = nil
- PhoneData.CallData.InCall = false
- PhoneData.CallData.AnsweredCall = false
- PhoneData.CallData.TargetData = {}
- PhoneData.CallData.CallId = nil
- if not PhoneData.isOpen then
- StopAnimTask(PlayerPedId(), PhoneData.AnimationData.lib, PhoneData.AnimationData.anim, 2.5)
- deletePhone()
- PhoneData.AnimationData.lib = nil
- PhoneData.AnimationData.anim = nil
- else
- PhoneData.AnimationData.lib = nil
- PhoneData.AnimationData.anim = nil
- end
- TriggerServerEvent('MI-phone:server:SetCallState', false)
- if not PhoneData.isOpen then
- SendNUIMessage({
- action = "Notification",
- NotifyData = {
- title = Lang("PHONE_TITLE"),
- content = Lang("PHONE_CALL_END"),
- icon = "fas fa-phone",
- timeout = 3500,
- color = "#e84118",
- },
- })
- else
- SendNUIMessage({
- action = "PhoneNotification",
- PhoneNotify = {
- title = Lang("PHONE_TITLE"),
- text = Lang("PHONE_CALL_END"),
- icon = "fas fa-phone",
- color = "#e84118",
- },
- })
- SendNUIMessage({
- action = "SetupHomeCall",
- CallData = PhoneData.CallData,
- })
- SendNUIMessage({
- action = "CancelOutgoingCall",
- })
- end
- end
- RegisterNetEvent('MI-phone:client:CancelCall')
- AddEventHandler('MI-phone:client:CancelCall', function()
- if PhoneData.CallData.CallType == "ongoing" then
- SendNUIMessage({
- action = "CancelOngoingCall"
- })
- exports["saltychat"]:EndCall(PhoneData.CallData.CallId)
- end
- PhoneData.CallData.CallType = nil
- PhoneData.CallData.InCall = false
- PhoneData.CallData.AnsweredCall = false
- PhoneData.CallData.TargetData = {}
- if not PhoneData.isOpen then
- StopAnimTask(PlayerPedId(), PhoneData.AnimationData.lib, PhoneData.AnimationData.anim, 2.5)
- deletePhone()
- PhoneData.AnimationData.lib = nil
- PhoneData.AnimationData.anim = nil
- else
- PhoneData.AnimationData.lib = nil
- PhoneData.AnimationData.anim = nil
- end
- TriggerServerEvent('MI-phone:server:SetCallState', false)
- if not PhoneData.isOpen then
- SendNUIMessage({
- action = "Notification",
- NotifyData = {
- title = Lang("PHONE_TITLE"),
- content = Lang("PHONE_CALL_END"),
- icon = "fas fa-phone",
- timeout = 3500,
- color = "#e84118",
- },
- })
- else
- SendNUIMessage({
- action = "PhoneNotification",
- PhoneNotify = {
- title = Lang("PHONE_TITLE"),
- text = Lang("PHONE_CALL_END"),
- icon = "fas fa-phone",
- color = "#e84118",
- },
- })
- SendNUIMessage({
- action = "SetupHomeCall",
- CallData = PhoneData.CallData,
- })
- SendNUIMessage({
- action = "CancelOutgoingCall",
- })
- end
- end)
- RegisterNetEvent('MI-phone:client:GetCalled')
- AddEventHandler('MI-phone:client:GetCalled', function(CallerNumber, CallId, AnonymousCall)
- local RepeatCount = 0
- local CallData = {
- number = CallerNumber,
- name = IsNumberInContacts(CallerNumber),
- anonymous = AnonymousCall
- }
- print(AnonymousCall)
- if AnonymousCall then
- CallData.name = "Anoniem"
- end
- PhoneData.CallData.CallType = "incoming"
- PhoneData.CallData.InCall = true
- PhoneData.CallData.AnsweredCall = false
- PhoneData.CallData.TargetData = CallData
- PhoneData.CallData.CallId = CallId
- TriggerServerEvent('MI-phone:server:SetCallState', true)
- SendNUIMessage({
- action = "SetupHomeCall",
- CallData = PhoneData.CallData,
- })
- for i = 1, Config.CallRepeats + 1, 1 do
- if not PhoneData.CallData.AnsweredCall then
- if RepeatCount + 1 ~= Config.CallRepeats + 1 then
- if PhoneData.CallData.InCall then
- RepeatCount = RepeatCount + 1
- TriggerServerEvent("InteractSound_SV:PlayOnSource", "ringing", 0.2)
- if not PhoneData.isOpen then
- SendNUIMessage({
- action = "IncomingCallAlert",
- CallData = PhoneData.CallData.TargetData,
- Canceled = false,
- AnonymousCall = AnonymousCall,
- })
- end
- else
- SendNUIMessage({
- action = "IncomingCallAlert",
- CallData = PhoneData.CallData.TargetData,
- Canceled = true,
- AnonymousCall = AnonymousCall,
- })
- TriggerServerEvent('MI-phone:server:AddRecentCall', "missed", CallData)
- break
- end
- Citizen.Wait(Config.RepeatTimeout)
- else
- SendNUIMessage({
- action = "IncomingCallAlert",
- CallData = PhoneData.CallData.TargetData,
- Canceled = true,
- AnonymousCall = AnonymousCall,
- })
- TriggerServerEvent('MI-phone:server:AddRecentCall', "missed", CallData)
- break
- end
- else
- TriggerServerEvent('MI-phone:server:AddRecentCall', "missed", CallData)
- break
- end
- end
- end)
- RegisterNUICallback('CancelOutgoingCall', function()
- CancelCall()
- end)
- RegisterNUICallback('DenyIncomingCall', function()
- CancelCall()
- end)
- RegisterNUICallback('CancelOngoingCall', function()
- CancelCall()
- end)
- RegisterNUICallback('AnswerCall', function()
- AnswerCall()
- end)
- function AnswerCall()
- if (PhoneData.CallData.CallType == "incoming" or PhoneData.CallData.CallType == "outgoing") and PhoneData.CallData.InCall and not PhoneData.CallData.AnsweredCall then
- PhoneData.CallData.CallType = "ongoing"
- PhoneData.CallData.AnsweredCall = true
- PhoneData.CallData.CallTime = 0
- SendNUIMessage({ action = "AnswerCall", CallData = PhoneData.CallData})
- SendNUIMessage({ action = "SetupHomeCall", CallData = PhoneData.CallData})
- TriggerServerEvent('MI-phone:server:SetCallState', true)
- if PhoneData.isOpen then
- DoPhoneAnimation('cellphone_text_to_call')
- else
- DoPhoneAnimation('cellphone_call_listen_base')
- end
- Citizen.CreateThread(function()
- while true do
- if PhoneData.CallData.AnsweredCall then
- PhoneData.CallData.CallTime = PhoneData.CallData.CallTime + 1
- SendNUIMessage({
- action = "UpdateCallTime",
- Time = PhoneData.CallData.CallTime,
- Name = PhoneData.CallData.TargetData.name,
- })
- else
- break
- end
- Citizen.Wait(1000)
- end
- end)
- TriggerServerEvent('MI-phone:server:AnswerCall', PhoneData.CallData)
- exports["saltychat"]:EstablishCall(PhoneData.CallData.CallId, 'Phone')
- else
- PhoneData.CallData.InCall = false
- PhoneData.CallData.CallType = nil
- PhoneData.CallData.AnsweredCall = false
- SendNUIMessage({
- action = "PhoneNotification",
- PhoneNotify = {
- title = Lang("PHONE_TITLE"),
- text = Lang("PHONE_NOINCOMING"),
- icon = "fas fa-phone",
- color = "#e84118",
- },
- })
- end
- end
Diese 4 Zeilen habe ich ersetzt:
exports.tokovoip_script:removePlayerFromRadio(PhoneData.CallData.CallId) => exports["saltychat"]:EndCall(PhoneData.CallData.CallId)
exports.tokovoip_script:removePlayerFromRadio(PhoneData.CallData.CallId) => exports["saltychat"]:EndCall(PhoneData.CallData.CallId)
exports.tokovoip_script:addPlayerToRadio(PhoneData.CallData.CallId, 'Phone') => exports["saltychat"]:EstablishCall(PhoneData.CallData.CallId, 'Phone')
exports.tokovoip_script:addPlayerToRadio(PhoneData.CallData.CallId, 'Phone') => exports["saltychat"]:EstablishCall(PhoneData.CallData.CallId, 'Phone')
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using SaltyShared;
- using CitizenFX.Core;
- using CitizenFX.Core.Native;
- using Newtonsoft.Json;
- namespace SaltyServer {
- public class VoiceManager : BaseScript {
- #region Properties / Fields
- public static VoiceManager Instance { get; private set; }
- public bool Enabled { get; private set; }
- public string MinimumPluginVersion { get; private set; }
- public Vector3[] RadioTowers { get; private set; } = new Vector3[0];
- public VoiceClient[] VoiceClients => this._voiceClients.Values.ToArray();
- private Dictionary<Player, VoiceClient> _voiceClients = new Dictionary<Player, VoiceClient>();
- public RadioChannel[] RadioChannels => this._radioChannels.ToArray();
- private List<RadioChannel> _radioChannels = new List<RadioChannel>();
- #endregion
- #region CTOR
- public VoiceManager()
- {
- VoiceManager.Instance = this;
- // General Exports
- this.Exports.Add("SetPlayerAlive", new Action<int, bool>(this.SetPlayerAlive));
- // Phone Exports
- this.Exports.Add("EstablishCall", new Action<int, int>(this.EstablishCall));
- this.Exports.Add("EndCall", new Action<int, int>(this.EndCall));
- // Radio Exports
- this.Exports.Add("SetPlayerRadioSpeaker", new Action<int, bool>(this.SetPlayerRadioSpeaker));
- this.Exports.Add("SetPlayerRadioChannel", new Action<int, string, bool>(this.SetPlayerRadioChannel));
- this.Exports.Add("RemovePlayerRadioChannel", new Action<int, string>(this.RemovePlayerRadioChannel));
- this.Exports.Add("SetRadioTowers", new Action<dynamic>(this.SetRadioTowers));
- }
- #endregion
- #region Server Events
- [EventHandler("onResourceStart")]
- private void OnResourceStart(string resourceName)
- {
- if (resourceName != API.GetCurrentResourceName())
- return;
- this.Enabled = API.GetResourceMetadata(resourceName, "VoiceEnabled", 0).Equals("true", StringComparison.OrdinalIgnoreCase);
- if (this.Enabled)
- {
- this.MinimumPluginVersion = API.GetResourceMetadata(resourceName, "MinimumPluginVersion", 0);
- }
- }
- [EventHandler("onResourceStop")]
- private void OnResourceStop(string resourceName)
- {
- if (resourceName != API.GetCurrentResourceName())
- return;
- this.Enabled = false;
- lock (this._voiceClients)
- {
- this._voiceClients.Clear();
- }
- lock (this._radioChannels)
- {
- foreach (RadioChannel radioChannel in this._radioChannels)
- {
- foreach (RadioChannelMember member in radioChannel.Members)
- {
- radioChannel.RemoveMember(member.VoiceClient);
- }
- }
- this._radioChannels.Clear();
- }
- }
- [EventHandler("playerDropped")]
- private void OnPlayerDisconnected([FromSource] Player player, string reason)
- {
- if (!this._voiceClients.TryGetValue(player, out VoiceClient client))
- return;
- foreach (RadioChannel radioChannel in this.RadioChannels.Where(c => c.IsMember(client)))
- {
- radioChannel.RemoveMember(client);
- }
- lock (this._voiceClients)
- {
- this._voiceClients.Remove(player);
- }
- BaseScript.TriggerClientEvent(Event.SaltyChat_RemoveClient, player.Handle);
- }
- #endregion
- #region RemoteEvents (Proximity)
- [EventHandler(Event.SaltyChat_SetVoiceRange)]
- private void OnSetVoiceRange([FromSource] Player player, float voiceRange)
- {
- if (!this._voiceClients.TryGetValue(player, out VoiceClient client))
- return;
- if (Array.IndexOf(SharedData.VoiceRanges, voiceRange) >= 0)
- {
- client.VoiceRange = voiceRange;
- BaseScript.TriggerClientEvent(Event.SaltyChat_UpdateVoiceRange, player.Handle, client.VoiceRange);
- }
- }
- #endregion
- #region Exports (General)
- private void SetPlayerAlive(int netId, bool isAlive)
- {
- Player player = this.Players[netId];
- lock (this._voiceClients)
- {
- if (this._voiceClients.ContainsKey(player))
- {
- this._voiceClients[player].IsAlive = isAlive;
- BaseScript.TriggerClientEvent(Event.SaltyChat_UpdateAlive, player.Handle, isAlive);
- }
- }
- }
- #endregion
- #region Exports (Phone)
- private void EstablishCall(int callerNetId, int partnerNetId)
- {
- Player caller = this.Players[callerNetId];
- Player callPartner = this.Players[partnerNetId];
- caller.TriggerEvent(Event.SaltyChat_EstablishCall, callPartner.Handle, JsonConvert.SerializeObject(callPartner.Character.Position));
- callPartner.TriggerEvent(Event.SaltyChat_EstablishCall, caller.Handle, JsonConvert.SerializeObject(caller.Character.Position));
- }
- private void EndCall(int callerNetId, int partnerNetId)
- {
- Player caller = this.Players[callerNetId];
- Player callPartner = this.Players[partnerNetId];
- caller.TriggerEvent(Event.SaltyChat_EndCall, callPartner.Handle);
- callPartner.TriggerEvent(Event.SaltyChat_EndCall, caller.Handle);
- }
- #endregion
- #region Exports (Radio)
- private void SetPlayerRadioSpeaker(int netId, bool toggle)
- {
- Player player = this.Players[netId];
- if (!this._voiceClients.TryGetValue(player, out VoiceClient voiceClient))
- return;
- this.SetRadioSpeaker(voiceClient, toggle);
- }
- private void SetPlayerRadioChannel(int netId, string radioChannelName, bool isPrimary)
- {
- Player player = this.Players[netId];
- if (!this._voiceClients.TryGetValue(player, out VoiceClient voiceClient))
- return;
- this.JoinRadioChannel(voiceClient, radioChannelName, isPrimary);
- }
- private void RemovePlayerRadioChannel(int netId, string radioChannelName)
- {
- Player player = this.Players[netId];
- if (!this._voiceClients.TryGetValue(player, out VoiceClient voiceClient))
- return;
- this.LeaveRadioChannel(voiceClient, radioChannelName);
- }
- private void SetRadioTowers(dynamic towers)
- {
- List<Vector3> towerPositions = new List<Vector3>();
- foreach (dynamic tower in towers)
- {
- towerPositions.Add(new Vector3(tower[0], tower[1], tower[2]));
- }
- this.RadioTowers = towerPositions.ToArray();
- BaseScript.TriggerClientEvent(Event.SaltyChat_UpdateRadioTowers, this.RadioTowers);
- }
- #endregion
- #region Remote Events (Salty Chat)
- [EventHandler(Event.SaltyChat_Initialize)]
- private void OnInitialize([FromSource] Player player)
- {
- if (!this.Enabled)
- return;
- VoiceClient voiceClient;
- lock (this._voiceClients)
- {
- voiceClient = new VoiceClient(player, this.GetTeamSpeakName(player), SharedData.VoiceRanges[1], true);
- if (this._voiceClients.ContainsKey(player))
- this._voiceClients[player] = voiceClient;
- else
- this._voiceClients.Add(player, voiceClient);
- }
- player.TriggerEvent(Event.SaltyChat_Initialize, voiceClient.TeamSpeakName, this.RadioTowers);
- Vector3 voiceClientPosition = voiceClient.Player.Character != null ? voiceClient.Player.Character.Position : new Vector3(0.0f, 0.0f, 0.0f);
- string clientJson = JsonConvert.SerializeObject(new SaltyShared.VoiceClient(voiceClient.Player.GetServerId(), voiceClient.TeamSpeakName, voiceClient.VoiceRange, true, new Position(voiceClientPosition.X, voiceClientPosition.Y, voiceClientPosition.Z)));
- List<SaltyShared.VoiceClient> voiceClients = new List<SaltyShared.VoiceClient>();
- foreach (VoiceClient client in this.VoiceClients.Where(c => c.Player != player))
- {
- Vector3 clientPosition = client.Player.Character != null ? client.Player.Character.Position : new Vector3(0.0f, 0.0f, 0.0f);
- voiceClients.Add(new SaltyShared.VoiceClient(client.Player.GetServerId(), client.TeamSpeakName, client.VoiceRange, client.IsAlive, new Position(clientPosition.X, clientPosition.Y, clientPosition.Z)));
- client.Player.TriggerEvent(Event.SaltyChat_UpdateClient, clientJson);
- }
- player.TriggerEvent(Event.SaltyChat_SyncClients, JsonConvert.SerializeObject(voiceClients));
- }
- [EventHandler(Event.SaltyChat_CheckVersion)]
- private void OnCheckVersion([FromSource] Player player, string version)
- {
- if (!this._voiceClients.TryGetValue(player, out VoiceClient client))
- return;
- if (!this.IsVersionAccepted(version))
- {
- player.Drop($"[Salty Chat] Benötigte Version von SaltyChat: {this.MinimumPluginVersion}");
- return;
- }
- }
- #endregion
- #region Commands (Radio)
- #if DEBUG
- [Command("speaker")]
- private void OnSetRadioSpeaker(Player player, string[] args)
- {
- if (args.Length < 1)
- {
- player.SendChatMessage("Usage", "/speaker {true/false}");
- return;
- }
- if (!this._voiceClients.TryGetValue(player, out VoiceClient voiceClient))
- return;
- bool toggle = String.Equals(args[0], "true", StringComparison.OrdinalIgnoreCase);
- this.SetRadioSpeaker(voiceClient, toggle);
- player.SendChatMessage("Speaker", $"The speaker is now {(toggle ? "on" : "off")}.");
- }
- [Command("joinradio")]
- private void OnJoinRadioChannel(Player player, string[] args)
- {
- if (args.Length < 1)
- {
- player.SendChatMessage("Usage", "/joinradio {radioChannelName}");
- return;
- }
- if (!this._voiceClients.TryGetValue(player, out VoiceClient voiceClient))
- return;
- this.JoinRadioChannel(voiceClient, args[0], true);
- player.SendChatMessage("Radio", $"You joined channel \"{args[0]}\".");
- }
- [Command("joinsecradio")]
- private void OnJoinSecondaryRadioChannel(Player player, string[] args)
- {
- if (args.Length < 1)
- {
- player.SendChatMessage("Usage", "/joinsecradio {radioChannelName}");
- return;
- }
- if (!this._voiceClients.TryGetValue(player, out VoiceClient voiceClient))
- return;
- this.JoinRadioChannel(voiceClient, args[0], false);
- player.SendChatMessage("Radio", $"You joined secondary channel \"{args[0]}\".");
- }
- [Command("leaveradio")]
- private void OnLeaveRadioChannel(Player player, string[] args)
- {
- if (args.Length < 1)
- {
- player.SendChatMessage("Usage", "/leaveradio {radioChannelName}");
- return;
- }
- if (!this._voiceClients.TryGetValue(player, out VoiceClient voiceClient))
- return;
- this.LeaveRadioChannel(voiceClient, args[0]);
- player.SendChatMessage("Radio", $"You left channel \"{args[0]}\".");
- }
- #endif
- #endregion
- #region Remote Events (Radio)
- [EventHandler(Event.SaltyChat_IsSending)]
- private void OnSendingOnRadio([FromSource] Player player, string radioChannelName, bool isSending)
- {
- if (!this._voiceClients.TryGetValue(player, out VoiceClient voiceClient))
- return;
- RadioChannel radioChannel = this.GetRadioChannel(radioChannelName, false);
- if (radioChannel == null || !radioChannel.IsMember(voiceClient))
- return;
- radioChannel.Send(voiceClient, isSending);
- }
- [EventHandler(Event.SaltyChat_SetRadioChannel)]
- private void OnJoinRadioChannel([FromSource] Player player, string radioChannelName, bool isPrimary)
- {
- if (!this._voiceClients.TryGetValue(player, out VoiceClient voiceClient))
- return;
- this.LeaveRadioChannel(voiceClient, isPrimary);
- if (!String.IsNullOrEmpty(radioChannelName))
- {
- this.JoinRadioChannel(voiceClient, radioChannelName, isPrimary);
- }
- }
- #endregion
- #region Remote Events(Megaphoone)
- [EventHandler(Event.SaltyChat_IsUsingMegaphone)]
- private void OnIsUsingMegaphone([FromSource] Player player, bool isSending)
- {
- if (!this._voiceClients.TryGetValue(player, out VoiceClient voiceClient))
- return;
- string positionJson = JsonConvert.SerializeObject(voiceClient.Player.Character.Position);
- float range = 100f;
- foreach (VoiceClient remoteClient in this.VoiceClients)
- {
- remoteClient.Player.TriggerEvent(Event.SaltyChat_IsUsingMegaphone, voiceClient.Player.Handle, range, isSending, positionJson);
- }
- }
- #endregion
- #region Methods (Radio)
- public RadioChannel GetRadioChannel(string name, bool create)
- {
- RadioChannel radioChannel;
- lock (this._radioChannels)
- {
- radioChannel = this.RadioChannels.FirstOrDefault(r => r.Name == name);
- if (radioChannel == null && create)
- {
- radioChannel = new RadioChannel(name);
- this._radioChannels.Add(radioChannel);
- }
- }
- return radioChannel;
- }
- public IEnumerable<RadioChannelMember> GetPlayerRadioChannelMembership(VoiceClient voiceClient)
- {
- foreach (RadioChannel radioChannel in this.RadioChannels)
- {
- RadioChannelMember membership = radioChannel.Members.FirstOrDefault(m => m.VoiceClient == voiceClient);
- if (membership != null)
- {
- yield return membership;
- }
- }
- }
- public void SetRadioSpeaker(VoiceClient voiceClient, bool toggle)
- {
- voiceClient.RadioSpeaker = toggle;
- }
- public void JoinRadioChannel(VoiceClient voiceClient, string radioChannelName, bool isPrimary)
- {
- foreach (RadioChannel channel in this.RadioChannels)
- {
- if (channel.Members.Any(v => v.VoiceClient == voiceClient && v.IsPrimary == isPrimary))
- return;
- }
- RadioChannel radioChannel = this.GetRadioChannel(radioChannelName, true);
- radioChannel.AddMember(voiceClient, isPrimary);
- }
- public void LeaveRadioChannel(VoiceClient voiceClient)
- {
- foreach (RadioChannelMember membership in this.GetPlayerRadioChannelMembership(voiceClient))
- {
- membership.RadioChannel.RemoveMember(voiceClient);
- if (membership.RadioChannel.Members.Length == 0)
- {
- lock (this._radioChannels)
- {
- this._radioChannels.Remove(membership.RadioChannel);
- }
- }
- }
- }
- public void LeaveRadioChannel(VoiceClient voiceClient, string radioChannelName)
- {
- foreach (RadioChannelMember membership in this.GetPlayerRadioChannelMembership(voiceClient).Where(m => m.RadioChannel.Name == radioChannelName))
- {
- membership.RadioChannel.RemoveMember(voiceClient);
- if (membership.RadioChannel.Members.Length == 0)
- {
- lock (this._radioChannels)
- {
- this._radioChannels.Remove(membership.RadioChannel);
- }
- }
- }
- }
- public void LeaveRadioChannel(VoiceClient voiceClient, bool primary)
- {
- foreach (RadioChannelMember membership in this.GetPlayerRadioChannelMembership(voiceClient).Where(m => m.IsPrimary == primary))
- {
- membership.RadioChannel.RemoveMember(voiceClient);
- if (membership.RadioChannel.Members.Length == 0)
- {
- lock (this._radioChannels)
- {
- this._radioChannels.Remove(membership.RadioChannel);
- }
- }
- }
- }
- #endregion
- #region Methods (Misc)
- public string GetTeamSpeakName(Player player)
- {
- string name;
- do
- {
- name = $"[{player.Handle.PadLeft(3, '0')}] Saphir-Life";
- if (name.Length > 30)
- {
- name = name.Remove(29, name.Length - 30);
- }
- }
- while (this._voiceClients.Values.Any(c => c.TeamSpeakName == name));
- return name;
- }
- public bool IsVersionAccepted(string version)
- {
- if (!String.IsNullOrWhiteSpace(this.MinimumPluginVersion))
- {
- try
- {
- string[] minimumVersionArray = this.MinimumPluginVersion.Split('.');
- string[] versionArray = version.Split('.');
- int lengthCounter = 0;
- if (versionArray.Length >= minimumVersionArray.Length)
- {
- lengthCounter = minimumVersionArray.Length;
- }
- else
- {
- lengthCounter = versionArray.Length;
- }
- for (int i = 0; i < lengthCounter; i++)
- {
- int min = Convert.ToInt32(minimumVersionArray[i]);
- int cur = Convert.ToInt32(versionArray[i]);
- if (cur > min)
- {
- return true;
- }
- else if (min > cur)
- {
- return false;
- }
- }
- }
- catch
- {
- return false;
- }
- }
- return true;
- }
- #endregion
- }
- }
- fx_version 'adamant'
- game 'gta5'
- ui_page 'NUI/SaltyWebSocket.html'
- client_scripts {
- 'SaltyClient/bin/Debug/SaltyClient.net.dll'
- }
- server_scripts {
- 'SaltyServer/bin/Debug/netstandard2.0/SaltyServer.net.dll'
- }
- files {
- 'NUI/SaltyWebSocket.html',
- 'Newtonsoft.Json.dll',
- }
- exports {
- 'SetPlayerAlive',
- 'EstablishCall',
- 'EndCall',
- 'SetPlayerRadioSpeaker',
- 'SetPlayerRadioChannel',
- 'RemovePlayerRadioChannel',
- 'SetRadioTowers'
- }
- VoiceEnabled 'true'
- ServerUniqueIdentifier '-'
- RequiredUpdateBranch 'Stable'
- MinimumPluginVersion '1.3.3'
- SoundPack 'default'
- IngameChannelId '-'
- IngameChannelPassword '-'
- SwissChannelIds '88678, 88868, 88869, 88867, 88871, 88682, 88873, 88874, 88852, 88863, 88858, 88876, 88857, 88877, 88753, 88879, 88848, 88849, 88850, 88851, 88853, 88679, 88680, 88681, 88840, 88841, 88842, 88843, 88900, 88901, 88902, 88903, 88904, 88905, 88906, 88907, 88908, 88909, 88910, 88911, 88912, 88884, 88882, 88883, 88899, 88885, 88844'
https://github.com/saltminede/saltychat-fivem
Fehlermeldung: https://gyazo.com/09914e246b69ce1dfe2cba5ece091d32
Ich bedanke mich für jede Hilfe!
Ich sitze seit Tagen dran, leider ohne Erfolg!
Liebe Grüße