Port to WoW client 12.0.7 (build 68453)
Adapt CypherCore from 11.2.5.63796 to 12.0.7.68453 using TrinityCore as byte-exact reference. - Fase 1: build gate 68453 (build_info + build_auth_key SQL, keys from TC) - Fase 2: Opcodes.cs remapped by name to 12.0.7 values - Fase 3: 32 DB2 structs + HotfixDatabase.cs SELECTs realigned; fixed ReputationManager/SpellInfo refs - Fase 4: UpdateFields ported (GameObject/Conversation/AreaTrigger/Player/ Unit/ActivePlayer + nested VisibleItem/QuestLog/BitVectors/CraftingOrderItem/ SkillInfo) - Critical protocol fixes: CreateObject header +3 bits (Room/Decor/MeshObject); EntityFragment enum renumbered to 12.0.7 (was 11.2.5 values, breaking every object packet) - New-entity foundation: TypeId/TypeMask/HighGuid.MeshObject, fragment tags - MeshObject entity scaffold (Midnight features are wire-format only) Builds clean (dotnet build -c Release, 0 errors). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -19,7 +19,8 @@ namespace Framework.Constants
|
||||
AreaTrigger = 11,
|
||||
SceneObject = 12,
|
||||
Conversation = 13,
|
||||
Max = 14
|
||||
MeshObject = 14, // 12.0.7
|
||||
Max = 15
|
||||
}
|
||||
|
||||
public enum TypeMask
|
||||
@@ -38,9 +39,10 @@ namespace Framework.Constants
|
||||
AreaTrigger = 0x800,
|
||||
SceneObject = 0x1000,
|
||||
Conversation = 0x2000,
|
||||
MeshObject = 0x4000, // 12.0.7
|
||||
|
||||
Seer = Unit | Player | DynamicObject,
|
||||
WorldObject = Unit | GameObject | DynamicObject | Corpse | AreaTrigger | SceneObject | Conversation
|
||||
WorldObject = Unit | GameObject | DynamicObject | Corpse | AreaTrigger | SceneObject | Conversation | MeshObject
|
||||
}
|
||||
|
||||
public enum HighGuid
|
||||
@@ -100,6 +102,9 @@ namespace Framework.Constants
|
||||
ArenaTeam = 52,
|
||||
LMMParty = 53,
|
||||
LMMLobby = 54,
|
||||
Housing = 55, // 12.0.7
|
||||
MeshObject = 56, // 12.0.7
|
||||
Entity = 57, // 12.0.7
|
||||
|
||||
Count
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) CypherCore <http://github.com/CypherCore> All rights reserved.
|
||||
// Copyright (c) CypherCore <http://github.com/CypherCore> All rights reserved.
|
||||
// Licensed under the GNU GENERAL PUBLIC LICENSE. See LICENSE file in the project root for full license information.
|
||||
|
||||
namespace Framework.Database
|
||||
@@ -202,9 +202,7 @@ namespace Framework.Database
|
||||
" WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// BattlemasterList.db2
|
||||
PrepareStatement(HotfixStatements.SEL_BATTLEMASTER_LIST, "SELECT ID, Name, GameType, ShortDescription, LongDescription, PvpType, MinLevel, MaxLevel, " +
|
||||
"RatedPlayers, MinPlayers, MaxPlayers, GroupsAllowed, MaxGroupSize, HolidayWorldState, Flags, IconFileDataID, RequiredPlayerConditionID" +
|
||||
" FROM battlemaster_list WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_BATTLEMASTER_LIST, "SELECT ID, Name, GameType, ShortDescription, LongDescription, InstanceType, PvpType, MinLevel, MaxLevel, RatedPlayers, MinPlayers, MaxPlayers, GroupsAllowed, MaxGroupSize, HolidayWorldState, Flags, IconFileDataID, RequiredPlayerConditionID FROM battlemaster_list WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_BATTLEMASTER_LIST_LOCALE, "SELECT ID, Name_lang, GameType_lang, ShortDescription_lang, LongDescription_lang" +
|
||||
" FROM battlemaster_list_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?");
|
||||
|
||||
@@ -246,8 +244,7 @@ namespace Framework.Database
|
||||
" AND locale = ?");
|
||||
|
||||
// CharacterLoadout.db2
|
||||
PrepareStatement(HotfixStatements.SEL_CHARACTER_LOADOUT, "SELECT ID, RaceMask, ChrClassID, Purpose, ItemContext FROM character_loadout" +
|
||||
" WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_CHARACTER_LOADOUT, "SELECT ID, ChrClassID, Purpose, ItemContext, RaceMask FROM character_loadout WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// CharacterLoadoutItem.db2
|
||||
PrepareStatement(HotfixStatements.SEL_CHARACTER_LOADOUT_ITEM, "SELECT ID, CharacterLoadoutID, ItemID FROM character_loadout_item" +
|
||||
@@ -305,8 +302,7 @@ namespace Framework.Database
|
||||
" WHERE (`VerifiedBuild` > 0) = ? AND locale = ?");
|
||||
|
||||
// ChrCustomizationReq.db2
|
||||
PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_REQ, "SELECT ID, RaceMask, ReqSource, Flags, ClassMask, RegionGroupMask, AchievementID, QuestID, " +
|
||||
"OverrideArchive, ItemModifiedAppearanceID FROM chr_customization_req WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_REQ, "SELECT ID, ReqSource, Flags, ClassMask, RegionGroupMask, AchievementID, QuestID, OverrideArchive, ItemModifiedAppearanceID, RaceMask FROM chr_customization_req WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_REQ_LOCALE, "SELECT ID, ReqSource_lang FROM chr_customization_req_locale WHERE (`VerifiedBuild` > 0) = ?" +
|
||||
" AND locale = ?");
|
||||
|
||||
@@ -360,8 +356,7 @@ namespace Framework.Database
|
||||
"ChrCustomizationCategoryID FROM conditional_chr_model WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// ConditionalContentTuning.db2
|
||||
PrepareStatement(HotfixStatements.SEL_CONDITIONAL_CONTENT_TUNING, "SELECT ID, OrderIndex, RedirectContentTuningID, RedirectFlag, ParentContentTuningID" +
|
||||
" FROM conditional_content_tuning WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_CONDITIONAL_CONTENT_TUNING, "SELECT ID, OrderIndex, RedirectContentTuningID, RedirectFlag, RedirectEnum, ParentContentTuningID FROM conditional_content_tuning WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// ContentTuning.db2
|
||||
PrepareStatement(HotfixStatements.SEL_CONTENT_TUNING, "SELECT ID, Flags, ExpansionID, HealthItemLevelCurveID, DamageItemLevelCurveID, " +
|
||||
@@ -434,9 +429,7 @@ namespace Framework.Database
|
||||
" WHERE (`VerifiedBuild` > 0) = ? AND locale = ?");
|
||||
|
||||
// CurrencyTypes.db2
|
||||
PrepareStatement(HotfixStatements.SEL_CURRENCY_TYPES, "SELECT ID, Name, Description, CategoryID, InventoryIconFileID, SpellWeight, SpellCategory, MaxQty, " +
|
||||
"MaxEarnablePerWeek, Quality, FactionID, ItemGroupSoundsID, XpQuestDifficulty, AwardConditionID, MaxQtyWorldStateID, " +
|
||||
"RechargingAmountPerCycle, RechargingCycleDurationMS, AccountTransferPercentage, OrderIndex, Flags1, Flags2 FROM currency_types WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_CURRENCY_TYPES, "SELECT ID, Name, Description, CategoryID, InventoryIconFileID, SpellWeight, SpellCategory, MaxQty, MaxEarnablePerWeek, Quality, FactionID, ItemGroupSoundsID, XpQuestDifficulty, AwardConditionID, MaxQtyWorldStateID, RechargingAmountPerCycle, RechargingCycleDurationMS, AccountTransferPercentage, OrderIndex, RecraftReagentCountPercentage, OrderSource, MCRCurrencyID, Flags1, Flags2 FROM currency_types WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_CURRENCY_TYPES_LOCALE, "SELECT ID, Name_lang, Description_lang FROM currency_types_locale WHERE (`VerifiedBuild` > 0) = ?" +
|
||||
" AND locale = ?");
|
||||
|
||||
@@ -478,8 +471,7 @@ namespace Framework.Database
|
||||
PrepareStatement(HotfixStatements.SEL_DURABILITY_QUALITY, "SELECT ID, Data FROM durability_quality WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// Emotes.db2
|
||||
PrepareStatement(HotfixStatements.SEL_EMOTES, "SELECT ID, RaceMask, EmoteSlashCommand, AnimID, EmoteFlags, EmoteSpecProc, EmoteSpecProcParam, EventSoundID, " +
|
||||
"SpellVisualKitID, ClassMask FROM emotes WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_EMOTES, "SELECT ID, EmoteSlashCommand, AnimID, EmoteFlags, EmoteSpecProc, EmoteSpecProcParam, EventSoundID, SpellVisualKitID, ClassMask, RaceMask FROM emotes WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// EmotesText.db2
|
||||
PrepareStatement(HotfixStatements.SEL_EMOTES_TEXT, "SELECT ID, Name, EmoteID FROM emotes_text WHERE (`VerifiedBuild` > 0) = ?");
|
||||
@@ -499,12 +491,7 @@ namespace Framework.Database
|
||||
" WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// Faction.db2
|
||||
PrepareStatement(HotfixStatements.SEL_FACTION, "SELECT ID, ReputationRaceMask1, ReputationRaceMask2, ReputationRaceMask3, ReputationRaceMask4, Name, " +
|
||||
"Description, ReputationIndex, ParentFactionID, Expansion, FriendshipRepID, Flags, ParagonFactionID, RenownFactionID, RenownCurrencyID, " +
|
||||
"ReputationClassMask1, ReputationClassMask2, ReputationClassMask3, ReputationClassMask4, ReputationFlags1, ReputationFlags2, " +
|
||||
"ReputationFlags3, ReputationFlags4, ReputationBase1, ReputationBase2, ReputationBase3, ReputationBase4, ReputationMax1, ReputationMax2, " +
|
||||
"ReputationMax3, ReputationMax4, ParentFactionMod1, ParentFactionMod2, ParentFactionCap1, ParentFactionCap2 FROM faction" +
|
||||
" WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_FACTION, "SELECT ID, Name, Description, ReputationIndex, ParentFactionID, Expansion, FriendshipRepID, Flags, ParagonFactionID, RenownFactionID, RenownCurrencyID, ReputationClassMask1, ReputationClassMask2, ReputationClassMask3, ReputationClassMask4, ReputationFlags1, ReputationFlags2, ReputationFlags3, ReputationFlags4, ReputationBase1, ReputationBase2, ReputationBase3, ReputationBase4, ReputationMax1, ReputationMax2, ReputationMax3, ReputationMax4, ParentFactionMod1, ParentFactionMod2, ParentFactionCap1, ParentFactionCap2, ReputationRaceMask1, ReputationRaceMask2, ReputationRaceMask3, ReputationRaceMask4 FROM faction WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_FACTION_LOCALE, "SELECT ID, Name_lang, Description_lang FROM faction_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?");
|
||||
|
||||
// FactionTemplate.db2
|
||||
@@ -597,8 +584,7 @@ namespace Framework.Database
|
||||
" WHERE (`VerifiedBuild` > 0) = ? AND locale = ?");
|
||||
|
||||
// GarrPlot.db2
|
||||
PrepareStatement(HotfixStatements.SEL_GARR_PLOT, "SELECT ID, Name, PlotType, HordeConstructObjID, AllianceConstructObjID, Flags, UiCategoryID, " +
|
||||
"UpgradeRequirement1, UpgradeRequirement2 FROM garr_plot WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_GARR_PLOT, "SELECT ID, Name, PlotType, HordeConstructObjID, AllianceConstructObjID, Flags, UpgradeRequirement1, UpgradeRequirement2 FROM garr_plot WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// GarrPlotBuilding.db2
|
||||
PrepareStatement(HotfixStatements.SEL_GARR_PLOT_BUILDING, "SELECT ID, GarrPlotID, GarrBuildingID FROM garr_plot_building WHERE (`VerifiedBuild` > 0) = ?");
|
||||
@@ -640,7 +626,7 @@ namespace Framework.Database
|
||||
// GossipNpcOption.db2
|
||||
PrepareStatement(HotfixStatements.SEL_GOSSIP_NPC_OPTION, "SELECT ID, GossipNpcOption, LFGDungeonsID, TrainerID, GarrFollowerTypeID, CharShipmentID, " +
|
||||
"GarrTalentTreeID, UiMapID, UiItemInteractionID, Unknown_1000_8, Unknown_1000_9, CovenantID, GossipOptionID, TraitTreeID, ProfessionID, " +
|
||||
"Unknown_1002_14, SkillLineID FROM gossip_npc_option WHERE (`VerifiedBuild` > 0) = ?");
|
||||
"Unknown_1002_14, NeighborhoodMapID, SkillLineID FROM gossip_npc_option WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// GuildColorBackground.db2
|
||||
PrepareStatement(HotfixStatements.SEL_GUILD_COLOR_BACKGROUND, "SELECT ID, Red, Blue, Green FROM guild_color_background WHERE (`VerifiedBuild` > 0) = ?");
|
||||
@@ -683,8 +669,7 @@ namespace Framework.Database
|
||||
PrepareStatement(HotfixStatements.SEL_IMPORT_PRICE_WEAPON, "SELECT ID, Data FROM import_price_weapon WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// Item.db2
|
||||
PrepareStatement(HotfixStatements.SEL_ITEM, "SELECT ID, ClassID, SubclassID, Material, InventoryType, SheatheType, SoundOverrideSubclassID, IconFileDataID, " +
|
||||
"ItemGroupSoundsID, ContentTuningID, ModifiedCraftingReagentItemID, CraftingQualityID FROM item WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_ITEM, "SELECT ID, ClassID, SubclassID, Material, InventoryType, SheatheType, SoundOverrideSubclassID, IconFileDataID, ItemGroupSoundsID, ContentTuningID, ModifiedCraftingReagentItemID, Unknown1200, CraftingQualityID, ItemSquishEraID, RecraftReagentCountPercentage, OrderSource FROM item WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// ItemAppearance.db2
|
||||
PrepareStatement(HotfixStatements.SEL_ITEM_APPEARANCE, "SELECT ID, DisplayType, ItemDisplayInfoID, DefaultIconFileDataID, UiOrder, PlayerConditionID" +
|
||||
@@ -770,14 +755,10 @@ namespace Framework.Database
|
||||
" FROM item_disenchant_loot WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// ItemEffect.db2
|
||||
PrepareStatement(HotfixStatements.SEL_ITEM_EFFECT, "SELECT ID, LegacySlotIndex, TriggerType, Charges, CoolDownMSec, CategoryCoolDownMSec, SpellCategoryID, " +
|
||||
"SpellID, ChrSpecializationID FROM item_effect WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_ITEM_EFFECT, "SELECT ID, LegacySlotIndex, TriggerType, Charges, CoolDownMSec, CategoryCoolDownMSec, SpellCategoryID, SpellID, ChrSpecializationID, PlayerConditionID FROM item_effect WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// ItemExtendedCost.db2
|
||||
PrepareStatement(HotfixStatements.SEL_ITEM_EXTENDED_COST, "SELECT ID, RequiredArenaRating, ArenaBracket, Flags, MinFactionID, MinReputation, " +
|
||||
"RequiredAchievement, ItemID1, ItemID2, ItemID3, ItemID4, ItemID5, ItemCount1, ItemCount2, ItemCount3, ItemCount4, ItemCount5, CurrencyID1, " +
|
||||
"CurrencyID2, CurrencyID3, CurrencyID4, CurrencyID5, CurrencyCount1, CurrencyCount2, CurrencyCount3, CurrencyCount4, CurrencyCount5" +
|
||||
" FROM item_extended_cost WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_ITEM_EXTENDED_COST, "SELECT ID, Money, RequiredArenaRating, ArenaBracket, Flags, MinFactionID, MinReputation, RequiredAchievement, ItemID1, ItemID2, ItemID3, ItemID4, ItemID5, ItemCount1, ItemCount2, ItemCount3, ItemCount4, ItemCount5, CurrencyID1, CurrencyID2, CurrencyID3, CurrencyID4, CurrencyID5, CurrencyCount1, CurrencyCount2, CurrencyCount3, CurrencyCount4, CurrencyCount5 FROM item_extended_cost WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// ItemLevelSelector.db2
|
||||
PrepareStatement(HotfixStatements.SEL_ITEM_LEVEL_SELECTOR, "SELECT ID, MinItemLevel, ItemLevelSelectorQualitySetID, AzeriteUnlockMappingSet" +
|
||||
@@ -820,13 +801,10 @@ namespace Framework.Database
|
||||
PrepareStatement(HotfixStatements.SEL_ITEM_PRICE_BASE, "SELECT ID, ItemLevel, Armor, Weapon FROM item_price_base WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// ItemScalingConfig.db2
|
||||
PrepareStatement(HotfixStatements.SEL_ITEM_SCALING_CONFIG, "SELECT ID, ItemOffsetCurveID, ItemLevel, RequiredLevel, Unknown1125 FROM item_scaling_config" +
|
||||
" WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_ITEM_SCALING_CONFIG, "SELECT ID, ItemOffsetCurveID, ItemLevel, RequiredLevel, Unknown1125, Flags FROM item_scaling_config WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// ItemSearchName.db2
|
||||
PrepareStatement(HotfixStatements.SEL_ITEM_SEARCH_NAME, "SELECT ID, AllowableRace, Display, OverallQualityID, ExpansionID, MinFactionID, MinReputation, " +
|
||||
"AllowableClass, RequiredLevel, RequiredSkill, RequiredSkillRank, RequiredAbility, ItemLevel, Flags1, Flags2, Flags3, Flags4, Flags5" +
|
||||
" FROM item_search_name WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_ITEM_SEARCH_NAME, "SELECT ID, Display, OverallQualityID, ExpansionID, MinFactionID, MinReputation, AllowableClass, RequiredLevel, RequiredSkill, RequiredSkillRank, RequiredAbility, ItemLevel, Flags1, Flags2, Flags3, Flags4, Flags5, AllowableRace FROM item_search_name WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_ITEM_SEARCH_NAME_LOCALE, "SELECT ID, Display_lang FROM item_search_name_locale WHERE (`VerifiedBuild` > 0) = ?" +
|
||||
" AND locale = ?");
|
||||
|
||||
@@ -841,20 +819,7 @@ namespace Framework.Database
|
||||
" WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// ItemSparse.db2
|
||||
PrepareStatement(HotfixStatements.SEL_ITEM_SPARSE, "SELECT ID, AllowableRace, Description, Display3, Display2, Display1, Display, ExpansionID, DmgVariance, " +
|
||||
"LimitCategory, DurationInInventory, QualityModifier, BagFamily, StartQuestID, LanguageID, ItemRange, StatPercentageOfSocket1, " +
|
||||
"StatPercentageOfSocket2, StatPercentageOfSocket3, StatPercentageOfSocket4, StatPercentageOfSocket5, StatPercentageOfSocket6, " +
|
||||
"StatPercentageOfSocket7, StatPercentageOfSocket8, StatPercentageOfSocket9, StatPercentageOfSocket10, StatPercentEditor1, StatPercentEditor2, " +
|
||||
"StatPercentEditor3, StatPercentEditor4, StatPercentEditor5, StatPercentEditor6, StatPercentEditor7, StatPercentEditor8, StatPercentEditor9, " +
|
||||
"StatPercentEditor10, StatModifierBonusStat1, StatModifierBonusStat2, StatModifierBonusStat3, StatModifierBonusStat4, StatModifierBonusStat5, " +
|
||||
"StatModifierBonusStat6, StatModifierBonusStat7, StatModifierBonusStat8, StatModifierBonusStat9, StatModifierBonusStat10, Stackable, " +
|
||||
"MaxCount, MinReputation, RequiredAbility, SellPrice, BuyPrice, VendorStackCount, PriceVariance, PriceRandomValue, Flags1, Flags2, Flags3, " +
|
||||
"Flags4, Flags5, FactionRelated, ModifiedCraftingReagentItemID, ContentTuningID, PlayerLevelToItemLevelCurveID, ItemLevelOffsetCurveID, " +
|
||||
"ItemLevelOffsetItemLevel, ItemNameDescriptionID, RequiredTransmogHoliday, RequiredHoliday, GemProperties, SocketMatchEnchantmentId, " +
|
||||
"TotemCategoryID, InstanceBound, ZoneBound1, ZoneBound2, ItemSet, LockID, PageID, ItemDelay, MinFactionID, RequiredSkillRank, RequiredSkill, " +
|
||||
"ItemLevel, AllowableClass, ArtifactID, SpellWeight, SpellWeightCategory, SocketType1, SocketType2, SocketType3, SheatheType, Material, " +
|
||||
"PageMaterialID, Bonding, DamageDamageType, ContainerSlots, RequiredPVPMedal, RequiredPVPRank, RequiredLevel, InventoryType, " +
|
||||
"OverallQualityID FROM item_sparse WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_ITEM_SPARSE, "SELECT ID, Description, Display3, Display2, Display1, Display, ExpansionID, DmgVariance, LimitCategory, DurationInInventory, QualityModifier, BagFamily, StartQuestID, LanguageID, ItemRange, StatPercentageOfSocket1, StatPercentageOfSocket2, StatPercentageOfSocket3, StatPercentageOfSocket4, StatPercentageOfSocket5, StatPercentageOfSocket6, StatPercentageOfSocket7, StatPercentageOfSocket8, StatPercentageOfSocket9, StatPercentageOfSocket10, StatPercentEditor1, StatPercentEditor2, StatPercentEditor3, StatPercentEditor4, StatPercentEditor5, StatPercentEditor6, StatPercentEditor7, StatPercentEditor8, StatPercentEditor9, StatPercentEditor10, StatModifierBonusStat1, StatModifierBonusStat2, StatModifierBonusStat3, StatModifierBonusStat4, StatModifierBonusStat5, StatModifierBonusStat6, StatModifierBonusStat7, StatModifierBonusStat8, StatModifierBonusStat9, StatModifierBonusStat10, Stackable, MaxCount, MinReputation, RequiredAbility, AllowableRace, SellPrice, BuyPrice, VendorStackCount, PriceVariance, PriceRandomValue, Flags1, Flags2, Flags3, Flags4, Flags5, FactionRelated, ModifiedCraftingReagentItemID, ContentTuningID, PlayerLevelToItemLevelCurveID, ItemLevelOffsetCurveID, ItemLevelOffsetItemLevel, ItemSquishEraID, ItemNameDescriptionID, RequiredTransmogHoliday, RequiredHoliday, GemProperties, SocketMatchEnchantmentId, TotemCategoryID, InstanceBound, ZoneBound1, ZoneBound2, ItemSet, LockID, PageID, ItemDelay, MinFactionID, RequiredSkillRank, RequiredSkill, ItemLevel, AllowableClass, ArtifactID, SpellWeight, SpellWeightCategory, SocketType1, SocketType2, SocketType3, SheatheType, Material, PageMaterialID, Bonding, DamageType, ContainerSlots, RequiredPVPMedal, RequiredPVPRank, RequiredLevel, InventoryType, OverallQualityID FROM item_sparse WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_ITEM_SPARSE_LOCALE, "SELECT ID, Description_lang, Display3_lang, Display2_lang, Display1_lang, Display_lang" +
|
||||
" FROM item_sparse_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?");
|
||||
|
||||
@@ -927,12 +892,7 @@ namespace Framework.Database
|
||||
" WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// LiquidType.db2
|
||||
PrepareStatement(HotfixStatements.SEL_LIQUID_TYPE, "SELECT ID, Name, Texture1, Texture2, Texture3, Texture4, Texture5, Texture6, Flags, SoundBank, SoundID, " +
|
||||
"SpellID, MaxDarkenDepth, FogDarkenIntensity, AmbDarkenIntensity, DirDarkenIntensity, LightID, ParticleScale, ParticleMovement, " +
|
||||
"ParticleTexSlots, MaterialID, MinimapStaticCol, FrameCountTexture1, FrameCountTexture2, FrameCountTexture3, FrameCountTexture4, " +
|
||||
"FrameCountTexture5, FrameCountTexture6, Color1, Color2, Float1, Float2, Float3, `Float4`, Float5, Float6, Float7, `Float8`, Float9, Float10, " +
|
||||
"Float11, Float12, Float13, Float14, Float15, Float16, Float17, Float18, `Int1`, `Int2`, `Int3`, `Int4`, Coefficient1, Coefficient2, " +
|
||||
"Coefficient3, Coefficient4 FROM liquid_type WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_LIQUID_TYPE, "SELECT ID, Name, Texture1, Texture2, Texture3, Texture4, Texture5, Texture6, Flags, SoundBank, SoundID, SpellID, MaxDarkenDepth, FogDarkenIntensity, AmbDarkenIntensity, DirDarkenIntensity, LightID, ParticleScale, ParticleMovement, ParticleTexSlots, MaterialID, MinimapStaticCol, FrameCountTexture1, FrameCountTexture2, FrameCountTexture3, FrameCountTexture4, FrameCountTexture5, FrameCountTexture6, Color1, Color2, Color3, Float1, Float2, Float3, `Float4`, Float5, Float6, Float7, `Float8`, Float9, Float10, Float11, Float12, Float13, Float14, Float15, Float16, Float17, Float18, Float19, Float20, Float21, Float22, Float23, Float24, Float25, Float26, Float27, Float28, Float29, Float30, Float31, Float32, Float33, Float34, Float35, Float36, Float37, Float38, `Int1`, `Int2`, `Int3`, `Int4`, Coefficient1, Coefficient2, Coefficient3, Coefficient4 FROM liquid_type WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// Location.db2
|
||||
PrepareStatement(HotfixStatements.SEL_LOCATION, "SELECT ID, PosX, PosY, PosZ, Rot1, Rot2, Rot3 FROM location WHERE (`VerifiedBuild` > 0) = ?");
|
||||
@@ -955,10 +915,7 @@ namespace Framework.Database
|
||||
"PvpLongDescription_lang FROM map_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?");
|
||||
|
||||
// MapChallengeMode.db2
|
||||
PrepareStatement(HotfixStatements.SEL_MAP_CHALLENGE_MODE, "SELECT Name, ID, MapID, Flags, ExpansionLevel, RequiredWorldStateID, CriteriaCount1, " +
|
||||
"CriteriaCount2, CriteriaCount3, FirstRewardQuestID1, FirstRewardQuestID2, FirstRewardQuestID3, FirstRewardQuestID4, FirstRewardQuestID5, " +
|
||||
"FirstRewardQuestID6, RewardQuestID1, RewardQuestID2, RewardQuestID3, RewardQuestID4, RewardQuestID5, RewardQuestID6 FROM map_challenge_mode" +
|
||||
" WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_MAP_CHALLENGE_MODE, "SELECT Name, ID, MapID, Flags, MaxMedals, ExpansionLevel, RequiredWorldStateID, CriteriaCount1, CriteriaCount2, CriteriaCount3, CriteriaCount4, CriteriaCount5, FirstRewardQuestID1, FirstRewardQuestID2, FirstRewardQuestID3, FirstRewardQuestID4, FirstRewardQuestID5, FirstRewardQuestID6, RewardQuestID1, RewardQuestID2, RewardQuestID3, RewardQuestID4, RewardQuestID5, RewardQuestID6 FROM map_challenge_mode WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_MAP_CHALLENGE_MODE_LOCALE, "SELECT ID, Name_lang FROM map_challenge_mode_locale WHERE (`VerifiedBuild` > 0) = ?" +
|
||||
" AND locale = ?");
|
||||
|
||||
@@ -1004,8 +961,7 @@ namespace Framework.Database
|
||||
" WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// Movie.db2
|
||||
PrepareStatement(HotfixStatements.SEL_MOVIE, "SELECT ID, Volume, KeyID, AudioFileDataID, SubtitleFileDataID, SubtitleFileFormat FROM movie" +
|
||||
" WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_MOVIE, "SELECT ID, Summary, Volume, KeyID, AudioFileDataID, SubtitleFileDataID, SubtitleFileFormat FROM movie WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// MythicPlusSeason.db2
|
||||
PrepareStatement(HotfixStatements.SEL_MYTHIC_PLUS_SEASON, "SELECT ID, MilestoneSeason, StartTimeEvent, ExpansionLevel, HeroicLFGDungeonMinGear" +
|
||||
@@ -1190,7 +1146,7 @@ namespace Framework.Database
|
||||
" WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// Scenario.db2
|
||||
PrepareStatement(HotfixStatements.SEL_SCENARIO, "SELECT ID, Name, AreaTableID, Type, Flags, UiTextureKitID FROM scenario WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_SCENARIO, "SELECT ID, Name, AreaTableID, Type, Flags, UiTextureKitID, UiScenarioDisplayInfoID FROM scenario WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_SCENARIO_LOCALE, "SELECT ID, Name_lang FROM scenario_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?");
|
||||
|
||||
// ScenarioStep.db2
|
||||
@@ -1207,7 +1163,7 @@ namespace Framework.Database
|
||||
PrepareStatement(HotfixStatements.SEL_SCENE_SCRIPT_GLOBAL_TEXT, "SELECT ID, Name, Script FROM scene_script_global_text WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// SceneScriptPackage.db2
|
||||
PrepareStatement(HotfixStatements.SEL_SCENE_SCRIPT_PACKAGE, "SELECT ID, Name, Unknown915 FROM scene_script_package WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_SCENE_SCRIPT_PACKAGE, "SELECT ID, Name, Flags, Unknown915 FROM scene_script_package WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// SceneScriptText.db2
|
||||
PrepareStatement(HotfixStatements.SEL_SCENE_SCRIPT_TEXT, "SELECT ID, Name, Script FROM scene_script_text WHERE (`VerifiedBuild` > 0) = ?");
|
||||
@@ -1224,9 +1180,7 @@ namespace Framework.Database
|
||||
" FROM skill_line_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?");
|
||||
|
||||
// SkillLineAbility.db2
|
||||
PrepareStatement(HotfixStatements.SEL_SKILL_LINE_ABILITY, "SELECT RaceMask, AbilityVerb, AbilityAllVerb, ID, SkillLine, Spell, MinSkillLineRank, ClassMask, " +
|
||||
"SupercedesSpell, AcquireMethod, TrivialSkillLineRankHigh, TrivialSkillLineRankLow, Flags, NumSkillUps, UniqueBit, TradeSkillCategoryID, " +
|
||||
"SkillupSkillLineID FROM skill_line_ability WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_SKILL_LINE_ABILITY, "SELECT AbilityVerb, AbilityAllVerb, ID, SkillLine, Spell, MinSkillLineRank, ClassMask, SupercedesSpell, AcquireMethod, TrivialSkillLineRankHigh, TrivialSkillLineRankLow, Flags, NumSkillUps, UniqueBit, TradeSkillCategoryID, SkillupSkillLineID, RaceMask FROM skill_line_ability WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_SKILL_LINE_ABILITY_LOCALE, "SELECT ID, AbilityVerb_lang, AbilityAllVerb_lang FROM skill_line_ability_locale" +
|
||||
" WHERE (`VerifiedBuild` > 0) = ? AND locale = ?");
|
||||
|
||||
@@ -1235,8 +1189,7 @@ namespace Framework.Database
|
||||
" WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// SkillRaceClassInfo.db2
|
||||
PrepareStatement(HotfixStatements.SEL_SKILL_RACE_CLASS_INFO, "SELECT ID, RaceMask, SkillID, ClassMask, Flags, Availability, MinLevel, SkillTierID" +
|
||||
" FROM skill_race_class_info WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_SKILL_RACE_CLASS_INFO, "SELECT ID, SkillID, ClassMask, Flags, Availability, MinLevel, SkillTierID, RaceMask FROM skill_race_class_info WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// SoulbindConduitRank.db2
|
||||
PrepareStatement(HotfixStatements.SEL_SOULBIND_CONDUIT_RANK, "SELECT ID, RankIndex, SpellID, AuraPointsOverride, SoulbindConduitID" +
|
||||
@@ -1273,8 +1226,7 @@ namespace Framework.Database
|
||||
"RequiredAuraVision, RequiresSpellFocus FROM spell_casting_requirements WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// SpellCategories.db2
|
||||
PrepareStatement(HotfixStatements.SEL_SPELL_CATEGORIES, "SELECT ID, DifficultyID, Category, DefenseType, DispelType, Mechanic, PreventionType, " +
|
||||
"StartRecoveryCategory, ChargeCategory, SpellID FROM spell_categories WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_SPELL_CATEGORIES, "SELECT ID, DifficultyID, Category, DefenseType, DiminishType, DispelType, Mechanic, PreventionType, StartRecoveryCategory, ChargeCategory, SpellID FROM spell_categories WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// SpellCategory.db2
|
||||
PrepareStatement(HotfixStatements.SEL_SPELL_CATEGORY, "SELECT ID, Name, Flags, UsesPerWeek, MaxCharges, ChargeRecoveryTime, TypeMask FROM spell_category" +
|
||||
@@ -1290,15 +1242,10 @@ namespace Framework.Database
|
||||
"SpellID FROM spell_cooldowns WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// SpellDuration.db2
|
||||
PrepareStatement(HotfixStatements.SEL_SPELL_DURATION, "SELECT ID, Duration, MaxDuration FROM spell_duration WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_SPELL_DURATION, "SELECT ID, Duration, MaxDuration, DurationPerResource FROM spell_duration WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// SpellEffect.db2
|
||||
PrepareStatement(HotfixStatements.SEL_SPELL_EFFECT, "SELECT ID, EffectAura, DifficultyID, EffectIndex, Effect, EffectAmplitude, EffectAttributes, " +
|
||||
"EffectAuraPeriod, EffectBonusCoefficient, EffectChainAmplitude, EffectChainTargets, EffectItemType, EffectMechanic, EffectPointsPerResource, " +
|
||||
"EffectPosFacing, EffectRealPointsPerLevel, EffectTriggerSpell, BonusCoefficientFromAP, PvpMultiplier, Coefficient, Variance, " +
|
||||
"ResourceCoefficient, GroupSizeBasePointsCoefficient, EffectBasePoints, ScalingClass, EffectMiscValue1, EffectMiscValue2, EffectRadiusIndex1, " +
|
||||
"EffectRadiusIndex2, EffectSpellClassMask1, EffectSpellClassMask2, EffectSpellClassMask3, EffectSpellClassMask4, ImplicitTarget1, " +
|
||||
"ImplicitTarget2, SpellID FROM spell_effect WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_SPELL_EFFECT, "SELECT ID, EffectAura, DifficultyID, EffectIndex, Effect, EffectAmplitude, EffectAttributes, EffectAuraPeriod, EffectBonusCoefficient, EffectChainAmplitude, EffectChainTargets, EffectItemType, EffectMechanic, EffectPointsPerResource, EffectPosFacing, EffectRealPointsPerLevel, EffectTriggerSpell, BonusCoefficientFromAP, PvpMultiplier, Coefficient, Variance, ResourceCoefficient, GroupSizeBasePointsCoefficient, EffectBasePoints, ScalingClass, TargetNodeGraph, EffectMiscValue1, EffectMiscValue2, EffectRadiusIndex1, EffectRadiusIndex2, EffectSpellClassMask1, EffectSpellClassMask2, EffectSpellClassMask3, EffectSpellClassMask4, ImplicitTarget1, ImplicitTarget2, SpellID FROM spell_effect WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// SpellEmpower.db2
|
||||
PrepareStatement(HotfixStatements.SEL_SPELL_EMPOWER, "SELECT ID, SpellID, Unused1000 FROM spell_empower WHERE (`VerifiedBuild` > 0) = ?");
|
||||
@@ -1351,11 +1298,7 @@ namespace Framework.Database
|
||||
" FROM spell_levels WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// SpellMisc.db2
|
||||
PrepareStatement(HotfixStatements.SEL_SPELL_MISC, "SELECT ID, Attributes1, Attributes2, Attributes3, Attributes4, Attributes5, Attributes6, Attributes7, " +
|
||||
"Attributes8, Attributes9, Attributes10, Attributes11, Attributes12, Attributes13, Attributes14, Attributes15, Attributes16, DifficultyID, " +
|
||||
"CastingTimeIndex, DurationIndex, PvPDurationIndex, RangeIndex, SchoolMask, Speed, LaunchDelay, MinDuration, SpellIconFileDataID, " +
|
||||
"ActiveIconFileDataID, ContentTuningID, ShowFutureSpellPlayerConditionID, SpellVisualScript, ActiveSpellVisualScript, SpellID FROM spell_misc" +
|
||||
" WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_SPELL_MISC, "SELECT ID, Attributes1, Attributes2, Attributes3, Attributes4, Attributes5, Attributes6, Attributes7, Attributes8, Attributes9, Attributes10, Attributes11, Attributes12, Attributes13, Attributes14, Attributes15, Attributes16, Attributes17, DifficultyID, CastingTimeIndex, DurationIndex, PvPDurationIndex, RangeIndex, SchoolMask, Speed, LaunchDelay, MinDuration, SpellIconFileDataID, ActiveIconFileDataID, ContentTuningID, ShowFutureSpellPlayerConditionID, SpellVisualScript, ActiveSpellVisualScript, SpellID FROM spell_misc WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// SpellName.db2
|
||||
PrepareStatement(HotfixStatements.SEL_SPELL_NAME, "SELECT ID, Name FROM spell_name WHERE (`VerifiedBuild` > 0) = ?");
|
||||
@@ -1395,12 +1338,10 @@ namespace Framework.Database
|
||||
"ReagentSource7, ReagentSource8 FROM spell_reagents WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// SpellReagentsCurrency.db2
|
||||
PrepareStatement(HotfixStatements.SEL_SPELL_REAGENTS_CURRENCY, "SELECT ID, SpellID, CurrencyTypesID, CurrencyCount FROM spell_reagents_currency" +
|
||||
" WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_SPELL_REAGENTS_CURRENCY, "SELECT ID, SpellID, CurrencyTypesID, CurrencyCount, OverrideRecraftCurrencyCount, OrderSource FROM spell_reagents_currency WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// SpellScaling.db2
|
||||
PrepareStatement(HotfixStatements.SEL_SPELL_SCALING, "SELECT ID, SpellID, MinScalingLevel, MaxScalingLevel, ScalesFromItemLevel FROM spell_scaling" +
|
||||
" WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_SPELL_SCALING, "SELECT ID, SpellID, MinScalingLevel, MaxScalingLevel FROM spell_scaling WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// SpellShapeshift.db2
|
||||
PrepareStatement(HotfixStatements.SEL_SPELL_SHAPESHIFT, "SELECT ID, SpellID, StanceBarOrder, ShapeshiftExclude1, ShapeshiftExclude2, ShapeshiftMask1, " +
|
||||
@@ -1422,11 +1363,7 @@ namespace Framework.Database
|
||||
" FROM spell_totems WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// SpellVisual.db2
|
||||
PrepareStatement(HotfixStatements.SEL_SPELL_VISUAL, "SELECT ID, MissileCastOffset1, MissileCastOffset2, MissileCastOffset3, MissileImpactOffset1, " +
|
||||
"MissileImpactOffset2, MissileImpactOffset3, AnimEventSoundID, Flags, MissileAttachment, MissileDestinationAttachment, " +
|
||||
"MissileCastPositionerID, MissileImpactPositionerID, MissileTargetingKit, HostileSpellVisualID, CasterSpellVisualID, SpellVisualMissileSetID, " +
|
||||
"DamageNumberDelay, LowViolenceSpellVisualID, RaidSpellVisualMissileSetID, ReducedUnexpectedCameraMovementSpellVisualID FROM spell_visual" +
|
||||
" WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_SPELL_VISUAL, "SELECT ID, MissileCastOffset1, MissileCastOffset2, MissileCastOffset3, MissileImpactOffset1, MissileImpactOffset2, MissileImpactOffset3, StateKit, AnimEventSoundID, Flags, MissileAttachment, MissileDestinationAttachment, MissileCastPositionerID, MissileImpactPositionerID, MissileTargetingKit, HostileSpellVisualID, CasterSpellVisualID, SpellVisualMissileSetID, DamageNumberDelay, LowViolenceSpellVisualID, RaidSpellVisualMissileSetID, ReducedUnexpectedCameraMovementSpellVisualID FROM spell_visual WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// SpellVisualEffectName.db2
|
||||
PrepareStatement(HotfixStatements.SEL_SPELL_VISUAL_EFFECT_NAME, "SELECT ID, ModelFileDataID, BaseMissileSpeed, Scale, MinAllowedScale, MaxAllowedScale, " +
|
||||
@@ -1575,8 +1512,7 @@ namespace Framework.Database
|
||||
" WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// TraitTree.db2
|
||||
PrepareStatement(HotfixStatements.SEL_TRAIT_TREE, "SELECT ID, TraitSystemID, Unused1000_1, FirstTraitNodeID, PlayerConditionID, Flags, Unused1000_2, " +
|
||||
"Unused1000_3 FROM trait_tree WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_TRAIT_TREE, "SELECT TitleText, ID, TraitSystemID, Unused1000_1, FirstTraitNodeID, PlayerConditionID, Flags, Unused1000_2, Unused1000_3, UiTextureKitID FROM trait_tree WHERE (`VerifiedBuild` > 0) = ?");
|
||||
|
||||
// TraitTreeLoadout.db2
|
||||
PrepareStatement(HotfixStatements.SEL_TRAIT_TREE_LOADOUT, "SELECT ID, TraitTreeID, ChrSpecializationID FROM trait_tree_loadout" +
|
||||
@@ -1622,7 +1558,7 @@ namespace Framework.Database
|
||||
|
||||
// UiMap.db2
|
||||
PrepareStatement(HotfixStatements.SEL_UI_MAP, "SELECT Name, ID, ParentUiMapID, Flags, `System`, Type, BountySetID, BountyDisplayLocation, " +
|
||||
"VisibilityPlayerConditionID2, VisibilityPlayerConditionID, HelpTextPosition, BkgAtlasID, AlternateUiMapGroup, ContentTuningID, " +
|
||||
"VisibilityPlayerConditionID, HelpTextPosition, BkgAtlasID, AlternateUiMapGroup, ContentTuningID, " +
|
||||
"AdventureMapTextureKitID, MapArtZoneTextPosition FROM ui_map WHERE (`VerifiedBuild` > 0) = ?");
|
||||
PrepareStatement(HotfixStatements.SEL_UI_MAP_LOCALE, "SELECT ID, Name_lang FROM ui_map_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?");
|
||||
|
||||
|
||||
@@ -100,6 +100,7 @@ namespace Game.DataStorage
|
||||
public string GameType;
|
||||
public string ShortDescription;
|
||||
public string LongDescription;
|
||||
public sbyte InstanceType;
|
||||
public int PvpType;
|
||||
public byte MinLevel;
|
||||
public byte MaxLevel;
|
||||
|
||||
@@ -63,10 +63,10 @@ namespace Game.DataStorage
|
||||
public sealed class CharacterLoadoutRecord
|
||||
{
|
||||
public uint Id;
|
||||
public long RaceMask;
|
||||
public sbyte ChrClassID;
|
||||
public int Purpose;
|
||||
public byte ItemContext;
|
||||
public long RaceMask;
|
||||
|
||||
public bool IsForNewCharacter() { return Purpose == 9; }
|
||||
}
|
||||
@@ -216,7 +216,6 @@ namespace Game.DataStorage
|
||||
public sealed class ChrCustomizationReqRecord
|
||||
{
|
||||
public uint Id;
|
||||
public long RaceMask;
|
||||
public string ReqSource;
|
||||
public int Flags;
|
||||
public int ClassMask;
|
||||
@@ -225,6 +224,7 @@ namespace Game.DataStorage
|
||||
public int QuestID;
|
||||
public int OverrideArchive; // -1: allow any, otherwise must match OverrideArchive cvar
|
||||
public uint ItemModifiedAppearanceID;
|
||||
public long RaceMask;
|
||||
|
||||
public bool HasFlag(ChrCustomizationReqFlag chrCustomizationReqFlag) { return (Flags & (int)chrCustomizationReqFlag) != 0; }
|
||||
}
|
||||
@@ -382,6 +382,7 @@ namespace Game.DataStorage
|
||||
public int OrderIndex;
|
||||
public int RedirectContentTuningID;
|
||||
public int RedirectFlag;
|
||||
public int RedirectEnum;
|
||||
public uint ParentContentTuningID;
|
||||
}
|
||||
|
||||
@@ -639,6 +640,9 @@ namespace Game.DataStorage
|
||||
public uint RechargingCycleDurationMS;
|
||||
public float AccountTransferPercentage;
|
||||
public byte OrderIndex;
|
||||
public float RecraftReagentCountPercentage;
|
||||
public byte OrderSource;
|
||||
public int MCRCurrencyID;
|
||||
public int[] Flags = new int[2];
|
||||
|
||||
public bool HasFlag(CurrencyTypesFlags currencyTypesFlags) { return (Flags[0] & (int)currencyTypesFlags) != 0; }
|
||||
|
||||
@@ -6,7 +6,6 @@ namespace Game.DataStorage
|
||||
public sealed class EmotesRecord
|
||||
{
|
||||
public uint Id;
|
||||
public long RaceMask;
|
||||
public string EmoteSlashCommand;
|
||||
public short AnimID;
|
||||
public int EmoteFlags;
|
||||
@@ -15,6 +14,7 @@ namespace Game.DataStorage
|
||||
public uint EventSoundID;
|
||||
public uint SpellVisualKitId;
|
||||
public int ClassMask;
|
||||
public long RaceMask;
|
||||
}
|
||||
|
||||
public sealed class EmotesTextRecord
|
||||
|
||||
@@ -8,7 +8,6 @@ namespace Game.DataStorage
|
||||
public sealed class FactionRecord
|
||||
{
|
||||
public uint Id;
|
||||
public long[] ReputationRaceMask = new long[4];
|
||||
public LocalizedString Name;
|
||||
public string Description;
|
||||
public short ReputationIndex;
|
||||
@@ -25,8 +24,15 @@ namespace Game.DataStorage
|
||||
public int[] ReputationMax = new int[4];
|
||||
public float[] ParentFactionMod = new float[2]; // Faction outputs rep * ParentFactionModOut as spillover reputation
|
||||
public byte[] ParentFactionCap = new byte[2]; // The highest rank the faction will profit from incoming spillover
|
||||
public long ReputationRaceMask1;
|
||||
public long ReputationRaceMask2;
|
||||
public long ReputationRaceMask3;
|
||||
public long ReputationRaceMask4;
|
||||
|
||||
// helpers
|
||||
// 12.0.7: client stores ReputationRaceMask as 4 separate RaceMask<int32,2> columns; expose as array for existing code
|
||||
public long[] ReputationRaceMask => new long[] { ReputationRaceMask1, ReputationRaceMask2, ReputationRaceMask3, ReputationRaceMask4 };
|
||||
|
||||
public bool CanHaveReputation()
|
||||
{
|
||||
return ReputationIndex >= 0;
|
||||
|
||||
@@ -219,7 +219,6 @@ namespace Game.DataStorage
|
||||
public uint HordeConstructObjID;
|
||||
public uint AllianceConstructObjID;
|
||||
public byte Flags;
|
||||
public byte UiCategoryID;
|
||||
public uint[] UpgradeRequirement = new uint[2];
|
||||
}
|
||||
|
||||
@@ -332,6 +331,7 @@ namespace Game.DataStorage
|
||||
public int TraitTreeID;
|
||||
public int ProfessionID;
|
||||
public int Unknown_1002_14;
|
||||
public int NeighborhoodMapID;
|
||||
public int SkillLineID;
|
||||
}
|
||||
|
||||
|
||||
@@ -46,7 +46,11 @@ namespace Game.DataStorage
|
||||
public uint ItemGroupSoundsID;
|
||||
public int ContentTuningID;
|
||||
public int ModifiedCraftingReagentItemID;
|
||||
public byte Unknown1200;
|
||||
public int CraftingQualityID;
|
||||
public int ItemSquishEraID;
|
||||
public float RecraftReagentCountPercentage;
|
||||
public byte OrderSource;
|
||||
}
|
||||
|
||||
public sealed class ItemAppearanceRecord
|
||||
@@ -227,13 +231,15 @@ namespace Game.DataStorage
|
||||
public ushort SpellCategoryID;
|
||||
public int SpellID;
|
||||
public ushort ChrSpecializationID;
|
||||
public int PlayerConditionID;
|
||||
}
|
||||
|
||||
public sealed class ItemExtendedCostRecord
|
||||
{
|
||||
public uint Id;
|
||||
public ulong Money;
|
||||
public ushort RequiredArenaRating;
|
||||
public byte ArenaBracket; // arena slot restrictions (min slot value)
|
||||
public byte ArenaBracket; // arena slot restrictions (min slot value)
|
||||
public int Flags;
|
||||
public byte MinFactionID;
|
||||
public int MinReputation;
|
||||
@@ -337,12 +343,12 @@ namespace Game.DataStorage
|
||||
public int ItemLevel;
|
||||
public int RequiredLevel;
|
||||
public int Unknown1125;
|
||||
public int Flags;
|
||||
}
|
||||
|
||||
public sealed class ItemSearchNameRecord
|
||||
{
|
||||
public uint Id;
|
||||
public long AllowableRace;
|
||||
public string Display;
|
||||
public byte OverallQualityID;
|
||||
public int ExpansionID;
|
||||
@@ -355,6 +361,7 @@ namespace Game.DataStorage
|
||||
public uint RequiredAbility;
|
||||
public ushort ItemLevel;
|
||||
public int[] Flags = new int[5];
|
||||
public long AllowableRace;
|
||||
}
|
||||
|
||||
public sealed class ItemSetRecord
|
||||
@@ -382,7 +389,6 @@ namespace Game.DataStorage
|
||||
public sealed class ItemSparseRecord
|
||||
{
|
||||
public uint Id;
|
||||
public long AllowableRace;
|
||||
public string Description;
|
||||
public string Display3;
|
||||
public string Display2;
|
||||
@@ -404,6 +410,7 @@ namespace Game.DataStorage
|
||||
public uint MaxCount;
|
||||
public uint MinReputation;
|
||||
public uint RequiredAbility;
|
||||
public long AllowableRace;
|
||||
public uint SellPrice;
|
||||
public uint BuyPrice;
|
||||
public uint VendorStackCount;
|
||||
@@ -416,6 +423,7 @@ namespace Game.DataStorage
|
||||
public uint PlayerLevelToItemLevelCurveID;
|
||||
public int ItemLevelOffsetCurveID;
|
||||
public int ItemLevelOffsetItemLevel;
|
||||
public int ItemSquishEraID;
|
||||
public ushort ItemNameDescriptionID;
|
||||
public ushort RequiredTransmogHoliday;
|
||||
public ushort RequiredHoliday;
|
||||
|
||||
@@ -94,8 +94,8 @@ namespace Game.DataStorage
|
||||
public byte MaterialID;
|
||||
public int MinimapStaticCol;
|
||||
public byte[] FrameCountTexture = new byte[6];
|
||||
public int[] Color = new int[2];
|
||||
public float[] Float = new float[18];
|
||||
public int[] Color = new int[3];
|
||||
public float[] Float = new float[38];
|
||||
public uint[] Int = new uint[4];
|
||||
public float[] Coefficient = new float[4];
|
||||
}
|
||||
|
||||
@@ -116,9 +116,10 @@ namespace Game.DataStorage
|
||||
public uint Id;
|
||||
public ushort MapID;
|
||||
public int Flags;
|
||||
public int MaxMedals;
|
||||
public uint ExpansionLevel;
|
||||
public int RequiredWorldStateID; // maybe?
|
||||
public short[] CriteriaCount = new short[3];
|
||||
public short[] CriteriaCount = new short[5];
|
||||
public int[] FirstRewardQuestID = new int[6];
|
||||
public int[] RewardQuestID = new int[6];
|
||||
}
|
||||
@@ -248,6 +249,7 @@ namespace Game.DataStorage
|
||||
public sealed class MovieRecord
|
||||
{
|
||||
public uint Id;
|
||||
public LocalizedString Summary;
|
||||
public byte Volume;
|
||||
public byte KeyID;
|
||||
public uint AudioFileDataID;
|
||||
|
||||
@@ -15,6 +15,7 @@ namespace Game.DataStorage
|
||||
public byte Type;
|
||||
public byte Flags;
|
||||
public uint UiTextureKitID;
|
||||
public uint UiScenarioDisplayInfoID;
|
||||
}
|
||||
|
||||
public sealed class ScenarioStepRecord
|
||||
@@ -59,6 +60,7 @@ namespace Game.DataStorage
|
||||
{
|
||||
public uint Id;
|
||||
public string Name;
|
||||
public int Flags;
|
||||
public int Unknown915;
|
||||
}
|
||||
|
||||
@@ -98,7 +100,6 @@ namespace Game.DataStorage
|
||||
|
||||
public sealed class SkillLineAbilityRecord
|
||||
{
|
||||
public long RaceMask;
|
||||
public string AbilityVerb;
|
||||
public string AbilityAllVerb;
|
||||
public uint Id;
|
||||
@@ -115,6 +116,7 @@ namespace Game.DataStorage
|
||||
public short UniqueBit;
|
||||
public short TradeSkillCategoryID;
|
||||
public ushort SkillupSkillLineID;
|
||||
public long RaceMask;
|
||||
|
||||
public bool HasFlag(SkillLineAbilityFlags skillLineAbilityFlags) { return (Flags & (int)skillLineAbilityFlags) != 0; }
|
||||
}
|
||||
@@ -130,13 +132,13 @@ namespace Game.DataStorage
|
||||
public sealed class SkillRaceClassInfoRecord
|
||||
{
|
||||
public uint Id;
|
||||
public long RaceMask;
|
||||
public ushort SkillID;
|
||||
public int ClassMask;
|
||||
public int Flags;
|
||||
public int Availability;
|
||||
public sbyte MinLevel;
|
||||
public ushort SkillTierID;
|
||||
public long RaceMask;
|
||||
|
||||
public bool HasFlag(SkillRaceClassInfoFlags skillRaceClassInfoFlags) { return (Flags & (int)skillRaceClassInfoFlags) != 0; }
|
||||
}
|
||||
@@ -245,6 +247,7 @@ namespace Game.DataStorage
|
||||
public byte DifficultyID;
|
||||
public ushort Category;
|
||||
public int DefenseType;
|
||||
public int DiminishType;
|
||||
public sbyte DispelType;
|
||||
public sbyte Mechanic;
|
||||
public int PreventionType;
|
||||
@@ -291,6 +294,7 @@ namespace Game.DataStorage
|
||||
public uint Id;
|
||||
public int Duration;
|
||||
public int MaxDuration;
|
||||
public int DurationPerResource;
|
||||
}
|
||||
|
||||
public sealed class SpellEffectRecord
|
||||
@@ -320,6 +324,7 @@ namespace Game.DataStorage
|
||||
public float GroupSizeBasePointsCoefficient;
|
||||
public float EffectBasePoints;
|
||||
public int ScalingClass;
|
||||
public int TargetNodeGraph;
|
||||
public int[] EffectMiscValue = new int[2];
|
||||
public uint[] EffectRadiusIndex = new uint[2];
|
||||
public FlagArray128 EffectSpellClassMask;
|
||||
@@ -446,7 +451,7 @@ namespace Game.DataStorage
|
||||
public sealed class SpellMiscRecord
|
||||
{
|
||||
public uint Id;
|
||||
public int[] Attributes = new int[16];
|
||||
public int[] Attributes = new int[17];
|
||||
public byte DifficultyID;
|
||||
public ushort CastingTimeIndex;
|
||||
public ushort DurationIndex;
|
||||
@@ -551,6 +556,8 @@ namespace Game.DataStorage
|
||||
public int SpellID;
|
||||
public ushort CurrencyTypesID;
|
||||
public ushort CurrencyCount;
|
||||
public int OverrideRecraftCurrencyCount;
|
||||
public byte OrderSource;
|
||||
}
|
||||
|
||||
public sealed class SpellScalingRecord
|
||||
@@ -559,7 +566,6 @@ namespace Game.DataStorage
|
||||
public uint SpellID;
|
||||
public uint MinScalingLevel;
|
||||
public uint MaxScalingLevel;
|
||||
public ushort ScalesFromItemLevel;
|
||||
}
|
||||
|
||||
public sealed class SpellShapeshiftRecord
|
||||
@@ -614,6 +620,7 @@ namespace Game.DataStorage
|
||||
public uint Id;
|
||||
public float[] MissileCastOffset = new float[3];
|
||||
public float[] MissileImpactOffset = new float[3];
|
||||
public int StateKit;
|
||||
public uint AnimEventSoundID;
|
||||
public int Flags;
|
||||
public sbyte MissileAttachment;
|
||||
|
||||
@@ -316,6 +316,7 @@ namespace Game.DataStorage
|
||||
|
||||
public sealed class TraitTreeRecord
|
||||
{
|
||||
public LocalizedString TitleText;
|
||||
public uint Id;
|
||||
public uint TraitSystemID;
|
||||
public int Unused1000_1;
|
||||
@@ -324,6 +325,7 @@ namespace Game.DataStorage
|
||||
public int Flags;
|
||||
public float Unused1000_2;
|
||||
public float Unused1000_3;
|
||||
public int UiTextureKitID;
|
||||
|
||||
public bool HasFlag(TraitTreeFlag traitTreeFlag) { return (Flags & (int)traitTreeFlag) != 0; }
|
||||
}
|
||||
|
||||
@@ -16,7 +16,6 @@ namespace Game.DataStorage
|
||||
public UiMapType Type;
|
||||
public int BountySetID;
|
||||
public uint BountyDisplayLocation;
|
||||
public int VisibilityPlayerConditionID2; // if not met then map is skipped when evaluating UiMapAssignment
|
||||
public int VisibilityPlayerConditionID; // if not met then client checks other maps with the same AlternateUiMapGroup, not re-evaluating UiMapAssignment for them
|
||||
public sbyte HelpTextPosition;
|
||||
public int BkgAtlasID;
|
||||
|
||||
@@ -0,0 +1,177 @@
|
||||
// Copyright (c) CypherCore <http://github.com/CypherCore> All rights reserved.
|
||||
// Licensed under the GNU GENERAL PUBLIC LICENSE. See LICENSE file in the project root for full license information.
|
||||
|
||||
using Framework.Constants;
|
||||
using Game.Maps;
|
||||
using Game.Networking;
|
||||
using Game.Networking.Packets;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Game.Entities
|
||||
{
|
||||
public class MeshObject : WorldObject
|
||||
{
|
||||
MeshObjectData m_meshObjectData;
|
||||
|
||||
Position _stationaryPosition = new();
|
||||
|
||||
public MeshObject(bool isWorldObject = false) : base(isWorldObject)
|
||||
{
|
||||
ObjectTypeMask |= TypeMask.MeshObject;
|
||||
ObjectTypeId = TypeId.MeshObject;
|
||||
|
||||
m_updateFlag.Stationary = true;
|
||||
m_updateFlag.MeshObject = true;
|
||||
|
||||
m_entityFragments.Add(EntityFragment.Tag_MeshObject, false);
|
||||
|
||||
m_meshObjectData = new();
|
||||
_stationaryPosition = new();
|
||||
}
|
||||
|
||||
public override void AddToWorld()
|
||||
{
|
||||
if (!IsInWorld)
|
||||
{
|
||||
GetMap().GetObjectsStore().Add(GetGUID(), this);
|
||||
base.AddToWorld();
|
||||
}
|
||||
}
|
||||
|
||||
public override void RemoveFromWorld()
|
||||
{
|
||||
if (IsInWorld)
|
||||
{
|
||||
base.RemoveFromWorld();
|
||||
GetMap().GetObjectsStore().Remove(GetGUID());
|
||||
}
|
||||
}
|
||||
|
||||
public static MeshObject CreateMeshObject(Map map, Position pos, ObjectGuid privateObjectOwner)
|
||||
{
|
||||
if (map == null)
|
||||
return null;
|
||||
|
||||
ulong lowGuid = map.GenerateLowGuid(HighGuid.MeshObject);
|
||||
|
||||
MeshObject meshObject = new();
|
||||
if (!meshObject.Create(lowGuid, map, pos, privateObjectOwner))
|
||||
{
|
||||
meshObject.Dispose();
|
||||
return null;
|
||||
}
|
||||
|
||||
return meshObject;
|
||||
}
|
||||
|
||||
bool Create(ulong lowGuid, Map map, Position pos, ObjectGuid privateObjectOwner)
|
||||
{
|
||||
SetMap(map);
|
||||
Relocate(pos);
|
||||
RelocateStationaryPosition(pos);
|
||||
|
||||
SetPrivateObjectOwner(privateObjectOwner);
|
||||
|
||||
_Create(ObjectGuid.Create(HighGuid.MeshObject, GetMapId(), 0, lowGuid));
|
||||
|
||||
SetObjectScale(1.0f);
|
||||
|
||||
// Register the updateable mesh-object-data fragment (vendor-style updateable fragment).
|
||||
m_entityFragments.Add(EntityFragment.FMeshObjectData_C, IsInWorld);
|
||||
|
||||
if (!GetMap().AddToMap(this))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void BuildValuesCreate(WorldPacket data, UpdateFieldFlag flags, Player target)
|
||||
{
|
||||
m_objectData.WriteCreate(data, flags, this, target);
|
||||
|
||||
if (m_meshObjectData != null)
|
||||
{
|
||||
if (EntityFragmentsHolder.IsIndirectFragment(EntityFragment.FMeshObjectData_C))
|
||||
data.WriteUInt8(1); // IndirectFragmentActive: FMeshObjectData_C
|
||||
|
||||
m_meshObjectData.WriteCreate(data, flags, this, target);
|
||||
}
|
||||
}
|
||||
|
||||
public override void BuildValuesUpdate(WorldPacket data, UpdateFieldFlag flags, Player target)
|
||||
{
|
||||
if ((m_entityFragments.ContentsChangedMask & m_entityFragments.GetUpdateMaskFor(EntityFragment.CGObject)) != 0)
|
||||
{
|
||||
data.WriteUInt32(m_values.GetChangedObjectTypeMask());
|
||||
|
||||
if (m_values.HasChanged(TypeId.Object))
|
||||
m_objectData.WriteUpdate(data, flags, this, target);
|
||||
}
|
||||
|
||||
if (m_meshObjectData != null && (m_entityFragments.ContentsChangedMask & m_entityFragments.GetUpdateMaskFor(EntityFragment.FMeshObjectData_C)) != 0)
|
||||
m_meshObjectData.WriteUpdate(data, flags, this, target);
|
||||
}
|
||||
|
||||
void BuildValuesUpdateForPlayerWithMask(UpdateData data, UpdateMask requestedObjectMask, UpdateMask requestedMeshObjectMask, Player target)
|
||||
{
|
||||
UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
|
||||
UpdateMask valuesMask = new((int)TypeId.Max);
|
||||
if (requestedObjectMask.IsAnySet())
|
||||
valuesMask.Set((int)TypeId.Object);
|
||||
|
||||
WorldPacket buffer = new();
|
||||
BuildEntityFragmentsForValuesUpdateForPlayerWithMask(buffer, flags);
|
||||
buffer.WriteUInt32(valuesMask.GetBlock(0));
|
||||
|
||||
if (valuesMask[(int)TypeId.Object])
|
||||
m_objectData.WriteUpdate(buffer, requestedObjectMask, true, this, target);
|
||||
|
||||
// MeshObjectData is an updateable fragment (FMeshObjectData_C), written after the values block.
|
||||
if (m_meshObjectData != null && requestedMeshObjectMask.IsAnySet())
|
||||
m_meshObjectData.WriteUpdate(buffer, requestedMeshObjectMask, true, this, target);
|
||||
|
||||
WorldPacket buffer1 = new();
|
||||
buffer1.WriteUInt8((byte)UpdateType.Values);
|
||||
buffer1.WritePackedGuid(GetGUID());
|
||||
buffer1.WriteUInt32(buffer.GetSize());
|
||||
buffer1.WriteBytes(buffer.GetData());
|
||||
|
||||
data.AddUpdateBlock(buffer1);
|
||||
}
|
||||
|
||||
public override void ClearUpdateMask(bool remove)
|
||||
{
|
||||
m_values.ClearChangesMask(m_meshObjectData);
|
||||
base.ClearUpdateMask(remove);
|
||||
}
|
||||
|
||||
public override uint GetFaction() { return 0; }
|
||||
|
||||
public override Position GetStationaryPosition() { return _stationaryPosition; }
|
||||
void RelocateStationaryPosition(Position pos) { _stationaryPosition.Relocate(pos); }
|
||||
|
||||
class ValuesUpdateForPlayerWithMaskSender
|
||||
{
|
||||
MeshObject Owner;
|
||||
ObjectFieldData ObjectMask = new();
|
||||
MeshObjectData MeshObjectMask = new();
|
||||
|
||||
public ValuesUpdateForPlayerWithMaskSender(MeshObject owner)
|
||||
{
|
||||
Owner = owner;
|
||||
}
|
||||
|
||||
public void Invoke(Player player)
|
||||
{
|
||||
UpdateData udata = new(Owner.GetMapId());
|
||||
|
||||
Owner.BuildValuesUpdateForPlayerWithMask(udata, ObjectMask.GetUpdateMask(), MeshObjectMask.GetUpdateMask(), player);
|
||||
|
||||
udata.BuildPacket(out UpdateObject packet);
|
||||
player.SendPacket(packet);
|
||||
}
|
||||
|
||||
public static implicit operator IDoWork<Player>(ValuesUpdateForPlayerWithMaskSender obj) => obj.Invoke;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -143,6 +143,7 @@ namespace Game.Entities
|
||||
case HighGuid.Corpse:
|
||||
case HighGuid.LootObject:
|
||||
case HighGuid.SceneObject:
|
||||
case HighGuid.MeshObject:
|
||||
case HighGuid.Scenario:
|
||||
case HighGuid.AIGroup:
|
||||
case HighGuid.DynamicDoor:
|
||||
@@ -345,6 +346,8 @@ namespace Game.Entities
|
||||
return TypeId.AreaTrigger;
|
||||
case HighGuid.SceneObject:
|
||||
return TypeId.SceneObject;
|
||||
case HighGuid.MeshObject:
|
||||
return TypeId.MeshObject;
|
||||
case HighGuid.Conversation:
|
||||
return TypeId.Conversation;
|
||||
default:
|
||||
@@ -377,6 +380,7 @@ namespace Game.Entities
|
||||
case HighGuid.Corpse:
|
||||
case HighGuid.LootObject:
|
||||
case HighGuid.SceneObject:
|
||||
case HighGuid.MeshObject:
|
||||
case HighGuid.Scenario:
|
||||
case HighGuid.AIGroup:
|
||||
case HighGuid.DynamicDoor:
|
||||
@@ -605,6 +609,7 @@ namespace Game.Entities
|
||||
SET_GUID_INFO(HighGuid.Corpse, FormatWorldObject, ParseWorldObject);
|
||||
SET_GUID_INFO(HighGuid.LootObject, FormatWorldObject, ParseWorldObject);
|
||||
SET_GUID_INFO(HighGuid.SceneObject, FormatWorldObject, ParseWorldObject);
|
||||
SET_GUID_INFO(HighGuid.MeshObject, FormatWorldObject, ParseWorldObject);
|
||||
SET_GUID_INFO(HighGuid.Scenario, FormatWorldObject, ParseWorldObject);
|
||||
SET_GUID_INFO(HighGuid.AIGroup, FormatWorldObject, ParseWorldObject);
|
||||
SET_GUID_INFO(HighGuid.DynamicDoor, FormatWorldObject, ParseWorldObject);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8,33 +8,52 @@ namespace Game.Entities
|
||||
{
|
||||
public enum EntityFragment
|
||||
{
|
||||
CGObject = 0, // UPDATEABLE, INDIRECT,
|
||||
Tag_Item = 1, // TAG,
|
||||
Tag_Container = 2, // TAG,
|
||||
Tag_AzeriteEmpoweredItem = 3, // TAG,
|
||||
Tag_AzeriteItem = 4, // TAG,
|
||||
Tag_Unit = 5, // TAG,
|
||||
Tag_Player = 6, // TAG,
|
||||
Tag_GameObject = 7, // TAG,
|
||||
Tag_DynamicObject = 8, // TAG,
|
||||
Tag_Corpse = 9, // TAG,
|
||||
Tag_AreaTrigger = 10, // TAG,
|
||||
Tag_SceneObject = 11, // TAG,
|
||||
Tag_Conversation = 12, // TAG,
|
||||
Tag_AIGroup = 13, // TAG,
|
||||
Tag_Scenario = 14, // TAG,
|
||||
Tag_LootObject = 15, // TAG,
|
||||
Tag_ActivePlayer = 16, // TAG,
|
||||
Tag_ActiveClient_S = 17, // TAG,
|
||||
Tag_ActiveObject_C = 18, // TAG,
|
||||
Tag_VisibleObject_C = 19, // TAG,
|
||||
Tag_UnitVehicle = 20, // TAG,
|
||||
FEntityPosition = 112,
|
||||
FEntityLocalMatrix = 113,
|
||||
FEntityWorldMatrix = 114,
|
||||
CActor = 115, // INDIRECT,
|
||||
FVendor_C = 117, // UPDATEABLE, INDIRECT,
|
||||
FMirroredObject_C = 119,
|
||||
// 12.0.7 (build 68453): fragment IDs renumbered vs 11.2.5; these are written into every object create/update packet.
|
||||
FEntityPosition = 1,
|
||||
CGObject = 2, // UPDATEABLE, INDIRECT,
|
||||
FTransportLink = 5,
|
||||
FPlayerOwnershipLink = 13,
|
||||
CActor = 15, // INDIRECT,
|
||||
FVendor_C = 17, // UPDATEABLE,
|
||||
FMirroredObject_C = 18,
|
||||
FMeshObjectData_C = 19, // UPDATEABLE,
|
||||
FHousingDecor_C = 20, // UPDATEABLE,
|
||||
FHousingRoom_C = 21, // UPDATEABLE,
|
||||
FHousingRoomComponentMesh_C = 22, // UPDATEABLE,
|
||||
FHousingPlayerHouse_C = 23, // UPDATEABLE,
|
||||
FJamHousingCornerstone_C = 27, // UPDATEABLE,
|
||||
FHousingDecorActor_C = 28,
|
||||
FNeighborhoodMirrorData_C = 30, // UPDATEABLE,
|
||||
FMirroredPositionData_C = 31, // UPDATEABLE,
|
||||
PlayerHouseInfoComponent_C = 32, // UPDATEABLE, INDIRECT,
|
||||
FHousingStorage_C = 33, // UPDATEABLE,
|
||||
FHousingFixture_C = 34, // UPDATEABLE,
|
||||
PlayerInitiativeComponent_C = 37, // UPDATEABLE, INDIRECT,
|
||||
Tag_Item = 200, // TAG,
|
||||
Tag_Container = 201, // TAG,
|
||||
Tag_AzeriteEmpoweredItem = 202, // TAG,
|
||||
Tag_AzeriteItem = 203, // TAG,
|
||||
Tag_Unit = 204, // TAG,
|
||||
Tag_Player = 205, // TAG,
|
||||
Tag_GameObject = 206, // TAG,
|
||||
Tag_DynamicObject = 207, // TAG,
|
||||
Tag_Corpse = 208, // TAG,
|
||||
Tag_AreaTrigger = 209, // TAG,
|
||||
Tag_SceneObject = 210, // TAG,
|
||||
Tag_Conversation = 211, // TAG,
|
||||
Tag_AIGroup = 212, // TAG,
|
||||
Tag_Scenario = 213, // TAG,
|
||||
Tag_LootObject = 214, // TAG,
|
||||
Tag_ActivePlayer = 215, // TAG,
|
||||
Tag_ActiveClient_S = 216, // TAG,
|
||||
Tag_ActiveObject_C = 217, // TAG,
|
||||
Tag_VisibleObject_C = 218, // TAG,
|
||||
Tag_UnitVehicle = 219, // TAG,
|
||||
Tag_HousingRoom = 220, // TAG,
|
||||
Tag_MeshObject = 221, // TAG,
|
||||
Tag_HouseExteriorPiece = 224, // TAG,
|
||||
Tag_HouseExteriorRoot = 225, // TAG,
|
||||
Tag_HousingDecorProxyGameObject = 226, // TAG,
|
||||
End = 255,
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ namespace Game.Entities
|
||||
m_movementInfo = new MovementInfo();
|
||||
m_updateFlag.Clear();
|
||||
|
||||
m_entityFragments.Add((int)EntityFragment.CGObject, false);
|
||||
m_entityFragments.Add(EntityFragment.CGObject, false);
|
||||
|
||||
m_objectData = new ObjectFieldData();
|
||||
|
||||
@@ -313,6 +313,9 @@ namespace Game.Entities
|
||||
data.WriteBit(flags.SceneObject);
|
||||
data.WriteBit(flags.ActivePlayer);
|
||||
data.WriteBit(flags.Conversation);
|
||||
data.WriteBit(flags.Room); // 12.0.7: new create-header bit
|
||||
data.WriteBit(flags.Decor); // 12.0.7: new create-header bit
|
||||
data.WriteBit(flags.MeshObject); // 12.0.7: new create-header bit
|
||||
data.FlushBits();
|
||||
|
||||
if (flags.MovementUpdate)
|
||||
@@ -4047,6 +4050,9 @@ namespace Game.Entities
|
||||
public bool SceneObject;
|
||||
public bool ActivePlayer;
|
||||
public bool Conversation;
|
||||
public bool Room; // 12.0.7: new
|
||||
public bool Decor; // 12.0.7: new
|
||||
public bool MeshObject; // 12.0.7: new
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
@@ -4067,6 +4073,9 @@ namespace Game.Entities
|
||||
SceneObject = false;
|
||||
ActivePlayer = false;
|
||||
Conversation = false;
|
||||
Room = false;
|
||||
Decor = false;
|
||||
MeshObject = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3579,6 +3579,11 @@ namespace Game.Maps
|
||||
return _objectsStore.LookupByKey(guid) as SceneObject;
|
||||
}
|
||||
|
||||
public MeshObject GetMeshObject(ObjectGuid guid)
|
||||
{
|
||||
return _objectsStore.LookupByKey(guid) as MeshObject;
|
||||
}
|
||||
|
||||
public Conversation GetConversation(ObjectGuid guid)
|
||||
{
|
||||
return (Conversation)_objectsStore.LookupByKey(guid);
|
||||
|
||||
@@ -77,7 +77,7 @@ namespace Game.Spells
|
||||
{
|
||||
Scaling.MinScalingLevel = _scaling.MinScalingLevel;
|
||||
Scaling.MaxScalingLevel = _scaling.MaxScalingLevel;
|
||||
Scaling.ScalesFromItemLevel = _scaling.ScalesFromItemLevel;
|
||||
// 12.0.7: ScalesFromItemLevel removed from SpellScaling.db2
|
||||
}
|
||||
|
||||
// SpellAuraOptionsEntry
|
||||
|
||||
Reference in New Issue
Block a user