#I need a help with fake role sync
1 messages · Page 1 of 1 (latest)
namespace SCP457LabApi
{
public class FakeRoleSync : CustomEventsHandler
{
private static Dictionary<uint, RoleTypeId> FakeSyncedPlayers = new Dictionary<uint, RoleTypeId> { };
public void AddFakeSyncedPlayer(Player player, RoleTypeId role)
{
FakeSyncedPlayers[player.NetworkId] = role;
foreach (var receiver in Player.ReadyList)
{
NetworkWriter writer = new NetworkWriter();
if (receiver == Player.Host || receiver == player) continue;
receiver.Connection.Send(new RoleSyncInfo(player.ReferenceHub, RoleTypeId.Scp106, receiver.ReferenceHub,writer));
}
}
public void RemoveFakeSyncedPlayer(Player player)
{
foreach (var receiver in Player.ReadyList)
{
NetworkWriter writer = new NetworkWriter();
if (receiver == Player.Host || receiver == player) continue;
receiver.Connection.Send(new RoleSyncInfo(player.ReferenceHub, player.Role, receiver.ReferenceHub,writer));
}
FakeSyncedPlayers.Remove(player.NetworkId );
}
public override void OnServerWaitingForPlayers()
{
FpcServerPositionDistributor.RoleSyncEvent += RoleSyncEvent;
}
public override void OnServerRoundRestarted()
{
FpcServerPositionDistributor.RoleSyncEvent -= RoleSyncEvent;
}
public static RoleTypeId RoleSyncEvent(ReferenceHub target, ReferenceHub receiver, RoleTypeId role, NetworkWriter writer)
{
if (FakeSyncedPlayers.TryGetValue(target.characterClassManager.netId, out var fakeRole))
return fakeRole;
return role;
}
}
}
Can you elaborate a bit on the circumstances? I'm a little confused what the problem is
And there is the problem i dont get it too simply after AddFakedSyncedPlayer random players (not only the one who are fake synced) have bug that they are unable to reload a gun
For some reason
You shouldn't send a RoleSyncInfoPack
Rather, subscribe to FpcServerPositionDistributor.RoleSyncEvent, return the fake role if the player matches a custom role, otherwise, return the role given by the event
u mean something like that?
namespace SCP457LabApi
{
public class FakeRoleSync : CustomEventsHandler
{
private static readonly Dictionary<uint, RoleTypeId> FakeSyncedPlayers = new Dictionary<uint, RoleTypeId>();
public void AddFakeSyncedPlayer(Player player, RoleTypeId role)
{
FakeSyncedPlayers[player.NetworkId] = role;
}
public void RemoveFakeSyncedPlayer(Player player)
{
FakeSyncedPlayers.Remove(player.NetworkId);
}
public override void OnServerWaitingForPlayers()
{
FpcServerPositionDistributor.RoleSyncEvent += RoleSyncEvent;
}
public override void OnServerRoundRestarted()
{
FpcServerPositionDistributor.RoleSyncEvent -= RoleSyncEvent;
FakeSyncedPlayers.Clear();
}
private static RoleTypeId RoleSyncEvent(ReferenceHub target, ReferenceHub receiver, RoleTypeId role, NetworkWriter writer)
{
if (FakeSyncedPlayers.TryGetValue(target.characterClassManager.netId, out var fakeRole))
return fakeRole;
return role;
}
}
}
Yep that should be good
almost i only see that if person with this fake role sync gets role change from admin panel there is like huge bug that disconnect players but i think i will be able to fix this
RemoveFakeSyncedPlayer in OnPlayerChangingRole
Boom
Yeah