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) : base(occupants.Select(x => x.PlayerId).ToArray()) { } public override void OnReceiveRemote() { var serverOccupants = Data.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); } } }