Example #1
0
        public virtual FightOutcomeEnum GetOutcome()
        {
            var teamDead        = AreAllDead();
            var opposedTeamDead = OpposedTeam.AreAllDead();

            if (!teamDead && opposedTeamDead)
            {
                return(FightOutcomeEnum.RESULT_VICTORY);
            }

            if (teamDead && !opposedTeamDead)
            {
                return(FightOutcomeEnum.RESULT_LOST);
            }

            return(FightOutcomeEnum.RESULT_DRAW);
        }
Example #2
0
        public override IEnumerable <DroppedItem> RollLoot(IFightResult looter)
        {
            // have to be dead before
            if (!IsDead())
            {
                return(new DroppedItem[0]);
            }

            var random = new AsyncRandom();
            var items  = new List <DroppedItem>();

            var prospectingSum = OpposedTeam.GetAllFighters <CharacterFighter>().Sum(entry => entry.Stats[PlayerFields.Prospecting].Total);
            var droppedGroups  = new List <int>();

            foreach (var droppableItem in Monster.Template.DroppableItems.Where(droppableItem => prospectingSum >= droppableItem.ProspectingLock).Shuffle())
            {
                if (droppedGroups.Contains(droppableItem.DropGroup))
                {
                    continue;
                }

                if (looter is TaxCollectorProspectingResult && droppableItem.TaxCollectorCannotLoot)
                {
                    continue;
                }

                for (var i = 0; i < droppableItem.RollsCounter; i++)
                {
                    if (droppableItem.DropLimit > 0 && m_dropsCount.ContainsKey(droppableItem) && m_dropsCount[droppableItem] >= droppableItem.DropLimit)
                    {
                        break;
                    }

                    var chance   = (random.Next(0, 100) + random.NextDouble());
                    var dropRate = FightFormulas.AdjustDropChance(looter, droppableItem, Monster, Fight.AgeBonus);

                    if (!(dropRate >= chance))
                    {
                        continue;
                    }

                    if (droppableItem.DropGroup != 0)
                    {
                        droppedGroups.Add(droppableItem.DropGroup);
                    }

                    items.Add(new DroppedItem(droppableItem.ItemId, 1));

                    if (!m_dropsCount.ContainsKey(droppableItem))
                    {
                        m_dropsCount.Add(droppableItem, 1);
                    }
                    else
                    {
                        m_dropsCount[droppableItem]++;
                    }
                }
            }


            return(items);
        }