Core: Updated to 11.1.0

Port From (https://github.com/TrinityCore/TrinityCore/commit/23624ed75abc8cbb77bb2e24a08e0836e4c41db5)
This commit is contained in:
Hondacrx
2025-06-16 14:47:31 -04:00
parent b6bccbad44
commit 7fd54e6175
65 changed files with 4240 additions and 3968 deletions
+1
View File
@@ -2031,6 +2031,7 @@ namespace Framework.Constants
ForgeMaster = 66,
CharacterBanker = 67,
AccountBanker = 68,
ProfessionRespec = 69,
}
[Flags]
+3 -1
View File
@@ -92,6 +92,7 @@ namespace Framework.Constants
ForgeMaster = 55,
CharacterBanker = 56,
AccountBanker = 57,
ProfessionRespec = 58,
Max
}
@@ -168,7 +169,8 @@ namespace Framework.Constants
{
None = 0x0,
QuestLabelPrepend = 0x1,
HideOptionIDFromClient = 0x2
HideOptionIDFromClient = 0x2,
PlayMovieLabelPrepend = 0x4,
}
[Flags]
+1
View File
@@ -467,6 +467,7 @@ namespace Framework.Constants
TransmogSetFavorite = 4,
RuneforgeLegendaryAbility = 5,
TransmogIllusion = 6,
WarbandScene = 7,
}
public enum ItemContext : byte
File diff suppressed because it is too large Load Diff
+11 -1
View File
@@ -119,12 +119,22 @@ namespace Framework.Constants
public enum StableResult
{
MaxSlots = 0,
NotEnoughMoney = 1, // "you don't have enough money"
NotStableMaster = 2,
InvalidSlot = 3, // "That slot is locked"
NoPet = 4,
AlreadyStabled = 5,
AlreadySummoned = 6,
NotFound = 7,
StableSuccess = 8, // stable success
UnstableSuccess = 9, // unstable/swap success
BuySlotSuccess = 10, // buy slot success
ReviveSuccess = 10,
CantControlExotic = 11, // "you are unable to control exotic creatures"
InternalError = 12, // "Internal pet error"
CheckForLuaHack = 13,
BuySlotSuccess = 14,
FavoriteToggle = 15,
PetRenamed = 16
}
}
File diff suppressed because it is too large Load Diff
+93 -50
View File
@@ -775,7 +775,8 @@ namespace Framework.Constants
DragonridingRidingRequirement = 319,
ItemModAppearanceGroupAlreadyKnown = 320,
ItemCreationDisabledForEvent = 321,
Unknown = 322,
WarbandSceneAlreadyKnown = 322,
Unknown = 323,
// Ok Cast Value - Here In Case A Future Version Removes Success And We Need To Use A Custom Value (Not Sent To Client Either Way)
SpellCastOk = Success
@@ -1410,55 +1411,97 @@ namespace Framework.Constants
RequiresAResilientStone = 832, // Requires A Resilient Stone.
MyrritCannotCarryAnyMoreMaps = 835, // Myrrit Cannot Carry Any More Maps. Go On A Dig With Him!
SomeGiftsAreBetterLeftUndelivered = 836, // Some gifts are better left undelivered.
RequiresNiffenCaveDiveKeyandShieldDisabled = 850, // Requires Niffen Cave Dive Key And Shield Disabled.
ElusiveCreatureBaitWasRecentlyUsed = 851, // You Cannot Lure Anything In This Area For A Few Minutes. Elusive Creature Bait Was Recently Used.
MustBeInQuietPlaceWithinCaerDarrow = 852, // Must be in a suitably quiet place within Caer Darrow.
YouDontHaveAnyGlimmerOfLightsActive = 856, // You don't have any Glimmer of Lights active.
YouDontHaveTheSwirlingMojoStone = 999, // You Don'T Have The Swirling Mojo Stone Equipped.
YouMustBeNearADragonflightOathstone = 1000, // You Must Be Near One Of The Five Dragonflight Oathstones In The Dragon Isles.
CanOnlyUseThisItemWhileAirborne = 1001, // You Can Only Use This Item While Airborne.
ThisPlayerIsNotOppositeFaction = 1002, // This Player Is Not Of The Opposite Faction.
ThisPlayerAlreadyHasThisMount = 1003, // This Player Already Has This Mount.
YourTargetIsInWarMode = 1004, // Your Target Is In War Mode.
CooldownReset = 1005, // Cooldown Reset
SoilNutrientsMustReplenish = 1006, // The Nutrients Of This Soil Must Replenish Before Further Growth.
TargetAlreadyHadSomeFeathersPlucked = 1007, // The Target Has Already Had Some Feathers Plucked. It Would Be Rude To Take More.
ThisCreatureHasAlreadyBeenAttunedWith = 1008, // This Creature Has Already Been Attuned With Recently.
YouAlreadyHaveSomeMulchPrepared = 1009, // You Already Have Some Mulch Prepared. Use Your Current Mulch First.
YouDontKnowHowToGatherThis = 1010, // You Don't Know How To Gather This.
YouDontHaveAnyItemsOfThisType = 1011, // You Don't Have Any Items Of This Type.
YouDontHaveAnyRadiantRemnants = 1012, // You Don't Have Any Radiant Remnants.
TargetsRingIsAlreadyBoundToAnotherPlayer = 1013, // Your Target's Ring Is Already Bound To Another Player.
TargetIsNotWearingThisRing = 1014, // Your Target Is Not Also Wearing This Ring.
CanOnlyBeUsedOnSocketablePvpTwwItems = 1015, // Can Only Be Used On Socket Eligible Pvp Items From The War Within Expansion.
HarvestbotsAlreadyActive = 1016, // Harvestbots Already Active.
AirshipDauntlessIsAlreadyActive = 1017, // The Airship Dauntless Is Already Active.
CannotSwapSpellsOnCooldownInCombat = 1026, // You Cannot Swap Spells On Cooldown While In Combat.
MustEquipCloakOfInfinitePotential = 1027, // You Must First Equip The Cloak Of Infinite Potential.
InsufficientBronze = 1028, // You Have Insufficient Bronze To Make This Trade.
RequiresSkyriding = 1029, // Requires Skyriding
YouAlreadyOverloadedThisGatheringNode = 1030, // You Have Already Overloaded This Gathering Node.
YouDontKnowHowToOverloadThisNode = 1031, // You Do Not Know How To Overload This Gathering Node.
TimerunnersCannotTeleportOutOfPandaria = 1032, // Timerunners Cannot Teleport Outside Of Pandaria.
SpecializeFurtherForTheseNotes = 1033, // Specialize Further Or Improve Your Hasty Handwriting To Make Sense Of These Notes.
ThereIsNothingLeftToInvent = 1034, // There Is Nothing Left To Invent And You Cannot Be Convinced Otherwise.
PlayerInPartyDoesntHaveThisTierUnlocked = 1035, // A Player In Your Party Does Not Have This Tier Unlocked
YouDontHaveAnyRadiantEchoes = 1036, // You Don't Have Any Radiant Echoes.
RequiresTwwPathfinderUnlocked = 1037, // Requires The War Within Pathfinder Unlocked To Use In This Area.
CanOnlyBeUsedWhileInCombat = 1039, // Can Only Be Used While In Combat.
NotHighEnoughLevelToEnterADelve = 1040, // You Are Not High Enough Level To Enter A Delve.
WondrousWisdomballIsNonresponsive = 1041, // For Some Reason The Wondrous Wisdomball Is Nonresponsive.
YouAlreadyHaveThisCurioInYourCollection = 1042, // You Already Have This Curio In Your Collection.
AlreadyHaveIdentifiedPrototype = 1043, // You Must Choose What To Do With Your Current Prototype Before Identifying New Ones.
YouAlreadyUsedKhazAlgarContract = 1044, // You Have Already Used A Khaz Algar Contract This Week.
YouAlreadyRevealedAllTodayPactLocations = 1051, // You Have Revealed Or Completed All Of Today's Pact Locations.
TimerunnersCannotCastThisSpell = 1053, // Timerunners Cannot Cast This Spell.
ThisEmblemHasNoMagicStored = 2001, // The Emblem Has No Magic Stored.
YouMustBeInVisageForm = 2222, // You Must Be In Visage Form To Do This.
ATrialIsBeingUndergoneNearby = 2223, // A Trial Is Already Being Undergone Nearby.
YouCannotUseVantusRuneInStoryMode = 2224, // You Cannot Use A Vantus Rune In Story Mode.
TooCloseToAnotherMoltenRitual = 2424, // You Can't Begin A Molten Ritual This Close To Another One.
EarthenCannotConsumeRegularFoodOrDrink = 2425, // Earthen Cannot Consume Traditional Food Or Drink.
CompanionIsUnconscious = 837, // Companion Is Unconscious!
RequiresCompanion = 838, // Requires Companion.
YouAteTooManyDesserts = 840, // You Should Not Eat Too Many Desserts If You Wish To Be Invited To The Next Party.
OnlyUsableDuringLoveIsInTheAir = 841, // Only Usable During Love Is In The Air
NoSmellsNearby = 842, // No Smells Nearby!
YouAlreadyHaveAConjuredFlask = 845, // You Already Have A Conjured Flask.
YouAlreadyHaveSomeConjuredPotions = 846, // You Already Have Some Conjured Potions.
Requiresniffencavedivekeyandshielddisabled = 850, // Requires Niffen Cave Dive Key And Shield Disabled.
Elusivecreaturebaitwasrecentlyused = 851, // You Cannot Lure Anything In This Area For A Few Minutes. Elusive Creature Bait Was Recently Used.
Mustbeinquietplacewithincaerdarrow = 852, // Must Be In A Suitably Quiet Place Within Caer Darrow.
YouNeedShadowrootedGrippers = 853, // You Need Shadowrooted Grippers.
Youdonthaveanyglimmeroflightsactive = 856, // You Don't Have Any Glimmer Of Lights Active.
OnlyTheForsakenCanDisplayThisHonor = 857, // Only The Forsaken Can Display This Honor.
EnoughMoonkinHatchlingsAlreadyFollowYou = 858, // Enough Moonkin Hatchlings Already Follow You.
YouCanOnlyOpenThisChestInYourDreams = 859, // You Can Only Open This Chest In Your Dreams.
YouHaveNotProvenYourselfToThisSpirit = 860, // You Have Not Proven Yourself To This Spirit.
NotEnoughDelveEmpowerment = 861, // Not Enough Delve Empowerment.
ThisItemCannotBeUsedInTheCurrentSeason = 870, // This Item Cannot Be Used In The Current Season.
YouCannotEnterADelveWhileInARaidGroup = 871, // You Cannot Enter A Delve While In A Raid Group.
YourCompanionIsInCombat = 872, // Your Companion Is In Combat.
ThisDelveIsNotAvailableForTesting = 873, // This Delve Is Not Available For Testing. Check Back Later!
YouAreAlreadyAtFullVigor = 891, // You Are Already At Full Vigor
YouAlreadyHaveAtLeastOneConjuredFlask = 892, // You Already Have At Least One Conjured Flask.
ActiveFlasksCanOnlyBeChangedOutsOfCombat = 893, // Active Flasks Can Only Be Changed Outside Of Combat.
ThisCannotBeCraftedDuringEarlyAccess = 900, // This Cannot Be Crafted During Early Access.
Youdonthavetheswirlingmojostone = 999, // You Don't Have The Swirling Mojo Stone Equipped.
Youmustbenearadragonflightoathstone = 1000, // You Must Be Near One Of The Five Dragonflight Oathstones In The Dragon Isles.
Canonlyusethisitemwhileairborne = 1001, // You Can Only Use This Item While Airborne.
Thisplayerisnotoppositefaction = 1002, // This Player Is Not Of The Opposite Faction.
Thisplayeralreadyhasthismount = 1003, // This Player Already Has This Mount.
Yourtargetisinwarmode = 1004, // Your Target Is In War Mode.
Cooldownreset = 1005, // Cooldown Reset
Soilnutrientsmustreplenish = 1006, // The Nutrients Of This Soil Must Replenish Before Further Growth.
Targetalreadyhadsomefeathersplucked = 1007, // The Target Has Already Had Some Feathers Plucked. It Would Be Rude To Take More.
Thiscreaturehasalreadybeenattunedwith = 1008, // This Creature Has Already Been Attuned With Recently.
Youalreadyhavesomemulchprepared = 1009, // You Already Have Some Mulch Prepared. Use Your Current Mulch First.
Youdontknowhowtogatherthis = 1010, // You Don't Know How To Gather This.
Youdonthaveanyitemsofthistype = 1011, // You Don't Have Any Items Of This Type.
Youdonthaveanyradiantremnants = 1012, // You Don't Have Any Radiant Remnants.
Targetsringisalreadyboundtoanotherplayer = 1013, // Your Target's Ring Is Already Bound To Another Player.
Targetisnotwearingthisring = 1014, // Your Target Is Not Also Wearing This Ring.
Canonlybeusedonsocketablepvptwwitems = 1015, // Can Only Be Used On Socket Eligible Pvp Items From The War Within Expansion.
Harvestbotsalreadyactive = 1016, // Harvestbots Already Active.
Airshipdauntlessisalreadyactive = 1017, // The Airship Dauntless Is Already Active.
Cannotswapspellsoncooldownincombat = 1026, // You Cannot Swap Spells On Cooldown While In Combat.
Mustequipcloakofinfinitepotential = 1027, // You Must First Equip The Cloak Of Infinite Potential.
Insufficientbronze = 1028, // You Have Insufficient Bronze To Make This Trade.
Requiresskyriding = 1029, // Requires Skyriding
Youalreadyoverloadedthisgatheringnode = 1030, // You Have Already Overloaded This Gathering Node.
Youdontknowhowtooverloadthisnode = 1031, // You Do Not Know How To Overload This Gathering Node.
Timerunnerscannotteleportoutofpandaria = 1032, // Timerunners Cannot Teleport Outside Of Pandaria.
Specializefurtherforthesenotes = 1033, // Specialize Further Or Improve Your Hasty Handwriting To Make Sense Of These Notes.
Thereisnothinglefttoinvent = 1034, // There Is Nothing Left To Invent And You Cannot Be Convinced Otherwise.
Playerinpartydoesnthavethistierunlocked = 1035, // A Player In Your Party Does Not Have This Tier Unlocked
Youdonthaveanyradiantechoes = 1036, // You Don't Have Any Radiant Echoes.
Requirestwwpathfinderunlocked = 1037, // Requires The War Within Pathfinder Unlocked To Use In This Area.
YouDoNotOwnThatMount = 1038, // You Do Not Own That Mount.
Canonlybeusedwhileincombat = 1039, // Can Only Be Used While In Combat.
Nothighenoughleveltoenteradelve = 1040, // You Are Not High Enough Level To Enter A Delve.
Wondrouswisdomballisnonresponsive = 1041, // For Some Reason The Wondrous Wisdomball Is Nonresponsive.
Youalreadyhavethiscurioinyourcollection = 1042, // You Already Have This Curio In Your Collection.
Alreadyhaveidentifiedprototype = 1043, // You Must Choose What To Do With Your Current Prototype Before Identifying New Ones.
Youalreadyusedkhazalgarcontract = 1044, // You Have Already Used A Khaz Algar Contract This Week.
Locked = 1045, // Locked.
MarksmanshipHuntersCannotUseCallPet = 1050, // Marksmanship Hunters Cannot Use Call Pet.
Youalreadyrevealedalltodaypactlocations = 1051, // You Have Revealed Or Completed All Of Today's Pact Locations.
YouHaveNoBlacksteelCannonballs = 1052, // You Have No Blacksteel Cannonballs
Timerunnerscannotcastthisspell = 1053, // Timerunners Cannot Cast This Spell.
ThatCantBeUsedHere = 1054, // That Can't Be Used Here.
YouAreNotYetEligibleToUseThisItem = 1056, // You Are Not Yet Eligible To Use This Item.
RequiresShadowforgeTorch = 1057, // Lighting The Shadowforge Brazier Requires A Shadowforge Torch.
ThisShadowforgeBrazierIsAlreadyBurning = 1058, // This Shadowforge Brazier Is Already Burning.
FullBags = 1059, // Full Bags
YouMustBeARatToPassThroughHere = 1060, // You Must Be A Rat To Pass Through Here.
YourHandsAreFull = 1061, // Your Hands Are Full.
MustReachEmpoweredRestorationStone = 1064, // Must Reach Empowered Restoration Stone.
CantDoThisNow = 1066, // Can't Do This Now.
NoEligibleBountifulDelves = 1067, // No Eligible Bountiful Delves.
OnlyARogueCouldPickThisLock = 1068, // Only A Rogue Could Pick This Lock.
TheMegaMagnetMustBeChargedFirst = 1070, // The Mega Magnet Must Be Charged First!
MustTargetEligibleHeadChestOrLegSetItem = 1071, // Must Target An Eligible Head, Chest, Or Leg Class Set Item.
MustTargetEligibleShoulderOrHandSetItem = 1072, // Must Target An Eligible Shoulder Or Hand Class Set Item.
CannotMountWhileDisguised = 1074, // Cannot Mount While Disguised.
YourTargetIsProtectedByDarkfuseMedichopper = 1075, // Your Target Is Already Protected By A Darkfuse Medichopper.
Thisemblemhasnomagicstored = 2001, // The Emblem Has No Magic Stored.
Youmustbeinvisageform = 2222, // You Must Be In Visage Form To Do This.
Atrialisbeingundergonenearby = 2223, // A Trial Is Already Being Undergone Nearby.
Youcannotusevantusruneinstorymode = 2224, // You Cannot Use A Vantus Rune In Story Mode.
Tooclosetoanothermoltenritual = 2424, // You Can't Begin A Molten Ritual This Close To Another One.
Earthencannotconsumeregularfoodordrink = 2425, // Earthen Cannot Consume Traditional Food Or Drink.
BarrierProtectsTheAmplifierFromLosingPower = 2427, // A Barrier Protects The Amplifier From Losing Power.
}
public enum SpellMissInfo
@@ -227,7 +227,8 @@ namespace Framework.Database
// ChallengeModeItemBonusOverride.db2
PrepareStatement(HotfixStatements.SEL_CHALLENGE_MODE_ITEM_BONUS_OVERRIDE, "SELECT ID, ItemBonusTreeGroupID, DstItemBonusTreeID, Value, " +
"RequiredTimeEventPassed, SrcItemBonusTreeID FROM challenge_mode_item_bonus_override WHERE (`VerifiedBuild` > 0) = ?");
"RequiredTimeEventPassed, RequiredTimeEventNotPassed, SrcItemBonusTreeID FROM challenge_mode_item_bonus_override" +
" WHERE (`VerifiedBuild` > 0) = ?");
// CharBaseInfo.db2
PrepareStatement(HotfixStatements.SEL_CHAR_BASE_INFO, "SELECT ID, RaceID, ClassID, OtherFactionRaceID FROM char_base_info WHERE (`VerifiedBuild` > 0) = ?");
@@ -257,11 +258,11 @@ namespace Framework.Database
// ChrClasses.db2
PrepareStatement(HotfixStatements.SEL_CHR_CLASSES, "SELECT Name, Filename, NameMale, NameFemale, PetNameToken, Description, RoleInfoString, DisabledString, " +
"HyphenatedNameMale, HyphenatedNameFemale, ID, CreateScreenFileDataID, SelectScreenFileDataID, IconFileDataID, LowResScreenFileDataID, Flags, " +
"HyphenatedNameMale, HyphenatedNameFemale, CreateScreenFileDataID, SelectScreenFileDataID, IconFileDataID, LowResScreenFileDataID, Flags, " +
"SpellTextureBlobFileDataID, ArmorTypeMask, CharStartKitUnknown901, MaleCharacterCreationVisualFallback, " +
"MaleCharacterCreationIdleVisualFallback, FemaleCharacterCreationVisualFallback, FemaleCharacterCreationIdleVisualFallback, " +
"CharacterCreationIdleGroundVisualFallback, CharacterCreationGroundVisualFallback, AlteredFormCharacterCreationIdleVisualFallback, " +
"CharacterCreationAnimLoopWaitTimeMsFallback, CinematicSequenceID, DefaultSpec, PrimaryStatPriority, DisplayPower, " +
"CharacterCreationAnimLoopWaitTimeMsFallback, CinematicSequenceID, DefaultSpec, ID, PrimaryStatPriority, DisplayPower, " +
"RangedAttackPowerPerAgility, AttackPowerPerAgility, AttackPowerPerStrength, SpellClassSet, ClassColorR, ClassColorG, ClassColorB, RolesMask" +
" FROM chr_classes WHERE (`VerifiedBuild` > 0) = ?");
PrepareStatement(HotfixStatements.SEL_CHR_CLASSES_LOCALE, "SELECT ID, Name_lang, NameMale_lang, NameFemale_lang, Description_lang, RoleInfoString_lang, " +
@@ -297,8 +298,8 @@ namespace Framework.Database
" WHERE (`VerifiedBuild` > 0) = ? AND locale = ?");
// ChrCustomizationReq.db2
PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_REQ, "SELECT ID, RaceMask, ReqSource, Flags, ClassMask, AchievementID, QuestID, OverrideArchive, " +
"ItemModifiedAppearanceID FROM chr_customization_req WHERE (`VerifiedBuild` > 0) = ?");
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_LOCALE, "SELECT ID, ReqSource_lang FROM chr_customization_req_locale WHERE (`VerifiedBuild` > 0) = ?" +
" AND locale = ?");
@@ -319,15 +320,15 @@ namespace Framework.Database
// ChrRaces.db2
PrepareStatement(HotfixStatements.SEL_CHR_RACES, "SELECT ID, ClientPrefix, ClientFileString, Name, NameFemale, NameLowercase, NameFemaleLowercase, " +
"LoreName, LoreNameFemale, LoreNameLower, LoreNameLowerFemale, LoreDescription, ShortName, ShortNameFemale, ShortNameLower, " +
"ShortNameLowerFemale, Flags, FactionID, CinematicSequenceID, ResSicknessSpellID, SplashSoundID, Alliance, RaceRelated, " +
"UnalteredVisualRaceID, DefaultClassID, CreateScreenFileDataID, SelectScreenFileDataID, NeutralRaceID, LowResScreenFileDataID, " +
"AlteredFormStartVisualKitID1, AlteredFormStartVisualKitID2, AlteredFormStartVisualKitID3, AlteredFormFinishVisualKitID1, " +
"AlteredFormFinishVisualKitID2, AlteredFormFinishVisualKitID3, HeritageArmorAchievementID, StartingLevel, UiDisplayOrder, " +
"MaleModelFallbackRaceID, FemaleModelFallbackRaceID, MaleTextureFallbackRaceID, FemaleTextureFallbackRaceID, PlayableRaceBit, " +
"HelmetAnimScalingRaceID, TransmogrifyDisabledSlotMask, UnalteredVisualCustomizationRaceID, AlteredFormCustomizeOffsetFallback1, " +
"AlteredFormCustomizeOffsetFallback2, AlteredFormCustomizeOffsetFallback3, AlteredFormCustomizeRotationFallback, Unknown910_11, " +
"Unknown910_12, Unknown910_13, Unknown910_21, Unknown910_22, Unknown910_23, Unknown1000, BaseLanguage, CreatureType, MaleModelFallbackSex, " +
"FemaleModelFallbackSex, MaleTextureFallbackSex, FemaleTextureFallbackSex FROM chr_races WHERE (`VerifiedBuild` > 0) = ?");
"ShortNameLowerFemale, Flags, FactionID, CinematicSequenceID, ResSicknessSpellID, SplashSoundID, CreateScreenFileDataID, " +
"SelectScreenFileDataID, LowResScreenFileDataID, AlteredFormStartVisualKitID1, AlteredFormStartVisualKitID2, AlteredFormStartVisualKitID3, " +
"AlteredFormFinishVisualKitID1, AlteredFormFinishVisualKitID2, AlteredFormFinishVisualKitID3, HeritageArmorAchievementID, StartingLevel, " +
"UiDisplayOrder, PlayableRaceBit, TransmogrifyDisabledSlotMask, AlteredFormCustomizeOffsetFallback1, AlteredFormCustomizeOffsetFallback2, " +
"AlteredFormCustomizeOffsetFallback3, AlteredFormCustomizeRotationFallback, Unknown910_11, Unknown910_12, Unknown910_13, Unknown910_21, " +
"Unknown910_22, Unknown910_23, BaseLanguage, CreatureType, Alliance, RaceRelated, UnalteredVisualRaceID, DefaultClassID, NeutralRaceID, " +
"MaleModelFallbackRaceID, MaleModelFallbackSex, FemaleModelFallbackRaceID, FemaleModelFallbackSex, MaleTextureFallbackRaceID, " +
"MaleTextureFallbackSex, FemaleTextureFallbackRaceID, FemaleTextureFallbackSex, HelmetAnimScalingRaceID, UnalteredVisualCustomizationRaceID" +
" FROM chr_races WHERE (`VerifiedBuild` > 0) = ?");
PrepareStatement(HotfixStatements.SEL_CHR_RACES_LOCALE, "SELECT ID, Name_lang, NameFemale_lang, NameLowercase_lang, NameFemaleLowercase_lang, LoreName_lang, " +
"LoreNameFemale_lang, LoreNameLower_lang, LoreNameLowerFemale_lang, LoreDescription_lang, ShortName_lang, ShortNameFemale_lang, " +
"ShortNameLower_lang, ShortNameLowerFemale_lang FROM chr_races_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?");
@@ -427,7 +428,7 @@ namespace Framework.Database
// 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, Flags1, Flags2 FROM currency_types WHERE (`VerifiedBuild` > 0) = ?");
"RechargingAmountPerCycle, RechargingCycleDurationMS, AccountTransferPercentage, OrderIndex, 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 = ?");
@@ -631,7 +632,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 FROM gossip_npc_option WHERE (`VerifiedBuild` > 0) = ?");
"Unknown_1002_14, 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) = ?");
@@ -866,7 +867,7 @@ namespace Framework.Database
// JournalInstance.db2
PrepareStatement(HotfixStatements.SEL_JOURNAL_INSTANCE, "SELECT ID, Name, Description, MapID, BackgroundFileDataID, ButtonFileDataID, " +
"ButtonSmallFileDataID, LoreFileDataID, Flags, AreaID FROM journal_instance WHERE (`VerifiedBuild` > 0) = ?");
"ButtonSmallFileDataID, LoreFileDataID, Flags, AreaID, CovenantID FROM journal_instance WHERE (`VerifiedBuild` > 0) = ?");
PrepareStatement(HotfixStatements.SEL_JOURNAL_INSTANCE_LOCALE, "SELECT ID, Name_lang, Description_lang FROM journal_instance_locale" +
" WHERE (`VerifiedBuild` > 0) = ? AND locale = ?");
@@ -967,7 +968,7 @@ namespace Framework.Database
// MountCapability.db2
PrepareStatement(HotfixStatements.SEL_MOUNT_CAPABILITY, "SELECT ID, Flags, ReqRidingSkill, ReqAreaID, ReqSpellAuraID, ReqSpellKnownID, ModSpellAuraID, " +
"ReqMapID, PlayerConditionID, FlightCapabilityID FROM mount_capability WHERE (`VerifiedBuild` > 0) = ?");
"ReqMapID, PlayerConditionID, FlightCapabilityID, DriveCapabilityID FROM mount_capability WHERE (`VerifiedBuild` > 0) = ?");
// MountEquipment.db2
PrepareStatement(HotfixStatements.SEL_MOUNT_EQUIPMENT, "SELECT ID, Item, BuffSpell, Unknown820, LearnedBySpell FROM mount_equipment" +
@@ -1105,7 +1106,7 @@ namespace Framework.Database
PrepareStatement(HotfixStatements.SEL_QUEST_INFO_LOCALE, "SELECT ID, InfoName_lang FROM quest_info_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?");
// QuestLineXQuest.db2
PrepareStatement(HotfixStatements.SEL_QUEST_LINE_X_QUEST, "SELECT ID, QuestLineID, QuestID, OrderIndex, Flags FROM quest_line_x_quest" +
PrepareStatement(HotfixStatements.SEL_QUEST_LINE_X_QUEST, "SELECT ID, QuestLineID, QuestID, OrderIndex, Flags, Unknown1110 FROM quest_line_x_quest" +
" WHERE (`VerifiedBuild` > 0) = ?");
// QuestMoneyReward.db2
+2 -2
View File
@@ -1343,7 +1343,7 @@ namespace Game
}
AuctionWonNotification packet = new();
packet.Info.Initialize(auctions[0], items[0].Items[0]);
packet.Info.Initialize(_auctionHouse.Id, auctions[0], items[0].Items[0]);
player.SendPacket(packet);
for (int i = 0; i < auctions.Count; ++i)
@@ -1445,7 +1445,7 @@ namespace Game
if (bidder != null)
{
AuctionWonNotification packet = new();
packet.Info.Initialize(auction, auction.Items[0]);
packet.Info.Initialize(_auctionHouse.Id, auction, auction.Items[0]);
bidder.SendPacket(packet);
// FIXME: for offline player need also
+2 -2
View File
@@ -1216,8 +1216,8 @@ namespace Game.BattleGrounds
playerData.IsInWorld = true;
playerData.PrimaryTalentTree = (int)player.GetPrimarySpecialization();
playerData.Sex = (sbyte)player.GetGender();
playerData.PlayerRace = player.GetRace();
playerData.PlayerClass = (int)player.GetClass();
playerData.PlayerRace = (sbyte)player.GetRace();
playerData.PlayerClass = (sbyte)player.GetClass();
playerData.HonorLevel = (int)player.GetHonorLevel();
pvpLogData.Statistics.Add(playerData);
@@ -138,7 +138,7 @@ namespace Game.BattleGrounds
battlefieldStatus = new BattlefieldStatusActive();
BuildBattlegroundStatusHeader(battlefieldStatus.Hdr, player, ticketId, joinTime, queueId);
battlefieldStatus.ShutdownTimer = bg.GetRemainingTime();
battlefieldStatus.ArenaFaction = (byte)(player.GetBGTeam() == Team.Horde ? BattleGroundTeamId.Horde : BattleGroundTeamId.Alliance);
battlefieldStatus.ArenaFaction = (sbyte)(player.GetBGTeam() == Team.Horde ? BattleGroundTeamId.Horde : BattleGroundTeamId.Alliance);
battlefieldStatus.LeftEarly = false;
battlefieldStatus.StartTimer = bg.GetElapsedTime();
battlefieldStatus.Mapid = bg.GetMapId();
+2 -2
View File
@@ -2416,7 +2416,7 @@ namespace Game.DataStorage
MultiMap<uint, int> _creatureLabels = new();
MultiMap<uint, CurrencyContainerRecord> _currencyContainers = new();
MultiMap<uint, Vector2> _curvePoints = new();
Dictionary<Tuple<uint, byte, byte, byte>, EmotesTextSoundRecord> _emoteTextSounds = new();
Dictionary<Tuple<uint, sbyte, sbyte, sbyte>, EmotesTextSoundRecord> _emoteTextSounds = new();
Dictionary<Tuple<uint, int>, ExpectedStatRecord> _expectedStatsByLevel = new();
MultiMap<uint, ContentTuningXExpectedRecord> _expectedStatModsByContentTuning = new();
MultiMap<uint, uint> _factionTeams = new();
@@ -2438,7 +2438,7 @@ namespace Game.DataStorage
Dictionary<uint, MountRecord> _mountsBySpellId = new();
MultiMap<uint, MountTypeXCapabilityRecord> _mountCapabilitiesByType = new();
MultiMap<uint, MountXDisplayRecord> _mountDisplays = new();
Dictionary<uint, List<NameGenRecord>[]> _nameGenData = new();
Dictionary<sbyte, List<NameGenRecord>[]> _nameGenData = new();
List<string>[] _nameValidators = new List<string>[(int)Locale.Total + 1];
Dictionary<uint, ParagonReputationRecord> _paragonReputations = new();
Dictionary<uint, PathDb2> _paths = new();
+1 -1
View File
@@ -378,7 +378,7 @@ namespace Game.DataStorage
public uint Id;
public uint AzeritePowerSetID;
public int AzeritePowerID;
public int Class;
public sbyte Class;
public byte Tier;
public uint OrderIndex;
}
+2 -2
View File
@@ -26,8 +26,8 @@ namespace Game.DataStorage
public string Description;
public byte Type; // value 0 . hair, value 2 . facialhair
public float CostModifier;
public byte Race;
public byte Sex;
public sbyte Race;
public sbyte Sex;
public byte Data; // real ID to hair/facial hair
}
+23 -21
View File
@@ -38,6 +38,7 @@ namespace Game.DataStorage
public int DstItemBonusTreeID;
public int Value;
public int RequiredTimeEventPassed;
public int RequiredTimeEventNotPassed;
public uint SrcItemBonusTreeID;
}
@@ -46,7 +47,7 @@ namespace Game.DataStorage
public uint Id;
public sbyte RaceID;
public sbyte ClassID;
public int OtherFactionRaceID;
public sbyte OtherFactionRaceID;
}
public sealed class CharTitlesRecord
@@ -82,7 +83,7 @@ namespace Game.DataStorage
public LocalizedString Name;
public string Shortcut;
public int Flags;
public sbyte FactionGroup;
public byte FactionGroup;
public int Ruleset;
public bool HasFlag(ChatChannelFlags chatChannelFlags) { return (Flags & (int)chatChannelFlags) != 0; }
@@ -92,7 +93,7 @@ namespace Game.DataStorage
public sealed class ChrClassUIDisplayRecord
{
public uint Id;
public byte ChrClassesID;
public sbyte ChrClassesID;
public uint AdvGuidePlayerConditionID;
public uint SplashPlayerConditionID;
}
@@ -109,7 +110,6 @@ namespace Game.DataStorage
public string DisabledString;
public string HyphenatedNameMale;
public string HyphenatedNameFemale;
public uint Id;
public uint CreateScreenFileDataID;
public uint SelectScreenFileDataID;
public uint IconFileDataID;
@@ -128,6 +128,7 @@ namespace Game.DataStorage
public int CharacterCreationAnimLoopWaitTimeMsFallback;
public ushort CinematicSequenceID;
public ushort DefaultSpec;
public uint Id;
public byte PrimaryStatPriority;
public PowerType DisplayPower;
public byte RangedAttackPowerPerAgility;
@@ -214,6 +215,7 @@ namespace Game.DataStorage
public string ReqSource;
public int Flags;
public int ClassMask;
public int RegionGroupMask;
public int AchievementID;
public int QuestID;
public int OverrideArchive; // -1: allow any, otherwise must match OverrideArchive cvar
@@ -253,9 +255,9 @@ namespace Game.DataStorage
public sealed class ChrRaceXChrModelRecord
{
public uint Id;
public uint ChrRacesID;
public byte ChrRacesID;
public int ChrModelID;
public int Sex;
public sbyte Sex;
public int AllowedTransmogSlots;
}
@@ -282,38 +284,37 @@ namespace Game.DataStorage
public uint CinematicSequenceID;
public uint ResSicknessSpellID;
public int SplashSoundID;
public int Alliance;
public int RaceRelated;
public int UnalteredVisualRaceID;
public int DefaultClassID;
public int CreateScreenFileDataID;
public int SelectScreenFileDataID;
public int NeutralRaceID;
public int LowResScreenFileDataID;
public int[] AlteredFormStartVisualKitID = new int[3];
public int[] AlteredFormFinishVisualKitID = new int[3];
public int HeritageArmorAchievementID;
public int StartingLevel;
public int UiDisplayOrder;
public int MaleModelFallbackRaceID;
public int FemaleModelFallbackRaceID;
public int MaleTextureFallbackRaceID;
public int FemaleTextureFallbackRaceID;
public int PlayableRaceBit;
public int HelmetAnimScalingRaceID;
public int TransmogrifyDisabledSlotMask;
public int UnalteredVisualCustomizationRaceID;
public float[] AlteredFormCustomizeOffsetFallback = new float[3];
public float AlteredFormCustomizeRotationFallback;
public float[] Unknown910_1 = new float[3];
public float[] Unknown910_2 = new float[3];
public int Unknown1000;
public sbyte BaseLanguage;
public sbyte CreatureType;
public byte CreatureType;
public sbyte Alliance;
public sbyte RaceRelated;
public sbyte UnalteredVisualRaceID;
public sbyte DefaultClassID;
public sbyte NeutralRaceID;
public sbyte MaleModelFallbackRaceID;
public sbyte MaleModelFallbackSex;
public sbyte FemaleModelFallbackRaceID;
public sbyte FemaleModelFallbackSex;
public sbyte MaleTextureFallbackRaceID;
public sbyte MaleTextureFallbackSex;
public sbyte FemaleTextureFallbackRaceID;
public sbyte FemaleTextureFallbackSex;
public sbyte HelmetAnimScalingRaceID;
public sbyte UnalteredVisualCustomizationRaceID;
public bool HasFlag(ChrRacesFlag chrRacesFlag) { return (Flags & (int)chrRacesFlag) != 0; }
}
@@ -488,7 +489,7 @@ namespace Game.DataStorage
public sbyte DisplayRaceID;
public sbyte DisplaySexID;
public sbyte DisplayClassID;
public sbyte Flags;
public int Flags;
public int BakeMaterialResourcesID;
public int HDBakeMaterialResourcesID;
}
@@ -559,7 +560,7 @@ namespace Game.DataStorage
{
public uint Id;
public string Name;
public byte Flags;
public int Flags;
}
public sealed class CriteriaRecord
@@ -627,6 +628,7 @@ namespace Game.DataStorage
public uint RechargingAmountPerCycle;
public uint RechargingCycleDurationMS;
public float AccountTransferPercentage;
public byte OrderIndex;
public int[] Flags = new int[2];
public bool HasFlag(CurrencyTypesFlags currencyTypesFlags) { return (Flags[0] & (int)currencyTypesFlags) != 0; }
+3 -3
View File
@@ -27,9 +27,9 @@ namespace Game.DataStorage
public sealed class EmotesTextSoundRecord
{
public uint Id;
public byte RaceId;
public byte ClassId;
public byte SexId;
public sbyte RaceId;
public sbyte ClassId;
public sbyte SexId;
public uint SoundId;
public uint EmotesTextId;
}
+2 -1
View File
@@ -161,7 +161,7 @@ namespace Game.DataStorage
public uint AllySlottingBroadcastTextID;
public byte ChrClassID;
public int Flags;
public byte Gender;
public sbyte Gender;
public int AutoCombatantID;
public int CovenantID;
}
@@ -332,6 +332,7 @@ namespace Game.DataStorage
public int TraitTreeID;
public int ProfessionID;
public int Unknown_1002_14;
public int SkillLineID;
}
public sealed class GuildColorBackgroundRecord
+1 -1
View File
@@ -416,7 +416,7 @@ namespace Game.DataStorage
public byte DamageType;
public byte ContainerSlots;
public byte RequiredPVPMedal;
public byte RequiredPVPRank;
public sbyte RequiredPVPRank;
public sbyte RequiredLevel;
public InventoryType inventoryType;
public sbyte OverallQualityID;
@@ -53,6 +53,7 @@ namespace Game.DataStorage
public int LoreFileDataID;
public int Flags;
public ushort AreaID;
public ushort CovenantID;
}
public sealed class JournalTierRecord
+1 -1
View File
@@ -79,7 +79,7 @@ namespace Game.DataStorage
public uint Id;
public string Name;
public string[] Texture = new string[6];
public ushort Flags;
public int Flags;
public byte SoundBank; // used to be "type", maybe needs fixing (works well for now)
public uint SoundID;
public uint SpellID;
@@ -211,6 +211,7 @@ namespace Game.DataStorage
public short ReqMapID;
public int PlayerConditionID;
public int FlightCapabilityID;
public int DriveCapabilityID;
public bool HasFlag(MountCapabilityFlags mountCapabilityFlags) { return (Flags & (int)mountCapabilityFlags) != 0; }
}
+2 -2
View File
@@ -7,8 +7,8 @@ namespace Game.DataStorage
{
public uint Id;
public string Name;
public byte RaceID;
public byte Sex;
public sbyte RaceID;
public sbyte Sex;
}
public sealed class NamesProfanityRecord
+4 -4
View File
@@ -22,7 +22,7 @@ namespace Game.DataStorage
public byte Green;
public byte Blue;
public byte Alpha;
public byte Flags;
public int Flags;
}
public sealed class PathNodeRecord
@@ -85,7 +85,7 @@ namespace Game.DataStorage
public ushort WorldStateExpressionID;
public int WeatherID;
public byte PartyStatus;
public byte LifetimeMaxPVPRank;
public sbyte LifetimeMaxPVPRank;
public uint AchievementLogic;
public sbyte Gender;
public sbyte NativeGender;
@@ -115,8 +115,8 @@ namespace Game.DataStorage
public byte MinGuildLevel;
public sbyte MaxExpansionTier;
public sbyte MinExpansionTier;
public byte MinPVPRank;
public byte MaxPVPRank;
public sbyte MinPVPRank;
public sbyte MaxPVPRank;
public uint ContentTuningID;
public int CovenantID;
public uint TraitNodeEntryLogic;
@@ -27,6 +27,7 @@ namespace Game.DataStorage
public uint QuestID;
public uint OrderIndex;
public int Flags;
public int Unknown1110;
}
public sealed class QuestMoneyRewardRecord
+1 -1
View File
@@ -576,7 +576,7 @@ namespace Game.DataStorage
public uint Id;
public string Name;
public uint CreatureDisplayID;
public sbyte CreatureType;
public byte CreatureType;
public int Flags;
public int AttackIconFileID;
public sbyte BonusActionBar;
+1 -1
View File
@@ -20,7 +20,7 @@ namespace Game.DataStorage
public byte TierID;
public byte Flags;
public byte ColumnIndex;
public byte ClassID;
public sbyte ClassID;
public ushort SpecID;
public uint SpellID;
public uint OverridesSpellID;
+2 -2
View File
@@ -28,7 +28,7 @@ namespace Game.DataStorage
{
public uint Id;
public uint QuestFeedbackEffectID;
public byte WhenToDisplay;
public int WhenToDisplay;
public byte TargetType;
public int TargetAsset;
public uint PlayerConditionID;
@@ -48,7 +48,7 @@ namespace Game.DataStorage
public int HitRectLeft;
public int HitRectRight;
public uint PlayerConditionID;
public uint Flags;
public int Flags;
public uint[] AreaID = new uint[SharedConst.MaxWorldMapOverlayArea];
}
+6 -3
View File
@@ -2945,7 +2945,7 @@ namespace Game.Entities
int scalingLevelMin = m_unitData.ScalingLevelMin;
int scalingLevelMax = m_unitData.ScalingLevelMax;
int scalingLevelDelta = m_unitData.ScalingLevelDelta;
int scalingFactionGroup = m_unitData.ScalingFactionGroup;
byte scalingFactionGroup = m_unitData.ScalingFactionGroup;
uint targetLevel = unitTarget.m_unitData.EffectiveLevel;
if (targetLevel == 0)
targetLevel = unitTarget.GetLevel();
@@ -3804,8 +3804,13 @@ namespace Game.Entities
m_unitData.WriteCreate(data, flags, this, target);
if (m_vendorData != null)
{
if (EntityFragmentsHolder.IsIndirectFragment(EntityFragment.FVendor_C))
data.WriteUInt8(1); // IndirectFragmentActive: FVendor_C
m_vendorData.WriteCreate(data, flags, this, target);
}
}
public override void BuildValuesUpdate(WorldPacket data, UpdateFieldFlag flags, Player target)
{
@@ -3869,9 +3874,7 @@ namespace Game.Entities
public override void ClearUpdateMask(bool remove)
{
if (m_vendorData != null)
m_values.ClearChangesMask(m_vendorData);
base.ClearUpdateMask(remove);
}
@@ -167,9 +167,9 @@ namespace Game.Entities
stats.Flags[0] = (uint)creatureDifficulty.TypeFlags;
stats.Flags[1] = creatureDifficulty.TypeFlags2;
stats.CreatureType = (int)CreatureType;
stats.CreatureType = (sbyte)CreatureType;
stats.CreatureFamily = (int)Family;
stats.Classification = (int)Classification;
stats.Classification = (sbyte)Classification;
for (uint i = 0; i < SharedConst.MaxCreatureKillCredit; ++i)
stats.ProxyCreatureID[i] = KillCredit[i];
+4 -4
View File
@@ -17,7 +17,7 @@ namespace Game.Misc
public class GossipMenu
{
public uint AddMenuItem(int gossipOptionId, int orderIndex, GossipOptionNpc optionNpc, string optionText, uint language,
GossipOptionFlags flags, int? gossipNpcOptionId, uint actionMenuId, uint actionPoiId, bool boxCoded, uint boxMoney,
GossipOptionFlags flags, int? gossipNpcOptionId, uint actionMenuId, uint actionPoiId, bool boxCoded, ulong boxMoney,
string boxText, int? spellId, int? overrideIconId, uint sender, uint action)
{
Cypher.Assert(_menuItems.Count <= SharedConst.MaxGossipMenuItems);
@@ -261,7 +261,7 @@ namespace Game.Misc
opt.GossipOptionID = item.GossipOptionID;
opt.OptionNPC = item.OptionNpc;
opt.OptionFlags = (byte)(item.BoxCoded ? 1 : 0); // makes pop up box password
opt.OptionCost = (int)item.BoxMoney; // money required to open menu, 2.0.3
opt.OptionCost = item.BoxMoney; // money required to open menu, 2.0.3
opt.OptionLanguage = item.Language;
opt.Flags = item.Flags;
opt.OrderIndex = (int)item.OrderIndex;
@@ -757,7 +757,7 @@ namespace Game.Misc
public GossipOptionFlags Flags;
public int? GossipNpcOptionID;
public bool BoxCoded;
public uint BoxMoney;
public ulong BoxMoney;
public string BoxText;
public int? SpellID;
public int? OverrideIconID;
@@ -801,7 +801,7 @@ namespace Game.Misc
public uint ActionPoiID;
public int? GossipNpcOptionID;
public bool BoxCoded;
public uint BoxMoney;
public ulong BoxMoney;
public string BoxText;
public uint BoxBroadcastTextId;
public int? SpellID;
@@ -2355,7 +2355,7 @@ namespace Game.Entities
Player player = user.ToPlayer();
EnableBarberShop enableBarberShop = new();
enableBarberShop.CustomizationScope = (byte)info.BarberChair.CustomizationScope;
enableBarberShop.CustomizationFeatureMask = (byte)info.BarberChair.CustomizationFeatureMask;
player.SendPacket(enableBarberShop);
// fallback, will always work
@@ -1298,7 +1298,7 @@ namespace Game.Entities
public int HeightOffset; // 1 Height Offset (inches), int, Min value: -100, Max value: 100, Default value: 0
public uint SitAnimKit; // 2 Sit Anim Kit, References: AnimKit, NoValue = 0
public uint InteractRadiusOverride; // 3 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
public uint CustomizationScope; // 4 Customization Scope, int, Min value: 0, Max value: 2147483647, Default value: 0
public uint CustomizationFeatureMask; // 4 Customization Feature Mask, int, Min value: 0, Max value: 2147483647, Default value: 0
public uint Preventteleportingtheplayeroutofthebarbershopchair;// 5 Prevent teleporting the player out of the barbershop chair, enum { false, true, }; Default: false
}
@@ -1476,13 +1476,14 @@ namespace Game.Entities
public struct uilink
{
public uint UILinkType; // 0 UI Link Type, enum { Adventure Journal, Obliterum Forge, Scrapping Machine, Item Interaction }; Default: Adventure Journal
public uint UILinkType; // 0 UI Link Type(Deprecated), enum { Adventure Journal, Obliterum Forge, Scrapping Machine, Item Interaction }; Default: Adventure Journal
public uint allowMounted; // 1 allowMounted, enum { false, true, }; Default: false
public uint GiganticAOI; // 2 Gigantic AOI, enum { false, true, }; Default: false
public uint spellFocusType; // 3 spellFocusType, References: SpellFocusObject, NoValue = 0
public uint radius; // 4 radius, int, Min value: 0, Max value: 50, Default value: 10
public uint InteractRadiusOverride; // 5 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
public uint ItemInteractionID; // 6 Item Interaction ID, References: UiItemInteraction, NoValue = 0
public uint PlayerInteractionType; // 7 Player Interaction Type, enum { None, TradePartner, Item, Gossip, QuestGiver, Merchant, TaxiNode, Trainer, Banker, AlliedRaceDetailsGiver, GuildBanker, Registrar, Vendor, PetitionVendor, GuildTabardVendor, TalentMaster, SpecializationMaster, MailInfo, SpiritHealer, AreaSpiritHealer, Binder, Auctioneer, StableMaster, BattleMaster, Transmogrifier, LFGDungeon, VoidStorageBanker, BlackMarketAuctioneer, AdventureMap, WorldMap, GarrArchitect, GarrTradeskill, GarrMission, ShipmentCrafter, GarrRecruitment, GarrTalent, Trophy, PlayerChoice, ArtifactForge, ObliterumForge, ScrappingMachine, ContributionCollector, AzeriteRespec, IslandQueue, ItemInteraction, ChromieTime, CovenantPreview, AnimaDiversion, LegendaryCrafting, WeeklyRewards, Soulbind, CovenantSanctum, NewPlayerGuide, ItemUpgrade, AdventureJournal, Renown, AzeriteForge, PerksProgramVendor, ProfessionsCraftingOrder, Professions, ProfessionsCustomerOrder, TraitSystem, BarbersChoice, JailersTowerBuffs, MajorFactionRenown, PersonalTabardVendor, ForgeMaster, CharacterBanker, AccountBanker, ProfessionRespec, PlaceholderType71, PlaceholderType72, PlaceholderType73, PlaceholderType74, PlaceholderType75, PlaceholderType76, PlaceholderType77, }; Default: None
}
public struct keystonereceptacle
File diff suppressed because it is too large Load Diff
@@ -33,7 +33,7 @@ namespace Game.Entities
FEntityLocalMatrix = 113,
FEntityWorldMatrix = 114,
CActor = 115, // INDIRECT,
FVendor_C = 117, // UPDATEABLE,
FVendor_C = 117, // UPDATEABLE, INDIRECT,
FMirroredObject_C = 119,
End = 255,
}
@@ -84,7 +84,7 @@ namespace Game.Entities
Array.Sort(arr);
++count;
return (whereIndex, true);
};
}
if (!insertSorted(ref Ids, ref Count, fragment).Item2)
return;
@@ -103,7 +103,8 @@ namespace Game.Entities
if (IsIndirectFragment(UpdateableIds[i]))
{
ContentsChangedMask |= UpdateableMasks[i]; // set the first bit to true to activate fragment
UpdateableMasks[i] |= (byte)(1 << maskIndex++);
++maskIndex;
UpdateableMasks[i] <<= 1;
}
}
}
@@ -125,7 +126,7 @@ namespace Game.Entities
return (where, true);
}
return (where, false);
};
}
if (!removeSorted(ref Ids, ref Count, fragment).Item2)
return;
@@ -142,7 +143,10 @@ namespace Game.Entities
{
UpdateableMasks[i] = (byte)(1 << maskIndex++);
if (IsIndirectFragment(UpdateableIds[i]))
UpdateableMasks[i] |= (byte)(1 << maskIndex++);
{
++maskIndex;
UpdateableMasks[i] <<= 1;
}
}
}
}
@@ -157,7 +161,7 @@ namespace Game.Entities
public static bool IsIndirectFragment(EntityFragment frag)
{
return frag == EntityFragment.CGObject || frag == EntityFragment.CActor;
return frag == EntityFragment.CGObject || frag == EntityFragment.CActor || frag == EntityFragment.FVendor_C;
}
public EntityFragment[] GetIds() { return Ids[..Count]; }
+48 -2
View File
@@ -249,9 +249,14 @@ namespace Game.Entities
public void BuildEntityFragmentsForValuesUpdateForPlayerWithMask(WorldPacket data, UpdateFieldFlag flags)
{
byte contentsChangedMask = EntityDefinitionsConst.CGObjectChangedMask;
foreach (var updateableFragmentId in m_entityFragments.GetUpdateableIds())
if (EntityFragmentsHolder.IsIndirectFragment(updateableFragmentId))
contentsChangedMask |= (byte)(m_entityFragments.GetUpdateMaskFor(updateableFragmentId) >> 1); // set the "fragment exists" bit
data.WriteUInt8((byte)(flags.HasFlag(UpdateFieldFlag.Owner) ? 1 : 0));
data.WriteUInt8(0); // m_entityFragments.IdsChanged
data.WriteUInt8(EntityDefinitionsConst.CGObjectUpdateMask);
data.WriteUInt8(contentsChangedMask);
}
public void BuildDestroyUpdateBlock(UpdateData data)
@@ -319,6 +324,7 @@ namespace Game.Entities
bool HasSpline = unit.IsSplineEnabled();
bool HasInertia = unit.m_movementInfo.inertia.HasValue;
bool HasAdvFlying = unit.m_movementInfo.advFlying.HasValue;
bool HasDriveStatus = unit.m_movementInfo.driveStatus.HasValue;
bool HasStandingOnGameObjectGUID = unit.m_movementInfo.standingOnGameObjectGUID.HasValue;
data.WritePackedGuid(GetGUID()); // MoverGUID
@@ -349,6 +355,9 @@ namespace Game.Entities
data.WriteBit(false); // HeightChangeFailed
data.WriteBit(false); // RemoteTimeValid
data.WriteBit(HasInertia); // HasInertia
data.WriteBit(HasAdvFlying); // HasAdvFlying
data.WriteBit(HasDriveStatus); // HasDriveStatus
data.FlushBits();
if (!unit.m_movementInfo.transport.guid.IsEmpty())
MovementExtensions.WriteTransportInfo(data, unit.m_movementInfo.transport);
@@ -382,6 +391,14 @@ namespace Game.Entities
}
}
if (HasDriveStatus)
{
data.WriteBit(unit.m_movementInfo.driveStatus.Value.accelerating);
data.WriteBit(unit.m_movementInfo.driveStatus.Value.drifting);
data.WriteFloat(unit.m_movementInfo.driveStatus.Value.speed);
data.WriteFloat(unit.m_movementInfo.driveStatus.Value.movementAngle);
}
data.WriteFloat(unit.GetSpeed(UnitMoveType.Walk));
data.WriteFloat(unit.GetSpeed(UnitMoveType.Run));
data.WriteFloat(unit.GetSpeed(UnitMoveType.RunBack));
@@ -841,7 +858,6 @@ namespace Game.Entities
{
m_values.ClearChangesMask(m_objectData);
m_entityFragments.IdsChanged = false;
m_entityFragments.ContentsChangedMask = EntityDefinitionsConst.CGObjectActiveMask;
if (m_objectUpdated)
{
@@ -3963,6 +3979,7 @@ namespace Game.Entities
public JumpInfo jump;
public float stepUpStartElevation { get; set; }
public AdvFlying? advFlying;
public Drive? driveStatus;
public ObjectGuid? standingOnGameObjectGUID;
public MovementInfo()
@@ -4027,12 +4044,14 @@ namespace Game.Entities
public uint prevTime;
public uint vehicleId;
}
public struct Inertia
{
public int id;
public Position force;
public uint lifetime;
}
public struct JumpInfo
{
public void Reset()
@@ -4047,12 +4066,21 @@ namespace Game.Entities
public float cosAngle;
public float xyspeed;
}
// advflying
public struct AdvFlying
{
public float forwardVelocity;
public float upVelocity;
}
public struct Drive
{
public float speed;
public float movementAngle;
public bool accelerating;
public bool drifting;
}
}
public class MovementForce
@@ -4064,6 +4092,9 @@ namespace Game.Entities
public float Magnitude;
public MovementForceType Type;
public int MovementForceID;
public int Unknown1110_1;
public int Unused1110;
public uint Flags;
public void Read(WorldPacket data)
{
@@ -4073,6 +4104,9 @@ namespace Game.Entities
TransportID = data.ReadUInt32();
Magnitude = data.ReadFloat();
MovementForceID = data.ReadInt32();
Unknown1110_1 = data.ReadInt32();
Unused1110 = data.ReadInt32();
Flags = data.ReadUInt32();
Type = (MovementForceType)data.ReadBits<byte>(2);
}
@@ -4264,7 +4298,13 @@ namespace Game.Entities
{
_owner.m_entityFragments.ContentsChangedMask &= (byte)~_owner.m_entityFragments.GetUpdateMaskFor((EntityFragment)updateData._blockBit);
if ((EntityFragment)updateData._blockBit == EntityFragment.CGObject)
{
_changesMask.Reset(updateData.Bit);
if (!_changesMask.IsAnySet())
_owner.m_entityFragments.ContentsChangedMask &= (byte)~_owner.m_entityFragments.GetUpdateMaskFor((EntityFragment)updateData._blockBit);
}
else
_owner.m_entityFragments.ContentsChangedMask &= (byte)~_owner.m_entityFragments.GetUpdateMaskFor((EntityFragment)updateData._blockBit);
updateData.ClearChangesMask();
}
@@ -4273,7 +4313,13 @@ namespace Game.Entities
{
_owner.m_entityFragments.ContentsChangedMask &= (byte)~_owner.m_entityFragments.GetUpdateMaskFor((EntityFragment)updateData._blockBit);
if ((EntityFragment)updateData._blockBit == EntityFragment.CGObject)
{
_changesMask.Reset(updateData.Bit);
if (!_changesMask.IsAnySet())
_owner.m_entityFragments.ContentsChangedMask &= (byte)~_owner.m_entityFragments.GetUpdateMaskFor((EntityFragment)updateData._blockBit);
}
else
_owner.m_entityFragments.ContentsChangedMask &= (byte)~_owner.m_entityFragments.GetUpdateMaskFor((EntityFragment)updateData._blockBit);
if (typeof(IHasChangesMask).IsAssignableFrom(typeof(U)))
((IHasChangesMask)updateField._value).ClearChangesMask();
+1 -1
View File
@@ -162,7 +162,7 @@ namespace Game.Entities
data.Honor = honor;
data.OriginalHonor = honor;
data.Target = victim_guid;
data.Rank = victim_rank;
data.Rank = (sbyte)victim_rank;
SendPacket(data);
+7 -7
View File
@@ -853,7 +853,7 @@ namespace Game.Entities
Pet oldPet = GetPet();
if (oldPet != null && !oldPet.IsAlive())
{
sess.SendPetStableResult(StableResult.InternalError);
sess.SendPetStableResult(StableResult.NoPet);
return;
}
@@ -881,7 +881,7 @@ namespace Game.Entities
Pet oldPet = GetPet();
if (oldPet != null && !oldPet.IsAlive())
{
sess.SendPetStableResult(StableResult.InternalError);
sess.SendPetStableResult(StableResult.NoPet);
return;
}
@@ -2813,7 +2813,7 @@ namespace Game.Entities
}
}
long cost = item.BoxMoney;
long cost = (long)item.BoxMoney;
if (!HasEnoughMoney(cost))
{
SendBuyError(BuyResult.NotEnoughtMoney, null, 0);
@@ -2968,7 +2968,7 @@ namespace Game.Entities
PlayerInteractionType.ProfessionsCraftingOrder, PlayerInteractionType.Professions, PlayerInteractionType.ProfessionsCustomerOrder,
PlayerInteractionType.TraitSystem, PlayerInteractionType.BarbersChoice, PlayerInteractionType.MajorFactionRenown,
PlayerInteractionType.PersonalTabardVendor, PlayerInteractionType.ForgeMaster, PlayerInteractionType.CharacterBanker,
PlayerInteractionType.AccountBanker
PlayerInteractionType.AccountBanker, PlayerInteractionType.ProfessionRespec
};
PlayerInteractionType interactionType = GossipOptionNpcToInteractionType[(int)gossipOptionNpc];
@@ -5938,8 +5938,8 @@ namespace Game.Entities
PlayerLevelInfo info = ObjectMgr.GetPlayerLevelInfo(GetRace(), GetClass(), GetLevel());
int exp_max_lvl = (int)ObjectMgr.GetMaxLevelForExpansion(GetSession().GetExpansion());
int conf_max_lvl = WorldConfig.GetIntValue(WorldCfg.MaxPlayerLevel);
uint exp_max_lvl = ObjectMgr.GetMaxLevelForExpansion(GetSession().GetExpansion());
uint conf_max_lvl = WorldConfig.GetUIntValue(WorldCfg.MaxPlayerLevel);
if (exp_max_lvl == SharedConst.DefaultMaxLevel || exp_max_lvl >= conf_max_lvl)
SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.MaxLevel), conf_max_lvl);
else
@@ -8023,7 +8023,7 @@ namespace Game.Entities
{
PlayerTalkClass.GetGossipMenu().AddMenuItem(0, -1, optionNpc, text, 0, GossipOptionFlags.None, null, 0, 0, false, 0, "", null, null, sender, action);
}
public void AddGossipItem(GossipOptionNpc optionNpc, string text, uint sender, uint action, string popupText, uint popupMoney, bool coded)
public void AddGossipItem(GossipOptionNpc optionNpc, string text, uint sender, uint action, string popupText, ulong popupMoney, bool coded)
{
PlayerTalkClass.GetGossipMenu().AddMenuItem(0, -1, optionNpc, text, 0, GossipOptionFlags.None, null, 0, 0, coded, popupMoney, popupText, null, null, sender, action);
}
+1 -1
View File
@@ -516,7 +516,7 @@ namespace Game.Garrisons
public void SendInfo()
{
GetGarrisonInfoResult garrisonInfo = new();
garrisonInfo.FactionIndex = GetFaction();
garrisonInfo.FactionIndex = (sbyte)GetFaction();
GarrisonInfo garrison = new();
garrison.GarrTypeID = GetGarrisonType();
+1 -1
View File
@@ -567,7 +567,7 @@ namespace Game
gMenuItem.GossipNpcOptionID = result.Read<int>(10);
gMenuItem.BoxCoded = result.Read<bool>(11);
gMenuItem.BoxMoney = result.Read<uint>(12);
gMenuItem.BoxMoney = result.Read<ulong>(12);
gMenuItem.BoxText = result.Read<string>(13);
gMenuItem.BoxBroadcastTextId = result.Read<uint>(14);
if (!result.IsNull(15))
+1
View File
@@ -995,6 +995,7 @@ namespace Game
AuctionHelloResponse auctionHelloResponse = new();
auctionHelloResponse.Auctioneer = guid;
auctionHelloResponse.AuctionHouseID = ahEntry.Id;
auctionHelloResponse.OpenForBusiness = true;
SendPacket(auctionHelloResponse);
}
+1 -1
View File
@@ -115,7 +115,7 @@ namespace Game
foreach (var requirement in Global.ObjectMgr.GetRaceUnlockRequirements())
{
EnumCharactersResult.RaceUnlock raceUnlock = new();
raceUnlock.RaceID = requirement.Key;
raceUnlock.RaceID = (sbyte)requirement.Key;
raceUnlock.HasUnlockedLicense = (byte)GetAccountExpansion() >= requirement.Value.Expansion;
raceUnlock.HasUnlockedAchievement = requirement.Value.AchievementId != 0 && (WorldConfig.GetBoolValue(WorldCfg.CharacterCreatingDisableAlliedRaceAchievementRequirement)
/* || HasAccountAchievement(requirement.second.AchievementId)*/);
@@ -27,6 +27,7 @@ namespace Game
break;
}
case ItemCollectionType.TransmogSetFavorite:
case ItemCollectionType.WarbandScene:
break;
default:
break;
+8 -2
View File
@@ -354,9 +354,15 @@ namespace Game
[WorldPacketHandler(ClientOpcodes.SetPetSlot)]
void HandleSetPetSlot(SetPetSlot setPetSlot)
{
if (!CheckStableMaster(setPetSlot.StableMaster) || setPetSlot.DestSlot >= (byte)PetSaveMode.LastStableSlot)
if (!CheckStableMaster(setPetSlot.StableMaster))
{
SendPetStableResult(StableResult.InternalError);
SendPetStableResult(StableResult.NotStableMaster);
return;
}
if (setPetSlot.DestSlot >= (byte)PetSaveMode.LastStableSlot)
{
SendPetStableResult(StableResult.InvalidSlot);
return;
}
@@ -515,6 +515,7 @@ namespace Game.Networking.Packets
public ObjectGuid Auctioneer;
public uint PurchaseDeliveryDelay;
public uint CancelDeliveryDelay;
public uint AuctionHouseID;
public bool OpenForBusiness = true;
public AuctionHelloResponse() : base(ServerOpcodes.AuctionHelloResponse) { }
@@ -524,6 +525,7 @@ namespace Game.Networking.Packets
_worldPacket.WritePackedGuid(Auctioneer);
_worldPacket.WriteUInt32(PurchaseDeliveryDelay);
_worldPacket.WriteUInt32(CancelDeliveryDelay);
_worldPacket.WriteUInt32(AuctionHouseID);
_worldPacket.WriteBit(OpenForBusiness);
_worldPacket.FlushBits();
}
@@ -944,6 +946,7 @@ namespace Game.Networking.Packets
public ObjectGuid ItemGuid;
public ObjectGuid OwnerAccountID;
public uint EndTime;
public uint Unused1110;
public ObjectGuid? Bidder;
public ulong? BidAmount;
public List<ItemGemData> Gems = new();
@@ -981,6 +984,7 @@ namespace Game.Networking.Packets
data.WritePackedGuid(Owner);
data.WriteInt32(DurationLeft);
data.WriteUInt8(DeleteReason);
data.WriteUInt32(Unused1110);
foreach (ItemEnchantData enchant in Enchantments)
enchant.Write(data);
@@ -1026,12 +1030,14 @@ namespace Game.Networking.Packets
struct AuctionBidderNotification
{
public uint AuctionHouseID;
public uint AuctionID;
public ObjectGuid Bidder;
public ItemInstance Item;
public void Initialize(AuctionPosting auction, Item item)
public void Initialize(uint auctionHouseId, AuctionPosting auction, Item item)
{
AuctionHouseID = auctionHouseId;
AuctionID = auction.Id;
Item = new ItemInstance(item);
Bidder = auction.Bidder;
@@ -1039,6 +1045,7 @@ namespace Game.Networking.Packets
public void Write(WorldPacket data)
{
data.WriteUInt32(AuctionHouseID);
data.WriteUInt32(AuctionID);
data.WritePackedGuid(Bidder);
Item.Write(data);
@@ -371,6 +371,7 @@ namespace Game.Networking.Packets
class EnterEncryptedMode : ServerPacket
{
byte[] EncryptionKey;
int RegionGroup;
bool Enabled;
static byte[] expandedPrivateKey;
@@ -404,6 +405,7 @@ namespace Game.Networking.Packets
toSign.Finish(EnableEncryptionSeed, 16);
_worldPacket.WriteBytes(Ed25519.Sign(toSign.Digest, expandedPrivateKey, 0, EnableEncryptionContext));
_worldPacket.WriteInt32(RegionGroup);
_worldPacket.WriteBit(Enabled);
_worldPacket.FlushBits();
}
@@ -416,7 +418,7 @@ namespace Game.Networking.Packets
{
data.WriteUInt32(WaitCount);
data.WriteUInt32(WaitTime);
data.WriteUInt32(AllowedFactionGroupForCharacterCreate);
data.WriteUInt8(AllowedFactionGroupForCharacterCreate);
data.WriteBit(HasFCM);
data.WriteBit(CanCreateOnlyIfExisting);
data.FlushBits();
@@ -424,7 +426,7 @@ namespace Game.Networking.Packets
public uint WaitCount; // position of the account in the login queue
public uint WaitTime; // Wait time in login queue in minutes, if sent queued and this value is 0 client displays "unknown time"
public uint AllowedFactionGroupForCharacterCreate;
public byte AllowedFactionGroupForCharacterCreate;
public bool HasFCM; // true if the account has a forced character migration pending. @todo implement
public bool CanCreateOnlyIfExisting; ///< Can create characters on realm only if player has other existing characters there
}
@@ -144,7 +144,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt32(Mapid);
_worldPacket.WriteUInt32(ShutdownTimer);
_worldPacket.WriteUInt32(StartTimer);
_worldPacket.WriteBit(ArenaFaction != 0);
_worldPacket.WriteInt8(ArenaFaction);
_worldPacket.WriteBit(LeftEarly);
_worldPacket.WriteBit(Brawl);
_worldPacket.FlushBits();
@@ -152,7 +152,7 @@ namespace Game.Networking.Packets
public BattlefieldStatusHeader Hdr = new();
public uint ShutdownTimer;
public byte ArenaFaction;
public sbyte ArenaFaction;
public bool LeftEarly;
public bool Brawl;
public uint StartTimer;
@@ -704,13 +704,14 @@ namespace Game.Networking.Packets
{
data.WritePackedGuid(PlayerGUID);
data.WriteUInt32(Kills);
data.WriteInt32(Faction);
data.WriteUInt32(DamageDone);
data.WriteUInt32(HealingDone);
data.WriteInt32(Stats.Count);
data.WriteInt32(PrimaryTalentTree);
data.WriteInt8(Sex);
data.WriteUInt32((uint)PlayerRace);
data.WriteInt32(PlayerClass);
data.WriteInt8(PlayerRace);
data.WriteInt8(PlayerClass);
data.WriteInt32(CreatureID);
data.WriteInt32(HonorLevel);
data.WriteInt32(Role);
@@ -718,7 +719,6 @@ namespace Game.Networking.Packets
foreach (var pvpStat in Stats)
pvpStat.Write(data);
data.WriteBit(Faction != 0);
data.WriteBit(IsInWorld);
data.WriteBit(Honor.HasValue);
data.WriteBit(PreMatchRating.HasValue);
@@ -749,7 +749,7 @@ namespace Game.Networking.Packets
public ObjectGuid PlayerGUID;
public uint Kills;
public byte Faction;
public int Faction;
public bool IsInWorld;
public HonorData? Honor;
public uint DamageDone;
@@ -762,8 +762,8 @@ namespace Game.Networking.Packets
public List<PVPMatchPlayerPVPStat> Stats = new();
public int PrimaryTalentTree;
public sbyte Sex;
public Race PlayerRace;
public int PlayerClass;
public sbyte PlayerRace;
public sbyte PlayerClass;
public int CreatureID;
public int HonorLevel;
public int Role;
@@ -52,9 +52,6 @@ namespace Game.Networking.Packets
foreach (RaceLimitDisableInfo raceLimitDisableInfo in RaceLimitDisables)
raceLimitDisableInfo.Write(_worldPacket);
foreach (WarbandGroup warbandGroup in WarbandGroups)
warbandGroup.Write(_worldPacket);
foreach (CharacterInfo charInfo in Characters)
charInfo.Write(_worldPacket);
@@ -63,6 +60,9 @@ namespace Game.Networking.Packets
foreach (RaceUnlock raceUnlock in RaceUnlockData)
raceUnlock.Write(_worldPacket);
foreach (WarbandGroup warbandGroup in WarbandGroups)
warbandGroup.Write(_worldPacket);
}
public bool Success;
@@ -197,6 +197,7 @@ namespace Game.Networking.Packets
data.WriteUInt32((uint)Flags);
data.WriteUInt32((uint)Flags2);
data.WriteUInt32(Flags3);
data.WriteUInt32(Flags4);
data.WriteUInt8(CantLoginReason);
data.WriteUInt32(PetCreatureDisplayId);
@@ -216,6 +217,7 @@ namespace Game.Networking.Packets
data.WriteInt32(TimerunningSeasonID);
data.WriteUInt32(OverrideSelectScreenFileDataID);
data.WriteUInt32(Unused1110_1);
foreach (ChrCustomizationChoice customization in Customizations)
{
@@ -225,6 +227,8 @@ namespace Game.Networking.Packets
data.WriteBits(Name.GetByteCount(), 6);
data.WriteBit(FirstLogin);
data.WriteBit(Unused1110_2);
data.WriteBit(Unused1110_3);
data.FlushBits();
data.WriteString(Name);
@@ -247,6 +251,7 @@ namespace Game.Networking.Packets
public CharacterFlags Flags; // Character flag @see enum CharacterFlags
public CharacterCustomizeFlags Flags2; // Character customization flags @see enum CharacterCustomizeFlags
public uint Flags3; // Character flags 3 @todo research
public uint Flags4; ///< Character flags 4 @todo research
public bool FirstLogin;
public byte CantLoginReason;
public long LastActiveTime;
@@ -261,6 +266,9 @@ namespace Game.Networking.Packets
public uint[] ProfessionIds = new uint[2]; // @todo
public VisualItemInfo[] VisualItems = new VisualItemInfo[19];
public CustomTabardInfo PersonalTabard = new();
public uint Unused1110_1;
public bool Unused1110_2;
public bool Unused1110_3;
public struct VisualItemInfo
{
@@ -350,6 +358,7 @@ namespace Game.Networking.Packets
{
public CharacterInfoBasic Basic;
public ulong Money;
public float AvgEquippedItemLevel;
public float CurrentSeasonMythicPlusOverallScore;
public uint CurrentSeasonBestPvpRating;
public sbyte PvpRatingBracket;
@@ -364,6 +373,7 @@ namespace Game.Networking.Packets
{
Basic.Write(data);
data.WriteUInt64(Money);
data.WriteFloat(AvgEquippedItemLevel);
data.WriteFloat(CurrentSeasonMythicPlusOverallScore);
data.WriteUInt32(CurrentSeasonBestPvpRating);
data.WriteInt8(PvpRatingBracket);
@@ -373,7 +383,7 @@ namespace Game.Networking.Packets
public struct RaceUnlock
{
public int RaceID;
public sbyte RaceID;
public bool HasUnlockedLicense;
public bool HasUnlockedAchievement;
public bool HasHeritageArmorUnlockAchievement;
@@ -382,7 +392,7 @@ namespace Game.Networking.Packets
public void Write(WorldPacket data)
{
data.WriteInt32(RaceID);
data.WriteInt8(RaceID);
data.WriteBit(HasUnlockedLicense);
data.WriteBit(HasUnlockedAchievement);
data.WriteBit(HasHeritageArmorUnlockAchievement);
@@ -406,12 +416,12 @@ namespace Game.Networking.Packets
public struct RaceLimitDisableInfo
{
public int RaceID;
public sbyte RaceID;
public int Reason;
public void Write(WorldPacket data)
{
data.WriteInt32(RaceID);
data.WriteInt8(RaceID);
data.WriteInt32(Reason);
}
}
@@ -966,9 +976,9 @@ namespace Game.Networking.Packets
{
var customizationCount = _worldPacket.ReadUInt32();
NewSex = _worldPacket.ReadUInt8();
CustomizedRace = _worldPacket.ReadInt32();
CustomizedRace = _worldPacket.ReadInt8();
CustomizedChrModelID = _worldPacket.ReadInt32();
UnalteredVisualRaceID = _worldPacket.ReadInt32();
UnalteredVisualRaceID = _worldPacket.ReadInt8();
for (var i = 0; i < customizationCount; ++i)
{
@@ -984,9 +994,9 @@ namespace Game.Networking.Packets
public byte NewSex;
public Array<ChrCustomizationChoice> Customizations = new(250);
public int CustomizedRace;
public sbyte CustomizedRace;
public int CustomizedChrModelID;
public int UnalteredVisualRaceID;
public sbyte UnalteredVisualRaceID;
}
public class BarberShopResult : ServerPacket
@@ -1301,13 +1311,13 @@ namespace Game.Networking.Packets
public struct WarbandGroupMember
{
public int WarbandScenePlacementID;
public uint WarbandScenePlacementID;
public int Type;
public ObjectGuid Guid;
public void Write(WorldPacket data)
{
data.WriteInt32(WarbandScenePlacementID);
data.WriteUInt32(WarbandScenePlacementID);
data.WriteInt32(Type);
if (Type == 0)
data.WritePackedGuid(Guid);
@@ -1317,19 +1327,27 @@ namespace Game.Networking.Packets
public class WarbandGroup
{
public ulong GroupID;
public byte Unknown_1100;
public int Flags; ///< enum WarbandGroupFlags { Collapsed = 1 }
public byte OrderIndex;
public uint WarbandSceneID;
public uint Flags; ///< enum WarbandGroupFlags { Collapsed = 1 }
public List<WarbandGroupMember> Members = new();
public string Name = "";
public void Write(WorldPacket data)
{
data.WriteUInt64(GroupID);
data.WriteUInt8(Unknown_1100);
data.WriteInt32(Flags);
data.WriteUInt8(OrderIndex);
data.WriteUInt32(WarbandSceneID);
data.WriteUInt32(Flags);
data.WriteInt32(Members.Count);
foreach (WarbandGroupMember member in Members)
member.Write(data);
data.WriteBits(Name.GetByteCount(), 9);
data.FlushBits();
data.WriteString(Name);
}
}
@@ -11,7 +11,7 @@ namespace Game.Networking.Packets
public override void Read()
{
Type = (ItemCollectionType)_worldPacket.ReadUInt32();
Type = (ItemCollectionType)_worldPacket.ReadUInt8();
Id = _worldPacket.ReadUInt32();
IsFavorite = _worldPacket.HasBit();
}
@@ -254,13 +254,13 @@ namespace Game.Networking.Packets
_worldPacket.WriteInt32(OriginalHonor);
_worldPacket.WriteInt32(Honor);
_worldPacket.WritePackedGuid(Target);
_worldPacket.WriteUInt32(Rank);
_worldPacket.WriteInt8(Rank);
}
public int OriginalHonor;
public int Honor;
public ObjectGuid Target;
public uint Rank;
public sbyte Rank;
}
class BreakTarget : ServerPacket
@@ -51,7 +51,7 @@ namespace Game.Networking.Packets
public override void Write()
{
_worldPacket.WriteUInt32(FactionIndex);
_worldPacket.WriteInt8(FactionIndex);
_worldPacket.WriteInt32(Garrisons.Count);
_worldPacket.WriteInt32(FollowerSoftCaps.Count);
@@ -62,7 +62,7 @@ namespace Game.Networking.Packets
garrison.Write(_worldPacket);
}
public uint FactionIndex;
public sbyte FactionIndex;
public List<GarrisonInfo> Garrisons = new();
public List<FollowerSoftCapInfo> FollowerSoftCaps = new();
}
@@ -152,8 +152,8 @@ namespace Game.Networking.Packets
public override void Write()
{
_worldPacket.WriteUInt32((uint)Result);
_worldPacket.WriteUInt32((uint)Command);
_worldPacket.WriteUInt8((byte)Result);
_worldPacket.WriteUInt8((byte)Command);
_worldPacket.WriteBits(Name.GetByteCount(), 8);
_worldPacket.WriteString(Name);
@@ -793,13 +793,13 @@ namespace Game.Networking.Packets
public class EnableBarberShop : ServerPacket
{
public byte CustomizationScope;
public uint CustomizationFeatureMask;
public EnableBarberShop() : base(ServerOpcodes.EnableBarberShop) { }
public override void Write()
{
_worldPacket.WriteUInt8(CustomizationScope);
_worldPacket.WriteUInt32(CustomizationFeatureMask);
}
}
@@ -92,6 +92,7 @@ namespace Game.Networking.Packets
data.ReadBit(); // RemoteTimeValid
bool hasInertia = data.HasBit();
bool hasAdvFlying = data.HasBit();
bool hasDriveStatus = data.HasBit();
if (hasTransport)
ReadTransportInfo(data, ref movementInfo.transport);
@@ -112,9 +113,9 @@ namespace Game.Networking.Packets
if (hasAdvFlying)
{
MovementInfo.AdvFlying advFlying = new();
advFlying.forwardVelocity = data.ReadFloat();
advFlying.upVelocity = data.ReadFloat();
movementInfo.advFlying = advFlying;
}
@@ -134,6 +135,19 @@ namespace Game.Networking.Packets
}
}
if (hasDriveStatus)
{
data.ResetBitPos();
MovementInfo.Drive driveStatus = new();
driveStatus.accelerating = data.HasBit();
driveStatus.drifting = data.HasBit();
driveStatus.speed = data.ReadFloat();
driveStatus.movementAngle = data.ReadFloat();
movementInfo.driveStatus = driveStatus;
}
return movementInfo;
}
@@ -145,6 +159,7 @@ namespace Game.Networking.Packets
bool hasSpline = false; // todo 6.x send this infos
bool hasInertia = movementInfo.inertia.HasValue;
bool hasAdvFlying = movementInfo.advFlying.HasValue;
bool hasDriveStatus = movementInfo.driveStatus.HasValue;
bool hasStandingOnGameObjectGUID = movementInfo.standingOnGameObjectGUID.HasValue;
data.WritePackedGuid(movementInfo.Guid);
@@ -178,6 +193,7 @@ namespace Game.Networking.Packets
data.WriteBit(false); // RemoteTimeValid
data.WriteBit(hasInertia);
data.WriteBit(hasAdvFlying);
data.WriteBit(hasDriveStatus);
data.FlushBits();
if (hasTransportData)
@@ -213,6 +229,14 @@ namespace Game.Networking.Packets
data.WriteFloat(movementInfo.jump.xyspeed);
}
}
if (hasDriveStatus)
{
data.WriteBit(movementInfo.driveStatus.Value.accelerating);
data.WriteBit(movementInfo.driveStatus.Value.drifting);
data.WriteFloat(movementInfo.driveStatus.Value.speed);
data.WriteFloat(movementInfo.driveStatus.Value.movementAngle);
}
}
public static void WriteCreateObjectSplineDataBlock(MoveSpline moveSpline, WorldPacket data)
@@ -360,6 +384,9 @@ namespace Game.Networking.Packets
data.WriteUInt32(movementForce.TransportID);
data.WriteFloat(movementForce.Magnitude);
data.WriteInt32(movementForce.MovementForceID);
data.WriteInt32(movementForce.Unknown1110_1);
data.WriteInt32(movementForce.Unused1110);
data.WriteUInt32(movementForce.Flags);
data.WriteBits((byte)movementForce.Type, 2);
data.FlushBits();
}
@@ -608,6 +635,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteXYZ(OldMapPosition);
_worldPacket.WriteBit(Ship.HasValue);
_worldPacket.WriteBit(TransferSpellID.HasValue);
_worldPacket.WriteBit(TaxiPathID.HasValue);
_worldPacket.FlushBits();
if (Ship.HasValue)
@@ -618,12 +646,16 @@ namespace Game.Networking.Packets
if (TransferSpellID.HasValue)
_worldPacket.WriteInt32(TransferSpellID.Value);
if (TaxiPathID.HasValue)
_worldPacket.WriteInt32(TaxiPathID.Value);
}
public int MapID = -1;
public Position OldMapPosition;
public ShipTransferPending? Ship;
public int? TransferSpellID;
public int? TaxiPathID;
public struct ShipTransferPending
{
@@ -1252,6 +1284,7 @@ namespace Game.Networking.Packets
data.WriteBit(MovementForceGUID.HasValue);
data.WriteBit(MovementInertiaID.HasValue);
data.WriteBit(MovementInertiaLifetimeMs.HasValue);
data.WriteBit(DriveCapabilityRecID.HasValue);
data.FlushBits();
if (@MovementForce != null)
@@ -1292,6 +1325,9 @@ namespace Game.Networking.Packets
if (MovementInertiaLifetimeMs.HasValue)
data.WriteUInt32(MovementInertiaLifetimeMs.Value);
if (DriveCapabilityRecID.HasValue)
data.WriteInt32(DriveCapabilityRecID.Value);
}
public ServerOpcodes MessageID;
@@ -1305,6 +1341,7 @@ namespace Game.Networking.Packets
public ObjectGuid? MovementForceGUID;
public int? MovementInertiaID;
public uint? MovementInertiaLifetimeMs;
public int? DriveCapabilityRecID;
}
}
@@ -13,6 +13,7 @@ namespace Game.Networking.Packets
public int BestRunLevel;
public int BestRunDurationMS;
public bool FinishedSuccess;
public byte Unknown1110;
public void Write(WorldPacket data)
{
@@ -20,6 +21,7 @@ namespace Game.Networking.Packets
data.WriteFloat(MapScore);
data.WriteInt32(BestRunLevel);
data.WriteInt32(BestRunDurationMS);
data.WriteUInt8(Unknown1110);
data.WriteBit(FinishedSuccess);
data.FlushBits();
}
@@ -50,7 +52,7 @@ namespace Game.Networking.Packets
public uint NativeRealmAddress;
public uint VirtualRealmAddress;
public int ChrSpecializationID;
public short RaceID;
public sbyte RaceID;
public int ItemLevel;
public int CovenantID;
public int SoulbindID;
@@ -64,7 +66,7 @@ namespace Game.Networking.Packets
data.WriteUInt32(NativeRealmAddress);
data.WriteUInt32(VirtualRealmAddress);
data.WriteInt32(ChrSpecializationID);
data.WriteInt16(RaceID);
data.WriteInt8(RaceID);
data.WriteInt32(ItemLevel);
data.WriteInt32(CovenantID);
data.WriteInt32(SoulbindID);
+2 -2
View File
@@ -340,7 +340,7 @@ namespace Game.Networking.Packets
public int GossipOptionID;
public GossipOptionNpc OptionNPC;
public byte OptionFlags;
public int OptionCost;
public ulong OptionCost;
public uint OptionLanguage;
public GossipOptionFlags Flags;
public int OrderIndex;
@@ -357,7 +357,7 @@ namespace Game.Networking.Packets
data.WriteInt32(GossipOptionID);
data.WriteUInt8((byte)OptionNPC);
data.WriteInt8((sbyte)OptionFlags);
data.WriteInt32(OptionCost);
data.WriteUInt64(OptionCost);
data.WriteUInt32(OptionLanguage);
data.WriteInt32((int)Flags);
data.WriteInt32(OrderIndex);
@@ -195,9 +195,14 @@ namespace Game.Networking.Packets
class GroupUninvite : ServerPacket
{
public byte Reason;
public GroupUninvite() : base(ServerOpcodes.GroupUninvite) { }
public override void Write() { }
public override void Write()
{
_worldPacket.WriteUInt8(Reason);
}
}
class RequestPartyMemberStats : ClientPacket
@@ -365,7 +370,7 @@ namespace Game.Networking.Packets
}
MemberStats.ChromieTime.ConditionalFlags = player.m_playerData.CtrOptions.GetValue().ConditionalFlags;
MemberStats.ChromieTime.FactionGroup = (int)player.m_playerData.CtrOptions.GetValue().FactionGroup;
MemberStats.ChromieTime.FactionGroup = (sbyte)player.m_playerData.CtrOptions.GetValue().FactionGroup;
MemberStats.ChromieTime.ChromieTimeExpansionMask = player.m_playerData.CtrOptions.GetValue().ChromieTimeExpansionMask;
}
@@ -1167,13 +1172,13 @@ namespace Game.Networking.Packets
public struct CTROptions
{
public uint ConditionalFlags;
public int FactionGroup;
public sbyte FactionGroup;
public uint ChromieTimeExpansionMask;
public void Write(WorldPacket data)
{
data.WriteUInt32(ConditionalFlags);
data.WriteInt32(FactionGroup);
data.WriteInt8(FactionGroup);
data.WriteUInt32(ChromieTimeExpansionMask);
}
}
@@ -12,6 +12,7 @@ namespace Game.Networking.Packets
public int ItemModifiedAppearanceID;
public int TransmogIllusionID;
public int ToyID;
public int WarbandSceneID;
public int Price;
public int OriginalPrice;
public long AvailableUntil;
@@ -30,6 +31,7 @@ namespace Game.Networking.Packets
data.WriteInt32(Price);
data.WriteInt32(OriginalPrice);
data.WriteInt64(AvailableUntil);
data.WriteInt32(WarbandSceneID);
data.WriteBit(Disabled);
data.WriteBit(DoesNotExpire);
data.FlushBits();
+1 -1
View File
@@ -143,7 +143,7 @@ namespace Game.Networking.Packets
public override void Write()
{
_worldPacket.WriteUInt8((byte)Result);
_worldPacket.WriteInt32((int)Result);
}
public StableResult Result;
@@ -87,9 +87,9 @@ namespace Game.Networking.Packets
for (var i = 0; i < 2; ++i)
_worldPacket.WriteUInt32(Stats.Flags[i]);
_worldPacket.WriteInt32(Stats.CreatureType);
_worldPacket.WriteInt8(Stats.CreatureType);
_worldPacket.WriteInt32(Stats.CreatureFamily);
_worldPacket.WriteInt32(Stats.Classification);
_worldPacket.WriteInt8(Stats.Classification);
for (var i = 0; i < SharedConst.MaxCreatureKillCredit; ++i)
_worldPacket.WriteUInt32(Stats.ProxyCreatureID[i]);
@@ -750,9 +750,9 @@ namespace Game.Networking.Packets
public string Title;
public string TitleAlt;
public string CursorName;
public int CreatureType;
public sbyte CreatureType;
public int CreatureFamily;
public int Classification;
public sbyte Classification;
public CreatureDisplayStats Display = new();
public float HpMulti;
public float EnergyMulti;
@@ -67,7 +67,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt8((byte)Status);
_worldPacket.WriteUInt32(AreaID);
_worldPacket.WriteUInt32(Level);
_worldPacket.WriteUInt32((uint)ClassID);
_worldPacket.WriteInt8((sbyte)ClassID);
_worldPacket.WriteBits(Notes.GetByteCount(), 10);
_worldPacket.FlushBits();
_worldPacket.WriteString(Notes);
@@ -200,7 +200,7 @@ namespace Game.Networking.Packets
data.WriteUInt8((byte)Status);
data.WriteUInt32(AreaID);
data.WriteUInt32(Level);
data.WriteUInt32((uint)ClassID);
data.WriteInt8((sbyte)ClassID);
data.WriteBits(Notes.GetByteCount(), 10);
data.FlushBits();
data.WriteString(Notes);
@@ -1620,6 +1620,7 @@ namespace Game.Networking.Packets
data.WriteUInt16(CastLevel);
data.WriteUInt8(Applications);
data.WriteInt32(ContentTuningID);
data.WriteVector3(DstLocation);
data.WriteBit(CastUnit.HasValue);
data.WriteBit(Duration.HasValue);
data.WriteBit(Remaining.HasValue);
@@ -1665,13 +1666,14 @@ namespace Game.Networking.Packets
float? TimeMod;
public List<float> Points = new();
public List<float> EstimatedPoints = new();
public Vector3 DstLocation;
}
public struct AuraInfo
{
public void Write(WorldPacket data)
{
data.WriteUInt8(Slot);
data.WriteUInt16(Slot);
data.WriteBit(AuraData != null);
data.FlushBits();
@@ -1679,7 +1681,7 @@ namespace Game.Networking.Packets
AuraData.Write(data);
}
public byte Slot;
public ushort Slot;
public AuraDataInfo AuraData;
}
@@ -42,10 +42,16 @@ namespace Game.Networking.Packets
_worldPacket.WriteInt16(NameLookupTelemetryInterval);
_worldPacket.WriteUInt32((uint)NotFoundCacheTimeSeconds.TotalSeconds);
_worldPacket.WriteUInt32(RealmPvpTypeOverride);
_worldPacket.WriteInt32(AddonChatThrottle.MaxTries);
_worldPacket.WriteInt32(AddonChatThrottle.TriesRestoredPerSecond);
_worldPacket.WriteInt32(AddonChatThrottle.UsedTriesPerMessage);
_worldPacket.WriteFloat(AddonPerformanceMsgWarning);
_worldPacket.WriteFloat(AddonPerformanceMsgError);
_worldPacket.WriteFloat(AddonPerformanceMsgOverall);
foreach (GameRuleValuePair gameRuleValue in GameRules)
gameRuleValue.Write(_worldPacket);
@@ -108,6 +114,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteBit(false); // unused 11.0.7
_worldPacket.WriteBit(LobbyMatchmakerQueueFromMainlineEnabled);
_worldPacket.WriteBit(CanSendLobbyMatchmakerPartyCustomizations);
_worldPacket.WriteBit(AddonProfilerEnabled);
_worldPacket.FlushBits();
@@ -216,6 +223,7 @@ namespace Game.Networking.Packets
public bool IsAccountCurrencyTransferEnabled;
public bool LobbyMatchmakerQueueFromMainlineEnabled;
public bool CanSendLobbyMatchmakerPartyCustomizations;
public bool AddonProfilerEnabled;
public SocialQueueConfig QuickJoinConfig;
public SquelchInfo Squelch;
@@ -225,6 +233,10 @@ namespace Game.Networking.Packets
public int RemainingTimerunningSeasonSeconds;
public string Unknown1027; // related to movement lua functions used by keybinds
public AddonChatThrottleParams AddonChatThrottle;
public uint RealmPvpTypeOverride; ///< Use Cfg_Configs value = 0, ForceEnabled = 1, ForceDisabled = 2
public float AddonPerformanceMsgWarning;
public float AddonPerformanceMsgError;
public float AddonPerformanceMsgOverall;
public struct SessionAlertConfig
{
+2 -2
View File
@@ -80,12 +80,12 @@ namespace Game.Networking.Packets
{
public void Read(WorldPacket data)
{
FactionGroup = data.ReadInt32();
FactionGroup = data.ReadUInt8();
Locale = data.ReadInt32();
RequesterVirtualRealmAddress = data.ReadUInt32();
}
public int FactionGroup;
public byte FactionGroup;
public int Locale;
public uint RequesterVirtualRealmAddress;
}
+1 -1
View File
@@ -48,7 +48,7 @@ namespace Game.Scripting
player.PlayerTalkClass.GetGossipMenu().AddMenuItem(0, -1, optionNpc, text, 0, GossipOptionFlags.None, null, 0, 0, false, 0, "", null, null, sender, action);
}
// Using provided texts, not from DB
public static void AddGossipItemFor(Player player, GossipOptionNpc optionNpc, string text, uint sender, uint action, string popupText, uint popupMoney, bool coded)
public static void AddGossipItemFor(Player player, GossipOptionNpc optionNpc, string text, uint sender, uint action, string popupText, ulong popupMoney, bool coded)
{
player.PlayerTalkClass.GetGossipMenu().AddMenuItem(0, -1, optionNpc, text, 0, GossipOptionFlags.None, null, 0, 0, coded, popupMoney, popupText, null, null, sender, action);
}
+3 -3
View File
@@ -51,7 +51,7 @@ namespace Game.Spells
Unit _target;
Aura _base;
AuraRemoveMode _removeMode; // Store info for know remove aura reason
byte _slot; // Aura slot on unit
ushort _slot; // Aura slot on unit
AuraFlags _flags; // Aura info flag
uint _effectsToApply; // Used only at spell hit to determine which effect should be applied
bool _needClientUpdate;
@@ -70,7 +70,7 @@ namespace Game.Spells
Cypher.Assert(GetTarget() != null && GetBase() != null);
// Try find slot for aura
byte slot = 0;
ushort slot = 0;
// Lookup for auras already applied from spell
foreach (AuraApplication visibleAura in GetTarget().GetVisibleAuras())
{
@@ -314,7 +314,7 @@ namespace Game.Spells
public Unit GetTarget() { return _target; }
public Aura GetBase() { return _base; }
public byte GetSlot() { return _slot; }
public ushort GetSlot() { return _slot; }
public AuraFlags GetFlags() { return _flags; }
public uint GetEffectMask() { return _effectMask; }
public bool HasEffect(uint effect)