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)); }
void IStateRestorable.RestoreState(StatePayload payload) { if (payload.StateData == null) { this.State = this.PrepareState(); return; } this.State = payload.StateData.ToObject <TState>(); }
/// <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); }
bool IStateRestorable.VerifyState(StatePayload payload) { return(JToken.DeepEquals(payload.StateData, JObject.FromObject(this.State))); }