diff options
-rw-r--r-- | sql/updates/characters/3.4.x/2023_11_25_00_characters.sql | 4 | ||||
-rw-r--r-- | src/server/database/Database/Implementation/CharacterDatabase.cpp | 4 | ||||
-rw-r--r-- | src/server/game/AuctionHouse/AuctionHouseMgr.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Item/Item.cpp | 46 | ||||
-rw-r--r-- | src/server/game/Entities/Item/Item.h | 6 | ||||
-rw-r--r-- | src/server/game/Entities/Item/ItemTemplate.cpp | 22 | ||||
-rw-r--r-- | src/server/game/Entities/Item/ItemTemplate.h | 28 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 27 | ||||
-rw-r--r-- | src/server/game/Guilds/Guild.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Guilds/GuildMgr.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Handlers/ItemHandler.cpp | 16 |
12 files changed, 33 insertions, 142 deletions
diff --git a/sql/updates/characters/3.4.x/2023_11_25_00_characters.sql b/sql/updates/characters/3.4.x/2023_11_25_00_characters.sql new file mode 100644 index 00000000000..32bd61292c1 --- /dev/null +++ b/sql/updates/characters/3.4.x/2023_11_25_00_characters.sql @@ -0,0 +1,4 @@ +ALTER TABLE `item_instance_gems` + DROP COLUMN `gemScalingLevel1`, + DROP COLUMN `gemScalingLevel2`, + DROP COLUMN `gemScalingLevel3`; diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index 24f6d1fb895..b4a5d2793cd 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -28,7 +28,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() "iit.itemModifiedAppearanceAllSpecs, iit.itemModifiedAppearanceSpec1, iit.itemModifiedAppearanceSpec2, iit.itemModifiedAppearanceSpec3, iit.itemModifiedAppearanceSpec4, iit.itemModifiedAppearanceSpec5, " \ "iit.spellItemEnchantmentAllSpecs, iit.spellItemEnchantmentSpec1, iit.spellItemEnchantmentSpec2, iit.spellItemEnchantmentSpec3, iit.spellItemEnchantmentSpec4, iit.spellItemEnchantmentSpec5, " \ "iit.secondaryItemModifiedAppearanceAllSpecs, iit.secondaryItemModifiedAppearanceSpec1, iit.secondaryItemModifiedAppearanceSpec2, iit.secondaryItemModifiedAppearanceSpec3, iit.secondaryItemModifiedAppearanceSpec4, iit.itemModifiedAppearanceSpec5, " \ - "ig.gemItemId1, ig.gemBonuses1, ig.gemContext1, ig.gemScalingLevel1, ig.gemItemId2, ig.gemBonuses2, ig.gemContext2, ig.gemScalingLevel2, ig.gemItemId3, ig.gemBonuses3, ig.gemContext3, ig.gemScalingLevel3" + "ig.gemItemId1, ig.gemBonuses1, ig.gemContext1, ig.gemItemId2, ig.gemBonuses2, ig.gemContext2, ig.gemItemId3, ig.gemBonuses3, ig.gemContext3" PrepareStatement(CHAR_DEL_POOL_QUEST_SAVE, "DELETE FROM pool_quest_save WHERE pool_id = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_POOL_QUEST_SAVE, "INSERT INTO pool_quest_save (pool_id, quest_id) VALUES (?, ?)", CONNECTION_ASYNC); @@ -195,7 +195,7 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_UPD_ITEM_INSTANCE_ON_LOAD, "UPDATE item_instance SET duration = ?, flags = ?, durability = ? WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_ITEM_INSTANCE, "DELETE FROM item_instance WHERE guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_ITEM_INSTANCE_BY_OWNER, "DELETE FROM item_instance WHERE owner_guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_INS_ITEM_INSTANCE_GEMS, "INSERT INTO item_instance_gems (itemGuid, gemItemId1, gemBonuses1, gemContext1, gemScalingLevel1, gemItemId2, gemBonuses2, gemContext2, gemScalingLevel2, gemItemId3, gemBonuses3, gemContext3, gemScalingLevel3) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); + PrepareStatement(CHAR_INS_ITEM_INSTANCE_GEMS, "INSERT INTO item_instance_gems (itemGuid, gemItemId1, gemBonuses1, gemContext1, gemItemId2, gemBonuses2, gemContext2, gemItemId3, gemBonuses3, gemContext3) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_ITEM_INSTANCE_GEMS, "DELETE FROM item_instance_gems WHERE itemGuid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_ITEM_INSTANCE_GEMS_BY_OWNER, "DELETE iig FROM item_instance_gems iig LEFT JOIN item_instance ii ON iig.itemGuid = ii.guid WHERE ii.owner_guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_ITEM_INSTANCE_TRANSMOG, "INSERT INTO item_instance_transmog (itemGuid, itemModifiedAppearanceAllSpecs, itemModifiedAppearanceSpec1, itemModifiedAppearanceSpec2, itemModifiedAppearanceSpec3, itemModifiedAppearanceSpec4, itemModifiedAppearanceSpec5, " diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index ab4fe0f99e4..7e72ffdb8d7 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -525,12 +525,12 @@ void AuctionHouseMgr::LoadAuctions() } Item* item = NewItemOrBag(proto); - if (!item->LoadFromDB(itemGuid, ObjectGuid::Create<HighGuid::Player>(fields[47].GetUInt64()), fields, itemEntry)) + if (!item->LoadFromDB(itemGuid, ObjectGuid::Create<HighGuid::Player>(fields[44].GetUInt64()), fields, itemEntry)) { delete item; continue; } - uint32 auctionId = fields[48].GetUInt32(); + uint32 auctionId = fields[45].GetUInt32(); itemsByAuction[auctionId].push_back(item); ++count; diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index 9dddf233a85..d7052a98630 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -305,8 +305,6 @@ Item::Item() m_paidMoney = 0; m_paidExtendedCost = 0; - m_gemScalingLevels = { }; - memset(&_bonusData, 0, sizeof(_bonusData)); } @@ -456,7 +454,7 @@ void Item::SaveToDB(CharacterDatabaseTransaction trans) stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ITEM_INSTANCE_GEMS); stmt->setUInt64(0, GetGUID().GetCounter()); uint32 i = 0; - uint32 const gemFields = 4; + uint32 const gemFields = 3; for (UF::SocketedGem const& gemData : m_itemData->Gems) { if (gemData.ItemID) @@ -468,14 +466,12 @@ void Item::SaveToDB(CharacterDatabaseTransaction trans) gemBonusListIDs << bonusListID << ' '; stmt->setString(2 + i * gemFields, gemBonusListIDs.str()); stmt->setUInt8(3 + i * gemFields, gemData.Context); - stmt->setUInt32(4 + i * gemFields, m_gemScalingLevels[i]); } else { stmt->setUInt32(1 + i * gemFields, 0); stmt->setString(2 + i * gemFields, ""); stmt->setUInt8(3 + i * gemFields, 0); - stmt->setUInt32(4 + i * gemFields, 0); } ++i; } @@ -484,7 +480,6 @@ void Item::SaveToDB(CharacterDatabaseTransaction trans) stmt->setUInt32(1 + i * gemFields, 0); stmt->setString(2 + i * gemFields, ""); stmt->setUInt8(3 + i * gemFields, 0); - stmt->setUInt32(4 + i * gemFields, 0); } trans->Append(stmt); } @@ -695,7 +690,7 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fie SetModifier(ITEM_MODIFIER_TRANSMOG_SECONDARY_APPEARANCE_SPEC_4, fields[33].GetUInt32()); SetModifier(ITEM_MODIFIER_TRANSMOG_SECONDARY_APPEARANCE_SPEC_5, fields[34].GetUInt32()); - uint32 const gemFields = 4; + uint32 const gemFields = 3; ItemDynamicFieldGems gemData[MAX_GEM_SOCKETS]; memset(gemData, 0, sizeof(gemData)); for (uint32 i = 0; i < MAX_GEM_SOCKETS; ++i) @@ -709,12 +704,9 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fie gemData[i].Context = fields[37 + i * gemFields].GetUInt8(); if (gemData[i].ItemId) - SetGem(i, &gemData[i], fields[38 + i * gemFields].GetUInt32()); + SetGem(i, &gemData[i]); } - SetModifier(ITEM_MODIFIER_TIMEWALKER_LEVEL, fields[47].GetUInt32()); - SetModifier(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL, fields[48].GetUInt32()); - // Enchants must be loaded after all other bonus/scaling data std::vector<std::string_view> enchantmentTokens = Trinity::Tokenize(fields[8].GetStringView(), ' ', false); if (enchantmentTokens.size() == MAX_ENCHANTMENT_SLOT * MAX_ENCHANTMENT_OFFSET) @@ -1125,30 +1117,9 @@ UF::SocketedGem const* Item::GetGem(uint16 slot) const return slot < m_itemData->Gems.size() ? &m_itemData->Gems[slot] : nullptr; } -void Item::SetGem(uint16 slot, ItemDynamicFieldGems const* gem, uint32 gemScalingLevel) +void Item::SetGem(uint16 slot, ItemDynamicFieldGems const* gem) { ASSERT(slot < MAX_GEM_SOCKETS); - m_gemScalingLevels[slot] = gemScalingLevel; - _bonusData.GemItemLevelBonus[slot] = 0; - if (ItemTemplate const* gemTemplate = sObjectMgr->GetItemTemplate(gem->ItemId)) - { - if (GemPropertiesEntry const* gemProperties = sGemPropertiesStore.LookupEntry(gemTemplate->GetGemProperties())) - { - if (SpellItemEnchantmentEntry const* gemEnchant = sSpellItemEnchantmentStore.LookupEntry(gemProperties->EnchantId)) - { - BonusData gemBonus; - gemBonus.Initialize(gemTemplate); - - uint32 gemBaseItemLevel = gemTemplate->GetItemLevel(); - if (gemBonus.PlayerLevelToItemLevelCurveId) - if (uint32 scaledIlvl = uint32(sDB2Manager.GetCurveValueAt(gemBonus.PlayerLevelToItemLevelCurveId, gemScalingLevel))) - gemBaseItemLevel = scaledIlvl; - - _bonusData.GemRelicType[slot] = gemBonus.RelicType; - } - } - } - auto gemField = m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Gems, slot); SetUpdateFieldValue(gemField.ModifyValue(&UF::SocketedGem::ItemID), gem->ItemId); SetUpdateFieldValue(gemField.ModifyValue(&UF::SocketedGem::Context), gem->Context); @@ -1162,6 +1133,7 @@ bool Item::GemsFitSockets() const for (UF::SocketedGem const& gemData : m_itemData->Gems) { SocketColor color = GetTemplate()->GetSocketColor(gemSlot); + ++gemSlot; if (!color) // no socket slot continue; @@ -1900,9 +1872,6 @@ uint32 Item::GetItemLevel(ItemTemplate const* itemTemplate, BonusData const& bon itemLevel += bonusData.ItemLevelBonus; - for (uint32 i = 0; i < MAX_ITEM_PROTO_SOCKETS; ++i) - itemLevel += bonusData.GemItemLevelBonus[i]; - uint32 itemLevelBeforeUpgrades = itemLevel; if (pvpBonus) @@ -2140,12 +2109,7 @@ void BonusData::Initialize(ItemTemplate const* proto) ItemStatSocketCostMultiplier[i] = proto->GetStatPercentageOfSocket(i); for (uint32 i = 0; i < MAX_ITEM_PROTO_SOCKETS; ++i) - { SocketColor[i] = proto->GetSocketColor(i); - GemItemLevelBonus[i] = 0; - GemRelicType[i] = -1; - GemRelicRankBonus[i] = 0; - } Bonding = proto->GetBonding(); diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h index feea7d67df8..0e247129390 100644 --- a/src/server/game/Entities/Item/Item.h +++ b/src/server/game/Entities/Item/Item.h @@ -78,9 +78,6 @@ struct BonusData uint32 ContentTuningId; uint32 PlayerLevelToItemLevelCurveId; uint32 DisenchantLootId; - uint32 GemItemLevelBonus[MAX_ITEM_PROTO_SOCKETS]; - int32 GemRelicType[MAX_ITEM_PROTO_SOCKETS]; - uint16 GemRelicRankBonus[MAX_ITEM_PROTO_SOCKETS]; int32 RelicType; int32 RequiredLevelOverride; uint32 Suffix; @@ -232,7 +229,7 @@ class TC_GAME_API Item : public Object uint32 GetEnchantmentDuration(EnchantmentSlot slot) const { return m_itemData->Enchantment[slot].Duration; } uint32 GetEnchantmentCharges(EnchantmentSlot slot) const { return m_itemData->Enchantment[slot].Charges; } UF::SocketedGem const* GetGem(uint16 slot) const; - void SetGem(uint16 slot, ItemDynamicFieldGems const* gem, uint32 gemScalingLevel); + void SetGem(uint16 slot, ItemDynamicFieldGems const* gem); std::string const& GetText() const { return m_text; } void SetText(std::string const& text) { m_text = text; } @@ -375,6 +372,5 @@ class TC_GAME_API Item : public Object uint64 m_paidMoney; uint32 m_paidExtendedCost; GuidSet allowedGUIDs; - std::array<uint32, MAX_ITEM_PROTO_SOCKETS> m_gemScalingLevels; }; #endif diff --git a/src/server/game/Entities/Item/ItemTemplate.cpp b/src/server/game/Entities/Item/ItemTemplate.cpp index d8c21a4799e..b8dc33889b3 100644 --- a/src/server/game/Entities/Item/ItemTemplate.cpp +++ b/src/server/game/Entities/Item/ItemTemplate.cpp @@ -21,34 +21,14 @@ #include "Player.h" #include "World.h" -int32 const SocketColorToGemTypeMask[26] = +int32 const SocketColorToGemTypeMask[6] = { 0, SOCKET_COLOR_META, SOCKET_COLOR_RED, SOCKET_COLOR_YELLOW, SOCKET_COLOR_BLUE, - SOCKET_COLOR_HYDRAULIC, - SOCKET_COLOR_COGWHEEL, SOCKET_COLOR_PRISMATIC, - SOCKET_COLOR_RELIC_IRON, - SOCKET_COLOR_RELIC_BLOOD, - SOCKET_COLOR_RELIC_SHADOW, - SOCKET_COLOR_RELIC_FEL, - SOCKET_COLOR_RELIC_ARCANE, - SOCKET_COLOR_RELIC_FROST, - SOCKET_COLOR_RELIC_FIRE, - SOCKET_COLOR_RELIC_WATER, - SOCKET_COLOR_RELIC_LIFE, - SOCKET_COLOR_RELIC_WIND, - SOCKET_COLOR_RELIC_HOLY, - SOCKET_COLOR_PUNCHCARD_RED, - SOCKET_COLOR_PUNCHCARD_YELLOW, - SOCKET_COLOR_PUNCHCARD_BLUE, - SOCKET_COLOR_DOMINATION, - SOCKET_COLOR_CYPHER, - SOCKET_COLOR_TINKER, - SOCKET_COLOR_PRIMORDIAL }; char const* ItemTemplate::GetName(LocaleConstant locale) const diff --git a/src/server/game/Entities/Item/ItemTemplate.h b/src/server/game/Entities/Item/ItemTemplate.h index d7f81c9e97b..23357f816bf 100644 --- a/src/server/game/Entities/Item/ItemTemplate.h +++ b/src/server/game/Entities/Item/ItemTemplate.h @@ -347,30 +347,10 @@ enum SocketColor SOCKET_COLOR_RED = 0x000002, SOCKET_COLOR_YELLOW = 0x000004, SOCKET_COLOR_BLUE = 0x000008, - SOCKET_COLOR_HYDRAULIC = 0x000010, // not used - SOCKET_COLOR_COGWHEEL = 0x000020, - SOCKET_COLOR_PRISMATIC = 0x00000E, - SOCKET_COLOR_RELIC_IRON = 0x000040, - SOCKET_COLOR_RELIC_BLOOD = 0x000080, - SOCKET_COLOR_RELIC_SHADOW = 0x000100, - SOCKET_COLOR_RELIC_FEL = 0x000200, - SOCKET_COLOR_RELIC_ARCANE = 0x000400, - SOCKET_COLOR_RELIC_FROST = 0x000800, - SOCKET_COLOR_RELIC_FIRE = 0x001000, - SOCKET_COLOR_RELIC_WATER = 0x002000, - SOCKET_COLOR_RELIC_LIFE = 0x004000, - SOCKET_COLOR_RELIC_WIND = 0x008000, - SOCKET_COLOR_RELIC_HOLY = 0x010000, - SOCKET_COLOR_PUNCHCARD_RED = 0x020000, - SOCKET_COLOR_PUNCHCARD_YELLOW = 0x040000, - SOCKET_COLOR_PUNCHCARD_BLUE = 0x080000, - SOCKET_COLOR_DOMINATION = 0x100000, - SOCKET_COLOR_CYPHER = 0x200000, - SOCKET_COLOR_TINKER = 0x400000, - SOCKET_COLOR_PRIMORDIAL = 0x800000, -}; - -extern int32 const SocketColorToGemTypeMask[26]; + SOCKET_COLOR_PRISMATIC = SOCKET_COLOR_RED | SOCKET_COLOR_YELLOW | SOCKET_COLOR_BLUE +}; + +extern int32 const SocketColorToGemTypeMask[6]; #define SOCKET_COLOR_STANDARD (SOCKET_COLOR_RED | SOCKET_COLOR_YELLOW | SOCKET_COLOR_BLUE) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 4695d133a39..591c8468399 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -3934,7 +3934,7 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe do { Field* fields = resultItems->Fetch(); - uint64 mailId = fields[48].GetUInt64(); + uint64 mailId = fields[44].GetUInt64(); if (Item* mailItem = _LoadMailedItem(playerguid, nullptr, mailId, nullptr, fields)) itemsByMail[mailId].push_back(mailItem); @@ -18062,8 +18062,8 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff) Field* fields = result->Fetch(); if (Item* item = _LoadItem(trans, zoneId, timeDiff, fields)) { - ObjectGuid bagGuid = fields[47].GetUInt64() ? ObjectGuid::Create<HighGuid::Item>(fields[49].GetUInt64()) : ObjectGuid::Empty; - uint8 slot = fields[48].GetUInt8(); + ObjectGuid bagGuid = fields[44].GetUInt64() ? ObjectGuid::Create<HighGuid::Item>(fields[44].GetUInt64()) : ObjectGuid::Empty; + uint8 slot = fields[45].GetUInt8(); GetSession()->GetCollectionMgr()->CheckHeirloomUpgrades(item); GetSession()->GetCollectionMgr()->AddItemAppearance(item); diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 6fb3100c5d1..1605dfc11cd 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -3150,34 +3150,7 @@ struct ItemSpecStats } } else if (item->ClassID == ITEM_CLASS_GEM) - { ItemType = 7; - if (GemPropertiesEntry const* gem = sGemPropertiesStore.LookupEntry(sparse->GemProperties)) - { - if (gem->Type & SOCKET_COLOR_RELIC_IRON) - AddStat(ITEM_SPEC_STAT_RELIC_IRON); - if (gem->Type & SOCKET_COLOR_RELIC_BLOOD) - AddStat(ITEM_SPEC_STAT_RELIC_BLOOD); - if (gem->Type & SOCKET_COLOR_RELIC_SHADOW) - AddStat(ITEM_SPEC_STAT_RELIC_SHADOW); - if (gem->Type & SOCKET_COLOR_RELIC_FEL) - AddStat(ITEM_SPEC_STAT_RELIC_FEL); - if (gem->Type & SOCKET_COLOR_RELIC_ARCANE) - AddStat(ITEM_SPEC_STAT_RELIC_ARCANE); - if (gem->Type & SOCKET_COLOR_RELIC_FROST) - AddStat(ITEM_SPEC_STAT_RELIC_FROST); - if (gem->Type & SOCKET_COLOR_RELIC_FIRE) - AddStat(ITEM_SPEC_STAT_RELIC_FIRE); - if (gem->Type & SOCKET_COLOR_RELIC_WATER) - AddStat(ITEM_SPEC_STAT_RELIC_WATER); - if (gem->Type & SOCKET_COLOR_RELIC_LIFE) - AddStat(ITEM_SPEC_STAT_RELIC_LIFE); - if (gem->Type & SOCKET_COLOR_RELIC_WIND) - AddStat(ITEM_SPEC_STAT_RELIC_WIND); - if (gem->Type & SOCKET_COLOR_RELIC_HOLY) - AddStat(ITEM_SPEC_STAT_RELIC_HOLY); - } - } else ItemType = 0; diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index 4315f4f4089..035d8e00f3e 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -2558,7 +2558,7 @@ void Guild::LoadBankTabFromDB(Field* fields) bool Guild::LoadBankItemFromDB(Field* fields) { - uint8 tabId = fields[48].GetUInt8(); + uint8 tabId = fields[45].GetUInt8(); if (tabId >= _GetPurchasedTabsSize()) { TC_LOG_ERROR("guild", "Invalid tab for item (GUID: {}, id: #{}) in guild bank, skipped.", diff --git a/src/server/game/Guilds/GuildMgr.cpp b/src/server/game/Guilds/GuildMgr.cpp index 5ee751019a0..7781fe83b85 100644 --- a/src/server/game/Guilds/GuildMgr.cpp +++ b/src/server/game/Guilds/GuildMgr.cpp @@ -415,11 +415,9 @@ void GuildMgr::LoadGuilds() // secondaryItemModifiedAppearanceAllSpecs, secondaryItemModifiedAppearanceSpec1, secondaryItemModifiedAppearanceSpec2, // 34 35 36 // secondaryItemModifiedAppearanceSpec3, secondaryItemModifiedAppearanceSpec4, secondaryItemModifiedAppearanceSpec5, - // 37 38 39 40 41 42 43 44 45 46 47 48 - // gemItemId1, gemBonuses1, gemContext1, gemScalingLevel1, gemItemId2, gemBonuses2, gemContext2, gemScalingLevel2, gemItemId3, gemBonuses3, gemContext3, gemScalingLevel3 - // 49 50 - // fixedScalingLevel, artifactKnowledgeLevel - // 51 52 53 + // 37 38 39 40 41 42 43 44 45 + // gemItemId1, gemBonuses1, gemContext1, gemItemId2, gemBonuses2, gemContext2, gemItemId3, gemBonuses3, gemContext3 + // 46 47 48 // guildid, TabId, SlotId FROM guild_bank_item gbi INNER JOIN item_instance ii ON gbi.item_guid = ii.guid PreparedQueryResult result = CharacterDatabase.Query(CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUILD_BANK_ITEMS)); @@ -433,7 +431,7 @@ void GuildMgr::LoadGuilds() do { Field* fields = result->Fetch(); - uint64 guildId = fields[47].GetUInt64(); + uint64 guildId = fields[44].GetUInt64(); if (Guild* guild = GetGuildById(guildId)) guild->LoadBankItemFromDB(fields); diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index 6a7120a2c79..60481b71068 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -1059,19 +1059,15 @@ void WorldSession::HandleSocketGems(WorldPackets::Item::SocketGems& socketGems) //if a meta gem is being equipped, all information has to be written to the item before testing if the conditions for the gem are met - //remove ALL mods - gem can change item level - if (itemTarget->IsEquipped()) - _player->_ApplyItemMods(itemTarget, itemTarget->GetSlot(), false); + //remove ALL enchants + for (uint32 enchanmentSlot = SOCK_ENCHANTMENT_SLOT; enchanmentSlot < SOCK_ENCHANTMENT_SLOT + MAX_GEM_SOCKETS; ++enchanmentSlot) + _player->ApplyEnchantment(itemTarget, EnchantmentSlot(enchanmentSlot), false); for (uint16 i = 0; i < MAX_GEM_SOCKETS; ++i) { if (gems[i]) { - uint32 gemScalingLevel = _player->GetLevel(); - if (uint32 fixedLevel = gems[i]->GetModifier(ITEM_MODIFIER_TIMEWALKER_LEVEL)) - gemScalingLevel = fixedLevel; - - itemTarget->SetGem(i, &gemData[i], gemScalingLevel); + itemTarget->SetGem(i, &gemData[i]); if (gemProperties[i] && gemProperties[i]->EnchantId) itemTarget->SetEnchantment(EnchantmentSlot(SOCK_ENCHANTMENT_SLOT + i), gemProperties[i]->EnchantId, 0, 0, _player->GetGUID()); @@ -1081,8 +1077,8 @@ void WorldSession::HandleSocketGems(WorldPackets::Item::SocketGems& socketGems) } } - if (itemTarget->IsEquipped()) - _player->_ApplyItemMods(itemTarget, itemTarget->GetSlot(), true); + for (uint32 enchantmentSlot = SOCK_ENCHANTMENT_SLOT; enchantmentSlot < SOCK_ENCHANTMENT_SLOT + MAX_GEM_SOCKETS; ++enchantmentSlot) + _player->ApplyEnchantment(itemTarget, EnchantmentSlot(enchantmentSlot), true); bool SocketBonusToBeActivated = itemTarget->GemsFitSockets();//current socketbonus state if (SocketBonusActivated ^ SocketBonusToBeActivated) //if there was a change... |