Exemple #1
0
        private static void WeaponEquipped(Agent __instance, EquipmentIndex equipmentSlot, ref WeaponData weaponData, WeaponStatsData[] weaponStatsData, ref WeaponData ammoWeaponData, WeaponStatsData[] ammoWeaponStatsData, GameEntity weaponEntity, bool removeOldWeaponFromScene, bool isWieldedOnSpawn)
        {
            if (!__instance.IsHero || !(__instance.Character is CharacterObject hero))
            {
                return;
            }

            if (weaponStatsData != null)
            {
                for (int i = 0; i < weaponStatsData.Length; i++)
                {
                    switch ((WeaponClass)weaponStatsData[i].WeaponClass)
                    {
                    case WeaponClass.Bow:
                        //弓可以在马上用。
                        if (((CharacterObject)__instance.Character).GetPerkValue(DefaultPerks.Bow.MountedArcher) ||
                            ((CharacterObject)__instance.Character).GetPerkValue(DefaultPerks.Riding.BowExpert))
                        {
                            weaponStatsData[i].ItemUsageIndex = MBItem.GetItemUsageIndex("bow");
                        }
                        break;

                    case WeaponClass.Crossbow:
                        //弩可以在马上用。
                        if (((CharacterObject)__instance.Character).GetPerkValue(DefaultPerks.Crossbow.CrossbowCavalry) ||
                            ((CharacterObject)__instance.Character).GetPerkValue(DefaultPerks.Riding.CrossbowExpert))
                        {
                            weaponStatsData[i].WeaponFlags = weaponStatsData[i].WeaponFlags & ~(ulong)WeaponFlags.CantReloadOnHorseback;
                        }
                        break;
                    }
                }
            }
        }
        private static void CallWeaponEquippedPrefix(ref Agent __instance,
                                                     EquipmentIndex equipmentSlot,
                                                     ref WeaponData weaponData,
                                                     ref WeaponStatsData[] weaponStatsData,
                                                     ref WeaponData ammoWeaponData,
                                                     ref WeaponStatsData[] ammoWeaponStatsData,
                                                     ref GameEntity weaponEntity,
                                                     bool removeOldWeaponFromScene,
                                                     bool isWieldedOnSpawn)
        {
            if (weaponStatsData == null)
            {
                return;
            }

            for (var i = 0; i < weaponStatsData.Length; i++)
            {
                var weapon = weaponStatsData[i];
                if (weapon.ItemUsageIndex != MBItem.GetItemUsageIndex("long_bow") ||
                    !HeroHasPerk(__instance.Character, _bowExpert))
                {
                    continue;
                }

                var updatedWeapon = weapon;
                updatedWeapon.ItemUsageIndex = MBItem.GetItemUsageIndex("bow");
                weaponStatsData[i]           = updatedWeapon;
            }
        }
Exemple #3
0
 public static ItemObject.ItemUsageSetFlags GetItemUsageSetFlag(WeaponComponentData item)
 {
     if (!string.IsNullOrEmpty(item.ItemUsage))
     {
         return(MBItem.GetItemUsageSetFlags(item.ItemUsage));
     }
     return((ItemObject.ItemUsageSetFlags) 0);
 }
Exemple #4
0
        internal static bool IsWeaponCouchable(ItemObject weapon)
        {
            bool flag = false;

            using (IEnumerator <WeaponComponentData> enumerator = weapon.Weapons.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    if (!MBItem.GetItemIsPassiveUsage(enumerator.Current.ItemUsage))
                    {
                        continue;
                    }
                    flag = true;
                    break;
                }
            }
            return(flag);
        }
Exemple #5
0
 protected override void Apply(Agent __instance,
                               EquipmentIndex equipmentSlot,
                               ref WeaponData weaponData,
                               ref WeaponStatsData[] weaponStatsData,
                               ref WeaponData ammoWeaponData,
                               ref WeaponStatsData[] ammoWeaponStatsData,
                               GameEntity weaponEntity)
 {
     for (var i = 0; i < (weaponStatsData?.Length ?? 0); i++)
     {
         var weapon = weaponStatsData[i];
         if (weapon.ItemUsageIndex == MBItem.GetItemUsageIndex("long_bow") && HeroHasPerk(__instance.Character, MountedArcher))
         {
             var updatedWeapon = weapon;
             updatedWeapon.ItemUsageIndex = MBItem.GetItemUsageIndex("bow");
             weaponStatsData[i]           = updatedWeapon;
         }
     }
 }
Exemple #6
0
 private ItemObject.ItemUsageSetFlags GetItemUsageSetFlag(WeaponComponentData item)
 {
     return(!string.IsNullOrEmpty(item.ItemUsage) ? MBItem.GetItemUsageSetFlags(item.ItemUsage) : (ItemObject.ItemUsageSetFlags) 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;
			}
		}