private static List <Equipment> ApplyEquipmentRules(CharacterObject template) { List <Equipment> equipments = new List <Equipment>(); foreach (Equipment battleEquipment in template.BattleEquipments) { var equipment = battleEquipment.Clone(); equipments.Add(equipment); } foreach (var r in TournamentsXPandedSubModule.restrictors.OrderBy(x => x.RuleOrder)) { if (!string.IsNullOrWhiteSpace(r.TargetCultureId)) { if (template.Culture.StringId != r.TargetCultureId) { continue; } } try { foreach (Equipment battleEquipment in equipments) { if (r.TargetIgnoreMounted && battleEquipment.Horse.Item != null) { continue; } if (battleEquipment.GetEquipmentFromSlot(EquipmentIndex.Weapon0).Item.ItemType == r.TargetItemType) { if (r.ReplacementAddHorse) { var horseid = ItemObject.All.Where(x => x.Culture == template.Culture && x.ItemType == ItemObject.ItemTypeEnum.Horse).GetRandomElement().StringId; var itemRoster = new ItemRosterElement(Game.Current.ObjectManager.GetObject <ItemObject>(horseid)); battleEquipment.AddEquipmentToSlotWithoutAgent(EquipmentIndex.Horse, itemRoster.EquipmentElement); } if (r.ReplacementItemType != ItemObject.ItemTypeEnum.Invalid) { var repitem = ItemObject.All.Where(x => x.Culture == template.Culture && x.ItemType == r.ReplacementItemType).GetRandomElement(); var itemRoster = new ItemRosterElement(Game.Current.ObjectManager.GetObject <ItemObject>(repitem.StringId)); battleEquipment.AddEquipmentToSlotWithoutAgent(EquipmentIndex.Weapon0, itemRoster.EquipmentElement); } else if (!string.IsNullOrWhiteSpace(r.ReplacementItemStringId)) { var itemRoster = new ItemRosterElement(Game.Current.ObjectManager.GetObject <ItemObject>(r.ReplacementItemStringId)); battleEquipment.AddEquipmentToSlotWithoutAgent(EquipmentIndex.Weapon0, itemRoster.EquipmentElement); } } } } catch (Exception ex) { //MessageBox.Show("TournamentsXPanded\nError Applying Rule Equipement Filter\n" + ex.ToStringFull()); ErrorLog.Log("Error Applying Rule Equipement Filter\n" + ex.ToStringFull()); } } return(equipments); }
public override void AfterStart() { base.AfterStart(); WorldFrame spawnPathFrame = this.Mission.GetSpawnPathFrame(BattleSideEnum.Defender, (int)((double)this._unitCount * 1.5)); this._entity = GameEntity.Instantiate(Mission.Current.Scene, this._isCaravan ? "caravan_scattered_goods_prop" : "villager_scattered_goods_prop", new MatrixFrame(spawnPathFrame.Rotation, spawnPathFrame.Origin.GetGroundVec3())); this._entity.SetMobility(GameEntity.Mobility.dynamic); foreach (GameEntity child in this._entity.GetChildren()) { float height; Vec3 normal; Mission.Current.Scene.GetTerrainHeightAndNormal(child.GlobalPosition.AsVec2, out height, out normal); MatrixFrame globalFrame = child.GetGlobalFrame(); globalFrame.origin.z = height; globalFrame.rotation.u = normal; globalFrame.rotation.Orthonormalize(); child.SetGlobalFrame(globalFrame); } IEnumerable <GameEntity> source = this._entity.GetChildren().Where <GameEntity>((Func <GameEntity, bool>)(c => c.HasTag("caravan_animal_spawn"))); int num = (int)((double)source.Count <GameEntity>() * 0.400000005960464); foreach (GameEntity gameEntity in source) { MatrixFrame globalFrame = gameEntity.GetGlobalFrame(); ItemRosterElement harnessRosterElement = new ItemRosterElement(Game.Current.ObjectManager.GetObject <ItemObject>(!this._isCamelCulture ? (num <= 0 ? this._muleLoadHarnesses[MBRandom.RandomInt(((IEnumerable <string>) this._muleLoadHarnesses).Count <string>())] : this._muleMountableHarnesses[MBRandom.RandomInt(((IEnumerable <string>) this._muleMountableHarnesses).Count <string>())]) : (num <= 0 ? this._camelLoadHarnesses[MBRandom.RandomInt(((IEnumerable <string>) this._camelLoadHarnesses).Count <string>())] : this._camelMountableHarnesses[MBRandom.RandomInt(((IEnumerable <string>) this._camelMountableHarnesses).Count <string>())]))); Agent agent = Mission.Current.SpawnMonster(this._isCamelCulture ? (num-- > 0 ? new ItemRosterElement(Game.Current.ObjectManager.GetObject <ItemObject>("pack_camel")) : new ItemRosterElement(Game.Current.ObjectManager.GetObject <ItemObject>("pack_camel_unmountable"))) : (num-- > 0 ? new ItemRosterElement(Game.Current.ObjectManager.GetObject <ItemObject>("mule")) : new ItemRosterElement(Game.Current.ObjectManager.GetObject <ItemObject>("mule_unmountable"))), harnessRosterElement, globalFrame); agent.SetAgentFlags(agent.GetAgentFlags() & ~AgentFlag.CanWander); } }
private void AddCurrentSelect() { if (this.numInvItemCount.Value != decimal.Zero) { foreach (ItemObject item in lstAllItems.SelectedObjects) { int number = (int)this.numInvItemCount.Value; var mod = (this.cboItemModifier.SelectedItem as InvItemModInfo)?.item; var rosterItem = new ItemRosterElement(item, number, mod); var idx = this.Player.PartyBelongedTo.ItemRoster.FindIndexOfElement(rosterItem.EquipmentElement); if (idx < 0) { this.Player.PartyBelongedTo.ItemRoster.Add(rosterItem); idx = this.Player.PartyBelongedTo.ItemRoster.FindIndexOfElement(rosterItem.EquipmentElement); UpdateInventoryList(refresh: true); this.lstInvEquipment.SelectObject(idx); this.lstInvEquipment.EnsureModelVisible(idx); } else { this.Player.PartyBelongedTo.ItemRoster.AddToCounts(this.Player.PartyBelongedTo.ItemRoster.GetItemAtIndex(idx), number); lstInvEquipment.RefreshObject(idx); } } } }
private void RemoveTournamentSpearFootSets(string[] templates) { foreach (var r in restrictors.OrderBy(x => x.RuleOrder)) { foreach (var t in templates) { var template = MBObjectManager.Instance.GetObject <CharacterObject>(t); if (!string.IsNullOrWhiteSpace(r.TargetCultureId)) { if (template.Culture.StringId != r.TargetCultureId) { continue; } } try { foreach (Equipment battleEquipment in template.BattleEquipments) { if (r.TargetIgnoreMounted && battleEquipment.Horse.Item != null) { continue; } if (battleEquipment.GetEquipmentFromSlot(EquipmentIndex.Weapon0).Item.ItemType == r.TargetItemType) { if (r.ReplacementAddHorse) { var horseid = ItemObject.All.Where(x => x.Culture == template.Culture && x.ItemType == ItemObject.ItemTypeEnum.Horse).GetRandomElement().StringId; var itemRoster = new ItemRosterElement(Game.Current.ObjectManager.GetObject <ItemObject>(horseid)); battleEquipment.AddEquipmentToSlotWithoutAgent(EquipmentIndex.Horse, itemRoster.EquipmentElement); } if (r.ReplacementItemType != ItemObject.ItemTypeEnum.Invalid) { var repitem = ItemObject.All.Where(x => x.Culture == template.Culture && x.ItemType == r.ReplacementItemType).GetRandomElement(); var itemRoster = new ItemRosterElement(Game.Current.ObjectManager.GetObject <ItemObject>(repitem.StringId)); battleEquipment.AddEquipmentToSlotWithoutAgent(EquipmentIndex.Weapon0, itemRoster.EquipmentElement); } else if (!string.IsNullOrWhiteSpace(r.ReplacementItemStringId)) { var itemRoster = new ItemRosterElement(Game.Current.ObjectManager.GetObject <ItemObject>(r.ReplacementItemStringId)); battleEquipment.AddEquipmentToSlotWithoutAgent(EquipmentIndex.Weapon0, itemRoster.EquipmentElement); } } } } catch (Exception ex) { MessageBox.Show("TournamentsXPanded\nError Applying Rule Equipement Filter\n" + ex.ToStringFull()); ErrorLog.Log("Error Applying Rule Equipement Filter\n" + ex.ToStringFull()); } } } }
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); }
// Token: 0x0600200A RID: 8202 RVA: 0x000830E8 File Offset: 0x000812E8 private static float GetTotalWeightOfItems(MobileParty mobileParty) { float num = 0f; for (int i = 0; i < mobileParty.ItemRoster.Count; i++) { ItemRosterElement elementCopyAtIndex = mobileParty.ItemRoster.GetElementCopyAtIndex(i); if (!elementCopyAtIndex.EquipmentElement.Item.IsMountable && !elementCopyAtIndex.EquipmentElement.Item.IsAnimal) { num += (float)elementCopyAtIndex.Amount * elementCopyAtIndex.EquipmentElement.Weight; } } return(num); }
// Compares item base value for sorting private static int CompareItemValue(ItemRosterElement element1, ItemRosterElement element2) { if (element1.EquipmentElement.GetBaseValue() < element2.EquipmentElement.GetBaseValue()) { return(-1); } else if (element1.EquipmentElement.GetBaseValue() == element2.EquipmentElement.GetBaseValue()) { return(0); } else { return(1); } }
public static bool Prefix(PartyScreenLogic __instance, ItemCategory itemCategory, int numOfItemsLeftToRemove) { ItemCategory itemCategory1; int numItemsRequired = numOfItemsLeftToRemove; ItemRosterElement[] copyOfAllElements = __instance.RightOwnerParty.ItemRoster.GetCopyOfAllElements(); int totalItemCount = __instance.RightOwnerParty.ItemRoster.Count; ItemRosterElement[] cleanItemRoster = new ItemRosterElement[totalItemCount]; Array.Copy(copyOfAllElements, 0, cleanItemRoster, 0, totalItemCount); Array.Sort <ItemRosterElement>(cleanItemRoster, (ItemRosterElement left, ItemRosterElement right) => { EquipmentElement equipmentElement = left.EquipmentElement; int itemValue = equipmentElement.ItemValue; equipmentElement = right.EquipmentElement; return(itemValue.CompareTo(equipmentElement.ItemValue)); }); ItemRosterElement[] itemRosterElementArray = cleanItemRoster; for (int i = 0; i < itemRosterElementArray.Length; i++) { ItemRosterElement rosterElement = itemRosterElementArray[i]; ItemObject item = rosterElement.EquipmentElement.Item; if (item != null) { itemCategory1 = item.ItemCategory; } else { itemCategory1 = null; } if (itemCategory1 == itemCategory) { int amountToRemove = Math.Min(numItemsRequired, rosterElement.Amount); __instance.RightOwnerParty.ItemRoster.AddToCounts(rosterElement.EquipmentElement, -amountToRemove, true); numItemsRequired -= amountToRemove; if (numItemsRequired == 0) { break; } } } return(false); }
private void RemoveTournamentSpearFootSets(string[] templates) { foreach (var r in restrictors) { foreach (var t in templates) { foreach (Equipment battleEquipment in MBObjectManager.Instance.GetObject <CharacterObject>(t).BattleEquipments) { if (r.IgnoreMounted && battleEquipment.Horse.Item != null) { break; } if (battleEquipment.GetEquipmentFromSlot(EquipmentIndex.Weapon0).Item.ItemType == r.ItemType) { var itemRoster = new ItemRosterElement(Game.Current.ObjectManager.GetObject <ItemObject>(r.ReplacementStringId)); battleEquipment.AddEquipmentToSlotWithoutAgent(EquipmentIndex.Weapon0, itemRoster.EquipmentElement); } } } } }
private static string GetArmorTooltip(ItemRosterElement elem, ItemObject.ItemTypeEnum type) { switch (type) { case ItemObject.ItemTypeEnum.HeadArmor: return(elem.EquipmentElement.GetModifiedHeadArmor().ToString()); case ItemObject.ItemTypeEnum.BodyArmor: return(elem.EquipmentElement.GetModifiedBodyArmor().ToString()); case ItemObject.ItemTypeEnum.HorseHarness: return(elem.EquipmentElement.GetModifiedMountBodyArmor().ToString()); case ItemObject.ItemTypeEnum.HandArmor: return(elem.EquipmentElement.GetModifiedArmArmor().ToString()); case ItemObject.ItemTypeEnum.LegArmor: return(elem.EquipmentElement.GetModifiedLegArmor().ToString()); } return(null); }
private void lstInvEquipment_CellEditStarting(object sender, CellEditEventArgs e) { if (e.Column.Text == "前缀") { var cb = new DarkUI.Controls.DarkComboBox { Bounds = e.CellBounds, DropDownStyle = ComboBoxStyle.DropDownList, Sorted = false, }; var modList = ObjectCache.GetObjectTypeList <ItemModifier>(); cb.Items.Add(new InvItemModInfo(defaultNoneName, null)); cb.Items.AddRange(modList.OrderBy(x => x.StringId).Select(mod => new InvItemModInfo(mod.StringId, mod)).ToArray()); var lastSelIdx = (int)e.RowObject; var lastSelElem = this.Player.PartyBelongedTo.ItemRoster.GetElementCopyAtIndex(lastSelIdx); var lastMod = lastSelElem.EquipmentElement.ItemModifier; cb.SelectedIndex = cb.FindStringExact(lastSelElem.EquipmentElement.ItemModifier?.StringId ?? defaultNoneName); cb.SelectedIndexChanged += (cb_sender, cbe) => { var modInfo = (cb.SelectedItem as InvItemModInfo)?.item; if (modInfo == lastMod) { return; } var y = new ItemRosterElement(lastSelElem.EquipmentElement.Item, lastSelElem.Amount, modInfo); //this.Player.PartyBelongedTo.ItemRoster.SetElementAtIndex(lastSelIdx, y); }; e.Control = cb; } else if (!e.Column.CheckBoxes && !(e.Column.Renderer is DarkUI.Support.CheckStateRenderer)) { e.AutoDispose = false; e.Control = new DarkUI.Controls.DarkNumericUpDown { Bounds = e.CellBounds }.DefaultEditor(e.Value); } }
// Token: 0x060001BD RID: 445 RVA: 0x0000E03C File Offset: 0x0000C23C private GameEntity AddItem(Scene scene, ItemObject item, MatrixFrame itemFrame, MatrixFrame itemFrame1, MatrixFrame itemFrame2) { ItemRosterElement rosterElement = new ItemRosterElement(item, 0, null); MetaMesh itemMeshForInventory = rosterElement.GetItemMeshForInventory(false); if (item.IsCraftedWeapon) { MatrixFrame frame = itemMeshForInventory.Frame; frame.Elevate(-item.WeaponDesign.CraftedWeaponLength / 2f); itemMeshForInventory.Frame = frame; } GameEntity gameEntity = null; if (itemMeshForInventory != null && rosterElement.EquipmentElement.Item.ItemType == ItemObject.ItemTypeEnum.HandArmor) { gameEntity = GameEntity.CreateEmpty(scene, true); AnimationSystemData animationSystemData = Game.Current.HumanMonster.FillAnimationSystemData(MBGlobals.PlayerMaleActionSet, 1f, false); AgentVisualsNativeData agentVisualsNativeData = Game.Current.HumanMonster.FillAgentVisualsNativeData(); gameEntity.CreateSkeletonWithActionSet(ref agentVisualsNativeData, ref animationSystemData); gameEntity.SetFrame(ref itemFrame); gameEntity.Skeleton.SetAgentActionChannel(0, this.act_tableau_hand_armor_pose, 0f, -0.2f); gameEntity.AddMultiMeshToSkeleton(itemMeshForInventory); gameEntity.Skeleton.TickAnimationsAndForceUpdate(0.01f, itemFrame, true); } else if (itemMeshForInventory != null) { if (item.WeaponComponent != null) { WeaponClass weaponClass = item.WeaponComponent.PrimaryWeapon.WeaponClass; if (weaponClass == WeaponClass.ThrowingAxe || weaponClass == WeaponClass.ThrowingKnife || weaponClass == WeaponClass.Javelin || weaponClass == WeaponClass.Bolt) { gameEntity = GameEntity.CreateEmpty(scene, true); MetaMesh metaMesh = itemMeshForInventory.CreateCopy(); metaMesh.Frame = itemFrame; gameEntity.AddMultiMesh(metaMesh, true); MetaMesh metaMesh2 = itemMeshForInventory.CreateCopy(); metaMesh2.Frame = itemFrame1; gameEntity.AddMultiMesh(metaMesh2, true); MetaMesh metaMesh3 = itemMeshForInventory.CreateCopy(); metaMesh3.Frame = itemFrame2; gameEntity.AddMultiMesh(metaMesh3, true); } else { gameEntity = scene.AddItemEntity(ref itemFrame, itemMeshForInventory); } } else { gameEntity = scene.AddItemEntity(ref itemFrame, itemMeshForInventory); if (item.Type == ItemObject.ItemTypeEnum.HorseHarness && item.ArmorComponent != null) { MetaMesh copy = MetaMesh.GetCopy(item.ArmorComponent.ReinsMesh, true, true); if (copy != null) { gameEntity.AddMultiMesh(copy, true); } } } } else { MBDebug.ShowWarning("[DEBUG]Item with " + rosterElement.EquipmentElement.Item.StringId + "[DEBUG] string id cannot be found"); } gameEntity.SetVisibilityExcludeParents(false); return gameEntity; }
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); }
internal static bool GiveShareOfLootToPartyPre(ref object __instance, PartyBase partyToReceiveLoot, PartyBase winnerParty, float lootAmount) { //var ___LootedMembers= Traverse.Create<LootCollectorType>(__instance).Field("LootedMembers").GetValue() var ___LootedMembers = LootCollectorType.GetProperty("LootedMembers", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(__instance) as TroopRoster; var ___LootedPrisoners = LootCollectorType.GetProperty("LootedPrisoners", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(__instance) as TroopRoster; var ___CasualtiesInBattle = LootCollectorType.GetProperty("CasualtiesInBattle", BindingFlags.Public | BindingFlags.Instance).GetValue(__instance) as TroopRoster; var ___LootedItems = LootCollectorType.GetProperty("LootedItems", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(__instance) as ItemRoster; bool flag = winnerParty == PartyBase.MainParty; List <TroopRosterElement> troopRosterElements = new List <TroopRosterElement>(); foreach (TroopRosterElement lootedMember in ___LootedMembers) { int number = lootedMember.Number; CharacterObject character = lootedMember.Character; for (int i = 0; i < number; i++) { if (MBRandom.RandomFloat < lootAmount) { TroopRosterElement troopRosterElement = new TroopRosterElement(character) { Number = 1, WoundedNumber = 1 }; troopRosterElements.Add(troopRosterElement); } } } foreach (TroopRosterElement troopRosterElement1 in troopRosterElements) { ___LootedMembers.AddToCounts(troopRosterElement1.Character, -1, false, 0, 0, true, -1); } foreach (TroopRosterElement troopRosterElement2 in troopRosterElements) { if (!troopRosterElement2.Character.IsHero) { partyToReceiveLoot.PrisonRoster.AddToCounts(troopRosterElement2.Character, troopRosterElement2.Number, false, 0, 0, true, -1); } else if (!partyToReceiveLoot.IsMobile) { TakePrisonerAction.Apply(partyToReceiveLoot, troopRosterElement2.Character.HeroObject); } else { TakePrisonerAction.Apply(partyToReceiveLoot, troopRosterElement2.Character.HeroObject); } } ICollection <ItemRosterElement> itemRosterElements = new List <ItemRosterElement>(); for (int j = ___LootedItems.Count <ItemRosterElement>() - 1; j >= 0; j--) { ItemRosterElement elementCopyAtIndex = ___LootedItems.GetElementCopyAtIndex(j); int num = 0; EquipmentElement equipmentElement = elementCopyAtIndex.EquipmentElement; ItemObject item = equipmentElement.Item; equipmentElement = elementCopyAtIndex.EquipmentElement; ItemRosterElement itemRosterElement = new ItemRosterElement(item, 1, equipmentElement.ItemModifier); for (int k = 0; k < elementCopyAtIndex.Amount; k++) { if (MBRandom.RandomFloat < lootAmount) { itemRosterElements.Add(itemRosterElement); num++; } } ___LootedItems.AddToCounts(itemRosterElement.EquipmentElement, -num, true); } partyToReceiveLoot.ItemRoster.Add(itemRosterElements); for (int l = ___LootedPrisoners.Count <TroopRosterElement>() - 1; l >= 0; l--) { int elementNumber = ___LootedPrisoners.GetElementNumber(l); CharacterObject characterAtIndex = ___LootedPrisoners.GetCharacterAtIndex(l); int num1 = 0; for (int m = 0; m < elementNumber; m++) { if (MBRandom.RandomFloat < lootAmount) { partyToReceiveLoot.MemberRoster.AddToCounts(characterAtIndex, 1, false, 0, 0, true, -1); num1++; } } ___LootedPrisoners.AddToCounts(characterAtIndex, -num1, false, 0, 0, true, -1); } ICollection <TroopRosterElement> troopRosterElements1 = new List <TroopRosterElement>(); for (int n = ___CasualtiesInBattle.Count <TroopRosterElement>() - 1; n >= 0; n--) { int elementNumber1 = ___CasualtiesInBattle.GetElementNumber(n); CharacterObject characterObject = ___CasualtiesInBattle.GetCharacterAtIndex(n); int num2 = 0; TroopRosterElement troopRosterElement3 = new TroopRosterElement(characterObject); for (int o = 0; o < elementNumber1; o++) { if (MBRandom.RandomFloat < lootAmount) { troopRosterElements1.Add(troopRosterElement3); num2++; } } ___CasualtiesInBattle.AddToCounts(characterObject, -num2, false, 0, 0, true, -1); } ExplainedNumber explainedNumber = new ExplainedNumber(1f, null); if (winnerParty.MobileParty != null && winnerParty.MobileParty.Leader != null) { //Get the best looter if (winnerParty.MobileParty == MobileParty.MainParty) { SkillHelper.AddSkillBonusForCharacter(DefaultSkills.Roguery, DefaultSkillEffects.RogueryLootBonus, BMHelpers.CharacterHelpers.GetCharacterWithHighestSkill(winnerParty, DefaultSkills.Roguery), ref explainedNumber, true); } else { SkillHelper.AddSkillBonusForCharacter(DefaultSkills.Roguery, DefaultSkillEffects.RogueryLootBonus, winnerParty.MobileParty.Leader, ref explainedNumber, true); } } if (flag) { IEnumerable <ItemRosterElement> itemRosterElements1 = LootCasualties(troopRosterElements1, explainedNumber.ResultNumber, flag); partyToReceiveLoot.ItemRoster.Add(itemRosterElements1); } else if (partyToReceiveLoot.LeaderHero != null) { int gold = ConvertLootToGold(LootCasualties(troopRosterElements1, 0.5f)); gold = MBMath.Round((float)gold * 0.5f * explainedNumber.ResultNumber); GiveGoldAction.ApplyBetweenCharacters(null, partyToReceiveLoot.LeaderHero, gold, false); return(false); } return(false); }
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); }
internal void GiveShareOfLootToParty(PartyBase partyToReceiveLoot, PartyBase winnerParty, float lootAmount) { bool flag = winnerParty == PartyBase.MainParty; List <TroopRosterElement> troopRosterElements = new List <TroopRosterElement>(); foreach (TroopRosterElement lootedMember in this.LootedMembers) { int number = lootedMember.Number; CharacterObject character = lootedMember.Character; for (int i = 0; i < number; i++) { if (MBRandom.RandomFloat < lootAmount) { TroopRosterElement troopRosterElement = new TroopRosterElement(character) { Number = 1, WoundedNumber = 1 }; troopRosterElements.Add(troopRosterElement); } } } foreach (TroopRosterElement troopRosterElement1 in troopRosterElements) { this.LootedMembers.AddToCounts(troopRosterElement1.Character, -1, false, 0, 0, true, -1); } foreach (TroopRosterElement troopRosterElement2 in troopRosterElements) { if (!troopRosterElement2.Character.IsHero) { partyToReceiveLoot.PrisonRoster.AddToCounts(troopRosterElement2.Character, troopRosterElement2.Number, false, 0, 0, true, -1); } else if (!partyToReceiveLoot.IsMobile) { TakePrisonerAction.Apply(partyToReceiveLoot, troopRosterElement2.Character.HeroObject); } else { TakePrisonerAction.Apply(partyToReceiveLoot, troopRosterElement2.Character.HeroObject); } } ICollection <ItemRosterElement> itemRosterElements = new List <ItemRosterElement>(); for (int j = this.LootedItems.Count <ItemRosterElement>() - 1; j >= 0; j--) { ItemRosterElement elementCopyAtIndex = this.LootedItems.GetElementCopyAtIndex(j); int num = 0; EquipmentElement equipmentElement = elementCopyAtIndex.EquipmentElement; ItemObject item = equipmentElement.Item; equipmentElement = elementCopyAtIndex.EquipmentElement; ItemRosterElement itemRosterElement = new ItemRosterElement(item, 1, equipmentElement.ItemModifier); for (int k = 0; k < elementCopyAtIndex.Amount; k++) { if (MBRandom.RandomFloat < lootAmount) { itemRosterElements.Add(itemRosterElement); num++; } } this.LootedItems.AddToCounts(itemRosterElement, -num, true); } partyToReceiveLoot.ItemRoster.Add(itemRosterElements); for (int l = this.LootedPrisoners.Count <TroopRosterElement>() - 1; l >= 0; l--) { int elementNumber = this.LootedPrisoners.GetElementNumber(l); CharacterObject characterAtIndex = this.LootedPrisoners.GetCharacterAtIndex(l); int num1 = 0; for (int m = 0; m < elementNumber; m++) { if (MBRandom.RandomFloat < lootAmount) { partyToReceiveLoot.MemberRoster.AddToCounts(characterAtIndex, 1, false, 0, 0, true, -1); num1++; } } this.LootedPrisoners.AddToCounts(characterAtIndex, -num1, false, 0, 0, true, -1); } ICollection <TroopRosterElement> troopRosterElements1 = new List <TroopRosterElement>(); for (int n = this.CasualtiesInBattle.Count <TroopRosterElement>() - 1; n >= 0; n--) { int elementNumber1 = this.CasualtiesInBattle.GetElementNumber(n); CharacterObject characterObject = this.CasualtiesInBattle.GetCharacterAtIndex(n); int num2 = 0; TroopRosterElement troopRosterElement3 = new TroopRosterElement(characterObject); for (int o = 0; o < elementNumber1; o++) { if (MBRandom.RandomFloat < lootAmount) { troopRosterElements1.Add(troopRosterElement3); num2++; } } this.CasualtiesInBattle.AddToCounts(characterObject, -num2, false, 0, 0, true, -1); } ExplainedNumber explainedNumber = new ExplainedNumber(1f, null); if (winnerParty.MobileParty != null && winnerParty.MobileParty.Leader != null) { SkillHelper.AddSkillBonusForCharacter(DefaultSkills.Roguery, DefaultSkillEffects.RogueryLootBonus, winnerParty.MobileParty.Leader, ref explainedNumber, true); } if (flag) { IEnumerable <ItemRosterElement> itemRosterElements1 = this.LootCasualties(troopRosterElements1, explainedNumber.ResultNumber); partyToReceiveLoot.ItemRoster.Add(itemRosterElements1); } else if (partyToReceiveLoot.LeaderHero != null) { int gold = LootCollector.ConvertLootToGold(this.LootCasualties(troopRosterElements1, 0.5f)); gold = MBMath.Round((float)gold * 0.5f * explainedNumber.ResultNumber); GiveGoldAction.ApplyBetweenCharacters(null, partyToReceiveLoot.LeaderHero, gold, false); return; } }
private static bool Prefix( PartiesBuyHorseCampaignBehavior __instance, MobileParty mobileParty, Settlement settlement, Hero hero) { if (mobileParty != null && !mobileParty.MapFaction.IsAtWarWith(settlement.MapFaction) && (mobileParty != MobileParty.MainParty && mobileParty.IsLordParty) && (mobileParty.LeaderHero != null && !mobileParty.IsDisbanding && settlement.IsTown)) { double currentTime = (double)Campaign.CurrentTime; int num1 = Math.Min(100000, mobileParty.Leader.HeroObject.Gold); int numberOfMounts = mobileParty.Party.NumberOfMounts; if (numberOfMounts > mobileParty.Party.NumberOfRegularMembers) { return(false); } Town component = settlement.GetComponent <Town>(); if (component.MarketData.GetItemCountOfCategory(DefaultItemCategories.Horse) == 0) { return(false); } float averageValue = DefaultItemCategories.Horse.AverageValue; float num2 = averageValue * (float)numberOfMounts / (float)num1; if ((double)num2 < 0.0799999982118607) { float randomFloat1 = MBRandom.RandomFloat; float randomFloat2 = MBRandom.RandomFloat; float randomFloat3 = MBRandom.RandomFloat; float num3 = (0.08f - num2) * (float)num1 * randomFloat1 * randomFloat2 * randomFloat3; if ((double)num3 > (double)(mobileParty.Party.NumberOfRegularMembers - numberOfMounts) * (double)averageValue) { num3 = (float)(mobileParty.Party.NumberOfRegularMembers - numberOfMounts) * averageValue; } Traverse.Create((object)__instance).Method("BuyHorses", new Type[3] { typeof(MobileParty), typeof(Town), typeof(float) }, (object[])null).GetValue((object)mobileParty, (object)component, (object)num3); } } if (mobileParty == null || mobileParty == MobileParty.MainParty || (!mobileParty.IsLordParty || mobileParty.LeaderHero == null) || (mobileParty.IsDisbanding || !settlement.IsTown)) { return(true); } float num4 = 0.0f; EquipmentElement equipmentElement; for (int index = mobileParty.ItemRoster.Count - 1; index >= 0; --index) { ItemRosterElement subject = mobileParty.ItemRoster[index]; equipmentElement = subject.EquipmentElement; if (equipmentElement.Item.IsMountable) { double num1 = (double)num4; int amount = subject.Amount; equipmentElement = subject.EquipmentElement; int num2 = equipmentElement.Item.Value; double num3 = (double)(amount * num2); num4 = (float)(num1 + num3); } else { equipmentElement = subject.EquipmentElement; if (!equipmentElement.Item.IsFood) { SellItemsAction.Apply(mobileParty.Party, settlement.Party, subject, subject.Amount, settlement); } } } float num5 = Math.Min(100000f, (float)mobileParty.LeaderHero.Gold); float num6 = (float)(mobileParty.Party.PartySizeLimit - mobileParty.Party.NumberOfMenWithHorse); if ((double)num4 > (double)num5 * 0.100000001490116) { for (int index = (int)((double)mobileParty.Party.NumberOfMounts - (double)num6); index < 10; ++index) { ItemRosterElement subject = new ItemRosterElement(); int num1 = 0; foreach (ItemRosterElement itemRosterElement in mobileParty.ItemRoster) { equipmentElement = itemRosterElement.EquipmentElement; if (equipmentElement.Item.IsMountable) { equipmentElement = itemRosterElement.EquipmentElement; if (equipmentElement.Item.Value > num1) { equipmentElement = itemRosterElement.EquipmentElement; num1 = equipmentElement.Item.Value; subject = itemRosterElement; } } } if (num1 > 0) { SellItemsAction.Apply(mobileParty.Party, settlement.Party, subject, 1, settlement); num4 -= (float)num1; if ((double)num4 < (double)num5 * 0.100000001490116) { break; } } else { break; } } } return(false); }
private void GetItemPoseAndCamera(ItemObject item, Scene scene, ref Camera camera, ref MatrixFrame itemFrame, ref MatrixFrame itemFrame1, ref MatrixFrame itemFrame2) { if (item.IsCraftedWeapon) { GetItemPoseAndCameraForCraftedItem(item, scene, ref camera, ref itemFrame, ref itemFrame1, ref itemFrame2); return; } string str = ""; bool flag = false; if (item.WeaponComponent != null) { WeaponClass weaponClass = item.WeaponComponent.PrimaryWeapon.WeaponClass; if (weaponClass - WeaponClass.OneHandedSword <= 1) { str = "sword"; flag = true; } } else { ItemObject.ItemTypeEnum type = item.Type; if (type != ItemObject.ItemTypeEnum.HeadArmor) { if (type == ItemObject.ItemTypeEnum.BodyArmor) { str = "armor"; flag = true; } } else { str = "helmet"; flag = true; } } if (item.Type == ItemObject.ItemTypeEnum.Shield) { str = "shield"; flag = true; } if (item.Type == ItemObject.ItemTypeEnum.Crossbow) { str = "crossbow"; flag = true; } if (item.Type == ItemObject.ItemTypeEnum.Bow) { str = "bow"; flag = true; } if (item.Type == ItemObject.ItemTypeEnum.LegArmor) { str = "boot"; flag = true; } if (item.Type == ItemObject.ItemTypeEnum.Horse || item.Type == ItemObject.ItemTypeEnum.HorseHarness) { str = "horse"; flag = true; } if (item.Type == ItemObject.ItemTypeEnum.Cape) { str = "cape"; flag = true; } if (item.Type == ItemObject.ItemTypeEnum.HandArmor) { str = "glove"; flag = true; } if (item.Type == ItemObject.ItemTypeEnum.Arrows) { str = "arrow"; flag = true; } if (item.Type == ItemObject.ItemTypeEnum.Bolts) { str = "bolt"; flag = true; } Game game = Game.Current; if (((game != null) ? game.DefaultItems : null) != null && (item == DefaultItems.IronOre || item == DefaultItems.HardWood || item == DefaultItems.Charcoal || item == DefaultItems.IronIngot1 || item == DefaultItems.IronIngot2 || item == DefaultItems.IronIngot3 || item == DefaultItems.IronIngot4 || item == DefaultItems.IronIngot5 || item == DefaultItems.IronIngot6 || item.ItemCategory == DefaultItemCategories.Silver)) { str = "craftmat"; flag = true; } string tag = str + "_cam"; string tag2 = str + "_frame"; if (flag) { GameEntity gameEntity = scene.FindEntityWithTag(tag); if (gameEntity != null) { camera = Camera.CreateCamera(); Vec3 vec = default(Vec3); gameEntity.GetCameraParamsFromCameraScript(camera, ref vec); } GameEntity gameEntity2 = scene.FindEntityWithTag(tag2); if (gameEntity2 != null) { itemFrame = gameEntity2.GetGlobalFrame(); gameEntity2.SetVisibilityExcludeParents(false); } } else { GameEntity gameEntity3 = scene.FindEntityWithTag("goods_cam"); if (gameEntity3 != null) { camera = Camera.CreateCamera(); Vec3 vec2 = default(Vec3); gameEntity3.GetCameraParamsFromCameraScript(camera, ref vec2); } GameEntity gameEntity4 = scene.FindEntityWithTag("goods_frame"); if (gameEntity4 != null) { itemFrame = gameEntity4.GetGlobalFrame(); gameEntity4.SetVisibilityExcludeParents(false); gameEntity4.UpdateGlobalBounds(); MatrixFrame globalFrame = gameEntity4.GetGlobalFrame(); MetaMesh itemMeshForInventory = new ItemRosterElement(item, 0, null).GetItemMeshForInventory(false); Vec3 vec3 = new Vec3(1000000f, 1000000f, 1000000f, -1f); Vec3 vec4 = new Vec3(-1000000f, -1000000f, -1000000f, -1f); if (itemMeshForInventory != null) { MatrixFrame identity = MatrixFrame.Identity; for (int num = 0; num != itemMeshForInventory.MeshCount; num++) { Vec3 boundingBoxMin = itemMeshForInventory.GetMeshAtIndex(num).GetBoundingBoxMin(); Vec3 boundingBoxMax = itemMeshForInventory.GetMeshAtIndex(num).GetBoundingBoxMax(); Vec3[] array = new Vec3[] { globalFrame.TransformToParent(new Vec3(boundingBoxMin.x, boundingBoxMin.y, boundingBoxMin.z, -1f)), globalFrame.TransformToParent(new Vec3(boundingBoxMin.x, boundingBoxMin.y, boundingBoxMax.z, -1f)), globalFrame.TransformToParent(new Vec3(boundingBoxMin.x, boundingBoxMax.y, boundingBoxMin.z, -1f)), globalFrame.TransformToParent(new Vec3(boundingBoxMin.x, boundingBoxMax.y, boundingBoxMax.z, -1f)), globalFrame.TransformToParent(new Vec3(boundingBoxMax.x, boundingBoxMin.y, boundingBoxMin.z, -1f)), globalFrame.TransformToParent(new Vec3(boundingBoxMax.x, boundingBoxMin.y, boundingBoxMax.z, -1f)), globalFrame.TransformToParent(new Vec3(boundingBoxMax.x, boundingBoxMax.y, boundingBoxMin.z, -1f)), globalFrame.TransformToParent(new Vec3(boundingBoxMax.x, boundingBoxMax.y, boundingBoxMax.z, -1f)) }; for (int i = 0; i < 8; i++) { vec3 = Vec3.Vec3Min(vec3, array[i]); vec4 = Vec3.Vec3Max(vec4, array[i]); } } } Vec3 v = (vec3 + vec4) * 0.5f; Vec3 v2 = gameEntity4.GetGlobalFrame().TransformToLocal(v); MatrixFrame globalFrame2 = gameEntity4.GetGlobalFrame(); globalFrame2.origin -= v2; itemFrame = globalFrame2; MatrixFrame frame = camera.Frame; float f = (vec4 - vec3).Length * 6f; if (item.Type == ItemObject.ItemTypeEnum.Animal) { f = (vec4 - vec3).Length * 3f; } frame.origin += frame.rotation.u * f; camera.Frame = frame; } } if (camera == null) { camera = Camera.CreateCamera(); camera.SetViewVolume(false, -1f, 1f, -0.5f, 0.5f, 0.01f, 100f); MatrixFrame identity2 = MatrixFrame.Identity; identity2.origin -= identity2.rotation.u * 7f; identity2.rotation.u = identity2.rotation.u * -1f; camera.Frame = identity2; } if (item.Type == ItemObject.ItemTypeEnum.Shield) { GameEntity gameEntity5 = scene.FindEntityWithTag(tag); MatrixFrame holsterFrameByIndex = MBItem.GetHolsterFrameByIndex(MBItem.GetItemHolsterIndex(item.ItemHolsters[0])); itemFrame.rotation = holsterFrameByIndex.rotation; MatrixFrame frame2 = itemFrame.TransformToParent(gameEntity5.GetFrame()); camera.Frame = frame2; } }
public void LootStolenGoods(Settlement settlement, int ammountFromProsperity, int goodsQuantity) { try { ItemRoster itemRoster = new ItemRoster(); int lootQuantity = MathF.Ceiling(((float)(ammountFromProsperity * goodsQuantity / 100))); int cheapestAnimalValue = 50; //used to pick the cheapest animal availiable first while (lootQuantity > 0 && settlement.ItemRoster.Count > 0) { int itemSeed = MBRandom.RandomInt(); for (int j = 0; j < settlement.ItemRoster.Count; j++) { ItemRosterElement itemRosterElement = settlement.ItemRoster[(j + itemSeed) % settlement.ItemRoster.Count]; ItemObject item = itemRosterElement.EquipmentElement.Item; if (!itemRosterElement.IsEmpty && lootQuantity > 0) { if (item.IsTradeGood) { int randomAmmount = MBRandom.RandomInt(Math.Min(lootQuantity, itemRosterElement.Amount) - 1) + 1; settlement.ItemRoster.AddToCounts(item, -randomAmmount, true); itemRoster.AddToCounts(item, randomAmmount, true); lootQuantity -= randomAmmount; } else if (item.IsAnimal || item.IsMountable) { if (item.Value <= cheapestAnimalValue) { int randomAmmount = MBRandom.RandomInt(Math.Min(lootQuantity, itemRosterElement.Amount) - 1) + 1; settlement.ItemRoster.AddToCounts(item, -randomAmmount, true); itemRoster.AddToCounts(item, randomAmmount, true); lootQuantity -= randomAmmount; } else { cheapestAnimalValue += 100; } } } } } KleptomaniaSubModule.Log.Info("Stealing | Total number of stolen goods: " + itemRoster.Count.ToString()); if (KleptomaniaSubModule.settings.DebugInfo) { InformationManager.DisplayMessage(new InformationMessage("Total number of stolen goods: " + itemRoster.Count.ToString(), Colors.Yellow)); } InventoryManager.OpenScreenAsLoot(new Dictionary <PartyBase, ItemRoster> { { PartyBase.MainParty, itemRoster } }); } catch (Exception ex) { InformationManager.DisplayMessage(new InformationMessage("Kleptomania: An error occured on LootStolenGoods. Check the Log file.", Colors.Red)); KleptomaniaSubModule.Log.Info("Stealing | Exception in LootStolenGoods: " + ex.Message); } }