Exemplo n.º 1
0
        public void SetMoney(uint money)
        {
            this.Money = money;

            SetAccepted(false);
            TraderData.SetAccepted(false);

            Trader.SendUpdateTrade(true);
            Player.SendUpdateTrade(false);
        }
Exemplo n.º 2
0
        public void SetItem(uint slot, Item item)
        {
            if (items[slot] == item.Guid)
            {
                return;
            }

            Player.QueryItemCheck(item.Entry);
            Trader.QueryItemCheck(item.Entry);
            items[slot] = item.Guid;

            SetAccepted(false);
            TraderData.SetAccepted(false);

            Trader.SendUpdateTrade(true);
            Player.SendUpdateTrade(false);
        }
Exemplo n.º 3
0
    //LOAD GAME FROM SAVE FILE
    public static bool load(LocationsMap locationsMap, UIManager uIManager)
    {
        if (!Directory.Exists("Gamesave/"))
        {
            return(false);
        }
        getObjectsFromResources();
        string JsonGameState       = "";
        string JsonStringLocations = "";

        using (StreamReader reader = new StreamReader("Gamesave/save.json"))
        {
            JsonGameState       = reader.ReadLine();
            JsonStringLocations = reader.ReadLine();
        }

        GameStateData gameStateData = JsonUtility.FromJson <GameStateData>(JsonGameState);
        Locations     locations     = JsonUtility.FromJson <Locations>(JsonStringLocations);

        //Set GameState values from data
        GameState.finishedTutorial = gameStateData.finishedTutorial;

        foreach (ItemData id in gameStateData.questItemsCollected)
        {
            GameState.addToQuestItems((QuestItem)itemListFromResources[id.name]);
        }

        //CREATE PLAYER FROM SAVE DATA
        Player _player = new Player();

        _player.health    = gameStateData.player.health;
        _player.maxHealth = gameStateData.player.maxHealth;
        _player.gold      = gameStateData.player.gold;

        if (gameStateData.player.weapon != string.Empty && gameStateData.player.weapon != "")
        {
            _player.weapon = (Weapon)itemListFromResources[gameStateData.player.weapon];
        }
        if (gameStateData.player.weapon != string.Empty && gameStateData.player.shield != "")
        {
            _player.shield = (Shield)itemListFromResources[gameStateData.player.shield];
        }

        foreach (ItemData id in gameStateData.player.inventory)
        {
            _player.giveItem(itemListFromResources[id.name]);
        }

        GameState.player = _player;

        //EDIT EXISTING LOCATIONS WITH SAVE DATA

        foreach (LocationData ld in locations.locations)
        {
            Location l = locationsMap.getLocation(ld.locationName);

            l.playerVisited = true;

            List <ItemOBJ> itemObjs = new List <ItemOBJ>();

            l.clearInventory();

            foreach (ItemOBJ io in l.items)
            {
                GameObject.Destroy(io.gameObject);
            }

            l.items.Clear();
            l.items.TrimExcess();

            foreach (ItemData id in ld.items)
            {
                ItemOBJ io = GameObject.Instantiate <ItemOBJ>(itemObjListFromResources[id.name], new Vector3(id.position[0], id.position[1], id.position[2]), Quaternion.identity, l.transform);

                io.item = itemListFromResources[id.name];


                itemObjs.Add(io);
            }

            l.items = itemObjs;

            List <EnemyOBJ> enemyObjs = new List <EnemyOBJ>();


            foreach (EnemyOBJ enemyOBJ in l.enemies)
            {
                GameObject.Destroy(enemyOBJ.gameObject);
            }

            l.enemies = null;

            foreach (EnemyData ed in ld.enemies)
            {
                EnemyOBJ eo = GameObject.Instantiate <EnemyOBJ>(enemyObjListFromResources[ed.name.Split(' ')[0]], new Vector3(ed.position[0], ed.position[1], ed.position[2]), Quaternion.identity, l.transform);

                eo.name      = ed.name;
                eo.maxHealth = ed.maxHealth;
                if (ed.weapon != string.Empty && ed.weapon != "")
                {
                    eo.weapon = (Weapon)itemListFromResources[ed.weapon];
                }
                if (ed.shield != string.Empty && ed.weapon != "")
                {
                    eo.shield = (Shield)itemListFromResources[ed.shield];
                }

                eo.sprite = characterSprites.GetSprite(ed.sprite);

                enemyObjs.Add(eo);
            }

            l.enemies = enemyObjs.ToArray();


            if (l.trader != null)
            {
                GameObject.Destroy(l.trader.gameObject);
                l.trader = null;

                TraderData td = ld.trader;

                TraderOBJ to = GameObject.Instantiate <TraderOBJ>(traderObjListFromResources[td.name.Split(' ')[0]], new Vector3(td.position[0], td.position[1], td.position[2]), Quaternion.identity, l.transform);
                to.name      = td.name;
                to.maxHealth = td.maxHealth;

                if (td.weapon != string.Empty && td.weapon != "")
                {
                    to.weapon = (Weapon)itemListFromResources[td.weapon];
                }

                to.sprite = characterSprites.GetSprite(td.sprite);

                to.trader.gold = td.gold;

                foreach (ItemData id in td.stock)
                {
                    to.stock.Add(itemListFromResources[id.name]);
                }

                l.trader = to;
            }
            l.makeLocation(true, true);
            l.checkAllDead();
        }
        //Update Scene
        locationsMap.moveFromLoad(gameStateData.currentLocation);

        GameState.currentLocation = locationsMap.getLocation();

        //Update player UI
        uIManager.updatePlayerHealth(_player);

        uIManager.clearInventory();


        foreach (Item item in _player.getInventoryItems())
        {
            uIManager.addToPlayerInventory(item);
        }

        if (_player.weapon != null)
        {
            uIManager.addToEquiped(_player.weapon);
        }
        if (_player.shield != null)
        {
            uIManager.addToEquiped(_player.shield);
        }

        foreach (QuestItem qi in GameState.questItemsCollected)
        {
            uIManager.UpdateObjectiveText(qi);
        }

        uIManager.updateGold();
        uIManager.UpdateMinimap(GameState.currentLocation.name);

        return(true);
    }
