using QSB.Messaging; using QSB.Player; using QSB.TriggerSync.WorldObjects; using System.Collections.Generic; using System.Linq; namespace QSB.TriggerSync.Messages; /// /// always sent by host /// public class TriggerInitialStateMessage : QSBWorldObjectMessage { public TriggerInitialStateMessage(IEnumerable occupants) => Value = occupants.Select(x => x.PlayerId).ToArray(); public override void OnReceiveRemote() { var serverOccupants = Value.Select(QSBPlayerManager.GetPlayer).ToList(); foreach (var added in serverOccupants.Except(WorldObject.Occupants)) { WorldObject.Enter(added); } foreach (var removed in WorldObject.Occupants.Except(serverOccupants)) { WorldObject.Exit(removed); } } }