diff options
author | Ovahlord <dreadkiller@gmx.de> | 2024-06-25 18:08:28 +0200 |
---|---|---|
committer | Ovahlord <dreadkiller@gmx.de> | 2024-06-25 18:08:28 +0200 |
commit | dc67de6b1b921856e30c53d368a584438d99f677 (patch) | |
tree | 88394b4979b5665d037db5c938e7cabc21acf461 | |
parent | 848be58d82d5e35612fef17e44f9d41ed448b9cd (diff) |
Core/Items: dropped artifact weapon implementation
28 files changed, 19 insertions, 1322 deletions
diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql index 112a64e39c5..e97f71e394d 100644 --- a/sql/base/characters_database.sql +++ b/sql/base/characters_database.sql @@ -2569,55 +2569,6 @@ LOCK TABLES `item_instance` WRITE; UNLOCK TABLES; -- --- Table structure for table `item_instance_artifact` --- - -DROP TABLE IF EXISTS `item_instance_artifact`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `item_instance_artifact` ( - `itemGuid` bigint unsigned NOT NULL, - `xp` bigint unsigned NOT NULL DEFAULT '0', - `artifactAppearanceId` int unsigned NOT NULL DEFAULT '0', - `artifactTierId` int unsigned NOT NULL DEFAULT '0', - PRIMARY KEY (`itemGuid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `item_instance_artifact` --- - -LOCK TABLES `item_instance_artifact` WRITE; -/*!40000 ALTER TABLE `item_instance_artifact` DISABLE KEYS */; -/*!40000 ALTER TABLE `item_instance_artifact` ENABLE KEYS */; -UNLOCK TABLES; - --- --- Table structure for table `item_instance_artifact_powers` --- - -DROP TABLE IF EXISTS `item_instance_artifact_powers`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `item_instance_artifact_powers` ( - `itemGuid` bigint unsigned NOT NULL, - `artifactPowerId` int unsigned NOT NULL, - `purchasedRank` tinyint unsigned DEFAULT '0', - PRIMARY KEY (`itemGuid`,`artifactPowerId`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Dumping data for table `item_instance_artifact_powers` --- - -LOCK TABLES `item_instance_artifact_powers` WRITE; -/*!40000 ALTER TABLE `item_instance_artifact_powers` DISABLE KEYS */; -/*!40000 ALTER TABLE `item_instance_artifact_powers` ENABLE KEYS */; -UNLOCK TABLES; - --- -- Table structure for table `item_instance_gems` -- @@ -3454,7 +3405,8 @@ INSERT INTO `updates` VALUES ('2024_04_12_00_characters.sql','043E023F998DA77170C9D2D0162CAA340290B215','ARCHIVED','2024-04-12 00:23:51',0), ('2024_06_01_00_characters.sql','0440E0A8BE109101B390A640397D9B024C8E124B','ARCHIVED','2024-06-01 19:29:34',0), ('2024_06_02_00_characters.sql','18D12ED7A1D30675AAB807BAEB886FCCC76CED21','ARCHIVED','2024-06-02 23:04:45',0), -('2024_06_05_00_characters.sql','3BE1839524918827D4C0C8F9FBE9890CDF759FB4','RELEASED','2024-06-05 21:44:36',0); +('2024_06_05_00_characters.sql','3BE1839524918827D4C0C8F9FBE9890CDF759FB4','RELEASED','2024-06-05 21:44:36',0), +('2024_06_25_00_characters.sql','046AC59E8B828B0C81A1A3C79860E464D96228B8','RELEASED','2024-06-25 17:56:15',0); /*!40000 ALTER TABLE `updates` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/characters/cata_classic/2024_06_25_00_characters.sql b/sql/updates/characters/cata_classic/2024_06_25_00_characters.sql new file mode 100644 index 00000000000..2388055c8f0 --- /dev/null +++ b/sql/updates/characters/cata_classic/2024_06_25_00_characters.sql @@ -0,0 +1,2 @@ +DROP TABLE IF EXISTS `item_instance_artifact`; +DROP TABLE IF EXISTS `item_instance_artifact_powers`; diff --git a/sql/updates/world/cata_classic/2024_06_25_00_world.sql b/sql/updates/world/cata_classic/2024_06_25_00_world.sql new file mode 100644 index 00000000000..fbf021c5614 --- /dev/null +++ b/sql/updates/world/cata_classic/2024_06_25_00_world.sql @@ -0,0 +1 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_item_artifical_stamina', 'spell_item_artifical_damage'); diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index cc3bebcf537..d01d9d7add8 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -163,7 +163,6 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_SEL_CHARACTER_ACTIONS_SPEC, "SELECT button, action, type FROM character_action WHERE guid = ? AND spec = ? AND traitConfigId = ? ORDER BY button", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_MAILITEMS, "SELECT " SelectItemInstanceContent ", ii.owner_guid, m.id FROM mail_items mi INNER JOIN mail m ON mi.mail_id = m.id LEFT JOIN item_instance ii ON mi.item_guid = ii.guid LEFT JOIN item_instance_gems ig ON ii.guid = ig.itemGuid LEFT JOIN item_instance_transmog iit ON ii.guid = iit.itemGuid LEFT JOIN item_instance_modifiers im ON ii.guid = im.itemGuid WHERE m.receiver = ?", CONNECTION_BOTH); - PrepareStatement(CHAR_SEL_MAILITEMS_ARTIFACT, "SELECT a.itemGuid, a.xp, a.artifactAppearanceId, a.artifactTierId, ap.artifactPowerId, ap.purchasedRank FROM item_instance_artifact_powers ap LEFT JOIN item_instance_artifact a ON ap.itemGuid = a.itemGuid INNER JOIN mail_items mi ON a.itemGuid = mi.item_guid INNER JOIN mail m ON mi.mail_id = m.id WHERE m.receiver = ?", CONNECTION_BOTH); PrepareStatement(CHAR_SEL_AUCTION_ITEMS, "SELECT " SelectItemInstanceContent ", ii.owner_guid, ai.auctionId FROM auction_items ai INNER JOIN item_instance ii ON ai.itemGuid = ii.guid LEFT JOIN item_instance_gems ig ON ii.guid = ig.itemGuid LEFT JOIN item_instance_transmog iit ON ii.guid = iit.itemGuid LEFT JOIN item_instance_modifiers im ON ii.guid = im.itemGuid", CONNECTION_SYNCH); PrepareStatement(CHAR_SEL_AUCTIONS, "SELECT id, auctionHouseId, owner, bidder, minBid, buyoutOrUnitPrice, deposit, bidAmount, startTime, endTime, serverFlags FROM auctionhouse", CONNECTION_SYNCH); PrepareStatement(CHAR_INS_AUCTION_ITEMS, "INSERT INTO auction_items (auctionId, itemGuid) VALUES (?, ?)", CONNECTION_ASYNC); @@ -205,13 +204,6 @@ void CharacterDatabaseConnection::DoPrepareStatements() "secondaryItemModifiedAppearanceAllSpecs, secondaryItemModifiedAppearanceSpec1, secondaryItemModifiedAppearanceSpec2, secondaryItemModifiedAppearanceSpec3, secondaryItemModifiedAppearanceSpec4, secondaryItemModifiedAppearanceSpec5) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_ITEM_INSTANCE_TRANSMOG, "DELETE FROM item_instance_transmog WHERE itemGuid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_ITEM_INSTANCE_TRANSMOG_BY_OWNER, "DELETE iit FROM item_instance_transmog iit LEFT JOIN item_instance ii ON iit.itemGuid = ii.guid WHERE ii.owner_guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_SEL_ITEM_INSTANCE_ARTIFACT, "SELECT a.itemGuid, a.xp, a.artifactAppearanceId, a.artifactTierId, ap.artifactPowerId, ap.purchasedRank FROM item_instance_artifact_powers ap LEFT JOIN item_instance_artifact a ON ap.itemGuid = a.itemGuid INNER JOIN character_inventory ci ON ci.item = ap.itemGuid WHERE ci.guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_INS_ITEM_INSTANCE_ARTIFACT, "INSERT INTO item_instance_artifact (itemGuid, xp, artifactAppearanceId, artifactTierId) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC); - PrepareStatement(CHAR_DEL_ITEM_INSTANCE_ARTIFACT, "DELETE FROM item_instance_artifact WHERE itemGuid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_DEL_ITEM_INSTANCE_ARTIFACT_BY_OWNER, "DELETE iia FROM item_instance_artifact iia LEFT JOIN item_instance ii ON iia.itemGuid = ii.guid WHERE ii.owner_guid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_INS_ITEM_INSTANCE_ARTIFACT_POWERS, "INSERT INTO item_instance_artifact_powers (itemGuid, artifactPowerId, purchasedRank) VALUES (?, ?, ?)", CONNECTION_ASYNC); - PrepareStatement(CHAR_DEL_ITEM_INSTANCE_ARTIFACT_POWERS, "DELETE FROM item_instance_artifact_powers WHERE itemGuid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_DEL_ITEM_INSTANCE_ARTIFACT_POWERS_BY_OWNER, "DELETE iiap FROM item_instance_artifact_powers iiap LEFT JOIN item_instance ii ON iiap.itemGuid = ii.guid WHERE ii.owner_guid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_ITEM_INSTANCE_MODIFIERS, "INSERT INTO item_instance_modifiers (itemGuid, fixedScalingLevel, artifactKnowledgeLevel, itemReforgeId) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_ITEM_INSTANCE_MODIFIERS, "DELETE FROM item_instance_modifiers WHERE itemGuid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_ITEM_INSTANCE_MODIFIERS_BY_OWNER, "DELETE im FROM item_instance_modifiers im LEFT JOIN item_instance ii ON im.itemGuid = ii.guid WHERE ii.owner_guid = ?", CONNECTION_ASYNC); diff --git a/src/server/database/Database/Implementation/CharacterDatabase.h b/src/server/database/Database/Implementation/CharacterDatabase.h index f704c821dc5..f098dd65898 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.h +++ b/src/server/database/Database/Implementation/CharacterDatabase.h @@ -119,7 +119,6 @@ enum CharacterDatabaseStatements : uint32 CHAR_DEL_CHARACTER_FAVORITE_AUCTIONS_BY_CHAR, CHAR_SEL_ACCOUNT_INSTANCELOCKTIMES, CHAR_SEL_MAILITEMS, - CHAR_SEL_MAILITEMS_ARTIFACT, CHAR_SEL_AUCTION_ITEMS, CHAR_INS_AUCTION, CHAR_DEL_AUCTION, @@ -158,13 +157,6 @@ enum CharacterDatabaseStatements : uint32 CHAR_INS_ITEM_INSTANCE_TRANSMOG, CHAR_DEL_ITEM_INSTANCE_TRANSMOG, CHAR_DEL_ITEM_INSTANCE_TRANSMOG_BY_OWNER, - CHAR_SEL_ITEM_INSTANCE_ARTIFACT, - CHAR_INS_ITEM_INSTANCE_ARTIFACT, - CHAR_DEL_ITEM_INSTANCE_ARTIFACT, - CHAR_DEL_ITEM_INSTANCE_ARTIFACT_BY_OWNER, - CHAR_INS_ITEM_INSTANCE_ARTIFACT_POWERS, - CHAR_DEL_ITEM_INSTANCE_ARTIFACT_POWERS, - CHAR_DEL_ITEM_INSTANCE_ARTIFACT_POWERS_BY_OWNER, CHAR_INS_ITEM_INSTANCE_MODIFIERS, CHAR_DEL_ITEM_INSTANCE_MODIFIERS, CHAR_DEL_ITEM_INSTANCE_MODIFIERS_BY_OWNER, diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp index c8e4443ad2d..1507f033f79 100644 --- a/src/server/game/Achievements/CriteriaHandler.cpp +++ b/src/server/game/Achievements/CriteriaHandler.cpp @@ -2562,14 +2562,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6 case ModifierTreeType::GarrisonTalentResearchInProgress: // 207 NYI return false; case ModifierTreeType::PlayerEquippedArtifactAppearanceSet: // 208 - { - if (Aura const* artifactAura = referencePlayer->GetAura(ARTIFACTS_ALL_WEAPONS_GENERAL_WEAPON_EQUIPPED_PASSIVE)) - if (Item* artifact = referencePlayer->GetItemByGuid(artifactAura->GetCastItemGUID())) - if (ArtifactAppearanceEntry const* artifactAppearance = sArtifactAppearanceStore.LookupEntry(artifact->GetModifier(ITEM_MODIFIER_ARTIFACT_APPEARANCE_ID))) - if (artifactAppearance->ArtifactAppearanceSetID == reqValue) - break; return false; - } case ModifierTreeType::PlayerHasCurrencyEqual: // 209 if (referencePlayer->GetCurrencyQuantity(reqValue) != secondaryAsset) return false; @@ -2605,14 +2598,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6 break; } case ModifierTreeType::ArtifactTraitUnlockedCountEqualOrGreaterThan: // 217 - { - Item const* artifact = referencePlayer->GetItemByEntry(secondaryAsset, ItemSearchLocation::Everywhere); - if (!artifact) - return false; - if (artifact->GetTotalUnlockedArtifactPowers() < reqValue) - return false; - break; - } + return false; case ModifierTreeType::ParagonReputationLevelEqualOrGreaterThan: // 218 if (referencePlayer->GetReputationMgr().GetParagonLevel(miscValue1) < int32(reqValue)) return false; @@ -2660,20 +2646,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6 case ModifierTreeType::PlayerHasItemInHistoryOfProgressiveEvent: // 224 NYI return false; case ModifierTreeType::PlayerHasArtifactPowerRankCountPurchasedEqualOrGreaterThan: // 225 - { - Aura const* artifactAura = referencePlayer->GetAura(ARTIFACTS_ALL_WEAPONS_GENERAL_WEAPON_EQUIPPED_PASSIVE); - if (!artifactAura) - return false; - Item const* artifact = referencePlayer->GetItemByGuid(artifactAura->GetCastItemGUID()); - if (!artifact) - return false; - UF::ArtifactPower const* artifactPower = artifact->GetArtifactPower(secondaryAsset); - if (!artifactPower) return false; - if (artifactPower->PurchasedRank < reqValue) - return false; - break; - } case ModifierTreeType::PlayerHasBoosted: // 226 if (referencePlayer->HasLevelBoosted()) return false; diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 5cb00383257..e249928f70c 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -16,7 +16,6 @@ */ #include "GameObject.h" -#include "ArtifactPackets.h" #include "Battleground.h" #include "BattlegroundPackets.h" #include "CellImpl.h" @@ -3296,44 +3295,6 @@ void GameObject::Use(Unit* user) AssaultCapturePoint(player); return; } - case GAMEOBJECT_TYPE_ITEM_FORGE: - { - GameObjectTemplate const* info = GetGOInfo(); - if (!info) - return; - - if (user->GetTypeId() != TYPEID_PLAYER) - return; - - Player* player = user->ToPlayer(); - - if (!MeetsInteractCondition(player)) - return; - - switch (info->itemForge.ForgeType) - { - case 0: // Artifact Forge - case 1: // Relic Forge - { - Aura const* artifactAura = player->GetAura(ARTIFACTS_ALL_WEAPONS_GENERAL_WEAPON_EQUIPPED_PASSIVE); - Item const* item = artifactAura ? player->GetItemByGuid(artifactAura->GetCastItemGUID()) : nullptr; - if (!item) - { - player->SendDirectMessage(WorldPackets::Misc::DisplayGameError(GameError::ERR_MUST_EQUIP_ARTIFACT).Write()); - return; - } - - WorldPackets::Artifact::OpenArtifactForge openArtifactForge; - openArtifactForge.ArtifactGUID = item->GetGUID(); - openArtifactForge.ForgeGUID = GetGUID(); - player->SendDirectMessage(openArtifactForge.Write()); - break; - } - default: - break; - } - return; - } case GAMEOBJECT_TYPE_UI_LINK: { Player* player = user->ToPlayer(); diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index 4734740d264..5715bdfb589 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -16,7 +16,6 @@ */ #include "Item.h" -#include "ArtifactPackets.h" #include "Bag.h" #include "CollectionMgr.h" #include "Common.h" @@ -299,44 +298,6 @@ ItemModifier const SecondaryAppearanceModifierSlotBySpec[MAX_SPECIALIZATIONS] = ITEM_MODIFIER_TRANSMOG_SECONDARY_APPEARANCE_SPEC_5 }; -void ItemAdditionalLoadInfo::Init(std::unordered_map<ObjectGuid::LowType, ItemAdditionalLoadInfo>* loadInfo, - PreparedQueryResult artifactResult) -{ - // 0 1 2 3 4 5 - // SELECT a.itemGuid, a.xp, a.artifactAppearanceId, a.artifactTierId, ap.artifactPowerId, ap.purchasedRank FROM item_instance_artifact_powers ap LEFT JOIN item_instance_artifact a ON ap.itemGuid = a.itemGuid ... - if (artifactResult) - { - do - { - Field* fields = artifactResult->Fetch(); - ItemAdditionalLoadInfo& info = (*loadInfo)[fields[0].GetUInt64()]; - if (!info.Artifact) - info.Artifact.emplace(); - info.Artifact->Xp = fields[1].GetUInt64(); - info.Artifact->ArtifactAppearanceId = fields[2].GetUInt32(); - info.Artifact->ArtifactTierId = fields[3].GetUInt32(); - ArtifactPowerData artifactPowerData; - artifactPowerData.ArtifactPowerId = fields[4].GetUInt32(); - artifactPowerData.PurchasedRank = fields[5].GetUInt8(); - if (ArtifactPowerEntry const* artifactPower = sArtifactPowerStore.LookupEntry(artifactPowerData.ArtifactPowerId)) - { - uint32 maxRank = artifactPower->MaxPurchasableRank; - // allow ARTIFACT_POWER_FLAG_FINAL to overflow maxrank here - needs to be handled in Item::CheckArtifactUnlock (will refund artifact power) - if (artifactPower->Flags & ARTIFACT_POWER_FLAG_MAX_RANK_WITH_TIER && artifactPower->Tier < info.Artifact->ArtifactTierId) - maxRank += info.Artifact->ArtifactTierId - artifactPower->Tier; - - if (artifactPowerData.PurchasedRank > maxRank) - artifactPowerData.PurchasedRank = maxRank; - - artifactPowerData.CurrentRankWithBonus = (artifactPower->Flags & ARTIFACT_POWER_FLAG_FIRST) == ARTIFACT_POWER_FLAG_FIRST ? 1 : 0; - - info.Artifact->ArtifactPowers.push_back(artifactPowerData); - } - - } while (artifactResult->NextRow()); - } -} - Item::Item() { m_objectType |= TYPEMASK_ITEM; @@ -391,28 +352,6 @@ bool Item::Create(ObjectGuid::LowType guidlow, uint32 itemId, ItemContext contex SetCreateTime(GameTime::GetGameTime()); SetContext(context); - if (itemProto->GetArtifactID()) - { - InitArtifactPowers(itemProto->GetArtifactID(), 0); - for (ArtifactAppearanceEntry const* artifactAppearance : sArtifactAppearanceStore) - { - if (ArtifactAppearanceSetEntry const* artifactAppearanceSet = sArtifactAppearanceSetStore.LookupEntry(artifactAppearance->ArtifactAppearanceSetID)) - { - if (itemProto->GetArtifactID() != artifactAppearanceSet->ArtifactID) - continue; - - if (!owner || !ConditionMgr::IsPlayerMeetingCondition(owner, artifactAppearance->UnlockPlayerConditionID)) - continue; - - SetModifier(ITEM_MODIFIER_ARTIFACT_APPEARANCE_ID, artifactAppearance->ID); - SetAppearanceModId(artifactAppearance->ItemAppearanceModifierID); - break; - } - } - - CheckArtifactRelicSlotUnlock(owner ? owner : GetOwner()); - } - return true; } @@ -620,33 +559,6 @@ void Item::SaveToDB(CharacterDatabaseTransaction trans) trans->Append(stmt); } - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_ARTIFACT); - stmt->setUInt64(0, GetGUID().GetCounter()); - trans->Append(stmt); - - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_ARTIFACT_POWERS); - stmt->setUInt64(0, GetGUID().GetCounter()); - trans->Append(stmt); - - if (GetTemplate()->GetArtifactID()) - { - stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ITEM_INSTANCE_ARTIFACT); - stmt->setUInt64(0, GetGUID().GetCounter()); - stmt->setUInt64(1, m_itemData->ArtifactXP); - stmt->setUInt32(2, GetModifier(ITEM_MODIFIER_ARTIFACT_APPEARANCE_ID)); - stmt->setUInt32(3, GetModifier(ITEM_MODIFIER_ARTIFACT_TIER)); - trans->Append(stmt); - - for (UF::ArtifactPower const& artifactPower : m_itemData->ArtifactPowers) - { - stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ITEM_INSTANCE_ARTIFACT_POWERS); - stmt->setUInt64(0, GetGUID().GetCounter()); - stmt->setUInt32(1, artifactPower.ArtifactPowerID); - stmt->setUInt8(2, artifactPower.PurchasedRank); - trans->Append(stmt); - } - } - static ItemModifier const modifiersTable[] = { ITEM_MODIFIER_TIMEWALKER_LEVEL, @@ -684,14 +596,6 @@ void Item::SaveToDB(CharacterDatabaseTransaction trans) stmt->setUInt64(0, GetGUID().GetCounter()); trans->Append(stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_ARTIFACT); - stmt->setUInt64(0, GetGUID().GetCounter()); - trans->Append(stmt); - - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_ARTIFACT_POWERS); - stmt->setUInt64(0, GetGUID().GetCounter()); - trans->Append(stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_MODIFIERS); stmt->setUInt64(0, GetGUID().GetCounter()); trans->Append(stmt); @@ -900,87 +804,6 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fie return true; } -void Item::LoadArtifactData(Player const* owner, uint64 xp, uint32 artifactAppearanceId, uint32 artifactTier, std::vector<ArtifactPowerData>& powers) -{ - for (uint8 i = 0; i <= artifactTier; ++i) - InitArtifactPowers(GetTemplate()->GetArtifactID(), i); - - SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ArtifactXP), xp); - SetModifier(ITEM_MODIFIER_ARTIFACT_APPEARANCE_ID, artifactAppearanceId); - SetModifier(ITEM_MODIFIER_ARTIFACT_TIER, artifactTier); - - if (ArtifactAppearanceEntry const* artifactAppearance = sArtifactAppearanceStore.LookupEntry(artifactAppearanceId)) - SetAppearanceModId(artifactAppearance->ItemAppearanceModifierID); - - uint8 totalPurchasedRanks = 0; - for (ArtifactPowerData& power : powers) - { - power.CurrentRankWithBonus += power.PurchasedRank; - totalPurchasedRanks += power.PurchasedRank; - - ArtifactPowerEntry const* artifactPower = sArtifactPowerStore.AssertEntry(power.ArtifactPowerId); - for (uint32 e = SOCK_ENCHANTMENT_SLOT; e <= SOCK_ENCHANTMENT_SLOT_3; ++e) - { - if (SpellItemEnchantmentEntry const* enchant = sSpellItemEnchantmentStore.LookupEntry(GetEnchantmentId(EnchantmentSlot(e)))) - { - for (uint32 i = 0; i < MAX_ITEM_ENCHANTMENT_EFFECTS; ++i) - { - switch (enchant->Effect[i]) - { - case ITEM_ENCHANTMENT_TYPE_ARTIFACT_POWER_BONUS_RANK_BY_TYPE: - if (artifactPower->Label == enchant->EffectArg[i]) - power.CurrentRankWithBonus += enchant->EffectPointsMin[i]; - break; - case ITEM_ENCHANTMENT_TYPE_ARTIFACT_POWER_BONUS_RANK_BY_ID: - if (int32(artifactPower->ID) == enchant->EffectArg[i]) - power.CurrentRankWithBonus += enchant->EffectPointsMin[i]; - break; - case ITEM_ENCHANTMENT_TYPE_ARTIFACT_POWER_BONUS_RANK_PICKER: - if (_bonusData.GemRelicType[e - SOCK_ENCHANTMENT_SLOT] != -1) - { - ArtifactPowerPickerEntry const* artifactPowerPicker = sArtifactPowerPickerStore.LookupEntry(enchant->EffectArg[i]); - if (artifactPowerPicker && owner && ConditionMgr::IsPlayerMeetingCondition(owner, artifactPowerPicker->PlayerConditionID)) - if (artifactPower->Label == _bonusData.GemRelicType[e - SOCK_ENCHANTMENT_SLOT]) - power.CurrentRankWithBonus += enchant->EffectPointsMin[i]; - } - break; - default: - break; - } - } - } - } - - SetArtifactPower(power.ArtifactPowerId, power.PurchasedRank, power.CurrentRankWithBonus); - } - - for (ArtifactPowerData& power : powers) - { - ArtifactPowerEntry const* scaledArtifactPowerEntry = sArtifactPowerStore.AssertEntry(power.ArtifactPowerId); - if (!(scaledArtifactPowerEntry->Flags & ARTIFACT_POWER_FLAG_SCALES_WITH_NUM_POWERS)) - continue; - - SetArtifactPower(power.ArtifactPowerId, power.PurchasedRank, totalPurchasedRanks + 1); - } - - CheckArtifactRelicSlotUnlock(owner); -} - -void Item::CheckArtifactRelicSlotUnlock(Player const* owner) -{ - if (!owner) - return; - - uint8 artifactId = GetTemplate()->GetArtifactID(); - if (!artifactId) - return; - - for (ArtifactUnlockEntry const* artifactUnlock : sArtifactUnlockStore) - if (artifactUnlock->ArtifactID == artifactId) - if (owner->MeetPlayerCondition(artifactUnlock->PlayerConditionID)) - AddBonuses(artifactUnlock->ItemBonusListID); -} - /*static*/ void Item::DeleteFromDB(CharacterDatabaseTransaction trans, ObjectGuid::LowType itemGuid) { @@ -996,14 +819,6 @@ void Item::DeleteFromDB(CharacterDatabaseTransaction trans, ObjectGuid::LowType stmt->setUInt64(0, itemGuid); CharacterDatabase.ExecuteOrAppend(trans, stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_ARTIFACT); - stmt->setUInt64(0, itemGuid); - CharacterDatabase.ExecuteOrAppend(trans, stmt); - - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_ARTIFACT_POWERS); - stmt->setUInt64(0, itemGuid); - CharacterDatabase.ExecuteOrAppend(trans, stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_MODIFIERS); stmt->setUInt64(0, itemGuid); CharacterDatabase.ExecuteOrAppend(trans, stmt); @@ -1333,9 +1148,6 @@ void Item::SetEnchantment(EnchantmentSlot slot, uint32 id, uint32 duration, uint owner->GetSession()->SendEnchantmentLog(GetOwnerGUID(), caster, GetGUID(), GetEntry(), id, slot); } - ApplyArtifactPowerEnchantmentBonuses(slot, GetEnchantmentId(slot), false, owner); - ApplyArtifactPowerEnchantmentBonuses(slot, id, true, owner); - auto enchantmentField = m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Enchantment, slot); SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::ID), id); SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::Duration), duration); @@ -2414,229 +2226,6 @@ void Item::ClearBonuses() SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ItemAppearanceModID), _bonusData.AppearanceModID); } -bool Item::IsArtifactDisabled() const -{ - if (ArtifactEntry const* artifact = sArtifactStore.LookupEntry(GetTemplate()->GetArtifactID())) - return artifact->ArtifactCategoryID != 2; // fishing artifact - - return true; -} - -UF::ArtifactPower const* Item::GetArtifactPower(uint32 artifactPowerId) const -{ - auto indexItr = m_artifactPowerIdToIndex.find(artifactPowerId); - if (indexItr != m_artifactPowerIdToIndex.end()) - return &m_itemData->ArtifactPowers[indexItr->second]; - - return nullptr; -} - -void Item::AddArtifactPower(ArtifactPowerData const* artifactPower) -{ - uint16 index = uint16(m_artifactPowerIdToIndex.size()); - m_artifactPowerIdToIndex[artifactPower->ArtifactPowerId] = index; - - UF::ArtifactPower& powerField = AddDynamicUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ArtifactPowers)); - powerField.ArtifactPowerID = artifactPower->ArtifactPowerId; - powerField.PurchasedRank = artifactPower->PurchasedRank; - powerField.CurrentRankWithBonus = artifactPower->CurrentRankWithBonus; -} - -void Item::SetArtifactPower(uint16 artifactPowerId, uint8 purchasedRank, uint8 currentRankWithBonus) -{ - auto indexItr = m_artifactPowerIdToIndex.find(artifactPowerId); - if (indexItr != m_artifactPowerIdToIndex.end()) - { - SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData) - .ModifyValue(&UF::ItemData::ArtifactPowers, indexItr->second) - .ModifyValue(&UF::ArtifactPower::PurchasedRank), purchasedRank); - - SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData) - .ModifyValue(&UF::ItemData::ArtifactPowers, indexItr->second) - .ModifyValue(&UF::ArtifactPower::CurrentRankWithBonus), currentRankWithBonus); - } -} - -void Item::InitArtifactPowers(uint8 artifactId, uint8 artifactTier) -{ - for (ArtifactPowerEntry const* artifactPower : sDB2Manager.GetArtifactPowers(artifactId)) - { - if (artifactPower->Tier != artifactTier) - continue; - - if (m_artifactPowerIdToIndex.find(artifactPower->ID) != m_artifactPowerIdToIndex.end()) - continue; - - ArtifactPowerData powerData; - powerData.ArtifactPowerId = artifactPower->ID; - powerData.PurchasedRank = 0; - powerData.CurrentRankWithBonus = (artifactPower->Flags & ARTIFACT_POWER_FLAG_FIRST) == ARTIFACT_POWER_FLAG_FIRST ? 1 : 0; - AddArtifactPower(&powerData); - } -} - -uint32 Item::GetTotalUnlockedArtifactPowers() const -{ - uint32 purchased = GetTotalPurchasedArtifactPowers(); - uint64 artifactXp = m_itemData->ArtifactXP; - //uint32 currentArtifactTier = GetModifier(ITEM_MODIFIER_ARTIFACT_TIER); - uint32 extraUnlocked = 0; - do - { - uint64 xpCost = 0; - //if (GtArtifactLevelXPEntry const* cost = sArtifactLevelXPGameTable.GetRow(purchased + extraUnlocked + 1)) - // xpCost = uint64(currentArtifactTier == MAX_ARTIFACT_TIER ? cost->XP2 : cost->XP); - - if (artifactXp < xpCost) - break; - - artifactXp -= xpCost; - ++extraUnlocked; - - } while (true); - - return purchased + extraUnlocked; -} - -uint32 Item::GetTotalPurchasedArtifactPowers() const -{ - uint32 purchasedRanks = 0; - for (UF::ArtifactPower const& power : m_itemData->ArtifactPowers) - purchasedRanks += power.PurchasedRank; - - return purchasedRanks; -} - -void Item::ApplyArtifactPowerEnchantmentBonuses(EnchantmentSlot slot, uint32 enchantId, bool apply, Player* owner) -{ - if (SpellItemEnchantmentEntry const* enchant = sSpellItemEnchantmentStore.LookupEntry(enchantId)) - { - for (uint32 i = 0; i < MAX_ITEM_ENCHANTMENT_EFFECTS; ++i) - { - switch (enchant->Effect[i]) - { - case ITEM_ENCHANTMENT_TYPE_ARTIFACT_POWER_BONUS_RANK_BY_TYPE: - for (uint32 artifactPowerIndex = 0; artifactPowerIndex < m_itemData->ArtifactPowers.size(); ++artifactPowerIndex) - { - UF::ArtifactPower const& artifactPower = m_itemData->ArtifactPowers[artifactPowerIndex]; - if (sArtifactPowerStore.AssertEntry(artifactPower.ArtifactPowerID)->Label == enchant->EffectArg[i]) - { - uint8 newRank = artifactPower.CurrentRankWithBonus; - if (apply) - newRank += enchant->EffectPointsMin[i]; - else - newRank -= enchant->EffectPointsMin[i]; - - SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData) - .ModifyValue(&UF::ItemData::ArtifactPowers, artifactPowerIndex) - .ModifyValue(&UF::ArtifactPower::CurrentRankWithBonus), newRank); - - if (IsEquipped()) - if (ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower.ArtifactPowerID, newRank ? newRank - 1 : 0)) - owner->ApplyArtifactPowerRank(this, artifactPowerRank, newRank != 0); - } - } - break; - case ITEM_ENCHANTMENT_TYPE_ARTIFACT_POWER_BONUS_RANK_BY_ID: - { - if (uint16 const* artifactPowerIndex = Trinity::Containers::MapGetValuePtr(m_artifactPowerIdToIndex, enchant->EffectArg[i])) - { - uint8 newRank = m_itemData->ArtifactPowers[*artifactPowerIndex].CurrentRankWithBonus; - if (apply) - newRank += enchant->EffectPointsMin[i]; - else - newRank -= enchant->EffectPointsMin[i]; - - SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData) - .ModifyValue(&UF::ItemData::ArtifactPowers, *artifactPowerIndex) - .ModifyValue(&UF::ArtifactPower::CurrentRankWithBonus), newRank); - - if (IsEquipped()) - if (ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(m_itemData->ArtifactPowers[*artifactPowerIndex].ArtifactPowerID, newRank ? newRank - 1 : 0)) - owner->ApplyArtifactPowerRank(this, artifactPowerRank, newRank != 0); - } - break; - } - case ITEM_ENCHANTMENT_TYPE_ARTIFACT_POWER_BONUS_RANK_PICKER: - if (slot >= SOCK_ENCHANTMENT_SLOT && slot <= SOCK_ENCHANTMENT_SLOT_3 && _bonusData.GemRelicType[slot - SOCK_ENCHANTMENT_SLOT] != -1) - { - if (ArtifactPowerPickerEntry const* artifactPowerPicker = sArtifactPowerPickerStore.LookupEntry(enchant->EffectArg[i])) - { - if (ConditionMgr::IsPlayerMeetingCondition(owner, artifactPowerPicker->PlayerConditionID)) - { - for (uint32 artifactPowerIndex = 0; artifactPowerIndex < m_itemData->ArtifactPowers.size(); ++artifactPowerIndex) - { - UF::ArtifactPower const& artifactPower = m_itemData->ArtifactPowers[artifactPowerIndex]; - if (sArtifactPowerStore.AssertEntry(artifactPower.ArtifactPowerID)->Label == _bonusData.GemRelicType[slot - SOCK_ENCHANTMENT_SLOT]) - { - uint8 newRank = artifactPower.CurrentRankWithBonus; - if (apply) - newRank += enchant->EffectPointsMin[i]; - else - newRank -= enchant->EffectPointsMin[i]; - - SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData) - .ModifyValue(&UF::ItemData::ArtifactPowers, artifactPowerIndex) - .ModifyValue(&UF::ArtifactPower::CurrentRankWithBonus), newRank); - - if (IsEquipped()) - if (ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower.ArtifactPowerID, newRank ? newRank - 1 : 0)) - owner->ApplyArtifactPowerRank(this, artifactPowerRank, newRank != 0); - } - } - } - } - } - break; - default: - break; - } - } - } -} - -void Item::CopyArtifactDataFromParent(Item* parent) -{ - memcpy(_bonusData.GemItemLevelBonus, parent->GetBonus()->GemItemLevelBonus, sizeof(_bonusData.GemItemLevelBonus)); - SetModifier(ITEM_MODIFIER_ARTIFACT_APPEARANCE_ID, parent->GetModifier(ITEM_MODIFIER_ARTIFACT_APPEARANCE_ID)); - SetAppearanceModId(parent->GetAppearanceModId()); -} - -void Item::GiveArtifactXp(uint64 amount, Item* /*sourceItem*/, uint32 artifactCategoryId) -{ - Player* owner = GetOwner(); - if (!owner) - return; - - if (artifactCategoryId) - { - /* - uint32 artifactKnowledgeLevel = 1; - if (sourceItem && sourceItem->GetModifier(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL)) - artifactKnowledgeLevel = sourceItem->GetModifier(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL); - - if (GtArtifactKnowledgeMultiplierEntry const* artifactKnowledge = sArtifactKnowledgeMultiplierGameTable.GetRow(artifactKnowledgeLevel)) - amount = uint64(amount * artifactKnowledge->Multiplier); - */ - - if (amount >= 5000) - amount = 50 * (amount / 50); - else if (amount >= 1000) - amount = 25 * (amount / 25); - else if (amount >= 50) - amount = 5 * (amount / 5); - } - - SetArtifactXP(m_itemData->ArtifactXP + amount); - - WorldPackets::Artifact::ArtifactXpGain artifactXpGain; - artifactXpGain.ArtifactGUID = GetGUID(); - artifactXpGain.Amount = amount; - owner->SendDirectMessage(artifactXpGain.Write()); - - SetState(ITEM_CHANGED, owner); -} - void Item::SetFixedLevel(uint8 level) { if (!_bonusData.HasFixedLevel || GetModifier(ITEM_MODIFIER_TIMEWALKER_LEVEL)) diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h index 8f7dabe585d..069ec0b98af 100644 --- a/src/server/game/Entities/Item/Item.h +++ b/src/server/game/Entities/Item/Item.h @@ -111,28 +111,6 @@ private: } _state; }; -struct ArtifactPowerData -{ - uint32 ArtifactPowerId = 0; - uint8 PurchasedRank = 0; - uint8 CurrentRankWithBonus = 0; -}; - -struct ArtifactData -{ - uint64 Xp = 0; - uint32 ArtifactAppearanceId = 0; - uint32 ArtifactTierId = 0; - std::vector<ArtifactPowerData> ArtifactPowers; -}; - -struct ItemAdditionalLoadInfo -{ - static void Init(std::unordered_map<ObjectGuid::LowType, ItemAdditionalLoadInfo>* loadInfo, PreparedQueryResult artifactResult); - - Optional<ArtifactData> Artifact; -}; - struct ItemDynamicFieldGems { uint32 ItemId; @@ -198,8 +176,6 @@ class TC_GAME_API Item : public Object bool IsBoundByEnchant() const; virtual void SaveToDB(CharacterDatabaseTransaction trans); virtual bool LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fields, uint32 entry); - void LoadArtifactData(Player const* owner, uint64 xp, uint32 artifactAppearanceId, uint32 artifactTier, std::vector<ArtifactPowerData>& powers); // must be called after LoadFromDB to have gems (relics) initialized - void CheckArtifactRelicSlotUnlock(Player const* owner); void AddBonuses(uint32 bonusListID); std::vector<int32> const& GetBonusListIDs() const { return m_itemData->ItemBonusKey->BonusListIDs; } @@ -396,21 +372,6 @@ class TC_GAME_API Item : public Object ObjectGuid GetChildItem() const { return m_childItem; } void SetChildItem(ObjectGuid childItem) { m_childItem = childItem; } - bool IsArtifactDisabled() const; - - UF::ArtifactPower const* GetArtifactPower(uint32 artifactPowerId) const; - void AddArtifactPower(ArtifactPowerData const* artifactPower); - void SetArtifactPower(uint16 artifactPowerId, uint8 purchasedRank, uint8 currentRankWithBonus); - - void InitArtifactPowers(uint8 artifactId, uint8 artifactTier); - uint32 GetTotalUnlockedArtifactPowers() const; - uint32 GetTotalPurchasedArtifactPowers() const; - void ApplyArtifactPowerEnchantmentBonuses(EnchantmentSlot slot, uint32 enchantId, bool apply, Player* owner); - void CopyArtifactDataFromParent(Item* parent); - - void SetArtifactXP(uint64 xp) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ArtifactXP), xp); } - void GiveArtifactXp(uint64 amount, Item* sourceItem, uint32 artifactCategoryId); - ItemContext GetContext() const { return ItemContext(*m_itemData->Context); } void SetContext(ItemContext context) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Context), int32(context)); } @@ -440,7 +401,6 @@ class TC_GAME_API Item : public Object GuidSet allowedGUIDs; ItemRandomBonusListId m_randomBonusListId; // store separately to easily find which bonus list is the one randomly given for stat rerolling ObjectGuid m_childItem; - std::unordered_map<uint32, uint16> m_artifactPowerIdToIndex; std::array<uint32, MAX_ITEM_PROTO_SOCKETS> m_gemScalingLevels; }; #endif diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 4cfe8c75c46..83a7653e176 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2322,10 +2322,6 @@ void Player::GiveLevel(uint8 level) _ApplyAllLevelScaleItemMods(true); // Moved to above SetFullHealth so player will have full health from Heirlooms - if (Aura const* artifactAura = GetAura(ARTIFACTS_ALL_WEAPONS_GENERAL_WEAPON_EQUIPPED_PASSIVE)) - if (Item* artifact = GetItemByGuid(artifactAura->GetCastItemGUID())) - artifact->CheckArtifactRelicSlotUnlock(this); - // Only health and mana are set to maximum. SetFullHealth(); for (PowerTypeEntry const* powerType : sPowerTypeStore) @@ -3880,18 +3876,11 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe if (resultItems) { - stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAILITEMS_ARTIFACT); - stmt->setUInt64(0, guid); - PreparedQueryResult artifactResult = CharacterDatabase.Query(stmt); - - std::unordered_map<ObjectGuid::LowType, ItemAdditionalLoadInfo> additionalData; - ItemAdditionalLoadInfo::Init(&additionalData, artifactResult); - do { Field* fields = resultItems->Fetch(); uint64 mailId = fields[54].GetUInt64(); - if (Item* mailItem = _LoadMailedItem(playerguid, nullptr, mailId, nullptr, fields, Trinity::Containers::MapGetValuePtr(additionalData, fields[0].GetUInt64()))) + if (Item* mailItem = _LoadMailedItem(playerguid, nullptr, mailId, nullptr, fields)) itemsByMail[mailId].push_back(mailItem); } while (resultItems->NextRow()); @@ -4089,14 +4078,6 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe stmt->setUInt64(0, guid); trans->Append(stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_ARTIFACT_BY_OWNER); - stmt->setUInt64(0, guid); - trans->Append(stmt); - - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_ARTIFACT_POWERS_BY_OWNER); - stmt->setUInt64(0, guid); - trans->Append(stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_ITEM_INSTANCE_MODIFIERS_BY_OWNER); stmt->setUInt64(0, guid); trans->Append(stmt); @@ -7765,7 +7746,6 @@ void Player::_ApplyItemMods(Item* item, uint8 slot, bool apply, bool updateItemA if (attackType != MAX_ATTACK) UpdateWeaponDependentAuras(attackType); } - ApplyArtifactPowers(item, apply); ApplyEnchantment(item, apply); ApplyReforgedStats(item, apply); @@ -8087,92 +8067,6 @@ void Player::UpdateItemSetAuras(bool formChange /*= false*/) } } -void Player::ApplyArtifactPowers(Item* item, bool apply) -{ - if (item->IsArtifactDisabled()) - return; - - for (UF::ArtifactPower const& artifactPower : item->m_itemData->ArtifactPowers) - { - uint8 rank = artifactPower.CurrentRankWithBonus; - if (!rank) - continue; - - if (sArtifactPowerStore.AssertEntry(artifactPower.ArtifactPowerID)->Flags & ARTIFACT_POWER_FLAG_SCALES_WITH_NUM_POWERS) - rank = 1; - - ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower.ArtifactPowerID, rank - 1); - if (!artifactPowerRank) - continue; - - ApplyArtifactPowerRank(item, artifactPowerRank, apply); - } - - if (ArtifactAppearanceEntry const* artifactAppearance = sArtifactAppearanceStore.LookupEntry(item->GetModifier(ITEM_MODIFIER_ARTIFACT_APPEARANCE_ID))) - if (artifactAppearance->OverrideShapeshiftDisplayID && GetShapeshiftForm() == ShapeshiftForm(artifactAppearance->OverrideShapeshiftFormID)) - RestoreDisplayId(); -} - -void Player::ApplyArtifactPowerRank(Item* artifact, ArtifactPowerRankEntry const* artifactPowerRank, bool apply) -{ - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(artifactPowerRank->SpellID, DIFFICULTY_NONE); - if (!spellInfo) - return; - - if (spellInfo->IsPassive()) - { - AuraApplication* powerAura = GetAuraApplication(artifactPowerRank->SpellID, ObjectGuid::Empty, artifact->GetGUID()); - if (powerAura) - { - if (apply) - { - for (AuraEffect* auraEffect : powerAura->GetBase()->GetAuraEffects()) - { - if (!auraEffect) - continue; - - if (powerAura->HasEffect(auraEffect->GetEffIndex())) - auraEffect->ChangeAmount(artifactPowerRank->AuraPointsOverride ? artifactPowerRank->AuraPointsOverride : auraEffect->GetSpellEffectInfo().CalcValue()); - } - } - else - RemoveAura(powerAura); - } - else if (apply) - { - CastSpellExtraArgs args; - args.SetTriggerFlags(TRIGGERED_FULL_MASK); - args.SetCastItem(artifact); - if (artifactPowerRank->AuraPointsOverride) - for (SpellEffectInfo const& spellEffectInfo : spellInfo->GetEffects()) - args.AddSpellMod(SpellValueMod(SPELLVALUE_BASE_POINT0 + AsUnderlyingType(spellEffectInfo.EffectIndex)), artifactPowerRank->AuraPointsOverride); - - CastSpell(this, artifactPowerRank->SpellID, args); - } - } - else - { - if (apply && !HasSpell(artifactPowerRank->SpellID)) - { - AddTemporarySpell(artifactPowerRank->SpellID); - WorldPackets::Spells::LearnedSpells learnedSpells; - WorldPackets::Spells::LearnedSpellInfo& learnedSpellInfo = learnedSpells.ClientLearnedSpellData.emplace_back(); - learnedSpellInfo.SpellID = artifactPowerRank->SpellID; - learnedSpells.SuppressMessaging = true; - SendDirectMessage(learnedSpells.Write()); - } - else if (!apply) - { - RemoveTemporarySpell(artifactPowerRank->SpellID); - WorldPackets::Spells::UnlearnedSpells unlearnedSpells; - unlearnedSpells.SuppressMessaging = true; - unlearnedSpells.SpellID.push_back(artifactPowerRank->SpellID); - SendDirectMessage(unlearnedSpells.Write()); - } - } - -} - void Player::CastItemCombatSpell(DamageInfo const& damageInfo) { Unit* target = damageInfo.GetVictim(); @@ -8474,7 +8368,6 @@ void Player::_RemoveAllItemMods() ApplyItemEquipSpell(m_items[i], false); ApplyEnchantment(m_items[i], false); - ApplyArtifactPowers(m_items[i], false); ApplyReforgedStats(m_items[i], false); } } @@ -8530,7 +8423,6 @@ void Player::_ApplyAllItemMods() continue; ApplyItemEquipSpell(m_items[i], true); - ApplyArtifactPowers(m_items[i], true); ApplyEnchantment(m_items[i], true); ApplyReforgedStats(m_items[i], true); } @@ -10985,10 +10877,6 @@ InventoryResult Player::CanUseItem(ItemTemplate const* proto, bool skipRequiredL if (HasSpell(proto->Effects[1]->SpellID)) return EQUIP_ERR_INTERNAL_BAG_ERROR; - if (ArtifactEntry const* artifact = sArtifactStore.LookupEntry(proto->GetArtifactID())) - if (ChrSpecialization(artifact->ChrSpecializationID) != GetPrimarySpecialization()) - return EQUIP_ERR_CANT_USE_ITEM; - return EQUIP_ERR_OK; } @@ -17759,9 +17647,7 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol // must be before inventory (some items required reputation check) m_reputationMgr->LoadFromDB(holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_REPUTATION)); - _LoadInventory(holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_INVENTORY), - holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_ARTIFACTS), - time_diff); + _LoadInventory(holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_INVENTORY), time_diff); if (IsVoidStorageUnlocked()) _LoadVoidStorage(holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_VOID_STORAGE)); @@ -17772,9 +17658,7 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol StartLoadingActionButtons(); // unread mails and next delivery time, actual mails not loaded - _LoadMail(holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_MAILS), - holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS), - holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS_ARTIFACT)); + _LoadMail(holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_MAILS), holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS)); m_social = sSocialMgr->LoadFromDB(holder.GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_SOCIAL_LIST), GetGUID()); @@ -18192,7 +18076,7 @@ void Player::LoadCorpse(PreparedQueryResult result) RemoveAtLoginFlag(AT_LOGIN_RESURRECT); } -void Player::_LoadInventory(PreparedQueryResult result, PreparedQueryResult artifactsResult, uint32 timeDiff) +void Player::_LoadInventory(PreparedQueryResult result, uint32 timeDiff) { // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 // SELECT guid, itemEntry, creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomBonusListId, durability, playedTime, createTime, text, @@ -18226,9 +18110,6 @@ void Player::_LoadInventory(PreparedQueryResult result, PreparedQueryResult arti //NOTE2: the "order by `slot`" is needed because mainhand weapons are (wrongly?) //expected to be equipped before offhand items (@todo fixme) - std::unordered_map<ObjectGuid::LowType, ItemAdditionalLoadInfo> additionalData; - ItemAdditionalLoadInfo::Init(&additionalData, artifactsResult); - if (result) { uint32 zoneId = GetZoneId(); @@ -18245,13 +18126,6 @@ void Player::_LoadInventory(PreparedQueryResult result, PreparedQueryResult arti Field* fields = result->Fetch(); if (Item* item = _LoadItem(trans, zoneId, timeDiff, fields)) { - if (ItemAdditionalLoadInfo* addionalDataPtr = Trinity::Containers::MapGetValuePtr(additionalData, fields[0].GetUInt64())) - { - if (item->GetTemplate()->GetArtifactID() && addionalDataPtr->Artifact) - item->LoadArtifactData(this, addionalDataPtr->Artifact->Xp, addionalDataPtr->Artifact->ArtifactAppearanceId, - addionalDataPtr->Artifact->ArtifactTierId, addionalDataPtr->Artifact->ArtifactPowers); - } - ObjectGuid bagGuid = fields[53].GetUInt64() ? ObjectGuid::Create<HighGuid::Item>(fields[53].GetUInt64()) : ObjectGuid::Empty; uint8 slot = fields[54].GetUInt8(); @@ -18262,10 +18136,7 @@ void Player::_LoadInventory(PreparedQueryResult result, PreparedQueryResult arti if (item->HasItemFlag(ITEM_FIELD_FLAG_CHILD)) { if (Item* parent = GetItemByGuid(item->GetCreator())) - { parent->SetChildItem(item->GetGUID()); - item->CopyArtifactDataFromParent(parent); - } else { TC_LOG_ERROR("entities.player", "Player::_LoadInventory: Player '{}' ({}) has child item ({}, entry: {}) which can't be loaded into inventory because parent item was not found (Bag {}, slot: {}). Item will be sent by mail.", @@ -18562,7 +18433,7 @@ Item* Player::_LoadItem(CharacterDatabaseTransaction trans, uint32 zoneId, uint3 } // load mailed item which should receive current player -Item* Player::_LoadMailedItem(ObjectGuid const& playerGuid, Player* player, uint64 mailId, Mail* mail, Field* fields, ItemAdditionalLoadInfo* addionalData) +Item* Player::_LoadMailedItem(ObjectGuid const& playerGuid, Player* player, uint64 mailId, Mail* mail, Field* fields) { ObjectGuid::LowType itemGuid = fields[0].GetUInt64(); uint32 itemEntry = fields[1].GetUInt32(); @@ -18603,13 +18474,6 @@ Item* Player::_LoadMailedItem(ObjectGuid const& playerGuid, Player* player, uint return nullptr; } - if (addionalData) - { - if (item->GetTemplate()->GetArtifactID() && addionalData->Artifact) - item->LoadArtifactData(player, addionalData->Artifact->Xp, addionalData->Artifact->ArtifactAppearanceId, - addionalData->Artifact->ArtifactTierId, addionalData->Artifact->ArtifactPowers); - } - if (mail) mail->AddItem(itemGuid, itemEntry); @@ -18619,7 +18483,7 @@ Item* Player::_LoadMailedItem(ObjectGuid const& playerGuid, Player* player, uint return item; } -void Player::_LoadMail(PreparedQueryResult mailsResult, PreparedQueryResult mailItemsResult, PreparedQueryResult artifactResult) +void Player::_LoadMail(PreparedQueryResult mailsResult, PreparedQueryResult mailItemsResult) { std::unordered_map<uint64, Mail*> mailById; @@ -18660,14 +18524,11 @@ void Player::_LoadMail(PreparedQueryResult mailsResult, PreparedQueryResult mail if (mailItemsResult) { - std::unordered_map<ObjectGuid::LowType, ItemAdditionalLoadInfo> additionalData; - ItemAdditionalLoadInfo::Init(&additionalData, artifactResult); - do { Field* fields = mailItemsResult->Fetch(); uint64 mailId = fields[53].GetUInt64(); - _LoadMailedItem(GetGUID(), this, mailId, mailById[mailId], fields, Trinity::Containers::MapGetValuePtr(additionalData, fields[0].GetUInt64())); + _LoadMailedItem(GetGUID(), this, mailId, mailById[mailId], fields); } while (mailItemsResult->NextRow()); } diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index c6a9c7ef2be..6979c9ff82d 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -38,7 +38,6 @@ struct AccessRequirement; struct AchievementEntry; struct AreaTableEntry; struct AreaTriggerEntry; -struct ArtifactPowerRankEntry; struct AzeriteEssencePowerEntry; struct AzeriteItemMilestonePowerEntry; struct AzeritePowerEntry; @@ -50,7 +49,6 @@ struct ChrSpecializationEntry; struct CreatureTemplate; struct CurrencyTypesEntry; struct FactionEntry; -struct ItemAdditionalLoadInfo; struct ItemExtendedCostEntry; struct ItemLimitCategoryEntry; struct ItemSetEffect; @@ -868,10 +866,8 @@ enum PlayerLoginQueryIndex PLAYER_LOGIN_QUERY_LOAD_DAILY_QUEST_STATUS, PLAYER_LOGIN_QUERY_LOAD_REPUTATION, PLAYER_LOGIN_QUERY_LOAD_INVENTORY, - PLAYER_LOGIN_QUERY_LOAD_ARTIFACTS, PLAYER_LOGIN_QUERY_LOAD_MAILS, PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS, - PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS_ARTIFACT, PLAYER_LOGIN_QUERY_LOAD_SOCIAL_LIST, PLAYER_LOGIN_QUERY_LOAD_HOME_BIND, PLAYER_LOGIN_QUERY_LOAD_SPELL_COOLDOWNS, @@ -2360,8 +2356,6 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player> void ApplyEquipSpell(SpellInfo const* spellInfo, Item* item, bool apply, bool formChange = false); void UpdateEquipSpellsAtFormChange(); void UpdateItemSetAuras(bool formChange = false); - void ApplyArtifactPowers(Item* item, bool apply); - void ApplyArtifactPowerRank(Item* artifact, ArtifactPowerRankEntry const* artifactPowerRank, bool apply); void CastItemCombatSpell(DamageInfo const& damageInfo); void CastItemCombatSpell(DamageInfo const& damageInfo, Item* item, ItemTemplate const* proto); @@ -2906,10 +2900,10 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player> void _LoadActions(PreparedQueryResult result); void _LoadAuras(PreparedQueryResult auraResult, PreparedQueryResult effectResult, uint32 timediff); void _LoadGlyphAuras(); - void _LoadInventory(PreparedQueryResult result, PreparedQueryResult artifactsResult, uint32 timeDiff); + void _LoadInventory(PreparedQueryResult result, uint32 timeDiff); void _LoadVoidStorage(PreparedQueryResult result); - void _LoadMail(PreparedQueryResult mailsResult, PreparedQueryResult mailItemsResult, PreparedQueryResult artifactResult); - static Item* _LoadMailedItem(ObjectGuid const& playerGuid, Player* player, uint64 mailId, Mail* mail, Field* fields, ItemAdditionalLoadInfo* addionalData); + void _LoadMail(PreparedQueryResult mailsResult, PreparedQueryResult mailItemsResult); + static Item* _LoadMailedItem(ObjectGuid const& playerGuid, Player* player, uint64 mailId, Mail* mail, Field* fields); void _LoadQuestStatus(PreparedQueryResult result); void _LoadQuestStatusObjectives(PreparedQueryResult result); void _LoadQuestStatusRewarded(PreparedQueryResult result); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 4868dd379f9..292c4c3c070 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -11975,12 +11975,6 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form, uint32 spellId) const if (Player const* player = ToPlayer()) { - if (Aura* artifactAura = GetAura(ARTIFACTS_ALL_WEAPONS_GENERAL_WEAPON_EQUIPPED_PASSIVE)) - if (Item* artifact = player->GetItemByGuid(artifactAura->GetCastItemGUID())) - if (ArtifactAppearanceEntry const* artifactAppearance = sArtifactAppearanceStore.LookupEntry(artifact->GetModifier(ITEM_MODIFIER_ARTIFACT_APPEARANCE_ID))) - if (ShapeshiftForm(artifactAppearance->OverrideShapeshiftFormID) == form) - return artifactAppearance->OverrideShapeshiftDisplayID; - if (ShapeshiftFormModelData const* formModelData = sDB2Manager.GetShapeshiftFormModelData(GetRace(), player->GetNativeGender(), form)) { bool useRandom = false; diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 9622881048a..257fca6ed24 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -34,7 +34,6 @@ #define VISUAL_WAYPOINT 1 // Creature Entry ID used for waypoints show, visible only for GMs #define WORLD_TRIGGER 12999 -#define ARTIFACTS_ALL_WEAPONS_GENERAL_WEAPON_EQUIPPED_PASSIVE 197886 #define SPELL_DH_DOUBLE_JUMP 196055 #define DISPLAYID_HIDDEN_MOUNT 73200 diff --git a/src/server/game/Handlers/ArtifactHandler.cpp b/src/server/game/Handlers/ArtifactHandler.cpp deleted file mode 100644 index 4ec494bd2bc..00000000000 --- a/src/server/game/Handlers/ArtifactHandler.cpp +++ /dev/null @@ -1,254 +0,0 @@ -/* - * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "WorldSession.h" -#include "ArtifactPackets.h" -#include "ConditionMgr.h" -#include "DB2Stores.h" -#include "GameTables.h" -#include "Item.h" -#include "Player.h" -#include "SpellAuraEffects.h" -#include "SpellInfo.h" -#include "SpellPackets.h" - -void WorldSession::HandleArtifactAddPower(WorldPackets::Artifact::ArtifactAddPower& artifactAddPower) -{ - if (!_player->GetGameObjectIfCanInteractWith(artifactAddPower.ForgeGUID, GAMEOBJECT_TYPE_ITEM_FORGE)) - return; - - Item* artifact = _player->GetItemByGuid(artifactAddPower.ArtifactGUID); - if (!artifact || artifact->IsArtifactDisabled()) - return; - - uint32 currentArtifactTier = artifact->GetModifier(ITEM_MODIFIER_ARTIFACT_TIER); - - uint64 xpCost = 0; - //if (GtArtifactLevelXPEntry const* cost = sArtifactLevelXPGameTable.GetRow(artifact->GetTotalPurchasedArtifactPowers() + 1)) - // xpCost = uint64(currentArtifactTier == MAX_ARTIFACT_TIER ? cost->XP2 : cost->XP); - - if (xpCost > artifact->m_itemData->ArtifactXP) - return; - - if (artifactAddPower.PowerChoices.empty()) - return; - - UF::ArtifactPower const* artifactPower = artifact->GetArtifactPower(artifactAddPower.PowerChoices[0].ArtifactPowerID); - if (!artifactPower) - return; - - ArtifactPowerEntry const* artifactPowerEntry = sArtifactPowerStore.LookupEntry(artifactPower->ArtifactPowerID); - if (!artifactPowerEntry) - return; - - if (artifactPowerEntry->Tier > currentArtifactTier) - return; - - uint32 maxRank = artifactPowerEntry->MaxPurchasableRank; - if (artifactPowerEntry->Tier < currentArtifactTier) - { - if (artifactPowerEntry->Flags & ARTIFACT_POWER_FLAG_FINAL) - maxRank = 1; - else if (artifactPowerEntry->Flags & ARTIFACT_POWER_FLAG_MAX_RANK_WITH_TIER) - maxRank += currentArtifactTier - artifactPowerEntry->Tier; - } - - if (artifactAddPower.PowerChoices[0].Rank != artifactPower->PurchasedRank + 1 || - artifactAddPower.PowerChoices[0].Rank > maxRank) - return; - - if (!(artifactPowerEntry->Flags & ARTIFACT_POWER_FLAG_NO_LINK_REQUIRED)) - { - if (std::vector<uint32> const* artifactPowerLinks = sDB2Manager.GetArtifactPowerLinks(artifactPower->ArtifactPowerID)) - { - bool hasAnyLink = false; - for (uint32 artifactPowerLinkId : *artifactPowerLinks) - { - ArtifactPowerEntry const* artifactPowerLink = sArtifactPowerStore.LookupEntry(artifactPowerLinkId); - if (!artifactPowerLink) - continue; - - UF::ArtifactPower const* artifactPowerLinkLearned = artifact->GetArtifactPower(artifactPowerLinkId); - if (!artifactPowerLinkLearned) - continue; - - if (artifactPowerLinkLearned->PurchasedRank >= artifactPowerLink->MaxPurchasableRank) - { - hasAnyLink = true; - break; - } - } - - if (!hasAnyLink) - return; - } - } - - ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower->ArtifactPowerID, artifactPower->CurrentRankWithBonus + 1 - 1); // need data for next rank, but -1 because of how db2 data is structured - if (!artifactPowerRank) - return; - - artifact->SetArtifactPower(artifactPower->ArtifactPowerID, artifactPower->PurchasedRank + 1, artifactPower->CurrentRankWithBonus + 1); - - if (artifact->IsEquipped()) - { - _player->ApplyArtifactPowerRank(artifact, artifactPowerRank, true); - - for (UF::ArtifactPower const& power : artifact->m_itemData->ArtifactPowers) - { - ArtifactPowerEntry const* scaledArtifactPowerEntry = sArtifactPowerStore.AssertEntry(power.ArtifactPowerID); - if (!(scaledArtifactPowerEntry->Flags & ARTIFACT_POWER_FLAG_SCALES_WITH_NUM_POWERS)) - continue; - - ArtifactPowerRankEntry const* scaledArtifactPowerRank = sDB2Manager.GetArtifactPowerRank(scaledArtifactPowerEntry->ID, 0); - if (!scaledArtifactPowerRank) - continue; - - artifact->SetArtifactPower(power.ArtifactPowerID, power.PurchasedRank, power.CurrentRankWithBonus + 1); - - _player->ApplyArtifactPowerRank(artifact, scaledArtifactPowerRank, false); - _player->ApplyArtifactPowerRank(artifact, scaledArtifactPowerRank, true); - } - } - - artifact->SetArtifactXP(artifact->m_itemData->ArtifactXP - xpCost); - artifact->SetState(ITEM_CHANGED, _player); - - uint32 totalPurchasedArtifactPower = artifact->GetTotalPurchasedArtifactPowers(); - uint32 artifactTier = 0; - - for (ArtifactTierEntry const* tier : sArtifactTierStore) - { - if (artifactPowerEntry->Flags & ARTIFACT_POWER_FLAG_FINAL && artifactPowerEntry->Tier < MAX_ARTIFACT_TIER) - { - artifactTier = artifactPowerEntry->Tier + 1; - break; - } - - if (totalPurchasedArtifactPower < tier->MaxNumTraits) - { - artifactTier = tier->ArtifactTier; - break; - } - } - - artifactTier = std::max(artifactTier, currentArtifactTier); - - for (uint32 i = currentArtifactTier; i <= artifactTier; ++i) - artifact->InitArtifactPowers(artifact->GetTemplate()->GetArtifactID(), uint8(i)); - - artifact->SetModifier(ITEM_MODIFIER_ARTIFACT_TIER, artifactTier); -} - -void WorldSession::HandleArtifactSetAppearance(WorldPackets::Artifact::ArtifactSetAppearance& artifactSetAppearance) -{ - if (!_player->GetGameObjectIfCanInteractWith(artifactSetAppearance.ForgeGUID, GAMEOBJECT_TYPE_ITEM_FORGE)) - return; - - ArtifactAppearanceEntry const* artifactAppearance = sArtifactAppearanceStore.LookupEntry(artifactSetAppearance.ArtifactAppearanceID); - if (!artifactAppearance) - return; - - Item* artifact = _player->GetItemByGuid(artifactSetAppearance.ArtifactGUID); - if (!artifact) - return; - - ArtifactAppearanceSetEntry const* artifactAppearanceSet = sArtifactAppearanceSetStore.LookupEntry(artifactAppearance->ArtifactAppearanceSetID); - if (!artifactAppearanceSet || artifactAppearanceSet->ArtifactID != artifact->GetTemplate()->GetArtifactID()) - return; - - if (!ConditionMgr::IsPlayerMeetingCondition(_player, artifactAppearance->UnlockPlayerConditionID)) - return; - - artifact->SetAppearanceModId(artifactAppearance->ItemAppearanceModifierID); - artifact->SetModifier(ITEM_MODIFIER_ARTIFACT_APPEARANCE_ID, artifactAppearance->ID); - artifact->SetState(ITEM_CHANGED, _player); - Item* childItem = _player->GetChildItemByGuid(artifact->GetChildItem()); - if (childItem) - { - childItem->SetAppearanceModId(artifactAppearance->ItemAppearanceModifierID); - childItem->SetState(ITEM_CHANGED, _player); - } - - if (artifact->IsEquipped()) - { - // change weapon appearance - _player->SetVisibleItemSlot(artifact->GetSlot(), artifact); - if (childItem) - _player->SetVisibleItemSlot(childItem->GetSlot(), childItem); - - // change druid form appearance - if (artifactAppearance->OverrideShapeshiftDisplayID && artifactAppearance->OverrideShapeshiftFormID && _player->GetShapeshiftForm() == ShapeshiftForm(artifactAppearance->OverrideShapeshiftFormID)) - _player->RestoreDisplayId(_player->IsMounted()); - } -} - -void WorldSession::HandleConfirmArtifactRespec(WorldPackets::Artifact::ConfirmArtifactRespec& confirmArtifactRespec) -{ - if (!_player->GetNPCIfCanInteractWith(confirmArtifactRespec.NpcGUID, UNIT_NPC_FLAG_ARTIFACT_POWER_RESPEC, UNIT_NPC_FLAG_2_NONE)) - return; - - Item* artifact = _player->GetItemByGuid(confirmArtifactRespec.ArtifactGUID); - if (!artifact || artifact->IsArtifactDisabled()) - return; - - uint64 xpCost = 0; - //if (GtArtifactLevelXPEntry const* cost = sArtifactLevelXPGameTable.GetRow(artifact->GetTotalPurchasedArtifactPowers() + 1)) - // xpCost = uint64(artifact->GetModifier(ITEM_MODIFIER_ARTIFACT_TIER) == 1 ? cost->XP2 : cost->XP); - - if (xpCost > artifact->m_itemData->ArtifactXP) - return; - - uint64 newAmount = artifact->m_itemData->ArtifactXP - xpCost; - - /* - for (uint32 i = 0; i <= artifact->GetTotalPurchasedArtifactPowers(); ++i) - if (GtArtifactLevelXPEntry const* cost = sArtifactLevelXPGameTable.GetRow(i)) - newAmount += uint64(artifact->GetModifier(ITEM_MODIFIER_ARTIFACT_TIER) == 1 ? cost->XP2 : cost->XP); - */ - - for (UF::ArtifactPower const& artifactPower : artifact->m_itemData->ArtifactPowers) - { - uint8 oldPurchasedRank = artifactPower.PurchasedRank; - if (!oldPurchasedRank) - continue; - - artifact->SetArtifactPower(artifactPower.ArtifactPowerID, artifactPower.PurchasedRank - oldPurchasedRank, artifactPower.CurrentRankWithBonus - oldPurchasedRank); - - if (artifact->IsEquipped()) - if (ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower.ArtifactPowerID, 0)) - _player->ApplyArtifactPowerRank(artifact, artifactPowerRank, false); - } - - for (UF::ArtifactPower const& power : artifact->m_itemData->ArtifactPowers) - { - ArtifactPowerEntry const* scaledArtifactPowerEntry = sArtifactPowerStore.AssertEntry(power.ArtifactPowerID); - if (!(scaledArtifactPowerEntry->Flags & ARTIFACT_POWER_FLAG_SCALES_WITH_NUM_POWERS)) - continue; - - ArtifactPowerRankEntry const* scaledArtifactPowerRank = sDB2Manager.GetArtifactPowerRank(scaledArtifactPowerEntry->ID, 0); - if (!scaledArtifactPowerRank) - continue; - - artifact->SetArtifactPower(power.ArtifactPowerID, power.PurchasedRank, 0); - - _player->ApplyArtifactPowerRank(artifact, scaledArtifactPowerRank, false); - } - - artifact->SetArtifactXP(newAmount); - artifact->SetState(ITEM_CHANGED, _player); -} diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index a413693ed0a..d8f09e84deb 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -19,7 +19,6 @@ #include "AccountMgr.h" #include "ArenaTeam.h" #include "ArenaTeamMgr.h" -#include "ArtifactPackets.h" #include "AuctionHousePackets.h" #include "AuthenticationPackets.h" #include "Battleground.h" @@ -158,10 +157,6 @@ bool LoginQueryHolder::Initialize() stmt->setUInt64(0, lowGuid); res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_INVENTORY, stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ITEM_INSTANCE_ARTIFACT); - stmt->setUInt64(0, lowGuid); - res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_ARTIFACTS, stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_VOID_STORAGE); stmt->setUInt64(0, lowGuid); res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_VOID_STORAGE, stmt); @@ -174,10 +169,6 @@ bool LoginQueryHolder::Initialize() stmt->setUInt64(0, lowGuid); res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS, stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAILITEMS_ARTIFACT); - stmt->setUInt64(0, lowGuid); - res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_MAIL_ITEMS_ARTIFACT, stmt); - stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_SOCIALLIST); stmt->setUInt64(0, lowGuid); res &= SetPreparedQuery(PLAYER_LOGIN_QUERY_LOAD_SOCIAL_LIST, stmt); diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index 7224191b9dd..2c43a77bdeb 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -1113,7 +1113,6 @@ void WorldSession::HandleSocketGems(WorldPackets::Item::SocketGems& socketGems) { if (childItem->IsEquipped()) _player->_ApplyItemMods(childItem, childItem->GetSlot(), false); - childItem->CopyArtifactDataFromParent(itemTarget); if (childItem->IsEquipped()) _player->_ApplyItemMods(childItem, childItem->GetSlot(), true); } diff --git a/src/server/game/Server/Packets/AllPackets.h b/src/server/game/Server/Packets/AllPackets.h index d047007694b..fe35ac630df 100644 --- a/src/server/game/Server/Packets/AllPackets.h +++ b/src/server/game/Server/Packets/AllPackets.h @@ -23,7 +23,6 @@ #include "AdventureJournalPackets.h" #include "AdventureMapPackets.h" #include "AreaTriggerPackets.h" -#include "ArtifactPackets.h" #include "AuctionHousePackets.h" #include "AuthenticationPackets.h" #include "BankPackets.h" diff --git a/src/server/game/Server/Packets/ArtifactPackets.cpp b/src/server/game/Server/Packets/ArtifactPackets.cpp deleted file mode 100644 index fad4218fc27..00000000000 --- a/src/server/game/Server/Packets/ArtifactPackets.cpp +++ /dev/null @@ -1,71 +0,0 @@ -/* - * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "ArtifactPackets.h" - -ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Artifact::ArtifactAddPower::ArtifactPowerChoice& artifactPowerChoice) -{ - data >> artifactPowerChoice.ArtifactPowerID; - data >> artifactPowerChoice.Rank; - return data; -} - -void WorldPackets::Artifact::ArtifactAddPower::Read() -{ - _worldPacket >> ArtifactGUID; - _worldPacket >> ForgeGUID; - PowerChoices.resize(_worldPacket.read<uint32>()); - for (ArtifactPowerChoice& artifactPowerChoice : PowerChoices) - _worldPacket >> artifactPowerChoice; -} - -void WorldPackets::Artifact::ArtifactSetAppearance::Read() -{ - _worldPacket >> ArtifactGUID; - _worldPacket >> ForgeGUID; - _worldPacket >> ArtifactAppearanceID; -} - -void WorldPackets::Artifact::ConfirmArtifactRespec::Read() -{ - _worldPacket >> ArtifactGUID; - _worldPacket >> NpcGUID; -} - -WorldPacket const* WorldPackets::Artifact::OpenArtifactForge::Write() -{ - _worldPacket << ArtifactGUID; - _worldPacket << ForgeGUID; - - return &_worldPacket; -} - -WorldPacket const* WorldPackets::Artifact::ArtifactRespecPrompt::Write() -{ - _worldPacket << ArtifactGUID; - _worldPacket << NpcGUID; - - return &_worldPacket; -} - -WorldPacket const* WorldPackets::Artifact::ArtifactXpGain::Write() -{ - _worldPacket << ArtifactGUID; - _worldPacket << uint64(Amount); - - return &_worldPacket; -} diff --git a/src/server/game/Server/Packets/ArtifactPackets.h b/src/server/game/Server/Packets/ArtifactPackets.h deleted file mode 100644 index d72b54c8ba8..00000000000 --- a/src/server/game/Server/Packets/ArtifactPackets.h +++ /dev/null @@ -1,105 +0,0 @@ -/* - * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef ArtifactPackets_h__ -#define ArtifactPackets_h__ - -#include "Packet.h" -#include "ObjectGuid.h" -#include "PacketUtilities.h" - -namespace WorldPackets -{ - namespace Artifact - { - class ArtifactAddPower final : public ClientPacket - { - public: - struct ArtifactPowerChoice - { - int32 ArtifactPowerID = 0; - uint8 Rank = 0; - }; - - ArtifactAddPower(WorldPacket&& packet) : ClientPacket(CMSG_ARTIFACT_ADD_POWER, std::move(packet)) { } - - void Read() override; - - ObjectGuid ArtifactGUID; - ObjectGuid ForgeGUID; - Array<ArtifactPowerChoice, 1 /*lua allows only 1 power per call*/> PowerChoices; - }; - - class ArtifactSetAppearance final : public ClientPacket - { - public: - ArtifactSetAppearance(WorldPacket&& packet) : ClientPacket(CMSG_ARTIFACT_SET_APPEARANCE, std::move(packet)) { } - - void Read() override; - - ObjectGuid ArtifactGUID; - ObjectGuid ForgeGUID; - int32 ArtifactAppearanceID = 0; - }; - - class ConfirmArtifactRespec final : public ClientPacket - { - public: - ConfirmArtifactRespec(WorldPacket&& packet) : ClientPacket(CMSG_CONFIRM_ARTIFACT_RESPEC, std::move(packet)) { } - - void Read() override; - - ObjectGuid ArtifactGUID; - ObjectGuid NpcGUID; - }; - - class OpenArtifactForge final : public ServerPacket - { - public: - OpenArtifactForge() : ServerPacket(SMSG_OPEN_ARTIFACT_FORGE, 16 + 16) { } - - WorldPacket const* Write() override; - - ObjectGuid ArtifactGUID; - ObjectGuid ForgeGUID; - }; - - class ArtifactRespecPrompt final : public ServerPacket - { - public: - ArtifactRespecPrompt() : ServerPacket(SMSG_ARTIFACT_RESPEC_PROMPT, 16 + 16) { } - - WorldPacket const* Write() override; - - ObjectGuid ArtifactGUID; - ObjectGuid NpcGUID; - }; - - class ArtifactXpGain final : public ServerPacket - { - public: - ArtifactXpGain() : ServerPacket(SMSG_ARTIFACT_XP_GAIN, 16 + 4) { } - - WorldPacket const* Write() override; - - ObjectGuid ArtifactGUID; - uint64 Amount = 0; - }; - } -} - -#endif // ArtifactPackets_h__ diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 7c7f7f8131b..a1d80be1054 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -169,8 +169,6 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_ARENA_TEAM_LEAVE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ARENA_TEAM_REMOVE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ARENA_TEAM_ROSTER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_ARTIFACT_ADD_POWER, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleArtifactAddPower); - DEFINE_HANDLER(CMSG_ARTIFACT_SET_APPEARANCE, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleArtifactSetAppearance); DEFINE_HANDLER(CMSG_ASSIGN_EQUIPMENT_SET_SPEC, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ATTACK_STOP, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleAttackStopOpcode); DEFINE_HANDLER(CMSG_ATTACK_SWING, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleAttackSwingOpcode); @@ -379,7 +377,6 @@ void OpcodeTable::InitializeClientOpcodes() DEFINE_HANDLER(CMSG_COMPLAINT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleComplaint); DEFINE_HANDLER(CMSG_COMPLETE_CINEMATIC, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCompleteCinematic); DEFINE_HANDLER(CMSG_COMPLETE_MOVIE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCompleteMovie); - DEFINE_HANDLER(CMSG_CONFIRM_ARTIFACT_RESPEC, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleConfirmArtifactRespec); DEFINE_HANDLER(CMSG_CONFIRM_RESPEC_WIPE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleConfirmRespecWipeOpcode); DEFINE_HANDLER(CMSG_CONNECT_TO_FAILED, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_EarlyProccess); DEFINE_HANDLER(CMSG_CONSUMABLE_TOKEN_BUY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); @@ -1061,10 +1058,6 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARENA_TEAM_INVITE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARENA_TEAM_ROSTER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARENA_TEAM_STATS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARTIFACT_FORGE_ERROR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARTIFACT_RESPEC_PROMPT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARTIFACT_XP_GAIN, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ATTACKER_STATE_UPDATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ATTACK_START, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ATTACK_STOP, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1248,7 +1241,6 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_SPELL_CHARGES, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_TARGET, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLEAR_TREASURE_PICKER_CACHE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLOSE_ARTIFACT_FORGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLUB_FINDER_ERROR_MESSAGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1796,7 +1788,6 @@ void OpcodeTable::InitializeServerOpcodes() DEFINE_SERVER_OPCODE_HANDLER(SMSG_OFFER_PETITION_ERROR, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ON_MONSTER_MOVE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_OPEN_ARTIFACT_FORGE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_OPEN_CONTAINER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_OPEN_LFG_DUNGEON_FINDER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_OPEN_SHIPMENT_NPC_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index 8d07a9de889..b404b6e5952 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -744,8 +744,6 @@ enum OpcodeClient : uint16 CMSG_ADD_ACCOUNT_COSMETIC = UNKNOWN_OPCODE, CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = UNKNOWN_OPCODE, CMSG_ADVENTURE_JOURNAL_UPDATE_SUGGESTIONS = UNKNOWN_OPCODE, - CMSG_ARTIFACT_ADD_POWER = UNKNOWN_OPCODE, - CMSG_ARTIFACT_SET_APPEARANCE = UNKNOWN_OPCODE, CMSG_AUCTION_BROWSE_QUERY = UNKNOWN_OPCODE, CMSG_AUCTION_CANCEL_COMMODITIES_PURCHASE = UNKNOWN_OPCODE, CMSG_AUCTION_CONFIRM_COMMODITIES_PURCHASE = UNKNOWN_OPCODE, @@ -790,7 +788,6 @@ enum OpcodeClient : uint16 CMSG_CLASS_TALENTS_SET_USES_SHARED_ACTION_BARS = UNKNOWN_OPCODE, CMSG_CLOSE_RUNEFORGE_INTERACTION = UNKNOWN_OPCODE, CMSG_COMMENTATOR_SPECTATE = UNKNOWN_OPCODE, - CMSG_CONFIRM_ARTIFACT_RESPEC = UNKNOWN_OPCODE, CMSG_CONTENT_TRACKING_START_TRACKING = UNKNOWN_OPCODE, CMSG_CONTENT_TRACKING_STOP_TRACKING = UNKNOWN_OPCODE, CMSG_CONTRIBUTION_CONTRIBUTE = UNKNOWN_OPCODE, @@ -1903,10 +1900,6 @@ enum OpcodeServer : uint16 SMSG_AREA_TRIGGER_PLAY_SPELL_VISUAL = UNKNOWN_OPCODE, SMSG_AREA_TRIGGER_UPDATE_DECAL_PROPERTIES = UNKNOWN_OPCODE, SMSG_ARENA_CLEAR_OPPONENTS = UNKNOWN_OPCODE, - SMSG_ARTIFACT_ENDGAME_POWERS_REFUNDED = UNKNOWN_OPCODE, - SMSG_ARTIFACT_FORGE_ERROR = UNKNOWN_OPCODE, - SMSG_ARTIFACT_RESPEC_PROMPT = UNKNOWN_OPCODE, - SMSG_ARTIFACT_XP_GAIN = UNKNOWN_OPCODE, SMSG_AUCTION_DISABLE_NEW_POSTINGS = UNKNOWN_OPCODE, SMSG_AUCTION_FAVORITE_LIST = UNKNOWN_OPCODE, SMSG_AUCTION_GET_COMMODITY_QUOTE_RESULT = UNKNOWN_OPCODE, @@ -1933,7 +1926,6 @@ enum OpcodeServer : uint16 SMSG_CLAIM_RAF_REWARD_RESPONSE = UNKNOWN_OPCODE, SMSG_CLEAR_RESURRECT = UNKNOWN_OPCODE, SMSG_CLEAR_TREASURE_PICKER_CACHE = UNKNOWN_OPCODE, - SMSG_CLOSE_ARTIFACT_FORGE = UNKNOWN_OPCODE, SMSG_CLUB_FINDER_ERROR_MESSAGE = UNKNOWN_OPCODE, SMSG_CLUB_FINDER_GET_CLUB_POSTING_IDS_RESPONSE = UNKNOWN_OPCODE, SMSG_CLUB_FINDER_LOOKUP_CLUB_POSTINGS_LIST = UNKNOWN_OPCODE, @@ -2073,7 +2065,6 @@ enum OpcodeServer : uint16 SMSG_MYTHIC_PLUS_CURRENT_AFFIXES = UNKNOWN_OPCODE, SMSG_MYTHIC_PLUS_NEW_WEEK_RECORD = UNKNOWN_OPCODE, SMSG_MYTHIC_PLUS_SEASON_DATA = UNKNOWN_OPCODE, - SMSG_OPEN_ARTIFACT_FORGE = UNKNOWN_OPCODE, SMSG_OPEN_SHIPMENT_NPC_RESULT = UNKNOWN_OPCODE, SMSG_PAST_TIME_EVENTS = UNKNOWN_OPCODE, SMSG_PERKS_PROGRAM_ACTIVITY_COMPLETE = UNKNOWN_OPCODE, diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index dcf5a8acfa1..3b682752340 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -121,13 +121,6 @@ namespace WorldPackets class AreaTrigger; } - namespace Artifact - { - class ArtifactAddPower; - class ArtifactSetAppearance; - class ConfirmArtifactRespec; - } - namespace AuctionHouse { class AuctionBrowseQuery; @@ -1820,11 +1813,6 @@ class TC_GAME_API WorldSession void HandleQueryRealmName(WorldPackets::Query::QueryRealmName& queryRealmName); - // Artifact - void HandleArtifactAddPower(WorldPackets::Artifact::ArtifactAddPower& artifactAddPower); - void HandleArtifactSetAppearance(WorldPackets::Artifact::ArtifactSetAppearance& artifactSetAppearance); - void HandleConfirmArtifactRespec(WorldPackets::Artifact::ConfirmArtifactRespec& confirmArtifactRespec); - // Scenario void HandleQueryScenarioPOI(WorldPackets::Scenario::QueryScenarioPOI& queryScenarioPOI); diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 0da82de924e..158674832b2 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -6581,27 +6581,6 @@ SpellCastResult Spell::CheckCast(bool strict, int32* param1 /*= nullptr*/, int32 } case SPELL_EFFECT_GIVE_ARTIFACT_POWER: case SPELL_EFFECT_GIVE_ARTIFACT_POWER_NO_BONUS: - { - Player* playerCaster = m_caster->ToPlayer(); - if (!playerCaster) - return SPELL_FAILED_BAD_TARGETS; - - Aura* artifactAura = playerCaster->GetAura(ARTIFACTS_ALL_WEAPONS_GENERAL_WEAPON_EQUIPPED_PASSIVE); - if (!artifactAura) - return SPELL_FAILED_NO_ARTIFACT_EQUIPPED; - - Item* artifact = playerCaster->GetItemByGuid(artifactAura->GetCastItemGUID()); - if (!artifact) - return SPELL_FAILED_NO_ARTIFACT_EQUIPPED; - - if (spellEffectInfo.Effect == SPELL_EFFECT_GIVE_ARTIFACT_POWER) - { - ArtifactEntry const* artifactEntry = sArtifactStore.LookupEntry(artifact->GetTemplate()->GetArtifactID()); - if (!artifactEntry || artifactEntry->ArtifactCategoryID != spellEffectInfo.MiscValue) - return SPELL_FAILED_WRONG_ARTIFACT_EQUIPPED; - } - break; - } case SPELL_EFFECT_CHANGE_BATTLEPET_QUALITY: case SPELL_EFFECT_GRANT_BATTLEPET_LEVEL: case SPELL_EFFECT_GRANT_BATTLEPET_EXPERIENCE: diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index 0b147c500d1..d28ce0f2ff8 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -407,8 +407,6 @@ class TC_GAME_API Spell void EffectApplyEnchantIllusion(); void EffectUpdatePlayerPhase(); void EffectUpdateZoneAurasAndPhases(); - void EffectGiveArtifactPower(); - void EffectGiveArtifactPowerNoBonus(); void EffectPlaySceneScriptPackage(); void EffectCreateSceneObject(); void EffectCreatePrivateSceneObject(); diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 84f695cf670..523b7d75293 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -325,9 +325,9 @@ NonDefaultConstructible<SpellEffectHandlerFn> SpellEffectHandlers[TOTAL_SPELL_EF &Spell::EffectGiveRestedExperience, //237 SPELL_EFFECT_GIVE_RESTED_EXPERIENCE_BONUS &Spell::EffectNULL, //238 SPELL_EFFECT_INCREASE_SKILL &Spell::EffectNULL, //239 SPELL_EFFECT_END_GARRISON_BUILDING_CONSTRUCTION - &Spell::EffectGiveArtifactPower, //240 SPELL_EFFECT_GIVE_ARTIFACT_POWER + &Spell::EffectUnused, //240 SPELL_EFFECT_GIVE_ARTIFACT_POWER &Spell::EffectUnused, //241 SPELL_EFFECT_241 - &Spell::EffectGiveArtifactPowerNoBonus, //242 SPELL_EFFECT_GIVE_ARTIFACT_POWER_NO_BONUS + &Spell::EffectUnused, //242 SPELL_EFFECT_GIVE_ARTIFACT_POWER_NO_BONUS &Spell::EffectApplyEnchantIllusion, //243 SPELL_EFFECT_APPLY_ENCHANT_ILLUSION &Spell::EffectNULL, //244 SPELL_EFFECT_LEARN_FOLLOWER_ABILITY &Spell::EffectUpgradeHeirloom, //245 SPELL_EFFECT_UPGRADE_HEIRLOOM @@ -5605,33 +5605,6 @@ void Spell::EffectUpdateZoneAurasAndPhases() unitTarget->ToPlayer()->UpdateAreaDependentAuras(unitTarget->GetAreaId()); } -void Spell::EffectGiveArtifactPower() -{ - if (effectHandleMode != SPELL_EFFECT_HANDLE_LAUNCH_TARGET) - return; - - Player* playerCaster = m_caster->ToPlayer(); - if (!playerCaster) - return; - - if (Aura* artifactAura = playerCaster->GetAura(ARTIFACTS_ALL_WEAPONS_GENERAL_WEAPON_EQUIPPED_PASSIVE)) - if (Item* artifact = playerCaster->GetItemByGuid(artifactAura->GetCastItemGUID())) - artifact->GiveArtifactXp(damage, m_CastItem, uint32(effectInfo->MiscValue)); -} - -void Spell::EffectGiveArtifactPowerNoBonus() -{ - if (effectHandleMode != SPELL_EFFECT_HANDLE_LAUNCH_TARGET) - return; - - if (!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER) - return; - - if (Aura* artifactAura = unitTarget->GetAura(ARTIFACTS_ALL_WEAPONS_GENERAL_WEAPON_EQUIPPED_PASSIVE)) - if (Item* artifact = unitTarget->ToPlayer()->GetItemByGuid(artifactAura->GetCastItemGUID())) - artifact->GiveArtifactXp(damage, m_CastItem, 0); -} - void Spell::EffectPlaySceneScriptPackage() { if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT) diff --git a/src/server/game/Tools/PlayerDump.cpp b/src/server/game/Tools/PlayerDump.cpp index f72ff32feb2..d6b8055cc89 100644 --- a/src/server/game/Tools/PlayerDump.cpp +++ b/src/server/game/Tools/PlayerDump.cpp @@ -133,8 +133,6 @@ DumpTable const DumpTables[] = { "item_instance", DTT_ITEM }, // must be after character_inventory and mail_items { "character_equipmentsets", DTT_EQSET_TABLE}, // must be after item_instance { "character_gifts", DTT_ITEM_GIFT }, // must be after item_instance - { "item_instance_artifact", DTT_ITEM_TABLE }, // must be after item_instance - { "item_instance_artifact_powers", DTT_ITEM_TABLE }, // must be after item_instance { "item_instance_gems", DTT_ITEM_TABLE }, // must be after item_instance { "item_instance_modifiers", DTT_ITEM_TABLE }, // must be after item_instance { "item_instance_transmog", DTT_ITEM_TABLE }, // must be after item_instance diff --git a/src/server/game/Tools/PlayerDump.h b/src/server/game/Tools/PlayerDump.h index e15751accc1..d78e26518d7 100644 --- a/src/server/game/Tools/PlayerDump.h +++ b/src/server/game/Tools/PlayerDump.h @@ -52,7 +52,7 @@ enum DumpTableType DTT_ITEM_GIFT, // <- item guids // character_gifts - DTT_ITEM_TABLE, // <- item guids // item_instance_artifact, item_instance_artifact_powers, item_instance_gems, item_instance_modifiers, + DTT_ITEM_TABLE, // <- item guids // item_instance_gems, item_instance_modifiers, // item_instance_transmog DTT_PET, // -> pet guids collection // character_pet diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index 347d8936474..a9c0464863c 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -3933,54 +3933,6 @@ class spell_item_zandalarian_charm : public SpellScriptLoader uint32 _spellId; }; -class spell_item_artifical_stamina : public AuraScript -{ - bool Validate(SpellInfo const* spellInfo) override - { - return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); - } - - bool Load() override - { - return GetOwner()->GetTypeId() == TYPEID_PLAYER; - } - - void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) - { - if (Item* artifact = GetOwner()->ToPlayer()->GetItemByGuid(GetAura()->GetCastItemGUID())) - amount = GetEffectInfo(EFFECT_1).BasePoints * artifact->GetTotalPurchasedArtifactPowers() / 100; - } - - void Register() override - { - DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_item_artifical_stamina::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE); - } -}; - -class spell_item_artifical_damage : public AuraScript -{ - bool Validate(SpellInfo const* spellInfo) override - { - return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); - } - - bool Load() override - { - return GetOwner()->GetTypeId() == TYPEID_PLAYER; - } - - void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) - { - if (Item* artifact = GetOwner()->ToPlayer()->GetItemByGuid(GetAura()->GetCastItemGUID())) - amount = GetSpellInfo()->GetEffect(EFFECT_1).BasePoints * artifact->GetTotalPurchasedArtifactPowers() / 100; - } - - void Register() override - { - DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_item_artifical_damage::CalculateAmount, EFFECT_0, SPELL_AURA_MOD_DAMAGE_PERCENT_DONE); - } -}; - enum AuraProcRemoveSpells { SPELL_TALISMAN_OF_ASCENDANCE = 28200, @@ -4824,8 +4776,6 @@ void AddSC_item_spell_scripts() RegisterSpellScript(spell_item_universal_remote); new spell_item_zandalarian_charm("spell_item_unstable_power", SPELL_UNSTABLE_POWER_AURA_STACK); new spell_item_zandalarian_charm("spell_item_restless_strength", SPELL_RESTLESS_STRENGTH_AURA_STACK); - RegisterSpellScript(spell_item_artifical_stamina); - RegisterSpellScript(spell_item_artifical_damage); RegisterSpellScript(spell_item_talisman_of_ascendance); RegisterSpellScript(spell_item_battle_trance); RegisterSpellScript(spell_item_world_queller_focus); |