aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2019-10-26 23:58:29 +0200
committerShauren <shauren.trinity@gmail.com>2019-10-27 00:12:45 +0200
commit3ac790287aba5f7d7c3bccf79e608de9119e461a (patch)
tree430abdcd4e7e17288c9edaf71980863e77518de9 /src
parentee2e49429f4383732b4e0f39b493470b9c1dd10c (diff)
Core/DataStores: Updated db2 structures to 8.2.5
Diffstat (limited to 'src')
-rw-r--r--src/common/DataStores/DB2FileLoader.cpp85
-rw-r--r--src/server/database/Database/Implementation/CharacterDatabase.cpp12
-rw-r--r--src/server/database/Database/Implementation/HotfixDatabase.cpp33
-rw-r--r--src/server/database/Database/Implementation/HotfixDatabase.h7
-rw-r--r--src/server/game/Achievements/CriteriaHandler.cpp12
-rw-r--r--src/server/game/Battlefield/Battlefield.cpp10
-rw-r--r--src/server/game/Battlegrounds/Battleground.cpp4
-rw-r--r--src/server/game/Battlegrounds/BattlegroundMgr.cpp8
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp9
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp10
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp27
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp9
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp19
-rw-r--r--src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp19
-rw-r--r--src/server/game/Conditions/ConditionMgr.cpp2
-rw-r--r--src/server/game/DataStores/DB2LoadInfo.h85
-rw-r--r--src/server/game/DataStores/DB2Metadata.h135
-rw-r--r--src/server/game/DataStores/DB2Stores.cpp21
-rw-r--r--src/server/game/DataStores/DB2Stores.h3
-rw-r--r--src/server/game/DataStores/DB2Structure.h38
-rw-r--r--src/server/game/DataStores/DBCEnums.h10
-rw-r--r--src/server/game/Entities/Item/Item.cpp95
-rw-r--r--src/server/game/Entities/Item/Item.h2
-rw-r--r--src/server/game/Entities/Item/ItemDefines.h6
-rw-r--r--src/server/game/Entities/Item/ItemTemplate.h2
-rw-r--r--src/server/game/Entities/Player/Player.cpp55
-rw-r--r--src/server/game/Entities/Player/Player.h10
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp74
-rw-r--r--src/server/game/Globals/ObjectMgr.h11
-rw-r--r--src/server/game/Groups/Group.cpp2
-rw-r--r--src/server/game/Guilds/Guild.cpp4
-rw-r--r--src/server/game/Guilds/GuildMgr.cpp16
-rw-r--r--src/server/game/Handlers/ItemHandler.cpp2
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp6
-rw-r--r--src/server/game/Handlers/NPCHandler.cpp2
-rw-r--r--src/server/game/Handlers/VoidStorageHandler.cpp4
-rw-r--r--src/server/game/Instances/InstanceSaveMgr.cpp2
-rw-r--r--src/server/game/Loot/Loot.cpp1
-rw-r--r--src/server/game/Loot/Loot.h3
-rw-r--r--src/server/game/Server/Packets/ItemPacketsCommon.cpp12
-rw-r--r--src/server/game/World/World.cpp3
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp13
-rw-r--r--src/server/scripts/Commands/cs_go.cpp8
-rw-r--r--src/server/scripts/Commands/cs_misc.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/zone_tol_barad.cpp5
-rw-r--r--src/server/scripts/Northrend/zone_wintergrasp.cpp4
-rw-r--r--src/tools/map_extractor/loadlib/DBFilesClientList.h8
47 files changed, 445 insertions, 465 deletions
diff --git a/src/common/DataStores/DB2FileLoader.cpp b/src/common/DataStores/DB2FileLoader.cpp
index a6eb2c7fe87..f5029136c21 100644
--- a/src/common/DataStores/DB2FileLoader.cpp
+++ b/src/common/DataStores/DB2FileLoader.cpp
@@ -678,25 +678,28 @@ void DB2FileLoaderRegularImpl::FillParentLookup(char* dataTable)
for (uint32 i = 0; i < _header->SectionCount; ++i)
{
DB2SectionHeader const& section = GetSection(i);
- for (std::size_t j = 0; j < _parentIndexes[i][0].Entries.size(); ++j)
+ if (!section.TactId)
{
- uint32 parentId = _parentIndexes[i][0].Entries[j].ParentId;
- char* recordData = &dataTable[(_parentIndexes[i][0].Entries[j].RecordIndex + recordIndexOffset) * recordSize];
-
- switch (_loadInfo->Meta->Fields[_loadInfo->Meta->ParentIndexField].Type)
+ for (std::size_t j = 0; j < _parentIndexes[i][0].Entries.size(); ++j)
{
- case FT_SHORT:
- *reinterpret_cast<uint16*>(&recordData[parentIdOffset]) = uint16(parentId);
- break;
- case FT_BYTE:
- *reinterpret_cast<uint8*>(&recordData[parentIdOffset]) = uint8(parentId);
- break;
- case FT_INT:
- *reinterpret_cast<uint32*>(&recordData[parentIdOffset]) = parentId;
- break;
- default:
- ASSERT(false, "Unhandled parent id type '%c' found in %s", _loadInfo->Meta->Fields[_loadInfo->Meta->ParentIndexField].Type, _fileName);
- break;
+ uint32 parentId = _parentIndexes[i][0].Entries[j].ParentId;
+ char* recordData = &dataTable[(_parentIndexes[i][0].Entries[j].RecordIndex + recordIndexOffset) * recordSize];
+
+ switch (_loadInfo->Meta->Fields[_loadInfo->Meta->ParentIndexField].Type)
+ {
+ case FT_SHORT:
+ *reinterpret_cast<uint16*>(&recordData[parentIdOffset]) = uint16(parentId);
+ break;
+ case FT_BYTE:
+ *reinterpret_cast<uint8*>(&recordData[parentIdOffset]) = uint8(parentId);
+ break;
+ case FT_INT:
+ *reinterpret_cast<uint32*>(&recordData[parentIdOffset]) = parentId;
+ break;
+ default:
+ ASSERT(false, "Unhandled parent id type '%c' found in %s", _loadInfo->Meta->Fields[_loadInfo->Meta->ParentIndexField].Type, _fileName);
+ break;
+ }
}
}
recordIndexOffset += section.RecordCount;
@@ -1383,25 +1386,28 @@ void DB2FileLoaderSparseImpl::FillParentLookup(char* dataTable)
for (uint32 i = 0; i < _header->SectionCount; ++i)
{
DB2SectionHeader const& section = GetSection(i);
- for (std::size_t j = 0; j < _parentIndexes[i][0].Entries.size(); ++j)
+ if (!section.TactId)
{
- uint32 parentId = _parentIndexes[i][0].Entries[j].ParentId;
- char* recordData = &dataTable[(_parentIndexes[i][0].Entries[j].RecordIndex + recordIndexOffset) * recordSize];
-
- switch (_loadInfo->Meta->Fields[_loadInfo->Meta->ParentIndexField].Type)
+ for (std::size_t j = 0; j < _parentIndexes[i][0].Entries.size(); ++j)
{
- case FT_SHORT:
- *reinterpret_cast<uint16*>(&recordData[parentIdOffset]) = uint16(parentId);
- break;
- case FT_BYTE:
- *reinterpret_cast<uint8*>(&recordData[parentIdOffset]) = uint8(parentId);
- break;
- case FT_INT:
- *reinterpret_cast<uint32*>(&recordData[parentIdOffset]) = parentId;
- break;
- default:
- ASSERT(false, "Unhandled parent id type '%c' found in %s", _loadInfo->Meta->Fields[_loadInfo->Meta->ParentIndexField].Type, _fileName);
- break;
+ uint32 parentId = _parentIndexes[i][0].Entries[j].ParentId;
+ char* recordData = &dataTable[(_parentIndexes[i][0].Entries[j].RecordIndex + recordIndexOffset) * recordSize];
+
+ switch (_loadInfo->Meta->Fields[_loadInfo->Meta->ParentIndexField].Type)
+ {
+ case FT_SHORT:
+ *reinterpret_cast<uint16*>(&recordData[parentIdOffset]) = uint16(parentId);
+ break;
+ case FT_BYTE:
+ *reinterpret_cast<uint8*>(&recordData[parentIdOffset]) = uint8(parentId);
+ break;
+ case FT_INT:
+ *reinterpret_cast<uint32*>(&recordData[parentIdOffset]) = parentId;
+ break;
+ default:
+ ASSERT(false, "Unhandled parent id type '%c' found in %s", _loadInfo->Meta->Fields[_loadInfo->Meta->ParentIndexField].Type, _fileName);
+ break;
+ }
}
}
recordIndexOffset += section.RecordCount;
@@ -1873,6 +1879,13 @@ bool DB2FileLoader::Load(DB2FileSource* source, DB2FileLoadInfo const* loadInfo)
if (loadInfo && !loadInfo->Meta->HasIndexFieldInData() && _header.RecordCount)
idTable.reserve(_header.RecordCount);
+ if (_header.ParentLookupCount)
+ {
+ parentIndexes.resize(_header.SectionCount);
+ for (std::vector<DB2IndexData>& parentIndexesForSection : parentIndexes)
+ parentIndexesForSection.resize(_header.ParentLookupCount);
+ }
+
for (uint32 i = 0; i < _header.SectionCount; ++i)
{
DB2SectionHeader const& section = _impl->GetSection(i);
@@ -1917,9 +1930,7 @@ bool DB2FileLoader::Load(DB2FileSource* source, DB2FileLoadInfo const* loadInfo)
if (_header.ParentLookupCount)
{
- parentIndexes.emplace_back();
- std::vector<DB2IndexData>& parentIndexesForSection = parentIndexes.back();
- parentIndexesForSection.resize(_header.ParentLookupCount);
+ std::vector<DB2IndexData>& parentIndexesForSection = parentIndexes[i];
for (uint32 j = 0; j < _header.ParentLookupCount; ++j)
{
DB2IndexDataInfo indexInfo;
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp
index b05af92a05e..fc2d7a36527 100644
--- a/src/server/database/Database/Implementation/CharacterDatabase.cpp
+++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp
@@ -24,7 +24,7 @@ void CharacterDatabaseConnection::DoPrepareStatements()
m_stmts.resize(MAX_CHARACTERDATABASE_STATEMENTS);
#define SelectItemInstanceContent "ii.guid, ii.itemEntry, ii.creatorGuid, ii.giftCreatorGuid, ii.count, ii.duration, ii.charges, ii.flags, ii.enchantments, ii.randomBonusListId, " \
- "ii.durability, ii.playedTime, ii.text, ii.upgradeId, ii.battlePetSpeciesId, ii.battlePetBreedData, ii.battlePetLevel, ii.battlePetDisplayId, ii.context, ii.bonusListIDs, " \
+ "ii.durability, ii.playedTime, ii.text, ii.battlePetSpeciesId, ii.battlePetBreedData, ii.battlePetLevel, ii.battlePetDisplayId, ii.context, ii.bonusListIDs, " \
"iit.itemModifiedAppearanceAllSpecs, iit.itemModifiedAppearanceSpec1, iit.itemModifiedAppearanceSpec2, iit.itemModifiedAppearanceSpec3, iit.itemModifiedAppearanceSpec4, " \
"iit.spellItemEnchantmentAllSpecs, iit.spellItemEnchantmentSpec1, iit.spellItemEnchantmentSpec2, iit.spellItemEnchantmentSpec3, iit.spellItemEnchantmentSpec4, " \
"ig.gemItemId1, ig.gemBonuses1, ig.gemContext1, ig.gemScalingLevel1, ig.gemItemId2, ig.gemBonuses2, ig.gemContext2, ig.gemScalingLevel2, ig.gemItemId3, ig.gemBonuses3, ig.gemContext3, ig.gemScalingLevel3, " \
@@ -167,9 +167,9 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_DEL_ITEM_BOP_TRADE, "DELETE FROM item_soulbound_trade_data WHERE itemGuid = ? LIMIT 1", CONNECTION_ASYNC);
PrepareStatement(CHAR_INS_ITEM_BOP_TRADE, "INSERT INTO item_soulbound_trade_data VALUES (?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_REP_INVENTORY_ITEM, "REPLACE INTO character_inventory (guid, bag, slot, item) VALUES (?, ?, ?, ?)", CONNECTION_ASYNC);
- PrepareStatement(CHAR_REP_ITEM_INSTANCE, "REPLACE INTO item_instance (itemEntry, owner_guid, creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomBonusListId, durability, playedTime, text, upgradeId, battlePetSpeciesId, battlePetBreedData, battlePetLevel, battlePetDisplayId, context, bonusListIDs, guid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
- PrepareStatement(CHAR_UPD_ITEM_INSTANCE, "UPDATE item_instance SET itemEntry = ?, owner_guid = ?, creatorGuid = ?, giftCreatorGuid = ?, count = ?, duration = ?, charges = ?, flags = ?, enchantments = ?, randomBonusListId = ?, durability = ?, playedTime = ?, text = ?, upgradeId = ?, battlePetSpeciesId = ?, battlePetBreedData = ?, battlePetLevel = ?, battlePetDisplayId = ?, context = ?, bonusListIDs = ? WHERE guid = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_UPD_ITEM_INSTANCE_ON_LOAD, "UPDATE item_instance SET duration = ?, flags = ?, durability = ?, upgradeId = ? WHERE guid = ?", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_REP_ITEM_INSTANCE, "REPLACE INTO item_instance (itemEntry, owner_guid, creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomBonusListId, durability, playedTime, text, battlePetSpeciesId, battlePetBreedData, battlePetLevel, battlePetDisplayId, context, bonusListIDs, guid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_UPD_ITEM_INSTANCE, "UPDATE item_instance SET itemEntry = ?, owner_guid = ?, creatorGuid = ?, giftCreatorGuid = ?, count = ?, duration = ?, charges = ?, flags = ?, enchantments = ?, randomBonusListId = ?, durability = ?, playedTime = ?, text = ?, battlePetSpeciesId = ?, battlePetBreedData = ?, battlePetLevel = ?, battlePetDisplayId = ?, context = ?, bonusListIDs = ? WHERE guid = ?", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_UPD_ITEM_INSTANCE_ON_LOAD, "UPDATE item_instance SET duration = ?, flags = ?, durability = ? WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_ITEM_INSTANCE, "DELETE FROM item_instance WHERE guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_ITEM_INSTANCE_BY_OWNER, "DELETE FROM item_instance WHERE owner_guid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_INS_ITEM_INSTANCE_GEMS, "INSERT INTO item_instance_gems (itemGuid, gemItemId1, gemBonuses1, gemContext1, gemScalingLevel1, gemItemId2, gemBonuses2, gemContext2, gemScalingLevel2, gemItemId3, gemBonuses3, gemContext3, gemScalingLevel3) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
@@ -625,8 +625,8 @@ void CharacterDatabaseConnection::DoPrepareStatements()
PrepareStatement(CHAR_DEL_CHAR_FISHINGSTEPS, "DELETE FROM character_fishingsteps WHERE guid = ?", CONNECTION_ASYNC);
// Void Storage
- PrepareStatement(CHAR_SEL_CHAR_VOID_STORAGE, "SELECT itemId, itemEntry, slot, creatorGuid, randomBonusListId, upgradeId, fixedScalingLevel, artifactKnowledgeLevel, context, bonusListIDs FROM character_void_storage WHERE playerGuid = ?", CONNECTION_ASYNC);
- PrepareStatement(CHAR_REP_CHAR_VOID_STORAGE_ITEM, "REPLACE INTO character_void_storage (itemId, playerGuid, itemEntry, slot, creatorGuid, randomBonusListId, upgradeId, fixedScalingLevel, artifactKnowledgeLevel, context, bonusListIDs) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_SEL_CHAR_VOID_STORAGE, "SELECT itemId, itemEntry, slot, creatorGuid, randomBonusListId, fixedScalingLevel, artifactKnowledgeLevel, context, bonusListIDs FROM character_void_storage WHERE playerGuid = ?", CONNECTION_ASYNC);
+ PrepareStatement(CHAR_REP_CHAR_VOID_STORAGE_ITEM, "REPLACE INTO character_void_storage (itemId, playerGuid, itemEntry, slot, creatorGuid, randomBonusListId, fixedScalingLevel, artifactKnowledgeLevel, context, bonusListIDs) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_CHAR_VOID_STORAGE_ITEM_BY_CHAR_GUID, "DELETE FROM character_void_storage WHERE playerGuid = ?", CONNECTION_ASYNC);
PrepareStatement(CHAR_DEL_CHAR_VOID_STORAGE_ITEM_BY_SLOT, "DELETE FROM character_void_storage WHERE slot = ? AND playerGuid = ?", CONNECTION_ASYNC);
diff --git a/src/server/database/Database/Implementation/HotfixDatabase.cpp b/src/server/database/Database/Implementation/HotfixDatabase.cpp
index d089893b8b1..81bb576e490 100644
--- a/src/server/database/Database/Implementation/HotfixDatabase.cpp
+++ b/src/server/database/Database/Implementation/HotfixDatabase.cpp
@@ -457,8 +457,8 @@ void HotfixDatabaseConnection::DoPrepareStatements()
"ItemGroupSoundsID FROM item ORDER BY ID DESC", CONNECTION_SYNCH);
// ItemAppearance.db2
- PrepareStatement(HOTFIX_SEL_ITEM_APPEARANCE, "SELECT ID, DisplayType, ItemDisplayInfoID, DefaultIconFileDataID, UiOrder FROM item_appearance"
- " ORDER BY ID DESC", CONNECTION_SYNCH);
+ PrepareStatement(HOTFIX_SEL_ITEM_APPEARANCE, "SELECT ID, DisplayType, SubclassID, ItemDisplayInfoID, DefaultIconFileDataID, UiOrder"
+ " FROM item_appearance ORDER BY ID DESC", CONNECTION_SYNCH);
// ItemArmorQuality.db2
PrepareStatement(HOTFIX_SEL_ITEM_ARMOR_QUALITY, "SELECT ID, Qualitymod1, Qualitymod2, Qualitymod3, Qualitymod4, Qualitymod5, Qualitymod6, "
@@ -580,9 +580,9 @@ void HotfixDatabaseConnection::DoPrepareStatements()
"StatPercentEditor5, StatPercentEditor6, StatPercentEditor7, StatPercentEditor8, StatPercentEditor9, StatPercentEditor10, Stackable, "
"MaxCount, RequiredAbility, SellPrice, BuyPrice, VendorStackCount, PriceVariance, PriceRandomValue, Flags1, Flags2, Flags3, Flags4, "
"FactionRelated, ItemNameDescriptionID, RequiredTransmogHoliday, RequiredHoliday, LimitCategory, GemProperties, SocketMatchEnchantmentId, "
- "TotemCategoryID, InstanceBound, ZoneBound, ItemSet, LockID, StartQuestID, PageID, ItemDelay, ScalingStatDistributionID, MinFactionID, "
- "RequiredSkillRank, RequiredSkill, ItemLevel, AllowableClass, ExpansionID, ArtifactID, SpellWeight, SpellWeightCategory, SocketType1, "
- "SocketType2, SocketType3, SheatheType, Material, PageMaterialID, LanguageID, Bonding, DamageDamageType, StatModifierBonusStat1, "
+ "TotemCategoryID, InstanceBound, ZoneBound1, ZoneBound2, ItemSet, LockID, StartQuestID, PageID, ItemDelay, ScalingStatDistributionID, "
+ "MinFactionID, RequiredSkillRank, RequiredSkill, ItemLevel, AllowableClass, ExpansionID, ArtifactID, SpellWeight, SpellWeightCategory, "
+ "SocketType1, SocketType2, SocketType3, SheatheType, Material, PageMaterialID, LanguageID, Bonding, DamageDamageType, StatModifierBonusStat1, "
"StatModifierBonusStat2, StatModifierBonusStat3, StatModifierBonusStat4, StatModifierBonusStat5, StatModifierBonusStat6, "
"StatModifierBonusStat7, StatModifierBonusStat8, StatModifierBonusStat9, StatModifierBonusStat10, ContainerSlots, MinReputation, "
"RequiredPVPMedal, RequiredPVPRank, RequiredLevel, InventoryType, OverallQualityID FROM item_sparse ORDER BY ID DESC", CONNECTION_SYNCH);
@@ -596,10 +596,6 @@ void HotfixDatabaseConnection::DoPrepareStatements()
// ItemSpecOverride.db2
PrepareStatement(HOTFIX_SEL_ITEM_SPEC_OVERRIDE, "SELECT ID, SpecID, ItemID FROM item_spec_override ORDER BY ID DESC", CONNECTION_SYNCH);
- // ItemUpgrade.db2
- PrepareStatement(HOTFIX_SEL_ITEM_UPGRADE, "SELECT ID, ItemUpgradePathID, ItemLevelIncrement, PrerequisiteID, CurrencyType, CurrencyAmount"
- " FROM item_upgrade ORDER BY ID DESC", CONNECTION_SYNCH);
-
// ItemXBonusTree.db2
PrepareStatement(HOTFIX_SEL_ITEM_X_BONUS_TREE, "SELECT ID, ItemBonusTreeID, ItemID FROM item_x_bonus_tree ORDER BY ID DESC", CONNECTION_SYNCH);
@@ -722,7 +718,7 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PrepareStatement(HOTFIX_SEL_POWER_DISPLAY, "SELECT ID, GlobalStringBaseTag, ActualType, Red, Green, Blue FROM power_display ORDER BY ID DESC", CONNECTION_SYNCH);
// PowerType.db2
- PrepareStatement(HOTFIX_SEL_POWER_TYPE, "SELECT ID, NameGlobalStringTag, CostGlobalStringTag, PowerTypeEnum, MinPower, MaxBasePower, CenterPower, "
+ PrepareStatement(HOTFIX_SEL_POWER_TYPE, "SELECT NameGlobalStringTag, CostGlobalStringTag, ID, PowerTypeEnum, MinPower, MaxBasePower, CenterPower, "
"DefaultPower, DisplayModifier, RegenInterruptTimeMS, RegenPeace, RegenCombat, Flags FROM power_type ORDER BY ID DESC", CONNECTION_SYNCH);
// PrestigeLevelInfo.db2
@@ -785,9 +781,6 @@ void HotfixDatabaseConnection::DoPrepareStatements()
// RewardPackXItem.db2
PrepareStatement(HOTFIX_SEL_REWARD_PACK_X_ITEM, "SELECT ID, ItemID, ItemQuantity, RewardPackID FROM reward_pack_x_item ORDER BY ID DESC", CONNECTION_SYNCH);
- // RulesetItemUpgrade.db2
- PrepareStatement(HOTFIX_SEL_RULESET_ITEM_UPGRADE, "SELECT ID, ItemID, ItemUpgradeID FROM ruleset_item_upgrade ORDER BY ID DESC", CONNECTION_SYNCH);
-
// ScalingStatDistribution.db2
PrepareStatement(HOTFIX_SEL_SCALING_STAT_DISTRIBUTION, "SELECT ID, PlayerLevelToItemLevelCurveID, MinLevel, MaxLevel"
" FROM scaling_stat_distribution ORDER BY ID DESC", CONNECTION_SYNCH);
@@ -875,7 +868,7 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PrepareStatement(HOTFIX_SEL_SPELL_DURATION, "SELECT ID, Duration, DurationPerLevel, MaxDuration FROM spell_duration ORDER BY ID DESC", CONNECTION_SYNCH);
// SpellEffect.db2
- PrepareStatement(HOTFIX_SEL_SPELL_EFFECT, "SELECT ID, DifficultyID, EffectIndex, Effect, EffectAmplitude, EffectAttributes, EffectAura, "
+ PrepareStatement(HOTFIX_SEL_SPELL_EFFECT, "SELECT ID, EffectAura, DifficultyID, EffectIndex, Effect, EffectAmplitude, EffectAttributes, "
"EffectAuraPeriod, EffectBonusCoefficient, EffectChainAmplitude, EffectChainTargets, EffectItemType, EffectMechanic, EffectPointsPerResource, "
"EffectPosFacing, EffectRealPointsPerLevel, EffectTriggerSpell, BonusCoefficientFromAP, PvpMultiplier, Coefficient, Variance, "
"ResourceCoefficient, GroupSizeBasePointsCoefficient, EffectBasePoints, EffectMiscValue1, EffectMiscValue2, EffectRadiusIndex1, "
@@ -915,9 +908,9 @@ void HotfixDatabaseConnection::DoPrepareStatements()
" FROM spell_levels ORDER BY ID DESC", CONNECTION_SYNCH);
// SpellMisc.db2
- PrepareStatement(HOTFIX_SEL_SPELL_MISC, "SELECT ID, DifficultyID, CastingTimeIndex, DurationIndex, RangeIndex, SchoolMask, Speed, LaunchDelay, "
- "MinDuration, SpellIconFileDataID, ActiveIconFileDataID, ContentTuningID, Attributes1, Attributes2, Attributes3, Attributes4, Attributes5, "
- "Attributes6, Attributes7, Attributes8, Attributes9, Attributes10, Attributes11, Attributes12, Attributes13, Attributes14, SpellID"
+ PrepareStatement(HOTFIX_SEL_SPELL_MISC, "SELECT Attributes1, Attributes2, Attributes3, Attributes4, Attributes5, Attributes6, Attributes7, "
+ "Attributes8, Attributes9, Attributes10, Attributes11, Attributes12, Attributes13, Attributes14, ID, DifficultyID, CastingTimeIndex, "
+ "DurationIndex, RangeIndex, SchoolMask, Speed, LaunchDelay, MinDuration, SpellIconFileDataID, ActiveIconFileDataID, ContentTuningID, SpellID"
" FROM spell_misc ORDER BY ID DESC", CONNECTION_SYNCH);
// SpellName.db2
@@ -1020,7 +1013,7 @@ void HotfixDatabaseConnection::DoPrepareStatements()
// TransmogSet.db2
PrepareStatement(HOTFIX_SEL_TRANSMOG_SET, "SELECT Name, ID, ClassMask, TrackingQuestID, Flags, TransmogSetGroupID, ItemNameDescriptionID, "
- "ParentTransmogSetID, Unknown810, ExpansionID, PatchID, UiOrder FROM transmog_set ORDER BY ID DESC", CONNECTION_SYNCH);
+ "ParentTransmogSetID, Unknown810, ExpansionID, PatchID, UiOrder, PlayerConditionID FROM transmog_set ORDER BY ID DESC", CONNECTION_SYNCH);
PREPARE_LOCALE_STMT(HOTFIX_SEL_TRANSMOG_SET, "SELECT ID, Name_lang FROM transmog_set_locale WHERE locale = ?", CONNECTION_SYNCH);
// TransmogSetGroup.db2
@@ -1091,10 +1084,6 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PrepareStatement(HOTFIX_SEL_WORLD_MAP_OVERLAY, "SELECT ID, UiMapArtID, TextureWidth, TextureHeight, OffsetX, OffsetY, HitRectTop, HitRectBottom, "
"HitRectLeft, HitRectRight, PlayerConditionID, Flags, AreaID1, AreaID2, AreaID3, AreaID4 FROM world_map_overlay ORDER BY ID DESC", CONNECTION_SYNCH);
- // WorldSafeLocs.db2
- PrepareStatement(HOTFIX_SEL_WORLD_SAFE_LOCS, "SELECT ID, AreaName, LocX, LocY, LocZ, MapID, Facing FROM world_safe_locs ORDER BY ID DESC", CONNECTION_SYNCH);
- PREPARE_LOCALE_STMT(HOTFIX_SEL_WORLD_SAFE_LOCS, "SELECT ID, AreaName_lang FROM world_safe_locs_locale WHERE locale = ?", CONNECTION_SYNCH);
-
// WorldStateExpression.db2
PrepareStatement(HOTFIX_SEL_WORLD_STATE_EXPRESSION, "SELECT ID, Expression FROM world_state_expression ORDER BY ID DESC", CONNECTION_SYNCH);
}
diff --git a/src/server/database/Database/Implementation/HotfixDatabase.h b/src/server/database/Database/Implementation/HotfixDatabase.h
index aa062cd5554..d1d97a1f0cc 100644
--- a/src/server/database/Database/Implementation/HotfixDatabase.h
+++ b/src/server/database/Database/Implementation/HotfixDatabase.h
@@ -317,8 +317,6 @@ enum HotfixDatabaseStatements : uint32
HOTFIX_SEL_ITEM_SPEC_OVERRIDE,
- HOTFIX_SEL_ITEM_UPGRADE,
-
HOTFIX_SEL_ITEM_X_BONUS_TREE,
HOTFIX_SEL_KEYCHAIN,
@@ -412,8 +410,6 @@ enum HotfixDatabaseStatements : uint32
HOTFIX_SEL_REWARD_PACK_X_ITEM,
- HOTFIX_SEL_RULESET_ITEM_UPGRADE,
-
HOTFIX_SEL_SCALING_STAT_DISTRIBUTION,
HOTFIX_SEL_SCENARIO,
@@ -571,9 +567,6 @@ enum HotfixDatabaseStatements : uint32
HOTFIX_SEL_WORLD_MAP_OVERLAY,
- HOTFIX_SEL_WORLD_SAFE_LOCS,
- HOTFIX_SEL_WORLD_SAFE_LOCS_LOCALE,
-
HOTFIX_SEL_WORLD_STATE_EXPRESSION,
MAX_HOTFIXDATABASE_STATEMENTS
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp
index 39aaf2adfcd..f182c261b17 100644
--- a/src/server/game/Achievements/CriteriaHandler.cpp
+++ b/src/server/game/Achievements/CriteriaHandler.cpp
@@ -786,8 +786,8 @@ void CriteriaHandler::UpdateCriteria(CriteriaTypes type, uint64 miscValue1 /*= 0
case CRITERIA_TYPE_EARN_HONOR_XP:
case CRITERIA_TYPE_RELIC_TALENT_UNLOCKED:
case CRITERIA_TYPE_REACH_ACCOUNT_HONOR_LEVEL:
- case CRITERIA_TREE_HEART_OF_AZEROTH_ARTIFACT_POWER_EARNED:
- case CRITERIA_TREE_HEART_OF_AZEROTH_LEVEL_REACHED:
+ case CRITERIA_TYPE_HEART_OF_AZEROTH_ARTIFACT_POWER_EARNED:
+ case CRITERIA_TYPE_HEART_OF_AZEROTH_LEVEL_REACHED:
break; // Not implemented yet :(
}
@@ -1151,8 +1151,8 @@ bool CriteriaHandler::IsCompletedCriteria(Criteria const* criteria, uint64 requi
case CRITERIA_TYPE_EARN_HONOR_XP:
case CRITERIA_TYPE_RELIC_TALENT_UNLOCKED:
case CRITERIA_TYPE_REACH_ACCOUNT_HONOR_LEVEL:
- case CRITERIA_TREE_HEART_OF_AZEROTH_ARTIFACT_POWER_EARNED:
- case CRITERIA_TREE_HEART_OF_AZEROTH_LEVEL_REACHED:
+ case CRITERIA_TYPE_HEART_OF_AZEROTH_ARTIFACT_POWER_EARNED:
+ case CRITERIA_TYPE_HEART_OF_AZEROTH_LEVEL_REACHED:
return progress->Counter >= requiredAmount;
case CRITERIA_TYPE_COMPLETE_ACHIEVEMENT:
case CRITERIA_TYPE_COMPLETE_QUEST:
@@ -2204,9 +2204,9 @@ char const* CriteriaMgr::GetCriteriaTypeString(CriteriaTypes type)
return "RELIC_TALENT_UNLOCKED";
case CRITERIA_TYPE_REACH_ACCOUNT_HONOR_LEVEL:
return "REACH_ACCOUNT_HONOR_LEVEL";
- case CRITERIA_TREE_HEART_OF_AZEROTH_ARTIFACT_POWER_EARNED:
+ case CRITERIA_TYPE_HEART_OF_AZEROTH_ARTIFACT_POWER_EARNED:
return "HEART_OF_AZEROTH_ARTIFACT_POWER_EARNED";
- case CRITERIA_TREE_HEART_OF_AZEROTH_LEVEL_REACHED:
+ case CRITERIA_TYPE_HEART_OF_AZEROTH_LEVEL_REACHED:
return "HEART_OF_AZEROTH_LEVEL_REACHED";
}
return "MISSING_TYPE";
diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp
index 0bd37951c5a..bb629db8a8c 100644
--- a/src/server/game/Battlefield/Battlefield.cpp
+++ b/src/server/game/Battlefield/Battlefield.cpp
@@ -609,7 +609,7 @@ WorldSafeLocsEntry const* Battlefield::GetClosestGraveYard(Player* player)
}
if (closestGY)
- return sWorldSafeLocsStore.LookupEntry(closestGY->GetGraveyardId());
+ return sObjectMgr->GetWorldSafeLoc(closestGY->GetGraveyardId());
return nullptr;
}
@@ -682,8 +682,8 @@ void BfGraveyard::SetSpirit(Creature* spirit, TeamId team)
float BfGraveyard::GetDistance(Player* player)
{
- WorldSafeLocsEntry const* safeLoc = sWorldSafeLocsStore.LookupEntry(m_GraveyardId);
- return player->GetDistance2d(safeLoc->Loc.X, safeLoc->Loc.Y);
+ WorldSafeLocsEntry const* safeLoc = sObjectMgr->GetWorldSafeLoc(m_GraveyardId);
+ return player->GetDistance2d(safeLoc->Loc.GetPositionX(), safeLoc->Loc.GetPositionY());
}
void BfGraveyard::AddPlayer(ObjectGuid playerGuid)
@@ -759,12 +759,12 @@ void BfGraveyard::RelocateDeadPlayers()
continue;
if (closestGrave)
- player->TeleportTo(player->GetMapId(), closestGrave->Loc.X, closestGrave->Loc.Y, closestGrave->Loc.Z, player->GetOrientation());
+ player->TeleportTo(closestGrave->Loc);
else
{
closestGrave = m_Bf->GetClosestGraveYard(player);
if (closestGrave)
- player->TeleportTo(player->GetMapId(), closestGrave->Loc.X, closestGrave->Loc.Y, closestGrave->Loc.Z, player->GetOrientation());
+ player->TeleportTo(closestGrave->Loc);
}
}
}
diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp
index 0f8d3609f62..472cc6aeeb7 100644
--- a/src/server/game/Battlegrounds/Battleground.cpp
+++ b/src/server/game/Battlegrounds/Battleground.cpp
@@ -1029,7 +1029,7 @@ void Battleground::StartBattleground()
void Battleground::TeleportPlayerToExploitLocation(Player* player)
{
if (WorldSafeLocsEntry const* loc = GetExploitTeleportLocation(Team(player->GetBGTeam())))
- player->TeleportTo(loc->MapID, loc->Loc.X, loc->Loc.Y, loc->Loc.Z, loc->Facing);
+ player->TeleportTo(loc->Loc);
}
void Battleground::AddPlayer(Player* player)
@@ -1359,7 +1359,7 @@ void Battleground::RelocateDeadPlayers(ObjectGuid guideGuid)
closestGrave = GetClosestGraveYard(player);
if (closestGrave)
- player->TeleportTo(GetMapId(), closestGrave->Loc.X, closestGrave->Loc.Y, closestGrave->Loc.Z, player->GetOrientation());
+ player->TeleportTo(closestGrave->Loc);
}
ghostList.clear();
}
diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
index 7afa22a5ccd..b71c45294eb 100644
--- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp
+++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp
@@ -543,9 +543,9 @@ void BattlegroundMgr::LoadBattlegroundTemplates()
if (bgTemplate.Id != BATTLEGROUND_AA && bgTemplate.Id != BATTLEGROUND_RB)
{
uint32 startId = fields[5].GetUInt32();
- if (WorldSafeLocsEntry const* start = sWorldSafeLocsStore.LookupEntry(startId))
+ if (WorldSafeLocsEntry const* start = sObjectMgr->GetWorldSafeLoc(startId))
{
- bgTemplate.StartLocation[TEAM_ALLIANCE].Relocate(start->Loc.X, start->Loc.Y, start->Loc.Z, (start->Facing * M_PI) / 180);
+ bgTemplate.StartLocation[TEAM_ALLIANCE].Relocate(start->Loc);
}
else
{
@@ -554,9 +554,9 @@ void BattlegroundMgr::LoadBattlegroundTemplates()
}
startId = fields[6].GetUInt32();
- if (WorldSafeLocsEntry const* start = sWorldSafeLocsStore.LookupEntry(startId))
+ if (WorldSafeLocsEntry const* start = sObjectMgr->GetWorldSafeLoc(startId))
{
- bgTemplate.StartLocation[TEAM_HORDE].Relocate(start->Loc.X, start->Loc.Y, start->Loc.Z, (start->Facing * M_PI) / 180);
+ bgTemplate.StartLocation[TEAM_HORDE].Relocate(start->Loc);
}
else
{
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp
index 66d710fb87a..bcc88a088a6 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp
@@ -23,6 +23,7 @@
#include "GameObject.h"
#include "Log.h"
#include "Map.h"
+#include "ObjectMgr.h"
#include "Player.h"
#include "Random.h"
#include "SpellInfo.h"
@@ -651,10 +652,10 @@ WorldSafeLocsEntry const* BattlegroundAB::GetClosestGraveYard(Player* player)
float mindist = 999999.0f;
for (uint8 i = 0; i < nodes.size(); ++i)
{
- WorldSafeLocsEntry const*entry = sWorldSafeLocsStore.LookupEntry(BG_AB_GraveyardIds[nodes[i]]);
+ WorldSafeLocsEntry const*entry = sObjectMgr->GetWorldSafeLoc(BG_AB_GraveyardIds[nodes[i]]);
if (!entry)
continue;
- float dist = (entry->Loc.X - plr_x)*(entry->Loc.X - plr_x)+(entry->Loc.Y - plr_y)*(entry->Loc.Y - plr_y);
+ float dist = (entry->Loc.GetPositionX() - plr_x) * (entry->Loc.GetPositionX() - plr_x) + (entry->Loc.GetPositionY() - plr_y) * (entry->Loc.GetPositionY() - plr_y);
if (mindist > dist)
{
mindist = dist;
@@ -665,14 +666,14 @@ WorldSafeLocsEntry const* BattlegroundAB::GetClosestGraveYard(Player* player)
}
// If not, place ghost on starting location
if (!good_entry)
- good_entry = sWorldSafeLocsStore.LookupEntry(BG_AB_GraveyardIds[teamIndex+5]);
+ good_entry = sObjectMgr->GetWorldSafeLoc(BG_AB_GraveyardIds[teamIndex+5]);
return good_entry;
}
WorldSafeLocsEntry const* BattlegroundAB::GetExploitTeleportLocation(Team team)
{
- return sWorldSafeLocsStore.LookupEntry(team == ALLIANCE ? AB_EXPLOIT_TELEPORT_LOCATION_ALLIANCE : AB_EXPLOIT_TELEPORT_LOCATION_HORDE);
+ return sObjectMgr->GetWorldSafeLoc(team == ALLIANCE ? AB_EXPLOIT_TELEPORT_LOCATION_ALLIANCE : AB_EXPLOIT_TELEPORT_LOCATION_HORDE);
}
bool BattlegroundAB::UpdatePlayerScore(Player* player, uint32 type, uint32 value, bool doAddHonor)
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp
index 8471a0a95c0..b293de77803 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp
@@ -1109,16 +1109,16 @@ WorldSafeLocsEntry const* BattlegroundAV::GetClosestGraveYard(Player* player)
player->GetPosition(x, y);
- pGraveyard = sWorldSafeLocsStore.LookupEntry(BG_AV_GraveyardIds[GetTeamIndexByTeamId(player->GetTeam())+7]);
- minDist = (pGraveyard->Loc.X - x)*(pGraveyard->Loc.X - x)+(pGraveyard->Loc.Y - y)*(pGraveyard->Loc.Y - y);
+ pGraveyard = sObjectMgr->GetWorldSafeLoc(BG_AV_GraveyardIds[GetTeamIndexByTeamId(player->GetTeam()) + 7]);
+ minDist = (pGraveyard->Loc.GetPositionX() - x) * (pGraveyard->Loc.GetPositionX() - x) + (pGraveyard->Loc.GetPositionY() - y) * (pGraveyard->Loc.GetPositionY() - y);
for (uint8 i = BG_AV_NODES_FIRSTAID_STATION; i <= BG_AV_NODES_FROSTWOLF_HUT; ++i)
if (m_Nodes[i].Owner == player->GetTeam() && m_Nodes[i].State == POINT_CONTROLED)
{
- entry = sWorldSafeLocsStore.LookupEntry(BG_AV_GraveyardIds[i]);
+ entry = sObjectMgr->GetWorldSafeLoc(BG_AV_GraveyardIds[i]);
if (entry)
{
- dist = (entry->Loc.X - x)*(entry->Loc.X - x)+(entry->Loc.Y - y)*(entry->Loc.Y - y);
+ dist = (entry->Loc.GetPositionX() - x) * (entry->Loc.GetPositionX() - x) + (entry->Loc.GetPositionY() - y) * (entry->Loc.GetPositionY() - y);
if (dist < minDist)
{
minDist = dist;
@@ -1131,7 +1131,7 @@ WorldSafeLocsEntry const* BattlegroundAV::GetClosestGraveYard(Player* player)
WorldSafeLocsEntry const* BattlegroundAV::GetExploitTeleportLocation(Team team)
{
- return sWorldSafeLocsStore.LookupEntry(team == ALLIANCE ? AV_EXPLOIT_TELEPORT_LOCATION_ALLIANCE: AV_EXPLOIT_TELEPORT_LOCATION_HORDE);
+ return sObjectMgr->GetWorldSafeLoc(team == ALLIANCE ? AV_EXPLOIT_TELEPORT_LOCATION_ALLIANCE: AV_EXPLOIT_TELEPORT_LOCATION_HORDE);
}
bool BattlegroundAV::SetupBattleground()
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp
index 781189270b3..af6e6957372 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp
@@ -25,6 +25,7 @@
#include "Log.h"
#include "Map.h"
#include "ObjectAccessor.h"
+#include "ObjectMgr.h"
#include "Player.h"
#include "Random.h"
#include "SpellInfo.h"
@@ -520,15 +521,15 @@ bool BattlegroundEY::SetupBattleground()
TC_LOG_ERROR("bg.battleground", "BattlegroundEY: Could not spawn Speedbuff Fel Reaver.");
}
- WorldSafeLocsEntry const* sg = sWorldSafeLocsStore.LookupEntry(EY_GRAVEYARD_MAIN_ALLIANCE);
- if (!sg || !AddSpiritGuide(EY_SPIRIT_MAIN_ALLIANCE, sg->Loc.X, sg->Loc.Y, sg->Loc.Z, 3.124139f, TEAM_ALLIANCE))
+ WorldSafeLocsEntry const* sg = sObjectMgr->GetWorldSafeLoc(EY_GRAVEYARD_MAIN_ALLIANCE);
+ if (!sg || !AddSpiritGuide(EY_SPIRIT_MAIN_ALLIANCE, sg->Loc.GetPositionX(), sg->Loc.GetPositionY(), sg->Loc.GetPositionZ(), 3.124139f, TEAM_ALLIANCE))
{
TC_LOG_ERROR("sql.sql", "BatteGroundEY: Failed to spawn spirit guide. The battleground was not created.");
return false;
}
- sg = sWorldSafeLocsStore.LookupEntry(EY_GRAVEYARD_MAIN_HORDE);
- if (!sg || !AddSpiritGuide(EY_SPIRIT_MAIN_HORDE, sg->Loc.X, sg->Loc.Y, sg->Loc.Z, 3.193953f, TEAM_HORDE))
+ sg = sObjectMgr->GetWorldSafeLoc(EY_GRAVEYARD_MAIN_HORDE);
+ if (!sg || !AddSpiritGuide(EY_SPIRIT_MAIN_HORDE, sg->Loc.GetPositionX(), sg->Loc.GetPositionY(), sg->Loc.GetPositionZ(), 3.193953f, TEAM_HORDE))
{
TC_LOG_ERROR("sql.sql", "BatteGroundEY: Failed to spawn spirit guide. The battleground was not created.");
return false;
@@ -764,8 +765,8 @@ void BattlegroundEY::EventTeamCapturedPoint(Player* player, uint32 Point)
if (!BgCreatures[Point].IsEmpty())
DelCreature(Point);
- WorldSafeLocsEntry const* sg = sWorldSafeLocsStore.LookupEntry(m_CapturingPointTypes[Point].GraveYardId);
- if (!sg || !AddSpiritGuide(Point, sg->Loc.X, sg->Loc.Y, sg->Loc.Z, 3.124139f, GetTeamIndexByTeamId(Team)))
+ WorldSafeLocsEntry const* sg = sObjectMgr->GetWorldSafeLoc(m_CapturingPointTypes[Point].GraveYardId);
+ if (!sg || !AddSpiritGuide(Point, sg->Loc.GetPositionX(), sg->Loc.GetPositionY(), sg->Loc.GetPositionZ(), 3.124139f, GetTeamIndexByTeamId(Team)))
TC_LOG_ERROR("bg.battleground", "BatteGroundEY: Failed to spawn spirit guide. point: %u, team: %u, graveyard_id: %u",
Point, Team, m_CapturingPointTypes[Point].GraveYardId);
@@ -896,7 +897,7 @@ WorldSafeLocsEntry const* BattlegroundEY::GetClosestGraveYard(Player* player)
WorldSafeLocsEntry const* entry = NULL;
WorldSafeLocsEntry const* nearestEntry = NULL;
- entry = sWorldSafeLocsStore.LookupEntry(g_id);
+ entry = sObjectMgr->GetWorldSafeLoc(g_id);
nearestEntry = entry;
if (!entry)
@@ -909,19 +910,23 @@ WorldSafeLocsEntry const* BattlegroundEY::GetClosestGraveYard(Player* player)
float plr_y = player->GetPositionY();
float plr_z = player->GetPositionZ();
- distance = (entry->Loc.X - plr_x)*(entry->Loc.X - plr_x) + (entry->Loc.Y - plr_y)*(entry->Loc.Y - plr_y) + (entry->Loc.Z - plr_z)*(entry->Loc.Z - plr_z);
+ distance = (entry->Loc.GetPositionX() - plr_x) * (entry->Loc.GetPositionX() - plr_x)
+ + (entry->Loc.GetPositionY() - plr_y) * (entry->Loc.GetPositionY() - plr_y)
+ + (entry->Loc.GetPositionZ() - plr_z) * (entry->Loc.GetPositionZ() - plr_z);
nearestDistance = distance;
for (uint8 i = 0; i < EY_POINTS_MAX; ++i)
{
if (m_PointOwnedByTeam[i] == player->GetTeam() && m_PointState[i] == EY_POINT_UNDER_CONTROL)
{
- entry = sWorldSafeLocsStore.LookupEntry(m_CapturingPointTypes[i].GraveYardId);
+ entry = sObjectMgr->GetWorldSafeLoc(m_CapturingPointTypes[i].GraveYardId);
if (!entry)
TC_LOG_ERROR("bg.battleground", "BattlegroundEY: Graveyard %u could not be found.", m_CapturingPointTypes[i].GraveYardId);
else
{
- distance = (entry->Loc.X - plr_x)*(entry->Loc.X - plr_x) + (entry->Loc.Y - plr_y)*(entry->Loc.Y - plr_y) + (entry->Loc.Z - plr_z)*(entry->Loc.Z - plr_z);
+ distance = (entry->Loc.GetPositionX() - plr_x) * (entry->Loc.GetPositionX() - plr_x)
+ + (entry->Loc.GetPositionY() - plr_y) * (entry->Loc.GetPositionY() - plr_y)
+ + (entry->Loc.GetPositionZ() - plr_z) * (entry->Loc.GetPositionZ() - plr_z);
if (distance < nearestDistance)
{
nearestDistance = distance;
@@ -936,7 +941,7 @@ WorldSafeLocsEntry const* BattlegroundEY::GetClosestGraveYard(Player* player)
WorldSafeLocsEntry const* BattlegroundEY::GetExploitTeleportLocation(Team team)
{
- return sWorldSafeLocsStore.LookupEntry(team == ALLIANCE ? EY_EXPLOIT_TELEPORT_LOCATION_ALLIANCE : EY_EXPLOIT_TELEPORT_LOCATION_HORDE);
+ return sObjectMgr->GetWorldSafeLoc(team == ALLIANCE ? EY_EXPLOIT_TELEPORT_LOCATION_ALLIANCE : EY_EXPLOIT_TELEPORT_LOCATION_HORDE);
}
bool BattlegroundEY::IsAllNodesControlledByTeam(uint32 team) const
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
index 3d343d2364c..a4c94466fb7 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp
@@ -21,6 +21,7 @@
#include "GameObject.h"
#include "Log.h"
#include "Map.h"
+#include "ObjectMgr.h"
#include "Player.h"
#include "Transport.h"
#include "UnitAI.h"
@@ -875,10 +876,10 @@ WorldSafeLocsEntry const* BattlegroundIC::GetClosestGraveYard(Player* player)
float mindist = 999999.0f;
for (uint8 i = 0; i < nodes.size(); ++i)
{
- WorldSafeLocsEntry const*entry = sWorldSafeLocsStore.LookupEntry(BG_IC_GraveyardIds[nodes[i]]);
+ WorldSafeLocsEntry const*entry = sObjectMgr->GetWorldSafeLoc(BG_IC_GraveyardIds[nodes[i]]);
if (!entry)
continue;
- float dist = (entry->Loc.X - player_x)*(entry->Loc.X - player_x)+(entry->Loc.Y - player_y)*(entry->Loc.Y - player_y);
+ float dist = (entry->Loc.GetPositionX() - player_x) * (entry->Loc.GetPositionX() - player_x) + (entry->Loc.GetPositionY() - player_y) * (entry->Loc.GetPositionY() - player_y);
if (mindist > dist)
{
mindist = dist;
@@ -889,14 +890,14 @@ WorldSafeLocsEntry const* BattlegroundIC::GetClosestGraveYard(Player* player)
}
// If not, place ghost on starting location
if (!good_entry)
- good_entry = sWorldSafeLocsStore.LookupEntry(BG_IC_GraveyardIds[teamIndex+MAX_NODE_TYPES]);
+ good_entry = sObjectMgr->GetWorldSafeLoc(BG_IC_GraveyardIds[teamIndex+MAX_NODE_TYPES]);
return good_entry;
}
WorldSafeLocsEntry const * BattlegroundIC::GetExploitTeleportLocation(Team team)
{
- return sWorldSafeLocsStore.LookupEntry(team == ALLIANCE ? IC_EXPLOIT_TELEPORT_LOCATION_ALLIANCE : IC_EXPLOIT_TELEPORT_LOCATION_HORDE);
+ return sObjectMgr->GetWorldSafeLoc(team == ALLIANCE ? IC_EXPLOIT_TELEPORT_LOCATION_ALLIANCE : IC_EXPLOIT_TELEPORT_LOCATION_HORDE);
}
bool BattlegroundIC::IsAllNodesControlledByTeam(uint32 team) const
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
index 12b0a9dad20..87cc2006174 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp
@@ -25,6 +25,7 @@
#include "Log.h"
#include "Map.h"
#include "ObjectAccessor.h"
+#include "ObjectMgr.h"
#include "Player.h"
#include "Random.h"
#include "UpdateData.h"
@@ -188,7 +189,7 @@ bool BattlegroundSA::ResetObjs()
//Graveyards
for (uint8 i = 0; i < BG_SA_MAX_GY; i++)
{
- WorldSafeLocsEntry const* sg = sWorldSafeLocsStore.LookupEntry(BG_SA_GYEntries[i]);
+ WorldSafeLocsEntry const* sg = sObjectMgr->GetWorldSafeLoc(BG_SA_GYEntries[i]);
if (!sg)
{
TC_LOG_ERROR("bg.battleground", "SOTA: Can't find GY entry %u", BG_SA_GYEntries[i]);
@@ -198,12 +199,12 @@ bool BattlegroundSA::ResetObjs()
if (i == BG_SA_BEACH_GY)
{
GraveyardStatus[i] = Attackers;
- AddSpiritGuide(i + BG_SA_MAXNPC, sg->Loc.X, sg->Loc.Y, sg->Loc.Z, BG_SA_GYOrientation[i], Attackers);
+ AddSpiritGuide(i + BG_SA_MAXNPC, sg->Loc.GetPositionX(), sg->Loc.GetPositionY(), sg->Loc.GetPositionZ(), BG_SA_GYOrientation[i], Attackers);
}
else
{
GraveyardStatus[i] = ((Attackers == TEAM_HORDE)? TEAM_ALLIANCE : TEAM_HORDE);
- if (!AddSpiritGuide(i + BG_SA_MAXNPC, sg->Loc.X, sg->Loc.Y, sg->Loc.Z, BG_SA_GYOrientation[i], Attackers == TEAM_HORDE ? TEAM_ALLIANCE : TEAM_HORDE))
+ if (!AddSpiritGuide(i + BG_SA_MAXNPC, sg->Loc.GetPositionX(), sg->Loc.GetPositionY(), sg->Loc.GetPositionZ(), BG_SA_GYOrientation[i], Attackers == TEAM_HORDE ? TEAM_ALLIANCE : TEAM_HORDE))
TC_LOG_ERROR("bg.battleground", "SOTA: couldn't spawn GY: %u", i);
}
}
@@ -701,16 +702,16 @@ WorldSafeLocsEntry const* BattlegroundSA::GetClosestGraveYard(Player* player)
else
safeloc = BG_SA_GYEntries[BG_SA_DEFENDER_LAST_GY];
- closest = sWorldSafeLocsStore.LookupEntry(safeloc);
- nearest = player->GetExactDistSq(closest->Loc.X, closest->Loc.Y, closest->Loc.Z);
+ closest = sObjectMgr->GetWorldSafeLoc(safeloc);
+ nearest = player->GetExactDistSq(closest->Loc);
for (uint8 i = BG_SA_RIGHT_CAPTURABLE_GY; i < BG_SA_MAX_GY; i++)
{
if (GraveyardStatus[i] != player->GetTeamId())
continue;
- ret = sWorldSafeLocsStore.LookupEntry(BG_SA_GYEntries[i]);
- dist = player->GetExactDistSq(ret->Loc.X, ret->Loc.Y, ret->Loc.Z);
+ ret = sObjectMgr->GetWorldSafeLoc(BG_SA_GYEntries[i]);
+ dist = player->GetExactDistSq(ret->Loc);
if (dist < nearest)
{
closest = ret;
@@ -803,14 +804,14 @@ void BattlegroundSA::CaptureGraveyard(BG_SA_Graveyards i, Player* Source)
DelCreature(BG_SA_MAXNPC + i);
GraveyardStatus[i] = Source->GetTeamId();
- WorldSafeLocsEntry const* sg = sWorldSafeLocsStore.LookupEntry(BG_SA_GYEntries[i]);
+ WorldSafeLocsEntry const* sg = sObjectMgr->GetWorldSafeLoc(BG_SA_GYEntries[i]);
if (!sg)
{
TC_LOG_ERROR("bg.battleground", "BattlegroundSA::CaptureGraveyard: non-existant GY entry: %u", BG_SA_GYEntries[i]);
return;
}
- AddSpiritGuide(i + BG_SA_MAXNPC, sg->Loc.X, sg->Loc.Y, sg->Loc.Z, BG_SA_GYOrientation[i], GraveyardStatus[i]);
+ AddSpiritGuide(i + BG_SA_MAXNPC, sg->Loc.GetPositionX(), sg->Loc.GetPositionY(), sg->Loc.GetPositionZ(), BG_SA_GYOrientation[i], GraveyardStatus[i]);
uint32 npc = 0;
uint32 flag = 0;
diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp
index 3f24b70f184..ed0f94837ed 100644
--- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp
+++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp
@@ -24,6 +24,7 @@
#include "Map.h"
#include "Object.h"
#include "ObjectAccessor.h"
+#include "ObjectMgr.h"
#include "Player.h"
#include "SpellInfo.h"
#include "WorldStatePackets.h"
@@ -715,15 +716,15 @@ bool BattlegroundWS::SetupBattleground()
return false;
}
- WorldSafeLocsEntry const* sg = sWorldSafeLocsStore.LookupEntry(WS_GRAVEYARD_MAIN_ALLIANCE);
- if (!sg || !AddSpiritGuide(WS_SPIRIT_MAIN_ALLIANCE, sg->Loc.X, sg->Loc.Y, sg->Loc.Z, 3.124139f, TEAM_ALLIANCE))
+ WorldSafeLocsEntry const* sg = sObjectMgr->GetWorldSafeLoc(WS_GRAVEYARD_MAIN_ALLIANCE);
+ if (!sg || !AddSpiritGuide(WS_SPIRIT_MAIN_ALLIANCE, sg->Loc.GetPositionX(), sg->Loc.GetPositionY(), sg->Loc.GetPositionZ(), 3.124139f, TEAM_ALLIANCE))
{
TC_LOG_ERROR("sql.sql", "BatteGroundWS: Failed to spawn Alliance spirit guide! Battleground not created!");
return false;
}
- sg = sWorldSafeLocsStore.LookupEntry(WS_GRAVEYARD_MAIN_HORDE);
- if (!sg || !AddSpiritGuide(WS_SPIRIT_MAIN_HORDE, sg->Loc.X, sg->Loc.Y, sg->Loc.Z, 3.193953f, TEAM_HORDE))
+ sg = sObjectMgr->GetWorldSafeLoc(WS_GRAVEYARD_MAIN_HORDE);
+ if (!sg || !AddSpiritGuide(WS_SPIRIT_MAIN_HORDE, sg->Loc.GetPositionX(), sg->Loc.GetPositionY(), sg->Loc.GetPositionZ(), 3.193953f, TEAM_HORDE))
{
TC_LOG_ERROR("sql.sql", "BatteGroundWS: Failed to spawn Horde spirit guide! Battleground not created!");
return false;
@@ -824,22 +825,22 @@ WorldSafeLocsEntry const* BattlegroundWS::GetClosestGraveYard(Player* player)
if (player->GetTeam() == ALLIANCE)
{
if (GetStatus() == STATUS_IN_PROGRESS)
- return sWorldSafeLocsStore.LookupEntry(WS_GRAVEYARD_MAIN_ALLIANCE);
+ return sObjectMgr->GetWorldSafeLoc(WS_GRAVEYARD_MAIN_ALLIANCE);
else
- return sWorldSafeLocsStore.LookupEntry(WS_GRAVEYARD_FLAGROOM_ALLIANCE);
+ return sObjectMgr->GetWorldSafeLoc(WS_GRAVEYARD_FLAGROOM_ALLIANCE);
}
else
{
if (GetStatus() == STATUS_IN_PROGRESS)
- return sWorldSafeLocsStore.LookupEntry(WS_GRAVEYARD_MAIN_HORDE);
+ return sObjectMgr->GetWorldSafeLoc(WS_GRAVEYARD_MAIN_HORDE);
else
- return sWorldSafeLocsStore.LookupEntry(WS_GRAVEYARD_FLAGROOM_HORDE);
+ return sObjectMgr->GetWorldSafeLoc(WS_GRAVEYARD_FLAGROOM_HORDE);
}
}
WorldSafeLocsEntry const* BattlegroundWS::GetExploitTeleportLocation(Team team)
{
- return sWorldSafeLocsStore.LookupEntry(team == ALLIANCE ? WS_EXPLOIT_TELEPORT_LOCATION_ALLIANCE : WS_EXPLOIT_TELEPORT_LOCATION_HORDE);
+ return sObjectMgr->GetWorldSafeLoc(team == ALLIANCE ? WS_EXPLOIT_TELEPORT_LOCATION_ALLIANCE : WS_EXPLOIT_TELEPORT_LOCATION_HORDE);
}
void BattlegroundWS::FillInitialWorldStates(WorldPackets::WorldState::InitWorldStates& packet)
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
index 598c1000758..b8d5726345a 100644
--- a/src/server/game/Conditions/ConditionMgr.cpp
+++ b/src/server/game/Conditions/ConditionMgr.cpp
@@ -1858,7 +1858,7 @@ bool ConditionMgr::isSourceTypeValid(Condition* cond) const
case CONDITION_SOURCE_TYPE_SMART_EVENT:
break;
case CONDITION_SOURCE_TYPE_GRAVEYARD:
- if (!sWorldSafeLocsStore.LookupEntry(cond->SourceEntry))
+ if (!sObjectMgr->GetWorldSafeLoc(cond->SourceEntry))
{
TC_LOG_ERROR("sql.sql", "%s SourceEntry in `condition` table, does not exist in WorldSafeLocs.db2, ignoring.", cond->ToString().c_str());
return false;
diff --git a/src/server/game/DataStores/DB2LoadInfo.h b/src/server/game/DataStores/DB2LoadInfo.h
index b86c435a338..acea806bdb6 100644
--- a/src/server/game/DataStores/DB2LoadInfo.h
+++ b/src/server/game/DataStores/DB2LoadInfo.h
@@ -2183,6 +2183,7 @@ struct ItemAppearanceLoadInfo
{
{ false, FT_INT, "ID" },
{ false, FT_BYTE, "DisplayType" },
+ { true, FT_INT, "SubclassID" },
{ true, FT_INT, "ItemDisplayInfoID" },
{ true, FT_INT, "DefaultIconFileDataID" },
{ true, FT_INT, "UiOrder" },
@@ -2801,7 +2802,8 @@ struct ItemSparseLoadInfo
{ false, FT_SHORT, "SocketMatchEnchantmentId" },
{ false, FT_SHORT, "TotemCategoryID" },
{ false, FT_SHORT, "InstanceBound" },
- { false, FT_SHORT, "ZoneBound" },
+ { false, FT_SHORT, "ZoneBound1" },
+ { false, FT_SHORT, "ZoneBound2" },
{ false, FT_SHORT, "ItemSet" },
{ false, FT_SHORT, "LockID" },
{ false, FT_SHORT, "StartQuestID" },
@@ -2883,24 +2885,6 @@ struct ItemSpecOverrideLoadInfo
}
};
-struct ItemUpgradeLoadInfo
-{
- static DB2LoadInfo const* Instance()
- {
- static DB2FieldMeta const fields[] =
- {
- { false, FT_INT, "ID" },
- { false, FT_BYTE, "ItemUpgradePathID" },
- { false, FT_BYTE, "ItemLevelIncrement" },
- { false, FT_SHORT, "PrerequisiteID" },
- { false, FT_SHORT, "CurrencyType" },
- { false, FT_INT, "CurrencyAmount" },
- };
- static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemUpgradeMeta::Instance(), HOTFIX_SEL_ITEM_UPGRADE);
- return &loadInfo;
- }
-};
-
struct ItemXBonusTreeLoadInfo
{
static DB2LoadInfo const* Instance()
@@ -3649,9 +3633,9 @@ struct PowerTypeLoadInfo
{
static DB2FieldMeta const fields[] =
{
- { false, FT_INT, "ID" },
{ false, FT_STRING_NOT_LOCALIZED, "NameGlobalStringTag" },
{ false, FT_STRING_NOT_LOCALIZED, "CostGlobalStringTag" },
+ { false, FT_INT, "ID" },
{ true, FT_BYTE, "PowerTypeEnum" },
{ true, FT_BYTE, "MinPower" },
{ true, FT_SHORT, "MaxBasePower" },
@@ -3966,21 +3950,6 @@ struct RewardPackXItemLoadInfo
}
};
-struct RulesetItemUpgradeLoadInfo
-{
- static DB2LoadInfo const* Instance()
- {
- static DB2FieldMeta const fields[] =
- {
- { false, FT_INT, "ID" },
- { true, FT_INT, "ItemID" },
- { false, FT_SHORT, "ItemUpgradeID" },
- };
- static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, RulesetItemUpgradeMeta::Instance(), HOTFIX_SEL_RULESET_ITEM_UPGRADE);
- return &loadInfo;
- }
-};
-
struct ScalingStatDistributionLoadInfo
{
static DB2LoadInfo const* Instance()
@@ -4399,12 +4368,12 @@ struct SpellEffectLoadInfo
static DB2FieldMeta const fields[] =
{
{ false, FT_INT, "ID" },
+ { true, FT_SHORT, "EffectAura" },
{ true, FT_INT, "DifficultyID" },
{ true, FT_INT, "EffectIndex" },
{ false, FT_INT, "Effect" },
{ false, FT_FLOAT, "EffectAmplitude" },
{ true, FT_INT, "EffectAttributes" },
- { true, FT_SHORT, "EffectAura" },
{ true, FT_INT, "EffectAuraPeriod" },
{ false, FT_FLOAT, "EffectBonusCoefficient" },
{ false, FT_FLOAT, "EffectChainAmplitude" },
@@ -4616,17 +4585,6 @@ struct SpellMiscLoadInfo
static DB2FieldMeta const fields[] =
{
{ false, FT_INT, "ID" },
- { false, FT_BYTE, "DifficultyID" },
- { false, FT_SHORT, "CastingTimeIndex" },
- { false, FT_SHORT, "DurationIndex" },
- { false, FT_SHORT, "RangeIndex" },
- { false, FT_BYTE, "SchoolMask" },
- { false, FT_FLOAT, "Speed" },
- { false, FT_FLOAT, "LaunchDelay" },
- { false, FT_FLOAT, "MinDuration" },
- { true, FT_INT, "SpellIconFileDataID" },
- { true, FT_INT, "ActiveIconFileDataID" },
- { true, FT_INT, "ContentTuningID" },
{ true, FT_INT, "Attributes1" },
{ true, FT_INT, "Attributes2" },
{ true, FT_INT, "Attributes3" },
@@ -4641,6 +4599,17 @@ struct SpellMiscLoadInfo
{ true, FT_INT, "Attributes12" },
{ true, FT_INT, "Attributes13" },
{ true, FT_INT, "Attributes14" },
+ { false, FT_BYTE, "DifficultyID" },
+ { false, FT_SHORT, "CastingTimeIndex" },
+ { false, FT_SHORT, "DurationIndex" },
+ { false, FT_SHORT, "RangeIndex" },
+ { false, FT_BYTE, "SchoolMask" },
+ { false, FT_FLOAT, "Speed" },
+ { false, FT_FLOAT, "LaunchDelay" },
+ { false, FT_FLOAT, "MinDuration" },
+ { true, FT_INT, "SpellIconFileDataID" },
+ { true, FT_INT, "ActiveIconFileDataID" },
+ { true, FT_INT, "ContentTuningID" },
{ true, FT_INT, "SpellID" },
};
static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellMiscMeta::Instance(), HOTFIX_SEL_SPELL_MISC);
@@ -5160,6 +5129,7 @@ struct TransmogSetLoadInfo
{ false, FT_BYTE, "ExpansionID" },
{ true, FT_INT, "PatchID" },
{ true, FT_SHORT, "UiOrder" },
+ { true, FT_INT, "PlayerConditionID" },
};
static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, TransmogSetMeta::Instance(), HOTFIX_SEL_TRANSMOG_SET);
return &loadInfo;
@@ -5339,7 +5309,7 @@ struct UnitPowerBarLoadInfo
{ false, FT_STRING, "ToolTip" },
{ false, FT_INT, "MinPower" },
{ false, FT_INT, "MaxPower" },
- { false, FT_SHORT, "StartPower" },
+ { false, FT_INT, "StartPower" },
{ false, FT_BYTE, "CenterPower" },
{ false, FT_FLOAT, "RegenerationPeace" },
{ false, FT_FLOAT, "RegenerationCombat" },
@@ -5557,25 +5527,6 @@ struct WorldMapOverlayLoadInfo
}
};
-struct WorldSafeLocsLoadInfo
-{
- static DB2LoadInfo const* Instance()
- {
- static DB2FieldMeta const fields[] =
- {
- { false, FT_INT, "ID" },
- { false, FT_STRING, "AreaName" },
- { false, FT_FLOAT, "LocX" },
- { false, FT_FLOAT, "LocY" },
- { false, FT_FLOAT, "LocZ" },
- { false, FT_SHORT, "MapID" },
- { false, FT_FLOAT, "Facing" },
- };
- static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, WorldSafeLocsMeta::Instance(), HOTFIX_SEL_WORLD_SAFE_LOCS);
- return &loadInfo;
- }
-};
-
struct WorldStateExpressionLoadInfo
{
static DB2LoadInfo const* Instance()
diff --git a/src/server/game/DataStores/DB2Metadata.h b/src/server/game/DataStores/DB2Metadata.h
index efda3820af2..e8ffa767a18 100644
--- a/src/server/game/DataStores/DB2Metadata.h
+++ b/src/server/game/DataStores/DB2Metadata.h
@@ -904,6 +904,34 @@ struct AzeriteItemMilestonePowerMeta
}
};
+struct AzeriteKnowledgeMultiplierMeta
+{
+ static DB2Meta const* Instance()
+ {
+ static DB2MetaField const fields[1] =
+ {
+ { FT_FLOAT, 1, true },
+ };
+ static DB2Meta instance(3148050, -1, 1, 0xDBB99B2A, fields, -1);
+ return &instance;
+ }
+};
+
+struct AzeriteLevelInfoMeta
+{
+ static DB2Meta const* Instance()
+ {
+ static DB2MetaField const fields[3] =
+ {
+ { FT_LONG, 1, false },
+ { FT_LONG, 1, false },
+ { FT_INT, 1, true },
+ };
+ static DB2Meta instance(3147968, -1, 3, 0xEA8E31FC, fields, -1);
+ return &instance;
+ }
+};
+
struct AzeritePowerMeta
{
static DB2Meta const* Instance()
@@ -1519,7 +1547,7 @@ struct CampaignMeta
{
static DB2Meta const* Instance()
{
- static DB2MetaField const fields[7] =
+ static DB2MetaField const fields[8] =
{
{ FT_STRING, 1, true },
{ FT_STRING_NOT_LOCALIZED, 1, true },
@@ -1528,8 +1556,9 @@ struct CampaignMeta
{ FT_INT, 1, false },
{ FT_INT, 1, false },
{ FT_INT, 1, false },
+ { FT_INT, 1, false },
};
- static DB2Meta instance(2031607, 3, 7, 0x2D49AABD, fields, -1);
+ static DB2Meta instance(2031607, 3, 8, 0x84DC679F, fields, -1);
return &instance;
}
};
@@ -2356,6 +2385,21 @@ struct CombatConditionMeta
}
};
+struct CommentatorIndirectSpellMeta
+{
+ static DB2Meta const* Instance()
+ {
+ static DB2MetaField const fields[3] =
+ {
+ { FT_INT, 1, true },
+ { FT_INT, 1, true },
+ { FT_SHORT, 1, false },
+ };
+ static DB2Meta instance(3067644, -1, 3, 0x367A3BBC, fields, 2);
+ return &instance;
+ }
+};
+
struct CommentatorStartLocationMeta
{
static DB2Meta const* Instance()
@@ -5255,14 +5299,15 @@ struct ItemAppearanceMeta
{
static DB2Meta const* Instance()
{
- static DB2MetaField const fields[4] =
+ static DB2MetaField const fields[5] =
{
{ FT_BYTE, 1, false },
{ FT_INT, 1, true },
{ FT_INT, 1, true },
{ FT_INT, 1, true },
+ { FT_INT, 1, true },
};
- static DB2Meta instance(982462, -1, 4, 0x422F764D, fields, -1);
+ static DB2Meta instance(982462, -1, 5, 0x26E99D61, fields, -1);
return &instance;
}
};
@@ -5971,7 +6016,7 @@ struct ItemSparseMeta
{ FT_SHORT, 1, false },
{ FT_SHORT, 1, false },
{ FT_SHORT, 1, false },
- { FT_SHORT, 1, false },
+ { FT_SHORT, 2, false },
{ FT_SHORT, 1, false },
{ FT_SHORT, 1, false },
{ FT_SHORT, 1, false },
@@ -6077,32 +6122,32 @@ struct ItemSubClassMaskMeta
}
};
-struct ItemUpgradeMeta
+struct ItemVisualsMeta
{
static DB2Meta const* Instance()
{
- static DB2MetaField const fields[5] =
+ static DB2MetaField const fields[1] =
{
- { FT_BYTE, 1, false },
- { FT_BYTE, 1, false },
- { FT_SHORT, 1, false },
- { FT_SHORT, 1, false },
- { FT_INT, 1, false },
+ { FT_INT, 5, true },
};
- static DB2Meta instance(801687, -1, 5, 0x706FA369, fields, -1);
+ static DB2Meta instance(1343605, -1, 1, 0x4025FA36, fields, -1);
return &instance;
}
};
-struct ItemVisualsMeta
+struct ItemVisualsXEffectMeta
{
static DB2Meta const* Instance()
{
- static DB2MetaField const fields[1] =
+ static DB2MetaField const fields[5] =
{
- { FT_INT, 5, true },
+ { FT_BYTE, 1, true },
+ { FT_BYTE, 1, true },
+ { FT_INT, 1, true },
+ { FT_INT, 1, true },
+ { FT_INT, 1, true },
};
- static DB2Meta instance(1343605, -1, 1, 0x4025FA36, fields, -1);
+ static DB2Meta instance(3043873, -1, 5, 0xC819EA7E, fields, 4);
return &instance;
}
};
@@ -8187,10 +8232,11 @@ struct PowerTypeMeta
{
static DB2Meta const* Instance()
{
- static DB2MetaField const fields[12] =
+ static DB2MetaField const fields[13] =
{
{ FT_STRING_NOT_LOCALIZED, 1, true },
{ FT_STRING_NOT_LOCALIZED, 1, true },
+ { FT_INT, 1, false },
{ FT_BYTE, 1, true },
{ FT_BYTE, 1, true },
{ FT_SHORT, 1, true },
@@ -8202,7 +8248,7 @@ struct PowerTypeMeta
{ FT_FLOAT, 1, true },
{ FT_SHORT, 1, true },
};
- static DB2Meta instance(1266022, -1, 12, 0x6D438CB5, fields, -1);
+ static DB2Meta instance(1266022, 2, 13, 0x10DE95BF, fields, -1);
return &instance;
}
};
@@ -8622,6 +8668,21 @@ struct QuestXPMeta
}
};
+struct RafActivityMeta
+{
+ static DB2Meta const* Instance()
+ {
+ static DB2MetaField const fields[3] =
+ {
+ { FT_INT, 1, false },
+ { FT_INT, 1, true },
+ { FT_INT, 1, true },
+ };
+ static DB2Meta instance(3081207, 0, 3, 0x6E8722C5, fields, -1);
+ return &instance;
+ }
+};
+
struct RandPropPointsMeta
{
static DB2Meta const* Instance()
@@ -8821,20 +8882,6 @@ struct RibbonQualityMeta
}
};
-struct RulesetItemUpgradeMeta
-{
- static DB2Meta const* Instance()
- {
- static DB2MetaField const fields[2] =
- {
- { FT_INT, 1, true },
- { FT_SHORT, 1, false },
- };
- static DB2Meta instance(801749, -1, 2, 0xA03B4C48, fields, -1);
- return &instance;
- }
-};
-
struct SDReplacementModelMeta
{
static DB2Meta const* Instance()
@@ -10120,12 +10167,12 @@ struct SpellEffectMeta
{
static DB2MetaField const fields[28] =
{
+ { FT_SHORT, 1, true },
{ FT_INT, 1, true },
{ FT_INT, 1, true },
{ FT_INT, 1, false },
{ FT_FLOAT, 1, true },
{ FT_INT, 1, true },
- { FT_SHORT, 1, true },
{ FT_INT, 1, true },
{ FT_FLOAT, 1, true },
{ FT_FLOAT, 1, true },
@@ -10149,7 +10196,7 @@ struct SpellEffectMeta
{ FT_SHORT, 2, true },
{ FT_INT, 1, true },
};
- static DB2Meta instance(1140088, -1, 28, 0x803150B7, fields, 27);
+ static DB2Meta instance(1140088, -1, 28, 0xF0FD10BB, fields, 27);
return &instance;
}
};
@@ -10401,6 +10448,7 @@ struct SpellMiscMeta
{
static DB2MetaField const fields[13] =
{
+ { FT_INT, 14, true },
{ FT_BYTE, 1, false },
{ FT_SHORT, 1, false },
{ FT_SHORT, 1, false },
@@ -10412,10 +10460,9 @@ struct SpellMiscMeta
{ FT_INT, 1, true },
{ FT_INT, 1, true },
{ FT_INT, 1, true },
- { FT_INT, 14, true },
{ FT_INT, 1, true },
};
- static DB2Meta instance(1003144, -1, 13, 0x99BBFB8B, fields, 12);
+ static DB2Meta instance(1003144, -1, 13, 0x0E10E69B, fields, 12);
return &instance;
}
};
@@ -11375,7 +11422,7 @@ struct TransmogSetMeta
{
static DB2Meta const* Instance()
{
- static DB2MetaField const fields[12] =
+ static DB2MetaField const fields[13] =
{
{ FT_STRING, 1, true },
{ FT_INT, 1, false },
@@ -11389,8 +11436,9 @@ struct TransmogSetMeta
{ FT_BYTE, 1, false },
{ FT_INT, 1, true },
{ FT_SHORT, 1, true },
+ { FT_INT, 1, true },
};
- static DB2Meta instance(1376213, 1, 12, 0xFA89DA93, fields, 7);
+ static DB2Meta instance(1376213, 1, 13, 0x8BEEE3C1, fields, 7);
return &instance;
}
};
@@ -11961,7 +12009,7 @@ struct UiWidgetMeta
{
static DB2Meta const* Instance()
{
- static DB2MetaField const fields[6] =
+ static DB2MetaField const fields[7] =
{
{ FT_STRING_NOT_LOCALIZED, 1, true },
{ FT_INT, 1, true },
@@ -11969,8 +12017,9 @@ struct UiWidgetMeta
{ FT_INT, 1, true },
{ FT_INT, 1, true },
{ FT_INT, 1, false },
+ { FT_INT, 1, true },
};
- static DB2Meta instance(1983278, -1, 6, 0x21A338EE, fields, -1);
+ static DB2Meta instance(1983278, -1, 7, 0xB7E65C22, fields, -1);
return &instance;
}
};
@@ -12131,7 +12180,7 @@ struct UnitPowerBarMeta
{ FT_STRING, 1, true },
{ FT_INT, 1, false },
{ FT_INT, 1, false },
- { FT_SHORT, 1, false },
+ { FT_INT, 1, false },
{ FT_BYTE, 1, false },
{ FT_FLOAT, 1, true },
{ FT_FLOAT, 1, true },
@@ -12142,7 +12191,7 @@ struct UnitPowerBarMeta
{ FT_INT, 6, true },
{ FT_INT, 6, true },
};
- static DB2Meta instance(1237753, -1, 16, 0x2640852D, fields, -1);
+ static DB2Meta instance(1237753, -1, 16, 0xD8CE1BD7, fields, -1);
return &instance;
}
};
diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp
index 15b18fe53f0..9541a6bc551 100644
--- a/src/server/game/DataStores/DB2Stores.cpp
+++ b/src/server/game/DataStores/DB2Stores.cpp
@@ -162,7 +162,6 @@ DB2Storage<ItemSetSpellEntry> sItemSetSpellStore("ItemSetSpell
DB2Storage<ItemSparseEntry> sItemSparseStore("ItemSparse.db2", ItemSparseLoadInfo::Instance());
DB2Storage<ItemSpecEntry> sItemSpecStore("ItemSpec.db2", ItemSpecLoadInfo::Instance());
DB2Storage<ItemSpecOverrideEntry> sItemSpecOverrideStore("ItemSpecOverride.db2", ItemSpecOverrideLoadInfo::Instance());
-DB2Storage<ItemUpgradeEntry> sItemUpgradeStore("ItemUpgrade.db2", ItemUpgradeLoadInfo::Instance());
DB2Storage<ItemXBonusTreeEntry> sItemXBonusTreeStore("ItemXBonusTree.db2", ItemXBonusTreeLoadInfo::Instance());
DB2Storage<KeychainEntry> sKeychainStore("Keychain.db2", KeychainLoadInfo::Instance());
DB2Storage<LFGDungeonsEntry> sLFGDungeonsStore("LFGDungeons.db2", LfgDungeonsLoadInfo::Instance());
@@ -205,7 +204,6 @@ DB2Storage<RandPropPointsEntry> sRandPropPointsStore("RandPropPo
DB2Storage<RewardPackEntry> sRewardPackStore("RewardPack.db2", RewardPackLoadInfo::Instance());
DB2Storage<RewardPackXCurrencyTypeEntry> sRewardPackXCurrencyTypeStore("RewardPackXCurrencyType.db2", RewardPackXCurrencyTypeLoadInfo::Instance());
DB2Storage<RewardPackXItemEntry> sRewardPackXItemStore("RewardPackXItem.db2", RewardPackXItemLoadInfo::Instance());
-DB2Storage<RulesetItemUpgradeEntry> sRulesetItemUpgradeStore("RulesetItemUpgrade.db2", RulesetItemUpgradeLoadInfo::Instance());
DB2Storage<ScalingStatDistributionEntry> sScalingStatDistributionStore("ScalingStatDistribution.db2", ScalingStatDistributionLoadInfo::Instance());
DB2Storage<ScenarioEntry> sScenarioStore("Scenario.db2", ScenarioLoadInfo::Instance());
DB2Storage<ScenarioStepEntry> sScenarioStepStore("ScenarioStep.db2", ScenarioStepLoadInfo::Instance());
@@ -275,7 +273,6 @@ DB2Storage<VehicleSeatEntry> sVehicleSeatStore("VehicleSeat.d
DB2Storage<WMOAreaTableEntry> sWMOAreaTableStore("WMOAreaTable.db2", WmoAreaTableLoadInfo::Instance());
DB2Storage<WorldEffectEntry> sWorldEffectStore("WorldEffect.db2", WorldEffectLoadInfo::Instance());
DB2Storage<WorldMapOverlayEntry> sWorldMapOverlayStore("WorldMapOverlay.db2", WorldMapOverlayLoadInfo::Instance());
-DB2Storage<WorldSafeLocsEntry> sWorldSafeLocsStore("WorldSafeLocs.db2", WorldSafeLocsLoadInfo::Instance());
DB2Storage<WorldStateExpressionEntry> sWorldStateExpressionStore("WorldStateExpression.db2", WorldStateExpressionLoadInfo::Instance());
TaxiMask sTaxiNodesMask;
@@ -326,7 +323,6 @@ typedef std::array<std::vector<Trinity::wregex>, TOTAL_LOCALES + 1> NameValidati
typedef std::unordered_map<uint32, std::vector<uint32>> PhaseGroupContainer;
typedef std::array<PowerTypeEntry const*, MAX_POWERS> PowerTypesContainer;
typedef std::unordered_map<uint32, std::pair<std::vector<QuestPackageItemEntry const*>, std::vector<QuestPackageItemEntry const*>>> QuestPackageItemContainer;
-typedef std::unordered_map<uint32, uint32> RulesetItemUpgradeContainer;
typedef std::unordered_multimap<uint32, SkillRaceClassInfoEntry const*> SkillRaceClassInfoContainer;
typedef std::unordered_map<uint32, std::vector<SpecializationSpellsEntry const*>> SpecializationSpellsContainer;
typedef std::unordered_map<uint32, std::vector<SpellPowerEntry const*>> SpellPowerContainer;
@@ -395,7 +391,6 @@ namespace
QuestPackageItemContainer _questPackages;
std::unordered_map<uint32, std::vector<RewardPackXCurrencyTypeEntry const*>> _rewardPackCurrencyTypes;
std::unordered_map<uint32, std::vector<RewardPackXItemEntry const*>> _rewardPackItems;
- RulesetItemUpgradeContainer _rulesetItemUpgrade;
std::unordered_map<uint32, std::vector<SkillLineEntry const*>> _skillLinesByParentSkillLine;
std::unordered_map<uint32, std::vector<SkillLineAbilityEntry const*>> _skillLineAbilitiesBySkillupSkill;
SkillRaceClassInfoContainer _skillRaceClassInfoBySkill;
@@ -622,7 +617,6 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale)
LOAD_DB2(sItemSparseStore);
LOAD_DB2(sItemSpecStore);
LOAD_DB2(sItemSpecOverrideStore);
- LOAD_DB2(sItemUpgradeStore);
LOAD_DB2(sItemXBonusTreeStore);
LOAD_DB2(sKeychainStore);
LOAD_DB2(sLFGDungeonsStore);
@@ -665,7 +659,6 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale)
LOAD_DB2(sRewardPackStore);
LOAD_DB2(sRewardPackXCurrencyTypeStore);
LOAD_DB2(sRewardPackXItemStore);
- LOAD_DB2(sRulesetItemUpgradeStore);
LOAD_DB2(sScalingStatDistributionStore);
LOAD_DB2(sScenarioStore);
LOAD_DB2(sScenarioStepStore);
@@ -735,8 +728,6 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale)
LOAD_DB2(sWMOAreaTableStore);
LOAD_DB2(sWorldEffectStore);
LOAD_DB2(sWorldMapOverlayStore);
- LOAD_DB2(sWorldSafeLocsStore);
- LOAD_DB2(sWorldStateExpressionStore);
#undef LOAD_DB2
@@ -1031,9 +1022,6 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale)
for (RewardPackXItemEntry const* rewardPackXItem : sRewardPackXItemStore)
_rewardPackItems[rewardPackXItem->RewardPackID].push_back(rewardPackXItem);
- for (RulesetItemUpgradeEntry const* rulesetItemUpgrade : sRulesetItemUpgradeStore)
- _rulesetItemUpgrade[rulesetItemUpgrade->ItemID] = rulesetItemUpgrade->ItemUpgradeID;
-
for (SkillLineEntry const* skill : sSkillLineStore)
if (skill->ParentSkillLineID)
_skillLinesByParentSkillLine[skill->ParentSkillLineID].push_back(skill);
@@ -2353,15 +2341,6 @@ std::vector<RewardPackXItemEntry const*> const* DB2Manager::GetRewardPackItemsBy
return nullptr;
}
-uint32 DB2Manager::GetRulesetItemUpgrade(uint32 itemId) const
-{
- auto itr = _rulesetItemUpgrade.find(itemId);
- if (itr != _rulesetItemUpgrade.end())
- return itr->second;
-
- return 0;
-}
-
std::vector<SkillLineEntry const*> const* DB2Manager::GetSkillLinesForParentSkill(uint32 parentSkillId) const
{
return Trinity::Containers::MapGetValuePtr(_skillLinesByParentSkillLine, parentSkillId);
diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h
index dc49e6d4559..bf00a0e4303 100644
--- a/src/server/game/DataStores/DB2Stores.h
+++ b/src/server/game/DataStores/DB2Stores.h
@@ -134,7 +134,6 @@ TC_GAME_API extern DB2Storage<ItemSetSpellEntry> sItemSetSpel
TC_GAME_API extern DB2Storage<ItemSparseEntry> sItemSparseStore;
TC_GAME_API extern DB2Storage<ItemSpecEntry> sItemSpecStore;
TC_GAME_API extern DB2Storage<ItemSpecOverrideEntry> sItemSpecOverrideStore;
-TC_GAME_API extern DB2Storage<ItemUpgradeEntry> sItemUpgradeStore;
TC_GAME_API extern DB2Storage<LFGDungeonsEntry> sLFGDungeonsStore;
TC_GAME_API extern DB2Storage<LiquidTypeEntry> sLiquidTypeStore;
TC_GAME_API extern DB2Storage<LockEntry> sLockStore;
@@ -211,7 +210,6 @@ TC_GAME_API extern DB2Storage<VehicleEntry> sVehicleStor
TC_GAME_API extern DB2Storage<VehicleSeatEntry> sVehicleSeatStore;
TC_GAME_API extern DB2Storage<WorldEffectEntry> sWorldEffectStore;
TC_GAME_API extern DB2Storage<WorldMapOverlayEntry> sWorldMapOverlayStore;
-TC_GAME_API extern DB2Storage<WorldSafeLocsEntry> sWorldSafeLocsStore;
TC_GAME_API extern DB2Storage<WorldStateExpressionEntry> sWorldStateExpressionStore;
struct TaxiPathBySourceAndDestination
@@ -328,7 +326,6 @@ public:
uint32 GetQuestUniqueBitFlag(uint32 questId);
std::vector<RewardPackXCurrencyTypeEntry const*> const* GetRewardPackCurrencyTypesByRewardID(uint32 rewardPackID) const;
std::vector<RewardPackXItemEntry const*> const* GetRewardPackItemsByRewardID(uint32 rewardPackID) const;
- uint32 GetRulesetItemUpgrade(uint32 itemId) const;
std::vector<SkillLineEntry const*> const* GetSkillLinesForParentSkill(uint32 parentSkillId) const;
std::vector<SkillLineAbilityEntry const*> const* GetSkillLineAbilitiesBySkill(uint32 skillId) const;
SkillRaceClassInfoEntry const* GetSkillRaceClassInfo(uint32 skill, uint8 race, uint8 class_);
diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h
index c07ae8845ec..0beef77330c 100644
--- a/src/server/game/DataStores/DB2Structure.h
+++ b/src/server/game/DataStores/DB2Structure.h
@@ -1420,6 +1420,7 @@ struct ItemAppearanceEntry
{
uint32 ID;
uint8 DisplayType;
+ int32 SubclassID;
int32 ItemDisplayInfoID;
int32 DefaultIconFileDataID;
int32 UiOrder;
@@ -1729,7 +1730,7 @@ struct ItemSparseEntry
uint16 SocketMatchEnchantmentId;
uint16 TotemCategoryID;
uint16 InstanceBound;
- uint16 ZoneBound;
+ uint16 ZoneBound[MAX_ITEM_PROTO_ZONES];
uint16 ItemSet;
uint16 LockID;
uint16 StartQuestID;
@@ -1780,16 +1781,6 @@ struct ItemSpecOverrideEntry
int32 ItemID;
};
-struct ItemUpgradeEntry
-{
- uint32 ID;
- uint8 ItemUpgradePathID;
- uint8 ItemLevelIncrement;
- uint16 PrerequisiteID;
- uint16 CurrencyType;
- uint32 CurrencyAmount;
-};
-
struct ItemXBonusTreeEntry
{
uint32 ID;
@@ -2205,9 +2196,9 @@ struct PowerDisplayEntry
struct PowerTypeEntry
{
- uint32 ID;
char const* NameGlobalStringTag;
char const* CostGlobalStringTag;
+ uint32 ID;
int8 PowerTypeEnum;
int8 MinPower;
int16 MaxBasePower;
@@ -2356,13 +2347,6 @@ struct RewardPackXItemEntry
int32 RewardPackID;
};
-struct RulesetItemUpgradeEntry
-{
- uint32 ID;
- int32 ItemID;
- uint16 ItemUpgradeID;
-};
-
struct ScalingStatDistributionEntry
{
uint32 ID;
@@ -2611,12 +2595,12 @@ struct SpellDurationEntry
struct SpellEffectEntry
{
uint32 ID;
+ int16 EffectAura;
int32 DifficultyID;
int32 EffectIndex;
uint32 Effect;
float EffectAmplitude;
int32 EffectAttributes;
- int16 EffectAura;
int32 EffectAuraPeriod;
float EffectBonusCoefficient;
float EffectChainAmplitude;
@@ -2726,6 +2710,7 @@ struct SpellLevelsEntry
struct SpellMiscEntry
{
uint32 ID;
+ int32 Attributes[14];
uint8 DifficultyID;
uint16 CastingTimeIndex;
uint16 DurationIndex;
@@ -2737,7 +2722,6 @@ struct SpellMiscEntry
int32 SpellIconFileDataID;
int32 ActiveIconFileDataID;
int32 ContentTuningID;
- int32 Attributes[14];
int32 SpellID;
};
@@ -3013,6 +2997,7 @@ struct TransmogSetEntry
uint8 ExpansionID;
int32 PatchID;
int16 UiOrder;
+ int32 PlayerConditionID;
};
struct TransmogSetGroupEntry
@@ -3106,7 +3091,7 @@ struct UnitPowerBarEntry
LocalizedString* ToolTip;
uint32 MinPower;
uint32 MaxPower;
- uint16 StartPower;
+ uint32 StartPower;
uint8 CenterPower;
float RegenerationPeace;
float RegenerationCombat;
@@ -3273,15 +3258,6 @@ struct WorldMapOverlayEntry
uint32 AreaID[MAX_WORLD_MAP_OVERLAY_AREA_IDX];
};
-struct WorldSafeLocsEntry
-{
- uint32 ID;
- LocalizedString* AreaName;
- DBCPosition3D Loc;
- uint16 MapID;
- float Facing;
-};
-
struct WorldStateExpressionEntry
{
uint32 ID;
diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h
index 6bb6b4ebfa1..d33645346e2 100644
--- a/src/server/game/DataStores/DBCEnums.h
+++ b/src/server/game/DataStores/DBCEnums.h
@@ -166,7 +166,7 @@ enum ArtifactPowerFlag : uint8
#define MAX_ARTIFACT_TIER 1
-#define BATTLE_PET_SPECIES_MAX_ID 2775
+#define BATTLE_PET_SPECIES_MAX_ID 2796
enum ChrSpecializationFlag
{
@@ -510,11 +510,11 @@ enum CriteriaTypes : uint8
CRITERIA_TYPE_EARN_HONOR_XP = 207,
CRITERIA_TYPE_RELIC_TALENT_UNLOCKED = 211,
CRITERIA_TYPE_REACH_ACCOUNT_HONOR_LEVEL = 213,
- CRITERIA_TREE_HEART_OF_AZEROTH_ARTIFACT_POWER_EARNED= 214,
- CRITERIA_TREE_HEART_OF_AZEROTH_LEVEL_REACHED = 215
+ CRITERIA_TYPE_HEART_OF_AZEROTH_ARTIFACT_POWER_EARNED= 214,
+ CRITERIA_TYPE_HEART_OF_AZEROTH_LEVEL_REACHED = 215
};
-#define CRITERIA_TYPE_TOTAL 217
+#define CRITERIA_TYPE_TOTAL 219
enum CriteriaTreeFlags : uint16
{
@@ -624,6 +624,7 @@ enum Difficulty : uint8
DIFFICULTY_PVP_ISLAND = 45,
DIFFICULTY_NORMAL_WARFRONT = 147,
DIFFICULTY_HEROIC_WARFRONT = 149,
+ DIFFICULTY_LFR_15TH_ANNIVERSARY = 151,
MAX_DIFFICULTY
};
@@ -690,6 +691,7 @@ enum FactionMasks
};
#define MAX_ITEM_PROTO_FLAGS 4
+#define MAX_ITEM_PROTO_ZONES 2
#define MAX_ITEM_PROTO_SOCKETS 3
#define MAX_ITEM_PROTO_STATS 10
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index 6bd47efb600..cecf6d8b103 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -414,7 +414,6 @@ void Item::SaveToDB(CharacterDatabaseTransaction& trans)
stmt->setUInt16(++index, m_itemData->Durability);
stmt->setUInt32(++index, m_itemData->CreatePlayedTime);
stmt->setString(++index, m_text);
- stmt->setUInt32(++index, GetModifier(ITEM_MODIFIER_UPGRADE_ID));
stmt->setUInt32(++index, GetModifier(ITEM_MODIFIER_BATTLE_PET_SPECIES_ID));
stmt->setUInt32(++index, GetModifier(ITEM_MODIFIER_BATTLE_PET_BREED_DATA));
stmt->setUInt32(++index, GetModifier(ITEM_MODIFIER_BATTLE_PET_LEVEL));
@@ -545,7 +544,7 @@ void Item::SaveToDB(CharacterDatabaseTransaction& trans)
static ItemModifier const modifiersTable[] =
{
- ITEM_MODIFIER_SCALING_STAT_DISTRIBUTION_FIXED_LEVEL,
+ ITEM_MODIFIER_TIMEWALKER_LEVEL,
ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL
};
@@ -557,7 +556,7 @@ void Item::SaveToDB(CharacterDatabaseTransaction& trans)
{
stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ITEM_INSTANCE_MODIFIERS);
stmt->setUInt64(0, GetGUID().GetCounter());
- stmt->setUInt32(1, GetModifier(ITEM_MODIFIER_SCALING_STAT_DISTRIBUTION_FIXED_LEVEL));
+ stmt->setUInt32(1, GetModifier(ITEM_MODIFIER_TIMEWALKER_LEVEL));
stmt->setUInt32(2, GetModifier(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL));
trans->Append(stmt);
}
@@ -621,15 +620,15 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fie
{
// 0 1 2 3 4 5 6 7 8 9 10 11 12
// SELECT guid, itemEntry, creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text,
- // 13 14 15 16 17 18 19
- // upgradeId, battlePetSpeciesId, battlePetBreedData, battlePetLevel, battlePetDisplayId, context, bonusListIDs,
- // 20 21 22 23 24
+ // 13 14 15 16 17 18
+ // battlePetSpeciesId, battlePetBreedData, battlePetLevel, battlePetDisplayId, context, bonusListIDs,
+ // 19 20 21 22 23
// itemModifiedAppearanceAllSpecs, itemModifiedAppearanceSpec1, itemModifiedAppearanceSpec2, itemModifiedAppearanceSpec3, itemModifiedAppearanceSpec4,
- // 25 26 27 28 29
+ // 24 25 26 27 28
// spellItemEnchantmentAllSpecs, spellItemEnchantmentSpec1, spellItemEnchantmentSpec2, spellItemEnchantmentSpec3, spellItemEnchantmentSpec4,
- // 30 31 32 33 34 35 36 37 38 39 40 41
+ // 29 30 31 32 33 34 35 36 37 38 39 40
// gemItemId1, gemBonuses1, gemContext1, gemScalingLevel1, gemItemId2, gemBonuses2, gemContext2, gemScalingLevel2, gemItemId3, gemBonuses3, gemContext3, gemScalingLevel3
- // 42 43
+ // 41 42
// fixedScalingLevel, artifactKnowledgeLevel FROM item_instance
// create item before any checks for store correct guid
@@ -692,67 +691,51 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fie
SetCreatePlayedTime(fields[11].GetUInt32());
SetText(fields[12].GetString());
- uint32 upgradeId = fields[13].GetUInt32();
- ItemUpgradeEntry const* rulesetUpgrade = sItemUpgradeStore.LookupEntry(sDB2Manager.GetRulesetItemUpgrade(entry));
- ItemUpgradeEntry const* upgrade = sItemUpgradeStore.LookupEntry(upgradeId);
- if (!rulesetUpgrade || !upgrade || rulesetUpgrade->ItemUpgradePathID != upgrade->ItemUpgradePathID)
- {
- upgradeId = 0;
- need_save = true;
- }
-
- if (rulesetUpgrade && !upgradeId)
- {
- upgradeId = rulesetUpgrade->ID;
- need_save = true;
- }
-
- SetModifier(ITEM_MODIFIER_UPGRADE_ID, upgradeId);
- SetModifier(ITEM_MODIFIER_BATTLE_PET_SPECIES_ID, fields[14].GetUInt32());
- SetModifier(ITEM_MODIFIER_BATTLE_PET_BREED_DATA, fields[15].GetUInt32());
- SetModifier(ITEM_MODIFIER_BATTLE_PET_LEVEL, fields[16].GetUInt16());
- SetModifier(ITEM_MODIFIER_BATTLE_PET_DISPLAY_ID, fields[17].GetUInt32());
+ SetModifier(ITEM_MODIFIER_BATTLE_PET_SPECIES_ID, fields[13].GetUInt32());
+ SetModifier(ITEM_MODIFIER_BATTLE_PET_BREED_DATA, fields[14].GetUInt32());
+ SetModifier(ITEM_MODIFIER_BATTLE_PET_LEVEL, fields[15].GetUInt16());
+ SetModifier(ITEM_MODIFIER_BATTLE_PET_DISPLAY_ID, fields[16].GetUInt32());
- SetContext(fields[18].GetUInt8());
+ SetContext(fields[17].GetUInt8());
- Tokenizer bonusListString(fields[19].GetString(), ' ');
+ Tokenizer bonusListString(fields[18].GetString(), ' ');
std::vector<int32> bonusListIDs;
bonusListIDs.reserve(bonusListString.size());
for (char const* token : bonusListString)
bonusListIDs.push_back(atoi(token));
SetBonuses(std::move(bonusListIDs));
- SetModifier(ITEM_MODIFIER_TRANSMOG_APPEARANCE_ALL_SPECS, fields[20].GetUInt32());
- SetModifier(ITEM_MODIFIER_TRANSMOG_APPEARANCE_SPEC_1, fields[21].GetUInt32());
- SetModifier(ITEM_MODIFIER_TRANSMOG_APPEARANCE_SPEC_2, fields[22].GetUInt32());
- SetModifier(ITEM_MODIFIER_TRANSMOG_APPEARANCE_SPEC_3, fields[23].GetUInt32());
- SetModifier(ITEM_MODIFIER_TRANSMOG_APPEARANCE_SPEC_4, fields[24].GetUInt32());
+ SetModifier(ITEM_MODIFIER_TRANSMOG_APPEARANCE_ALL_SPECS, fields[19].GetUInt32());
+ SetModifier(ITEM_MODIFIER_TRANSMOG_APPEARANCE_SPEC_1, fields[20].GetUInt32());
+ SetModifier(ITEM_MODIFIER_TRANSMOG_APPEARANCE_SPEC_2, fields[21].GetUInt32());
+ SetModifier(ITEM_MODIFIER_TRANSMOG_APPEARANCE_SPEC_3, fields[22].GetUInt32());
+ SetModifier(ITEM_MODIFIER_TRANSMOG_APPEARANCE_SPEC_4, fields[23].GetUInt32());
- SetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_ALL_SPECS, fields[25].GetUInt32());
- SetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_1, fields[26].GetUInt32());
- SetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_2, fields[27].GetUInt32());
- SetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_3, fields[28].GetUInt32());
- SetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_4, fields[29].GetUInt32());
+ SetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_ALL_SPECS, fields[24].GetUInt32());
+ SetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_1, fields[25].GetUInt32());
+ SetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_2, fields[26].GetUInt32());
+ SetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_3, fields[27].GetUInt32());
+ SetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_4, fields[28].GetUInt32());
uint32 const gemFields = 4;
ItemDynamicFieldGems gemData[MAX_GEM_SOCKETS];
memset(gemData, 0, sizeof(gemData));
for (uint32 i = 0; i < MAX_GEM_SOCKETS; ++i)
{
- gemData[i].ItemId = fields[30 + i * gemFields].GetUInt32();
- Tokenizer gemBonusListIDs(fields[31 + i * gemFields].GetString(), ' ');
+ gemData[i].ItemId = fields[29 + i * gemFields].GetUInt32();
+ Tokenizer gemBonusListIDs(fields[30 + i * gemFields].GetString(), ' ');
uint32 b = 0;
for (char const* token : gemBonusListIDs)
if (uint32 bonusListID = atoul(token))
gemData[i].BonusListIDs[b++] = bonusListID;
- gemData[i].Context = fields[32 + i * gemFields].GetUInt8();
+ gemData[i].Context = fields[31 + i * gemFields].GetUInt8();
if (gemData[i].ItemId)
- SetGem(i, &gemData[i], fields[33 + i * gemFields].GetUInt32());
+ SetGem(i, &gemData[i], fields[32 + i * gemFields].GetUInt32());
}
- SetModifier(ITEM_MODIFIER_SCALING_STAT_DISTRIBUTION_FIXED_LEVEL, fields[42].GetUInt32());
- SetModifier(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL, fields[43].GetUInt32());
+ SetModifier(ITEM_MODIFIER_TIMEWALKER_LEVEL, fields[41].GetUInt32());
+ SetModifier(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL, fields[42].GetUInt32());
// Enchants must be loaded after all other bonus/scaling data
Tokenizer enchantmentTokens(fields[8].GetString(), ' ');
@@ -782,7 +765,6 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fie
stmt->setUInt32(index++, m_itemData->Expiration);
stmt->setUInt32(index++, m_itemData->DynamicFlags);
stmt->setUInt32(index++, m_itemData->Durability);
- stmt->setUInt32(index++, GetModifier(ITEM_MODIFIER_UPGRADE_ID));
stmt->setUInt64(index++, guid);
CharacterDatabase.Execute(stmt);
}
@@ -1319,7 +1301,8 @@ uint8 Item::GetGemCountWithLimitCategory(uint32 limitCategory) const
bool Item::IsLimitedToAnotherMapOrZone(uint32 cur_mapId, uint32 cur_zoneId) const
{
ItemTemplate const* proto = GetTemplate();
- return proto && ((proto->GetMap() && proto->GetMap() != cur_mapId) || (proto->GetArea() && proto->GetArea() != cur_zoneId));
+ return proto && ((proto->GetMap() && proto->GetMap() != cur_mapId) ||
+ ((proto->GetArea(0) && proto->GetArea(0) != cur_zoneId) && (proto->GetArea(1) && proto->GetArea(1) != cur_zoneId)));
}
void Item::SendUpdateSockets()
@@ -2134,11 +2117,11 @@ uint32 Item::GetItemLevel(Player const* owner) const
uint32 minItemLevelCutoff = owner->m_unitData->MinItemLevelCutoff;
uint32 maxItemLevel = GetTemplate()->GetFlags3() & ITEM_FLAG3_IGNORE_ITEM_LEVEL_CAP_IN_PVP ? 0 : owner->m_unitData->MaxItemLevel;
bool pvpBonus = owner->IsUsingPvpItemLevels();
- return Item::GetItemLevel(GetTemplate(), _bonusData, owner->getLevel(), GetModifier(ITEM_MODIFIER_SCALING_STAT_DISTRIBUTION_FIXED_LEVEL), GetModifier(ITEM_MODIFIER_UPGRADE_ID),
+ return Item::GetItemLevel(GetTemplate(), _bonusData, owner->getLevel(), GetModifier(ITEM_MODIFIER_TIMEWALKER_LEVEL),
minItemLevel, minItemLevelCutoff, maxItemLevel, pvpBonus);
}
-uint32 Item::GetItemLevel(ItemTemplate const* itemTemplate, BonusData const& bonusData, uint32 level, uint32 fixedLevel, uint32 upgradeId,
+uint32 Item::GetItemLevel(ItemTemplate const* itemTemplate, BonusData const& bonusData, uint32 level, uint32 fixedLevel,
uint32 minItemLevel, uint32 minItemLevelCutoff, uint32 maxItemLevel, bool pvpBonus)
{
if (!itemTemplate)
@@ -2166,8 +2149,6 @@ uint32 Item::GetItemLevel(ItemTemplate const* itemTemplate, BonusData const& bon
itemLevel += bonusData.GemItemLevelBonus[i];
uint32 itemLevelBeforeUpgrades = itemLevel;
- if (ItemUpgradeEntry const* upgrade = sItemUpgradeStore.LookupEntry(upgradeId))
- itemLevel += upgrade->ItemLevelIncrement;
if (pvpBonus)
itemLevel += sDB2Manager.GetPvpItemLevelBonus(itemTemplate->GetId());
@@ -2210,7 +2191,7 @@ ItemDisenchantLootEntry const* Item::GetDisenchantLoot(ItemTemplate const* itemT
if (itemTemplate->GetFlags() & (ITEM_FLAG_CONJURED | ITEM_FLAG_NO_DISENCHANT) || itemTemplate->GetBonding() == BIND_QUEST)
return nullptr;
- if (itemTemplate->GetArea() || itemTemplate->GetMap() || itemTemplate->GetMaxStackSize() > 1)
+ if (itemTemplate->GetArea(0) || itemTemplate->GetArea(1) || itemTemplate->GetMap() || itemTemplate->GetMaxStackSize() > 1)
return nullptr;
if (!Item::GetSellPrice(itemTemplate, quality, itemLevel) && !sDB2Manager.HasItemCurrencyCost(itemTemplate->GetId()))
@@ -2578,7 +2559,7 @@ void Item::GiveArtifactXp(uint64 amount, Item* sourceItem, uint32 artifactCatego
void Item::SetFixedLevel(uint8 level)
{
- if (!_bonusData.HasFixedLevel || GetModifier(ITEM_MODIFIER_SCALING_STAT_DISTRIBUTION_FIXED_LEVEL))
+ if (!_bonusData.HasFixedLevel || GetModifier(ITEM_MODIFIER_TIMEWALKER_LEVEL))
return;
if (ScalingStatDistributionEntry const* ssd = sScalingStatDistributionStore.LookupEntry(_bonusData.ScalingStatDistribution))
@@ -2589,7 +2570,7 @@ void Item::SetFixedLevel(uint8 level)
if ((contentTuning->Flags & 2 || contentTuning->MinLevel || contentTuning->MaxLevel) && !(contentTuning->Flags & 4))
level = std::min(std::max(int32(level), contentTuning->MinLevel), contentTuning->MaxLevel);
- SetModifier(ITEM_MODIFIER_SCALING_STAT_DISTRIBUTION_FIXED_LEVEL, level);
+ SetModifier(ITEM_MODIFIER_TIMEWALKER_LEVEL, level);
}
}
@@ -2598,7 +2579,7 @@ int32 Item::GetRequiredLevel() const
if (_bonusData.RequiredLevelOverride)
return _bonusData.RequiredLevelOverride;
else if (_bonusData.HasFixedLevel)
- return GetModifier(ITEM_MODIFIER_SCALING_STAT_DISTRIBUTION_FIXED_LEVEL);
+ return GetModifier(ITEM_MODIFIER_TIMEWALKER_LEVEL);
else
return _bonusData.RequiredLevel;
}
diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h
index b5f9897a3e8..b8a8c242ba1 100644
--- a/src/server/game/Entities/Item/Item.h
+++ b/src/server/game/Entities/Item/Item.h
@@ -280,7 +280,7 @@ class TC_GAME_API Item : public Object
bool IsRangedWeapon() const { return GetTemplate()->IsRangedWeapon(); }
uint32 GetQuality() const { return _bonusData.Quality; }
uint32 GetItemLevel(Player const* owner) const;
- static uint32 GetItemLevel(ItemTemplate const* itemTemplate, BonusData const& bonusData, uint32 level, uint32 fixedLevel, uint32 upgradeId,
+ static uint32 GetItemLevel(ItemTemplate const* itemTemplate, BonusData const& bonusData, uint32 level, uint32 fixedLevel,
uint32 minItemLevel, uint32 minItemLevelCutoff, uint32 maxItemLevel, bool pvpBonus);
int32 GetRequiredLevel() const;
int32 GetItemStatType(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_STATS); return _bonusData.ItemStatType[index]; }
diff --git a/src/server/game/Entities/Item/ItemDefines.h b/src/server/game/Entities/Item/ItemDefines.h
index 594071587c3..47887c869df 100644
--- a/src/server/game/Entities/Item/ItemDefines.h
+++ b/src/server/game/Entities/Item/ItemDefines.h
@@ -194,7 +194,7 @@ enum ItemModifier : uint16
ITEM_MODIFIER_BATTLE_PET_DISPLAY_ID = 6,
ITEM_MODIFIER_ENCHANT_ILLUSION_ALL_SPECS = 7,
ITEM_MODIFIER_ARTIFACT_APPEARANCE_ID = 8,
- ITEM_MODIFIER_SCALING_STAT_DISTRIBUTION_FIXED_LEVEL = 9,
+ ITEM_MODIFIER_TIMEWALKER_LEVEL = 9,
ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_1 = 10,
ITEM_MODIFIER_TRANSMOG_APPEARANCE_SPEC_2 = 11,
ITEM_MODIFIER_ENCHANT_ILLUSION_SPEC_2 = 12,
@@ -207,9 +207,11 @@ enum ItemModifier : uint16
ITEM_MODIFIER_CHALLENGE_KEYSTONE_AFFIX_ID_1 = 19,
ITEM_MODIFIER_CHALLENGE_KEYSTONE_AFFIX_ID_2 = 20,
ITEM_MODIFIER_CHALLENGE_KEYSTONE_AFFIX_ID_3 = 21,
- ITEM_MODIFIER_CHALLENGE_KEYSTONE_IS_CHARGED = 22,
+ ITEM_MODIFIER_CHALLENGE_KEYSTONE_AFFIX_ID_4 = 22,
ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL = 23,
ITEM_MODIFIER_ARTIFACT_TIER = 24,
+ ITEM_MODIFIER_UNUSED_25 = 25,
+ ITEM_MODIFIER_PVP_RATING = 26,
MAX_ITEM_MODIFIERS
};
diff --git a/src/server/game/Entities/Item/ItemTemplate.h b/src/server/game/Entities/Item/ItemTemplate.h
index e44d33063cf..2f3d5b805a4 100644
--- a/src/server/game/Entities/Item/ItemTemplate.h
+++ b/src/server/game/Entities/Item/ItemTemplate.h
@@ -766,7 +766,7 @@ struct TC_GAME_API ItemTemplate
uint32 GetStartQuest() const { return ExtendedData->StartQuestID; }
uint32 GetLockID() const { return ExtendedData->LockID; }
uint32 GetItemSet() const { return ExtendedData->ItemSet; }
- uint32 GetArea() const { return ExtendedData->ZoneBound; }
+ uint32 GetArea(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_ZONES); return ExtendedData->ZoneBound[index]; }
uint32 GetMap() const { return ExtendedData->InstanceBound; }
uint32 GetBagFamily() const { return ExtendedData->BagFamily; }
uint32 GetTotemCategory() const { return ExtendedData->TotemCategoryID; }
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 6b1d82452d7..1512b07540e 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -4738,12 +4738,12 @@ void Player::RepopAtGraveyard()
// and don't show spirit healer location
if (ClosestGrave)
{
- TeleportTo(ClosestGrave->MapID, ClosestGrave->Loc.X, ClosestGrave->Loc.Y, ClosestGrave->Loc.Z, (ClosestGrave->Facing * M_PI) / 180); // Orientation is initially in degrees
+ TeleportTo(ClosestGrave->Loc);
if (isDead()) // not send if alive, because it used in TeleportTo()
{
WorldPackets::Misc::DeathReleaseLoc packet;
- packet.MapID = ClosestGrave->MapID;
- packet.Loc = Position(ClosestGrave->Loc.X, ClosestGrave->Loc.Y, ClosestGrave->Loc.Z);
+ packet.MapID = ClosestGrave->Loc.GetMapId();
+ packet.Loc = ClosestGrave->Loc;
GetSession()->SendPacket(packet.Write());
}
}
@@ -11801,9 +11801,6 @@ Item* Player::StoreNewItem(ItemPosCountVec const& pos, uint32 itemId, bool updat
item->AddItemFlag(ITEM_FIELD_FLAG_NEW_ITEM);
- if (uint32 upgradeID = sDB2Manager.GetRulesetItemUpgrade(itemId))
- item->SetModifier(ITEM_MODIFIER_UPGRADE_ID, upgradeID);
-
item->SetContext(context);
item->SetBonuses(bonusListIDs);
@@ -18575,17 +18572,17 @@ void Player::_LoadInventory(PreparedQueryResult result, PreparedQueryResult arti
{
// 0 1 2 3 4 5 6 7 8 9 10 11 12
// SELECT guid, itemEntry, creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text,
- // 13 14 15 16 17 18 19
- // upgradeId, battlePetSpeciesId, battlePetBreedData, battlePetLevel, battlePetDisplayId, context, bonusListIDs,
- // 20 21 22 23 24
+ // 13 14 15 16 17 18
+ // battlePetSpeciesId, battlePetBreedData, battlePetLevel, battlePetDisplayId, context, bonusListIDs,
+ // 19 20 21 22 23
// itemModifiedAppearanceAllSpecs, itemModifiedAppearanceSpec1, itemModifiedAppearanceSpec2, itemModifiedAppearanceSpec3, itemModifiedAppearanceSpec4,
- // 25 26 27 28 29
+ // 24 25 26 27 28
// spellItemEnchantmentAllSpecs, spellItemEnchantmentSpec1, spellItemEnchantmentSpec2, spellItemEnchantmentSpec3, spellItemEnchantmentSpec4,
- // 30 31 32 33 34 35 36 37 38 39 40 41
+ // 29 30 31 32 33 34 35 36 37 38 39 40
// gemItemId1, gemBonuses1, gemContext1, gemScalingLevel1, gemItemId2, gemBonuses2, gemContext2, gemScalingLevel2, gemItemId3, gemBonuses3, gemContext3, gemScalingLevel3
- // 42 43
+ // 41 42
// fixedScalingLevel, artifactKnowledgeLevel FROM item_instance
- // 45 46
+ // 43 44
// bag, slot
// FROM character_inventory ci
// JOIN item_instance ii ON ci.item = ii.guid
@@ -18654,8 +18651,8 @@ void Player::_LoadInventory(PreparedQueryResult result, PreparedQueryResult arti
if (item->GetTemplate()->GetArtifactID() && artifactDataItr != artifactData.end())
item->LoadArtifactData(this, std::get<0>(artifactDataItr->second), std::get<1>(artifactDataItr->second), std::get<2>(artifactDataItr->second), std::get<3>(artifactDataItr->second));
- ObjectGuid bagGuid = fields[44].GetUInt64() ? ObjectGuid::Create<HighGuid::Item>(fields[44].GetUInt64()) : ObjectGuid::Empty;
- uint8 slot = fields[45].GetUInt8();
+ ObjectGuid bagGuid = fields[43].GetUInt64() ? ObjectGuid::Create<HighGuid::Item>(fields[43].GetUInt64()) : ObjectGuid::Empty;
+ uint8 slot = fields[44].GetUInt8();
GetSession()->GetCollectionMgr()->CheckHeirloomUpgrades(item);
GetSession()->GetCollectionMgr()->AddItemAppearance(item);
@@ -18782,7 +18779,7 @@ void Player::_LoadVoidStorage(PreparedQueryResult result)
do
{
- // SELECT itemId, itemEntry, slot, creatorGuid, randomBonusListId, upgradeId, fixedScalingLevel, artifactKnowledgeLevel, context, bonusListIDs FROM character_void_storage WHERE playerGuid = ?
+ // SELECT itemId, itemEntry, slot, creatorGuid, randomBonusListId, fixedScalingLevel, artifactKnowledgeLevel, context, bonusListIDs FROM character_void_storage WHERE playerGuid = ?
Field* fields = result->Fetch();
uint64 itemId = fields[0].GetUInt64();
@@ -18790,12 +18787,11 @@ void Player::_LoadVoidStorage(PreparedQueryResult result)
uint8 slot = fields[2].GetUInt8();
ObjectGuid creatorGuid = fields[3].GetUInt64() ? ObjectGuid::Create<HighGuid::Player>(fields[3].GetUInt64()) : ObjectGuid::Empty;
ItemRandomBonusListId randomBonusListId = fields[4].GetUInt32();
- uint32 upgradeId = fields[5].GetUInt32();
- uint32 fixedScalingLevel = fields[6].GetUInt32();
- uint32 artifactKnowledgeLevel = fields[7].GetUInt32();
- uint8 context = fields[8].GetUInt8();
+ uint32 fixedScalingLevel = fields[5].GetUInt32();
+ uint32 artifactKnowledgeLevel = fields[6].GetUInt32();
+ uint8 context = fields[7].GetUInt8();
std::vector<int32> bonusListIDs;
- Tokenizer bonusListIdTokens(fields[9].GetString(), ' ');
+ Tokenizer bonusListIdTokens(fields[8].GetString(), ' ');
for (char const* token : bonusListIdTokens)
bonusListIDs.push_back(atoul(token));
@@ -18820,7 +18816,7 @@ void Player::_LoadVoidStorage(PreparedQueryResult result)
continue;
}
- _voidStorageItems[slot] = new VoidStorageItem(itemId, itemEntry, creatorGuid, randomBonusListId, upgradeId, fixedScalingLevel, artifactKnowledgeLevel,
+ _voidStorageItems[slot] = new VoidStorageItem(itemId, itemEntry, creatorGuid, randomBonusListId, fixedScalingLevel, artifactKnowledgeLevel,
context, bonusListIDs);
WorldPackets::Item::ItemInstance voidInstance;
@@ -18997,7 +18993,7 @@ void Player::_LoadMailedItems(Mail* mail)
Item* item = NewItemOrBag(proto);
- ObjectGuid ownerGuid = fields[44].GetUInt64() ? ObjectGuid::Create<HighGuid::Player>(fields[44].GetUInt64()) : ObjectGuid::Empty;
+ ObjectGuid ownerGuid = fields[43].GetUInt64() ? ObjectGuid::Create<HighGuid::Player>(fields[43].GetUInt64()) : ObjectGuid::Empty;
if (!item->LoadFromDB(itemGuid, ownerGuid, fields, itemEntry))
{
TC_LOG_ERROR("entities.player", "Player::_LoadMailedItems: Item (GUID: " UI64FMTD ") in mail (%u) doesn't exist, deleted from mail.", itemGuid, mail->messageID);
@@ -20593,14 +20589,13 @@ void Player::_SaveVoidStorage(CharacterDatabaseTransaction& trans)
stmt->setUInt8(3, i);
stmt->setUInt64(4, _voidStorageItems[i]->CreatorGuid.GetCounter());
stmt->setUInt32(5, _voidStorageItems[i]->RandomBonusListId);
- stmt->setUInt32(6, _voidStorageItems[i]->ItemUpgradeId);
- stmt->setUInt32(7, _voidStorageItems[i]->FixedScalingLevel);
- stmt->setUInt32(8, _voidStorageItems[i]->ArtifactKnowledgeLevel);
- stmt->setUInt8(9, _voidStorageItems[i]->Context);
+ stmt->setUInt32(6, _voidStorageItems[i]->FixedScalingLevel);
+ stmt->setUInt32(7, _voidStorageItems[i]->ArtifactKnowledgeLevel);
+ stmt->setUInt8(8, _voidStorageItems[i]->Context);
std::ostringstream bonusListIDs;
for (int32 bonusListID : _voidStorageItems[i]->BonusListIDs)
bonusListIDs << bonusListID << ' ';
- stmt->setString(10, bonusListIDs.str());
+ stmt->setString(9, bonusListIDs.str());
}
trans->Append(stmt);
@@ -23149,8 +23144,8 @@ void Player::SetBattlegroundEntryPoint()
// If map is dungeon find linked graveyard
if (GetMap()->IsDungeon())
{
- if (const WorldSafeLocsEntry* entry = sObjectMgr->GetClosestGraveYard(*this, GetTeam(), this))
- m_bgData.joinPos = WorldLocation(entry->MapID, entry->Loc.X, entry->Loc.Y, entry->Loc.Z, 0.0f);
+ if (WorldSafeLocsEntry const* entry = sObjectMgr->GetClosestGraveYard(*this, GetTeam(), this))
+ m_bgData.joinPos.WorldRelocate(entry->Loc.GetMapId(), entry->Loc.GetPositionX(), entry->Loc.GetPositionY(), entry->Loc.GetPositionZ());
else
TC_LOG_ERROR("entities.player", "Player::SetBattlegroundEntryPoint: Dungeon (MapID: %u) has no linked graveyard, setting home location as entry point.", GetMapId());
}
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 83a0e5fb60c..f7c8ae952d1 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -899,23 +899,21 @@ struct BGData
struct VoidStorageItem
{
- VoidStorageItem() : ItemId(0), ItemEntry(0), RandomBonusListId(0), ItemUpgradeId(0), FixedScalingLevel(0), ArtifactKnowledgeLevel(0), Context(0) { }
+ VoidStorageItem() : ItemId(0), ItemEntry(0), RandomBonusListId(0), FixedScalingLevel(0), ArtifactKnowledgeLevel(0), Context(0) { }
VoidStorageItem(uint64 id, uint32 entry, ObjectGuid const& creator, ItemRandomBonusListId randomBonusListId,
- uint32 upgradeId, uint32 fixedScalingLevel, uint32 artifactKnowledgeLevel, uint8 context, std::vector<int32> const& bonuses)
+ uint32 fixedScalingLevel, uint32 artifactKnowledgeLevel, uint8 context, std::vector<int32> const& bonuses)
: ItemId(id), ItemEntry(entry), CreatorGuid(creator), RandomBonusListId(randomBonusListId),
- ItemUpgradeId(upgradeId), FixedScalingLevel(fixedScalingLevel), ArtifactKnowledgeLevel(artifactKnowledgeLevel), Context(context)
+ FixedScalingLevel(fixedScalingLevel), ArtifactKnowledgeLevel(artifactKnowledgeLevel), Context(context)
{
BonusListIDs.insert(BonusListIDs.end(), bonuses.begin(), bonuses.end());
}
VoidStorageItem(VoidStorageItem&& vsi) noexcept : ItemId(vsi.ItemId), ItemEntry(vsi.ItemEntry), CreatorGuid(vsi.CreatorGuid), RandomBonusListId(vsi.RandomBonusListId),
- ItemUpgradeId(vsi.ItemUpgradeId), FixedScalingLevel(vsi.FixedScalingLevel),
- ArtifactKnowledgeLevel(vsi.ArtifactKnowledgeLevel), Context(vsi.Context), BonusListIDs(std::move(vsi.BonusListIDs)) { }
+ FixedScalingLevel(vsi.FixedScalingLevel), ArtifactKnowledgeLevel(vsi.ArtifactKnowledgeLevel), Context(vsi.Context), BonusListIDs(std::move(vsi.BonusListIDs)) { }
uint64 ItemId;
uint32 ItemEntry;
ObjectGuid CreatorGuid;
ItemRandomBonusListId RandomBonusListId;
- uint32 ItemUpgradeId;
uint32 FixedScalingLevel;
uint32 ArtifactKnowledgeLevel;
uint8 Context;
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index ac4120e5632..0f33a3bd4fd 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -6266,7 +6266,7 @@ void ObjectMgr::LoadGraveyardZones()
uint32 zoneId = fields[1].GetUInt32();
uint32 team = fields[2].GetUInt16();
- WorldSafeLocsEntry const* entry = sWorldSafeLocsStore.LookupEntry(safeLocId);
+ WorldSafeLocsEntry const* entry = GetWorldSafeLoc(safeLocId);
if (!entry)
{
TC_LOG_ERROR("sql.sql", "Table `graveyard_zone` has a record for non-existing graveyard (WorldSafeLocsID: %u), skipped.", safeLocId);
@@ -6302,9 +6302,9 @@ WorldSafeLocsEntry const* ObjectMgr::GetDefaultGraveYard(uint32 team) const
};
if (team == HORDE)
- return sWorldSafeLocsStore.LookupEntry(HORDE_GRAVEYARD);
+ return GetWorldSafeLoc(HORDE_GRAVEYARD);
else if (team == ALLIANCE)
- return sWorldSafeLocsStore.LookupEntry(ALLIANCE_GRAVEYARD);
+ return GetWorldSafeLoc(ALLIANCE_GRAVEYARD);
else return nullptr;
}
@@ -6365,7 +6365,7 @@ WorldSafeLocsEntry const* ObjectMgr::GetClosestGraveYard(WorldLocation const& lo
{
GraveYardData const& data = range.first->second;
- WorldSafeLocsEntry const* entry = sWorldSafeLocsStore.AssertEntry(data.safeLocId);
+ WorldSafeLocsEntry const* entry = ASSERT_NOTNULL(GetWorldSafeLoc(data.safeLocId));
// skip enemy faction graveyard
// team == 0 case can be at call from .neargrave
@@ -6377,17 +6377,17 @@ WorldSafeLocsEntry const* ObjectMgr::GetClosestGraveYard(WorldLocation const& lo
if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_GRAVEYARD, data.safeLocId, conditionSource))
continue;
- if (int16(entry->MapID) == mapEntry->ParentMapID && !conditionObject->GetPhaseShift().HasVisibleMapId(entry->MapID))
+ if (int16(entry->Loc.GetMapId()) == mapEntry->ParentMapID && !conditionObject->GetPhaseShift().HasVisibleMapId(entry->Loc.GetMapId()))
continue;
}
// find now nearest graveyard at other map
- if (MapId != entry->MapID && int16(entry->MapID) != mapEntry->ParentMapID)
+ if (MapId != entry->Loc.GetMapId() && int16(entry->Loc.GetMapId()) != mapEntry->ParentMapID)
{
// if find graveyard at different map from where entrance placed (or no entrance data), use any first
if (!mapEntry
|| mapEntry->CorpseMapID < 0
- || uint32(mapEntry->CorpseMapID) != entry->MapID
+ || uint32(mapEntry->CorpseMapID) != entry->Loc.GetMapId()
|| (mapEntry->Corpse.X == 0 && mapEntry->Corpse.Y == 0)) // Check X and Y
{
// not have any corrdinates for check distance anyway
@@ -6396,8 +6396,8 @@ WorldSafeLocsEntry const* ObjectMgr::GetClosestGraveYard(WorldLocation const& lo
}
// at entrance map calculate distance (2D);
- float dist2 = (entry->Loc.X - mapEntry->Corpse.X)*(entry->Loc.X - mapEntry->Corpse.X)
- +(entry->Loc.Y - mapEntry->Corpse.Y)*(entry->Loc.Y - mapEntry->Corpse.Y);
+ float dist2 = (entry->Loc.GetPositionX() - mapEntry->Corpse.X) * (entry->Loc.GetPositionX() - mapEntry->Corpse.X)
+ + (entry->Loc.GetPositionY() - mapEntry->Corpse.Y) * (entry->Loc.GetPositionY() - mapEntry->Corpse.Y);
if (foundEntr)
{
if (dist2 < distEntr)
@@ -6416,7 +6416,9 @@ WorldSafeLocsEntry const* ObjectMgr::GetClosestGraveYard(WorldLocation const& lo
// find now nearest graveyard at same map
else
{
- float dist2 = (entry->Loc.X - x)*(entry->Loc.X - x)+(entry->Loc.Y - y)*(entry->Loc.Y - y)+(entry->Loc.Z - z)*(entry->Loc.Z - z);
+ float dist2 = (entry->Loc.GetPositionX() - x) * (entry->Loc.GetPositionX() - x)
+ + (entry->Loc.GetPositionY() - y) * (entry->Loc.GetPositionY() - y)
+ + (entry->Loc.GetPositionZ() - z) * (entry->Loc.GetPositionZ() - z);
if (foundNear)
{
if (dist2 < distNear)
@@ -6455,6 +6457,46 @@ GraveYardData const* ObjectMgr::FindGraveYardData(uint32 id, uint32 zoneId) cons
return nullptr;
}
+void ObjectMgr::LoadWorldSafeLocs()
+{
+ uint32 oldMSTime = getMSTime();
+
+ // 0 1 2 3 4 5
+ if (QueryResult result = WorldDatabase.Query("SELECT ID, MapID, LocX, LocY, LocZ, Facing FROM world_safe_locs"))
+ {
+ do
+ {
+ Field* fields = result->Fetch();
+ uint32 id = fields[0].GetUInt32();
+ WorldLocation loc(fields[1].GetUInt32(), fields[2].GetFloat(), fields[3].GetFloat(), fields[4].GetFloat(), fields[5].GetFloat());
+ if (!MapManager::IsValidMapCoord(loc))
+ {
+ TC_LOG_ERROR("sql.sql", "World location (ID: %u) has a invalid position MapID: %u %s, skipped", id, loc.GetMapId(), loc.ToString().c_str());
+ continue;
+ }
+
+ WorldSafeLocsEntry& worldSafeLocs = _worldSafeLocs[id];
+ worldSafeLocs.ID = id;
+ worldSafeLocs.Loc.WorldRelocate(loc);
+
+ } while (result->NextRow());
+
+ TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " world locations %u ms", _worldSafeLocs.size(), GetMSTimeDiffToNow(oldMSTime));
+ }
+ else
+ TC_LOG_INFO("server.loading", ">> Loaded 0 world locations. DB table `world_safe_locs` is empty.");
+}
+
+WorldSafeLocsEntry const* ObjectMgr::GetWorldSafeLoc(uint32 id) const
+{
+ return Trinity::Containers::MapGetValuePtr(_worldSafeLocs, id);
+}
+
+Trinity::IteratorPair<std::unordered_map<uint32, WorldSafeLocsEntry>::const_iterator> ObjectMgr::GetWorldSafeLocs() const
+{
+ return std::make_pair(_worldSafeLocs.begin(), _worldSafeLocs.end());
+}
+
AreaTriggerStruct const* ObjectMgr::GetAreaTrigger(uint32 trigger) const
{
AreaTriggerContainer::const_iterator itr = _areaTriggerStore.find(trigger);
@@ -6572,7 +6614,7 @@ void ObjectMgr::LoadAreaTriggerTeleports()
uint32 Trigger_ID = fields[0].GetUInt32();
uint32 PortLocID = fields[1].GetUInt32();
- WorldSafeLocsEntry const* portLoc = sWorldSafeLocsStore.LookupEntry(PortLocID);
+ WorldSafeLocsEntry const* portLoc = GetWorldSafeLoc(PortLocID);
if (!portLoc)
{
TC_LOG_ERROR("sql.sql", "Area Trigger (ID: %u) has a non-existing Port Loc (ID: %u) in WorldSafeLocs.dbc, skipped", Trigger_ID, PortLocID);
@@ -6581,11 +6623,11 @@ void ObjectMgr::LoadAreaTriggerTeleports()
AreaTriggerStruct at;
- at.target_mapId = portLoc->MapID;
- at.target_X = portLoc->Loc.X;
- at.target_Y = portLoc->Loc.Y;
- at.target_Z = portLoc->Loc.Z;
- at.target_Orientation = (portLoc->Facing * M_PI) / 180; // Orientation is initially in degrees
+ at.target_mapId = portLoc->Loc.GetMapId();
+ at.target_X = portLoc->Loc.GetPositionX();
+ at.target_Y = portLoc->Loc.GetPositionY();
+ at.target_Z = portLoc->Loc.GetPositionZ();
+ at.target_Orientation = portLoc->Loc.GetOrientation();
AreaTriggerEntry const* atEntry = sAreaTriggerStore.LookupEntry(Trigger_ID);
if (!atEntry)
diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h
index 374b13ef836..1816f1a8c5c 100644
--- a/src/server/game/Globals/ObjectMgr.h
+++ b/src/server/game/Globals/ObjectMgr.h
@@ -25,6 +25,7 @@
#include "DatabaseEnvFwd.h"
#include "GameObjectData.h"
#include "ItemTemplate.h"
+#include "IteratorPair.h"
#include "NPCHandler.h"
#include "ObjectDefines.h"
#include "ObjectGuid.h"
@@ -745,6 +746,12 @@ typedef std::unordered_map<uint32, QuestPOIData> QuestPOIContainer;
typedef std::array<std::unordered_map<uint32, QuestGreeting>, 2> QuestGreetingContainer;
typedef std::array<std::unordered_map<uint32, QuestGreetingLocale>, 2> QuestGreetingLocaleContainer;
+struct WorldSafeLocsEntry
+{
+ uint32 ID = 0;
+ WorldLocation Loc;
+};
+
struct GraveYardData
{
uint32 safeLocId;
@@ -1079,6 +1086,9 @@ class TC_GAME_API ObjectMgr
void RemoveGraveYardLink(uint32 id, uint32 zoneId, uint32 team, bool persist = false);
void LoadGraveyardZones();
GraveYardData const* FindGraveYardData(uint32 id, uint32 zone) const;
+ void LoadWorldSafeLocs();
+ WorldSafeLocsEntry const* GetWorldSafeLoc(uint32 id) const;
+ Trinity::IteratorPair<std::unordered_map<uint32, WorldSafeLocsEntry>::const_iterator> GetWorldSafeLocs() const;
AreaTriggerStruct const* GetAreaTrigger(uint32 trigger) const;
AccessRequirement const* GetAccessRequirement(uint32 mapid, Difficulty difficulty) const;
@@ -1639,6 +1649,7 @@ class TC_GAME_API ObjectMgr
AreaTriggerScriptContainer _areaTriggerScriptStore;
AccessRequirementContainer _accessRequirementStore;
DungeonEncounterContainer _dungeonEncounterStore;
+ std::unordered_map<uint32, WorldSafeLocsEntry> _worldSafeLocs;
RepRewardRateContainer _repRewardRateStore;
RepOnKillContainer _repOnKillStore;
diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp
index 388bf5239cf..3d5b46665ab 100644
--- a/src/server/game/Groups/Group.cpp
+++ b/src/server/game/Groups/Group.cpp
@@ -1919,7 +1919,7 @@ ItemDisenchantLootEntry const* Roll::GetItemDisenchantLoot(Player const* player)
bonusData.Initialize(itemInstance);
ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(itemid);
- uint32 itemLevel = Item::GetItemLevel(itemTemplate, bonusData, player->getLevel(), 0, lootItemInSlot->upgradeId, 0, 0, 0, false);
+ uint32 itemLevel = Item::GetItemLevel(itemTemplate, bonusData, player->getLevel(), 0, 0, 0, 0, false);
return Item::GetDisenchantLoot(itemTemplate, bonusData.Quality, itemLevel);
}
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp
index 2cbae0cd21b..ab4f51ad274 100644
--- a/src/server/game/Guilds/Guild.cpp
+++ b/src/server/game/Guilds/Guild.cpp
@@ -374,7 +374,7 @@ void Guild::BankTab::LoadFromDB(Field* fields)
bool Guild::BankTab::LoadItemFromDB(Field* fields)
{
- uint8 slotId = fields[46].GetUInt8();
+ uint8 slotId = fields[45].GetUInt8();
ObjectGuid::LowType itemGuid = fields[0].GetUInt64();
uint32 itemEntry = fields[1].GetUInt32();
if (slotId >= GUILD_BANK_MAX_SLOTS)
@@ -2475,7 +2475,7 @@ void Guild::LoadBankTabFromDB(Field* fields)
bool Guild::LoadBankItemFromDB(Field* fields)
{
- uint8 tabId = fields[45].GetUInt8();
+ uint8 tabId = fields[44].GetUInt8();
if (tabId >= _GetPurchasedTabsSize())
{
TC_LOG_ERROR("guild", "Invalid tab for item (GUID: %u, id: #%u) in guild bank, skipped.",
diff --git a/src/server/game/Guilds/GuildMgr.cpp b/src/server/game/Guilds/GuildMgr.cpp
index 3f197b9f564..ec601c37f39 100644
--- a/src/server/game/Guilds/GuildMgr.cpp
+++ b/src/server/game/Guilds/GuildMgr.cpp
@@ -410,17 +410,17 @@ void GuildMgr::LoadGuilds()
// 0 1 2 3 4 5 6 7 8 9 10 11 12
// SELECT guid, itemEntry, creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, durability, playedTime, text,
- // 13 14 15 16 17 18 19
- // upgradeId, battlePetSpeciesId, battlePetBreedData, battlePetLevel, battlePetDisplayId, context, bonusListIDs,
- // 20 21 22 23 24
+ // 13 14 15 16 17 18
+ // battlePetSpeciesId, battlePetBreedData, battlePetLevel, battlePetDisplayId, context, bonusListIDs,
+ // 19 20 21 22 23
// itemModifiedAppearanceAllSpecs, itemModifiedAppearanceSpec1, itemModifiedAppearanceSpec2, itemModifiedAppearanceSpec3, itemModifiedAppearanceSpec4,
- // 25 26 27 28 29
+ // 24 25 26 27 28
// spellItemEnchantmentAllSpecs, spellItemEnchantmentSpec1, spellItemEnchantmentSpec2, spellItemEnchantmentSpec3, spellItemEnchantmentSpec4,
- // 30 31 32 33 34 35 36 37 38 39 40 41
+ // 29 30 31 32 33 34 35 36 37 38 39 40
// gemItemId1, gemBonuses1, gemContext1, gemScalingLevel1, gemItemId2, gemBonuses2, gemContext2, gemScalingLevel2, gemItemId3, gemBonuses3, gemContext3, gemScalingLevel3
- // 42 43
+ // 41 42
// fixedScalingLevel, artifactKnowledgeLevel
- // 44 45 46
+ // 43 44 45
// guildid, TabId, SlotId FROM guild_bank_item gbi INNER JOIN item_instance ii ON gbi.item_guid = ii.guid
PreparedQueryResult result = CharacterDatabase.Query(CharacterDatabase.GetPreparedStatement(CHAR_SEL_GUILD_BANK_ITEMS));
@@ -434,7 +434,7 @@ void GuildMgr::LoadGuilds()
do
{
Field* fields = result->Fetch();
- uint64 guildId = fields[44].GetUInt64();
+ uint64 guildId = fields[43].GetUInt64();
if (Guild* guild = GetGuildById(guildId))
guild->LoadBankItemFromDB(fields);
diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp
index 9da8317bd31..0acb41b2c73 100644
--- a/src/server/game/Handlers/ItemHandler.cpp
+++ b/src/server/game/Handlers/ItemHandler.cpp
@@ -1076,7 +1076,7 @@ void WorldSession::HandleSocketGems(WorldPackets::Item::SocketGems& socketGems)
if (gems[i])
{
uint32 gemScalingLevel = _player->getLevel();
- if (uint32 fixedLevel = gems[i]->GetModifier(ITEM_MODIFIER_SCALING_STAT_DISTRIBUTION_FIXED_LEVEL))
+ if (uint32 fixedLevel = gems[i]->GetModifier(ITEM_MODIFIER_TIMEWALKER_LEVEL))
gemScalingLevel = fixedLevel;
itemTarget->SetGem(i, &gemData[i], gemScalingLevel);
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index e7797c17f7a..82683b854ad 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -616,15 +616,15 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPackets::AreaTrigger::AreaTrigge
if (Map* map = sMapMgr->FindMap(at->target_mapId, player->GetInstanceSave(at->target_mapId)->GetInstanceId()))
if (InstanceMap* instanceMap = map->ToInstanceMap())
if (InstanceScript* instanceScript = instanceMap->GetInstanceScript())
- entranceLocation = sWorldSafeLocsStore.LookupEntry(instanceScript->GetEntranceLocation());
+ entranceLocation = sObjectMgr->GetWorldSafeLoc(instanceScript->GetEntranceLocation());
// Finally check with the instancesave for an entrance location if we did not get a valid one from the instancescript
if (!entranceLocation)
- entranceLocation = sWorldSafeLocsStore.LookupEntry(instanceSave->GetEntranceLocation());
+ entranceLocation = sObjectMgr->GetWorldSafeLoc(instanceSave->GetEntranceLocation());
}
if (entranceLocation)
- player->TeleportTo(entranceLocation->MapID, entranceLocation->Loc.X, entranceLocation->Loc.Y, entranceLocation->Loc.Z, entranceLocation->Facing * M_PI / 180, TELE_TO_NOT_LEAVE_TRANSPORT);
+ player->TeleportTo(entranceLocation->Loc, TELE_TO_NOT_LEAVE_TRANSPORT);
else
player->TeleportTo(at->target_mapId, at->target_X, at->target_Y, at->target_Z, at->target_Orientation, TELE_TO_NOT_LEAVE_TRANSPORT);
}
diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp
index fceaedd74ba..371b0c8c4be 100644
--- a/src/server/game/Handlers/NPCHandler.cpp
+++ b/src/server/game/Handlers/NPCHandler.cpp
@@ -315,7 +315,7 @@ void WorldSession::SendSpiritResurrect()
WorldSafeLocsEntry const* ghostGrave = sObjectMgr->GetClosestGraveYard(*_player, _player->GetTeam(), _player);
if (corpseGrave != ghostGrave)
- _player->TeleportTo(corpseGrave->MapID, corpseGrave->Loc.X, corpseGrave->Loc.Y, corpseGrave->Loc.Z, (corpseGrave->Facing * M_PI) / 180); // Orientation is initially in degrees
+ _player->TeleportTo(corpseGrave->Loc);
}
}
diff --git a/src/server/game/Handlers/VoidStorageHandler.cpp b/src/server/game/Handlers/VoidStorageHandler.cpp
index b951e26ed03..0b80b5ca71a 100644
--- a/src/server/game/Handlers/VoidStorageHandler.cpp
+++ b/src/server/game/Handlers/VoidStorageHandler.cpp
@@ -155,8 +155,7 @@ void WorldSession::HandleVoidStorageTransfer(WorldPackets::VoidStorage::VoidStor
}
VoidStorageItem itemVS(sObjectMgr->GenerateVoidStorageItemId(), item->GetEntry(), item->GetCreator(),
- item->GetItemRandomBonusListId(), item->GetModifier(ITEM_MODIFIER_UPGRADE_ID),
- item->GetModifier(ITEM_MODIFIER_SCALING_STAT_DISTRIBUTION_FIXED_LEVEL), item->GetModifier(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL),
+ item->GetItemRandomBonusListId(), item->GetModifier(ITEM_MODIFIER_TIMEWALKER_LEVEL), item->GetModifier(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL),
uint8(item->m_itemData->Context), item->m_itemData->BonusListIDs);
WorldPackets::VoidStorage::VoidItem voidItem;
@@ -196,7 +195,6 @@ void WorldSession::HandleVoidStorageTransfer(WorldPackets::VoidStorage::VoidStor
Item* item = _player->StoreNewItem(dest, itemVS->ItemEntry, true, itemVS->RandomBonusListId, GuidSet(), itemVS->Context, itemVS->BonusListIDs);
item->SetCreator(itemVS->CreatorGuid);
- item->SetModifier(ITEM_MODIFIER_UPGRADE_ID, itemVS->ItemUpgradeId);
item->SetBinding(true);
GetCollectionMgr()->AddItemAppearance(item);
diff --git a/src/server/game/Instances/InstanceSaveMgr.cpp b/src/server/game/Instances/InstanceSaveMgr.cpp
index 5db6edd7695..26e1415fa85 100644
--- a/src/server/game/Instances/InstanceSaveMgr.cpp
+++ b/src/server/game/Instances/InstanceSaveMgr.cpp
@@ -99,7 +99,7 @@ InstanceSave* InstanceSaveManager::AddInstanceSave(uint32 mapId, uint32 instance
return NULL;
}
- if (entranceId && !sWorldSafeLocsStore.LookupEntry(entranceId))
+ if (entranceId && !sObjectMgr->GetWorldSafeLoc(entranceId))
{
TC_LOG_WARN("misc", "InstanceSaveManager::AddInstanceSave: invalid entranceId = %d defined for instance save with mapid = %d, instanceid = %d!", entranceId, mapId, instanceId);
entranceId = 0;
diff --git a/src/server/game/Loot/Loot.cpp b/src/server/game/Loot/Loot.cpp
index 21568474dd8..eb37b6b0989 100644
--- a/src/server/game/Loot/Loot.cpp
+++ b/src/server/game/Loot/Loot.cpp
@@ -47,7 +47,6 @@ LootItem::LootItem(LootStoreItem const& li)
needs_quest = li.needs_quest;
randomBonusListId = GenerateItemRandomBonusListId(itemid);
- upgradeId = sDB2Manager.GetRulesetItemUpgrade(itemid);
context = 0;
count = 0;
is_looted = 0;
diff --git a/src/server/game/Loot/Loot.h b/src/server/game/Loot/Loot.h
index 709d3aceddb..7373cd5e9d8 100644
--- a/src/server/game/Loot/Loot.h
+++ b/src/server/game/Loot/Loot.h
@@ -134,7 +134,6 @@ struct TC_GAME_API LootItem
{
uint32 itemid;
ItemRandomBonusListId randomBonusListId;
- int32 upgradeId;
std::vector<int32> BonusListIDs;
uint8 context;
ConditionContainer conditions; // additional loot condition
@@ -155,7 +154,7 @@ struct TC_GAME_API LootItem
explicit LootItem(LootStoreItem const& li);
// Empty constructor for creating an empty LootItem to be filled in with DB data
- LootItem() : itemid(0), randomBonusListId(0), upgradeId(0), context(0), count(0), is_looted(false), is_blocked(false),
+ LootItem() : itemid(0), randomBonusListId(0), context(0), count(0), is_looted(false), is_blocked(false),
freeforall(false), is_underthreshold(false), is_counted(false), needs_quest(false), follow_loot_rules(false),
canSave(true){ };
diff --git a/src/server/game/Server/Packets/ItemPacketsCommon.cpp b/src/server/game/Server/Packets/ItemPacketsCommon.cpp
index e94123490aa..83fb1bd9328 100644
--- a/src/server/game/Server/Packets/ItemPacketsCommon.cpp
+++ b/src/server/game/Server/Packets/ItemPacketsCommon.cpp
@@ -77,25 +77,17 @@ void WorldPackets::Item::ItemInstance::Initialize(::LootItem const& lootItem)
if (lootItem.randomBonusListId)
ItemBonus->BonusListIDs.push_back(lootItem.randomBonusListId);
}
-
- if (lootItem.upgradeId)
- {
- Modifications = boost::in_place();
- Modifications->Insert(ITEM_MODIFIER_UPGRADE_ID, lootItem.upgradeId);
- }
}
void WorldPackets::Item::ItemInstance::Initialize(::VoidStorageItem const* voidItem)
{
ItemID = voidItem->ItemEntry;
- if (voidItem->ItemUpgradeId || voidItem->FixedScalingLevel || voidItem->ArtifactKnowledgeLevel)
+ if (voidItem->FixedScalingLevel || voidItem->ArtifactKnowledgeLevel)
{
Modifications = boost::in_place();
- if (voidItem->ItemUpgradeId)
- Modifications->Insert(ITEM_MODIFIER_UPGRADE_ID, voidItem->ItemUpgradeId);
if (voidItem->FixedScalingLevel)
- Modifications->Insert(ITEM_MODIFIER_SCALING_STAT_DISTRIBUTION_FIXED_LEVEL, voidItem->FixedScalingLevel);
+ Modifications->Insert(ITEM_MODIFIER_TIMEWALKER_LEVEL, voidItem->FixedScalingLevel);
if (voidItem->ArtifactKnowledgeLevel)
Modifications->Insert(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL, voidItem->ArtifactKnowledgeLevel);
}
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index 86431c96452..bc7fbbf6ad8 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -1813,6 +1813,9 @@ void World::SetInitialWorldSettings()
TC_LOG_INFO("server.loading", "Loading SpellArea Data..."); // must be after quest load
sSpellMgr->LoadSpellAreas();
+ TC_LOG_INFO("server.loading", "Loading World locations...");
+ sObjectMgr->LoadWorldSafeLocs(); // must be before LoadAreaTriggerTeleports and LoadGraveyardZones
+
TC_LOG_INFO("server.loading", "Loading AreaTrigger definitions...");
sObjectMgr->LoadAreaTriggerTeleports();
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp
index e7b1db5060f..522bdcc7b5f 100644
--- a/src/server/scripts/Commands/cs_debug.cpp
+++ b/src/server/scripts/Commands/cs_debug.cpp
@@ -1257,23 +1257,24 @@ public:
float z = player->GetPositionZ();
float distNearest = std::numeric_limits<float>::max();
- for (uint32 i = 0; i < sWorldSafeLocsStore.GetNumRows(); ++i)
+ for (auto&& kvp : sObjectMgr->GetWorldSafeLocs())
{
- WorldSafeLocsEntry const* loc = sWorldSafeLocsStore.LookupEntry(i);
- if (loc && loc->MapID == player->GetMapId())
+ if (kvp.second.Loc.GetMapId() == player->GetMapId())
{
- float dist = (loc->Loc.X - x) * (loc->Loc.X - x) + (loc->Loc.Y - y) * (loc->Loc.Y - y) + (loc->Loc.Z - z) * (loc->Loc.Z - z);
+ float dist = (kvp.second.Loc.GetPositionX() - x) * (kvp.second.Loc.GetPositionX() - x)
+ + (kvp.second.Loc.GetPositionY() - y) * (kvp.second.Loc.GetPositionY() - y)
+ + (kvp.second.Loc.GetPositionZ() - z) * (kvp.second.Loc.GetPositionZ() - z);
if (dist < distNearest)
{
distNearest = dist;
- nearestLoc = loc;
+ nearestLoc = &kvp.second;
}
}
}
}
if (nearestLoc)
- handler->PSendSysMessage(LANG_COMMAND_NEARGRAVEYARD, nearestLoc->ID, nearestLoc->Loc.X, nearestLoc->Loc.Y, nearestLoc->Loc.Z);
+ handler->PSendSysMessage(LANG_COMMAND_NEARGRAVEYARD, nearestLoc->ID, nearestLoc->Loc.GetPositionX(), nearestLoc->Loc.GetPositionY(), nearestLoc->Loc.GetPositionZ());
else
handler->PSendSysMessage(LANG_COMMAND_NEARGRAVEYARD_NOTFOUND);
diff --git a/src/server/scripts/Commands/cs_go.cpp b/src/server/scripts/Commands/cs_go.cpp
index b062139ce70..41e50f535a8 100644
--- a/src/server/scripts/Commands/cs_go.cpp
+++ b/src/server/scripts/Commands/cs_go.cpp
@@ -180,7 +180,7 @@ public:
if (!graveyardId)
return false;
- WorldSafeLocsEntry const* gy = sWorldSafeLocsStore.LookupEntry(graveyardId);
+ WorldSafeLocsEntry const* gy = sObjectMgr->GetWorldSafeLoc(graveyardId);
if (!gy)
{
handler->PSendSysMessage(LANG_COMMAND_GRAVEYARDNOEXIST, graveyardId);
@@ -188,9 +188,9 @@ public:
return false;
}
- if (!MapManager::IsValidMapCoord(gy->MapID, gy->Loc.X, gy->Loc.Y, gy->Loc.Z))
+ if (!MapManager::IsValidMapCoord(gy->Loc))
{
- handler->PSendSysMessage(LANG_INVALID_TARGET_COORD, gy->Loc.X, gy->Loc.Y, gy->MapID);
+ handler->PSendSysMessage(LANG_INVALID_TARGET_COORD, gy->Loc.GetPositionX(), gy->Loc.GetPositionY(), gy->Loc.GetMapId());
handler->SetSentErrorMessage(true);
return false;
}
@@ -205,7 +205,7 @@ public:
else
player->SaveRecallPosition();
- player->TeleportTo(gy->MapID, gy->Loc.X, gy->Loc.Y, gy->Loc.Z, (gy->Facing * M_PI) / 180); // Orientation is initially in degrees
+ player->TeleportTo(gy->Loc);
return true;
}
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp
index ad21e8fe400..f5c18af74dd 100644
--- a/src/server/scripts/Commands/cs_misc.cpp
+++ b/src/server/scripts/Commands/cs_misc.cpp
@@ -1077,7 +1077,7 @@ public:
else
return false;
- WorldSafeLocsEntry const* graveyard = sWorldSafeLocsStore.LookupEntry(graveyardId);
+ WorldSafeLocsEntry const* graveyard = sObjectMgr->GetWorldSafeLoc(graveyardId);
if (!graveyard)
{
diff --git a/src/server/scripts/EasternKingdoms/zone_tol_barad.cpp b/src/server/scripts/EasternKingdoms/zone_tol_barad.cpp
index 2f7ce49afca..ad796eeb311 100644
--- a/src/server/scripts/EasternKingdoms/zone_tol_barad.cpp
+++ b/src/server/scripts/EasternKingdoms/zone_tol_barad.cpp
@@ -20,6 +20,7 @@
#include "BattlefieldMgr.h"
#include "BattlefieldTB.h"
#include "DB2Stores.h"
+#include "ObjectMgr.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
@@ -83,8 +84,8 @@ class npc_tb_spirit_guide : public CreatureScript
return;
}
- if (WorldSafeLocsEntry const* safeLoc = sWorldSafeLocsStore.LookupEntry(areaId))
- player->TeleportTo(safeLoc->MapID, safeLoc->Loc.X, safeLoc->Loc.Y, safeLoc->Loc.Z, 0);
+ if (WorldSafeLocsEntry const* safeLoc = sObjectMgr->GetWorldSafeLoc(areaId))
+ player->TeleportTo(safeLoc->Loc);
}
};
diff --git a/src/server/scripts/Northrend/zone_wintergrasp.cpp b/src/server/scripts/Northrend/zone_wintergrasp.cpp
index 3dc606e1f76..9e119a55415 100644
--- a/src/server/scripts/Northrend/zone_wintergrasp.cpp
+++ b/src/server/scripts/Northrend/zone_wintergrasp.cpp
@@ -218,8 +218,8 @@ class npc_wg_spirit_guide : public CreatureScript
GraveyardVect gy = wintergrasp->GetGraveyardVector();
for (uint8 i = 0; i < gy.size(); i++)
if (action - GOSSIP_ACTION_INFO_DEF == i && gy[i]->GetControlTeamId() == player->GetTeamId())
- if (WorldSafeLocsEntry const* safeLoc = sWorldSafeLocsStore.LookupEntry(gy[i]->GetGraveyardId()))
- player->TeleportTo(safeLoc->MapID, safeLoc->Loc.X, safeLoc->Loc.Y, safeLoc->Loc.Z, 0);
+ if (WorldSafeLocsEntry const* safeLoc = sObjectMgr->GetWorldSafeLoc(gy[i]->GetGraveyardId()))
+ player->TeleportTo(safeLoc->Loc);
}
return true;
}
diff --git a/src/tools/map_extractor/loadlib/DBFilesClientList.h b/src/tools/map_extractor/loadlib/DBFilesClientList.h
index dae88cf4b28..beafec14619 100644
--- a/src/tools/map_extractor/loadlib/DBFilesClientList.h
+++ b/src/tools/map_extractor/loadlib/DBFilesClientList.h
@@ -75,6 +75,8 @@ DB2FileInfo const DBFilesClientList[] =
{ 2829666, "AzeriteEssencePower.db2" },
{ 1846048, "AzeriteItem.db2" },
{ 1915395, "AzeriteItemMilestonePower.db2" },
+ { 3148050, "AzeriteKnowledgeMultiplier.db2" },
+ { 3147968, "AzeriteLevelInfo.db2" },
{ 1846044, "AzeritePower.db2" },
{ 1846040, "AzeritePowerSetMember.db2" },
{ 1846043, "AzeriteTierUnlock.db2" },
@@ -155,6 +157,7 @@ DB2FileInfo const DBFilesClientList[] =
{ 1465903, "CloakDampening.db2" },
{ 2175218, "CloneEffect.db2" },
{ 1120958, "CombatCondition.db2" },
+ { 3067644, "CommentatorIndirectSpell.db2" },
{ 1664251, "CommentatorStartLocation.db2" },
{ 1661584, "CommentatorTrackedCooldown.db2" },
{ 2098645, "CommunityIcon.db2" },
@@ -360,8 +363,8 @@ DB2FileInfo const DBFilesClientList[] =
{ 1134576, "ItemSpecOverride.db2" },
{ 1261604, "ItemSubClass.db2" },
{ 1302852, "ItemSubClassMask.db2" },
- { 801687, "ItemUpgrade.db2" },
{ 1343605, "ItemVisuals.db2" },
+ { 3043873, "ItemVisualsXEffect.db2" },
{ 987133, "ItemXBonusTree.db2" },
{ 1240336, "JournalEncounter.db2" },
{ 1301155, "JournalEncounterCreature.db2" },
@@ -501,6 +504,7 @@ DB2FileInfo const DBFilesClientList[] =
{ 1028735, "QuestV2CliTask.db2" },
{ 1573634, "QuestXGroupActivity.db2" },
{ 1139378, "QuestXP.db2" },
+ { 3081207, "RafActivity.db2" },
{ 1310245, "RandPropPoints.db2" },
{ 1716803, "RelicSlotTierRequirement.db2" },
{ 1671256, "RelicTalent.db2" },
@@ -513,7 +517,6 @@ DB2FileInfo const DBFilesClientList[] =
{ 1307153, "RewardPackXCurrencyType.db2" },
{ 1307155, "RewardPackXItem.db2" },
{ 1398908, "RibbonQuality.db2" },
- { 801749, "RulesetItemUpgrade.db2" },
{ 1712172, "SDReplacementModel.db2" },
{ 2056369, "SSAOSettings.db2" },
{ 1141728, "ScalingStatDistribution.db2" },
@@ -726,7 +729,6 @@ DB2FileInfo const DBFilesClientList[] =
{ 1135240, "WorldElapsedTimer.db2" },
{ 1134579, "WorldMapOverlay.db2" },
{ 1957212, "WorldMapOverlayTile.db2" },
- { 1369425, "WorldSafeLocs.db2" },
{ 1332558, "WorldStateExpression.db2" },
{ 1266941, "WorldStateZoneSounds.db2" },
{ 1310255, "World_PVP_Area.db2" },