public SpellFailedReason CheckItemRestrictions(Item usedItem, PlayerInventory inv) { if (RequiredItemClass != ItemClass.None) { if (EquipmentSlot != EquipmentSlot.End) { usedItem = inv[EquipmentSlot]; } if (usedItem == null) { return SpellFailedReason.EquippedItem; } if (RequiredItemClass > 0) { if (usedItem.Template.Class != RequiredItemClass) { return SpellFailedReason.EquippedItemClass; } if (RequiredItemSubClassMask > 0 && !usedItem.Template.SubClassMask.HasAnyFlag(RequiredItemSubClassMask)) { return SpellFailedReason.EquippedItemClass; } } } if (RequiredItemInventorySlotMask != InventorySlotTypeMask.None) { if (usedItem != null && (usedItem.Template.InventorySlotMask & RequiredItemInventorySlotMask) == 0) // don't use Enum.HasFlag! { return SpellFailedReason.EquippedItemClass; } } // check for special tools if (RequiredTools != null) { foreach (var tool in RequiredTools) { if (!inv.Contains(tool.Id, 1, false)) { return SpellFailedReason.ItemNotFound; } } } if (RequiredTotemCategories.Length > 0) { // Required totem category refers to tools that are required during the spell if (!inv.CheckTotemCategories(RequiredTotemCategories)) { return SpellFailedReason.TotemCategory; } } // check for whether items must be equipped if (EquipmentSlot != EquipmentSlot.End) { var item = inv[EquipmentSlot]; if (item == null) { return SpellFailedReason.EquippedItem; } if (AttributesExC.HasFlag(SpellAttributesExC.RequiresWand) && item.Template.SubClass != ItemSubClass.WeaponWand) { return SpellFailedReason.EquippedItem; } if (AttributesExC.HasFlag(SpellAttributesExC.ShootRangedWeapon) && !item.Template.IsRangedWeapon) { return SpellFailedReason.EquippedItem; } } return SpellFailedReason.Ok; }
public SpellFailedReason CheckGeneralItemRestrictions(PlayerInventory inv) { // check for special tools if (RequiredTools != null) { foreach (var tool in RequiredTools) { if (!inv.Contains(tool.Id, 1, false)) { return SpellFailedReason.ItemNotFound; } } } if (RequiredTotemCategories.Length > 0) { // Required totem category refers to tools that are required during the spell if (!inv.CheckTotemCategories(RequiredTotemCategories)) { return SpellFailedReason.TotemCategory; } } // check for whether items must be equipped if (EquipmentSlot != EquipmentSlot.End) { var item = inv[EquipmentSlot]; if (item == null) { return SpellFailedReason.EquippedItem; } if (AttributesExC.HasFlag(SpellAttributesExC.RequiresWand) && item.Template.SubClass != ItemSubClass.WeaponWand) { return SpellFailedReason.EquippedItem; } if (AttributesExC.HasFlag(SpellAttributesExC.ShootRangedWeapon) && !item.Template.IsRangedWeapon) { return SpellFailedReason.EquippedItem; } } return SpellFailedReason.Ok; }