private static ReferenceHub EnsureProxy(string spoofedName)
{
if (_radioProxy != null && _radioProxy)
return _radioProxy;
if (_proxySpawning)
return _radioProxy;
_proxySpawning = true;
try
{
var dummy = DummyUtils.SpawnDummy(spoofedName);
_radioProxy = dummy;
dummy.transform.position = new Vector3(40f, 315f, -32f);
var roleManager = dummy.roleManager;
roleManager.ServerSetRole(RoleTypeId.Tutorial, RoleChangeReason.None, RoleSpawnFlags.None);
var p = Player.Get(dummy);
if (p != null)
p.IsSpectatable = false;
p.UserGroup = null;
LabApi.Features.Console.Logger.Info("Configured 079 radio proxy.");
if (dummy.nicknameSync != null)
dummy.nicknameSync.Network_myNickSync = spoofedName;
}
catch (Exception ex)
{
LabApi.Features.Console.Logger.Error($"Failed to spawn/configure 079 radio proxy: {ex}");
}
finally
{
_proxySpawning = false;
}
return _radioProxy;
}
And they I use it like this:
...
var speakerProxy = EnsureProxy(ev.Player.Nickname);
...
var radioMessage = new VoiceMessage(speakerProxy, channel, ev.Message.Data, ev.Message.DataLength, false);
player.Connection.Send(radioMessage, 0);