Exemple #1
0
        public void UseWeapon(Weapon weapon)
        {
            //determine amount of damage to do
            int damageToEnemy = RNG.NumberBetween(weapon.MinDamage, weapon.MaxDamage);

            //apply damage to enemy's currentHP
            _currentEnemy.CurrentHP -= damageToEnemy;

            //display message
            RaiseMessage("You hit the " + _currentEnemy.Name + " for " + damageToEnemy + " damage.");

            //check if enemy is dead
            if (_currentEnemy.CurrentHP <= 0)
            {
                RaiseMessage("");
                RaiseMessage("You defeated the " + _currentEnemy.Name);

                //give player EXP
                AddEXP(_currentEnemy.RewardEXP);
                RaiseMessage("You receive " + _currentEnemy.RewardEXP + " experience.");

                //give player gold
                Gold += _currentEnemy.RewardGold;
                RaiseMessage("You receive " + _currentEnemy.RewardGold + " gold.");

                //get random loot
                List <InventoryItem> lootedItems = new List <InventoryItem>();

                //add items to lootedItems list, comparing random number to drop percentage
                foreach (LootItem lootItem in _currentEnemy.LootTable)
                {
                    if (RNG.NumberBetween(1, 100) <= lootItem.DropPercentage)
                    {
                        lootedItems.Add(new InventoryItem(lootItem.Details, 1));
                    }
                }

                //if no items were randomly selected, add default loot item(s)
                if (lootedItems.Count == 0)
                {
                    foreach (LootItem lootItem in _currentEnemy.LootTable)
                    {
                        if (lootItem.IsDefaultItem)
                        {
                            lootedItems.Add(new InventoryItem(lootItem.Details, 1));
                        }
                    }
                }

                //add looted items to inventory
                foreach (InventoryItem inventoryItem in lootedItems)
                {
                    AddItemToInventory(inventoryItem.Details);

                    if (inventoryItem.Quantity == 1)
                    {
                        RaiseMessage("You loot " + inventoryItem.Quantity + " " + inventoryItem.Details.Name);
                    }
                    else
                    {
                        RaiseMessage("You loot " + inventoryItem.Quantity + " " + inventoryItem.Details.NamePlural);
                    }
                }

                //add blank line to messages
                RaiseMessage("");

                //move player to current location to respawn enemy and heal player
                MoveTo(CurrentLocation);
            }
            else
            {
                //Enemy is still alive

                //determine enemy damage to player
                int damageToPlayer = RNG.NumberBetween(0, _currentEnemy.MaxDamage);

                //display message
                RaiseMessage("The " + _currentEnemy.Name + " did " + damageToPlayer + " damage to you.");

                //subtract damage from player
                CurrentHP -= damageToPlayer;

                if (CurrentHP <= 0)
                {
                    //display message
                    RaiseMessage("The " + _currentEnemy + " defeated you.");

                    //Move player to home
                    MoveHome();
                }
            }
        }