diff options
| author | Shauren <shauren.trinity@gmail.com> | 2015-07-11 00:11:16 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2015-07-11 00:11:16 +0200 |
| commit | da3247d5bbd30295b993d572a40ed022b5d267d9 (patch) | |
| tree | 9b1fb00284a8ea7e02bfaaeca171f4ba8a029a4e /src/server/game | |
| parent | facb038b949ef32033198dcba044d1606e0fdfcd (diff) | |
Core/Players: Fixed glyph slots
Diffstat (limited to 'src/server/game')
| -rw-r--r-- | src/server/game/DataStores/DB2Stores.cpp | 33 | ||||
| -rw-r--r-- | src/server/game/DataStores/DB2Stores.h | 22 | ||||
| -rw-r--r-- | src/server/game/DataStores/DBCEnums.h | 7 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 21 |
4 files changed, 51 insertions, 32 deletions
diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp index 2bf33785137..a3eb7fed48a 100644 --- a/src/server/game/DataStores/DB2Stores.cpp +++ b/src/server/game/DataStores/DB2Stores.cpp @@ -291,19 +291,20 @@ void DB2Manager::LoadStores(std::string const& dataPath) for (uint32 j = 0; j < MAX_POWERS; ++j) _powersByClass[i][j] = MAX_POWERS; - for (uint32 i = 0; i < sChrClassesXPowerTypesStore.GetNumRows(); ++i) + for (ChrClassesXPowerTypesEntry const* power : sChrClassesXPowerTypesStore) { - if (ChrClassesXPowerTypesEntry const* power = sChrClassesXPowerTypesStore.LookupEntry(i)) - { - uint32 index = 0; - for (uint32 j = 0; j < MAX_POWERS; ++j) - if (_powersByClass[power->ClassID][j] != MAX_POWERS) - ++index; + uint32 index = 0; + for (uint32 j = 0; j < MAX_POWERS; ++j) + if (_powersByClass[power->ClassID][j] != MAX_POWERS) + ++index; - _powersByClass[power->ClassID][power->PowerType] = index; - } + _powersByClass[power->ClassID][power->PowerType] = index; } + for (GlyphSlotEntry const* glyphSlot : sGlyphSlotStore) + if (glyphSlot->Type == GLYPH_SLOT_MAJOR || glyphSlot->Type == GLYPH_SLOT_MINOR) + _glyphSlots.insert(glyphSlot); + for (ItemBonusEntry const* bonus : sItemBonusStore) _itemBonusLists[bonus->BonusListID].push_back(bonus); @@ -782,3 +783,17 @@ std::vector<SpellPowerEntry const*> DB2Manager::GetSpellPowers(uint32 spellId, D return powers; } + +bool DB2Manager::GlyphSlotEntryComparator::operator()(GlyphSlotEntry const* left, GlyphSlotEntry const* right) const +{ + if (left->Tooltip != right->Tooltip) + return left->Tooltip < right->Tooltip; + return left->Type > right->Type; +} + +bool DB2Manager::MountTypeXCapabilityEntryComparator::operator()(MountTypeXCapabilityEntry const* left, MountTypeXCapabilityEntry const* right) const +{ + if (left->MountTypeID == right->MountTypeID) + return left->OrderIndex > right->OrderIndex; + return left->ID < right->ID; +} diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h index 50583d487f1..32b6dc4e989 100644 --- a/src/server/game/DataStores/DB2Stores.h +++ b/src/server/game/DataStores/DB2Stores.h @@ -112,22 +112,22 @@ struct HotfixNotify typedef std::vector<HotfixNotify> HotfixData; +#define DEFINE_DB2_SET_COMPARATOR(structure) \ + struct structure ## Comparator : public std::binary_function<structure const*, structure const*, bool> \ + { \ + bool operator()(structure const* left, structure const* right) const; \ + }; + class DB2Manager { public: - struct MountTypeXCapabilityComparator : public std::binary_function<MountTypeXCapabilityEntry const*, MountTypeXCapabilityEntry const*, bool> - { - bool operator()(MountTypeXCapabilityEntry const* left, MountTypeXCapabilityEntry const* right) const - { - if (left->MountTypeID == right->MountTypeID) - return left->OrderIndex > right->OrderIndex; - return left->ID < right->ID; - } - }; + DEFINE_DB2_SET_COMPARATOR(GlyphSlotEntry); + DEFINE_DB2_SET_COMPARATOR(MountTypeXCapabilityEntry); typedef std::map<uint32 /*hash*/, DB2StorageBase*> StorageMap; typedef std::unordered_map<uint32 /*areaGroupId*/, std::vector<uint32/*areaId*/>> AreaGroupMemberContainer; typedef std::unordered_map<uint32, CharStartOutfitEntry const*> CharStartOutfitContainer; + typedef std::set<GlyphSlotEntry const*, GlyphSlotEntryComparator> GlyphSlotContainer; typedef std::map<uint32 /*curveID*/, std::map<uint32/*index*/, CurvePointEntry const*, std::greater<uint32>>> HeirloomCurvesContainer; typedef std::vector<ItemBonusEntry const*> ItemBonusList; typedef std::unordered_map<uint32 /*bonusListId*/, ItemBonusList> ItemBonusListContainer; @@ -136,7 +136,7 @@ public: typedef std::unordered_map<uint32, std::set<ItemBonusTreeNodeEntry const*>> ItemBonusTreeContainer; typedef std::unordered_map<uint32, std::vector<ItemSpecOverrideEntry const*>> ItemSpecOverridesContainer; typedef std::unordered_map<uint32, MountEntry const*> MountContainer; - typedef std::set<MountTypeXCapabilityEntry const*, MountTypeXCapabilityComparator> MountTypeXCapabilitySet; + typedef std::set<MountTypeXCapabilityEntry const*, MountTypeXCapabilityEntryComparator> MountTypeXCapabilitySet; typedef std::unordered_map<uint32, MountTypeXCapabilitySet> MountCapabilitiesByTypeContainer; typedef std::unordered_map<uint32, std::array<std::vector<NameGenEntry const*>, 2>> NameGenContainer; typedef std::unordered_map<uint32, std::set<uint32>> PhaseGroupContainer; @@ -162,6 +162,7 @@ public: static char const* GetBroadcastTextValue(BroadcastTextEntry const* broadcastText, LocaleConstant locale = DEFAULT_LOCALE, uint8 gender = GENDER_MALE, bool forceGender = false); CharStartOutfitEntry const* GetCharStartOutfitEntry(uint8 race, uint8 class_, uint8 gender) const; uint32 GetPowerIndexByClass(uint32 powerType, uint32 classId) const; + GlyphSlotContainer const& GetGlyphSlots() const { return _glyphSlots; } uint32 GetHeirloomItemLevel(uint32 curveId, uint32 level) const; ItemBonusList GetItemBonusList(uint32 bonusListId) const; std::set<uint32> GetItemBonusTree(uint32 itemId, uint32 itemBonusTreeMod) const; @@ -184,6 +185,7 @@ private: AreaGroupMemberContainer _areaGroupMembers; CharStartOutfitContainer _charStartOutfits; uint32 _powersByClass[MAX_CLASSES][MAX_POWERS]; + GlyphSlotContainer _glyphSlots; HeirloomCurvesContainer _heirloomCurvePoints; ItemBonusListContainer _itemBonusLists; ItemBonusTreeContainer _itemBonusTrees; diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index 719e539a9c4..d7125293671 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -494,6 +494,13 @@ enum AbilytyLearnType SKILL_LINE_ABILITY_LEARNED_ON_SKILL_LEARN = 2 // Spell will be learned/removed together with entire skill }; +enum GlyphSlotType +{ + GLYPH_SLOT_MAJOR = 0, + GLYPH_SLOT_MINOR = 1, + GLYPH_SLOT_PRIME = 2 +}; + enum ItemEnchantmentType { ITEM_ENCHANTMENT_TYPE_NONE = 0, diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index e1a71f5fbdf..35f0b92f3f1 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -24293,20 +24293,16 @@ uint32 Player::GetBarberShopCost(BarberShopStyleEntry const* newHairStyle, uint8 void Player::InitGlyphsForLevel() { - uint32 slot = 0; - for (uint32 i = 0; i < sGlyphSlotStore.GetNumRows() && slot < MAX_GLYPH_SLOT_INDEX; ++i) - if (GlyphSlotEntry const* gs = sGlyphSlotStore.LookupEntry(i)) - SetGlyphSlot(slot++, gs->ID); - - uint8 level = getLevel(); uint32 slotMask = 0; + uint8 slot = 0; + uint8 level = getLevel(); + for (GlyphSlotEntry const* gs : sDB2Manager.GetGlyphSlots()) + { + if (level >= ((gs->Tooltip + 1) * 25)) + slotMask |= 1 << slot; - if (level >= 25) - slotMask |= 0x01 | 0x02 | 0x40; - if (level >= 50) - slotMask |= 0x04 | 0x08 | 0x80; - if (level >= 75) - slotMask |= 0x10 | 0x20 | 0x100; + SetGlyphSlot(slot++, gs->ID); + } SetUInt32Value(PLAYER_GLYPHS_ENABLED, slotMask); } @@ -25420,7 +25416,6 @@ void Player::_SaveGlyphs(SQLTransaction& trans) stmt->setUInt64(0, GetGUID().GetCounter()); trans->Append(stmt); - for (uint8 group = 0; group < GetTalentGroupsCount(); ++group) { uint8 index = 0; |
