public void SetMoney(uint money) { this.Money = money; SetAccepted(false); TraderData.SetAccepted(false); Trader.SendUpdateTrade(true); Player.SendUpdateTrade(false); }
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); }
//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); }
//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); } }
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; }
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; }
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]; }