private static WorkshopStash GetCurrentSettlementStash() { var town = Settlement.CurrentSettlement.GetComponent<Town>(); bool didWeFindIt = CampaignChanger.Current.QuickAccess.TryGetValue(town, out var stash); if (!didWeFindIt) { stash = new WorkshopStash(); stash.Town = town; CampaignChanger.Current.QuickAccess.Add(town, stash); } return stash; }
public override void SyncData(IDataStore dataStore) { Dictionary<string, (bool, bool, string)> workshopStashSaveDictionaryString = new Dictionary<string, (bool, bool, string)>(); Dictionary<string, int> temp; if (dataStore.IsSaving) { foreach (Settlement town in Campaign.Current.Settlements) { if (town.IsTown) { bool registered = _workshopStashSaveDictionary.TryGetValue(town.Town, out WorkshopStash stash); if (registered) { temp = new Dictionary<string, int>(); for (int i = 0; i < stash.Stash.Count; i++) { try { temp.Add(stash.Stash.GetItemAtIndex(i).ToString(), stash.Stash.GetElementNumber(i)); } catch(ArgumentException e) { int ammount = temp[stash.Stash.GetItemAtIndex(i).ToString()]; temp.Remove(stash.Stash.GetItemAtIndex(i).ToString()); temp.Add(stash.Stash.GetItemAtIndex(i).ToString(), stash.Stash.GetElementNumber(i)+ammount); } } string jsonList = JsonConvert.SerializeObject(temp); workshopStashSaveDictionaryString.Add(town.Town.ToString(), (stash.InputTrue, stash.OutputTrue, jsonList)); } } } string jsonString = JsonConvert.SerializeObject(workshopStashSaveDictionaryString); dataStore.SyncData("workshopStashSaveDictionaryString", ref jsonString); jsonString = JsonConvert.SerializeObject(SubModule.modVersion); dataStore.SyncData("modVersionWorkshopStashRON", ref jsonString); } if (dataStore.IsLoading) { string jsonString = ""; if (dataStore.SyncData("modVersionWorkshopStashRON", ref jsonString) && !string.IsNullOrEmpty(jsonString)) { SubModule.modVersion = JsonConvert.DeserializeObject<float?>(jsonString); } if (!SubModule.modVersion.HasValue) { dataStore.SyncData("workshopStashSaveDictionary", ref _workshopStashSaveDictionary); SubModule.modVersion = 1.1f; } else if(SubModule.modVersion == 1.1f) { if (dataStore.SyncData("workshopStashSaveDictionaryString", ref jsonString) && !string.IsNullOrEmpty(jsonString)) { workshopStashSaveDictionaryString = JsonConvert.DeserializeObject<Dictionary<string, (bool, bool, string)>>(jsonString); foreach(Town town in Town.AllTowns) { bool registered = workshopStashSaveDictionaryString.TryGetValue(town.ToString(), out (bool, bool, string) value); if (registered) { temp = JsonConvert.DeserializeObject<Dictionary<string, int>>(value.Item3); WorkshopStash tempWorkshopStash = new WorkshopStash(); tempWorkshopStash.InputTrue = value.Item1; tempWorkshopStash.OutputTrue = value.Item2; tempWorkshopStash.Town = town; foreach(ItemObject item in Campaign.Current.Items) { bool registeredItem = temp.TryGetValue(item.ToString(), out int num); if (registeredItem) { tempWorkshopStash.Stash.AddToCounts(item, num); } } _workshopStashSaveDictionary.Add(town, tempWorkshopStash); } } } } } }