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); }
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); }