예제 #1
0
 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;
 }
예제 #2
0
        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);
                            }
                        }

                    }
                }

            }
        }