Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
 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);
             }
         }
     }
 }
Ejemplo n.º 4
0
        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());
                    }
                }
            }
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 7
0
 // 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);
        }
Ejemplo n.º 9
0
 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);
                 }
             }
         }
     }
 }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
 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);
     }
 }
Ejemplo n.º 12
0
		// 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;
		}
Ejemplo n.º 13
0
        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);
        }
Ejemplo n.º 14
0
        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);
        }
Ejemplo n.º 15
0
        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);
        }
Ejemplo n.º 16
0
        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);
        }
Ejemplo n.º 18
0
        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);
            }
        }