Core/Items: implement some helper methods for easier readability

Port From (https://github.com/TrinityCore/TrinityCore/commit/9124fd1f1fafea19b118eb69c6a35f94376fc7e8)
This commit is contained in:
hondacrx
2022-01-06 10:57:06 -05:00
parent 8f8cd4a7d4
commit 6e0becd106
23 changed files with 105 additions and 100 deletions
@@ -440,7 +440,7 @@ namespace Game.Entities
public bool IgnoreFiltering; public bool IgnoreFiltering;
//helpers //helpers
public bool IsGoldRequired(ItemTemplate pProto) { return Convert.ToBoolean(pProto.GetFlags2() & ItemFlags2.DontIgnoreBuyPrice) || ExtendedCost == 0; } public bool IsGoldRequired(ItemTemplate pProto) { return pProto.HasFlag(ItemFlags2.DontIgnoreBuyPrice) || ExtendedCost == 0; }
} }
public class VendorItemData public class VendorItemData
+19 -16
View File
@@ -191,7 +191,7 @@ namespace Game.Entities
DB.Characters.Execute(stmt); DB.Characters.Execute(stmt);
if ((uState == ItemUpdateState.Changed) && HasItemFlag(ItemFieldFlags.Wrapped)) if ((uState == ItemUpdateState.Changed) && IsWrapped())
{ {
stmt = DB.Characters.GetPreparedStatement(CharStatements.UPD_GIFT_OWNER); stmt = DB.Characters.GetPreparedStatement(CharStatements.UPD_GIFT_OWNER);
stmt.AddValue(0, GetOwnerGUID().GetCounter()); stmt.AddValue(0, GetOwnerGUID().GetCounter());
@@ -372,7 +372,7 @@ namespace Game.Entities
stmt.AddValue(0, GetGUID().GetCounter()); stmt.AddValue(0, GetGUID().GetCounter());
trans.Append(stmt); trans.Append(stmt);
if (HasItemFlag(ItemFieldFlags.Wrapped)) if (IsWrapped())
{ {
stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_GIFT); stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_GIFT);
stmt.AddValue(0, GetGUID().GetCounter()); stmt.AddValue(0, GetGUID().GetCounter());
@@ -446,7 +446,7 @@ namespace Game.Entities
SetUpdateFieldValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.MaxDurability), proto.MaxDurability); SetUpdateFieldValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.MaxDurability), proto.MaxDurability);
// do not overwrite durability for wrapped items // do not overwrite durability for wrapped items
if (durability > proto.MaxDurability && !HasItemFlag(ItemFieldFlags.Wrapped)) if (durability > proto.MaxDurability && !IsWrapped())
{ {
SetDurability(proto.MaxDurability); SetDurability(proto.MaxDurability);
need_save = true; need_save = true;
@@ -805,7 +805,7 @@ namespace Game.Entities
if (m_lootGenerated) if (m_lootGenerated)
return false; return false;
if ((!mail || !IsBoundAccountWide()) && (IsSoulBound() && (!HasItemFlag(ItemFieldFlags.BopTradeable) || !trade))) if ((!mail || !IsBoundAccountWide()) && (IsSoulBound() && (!IsBOPTradeable() || !trade)))
return false; return false;
if (IsBag() && (Player.IsBagPos(GetPos()) || !ToBag().IsEmpty())) if (IsBag() && (Player.IsBagPos(GetPos()) || !ToBag().IsEmpty()))
@@ -924,7 +924,7 @@ namespace Game.Entities
bool isEnchantSpell = spellInfo.HasEffect(SpellEffectName.EnchantItem) || spellInfo.HasEffect(SpellEffectName.EnchantItemTemporary) || spellInfo.HasEffect(SpellEffectName.EnchantItemPrismatic); bool isEnchantSpell = spellInfo.HasEffect(SpellEffectName.EnchantItem) || spellInfo.HasEffect(SpellEffectName.EnchantItemTemporary) || spellInfo.HasEffect(SpellEffectName.EnchantItemPrismatic);
if ((int)spellInfo.EquippedItemClass != -1) // -1 == any item class if ((int)spellInfo.EquippedItemClass != -1) // -1 == any item class
{ {
if (isEnchantSpell && proto.GetFlags3().HasAnyFlag(ItemFlags3.CanStoreEnchants)) if (isEnchantSpell && proto.HasFlag(ItemFlags3.CanStoreEnchants))
return true; return true;
if (spellInfo.EquippedItemClass != proto.GetClass()) if (spellInfo.EquippedItemClass != proto.GetClass())
@@ -1209,7 +1209,7 @@ namespace Game.Entities
if (GetOwnerGUID() == player.GetGUID()) if (GetOwnerGUID() == player.GetGUID())
return false; return false;
if (HasItemFlag(ItemFieldFlags.BopTradeable)) if (IsBOPTradeable())
if (allowedGUIDs.Contains(player.GetGUID())) if (allowedGUIDs.Contains(player.GetGUID()))
return false; return false;
@@ -1355,7 +1355,7 @@ namespace Game.Entities
public void SetNotRefundable(Player owner, bool changestate = true, SQLTransaction trans = null, bool addToCollection = true) public void SetNotRefundable(Player owner, bool changestate = true, SQLTransaction trans = null, bool addToCollection = true)
{ {
if (!HasItemFlag(ItemFieldFlags.Refundable)) if (!IsRefundable())
return; return;
ItemExpirePurchaseRefund itemExpirePurchaseRefund = new(); ItemExpirePurchaseRefund itemExpirePurchaseRefund = new();
@@ -1458,7 +1458,7 @@ namespace Game.Entities
if (proto.GetClass() == ItemClass.Weapon && proto.GetSubClass() == (uint)ItemSubClassWeapon.FishingPole) if (proto.GetClass() == ItemClass.Weapon && proto.GetSubClass() == (uint)ItemSubClassWeapon.FishingPole)
return false; return false;
if (proto.GetFlags2().HasAnyFlag(ItemFlags2.NoAlterItemVisual)) if (proto.HasFlag(ItemFlags2.NoAlterItemVisual))
return false; return false;
if (!HasStats()) if (!HasStats())
@@ -1614,7 +1614,7 @@ namespace Game.Entities
{ {
standardPrice = true; standardPrice = true;
if (proto.GetFlags2().HasAnyFlag(ItemFlags2.OverrideGoldCost)) if (proto.HasFlag(ItemFlags2.OverrideGoldCost))
return proto.GetBuyPrice(); return proto.GetBuyPrice();
var qualityPrice = CliDB.ImportPriceQualityStorage.LookupByKey(quality + 1); var qualityPrice = CliDB.ImportPriceQualityStorage.LookupByKey(quality + 1);
@@ -1746,7 +1746,7 @@ namespace Game.Entities
public static uint GetSellPrice(ItemTemplate proto, uint quality, uint itemLevel) public static uint GetSellPrice(ItemTemplate proto, uint quality, uint itemLevel)
{ {
if (proto.GetFlags2().HasAnyFlag(ItemFlags2.OverrideGoldCost)) if (proto.HasFlag(ItemFlags2.OverrideGoldCost))
return proto.GetSellPrice(); return proto.GetSellPrice();
bool standardPrice; bool standardPrice;
@@ -1772,7 +1772,7 @@ namespace Game.Entities
ItemTemplate itemTemplate = GetTemplate(); ItemTemplate itemTemplate = GetTemplate();
uint minItemLevel = owner.m_unitData.MinItemLevel; uint minItemLevel = owner.m_unitData.MinItemLevel;
uint minItemLevelCutoff = owner.m_unitData.MinItemLevelCutoff; uint minItemLevelCutoff = owner.m_unitData.MinItemLevelCutoff;
uint maxItemLevel = itemTemplate.GetFlags3().HasAnyFlag(ItemFlags3.IgnoreItemLevelCapInPvp) ? 0u : owner.m_unitData.MaxItemLevel; uint maxItemLevel = itemTemplate.HasFlag(ItemFlags3.IgnoreItemLevelCapInPvp) ? 0u : owner.m_unitData.MaxItemLevel;
bool pvpBonus = owner.IsUsingPvpItemLevels(); bool pvpBonus = owner.IsUsingPvpItemLevels();
uint azeriteLevel = 0; uint azeriteLevel = 0;
@@ -1867,7 +1867,7 @@ namespace Game.Entities
public static ItemDisenchantLootRecord GetDisenchantLoot(ItemTemplate itemTemplate, uint quality, uint itemLevel) public static ItemDisenchantLootRecord GetDisenchantLoot(ItemTemplate itemTemplate, uint quality, uint itemLevel)
{ {
if (itemTemplate.GetFlags().HasAnyFlag(ItemFlags.Conjured | ItemFlags.NoDisenchant) || itemTemplate.GetBonding() == ItemBondingType.Quest) if (itemTemplate.HasFlag(ItemFlags.Conjured) || itemTemplate.HasFlag(ItemFlags.NoDisenchant) || itemTemplate.GetBonding() == ItemBondingType.Quest)
return null; return null;
if (itemTemplate.GetArea(0) != 0 || itemTemplate.GetArea(1) != 0 || itemTemplate.GetMap() != 0 || itemTemplate.GetMaxStackSize() > 1) if (itemTemplate.GetArea(0) != 0 || itemTemplate.GetArea(1) != 0 || itemTemplate.GetMap() != 0 || itemTemplate.GetMaxStackSize() > 1)
@@ -2501,8 +2501,8 @@ namespace Game.Entities
} }
public bool IsSoulBound() { return HasItemFlag(ItemFieldFlags.Soulbound); } public bool IsSoulBound() { return HasItemFlag(ItemFieldFlags.Soulbound); }
public bool IsBoundAccountWide() { return GetTemplate().GetFlags().HasAnyFlag(ItemFlags.IsBoundToAccount); } public bool IsBoundAccountWide() { return GetTemplate().HasFlag(ItemFlags.IsBoundToAccount); }
public bool IsBattlenetAccountBound() { return GetTemplate().GetFlags2().HasAnyFlag(ItemFlags2.BnetAccountTradeOk); } public bool IsBattlenetAccountBound() { return GetTemplate().HasFlag(ItemFlags2.BnetAccountTradeOk); }
public bool HasItemFlag(ItemFieldFlags flag) { return (m_itemData.DynamicFlags & (uint)flag) != 0; } public bool HasItemFlag(ItemFieldFlags flag) { return (m_itemData.DynamicFlags & (uint)flag) != 0; }
public void AddItemFlag(ItemFieldFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.DynamicFlags), (uint)flags); } public void AddItemFlag(ItemFieldFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.DynamicFlags), (uint)flags); }
@@ -2517,6 +2517,9 @@ namespace Game.Entities
public AzeriteItem ToAzeriteItem() { return IsAzeriteItem() ? this as AzeriteItem : null; } public AzeriteItem ToAzeriteItem() { return IsAzeriteItem() ? this as AzeriteItem : null; }
public AzeriteEmpoweredItem ToAzeriteEmpoweredItem() { return IsAzeriteEmpoweredItem() ? this as AzeriteEmpoweredItem : null; } public AzeriteEmpoweredItem ToAzeriteEmpoweredItem() { return IsAzeriteEmpoweredItem() ? this as AzeriteEmpoweredItem : null; }
public bool IsRefundable() { return HasItemFlag(ItemFieldFlags.Refundable); }
public bool IsBOPTradeable() { return HasItemFlag(ItemFieldFlags.BopTradeable); }
public bool IsWrapped() { return HasItemFlag(ItemFieldFlags.Wrapped); }
public bool IsLocked() { return !HasItemFlag(ItemFieldFlags.Unlocked); } public bool IsLocked() { return !HasItemFlag(ItemFieldFlags.Unlocked); }
public bool IsBag() { return GetTemplate().GetInventoryType() == InventoryType.Bag; } public bool IsBag() { return GetTemplate().GetInventoryType() == InventoryType.Bag; }
public bool IsAzeriteItem() { return GetTypeId() == TypeId.AzeriteItem; } public bool IsAzeriteItem() { return GetTypeId() == TypeId.AzeriteItem; }
@@ -2784,8 +2787,8 @@ namespace Game.Entities
for (int i = EffectCount; i < Effects.Length; ++i) for (int i = EffectCount; i < Effects.Length; ++i)
Effects[i] = null; Effects[i] = null;
CanDisenchant = !proto.GetFlags().HasAnyFlag(ItemFlags.NoDisenchant); CanDisenchant = !proto.HasFlag(ItemFlags.NoDisenchant);
CanScrap = proto.GetFlags4().HasAnyFlag(ItemFlags4.Scrapable); CanScrap = proto.HasFlag(ItemFlags4.Scrapable);
_state.SuffixPriority = int.MaxValue; _state.SuffixPriority = int.MaxValue;
_state.AppearanceModPriority = int.MaxValue; _state.AppearanceModPriority = int.MaxValue;
+14 -12
View File
@@ -45,9 +45,15 @@ namespace Game.Entities
return GetMaxStackSize() == 1 && return GetMaxStackSize() == 1 &&
GetClass() != ItemClass.Consumable && GetClass() != ItemClass.Consumable &&
GetClass() != ItemClass.Quest && GetClass() != ItemClass.Quest &&
!GetFlags().HasFlag(ItemFlags.NoCreator) && !HasFlag(ItemFlags.NoCreator) &&
GetId() != 6948; /*Hearthstone*/ GetId() != 6948; /*Hearthstone*/
} }
public bool HasFlag(ItemFlags flag) { return (ExtendedData.Flags[0] & (int)flag) != 0; }
public bool HasFlag(ItemFlags2 flag) { return (ExtendedData.Flags[1] & (int)flag) != 0; }
public bool HasFlag(ItemFlags3 flag) { return (ExtendedData.Flags[2] & (int)flag) != 0; }
public bool HasFlag(ItemFlags4 flag) { return (ExtendedData.Flags[3] & (int)flag) != 0; }
public bool HasFlag(ItemFlagsCustom customFlag) { return (FlagsCu & customFlag) != 0; }
public bool CanChangeEquipStateInCombat() public bool CanChangeEquipStateInCombat()
{ {
@@ -180,7 +186,7 @@ namespace Game.Entities
dps = CliDB.ItemDamageAmmoStorage.LookupByKey(itemLevel).Quality[(int)quality]; dps = CliDB.ItemDamageAmmoStorage.LookupByKey(itemLevel).Quality[(int)quality];
break; break;
case InventoryType.Weapon2Hand: case InventoryType.Weapon2Hand:
if (GetFlags2().HasAnyFlag(ItemFlags2.CasterWeapon)) if (HasFlag(ItemFlags2.CasterWeapon))
dps = CliDB.ItemDamageTwoHandCasterStorage.LookupByKey(itemLevel).Quality[(int)quality]; dps = CliDB.ItemDamageTwoHandCasterStorage.LookupByKey(itemLevel).Quality[(int)quality];
else else
dps = CliDB.ItemDamageTwoHandStorage.LookupByKey(itemLevel).Quality[(int)quality]; dps = CliDB.ItemDamageTwoHandStorage.LookupByKey(itemLevel).Quality[(int)quality];
@@ -196,7 +202,7 @@ namespace Game.Entities
case ItemSubClassWeapon.Bow: case ItemSubClassWeapon.Bow:
case ItemSubClassWeapon.Gun: case ItemSubClassWeapon.Gun:
case ItemSubClassWeapon.Crossbow: case ItemSubClassWeapon.Crossbow:
if (GetFlags2().HasAnyFlag(ItemFlags2.CasterWeapon)) if (HasFlag(ItemFlags2.CasterWeapon))
dps = CliDB.ItemDamageTwoHandCasterStorage.LookupByKey(itemLevel).Quality[(int)quality]; dps = CliDB.ItemDamageTwoHandCasterStorage.LookupByKey(itemLevel).Quality[(int)quality];
else else
dps = CliDB.ItemDamageTwoHandStorage.LookupByKey(itemLevel).Quality[(int)quality]; dps = CliDB.ItemDamageTwoHandStorage.LookupByKey(itemLevel).Quality[(int)quality];
@@ -208,7 +214,7 @@ namespace Game.Entities
case InventoryType.Weapon: case InventoryType.Weapon:
case InventoryType.WeaponMainhand: case InventoryType.WeaponMainhand:
case InventoryType.WeaponOffhand: case InventoryType.WeaponOffhand:
if (GetFlags2().HasAnyFlag(ItemFlags2.CasterWeapon)) if (HasFlag(ItemFlags2.CasterWeapon))
dps = CliDB.ItemDamageOneHandCasterStorage.LookupByKey(itemLevel).Quality[(int)quality]; dps = CliDB.ItemDamageOneHandCasterStorage.LookupByKey(itemLevel).Quality[(int)quality];
else else
dps = CliDB.ItemDamageOneHandStorage.LookupByKey(itemLevel).Quality[(int)quality]; dps = CliDB.ItemDamageOneHandStorage.LookupByKey(itemLevel).Quality[(int)quality];
@@ -234,7 +240,7 @@ namespace Game.Entities
public bool IsUsableByLootSpecialization(Player player, bool alwaysAllowBoundToAccount) public bool IsUsableByLootSpecialization(Player player, bool alwaysAllowBoundToAccount)
{ {
if (GetFlags().HasAnyFlag(ItemFlags.IsBoundToAccount) && alwaysAllowBoundToAccount) if (HasFlag(ItemFlags.IsBoundToAccount) && alwaysAllowBoundToAccount)
return true; return true;
uint spec = player.GetLootSpecId(); uint spec = player.GetLootSpecId();
@@ -265,10 +271,6 @@ namespace Game.Entities
public ItemClass GetClass() { return (ItemClass)BasicData.ClassID; } public ItemClass GetClass() { return (ItemClass)BasicData.ClassID; }
public uint GetSubClass() { return BasicData.SubclassID; } public uint GetSubClass() { return BasicData.SubclassID; }
public ItemQuality GetQuality() { return (ItemQuality)ExtendedData.OverallQualityID; } public ItemQuality GetQuality() { return (ItemQuality)ExtendedData.OverallQualityID; }
public ItemFlags GetFlags() { return (ItemFlags)ExtendedData.Flags[0]; }
public ItemFlags2 GetFlags2() { return (ItemFlags2)ExtendedData.Flags[1]; }
public ItemFlags3 GetFlags3() { return (ItemFlags3)ExtendedData.Flags[2]; }
public ItemFlags4 GetFlags4() { return (ItemFlags4)ExtendedData.Flags[3]; }
public uint GetOtherFactionItemId() { return ExtendedData.FactionRelated; } public uint GetOtherFactionItemId() { return ExtendedData.FactionRelated; }
public float GetPriceRandomValue() { return ExtendedData.PriceRandomValue; } public float GetPriceRandomValue() { return ExtendedData.PriceRandomValue; }
public float GetPriceVariance() { return ExtendedData.PriceVariance; } public float GetPriceVariance() { return ExtendedData.PriceVariance; }
@@ -327,9 +329,9 @@ namespace Game.Entities
} }
public bool IsPotion() { return GetClass() == ItemClass.Consumable && GetSubClass() == (uint)ItemSubClassConsumable.Potion; } public bool IsPotion() { return GetClass() == ItemClass.Consumable && GetSubClass() == (uint)ItemSubClassConsumable.Potion; }
public bool IsVellum() { return GetFlags3().HasAnyFlag(ItemFlags3.CanStoreEnchants); } public bool IsVellum() { return HasFlag(ItemFlags3.CanStoreEnchants); }
public bool IsConjuredConsumable() { return GetClass() == ItemClass.Consumable && GetFlags().HasAnyFlag(ItemFlags.Conjured); } public bool IsConjuredConsumable() { return GetClass() == ItemClass.Consumable && HasFlag(ItemFlags.Conjured); }
public bool IsCraftingReagent() { return GetFlags2().HasAnyFlag(ItemFlags2.UsedInATradeskill); } public bool IsCraftingReagent() { return HasFlag(ItemFlags2.UsedInATradeskill); }
public bool IsWeapon() { return GetClass() == ItemClass.Weapon; } public bool IsWeapon() { return GetClass() == ItemClass.Weapon; }
@@ -599,7 +599,7 @@ namespace Game.Entities
if (!CanAddAppearance(itemModifiedAppearance)) if (!CanAddAppearance(itemModifiedAppearance))
return; return;
if (item.HasItemFlag(ItemFieldFlags.BopTradeable | ItemFieldFlags.Refundable)) if (item.IsBOPTradeable() || item.IsRefundable())
{ {
AddTemporaryAppearance(item.GetGUID(), itemModifiedAppearance); AddTemporaryAppearance(item.GetGUID(), itemModifiedAppearance);
return; return;
@@ -638,7 +638,7 @@ namespace Game.Entities
if (_owner.GetPlayer().CanUseItem(itemTemplate) != InventoryResult.Ok) if (_owner.GetPlayer().CanUseItem(itemTemplate) != InventoryResult.Ok)
return false; return false;
if (itemTemplate.GetFlags2().HasAnyFlag(ItemFlags2.NoSourceForItemVisual) || itemTemplate.GetQuality() == ItemQuality.Artifact) if (itemTemplate.HasFlag(ItemFlags2.NoSourceForItemVisual) || itemTemplate.GetQuality() == ItemQuality.Artifact)
return false; return false;
switch (itemTemplate.GetClass()) switch (itemTemplate.GetClass())
@@ -691,7 +691,7 @@ namespace Game.Entities
} }
if (itemTemplate.GetQuality() < ItemQuality.Uncommon) if (itemTemplate.GetQuality() < ItemQuality.Uncommon)
if (!itemTemplate.GetFlags2().HasAnyFlag(ItemFlags2.IgnoreQualityForItemVisualSource) || !itemTemplate.GetFlags3().HasAnyFlag(ItemFlags3.ActsAsTransmogHiddenVisualOption)) if (!itemTemplate.HasFlag(ItemFlags2.IgnoreQualityForItemVisualSource) || !itemTemplate.HasFlag(ItemFlags3.ActsAsTransmogHiddenVisualOption))
return false; return false;
if (itemModifiedAppearance.Id < _appearances.Count && _appearances.Get((int)itemModifiedAppearance.Id)) if (itemModifiedAppearance.Id < _appearances.Count && _appearances.Get((int)itemModifiedAppearance.Id))
+5 -5
View File
@@ -232,13 +232,13 @@ namespace Game.Entities
remove = true; remove = true;
} }
// "Conjured items disappear if you are logged out for more than 15 minutes" // "Conjured items disappear if you are logged out for more than 15 minutes"
else if (timeDiff > 15 * Time.Minute && proto.GetFlags().HasAnyFlag(ItemFlags.Conjured)) else if (timeDiff > 15 * Time.Minute && proto.HasFlag(ItemFlags.Conjured))
{ {
Log.outDebug(LogFilter.Player, "LoadInventory: player (GUID: {0}, name: {1}, diff: {2}) has conjured item (GUID: {3}, entry: {4}) with expired lifetime (15 minutes). Deleting item.", Log.outDebug(LogFilter.Player, "LoadInventory: player (GUID: {0}, name: {1}, diff: {2}) has conjured item (GUID: {3}, entry: {4}) with expired lifetime (15 minutes). Deleting item.",
GetGUID().ToString(), GetName(), timeDiff, item.GetGUID().ToString(), item.GetEntry()); GetGUID().ToString(), GetName(), timeDiff, item.GetGUID().ToString(), item.GetEntry());
remove = true; remove = true;
} }
if (item.HasItemFlag(ItemFieldFlags.Refundable)) if (item.IsRefundable())
{ {
if (item.GetPlayedTime() > (2 * Time.Hour)) if (item.GetPlayedTime() > (2 * Time.Hour))
{ {
@@ -272,7 +272,7 @@ namespace Game.Entities
} }
} }
} }
else if (item.HasItemFlag(ItemFieldFlags.BopTradeable)) else if (item.IsBOPTradeable())
{ {
stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_ITEM_BOP_TRADE); stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_ITEM_BOP_TRADE);
stmt.AddValue(0, item.GetGUID().ToString()); stmt.AddValue(0, item.GetGUID().ToString());
@@ -1590,7 +1590,7 @@ namespace Game.Entities
if (item.GetState() == ItemUpdateState.New) if (item.GetState() == ItemUpdateState.New)
{ {
if (itemTemplate != null) if (itemTemplate != null)
if (itemTemplate.GetFlags().HasAnyFlag(ItemFlags.HasLoot)) if (itemTemplate.HasFlag(ItemFlags.HasLoot))
Global.LootItemStorage.RemoveStoredLootForContainer(item.GetGUID().GetCounter()); Global.LootItemStorage.RemoveStoredLootForContainer(item.GetGUID().GetCounter());
continue; continue;
@@ -1601,7 +1601,7 @@ namespace Game.Entities
m_items[i].FSetState(ItemUpdateState.New); m_items[i].FSetState(ItemUpdateState.New);
if (itemTemplate != null) if (itemTemplate != null)
if (itemTemplate.GetFlags().HasAnyFlag(ItemFlags.HasLoot)) if (itemTemplate.HasFlag(ItemFlags.HasLoot))
Global.LootItemStorage.RemoveStoredLootForContainer(item.GetGUID().GetCounter()); Global.LootItemStorage.RemoveStoredLootForContainer(item.GetGUID().GetCounter());
} }
+16 -16
View File
@@ -47,7 +47,7 @@ namespace Game.Entities
} }
public void RefundItem(Item item) public void RefundItem(Item item)
{ {
if (!item.HasItemFlag(ItemFieldFlags.Refundable)) if (!item.IsRefundable())
{ {
Log.outDebug(LogFilter.Player, "Item refund: item not refundable!"); Log.outDebug(LogFilter.Player, "Item refund: item not refundable!");
return; return;
@@ -152,7 +152,7 @@ namespace Game.Entities
// This function call unsets ITEM_FLAGS_REFUNDABLE if played time is over 2 hours. // This function call unsets ITEM_FLAGS_REFUNDABLE if played time is over 2 hours.
item.UpdatePlayedTime(this); item.UpdatePlayedTime(this);
if (!item.HasItemFlag(ItemFieldFlags.Refundable)) if (!item.IsRefundable())
{ {
Log.outDebug(LogFilter.Player, "Item refund: item not refundable!"); Log.outDebug(LogFilter.Player, "Item refund: item not refundable!");
return; return;
@@ -1453,13 +1453,13 @@ namespace Game.Entities
if (proto == null) if (proto == null)
return InventoryResult.ItemNotFound; return InventoryResult.ItemNotFound;
if (proto.GetFlags2().HasAnyFlag(ItemFlags2.InternalItem)) if (proto.HasFlag(ItemFlags2.InternalItem))
return InventoryResult.CantEquipEver; return InventoryResult.CantEquipEver;
if (Convert.ToBoolean(proto.GetFlags2() & ItemFlags2.FactionHorde) && GetTeam() != Team.Horde) if (proto.HasFlag(ItemFlags2.FactionHorde) && GetTeam() != Team.Horde)
return InventoryResult.CantEquipEver; return InventoryResult.CantEquipEver;
if (Convert.ToBoolean(proto.GetFlags2() & ItemFlags2.FactionAlliance) && GetTeam() != Team.Alliance) if (proto.HasFlag(ItemFlags2.FactionAlliance) && GetTeam() != Team.Alliance)
return InventoryResult.CantEquipEver; return InventoryResult.CantEquipEver;
if ((proto.GetAllowableClass() & GetClassMask()) == 0 || (proto.GetAllowableRace() & (long)SharedConst.GetMaskForRace(GetRace())) == 0) if ((proto.GetAllowableClass() & GetClassMask()) == 0 || (proto.GetAllowableRace() & (long)SharedConst.GetMaskForRace(GetRace())) == 0)
@@ -2469,7 +2469,7 @@ namespace Game.Entities
if (!bStore) if (!bStore)
AutoUnequipOffhandIfNeed(); AutoUnequipOffhandIfNeed();
if (pProto.GetFlags().HasAnyFlag(ItemFlags.ItemPurchaseRecord) && crItem.ExtendedCost != 0 && pProto.GetMaxStackSize() == 1) if (pProto.HasFlag(ItemFlags.ItemPurchaseRecord) && crItem.ExtendedCost != 0 && pProto.GetMaxStackSize() == 1)
{ {
it.AddItemFlag(ItemFieldFlags.Refundable); it.AddItemFlag(ItemFieldFlags.Refundable);
it.SetRefundRecipient(GetGUID()); it.SetRefundRecipient(GetGUID());
@@ -2542,7 +2542,7 @@ namespace Game.Entities
foreach (var item in m_itemDuration) foreach (var item in m_itemDuration)
{ {
if (!realtimeonly || item.GetTemplate().GetFlags().HasAnyFlag(ItemFlags.RealDuration)) if (!realtimeonly || item.GetTemplate().HasFlag(ItemFlags.RealDuration))
item.UpdateDuration(this, time); item.UpdateDuration(this, time);
} }
} }
@@ -3220,7 +3220,7 @@ namespace Game.Entities
return false; return false;
} }
if (!IsGameMaster() && ((pProto.GetFlags2().HasAnyFlag(ItemFlags2.FactionHorde) && GetTeam() == Team.Alliance) || (pProto.GetFlags2().HasAnyFlag(ItemFlags2.FactionAlliance) && GetTeam() == Team.Horde))) if (!IsGameMaster() && ((pProto.HasFlag(ItemFlags2.FactionHorde) && GetTeam() == Team.Alliance) || (pProto.HasFlag(ItemFlags2.FactionAlliance) && GetTeam() == Team.Horde)))
return false; return false;
Creature creature = GetNPCIfCanInteractWith(vendorguid, NPCFlags.Vendor, NPCFlags2.None); Creature creature = GetNPCIfCanInteractWith(vendorguid, NPCFlags.Vendor, NPCFlags2.None);
@@ -3478,7 +3478,7 @@ namespace Game.Entities
{ {
ItemTemplate itemTemplate = pItem.GetTemplate(); ItemTemplate itemTemplate = pItem.GetTemplate();
if (itemTemplate != null) if (itemTemplate != null)
if (itemTemplate.GetFlags().HasAnyFlag(ItemFlags.HasLoot)) if (itemTemplate.HasFlag(ItemFlags.HasLoot))
Global.LootItemStorage.RemoveStoredLootForContainer(pItem.GetGUID().GetCounter()); Global.LootItemStorage.RemoveStoredLootForContainer(pItem.GetGUID().GetCounter());
pItem.SetState(ItemUpdateState.Removed, this); pItem.SetState(ItemUpdateState.Removed, this);
@@ -3812,7 +3812,7 @@ namespace Game.Entities
void ApplyItemEquipSpell(Item item, bool apply, bool formChange = false) void ApplyItemEquipSpell(Item item, bool apply, bool formChange = false)
{ {
if (item == null || item.GetTemplate().GetFlags().HasFlag(ItemFlags.Legacy)) if (item == null || item.GetTemplate().HasFlag(ItemFlags.Legacy))
return; return;
foreach (ItemEffectRecord effectData in item.GetEffects()) foreach (ItemEffectRecord effectData in item.GetEffects())
@@ -3880,7 +3880,7 @@ namespace Game.Entities
void ApplyEquipCooldown(Item pItem) void ApplyEquipCooldown(Item pItem)
{ {
if (pItem.GetTemplate().GetFlags().HasAnyFlag(ItemFlags.NoEquipCooldown)) if (pItem.GetTemplate().HasFlag(ItemFlags.NoEquipCooldown))
return; return;
DateTime now = GameTime.GetGameTimeSteadyPoint(); DateTime now = GameTime.GetGameTimeSteadyPoint();
@@ -4252,7 +4252,7 @@ namespace Game.Entities
// in case trade we already have item in other player inventory // in case trade we already have item in other player inventory
pLastItem.SetState(in_characterInventoryDB ? ItemUpdateState.Changed : ItemUpdateState.New, this); pLastItem.SetState(in_characterInventoryDB ? ItemUpdateState.Changed : ItemUpdateState.New, this);
if (pLastItem.HasItemFlag(ItemFieldFlags.BopTradeable)) if (pLastItem.IsBOPTradeable())
AddTradeableItem(pLastItem); AddTradeableItem(pLastItem);
} }
} }
@@ -4917,7 +4917,7 @@ namespace Game.Entities
} }
else if (type == InventoryType.WeaponOffhand) else if (type == InventoryType.WeaponOffhand)
{ {
if (!CanDualWield() && !pProto.GetFlags3().HasAnyFlag(ItemFlags3.AlwaysAllowDualWield)) if (!CanDualWield() && !pProto.HasFlag(ItemFlags3.AlwaysAllowDualWield))
return InventoryResult.TwoHandSkillNotFound; return InventoryResult.TwoHandSkillNotFound;
} }
else if (type == InventoryType.Weapon2Hand) else if (type == InventoryType.Weapon2Hand)
@@ -5025,7 +5025,7 @@ namespace Game.Entities
public InventoryResult CanEquipUniqueItem(ItemTemplate itemProto, byte except_slot = ItemConst.NullSlot, uint limit_count = 1) public InventoryResult CanEquipUniqueItem(ItemTemplate itemProto, byte except_slot = ItemConst.NullSlot, uint limit_count = 1)
{ {
// check unique-equipped on item // check unique-equipped on item
if (Convert.ToBoolean(itemProto.GetFlags() & ItemFlags.UniqueEquippable)) if (itemProto.HasFlag(ItemFlags.UniqueEquippable))
{ {
// there is an equip limit on this item // there is an equip limit on this item
if (HasItemOrGemWithIdEquipped(itemProto.GetId(), 1, except_slot)) if (HasItemOrGemWithIdEquipped(itemProto.GetId(), 1, except_slot))
@@ -5429,7 +5429,7 @@ namespace Game.Entities
for (byte i = 0; i < ItemConst.MaxBagSize; ++i) for (byte i = 0; i < ItemConst.MaxBagSize; ++i)
DestroyItem(slot, i, update); DestroyItem(slot, i, update);
if (pItem.HasItemFlag(ItemFieldFlags.Wrapped)) if (pItem.IsWrapped())
{ {
PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_GIFT); PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_GIFT);
stmt.AddValue(0, pItem.GetGUID().GetCounter()); stmt.AddValue(0, pItem.GetGUID().GetCounter());
@@ -5493,7 +5493,7 @@ namespace Game.Entities
// Delete rolled money / loot from db. // Delete rolled money / loot from db.
// MUST be done before RemoveFromWorld() or GetTemplate() fails // MUST be done before RemoveFromWorld() or GetTemplate() fails
if (pProto.GetFlags().HasAnyFlag(ItemFlags.HasLoot)) if (pProto.HasFlag(ItemFlags.HasLoot))
Global.LootItemStorage.RemoveStoredLootForContainer(pItem.GetGUID().GetCounter()); Global.LootItemStorage.RemoveStoredLootForContainer(pItem.GetGUID().GetCounter());
if (IsInWorld && update) if (IsInWorld && update)
+2 -2
View File
@@ -882,8 +882,8 @@ namespace Game.Entities
if (rewardProto == null) if (rewardProto == null)
return false; return false;
if ((rewardProto.GetFlags2().HasAnyFlag(ItemFlags2.FactionAlliance) && GetTeam() != Team.Alliance) || if ((rewardProto.HasFlag(ItemFlags2.FactionAlliance) && GetTeam() != Team.Alliance) ||
(rewardProto.GetFlags2().HasAnyFlag(ItemFlags2.FactionHorde) && GetTeam() != Team.Horde)) (rewardProto.HasFlag(ItemFlags2.FactionHorde) && GetTeam() != Team.Horde))
return false; return false;
switch (questPackageItem.DisplayType) switch (questPackageItem.DisplayType)
+3 -3
View File
@@ -1491,7 +1491,7 @@ namespace Game.Entities
public void CastItemUseSpell(Item item, SpellCastTargets targets, ObjectGuid castCount, uint[] misc) public void CastItemUseSpell(Item item, SpellCastTargets targets, ObjectGuid castCount, uint[] misc)
{ {
if (!item.GetTemplate().GetFlags().HasFlag(ItemFlags.Legacy)) if (!item.GetTemplate().HasFlag(ItemFlags.Legacy))
{ {
// item spells casted at use // item spells casted at use
foreach (ItemEffectRecord effectData in item.GetEffects()) foreach (ItemEffectRecord effectData in item.GetEffects())
@@ -1779,7 +1779,7 @@ namespace Game.Entities
void ApplyItemObtainSpells(Item item, bool apply) void ApplyItemObtainSpells(Item item, bool apply)
{ {
if (item.GetTemplate().GetFlags().HasFlag(ItemFlags.Legacy)) if (item.GetTemplate().HasFlag(ItemFlags.Legacy))
return; return;
foreach (ItemEffectRecord effect in item.GetEffects()) foreach (ItemEffectRecord effect in item.GetEffects())
@@ -3260,7 +3260,7 @@ namespace Game.Entities
bool canTrigger = damageInfo.GetHitMask().HasAnyFlag(ProcFlagsHit.Normal | ProcFlagsHit.Critical | ProcFlagsHit.Absorb); bool canTrigger = damageInfo.GetHitMask().HasAnyFlag(ProcFlagsHit.Normal | ProcFlagsHit.Critical | ProcFlagsHit.Absorb);
if (canTrigger) if (canTrigger)
{ {
if (!item.GetTemplate().GetFlags().HasFlag(ItemFlags.Legacy)) if (!item.GetTemplate().HasFlag(ItemFlags.Legacy))
{ {
foreach (ItemEffectRecord effectData in item.GetEffects()) foreach (ItemEffectRecord effectData in item.GetEffects())
{ {
+1 -1
View File
@@ -7342,7 +7342,7 @@ namespace Game.Entities
ItemTemplate offtemplate = offItem.GetTemplate(); ItemTemplate offtemplate = offItem.GetTemplate();
// unequip offhand weapon if player doesn't have dual wield anymore // unequip offhand weapon if player doesn't have dual wield anymore
if (!CanDualWield() && ((offItem.GetTemplate().GetInventoryType() == InventoryType.WeaponOffhand && !offItem.GetTemplate().GetFlags3().HasAnyFlag(ItemFlags3.AlwaysAllowDualWield)) if (!CanDualWield() && ((offItem.GetTemplate().GetInventoryType() == InventoryType.WeaponOffhand && !offItem.GetTemplate().HasFlag(ItemFlags3.AlwaysAllowDualWield))
|| offItem.GetTemplate().GetInventoryType() == InventoryType.Weapon)) || offItem.GetTemplate().GetInventoryType() == InventoryType.Weapon))
force = true; force = true;
+1 -1
View File
@@ -1321,7 +1321,7 @@ namespace Game.Entities
UpdateDamagePhysical(WeaponAttackType.BaseAttack); UpdateDamagePhysical(WeaponAttackType.BaseAttack);
Item offhand = GetWeaponForAttack(WeaponAttackType.OffAttack, true); Item offhand = GetWeaponForAttack(WeaponAttackType.OffAttack, true);
if (offhand) if (offhand)
if (CanDualWield() || offhand.GetTemplate().GetFlags3().HasAnyFlag(ItemFlags3.AlwaysAllowDualWield)) if (CanDualWield() || offhand.GetTemplate().HasFlag(ItemFlags3.AlwaysAllowDualWield))
UpdateDamagePhysical(WeaponAttackType.OffAttack); UpdateDamagePhysical(WeaponAttackType.OffAttack);
if (HasAuraType(AuraType.OverrideSpellPowerByApPct)) if (HasAuraType(AuraType.OverrideSpellPowerByApPct))
+2 -2
View File
@@ -6660,10 +6660,10 @@ namespace Game
if (itemPair.Value.GetOtherFactionItemId() == 0) if (itemPair.Value.GetOtherFactionItemId() == 0)
continue; continue;
if (itemPair.Value.GetFlags2().HasFlag(ItemFlags2.FactionHorde)) if (itemPair.Value.HasFlag(ItemFlags2.FactionHorde))
FactionChangeItemsHordeToAlliance[itemPair.Key] = itemPair.Value.GetOtherFactionItemId(); FactionChangeItemsHordeToAlliance[itemPair.Key] = itemPair.Value.GetOtherFactionItemId();
if (itemPair.Value.GetFlags2().HasFlag(ItemFlags2.FactionAlliance)) if (itemPair.Value.HasFlag(ItemFlags2.FactionAlliance))
FactionChangeItemsAllianceToHorde[itemPair.Key] = itemPair.Value.GetOtherFactionItemId(); FactionChangeItemsAllianceToHorde[itemPair.Key] = itemPair.Value.GetOtherFactionItemId();
++count; ++count;
+1 -1
View File
@@ -1025,7 +1025,7 @@ namespace Game.Groups
r.SetLoot(loot); r.SetLoot(loot);
r.itemSlot = itemSlot; r.itemSlot = itemSlot;
if (item.GetFlags2().HasAnyFlag(ItemFlags2.CanOnlyRollGreed)) if (item.HasFlag(ItemFlags2.CanOnlyRollGreed))
r.rollTypeMask &= ~RollMask.Need; r.rollTypeMask &= ~RollMask.Need;
loot.items[itemSlot].is_blocked = true; loot.items[itemSlot].is_blocked = true;
+2 -2
View File
@@ -614,7 +614,7 @@ namespace Game
} }
if (Global.AuctionHouseMgr.GetAItem(item.GetGUID()) || !item.CanBeTraded() || item.IsNotEmptyBag() || if (Global.AuctionHouseMgr.GetAItem(item.GetGUID()) || !item.CanBeTraded() || item.IsNotEmptyBag() ||
item.GetTemplate().GetFlags().HasAnyFlag(ItemFlags.Conjured) || item.m_itemData.Expiration != 0 || item.GetTemplate().HasFlag(ItemFlags.Conjured) || item.m_itemData.Expiration != 0 ||
item.GetCount() < itemForSale.UseCount) item.GetCount() < itemForSale.UseCount)
{ {
SendAuctionCommandResult(0, AuctionCommand.SellItem, AuctionResult.DatabaseError, throttle.DelayUntilNext); SendAuctionCommandResult(0, AuctionCommand.SellItem, AuctionResult.DatabaseError, throttle.DelayUntilNext);
@@ -826,7 +826,7 @@ namespace Game
} }
if (Global.AuctionHouseMgr.GetAItem(item.GetGUID()) || !item.CanBeTraded() || item.IsNotEmptyBag() || if (Global.AuctionHouseMgr.GetAItem(item.GetGUID()) || !item.CanBeTraded() || item.IsNotEmptyBag() ||
item.GetTemplate().GetFlags().HasAnyFlag(ItemFlags.Conjured) || item.m_itemData.Expiration != 0 || item.GetTemplate().HasFlag(ItemFlags.Conjured) || item.m_itemData.Expiration != 0 ||
item.GetCount() != 1) item.GetCount() != 1)
{ {
SendAuctionCommandResult(0, AuctionCommand.SellItem, AuctionResult.DatabaseError, throttle.DelayUntilNext); SendAuctionCommandResult(0, AuctionCommand.SellItem, AuctionResult.DatabaseError, throttle.DelayUntilNext);
+4 -4
View File
@@ -329,7 +329,7 @@ namespace Game
return; return;
} }
if (pItem.GetTemplate().GetFlags().HasAnyFlag(ItemFlags.NoUserDestroy)) if (pItem.GetTemplate().HasFlag(ItemFlags.NoUserDestroy))
{ {
_player.SendEquipError(InventoryResult.DropBoundItem); _player.SendEquipError(InventoryResult.DropBoundItem);
return; return;
@@ -427,7 +427,7 @@ namespace Game
// prevent selling item for sellprice when the item is still refundable // prevent selling item for sellprice when the item is still refundable
// this probably happens when right clicking a refundable item, the client sends both // this probably happens when right clicking a refundable item, the client sends both
// CMSG_SELL_ITEM and CMSG_REFUND_ITEM (unverified) // CMSG_SELL_ITEM and CMSG_REFUND_ITEM (unverified)
if (pItem.HasItemFlag(ItemFieldFlags.Refundable)) if (pItem.IsRefundable())
return; // Therefore, no feedback to client return; // Therefore, no feedback to client
// special case at auto sell (sell all) // special case at auto sell (sell all)
@@ -667,7 +667,7 @@ namespace Game
return; return;
} }
if (!gift.GetTemplate().GetFlags().HasAnyFlag(ItemFlags.IsWrapper)) // cheating: non-wrapper wrapper if (!gift.GetTemplate().HasFlag(ItemFlags.IsWrapper)) // cheating: non-wrapper wrapper
{ {
GetPlayer().SendEquipError(InventoryResult.ItemNotFound, gift); GetPlayer().SendEquipError(InventoryResult.ItemNotFound, gift);
return; return;
@@ -857,7 +857,7 @@ namespace Game
ItemTemplate iGemProto = gems[i].GetTemplate(); ItemTemplate iGemProto = gems[i].GetTemplate();
// unique item (for new and already placed bit removed enchantments // unique item (for new and already placed bit removed enchantments
if (iGemProto.GetFlags().HasAnyFlag(ItemFlags.UniqueEquippable)) if (iGemProto.HasFlag(ItemFlags.UniqueEquippable))
{ {
for (int j = 0; j < ItemConst.MaxGemSockets; ++j) for (int j = 0; j < ItemConst.MaxGemSockets; ++j)
{ {
+1 -1
View File
@@ -404,7 +404,7 @@ namespace Game
} }
else else
{ {
if (pItem.loot.IsLooted() || !proto.GetFlags().HasAnyFlag(ItemFlags.HasLoot)) // Only delete item if no loot or money (unlooted loot is saved to db) if (pItem.loot.IsLooted() || !proto.HasFlag(ItemFlags.HasLoot)) // Only delete item if no loot or money (unlooted loot is saved to db)
player.DestroyItem(pItem.GetBagSlot(), pItem.GetSlot(), true); player.DestroyItem(pItem.GetBagSlot(), pItem.GetSlot(), true);
} }
return; // item can be looted only single player return; // item can be looted only single player
+3 -3
View File
@@ -189,7 +189,7 @@ namespace Game
if (item) if (item)
{ {
ItemTemplate itemProto = item.GetTemplate(); ItemTemplate itemProto = item.GetTemplate();
if (itemProto == null || !itemProto.GetFlags().HasAnyFlag(ItemFlags.IsBoundToAccount)) if (itemProto == null || !itemProto.HasFlag(ItemFlags.IsBoundToAccount))
{ {
accountBound = false; accountBound = false;
break; break;
@@ -242,13 +242,13 @@ namespace Game
} }
} }
if (item.GetTemplate().GetFlags().HasAnyFlag(ItemFlags.Conjured) || item.m_itemData.Expiration != 0) if (item.GetTemplate().HasFlag(ItemFlags.Conjured) || item.m_itemData.Expiration != 0)
{ {
player.SendMailResult(0, MailResponseType.Send, MailResponseResult.EquipError, InventoryResult.MailBoundItem); player.SendMailResult(0, MailResponseType.Send, MailResponseResult.EquipError, InventoryResult.MailBoundItem);
return; return;
} }
if (packet.Info.Cod != 0 && item.HasItemFlag(ItemFieldFlags.Wrapped)) if (packet.Info.Cod != 0 && item.IsWrapped())
{ {
player.SendMailResult(0, MailResponseType.Send, MailResponseResult.CantSendWrappedCod); player.SendMailResult(0, MailResponseType.Send, MailResponseResult.CantSendWrappedCod);
return; return;
+3 -3
View File
@@ -500,8 +500,8 @@ namespace Game
if (!Convert.ToBoolean(itemTemplate.GetAllowableClass() & GetPlayer().GetClassMask()) && itemTemplate.GetBonding() == ItemBondingType.OnAcquire) if (!Convert.ToBoolean(itemTemplate.GetAllowableClass() & GetPlayer().GetClassMask()) && itemTemplate.GetBonding() == ItemBondingType.OnAcquire)
continue; continue;
if ((itemTemplate.GetFlags2().HasAnyFlag(ItemFlags2.FactionHorde) && GetPlayer().GetTeam() == Team.Alliance) || if ((itemTemplate.HasFlag(ItemFlags2.FactionHorde) && GetPlayer().GetTeam() == Team.Alliance) ||
(itemTemplate.GetFlags2().HasAnyFlag(ItemFlags2.FactionAlliance) && GetPlayer().GetTeam() == Team.Horde)) (itemTemplate.HasFlag(ItemFlags2.FactionAlliance) && GetPlayer().GetTeam() == Team.Horde))
continue; continue;
if (leftInStock == 0) if (leftInStock == 0)
@@ -528,7 +528,7 @@ namespace Game
item.StackCount = (int)itemTemplate.GetBuyCount(); item.StackCount = (int)itemTemplate.GetBuyCount();
item.Price = (ulong)price; item.Price = (ulong)price;
item.DoNotFilterOnVendor = vendorItem.IgnoreFiltering; item.DoNotFilterOnVendor = vendorItem.IgnoreFiltering;
item.Refundable = (itemTemplate.GetFlags() & ItemFlags.ItemPurchaseRecord) != 0 && vendorItem.ExtendedCost != 0 && itemTemplate.GetMaxStackSize() == 1; item.Refundable = itemTemplate.HasFlag(ItemFlags.ItemPurchaseRecord) && vendorItem.ExtendedCost != 0 && itemTemplate.GetMaxStackSize() == 1;
item.Item.ItemID = vendorItem.item; item.Item.ItemID = vendorItem.item;
if (!vendorItem.BonusListIDs.Empty()) if (!vendorItem.BonusListIDs.Empty())
+5 -5
View File
@@ -75,14 +75,14 @@ namespace Game
} }
// only allow conjured consumable, bandage, poisons (all should have the 2^21 item flag set in DB) // only allow conjured consumable, bandage, poisons (all should have the 2^21 item flag set in DB)
if (proto.GetClass() == ItemClass.Consumable && !proto.GetFlags().HasAnyFlag(ItemFlags.IgnoreDefaultArenaRestrictions) && user.InArena()) if (proto.GetClass() == ItemClass.Consumable && !proto.HasFlag(ItemFlags.IgnoreDefaultArenaRestrictions) && user.InArena())
{ {
user.SendEquipError(InventoryResult.NotDuringArenaMatch, item); user.SendEquipError(InventoryResult.NotDuringArenaMatch, item);
return; return;
} }
// don't allow items banned in arena // don't allow items banned in arena
if (proto.GetFlags().HasAnyFlag(ItemFlags.NotUseableInArena) && user.InArena()) if (proto.HasFlag(ItemFlags.NotUseableInArena) && user.InArena())
{ {
user.SendEquipError(InventoryResult.NotDuringArenaMatch, item); user.SendEquipError(InventoryResult.NotDuringArenaMatch, item);
return; return;
@@ -158,7 +158,7 @@ namespace Game
} }
// Verify that the bag is an actual bag or wrapped item that can be used "normally" // Verify that the bag is an actual bag or wrapped item that can be used "normally"
if (!proto.GetFlags().HasAnyFlag(ItemFlags.HasLoot) && !item.HasItemFlag(ItemFieldFlags.Wrapped)) if (!proto.HasFlag(ItemFlags.HasLoot) && !item.IsWrapped())
{ {
player.SendEquipError(InventoryResult.ClientLockedOut, item); player.SendEquipError(InventoryResult.ClientLockedOut, item);
Log.outError(LogFilter.Network, "Possible hacking attempt: Player {0} [guid: {1}] tried to open item [guid: {2}, entry: {3}] which is not openable!", Log.outError(LogFilter.Network, "Possible hacking attempt: Player {0} [guid: {1}] tried to open item [guid: {2}, entry: {3}] which is not openable!",
@@ -186,7 +186,7 @@ namespace Game
} }
} }
if (item.HasItemFlag(ItemFieldFlags.Wrapped))// wrapped? if (item.IsWrapped())// wrapped?
{ {
PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_CHARACTER_GIFT_BY_ITEM); PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_CHARACTER_GIFT_BY_ITEM);
stmt.AddValue(0, item.GetGUID().GetCounter()); stmt.AddValue(0, item.GetGUID().GetCounter());
@@ -206,7 +206,7 @@ namespace Game
if (!item) if (!item)
return; return;
if (item.GetGUID() != itemGuid || !item.HasItemFlag(ItemFieldFlags.Wrapped)) // during getting result, gift was swapped with another item if (item.GetGUID() != itemGuid || !item.IsWrapped()) // during getting result, gift was swapped with another item
return; return;
if (result.IsEmpty()) if (result.IsEmpty())
+3 -3
View File
@@ -62,7 +62,7 @@ namespace Game
tradeItem.Item = new ItemInstance(item); tradeItem.Item = new ItemInstance(item);
tradeItem.StackCount = (int)item.GetCount(); tradeItem.StackCount = (int)item.GetCount();
tradeItem.GiftCreator = item.GetGiftCreator(); tradeItem.GiftCreator = item.GetGiftCreator();
if (!item.HasItemFlag(ItemFieldFlags.Wrapped)) if (!item.IsWrapped())
{ {
tradeItem.Unwrapped.HasValue = true; tradeItem.Unwrapped.HasValue = true;
TradeUpdated.UnwrappedTradeItem unwrappedItem = tradeItem.Unwrapped.Value; TradeUpdated.UnwrappedTradeItem unwrappedItem = tradeItem.Unwrapped.Value;
@@ -124,7 +124,7 @@ namespace Game
} }
// adjust time (depends on /played) // adjust time (depends on /played)
if (myItems[i].HasItemFlag(ItemFieldFlags.BopTradeable)) if (myItems[i].IsBOPTradeable())
myItems[i].SetCreatePlayedTime(trader.GetTotalPlayedTime() - (GetPlayer().GetTotalPlayedTime() - myItems[i].m_itemData.CreatePlayedTime)); myItems[i].SetCreatePlayedTime(trader.GetTotalPlayedTime() - (GetPlayer().GetTotalPlayedTime() - myItems[i].m_itemData.CreatePlayedTime));
// store // store
trader.MoveItemToInventory(traderDst, myItems[i], true, true); trader.MoveItemToInventory(traderDst, myItems[i], true, true);
@@ -143,7 +143,7 @@ namespace Game
// adjust time (depends on /played) // adjust time (depends on /played)
if (hisItems[i].HasItemFlag(ItemFieldFlags.BopTradeable)) if (hisItems[i].IsBOPTradeable())
hisItems[i].SetCreatePlayedTime(GetPlayer().GetTotalPlayedTime() - (trader.GetTotalPlayedTime() - hisItems[i].m_itemData.CreatePlayedTime)); hisItems[i].SetCreatePlayedTime(GetPlayer().GetTotalPlayedTime() - (trader.GetTotalPlayedTime() - hisItems[i].m_itemData.CreatePlayedTime));
// store // store
GetPlayer().MoveItemToInventory(playerDst, hisItems[i], true, true); GetPlayer().MoveItemToInventory(playerDst, hisItems[i], true, true);
+5 -5
View File
@@ -35,7 +35,7 @@ namespace Game.Loots
conditions = li.conditions; conditions = li.conditions;
ItemTemplate proto = Global.ObjectMgr.GetItemTemplate(itemid); ItemTemplate proto = Global.ObjectMgr.GetItemTemplate(itemid);
freeforall = proto != null && proto.GetFlags().HasAnyFlag(ItemFlags.MultiDrop); freeforall = proto != null && proto.HasFlag(ItemFlags.MultiDrop);
follow_loot_rules = proto != null && proto.FlagsCu.HasAnyFlag(ItemFlagsCustom.FollowLootRules); follow_loot_rules = proto != null && proto.FlagsCu.HasAnyFlag(ItemFlagsCustom.FollowLootRules);
needs_quest = li.needs_quest; needs_quest = li.needs_quest;
@@ -54,10 +54,10 @@ namespace Game.Loots
return false; return false;
// not show loot for not own team // not show loot for not own team
if (pProto.GetFlags2().HasAnyFlag(ItemFlags2.FactionHorde) && player.GetTeam() != Team.Horde) if (pProto.HasFlag(ItemFlags2.FactionHorde) && player.GetTeam() != Team.Horde)
return false; return false;
if (pProto.GetFlags2().HasAnyFlag(ItemFlags2.FactionAlliance) && player.GetTeam() != Team.Alliance) if (pProto.HasFlag(ItemFlags2.FactionAlliance) && player.GetTeam() != Team.Alliance)
return false; return false;
// Master looter can see certain items even if the character can't loot them // Master looter can see certain items even if the character can't loot them
@@ -71,7 +71,7 @@ namespace Game.Loots
} }
// Don't allow loot for players without profession or those who already know the recipe // Don't allow loot for players without profession or those who already know the recipe
if (pProto.GetFlags().HasFlag(ItemFlags.HideUnusableRecipe)) if (pProto.HasFlag(ItemFlags.HideUnusableRecipe))
{ {
if (!player.HasSkill((SkillType)pProto.GetRequiredSkill())) if (!player.HasSkill((SkillType)pProto.GetRequiredSkill()))
return false; return false;
@@ -231,7 +231,7 @@ namespace Game.Loots
// non-conditional one-player only items are counted here, // non-conditional one-player only items are counted here,
// free for all items are counted in FillFFALoot(), // free for all items are counted in FillFFALoot(),
// non-ffa conditionals are counted in FillNonQuestNonFFAConditionalLoot() // non-ffa conditionals are counted in FillNonQuestNonFFAConditionalLoot()
if (!item.needs_quest && item.conditions.Empty() && !proto.GetFlags().HasAnyFlag(ItemFlags.MultiDrop)) if (!item.needs_quest && item.conditions.Empty() && !proto.HasFlag(ItemFlags.MultiDrop))
++unlootedCount; ++unlootedCount;
} }
} }
+3 -3
View File
@@ -203,7 +203,7 @@ namespace Game.Loots
// remove real entries and check existence loot // remove real entries and check existence loot
var its = Global.ObjectMgr.GetItemTemplates(); var its = Global.ObjectMgr.GetItemTemplates();
foreach (var pair in its) foreach (var pair in its)
if (lootIdSet.Contains(pair.Value.GetId()) && pair.Value.GetFlags().HasAnyFlag(ItemFlags.HasLoot)) if (lootIdSet.Contains(pair.Value.GetId()) && pair.Value.HasFlag(ItemFlags.HasLoot))
lootIdSet.Remove(pair.Value.GetId()); lootIdSet.Remove(pair.Value.GetId());
// output error for any still listed (not referenced from appropriate table) ids // output error for any still listed (not referenced from appropriate table) ids
@@ -228,7 +228,7 @@ namespace Game.Loots
var its = Global.ObjectMgr.GetItemTemplates(); var its = Global.ObjectMgr.GetItemTemplates();
foreach (var pair in its) foreach (var pair in its)
{ {
if (!pair.Value.GetFlags().HasAnyFlag(ItemFlags.IsMillable)) if (!pair.Value.HasFlag(ItemFlags.IsMillable))
continue; continue;
if (lootIdSet.Contains(pair.Value.GetId())) if (lootIdSet.Contains(pair.Value.GetId()))
@@ -293,7 +293,7 @@ namespace Game.Loots
var its = Global.ObjectMgr.GetItemTemplates(); var its = Global.ObjectMgr.GetItemTemplates();
foreach (var pair in its) foreach (var pair in its)
{ {
if (!pair.Value.GetFlags().HasAnyFlag(ItemFlags.IsProspectable)) if (!pair.Value.HasFlag(ItemFlags.IsProspectable))
continue; continue;
if (lootIdSet.Contains(pair.Value.GetId())) if (lootIdSet.Contains(pair.Value.GetId()))
+5 -5
View File
@@ -4219,7 +4219,7 @@ namespace Game.Spells
return; return;
// do not take reagents for these item casts // do not take reagents for these item casts
if (m_CastItem != null && m_CastItem.GetTemplate().GetFlags().HasAnyFlag(ItemFlags.NoReagentCost)) if (m_CastItem != null && m_CastItem.GetTemplate().HasFlag(ItemFlags.NoReagentCost))
return; return;
Player p_caster = m_caster.ToPlayer(); Player p_caster = m_caster.ToPlayer();
@@ -6037,7 +6037,7 @@ namespace Game.Spells
} }
// do not take reagents for these item casts // do not take reagents for these item casts
if (!(m_CastItem != null && Convert.ToBoolean(m_CastItem.GetTemplate().GetFlags() & ItemFlags.NoReagentCost))) if (!(m_CastItem != null && m_CastItem.GetTemplate().HasFlag(ItemFlags.NoReagentCost)))
{ {
bool checkReagents = !Convert.ToBoolean(_triggeredCastFlags & TriggerCastFlags.IgnorePowerAndReagentCost) && !player.CanNoReagentCast(m_spellInfo); bool checkReagents = !Convert.ToBoolean(_triggeredCastFlags & TriggerCastFlags.IgnorePowerAndReagentCost) && !player.CanNoReagentCast(m_spellInfo);
// Not own traded item (in trader trade slot) requires reagents even if triggered spell // Not own traded item (in trader trade slot) requires reagents even if triggered spell
@@ -6202,7 +6202,7 @@ namespace Game.Spells
if (m_targets.GetItemTarget().GetOwner() != player) if (m_targets.GetItemTarget().GetOwner() != player)
return SpellCastResult.NotTradeable; return SpellCastResult.NotTradeable;
// do not allow to enchant vellum from scroll made by vellum-prevent exploit // do not allow to enchant vellum from scroll made by vellum-prevent exploit
if (m_CastItem != null && Convert.ToBoolean(m_CastItem.GetTemplate().GetFlags() & ItemFlags.NoReagentCost)) if (m_CastItem != null && m_CastItem.GetTemplate().HasFlag(ItemFlags.NoReagentCost))
return SpellCastResult.TotemCategory; return SpellCastResult.TotemCategory;
List<ItemPosCount> dest = new(); List<ItemPosCount> dest = new();
InventoryResult msg = player.CanStoreNewItem(ItemConst.NullBag, ItemConst.NullSlot, dest, spellEffectInfo.ItemType, 1); InventoryResult msg = player.CanStoreNewItem(ItemConst.NullBag, ItemConst.NullSlot, dest, spellEffectInfo.ItemType, 1);
@@ -6326,7 +6326,7 @@ namespace Game.Spells
if (!item) if (!item)
return SpellCastResult.CantBeProspected; return SpellCastResult.CantBeProspected;
//ensure item is a prospectable ore //ensure item is a prospectable ore
if (!Convert.ToBoolean(item.GetTemplate().GetFlags() & ItemFlags.IsProspectable)) if (!item.GetTemplate().HasFlag(ItemFlags.IsProspectable))
return SpellCastResult.CantBeProspected; return SpellCastResult.CantBeProspected;
//prevent prospecting in trade slot //prevent prospecting in trade slot
if (item.GetOwnerGUID() != player.GetGUID()) if (item.GetOwnerGUID() != player.GetGUID())
@@ -6354,7 +6354,7 @@ namespace Game.Spells
if (!item) if (!item)
return SpellCastResult.CantBeMilled; return SpellCastResult.CantBeMilled;
//ensure item is a millable herb //ensure item is a millable herb
if (!(item.GetTemplate().GetFlags().HasAnyFlag(ItemFlags.IsMillable))) if (!item.GetTemplate().HasFlag(ItemFlags.IsMillable))
return SpellCastResult.CantBeMilled; return SpellCastResult.CantBeMilled;
//prevent milling in trade slot //prevent milling in trade slot
if (item.GetOwnerGUID() != player.GetGUID()) if (item.GetOwnerGUID() != player.GetGUID())
+3 -3
View File
@@ -2020,7 +2020,7 @@ namespace Game.Spells
else else
{ {
// do not increase skill if vellum used // do not increase skill if vellum used
if (!(m_CastItem && m_CastItem.GetTemplate().GetFlags().HasAnyFlag(ItemFlags.NoReagentCost))) if (!(m_CastItem && m_CastItem.GetTemplate().HasFlag(ItemFlags.NoReagentCost)))
player.UpdateCraftSkill(m_spellInfo.Id); player.UpdateCraftSkill(m_spellInfo.Id);
uint enchant_id = (uint)effectInfo.MiscValue; uint enchant_id = (uint)effectInfo.MiscValue;
@@ -4125,7 +4125,7 @@ namespace Game.Spells
if (player == null) if (player == null)
return; return;
if (itemTarget == null || !itemTarget.GetTemplate().GetFlags().HasAnyFlag(ItemFlags.IsProspectable)) if (itemTarget == null || !itemTarget.GetTemplate().HasFlag(ItemFlags.IsProspectable))
return; return;
if (itemTarget.GetCount() < 5) if (itemTarget.GetCount() < 5)
@@ -4151,7 +4151,7 @@ namespace Game.Spells
if (player == null) if (player == null)
return; return;
if (itemTarget == null || !itemTarget.GetTemplate().GetFlags().HasAnyFlag(ItemFlags.IsMillable)) if (itemTarget == null || !itemTarget.GetTemplate().HasFlag(ItemFlags.IsMillable))
return; return;
if (itemTarget.GetCount() < 5) if (itemTarget.GetCount() < 5)