Exemplo n.º 1
0
        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;
            }
        }