Exemplo n.º 1
0
        /// <summary>
        /// Start a new combat from the given RandomCombat object.
        /// </summary>
        public static void StartNewCombat(RandomCombat randomCombat)
        {
            // check the parameter
            if (randomCombat == null)
            {
                throw new ArgumentNullException("randomCombat");
            }

            // determine how many monsters will be in the combat
            int monsterCount = 
                randomCombat.MonsterCountRange.GenerateValue(Session.Random);

            // determine the total probability
            int totalWeight = 0;
            foreach (WeightedContentEntry<Monster> entry in randomCombat.Entries)
            {
                totalWeight += entry.Weight;
            }

            // generate each monster
            List<CombatantMonster> generatedMonsters = new List<CombatantMonster>();
            for (int i = 0; i < monsterCount; i++)
            {
                int monsterChoice = Session.Random.Next(totalWeight);
                foreach (WeightedContentEntry<Monster> entry in randomCombat.Entries)
                {
                    if (monsterChoice < entry.Weight)
                    {
                        generatedMonsters.Add(
                            new CombatantMonster(entry.Content));
                        break;
                    }
                    else
                    {
                        monsterChoice -= entry.Weight;
                    }
                }
            }

            // randomize the list of monsters
            List<CombatantMonster> randomizedMonsters = new List<CombatantMonster>();
            while ((generatedMonsters.Count > 0) && 
                (randomizedMonsters.Count <= MonsterPositions.Length))
            {
                int index = Session.Random.Next(generatedMonsters.Count);
                randomizedMonsters.Add(generatedMonsters[index]);
                generatedMonsters.RemoveAt(index);
            }

            // start the combat
            StartNewCombat(GenerateCombatantsFromParty(), randomizedMonsters, 
                randomCombat.FleeProbability);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Check if a random combat should start.  If so, start combat immediately.
        /// </summary>
        /// <returns>True if combat was started, false otherwise.</returns>
        public static bool CheckForRandomCombat(RandomCombat randomCombat)
        {
            // check the parameter
            if ((randomCombat == null) || (randomCombat.CombatProbability <= 0))
            {
                return false;
            }

            // check to see if combat has already started
            if (CombatEngine.IsActive)
            {
                return false;
            }

            // check to see if the random combat starts
            int randomCombatCheck = random.Next(100);
            if (randomCombatCheck < randomCombat.CombatProbability)
            {
                // start combat immediately
                CombatEngine.StartNewCombat(randomCombat);
                return true;
            }

            // combat not started
            return false;
        }