private static IEnumerable <ItemRosterElement> LootCasualties2(ICollection <TroopRosterElement> shareFromCasualties, float lootChance) { // MobileParty.GetMainPartySkillCounsellor(DefaultSkills.Roguery).GetSkillValue(DefaultSkills.Roguery) ItemRoster itemRosters = new ItemRoster(); Dictionary <string, int> loots = new Dictionary <string, int>(); lootChance = MathF.Clamp(lootChance * 1.3f, 20f, 95f); foreach (TroopRosterElement casualty in shareFromCasualties) { Equipment randomEquipment = GetRandomEquipment(casualty.Character); var potentialLootItems = GetItemsFromEquipmentSlots(randomEquipment); foreach (ItemObject item in potentialLootItems) { float rdm = MBRandom.RandomFloatRanged(100f); if (rdm < lootChance) { if (loots.ContainsKey(item.StringId)) { loots[item.StringId] += 1; } else { loots.Add(item.StringId, 1); } } } } foreach (var stringId in loots.Keys) { itemRosters.Add(new ItemRosterElement(MBObjectManager.Instance.GetObject <ItemObject>(stringId), loots[stringId])); } return(itemRosters); }
private static ItemRoster GetItemRosterWithInvalidItemObjectsOnly(int items) { ItemRoster itemRoster = GetEmptyItemRoster(); for (var index = 0; index < items; index++) { itemRoster.Add(ItemRosterElement.Invalid); } return(itemRoster); }
private static ItemRoster GetItemRosterWithDefaultValidItemObjectsOnly(int items, int defaultAmount) { ItemRoster itemRoster = GetEmptyItemRoster(); for (var index = 0; index < items; index++) { ItemRosterElement defaultItemRosterElement = new ItemRosterElement(new ItemObject(), defaultAmount, new ItemModifier()); itemRoster.Add(defaultItemRosterElement); } return(itemRoster); }
private static void AddEquipmentToPartyInventory(Equipment equipment, ItemRoster partyInventory) { for (EquipmentIndex index = EquipmentIndex.WeaponItemBeginSlot; index < EquipmentIndex.NumEquipmentSetSlots; index++) { ItemObject itemObject = equipment[index].Item; ItemModifier itemModifier = equipment[index].ItemModifier; if (itemObject == null) { continue; } partyInventory.Add(new ItemRosterElement(itemObject, 1, itemModifier)); } }
private static IEnumerable <ItemRosterElement> LootCasualties(ICollection <TroopRosterElement> shareFromCasualties, float lootFactor, bool playerWin = false) { EquipmentElement equipmentElement; ItemModifier randomModifierWithTarget; ItemModifier itemModifier; ItemRoster itemRosters = new ItemRoster(); List <EquipmentElement> equipmentElements = new List <EquipmentElement>(); foreach (TroopRosterElement shareFromCasualty in shareFromCasualties) { //for (int i = 0; i < 1; i++) { Equipment randomEquipment = GetRandomEquipment(shareFromCasualty.Character); equipmentElements.Clear(); int num = MBRandom.RoundRandomized(lootFactor); float lootSkill = lootFactor / .25f; for (int j = 0; j < num; j++) { float expectedLootedItemValue = 30f; if (playerWin) { float valLevel = (float)Math.Max(CharacterObject.PlayerCharacter.Level, shareFromCasualty.Character.Level); expectedLootedItemValue = 0.8f * ((30f * lootFactor) + (float)(valLevel * valLevel)); } else { expectedLootedItemValue = ItemHelper.GetExpectedLootedItemValue(shareFromCasualty.Character); } List <EquipmentElement> randomItems = GetRandomItems(randomEquipment, expectedLootedItemValue); foreach (EquipmentElement randomItem in randomItems) { if (randomItem.Item != null && !randomItem.Item.NotMerchandise && equipmentElements.Count <EquipmentElement>((EquipmentElement x) => x.Item.Type == randomItem.Item.Type) == 0) { equipmentElements.Add(randomItem); } } } for (int k = 0; k < equipmentElements.Count; k++) { EquipmentElement item = equipmentElements[k]; ItemRosterElement itemRosterElement = new ItemRosterElement(item.Item, 1, null); float single = 30f; // ItemHelper.GetExpectedLootedItemValue(shareFromCasualty.Character); if (playerWin) { float valLevel = (float)Math.Max(CharacterObject.PlayerCharacter.Level, shareFromCasualty.Character.Level); single = 0.8f * (30f * lootFactor) + (float)(valLevel * valLevel); } else { single = ItemHelper.GetExpectedLootedItemValue(shareFromCasualty.Character); } EquipmentElement equipmentElement1 = itemRosterElement.EquipmentElement; if (!equipmentElement1.Item.HasHorseComponent) { equipmentElement1 = itemRosterElement.EquipmentElement; if (equipmentElement1.Item.HasArmorComponent) { equipmentElement1 = itemRosterElement.EquipmentElement; equipmentElement = itemRosterElement.EquipmentElement; ItemModifierGroup itemModifierGroup = equipmentElement.Item.ArmorComponent.ItemModifierGroup; if (itemModifierGroup != null) { equipmentElement = itemRosterElement.EquipmentElement; randomModifierWithTarget = itemModifierGroup.GetRandomModifierWithTarget(single / (float)equipmentElement.GetBaseValue(), 1f); } else { randomModifierWithTarget = null; } equipmentElement1.SetModifier(randomModifierWithTarget); } } else { equipmentElement1 = itemRosterElement.EquipmentElement; equipmentElement = itemRosterElement.EquipmentElement; ItemModifierGroup itemModifierGroup1 = equipmentElement.Item.HorseComponent.ItemModifierGroup; if (itemModifierGroup1 != null) { equipmentElement = itemRosterElement.EquipmentElement; itemModifier = itemModifierGroup1.GetRandomModifierWithTarget(single / (float)equipmentElement.GetBaseValue(), 1f); } else { itemModifier = null; } equipmentElement1.SetModifier(itemModifier); } itemRosters.Add(itemRosterElement); } } } return(itemRosters); }
private IEnumerable <ItemRosterElement> LootCasualties(ICollection <TroopRosterElement> shareFromCasualties, float lootFactor) { EquipmentElement equipmentElement; ItemModifier randomModifierWithTarget; ItemModifier itemModifier; ItemRoster itemRosters = new ItemRoster(); List <EquipmentElement> equipmentElements = new List <EquipmentElement>(); foreach (TroopRosterElement shareFromCasualty in shareFromCasualties) { for (int i = 0; i < 1; i++) { Equipment randomEquipment = LootCollector.GetRandomEquipment(shareFromCasualty.Character); equipmentElements.Clear(); int num = MBRandom.RoundRandomized(lootFactor); for (int j = 0; j < num; j++) { float expectedLootedItemValue = ItemHelper.GetExpectedLootedItemValue(shareFromCasualty.Character); EquipmentElement randomItem = randomEquipment.GetRandomItem(expectedLootedItemValue); if (randomItem.Item != null && !randomItem.Item.NotMerchandise && equipmentElements.Count <EquipmentElement>((EquipmentElement x) => x.Item.Type == randomItem.Item.Type) == 0) { equipmentElements.Add(randomItem); } } for (int k = 0; k < equipmentElements.Count; k++) { EquipmentElement item = equipmentElements[k]; ItemRosterElement itemRosterElement = new ItemRosterElement(item.Item, 1, null); float single = ItemHelper.GetExpectedLootedItemValue(shareFromCasualty.Character); EquipmentElement equipmentElement1 = itemRosterElement.EquipmentElement; if (!equipmentElement1.Item.HasHorseComponent) { equipmentElement1 = itemRosterElement.EquipmentElement; if (equipmentElement1.Item.HasArmorComponent) { equipmentElement1 = itemRosterElement.EquipmentElement; equipmentElement = itemRosterElement.EquipmentElement; ItemModifierGroup itemModifierGroup = equipmentElement.Item.ArmorComponent.ItemModifierGroup; if (itemModifierGroup != null) { equipmentElement = itemRosterElement.EquipmentElement; randomModifierWithTarget = itemModifierGroup.GetRandomModifierWithTarget(single / (float)equipmentElement.GetBaseValue(), 1f); } else { randomModifierWithTarget = null; } equipmentElement1.SetModifier(randomModifierWithTarget); } } else { equipmentElement1 = itemRosterElement.EquipmentElement; equipmentElement = itemRosterElement.EquipmentElement; ItemModifierGroup itemModifierGroup1 = equipmentElement.Item.HorseComponent.ItemModifierGroup; if (itemModifierGroup1 != null) { equipmentElement = itemRosterElement.EquipmentElement; itemModifier = itemModifierGroup1.GetRandomModifierWithTarget(single / (float)equipmentElement.GetBaseValue(), 1f); } else { itemModifier = null; } equipmentElement1.SetModifier(itemModifier); } itemRosters.Add(itemRosterElement); } } } return(itemRosters); }