Core: Updated to 11.1.0
Port From (https://github.com/TrinityCore/TrinityCore/commit/23624ed75abc8cbb77bb2e24a08e0836e4c41db5)
This commit is contained in:
@@ -2031,6 +2031,7 @@ namespace Framework.Constants
|
||||
ForgeMaster = 66,
|
||||
CharacterBanker = 67,
|
||||
AccountBanker = 68,
|
||||
ProfessionRespec = 69,
|
||||
}
|
||||
|
||||
[Flags]
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
+1106
-1104
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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; }
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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];
|
||||
}
|
||||
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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]; }
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -995,6 +995,7 @@ namespace Game
|
||||
|
||||
AuctionHelloResponse auctionHelloResponse = new();
|
||||
auctionHelloResponse.Auctioneer = guid;
|
||||
auctionHelloResponse.AuctionHouseID = ahEntry.Id;
|
||||
auctionHelloResponse.OpenForBusiness = true;
|
||||
SendPacket(auctionHelloResponse);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user