private void MoveTo(Location newLocation) { //Does the location have required items if (!HasRequiredItemToEnterThisLocation(newLocation)) { RaiseMessage("You must have a " + newLocation.ItemRequiredToEnter.Name + " to enter this place."); return; } //update player's current location CurrentLocation = newLocation; //heal player CurrentHP = MaxHP; //does location have quest? if (newLocation.QuestAvailableHere != null) { //See if player already has quest and if completed bool playerHasQuest = HasThisQuest(newLocation.QuestAvailableHere); bool playerCompletedQuest = CompletedThisQuest(newLocation.QuestAvailableHere); //see if player already has quest if (playerHasQuest) { //if player has not completed quest if (!playerCompletedQuest) { //see if player has all items to complete quest bool playerHasItemsForQuest = HasItemsForQuest(newLocation.QuestAvailableHere); //player has all items to complete quest if (playerHasItemsForQuest) { //display message RaiseMessage("You complete the " + newLocation.QuestAvailableHere.Name + " quest."); //remove quest items from inventory RemoveQuestCompletionItems(newLocation.QuestAvailableHere); //Give quest rewards RaiseMessage("You receive: "); RaiseMessage(newLocation.QuestAvailableHere.RewardEXP.ToString() + " EXP"); RaiseMessage(newLocation.QuestAvailableHere.RewardGold.ToString() + " Gold"); RaiseMessage(newLocation.QuestAvailableHere.RewardItem.Name); AddEXP(newLocation.QuestAvailableHere.RewardEXP); Gold += newLocation.QuestAvailableHere.RewardGold; //add reward item to inventory AddItemToInventory(newLocation.QuestAvailableHere.RewardItem); //mark quest as completed MarkQuestCompleted(newLocation.QuestAvailableHere); } } } else { //player does not already have quest //display messages RaiseMessage("You receive the " + newLocation.QuestAvailableHere.Name + " quest."); RaiseMessage(newLocation.QuestAvailableHere.Description); RaiseMessage("To complete it, return with:"); foreach (QuestCompletionItem qci in newLocation.QuestAvailableHere.QuestCompletionItems) { if (qci.Quantity == 1) { RaiseMessage(qci.Quantity.ToString() + " " + qci.Details.Name); } else { RaiseMessage(qci.Quantity.ToString() + " " + qci.Details.NamePlural); } } //add quest to quest list Quests.Add(new PlayerQuest(newLocation.QuestAvailableHere)); } } //Does location have enemy? if (newLocation.EnemyLivingHere != null) { RaiseMessage("You see a " + newLocation.EnemyLivingHere.Name); //make new enemy using values from std enemy in World.Enemy list Enemy standardEnemy = World.EnemyById(newLocation.EnemyLivingHere.ID); _currentEnemy = new Enemy(standardEnemy.ID, standardEnemy.Name, standardEnemy.MaxDamage, standardEnemy.RewardEXP, standardEnemy.RewardGold, standardEnemy.CurrentHP, standardEnemy.MaxHP); foreach (LootItem lootItem in standardEnemy.LootTable) { _currentEnemy.LootTable.Add(lootItem); } } else { _currentEnemy = null; } }