aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOvahlord <dreadkiller@gmx.de>2024-06-25 18:08:28 +0200
committerOvahlord <dreadkiller@gmx.de>2024-06-25 18:08:28 +0200
commitdc67de6b1b921856e30c53d368a584438d99f677 (patch)
tree88394b4979b5665d037db5c938e7cabc21acf461
parent848be58d82d5e35612fef17e44f9d41ed448b9cd (diff)
Core/Items: dropped artifact weapon implementation
-rw-r--r--sql/base/characters_database.sql52
-rw-r--r--sql/updates/characters/cata_classic/2024_06_25_00_characters.sql2
-rw-r--r--sql/updates/world/cata_classic/2024_06_25_00_world.sql1
-rw-r--r--src/server/database/Database/Implementation/CharacterDatabase.cpp8
-rw-r--r--src/server/database/Database/Implementation/CharacterDatabase.h8
-rw-r--r--src/server/game/Achievements/CriteriaHandler.cpp29
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp39
-rw-r--r--src/server/game/Entities/Item/Item.cpp411
-rw-r--r--src/server/game/Entities/Item/Item.h40
-rw-r--r--src/server/game/Entities/Player/Player.cpp153
-rw-r--r--src/server/game/Entities/Player/Player.h12
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp6
-rw-r--r--src/server/game/Entities/Unit/Unit.h1
-rw-r--r--src/server/game/Handlers/ArtifactHandler.cpp254
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp9
-rw-r--r--src/server/game/Handlers/ItemHandler.cpp1
-rw-r--r--src/server/game/Server/Packets/AllPackets.h1
-rw-r--r--src/server/game/Server/Packets/ArtifactPackets.cpp71
-rw-r--r--src/server/game/Server/Packets/ArtifactPackets.h105
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp9
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h9
-rw-r--r--src/server/game/Server/WorldSession.h12
-rw-r--r--src/server/game/Spells/Spell.cpp21
-rw-r--r--src/server/game/Spells/Spell.h2
-rw-r--r--src/server/game/Spells/SpellEffects.cpp31
-rw-r--r--src/server/game/Tools/PlayerDump.cpp2
-rw-r--r--src/server/game/Tools/PlayerDump.h2
-rw-r--r--src/server/scripts/Spells/spell_item.cpp50
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);