public void processSaveData(string savetext)
        {
            //get campaign info
            string strCampaignEnd   = "/Game/Campaign_Main/Quest_Campaign_Main.Quest_Campaign_Main_C";
            string strCampaignStart = "/Game/Campaign_Main/Quest_Campaign_City.Quest_Campaign_City";
            int    campaignEnd      = savetext.IndexOf(strCampaignEnd);
            int    campaignStart    = savetext.IndexOf(strCampaignStart);

            if (campaignStart != -1 && campaignEnd != -1)
            {
                string campaigntext = savetext.Substring(0, campaignEnd);
                campaignStart = campaigntext.LastIndexOf(strCampaignStart);
                campaigntext  = campaigntext.Substring(campaignStart);
                RemnantWorldEvent.ProcessEvents(this, campaigntext, RemnantWorldEvent.ProcessMode.Campaign);
            }
            else
            {
                strCampaignEnd   = "/Game/Campaign_Clementine/Quest_Campaign_Clementine.Quest_Campaign_Clementine_C";
                strCampaignStart = "/Game/World_Rural/Templates/Template_Rural_Overworld_0";
                campaignEnd      = savetext.IndexOf(strCampaignEnd);
                campaignStart    = savetext.IndexOf(strCampaignStart);
                if (campaignStart != -1 && campaignEnd != -1)
                {
                    string campaigntext = savetext.Substring(0, campaignEnd);
                    campaignStart = campaigntext.LastIndexOf(strCampaignStart);
                    campaigntext  = campaigntext.Substring(campaignStart);
                    RemnantWorldEvent.ProcessEvents(this, campaigntext, RemnantWorldEvent.ProcessMode.Subject2923);
                }
                else
                {
                    Console.WriteLine("Campaign not found; likely in tutorial mission.");
                }
            }

            //get adventure info
            if (savetext.Contains("Quest_AdventureMode_"))
            {
                string adventureZone = null;
                if (savetext.Contains("Quest_AdventureMode_City_C"))
                {
                    adventureZone = "City";
                }
                if (savetext.Contains("Quest_AdventureMode_Wasteland_C"))
                {
                    adventureZone = "Wasteland";
                }
                if (savetext.Contains("Quest_AdventureMode_Swamp_C"))
                {
                    adventureZone = "Swamp";
                }
                if (savetext.Contains("Quest_AdventureMode_Jungle_C"))
                {
                    adventureZone = "Jungle";
                }
                if (savetext.Contains("Quest_AdventureMode_Snow_C"))
                {
                    adventureZone = "Snow";
                }

                string strAdventureEnd   = String.Format("/Game/World_{0}/Quests/Quest_AdventureMode/Quest_AdventureMode_{0}.Quest_AdventureMode_{0}_C", adventureZone);
                int    adventureEnd      = savetext.IndexOf(strAdventureEnd) + strAdventureEnd.Length;
                string advtext           = savetext.Substring(0, adventureEnd);
                string strAdventureStart = String.Format("/Game/World_{0}/Quests/Quest_AdventureMode/Quest_AdventureMode_{0}_0", adventureZone);
                int    adventureStart    = advtext.LastIndexOf(strAdventureStart) + strAdventureStart.Length;
                advtext = advtext.Substring(adventureStart);
                RemnantWorldEvent.ProcessEvents(this, advtext, RemnantWorldEvent.ProcessMode.Adventure);
            }

            missingItems.Clear();
            foreach (RemnantItem[] eventItems in GameInfo.EventItem.Values)
            {
                foreach (RemnantItem item in eventItems)
                {
                    if (!this.Inventory.Contains(item.GetKey()))
                    {
                        if (!missingItems.Contains(item))
                        {
                            missingItems.Add(item);
                        }
                    }
                }
            }
            missingItems.Sort();
        }
        public void processSaveData(string savetext)
        {
            //get campaign info
            string campaigntext = savetext.Split(new string[] { "/Game/Campaign_Main/Quest_Campaign_Ward13.Quest_Campaign_Ward13" }, StringSplitOptions.None)[0];

            string[] campaign = campaigntext.Split(new string[] { "/Game/Campaign_Main/Quest_Campaign_City.Quest_Campaign_City" }, StringSplitOptions.None);
            if (campaign.Length > 1)
            {
                campaigntext = campaign[1];
                RemnantWorldEvent.ProcessEvents(this, campaigntext, RemnantWorldEvent.ProcessMode.Campaign);
            }
            else
            {
                Console.WriteLine("Campaign not found; likely in tutorial mission.");
            }

            //get adventure info
            if (savetext.Contains("Quest_AdventureMode_"))
            {
                string adventureZone = null;
                if (savetext.Contains("Quest_AdventureMode_City_C"))
                {
                    adventureZone = "City";
                }
                if (savetext.Contains("Quest_AdventureMode_Wasteland_C"))
                {
                    adventureZone = "Wasteland";
                }
                if (savetext.Contains("Quest_AdventureMode_Swamp_C"))
                {
                    adventureZone = "Swamp";
                }
                if (savetext.Contains("Quest_AdventureMode_Jungle_C"))
                {
                    adventureZone = "Jungle";
                }

                string strAdventureEnd   = String.Format("/Game/World_{0}/Quests/Quest_AdventureMode/Quest_AdventureMode_{0}.Quest_AdventureMode_{0}_C", adventureZone);
                int    adventureEnd      = savetext.IndexOf(strAdventureEnd) + strAdventureEnd.Length;
                string advtext           = savetext.Substring(0, adventureEnd);
                string strAdventureStart = String.Format("/Game/World_{0}/Quests/Quest_AdventureMode/Quest_AdventureMode_{0}_0", adventureZone);
                int    adventureStart    = advtext.LastIndexOf(strAdventureStart) + strAdventureStart.Length;
                //advtext = advtext.Substring(advtext.LastIndexOf("Quest_Campaign_Main_C"));
                advtext = advtext.Substring(adventureStart);
                RemnantWorldEvent.ProcessEvents(this, advtext, RemnantWorldEvent.ProcessMode.Adventure);
            }

            missingItems.Clear();
            foreach (RemnantItem[] eventItems in GameInfo.EventItem.Values)
            {
                foreach (RemnantItem item in eventItems)
                {
                    if (!this.Inventory.Contains(item.GetKey()))
                    {
                        if (!missingItems.Contains(item))
                        {
                            missingItems.Add(item);
                        }
                    }
                }
            }
            missingItems.Sort();
        }