mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-21 07:22:02 -04:00
Core/DataStores: Updated db2 structures to 7.2.0
This commit is contained in:
@@ -0,0 +1,311 @@
|
||||
--
|
||||
-- Table structure for table `achievement`
|
||||
--
|
||||
ALTER TABLE `achievement`
|
||||
ADD `IconFileDataID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `ID`,
|
||||
DROP `IconID`;
|
||||
|
||||
--
|
||||
-- Table structure for table `artifact`
|
||||
--
|
||||
ALTER TABLE `artifact`
|
||||
ADD `UiModelSceneID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `Flags`,
|
||||
ADD `SpellVisualKitID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `UiModelSceneID`;
|
||||
|
||||
--
|
||||
-- Table structure for table `artifact_appearance`
|
||||
--
|
||||
ALTER TABLE `artifact_appearance` MODIFY `PlayerConditionID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `ID`;
|
||||
|
||||
--
|
||||
-- Table structure for table `artifact_power`
|
||||
--
|
||||
ALTER TABLE `artifact_power` ADD `ArtifactTier` tinyint(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `MaxRank`;
|
||||
|
||||
--
|
||||
-- Table structure for table `battlemaster_list`
|
||||
--
|
||||
ALTER TABLE `battlemaster_list`
|
||||
ADD `ShortDescription` text NULL AFTER `GameType`,
|
||||
ADD `LongDescription` text NULL AFTER `ShortDescription`;
|
||||
|
||||
--
|
||||
-- Table structure for table `battlemaster_list_locale`
|
||||
--
|
||||
ALTER TABLE `battlemaster_list_locale`
|
||||
ADD `ShortDescription_lang` text NULL AFTER `GameType_lang`,
|
||||
ADD `LongDescription_lang` text NULL AFTER `ShortDescription_lang`;
|
||||
|
||||
--
|
||||
-- Table structure for table `battle_pet_species`
|
||||
--
|
||||
ALTER TABLE `battle_pet_species`
|
||||
ADD `CardModelSceneID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `ID`,
|
||||
ADD `LoadoutModelSceneID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `CardModelSceneID`;
|
||||
|
||||
--
|
||||
-- Table structure for table `chr_races`
|
||||
--
|
||||
ALTER TABLE `chr_races`
|
||||
DROP `ExplorationSoundID`,
|
||||
DROP `UAMaleCreatureSoundDataID`,
|
||||
DROP `UAFemaleCreatureSoundDataID`;
|
||||
|
||||
--
|
||||
-- Table structure for table `chr_specialization`
|
||||
--
|
||||
ALTER TABLE `chr_specialization`
|
||||
ADD `IconFileDataID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `ID`,
|
||||
DROP `SpellIconID`;
|
||||
|
||||
--
|
||||
-- Table structure for table `cinematic_camera`
|
||||
--
|
||||
ALTER TABLE `cinematic_camera`
|
||||
MODIFY `SoundID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `ID`,
|
||||
ADD `ModelFileDataID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `OriginFacing`,
|
||||
DROP `Model`;
|
||||
|
||||
--
|
||||
-- Table structure for table `cinematic_sequences`
|
||||
--
|
||||
ALTER TABLE `cinematic_sequences` MODIFY `SoundID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `ID`;
|
||||
|
||||
--
|
||||
-- Table structure for table `creature_display_info`
|
||||
--
|
||||
ALTER TABLE `creature_display_info`
|
||||
MODIFY `CreatureModelScale` float NOT NULL DEFAULT '0' AFTER `ID`,
|
||||
MODIFY `ModelID` smallint(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `CreatureModelScale`,
|
||||
MODIFY `NPCSoundID` smallint(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `ModelID`,
|
||||
MODIFY `SizeClass` tinyint(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `NPCSoundID`,
|
||||
MODIFY `Flags` tinyint(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `SizeClass`,
|
||||
MODIFY `Gender` tinyint(4) NOT NULL DEFAULT '0' AFTER `Flags`,
|
||||
MODIFY `TextureVariation1` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `ExtendedDisplayInfoID`,
|
||||
MODIFY `TextureVariation2` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `TextureVariation1`,
|
||||
MODIFY `TextureVariation3` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `TextureVariation2`,
|
||||
ADD `PortraitTextureFileDataID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `TextureVariation3`,
|
||||
MODIFY `CreatureModelAlpha` tinyint(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `PortraitTextureFileDataID`,
|
||||
MODIFY `SoundID` smallint(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `CreatureModelAlpha`,
|
||||
MODIFY `BloodID` tinyint(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `PortraitCreatureDisplayInfoID`,
|
||||
MODIFY `ParticleColorID` smallint(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `BloodID`,
|
||||
MODIFY `ObjectEffectPackageID` smallint(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `CreatureGeosetData`,
|
||||
MODIFY `AnimReplacementSetID` smallint(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `ObjectEffectPackageID`,
|
||||
CHANGE `Unk700` `UnarmedWeaponSubclass` tinyint(4) NOT NULL DEFAULT '0' AFTER `AnimReplacementSetID`,
|
||||
ADD `MountSpellVisualKitID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `InstanceOtherPlayerPetScale`,
|
||||
DROP `PortraitTextureName`;
|
||||
|
||||
--
|
||||
-- Table structure for table `creature_family`
|
||||
--
|
||||
ALTER TABLE `creature_family`
|
||||
ADD `IconFileDataID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `Name`,
|
||||
DROP `IconFile`;
|
||||
|
||||
--
|
||||
-- Table structure for table `criteria_tree`
|
||||
--
|
||||
ALTER TABLE `criteria_tree` MODIFY `CriteriaID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `Operator`;
|
||||
|
||||
--
|
||||
-- Table structure for table `difficulty`
|
||||
--
|
||||
ALTER TABLE `difficulty`
|
||||
MODIFY `GroupSizeHealthCurveID` smallint(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `Name`,
|
||||
MODIFY `GroupSizeDmgCurveID` smallint(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `GroupSizeHealthCurveID`,
|
||||
MODIFY `GroupSizeSpellPointsCurveID` smallint(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `GroupSizeDmgCurveID`;
|
||||
|
||||
--
|
||||
-- Table structure for table `dungeon_encounter`
|
||||
--
|
||||
ALTER TABLE `dungeon_encounter`
|
||||
DROP `SpellIconID`,
|
||||
MODIFY `ID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `Flags`,
|
||||
ADD `TextureFileDataID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `OrderIndex`;
|
||||
|
||||
--
|
||||
-- Table structure for table `faction`
|
||||
--
|
||||
ALTER TABLE `faction` ADD `ParagonFactionID` smallint(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `ParentFactionID`;
|
||||
|
||||
--
|
||||
-- Table structure for table `garr_class_spec`
|
||||
--
|
||||
ALTER TABLE `garr_class_spec` MODIFY `GarrFollItemSetID` smallint(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `ClassAtlasID`;
|
||||
|
||||
--
|
||||
-- Table structure for table `garr_follower`
|
||||
--
|
||||
ALTER TABLE `garr_follower` ADD `Name` text NULL AFTER `AllianceAddedBroadcastTextID`;
|
||||
|
||||
--
|
||||
-- Table structure for table `garr_follower_locale`
|
||||
--
|
||||
ALTER TABLE `garr_follower_locale` ADD `Name_lang` text NULL AFTER `AllianceSourceText_lang`;
|
||||
|
||||
--
|
||||
-- Table structure for table `garr_site_level`
|
||||
--
|
||||
ALTER TABLE `garr_site_level` MODIFY `MovieID` smallint(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `SiteID`;
|
||||
|
||||
--
|
||||
-- Table structure for table `holidays`
|
||||
--
|
||||
ALTER TABLE `holidays`
|
||||
MODIFY `HolidayNameID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `Flags`,
|
||||
MODIFY `HolidayDescriptionID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `HolidayNameID`;
|
||||
|
||||
--
|
||||
-- Table structure for table `item_bonus_tree_node`
|
||||
--
|
||||
ALTER TABLE `item_bonus_tree_node` ADD `ItemLevelSelectorID` smallint(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `BonusListID`;
|
||||
|
||||
--
|
||||
-- Table structure for table `item_sparse`
|
||||
--
|
||||
ALTER TABLE `item_sparse`
|
||||
MODIFY `BuyCount` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `Unk2`,
|
||||
MODIFY `AllowableClass` smallint(6) NOT NULL DEFAULT '0' AFTER `StatScalingFactor`,
|
||||
MODIFY `TotemCategory` smallint(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `Map`,
|
||||
ADD `RequiredTransmogHolidayID` smallint(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `HolidayID`;
|
||||
|
||||
--
|
||||
-- Table structure for table `lfg_dungeons`
|
||||
--
|
||||
ALTER TABLE `lfg_dungeons` MODIFY `PlayerConditionID` smallint(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `MentorItemLevel`;
|
||||
|
||||
--
|
||||
-- Table structure for table `map`
|
||||
--
|
||||
ALTER TABLE `map`
|
||||
ADD `ShortDescription` text NULL AFTER `MapDescription1`,
|
||||
ADD `LongDescription` text NULL AFTER `ShortDescription`;
|
||||
|
||||
--
|
||||
-- Table structure for table `map_locale`
|
||||
--
|
||||
ALTER TABLE `map_locale`
|
||||
ADD `ShortDescription_lang` text NULL AFTER `MapDescription1_lang`,
|
||||
ADD `LongDescription_lang` text NULL AFTER `ShortDescription_lang`;
|
||||
|
||||
--
|
||||
-- Table structure for table `mount`
|
||||
--
|
||||
ALTER TABLE `mount`
|
||||
DROP `DisplayId`,
|
||||
MODIFY `PlayerConditionId` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `ID`,
|
||||
ADD `UiModelSceneID` int(11) NOT NULL DEFAULT '0' AFTER `PlayerConditionId`;
|
||||
|
||||
--
|
||||
-- Table structure for table `mount_x_display`
|
||||
--
|
||||
DROP TABLE IF EXISTS `mount_x_display`;
|
||||
CREATE TABLE `mount_x_display` (
|
||||
`ID` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`MountID` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`DisplayID` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`PlayerConditionID` int(10) unsigned NOT NULL DEFAULT '0',
|
||||
`VerifiedBuild` smallint(6) NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`ID`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
--
|
||||
-- Table structure for table `player_condition`
|
||||
--
|
||||
ALTER TABLE `player_condition`
|
||||
CHANGE `Unknown7001` `MovementFlags1` int(11) NOT NULL DEFAULT '0' AFTER `MaxAvgItemLevel`,
|
||||
CHANGE `Unknown7002` `MovementFlags2` int(11) NOT NULL DEFAULT '0' AFTER `MovementFlags1`,
|
||||
ADD `MainHandItemSubclassMask` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `MovementFlags2`;
|
||||
|
||||
--
|
||||
-- Table structure for table `quest_package_item`
|
||||
--
|
||||
ALTER TABLE `quest_package_item` MODIFY `ItemCount` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `FilterType`;
|
||||
|
||||
--
|
||||
-- Table structure for table `skill_line`
|
||||
--
|
||||
ALTER TABLE `skill_line`
|
||||
ADD `IconFileDataID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `CanLink`,
|
||||
DROP `SpellIconID`;
|
||||
|
||||
--
|
||||
-- Table structure for table `skill_line_ability`
|
||||
--
|
||||
ALTER TABLE `skill_line_ability` MODIFY `Unknown703` tinyint(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `NumSkillUps`;
|
||||
|
||||
--
|
||||
-- Table structure for table `spell_duration`
|
||||
--
|
||||
ALTER TABLE `spell_duration` MODIFY `DurationPerLevel` int(11) NOT NULL DEFAULT '0' AFTER `MaxDuration`;
|
||||
|
||||
--
|
||||
-- Table structure for table `spell_effect`
|
||||
--
|
||||
ALTER TABLE `spell_effect`
|
||||
MODIFY `EffectSpellClassMask1` int(10) UNSIGNED NOT NULL DEFAULT '0' FIRST,
|
||||
MODIFY `EffectSpellClassMask2` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `EffectSpellClassMask1`,
|
||||
MODIFY `EffectSpellClassMask3` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `EffectSpellClassMask2`,
|
||||
MODIFY `EffectSpellClassMask4` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `EffectSpellClassMask3`,
|
||||
MODIFY `ID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `EffectSpellClassMask4`,
|
||||
MODIFY `SpellID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `ID`,
|
||||
MODIFY `Effect` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `SpellID`,
|
||||
MODIFY `EffectAura` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `Effect`,
|
||||
MODIFY `EffectBasePoints` int(11) NOT NULL DEFAULT '0' AFTER `EffectAura`,
|
||||
MODIFY `EffectIndex` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `EffectBasePoints`,
|
||||
MODIFY `EffectMiscValue` int(11) NOT NULL DEFAULT '0' AFTER `EffectIndex`,
|
||||
MODIFY `EffectMiscValueB` int(11) NOT NULL DEFAULT '0' AFTER `EffectMiscValue`,
|
||||
MODIFY `EffectRadiusIndex` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `EffectMiscValueB`,
|
||||
MODIFY `EffectRadiusMaxIndex` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `EffectRadiusIndex`,
|
||||
MODIFY `ImplicitTarget1` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `EffectRadiusMaxIndex`,
|
||||
MODIFY `ImplicitTarget2` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `ImplicitTarget1`,
|
||||
MODIFY `DifficultyID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `ImplicitTarget2`,
|
||||
MODIFY `EffectAuraPeriod` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `EffectAmplitude`,
|
||||
MODIFY `EffectChainTargets` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `EffectChainAmplitude`,
|
||||
MODIFY `EffectDieSides` int(11) NOT NULL DEFAULT '0' AFTER `EffectChainTargets`,
|
||||
MODIFY `EffectItemType` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `EffectDieSides`,
|
||||
MODIFY `EffectMechanic` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `EffectItemType`,
|
||||
MODIFY `EffectTriggerSpell` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `EffectRealPointsPerLevel`,
|
||||
MODIFY `EffectAttributes` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `EffectPosFacing`,
|
||||
ADD `PvPMultiplier` float NOT NULL DEFAULT '0' AFTER `BonusCoefficientFromAP`;
|
||||
|
||||
--
|
||||
-- Table structure for table `spell_misc`
|
||||
--
|
||||
ALTER TABLE `spell_misc`
|
||||
ADD `IconFileDataID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `SchoolMask`,
|
||||
ADD `ActiveIconFileDataID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `IconFileDataID`,
|
||||
DROP `SpellIconID`,
|
||||
DROP `ActiveIconID`;
|
||||
|
||||
--
|
||||
-- Table structure for table `spell_shapeshift_form`
|
||||
--
|
||||
ALTER TABLE `spell_shapeshift_form`
|
||||
ADD `AttackIconFileDataID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `BonusActionBar`,
|
||||
MODIFY `CreatureDisplayID1` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `AttackIconFileDataID`,
|
||||
MODIFY `CreatureDisplayID2` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `CreatureDisplayID1`,
|
||||
MODIFY `CreatureDisplayID3` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `CreatureDisplayID2`,
|
||||
MODIFY `CreatureDisplayID4` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `CreatureDisplayID3`,
|
||||
MODIFY `PresetSpellID1` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `CreatureDisplayID4`,
|
||||
MODIFY `PresetSpellID2` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `PresetSpellID1`,
|
||||
MODIFY `PresetSpellID3` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `PresetSpellID2`,
|
||||
MODIFY `PresetSpellID4` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `PresetSpellID3`,
|
||||
MODIFY `PresetSpellID5` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `PresetSpellID4`,
|
||||
MODIFY `PresetSpellID6` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `PresetSpellID5`,
|
||||
MODIFY `PresetSpellID7` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `PresetSpellID6`,
|
||||
MODIFY `PresetSpellID8` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `PresetSpellID7`,
|
||||
DROP `AttackIconID`;
|
||||
|
||||
--
|
||||
-- Table structure for table `spell_x_spell_visual`
|
||||
--
|
||||
ALTER TABLE `spell_x_spell_visual`
|
||||
CHANGE `SpellVisualID1` `SpellVisualID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `SpellID`,
|
||||
MODIFY `ID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `SpellVisualID`,
|
||||
CHANGE `PlayerConditionID` `CasterPlayerConditionID` smallint(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `Chance`,
|
||||
ADD `CasterUnitConditionID` smallint(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `CasterPlayerConditionID`,
|
||||
ADD `PlayerConditionID` smallint(5) UNSIGNED NOT NULL DEFAULT '0' AFTER `CasterUnitConditionID`,
|
||||
ADD `IconFileDataID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `UnitConditionID`,
|
||||
ADD `ActiveIconFileDataID` int(10) UNSIGNED NOT NULL DEFAULT '0' AFTER `IconFileDataID`,
|
||||
DROP `SpellVisualID2`;
|
||||
@@ -37,8 +37,8 @@ DB2FileLoadInfo::DB2FileLoadInfo(DB2FieldMeta const* fields, std::size_t fieldCo
|
||||
uint32 DB2FileLoadInfo::GetStringFieldCount(bool localizedOnly) const
|
||||
{
|
||||
uint32 stringFields = 0;
|
||||
for (std::size_t i = 0; i < TypesString.length(); ++i)
|
||||
if (TypesString[i] == FT_STRING || (TypesString[i] == FT_STRING_NOT_LOCALIZED && !localizedOnly))
|
||||
for (char fieldType : TypesString)
|
||||
if (fieldType == FT_STRING || (fieldType == FT_STRING_NOT_LOCALIZED && !localizedOnly))
|
||||
++stringFields;
|
||||
|
||||
return stringFields;
|
||||
@@ -93,6 +93,7 @@ public:
|
||||
uint32 GetMaxId() const override;
|
||||
|
||||
private:
|
||||
void FillCommonValues(char** indexTable);
|
||||
unsigned char const* GetRawRecordData(uint32 recordNumber) const override;
|
||||
uint32 RecordGetId(unsigned char const* record, uint32 recordIndex) const override;
|
||||
uint8 RecordGetUInt8(unsigned char const* record, uint32 field, uint32 arrayIndex) const override;
|
||||
@@ -126,6 +127,7 @@ private:
|
||||
uint32 idTableSize;
|
||||
DB2RecordCopy* copyTable;
|
||||
FieldEntry* fields;
|
||||
unsigned char* commonData;
|
||||
};
|
||||
|
||||
class DB2FileLoaderSparseImpl final : public DB2FileLoaderImpl
|
||||
@@ -196,6 +198,7 @@ DB2FileLoaderRegularImpl::DB2FileLoaderRegularImpl()
|
||||
idTableSize = 0;
|
||||
copyTable = nullptr;
|
||||
fields = nullptr;
|
||||
commonData = nullptr;
|
||||
}
|
||||
|
||||
bool DB2FileLoaderRegularImpl::Load(DB2FileSource* source, DB2FileLoadInfo const* loadInfo, DB2Header const* header)
|
||||
@@ -232,6 +235,20 @@ bool DB2FileLoaderRegularImpl::Load(DB2FileSource* source, DB2FileLoadInfo const
|
||||
return false;
|
||||
}
|
||||
|
||||
if (header->CommonDataSize)
|
||||
{
|
||||
uint32 commonFieldCount;
|
||||
if (!source->Read(&commonFieldCount, sizeof(uint32)))
|
||||
return false;
|
||||
|
||||
if (commonFieldCount != header->TotalFieldCount)
|
||||
return false;
|
||||
|
||||
commonData = new unsigned char[header->CommonDataSize - sizeof(uint32)];
|
||||
if (!source->Read(commonData, header->CommonDataSize - sizeof(uint32)))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -241,13 +258,14 @@ DB2FileLoaderRegularImpl::~DB2FileLoaderRegularImpl()
|
||||
delete[] idTable;
|
||||
delete[] copyTable;
|
||||
delete[] fields;
|
||||
delete[] commonData;
|
||||
}
|
||||
|
||||
static char const* const nullStr = "";
|
||||
|
||||
char* DB2FileLoaderRegularImpl::AutoProduceData(uint32& records, char**& indexTable, std::vector<char*>& stringPool)
|
||||
{
|
||||
if (_loadInfo->Meta->FieldCount != _header->FieldCount)
|
||||
if (_loadInfo->Meta->FieldCount != _header->TotalFieldCount)
|
||||
return nullptr;
|
||||
|
||||
//get struct size and index pos
|
||||
@@ -347,14 +365,61 @@ char* DB2FileLoaderRegularImpl::AutoProduceData(uint32& records, char**& indexTa
|
||||
++fieldIndex;
|
||||
}
|
||||
}
|
||||
|
||||
for (uint32 x = _header->FieldCount; x < _header->TotalFieldCount; ++x)
|
||||
{
|
||||
for (uint32 z = 0; z < _loadInfo->Meta->ArraySizes[x]; ++z)
|
||||
{
|
||||
switch (_loadInfo->TypesString[fieldIndex])
|
||||
{
|
||||
case FT_FLOAT:
|
||||
*((float*)(&dataTable[offset])) = _loadInfo->Meta->FieldDefaults[x].AsFloat;
|
||||
offset += 4;
|
||||
break;
|
||||
case FT_INT:
|
||||
*((uint32*)(&dataTable[offset])) = _loadInfo->Meta->FieldDefaults[x].AsUInt32;
|
||||
offset += 4;
|
||||
break;
|
||||
case FT_BYTE:
|
||||
*((uint8*)(&dataTable[offset])) = _loadInfo->Meta->FieldDefaults[x].AsUInt8;
|
||||
offset += 1;
|
||||
break;
|
||||
case FT_SHORT:
|
||||
*((uint16*)(&dataTable[offset])) = _loadInfo->Meta->FieldDefaults[x].AsUInt16;
|
||||
offset += 2;
|
||||
break;
|
||||
case FT_STRING:
|
||||
case FT_STRING_NOT_LOCALIZED:
|
||||
{
|
||||
// init db2 string field slots by pointers to string holders
|
||||
char const*** slot = (char const***)(&dataTable[offset]);
|
||||
*slot = (char const**)(&stringHoldersPool[stringHoldersRecordPoolSize * y + stringFieldOffset]);
|
||||
if (_loadInfo->TypesString[fieldIndex] == FT_STRING)
|
||||
stringFieldOffset += sizeof(LocalizedString);
|
||||
else
|
||||
stringFieldOffset += sizeof(char*);
|
||||
|
||||
offset += sizeof(char*);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo->TypesString[x], fileName);
|
||||
break;
|
||||
}
|
||||
++fieldIndex;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (commonData)
|
||||
FillCommonValues(indexTable);
|
||||
|
||||
return dataTable;
|
||||
}
|
||||
|
||||
char* DB2FileLoaderRegularImpl::AutoProduceStrings(char* dataTable, uint32 locale)
|
||||
{
|
||||
if (_loadInfo->Meta->FieldCount != _header->FieldCount)
|
||||
if (_loadInfo->Meta->FieldCount != _header->TotalFieldCount)
|
||||
return nullptr;
|
||||
|
||||
if (!(_header->Locale & (1 << locale)))
|
||||
@@ -389,7 +454,7 @@ char* DB2FileLoaderRegularImpl::AutoProduceStrings(char* dataTable, uint32 local
|
||||
++fieldIndex;
|
||||
}
|
||||
|
||||
for (uint32 x = 0; x < _header->FieldCount; ++x)
|
||||
for (uint32 x = 0; x < _header->TotalFieldCount; ++x)
|
||||
{
|
||||
for (uint32 z = 0; z < _loadInfo->Meta->ArraySizes[x]; ++z)
|
||||
{
|
||||
@@ -460,6 +525,91 @@ void DB2FileLoaderRegularImpl::AutoProduceRecordCopies(uint32 records, char** in
|
||||
}
|
||||
}
|
||||
|
||||
void DB2FileLoaderRegularImpl::FillCommonValues(char** indexTable)
|
||||
{
|
||||
uint32 fieldOffset = 0;
|
||||
if (!_loadInfo->Meta->HasIndexFieldInData())
|
||||
fieldOffset += 4;
|
||||
|
||||
unsigned char* commonDataItr = commonData;
|
||||
for (uint32 field = 0; field < _header->TotalFieldCount; ++field)
|
||||
{
|
||||
uint32 numExtraValuesForField = *reinterpret_cast<uint32*>(commonDataItr);
|
||||
commonDataItr += sizeof(uint32);
|
||||
uint8 dataType = *reinterpret_cast<uint8*>(commonDataItr);
|
||||
commonDataItr += sizeof(uint8);
|
||||
for (uint32 record = 0; record < numExtraValuesForField; ++record)
|
||||
{
|
||||
uint32 recordId = *reinterpret_cast<uint32*>(commonDataItr);
|
||||
commonDataItr += sizeof(uint32);
|
||||
|
||||
char* recordData = indexTable[recordId];
|
||||
|
||||
switch (dataType)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
ASSERT(_loadInfo->Meta->Types[field] == FT_SHORT);
|
||||
uint16 value = *reinterpret_cast<uint16*>(commonDataItr);
|
||||
EndianConvert(value);
|
||||
commonDataItr += sizeof(uint16);
|
||||
for (uint32 arrayIndex = 0; arrayIndex < _loadInfo->Meta->ArraySizes[field]; ++arrayIndex)
|
||||
*reinterpret_cast<uint16*>(&recordData[fieldOffset + sizeof(uint16) * arrayIndex]) = value;
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
ASSERT(_loadInfo->Meta->Types[field] == FT_BYTE);
|
||||
uint8 value = *reinterpret_cast<uint8*>(commonDataItr);
|
||||
commonDataItr += sizeof(uint8);
|
||||
for (uint32 arrayIndex = 0; arrayIndex < _loadInfo->Meta->ArraySizes[field]; ++arrayIndex)
|
||||
*reinterpret_cast<uint8*>(&recordData[fieldOffset + sizeof(uint8) * arrayIndex]) = value;
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
ASSERT(_loadInfo->Meta->Types[field] == FT_FLOAT);
|
||||
float value = *reinterpret_cast<float*>(commonDataItr);
|
||||
EndianConvert(value);
|
||||
commonDataItr += sizeof(float);
|
||||
for (uint32 arrayIndex = 0; arrayIndex < _loadInfo->Meta->ArraySizes[field]; ++arrayIndex)
|
||||
*reinterpret_cast<float*>(&recordData[fieldOffset + sizeof(float) * arrayIndex]) = value;
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
ASSERT(_loadInfo->Meta->Types[field] == FT_INT);
|
||||
uint32 value = *reinterpret_cast<uint32*>(commonDataItr);
|
||||
EndianConvert(value);
|
||||
commonDataItr += sizeof(uint32);
|
||||
for (uint32 arrayIndex = 0; arrayIndex < _loadInfo->Meta->ArraySizes[field]; ++arrayIndex)
|
||||
*reinterpret_cast<uint32*>(&recordData[fieldOffset + sizeof(uint32) * arrayIndex]) = value;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
switch (_loadInfo->Meta->Types[field])
|
||||
{
|
||||
case FT_FLOAT:
|
||||
case FT_INT:
|
||||
fieldOffset += 4 * _loadInfo->Meta->ArraySizes[field];
|
||||
break;
|
||||
case FT_BYTE:
|
||||
fieldOffset += 1 * _loadInfo->Meta->ArraySizes[field];
|
||||
break;
|
||||
case FT_SHORT:
|
||||
fieldOffset += 2 * _loadInfo->Meta->ArraySizes[field];
|
||||
break;
|
||||
case FT_STRING:
|
||||
fieldOffset += sizeof(char*) * _loadInfo->Meta->ArraySizes[field];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DB2Record DB2FileLoaderRegularImpl::GetRecord(uint32 recordNumber) const
|
||||
{
|
||||
return DB2Record(*this, recordNumber, nullptr);
|
||||
@@ -642,7 +792,7 @@ bool DB2FileLoaderSparseImpl::Load(DB2FileSource* source, DB2FileLoadInfo const*
|
||||
char* DB2FileLoaderSparseImpl::AutoProduceData(uint32& maxId, char**& indexTable, std::vector<char*>& stringPool)
|
||||
{
|
||||
if (_loadInfo->Meta->FieldCount != _header->FieldCount)
|
||||
return NULL;
|
||||
return nullptr;
|
||||
|
||||
//get struct size and index pos
|
||||
uint32 recordsize = _loadInfo->Meta->GetRecordSize();
|
||||
@@ -1100,8 +1250,10 @@ bool DB2FileLoader::Load(DB2FileSource* source, DB2FileLoadInfo const* loadInfo)
|
||||
EndianConvert(_header.CopyTableSize);
|
||||
EndianConvert(_header.Flags);
|
||||
EndianConvert(_header.IndexField);
|
||||
EndianConvert(_header.TotalFieldCount);
|
||||
EndianConvert(_header.CommonDataSize);
|
||||
|
||||
if (_header.Signature != 0x35424457) //'WDB5'
|
||||
if (_header.Signature != 0x36424457) //'WDB6'
|
||||
return false;
|
||||
|
||||
if (_header.LayoutHash != loadInfo->Meta->LayoutHash)
|
||||
|
||||
@@ -42,6 +42,8 @@ struct DB2Header
|
||||
uint32 CopyTableSize;
|
||||
uint16 Flags;
|
||||
int16 IndexField;
|
||||
uint32 TotalFieldCount;
|
||||
uint32 CommonDataSize;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
|
||||
@@ -123,7 +125,7 @@ public:
|
||||
char* AutoProduceStrings(char* dataTable, uint32 locale);
|
||||
void AutoProduceRecordCopies(uint32 records, char** indexTable, char* dataTable);
|
||||
|
||||
uint32 GetCols() const { return _header.FieldCount; }
|
||||
uint32 GetCols() const { return _header.TotalFieldCount; }
|
||||
uint32 GetRecordCount() const;
|
||||
uint32 GetRecordCopyCount() const;
|
||||
uint32 GetTableHash() const { return _header.TableHash; }
|
||||
|
||||
@@ -18,8 +18,33 @@
|
||||
#include "DB2Meta.h"
|
||||
#include "Errors.h"
|
||||
|
||||
DB2Meta::DB2Meta(int32 indexField, uint32 fieldCount, uint32 layoutHash, char const* types, uint8 const* arraySizes)
|
||||
: IndexField(indexField), FieldCount(fieldCount), LayoutHash(layoutHash), Types(types), ArraySizes(arraySizes)
|
||||
DB2FieldDefault::DB2FieldDefault(uint8 u8)
|
||||
{
|
||||
AsUInt8 = u8;
|
||||
}
|
||||
|
||||
DB2FieldDefault::DB2FieldDefault(uint16 u16)
|
||||
{
|
||||
AsUInt16 = u16;
|
||||
}
|
||||
|
||||
DB2FieldDefault::DB2FieldDefault(uint32 u32)
|
||||
{
|
||||
AsUInt32 = u32;
|
||||
}
|
||||
|
||||
DB2FieldDefault::DB2FieldDefault(float f)
|
||||
{
|
||||
AsFloat = f;
|
||||
}
|
||||
|
||||
DB2FieldDefault::DB2FieldDefault(char const* str)
|
||||
{
|
||||
AsString = str;
|
||||
}
|
||||
|
||||
DB2Meta::DB2Meta(int32 indexField, uint32 fieldCount, uint32 layoutHash, char const* types, uint8 const* arraySizes, DB2FieldDefault const* fieldDefaults)
|
||||
: IndexField(indexField), FieldCount(fieldCount), LayoutHash(layoutHash), Types(types), ArraySizes(arraySizes), FieldDefaults(fieldDefaults)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -20,9 +20,27 @@
|
||||
|
||||
#include "Define.h"
|
||||
|
||||
struct TC_COMMON_API DB2FieldDefault
|
||||
{
|
||||
DB2FieldDefault(uint8 u8);
|
||||
DB2FieldDefault(uint16 u16);
|
||||
DB2FieldDefault(uint32 u32);
|
||||
DB2FieldDefault(float f);
|
||||
DB2FieldDefault(char const* str);
|
||||
|
||||
union
|
||||
{
|
||||
uint8 AsUInt8;
|
||||
uint16 AsUInt16;
|
||||
uint32 AsUInt32;
|
||||
float AsFloat;
|
||||
char const* AsString;
|
||||
};
|
||||
};
|
||||
|
||||
struct TC_COMMON_API DB2Meta
|
||||
{
|
||||
DB2Meta(int32 indexField, uint32 fieldCount, uint32 layoutHash, char const* types, uint8 const* arraySizes);
|
||||
DB2Meta(int32 indexField, uint32 fieldCount, uint32 layoutHash, char const* types, uint8 const* arraySizes, DB2FieldDefault const* fieldDefaults);
|
||||
|
||||
bool HasIndexFieldInData() const;
|
||||
|
||||
@@ -40,6 +58,7 @@ struct TC_COMMON_API DB2Meta
|
||||
uint32 LayoutHash;
|
||||
char const* Types;
|
||||
uint8 const* ArraySizes;
|
||||
DB2FieldDefault const* FieldDefaults;
|
||||
};
|
||||
|
||||
struct TC_COMMON_API DB2FieldMeta
|
||||
|
||||
@@ -31,8 +31,8 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
m_stmts.resize(MAX_HOTFIXDATABASE_STATEMENTS);
|
||||
|
||||
// Achievement.db2
|
||||
PrepareStatement(HOTFIX_SEL_ACHIEVEMENT, "SELECT Title, Description, Flags, Reward, MapID, Supercedes, Category, UIOrder, IconID, SharesCriteria, "
|
||||
"CriteriaTree, Faction, Points, MinimumCriteria, ID FROM achievement ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PrepareStatement(HOTFIX_SEL_ACHIEVEMENT, "SELECT Title, Description, Flags, Reward, MapID, Supercedes, Category, UIOrder, SharesCriteria, "
|
||||
"CriteriaTree, Faction, Points, MinimumCriteria, ID, IconFileDataID FROM achievement ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_ACHIEVEMENT, "SELECT ID, Title_lang, Description_lang, Reward_lang FROM achievement_locale WHERE locale = ?", CONNECTION_SYNCH);
|
||||
|
||||
// AnimKit.db2
|
||||
@@ -57,12 +57,12 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
|
||||
// Artifact.db2
|
||||
PrepareStatement(HOTFIX_SEL_ARTIFACT, "SELECT ID, Name, BarConnectedColor, BarDisconnectedColor, TitleColor, ClassUiTextureKitID, SpecID, "
|
||||
"ArtifactCategoryID, Flags FROM artifact ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
"ArtifactCategoryID, Flags, UiModelSceneID, SpellVisualKitID FROM artifact ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_ARTIFACT, "SELECT ID, Name_lang FROM artifact_locale WHERE locale = ?", CONNECTION_SYNCH);
|
||||
|
||||
// ArtifactAppearance.db2
|
||||
PrepareStatement(HOTFIX_SEL_ARTIFACT_APPEARANCE, "SELECT Name, SwatchColor, ModelDesaturation, ModelAlpha, ShapeshiftDisplayID, "
|
||||
"ArtifactAppearanceSetID, PlayerConditionID, Unknown, DisplayIndex, AppearanceModID, Flags, ModifiesShapeshiftFormDisplay, ID, "
|
||||
"ArtifactAppearanceSetID, Unknown, DisplayIndex, AppearanceModID, Flags, ModifiesShapeshiftFormDisplay, ID, PlayerConditionID, "
|
||||
"ItemAppearanceID, AltItemAppearanceID FROM artifact_appearance ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_ARTIFACT_APPEARANCE, "SELECT ID, Name_lang FROM artifact_appearance_locale WHERE locale = ?", CONNECTION_SYNCH);
|
||||
|
||||
@@ -76,7 +76,8 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
" ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// ArtifactPower.db2
|
||||
PrepareStatement(HOTFIX_SEL_ARTIFACT_POWER, "SELECT PosX, PosY, ArtifactID, Flags, MaxRank, ID, RelicType FROM artifact_power ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PrepareStatement(HOTFIX_SEL_ARTIFACT_POWER, "SELECT PosX, PosY, ArtifactID, Flags, MaxRank, ArtifactTier, ID, RelicType FROM artifact_power"
|
||||
" ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// ArtifactPowerLink.db2
|
||||
PrepareStatement(HOTFIX_SEL_ARTIFACT_POWER_LINK, "SELECT ID, FromArtifactPowerID, ToArtifactPowerID FROM artifact_power_link ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
@@ -112,17 +113,19 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
|
||||
// BattlePetSpecies.db2
|
||||
PrepareStatement(HOTFIX_SEL_BATTLE_PET_SPECIES, "SELECT CreatureID, IconFileID, SummonSpellID, SourceText, Description, Flags, PetType, Source, "
|
||||
"ID FROM battle_pet_species ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
"ID, CardModelSceneID, LoadoutModelSceneID FROM battle_pet_species ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_BATTLE_PET_SPECIES, "SELECT ID, SourceText_lang, Description_lang FROM battle_pet_species_locale WHERE locale = ?", CONNECTION_SYNCH);
|
||||
|
||||
// BattlePetSpeciesState.db2
|
||||
PrepareStatement(HOTFIX_SEL_BATTLE_PET_SPECIES_STATE, "SELECT ID, Value, SpeciesID, State FROM battle_pet_species_state ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// BattlemasterList.db2
|
||||
PrepareStatement(HOTFIX_SEL_BATTLEMASTER_LIST, "SELECT ID, Name, IconFileDataID, GameType, MapID1, MapID2, MapID3, MapID4, MapID5, MapID6, "
|
||||
"MapID7, MapID8, MapID9, MapID10, MapID11, MapID12, MapID13, MapID14, MapID15, MapID16, HolidayWorldState, PlayerConditionID, InstanceType, "
|
||||
"GroupsAllowed, MaxGroupSize, MinLevel, MaxLevel, RatedPlayers, MinPlayers, MaxPlayers, Flags FROM battlemaster_list ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_BATTLEMASTER_LIST, "SELECT ID, Name_lang, GameType_lang FROM battlemaster_list_locale WHERE locale = ?", CONNECTION_SYNCH);
|
||||
PrepareStatement(HOTFIX_SEL_BATTLEMASTER_LIST, "SELECT ID, Name, IconFileDataID, GameType, ShortDescription, LongDescription, MapID1, MapID2, "
|
||||
"MapID3, MapID4, MapID5, MapID6, MapID7, MapID8, MapID9, MapID10, MapID11, MapID12, MapID13, MapID14, MapID15, MapID16, HolidayWorldState, "
|
||||
"PlayerConditionID, InstanceType, GroupsAllowed, MaxGroupSize, MinLevel, MaxLevel, RatedPlayers, MinPlayers, MaxPlayers, Flags"
|
||||
" FROM battlemaster_list ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_BATTLEMASTER_LIST, "SELECT ID, Name_lang, GameType_lang, ShortDescription_lang, LongDescription_lang"
|
||||
" FROM battlemaster_list_locale WHERE locale = ?", CONNECTION_SYNCH);
|
||||
|
||||
// BroadcastText.db2
|
||||
PrepareStatement(HOTFIX_SEL_BROADCAST_TEXT, "SELECT ID, MaleText, FemaleText, EmoteID1, EmoteID2, EmoteID3, EmoteDelay1, EmoteDelay2, "
|
||||
@@ -159,20 +162,19 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
PrepareStatement(HOTFIX_SEL_CHR_RACES, "SELECT ID, Flags, ClientPrefix, ClientFileString, Name, NameFemale, NameMale, FacialHairCustomization1, "
|
||||
"FacialHairCustomization2, HairCustomization, CreateScreenFileDataID, SelectScreenFileDataID, MaleCustomizeOffset1, MaleCustomizeOffset2, "
|
||||
"MaleCustomizeOffset3, FemaleCustomizeOffset1, FemaleCustomizeOffset2, FemaleCustomizeOffset3, LowResScreenFileDataID, FactionID, "
|
||||
"ExplorationSoundID, MaleDisplayID, FemaleDisplayID, ResSicknessSpellID, SplashSoundID, CinematicSequenceID, UAMaleCreatureSoundDataID, "
|
||||
"UAFemaleCreatureSoundDataID, BaseLanguage, CreatureType, TeamID, RaceRelated, UnalteredVisualRaceID, CharComponentTextureLayoutID, "
|
||||
"DefaultClassID, NeutralRaceID, ItemAppearanceFrameRaceID, CharComponentTexLayoutHiResID, HighResMaleDisplayID, HighResFemaleDisplayID, Unk1, "
|
||||
"Unk2, Unk3 FROM chr_races ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
"MaleDisplayID, FemaleDisplayID, ResSicknessSpellID, SplashSoundID, CinematicSequenceID, BaseLanguage, CreatureType, TeamID, RaceRelated, "
|
||||
"UnalteredVisualRaceID, CharComponentTextureLayoutID, DefaultClassID, NeutralRaceID, ItemAppearanceFrameRaceID, "
|
||||
"CharComponentTexLayoutHiResID, HighResMaleDisplayID, HighResFemaleDisplayID, Unk1, Unk2, Unk3 FROM chr_races ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_CHR_RACES, "SELECT ID, Name_lang, NameFemale_lang, NameMale_lang FROM chr_races_locale WHERE locale = ?", CONNECTION_SYNCH);
|
||||
|
||||
// ChrSpecialization.db2
|
||||
PrepareStatement(HOTFIX_SEL_CHR_SPECIALIZATION, "SELECT MasterySpellID1, MasterySpellID2, Name, Name2, Description, SpellIconID, ClassID, "
|
||||
"OrderIndex, PetTalentType, Role, PrimaryStatOrder, ID, Flags, AnimReplacementSetID FROM chr_specialization ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PrepareStatement(HOTFIX_SEL_CHR_SPECIALIZATION, "SELECT MasterySpellID1, MasterySpellID2, Name, Name2, Description, ClassID, OrderIndex, "
|
||||
"PetTalentType, Role, PrimaryStatOrder, ID, IconFileDataID, Flags, AnimReplacementSetID FROM chr_specialization ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_CHR_SPECIALIZATION, "SELECT ID, Name_lang, Name2_lang, Description_lang FROM chr_specialization_locale"
|
||||
" WHERE locale = ?", CONNECTION_SYNCH);
|
||||
|
||||
// CinematicCamera.db2
|
||||
PrepareStatement(HOTFIX_SEL_CINEMATIC_CAMERA, "SELECT ID, Model, OriginX, OriginY, OriginZ, OriginFacing, SoundID FROM cinematic_camera"
|
||||
PrepareStatement(HOTFIX_SEL_CINEMATIC_CAMERA, "SELECT ID, SoundID, OriginX, OriginY, OriginZ, OriginFacing, ModelFileDataID FROM cinematic_camera"
|
||||
" ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// CinematicSequences.db2
|
||||
@@ -180,10 +182,10 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
" FROM cinematic_sequences ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// CreatureDisplayInfo.db2
|
||||
PrepareStatement(HOTFIX_SEL_CREATURE_DISPLAY_INFO, "SELECT ID, ExtendedDisplayInfoID, CreatureModelScale, PlayerModelScale, TextureVariation1, "
|
||||
"TextureVariation2, TextureVariation3, PortraitTextureName, PortraitCreatureDisplayInfoID, CreatureGeosetData, StateSpellVisualKitID, "
|
||||
"InstanceOtherPlayerPetScale, ModelID, SoundID, NPCSoundID, ParticleColorID, ObjectEffectPackageID, AnimReplacementSetID, CreatureModelAlpha, "
|
||||
"SizeClass, BloodID, Flags, Gender, Unk700 FROM creature_display_info ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PrepareStatement(HOTFIX_SEL_CREATURE_DISPLAY_INFO, "SELECT ID, CreatureModelScale, ModelID, NPCSoundID, SizeClass, Flags, Gender, "
|
||||
"ExtendedDisplayInfoID, TextureVariation1, TextureVariation2, TextureVariation3, PortraitTextureFileDataID, CreatureModelAlpha, SoundID, "
|
||||
"PlayerModelScale, PortraitCreatureDisplayInfoID, BloodID, ParticleColorID, CreatureGeosetData, ObjectEffectPackageID, AnimReplacementSetID, "
|
||||
"UnarmedWeaponSubclass, StateSpellVisualKitID, InstanceOtherPlayerPetScale, MountSpellVisualKitID FROM creature_display_info ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// CreatureDisplayInfoExtra.db2
|
||||
PrepareStatement(HOTFIX_SEL_CREATURE_DISPLAY_INFO_EXTRA, "SELECT ID, FileDataID, HDFileDataID, DisplayRaceID, DisplaySexID, DisplayClassID, "
|
||||
@@ -191,8 +193,8 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
" FROM creature_display_info_extra ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// CreatureFamily.db2
|
||||
PrepareStatement(HOTFIX_SEL_CREATURE_FAMILY, "SELECT ID, MinScale, MaxScale, Name, IconFile, SkillLine1, SkillLine2, PetFoodMask, MinScaleLevel, "
|
||||
"MaxScaleLevel, PetTalentType FROM creature_family ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PrepareStatement(HOTFIX_SEL_CREATURE_FAMILY, "SELECT ID, MinScale, MaxScale, Name, IconFileDataID, SkillLine1, SkillLine2, PetFoodMask, "
|
||||
"MinScaleLevel, MaxScaleLevel, PetTalentType FROM creature_family ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_CREATURE_FAMILY, "SELECT ID, Name_lang FROM creature_family_locale WHERE locale = ?", CONNECTION_SYNCH);
|
||||
|
||||
// CreatureModelData.db2
|
||||
@@ -211,7 +213,7 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
"StartEvent, FailEvent, Flags, EligibilityWorldStateValue FROM criteria ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// CriteriaTree.db2
|
||||
PrepareStatement(HOTFIX_SEL_CRITERIA_TREE, "SELECT ID, CriteriaID, Amount, Description, Parent, Flags, Operator, OrderIndex FROM criteria_tree"
|
||||
PrepareStatement(HOTFIX_SEL_CRITERIA_TREE, "SELECT ID, Amount, Description, Parent, Flags, Operator, CriteriaID, OrderIndex FROM criteria_tree"
|
||||
" ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_CRITERIA_TREE, "SELECT ID, Description_lang FROM criteria_tree_locale WHERE locale = ?", CONNECTION_SYNCH);
|
||||
|
||||
@@ -235,14 +237,14 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
" FROM destructible_model_data ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// Difficulty.db2
|
||||
PrepareStatement(HOTFIX_SEL_DIFFICULTY, "SELECT ID, Name, FallbackDifficultyID, InstanceType, MinPlayers, MaxPlayers, OldEnumValue, Flags, "
|
||||
"ToggleDifficultyID, GroupSizeHealthCurveID, GroupSizeDmgCurveID, GroupSizeSpellPointsCurveID, ItemBonusTreeModID, OrderIndex FROM difficulty"
|
||||
" ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PrepareStatement(HOTFIX_SEL_DIFFICULTY, "SELECT ID, Name, GroupSizeHealthCurveID, GroupSizeDmgCurveID, GroupSizeSpellPointsCurveID, "
|
||||
"FallbackDifficultyID, InstanceType, MinPlayers, MaxPlayers, OldEnumValue, Flags, ToggleDifficultyID, ItemBonusTreeModID, OrderIndex"
|
||||
" FROM difficulty ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_DIFFICULTY, "SELECT ID, Name_lang FROM difficulty_locale WHERE locale = ?", CONNECTION_SYNCH);
|
||||
|
||||
// DungeonEncounter.db2
|
||||
PrepareStatement(HOTFIX_SEL_DUNGEON_ENCOUNTER, "SELECT ID, Name, CreatureDisplayID, MapID, SpellIconID, DifficultyID, Bit, Flags, OrderIndex"
|
||||
" FROM dungeon_encounter ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PrepareStatement(HOTFIX_SEL_DUNGEON_ENCOUNTER, "SELECT Name, CreatureDisplayID, MapID, DifficultyID, Bit, Flags, ID, OrderIndex, "
|
||||
"TextureFileDataID FROM dungeon_encounter ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_DUNGEON_ENCOUNTER, "SELECT ID, Name_lang FROM dungeon_encounter_locale WHERE locale = ?", CONNECTION_SYNCH);
|
||||
|
||||
// DurabilityCosts.db2
|
||||
@@ -272,7 +274,7 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
"ReputationBase1, ReputationBase2, ReputationBase3, ReputationBase4, ParentFactionModIn, ParentFactionModOut, Name, Description, "
|
||||
"ReputationMax1, ReputationMax2, ReputationMax3, ReputationMax4, ReputationIndex, ReputationClassMask1, ReputationClassMask2, "
|
||||
"ReputationClassMask3, ReputationClassMask4, ReputationFlags1, ReputationFlags2, ReputationFlags3, ReputationFlags4, ParentFactionID, "
|
||||
"ParentFactionCapIn, ParentFactionCapOut, Expansion, Flags, FriendshipRepID FROM faction ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
"ParagonFactionID, ParentFactionCapIn, ParentFactionCapOut, Expansion, Flags, FriendshipRepID FROM faction ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_FACTION, "SELECT ID, Name_lang, Description_lang FROM faction_locale WHERE locale = ?", CONNECTION_SYNCH);
|
||||
|
||||
// FactionTemplate.db2
|
||||
@@ -314,11 +316,12 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
|
||||
// GarrFollower.db2
|
||||
PrepareStatement(HOTFIX_SEL_GARR_FOLLOWER, "SELECT HordeCreatureID, AllianceCreatureID, HordeSourceText, AllianceSourceText, HordePortraitIconID, "
|
||||
"AlliancePortraitIconID, HordeAddedBroadcastTextID, AllianceAddedBroadcastTextID, HordeGarrFollItemSetID, AllianceGarrFollItemSetID, "
|
||||
"AlliancePortraitIconID, HordeAddedBroadcastTextID, AllianceAddedBroadcastTextID, Name, HordeGarrFollItemSetID, AllianceGarrFollItemSetID, "
|
||||
"ItemLevelWeapon, ItemLevelArmor, HordeListPortraitTextureKitID, AllianceListPortraitTextureKitID, FollowerTypeID, HordeUiAnimRaceInfoID, "
|
||||
"AllianceUiAnimRaceInfoID, Quality, HordeGarrClassSpecID, AllianceGarrClassSpecID, Level, Unknown1, Flags, Unknown2, Unknown3, GarrTypeID, "
|
||||
"MaxDurability, Class, HordeFlavorTextGarrStringID, AllianceFlavorTextGarrStringID, ID FROM garr_follower ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_GARR_FOLLOWER, "SELECT ID, HordeSourceText_lang, AllianceSourceText_lang FROM garr_follower_locale WHERE locale = ?", CONNECTION_SYNCH);
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_GARR_FOLLOWER, "SELECT ID, HordeSourceText_lang, AllianceSourceText_lang, Name_lang FROM garr_follower_locale"
|
||||
" WHERE locale = ?", CONNECTION_SYNCH);
|
||||
|
||||
// GarrFollowerXAbility.db2
|
||||
PrepareStatement(HOTFIX_SEL_GARR_FOLLOWER_X_ABILITY, "SELECT ID, GarrFollowerID, GarrAbilityID, FactionIndex FROM garr_follower_x_ability"
|
||||
@@ -337,8 +340,8 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_GARR_PLOT_INSTANCE, "SELECT ID, Name_lang FROM garr_plot_instance_locale WHERE locale = ?", CONNECTION_SYNCH);
|
||||
|
||||
// GarrSiteLevel.db2
|
||||
PrepareStatement(HOTFIX_SEL_GARR_SITE_LEVEL, "SELECT ID, TownHallX, TownHallY, MapID, SiteID, UpgradeResourceCost, UpgradeMoneyCost, Level, "
|
||||
"UITextureKitID, MovieID, Level2 FROM garr_site_level ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PrepareStatement(HOTFIX_SEL_GARR_SITE_LEVEL, "SELECT ID, TownHallX, TownHallY, MapID, SiteID, MovieID, UpgradeResourceCost, UpgradeMoneyCost, "
|
||||
"Level, UITextureKitID, Level2 FROM garr_site_level ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// GarrSiteLevelPlotInst.db2
|
||||
PrepareStatement(HOTFIX_SEL_GARR_SITE_LEVEL_PLOT_INST, "SELECT ID, LandmarkX, LandmarkY, GarrSiteLevelID, GarrPlotInstanceID, Unknown"
|
||||
@@ -378,7 +381,7 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
PrepareStatement(HOTFIX_SEL_HOLIDAYS, "SELECT ID, Date1, Date2, Date3, Date4, Date5, Date6, Date7, Date8, Date9, Date10, Date11, Date12, Date13, "
|
||||
"Date14, Date15, Date16, TextureFilename, Duration1, Duration2, Duration3, Duration4, Duration5, Duration6, Duration7, Duration8, Duration9, "
|
||||
"Duration10, Region, Looping, CalendarFlags1, CalendarFlags2, CalendarFlags3, CalendarFlags4, CalendarFlags5, CalendarFlags6, CalendarFlags7, "
|
||||
"CalendarFlags8, CalendarFlags9, CalendarFlags10, HolidayNameID, HolidayDescriptionID, Priority, CalendarFilterType, Flags FROM holidays"
|
||||
"CalendarFlags8, CalendarFlags9, CalendarFlags10, Priority, CalendarFilterType, Flags, HolidayNameID, HolidayDescriptionID FROM holidays"
|
||||
" ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// ImportPriceArmor.db2
|
||||
@@ -424,8 +427,8 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
PrepareStatement(HOTFIX_SEL_ITEM_BONUS_LIST_LEVEL_DELTA, "SELECT Delta, ID FROM item_bonus_list_level_delta ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// ItemBonusTreeNode.db2
|
||||
PrepareStatement(HOTFIX_SEL_ITEM_BONUS_TREE_NODE, "SELECT ID, BonusTreeID, SubTreeID, BonusListID, BonusTreeModID FROM item_bonus_tree_node"
|
||||
" ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PrepareStatement(HOTFIX_SEL_ITEM_BONUS_TREE_NODE, "SELECT ID, BonusTreeID, SubTreeID, BonusListID, ItemLevelSelectorID, BonusTreeModID"
|
||||
" FROM item_bonus_tree_node ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// ItemChildEquipment.db2
|
||||
PrepareStatement(HOTFIX_SEL_ITEM_CHILD_EQUIPMENT, "SELECT ID, ItemID, AltItemID, AltEquipmentSlot FROM item_child_equipment ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
@@ -509,20 +512,20 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
PrepareStatement(HOTFIX_SEL_ITEM_SET_SPELL, "SELECT ID, SpellID, ItemSetID, ChrSpecID, Threshold FROM item_set_spell ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// ItemSparse.db2
|
||||
PrepareStatement(HOTFIX_SEL_ITEM_SPARSE, "SELECT ID, Flags1, Flags2, Flags3, Unk1, Unk2, BuyPrice, SellPrice, AllowableClass, AllowableRace, "
|
||||
PrepareStatement(HOTFIX_SEL_ITEM_SPARSE, "SELECT ID, Flags1, Flags2, Flags3, Unk1, Unk2, BuyCount, BuyPrice, SellPrice, AllowableRace, "
|
||||
"RequiredSpell, MaxCount, Stackable, ItemStatAllocation1, ItemStatAllocation2, ItemStatAllocation3, ItemStatAllocation4, ItemStatAllocation5, "
|
||||
"ItemStatAllocation6, ItemStatAllocation7, ItemStatAllocation8, ItemStatAllocation9, ItemStatAllocation10, ItemStatSocketCostMultiplier1, "
|
||||
"ItemStatSocketCostMultiplier2, ItemStatSocketCostMultiplier3, ItemStatSocketCostMultiplier4, ItemStatSocketCostMultiplier5, "
|
||||
"ItemStatSocketCostMultiplier6, ItemStatSocketCostMultiplier7, ItemStatSocketCostMultiplier8, ItemStatSocketCostMultiplier9, "
|
||||
"ItemStatSocketCostMultiplier10, RangedModRange, Name, Name2, Name3, Name4, Description, BagFamily, ArmorDamageModifier, Duration, "
|
||||
"StatScalingFactor, ItemLevel, RequiredSkill, RequiredSkillRank, RequiredReputationFaction, ItemStatValue1, ItemStatValue2, ItemStatValue3, "
|
||||
"ItemStatValue4, ItemStatValue5, ItemStatValue6, ItemStatValue7, ItemStatValue8, ItemStatValue9, ItemStatValue10, ScalingStatDistribution, "
|
||||
"Delay, PageText, StartQuest, LockID, RandomProperty, RandomSuffix, ItemSet, Area, Map, SocketBonus, GemProperties, ItemLimitCategory, "
|
||||
"HolidayID, ItemNameDescriptionID, Quality, BuyCount, InventoryType, RequiredLevel, RequiredHonorRank, RequiredCityRank, "
|
||||
"RequiredReputationRank, ContainerSlots, ItemStatType1, ItemStatType2, ItemStatType3, ItemStatType4, ItemStatType5, ItemStatType6, "
|
||||
"ItemStatType7, ItemStatType8, ItemStatType9, ItemStatType10, DamageType, Bonding, LanguageID, PageMaterial, Material, Sheath, TotemCategory, "
|
||||
"SocketColor1, SocketColor2, SocketColor3, CurrencySubstitutionID, CurrencySubstitutionCount, ArtifactID, RequiredExpansion FROM item_sparse"
|
||||
" ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
"StatScalingFactor, AllowableClass, ItemLevel, RequiredSkill, RequiredSkillRank, RequiredReputationFaction, ItemStatValue1, ItemStatValue2, "
|
||||
"ItemStatValue3, ItemStatValue4, ItemStatValue5, ItemStatValue6, ItemStatValue7, ItemStatValue8, ItemStatValue9, ItemStatValue10, "
|
||||
"ScalingStatDistribution, Delay, PageText, StartQuest, LockID, RandomProperty, RandomSuffix, ItemSet, Area, Map, TotemCategory, SocketBonus, "
|
||||
"GemProperties, ItemLimitCategory, HolidayID, RequiredTransmogHolidayID, ItemNameDescriptionID, Quality, InventoryType, RequiredLevel, "
|
||||
"RequiredHonorRank, RequiredCityRank, RequiredReputationRank, ContainerSlots, ItemStatType1, ItemStatType2, ItemStatType3, ItemStatType4, "
|
||||
"ItemStatType5, ItemStatType6, ItemStatType7, ItemStatType8, ItemStatType9, ItemStatType10, DamageType, Bonding, LanguageID, PageMaterial, "
|
||||
"Material, Sheath, SocketColor1, SocketColor2, SocketColor3, CurrencySubstitutionID, CurrencySubstitutionCount, ArtifactID, "
|
||||
"RequiredExpansion FROM item_sparse ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_ITEM_SPARSE, "SELECT ID, Name_lang, Name2_lang, Name3_lang, Name4_lang, Description_lang FROM item_sparse_locale"
|
||||
" WHERE locale = ?", CONNECTION_SYNCH);
|
||||
|
||||
@@ -546,8 +549,8 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
" ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// LfgDungeons.db2
|
||||
PrepareStatement(HOTFIX_SEL_LFG_DUNGEONS, "SELECT Name, Flags, TextureFilename, Description, PlayerConditionID, MinItemLevel, MaxLevel, "
|
||||
"TargetLevelMax, MapID, RandomID, ScenarioID, LastBossJournalEncounterID, BonusReputationAmount, MentorItemLevel, MinLevel, TargetLevel, "
|
||||
PrepareStatement(HOTFIX_SEL_LFG_DUNGEONS, "SELECT Name, Flags, TextureFilename, Description, MinItemLevel, MaxLevel, TargetLevelMax, MapID, "
|
||||
"RandomID, ScenarioID, LastBossJournalEncounterID, BonusReputationAmount, MentorItemLevel, PlayerConditionID, MinLevel, TargetLevel, "
|
||||
"TargetLevelMin, DifficultyID, Type, Faction, Expansion, OrderIndex, GroupID, CountTank, CountHealer, CountDamage, MinCountTank, "
|
||||
"MinCountHealer, MinCountDamage, SubType, MentorCharLevel, ID FROM lfg_dungeons ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_LFG_DUNGEONS, "SELECT ID, Name_lang, Description_lang FROM lfg_dungeons_locale WHERE locale = ?", CONNECTION_SYNCH);
|
||||
@@ -575,9 +578,10 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
|
||||
// Map.db2
|
||||
PrepareStatement(HOTFIX_SEL_MAP, "SELECT ID, Directory, Flags1, Flags2, MinimapIconScale, CorpsePosX, CorpsePosY, MapName, MapDescription0, "
|
||||
"MapDescription1, AreaTableID, LoadingScreenID, CorpseMapID, TimeOfDayOverride, ParentMapID, CosmeticParentMapID, WindSettingsID, "
|
||||
"InstanceType, unk5, ExpansionID, MaxPlayers, TimeOffset FROM map ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_MAP, "SELECT ID, MapName_lang, MapDescription0_lang, MapDescription1_lang FROM map_locale WHERE locale = ?", CONNECTION_SYNCH);
|
||||
"MapDescription1, ShortDescription, LongDescription, AreaTableID, LoadingScreenID, CorpseMapID, TimeOfDayOverride, ParentMapID, "
|
||||
"CosmeticParentMapID, WindSettingsID, InstanceType, unk5, ExpansionID, MaxPlayers, TimeOffset FROM map ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_MAP, "SELECT ID, MapName_lang, MapDescription0_lang, MapDescription1_lang, ShortDescription_lang, "
|
||||
"LongDescription_lang FROM map_locale WHERE locale = ?", CONNECTION_SYNCH);
|
||||
|
||||
// MapDifficulty.db2
|
||||
PrepareStatement(HOTFIX_SEL_MAP_DIFFICULTY, "SELECT ID, Message, MapID, DifficultyID, RaidDurationType, MaxPlayers, LockID, ItemBonusTreeModID, "
|
||||
@@ -588,8 +592,8 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
PrepareStatement(HOTFIX_SEL_MODIFIER_TREE, "SELECT ID, Asset1, Asset2, Parent, Type, Unk700, Operator, Amount FROM modifier_tree ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// Mount.db2
|
||||
PrepareStatement(HOTFIX_SEL_MOUNT, "SELECT SpellId, DisplayId, Name, Description, SourceDescription, CameraPivotMultiplier, MountTypeId, Flags, "
|
||||
"PlayerConditionId, Source, ID FROM mount ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PrepareStatement(HOTFIX_SEL_MOUNT, "SELECT SpellId, Name, Description, SourceDescription, CameraPivotMultiplier, MountTypeId, Flags, Source, ID, "
|
||||
"PlayerConditionId, UiModelSceneID FROM mount ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_MOUNT, "SELECT ID, Name_lang, Description_lang, SourceDescription_lang FROM mount_locale WHERE locale = ?", CONNECTION_SYNCH);
|
||||
|
||||
// MountCapability.db2
|
||||
@@ -600,6 +604,9 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
PrepareStatement(HOTFIX_SEL_MOUNT_TYPE_X_CAPABILITY, "SELECT ID, MountTypeID, MountCapabilityID, OrderIndex FROM mount_type_x_capability"
|
||||
" ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// MountXDisplay.db2
|
||||
PrepareStatement(HOTFIX_SEL_MOUNT_X_DISPLAY, "SELECT ID, MountID, DisplayID, PlayerConditionID FROM mount_x_display ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// Movie.db2
|
||||
PrepareStatement(HOTFIX_SEL_MOVIE, "SELECT ID, AudioFileDataID, SubtitleFileDataID, Volume, KeyID FROM movie ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
@@ -642,7 +649,7 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
"MinFactionID2, MinFactionID3, SpellID1, SpellID2, SpellID3, SpellID4, ItemID1, ItemID2, ItemID3, ItemID4, ItemCount1, ItemCount2, "
|
||||
"ItemCount3, ItemCount4, LfgLogic, LfgValue1, LfgValue2, LfgValue3, LfgValue4, CurrencyLogic, CurrencyID1, CurrencyID2, CurrencyID3, "
|
||||
"CurrencyID4, QuestKillMonster1, QuestKillMonster2, QuestKillMonster3, QuestKillMonster4, QuestKillMonster5, QuestKillMonster6, PhaseGroupID, "
|
||||
"MinAvgItemLevel, MaxAvgItemLevel, Unknown7001, Unknown7002 FROM player_condition ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
"MinAvgItemLevel, MaxAvgItemLevel, MovementFlags1, MovementFlags2, MainHandItemSubclassMask FROM player_condition ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_PLAYER_CONDITION, "SELECT ID, FailureDescription_lang FROM player_condition_locale WHERE locale = ?", CONNECTION_SYNCH);
|
||||
|
||||
// PowerDisplay.db2
|
||||
@@ -665,7 +672,7 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
" FROM quest_money_reward ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// QuestPackageItem.db2
|
||||
PrepareStatement(HOTFIX_SEL_QUEST_PACKAGE_ITEM, "SELECT ID, ItemID, QuestPackageID, ItemCount, FilterType FROM quest_package_item ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PrepareStatement(HOTFIX_SEL_QUEST_PACKAGE_ITEM, "SELECT ID, ItemID, QuestPackageID, FilterType, ItemCount FROM quest_package_item ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// QuestSort.db2
|
||||
PrepareStatement(HOTFIX_SEL_QUEST_SORT, "SELECT ID, SortName, SortOrder FROM quest_sort ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
@@ -706,14 +713,14 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
PrepareStatement(HOTFIX_SEL_SCENE_SCRIPT_PACKAGE, "SELECT ID, Name FROM scene_script_package ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// SkillLine.db2
|
||||
PrepareStatement(HOTFIX_SEL_SKILL_LINE, "SELECT ID, DisplayName, Description, AlternateVerb, SpellIconID, Flags, CategoryID, CanLink, "
|
||||
PrepareStatement(HOTFIX_SEL_SKILL_LINE, "SELECT ID, DisplayName, Description, AlternateVerb, Flags, CategoryID, CanLink, IconFileDataID, "
|
||||
"ParentSkillLineID FROM skill_line ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_SKILL_LINE, "SELECT ID, DisplayName_lang, Description_lang, AlternateVerb_lang FROM skill_line_locale"
|
||||
" WHERE locale = ?", CONNECTION_SYNCH);
|
||||
|
||||
// SkillLineAbility.db2
|
||||
PrepareStatement(HOTFIX_SEL_SKILL_LINE_ABILITY, "SELECT ID, SpellID, RaceMask, SupercedesSpell, Unknown703, SkillLine, MinSkillLineRank, "
|
||||
"TrivialSkillLineRankHigh, TrivialSkillLineRankLow, UniqueBit, TradeSkillCategoryID, AcquireMethod, NumSkillUps, ClassMask"
|
||||
PrepareStatement(HOTFIX_SEL_SKILL_LINE_ABILITY, "SELECT ID, SpellID, RaceMask, SupercedesSpell, SkillLine, MinSkillLineRank, "
|
||||
"TrivialSkillLineRankHigh, TrivialSkillLineRankLow, UniqueBit, TradeSkillCategoryID, AcquireMethod, NumSkillUps, Unknown703, ClassMask"
|
||||
" FROM skill_line_ability ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// SkillRaceClassInfo.db2
|
||||
@@ -774,11 +781,11 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
PrepareStatement(HOTFIX_SEL_SPELL_DURATION, "SELECT ID, Duration, MaxDuration, DurationPerLevel FROM spell_duration ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// SpellEffect.db2
|
||||
PrepareStatement(HOTFIX_SEL_SPELL_EFFECT, "SELECT EffectAmplitude, EffectBonusCoefficient, EffectChainAmplitude, EffectPointsPerResource, "
|
||||
"EffectRealPointsPerLevel, EffectSpellClassMask1, EffectSpellClassMask2, EffectSpellClassMask3, EffectSpellClassMask4, EffectPosFacing, "
|
||||
"BonusCoefficientFromAP, ID, DifficultyID, Effect, EffectAura, EffectAuraPeriod, EffectBasePoints, EffectChainTargets, EffectDieSides, "
|
||||
"EffectItemType, EffectMechanic, EffectMiscValue, EffectMiscValueB, EffectRadiusIndex, EffectRadiusMaxIndex, EffectTriggerSpell, "
|
||||
"ImplicitTarget1, ImplicitTarget2, SpellID, EffectIndex, EffectAttributes FROM spell_effect ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PrepareStatement(HOTFIX_SEL_SPELL_EFFECT, "SELECT EffectSpellClassMask1, EffectSpellClassMask2, EffectSpellClassMask3, EffectSpellClassMask4, ID, "
|
||||
"SpellID, Effect, EffectAura, EffectBasePoints, EffectIndex, EffectMiscValue, EffectMiscValueB, EffectRadiusIndex, EffectRadiusMaxIndex, "
|
||||
"ImplicitTarget1, ImplicitTarget2, DifficultyID, EffectAmplitude, EffectAuraPeriod, EffectBonusCoefficient, EffectChainAmplitude, "
|
||||
"EffectChainTargets, EffectDieSides, EffectItemType, EffectMechanic, EffectPointsPerResource, EffectRealPointsPerLevel, EffectTriggerSpell, "
|
||||
"EffectPosFacing, EffectAttributes, BonusCoefficientFromAP, PvPMultiplier FROM spell_effect ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// SpellEffectScaling.db2
|
||||
PrepareStatement(HOTFIX_SEL_SPELL_EFFECT_SCALING, "SELECT ID, Coefficient, Variance, ResourceCoefficient, SpellEffectID FROM spell_effect_scaling"
|
||||
@@ -819,7 +826,8 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
// SpellMisc.db2
|
||||
PrepareStatement(HOTFIX_SEL_SPELL_MISC, "SELECT ID, Attributes, AttributesEx, AttributesExB, AttributesExC, AttributesExD, AttributesExE, "
|
||||
"AttributesExF, AttributesExG, AttributesExH, AttributesExI, AttributesExJ, AttributesExK, AttributesExL, AttributesExM, Speed, "
|
||||
"MultistrikeSpeedMod, CastingTimeIndex, DurationIndex, RangeIndex, SpellIconID, ActiveIconID, SchoolMask FROM spell_misc ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
"MultistrikeSpeedMod, CastingTimeIndex, DurationIndex, RangeIndex, SchoolMask, IconFileDataID, ActiveIconFileDataID FROM spell_misc"
|
||||
" ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// SpellPower.db2
|
||||
PrepareStatement(HOTFIX_SEL_SPELL_POWER, "SELECT SpellID, ManaCost, ManaCostPercentage, ManaCostPercentagePerSecond, RequiredAura, "
|
||||
@@ -858,10 +866,10 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
"StanceBarOrder FROM spell_shapeshift ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// SpellShapeshiftForm.db2
|
||||
PrepareStatement(HOTFIX_SEL_SPELL_SHAPESHIFT_FORM, "SELECT ID, Name, WeaponDamageVariance, Flags, AttackIconID, CombatRoundTime, "
|
||||
"CreatureDisplayID1, CreatureDisplayID2, CreatureDisplayID3, CreatureDisplayID4, PresetSpellID1, PresetSpellID2, PresetSpellID3, "
|
||||
"PresetSpellID4, PresetSpellID5, PresetSpellID6, PresetSpellID7, PresetSpellID8, MountTypeID, CreatureType, BonusActionBar"
|
||||
" FROM spell_shapeshift_form ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PrepareStatement(HOTFIX_SEL_SPELL_SHAPESHIFT_FORM, "SELECT ID, Name, WeaponDamageVariance, Flags, CombatRoundTime, MountTypeID, CreatureType, "
|
||||
"BonusActionBar, AttackIconFileDataID, CreatureDisplayID1, CreatureDisplayID2, CreatureDisplayID3, CreatureDisplayID4, PresetSpellID1, "
|
||||
"PresetSpellID2, PresetSpellID3, PresetSpellID4, PresetSpellID5, PresetSpellID6, PresetSpellID7, PresetSpellID8 FROM spell_shapeshift_form"
|
||||
" ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PREPARE_LOCALE_STMT(HOTFIX_SEL_SPELL_SHAPESHIFT_FORM, "SELECT ID, Name_lang FROM spell_shapeshift_form_locale WHERE locale = ?", CONNECTION_SYNCH);
|
||||
|
||||
// SpellTargetRestrictions.db2
|
||||
@@ -873,8 +881,9 @@ void HotfixDatabaseConnection::DoPrepareStatements()
|
||||
" FROM spell_totems ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// SpellXSpellVisual.db2
|
||||
PrepareStatement(HOTFIX_SEL_SPELL_X_SPELL_VISUAL, "SELECT SpellID, Chance, SpellVisualID1, SpellVisualID2, PlayerConditionID, UnitConditionID, "
|
||||
"Flags, DifficultyID, Priority, ID FROM spell_x_spell_visual ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
PrepareStatement(HOTFIX_SEL_SPELL_X_SPELL_VISUAL, "SELECT SpellID, SpellVisualID, ID, Chance, CasterPlayerConditionID, CasterUnitConditionID, "
|
||||
"PlayerConditionID, UnitConditionID, IconFileDataID, ActiveIconFileDataID, Flags, DifficultyID, Priority FROM spell_x_spell_visual"
|
||||
" ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
// SummonProperties.db2
|
||||
PrepareStatement(HOTFIX_SEL_SUMMON_PROPERTIES, "SELECT ID, Flags, Category, Faction, Type, Slot FROM summon_properties ORDER BY ID DESC", CONNECTION_SYNCH);
|
||||
|
||||
@@ -329,6 +329,8 @@ enum HotfixDatabaseStatements
|
||||
|
||||
HOTFIX_SEL_MOUNT_TYPE_X_CAPABILITY,
|
||||
|
||||
HOTFIX_SEL_MOUNT_X_DISPLAY,
|
||||
|
||||
HOTFIX_SEL_MOVIE,
|
||||
|
||||
HOTFIX_SEL_NAME_GEN,
|
||||
|
||||
@@ -508,7 +508,7 @@ bool Condition::Meets(ConditionSourceInfo& sourceInfo) const
|
||||
QuestObjective const* obj = sObjectMgr->GetQuestObjective(ConditionValue1);
|
||||
if (!obj)
|
||||
break;
|
||||
|
||||
|
||||
condMeets = (!player->GetQuestRewardStatus(obj->QuestID) && player->IsQuestObjectiveComplete(*obj));
|
||||
}
|
||||
break;
|
||||
@@ -2590,6 +2590,19 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio
|
||||
if (condition->LifetimeMaxPVPRank && player->GetByteValue(PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_LIFETIME_MAX_PVP_RANK) != condition->LifetimeMaxPVPRank)
|
||||
return false;
|
||||
|
||||
if (condition->MovementFlags[0] && !(player->GetUnitMovementFlags() & condition->MovementFlags[0]))
|
||||
return false;
|
||||
|
||||
if (condition->MovementFlags[1] && !(player->GetExtraUnitMovementFlags() & condition->MovementFlags[1]))
|
||||
return false;
|
||||
|
||||
if (condition->MainHandItemSubclassMask)
|
||||
{
|
||||
Item* mainHand = player->GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND);
|
||||
if (!mainHand || !((1 << mainHand->GetTemplate()->GetSubClass()) & condition->MainHandItemSubclassMask))
|
||||
return false;
|
||||
}
|
||||
|
||||
if (condition->PartyStatus)
|
||||
{
|
||||
Group const* group = player->GetGroup();
|
||||
|
||||
@@ -38,13 +38,13 @@ struct AchievementLoadInfo
|
||||
{ false, FT_SHORT, "Supercedes" },
|
||||
{ false, FT_SHORT, "Category" },
|
||||
{ false, FT_SHORT, "UIOrder" },
|
||||
{ false, FT_SHORT, "IconID" },
|
||||
{ false, FT_SHORT, "SharesCriteria" },
|
||||
{ false, FT_SHORT, "CriteriaTree" },
|
||||
{ true, FT_BYTE, "Faction" },
|
||||
{ false, FT_BYTE, "Points" },
|
||||
{ false, FT_BYTE, "MinimumCriteria" },
|
||||
{ false, FT_INT, "ID" },
|
||||
{ false, FT_INT, "IconFileDataID" },
|
||||
};
|
||||
static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, AchievementMeta::Instance(), HOTFIX_SEL_ACHIEVEMENT);
|
||||
return &loadInfo;
|
||||
@@ -184,6 +184,8 @@ struct ArtifactLoadInfo
|
||||
{ false, FT_SHORT, "SpecID" },
|
||||
{ false, FT_BYTE, "ArtifactCategoryID" },
|
||||
{ false, FT_BYTE, "Flags" },
|
||||
{ false, FT_INT, "UiModelSceneID" },
|
||||
{ false, FT_INT, "SpellVisualKitID" },
|
||||
};
|
||||
static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ArtifactMeta::Instance(), HOTFIX_SEL_ARTIFACT);
|
||||
return &loadInfo;
|
||||
@@ -202,13 +204,13 @@ struct ArtifactAppearanceLoadInfo
|
||||
{ false, FT_FLOAT, "ModelAlpha" },
|
||||
{ false, FT_INT, "ShapeshiftDisplayID" },
|
||||
{ false, FT_SHORT, "ArtifactAppearanceSetID" },
|
||||
{ false, FT_SHORT, "PlayerConditionID" },
|
||||
{ false, FT_SHORT, "Unknown" },
|
||||
{ false, FT_BYTE, "DisplayIndex" },
|
||||
{ false, FT_BYTE, "AppearanceModID" },
|
||||
{ false, FT_BYTE, "Flags" },
|
||||
{ false, FT_BYTE, "ModifiesShapeshiftFormDisplay" },
|
||||
{ false, FT_INT, "ID" },
|
||||
{ false, FT_INT, "PlayerConditionID" },
|
||||
{ false, FT_INT, "ItemAppearanceID" },
|
||||
{ false, FT_INT, "AltItemAppearanceID" },
|
||||
};
|
||||
@@ -264,6 +266,7 @@ struct ArtifactPowerLoadInfo
|
||||
{ false, FT_BYTE, "ArtifactID" },
|
||||
{ false, FT_BYTE, "Flags" },
|
||||
{ false, FT_BYTE, "MaxRank" },
|
||||
{ false, FT_BYTE, "ArtifactTier" },
|
||||
{ false, FT_INT, "ID" },
|
||||
{ true, FT_INT, "RelicType" },
|
||||
};
|
||||
@@ -441,6 +444,8 @@ struct BattlePetSpeciesLoadInfo
|
||||
{ false, FT_BYTE, "PetType" },
|
||||
{ true, FT_BYTE, "Source" },
|
||||
{ false, FT_INT, "ID" },
|
||||
{ false, FT_INT, "CardModelSceneID" },
|
||||
{ false, FT_INT, "LoadoutModelSceneID" },
|
||||
};
|
||||
static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, BattlePetSpeciesMeta::Instance(), HOTFIX_SEL_BATTLE_PET_SPECIES);
|
||||
return &loadInfo;
|
||||
@@ -473,6 +478,8 @@ struct BattlemasterListLoadInfo
|
||||
{ false, FT_STRING, "Name" },
|
||||
{ false, FT_INT, "IconFileDataID" },
|
||||
{ false, FT_STRING, "GameType" },
|
||||
{ false, FT_STRING, "ShortDescription" },
|
||||
{ false, FT_STRING, "LongDescription" },
|
||||
{ true, FT_SHORT, "MapID1" },
|
||||
{ true, FT_SHORT, "MapID2" },
|
||||
{ true, FT_SHORT, "MapID3" },
|
||||
@@ -704,14 +711,11 @@ struct ChrRacesLoadInfo
|
||||
{ false, FT_FLOAT, "FemaleCustomizeOffset3" },
|
||||
{ false, FT_INT, "LowResScreenFileDataID" },
|
||||
{ false, FT_SHORT, "FactionID" },
|
||||
{ false, FT_SHORT, "ExplorationSoundID" },
|
||||
{ false, FT_SHORT, "MaleDisplayID" },
|
||||
{ false, FT_SHORT, "FemaleDisplayID" },
|
||||
{ false, FT_SHORT, "ResSicknessSpellID" },
|
||||
{ false, FT_SHORT, "SplashSoundID" },
|
||||
{ false, FT_SHORT, "CinematicSequenceID" },
|
||||
{ false, FT_SHORT, "UAMaleCreatureSoundDataID" },
|
||||
{ false, FT_SHORT, "UAFemaleCreatureSoundDataID" },
|
||||
{ false, FT_BYTE, "BaseLanguage" },
|
||||
{ false, FT_BYTE, "CreatureType" },
|
||||
{ false, FT_BYTE, "TeamID" },
|
||||
@@ -744,13 +748,13 @@ struct ChrSpecializationLoadInfo
|
||||
{ false, FT_STRING, "Name" },
|
||||
{ false, FT_STRING, "Name2" },
|
||||
{ false, FT_STRING, "Description" },
|
||||
{ false, FT_SHORT, "SpellIconID" },
|
||||
{ false, FT_BYTE, "ClassID" },
|
||||
{ false, FT_BYTE, "OrderIndex" },
|
||||
{ false, FT_BYTE, "PetTalentType" },
|
||||
{ false, FT_BYTE, "Role" },
|
||||
{ false, FT_BYTE, "PrimaryStatOrder" },
|
||||
{ false, FT_INT, "ID" },
|
||||
{ false, FT_INT, "IconFileDataID" },
|
||||
{ false, FT_INT, "Flags" },
|
||||
{ false, FT_INT, "AnimReplacementSetID" },
|
||||
};
|
||||
@@ -766,12 +770,12 @@ struct CinematicCameraLoadInfo
|
||||
static DB2FieldMeta const fields[] =
|
||||
{
|
||||
{ false, FT_INT, "ID" },
|
||||
{ false, FT_STRING_NOT_LOCALIZED, "Model" },
|
||||
{ false, FT_INT, "SoundID" },
|
||||
{ false, FT_FLOAT, "OriginX" },
|
||||
{ false, FT_FLOAT, "OriginY" },
|
||||
{ false, FT_FLOAT, "OriginZ" },
|
||||
{ false, FT_FLOAT, "OriginFacing" },
|
||||
{ false, FT_SHORT, "SoundID" },
|
||||
{ false, FT_INT, "ModelFileDataID" },
|
||||
};
|
||||
static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CinematicCameraMeta::Instance(), HOTFIX_SEL_CINEMATIC_CAMERA);
|
||||
return &loadInfo;
|
||||
@@ -785,7 +789,7 @@ struct CinematicSequencesLoadInfo
|
||||
static DB2FieldMeta const fields[] =
|
||||
{
|
||||
{ false, FT_INT, "ID" },
|
||||
{ false, FT_SHORT, "SoundID" },
|
||||
{ false, FT_INT, "SoundID" },
|
||||
{ false, FT_SHORT, "Camera1" },
|
||||
{ false, FT_SHORT, "Camera2" },
|
||||
{ false, FT_SHORT, "Camera3" },
|
||||
@@ -807,29 +811,30 @@ struct CreatureDisplayInfoLoadInfo
|
||||
static DB2FieldMeta const fields[] =
|
||||
{
|
||||
{ false, FT_INT, "ID" },
|
||||
{ false, FT_INT, "ExtendedDisplayInfoID" },
|
||||
{ false, FT_FLOAT, "CreatureModelScale" },
|
||||
{ false, FT_FLOAT, "PlayerModelScale" },
|
||||
{ false, FT_SHORT, "ModelID" },
|
||||
{ false, FT_SHORT, "NPCSoundID" },
|
||||
{ false, FT_BYTE, "SizeClass" },
|
||||
{ false, FT_BYTE, "Flags" },
|
||||
{ true, FT_BYTE, "Gender" },
|
||||
{ false, FT_INT, "ExtendedDisplayInfoID" },
|
||||
{ false, FT_INT, "TextureVariation1" },
|
||||
{ false, FT_INT, "TextureVariation2" },
|
||||
{ false, FT_INT, "TextureVariation3" },
|
||||
{ false, FT_STRING_NOT_LOCALIZED, "PortraitTextureName" },
|
||||
{ false, FT_INT, "PortraitCreatureDisplayInfoID" },
|
||||
{ false, FT_INT, "CreatureGeosetData" },
|
||||
{ false, FT_INT, "StateSpellVisualKitID" },
|
||||
{ false, FT_FLOAT, "InstanceOtherPlayerPetScale" },
|
||||
{ false, FT_SHORT, "ModelID" },
|
||||
{ false, FT_INT, "PortraitTextureFileDataID" },
|
||||
{ false, FT_BYTE, "CreatureModelAlpha" },
|
||||
{ false, FT_SHORT, "SoundID" },
|
||||
{ false, FT_SHORT, "NPCSoundID" },
|
||||
{ false, FT_FLOAT, "PlayerModelScale" },
|
||||
{ false, FT_INT, "PortraitCreatureDisplayInfoID" },
|
||||
{ false, FT_BYTE, "BloodID" },
|
||||
{ false, FT_SHORT, "ParticleColorID" },
|
||||
{ false, FT_INT, "CreatureGeosetData" },
|
||||
{ false, FT_SHORT, "ObjectEffectPackageID" },
|
||||
{ false, FT_SHORT, "AnimReplacementSetID" },
|
||||
{ false, FT_BYTE, "CreatureModelAlpha" },
|
||||
{ false, FT_BYTE, "SizeClass" },
|
||||
{ false, FT_BYTE, "BloodID" },
|
||||
{ false, FT_BYTE, "Flags" },
|
||||
{ true, FT_BYTE, "Gender" },
|
||||
{ true, FT_BYTE, "Unk700" },
|
||||
{ true, FT_BYTE, "UnarmedWeaponSubclass" },
|
||||
{ false, FT_INT, "StateSpellVisualKitID" },
|
||||
{ false, FT_FLOAT, "InstanceOtherPlayerPetScale" },
|
||||
{ false, FT_INT, "MountSpellVisualKitID" },
|
||||
};
|
||||
static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CreatureDisplayInfoMeta::Instance(), HOTFIX_SEL_CREATURE_DISPLAY_INFO);
|
||||
return &loadInfo;
|
||||
@@ -873,7 +878,7 @@ struct CreatureFamilyLoadInfo
|
||||
{ false, FT_FLOAT, "MinScale" },
|
||||
{ false, FT_FLOAT, "MaxScale" },
|
||||
{ false, FT_STRING, "Name" },
|
||||
{ false, FT_STRING_NOT_LOCALIZED, "IconFile" },
|
||||
{ false, FT_INT, "IconFileDataID" },
|
||||
{ false, FT_SHORT, "SkillLine1" },
|
||||
{ false, FT_SHORT, "SkillLine2" },
|
||||
{ false, FT_SHORT, "PetFoodMask" },
|
||||
@@ -978,12 +983,12 @@ struct CriteriaTreeLoadInfo
|
||||
static DB2FieldMeta const fields[] =
|
||||
{
|
||||
{ false, FT_INT, "ID" },
|
||||
{ false, FT_INT, "CriteriaID" },
|
||||
{ false, FT_INT, "Amount" },
|
||||
{ false, FT_STRING, "Description" },
|
||||
{ false, FT_SHORT, "Parent" },
|
||||
{ false, FT_SHORT, "Flags" },
|
||||
{ false, FT_BYTE, "Operator" },
|
||||
{ false, FT_INT, "CriteriaID" },
|
||||
{ true, FT_INT, "OrderIndex" },
|
||||
};
|
||||
static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CriteriaTreeMeta::Instance(), HOTFIX_SEL_CRITERIA_TREE);
|
||||
@@ -1090,6 +1095,9 @@ struct DifficultyLoadInfo
|
||||
{
|
||||
{ false, FT_INT, "ID" },
|
||||
{ false, FT_STRING, "Name" },
|
||||
{ false, FT_SHORT, "GroupSizeHealthCurveID" },
|
||||
{ false, FT_SHORT, "GroupSizeDmgCurveID" },
|
||||
{ false, FT_SHORT, "GroupSizeSpellPointsCurveID" },
|
||||
{ false, FT_BYTE, "FallbackDifficultyID" },
|
||||
{ false, FT_BYTE, "InstanceType" },
|
||||
{ false, FT_BYTE, "MinPlayers" },
|
||||
@@ -1097,9 +1105,6 @@ struct DifficultyLoadInfo
|
||||
{ true, FT_BYTE, "OldEnumValue" },
|
||||
{ false, FT_BYTE, "Flags" },
|
||||
{ false, FT_BYTE, "ToggleDifficultyID" },
|
||||
{ false, FT_BYTE, "GroupSizeHealthCurveID" },
|
||||
{ false, FT_BYTE, "GroupSizeDmgCurveID" },
|
||||
{ false, FT_BYTE, "GroupSizeSpellPointsCurveID" },
|
||||
{ false, FT_BYTE, "ItemBonusTreeModID" },
|
||||
{ false, FT_BYTE, "OrderIndex" },
|
||||
};
|
||||
@@ -1114,15 +1119,15 @@ struct DungeonEncounterLoadInfo
|
||||
{
|
||||
static DB2FieldMeta const fields[] =
|
||||
{
|
||||
{ false, FT_INT, "ID" },
|
||||
{ false, FT_STRING, "Name" },
|
||||
{ false, FT_INT, "CreatureDisplayID" },
|
||||
{ false, FT_SHORT, "MapID" },
|
||||
{ false, FT_SHORT, "SpellIconID" },
|
||||
{ false, FT_BYTE, "DifficultyID" },
|
||||
{ false, FT_BYTE, "Bit" },
|
||||
{ false, FT_BYTE, "Flags" },
|
||||
{ false, FT_INT, "ID" },
|
||||
{ true, FT_INT, "OrderIndex" },
|
||||
{ false, FT_INT, "TextureFileDataID" },
|
||||
};
|
||||
static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, DungeonEncounterMeta::Instance(), HOTFIX_SEL_DUNGEON_ENCOUNTER);
|
||||
return &loadInfo;
|
||||
@@ -1273,6 +1278,7 @@ struct FactionLoadInfo
|
||||
{ false, FT_SHORT, "ReputationFlags3" },
|
||||
{ false, FT_SHORT, "ReputationFlags4" },
|
||||
{ false, FT_SHORT, "ParentFactionID" },
|
||||
{ false, FT_SHORT, "ParagonFactionID" },
|
||||
{ false, FT_BYTE, "ParentFactionCapIn" },
|
||||
{ false, FT_BYTE, "ParentFactionCapOut" },
|
||||
{ false, FT_BYTE, "Expansion" },
|
||||
@@ -1454,7 +1460,7 @@ struct GarrClassSpecLoadInfo
|
||||
{ false, FT_STRING, "NameFemale" },
|
||||
{ false, FT_STRING, "NameGenderless" },
|
||||
{ false, FT_SHORT, "ClassAtlasID" },
|
||||
{ false, FT_BYTE, "GarrFollItemSetID" },
|
||||
{ false, FT_SHORT, "GarrFollItemSetID" },
|
||||
{ false, FT_BYTE, "Limit" },
|
||||
{ false, FT_BYTE, "Flags" },
|
||||
{ false, FT_INT, "ID" },
|
||||
@@ -1478,6 +1484,7 @@ struct GarrFollowerLoadInfo
|
||||
{ false, FT_INT, "AlliancePortraitIconID" },
|
||||
{ false, FT_INT, "HordeAddedBroadcastTextID" },
|
||||
{ false, FT_INT, "AllianceAddedBroadcastTextID" },
|
||||
{ false, FT_STRING, "Name" },
|
||||
{ false, FT_SHORT, "HordeGarrFollItemSetID" },
|
||||
{ false, FT_SHORT, "AllianceGarrFollItemSetID" },
|
||||
{ false, FT_SHORT, "ItemLevelWeapon" },
|
||||
@@ -1585,11 +1592,11 @@ struct GarrSiteLevelLoadInfo
|
||||
{ false, FT_FLOAT, "TownHallY" },
|
||||
{ false, FT_SHORT, "MapID" },
|
||||
{ false, FT_SHORT, "SiteID" },
|
||||
{ false, FT_SHORT, "MovieID" },
|
||||
{ false, FT_SHORT, "UpgradeResourceCost" },
|
||||
{ false, FT_SHORT, "UpgradeMoneyCost" },
|
||||
{ false, FT_BYTE, "Level" },
|
||||
{ false, FT_BYTE, "UITextureKitID" },
|
||||
{ false, FT_BYTE, "MovieID" },
|
||||
{ false, FT_BYTE, "Level2" },
|
||||
};
|
||||
static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GarrSiteLevelMeta::Instance(), HOTFIX_SEL_GARR_SITE_LEVEL);
|
||||
@@ -1810,11 +1817,11 @@ struct HolidaysLoadInfo
|
||||
{ false, FT_BYTE, "CalendarFlags8" },
|
||||
{ false, FT_BYTE, "CalendarFlags9" },
|
||||
{ false, FT_BYTE, "CalendarFlags10" },
|
||||
{ false, FT_BYTE, "HolidayNameID" },
|
||||
{ false, FT_BYTE, "HolidayDescriptionID" },
|
||||
{ false, FT_BYTE, "Priority" },
|
||||
{ true, FT_BYTE, "CalendarFilterType" },
|
||||
{ false, FT_BYTE, "Flags" },
|
||||
{ false, FT_INT, "HolidayNameID" },
|
||||
{ false, FT_INT, "HolidayDescriptionID" },
|
||||
};
|
||||
static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, HolidaysMeta::Instance(), HOTFIX_SEL_HOLIDAYS);
|
||||
return &loadInfo;
|
||||
@@ -2034,6 +2041,7 @@ struct ItemBonusTreeNodeLoadInfo
|
||||
{ false, FT_SHORT, "BonusTreeID" },
|
||||
{ false, FT_SHORT, "SubTreeID" },
|
||||
{ false, FT_SHORT, "BonusListID" },
|
||||
{ false, FT_SHORT, "ItemLevelSelectorID" },
|
||||
{ false, FT_BYTE, "BonusTreeModID" },
|
||||
};
|
||||
static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemBonusTreeNodeMeta::Instance(), HOTFIX_SEL_ITEM_BONUS_TREE_NODE);
|
||||
@@ -2457,9 +2465,9 @@ struct ItemSparseLoadInfo
|
||||
{ false, FT_INT, "Flags3" },
|
||||
{ false, FT_FLOAT, "Unk1" },
|
||||
{ false, FT_FLOAT, "Unk2" },
|
||||
{ false, FT_INT, "BuyCount" },
|
||||
{ false, FT_INT, "BuyPrice" },
|
||||
{ false, FT_INT, "SellPrice" },
|
||||
{ true, FT_INT, "AllowableClass" },
|
||||
{ true, FT_INT, "AllowableRace" },
|
||||
{ false, FT_INT, "RequiredSpell" },
|
||||
{ false, FT_INT, "MaxCount" },
|
||||
@@ -2494,6 +2502,7 @@ struct ItemSparseLoadInfo
|
||||
{ false, FT_FLOAT, "ArmorDamageModifier" },
|
||||
{ false, FT_INT, "Duration" },
|
||||
{ false, FT_FLOAT, "StatScalingFactor" },
|
||||
{ true, FT_SHORT, "AllowableClass" },
|
||||
{ false, FT_SHORT, "ItemLevel" },
|
||||
{ false, FT_SHORT, "RequiredSkill" },
|
||||
{ false, FT_SHORT, "RequiredSkillRank" },
|
||||
@@ -2518,13 +2527,14 @@ struct ItemSparseLoadInfo
|
||||
{ false, FT_SHORT, "ItemSet" },
|
||||
{ false, FT_SHORT, "Area" },
|
||||
{ false, FT_SHORT, "Map" },
|
||||
{ false, FT_SHORT, "TotemCategory" },
|
||||
{ false, FT_SHORT, "SocketBonus" },
|
||||
{ false, FT_SHORT, "GemProperties" },
|
||||
{ false, FT_SHORT, "ItemLimitCategory" },
|
||||
{ false, FT_SHORT, "HolidayID" },
|
||||
{ false, FT_SHORT, "RequiredTransmogHolidayID" },
|
||||
{ false, FT_SHORT, "ItemNameDescriptionID" },
|
||||
{ false, FT_BYTE, "Quality" },
|
||||
{ false, FT_BYTE, "BuyCount" },
|
||||
{ false, FT_BYTE, "InventoryType" },
|
||||
{ true, FT_BYTE, "RequiredLevel" },
|
||||
{ false, FT_BYTE, "RequiredHonorRank" },
|
||||
@@ -2547,7 +2557,6 @@ struct ItemSparseLoadInfo
|
||||
{ false, FT_BYTE, "PageMaterial" },
|
||||
{ true, FT_BYTE, "Material" },
|
||||
{ false, FT_BYTE, "Sheath" },
|
||||
{ false, FT_BYTE, "TotemCategory" },
|
||||
{ false, FT_BYTE, "SocketColor1" },
|
||||
{ false, FT_BYTE, "SocketColor2" },
|
||||
{ false, FT_BYTE, "SocketColor3" },
|
||||
@@ -2683,7 +2692,6 @@ struct LfgDungeonsLoadInfo
|
||||
{ false, FT_INT, "Flags" },
|
||||
{ false, FT_STRING_NOT_LOCALIZED, "TextureFilename" },
|
||||
{ false, FT_STRING, "Description" },
|
||||
{ false, FT_INT, "PlayerConditionID" },
|
||||
{ false, FT_FLOAT, "MinItemLevel" },
|
||||
{ false, FT_SHORT, "MaxLevel" },
|
||||
{ false, FT_SHORT, "TargetLevelMax" },
|
||||
@@ -2693,6 +2701,7 @@ struct LfgDungeonsLoadInfo
|
||||
{ false, FT_SHORT, "LastBossJournalEncounterID" },
|
||||
{ false, FT_SHORT, "BonusReputationAmount" },
|
||||
{ false, FT_SHORT, "MentorItemLevel" },
|
||||
{ false, FT_SHORT, "PlayerConditionID" },
|
||||
{ false, FT_BYTE, "MinLevel" },
|
||||
{ false, FT_BYTE, "TargetLevel" },
|
||||
{ false, FT_BYTE, "TargetLevelMin" },
|
||||
@@ -2882,6 +2891,8 @@ struct MapLoadInfo
|
||||
{ false, FT_STRING, "MapName" },
|
||||
{ false, FT_STRING, "MapDescription0" },
|
||||
{ false, FT_STRING, "MapDescription1" },
|
||||
{ false, FT_STRING, "ShortDescription" },
|
||||
{ false, FT_STRING, "LongDescription" },
|
||||
{ false, FT_SHORT, "AreaTableID" },
|
||||
{ false, FT_SHORT, "LoadingScreenID" },
|
||||
{ true, FT_SHORT, "CorpseMapID" },
|
||||
@@ -2948,16 +2959,16 @@ struct MountLoadInfo
|
||||
static DB2FieldMeta const fields[] =
|
||||
{
|
||||
{ false, FT_INT, "SpellId" },
|
||||
{ false, FT_INT, "DisplayId" },
|
||||
{ false, FT_STRING, "Name" },
|
||||
{ false, FT_STRING, "Description" },
|
||||
{ false, FT_STRING, "SourceDescription" },
|
||||
{ false, FT_FLOAT, "CameraPivotMultiplier" },
|
||||
{ false, FT_SHORT, "MountTypeId" },
|
||||
{ false, FT_SHORT, "Flags" },
|
||||
{ false, FT_SHORT, "PlayerConditionId" },
|
||||
{ false, FT_BYTE, "Source" },
|
||||
{ false, FT_INT, "ID" },
|
||||
{ false, FT_INT, "PlayerConditionId" },
|
||||
{ true, FT_INT, "UiModelSceneID" },
|
||||
};
|
||||
static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, MountMeta::Instance(), HOTFIX_SEL_MOUNT);
|
||||
return &loadInfo;
|
||||
@@ -3000,6 +3011,22 @@ struct MountTypeXCapabilityLoadInfo
|
||||
}
|
||||
};
|
||||
|
||||
struct MountXDisplayLoadInfo
|
||||
{
|
||||
static DB2LoadInfo const* Instance()
|
||||
{
|
||||
static DB2FieldMeta const fields[] =
|
||||
{
|
||||
{ false, FT_INT, "ID" },
|
||||
{ false, FT_INT, "MountID" },
|
||||
{ false, FT_INT, "DisplayID" },
|
||||
{ false, FT_INT, "PlayerConditionID" },
|
||||
};
|
||||
static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, MountXDisplayMeta::Instance(), HOTFIX_SEL_MOUNT_X_DISPLAY);
|
||||
return &loadInfo;
|
||||
}
|
||||
};
|
||||
|
||||
struct MovieLoadInfo
|
||||
{
|
||||
static DB2LoadInfo const* Instance()
|
||||
@@ -3281,8 +3308,9 @@ struct PlayerConditionLoadInfo
|
||||
{ false, FT_INT, "PhaseGroupID" },
|
||||
{ false, FT_INT, "MinAvgItemLevel" },
|
||||
{ false, FT_INT, "MaxAvgItemLevel" },
|
||||
{ true, FT_INT, "Unknown7001" },
|
||||
{ true, FT_INT, "Unknown7002" },
|
||||
{ true, FT_INT, "MovementFlags1" },
|
||||
{ true, FT_INT, "MovementFlags2" },
|
||||
{ false, FT_INT, "MainHandItemSubclassMask" },
|
||||
};
|
||||
static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, PlayerConditionMeta::Instance(), HOTFIX_SEL_PLAYER_CONDITION);
|
||||
return &loadInfo;
|
||||
@@ -3404,8 +3432,8 @@ struct QuestPackageItemLoadInfo
|
||||
{ false, FT_INT, "ID" },
|
||||
{ false, FT_INT, "ItemID" },
|
||||
{ false, FT_SHORT, "QuestPackageID" },
|
||||
{ false, FT_BYTE, "ItemCount" },
|
||||
{ false, FT_BYTE, "FilterType" },
|
||||
{ false, FT_INT, "ItemCount" },
|
||||
};
|
||||
static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, QuestPackageItemMeta::Instance(), HOTFIX_SEL_QUEST_PACKAGE_ITEM);
|
||||
return &loadInfo;
|
||||
@@ -3603,10 +3631,10 @@ struct SkillLineLoadInfo
|
||||
{ false, FT_STRING, "DisplayName" },
|
||||
{ false, FT_STRING, "Description" },
|
||||
{ false, FT_STRING, "AlternateVerb" },
|
||||
{ false, FT_SHORT, "SpellIconID" },
|
||||
{ false, FT_SHORT, "Flags" },
|
||||
{ false, FT_BYTE, "CategoryID" },
|
||||
{ false, FT_BYTE, "CanLink" },
|
||||
{ false, FT_INT, "IconFileDataID" },
|
||||
{ false, FT_INT, "ParentSkillLineID" },
|
||||
};
|
||||
static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SkillLineMeta::Instance(), HOTFIX_SEL_SKILL_LINE);
|
||||
@@ -3624,7 +3652,6 @@ struct SkillLineAbilityLoadInfo
|
||||
{ false, FT_INT, "SpellID" },
|
||||
{ false, FT_INT, "RaceMask" },
|
||||
{ false, FT_INT, "SupercedesSpell" },
|
||||
{ false, FT_INT, "Unknown703" },
|
||||
{ false, FT_SHORT, "SkillLine" },
|
||||
{ false, FT_SHORT, "MinSkillLineRank" },
|
||||
{ false, FT_SHORT, "TrivialSkillLineRankHigh" },
|
||||
@@ -3633,6 +3660,7 @@ struct SkillLineAbilityLoadInfo
|
||||
{ false, FT_SHORT, "TradeSkillCategoryID" },
|
||||
{ false, FT_BYTE, "AcquireMethod" },
|
||||
{ false, FT_BYTE, "NumSkillUps" },
|
||||
{ false, FT_BYTE, "Unknown703" },
|
||||
{ true, FT_INT, "ClassMask" },
|
||||
};
|
||||
static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SkillLineAbilityMeta::Instance(), HOTFIX_SEL_SKILL_LINE_ABILITY);
|
||||
@@ -3894,7 +3922,7 @@ struct SpellDurationLoadInfo
|
||||
{ false, FT_INT, "ID" },
|
||||
{ true, FT_INT, "Duration" },
|
||||
{ true, FT_INT, "MaxDuration" },
|
||||
{ true, FT_SHORT, "DurationPerLevel" },
|
||||
{ true, FT_INT, "DurationPerLevel" },
|
||||
};
|
||||
static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellDurationMeta::Instance(), HOTFIX_SEL_SPELL_DURATION);
|
||||
return &loadInfo;
|
||||
@@ -3907,37 +3935,38 @@ struct SpellEffectLoadInfo
|
||||
{
|
||||
static DB2FieldMeta const fields[] =
|
||||
{
|
||||
{ false, FT_FLOAT, "EffectAmplitude" },
|
||||
{ false, FT_FLOAT, "EffectBonusCoefficient" },
|
||||
{ false, FT_FLOAT, "EffectChainAmplitude" },
|
||||
{ false, FT_FLOAT, "EffectPointsPerResource" },
|
||||
{ false, FT_FLOAT, "EffectRealPointsPerLevel" },
|
||||
{ false, FT_INT, "EffectSpellClassMask1" },
|
||||
{ false, FT_INT, "EffectSpellClassMask2" },
|
||||
{ false, FT_INT, "EffectSpellClassMask3" },
|
||||
{ false, FT_INT, "EffectSpellClassMask4" },
|
||||
{ false, FT_FLOAT, "EffectPosFacing" },
|
||||
{ false, FT_FLOAT, "BonusCoefficientFromAP" },
|
||||
{ false, FT_INT, "ID" },
|
||||
{ false, FT_INT, "DifficultyID" },
|
||||
{ false, FT_INT, "SpellID" },
|
||||
{ false, FT_INT, "Effect" },
|
||||
{ false, FT_INT, "EffectAura" },
|
||||
{ false, FT_INT, "EffectAuraPeriod" },
|
||||
{ true, FT_INT, "EffectBasePoints" },
|
||||
{ false, FT_INT, "EffectChainTargets" },
|
||||
{ true, FT_INT, "EffectDieSides" },
|
||||
{ false, FT_INT, "EffectItemType" },
|
||||
{ false, FT_INT, "EffectMechanic" },
|
||||
{ false, FT_INT, "EffectIndex" },
|
||||
{ true, FT_INT, "EffectMiscValue" },
|
||||
{ true, FT_INT, "EffectMiscValueB" },
|
||||
{ false, FT_INT, "EffectRadiusIndex" },
|
||||
{ false, FT_INT, "EffectRadiusMaxIndex" },
|
||||
{ false, FT_INT, "EffectTriggerSpell" },
|
||||
{ false, FT_INT, "ImplicitTarget1" },
|
||||
{ false, FT_INT, "ImplicitTarget2" },
|
||||
{ false, FT_INT, "SpellID" },
|
||||
{ false, FT_INT, "EffectIndex" },
|
||||
{ false, FT_INT, "DifficultyID" },
|
||||
{ false, FT_FLOAT, "EffectAmplitude" },
|
||||
{ false, FT_INT, "EffectAuraPeriod" },
|
||||
{ false, FT_FLOAT, "EffectBonusCoefficient" },
|
||||
{ false, FT_FLOAT, "EffectChainAmplitude" },
|
||||
{ false, FT_INT, "EffectChainTargets" },
|
||||
{ true, FT_INT, "EffectDieSides" },
|
||||
{ false, FT_INT, "EffectItemType" },
|
||||
{ false, FT_INT, "EffectMechanic" },
|
||||
{ false, FT_FLOAT, "EffectPointsPerResource" },
|
||||
{ false, FT_FLOAT, "EffectRealPointsPerLevel" },
|
||||
{ false, FT_INT, "EffectTriggerSpell" },
|
||||
{ false, FT_FLOAT, "EffectPosFacing" },
|
||||
{ false, FT_INT, "EffectAttributes" },
|
||||
{ false, FT_FLOAT, "BonusCoefficientFromAP" },
|
||||
{ false, FT_FLOAT, "PvPMultiplier" },
|
||||
};
|
||||
static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellEffectMeta::Instance(), HOTFIX_SEL_SPELL_EFFECT);
|
||||
return &loadInfo;
|
||||
@@ -4156,9 +4185,9 @@ struct SpellMiscLoadInfo
|
||||
{ false, FT_SHORT, "CastingTimeIndex" },
|
||||
{ false, FT_SHORT, "DurationIndex" },
|
||||
{ false, FT_SHORT, "RangeIndex" },
|
||||
{ false, FT_SHORT, "SpellIconID" },
|
||||
{ false, FT_SHORT, "ActiveIconID" },
|
||||
{ false, FT_BYTE, "SchoolMask" },
|
||||
{ false, FT_INT, "IconFileDataID" },
|
||||
{ false, FT_INT, "ActiveIconFileDataID" },
|
||||
};
|
||||
static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellMiscMeta::Instance(), HOTFIX_SEL_SPELL_MISC);
|
||||
return &loadInfo;
|
||||
@@ -4352,23 +4381,23 @@ struct SpellShapeshiftFormLoadInfo
|
||||
{ false, FT_STRING, "Name" },
|
||||
{ false, FT_FLOAT, "WeaponDamageVariance" },
|
||||
{ false, FT_INT, "Flags" },
|
||||
{ false, FT_SHORT, "AttackIconID" },
|
||||
{ false, FT_SHORT, "CombatRoundTime" },
|
||||
{ false, FT_SHORT, "CreatureDisplayID1" },
|
||||
{ false, FT_SHORT, "CreatureDisplayID2" },
|
||||
{ false, FT_SHORT, "CreatureDisplayID3" },
|
||||
{ false, FT_SHORT, "CreatureDisplayID4" },
|
||||
{ false, FT_SHORT, "PresetSpellID1" },
|
||||
{ false, FT_SHORT, "PresetSpellID2" },
|
||||
{ false, FT_SHORT, "PresetSpellID3" },
|
||||
{ false, FT_SHORT, "PresetSpellID4" },
|
||||
{ false, FT_SHORT, "PresetSpellID5" },
|
||||
{ false, FT_SHORT, "PresetSpellID6" },
|
||||
{ false, FT_SHORT, "PresetSpellID7" },
|
||||
{ false, FT_SHORT, "PresetSpellID8" },
|
||||
{ false, FT_SHORT, "MountTypeID" },
|
||||
{ true, FT_BYTE, "CreatureType" },
|
||||
{ false, FT_BYTE, "BonusActionBar" },
|
||||
{ false, FT_INT, "AttackIconFileDataID" },
|
||||
{ false, FT_INT, "CreatureDisplayID1" },
|
||||
{ false, FT_INT, "CreatureDisplayID2" },
|
||||
{ false, FT_INT, "CreatureDisplayID3" },
|
||||
{ false, FT_INT, "CreatureDisplayID4" },
|
||||
{ false, FT_INT, "PresetSpellID1" },
|
||||
{ false, FT_INT, "PresetSpellID2" },
|
||||
{ false, FT_INT, "PresetSpellID3" },
|
||||
{ false, FT_INT, "PresetSpellID4" },
|
||||
{ false, FT_INT, "PresetSpellID5" },
|
||||
{ false, FT_INT, "PresetSpellID6" },
|
||||
{ false, FT_INT, "PresetSpellID7" },
|
||||
{ false, FT_INT, "PresetSpellID8" },
|
||||
};
|
||||
static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellShapeshiftFormMeta::Instance(), HOTFIX_SEL_SPELL_SHAPESHIFT_FORM);
|
||||
return &loadInfo;
|
||||
@@ -4421,15 +4450,18 @@ struct SpellXSpellVisualLoadInfo
|
||||
static DB2FieldMeta const fields[] =
|
||||
{
|
||||
{ false, FT_INT, "SpellID" },
|
||||
{ false, FT_INT, "SpellVisualID" },
|
||||
{ false, FT_INT, "ID" },
|
||||
{ false, FT_FLOAT, "Chance" },
|
||||
{ false, FT_SHORT, "SpellVisualID1" },
|
||||
{ false, FT_SHORT, "SpellVisualID2" },
|
||||
{ false, FT_SHORT, "CasterPlayerConditionID" },
|
||||
{ false, FT_SHORT, "CasterUnitConditionID" },
|
||||
{ false, FT_SHORT, "PlayerConditionID" },
|
||||
{ false, FT_SHORT, "UnitConditionID" },
|
||||
{ false, FT_INT, "IconFileDataID" },
|
||||
{ false, FT_INT, "ActiveIconFileDataID" },
|
||||
{ false, FT_BYTE, "Flags" },
|
||||
{ false, FT_BYTE, "DifficultyID" },
|
||||
{ false, FT_BYTE, "Priority" },
|
||||
{ false, FT_INT, "ID" },
|
||||
};
|
||||
static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellXSpellVisualMeta::Instance(), HOTFIX_SEL_SPELL_X_SPELL_VISUAL);
|
||||
return &loadInfo;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -133,7 +133,7 @@ DB2Storage<ItemRandomSuffixEntry> sItemRandomSuffixStore("ItemRand
|
||||
DB2Storage<ItemSearchNameEntry> sItemSearchNameStore("ItemSearchName.db2", ItemSearchNameLoadInfo::Instance());
|
||||
DB2Storage<ItemSetEntry> sItemSetStore("ItemSet.db2", ItemSetLoadInfo::Instance());
|
||||
DB2Storage<ItemSetSpellEntry> sItemSetSpellStore("ItemSetSpell.db2", ItemSetSpellLoadInfo::Instance());
|
||||
DB2Storage<ItemSparseEntry> sItemSparseStore("Item-sparse.db2", ItemSparseLoadInfo::Instance());
|
||||
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());
|
||||
@@ -150,6 +150,7 @@ DB2Storage<ModifierTreeEntry> sModifierTreeStore("ModifierTree
|
||||
DB2Storage<MountCapabilityEntry> sMountCapabilityStore("MountCapability.db2", MountCapabilityLoadInfo::Instance());
|
||||
DB2Storage<MountEntry> sMountStore("Mount.db2", MountLoadInfo::Instance());
|
||||
DB2Storage<MountTypeXCapabilityEntry> sMountTypeXCapabilityStore("MountTypeXCapability.db2", MountTypeXCapabilityLoadInfo::Instance());
|
||||
DB2Storage<MountXDisplayEntry> sMountXDisplayStore("MountXDisplay.db2", MountXDisplayLoadInfo::Instance());
|
||||
DB2Storage<MovieEntry> sMovieStore("Movie.db2", MovieLoadInfo::Instance());
|
||||
DB2Storage<NameGenEntry> sNameGenStore("NameGen.db2", NameGenLoadInfo::Instance());
|
||||
DB2Storage<NamesProfanityEntry> sNamesProfanityStore("NamesProfanity.db2", NamesProfanityLoadInfo::Instance());
|
||||
@@ -241,8 +242,6 @@ TaxiPathNodesByPath sTaxiPathNodesByPath;
|
||||
|
||||
typedef std::vector<std::string> DB2StoreProblemList;
|
||||
|
||||
uint32 DB2FilesCount = 0;
|
||||
|
||||
template<class T, template<class> class DB2>
|
||||
inline void LoadDB2(uint32& availableDb2Locales, DB2StoreProblemList& errlist, DB2Manager::StorageMap& stores, DB2StorageBase* storage, std::string const& db2Path, uint32 defaultLocale, DB2<T> const& /*hint*/)
|
||||
{
|
||||
@@ -265,8 +264,6 @@ inline void LoadDB2(uint32& availableDb2Locales, DB2StoreProblemList& errlist, D
|
||||
storage->GetFileName().c_str(), loadInfo->Meta->GetRecordSize(), sizeof(T));
|
||||
}
|
||||
|
||||
++DB2FilesCount;
|
||||
|
||||
if (storage->Load(db2Path + localeNames[defaultLocale] + '/', defaultLocale))
|
||||
{
|
||||
storage->LoadFromDB();
|
||||
@@ -448,6 +445,7 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale)
|
||||
LOAD_DB2(sMountCapabilityStore);
|
||||
LOAD_DB2(sMountStore);
|
||||
LOAD_DB2(sMountTypeXCapabilityStore);
|
||||
LOAD_DB2(sMountXDisplayStore);
|
||||
LOAD_DB2(sMovieStore);
|
||||
LOAD_DB2(sNameGenStore);
|
||||
LOAD_DB2(sNamesProfanityStore);
|
||||
@@ -734,6 +732,9 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale)
|
||||
for (MountTypeXCapabilityEntry const* mountTypeCapability : sMountTypeXCapabilityStore)
|
||||
_mountCapabilitiesByType[mountTypeCapability->MountTypeID].insert(mountTypeCapability);
|
||||
|
||||
for (MountXDisplayEntry const* mountDisplay : sMountXDisplayStore)
|
||||
_mountDisplays[mountDisplay->MountID].push_back(mountDisplay);
|
||||
|
||||
for (NameGenEntry const* nameGen : sNameGenStore)
|
||||
_nameGenData[nameGen->Race][nameGen->Sex].push_back(nameGen);
|
||||
|
||||
@@ -918,18 +919,18 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale)
|
||||
_worldMapAreaByAreaID[worldMapArea->AreaID] = worldMapArea;
|
||||
|
||||
// error checks
|
||||
if (bad_db2_files.size() >= DB2FilesCount)
|
||||
if (bad_db2_files.size() == _stores.size())
|
||||
{
|
||||
TC_LOG_ERROR("misc", "\nIncorrect DataDir value in worldserver.conf or ALL required *.db2 files (%d) not found by path: %sdbc/%s/", DB2FilesCount, dataPath.c_str(), localeNames[defaultLocale]);
|
||||
TC_LOG_ERROR("misc", "\nIncorrect DataDir value in worldserver.conf or ALL required *.db2 files (" SZFMTD ") not found by path: %sdbc/%s/", _stores.size(), dataPath.c_str(), localeNames[defaultLocale]);
|
||||
exit(1);
|
||||
}
|
||||
else if (!bad_db2_files.empty())
|
||||
{
|
||||
std::string str;
|
||||
for (auto i = bad_db2_files.begin(); i != bad_db2_files.end(); ++i)
|
||||
str += *i + "\n";
|
||||
for (auto const& bad_db2_file : bad_db2_files)
|
||||
str += bad_db2_file + "\n";
|
||||
|
||||
TC_LOG_ERROR("misc", "\nSome required *.db2 files (%u from %d) not found or not compatible:\n%s", (uint32)bad_db2_files.size(), DB2FilesCount, str.c_str());
|
||||
TC_LOG_ERROR("misc", "\nSome required *.db2 files (" SZFMTD " from " SZFMTD ") not found or not compatible:\n%s", bad_db2_files.size(), _stores.size(), str.c_str());
|
||||
exit(1);
|
||||
}
|
||||
|
||||
@@ -946,7 +947,7 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
TC_LOG_INFO("server.loading", ">> Initialized %d DB2 data stores in %u ms", DB2FilesCount, GetMSTimeDiffToNow(oldMSTime));
|
||||
TC_LOG_INFO("server.loading", ">> Initialized " SZFMTD " DB2 data stores in %u ms", _stores.size(), GetMSTimeDiffToNow(oldMSTime));
|
||||
}
|
||||
|
||||
DB2StorageBase const* DB2Manager::GetStorage(uint32 type) const
|
||||
@@ -1005,7 +1006,7 @@ time_t DB2Manager::GetHotfixDate(uint32 entry, uint32 type) const
|
||||
if (time_t(hotfix.Timestamp) > ret)
|
||||
ret = time_t(hotfix.Timestamp);
|
||||
|
||||
return ret ? ret : time(NULL);
|
||||
return ret ? ret : time(nullptr);
|
||||
}
|
||||
|
||||
std::vector<uint32> DB2Manager::GetAreasForGroup(uint32 areaGroupId) const
|
||||
@@ -1563,6 +1564,11 @@ DB2Manager::MountTypeXCapabilitySet const* DB2Manager::GetMountCapabilities(uint
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
DB2Manager::MountXDisplayContainer const* DB2Manager::GetMountDisplays(uint32 mountId) const
|
||||
{
|
||||
return Trinity::Containers::MapGetValuePtr(_mountDisplays, mountId);
|
||||
}
|
||||
|
||||
std::string DB2Manager::GetNameGenEntry(uint8 race, uint8 gender, LocaleConstant locale) const
|
||||
{
|
||||
ASSERT(gender < GENDER_NONE);
|
||||
@@ -1596,7 +1602,7 @@ ResponseCodes DB2Manager::ValidateName(std::wstring const& name, LocaleConstant
|
||||
|
||||
PvpDifficultyEntry const* DB2Manager::GetBattlegroundBracketByLevel(uint32 mapid, uint32 level)
|
||||
{
|
||||
PvpDifficultyEntry const* maxEntry = NULL; // used for level > max listed level case
|
||||
PvpDifficultyEntry const* maxEntry = nullptr; // used for level > max listed level case
|
||||
for (uint32 i = 0; i < sPvpDifficultyStore.GetNumRows(); ++i)
|
||||
{
|
||||
if (PvpDifficultyEntry const* entry = sPvpDifficultyStore.LookupEntry(i))
|
||||
|
||||
@@ -260,6 +260,8 @@ public:
|
||||
typedef std::unordered_map<uint32, MountEntry const*> MountContainer;
|
||||
typedef std::set<MountTypeXCapabilityEntry const*, MountTypeXCapabilityEntryComparator> MountTypeXCapabilitySet;
|
||||
typedef std::unordered_map<uint32, MountTypeXCapabilitySet> MountCapabilitiesByTypeContainer;
|
||||
typedef std::vector<MountXDisplayEntry const*> MountXDisplayContainer;
|
||||
typedef std::unordered_map<uint32, MountXDisplayContainer> MountDisplaysCointainer;
|
||||
typedef std::unordered_map<uint32, std::array<std::vector<NameGenEntry const*>, 2>> NameGenContainer;
|
||||
typedef std::array<std::vector<Trinity::wregex>, TOTAL_LOCALES + 1> NameValidationRegexContainer;
|
||||
typedef std::unordered_map<uint32, std::set<uint32>> PhaseGroupContainer;
|
||||
@@ -327,6 +329,7 @@ public:
|
||||
MountEntry const* GetMount(uint32 spellId) const;
|
||||
MountEntry const* GetMountById(uint32 id) const;
|
||||
MountTypeXCapabilitySet const* GetMountCapabilities(uint32 mountType) const;
|
||||
MountXDisplayContainer const* GetMountDisplays(uint32 mountId) const;
|
||||
ResponseCodes ValidateName(std::wstring const& name, LocaleConstant locale) const;
|
||||
std::set<uint32> GetPhasesForGroup(uint32 group) const;
|
||||
PowerTypeEntry const* GetPowerTypeEntry(Powers power) const;
|
||||
@@ -382,6 +385,7 @@ private:
|
||||
MapDifficultyContainer _mapDifficulties;
|
||||
MountContainer _mountsBySpellId;
|
||||
MountCapabilitiesByTypeContainer _mountCapabilitiesByType;
|
||||
MountDisplaysCointainer _mountDisplays;
|
||||
NameGenContainer _nameGenData;
|
||||
NameValidationRegexContainer _nameValidators;
|
||||
PhaseGroupContainer _phasesByGroup;
|
||||
|
||||
@@ -34,13 +34,13 @@ struct AchievementEntry
|
||||
uint16 Supercedes; // its Achievement parent (can`t start while parent uncomplete, use its Criteria if don`t have own, use its progress on begin)
|
||||
uint16 Category;
|
||||
uint16 UIOrder;
|
||||
uint16 IconID;
|
||||
uint16 SharesCriteria; // referenced achievement (counting of all completed criterias)
|
||||
uint16 CriteriaTree;
|
||||
int8 Faction; // -1 = all, 0 = horde, 1 = alliance
|
||||
uint8 Points;
|
||||
uint8 MinimumCriteria; // need this count of completed criterias (own or referenced achievement criterias)
|
||||
uint32 ID;
|
||||
uint32 IconFileDataID;
|
||||
};
|
||||
|
||||
struct AnimKitEntry
|
||||
@@ -130,6 +130,8 @@ struct ArtifactEntry
|
||||
uint16 SpecID;
|
||||
uint8 ArtifactCategoryID;
|
||||
uint8 Flags;
|
||||
uint32 UiModelSceneID;
|
||||
uint32 SpellVisualKitID;
|
||||
};
|
||||
|
||||
struct ArtifactAppearanceEntry
|
||||
@@ -140,13 +142,13 @@ struct ArtifactAppearanceEntry
|
||||
float ModelAlpha;
|
||||
uint32 ShapeshiftDisplayID;
|
||||
uint16 ArtifactAppearanceSetID;
|
||||
uint16 PlayerConditionID;
|
||||
uint16 Unknown;
|
||||
uint8 DisplayIndex;
|
||||
uint8 AppearanceModID;
|
||||
uint8 Flags;
|
||||
uint8 ModifiesShapeshiftFormDisplay;
|
||||
uint32 ID;
|
||||
uint32 PlayerConditionID;
|
||||
uint32 ItemAppearanceID;
|
||||
uint32 AltItemAppearanceID;
|
||||
};
|
||||
@@ -177,6 +179,7 @@ struct ArtifactPowerEntry
|
||||
uint8 ArtifactID;
|
||||
uint8 Flags;
|
||||
uint8 MaxRank;
|
||||
uint8 ArtifactTier;
|
||||
uint32 ID;
|
||||
int32 RelicType;
|
||||
};
|
||||
@@ -265,6 +268,8 @@ struct BattlePetSpeciesEntry
|
||||
uint8 PetType;
|
||||
int8 Source;
|
||||
uint32 ID;
|
||||
uint32 CardModelSceneID;
|
||||
uint32 LoadoutModelSceneID;
|
||||
};
|
||||
|
||||
struct BattlePetSpeciesStateEntry
|
||||
@@ -281,6 +286,8 @@ struct BattlemasterListEntry
|
||||
LocalizedString* Name;
|
||||
uint32 IconFileDataID;
|
||||
LocalizedString* GameType;
|
||||
LocalizedString* ShortDescription;
|
||||
LocalizedString* LongDescription;
|
||||
int16 MapID[16];
|
||||
uint16 HolidayWorldState;
|
||||
uint16 PlayerConditionID;
|
||||
@@ -402,14 +409,11 @@ struct ChrRacesEntry
|
||||
float FemaleCustomizeOffset[3];
|
||||
uint32 LowResScreenFileDataID;
|
||||
uint16 FactionID;
|
||||
uint16 ExplorationSoundID;
|
||||
uint16 MaleDisplayID;
|
||||
uint16 FemaleDisplayID;
|
||||
uint16 ResSicknessSpellID;
|
||||
uint16 SplashSoundID;
|
||||
uint16 CinematicSequenceID;
|
||||
uint16 UAMaleCreatureSoundDataID;
|
||||
uint16 UAFemaleCreatureSoundDataID;
|
||||
uint8 BaseLanguage;
|
||||
uint8 CreatureType;
|
||||
uint8 TeamID;
|
||||
@@ -433,13 +437,13 @@ struct ChrSpecializationEntry
|
||||
LocalizedString* Name;
|
||||
LocalizedString* Name2;
|
||||
LocalizedString* Description;
|
||||
uint16 SpellIconID;
|
||||
uint8 ClassID;
|
||||
uint8 OrderIndex;
|
||||
uint8 PetTalentType;
|
||||
uint8 Role;
|
||||
uint8 PrimaryStatOrder;
|
||||
uint32 ID;
|
||||
uint32 IconFileDataID;
|
||||
uint32 Flags;
|
||||
uint32 AnimReplacementSetID;
|
||||
|
||||
@@ -452,43 +456,44 @@ struct ChrSpecializationEntry
|
||||
struct CinematicCameraEntry
|
||||
{
|
||||
uint32 ID;
|
||||
char const* Model; // Model filename (translate .mdx to .m2)
|
||||
uint32 SoundID; // Sound ID (voiceover for cinematic)
|
||||
DBCPosition3D Origin; // Position in map used for basis for M2 co-ordinates
|
||||
float OriginFacing; // Orientation in map used for basis for M2 co-ordinates
|
||||
uint16 SoundID; // Sound ID (voiceover for cinematic)
|
||||
uint32 ModelFileDataID; // Model
|
||||
};
|
||||
|
||||
struct CinematicSequencesEntry
|
||||
{
|
||||
uint32 ID;
|
||||
uint16 SoundID;
|
||||
uint32 SoundID;
|
||||
uint16 Camera[8];
|
||||
};
|
||||
|
||||
struct CreatureDisplayInfoEntry
|
||||
{
|
||||
uint32 ID;
|
||||
uint32 ExtendedDisplayInfoID;
|
||||
float CreatureModelScale;
|
||||
float PlayerModelScale;
|
||||
uint32 TextureVariation[3];
|
||||
char const* PortraitTextureName;
|
||||
uint32 PortraitCreatureDisplayInfoID;
|
||||
uint32 CreatureGeosetData;
|
||||
uint32 StateSpellVisualKitID;
|
||||
float InstanceOtherPlayerPetScale; // scale of not own player pets inside dungeons/raids/scenarios
|
||||
uint16 ModelID;
|
||||
uint16 SoundID;
|
||||
uint16 NPCSoundID;
|
||||
uint16 ParticleColorID;
|
||||
uint16 ObjectEffectPackageID;
|
||||
uint16 AnimReplacementSetID;
|
||||
uint8 CreatureModelAlpha;
|
||||
uint8 SizeClass;
|
||||
uint8 BloodID;
|
||||
uint8 Flags;
|
||||
int8 Gender;
|
||||
int8 Unk700;
|
||||
uint32 ExtendedDisplayInfoID;
|
||||
uint32 TextureVariation[3];
|
||||
uint32 PortraitTextureFileDataID;
|
||||
uint8 CreatureModelAlpha;
|
||||
uint16 SoundID;
|
||||
float PlayerModelScale;
|
||||
uint32 PortraitCreatureDisplayInfoID;
|
||||
uint8 BloodID;
|
||||
uint16 ParticleColorID;
|
||||
uint32 CreatureGeosetData;
|
||||
uint16 ObjectEffectPackageID;
|
||||
uint16 AnimReplacementSetID;
|
||||
int8 UnarmedWeaponSubclass;
|
||||
uint32 StateSpellVisualKitID;
|
||||
float InstanceOtherPlayerPetScale; // scale of not own player pets inside dungeons/raids/scenarios
|
||||
uint32 MountSpellVisualKitID;
|
||||
};
|
||||
|
||||
struct CreatureDisplayInfoExtraEntry
|
||||
@@ -514,7 +519,7 @@ struct CreatureFamilyEntry
|
||||
float MinScale;
|
||||
float MaxScale;
|
||||
LocalizedString* Name;
|
||||
char const* IconFile;
|
||||
uint32 IconFileDataID;
|
||||
uint16 SkillLine[2];
|
||||
uint16 PetFoodMask;
|
||||
uint8 MinScaleLevel;
|
||||
@@ -700,12 +705,12 @@ struct CriteriaEntry
|
||||
struct CriteriaTreeEntry
|
||||
{
|
||||
uint32 ID;
|
||||
uint32 CriteriaID;
|
||||
uint32 Amount;
|
||||
LocalizedString* Description;
|
||||
uint16 Parent;
|
||||
uint16 Flags;
|
||||
uint8 Operator;
|
||||
uint32 CriteriaID;
|
||||
int32 OrderIndex;
|
||||
};
|
||||
|
||||
@@ -771,6 +776,9 @@ struct DifficultyEntry
|
||||
{
|
||||
uint32 ID;
|
||||
LocalizedString* Name;
|
||||
uint16 GroupSizeHealthCurveID;
|
||||
uint16 GroupSizeDmgCurveID;
|
||||
uint16 GroupSizeSpellPointsCurveID;
|
||||
uint8 FallbackDifficultyID;
|
||||
uint8 InstanceType;
|
||||
uint8 MinPlayers;
|
||||
@@ -778,24 +786,21 @@ struct DifficultyEntry
|
||||
int8 OldEnumValue;
|
||||
uint8 Flags;
|
||||
uint8 ToggleDifficultyID;
|
||||
uint8 GroupSizeHealthCurveID;
|
||||
uint8 GroupSizeDmgCurveID;
|
||||
uint8 GroupSizeSpellPointsCurveID;
|
||||
uint8 ItemBonusTreeModID;
|
||||
uint8 OrderIndex;
|
||||
};
|
||||
|
||||
struct DungeonEncounterEntry
|
||||
{
|
||||
uint32 ID;
|
||||
LocalizedString* Name;
|
||||
uint32 CreatureDisplayID;
|
||||
uint16 MapID;
|
||||
uint16 SpellIconID;
|
||||
uint8 DifficultyID;
|
||||
uint8 Bit;
|
||||
uint8 Flags;
|
||||
uint32 ID;
|
||||
int32 OrderIndex;
|
||||
uint32 TextureFileDataID;
|
||||
};
|
||||
|
||||
struct DurabilityCostsEntry
|
||||
@@ -856,6 +861,7 @@ struct FactionEntry
|
||||
uint16 ReputationClassMask[4];
|
||||
uint16 ReputationFlags[4];
|
||||
uint16 ParentFactionID;
|
||||
uint16 ParagonFactionID;
|
||||
uint8 ParentFactionCapIn; // The highest rank the faction will profit from incoming spillover
|
||||
uint8 ParentFactionCapOut;
|
||||
uint8 Expansion;
|
||||
@@ -1012,7 +1018,7 @@ struct GarrClassSpecEntry
|
||||
LocalizedString* NameFemale;
|
||||
LocalizedString* NameGenderless;
|
||||
uint16 ClassAtlasID; // UiTextureAtlasMember.db2 ref
|
||||
uint8 GarrFollItemSetID;
|
||||
uint16 GarrFollItemSetID;
|
||||
uint8 Limit;
|
||||
uint8 Flags;
|
||||
uint32 ID;
|
||||
@@ -1028,6 +1034,7 @@ struct GarrFollowerEntry
|
||||
uint32 AlliancePortraitIconID;
|
||||
uint32 HordeAddedBroadcastTextID;
|
||||
uint32 AllianceAddedBroadcastTextID;
|
||||
LocalizedString* Name;
|
||||
uint16 HordeGarrFollItemSetID;
|
||||
uint16 AllianceGarrFollItemSetID;
|
||||
uint16 ItemLevelWeapon;
|
||||
@@ -1094,11 +1101,11 @@ struct GarrSiteLevelEntry
|
||||
DBCPosition2D TownHall;
|
||||
uint16 MapID;
|
||||
uint16 SiteID;
|
||||
uint16 MovieID;
|
||||
uint16 UpgradeResourceCost;
|
||||
uint16 UpgradeMoneyCost;
|
||||
uint8 Level;
|
||||
uint8 UITextureKitID;
|
||||
uint8 MovieID;
|
||||
uint8 Level2;
|
||||
};
|
||||
|
||||
@@ -1198,11 +1205,11 @@ struct HolidaysEntry
|
||||
uint16 Region;
|
||||
uint8 Looping;
|
||||
uint8 CalendarFlags[MAX_HOLIDAY_FLAGS];
|
||||
uint8 HolidayNameID;
|
||||
uint8 HolidayDescriptionID;
|
||||
uint8 Priority;
|
||||
int8 CalendarFilterType;
|
||||
uint8 Flags;
|
||||
uint32 HolidayNameID;
|
||||
uint32 HolidayDescriptionID;
|
||||
};
|
||||
|
||||
struct ImportPriceArmorEntry
|
||||
@@ -1302,6 +1309,7 @@ struct ItemBonusTreeNodeEntry
|
||||
uint16 BonusTreeID;
|
||||
uint16 SubTreeID;
|
||||
uint16 BonusListID;
|
||||
uint16 ItemLevelSelectorID;
|
||||
uint8 BonusTreeModID;
|
||||
};
|
||||
|
||||
@@ -1498,9 +1506,9 @@ struct ItemSparseEntry
|
||||
uint32 Flags[MAX_ITEM_PROTO_FLAGS];
|
||||
float Unk1;
|
||||
float Unk2;
|
||||
uint32 BuyCount;
|
||||
uint32 BuyPrice;
|
||||
uint32 SellPrice;
|
||||
int32 AllowableClass;
|
||||
int32 AllowableRace;
|
||||
uint32 RequiredSpell;
|
||||
uint32 MaxCount;
|
||||
@@ -1517,6 +1525,7 @@ struct ItemSparseEntry
|
||||
float ArmorDamageModifier;
|
||||
uint32 Duration;
|
||||
float StatScalingFactor;
|
||||
int16 AllowableClass;
|
||||
uint16 ItemLevel;
|
||||
uint16 RequiredSkill;
|
||||
uint16 RequiredSkillRank;
|
||||
@@ -1532,13 +1541,14 @@ struct ItemSparseEntry
|
||||
uint16 ItemSet;
|
||||
uint16 Area;
|
||||
uint16 Map;
|
||||
uint16 TotemCategory;
|
||||
uint16 SocketBonus;
|
||||
uint16 GemProperties;
|
||||
uint16 ItemLimitCategory;
|
||||
uint16 HolidayID;
|
||||
uint16 RequiredTransmogHolidayID;
|
||||
uint16 ItemNameDescriptionID;
|
||||
uint8 Quality;
|
||||
uint8 BuyCount;
|
||||
uint8 InventoryType;
|
||||
int8 RequiredLevel;
|
||||
uint8 RequiredHonorRank;
|
||||
@@ -1552,7 +1562,6 @@ struct ItemSparseEntry
|
||||
uint8 PageMaterial;
|
||||
int8 Material;
|
||||
uint8 Sheath;
|
||||
uint8 TotemCategory;
|
||||
uint8 SocketColor[MAX_ITEM_PROTO_SOCKETS];
|
||||
uint8 CurrencySubstitutionID;
|
||||
uint8 CurrencySubstitutionCount;
|
||||
@@ -1609,7 +1618,6 @@ struct LfgDungeonsEntry
|
||||
uint32 Flags;
|
||||
char const* TextureFilename;
|
||||
LocalizedString* Description;
|
||||
uint32 PlayerConditionID;
|
||||
float MinItemLevel;
|
||||
uint16 MaxLevel;
|
||||
uint16 TargetLevelMax;
|
||||
@@ -1619,6 +1627,7 @@ struct LfgDungeonsEntry
|
||||
uint16 LastBossJournalEncounterID;
|
||||
uint16 BonusReputationAmount;
|
||||
uint16 MentorItemLevel;
|
||||
uint16 PlayerConditionID;
|
||||
uint8 MinLevel;
|
||||
uint8 TargetLevel;
|
||||
uint8 TargetLevelMin;
|
||||
@@ -1703,6 +1712,8 @@ struct MapEntry
|
||||
LocalizedString* MapName;
|
||||
LocalizedString* MapDescription0; // Horde
|
||||
LocalizedString* MapDescription1; // Alliance
|
||||
LocalizedString* ShortDescription;
|
||||
LocalizedString* LongDescription;
|
||||
uint16 AreaTableID;
|
||||
uint16 LoadingScreenID;
|
||||
int16 CorpseMapID; // map_id of entrance map in ghost mode (continent always and in most cases = normal entrance)
|
||||
@@ -1784,16 +1795,16 @@ struct ModifierTreeEntry
|
||||
struct MountEntry
|
||||
{
|
||||
uint32 SpellId;
|
||||
uint32 DisplayId;
|
||||
LocalizedString* Name;
|
||||
LocalizedString* Description;
|
||||
LocalizedString* SourceDescription;
|
||||
float CameraPivotMultiplier;
|
||||
uint16 MountTypeId;
|
||||
uint16 Flags;
|
||||
uint16 PlayerConditionId;
|
||||
uint8 Source;
|
||||
uint32 ID;
|
||||
uint32 PlayerConditionId;
|
||||
int32 UiModelSceneID;
|
||||
};
|
||||
|
||||
struct MountCapabilityEntry
|
||||
@@ -1816,6 +1827,14 @@ struct MountTypeXCapabilityEntry
|
||||
uint8 OrderIndex;
|
||||
};
|
||||
|
||||
struct MountXDisplayEntry
|
||||
{
|
||||
uint32 ID;
|
||||
uint32 MountID;
|
||||
uint32 DisplayID;
|
||||
uint32 PlayerConditionID;
|
||||
};
|
||||
|
||||
struct MovieEntry
|
||||
{
|
||||
uint32 ID;
|
||||
@@ -1957,7 +1976,8 @@ struct PlayerConditionEntry
|
||||
uint32 PhaseGroupID;
|
||||
uint32 MinAvgItemLevel;
|
||||
uint32 MaxAvgItemLevel;
|
||||
int32 Unknown700[2];
|
||||
int32 MovementFlags[2];
|
||||
uint32 MainHandItemSubclassMask;
|
||||
};
|
||||
|
||||
struct PowerDisplayEntry
|
||||
@@ -2016,8 +2036,8 @@ struct QuestPackageItemEntry
|
||||
uint32 ID;
|
||||
uint32 ItemID;
|
||||
uint16 QuestPackageID;
|
||||
uint8 ItemCount;
|
||||
uint8 FilterType;
|
||||
uint32 ItemCount;
|
||||
};
|
||||
|
||||
struct QuestSortEntry
|
||||
@@ -2112,10 +2132,10 @@ struct SkillLineEntry
|
||||
LocalizedString* DisplayName;
|
||||
LocalizedString* Description;
|
||||
LocalizedString* AlternateVerb;
|
||||
uint16 SpellIconID;
|
||||
uint16 Flags;
|
||||
uint8 CategoryID;
|
||||
uint8 CanLink;
|
||||
uint32 IconFileDataID;
|
||||
uint32 ParentSkillLineID;
|
||||
};
|
||||
|
||||
@@ -2125,7 +2145,6 @@ struct SkillLineAbilityEntry
|
||||
uint32 SpellID;
|
||||
uint32 RaceMask;
|
||||
uint32 SupercedesSpell;
|
||||
uint32 Unknown703;
|
||||
uint16 SkillLine;
|
||||
uint16 MinSkillLineRank;
|
||||
uint16 TrivialSkillLineRankHigh;
|
||||
@@ -2134,6 +2153,7 @@ struct SkillLineAbilityEntry
|
||||
uint16 TradeSkillCategoryID;
|
||||
uint8 AcquireMethod;
|
||||
uint8 NumSkillUps;
|
||||
uint8 Unknown703;
|
||||
int32 ClassMask;
|
||||
};
|
||||
|
||||
@@ -2288,38 +2308,39 @@ struct SpellDurationEntry
|
||||
uint32 ID;
|
||||
int32 Duration;
|
||||
int32 MaxDuration;
|
||||
int16 DurationPerLevel;
|
||||
int32 DurationPerLevel;
|
||||
};
|
||||
|
||||
struct SpellEffectEntry
|
||||
{
|
||||
float EffectAmplitude;
|
||||
float EffectBonusCoefficient;
|
||||
float EffectChainAmplitude;
|
||||
float EffectPointsPerResource;
|
||||
float EffectRealPointsPerLevel;
|
||||
flag128 EffectSpellClassMask;
|
||||
float EffectPosFacing;
|
||||
float BonusCoefficientFromAP;
|
||||
uint32 ID;
|
||||
uint32 DifficultyID;
|
||||
uint32 SpellID;
|
||||
uint32 Effect;
|
||||
uint32 EffectAura;
|
||||
uint32 EffectAuraPeriod;
|
||||
int32 EffectBasePoints;
|
||||
uint32 EffectChainTargets;
|
||||
int32 EffectDieSides;
|
||||
uint32 EffectItemType;
|
||||
uint32 EffectMechanic;
|
||||
uint32 EffectIndex;
|
||||
int32 EffectMiscValue;
|
||||
int32 EffectMiscValueB;
|
||||
uint32 EffectRadiusIndex;
|
||||
uint32 EffectRadiusMaxIndex;
|
||||
uint32 EffectTriggerSpell;
|
||||
uint32 ImplicitTarget[2];
|
||||
uint32 SpellID;
|
||||
uint32 EffectIndex;
|
||||
uint32 DifficultyID;
|
||||
float EffectAmplitude;
|
||||
uint32 EffectAuraPeriod;
|
||||
float EffectBonusCoefficient;
|
||||
float EffectChainAmplitude;
|
||||
uint32 EffectChainTargets;
|
||||
int32 EffectDieSides;
|
||||
uint32 EffectItemType;
|
||||
uint32 EffectMechanic;
|
||||
float EffectPointsPerResource;
|
||||
float EffectRealPointsPerLevel;
|
||||
uint32 EffectTriggerSpell;
|
||||
float EffectPosFacing;
|
||||
uint32 EffectAttributes;
|
||||
float BonusCoefficientFromAP;
|
||||
float PvPMultiplier;
|
||||
};
|
||||
|
||||
#define MAX_SPELL_EFFECTS 32
|
||||
@@ -2437,9 +2458,9 @@ struct SpellMiscEntry
|
||||
uint16 CastingTimeIndex;
|
||||
uint16 DurationIndex;
|
||||
uint16 RangeIndex;
|
||||
uint16 SpellIconID;
|
||||
uint16 ActiveIconID;
|
||||
uint8 SchoolMask;
|
||||
uint32 IconFileDataID;
|
||||
uint32 ActiveIconFileDataID;
|
||||
};
|
||||
|
||||
struct SpellPowerEntry
|
||||
@@ -2542,13 +2563,13 @@ struct SpellShapeshiftFormEntry
|
||||
LocalizedString* Name;
|
||||
float WeaponDamageVariance;
|
||||
uint32 Flags;
|
||||
uint16 AttackIconID;
|
||||
uint16 CombatRoundTime;
|
||||
uint16 CreatureDisplayID[4];
|
||||
uint16 PresetSpellID[MAX_SHAPESHIFT_SPELLS];
|
||||
uint16 MountTypeID;
|
||||
int8 CreatureType;
|
||||
uint8 BonusActionBar;
|
||||
uint32 AttackIconFileDataID;
|
||||
uint32 CreatureDisplayID[4];
|
||||
uint32 PresetSpellID[MAX_SHAPESHIFT_SPELLS];
|
||||
};
|
||||
|
||||
struct SpellTargetRestrictionsEntry
|
||||
@@ -2577,14 +2598,18 @@ struct SpellTotemsEntry
|
||||
struct SpellXSpellVisualEntry
|
||||
{
|
||||
uint32 SpellID;
|
||||
uint32 SpellVisualID;
|
||||
uint32 ID;
|
||||
float Chance;
|
||||
uint16 SpellVisualID[2];
|
||||
uint16 CasterPlayerConditionID;
|
||||
uint16 CasterUnitConditionID;
|
||||
uint16 PlayerConditionID;
|
||||
uint16 UnitConditionID;
|
||||
uint32 IconFileDataID;
|
||||
uint32 ActiveIconFileDataID;
|
||||
uint8 Flags;
|
||||
uint8 DifficultyID;
|
||||
uint8 Priority;
|
||||
uint32 ID;
|
||||
};
|
||||
|
||||
struct SummonPropertiesEntry
|
||||
|
||||
@@ -147,7 +147,7 @@ enum ArtifactPowerFlag : uint8
|
||||
ARTIFACT_POWER_FLAG_DONT_COUNT_FIRST_BONUS_RANK = 0x10,
|
||||
};
|
||||
|
||||
#define BATTLE_PET_SPECIES_MAX_ID 2023
|
||||
#define BATTLE_PET_SPECIES_MAX_ID 2051
|
||||
|
||||
enum ChrSpecializationFlag
|
||||
{
|
||||
@@ -545,7 +545,7 @@ enum Difficulty : uint8
|
||||
DIFFICULTY_10_HC = 5,
|
||||
DIFFICULTY_25_HC = 6,
|
||||
DIFFICULTY_LFR = 7,
|
||||
DIFFICULTY_CHALLENGE = 8,
|
||||
DIFFICULTY_MYTHIC_KEYSTONE = 8,
|
||||
DIFFICULTY_40 = 9,
|
||||
DIFFICULTY_3_MAN_SCENARIO_HC = 11,
|
||||
DIFFICULTY_3_MAN_SCENARIO_N = 12,
|
||||
@@ -558,9 +558,10 @@ enum Difficulty : uint8
|
||||
DIFFICULTY_EVENT_SCENARIO = 20,
|
||||
DIFFICULTY_MYTHIC = 23,
|
||||
DIFFICULTY_TIMEWALKER = 24,
|
||||
DIFFICULTY_PVP_SCENARIO = 25,
|
||||
DIFFICULTY_WORLD_PVP_SCENARIO = 25,
|
||||
DIFFICULTY_5_MAN_SCENARIO_N = 26,
|
||||
DIFFICULTY_20_MAN_SCENARIO_N = 27,
|
||||
DIFFICULTY_PVEVP_SCENARIO = 29,
|
||||
|
||||
MAX_DIFFICULTY
|
||||
};
|
||||
@@ -815,7 +816,7 @@ enum SpellShapeshiftFormFlags
|
||||
SHAPESHIFT_FORM_PREVENT_EMOTE_SOUNDS = 0x1000
|
||||
};
|
||||
|
||||
#define TaxiMaskSize 239
|
||||
#define TaxiMaskSize 243
|
||||
typedef std::array<uint8, TaxiMaskSize> TaxiMask;
|
||||
|
||||
enum TotemCategoryType
|
||||
|
||||
@@ -183,7 +183,7 @@ bool readCamera(M2Camera const* cam, uint32 buffSize, M2Header const* header, Ci
|
||||
return true;
|
||||
}
|
||||
|
||||
void LoadM2Cameras(std::string const& dataPath)
|
||||
TC_GAME_API void LoadM2Cameras(boost::filesystem::path const& dataPath)
|
||||
{
|
||||
sFlyByCameraStore.clear();
|
||||
TC_LOG_INFO("server.loading", ">> Loading Cinematic Camera files");
|
||||
@@ -191,20 +191,11 @@ void LoadM2Cameras(std::string const& dataPath)
|
||||
uint32 oldMSTime = getMSTime();
|
||||
for (CinematicCameraEntry const* cameraEntry : sCinematicCameraStore)
|
||||
{
|
||||
std::string filenameWork = dataPath;
|
||||
filenameWork.append(cameraEntry->Model);
|
||||
|
||||
// Replace slashes (always to forward slash, because boost!)
|
||||
std::replace(filenameWork.begin(), filenameWork.end(), '\\', '/');
|
||||
|
||||
boost::filesystem::path filename = filenameWork;
|
||||
boost::filesystem::path filename = dataPath / Trinity::StringFormat("FILE%08X.xxx", cameraEntry->ModelFileDataID);
|
||||
|
||||
// Convert to native format
|
||||
filename.make_preferred();
|
||||
|
||||
// Replace mdx to .m2
|
||||
filename.replace_extension("m2");
|
||||
|
||||
std::ifstream m2file(filename.string().c_str(), std::ios::in | std::ios::binary);
|
||||
if (!m2file.is_open())
|
||||
continue;
|
||||
|
||||
@@ -21,6 +21,14 @@
|
||||
#include "Common.h"
|
||||
#include "G3D/Vector4.h"
|
||||
|
||||
namespace boost
|
||||
{
|
||||
namespace filesystem
|
||||
{
|
||||
class path;
|
||||
}
|
||||
}
|
||||
|
||||
struct FlyByCamera
|
||||
{
|
||||
uint32 timeStamp;
|
||||
@@ -31,6 +39,6 @@ typedef std::vector<FlyByCamera> FlyByCameraCollection;
|
||||
|
||||
TC_GAME_API extern std::unordered_map<uint32, FlyByCameraCollection> sFlyByCameraStore;
|
||||
|
||||
TC_GAME_API void LoadM2Cameras(std::string const& dataPath);
|
||||
TC_GAME_API void LoadM2Cameras(boost::filesystem::path const& dataPath);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -415,7 +415,7 @@ struct TC_GAME_API CreatureTemplate
|
||||
case DIFFICULTY_HEROIC_RAID:
|
||||
return 0;
|
||||
case DIFFICULTY_10_HC:
|
||||
case DIFFICULTY_CHALLENGE:
|
||||
case DIFFICULTY_MYTHIC_KEYSTONE:
|
||||
case DIFFICULTY_MYTHIC_RAID:
|
||||
return 1;
|
||||
case DIFFICULTY_25_HC:
|
||||
|
||||
@@ -251,6 +251,7 @@ enum ItemModifier : uint16
|
||||
ITEM_MODIFIER_CHALLENGE_KEYSTONE_AFFIX_ID_3 = 21,
|
||||
ITEM_MODIFIER_CHALLENGE_KEYSTONE_IS_CHARGED = 22,
|
||||
ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL = 23,
|
||||
ITEM_MODIFIER_ARTIFACT_TIER = 24,
|
||||
|
||||
MAX_ITEM_MODIFIERS
|
||||
};
|
||||
|
||||
@@ -5524,7 +5524,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
|
||||
return true;
|
||||
}
|
||||
// Seed of Corruption (Mobs cast) - no die req
|
||||
if (!dummySpell->SpellFamilyFlags && dummySpell->SpellIconID == 1932)
|
||||
if (!dummySpell->SpellFamilyFlags && dummySpell->IconFileDataId == 136193)
|
||||
{
|
||||
// if damage is more than need deal finish spell
|
||||
if (triggeredByAura->GetAmount() <= int32(damage))
|
||||
|
||||
@@ -17,7 +17,10 @@
|
||||
*/
|
||||
|
||||
#include "Common.h"
|
||||
#include "ConditionMgr.h"
|
||||
#include "Containers.h"
|
||||
#include "DatabaseEnv.h"
|
||||
#include "DB2Stores.h"
|
||||
#include "WorldPacket.h"
|
||||
#include "WorldSession.h"
|
||||
#include "Opcodes.h"
|
||||
@@ -184,8 +187,25 @@ void WorldSession::HandleActivateTaxiOpcode(WorldPackets::Taxi::ActivateTaxi& ac
|
||||
|
||||
uint32 preferredMountDisplay = 0;
|
||||
if (MountEntry const* mount = sMountStore.LookupEntry(activateTaxi.FlyingMountID))
|
||||
{
|
||||
if (GetPlayer()->HasSpell(mount->SpellId))
|
||||
preferredMountDisplay = mount->DisplayId;
|
||||
{
|
||||
if (DB2Manager::MountXDisplayContainer const* mountDisplays = sDB2Manager.GetMountDisplays(mount->ID))
|
||||
{
|
||||
DB2Manager::MountXDisplayContainer usableDisplays;
|
||||
std::copy_if(mountDisplays->begin(), mountDisplays->end(), std::back_inserter(usableDisplays), [this](MountXDisplayEntry const* mountDisplay)
|
||||
{
|
||||
if (PlayerConditionEntry const* playerCondition = sPlayerConditionStore.LookupEntry(mountDisplay->PlayerConditionID))
|
||||
return sConditionMgr->IsPlayerMeetingCondition(GetPlayer(), playerCondition);
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
if (!usableDisplays.empty())
|
||||
preferredMountDisplay = Trinity::Containers::SelectRandomContainerElement(usableDisplays)->DisplayID;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<uint32> nodes;
|
||||
sTaxiPathGraph.GetCompleteNodeRoute(from, to, GetPlayer(), nodes);
|
||||
|
||||
@@ -1817,6 +1817,7 @@ void LoadLootTemplates_Skinning()
|
||||
|
||||
void LoadLootTemplates_Spell()
|
||||
{
|
||||
// TODO: change this to use MiscValue from spell effect as id instead of spell id
|
||||
TC_LOG_INFO("server.loading", "Loading spell loot templates...");
|
||||
|
||||
uint32 oldMSTime = getMSTime();
|
||||
|
||||
@@ -1179,7 +1179,7 @@ enum SpellEffectName
|
||||
SPELL_EFFECT_DISCOVER_TAXI = 154,
|
||||
SPELL_EFFECT_TITAN_GRIP = 155,
|
||||
SPELL_EFFECT_ENCHANT_ITEM_PRISMATIC = 156,
|
||||
SPELL_EFFECT_CREATE_ITEM_2 = 157,
|
||||
SPELL_EFFECT_CREATE_LOOT = 157, // crafting loot
|
||||
SPELL_EFFECT_MILLING = 158,
|
||||
SPELL_EFFECT_ALLOW_RENAME_PET = 159,
|
||||
SPELL_EFFECT_FORCE_CAST_2 = 160,
|
||||
|
||||
@@ -2486,7 +2486,21 @@ void AuraEffect::HandleAuraMounted(AuraApplication const* aurApp, uint8 mode, bo
|
||||
|
||||
if (MountEntry const* mountEntry = sDB2Manager.GetMount(GetId()))
|
||||
{
|
||||
displayId = mountEntry->DisplayId;
|
||||
if (DB2Manager::MountXDisplayContainer const* mountDisplays = sDB2Manager.GetMountDisplays(mountEntry->ID))
|
||||
{
|
||||
DB2Manager::MountXDisplayContainer usableDisplays;
|
||||
std::copy_if(mountDisplays->begin(), mountDisplays->end(), std::back_inserter(usableDisplays), [target](MountXDisplayEntry const* mountDisplay)
|
||||
{
|
||||
if (Player* playerTarget = target->ToPlayer())
|
||||
if (PlayerConditionEntry const* playerCondition = sPlayerConditionStore.LookupEntry(mountDisplay->PlayerConditionID))
|
||||
return sConditionMgr->IsPlayerMeetingCondition(playerTarget, playerCondition);
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
if (!usableDisplays.empty())
|
||||
displayId = Trinity::Containers::SelectRandomContainerElement(usableDisplays)->DisplayID;
|
||||
}
|
||||
// TODO: CREATE TABLE mount_vehicle (mountId, vehicleCreatureId) for future mounts that are vehicles (new mounts no longer have proper data in MiscValue)
|
||||
//if (MountVehicle const* mountVehicle = sObjectMgr->GetMountVehicle(mountEntry->Id))
|
||||
// creatureEntry = mountVehicle->VehicleCreatureId;
|
||||
|
||||
@@ -3680,7 +3680,7 @@ void Spell::finish(bool ok)
|
||||
// Unsummon statue
|
||||
uint32 spell = m_caster->GetUInt32Value(UNIT_CREATED_BY_SPELL);
|
||||
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spell);
|
||||
if (spellInfo && spellInfo->SpellIconID == 2056)
|
||||
if (spellInfo && spellInfo->IconFileDataId == 134230)
|
||||
{
|
||||
TC_LOG_DEBUG("spells", "Statue %s is unsummoned in spell %d finish", m_caster->GetGUID().ToString().c_str(), m_spellInfo->Id);
|
||||
m_caster->setDeathState(JUST_DIED);
|
||||
@@ -6275,7 +6275,7 @@ SpellCastResult Spell::CheckItems()
|
||||
switch (effect->Effect)
|
||||
{
|
||||
case SPELL_EFFECT_CREATE_ITEM:
|
||||
case SPELL_EFFECT_CREATE_ITEM_2:
|
||||
case SPELL_EFFECT_CREATE_LOOT:
|
||||
{
|
||||
if (!IsTriggered() && effect->ItemType)
|
||||
{
|
||||
|
||||
@@ -1387,6 +1387,7 @@ void Spell::DoCreateItem(uint32 /*i*/, uint32 itemtype, std::vector<int32> const
|
||||
num_to_add = pProto->GetMaxStackSize();
|
||||
|
||||
/* == gem perfection handling == */
|
||||
// this is bad, should be done using spell_loot_template (and conditions)
|
||||
|
||||
// the chance of getting a perfect result
|
||||
float perfectCreateChance = 0.0f;
|
||||
@@ -4398,8 +4399,8 @@ void Spell::EffectLeapBack(SpellEffIndex /*effIndex*/)
|
||||
|
||||
float speedxy = effectInfo->MiscValue / 10.f;
|
||||
float speedz = damage / 10.f;
|
||||
//1891: Disengage
|
||||
unitTarget->JumpTo(speedxy, speedz, m_spellInfo->SpellIconID != 1891);
|
||||
// Disengage
|
||||
unitTarget->JumpTo(speedxy, speedz, m_spellInfo->IconFileDataId != 132572);
|
||||
}
|
||||
|
||||
void Spell::EffectQuestClear(SpellEffIndex /*effIndex*/)
|
||||
|
||||
@@ -1024,8 +1024,8 @@ SpellInfo::SpellInfo(SpellInfoLoadHelper const& data, SpellEffectEntryMap const&
|
||||
Speed = _misc ? _misc->Speed : 0;
|
||||
SchoolMask = _misc ? _misc->SchoolMask : 0;
|
||||
AttributesCu = 0;
|
||||
SpellIconID = _misc ? _misc->SpellIconID : 0;
|
||||
ActiveIconID = _misc ? _misc->ActiveIconID : 0;
|
||||
IconFileDataId = _misc ? _misc->IconFileDataID : 0;
|
||||
ActiveIconFileDataId = _misc ? _misc->ActiveIconFileDataID : 0;
|
||||
|
||||
_visuals = std::move(visuals);
|
||||
// sort all visuals so that the ones without a condition requirement are last on the list
|
||||
@@ -1224,18 +1224,14 @@ bool SpellInfo::IsExplicitDiscovery() const
|
||||
SpellEffectInfo const* effect0 = GetEffect(DIFFICULTY_NONE, EFFECT_0);
|
||||
SpellEffectInfo const* effect1 = GetEffect(DIFFICULTY_NONE, EFFECT_1);
|
||||
|
||||
return ((effect0 && (effect0->Effect == SPELL_EFFECT_CREATE_RANDOM_ITEM || effect0->Effect == SPELL_EFFECT_CREATE_ITEM_2))
|
||||
return ((effect0 && (effect0->Effect == SPELL_EFFECT_CREATE_RANDOM_ITEM || effect0->Effect == SPELL_EFFECT_CREATE_LOOT))
|
||||
&& effect1 && effect1->Effect == SPELL_EFFECT_SCRIPT_EFFECT)
|
||||
|| Id == 64323;
|
||||
}
|
||||
|
||||
bool SpellInfo::IsLootCrafting() const
|
||||
{
|
||||
SpellEffectInfo const* effect0 = GetEffect(DIFFICULTY_NONE, EFFECT_0);
|
||||
return effect0 && (effect0->Effect == SPELL_EFFECT_CREATE_RANDOM_ITEM ||
|
||||
// different random cards from Inscription (121==Virtuoso Inking Set category) r without explicit item
|
||||
(effect0->Effect == SPELL_EFFECT_CREATE_ITEM_2 &&
|
||||
((TotemCategory[0] != 0 || (Totem[0] != 0 && SpellIconID == 1)) || effect0->ItemType == 0)));
|
||||
return HasEffect(SPELL_EFFECT_CREATE_RANDOM_ITEM) || HasEffect(SPELL_EFFECT_CREATE_LOOT);
|
||||
}
|
||||
|
||||
bool SpellInfo::IsQuestTame() const
|
||||
@@ -3016,10 +3012,10 @@ uint32 SpellInfo::GetSpellVisual(Unit const* caster /*= nullptr*/) const
|
||||
{
|
||||
if (SpellXSpellVisualEntry const* visual = sSpellXSpellVisualStore.LookupEntry(GetSpellXSpellVisualId(caster)))
|
||||
{
|
||||
//if (visual->SpellVisualID[1] && forPlayer->GetViolenceLevel() operator 2)
|
||||
// return visual->SpellVisualID[1];
|
||||
//if (visual->LowViolenceSpellVisualID && forPlayer->GetViolenceLevel() operator 2)
|
||||
// return visual->LowViolenceSpellVisualID;
|
||||
|
||||
return visual->SpellVisualID[0];
|
||||
return visual->SpellVisualID;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -386,8 +386,8 @@ public:
|
||||
int32 EquippedItemSubClassMask;
|
||||
int32 EquippedItemInventoryTypeMask;
|
||||
uint32 TotemCategory[MAX_SPELL_TOTEMS];
|
||||
uint32 SpellIconID;
|
||||
uint32 ActiveIconID;
|
||||
uint32 IconFileDataId;
|
||||
uint32 ActiveIconFileDataId;
|
||||
LocalizedString const* SpellName;
|
||||
uint32 MaxTargetLevel;
|
||||
uint32 MaxAffectedTargets;
|
||||
|
||||
@@ -465,7 +465,7 @@ bool SpellMgr::IsSpellValid(SpellInfo const* spellInfo, Player* player, bool msg
|
||||
|
||||
// craft spell for crafting non-existed item (break client recipes list show)
|
||||
case SPELL_EFFECT_CREATE_ITEM:
|
||||
case SPELL_EFFECT_CREATE_ITEM_2:
|
||||
case SPELL_EFFECT_CREATE_LOOT:
|
||||
{
|
||||
if (effect->ItemType == 0)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user