Ejemplo n.º 1
0
        void IStateRestorable.RestoreState(StatePayload payload)
        {
            if (payload.StateData == null)
            {
                this.ClearState();
                this.State = this.PrepareState();
                this.OnStateRestored();
                return;
            }

            if (this.State == null)
            {
                this.State = this.PrepareState();
            }

            if (this.State is IPersistentState persistentState)
            {
                persistentState.SetState(payload.StateData);
            }
            else
            {
                this.State = payload.StateData.ToObject <TState>();
            }

            this.OnStateRestored();
        }
        bool IStateRestorable.VerifyState(StatePayload payload)
        {
            var localStateData = this.State is IPersistentState persistentState
                ? persistentState.GetState()
                : JObject.FromObject(this.State);

            return(JToken.DeepEquals(payload.StateData, localStateData));
        }
Ejemplo n.º 3
0
        void IStateRestorable.RestoreState(StatePayload payload)
        {
            if (payload.StateData == null)
            {
                this.State = this.PrepareState();
                return;
            }

            this.State = payload.StateData.ToObject <TState>();
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Sync quest state with the store (singleplayer or mainplayer)
        /// or with host (server) via network in multiplayer game.
        ///
        /// CALL THIS METHOD EVER WHEN YOU CHANGED QUEST STATE!
        /// </summary>
        public void Sync()
        {
            var payload = new StatePayload(
                questName: this.GetFullName(),
                farmerId: Game1.player.UniqueMultiplayerID,
                stateData: JObject.FromObject(this.State)
                );

            if (!Context.IsMainPlayer)
            {
                Helper.Multiplayer.SendMessage(
                    payload, "SyncState", new[] { QuestFrameworkMod.Instance.ModManifest.UniqueID });
                Monitor.Log($"Payload `{payload.QuestName}/{payload.FarmerId}` type `{payload.StateData.Type}` sent to sync to host.");
            }

            QuestFrameworkMod.Instance.QuestStateStore.Commit(payload);
        }
Ejemplo n.º 5
0
 bool IStateRestorable.VerifyState(StatePayload payload)
 {
     return(JToken.DeepEquals(payload.StateData, JObject.FromObject(this.State)));
 }