// Token: 0x06000F4D RID: 3917 RVA: 0x00045A80 File Offset: 0x00043C80
internal void GiveShareOfLootToParty(TroopRoster memberRoster, TroopRoster prisonerRoster, ItemRoster itemRoster, PartyBase winnerParty, float lootAmount)
{
bool flag = winnerParty == PartyBase.MainParty;
List<TroopRosterElement> list = new List<TroopRosterElement>((int)((float)this.LootedMembers.TotalManCount * Math.Min(lootAmount * 1.3f, 1f)));
foreach (TroopRosterElement troopRosterElement in this.LootedMembers.GetTroopRoster())
{
int number = troopRosterElement.Number;
CharacterObject character = troopRosterElement.Character;
for (int i = 0; i < number; i++)
{
if (MBRandom.RandomFloat < lootAmount)
{
TroopRosterElement item = new TroopRosterElement(character)
{
Number = 1,
WoundedNumber = 1
};
list.Add(item);
}
}
}
foreach (TroopRosterElement troopRosterElement2 in list)
{
this.LootedMembers.AddToCounts(troopRosterElement2.Character, -1, false, 0, 0, true, -1);
}
foreach (TroopRosterElement troopRosterElement3 in list)
{
if (troopRosterElement3.Character.IsHero)
{
if (!flag && winnerParty.IsMobile)
{
TakePrisonerAction.Apply(winnerParty, troopRosterElement3.Character.HeroObject);
}
else
{
prisonerRoster.AddToCounts(troopRosterElement3.Character, troopRosterElement3.Number, false, 0, 0, true, -1);
}
}
else
{
prisonerRoster.AddToCounts(troopRosterElement3.Character, troopRosterElement3.Number, false, 0, 0, true, -1);
}
}
ICollection<ItemRosterElement> collection = new List<ItemRosterElement>();
for (int j = this.LootedItems.Count<ItemRosterElement>() - 1; j >= 0; j--)
{
ItemRosterElement elementCopyAtIndex = this.LootedItems.GetElementCopyAtIndex(j);
int num = 0;
ItemRosterElement item2 = new ItemRosterElement(elementCopyAtIndex.EquipmentElement.Item, 1, elementCopyAtIndex.EquipmentElement.ItemModifier);
for (int k = 0; k < elementCopyAtIndex.Amount; k++)
{
if (MBRandom.RandomFloat < lootAmount)
{
collection.Add(item2);
num++;
}
}
this.LootedItems.AddToCounts(item2.EquipmentElement, -num);
}
itemRoster.Add(collection);
float partySavePrisonerAsMemberShareProbability = Campaign.Current.Models.BattleRewardModel.GetPartySavePrisonerAsMemberShareProbability(winnerParty, lootAmount);
int num2 = winnerParty.IsMobile ? winnerParty.MobileParty.LimitedPartySize : winnerParty.PartySizeLimit;
if (partySavePrisonerAsMemberShareProbability > 0f)
{
for (int l = this.LootedPrisoners.Count - 1; l >= 0; l--)
{
int elementNumber = this.LootedPrisoners.GetElementNumber(l);
CharacterObject characterAtIndex = this.LootedPrisoners.GetCharacterAtIndex(l);
int num3 = 0;
for (int m = 0; m < elementNumber; m++)
{
if (MBRandom.RandomFloat < partySavePrisonerAsMemberShareProbability && (flag || elementNumber + memberRoster.TotalManCount <= num2))
{
memberRoster.AddToCounts(characterAtIndex, 1, false, 0, 0, true, -1);
num3++;
}
}
if (num3 > 0)
{
this.LootedPrisoners.AddToCounts(characterAtIndex, -num3, false, 0, 0, true, -1);
}
}
}
ICollection<TroopRosterElement> collection2 = new List<TroopRosterElement>();
for (int n = this.CasualtiesInBattle.Count - 1; n >= 0; n--)
{
int elementNumber2 = this.CasualtiesInBattle.GetElementNumber(n);
CharacterObject characterAtIndex2 = this.CasualtiesInBattle.GetCharacterAtIndex(n);
int num4 = 0;
TroopRosterElement item3 = new TroopRosterElement(characterAtIndex2);
for (int num5 = 0; num5 < elementNumber2; num5++)
{
if (MBRandom.RandomFloat < lootAmount)
{
collection2.Add(item3);
num4++;
}
}
if (num4 > 0)
{
this.CasualtiesInBattle.AddToCounts(characterAtIndex2, -num4, false, 0, 0, true, -1);
}
}
ExplainedNumber explainedNumber = new ExplainedNumber(1f, false, null);
if (winnerParty.MobileParty != null && winnerParty.MobileParty.Leader != null)
{
SkillHelper.AddSkillBonusForCharacter(DefaultSkills.Roguery, DefaultSkillEffects.RogueryLootBonus, winnerParty.MobileParty.Leader, ref explainedNumber, -1, true, 0);
}
if (!flag)
{
if (winnerParty.LeaderHero != null)
{
int num6 = MBMath.Round((float)this.LootCasualtiesToGold(collection2, explainedNumber.ResultNumber) * explainedNumber.ResultNumber);
num6 = (int)((float)num6 / 3.5f);
winnerParty.LeaderHero.Gold += num6;
return;
}
}
else
{
IEnumerable<ItemRosterElement> rosterElementList = this.LootCasualties(collection2, explainedNumber.ResultNumber);
itemRoster.Add(rosterElementList);
}
}