int32 Item::GenerateItemRandomPropertyId(uint32 item_id) { ItemTemplate const* itemProto = sObjectMgr->GetItemTemplate(item_id); if (!itemProto) return 0; // item must have one from this field values not null if it can have random enchantments if ((!itemProto->RandomProperty) && (!itemProto->RandomSuffix)) return 0; // item can have not null only one from field values if ((itemProto->RandomProperty) && (itemProto->RandomSuffix)) { TC_LOG_ERROR("sql.sql", "Item template %u have RandomProperty == %u and RandomSuffix == %u, but must have one from field =0", itemProto->ItemId, itemProto->RandomProperty, itemProto->RandomSuffix); return 0; } // RandomProperty case if (itemProto->RandomProperty) { uint32 randomPropId = GetItemEnchantMod(itemProto->RandomProperty); ItemRandomPropertiesEntry const* random_id = sItemRandomPropertiesStore.LookupEntry(randomPropId); if (!random_id) { TC_LOG_ERROR("sql.sql", "Enchantment id #%u used but it doesn't have records in 'ItemRandomProperties.dbc'", randomPropId); return 0; } return random_id->ID; } // RandomSuffix case else { uint32 randomPropId = GetItemEnchantMod(itemProto->RandomSuffix); ItemRandomSuffixEntry const* random_id = sItemRandomSuffixStore.LookupEntry(randomPropId); if (!random_id) { TC_LOG_ERROR("sql.sql", "Enchantment id #%u used but it doesn't have records in sItemRandomSuffixStore.", randomPropId); return 0; } return -int32(random_id->ID); } }
int32 Item::GenerateItemRandomPropertyId(uint32 item_id) { ItemPrototype const *itemProto = sItemStorage.LookupEntry<ItemPrototype>(item_id); if (!itemProto) return 0; // item must have one from this field values not null if it can have random enchantments if ((!itemProto->RandomProperty) && (!itemProto->RandomSuffix)) return 0; // item can have not null only one from field values if ((itemProto->RandomProperty) && (itemProto->RandomSuffix)) { sLog->outErrorDb("Item template %u has RandomProperty == %u and RandomSuffix == %u, but must have one from field =0", itemProto->ItemId, itemProto->RandomProperty, itemProto->RandomSuffix); return 0; } // RandomProperty case if (itemProto->RandomProperty) { uint32 randomPropId = GetItemEnchantMod(itemProto->RandomProperty); ItemRandomPropertiesEntry const *random_id = sItemRandomPropertiesStore.LookupEntry(randomPropId); if (!random_id) { sLog->outErrorDb("Enchantment id #%u used but it doesn't have a record in 'ItemRandomProperties.dbc'", randomPropId); return 0; } return random_id->ID; } // RandomSuffix case else { uint32 randomPropId = GetItemEnchantMod(itemProto->RandomSuffix); ItemRandomSuffixEntry const *random_id = sItemRandomSuffixStore.LookupEntry(randomPropId); if (!random_id) { sLog->outErrorDb("Enchantment id #%u used but it doesn't have a record in sItemRandomSuffixStore.", randomPropId); return 0; } return -int32(random_id->ID); } }
int32 Item::GenerateItemRandomPropertyId(uint32 item_id) { ItemPrototype const* itemProto = sItemStorage.LookupEntry<ItemPrototype>(item_id); if (!itemProto) return 0; // Random Property case if (itemProto->RandomProperty) { uint32 randomPropId = GetItemEnchantMod(itemProto->RandomProperty); ItemRandomPropertiesEntry const* random_id = sItemRandomPropertiesStore.LookupEntry(randomPropId); if (!random_id) { sLog.outErrorDb("Enchantment id #%u used but it doesn't have records in 'ItemRandomProperties.dbc'", randomPropId); return 0; } return random_id->ID; } return 0; }
uint32 GetItemRandomSuffixMod(uint32 entry) { return GetItemEnchantMod(-int32(entry)); }
uint32 GetItemRandomPropertyMod(uint32 entry) { return GetItemEnchantMod(entry); }