Exemplo n.º 4
0
    //SAVE GAME TO JSON IN TXT FILE
    public static void save(LocationsMap locationsMap)
    {
        //GameState data
        GameStateData gameStateData = new GameStateData();

        gameStateData.finishedTutorial = GameState.finishedTutorial;

        List <ItemData> idl = new List <ItemData>();

        foreach (Item qi in GameState.questItemsCollected)
        {
            ItemData id = new ItemData();
            id.name     = qi.name;
            id.position = new float[] { 0, 0, 0 };
        }

        gameStateData.questItemsCollected = idl.ToArray();

        Player _player = GameState.player;

        //PLAYER DATA
        PlayerData playerData = new PlayerData();

        playerData.health    = _player.health;
        playerData.maxHealth = _player.maxHealth;
        if (_player.weapon != null)
        {
            playerData.weapon = _player.weapon.name;
        }
        if (_player.shield != null)
        {
            playerData.shield = _player.shield.name;
        }

        List <ItemData> ids = new List <ItemData>();

        foreach (Item s in _player.getInventoryItems())
        {
            ItemData id = new ItemData();

            id.name     = s.name;
            id.position = new float[] { 0, 0, 0 };
            ids.Add(id);
        }

        playerData.inventory = ids.ToArray();

        gameStateData.currentLocation = locationsMap.getLocationName();

        playerData.gold = _player.gold;

        gameStateData.player = playerData;

        //LOCATION DATA
        Locations locations = new Locations();

        Location[]          locationsFromMap = locationsMap.getAllLocations();
        List <LocationData> lds = new List <LocationData>();

        foreach (Location l in locationsFromMap)
        {
            if (l.playerVisited)
            {
                LocationData ld = new LocationData();
                ld.locationName = l.name;

                ids = new List <ItemData>();

                foreach (ItemOBJ s in l.getInventoryItems())
                {
                    if (s.GetComponent <SpriteRenderer>().enabled)
                    {
                        ItemData id = new ItemData();

                        id.name     = s.name;
                        id.position = new float[] { s.transform.position.x, s.transform.position.y, s.transform.position.z };
                        ids.Add(id);
                    }
                }

                ld.items = ids.ToArray();

                List <EnemyData> edList = new List <EnemyData>();

                foreach (EnemyOBJ e in l.getEnemies())
                {
                    EnemyData ed = new EnemyData();
                    ed.name      = e.name;
                    ed.maxHealth = e.maxHealth;
                    if (e.weapon != null)
                    {
                        ed.weapon = e.weapon.name;
                    }
                    if (e.shield != null)
                    {
                        ed.shield = e.shield.name;
                    }
                    ed.sprite = e.sprite.name;

                    ed.position = new float[] { e.transform.position.x, e.transform.position.y, e.transform.position.z };

                    edList.Add(ed);
                }
                ld.enemies = edList.ToArray();


                if (l.trader != null)
                {
                    TraderData td     = new TraderData();
                    TraderOBJ  trader = l.getTraderOBJ();

                    td.name      = trader.name;
                    td.maxHealth = trader.maxHealth;
                    td.weapon    = trader.weapon.name;
                    td.sprite    = trader.sprite.name;
                    td.gold      = trader.trader.gold;
                    td.position  = new float[] { trader.transform.position.x, trader.transform.position.y, trader.transform.position.z };

                    idl.Clear();

                    foreach (Item i in trader.stock)
                    {
                        ItemData id = new ItemData();
                        id.name     = i.name;
                        id.position = new float[] { 0, 0, 0 };
                        idl.Add(id);
                    }

                    td.stock = idl.ToArray();

                    ld.trader = td;
                }
                lds.Add(ld);
            }
        }
        locations.locations = lds.ToArray();

        string JsonGameState       = JsonUtility.ToJson(gameStateData);
        string JsonStringLocations = JsonUtility.ToJson(locations);

        if (!Directory.Exists("Gamesave/"))
        {
            try
            {
                Directory.CreateDirectory("Gamesave/");
            }
            catch (System.Exception e)
            {
                Debug.Log("Creation failed: " + e.ToString());
            }
        }

        using (StreamWriter writer = new StreamWriter(@"Gamesave/save.json"))
        {
            writer.WriteLine(JsonGameState);
            writer.WriteLine(JsonStringLocations);
        }
    }
