diff options
Diffstat (limited to 'src/game/ItemEnchantmentMgr.cpp')
-rw-r--r-- | src/game/ItemEnchantmentMgr.cpp | 30 |
1 files changed, 0 insertions, 30 deletions
diff --git a/src/game/ItemEnchantmentMgr.cpp b/src/game/ItemEnchantmentMgr.cpp index b40a398a782..0f62d1d8d52 100644 --- a/src/game/ItemEnchantmentMgr.cpp +++ b/src/game/ItemEnchantmentMgr.cpp @@ -17,7 +17,6 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - #include <stdlib.h> #include <functional> #include "ItemEnchantmentMgr.h" @@ -28,56 +27,41 @@ #include <list> #include <vector> #include "Util.h" - struct EnchStoreItem { uint32 ench; float chance; - EnchStoreItem() : ench(0), chance(0) {} - EnchStoreItem(uint32 _ench, float _chance) : ench(_ench), chance(_chance) {} }; - typedef std::vector<EnchStoreItem> EnchStoreList; typedef UNORDERED_MAP<uint32, EnchStoreList> EnchantmentStore; - static EnchantmentStore RandomItemEnch; - void LoadRandomEnchantmentsTable() { RandomItemEnch.clear(); // for reload case - EnchantmentStore::const_iterator tab; uint32 entry, ench; float chance; uint32 count = 0; - QueryResult *result = WorldDatabase.Query("SELECT entry, ench, chance FROM item_enchantment_template"); - if (result) { barGoLink bar(result->GetRowCount()); - do { Field *fields = result->Fetch(); bar.step(); - entry = fields[0].GetUInt32(); ench = fields[1].GetUInt32(); chance = fields[2].GetFloat(); - if (chance > 0.000001f && chance <= 100.0f) RandomItemEnch[entry].push_back( EnchStoreItem(ench, chance) ); - ++count; } while (result->NextRow()); - delete result; - sLog.outString(); sLog.outString( ">> Loaded %u Item Enchantment definitions", count ); } @@ -87,56 +71,42 @@ void LoadRandomEnchantmentsTable() sLog.outErrorDb( ">> Loaded 0 Item Enchantment definitions. DB table `item_enchantment_template` is empty."); } } - uint32 GetItemEnchantMod(uint32 entry) { if (!entry) return 0; - EnchantmentStore::const_iterator tab = RandomItemEnch.find(entry); - if (tab == RandomItemEnch.end()) { sLog.outErrorDb("Item RandomProperty / RandomSuffix id #%u used in `item_template` but it doesn't have records in `item_enchantment_template` table.",entry); return 0; } - double dRoll = rand_chance(); float fCount = 0; - for(EnchStoreList::const_iterator ench_iter = tab->second.begin(); ench_iter != tab->second.end(); ++ench_iter) { fCount += ench_iter->chance; - if (fCount > dRoll) return ench_iter->ench; } - //we could get here only if sum of all enchantment chances is lower than 100% dRoll = (irand(0, (int)floor(fCount * 100) + 1)) / 100; fCount = 0; - for(EnchStoreList::const_iterator ench_iter = tab->second.begin(); ench_iter != tab->second.end(); ++ench_iter) { fCount += ench_iter->chance; - if (fCount > dRoll) return ench_iter->ench; } - return 0; } - uint32 GenerateEnchSuffixFactor(uint32 item_id) { ItemPrototype const *itemProto = objmgr.GetItemPrototype(item_id); - if(!itemProto) return 0; if(!itemProto->RandomSuffix) return 0; - RandomPropertiesPointsEntry const *randomProperty = sRandomPropertiesPointsStore.LookupEntry(itemProto->ItemLevel); if(!randomProperty) return 0; - uint32 suffixFactor; switch(itemProto->InventoryType) { |