Exemplo n.º 5
0
        private bool LoadTraderTemplateRules(ref List<string> input, ref TraderData traderdata, int seqnum)
        {
            try
            {
                char[] whitespace = new char[] { ':', ' ', '\t' };
                int idx = 0;
                foreach (string line in input)
                {
                    if (line.Contains(":"))
                    {
                        string[] data = line.Split(whitespace, StringSplitOptions.RemoveEmptyEntries);
                        idx = int.Parse(data[0]);
                        if (seqnum == idx)
                        {
                            traderdata.Recent = double.Parse(data[1]);
                            traderdata.MaxBidRule = double.Parse(data[2]);
                            traderdata.MaxBidParameter = double.Parse(data[3]);
                            traderdata.MinBidRule = double.Parse(data[4]);
                            traderdata.MinBidParameter = double.Parse(data[5]);
                            return true;
                        }
                    }
                 }
            }
            catch (Exception e)
            {
                DXMessageBox.Show("Error parsingPort Trader Template Rules section of JLM Simulator input file: " + Environment.NewLine + e.ToString(), "JLMS Simulator", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
                return false;
            }

            return true;
        }
Exemplo n.º 6
0
        private bool LoadTraderTemplate(ref List<string> input, ref List<string> input4traderule)
        {
            try
            {
                TraderList.Clear();
                int nLineCount = input.Count;
                char[] whitespace = new char[] { ':', ' ', '\t' };
                TraderData tempdata;
                int seqnum;
                for(int i = 0; i < nLineCount; i++)
                {
                    string line = input[i];
                    if (line.Contains(":"))
                    {
                        string[] data = line.Split(whitespace, StringSplitOptions.RemoveEmptyEntries);
                        if (data[0].ToLower() != "sell" && data[1].ToLower() == "buy")
                        {
                            seqnum = int.Parse(data[0]);
                            tempdata = new TraderData("TT" + seqnum.ToString());
                            tempdata.BuyAlpha = double.Parse(data[2]);
                            tempdata.BuyAlphaIncrement = double.Parse(data[3]);
                            tempdata.BuyBeta = double.Parse(data[4]);
                            tempdata.BuyBetaIncrement = double.Parse(data[5]);
                            tempdata.BuyReviewWaitFirst = double.Parse(data[6]);
                            tempdata.BuyReviewWaitThen = double.Parse(data[7]);
                            tempdata.BuyReviewWaitLast = double.Parse(data[8]);
                            tempdata.BuyMaxChange = double.Parse(data[9]);
                            i++;
                            line = input[i];
                            string[] dataSell = line.Split(whitespace, StringSplitOptions.RemoveEmptyEntries);
                            tempdata.SellAlpha = double.Parse(dataSell[1]);
                            tempdata.SellAlphaIncrement = double.Parse(dataSell[2]);
                            tempdata.SellBeta = double.Parse(dataSell[3]);
                            tempdata.SellBetaIncrement = double.Parse(dataSell[4]);
                            tempdata.SellReviewWaitFirst = double.Parse(dataSell[5]);
                            tempdata.SellReviewWaitThen = double.Parse(dataSell[6]);
                            tempdata.SellReviewWaitLast = double.Parse(dataSell[7]);
                            tempdata.SellMaxChange = double.Parse(dataSell[8]);

                            LoadTraderTemplateRules(ref input4traderule, ref tempdata, seqnum);
                            TraderList.Add(tempdata);
                        }
                    }
                }
                TraderList[TraderList.Count - 1].Trader = "LiqTrad";
               // OnPropertyChanged("TraderList");
            }
            catch (Exception e)
            {
                DXMessageBox.Show("Error parsingPort Trader Template section of JLM Simulator input file: " + Environment.NewLine + e.ToString(), "JLMS Simulator", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
                return false;
            }

            return true;
        }
Exemplo n.º 7
0
    public void Save(string saveGameName, string newLevelName)
    {
        CurrentSave = new SaveGame();

        //save player location
        CurrentSave.PlayerLocation    = new float[3];
        CurrentSave.PlayerLocation[0] = GameManager.Inst.PlayerControl.SelectedPC.transform.position.x;
        CurrentSave.PlayerLocation[1] = GameManager.Inst.PlayerControl.SelectedPC.transform.position.y;
        CurrentSave.PlayerLocation[2] = GameManager.Inst.PlayerControl.SelectedPC.transform.position.z;
        //save player status
        CurrentSave.PlayerStatus = GameManager.Inst.PlayerControl.SelectedPC.MyStatus.Data;
        //save player inventory
        CurrentSave.PlayerInventory              = new CharacterInventorySaveData();
        CurrentSave.PlayerInventory.ArmorSlot    = GameManager.Inst.PlayerControl.SelectedPC.Inventory.ArmorSlot;
        CurrentSave.PlayerInventory.HeadSlot     = GameManager.Inst.PlayerControl.SelectedPC.Inventory.HeadSlot;
        CurrentSave.PlayerInventory.RifleSlot    = GameManager.Inst.PlayerControl.SelectedPC.Inventory.RifleSlot;
        CurrentSave.PlayerInventory.SideArmSlot  = GameManager.Inst.PlayerControl.SelectedPC.Inventory.SideArmSlot;
        CurrentSave.PlayerInventory.ThrowSlot    = GameManager.Inst.PlayerControl.SelectedPC.Inventory.ThrowSlot;
        CurrentSave.PlayerInventory.ToolSlot     = GameManager.Inst.PlayerControl.SelectedPC.Inventory.ToolSlot;
        CurrentSave.PlayerInventory.BackpackCols = GameManager.Inst.PlayerControl.SelectedPC.Inventory.BackpackCols;
        CurrentSave.PlayerInventory.BackpackRows = GameManager.Inst.PlayerControl.SelectedPC.Inventory.BackpackRows;
        CurrentSave.PlayerInventory.Backpack     = new List <GridItemData>(GameManager.Inst.PlayerControl.SelectedPC.Inventory.Backpack);
        //save player boosts
        CurrentSave.PlayerBoosts     = GameManager.Inst.PlayerControl.Survival.GetStatBoosts();
        CurrentSave.PlayerFirstName  = GameManager.Inst.PlayerProgress.PlayerFirstName;
        CurrentSave.PlayerLastName   = GameManager.Inst.PlayerProgress.PlayerLastName;
        CurrentSave.DiscoveredTopics = new List <string>(GameManager.Inst.PlayerProgress.DiscoveredTopics);
        CurrentSave.JournalEntries   = new List <List <string> >(GameManager.Inst.PlayerProgress.JournalEntries);
        CurrentSave.IncompleteTasks  = new List <int>(GameManager.Inst.PlayerProgress.IncompleteTasks);
        CurrentSave.CompletedTasks   = new List <int>(GameManager.Inst.PlayerProgress.CompletedTasks);

        //save story conditions
        CurrentSave.ItemConditions    = new List <StoryConditionItem>();
        CurrentSave.TriggerConditions = new List <StoryConditionTrigger>();
        foreach (KeyValuePair <string, StoryCondition> storyCondition in GameManager.Inst.QuestManager.StoryConditions)
        {
            if (storyCondition.Value.Type == StoryConditionType.Item)
            {
                CurrentSave.ItemConditions.Add((StoryConditionItem)storyCondition.Value);
            }
            else if (storyCondition.Value.Type == StoryConditionType.Trigger)
            {
                CurrentSave.TriggerConditions.Add((StoryConditionTrigger)storyCondition.Value);
            }
        }

        //save story event handler
        LinkedList <StoryEventListener> [] storyListenerLists = StoryEventHandler.Instance.AllListenerLists;
        CurrentSave.StoryListenerLists = new List <StoryEventListener> [storyListenerLists.Length];
        for (int i = 0; i < storyListenerLists.Length; i++)
        {
            List <StoryEventListener> list = StoryEventHandler.Instance.ConvertLinkedListenerToList(storyListenerLists[i]);
            CurrentSave.StoryListenerLists[i] = list;
        }

        CurrentSave.StoryEventList     = StoryEventHandler.Instance.ConvertQueueStoryEventToList(StoryEventHandler.Instance.StoryEventQueue);
        CurrentSave.CurrentStoryEvent  = StoryEventHandler.Instance.CurrentStoryEvent;
        CurrentSave.IsCurrentEventDone = StoryEventHandler.Instance.IsCurrentEventDone;


        //create new level data after removing existing one
        List <Level> allLevelsCopy = new List <Level>(GameManager.Inst.WorldManager.AllLevels);

        foreach (Level level in allLevelsCopy)
        {
            if (level.Name == GameManager.Inst.WorldManager.CurrentLevel.Name)
            {
                GameManager.Inst.WorldManager.AllLevels.Remove(level);
            }
        }

        Debug.Log("how many levels in AllLevels? " + GameManager.Inst.WorldManager.AllLevels.Count);

        CurrentSave.CurrentDay         = GameManager.Inst.WorldManager.CurrentDay;
        CurrentSave.CurrentTime        = GameManager.Inst.WorldManager.CurrentTime;
        CurrentSave.CurrentWeather     = GameManager.Inst.WorldManager.CurrentWeather;
        CurrentSave.IsDayTime          = GameManager.Inst.WorldManager.IsDayTime;
        CurrentSave.DayNightTransition = GameManager.Inst.WorldManager.DayNightTransition;
        CurrentSave.NightDayTransition = GameManager.Inst.WorldManager.NightDayTransition;

        Level currentLevel = new Level();

        currentLevel.Name = GameManager.Inst.WorldManager.CurrentLevel.Name;


        //save pickup items in the scene
        //first remove all pickup items from list from current level
        List <PickupItemData> pickupDataList = new List <PickupItemData>();

        //now go through all pickup items in the scene and create pickup data list
        GameObject [] objects = GameObject.FindGameObjectsWithTag("PickupItem");
        foreach (GameObject o in objects)
        {
            PickupItem     pickup = o.GetComponent <PickupItem>();
            PickupItemData data   = new PickupItemData();
            data.ItemID      = pickup.Item.ID;
            data.Quantity    = pickup.Quantity;
            data.Durability  = pickup.Durability;
            data.Pos         = new SerVector3(pickup.transform.position);
            data.EulerAngles = new SerVector3(pickup.transform.localEulerAngles);

            pickupDataList.Add(data);
        }

        currentLevel.PickupItemDatas = pickupDataList;


        //save characters in this level
        currentLevel.Characters = new List <CharacterSaveData>();
        GameObject [] characters = GameObject.FindGameObjectsWithTag("NPC");
        foreach (GameObject o in characters)
        {
            //only save character who have household
            Character character = o.GetComponent <Character>();

            if (character.MyAI.Squad == null || character.MyAI.Squad.Household == null || character.MyAI.Squad.Household.CurrentSquad.Faction != character.Faction)
            {
                continue;
            }

            CharacterSaveData saveData = new CharacterSaveData();
            saveData.GoapID        = character.GoapID;
            saveData.CharacterID   = character.CharacterID;
            saveData.Name          = character.Name;
            saveData.Title         = character.Title;
            saveData.GOName        = character.name;
            saveData.CharacterType = character.CharacterType;
            saveData.SquadID       = character.MyAI.Squad.Household.CurrentSquad.ID;
            saveData.Faction       = character.Faction;
            saveData.IsCommander   = character.IsCommander;
            saveData.IsEssential   = character.IsEssential;
            saveData.StatusData    = character.MyStatus.Data;
            saveData.Jobs          = character.MyJobs;
            saveData.Pos           = new SerVector3(character.transform.position);
            saveData.Angles        = new SerVector3(character.transform.localEulerAngles);

            saveData.Inventory              = new CharacterInventorySaveData();
            saveData.Inventory.ArmorSlot    = character.Inventory.HeadSlot;
            saveData.Inventory.HeadSlot     = character.Inventory.HeadSlot;
            saveData.Inventory.RifleSlot    = character.Inventory.RifleSlot;
            saveData.Inventory.SideArmSlot  = character.Inventory.SideArmSlot;
            saveData.Inventory.ThrowSlot    = character.Inventory.ThrowSlot;
            saveData.Inventory.ToolSlot     = character.Inventory.ToolSlot;
            saveData.Inventory.BackpackCols = character.Inventory.BackpackCols;
            saveData.Inventory.BackpackRows = character.Inventory.BackpackRows;
            saveData.Inventory.Backpack     = new List <GridItemData>(character.Inventory.Backpack);

            currentLevel.Characters.Add(saveData);
        }


        //save traders for current level
        List <TraderData> traders = new List <TraderData>();

        foreach (HumanCharacter character in GameManager.Inst.NPCManager.HumansInScene)
        {
            Trader trader = character.GetComponent <Trader>();

            if (trader != null)
            {
                TraderData traderData = new TraderData();
                traderData.CharacterID      = character.CharacterID;
                traderData.Cash             = trader.Cash;
                traderData.Tier             = trader.Tier;
                traderData.TraderInventory  = trader.TraderInventory;
                traderData.SupplyRenewTimer = trader.SupplyRenewTimer;
                traders.Add(traderData);
            }
        }

        currentLevel.Traders = traders;

        //save chests
        //first remove all chests from list from current level
        List <ChestData> chestDataList = new List <ChestData>();


        //now go through all chests in the scene and create pickup data list
        GameObject [] chests = GameObject.FindGameObjectsWithTag("Chest");
        foreach (GameObject o in chests)
        {
            Chest     chest = o.GetComponent <Chest>();
            ChestData data  = new ChestData();
            data.ChestID  = chest.ChestID;
            data.ColSize  = chest.ColSize;
            data.RowSize  = chest.RowSize;
            data.Items    = chest.Items;
            data.IsLocked = chest.IsLocked;
            data.KeyID    = chest.KeyID;

            chestDataList.Add(data);
        }

        currentLevel.ChestDatas = chestDataList;

        //save households
        currentLevel.Households = new List <HouseholdSaveData>();
        Household [] households = (Household[])GameObject.FindObjectsOfType <Household>();
        foreach (Household household in households)
        {
            HouseholdSaveData saveData = new HouseholdSaveData();
            saveData.HouseholdName = household.name;
            if (household.CurrentSquad != null)
            {
                saveData.CurrentSquadID   = household.CurrentSquad.ID;
                saveData.CurrentSquadTier = household.CurrentSquad.Tier;
                saveData.OwningFaction    = household.CurrentSquad.Faction;
            }
            else
            {
                saveData.CurrentSquadID   = "";
                saveData.CurrentSquadTier = 1;
            }

            saveData.IsRefilledToday      = household.IsRefilledToday;
            saveData.Expedition1SentToday = household.Expedition1SentToday;
            saveData.Expedition2SentToday = household.Expedition2SentToday;
            saveData.ExpeditionTime1      = household.ExpeditionTime1;
            saveData.ExpeditionTime2      = household.ExpeditionTime2;

            currentLevel.Households.Add(saveData);
        }

        //save doors
        currentLevel.Doors = new List <DoorSaveData>();
        GameObject [] doors = GameObject.FindGameObjectsWithTag("Door");
        foreach (GameObject o in doors)
        {
            Door         door     = o.GetComponent <Door>();
            DoorSaveData saveData = new DoorSaveData();
            saveData.ID       = door.ID;
            saveData.IsLocked = door.IsLocked;
            if (door.ID == "zsk_blockadedoor")
            {
                Debug.Log(door.ID + " is locked? " + saveData.IsLocked);
            }
            saveData.IsOpen = door.IsOpen;

            currentLevel.Doors.Add(saveData);
        }


        GameManager.Inst.WorldManager.AllLevels.Add(currentLevel);
        CurrentSave.Levels = new List <Level>(GameManager.Inst.WorldManager.AllLevels);
        CurrentSave.CurrentEnvironmentName = GameManager.Inst.WorldManager.CurrentEnvironment.Name;

        //save factions
        CurrentSave.Factions = new List <KeyValuePair <Faction, FactionData> >();
        foreach (KeyValuePair <Faction, FactionData> factionData in GameManager.Inst.NPCManager.AllFactions)
        {
            factionData.Value.PrepareSave();
            CurrentSave.Factions.Add(factionData);
        }


        //build the save file
        if (!String.IsNullOrEmpty(newLevelName))
        {
            CurrentSave.LevelToLoad = newLevelName;
            saveGameName            = "Autosave - " + newLevelName;
        }
        else
        {
            CurrentSave.LevelToLoad = GameManager.Inst.WorldManager.CurrentLevelName;
        }

        string fullPath = Application.persistentDataPath + "/" + saveGameName + ".dat";

        BinaryFormatter bf = new BinaryFormatter();
        FileStream      file;

        if (File.Exists(fullPath))
        {
            file = File.Open(fullPath, FileMode.Open);
        }
        else
        {
            file = File.Create(fullPath);
        }

        bf.Serialize(file, CurrentSave);

        Debug.Log(saveGameName + " has been saved");
        GameManager.Inst.UIManager.SetConsoleText("Game saved.");
    }
 public TraderDataRecords()
 {
     Records = new TraderData[0];
 }