Core/PacketIO: Updated to 11.0.0
Port From (https://github.com/TrinityCore/TrinityCore/commit/e59eef5432c7b70679d33f4911c88d0f7d75fd39)
This commit is contained in:
@@ -3,16 +3,16 @@
|
|||||||
|
|
||||||
namespace Framework.Constants
|
namespace Framework.Constants
|
||||||
{
|
{
|
||||||
public enum AccountDataTypes
|
public enum AccountDataTypes : uint
|
||||||
{
|
{
|
||||||
GlobalConfigCache = 0x00,
|
GlobalConfigCache = 0,
|
||||||
PerCharacterConfigCache = 0x01,
|
PerCharacterConfigCache = 1,
|
||||||
GlobalBindingsCache = 0x02,
|
GlobalBindingsCache = 2,
|
||||||
PerCharacterBindingsCache = 0x03,
|
PerCharacterBindingsCache = 3,
|
||||||
GlobalMacrosCache = 0x04,
|
GlobalMacrosCache = 4,
|
||||||
PerCharacterMacrosCache = 0x05,
|
PerCharacterMacrosCache = 5,
|
||||||
PerCharacterLayoutCache = 0x06,
|
PerCharacterLayoutCache = 6,
|
||||||
PerCharacterChatCache = 0x07,
|
PerCharacterChatCache = 7,
|
||||||
GlobalTtsCache = 8,
|
GlobalTtsCache = 8,
|
||||||
PerCharacterTtsCache = 9,
|
PerCharacterTtsCache = 9,
|
||||||
GlobalFlaggedCache = 10,
|
GlobalFlaggedCache = 10,
|
||||||
@@ -20,12 +20,14 @@ namespace Framework.Constants
|
|||||||
PerCharacterClickBindingsCache = 12,
|
PerCharacterClickBindingsCache = 12,
|
||||||
GlobalEditModeCache = 13,
|
GlobalEditModeCache = 13,
|
||||||
PerCharacterEditModeCache = 14,
|
PerCharacterEditModeCache = 14,
|
||||||
|
GlobalFrontendChatSettings = 15,
|
||||||
|
GlobalCharacterListOrder = 16,
|
||||||
|
|
||||||
Max = 15,
|
Max = 17,
|
||||||
|
|
||||||
AllAccountDataCacheMask = 0x7FFF,
|
AllAccountDataCacheMask = 0x0001FFFFu,
|
||||||
GlobalCacheMask = 0x2515,
|
GlobalCacheMask = 0x0001A515u,
|
||||||
PerCharacterCacheMask = 0x5AEA
|
PerCharacterCacheMask = 0x00005AEAu
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum TutorialAction
|
public enum TutorialAction
|
||||||
|
|||||||
@@ -71,7 +71,8 @@ namespace Framework.Constants
|
|||||||
Name = 1,
|
Name = 1,
|
||||||
Level = 2,
|
Level = 2,
|
||||||
Bid = 3,
|
Bid = 3,
|
||||||
Buyout = 4
|
Buyout = 4,
|
||||||
|
TimeRemaining = 5
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum AuctionHouseBrowseMode
|
public enum AuctionHouseBrowseMode
|
||||||
|
|||||||
@@ -2015,7 +2015,10 @@ namespace Framework.Constants
|
|||||||
BarbersChoice = 62,
|
BarbersChoice = 62,
|
||||||
JailersTowerBuffs = 63,
|
JailersTowerBuffs = 63,
|
||||||
MajorFactionRenown = 64,
|
MajorFactionRenown = 64,
|
||||||
PersonalTabardVendor = 65
|
PersonalTabardVendor = 65,
|
||||||
|
ForgeMaster = 66,
|
||||||
|
CharacterBanker = 67,
|
||||||
|
AccountBanker = 68,
|
||||||
}
|
}
|
||||||
|
|
||||||
[Flags]
|
[Flags]
|
||||||
|
|||||||
@@ -179,7 +179,7 @@ namespace Framework.Constants
|
|||||||
None = 0x00,
|
None = 0x00,
|
||||||
Gossip = 0x01, // 100%
|
Gossip = 0x01, // 100%
|
||||||
QuestGiver = 0x02, // 100%
|
QuestGiver = 0x02, // 100%
|
||||||
Unk1 = 0x04,
|
AccountBanker = 0x04, //account banker
|
||||||
Unk2 = 0x08,
|
Unk2 = 0x08,
|
||||||
Trainer = 0x10, // 100%
|
Trainer = 0x10, // 100%
|
||||||
TrainerClass = 0x20, // 100%
|
TrainerClass = 0x20, // 100%
|
||||||
|
|||||||
@@ -89,6 +89,9 @@ namespace Framework.Constants
|
|||||||
BarbersChoice = 52,
|
BarbersChoice = 52,
|
||||||
MajorFactionRenown = 53,
|
MajorFactionRenown = 53,
|
||||||
PersonalTabardVendor = 54,
|
PersonalTabardVendor = 54,
|
||||||
|
ForgeMaster = 55,
|
||||||
|
CharacterBanker = 56,
|
||||||
|
AccountBanker = 57,
|
||||||
|
|
||||||
Max
|
Max
|
||||||
}
|
}
|
||||||
@@ -164,7 +167,8 @@ namespace Framework.Constants
|
|||||||
public enum GossipOptionFlags
|
public enum GossipOptionFlags
|
||||||
{
|
{
|
||||||
None = 0x0,
|
None = 0x0,
|
||||||
QuestLabelPrepend = 0x1
|
QuestLabelPrepend = 0x1,
|
||||||
|
HideOptionIDFromClient = 0x2
|
||||||
}
|
}
|
||||||
|
|
||||||
[Flags]
|
[Flags]
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ namespace Framework.Constants
|
|||||||
EveryoneAssistant = 0x040, // Script_IsEveryoneAssistant()
|
EveryoneAssistant = 0x040, // Script_IsEveryoneAssistant()
|
||||||
GuildGroup = 0x100,
|
GuildGroup = 0x100,
|
||||||
CrossFaction = 0x200,
|
CrossFaction = 0x200,
|
||||||
RestrictPings = 0x400,
|
RestrictPings = 0x400, // deprecated
|
||||||
|
|
||||||
MaskBgRaid = FakeRaid | Raid
|
MaskBgRaid = FakeRaid | Raid
|
||||||
}
|
}
|
||||||
@@ -173,4 +173,12 @@ namespace Framework.Constants
|
|||||||
ChallengeMode = 1,
|
ChallengeMode = 1,
|
||||||
PlayerCountdown = 2
|
PlayerCountdown = 2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum RestrictPingsTo
|
||||||
|
{
|
||||||
|
None = 0,
|
||||||
|
Lead = 1,
|
||||||
|
Assist = 2,
|
||||||
|
TankHealer = 3,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ namespace Framework.Constants
|
|||||||
public const int MaxGemSockets = 3;
|
public const int MaxGemSockets = 3;
|
||||||
public const int MaxSpells = 5;
|
public const int MaxSpells = 5;
|
||||||
public const int MaxStats = 10;
|
public const int MaxStats = 10;
|
||||||
public const int MaxBagSize = 36;
|
public const int MaxBagSize = 98;
|
||||||
public const byte NullBag = 0;
|
public const byte NullBag = 0;
|
||||||
public const byte NullSlot = 255;
|
public const byte NullSlot = 255;
|
||||||
public const int MaxOutfitItems = 24;
|
public const int MaxOutfitItems = 24;
|
||||||
@@ -1293,7 +1293,15 @@ namespace Framework.Constants
|
|||||||
ReagentBagWrongSlot = 115,// Reagent Bags can only be placed in the reagent bag slot.
|
ReagentBagWrongSlot = 115,// Reagent Bags can only be placed in the reagent bag slot.
|
||||||
SlotOnlyReagentBag = 116,// Only Reagent Bags can be placed in the reagent bag slot.
|
SlotOnlyReagentBag = 116,// Only Reagent Bags can be placed in the reagent bag slot.
|
||||||
ReagentBagItemType = 117,// Only Reagents can be placed in Reagent Bags.
|
ReagentBagItemType = 117,// Only Reagents can be placed in Reagent Bags.
|
||||||
CantBulkSellItemWithRefund = 118// Items that can be refunded can't be bulk sold.
|
CantBulkSellItemWithRefund = 118,// Items that can be refunded can't be bulk sold.
|
||||||
|
NoSoulboundItemInAccountBank = 119,// Soulbound items cannot be stored in the Warband Bank.
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum BankType
|
||||||
|
{
|
||||||
|
Character = 0,
|
||||||
|
Guild = 1,
|
||||||
|
Account = 2
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum BuyResult
|
public enum BuyResult
|
||||||
|
|||||||
@@ -70,11 +70,10 @@ namespace Framework.Constants
|
|||||||
|
|
||||||
public enum InstanceResetWarningType
|
public enum InstanceResetWarningType
|
||||||
{
|
{
|
||||||
WarningHours = 1, // WARNING! %s is scheduled to reset in %d hour(s).
|
Welcome = 1, // Welcome to %s. Instance locks are scheduled to expire in %s.
|
||||||
WarningMin = 2, // WARNING! %s is scheduled to reset in %d minute(s)!
|
Expired = 2, // Your instance lock for %s has expired.
|
||||||
WarningMinSoon = 3, // WARNING! %s is scheduled to reset in %d minute(s). Please exit the zone or you will be returned to your bind location!
|
WelcomeDaily = 3, // Welcome to %s. The daily reset is scheduled to occur in %s and will reset this instance.
|
||||||
Welcome = 4, // Welcome to %s. This raid instance is scheduled to reset in %s.
|
WarningTime = 4, // any GlobalStrings tag that has 1 formattable argument, like DELVES_INSTANCE_RESET_WARNING
|
||||||
Expired = 5
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum InstanceResetMethod
|
public enum InstanceResetMethod
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -518,10 +518,16 @@ namespace Framework.Constants
|
|||||||
// first slot for item stored (in any way in player items data)
|
// first slot for item stored (in any way in player items data)
|
||||||
Start = 0,
|
Start = 0,
|
||||||
// last+1 slot for item stored (in any way in player items data)
|
// last+1 slot for item stored (in any way in player items data)
|
||||||
End = 227,
|
End = 232,
|
||||||
Count = (End - Start)
|
Count = (End - Start)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum AccountBankBagSlots
|
||||||
|
{
|
||||||
|
Start = 227,
|
||||||
|
End = 232
|
||||||
|
}
|
||||||
|
|
||||||
public enum PlayerTitle : ulong
|
public enum PlayerTitle : ulong
|
||||||
{
|
{
|
||||||
Disabled = 0x0000000000000000,
|
Disabled = 0x0000000000000000,
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ namespace Framework.Constants
|
|||||||
|
|
||||||
public enum QuestType
|
public enum QuestType
|
||||||
{
|
{
|
||||||
TurnIn= 0,
|
TurnIn = 0,
|
||||||
WithMaxLevel = 1,
|
WithMaxLevel = 1,
|
||||||
Normal = 2,
|
Normal = 2,
|
||||||
Task = 3,
|
Task = 3,
|
||||||
@@ -417,39 +417,53 @@ namespace Framework.Constants
|
|||||||
|
|
||||||
public enum QuestGiverStatus : ulong
|
public enum QuestGiverStatus : ulong
|
||||||
{
|
{
|
||||||
None = 0x00,
|
None = 0x000000000000,
|
||||||
Future = 0x02,
|
Future = 0x000000000002,
|
||||||
Trivial = 0x04,
|
FutureJourneyQuest = 0x000000000004,
|
||||||
TrivialRepeatableTurnin = 0x08,
|
FutureLegendaryQuest = 0x000000000008,
|
||||||
TrivialDailyQuest = 0x10,
|
FutureImportantQuest = 0x000000000010,
|
||||||
Reward = 0x20,
|
TrivialRepeatableTurnin = 0x000000000020,
|
||||||
JourneyReward = 0x40,
|
Trivial = 0x000000000040,
|
||||||
CovenantCallingReward = 0x80,
|
TrivialDailyQuest = 0x000000000080,
|
||||||
RepeatableTurnin = 0x100,
|
TrivialRepeatableQuest = 0x000000000100,
|
||||||
DailyQuest = 0x200,
|
TrivialMetaQuest = 0x000000000200,
|
||||||
Quest = 0x400,
|
TrivialJourneyQuest = 0x000000000400,
|
||||||
RewardCompleteNoPOI = 0x800,
|
TrivialLegendaryQuest = 0x000000000800,
|
||||||
RewardCompletePOI = 0x1000,
|
TrivialImportantQuest = 0x000000001000,
|
||||||
LegendaryQuest = 0x2000,
|
Reward = 0x000000002000,
|
||||||
LegendaryRewardCompleteNoPOI = 0x4000,
|
RepeatableReward = 0x000000004000,
|
||||||
LegendaryRewardCompletePOI = 0x8000,
|
MetaReward = 0x000000008000,
|
||||||
JourneyQuest = 0x10000,
|
JourneyReward = 0x000000010000,
|
||||||
JourneyRewardCompleteNoPOI = 0x20000,
|
CovenantCallingReward = 0x000000020000,
|
||||||
JourneyRewardCompletePOI = 0x40000,
|
LegendaryReward = 0x000000040000,
|
||||||
CovenantCallingQuest = 0x80000,
|
ImportantReward = 0x000000080000,
|
||||||
CovenantCallingRewardCompleteNoPOI = 0x100000,
|
RepeatableTurnin = 0x000000100000,
|
||||||
CovenantCallingRewardCompletePOI = 0x200000,
|
QuestAccountCompleted = 0x000000200000,
|
||||||
TrivialLegendaryQuest = 0x400000,
|
Quest = 0x000000400000,
|
||||||
FutureLegendaryQuest = 0x800000,
|
DailyQuest = 0x000000800000,
|
||||||
LegendaryReward = 0x1000000,
|
RepeatableQuest = 0x000001000000,
|
||||||
ImportantReward = 0x2000000,
|
MetaQuest = 0x000002000000,
|
||||||
ImportantQuest = 0x4000000,
|
CovenantCallingQuest = 0x000004000000,
|
||||||
TrivialImportantQuest = 0x8000000,
|
JourneyQuestAccountCompleted = 0x000008000000,
|
||||||
FutureImportantQuest = 0x010000000,
|
JourneyQuest = 0x000010000000,
|
||||||
ImportantQuestRewardCompleteNoPOI = 0x20000000,
|
LegendaryQuestAccountCompleted = 0x000020000000,
|
||||||
ImportantQuestRewardCompletePOI = 0x40000000,
|
LegendaryQuest = 0x000040000000,
|
||||||
TrivialJourneyQuest = 0x80000000,
|
ImportantQuestAccountCompleted = 0x000080000000,
|
||||||
FutureJourneyQuest = 0x100000000,
|
ImportantQuest = 0x000100000000,
|
||||||
|
RewardCompleteNoPOI = 0x000200000000,
|
||||||
|
RewardCompletePOI = 0x000400000000,
|
||||||
|
RepeatableRewardCompleteNoPOI = 0x000800000000,
|
||||||
|
RepeatableRewardCompletePOI = 0x001000000000,
|
||||||
|
MetaQuestRewardCompleteNoPOI = 0x002000000000,
|
||||||
|
MetaQuestRewardCompletePOI = 0x004000000000,
|
||||||
|
CovenantCallingRewardCompleteNoPOI = 0x008000000000,
|
||||||
|
CovenantCallingRewardCompletePOI = 0x010000000000,
|
||||||
|
JourneyRewardCompleteNoPOI = 0x020000000000,
|
||||||
|
JourneyRewardCompletePOI = 0x040000000000,
|
||||||
|
LegendaryRewardCompleteNoPOI = 0x080000000000,
|
||||||
|
LegendaryRewardCompletePOI = 0x100000000000,
|
||||||
|
ImportantQuestRewardCompleteNoPOI = 0x200000000000,
|
||||||
|
ImportantQuestRewardCompletePOI = 0x400000000000,
|
||||||
}
|
}
|
||||||
|
|
||||||
[Flags]
|
[Flags]
|
||||||
@@ -554,6 +568,8 @@ namespace Framework.Constants
|
|||||||
IgnoreSoulboundItems = 0x00200000,
|
IgnoreSoulboundItems = 0x00200000,
|
||||||
DontDeferStartEffects = 0x00400000,
|
DontDeferStartEffects = 0x00400000,
|
||||||
HideRequiredItemsPreTurnIn = 0x00800000,
|
HideRequiredItemsPreTurnIn = 0x00800000,
|
||||||
|
|
||||||
|
AbandonOnDisable = 0x04000000,
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum QuestSpecialFlags
|
public enum QuestSpecialFlags
|
||||||
@@ -598,4 +614,11 @@ namespace Framework.Constants
|
|||||||
Threat,
|
Threat,
|
||||||
CovenantCalling
|
CovenantCalling
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum QuestRewardContextFlags
|
||||||
|
{
|
||||||
|
None = 0x0,
|
||||||
|
FirstCompletionBonus = 0x1,
|
||||||
|
RepeatCompletionBonus = 0x2
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1128
-1101
File diff suppressed because it is too large
Load Diff
@@ -774,7 +774,8 @@ namespace Framework.Constants
|
|||||||
CantFlyHere = 318,
|
CantFlyHere = 318,
|
||||||
DragonridingRidingRequirement = 319,
|
DragonridingRidingRequirement = 319,
|
||||||
ItemModAppearanceGroupAlreadyKnown = 320,
|
ItemModAppearanceGroupAlreadyKnown = 320,
|
||||||
Unknown = 321,
|
ItemCreationDisabledForEvent = 321,
|
||||||
|
Unknown = 322,
|
||||||
|
|
||||||
// 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)
|
// 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
|
SpellCastOk = Success
|
||||||
@@ -1416,8 +1417,48 @@ namespace Framework.Constants
|
|||||||
YouDontHaveTheSwirlingMojoStone = 999, // You Don'T Have The Swirling Mojo Stone Equipped.
|
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.
|
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.
|
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.
|
YouMustBeInVisageForm = 2222, // You Must Be In Visage Form To Do This.
|
||||||
TooCloseToAnotherMoltenRitual = 2424, // You Can'T Begin A Molten Ritual This Close To Another One.
|
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.
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum SpellMissInfo
|
public enum SpellMissInfo
|
||||||
|
|||||||
@@ -473,7 +473,7 @@ namespace Framework.Database
|
|||||||
PrepareStatement(CharStatements.UPD_ACCOUNT_ONLINE, "UPDATE characters SET online = 0 WHERE account = ?");
|
PrepareStatement(CharStatements.UPD_ACCOUNT_ONLINE, "UPDATE characters SET online = 0 WHERE account = ?");
|
||||||
PrepareStatement(CharStatements.INS_CHARACTER_CUSTOMIZATION, "INSERT INTO character_customizations (guid, chrCustomizationOptionID, chrCustomizationChoiceID) VALUES (?, ?, ?)");
|
PrepareStatement(CharStatements.INS_CHARACTER_CUSTOMIZATION, "INSERT INTO character_customizations (guid, chrCustomizationOptionID, chrCustomizationChoiceID) VALUES (?, ?, ?)");
|
||||||
PrepareStatement(CharStatements.DEL_CHARACTER_CUSTOMIZATIONS, "DELETE FROM character_customizations WHERE guid = ?");
|
PrepareStatement(CharStatements.DEL_CHARACTER_CUSTOMIZATIONS, "DELETE FROM character_customizations WHERE guid = ?");
|
||||||
PrepareStatement(CharStatements.INS_GROUP, "INSERT INTO `groups` (guid, leaderGuid, lootMethod, looterGuid, lootThreshold, icon1, icon2, icon3, icon4, icon5, icon6, icon7, icon8, groupType, difficulty, raidDifficulty, legacyRaidDifficulty, masterLooterGuid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
|
PrepareStatement(CharStatements.INS_GROUP, "INSERT INTO `groups` (guid, leaderGuid, lootMethod, looterGuid, lootThreshold, icon1, icon2, icon3, icon4, icon5, icon6, icon7, icon8, groupType, difficulty, raidDifficulty, legacyRaidDifficulty, masterLooterGuid, pingRestriction) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
|
||||||
PrepareStatement(CharStatements.INS_GROUP_MEMBER, "INSERT INTO group_member (guid, memberGuid, memberFlags, subgroup, roles) VALUES(?, ?, ?, ?, ?)");
|
PrepareStatement(CharStatements.INS_GROUP_MEMBER, "INSERT INTO group_member (guid, memberGuid, memberFlags, subgroup, roles) VALUES(?, ?, ?, ?, ?)");
|
||||||
PrepareStatement(CharStatements.DEL_GROUP_MEMBER, "DELETE FROM group_member WHERE memberGuid = ?");
|
PrepareStatement(CharStatements.DEL_GROUP_MEMBER, "DELETE FROM group_member WHERE memberGuid = ?");
|
||||||
PrepareStatement(CharStatements.UPD_GROUP_LEADER, "UPDATE `groups` SET leaderGuid = ? WHERE guid = ?");
|
PrepareStatement(CharStatements.UPD_GROUP_LEADER, "UPDATE `groups` SET leaderGuid = ? WHERE guid = ?");
|
||||||
@@ -483,6 +483,7 @@ namespace Framework.Database
|
|||||||
PrepareStatement(CharStatements.UPD_GROUP_DIFFICULTY, "UPDATE `groups` SET difficulty = ? WHERE guid = ?");
|
PrepareStatement(CharStatements.UPD_GROUP_DIFFICULTY, "UPDATE `groups` SET difficulty = ? WHERE guid = ?");
|
||||||
PrepareStatement(CharStatements.UPD_GROUP_RAID_DIFFICULTY, "UPDATE `groups` SET raidDifficulty = ? WHERE guid = ?");
|
PrepareStatement(CharStatements.UPD_GROUP_RAID_DIFFICULTY, "UPDATE `groups` SET raidDifficulty = ? WHERE guid = ?");
|
||||||
PrepareStatement(CharStatements.UPD_GROUP_LEGACY_RAID_DIFFICULTY, "UPDATE `groups` SET legacyRaidDifficulty = ? WHERE guid = ?");
|
PrepareStatement(CharStatements.UPD_GROUP_LEGACY_RAID_DIFFICULTY, "UPDATE `groups` SET legacyRaidDifficulty = ? WHERE guid = ?");
|
||||||
|
PrepareStatement(CharStatements.UPD_GROUP_PING_RESTRICTION, "UPDATE `groups` SET pingRestriction = ? WHERE guid = ?");
|
||||||
PrepareStatement(CharStatements.DEL_INVALID_SPELL_SPELLS, "DELETE FROM character_spell WHERE spell = ?");
|
PrepareStatement(CharStatements.DEL_INVALID_SPELL_SPELLS, "DELETE FROM character_spell WHERE spell = ?");
|
||||||
PrepareStatement(CharStatements.UPD_DELETE_INFO, "UPDATE characters SET deleteInfos_Name = name, deleteInfos_Account = account, deleteDate = UNIX_TIMESTAMP(), name = '', account = 0 WHERE guid = ?");
|
PrepareStatement(CharStatements.UPD_DELETE_INFO, "UPDATE characters SET deleteInfos_Name = name, deleteInfos_Account = account, deleteDate = UNIX_TIMESTAMP(), name = '', account = 0 WHERE guid = ?");
|
||||||
PrepareStatement(CharStatements.UPD_RESTORE_DELETE_INFO, "UPDATE characters SET name = ?, account = ?, deleteDate = NULL, deleteInfos_Name = NULL, deleteInfos_Account = NULL WHERE deleteDate IS NOT NULL AND guid = ?");
|
PrepareStatement(CharStatements.UPD_RESTORE_DELETE_INFO, "UPDATE characters SET name = ?, account = ?, deleteDate = NULL, deleteInfos_Name = NULL, deleteInfos_Account = NULL WHERE deleteDate IS NOT NULL AND guid = ?");
|
||||||
@@ -1121,6 +1122,7 @@ namespace Framework.Database
|
|||||||
UPD_GROUP_DIFFICULTY,
|
UPD_GROUP_DIFFICULTY,
|
||||||
UPD_GROUP_RAID_DIFFICULTY,
|
UPD_GROUP_RAID_DIFFICULTY,
|
||||||
UPD_GROUP_LEGACY_RAID_DIFFICULTY,
|
UPD_GROUP_LEGACY_RAID_DIFFICULTY,
|
||||||
|
UPD_GROUP_PING_RESTRICTION,
|
||||||
DEL_INVALID_SPELL_SPELLS,
|
DEL_INVALID_SPELL_SPELLS,
|
||||||
UPD_DELETE_INFO,
|
UPD_DELETE_INFO,
|
||||||
UPD_RESTORE_DELETE_INFO,
|
UPD_RESTORE_DELETE_INFO,
|
||||||
|
|||||||
@@ -1771,6 +1771,8 @@ namespace Game
|
|||||||
return (long)(left.BidAmount - right.BidAmount);
|
return (long)(left.BidAmount - right.BidAmount);
|
||||||
case AuctionHouseSortOrder.Buyout:
|
case AuctionHouseSortOrder.Buyout:
|
||||||
return (long)(left.BuyoutOrUnitPrice - right.BuyoutOrUnitPrice);
|
return (long)(left.BuyoutOrUnitPrice - right.BuyoutOrUnitPrice);
|
||||||
|
case AuctionHouseSortOrder.TimeRemaining:
|
||||||
|
return (long)(left.EndTime - right.EndTime).TotalMilliseconds;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ namespace Game.Chat
|
|||||||
[CommandNonGroup("bank", RBACPermissions.CommandBank)]
|
[CommandNonGroup("bank", RBACPermissions.CommandBank)]
|
||||||
static bool HandleBankCommand(CommandHandler handler)
|
static bool HandleBankCommand(CommandHandler handler)
|
||||||
{
|
{
|
||||||
handler.GetSession().SendShowBank(handler.GetSession().GetPlayer().GetGUID());
|
handler.GetSession().SendShowBank(handler.GetSession().GetPlayer().GetGUID(), PlayerInteractionType.Banker);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ namespace Game.Chat
|
|||||||
flag = target.m_unitData.Flags;
|
flag = target.m_unitData.Flags;
|
||||||
|
|
||||||
if (!npcflag.HasValue)
|
if (!npcflag.HasValue)
|
||||||
npcflag = (ulong)target.m_unitData.NpcFlags[0] << 32 | target.m_unitData.NpcFlags[1];
|
npcflag = (ulong)target.m_unitData.NpcFlags2 << 32 | target.m_unitData.NpcFlags;
|
||||||
|
|
||||||
if (!dyflag.HasValue)
|
if (!dyflag.HasValue)
|
||||||
dyflag = target.m_objectData.DynamicFlags;
|
dyflag = target.m_objectData.DynamicFlags;
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ namespace Game.Chat
|
|||||||
CreatureTemplate cInfo = target.GetCreatureTemplate();
|
CreatureTemplate cInfo = target.GetCreatureTemplate();
|
||||||
|
|
||||||
uint faction = target.GetFaction();
|
uint faction = target.GetFaction();
|
||||||
ulong npcflags = (ulong)target.m_unitData.NpcFlags[1] << 32 | target.m_unitData.NpcFlags[0];
|
ulong npcflags = (ulong)target.m_unitData.NpcFlags2 << 32 | target.m_unitData.NpcFlags;
|
||||||
ulong mechanicImmuneMask = 0;
|
ulong mechanicImmuneMask = 0;
|
||||||
CreatureImmunities immunities = Global.SpellMgr.GetCreatureImmunities(cInfo.CreatureImmunitiesId);
|
CreatureImmunities immunities = Global.SpellMgr.GetCreatureImmunities(cInfo.CreatureImmunitiesId);
|
||||||
if (immunities != null)
|
if (immunities != null)
|
||||||
@@ -151,7 +151,7 @@ namespace Game.Chat
|
|||||||
if (cInfo.FlagsExtra.HasAnyFlag((CreatureFlagsExtra)value))
|
if (cInfo.FlagsExtra.HasAnyFlag((CreatureFlagsExtra)value))
|
||||||
handler.SendSysMessage("{0} (0x{1:X})", (CreatureFlagsExtra)value, value);
|
handler.SendSysMessage("{0} (0x{1:X})", (CreatureFlagsExtra)value, value);
|
||||||
|
|
||||||
handler.SendSysMessage(CypherStrings.NpcinfoNpcFlags, target.m_unitData.NpcFlags[0]);
|
handler.SendSysMessage(CypherStrings.NpcinfoNpcFlags, target.m_unitData.NpcFlags);
|
||||||
foreach (uint value in Enum.GetValues(typeof(NPCFlags)))
|
foreach (uint value in Enum.GetValues(typeof(NPCFlags)))
|
||||||
if (npcflags.HasAnyFlag(value))
|
if (npcflags.HasAnyFlag(value))
|
||||||
handler.SendSysMessage("{0} (0x{1:X})", (NPCFlags)value, value);
|
handler.SendSysMessage("{0} (0x{1:X})", (NPCFlags)value, value);
|
||||||
|
|||||||
@@ -53,8 +53,8 @@ namespace Game.DungeonFinding
|
|||||||
|
|
||||||
SetLeader(guid, ObjectGuid.Create(HighGuid.Player, field.Read<ulong>(0)));
|
SetLeader(guid, ObjectGuid.Create(HighGuid.Player, field.Read<ulong>(0)));
|
||||||
|
|
||||||
uint dungeon = field.Read<uint>(18);
|
uint dungeon = field.Read<uint>(19);
|
||||||
LfgState state = (LfgState)field.Read<byte>(19);
|
LfgState state = (LfgState)field.Read<byte>(20);
|
||||||
|
|
||||||
if (dungeon == 0 || state == 0)
|
if (dungeon == 0 || state == 0)
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -1395,7 +1395,7 @@ namespace Game.Entities
|
|||||||
CreatureData data = Global.ObjectMgr.NewOrExistCreatureData(m_spawnId);
|
CreatureData data = Global.ObjectMgr.NewOrExistCreatureData(m_spawnId);
|
||||||
|
|
||||||
uint displayId = GetNativeDisplayId();
|
uint displayId = GetNativeDisplayId();
|
||||||
ulong spawnNpcFlags = ((ulong)m_unitData.NpcFlags[1] << 32) | m_unitData.NpcFlags[0];
|
ulong spawnNpcFlags = ((ulong)GetNpcFlags2() << 32) | (uint)GetNpcFlags();
|
||||||
ulong? npcflag = null;
|
ulong? npcflag = null;
|
||||||
uint? unitFlags = null;
|
uint? unitFlags = null;
|
||||||
uint? unitFlags2 = null;
|
uint? unitFlags2 = null;
|
||||||
|
|||||||
@@ -245,8 +245,11 @@ namespace Game.Misc
|
|||||||
|
|
||||||
GossipMenuAddon addon = Global.ObjectMgr.GetGossipMenuAddon(packet.GossipID);
|
GossipMenuAddon addon = Global.ObjectMgr.GetGossipMenuAddon(packet.GossipID);
|
||||||
if (addon != null)
|
if (addon != null)
|
||||||
|
{
|
||||||
packet.FriendshipFactionID = addon.FriendshipFactionID;
|
packet.FriendshipFactionID = addon.FriendshipFactionID;
|
||||||
|
packet.LfgDungeonsID = addon.LfgDungeonsID;
|
||||||
|
}
|
||||||
|
|
||||||
NpcText text = Global.ObjectMgr.GetNpcText(titleTextId);
|
NpcText text = Global.ObjectMgr.GetNpcText(titleTextId);
|
||||||
if (text != null)
|
if (text != null)
|
||||||
packet.BroadcastTextID = (int)text.Data.SelectRandomElementByWeight(data => data.Probability).BroadcastTextID;
|
packet.BroadcastTextID = (int)text.Data.SelectRandomElementByWeight(data => data.Probability).BroadcastTextID;
|
||||||
@@ -282,8 +285,11 @@ namespace Game.Misc
|
|||||||
gossipText.QuestType = item.QuestIcon;
|
gossipText.QuestType = item.QuestIcon;
|
||||||
gossipText.QuestFlags = (uint)quest.Flags;
|
gossipText.QuestFlags = (uint)quest.Flags;
|
||||||
gossipText.QuestFlagsEx = (uint)quest.FlagsEx;
|
gossipText.QuestFlagsEx = (uint)quest.FlagsEx;
|
||||||
|
gossipText.QuestFlagsEx2 = (uint)quest.FlagsEx2;
|
||||||
gossipText.Repeatable = quest.IsTurnIn() && quest.IsRepeatable() && !quest.IsDailyOrWeekly() && !quest.IsMonthly();
|
gossipText.Repeatable = quest.IsTurnIn() && quest.IsRepeatable() && !quest.IsDailyOrWeekly() && !quest.IsMonthly();
|
||||||
|
gossipText.ResetByScheduler = quest.IsResetByScheduler();
|
||||||
gossipText.Important = quest.IsImportant();
|
gossipText.Important = quest.IsImportant();
|
||||||
|
gossipText.Meta = quest.IsMeta();
|
||||||
|
|
||||||
gossipText.QuestTitle = quest.LogTitle;
|
gossipText.QuestTitle = quest.LogTitle;
|
||||||
Locale locale = _session.GetSessionDbLocaleIndex();
|
Locale locale = _session.GetSessionDbLocaleIndex();
|
||||||
@@ -375,10 +381,13 @@ namespace Game.Misc
|
|||||||
text.QuestType = questMenuItem.QuestIcon;
|
text.QuestType = questMenuItem.QuestIcon;
|
||||||
text.QuestFlags = (uint)quest.Flags;
|
text.QuestFlags = (uint)quest.Flags;
|
||||||
text.QuestFlagsEx = (uint)quest.FlagsEx;
|
text.QuestFlagsEx = (uint)quest.FlagsEx;
|
||||||
|
text.QuestFlagsEx2 = (uint)quest.FlagsEx2;
|
||||||
text.Repeatable = quest.IsTurnIn() && quest.IsRepeatable() && !quest.IsDailyOrWeekly() && !quest.IsMonthly();
|
text.Repeatable = quest.IsTurnIn() && quest.IsRepeatable() && !quest.IsDailyOrWeekly() && !quest.IsMonthly();
|
||||||
|
text.ResetByScheduler = quest.IsResetByScheduler();
|
||||||
text.Important = quest.IsImportant();
|
text.Important = quest.IsImportant();
|
||||||
text.QuestTitle = quest.LogTitle;
|
text.Meta = quest.IsMeta();
|
||||||
|
|
||||||
|
text.QuestTitle = quest.LogTitle;
|
||||||
if (localeConstant != Locale.enUS)
|
if (localeConstant != Locale.enUS)
|
||||||
{
|
{
|
||||||
QuestTemplateLocale localeData = Global.ObjectMgr.GetQuestLocale(quest.Id);
|
QuestTemplateLocale localeData = Global.ObjectMgr.GetQuestLocale(quest.Id);
|
||||||
@@ -446,6 +455,7 @@ namespace Game.Misc
|
|||||||
packet.PortraitGiverMount = quest.QuestGiverPortraitMount;
|
packet.PortraitGiverMount = quest.QuestGiverPortraitMount;
|
||||||
packet.PortraitGiverModelSceneID = quest.QuestGiverPortraitModelSceneId;
|
packet.PortraitGiverModelSceneID = quest.QuestGiverPortraitModelSceneId;
|
||||||
packet.PortraitTurnIn = quest.QuestTurnInPortrait;
|
packet.PortraitTurnIn = quest.QuestTurnInPortrait;
|
||||||
|
packet.QuestInfoID = (int)quest.QuestInfoID;
|
||||||
packet.QuestSessionBonus = 0; //quest.GetQuestSessionBonus(); // this is only sent while quest session is active
|
packet.QuestSessionBonus = 0; //quest.GetQuestSessionBonus(); // this is only sent while quest session is active
|
||||||
packet.AutoLaunched = autoLaunched;
|
packet.AutoLaunched = autoLaunched;
|
||||||
packet.DisplayPopup = displayPopup;
|
packet.DisplayPopup = displayPopup;
|
||||||
@@ -481,9 +491,10 @@ namespace Game.Misc
|
|||||||
{
|
{
|
||||||
var obj = new QuestObjectiveSimple();
|
var obj = new QuestObjectiveSimple();
|
||||||
obj.Id = objs[i].Id;
|
obj.Id = objs[i].Id;
|
||||||
|
obj.Type = (byte)objs[i].Type;
|
||||||
obj.ObjectID = objs[i].ObjectID;
|
obj.ObjectID = objs[i].ObjectID;
|
||||||
obj.Amount = objs[i].Amount;
|
obj.Amount = objs[i].Amount;
|
||||||
obj.Type = (byte)objs[i].Type;
|
|
||||||
packet.Objectives.Add(obj);
|
packet.Objectives.Add(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -554,6 +565,7 @@ namespace Game.Misc
|
|||||||
offer.QuestID = quest.Id;
|
offer.QuestID = quest.Id;
|
||||||
offer.AutoLaunched = autoLaunched;
|
offer.AutoLaunched = autoLaunched;
|
||||||
offer.SuggestedPartyMembers = quest.SuggestedPlayers;
|
offer.SuggestedPartyMembers = quest.SuggestedPlayers;
|
||||||
|
offer.QuestInfoID = (int)quest.QuestInfoID;
|
||||||
|
|
||||||
for (uint i = 0; i < SharedConst.QuestEmoteCount && quest.OfferRewardEmote[i] != 0; ++i)
|
for (uint i = 0; i < SharedConst.QuestEmoteCount && quest.OfferRewardEmote[i] != 0; ++i)
|
||||||
offer.Emotes.Add(new QuestDescEmote(quest.OfferRewardEmote[i], quest.OfferRewardEmoteDelay[i]));
|
offer.Emotes.Add(new QuestDescEmote(quest.OfferRewardEmote[i], quest.OfferRewardEmoteDelay[i]));
|
||||||
@@ -632,6 +644,7 @@ namespace Game.Misc
|
|||||||
packet.QuestFlags[1] = (uint)quest.FlagsEx;
|
packet.QuestFlags[1] = (uint)quest.FlagsEx;
|
||||||
packet.QuestFlags[2] = (uint)quest.FlagsEx2;
|
packet.QuestFlags[2] = (uint)quest.FlagsEx2;
|
||||||
packet.SuggestPartyMembers = quest.SuggestedPlayers;
|
packet.SuggestPartyMembers = quest.SuggestedPlayers;
|
||||||
|
packet.QuestInfoID = (int)quest.QuestInfoID;
|
||||||
|
|
||||||
// incomplete: FD
|
// incomplete: FD
|
||||||
// incomplete quest with item objective but item objective is complete DD
|
// incomplete quest with item objective but item objective is complete DD
|
||||||
@@ -795,6 +808,7 @@ namespace Game.Misc
|
|||||||
public class GossipMenuAddon
|
public class GossipMenuAddon
|
||||||
{
|
{
|
||||||
public int FriendshipFactionID;
|
public int FriendshipFactionID;
|
||||||
|
public uint LfgDungeonsID;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class PointOfInterest
|
public class PointOfInterest
|
||||||
|
|||||||
@@ -857,7 +857,7 @@ namespace Game.Entities
|
|||||||
public uint GiganticAOI; // 9 Gigantic AOI, enum { false, true, }; Default: false
|
public uint GiganticAOI; // 9 Gigantic AOI, enum { false, true, }; Default: false
|
||||||
public uint InfiniteAOI; // 10 Infinite AOI, enum { false, true, }; Default: false
|
public uint InfiniteAOI; // 10 Infinite AOI, enum { false, true, }; Default: false
|
||||||
public uint NotLOSBlocking; // 11 Not LOS Blocking, enum { false, true, }; Default: false
|
public uint NotLOSBlocking; // 11 Not LOS Blocking, enum { false, true, }; Default: false
|
||||||
public uint InteractRadiusOverride; // 12 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 12 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
public uint Collisionupdatedelayafteropen; // 13 Collision update delay(ms) after open, int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint Collisionupdatedelayafteropen; // 13 Collision update delay(ms) after open, int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -873,7 +873,7 @@ namespace Game.Entities
|
|||||||
public uint closeTextID; // 7 closeTextID, References: BroadcastText, NoValue = 0
|
public uint closeTextID; // 7 closeTextID, References: BroadcastText, NoValue = 0
|
||||||
public uint requireLOS; // 8 require LOS, enum { false, true, }; Default: false
|
public uint requireLOS; // 8 require LOS, enum { false, true, }; Default: false
|
||||||
public uint conditionID1; // 9 conditionID1, References: PlayerCondition, NoValue = 0
|
public uint conditionID1; // 9 conditionID1, References: PlayerCondition, NoValue = 0
|
||||||
public uint InteractRadiusOverride; // 10 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 10 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct questgiver
|
public struct questgiver
|
||||||
@@ -890,7 +890,7 @@ namespace Game.Entities
|
|||||||
public uint GiganticAOI; // 9 Gigantic AOI, enum { false, true, }; Default: false
|
public uint GiganticAOI; // 9 Gigantic AOI, enum { false, true, }; Default: false
|
||||||
public uint conditionID1; // 10 conditionID1, References: PlayerCondition, NoValue = 0
|
public uint conditionID1; // 10 conditionID1, References: PlayerCondition, NoValue = 0
|
||||||
public uint NeverUsableWhileMounted; // 11 Never Usable While Mounted, enum { false, true, }; Default: false
|
public uint NeverUsableWhileMounted; // 11 Never Usable While Mounted, enum { false, true, }; Default: false
|
||||||
public uint InteractRadiusOverride; // 12 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 12 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct chest
|
public struct chest
|
||||||
@@ -904,7 +904,7 @@ namespace Game.Entities
|
|||||||
public uint triggeredEvent; // 6 triggeredEvent, References: GameEvents, NoValue = 0
|
public uint triggeredEvent; // 6 triggeredEvent, References: GameEvents, NoValue = 0
|
||||||
public uint linkedTrap; // 7 linkedTrap, References: GameObjects, NoValue = 0
|
public uint linkedTrap; // 7 linkedTrap, References: GameObjects, NoValue = 0
|
||||||
public uint questID; // 8 questID, References: QuestV2, NoValue = 0
|
public uint questID; // 8 questID, References: QuestV2, NoValue = 0
|
||||||
public uint InteractRadiusOverride; // 9 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 9 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
public uint requireLOS; // 10 require LOS, enum { false, true, }; Default: false
|
public uint requireLOS; // 10 require LOS, enum { false, true, }; Default: false
|
||||||
public uint leaveLoot; // 11 leaveLoot, enum { false, true, }; Default: false
|
public uint leaveLoot; // 11 leaveLoot, enum { false, true, }; Default: false
|
||||||
public uint notInCombat; // 12 notInCombat, enum { false, true, }; Default: false
|
public uint notInCombat; // 12 notInCombat, enum { false, true, }; Default: false
|
||||||
@@ -913,9 +913,9 @@ namespace Game.Entities
|
|||||||
public uint usegrouplootrules; // 15 use group loot rules, enum { false, true, }; Default: false
|
public uint usegrouplootrules; // 15 use group loot rules, enum { false, true, }; Default: false
|
||||||
public uint floatingTooltip; // 16 floatingTooltip, enum { false, true, }; Default: false
|
public uint floatingTooltip; // 16 floatingTooltip, enum { false, true, }; Default: false
|
||||||
public uint conditionID1; // 17 conditionID1, References: PlayerCondition, NoValue = 0
|
public uint conditionID1; // 17 conditionID1, References: PlayerCondition, NoValue = 0
|
||||||
public uint Unused; // 18 Unused, int, Min value: -2147483648, Max value: 2147483647, Default value: 0
|
public uint xpLevel; // 18 xpLevel, int, Min value: -2147483648, Max value: 2147483647, Default value: 0
|
||||||
public uint xpDifficulty; // 19 xpDifficulty, enum { No Exp, Trivial, Very Small, Small, Substandard, Standard, High, Epic, Dungeon, 5, }; Default: No Exp
|
public uint xpDifficulty; // 19 xpDifficulty, enum { No Exp, Trivial, Very Small, Small, Substandard, Standard, High, Epic, Dungeon, 5, }; Default: No Exp
|
||||||
public uint Unused2; // 20 Unused, int, Min value: 0, Max value: 123, Default value: 0
|
public uint Unused ; // 20 Unused, int, Min value: 0, Max value: 123, Default value: 0
|
||||||
public uint GroupXP; // 21 Group XP, enum { false, true, }; Default: false
|
public uint GroupXP; // 21 Group XP, enum { false, true, }; Default: false
|
||||||
public uint DamageImmuneOK; // 22 Damage Immune OK, enum { false, true, }; Default: false
|
public uint DamageImmuneOK; // 22 Damage Immune OK, enum { false, true, }; Default: false
|
||||||
public uint trivialSkillLow; // 23 trivialSkillLow, int, Min value: 0, Max value: 65535, Default value: 0
|
public uint trivialSkillLow; // 23 trivialSkillLow, int, Min value: 0, Max value: 65535, Default value: 0
|
||||||
@@ -934,7 +934,7 @@ namespace Game.Entities
|
|||||||
|
|
||||||
public struct binder
|
public struct binder
|
||||||
{
|
{
|
||||||
public uint InteractRadiusOverride; // 0 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 0 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct generic
|
public struct generic
|
||||||
@@ -948,7 +948,7 @@ namespace Game.Entities
|
|||||||
public uint conditionID1; // 6 conditionID1, References: PlayerCondition, NoValue = 0
|
public uint conditionID1; // 6 conditionID1, References: PlayerCondition, NoValue = 0
|
||||||
public uint LargeAOI; // 7 Large AOI, enum { false, true, }; Default: false
|
public uint LargeAOI; // 7 Large AOI, enum { false, true, }; Default: false
|
||||||
public uint UseGarrisonOwnerGuildColors; // 8 Use Garrison Owner Guild Colors, enum { false, true, }; Default: false
|
public uint UseGarrisonOwnerGuildColors; // 8 Use Garrison Owner Guild Colors, enum { false, true, }; Default: false
|
||||||
public uint InteractRadiusOverride; // 9 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 9 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
public uint Allowunfriendlycrossfactionpartymemberstocollaborateonaritual;// 10 Allow unfriendly cross faction party members to collaborate on a ritual, enum { false, true, }; Default: false
|
public uint Allowunfriendlycrossfactionpartymemberstocollaborateonaritual;// 10 Allow unfriendly cross faction party members to collaborate on a ritual, enum { false, true, }; Default: false
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -975,7 +975,7 @@ namespace Game.Entities
|
|||||||
public uint requireLOS; // 18 require LOS, enum { false, true, }; Default: false
|
public uint requireLOS; // 18 require LOS, enum { false, true, }; Default: false
|
||||||
public uint TriggerCondition; // 19 Trigger Condition, References: PlayerCondition, NoValue = 0
|
public uint TriggerCondition; // 19 Trigger Condition, References: PlayerCondition, NoValue = 0
|
||||||
public uint Checkallunits; // 20 Check all units (spawned traps only check players), enum { false, true, }; Default: false
|
public uint Checkallunits; // 20 Check all units (spawned traps only check players), enum { false, true, }; Default: false
|
||||||
public uint InteractRadiusOverride; // 21 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 21 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct chair
|
public struct chair
|
||||||
@@ -985,7 +985,7 @@ namespace Game.Entities
|
|||||||
public uint onlyCreatorUse; // 2 onlyCreatorUse, enum { false, true, }; Default: false
|
public uint onlyCreatorUse; // 2 onlyCreatorUse, enum { false, true, }; Default: false
|
||||||
public uint triggeredEvent; // 3 triggeredEvent, References: GameEvents, NoValue = 0
|
public uint triggeredEvent; // 3 triggeredEvent, References: GameEvents, NoValue = 0
|
||||||
public uint conditionID1; // 4 conditionID1, References: PlayerCondition, NoValue = 0
|
public uint conditionID1; // 4 conditionID1, References: PlayerCondition, NoValue = 0
|
||||||
public uint InteractRadiusOverride; // 5 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 5 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct spellFocus
|
public struct spellFocus
|
||||||
@@ -999,7 +999,7 @@ namespace Game.Entities
|
|||||||
public uint floatingTooltip; // 6 floatingTooltip, enum { false, true, }; Default: false
|
public uint floatingTooltip; // 6 floatingTooltip, enum { false, true, }; Default: false
|
||||||
public uint floatOnWater; // 7 floatOnWater, enum { false, true, }; Default: false
|
public uint floatOnWater; // 7 floatOnWater, enum { false, true, }; Default: false
|
||||||
public uint conditionID1; // 8 conditionID1, References: PlayerCondition, NoValue = 0
|
public uint conditionID1; // 8 conditionID1, References: PlayerCondition, NoValue = 0
|
||||||
public uint InteractRadiusOverride; // 9 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 9 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
public uint gossipID; // 10 gossipID, References: Gossip, NoValue = 0
|
public uint gossipID; // 10 gossipID, References: Gossip, NoValue = 0
|
||||||
public uint spellFocusType2; // 11 spellFocusType 2, References: SpellFocusObject, NoValue = 0
|
public uint spellFocusType2; // 11 spellFocusType 2, References: SpellFocusObject, NoValue = 0
|
||||||
public uint spellFocusType3; // 12 spellFocusType 3, References: SpellFocusObject, NoValue = 0
|
public uint spellFocusType3; // 12 spellFocusType 3, References: SpellFocusObject, NoValue = 0
|
||||||
@@ -1017,7 +1017,7 @@ namespace Game.Entities
|
|||||||
public uint allowMounted; // 3 allowMounted, enum { false, true, }; Default: false
|
public uint allowMounted; // 3 allowMounted, enum { false, true, }; Default: false
|
||||||
public uint conditionID1; // 4 conditionID1, References: PlayerCondition, NoValue = 0
|
public uint conditionID1; // 4 conditionID1, References: PlayerCondition, NoValue = 0
|
||||||
public uint NeverUsableWhileMounted; // 5 Never Usable While Mounted, enum { false, true, }; Default: false
|
public uint NeverUsableWhileMounted; // 5 Never Usable While Mounted, enum { false, true, }; Default: false
|
||||||
public uint InteractRadiusOverride; // 6 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 6 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct goober
|
public struct goober
|
||||||
@@ -1055,7 +1055,7 @@ namespace Game.Entities
|
|||||||
public uint SyncAnimationtoObjectLifetime; // 30 Sync Animation to Object Lifetime (global track only), enum { false, true, }; Default: false
|
public uint SyncAnimationtoObjectLifetime; // 30 Sync Animation to Object Lifetime (global track only), enum { false, true, }; Default: false
|
||||||
public uint NoFuzzyHit; // 31 No Fuzzy Hit, enum { false, true, }; Default: false
|
public uint NoFuzzyHit; // 31 No Fuzzy Hit, enum { false, true, }; Default: false
|
||||||
public uint LargeAOI; // 32 Large AOI, enum { false, true, }; Default: false
|
public uint LargeAOI; // 32 Large AOI, enum { false, true, }; Default: false
|
||||||
public uint InteractRadiusOverride; // 33 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 33 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct transport
|
public struct transport
|
||||||
@@ -1084,7 +1084,7 @@ namespace Game.Entities
|
|||||||
public uint Reached10thfloor; // 21 Reached 10th floor, References: GameEvents, NoValue = 0
|
public uint Reached10thfloor; // 21 Reached 10th floor, References: GameEvents, NoValue = 0
|
||||||
public uint onlychargeheightcheck; // 22 only charge height check. (yards), int, Min value: 0, Max value: 65535, Default value: 0
|
public uint onlychargeheightcheck; // 22 only charge height check. (yards), int, Min value: 0, Max value: 65535, Default value: 0
|
||||||
public uint onlychargetimecheck; // 23 only charge time check, int, Min value: 0, Max value: 65535, Default value: 0
|
public uint onlychargetimecheck; // 23 only charge time check, int, Min value: 0, Max value: 65535, Default value: 0
|
||||||
public uint InteractRadiusOverride; // 24 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 24 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct areadamage
|
public struct areadamage
|
||||||
@@ -1097,7 +1097,7 @@ namespace Game.Entities
|
|||||||
public uint autoClose; // 5 autoClose (ms), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint autoClose; // 5 autoClose (ms), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
public uint openTextID; // 6 openTextID, References: BroadcastText, NoValue = 0
|
public uint openTextID; // 6 openTextID, References: BroadcastText, NoValue = 0
|
||||||
public uint closeTextID; // 7 closeTextID, References: BroadcastText, NoValue = 0
|
public uint closeTextID; // 7 closeTextID, References: BroadcastText, NoValue = 0
|
||||||
public uint InteractRadiusOverride; // 8 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 8 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct camera
|
public struct camera
|
||||||
@@ -1107,7 +1107,7 @@ namespace Game.Entities
|
|||||||
public uint eventID; // 2 eventID, References: GameEvents, NoValue = 0
|
public uint eventID; // 2 eventID, References: GameEvents, NoValue = 0
|
||||||
public uint openTextID; // 3 openTextID, References: BroadcastText, NoValue = 0
|
public uint openTextID; // 3 openTextID, References: BroadcastText, NoValue = 0
|
||||||
public uint conditionID1; // 4 conditionID1, References: PlayerCondition, NoValue = 0
|
public uint conditionID1; // 4 conditionID1, References: PlayerCondition, NoValue = 0
|
||||||
public uint InteractRadiusOverride; // 5 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 5 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct moTransport
|
public struct moTransport
|
||||||
@@ -1123,19 +1123,19 @@ namespace Game.Entities
|
|||||||
public uint allowstopping; // 8 allow stopping, enum { false, true, }; Default: false
|
public uint allowstopping; // 8 allow stopping, enum { false, true, }; Default: false
|
||||||
public uint InitStopped; // 9 Init Stopped, enum { false, true, }; Default: false
|
public uint InitStopped; // 9 Init Stopped, enum { false, true, }; Default: false
|
||||||
public uint TrueInfiniteAOI; // 10 True Infinite AOI (programmer only!), enum { false, true, }; Default: false
|
public uint TrueInfiniteAOI; // 10 True Infinite AOI (programmer only!), enum { false, true, }; Default: false
|
||||||
public uint InteractRadiusOverride; // 11 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 11 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
public uint Allowareaexplorationwhileonthistransport;// 12 Allow area exploration while on this transport, enum { false, true, }; Default: false
|
public uint Allowareaexplorationwhileonthistransport;// 12 Allow area exploration while on this transport, enum { false, true, }; Default: false
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct duelflag
|
public struct duelflag
|
||||||
{
|
{
|
||||||
public uint InteractRadiusOverride; // 0 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 0 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
public uint Willthisduelgountilaplayerdies; // 1 Will this duel go until a player dies?, enum { false, true, }; Default: false
|
public uint Willthisduelgountilaplayerdies; // 1 Will this duel go until a player dies?, enum { false, true, }; Default: false
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct fishingnode
|
public struct fishingnode
|
||||||
{
|
{
|
||||||
public uint InteractRadiusOverride; // 0 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 0 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct ritual
|
public struct ritual
|
||||||
@@ -1149,13 +1149,13 @@ namespace Game.Entities
|
|||||||
public uint castersGrouped; // 6 castersGrouped, enum { false, true, }; Default: true
|
public uint castersGrouped; // 6 castersGrouped, enum { false, true, }; Default: true
|
||||||
public uint ritualNoTargetCheck; // 7 ritualNoTargetCheck, enum { false, true, }; Default: true
|
public uint ritualNoTargetCheck; // 7 ritualNoTargetCheck, enum { false, true, }; Default: true
|
||||||
public uint conditionID1; // 8 conditionID1, References: PlayerCondition, NoValue = 0
|
public uint conditionID1; // 8 conditionID1, References: PlayerCondition, NoValue = 0
|
||||||
public uint InteractRadiusOverride; // 9 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 9 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct mailbox
|
public struct mailbox
|
||||||
{
|
{
|
||||||
public uint conditionID1; // 0 conditionID1, References: PlayerCondition, NoValue = 0
|
public uint conditionID1; // 0 conditionID1, References: PlayerCondition, NoValue = 0
|
||||||
public uint InteractRadiusOverride; // 1 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 1 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct guardpost
|
public struct guardpost
|
||||||
@@ -1163,7 +1163,7 @@ namespace Game.Entities
|
|||||||
public uint creatureID; // 0 creatureID, References: Creature, NoValue = 0
|
public uint creatureID; // 0 creatureID, References: Creature, NoValue = 0
|
||||||
public uint charges; // 1 charges, int, Min value: 0, Max value: 65535, Default value: 1
|
public uint charges; // 1 charges, int, Min value: 0, Max value: 65535, Default value: 1
|
||||||
public uint Preferonlyifinlineofsight; // 2 Prefer only if in line of sight (expensive), enum { false, true, }; Default: false
|
public uint Preferonlyifinlineofsight; // 2 Prefer only if in line of sight (expensive), enum { false, true, }; Default: false
|
||||||
public uint InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 3 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct spellcaster
|
public struct spellcaster
|
||||||
@@ -1176,7 +1176,7 @@ namespace Game.Entities
|
|||||||
public uint conditionID1; // 5 conditionID1, References: PlayerCondition, NoValue = 0
|
public uint conditionID1; // 5 conditionID1, References: PlayerCondition, NoValue = 0
|
||||||
public uint playerCast; // 6 playerCast, enum { false, true, }; Default: false
|
public uint playerCast; // 6 playerCast, enum { false, true, }; Default: false
|
||||||
public uint NeverUsableWhileMounted; // 7 Never Usable While Mounted, enum { false, true, }; Default: false
|
public uint NeverUsableWhileMounted; // 7 Never Usable While Mounted, enum { false, true, }; Default: false
|
||||||
public uint InteractRadiusOverride; // 8 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 8 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct meetingstone
|
public struct meetingstone
|
||||||
@@ -1184,7 +1184,7 @@ namespace Game.Entities
|
|||||||
public uint Unused; // 0 Unused, int, Min value: 0, Max value: 65535, Default value: 1
|
public uint Unused; // 0 Unused, int, Min value: 0, Max value: 65535, Default value: 1
|
||||||
public uint Unused2; // 1 Unused, int, Min value: 1, Max value: 65535, Default value: 60
|
public uint Unused2; // 1 Unused, int, Min value: 1, Max value: 65535, Default value: 60
|
||||||
public uint areaID; // 2 areaID, References: AreaTable, NoValue = 0
|
public uint areaID; // 2 areaID, References: AreaTable, NoValue = 0
|
||||||
public uint InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 3 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
public uint Preventmeetingstonefromtargetinganunfriendlypartymemberoutsideofinstances;// 4 Prevent meeting stone from targeting an unfriendly party member outside of instances, enum { false, true, }; Default: false
|
public uint Preventmeetingstonefromtargetinganunfriendlypartymemberoutsideofinstances;// 4 Prevent meeting stone from targeting an unfriendly party member outside of instances, enum { false, true, }; Default: false
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1203,7 +1203,7 @@ namespace Game.Entities
|
|||||||
public uint GiganticAOI; // 10 Gigantic AOI, enum { false, true, }; Default: false
|
public uint GiganticAOI; // 10 Gigantic AOI, enum { false, true, }; Default: false
|
||||||
public uint InfiniteAOI; // 11 Infinite AOI, enum { false, true, }; Default: false
|
public uint InfiniteAOI; // 11 Infinite AOI, enum { false, true, }; Default: false
|
||||||
public uint cooldown; // 12 cooldown, int, Min value: 0, Max value: 2147483647, Default value: 3000
|
public uint cooldown; // 12 cooldown, int, Min value: 0, Max value: 2147483647, Default value: 3000
|
||||||
public uint InteractRadiusOverride; // 13 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 13 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct fishinghole
|
public struct fishinghole
|
||||||
@@ -1213,7 +1213,7 @@ namespace Game.Entities
|
|||||||
public uint minRestock; // 2 minRestock, int, Min value: 0, Max value: 65535, Default value: 0
|
public uint minRestock; // 2 minRestock, int, Min value: 0, Max value: 65535, Default value: 0
|
||||||
public uint maxRestock; // 3 maxRestock, int, Min value: 0, Max value: 65535, Default value: 0
|
public uint maxRestock; // 3 maxRestock, int, Min value: 0, Max value: 65535, Default value: 0
|
||||||
public uint open; // 4 open, References: Lock_, NoValue = 0
|
public uint open; // 4 open, References: Lock_, NoValue = 0
|
||||||
public uint InteractRadiusOverride; // 5 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 5 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct flagdrop
|
public struct flagdrop
|
||||||
@@ -1228,7 +1228,7 @@ namespace Game.Entities
|
|||||||
public uint GiganticAOI; // 7 Gigantic AOI, enum { false, true, }; Default: false
|
public uint GiganticAOI; // 7 Gigantic AOI, enum { false, true, }; Default: false
|
||||||
public uint InfiniteAOI; // 8 Infinite AOI, enum { false, true, }; Default: false
|
public uint InfiniteAOI; // 8 Infinite AOI, enum { false, true, }; Default: false
|
||||||
public uint cooldown; // 9 cooldown, int, Min value: 0, Max value: 2147483647, Default value: 3000
|
public uint cooldown; // 9 cooldown, int, Min value: 0, Max value: 2147483647, Default value: 3000
|
||||||
public uint InteractRadiusOverride; // 10 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 10 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct controlzone
|
public struct controlzone
|
||||||
@@ -1261,7 +1261,7 @@ namespace Game.Entities
|
|||||||
public uint UncontestedTime; // 25 Uncontested Time, int, Min value: 0, Max value: 65535, Default value: 0
|
public uint UncontestedTime; // 25 Uncontested Time, int, Min value: 0, Max value: 65535, Default value: 0
|
||||||
public uint FrequentHeartbeat; // 26 Frequent Heartbeat, enum { false, true, }; Default: false
|
public uint FrequentHeartbeat; // 26 Frequent Heartbeat, enum { false, true, }; Default: false
|
||||||
public uint EnablingWorldStateExpression; // 27 Enabling World State Expression, References: WorldStateExpression, NoValue = 0
|
public uint EnablingWorldStateExpression; // 27 Enabling World State Expression, References: WorldStateExpression, NoValue = 0
|
||||||
public uint InteractRadiusOverride; // 28 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 28 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct auraGenerator
|
public struct auraGenerator
|
||||||
@@ -1273,7 +1273,7 @@ namespace Game.Entities
|
|||||||
public uint auraID2; // 4 auraID2, References: Spell, NoValue = 0
|
public uint auraID2; // 4 auraID2, References: Spell, NoValue = 0
|
||||||
public uint conditionID2; // 5 conditionID2, References: PlayerCondition, NoValue = 0
|
public uint conditionID2; // 5 conditionID2, References: PlayerCondition, NoValue = 0
|
||||||
public uint serverOnly; // 6 serverOnly, enum { false, true, }; Default: false
|
public uint serverOnly; // 6 serverOnly, enum { false, true, }; Default: false
|
||||||
public uint InteractRadiusOverride; // 7 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 7 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct dungeonDifficulty
|
public struct dungeonDifficulty
|
||||||
@@ -1289,7 +1289,7 @@ namespace Game.Entities
|
|||||||
public uint LargeAOI; // 8 Large AOI, enum { false, true, }; Default: false
|
public uint LargeAOI; // 8 Large AOI, enum { false, true, }; Default: false
|
||||||
public uint GiganticAOI; // 9 Gigantic AOI, enum { false, true, }; Default: false
|
public uint GiganticAOI; // 9 Gigantic AOI, enum { false, true, }; Default: false
|
||||||
public uint Legacy; // 10 Legacy, enum { false, true, }; Default: false
|
public uint Legacy; // 10 Legacy, enum { false, true, }; Default: false
|
||||||
public uint InteractRadiusOverride; // 11 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 11 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct barberChair
|
public struct barberChair
|
||||||
@@ -1297,7 +1297,7 @@ namespace Game.Entities
|
|||||||
public uint chairheight; // 0 chairheight, int, Min value: 0, Max value: 2, Default value: 1
|
public uint chairheight; // 0 chairheight, int, Min value: 0, Max value: 2, Default value: 1
|
||||||
public int HeightOffset; // 1 Height Offset (inches), int, Min value: -100, Max value: 100, Default value: 0
|
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 SitAnimKit; // 2 Sit Anim Kit, References: AnimKit, NoValue = 0
|
||||||
public uint InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 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 CustomizationScope; // 4 Customization Scope, 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
|
public uint Preventteleportingtheplayeroutofthebarbershopchair;// 5 Prevent teleporting the player out of the barbershop chair, enum { false, true, }; Default: false
|
||||||
}
|
}
|
||||||
@@ -1328,16 +1328,16 @@ namespace Game.Entities
|
|||||||
public int Unused10; // 21 Unused, int, Min value: -2147483648, Max value: 2147483647, Default value: 0
|
public int Unused10; // 21 Unused, int, Min value: -2147483648, Max value: 2147483647, Default value: 0
|
||||||
public uint DamageEvent; // 22 Damage Event, References: GameEvents, NoValue = 0
|
public uint DamageEvent; // 22 Damage Event, References: GameEvents, NoValue = 0
|
||||||
public uint Displaymouseoverasanameplate; // 23 Display mouseover as a nameplate, enum { false, true, }; Default: false
|
public uint Displaymouseoverasanameplate; // 23 Display mouseover as a nameplate, enum { false, true, }; Default: false
|
||||||
public int Thexoffsetofthedestructiblenameplateifitisenabled;// 24 The x offset (in hundredths) of the destructible nameplate, if it is enabled, int, Min value: -2147483648, Max value: 2147483647, Default value: 0
|
public int Thexoffsetofthedestructiblenameplateifitisenabled;// 24 The x offset (Yards * 100) of the destructible nameplate, if it is enabled, int, Min value: -2147483648, Max value: 2147483647, Default value: 0
|
||||||
public int Theyoffsetofthedestructiblenameplateifitisenabled;// 25 The y offset (in hundredths) of the destructible nameplate, if it is enabled, int, Min value: -2147483648, Max value: 2147483647, Default value: 0
|
public int Theyoffsetofthedestructiblenameplateifitisenabled;// 25 The y offset (Yards * 100) of the destructible nameplate, if it is enabled, int, Min value: -2147483648, Max value: 2147483647, Default value: 0
|
||||||
public int Thezoffsetofthedestructiblenameplateifitisenabled;// 26 The z offset (in hundredths) of the destructible nameplate, if it is enabled, int, Min value: -2147483648, Max value: 2147483647, Default value: 0
|
public int Thezoffsetofthedestructiblenameplateifitisenabled;// 26 The z offset (Yards * 100) of the destructible nameplate, if it is enabled, int, Min value: -2147483648, Max value: 2147483647, Default value: 0
|
||||||
public uint InteractRadiusOverride; // 27 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 27 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct guildbank
|
public struct guildbank
|
||||||
{
|
{
|
||||||
public uint conditionID1; // 0 conditionID1, References: PlayerCondition, NoValue = 0
|
public uint conditionID1; // 0 conditionID1, References: PlayerCondition, NoValue = 0
|
||||||
public uint InteractRadiusOverride; // 1 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 1 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct trapDoor
|
public struct trapDoor
|
||||||
@@ -1350,7 +1350,7 @@ namespace Game.Entities
|
|||||||
public uint GiganticAOI; // 5 Gigantic AOI, enum { false, true, }; Default: false
|
public uint GiganticAOI; // 5 Gigantic AOI, enum { false, true, }; Default: false
|
||||||
public uint InfiniteAOI; // 6 Infinite AOI, enum { false, true, }; Default: false
|
public uint InfiniteAOI; // 6 Infinite AOI, enum { false, true, }; Default: false
|
||||||
public uint DoorisOpaque; // 7 Door is Opaque (Disable portal on close), enum { false, true, }; Default: false
|
public uint DoorisOpaque; // 7 Door is Opaque (Disable portal on close), enum { false, true, }; Default: false
|
||||||
public uint InteractRadiusOverride; // 8 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 8 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct newflag
|
public struct newflag
|
||||||
@@ -1369,27 +1369,27 @@ namespace Game.Entities
|
|||||||
public uint worldState1; // 11 worldState1, References: WorldState, NoValue = 0
|
public uint worldState1; // 11 worldState1, References: WorldState, NoValue = 0
|
||||||
public uint ReturnonDefenderInteract; // 12 Return on Defender Interact, enum { false, true, }; Default: false
|
public uint ReturnonDefenderInteract; // 12 Return on Defender Interact, enum { false, true, }; Default: false
|
||||||
public uint SpawnVignette; // 13 Spawn Vignette, References: vignette, NoValue = 0
|
public uint SpawnVignette; // 13 Spawn Vignette, References: vignette, NoValue = 0
|
||||||
public uint InteractRadiusOverride; // 14 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 14 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct newflagdrop
|
public struct newflagdrop
|
||||||
{
|
{
|
||||||
public uint open; // 0 open, References: Lock_, NoValue = 0
|
public uint open; // 0 open, References: Lock_, NoValue = 0
|
||||||
public uint SpawnVignette; // 1 Spawn Vignette, References: vignette, NoValue = 0
|
public uint SpawnVignette; // 1 Spawn Vignette, References: vignette, NoValue = 0
|
||||||
public uint InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 2 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct garrisonbuilding
|
public struct garrisonbuilding
|
||||||
{
|
{
|
||||||
public int SpawnMap; // 0 Spawn Map, References: Map, NoValue = -1
|
public int SpawnMap; // 0 Spawn Map, References: Map, NoValue = -1
|
||||||
public uint InteractRadiusOverride; // 1 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 1 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct garrisonplot
|
public struct garrisonplot
|
||||||
{
|
{
|
||||||
public uint PlotInstance; // 0 Plot Instance, References: GarrPlotInstance, NoValue = 0
|
public uint PlotInstance; // 0 Plot Instance, References: GarrPlotInstance, NoValue = 0
|
||||||
public int SpawnMap; // 1 Spawn Map, References: Map, NoValue = -1
|
public int SpawnMap; // 1 Spawn Map, References: Map, NoValue = -1
|
||||||
public uint InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 2 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct clientcreature
|
public struct clientcreature
|
||||||
@@ -1429,7 +1429,7 @@ namespace Game.Entities
|
|||||||
public uint SpellVisual4; // 20 Spell Visual 4, References: SpellVisual, NoValue = 0
|
public uint SpellVisual4; // 20 Spell Visual 4, References: SpellVisual, NoValue = 0
|
||||||
public uint SpellVisual5; // 21 Spell Visual 5, References: SpellVisual, NoValue = 0
|
public uint SpellVisual5; // 21 Spell Visual 5, References: SpellVisual, NoValue = 0
|
||||||
public uint SpawnVignette; // 22 Spawn Vignette, References: vignette, NoValue = 0
|
public uint SpawnVignette; // 22 Spawn Vignette, References: vignette, NoValue = 0
|
||||||
public uint InteractRadiusOverride; // 23 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 23 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct phaseablemo
|
public struct phaseablemo
|
||||||
@@ -1438,14 +1438,14 @@ namespace Game.Entities
|
|||||||
public int AreaNameSet; // 1 Area Name Set (Index), int, Min value: -2147483648, Max value: 2147483647, Default value: 0
|
public int AreaNameSet; // 1 Area Name Set (Index), int, Min value: -2147483648, Max value: 2147483647, Default value: 0
|
||||||
public uint DoodadSetA; // 2 Doodad Set A, int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint DoodadSetA; // 2 Doodad Set A, int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
public uint DoodadSetB; // 3 Doodad Set B, int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint DoodadSetB; // 3 Doodad Set B, int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
public uint InteractRadiusOverride; // 4 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 4 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct garrisonmonument
|
public struct garrisonmonument
|
||||||
{
|
{
|
||||||
public uint TrophyTypeID; // 0 Trophy Type ID, References: TrophyType, NoValue = 0
|
public uint TrophyTypeID; // 0 Trophy Type ID, References: TrophyType, NoValue = 0
|
||||||
public uint TrophyInstanceID; // 1 Trophy Instance ID, References: TrophyInstance, NoValue = 0
|
public uint TrophyInstanceID; // 1 Trophy Instance ID, References: TrophyInstance, NoValue = 0
|
||||||
public uint InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 2 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct garrisonshipment
|
public struct garrisonshipment
|
||||||
@@ -1453,13 +1453,13 @@ namespace Game.Entities
|
|||||||
public uint ShipmentContainer; // 0 Shipment Container, References: CharShipmentContainer, NoValue = 0
|
public uint ShipmentContainer; // 0 Shipment Container, References: CharShipmentContainer, NoValue = 0
|
||||||
public uint GiganticAOI; // 1 Gigantic AOI, enum { false, true, }; Default: false
|
public uint GiganticAOI; // 1 Gigantic AOI, enum { false, true, }; Default: false
|
||||||
public uint LargeAOI; // 2 Large AOI, enum { false, true, }; Default: false
|
public uint LargeAOI; // 2 Large AOI, enum { false, true, }; Default: false
|
||||||
public uint InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 3 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct garrisonmonumentplaque
|
public struct garrisonmonumentplaque
|
||||||
{
|
{
|
||||||
public uint TrophyInstanceID; // 0 Trophy Instance ID, References: TrophyInstance, NoValue = 0
|
public uint TrophyInstanceID; // 0 Trophy Instance ID, References: TrophyInstance, NoValue = 0
|
||||||
public uint InteractRadiusOverride; // 1 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 1 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct itemforge
|
public struct itemforge
|
||||||
@@ -1470,7 +1470,7 @@ namespace Game.Entities
|
|||||||
public uint CameraMode; // 3 Camera Mode, References: CameraMode, NoValue = 0
|
public uint CameraMode; // 3 Camera Mode, References: CameraMode, NoValue = 0
|
||||||
public uint FadeRegionRadius; // 4 Fade Region Radius, int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint FadeRegionRadius; // 4 Fade Region Radius, int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
public uint ForgeType; // 5 Forge Type, enum { Artifact Forge, Relic Forge, Heart Forge, Soulbind Forge, Anima Reservoir, }; Default: Relic Forge
|
public uint ForgeType; // 5 Forge Type, enum { Artifact Forge, Relic Forge, Heart Forge, Soulbind Forge, Anima Reservoir, }; Default: Relic Forge
|
||||||
public uint InteractRadiusOverride; // 6 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 6 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
public uint GarrTalentTreeID; // 7 GarrTalentTree ID, References: GarrTalentTree, NoValue = 0
|
public uint GarrTalentTreeID; // 7 GarrTalentTree ID, References: GarrTalentTree, NoValue = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1481,13 +1481,13 @@ namespace Game.Entities
|
|||||||
public uint GiganticAOI; // 2 Gigantic AOI, 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 spellFocusType; // 3 spellFocusType, References: SpellFocusObject, NoValue = 0
|
||||||
public uint radius; // 4 radius, int, Min value: 0, Max value: 50, Default value: 10
|
public uint radius; // 4 radius, int, Min value: 0, Max value: 50, Default value: 10
|
||||||
public uint InteractRadiusOverride; // 5 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
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 ItemInteractionID; // 6 Item Interaction ID, References: UiItemInteraction, NoValue = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct keystonereceptacle
|
public struct keystonereceptacle
|
||||||
{
|
{
|
||||||
public uint InteractRadiusOverride; // 0 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 0 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct gatheringnode
|
public struct gatheringnode
|
||||||
@@ -1516,7 +1516,7 @@ namespace Game.Entities
|
|||||||
public uint PlayOpenAnimationonOpening; // 21 Play Open Animation on Opening, enum { false, true, }; Default: false
|
public uint PlayOpenAnimationonOpening; // 21 Play Open Animation on Opening, enum { false, true, }; Default: false
|
||||||
public uint turnpersonallootsecurityoff; // 22 turn personal loot security off, enum { false, true, }; Default: false
|
public uint turnpersonallootsecurityoff; // 22 turn personal loot security off, enum { false, true, }; Default: false
|
||||||
public uint ClearObjectVignetteonOpening; // 23 Clear Object Vignette on Opening, enum { false, true, }; Default: false
|
public uint ClearObjectVignetteonOpening; // 23 Clear Object Vignette on Opening, enum { false, true, }; Default: false
|
||||||
public uint InteractRadiusOverride; // 24 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 24 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
public uint Overrideminimaptrackingicon; // 25 Override minimap tracking icon, References: UiTextureAtlasMember, NoValue = 0
|
public uint Overrideminimaptrackingicon; // 25 Override minimap tracking icon, References: UiTextureAtlasMember, NoValue = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1526,7 +1526,7 @@ namespace Game.Entities
|
|||||||
public uint WhenAvailable; // 1 When Available, References: GameObjectDisplayInfo, NoValue = 0
|
public uint WhenAvailable; // 1 When Available, References: GameObjectDisplayInfo, NoValue = 0
|
||||||
public uint open; // 2 open, References: Lock_, NoValue = 0
|
public uint open; // 2 open, References: Lock_, NoValue = 0
|
||||||
public uint openTextID; // 3 openTextID, References: BroadcastText, NoValue = 0
|
public uint openTextID; // 3 openTextID, References: BroadcastText, NoValue = 0
|
||||||
public uint InteractRadiusOverride; // 4 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 4 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct multi
|
public struct multi
|
||||||
@@ -1548,7 +1548,7 @@ namespace Game.Entities
|
|||||||
public uint DoodadSetC; // 3 Doodad Set C, int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint DoodadSetC; // 3 Doodad Set C, int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
public int SpawnMap; // 4 Spawn Map, References: Map, NoValue = -1
|
public int SpawnMap; // 4 Spawn Map, References: Map, NoValue = -1
|
||||||
public int AreaNameSet; // 5 Area Name Set (Index), int, Min value: -2147483648, Max value: 2147483647, Default value: 0
|
public int AreaNameSet; // 5 Area Name Set (Index), int, Min value: -2147483648, Max value: 2147483647, Default value: 0
|
||||||
public uint InteractRadiusOverride; // 6 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 6 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct pvpReward
|
public struct pvpReward
|
||||||
@@ -1557,7 +1557,7 @@ namespace Game.Entities
|
|||||||
public uint WhenAvailable; // 1 When Available, References: GameObjectDisplayInfo, NoValue = 0
|
public uint WhenAvailable; // 1 When Available, References: GameObjectDisplayInfo, NoValue = 0
|
||||||
public uint open; // 2 open, References: Lock_, NoValue = 0
|
public uint open; // 2 open, References: Lock_, NoValue = 0
|
||||||
public uint openTextID; // 3 openTextID, References: BroadcastText, NoValue = 0
|
public uint openTextID; // 3 openTextID, References: BroadcastText, NoValue = 0
|
||||||
public uint InteractRadiusOverride; // 4 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 4 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct playerchoicechest
|
public struct playerchoicechest
|
||||||
@@ -1569,7 +1569,7 @@ namespace Game.Entities
|
|||||||
public uint MawPowerFilter; // 4 Maw Power Filter, References: MawPowerFilter, NoValue = 0
|
public uint MawPowerFilter; // 4 Maw Power Filter, References: MawPowerFilter, NoValue = 0
|
||||||
public uint Script; // 5 Script, References: SpellScript, NoValue = 0
|
public uint Script; // 5 Script, References: SpellScript, NoValue = 0
|
||||||
public uint SpellVisual1; // 6 Spell Visual 1, References: SpellVisual, NoValue = 0
|
public uint SpellVisual1; // 6 Spell Visual 1, References: SpellVisual, NoValue = 0
|
||||||
public uint InteractRadiusOverride; // 7 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 7 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
public uint Dontupdateplayerinteractability; // 8 Don't update player interactability, enum { false, true, }; Default: false
|
public uint Dontupdateplayerinteractability; // 8 Don't update player interactability, enum { false, true, }; Default: false
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1577,21 +1577,21 @@ namespace Game.Entities
|
|||||||
{
|
{
|
||||||
public uint PlayerChoice; // 0 Player Choice, References: PlayerChoice, NoValue = 0
|
public uint PlayerChoice; // 0 Player Choice, References: PlayerChoice, NoValue = 0
|
||||||
public uint CustomItemBonusFilter; // 1 Custom Item Bonus Filter, References: CustomItemBonusFilter, NoValue = 0
|
public uint CustomItemBonusFilter; // 1 Custom Item Bonus Filter, References: CustomItemBonusFilter, NoValue = 0
|
||||||
public uint InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 2 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct garrtalenttree
|
public struct garrtalenttree
|
||||||
{
|
{
|
||||||
public uint UiMapID; // 0 Ui Map ID, References: UiMap, NoValue = 0
|
public uint UiMapID; // 0 Ui Map ID, References: UiMap, NoValue = 0
|
||||||
public uint GarrTalentTreeID; // 1 GarrTalentTree ID, References: GarrTalentTree, NoValue = 0
|
public uint GarrTalentTreeID; // 1 GarrTalentTree ID, References: GarrTalentTree, NoValue = 0
|
||||||
public uint InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 2 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct weeklyrewardchest
|
public struct weeklyrewardchest
|
||||||
{
|
{
|
||||||
public uint WhenAvailable; // 0 When Available, References: GameObjectDisplayInfo, NoValue = 0
|
public uint WhenAvailable; // 0 When Available, References: GameObjectDisplayInfo, NoValue = 0
|
||||||
public uint open; // 1 open, References: Lock_, NoValue = 0
|
public uint open; // 1 open, References: Lock_, NoValue = 0
|
||||||
public uint InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint InteractRadiusOverride; // 2 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
public uint ExpansionLevel; // 3 Expansion Level, int, Min value: 0, Max value: 2147483647, Default value: 0
|
public uint ExpansionLevel; // 3 Expansion Level, int, Min value: 0, Max value: 2147483647, Default value: 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2342,7 +2342,7 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ItemContext GetContext() { return (ItemContext)(int)m_itemData.Context; }
|
public ItemContext GetContext() { return (ItemContext)(int)m_itemData.Context; }
|
||||||
public void SetContext(ItemContext context) { SetUpdateFieldValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.Context), (int)context); }
|
public void SetContext(ItemContext context) { SetUpdateFieldValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.Context), (byte)context); }
|
||||||
|
|
||||||
public void SetPetitionId(uint petitionId)
|
public void SetPetitionId(uint petitionId)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -69,6 +69,8 @@ namespace Game.Entities
|
|||||||
return updateField._value;
|
return updateField._value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int Size() { return _value.GetByteCount(); }
|
||||||
|
|
||||||
public void SetValue(string value) { _value = value; }
|
public void SetValue(string value) { _value = value; }
|
||||||
|
|
||||||
public string GetValue() { return _value; }
|
public string GetValue() { return _value; }
|
||||||
@@ -411,7 +413,8 @@ namespace Game.Entities
|
|||||||
|
|
||||||
public void ClearChanged<U>(UpdateFieldArray<U> updateField, int index) where U : new()
|
public void ClearChanged<U>(UpdateFieldArray<U> updateField, int index) where U : new()
|
||||||
{
|
{
|
||||||
_changesMask.Reset(updateField.FirstElementBit + index);
|
if (updateField.FirstElementBit >= 0)
|
||||||
|
_changesMask.Reset(updateField.FirstElementBit + index);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ClearChanged<U>(DynamicUpdateField<U> updateField, int index) where U : new()
|
public void ClearChanged<U>(DynamicUpdateField<U> updateField, int index) where U : new()
|
||||||
@@ -518,9 +521,10 @@ namespace Game.Entities
|
|||||||
updateField[index]._updateMask.Resize((uint)(updateField[index]._values.Count + 31) / 32);
|
updateField[index]._updateMask.Resize((uint)(updateField[index]._values.Count + 31) / 32);
|
||||||
}
|
}
|
||||||
|
|
||||||
//MarkChanged(updateField, index);
|
|
||||||
_changesMask.Set(updateField.Bit);
|
_changesMask.Set(updateField.Bit);
|
||||||
_changesMask.Set(updateField.FirstElementBit);
|
if (updateField.FirstElementBit >= 0)
|
||||||
|
_changesMask.Set(updateField.FirstElementBit);
|
||||||
|
|
||||||
updateField[index].MarkChanged(dynamicIndex);
|
updateField[index].MarkChanged(dynamicIndex);
|
||||||
|
|
||||||
return new DynamicUpdateFieldSetter<U>(updateField[index], dynamicIndex);
|
return new DynamicUpdateFieldSetter<U>(updateField[index], dynamicIndex);
|
||||||
@@ -547,13 +551,15 @@ namespace Game.Entities
|
|||||||
public void MarkChanged<U>(UpdateFieldArray<U> updateField, int index) where U : new()
|
public void MarkChanged<U>(UpdateFieldArray<U> updateField, int index) where U : new()
|
||||||
{
|
{
|
||||||
_changesMask.Set(updateField.Bit);
|
_changesMask.Set(updateField.Bit);
|
||||||
_changesMask.Set(updateField.FirstElementBit + index);
|
if (updateField.FirstElementBit >= 0)
|
||||||
|
_changesMask.Set(updateField.FirstElementBit + index);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void MarkChanged(UpdateFieldArrayString updateField, int index)
|
public void MarkChanged(UpdateFieldArrayString updateField, int index)
|
||||||
{
|
{
|
||||||
_changesMask.Set(updateField.Bit);
|
_changesMask.Set(updateField.Bit);
|
||||||
_changesMask.Set(updateField.FirstElementBit + index);
|
if (updateField.FirstElementBit >= 0)
|
||||||
|
_changesMask.Set(updateField.FirstElementBit + index);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void WriteCompleteDynamicFieldUpdateMask(int size, WorldPacket data, int bitsForSize = 32)
|
public void WriteCompleteDynamicFieldUpdateMask(int size, WorldPacket data, int bitsForSize = 32)
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -654,7 +654,7 @@ namespace Game.Entities
|
|||||||
// *data << int32(Players[i].Pets[j].Power);
|
// *data << int32(Players[i].Pets[j].Power);
|
||||||
// *data << int32(Players[i].Pets[j].Speed);
|
// *data << int32(Players[i].Pets[j].Speed);
|
||||||
// *data << int32(Players[i].Pets[j].NpcTeamMemberID);
|
// *data << int32(Players[i].Pets[j].NpcTeamMemberID);
|
||||||
// *data << uint16(Players[i].Pets[j].BreedQuality);
|
// *data << uint8(Players[i].Pets[j].BreedQuality);
|
||||||
// *data << uint16(Players[i].Pets[j].StatusFlags);
|
// *data << uint16(Players[i].Pets[j].StatusFlags);
|
||||||
// *data << int8(Players[i].Pets[j].Slot);
|
// *data << int8(Players[i].Pets[j].Slot);
|
||||||
|
|
||||||
|
|||||||
@@ -3779,8 +3779,8 @@ namespace Game.Entities
|
|||||||
stmt.AddValue(index++, GetLootSpecId());
|
stmt.AddValue(index++, GetLootSpecId());
|
||||||
|
|
||||||
ss.Clear();
|
ss.Clear();
|
||||||
for (int i = 0; i < m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex].Size(); ++i)
|
for (int i = 0; i < m_activePlayerData.BitVectors.GetValue().Values[(int)PlayerDataFlag.ExploredZonesIndex].Size(); ++i)
|
||||||
ss.Append($"{(uint)(m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex][i] & 0xFFFFFFFF)} {(uint)((m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex][i] >> 32) & 0xFFFFFFFF)} ");
|
ss.Append($"{(uint)(m_activePlayerData.BitVectors.GetValue().Values[(int)PlayerDataFlag.ExploredZonesIndex][i] & 0xFFFFFFFF)} {(uint)((m_activePlayerData.BitVectors.GetValue().Values[(int)PlayerDataFlag.ExploredZonesIndex][i] >> 32) & 0xFFFFFFFF)} ");
|
||||||
|
|
||||||
stmt.AddValue(index++, ss.ToString());
|
stmt.AddValue(index++, ss.ToString());
|
||||||
|
|
||||||
@@ -3931,8 +3931,8 @@ namespace Game.Entities
|
|||||||
stmt.AddValue(index++, GetLootSpecId());
|
stmt.AddValue(index++, GetLootSpecId());
|
||||||
|
|
||||||
ss.Clear();
|
ss.Clear();
|
||||||
for (int i = 0; i < m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex].Size(); ++i)
|
for (int i = 0; i < m_activePlayerData.BitVectors.GetValue().Values[(int)PlayerDataFlag.ExploredZonesIndex].Size(); ++i)
|
||||||
ss.Append($"{(uint)(m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex][i] & 0xFFFFFFFF)} {(uint)((m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex][i] >> 32) & 0xFFFFFFFF)} ");
|
ss.Append($"{(uint)(m_activePlayerData.BitVectors.GetValue().Values[(int)PlayerDataFlag.ExploredZonesIndex][i] & 0xFFFFFFFF)} {(uint)((m_activePlayerData.BitVectors.GetValue().Values[(int)PlayerDataFlag.ExploredZonesIndex][i] >> 32) & 0xFFFFFFFF)} ");
|
||||||
|
|
||||||
stmt.AddValue(index++, ss.ToString());
|
stmt.AddValue(index++, ss.ToString());
|
||||||
|
|
||||||
|
|||||||
@@ -85,6 +85,7 @@ namespace Game.Entities
|
|||||||
float m_lastFallZ;
|
float m_lastFallZ;
|
||||||
TeleportLocation teleportDest;
|
TeleportLocation teleportDest;
|
||||||
TeleportToOptions m_teleport_options;
|
TeleportToOptions m_teleport_options;
|
||||||
|
int m_newWorldCounter;
|
||||||
bool mSemaphoreTeleport_Near;
|
bool mSemaphoreTeleport_Near;
|
||||||
bool mSemaphoreTeleport_Far;
|
bool mSemaphoreTeleport_Far;
|
||||||
PlayerDelayedOperations m_DelayedOperations;
|
PlayerDelayedOperations m_DelayedOperations;
|
||||||
|
|||||||
@@ -2447,9 +2447,14 @@ namespace Game.Entities
|
|||||||
packet.QuestLogItemID = item.GetTemplate().QuestLogItemId;
|
packet.QuestLogItemID = item.GetTemplate().QuestLogItemId;
|
||||||
packet.Quantity = quantity;
|
packet.Quantity = quantity;
|
||||||
packet.QuantityInInventory = GetItemCount(item.GetEntry());
|
packet.QuantityInInventory = GetItemCount(item.GetEntry());
|
||||||
|
|
||||||
|
QuestObjective questObjective = GetQuestObjectiveForItem(item.GetEntry(), false);
|
||||||
|
if (questObjective != null)
|
||||||
|
packet.QuantityInQuestLog = GetQuestObjectiveData(questObjective);
|
||||||
|
|
||||||
packet.BattlePetSpeciesID = (int)item.GetModifier(ItemModifier.BattlePetSpeciesId);
|
packet.BattlePetSpeciesID = (int)item.GetModifier(ItemModifier.BattlePetSpeciesId);
|
||||||
packet.BattlePetBreedID = (int)item.GetModifier(ItemModifier.BattlePetBreedData) & 0xFFFFFF;
|
packet.BattlePetBreedID = (int)item.GetModifier(ItemModifier.BattlePetBreedData) & 0xFFFFFF;
|
||||||
packet.BattlePetBreedQuality = (item.GetModifier(ItemModifier.BattlePetBreedData) >> 24) & 0xFF;
|
packet.BattlePetBreedQuality = (byte)((item.GetModifier(ItemModifier.BattlePetBreedData) >> 24) & 0xFF);
|
||||||
packet.BattlePetLevel = (int)item.GetModifier(ItemModifier.BattlePetLevel);
|
packet.BattlePetLevel = (int)item.GetModifier(ItemModifier.BattlePetLevel);
|
||||||
|
|
||||||
packet.ItemGUID = item.GetGUID();
|
packet.ItemGUID = item.GetGUID();
|
||||||
|
|||||||
@@ -2095,20 +2095,28 @@ namespace Game.Entities
|
|||||||
case QuestStatus.Complete:
|
case QuestStatus.Complete:
|
||||||
if (quest.IsImportant())
|
if (quest.IsImportant())
|
||||||
result |= quest.HasFlag(QuestFlags.HideRewardPoi) ? QuestGiverStatus.ImportantQuestRewardCompleteNoPOI : QuestGiverStatus.ImportantQuestRewardCompletePOI;
|
result |= quest.HasFlag(QuestFlags.HideRewardPoi) ? QuestGiverStatus.ImportantQuestRewardCompleteNoPOI : QuestGiverStatus.ImportantQuestRewardCompletePOI;
|
||||||
|
else if (quest.IsMeta())
|
||||||
|
result |= quest.HasFlag(QuestFlags.HideRewardPoi) ? QuestGiverStatus.MetaQuestRewardCompleteNoPOI : QuestGiverStatus.MetaQuestRewardCompletePOI;
|
||||||
else if (quest.GetQuestTag() == QuestTagType.CovenantCalling)
|
else if (quest.GetQuestTag() == QuestTagType.CovenantCalling)
|
||||||
result |= quest.HasFlag(QuestFlags.HideRewardPoi) ? QuestGiverStatus.CovenantCallingRewardCompleteNoPOI : QuestGiverStatus.CovenantCallingRewardCompletePOI;
|
result |= quest.HasFlag(QuestFlags.HideRewardPoi) ? QuestGiverStatus.CovenantCallingRewardCompleteNoPOI : QuestGiverStatus.CovenantCallingRewardCompletePOI;
|
||||||
else if (quest.HasFlagEx(QuestFlagsEx.Legendary))
|
else if (quest.HasFlagEx(QuestFlagsEx.Legendary))
|
||||||
result |= quest.HasFlag(QuestFlags.HideRewardPoi) ? QuestGiverStatus.LegendaryRewardCompleteNoPOI : QuestGiverStatus.LegendaryRewardCompletePOI;
|
result |= quest.HasFlag(QuestFlags.HideRewardPoi) ? QuestGiverStatus.LegendaryRewardCompleteNoPOI : QuestGiverStatus.LegendaryRewardCompletePOI;
|
||||||
|
else if (quest.IsDailyOrWeekly())
|
||||||
|
result |= quest.HasFlag(QuestFlags.HideRewardPoi) ? QuestGiverStatus.RepeatableRewardCompleteNoPOI : QuestGiverStatus.RepeatableRewardCompletePOI;
|
||||||
else
|
else
|
||||||
result |= quest.HasFlag(QuestFlags.HideRewardPoi) ? QuestGiverStatus.RewardCompleteNoPOI : QuestGiverStatus.RewardCompletePOI;
|
result |= quest.HasFlag(QuestFlags.HideRewardPoi) ? QuestGiverStatus.RewardCompleteNoPOI : QuestGiverStatus.RewardCompletePOI;
|
||||||
break;
|
break;
|
||||||
case QuestStatus.Incomplete:
|
case QuestStatus.Incomplete:
|
||||||
if (quest.IsImportant())
|
if (quest.IsImportant())
|
||||||
result |= QuestGiverStatus.ImportantReward;
|
result |= QuestGiverStatus.ImportantReward;
|
||||||
|
else if (quest.IsMeta())
|
||||||
|
result |= QuestGiverStatus.MetaReward;
|
||||||
else if (quest.GetQuestTag() == QuestTagType.CovenantCalling)
|
else if (quest.GetQuestTag() == QuestTagType.CovenantCalling)
|
||||||
result |= QuestGiverStatus.CovenantCallingReward;
|
result |= QuestGiverStatus.CovenantCallingReward;
|
||||||
else if (quest.HasFlagEx(QuestFlagsEx.Legendary))
|
else if (quest.HasFlagEx(QuestFlagsEx.Legendary))
|
||||||
result |= QuestGiverStatus.LegendaryReward;
|
result |= QuestGiverStatus.LegendaryReward;
|
||||||
|
else if (quest.IsDailyOrWeekly())
|
||||||
|
result |= QuestGiverStatus.RepeatableReward;
|
||||||
else
|
else
|
||||||
result |= QuestGiverStatus.Reward;
|
result |= QuestGiverStatus.Reward;
|
||||||
break;
|
break;
|
||||||
@@ -2116,12 +2124,16 @@ namespace Game.Entities
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (quest.IsTurnIn() && CanTakeQuest(quest, false) && quest.IsRepeatable() && !quest.IsDailyOrWeekly() && !quest.IsMonthly())
|
if (quest.IsTurnIn() && CanTakeQuest(quest, false))
|
||||||
{
|
{
|
||||||
if (GetLevel() > (GetQuestLevel(quest) + WorldConfig.GetIntValue(WorldCfg.QuestLowLevelHideDiff)))
|
if (quest.IsRepeatable())
|
||||||
result |= QuestGiverStatus.RepeatableTurnin;
|
{
|
||||||
else
|
if (GetLevel() > (GetQuestLevel(quest) + WorldConfig.GetIntValue(WorldCfg.QuestLowLevelHideDiff)))
|
||||||
result |= QuestGiverStatus.TrivialRepeatableTurnin;
|
result |= QuestGiverStatus.RepeatableTurnin;
|
||||||
|
else
|
||||||
|
result |= QuestGiverStatus.TrivialRepeatableTurnin;
|
||||||
|
}
|
||||||
|
result |= quest.HasFlag(QuestFlags.HideRewardPoi) ? QuestGiverStatus.RewardCompleteNoPOI : QuestGiverStatus.RewardCompletePOI;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2143,12 +2155,14 @@ namespace Game.Entities
|
|||||||
bool isTrivial = GetLevel() > (GetQuestLevel(quest) + WorldConfig.GetIntValue(WorldCfg.QuestLowLevelHideDiff));
|
bool isTrivial = GetLevel() > (GetQuestLevel(quest) + WorldConfig.GetIntValue(WorldCfg.QuestLowLevelHideDiff));
|
||||||
if (quest.IsImportant())
|
if (quest.IsImportant())
|
||||||
result |= isTrivial ? QuestGiverStatus.TrivialImportantQuest : QuestGiverStatus.ImportantQuest;
|
result |= isTrivial ? QuestGiverStatus.TrivialImportantQuest : QuestGiverStatus.ImportantQuest;
|
||||||
|
else if (quest.IsMeta())
|
||||||
|
result |= isTrivial ? QuestGiverStatus.TrivialMetaQuest : QuestGiverStatus.MetaQuest;
|
||||||
else if (quest.GetQuestTag() == QuestTagType.CovenantCalling)
|
else if (quest.GetQuestTag() == QuestTagType.CovenantCalling)
|
||||||
result |= QuestGiverStatus.CovenantCallingQuest;
|
result |= QuestGiverStatus.CovenantCallingQuest;
|
||||||
else if (quest.HasFlagEx(QuestFlagsEx.Legendary))
|
else if (quest.HasFlagEx(QuestFlagsEx.Legendary))
|
||||||
result |= isTrivial ? QuestGiverStatus.TrivialLegendaryQuest : QuestGiverStatus.LegendaryQuest;
|
result |= isTrivial ? QuestGiverStatus.TrivialLegendaryQuest : QuestGiverStatus.LegendaryQuest;
|
||||||
else if (quest.IsDaily())
|
else if (quest.IsDailyOrWeekly())
|
||||||
result |= isTrivial ? QuestGiverStatus.TrivialDailyQuest : QuestGiverStatus.DailyQuest;
|
result |= isTrivial ? QuestGiverStatus.TrivialRepeatableQuest : QuestGiverStatus.RepeatableQuest;
|
||||||
else
|
else
|
||||||
result |= isTrivial ? QuestGiverStatus.Trivial : QuestGiverStatus.Quest;
|
result |= isTrivial ? QuestGiverStatus.Trivial : QuestGiverStatus.Quest;
|
||||||
}
|
}
|
||||||
@@ -3373,9 +3387,11 @@ namespace Game.Entities
|
|||||||
{
|
{
|
||||||
ObjectFieldData objMask = new();
|
ObjectFieldData objMask = new();
|
||||||
UnitData unitMask = new();
|
UnitData unitMask = new();
|
||||||
for (int i = 0; i < creature.m_unitData.NpcFlags.GetSize(); ++i)
|
|
||||||
if (creature.m_unitData.NpcFlags[i] != 0)
|
if (creature.m_unitData.NpcFlags != 0)
|
||||||
unitMask.MarkChanged(creature.m_unitData.NpcFlags, i);
|
unitMask.MarkChanged(m_unitData.NpcFlags);
|
||||||
|
if (creature.m_unitData.NpcFlags2 != 0)
|
||||||
|
unitMask.MarkChanged(m_unitData.NpcFlags2);
|
||||||
|
|
||||||
if (objMask.GetUpdateMask().IsAnySet() || unitMask.GetUpdateMask().IsAnySet())
|
if (objMask.GetUpdateMask().IsAnySet() || unitMask.GetUpdateMask().IsAnySet())
|
||||||
creature.BuildValuesUpdateForPlayerWithMask(udata, objMask.GetUpdateMask(), unitMask.GetUpdateMask(), this);
|
creature.BuildValuesUpdateForPlayerWithMask(udata, objMask.GetUpdateMask(), unitMask.GetUpdateMask(), this);
|
||||||
@@ -3396,7 +3412,7 @@ namespace Game.Entities
|
|||||||
{
|
{
|
||||||
ObjectFieldData objMask = new();
|
ObjectFieldData objMask = new();
|
||||||
UnitData unitMask = new();
|
UnitData unitMask = new();
|
||||||
unitMask.MarkChanged(m_unitData.NpcFlags, 0); // NpcFlags[0] has UNIT_NPC_FLAG_SPELLCLICK
|
unitMask.MarkChanged(m_unitData.NpcFlags); // NpcFlags has UNIT_NPC_FLAG_SPELLCLICK
|
||||||
creature.BuildValuesUpdateForPlayerWithMask(udata, objMask.GetUpdateMask(), unitMask.GetUpdateMask(), this);
|
creature.BuildValuesUpdateForPlayerWithMask(udata, objMask.GetUpdateMask(), unitMask.GetUpdateMask(), this);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2200,6 +2200,8 @@ namespace Game.Entities
|
|||||||
|
|
||||||
if (!GetSession().PlayerLogout())
|
if (!GetSession().PlayerLogout())
|
||||||
{
|
{
|
||||||
|
++m_newWorldCounter;
|
||||||
|
|
||||||
SuspendToken suspendToken = new();
|
SuspendToken suspendToken = new();
|
||||||
suspendToken.SequenceIndex = m_movementCounter; // not incrementing
|
suspendToken.SequenceIndex = m_movementCounter; // not incrementing
|
||||||
suspendToken.Reason = options.HasAnyFlag(TeleportToOptions.Seamless) ? 2 : 1u;
|
suspendToken.Reason = options.HasAnyFlag(TeleportToOptions.Seamless) ? 2 : 1u;
|
||||||
@@ -2946,7 +2948,8 @@ namespace Game.Entities
|
|||||||
PlayerInteractionType.Renown, PlayerInteractionType.BlackMarketAuctioneer, PlayerInteractionType.PerksProgramVendor,
|
PlayerInteractionType.Renown, PlayerInteractionType.BlackMarketAuctioneer, PlayerInteractionType.PerksProgramVendor,
|
||||||
PlayerInteractionType.ProfessionsCraftingOrder, PlayerInteractionType.Professions, PlayerInteractionType.ProfessionsCustomerOrder,
|
PlayerInteractionType.ProfessionsCraftingOrder, PlayerInteractionType.Professions, PlayerInteractionType.ProfessionsCustomerOrder,
|
||||||
PlayerInteractionType.TraitSystem, PlayerInteractionType.BarbersChoice, PlayerInteractionType.MajorFactionRenown,
|
PlayerInteractionType.TraitSystem, PlayerInteractionType.BarbersChoice, PlayerInteractionType.MajorFactionRenown,
|
||||||
PlayerInteractionType.PersonalTabardVendor
|
PlayerInteractionType.PersonalTabardVendor, PlayerInteractionType.ForgeMaster, PlayerInteractionType.CharacterBanker,
|
||||||
|
PlayerInteractionType.AccountBanker
|
||||||
};
|
};
|
||||||
|
|
||||||
PlayerInteractionType interactionType = GossipOptionNpcToInteractionType[(int)gossipOptionNpc];
|
PlayerInteractionType interactionType = GossipOptionNpcToInteractionType[(int)gossipOptionNpc];
|
||||||
@@ -6469,8 +6472,8 @@ namespace Game.Entities
|
|||||||
int offset = (areaEntry.AreaBit / PlayerConst.ExploredZonesBits);
|
int offset = (areaEntry.AreaBit / PlayerConst.ExploredZonesBits);
|
||||||
ulong val = 1ul << (areaEntry.AreaBit % PlayerConst.ExploredZonesBits);
|
ulong val = 1ul << (areaEntry.AreaBit % PlayerConst.ExploredZonesBits);
|
||||||
|
|
||||||
if (offset >= m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex].Size()
|
if (offset >= m_activePlayerData.BitVectors.GetValue().Values[(int)PlayerDataFlag.ExploredZonesIndex].Size()
|
||||||
|| (m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex][offset] & val) == 0)
|
|| (m_activePlayerData.BitVectors.GetValue().Values[(int)PlayerDataFlag.ExploredZonesIndex][offset] & val) == 0)
|
||||||
{
|
{
|
||||||
AddExploredZones(offset, val);
|
AddExploredZones(offset, val);
|
||||||
|
|
||||||
@@ -6521,12 +6524,14 @@ namespace Game.Entities
|
|||||||
|
|
||||||
public void AddExploredZones(int pos, ulong mask)
|
public void AddExploredZones(int pos, ulong mask)
|
||||||
{
|
{
|
||||||
SetUpdateFieldFlagValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.DataFlags, (int)PlayerDataFlag.ExploredZonesIndex, pos), mask);
|
BitVectors bitVectors = m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.BitVectors);
|
||||||
|
SetUpdateFieldFlagValue(bitVectors.ModifyValue(bitVectors.Values, (int)PlayerDataFlag.ExploredZonesIndex, pos), mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RemoveExploredZones(int pos, ulong mask)
|
public void RemoveExploredZones(int pos, ulong mask)
|
||||||
{
|
{
|
||||||
RemoveUpdateFieldFlagValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.DataFlags, (int)PlayerDataFlag.ExploredZonesIndex, pos), mask);
|
BitVectors bitVectors = m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.BitVectors);
|
||||||
|
RemoveUpdateFieldFlagValue(bitVectors.ModifyValue(bitVectors.Values, (int)PlayerDataFlag.ExploredZonesIndex, pos), mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool HasExploredZone(uint areaId)
|
public bool HasExploredZone(uint areaId)
|
||||||
@@ -6539,11 +6544,11 @@ namespace Game.Entities
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
int playerIndexOffset = area.AreaBit / PlayerConst.ExploredZonesBits;
|
int playerIndexOffset = area.AreaBit / PlayerConst.ExploredZonesBits;
|
||||||
if (playerIndexOffset >= m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex].Size())
|
if (playerIndexOffset >= m_activePlayerData.BitVectors.GetValue().Values[(int)PlayerDataFlag.ExploredZonesIndex].Size())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
ulong mask = 1ul << (area.AreaBit % PlayerConst.ExploredZonesBits);
|
ulong mask = 1ul << (area.AreaBit % PlayerConst.ExploredZonesBits);
|
||||||
return (m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex][playerIndexOffset] & mask) != 0;
|
return (m_activePlayerData.BitVectors.GetValue().Values[(int)PlayerDataFlag.ExploredZonesIndex][playerIndexOffset] & mask) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SendExplorationExperience(uint Area, uint Experience)
|
void SendExplorationExperience(uint Area, uint Experience)
|
||||||
@@ -7354,6 +7359,8 @@ namespace Game.Entities
|
|||||||
public void SetSemaphoreTeleportNear(bool semphsetting) { mSemaphoreTeleport_Near = semphsetting; }
|
public void SetSemaphoreTeleportNear(bool semphsetting) { mSemaphoreTeleport_Near = semphsetting; }
|
||||||
public void SetSemaphoreTeleportFar(bool semphsetting) { mSemaphoreTeleport_Far = semphsetting; }
|
public void SetSemaphoreTeleportFar(bool semphsetting) { mSemaphoreTeleport_Far = semphsetting; }
|
||||||
|
|
||||||
|
public int GetNewWorldCounter() { return m_newWorldCounter; }
|
||||||
|
|
||||||
public bool IsReagentBankUnlocked() { return HasPlayerFlagEx(PlayerFlagsEx.ReagentBankUnlocked); }
|
public bool IsReagentBankUnlocked() { return HasPlayerFlagEx(PlayerFlagsEx.ReagentBankUnlocked); }
|
||||||
public void UnlockReagentBank() { SetPlayerFlagEx(PlayerFlagsEx.ReagentBankUnlocked); }
|
public void UnlockReagentBank() { SetPlayerFlagEx(PlayerFlagsEx.ReagentBankUnlocked); }
|
||||||
|
|
||||||
|
|||||||
@@ -1714,12 +1714,12 @@ namespace Game.Entities
|
|||||||
|
|
||||||
public virtual void UpdateNearbyPlayersInteractions()
|
public virtual void UpdateNearbyPlayersInteractions()
|
||||||
{
|
{
|
||||||
for (int i = 0; i < m_unitData.NpcFlags.GetSize(); ++i)
|
if (m_unitData.NpcFlags != 0)
|
||||||
if (m_unitData.NpcFlags[i] != 0)
|
m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags);
|
||||||
{
|
if (m_unitData.NpcFlags2 != 0)
|
||||||
m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags, i);
|
m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags2);
|
||||||
ForceUpdateFieldChange();
|
|
||||||
}
|
ForceUpdateFieldChange();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -345,6 +345,36 @@ namespace Game.Entities
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SetEnableFullSpeedTurning(bool enable)
|
||||||
|
{
|
||||||
|
if (!IsPlayer())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (enable == HasUnitMovementFlag2(MovementFlag2.FullSpeedTurning))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (enable)
|
||||||
|
AddUnitMovementFlag2(MovementFlag2.FullSpeedTurning);
|
||||||
|
else
|
||||||
|
RemoveUnitMovementFlag2(MovementFlag2.FullSpeedTurning);
|
||||||
|
|
||||||
|
ServerOpcodes[] fullSpeedTurningOpcodeTable = [ServerOpcodes.MoveDisableFullSpeedTurning, ServerOpcodes.MoveEnableFullSpeedTurning];
|
||||||
|
Player playerMover = GetUnitBeingMoved()?.ToPlayer();
|
||||||
|
if (playerMover != null)
|
||||||
|
{
|
||||||
|
MoveSetFlag packet = new(fullSpeedTurningOpcodeTable[enable ? 1 : 0]);
|
||||||
|
packet.MoverGUID = GetGUID();
|
||||||
|
packet.SequenceIndex = m_movementCounter++;
|
||||||
|
playerMover.SendPacket(packet);
|
||||||
|
|
||||||
|
MoveUpdate moveUpdate = new();
|
||||||
|
moveUpdate.Status = m_movementInfo;
|
||||||
|
SendMessageToSet(moveUpdate, playerMover);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public bool SetCanTransitionBetweenSwimAndFly(bool enable)
|
public bool SetCanTransitionBetweenSwimAndFly(bool enable)
|
||||||
{
|
{
|
||||||
if (!IsTypeId(TypeId.Player))
|
if (!IsTypeId(TypeId.Player))
|
||||||
|
|||||||
@@ -867,17 +867,17 @@ namespace Game.Entities
|
|||||||
m_areaTrigger.Last()?.Remove();
|
m_areaTrigger.Last()?.Remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
public NPCFlags GetNpcFlags() { return (NPCFlags)m_unitData.NpcFlags[0]; }
|
public NPCFlags GetNpcFlags() { return (NPCFlags)m_unitData.NpcFlags.GetValue(); }
|
||||||
public bool HasNpcFlag(NPCFlags flags) { return (m_unitData.NpcFlags[0] & (uint)flags) != 0; }
|
public bool HasNpcFlag(NPCFlags flags) { return (m_unitData.NpcFlags & (uint)flags) != 0; }
|
||||||
public void SetNpcFlag(NPCFlags flags) { SetUpdateFieldFlagValue(ref m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags, 0), (uint)flags); }
|
public void SetNpcFlag(NPCFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags), (uint)flags); }
|
||||||
public void RemoveNpcFlag(NPCFlags flags) { RemoveUpdateFieldFlagValue(ref m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags, 0), (uint)flags); }
|
public void RemoveNpcFlag(NPCFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags), (uint)flags); }
|
||||||
public void ReplaceAllNpcFlags(NPCFlags flags) { SetUpdateFieldValue(ref m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags, 0), (uint)flags); }
|
public void ReplaceAllNpcFlags(NPCFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags), (uint)flags); }
|
||||||
|
|
||||||
public NPCFlags2 GetNpcFlags2() { return (NPCFlags2)m_unitData.NpcFlags[1]; }
|
public NPCFlags2 GetNpcFlags2() { return (NPCFlags2)m_unitData.NpcFlags2.GetValue(); }
|
||||||
public bool HasNpcFlag2(NPCFlags2 flags) { return (m_unitData.NpcFlags[1] & (uint)flags) != 0; }
|
public bool HasNpcFlag2(NPCFlags2 flags) { return (m_unitData.NpcFlags2 & (uint)flags) != 0; }
|
||||||
public void SetNpcFlag2(NPCFlags2 flags) { SetUpdateFieldFlagValue(ref m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags, 1), (uint)flags); }
|
public void SetNpcFlag2(NPCFlags2 flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags2), (uint)flags); }
|
||||||
public void RemoveNpcFlag2(NPCFlags2 flags) { RemoveUpdateFieldFlagValue(ref m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags, 1), (uint)flags); }
|
public void RemoveNpcFlag2(NPCFlags2 flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags2), (uint)flags); }
|
||||||
public void ReplaceAllNpcFlags2(NPCFlags2 flags) { SetUpdateFieldValue(ref m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags, 1), (uint)flags); }
|
public void ReplaceAllNpcFlags2(NPCFlags2 flags) { SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags2), (uint)flags); }
|
||||||
|
|
||||||
public bool IsVendor() { return HasNpcFlag(NPCFlags.Vendor); }
|
public bool IsVendor() { return HasNpcFlag(NPCFlags.Vendor); }
|
||||||
public bool IsTrainer() { return HasNpcFlag(NPCFlags.Trainer); }
|
public bool IsTrainer() { return HasNpcFlag(NPCFlags.Trainer); }
|
||||||
|
|||||||
@@ -657,8 +657,8 @@ namespace Game
|
|||||||
|
|
||||||
_gossipMenuAddonStorage.Clear();
|
_gossipMenuAddonStorage.Clear();
|
||||||
|
|
||||||
// 0 1
|
// 0 1 2
|
||||||
SQLResult result = DB.World.Query("SELECT MenuID, FriendshipFactionID FROM gossip_menu_addon");
|
SQLResult result = DB.World.Query("SELECT MenuID, FriendshipFactionID, LfgDungeonsID FROM gossip_menu_addon");
|
||||||
if (result.IsEmpty())
|
if (result.IsEmpty())
|
||||||
{
|
{
|
||||||
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 gossip_menu_addon IDs. DB table `gossip_menu_addon` is empty!");
|
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 gossip_menu_addon IDs. DB table `gossip_menu_addon` is empty!");
|
||||||
@@ -670,20 +670,30 @@ namespace Game
|
|||||||
uint menuID = result.Read<uint>(0);
|
uint menuID = result.Read<uint>(0);
|
||||||
GossipMenuAddon addon = new();
|
GossipMenuAddon addon = new();
|
||||||
addon.FriendshipFactionID = result.Read<int>(1);
|
addon.FriendshipFactionID = result.Read<int>(1);
|
||||||
|
addon.LfgDungeonsID = result.Read<uint>(2);
|
||||||
|
|
||||||
var faction = CliDB.FactionStorage.LookupByKey(addon.FriendshipFactionID);
|
if (addon.FriendshipFactionID != 0)
|
||||||
if (faction != null)
|
|
||||||
{
|
{
|
||||||
if (!CliDB.FriendshipReputationStorage.ContainsKey(faction.FriendshipRepID))
|
var faction = CliDB.FactionStorage.LookupByKey(addon.FriendshipFactionID);
|
||||||
|
if (faction != null)
|
||||||
{
|
{
|
||||||
Log.outError(LogFilter.Sql, $"Table gossip_menu_addon: ID {menuID} is using FriendshipFactionID {addon.FriendshipFactionID} referencing non-existing FriendshipRepID {faction.FriendshipRepID}");
|
if (!CliDB.FriendshipReputationStorage.ContainsKey(faction.FriendshipRepID))
|
||||||
|
{
|
||||||
|
Log.outError(LogFilter.Sql, $"Table gossip_menu_addon: ID {menuID} is using FriendshipFactionID {addon.FriendshipFactionID} referencing non-existing FriendshipRepID {faction.FriendshipRepID}");
|
||||||
|
addon.FriendshipFactionID = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Log.outError(LogFilter.Sql, $"Table gossip_menu_addon: ID {menuID} is using non-existing FriendshipFactionID {addon.FriendshipFactionID}");
|
||||||
addon.FriendshipFactionID = 0;
|
addon.FriendshipFactionID = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (addon.LfgDungeonsID != 0 && !CliDB.LFGDungeonsStorage.ContainsKey(addon.LfgDungeonsID))
|
||||||
{
|
{
|
||||||
Log.outError(LogFilter.Sql, $"Table gossip_menu_addon: ID {menuID} is using non-existing FriendshipFactionID {addon.FriendshipFactionID}");
|
Log.outError(LogFilter.Sql, $"Table gossip_menu_addon: ID {menuID} is using non-existing LfgDungeonsID {addon.LfgDungeonsID}");
|
||||||
addon.FriendshipFactionID = 0;
|
addon.LfgDungeonsID = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
_gossipMenuAddonStorage[menuID] = addon;
|
_gossipMenuAddonStorage[menuID] = addon;
|
||||||
@@ -3257,7 +3267,7 @@ namespace Game
|
|||||||
}
|
}
|
||||||
|
|
||||||
foreach (var unusedSpells in spellsByTrainer)
|
foreach (var unusedSpells in spellsByTrainer)
|
||||||
Log.outError(LogFilter.Sql, $"Table `trainer_spell` references non-existing trainer (TrainerId: {unusedSpells.Key}) for SpellId {unusedSpells.Value.SpellId}, ignoring");
|
Log.outError(LogFilter.Sql, $"Table `trainer_spell` references non-existing trainer (TrainerId: {unusedSpells.Key}) for SpellId {unusedSpells.Value.SpellId}, ignoring");
|
||||||
|
|
||||||
SQLResult trainerLocalesResult = DB.World.Query("SELECT Id, locale, Greeting_lang FROM trainer_locale");
|
SQLResult trainerLocalesResult = DB.World.Query("SELECT Id, locale, Greeting_lang FROM trainer_locale");
|
||||||
if (!trainerLocalesResult.IsEmpty())
|
if (!trainerLocalesResult.IsEmpty())
|
||||||
@@ -7055,7 +7065,7 @@ namespace Game
|
|||||||
//90 91 92 93 94 95 96 97
|
//90 91 92 93 94 95 96 97
|
||||||
"RewardCurrencyID1, RewardCurrencyQty1, RewardCurrencyID2, RewardCurrencyQty2, RewardCurrencyID3, RewardCurrencyQty3, RewardCurrencyID4, RewardCurrencyQty4, " +
|
"RewardCurrencyID1, RewardCurrencyQty1, RewardCurrencyID2, RewardCurrencyQty2, RewardCurrencyID3, RewardCurrencyQty3, RewardCurrencyID4, RewardCurrencyQty4, " +
|
||||||
//98 99 100 101 102 103 104 105 106
|
//98 99 100 101 102 103 104 105 106
|
||||||
"AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, TreasurePickerID, Expansion, ManagedWorldStateID, QuestSessionBonus, " +
|
"AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, ResetByScheduler, Expansion, ManagedWorldStateID, QuestSessionBonus, " +
|
||||||
//107 108 109 110 111 112 113 114 115
|
//107 108 109 110 111 112 113 114 115
|
||||||
"LogTitle, LogDescription, QuestDescription, AreaDescription, PortraitGiverText, PortraitGiverName, PortraitTurnInText, PortraitTurnInName, QuestCompletionLog " +
|
"LogTitle, LogDescription, QuestDescription, AreaDescription, PortraitGiverText, PortraitGiverName, PortraitTurnInText, PortraitTurnInName, QuestCompletionLog " +
|
||||||
" FROM quest_template");
|
" FROM quest_template");
|
||||||
@@ -7078,7 +7088,6 @@ namespace Game
|
|||||||
}
|
}
|
||||||
while (result.NextRow());
|
while (result.NextRow());
|
||||||
|
|
||||||
|
|
||||||
// Load `quest_reward_choice_items`
|
// Load `quest_reward_choice_items`
|
||||||
// 0 1 2 3 4 5 6
|
// 0 1 2 3 4 5 6
|
||||||
result = DB.World.Query("SELECT QuestID, Type1, Type2, Type3, Type4, Type5, Type6 FROM quest_reward_choice_items");
|
result = DB.World.Query("SELECT QuestID, Type1, Type2, Type3, Type4, Type5, Type6 FROM quest_reward_choice_items");
|
||||||
@@ -7255,6 +7264,107 @@ namespace Game
|
|||||||
} while (result.NextRow());
|
} while (result.NextRow());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Load `quest_description_conditional`
|
||||||
|
// 0 1 2 3 4
|
||||||
|
result = DB.World.Query("SELECT QuestId, PlayerConditionId, QuestgiverCreatureId, Text, locale FROM `quest_description_conditional` ORDER BY OrderIndex");
|
||||||
|
if (result.IsEmpty())
|
||||||
|
{
|
||||||
|
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 quest objectives. DB table `quest_objectives` is empty.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
uint questId = result.Read<uint>(0);
|
||||||
|
var quest = _questTemplates.LookupByKey(questId);
|
||||||
|
if (quest != null)
|
||||||
|
quest.LoadConditionalConditionalQuestDescription(result.GetFields());
|
||||||
|
else
|
||||||
|
Log.outError(LogFilter.Sql, "Table `quest_objectives` has objective for quest {0} but such quest does not exist", questId);
|
||||||
|
} while (result.NextRow());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Load `quest_request_items_conditional`
|
||||||
|
// 0 1 2 3 4
|
||||||
|
result = DB.World.Query("SELECT QuestId, PlayerConditionId, QuestgiverCreatureId, Text, locale FROM `quest_request_items_conditional` ORDER BY OrderIndex");
|
||||||
|
if (result.IsEmpty())
|
||||||
|
{
|
||||||
|
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 quest objectives. DB table `quest_objectives` is empty.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
uint questId = result.Read<uint>(0);
|
||||||
|
var quest = _questTemplates.LookupByKey(questId);
|
||||||
|
if (quest != null)
|
||||||
|
quest.LoadConditionalConditionalRequestItemsText(result.GetFields());
|
||||||
|
else
|
||||||
|
Log.outError(LogFilter.Sql, "Table `quest_objectives` has objective for quest {0} but such quest does not exist", questId);
|
||||||
|
} while (result.NextRow());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Load `quest_offer_reward_conditional`
|
||||||
|
// 0 1 2 3 4
|
||||||
|
result = DB.World.Query("SELECT QuestId, PlayerConditionId, QuestgiverCreatureId, Text, locale FROM `quest_offer_reward_conditional` ORDER BY OrderIndex");
|
||||||
|
if (result.IsEmpty())
|
||||||
|
{
|
||||||
|
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 quest objectives. DB table `quest_objectives` is empty.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
uint questId = result.Read<uint>(0);
|
||||||
|
var quest = _questTemplates.LookupByKey(questId);
|
||||||
|
if (quest != null)
|
||||||
|
quest.LoadConditionalConditionalOfferRewardText(result.GetFields());
|
||||||
|
else
|
||||||
|
Log.outError(LogFilter.Sql, "Table `quest_objectives` has objective for quest {0} but such quest does not exist", questId);
|
||||||
|
} while (result.NextRow());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load `quest_completion_log_conditional`
|
||||||
|
// 0 1 2 3 4
|
||||||
|
result = DB.World.Query("SELECT QuestId, PlayerConditionId, QuestgiverCreatureId, Text, locale FROM `quest_completion_log_conditional` ORDER BY OrderIndex");
|
||||||
|
if (result.IsEmpty())
|
||||||
|
{
|
||||||
|
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 quest objectives. DB table `quest_objectives` is empty.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
uint questId = result.Read<uint>(0);
|
||||||
|
var quest = _questTemplates.LookupByKey(questId);
|
||||||
|
if (quest != null)
|
||||||
|
quest.LoadConditionalConditionalQuestCompletionLog(result.GetFields());
|
||||||
|
else
|
||||||
|
Log.outError(LogFilter.Sql, "Table `quest_objectives` has objective for quest {0} but such quest does not exist", questId);
|
||||||
|
} while (result.NextRow());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load `quest_treasure_pickers`
|
||||||
|
result = DB.World.Query("SELECT QuestID, TreasurePickerID FROM `quest_treasure_pickers` ORDER BY OrderIndex");
|
||||||
|
if (result.IsEmpty())
|
||||||
|
{
|
||||||
|
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 quest objectives. DB table `quest_objectives` is empty.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
uint questId = result.Read<uint>(0);
|
||||||
|
var quest = _questTemplates.LookupByKey(questId);
|
||||||
|
if (quest != null)
|
||||||
|
quest.LoadTreasurePickers(result.GetFields());
|
||||||
|
else
|
||||||
|
Log.outError(LogFilter.Sql, "Table `quest_objectives` has objective for quest {0} but such quest does not exist", questId);
|
||||||
|
} while (result.NextRow());
|
||||||
|
}
|
||||||
|
|
||||||
// Load `quest_visual_effect` join table with quest_objectives because visual effects are based on objective ID (core stores objectives by their index in quest)
|
// Load `quest_visual_effect` join table with quest_objectives because visual effects are based on objective ID (core stores objectives by their index in quest)
|
||||||
// 0 1 2 3 4
|
// 0 1 2 3 4
|
||||||
result = DB.World.Query("SELECT v.ID, o.ID, o.QuestID, v.Index, v.VisualEffect FROM quest_visual_effect AS v LEFT JOIN quest_objectives AS o ON v.ID = o.ID ORDER BY v.Index DESC");
|
result = DB.World.Query("SELECT v.ID, o.ID, o.QuestID, v.Index, v.VisualEffect FROM quest_visual_effect AS v LEFT JOIN quest_objectives AS o ON v.ID = o.ID ORDER BY v.Index DESC");
|
||||||
|
|||||||
@@ -146,6 +146,7 @@ namespace Game.Groups
|
|||||||
stmt.AddValue(index++, (byte)m_raidDifficulty);
|
stmt.AddValue(index++, (byte)m_raidDifficulty);
|
||||||
stmt.AddValue(index++, (byte)m_legacyRaidDifficulty);
|
stmt.AddValue(index++, (byte)m_legacyRaidDifficulty);
|
||||||
stmt.AddValue(index++, m_masterLooterGuid.GetCounter());
|
stmt.AddValue(index++, m_masterLooterGuid.GetCounter());
|
||||||
|
stmt.AddValue(index++, (sbyte)m_pingRestriction);
|
||||||
|
|
||||||
DB.Characters.Execute(stmt);
|
DB.Characters.Execute(stmt);
|
||||||
|
|
||||||
@@ -191,6 +192,8 @@ namespace Game.Groups
|
|||||||
|
|
||||||
m_masterLooterGuid = ObjectGuid.Create(HighGuid.Player, field.Read<ulong>(16));
|
m_masterLooterGuid = ObjectGuid.Create(HighGuid.Player, field.Read<ulong>(16));
|
||||||
|
|
||||||
|
m_pingRestriction = (RestrictPingsTo)field.Read<sbyte>(18);
|
||||||
|
|
||||||
if (m_groupFlags.HasAnyFlag(GroupFlags.Lfg))
|
if (m_groupFlags.HasAnyFlag(GroupFlags.Lfg))
|
||||||
Global.LFGMgr._LoadFromDB(field, GetGUID());
|
Global.LFGMgr._LoadFromDB(field, GetGUID());
|
||||||
}
|
}
|
||||||
@@ -819,6 +822,8 @@ namespace Game.Groups
|
|||||||
|
|
||||||
partyUpdate.SequenceNum = player.NextGroupUpdateSequenceNumber(m_groupCategory);
|
partyUpdate.SequenceNum = player.NextGroupUpdateSequenceNumber(m_groupCategory);
|
||||||
|
|
||||||
|
partyUpdate.PingRestriction = m_pingRestriction;
|
||||||
|
|
||||||
partyUpdate.MyIndex = -1;
|
partyUpdate.MyIndex = -1;
|
||||||
byte index = 0;
|
byte index = 0;
|
||||||
for (var i = 0; i < m_memberSlots.Count; ++i, ++index)
|
for (var i = 0; i < m_memberSlots.Count; ++i, ++index)
|
||||||
@@ -1883,23 +1888,20 @@ namespace Game.Groups
|
|||||||
SendUpdate();
|
SendUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsRestrictPingsToAssistants()
|
public RestrictPingsTo GetRestrictPings()
|
||||||
{
|
{
|
||||||
return m_groupFlags.HasFlag(GroupFlags.RestrictPings);
|
return m_pingRestriction;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetRestrictPingsToAssistants(bool restrictPingsToAssistants)
|
public void SetRestrictPingsTo(RestrictPingsTo restrictTo)
|
||||||
{
|
{
|
||||||
if (restrictPingsToAssistants)
|
m_pingRestriction = restrictTo;
|
||||||
m_groupFlags |= GroupFlags.RestrictPings;
|
|
||||||
else
|
|
||||||
m_groupFlags &= ~GroupFlags.RestrictPings;
|
|
||||||
|
|
||||||
if (!IsBGGroup() && !IsBFGroup())
|
if (!IsBGGroup() && !IsBFGroup())
|
||||||
{
|
{
|
||||||
PreparedStatement stmt = CharacterDatabase.GetPreparedStatement(CharStatements.UPD_GROUP_TYPE);
|
PreparedStatement stmt = CharacterDatabase.GetPreparedStatement(CharStatements.UPD_GROUP_PING_RESTRICTION);
|
||||||
|
|
||||||
stmt.AddValue(0, (ushort)m_groupFlags);
|
stmt.AddValue(0, (sbyte)m_pingRestriction);
|
||||||
stmt.AddValue(1, m_dbStoreId);
|
stmt.AddValue(1, m_dbStoreId);
|
||||||
|
|
||||||
DB.Characters.Execute(stmt);
|
DB.Characters.Execute(stmt);
|
||||||
@@ -1982,6 +1984,8 @@ namespace Game.Groups
|
|||||||
uint m_activeMarkers;
|
uint m_activeMarkers;
|
||||||
|
|
||||||
CountdownInfo[] _countdowns = new CountdownInfo[3];
|
CountdownInfo[] _countdowns = new CountdownInfo[3];
|
||||||
|
|
||||||
|
RestrictPingsTo m_pingRestriction;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MemberSlot
|
public class MemberSlot
|
||||||
|
|||||||
@@ -107,8 +107,8 @@ namespace Game.Groups
|
|||||||
|
|
||||||
// 0 1 2 3 4 5 6 7 8 9
|
// 0 1 2 3 4 5 6 7 8 9
|
||||||
SQLResult result = DB.Characters.Query("SELECT g.leaderGuid, g.lootMethod, g.looterGuid, g.lootThreshold, g.icon1, g.icon2, g.icon3, g.icon4, g.icon5, g.icon6" +
|
SQLResult result = DB.Characters.Query("SELECT g.leaderGuid, g.lootMethod, g.looterGuid, g.lootThreshold, g.icon1, g.icon2, g.icon3, g.icon4, g.icon5, g.icon6" +
|
||||||
// 10 11 12 13 14 15 16 17 18 19
|
// 10 11 12 13 14 15 16 17 18 19 20
|
||||||
", g.icon7, g.icon8, g.groupType, g.difficulty, g.raiddifficulty, g.legacyRaidDifficulty, g.masterLooterGuid, g.guid, lfg.dungeon, lfg.state FROM `groups` g LEFT JOIN lfg_data lfg ON lfg.guid = g.guid ORDER BY g.guid ASC");
|
", g.icon7, g.icon8, g.groupType, g.difficulty, g.raiddifficulty, g.legacyRaidDifficulty, g.masterLooterGuid, g.guid, g.pingRestriction, lfg.dungeon, lfg.state FROM `groups` g LEFT JOIN lfg_data lfg ON lfg.guid = g.guid ORDER BY g.guid ASC");
|
||||||
if (result.IsEmpty())
|
if (result.IsEmpty())
|
||||||
{
|
{
|
||||||
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 group definitions. DB table `groups` is empty!");
|
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 group definitions. DB table `groups` is empty!");
|
||||||
|
|||||||
@@ -1239,7 +1239,6 @@ namespace Game.Guilds
|
|||||||
eventPacket.Name = player.GetName();
|
eventPacket.Name = player.GetName();
|
||||||
eventPacket.VirtualRealmAddress = Global.WorldMgr.GetVirtualRealmAddress();
|
eventPacket.VirtualRealmAddress = Global.WorldMgr.GetVirtualRealmAddress();
|
||||||
eventPacket.LoggedOn = loggedOn;
|
eventPacket.LoggedOn = loggedOn;
|
||||||
eventPacket.Mobile = false;
|
|
||||||
|
|
||||||
if (broadcast)
|
if (broadcast)
|
||||||
BroadcastPacket(eventPacket);
|
BroadcastPacket(eventPacket);
|
||||||
|
|||||||
@@ -982,7 +982,7 @@ namespace Game
|
|||||||
SendPacket(commodityQuoteResult);
|
SendPacket(commodityQuoteResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendAuctionHello(ObjectGuid guid, Creature unit)
|
public void SendAuctionHello(ObjectGuid guid, Unit unit)
|
||||||
{
|
{
|
||||||
if (GetPlayer().GetLevel() < WorldConfig.GetIntValue(WorldCfg.AuctionLevelReq))
|
if (GetPlayer().GetLevel() < WorldConfig.GetIntValue(WorldCfg.AuctionLevelReq))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,6 +21,9 @@ namespace Game
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (packet.BankType != BankType.Character)
|
||||||
|
return;
|
||||||
|
|
||||||
Item item = GetPlayer().GetItemByPos(packet.Bag, packet.Slot);
|
Item item = GetPlayer().GetItemByPos(packet.Bag, packet.Slot);
|
||||||
if (item == null)
|
if (item == null)
|
||||||
return;
|
return;
|
||||||
@@ -45,19 +48,40 @@ namespace Game
|
|||||||
}
|
}
|
||||||
|
|
||||||
[WorldPacketHandler(ClientOpcodes.BankerActivate, Processing = PacketProcessing.Inplace)]
|
[WorldPacketHandler(ClientOpcodes.BankerActivate, Processing = PacketProcessing.Inplace)]
|
||||||
void HandleBankerActivate(Hello packet)
|
void HandleBankerActivate(BankerActivate bankerActivate)
|
||||||
{
|
{
|
||||||
Creature unit = GetPlayer().GetNPCIfCanInteractWith(packet.Unit, NPCFlags.Banker, NPCFlags2.None);
|
if (bankerActivate.InteractionType != PlayerInteractionType.Banker)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Creature unit = GetPlayer().GetNPCIfCanInteractWith(bankerActivate.Banker, NPCFlags.AccountBanker | NPCFlags.Banker, NPCFlags2.None);
|
||||||
if (unit == null)
|
if (unit == null)
|
||||||
{
|
{
|
||||||
Log.outError(LogFilter.Network, "HandleBankerActivate: {0} not found or you can not interact with him.", packet.Unit.ToString());
|
Log.outError(LogFilter.Network, $"HandleBankerActivate: {bankerActivate.Banker} not found or you can not interact with him.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch (bankerActivate.InteractionType)
|
||||||
|
{
|
||||||
|
case PlayerInteractionType.Banker:
|
||||||
|
if (!unit.HasNpcFlag(NPCFlags.AccountBanker) || !unit.HasNpcFlag(NPCFlags.Banker))
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
case PlayerInteractionType.CharacterBanker:
|
||||||
|
if (!unit.HasNpcFlag(NPCFlags.Banker))
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
case PlayerInteractionType.AccountBanker:
|
||||||
|
if (!unit.HasNpcFlag(NPCFlags.AccountBanker))
|
||||||
|
return;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (GetPlayer().HasUnitState(UnitState.Died))
|
if (GetPlayer().HasUnitState(UnitState.Died))
|
||||||
GetPlayer().RemoveAurasByType(AuraType.FeignDeath);
|
GetPlayer().RemoveAurasByType(AuraType.FeignDeath);
|
||||||
|
|
||||||
SendShowBank(packet.Unit);
|
SendShowBank(bankerActivate.Banker, bankerActivate.InteractionType);
|
||||||
}
|
}
|
||||||
|
|
||||||
[WorldPacketHandler(ClientOpcodes.AutostoreBankItem, Processing = PacketProcessing.Inplace)]
|
[WorldPacketHandler(ClientOpcodes.AutostoreBankItem, Processing = PacketProcessing.Inplace)]
|
||||||
@@ -281,13 +305,13 @@ namespace Game
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendShowBank(ObjectGuid guid)
|
public void SendShowBank(ObjectGuid guid, PlayerInteractionType interactionType)
|
||||||
{
|
{
|
||||||
_player.PlayerTalkClass.GetInteractionData().Reset();
|
_player.PlayerTalkClass.GetInteractionData().Reset();
|
||||||
_player.PlayerTalkClass.GetInteractionData().SourceGuid = guid;
|
_player.PlayerTalkClass.GetInteractionData().SourceGuid = guid;
|
||||||
NPCInteractionOpenResult npcInteraction = new();
|
NPCInteractionOpenResult npcInteraction = new();
|
||||||
npcInteraction.Npc = guid;
|
npcInteraction.Npc = guid;
|
||||||
npcInteraction.InteractionType = PlayerInteractionType.Banker;
|
npcInteraction.InteractionType = interactionType;
|
||||||
npcInteraction.Success = true;
|
npcInteraction.Success = true;
|
||||||
SendPacket(npcInteraction);
|
SendPacket(npcInteraction);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ namespace Game
|
|||||||
{
|
{
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
EnumCharactersResult.CharacterInfo charInfo = new(result.GetFields());
|
EnumCharactersResult.CharacterInfoBasic charInfo = new(result.GetFields());
|
||||||
|
|
||||||
var customizationsForChar = customizations.LookupByKey(charInfo.Guid.GetCounter());
|
var customizationsForChar = customizations.LookupByKey(charInfo.Guid.GetCounter());
|
||||||
if (!customizationsForChar.Empty())
|
if (!customizationsForChar.Empty())
|
||||||
@@ -149,7 +149,7 @@ namespace Game
|
|||||||
{
|
{
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
EnumCharactersResult.CharacterInfo charInfo = new(result.GetFields());
|
EnumCharactersResult.CharacterInfoBasic charInfo = new(result.GetFields());
|
||||||
|
|
||||||
Log.outInfo(LogFilter.Network, "Loading undeleted char guid {0} from account {1}.", charInfo.Guid.ToString(), GetAccountId());
|
Log.outInfo(LogFilter.Network, "Loading undeleted char guid {0} from account {1}.", charInfo.Guid.ToString(), GetAccountId());
|
||||||
|
|
||||||
|
|||||||
@@ -646,8 +646,24 @@ namespace Game
|
|||||||
if (group == null)
|
if (group == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (group.IsRestrictPingsToAssistants() && !group.IsLeader(player.GetGUID()) && !group.IsAssistant(player.GetGUID()))
|
if (group.IsLeader(player.GetGUID()))
|
||||||
return false;
|
return true;
|
||||||
|
|
||||||
|
switch (group.GetRestrictPings())
|
||||||
|
{
|
||||||
|
case RestrictPingsTo.None:
|
||||||
|
return true;
|
||||||
|
case RestrictPingsTo.Lead:
|
||||||
|
return false;
|
||||||
|
case RestrictPingsTo.Assist:
|
||||||
|
if (!group.IsAssistant(player.GetGUID()))
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case RestrictPingsTo.TankHealer:
|
||||||
|
if (!group.GetLfgRoles(player.GetGUID()).HasAnyFlag(LfgRoles.Tank | LfgRoles.Healer))
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -662,7 +678,7 @@ namespace Game
|
|||||||
if (!group.IsLeader(GetPlayer().GetGUID()))
|
if (!group.IsLeader(GetPlayer().GetGUID()))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
group.SetRestrictPingsToAssistants(setRestrictPingsToAssistants.RestrictPingsToAssistants);
|
group.SetRestrictPingsTo(setRestrictPingsToAssistants.RestrictTo);
|
||||||
}
|
}
|
||||||
|
|
||||||
[WorldPacketHandler(ClientOpcodes.SendPingUnit)]
|
[WorldPacketHandler(ClientOpcodes.SendPingUnit)]
|
||||||
@@ -709,6 +725,7 @@ namespace Game
|
|||||||
broadcastPingWorldPoint.Point = pingWorldPoint.Point;
|
broadcastPingWorldPoint.Point = pingWorldPoint.Point;
|
||||||
broadcastPingWorldPoint.Type = pingWorldPoint.Type;
|
broadcastPingWorldPoint.Type = pingWorldPoint.Type;
|
||||||
broadcastPingWorldPoint.PinFrameID = pingWorldPoint.PinFrameID;
|
broadcastPingWorldPoint.PinFrameID = pingWorldPoint.PinFrameID;
|
||||||
|
broadcastPingWorldPoint.Transport = pingWorldPoint.Transport;
|
||||||
broadcastPingWorldPoint.Write();
|
broadcastPingWorldPoint.Write();
|
||||||
|
|
||||||
for (GroupReference itr = group.GetFirstMember(); itr != null; itr = itr.Next())
|
for (GroupReference itr = group.GetFirstMember(); itr != null; itr = itr.Next())
|
||||||
|
|||||||
@@ -1062,6 +1062,13 @@ namespace Game
|
|||||||
GetPlayer().DestroyItem(item.GetBagSlot(), item.GetSlot(), true);
|
GetPlayer().DestroyItem(item.GetBagSlot(), item.GetSlot(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HandleSortAccountBankBags(SortAccountBankBags sortAccountBankBags)
|
||||||
|
{
|
||||||
|
// TODO: Implement sorting
|
||||||
|
// Placeholder to prevent completely locking out bags clientside
|
||||||
|
SendPacket(new BagCleanupFinished());
|
||||||
|
}
|
||||||
|
|
||||||
[WorldPacketHandler(ClientOpcodes.SortBags, Processing = PacketProcessing.Inplace)]
|
[WorldPacketHandler(ClientOpcodes.SortBags, Processing = PacketProcessing.Inplace)]
|
||||||
void HandleSortBags(SortBags sortBags)
|
void HandleSortBags(SortBags sortBags)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -462,6 +462,7 @@ namespace Game
|
|||||||
packet.MapID = loc.Location.GetMapId();
|
packet.MapID = loc.Location.GetMapId();
|
||||||
packet.Loc.Pos = loc.Location;
|
packet.Loc.Pos = loc.Location;
|
||||||
packet.Reason = (uint)(!_player.IsBeingTeleportedSeamlessly() ? NewWorldReason.Normal : NewWorldReason.Seamless);
|
packet.Reason = (uint)(!_player.IsBeingTeleportedSeamlessly() ? NewWorldReason.Normal : NewWorldReason.Seamless);
|
||||||
|
packet.Counter = _player.GetNewWorldCounter();
|
||||||
SendPacket(packet);
|
SendPacket(packet);
|
||||||
|
|
||||||
if (_player.IsBeingTeleportedSeamlessly())
|
if (_player.IsBeingTeleportedSeamlessly())
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ namespace Game.Networking.Packets
|
|||||||
public override void Write()
|
public override void Write()
|
||||||
{
|
{
|
||||||
_worldPacket.WritePackedGuid(TriggerGUID);
|
_worldPacket.WritePackedGuid(TriggerGUID);
|
||||||
|
_worldPacket.WritePackedGuid(Unused_1100);
|
||||||
|
|
||||||
_worldPacket.WriteBit(AreaTriggerSpline != null);
|
_worldPacket.WriteBit(AreaTriggerSpline != null);
|
||||||
_worldPacket.WriteBit(AreaTriggerOrbit != null);
|
_worldPacket.WriteBit(AreaTriggerOrbit != null);
|
||||||
@@ -74,6 +75,7 @@ namespace Game.Networking.Packets
|
|||||||
public AreaTriggerOrbitInfo AreaTriggerOrbit;
|
public AreaTriggerOrbitInfo AreaTriggerOrbit;
|
||||||
public AreaTriggerMovementScriptInfo? AreaTriggerMovementScript;
|
public AreaTriggerMovementScriptInfo? AreaTriggerMovementScript;
|
||||||
public ObjectGuid TriggerGUID;
|
public ObjectGuid TriggerGUID;
|
||||||
|
public ObjectGuid Unused_1100;
|
||||||
}
|
}
|
||||||
|
|
||||||
class AreaTriggerPlaySpellVisual : ServerPacket
|
class AreaTriggerPlaySpellVisual : ServerPacket
|
||||||
|
|||||||
@@ -55,15 +55,15 @@ namespace Game.Networking.Packets
|
|||||||
uint itemClassFilterCount = _worldPacket.ReadBits<uint>(3);
|
uint itemClassFilterCount = _worldPacket.ReadBits<uint>(3);
|
||||||
uint sortSize = _worldPacket.ReadBits<uint>(2);
|
uint sortSize = _worldPacket.ReadBits<uint>(2);
|
||||||
|
|
||||||
for (var i = 0; i < sortSize; ++i)
|
|
||||||
Sorts[i] = new AuctionSortDef(_worldPacket);
|
|
||||||
|
|
||||||
if (TaintedBy.HasValue)
|
if (TaintedBy.HasValue)
|
||||||
TaintedBy.Value.Read(_worldPacket);
|
TaintedBy.Value.Read(_worldPacket);
|
||||||
|
|
||||||
Name = _worldPacket.ReadString(nameLength);
|
Name = _worldPacket.ReadString(nameLength);
|
||||||
for (var i = 0; i < itemClassFilterCount; ++i)// AuctionListFilterClass filterClass in ItemClassFilters)
|
for (var i = 0; i < itemClassFilterCount; ++i)
|
||||||
ItemClassFilters[i] = new AuctionListFilterClass(_worldPacket);
|
ItemClassFilters[i] = new AuctionListFilterClass(_worldPacket);
|
||||||
|
|
||||||
|
for (var i = 0; i < sortSize; ++i)
|
||||||
|
Sorts[i] = new AuctionSortDef(_worldPacket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,14 +141,14 @@ namespace Game.Networking.Packets
|
|||||||
uint auctionIDCount = _worldPacket.ReadBits<uint>(7);
|
uint auctionIDCount = _worldPacket.ReadBits<uint>(7);
|
||||||
uint sortCount = _worldPacket.ReadBits<uint>(2);
|
uint sortCount = _worldPacket.ReadBits<uint>(2);
|
||||||
|
|
||||||
for (var i = 0; i < sortCount; ++i)
|
|
||||||
Sorts[i] = new AuctionSortDef(_worldPacket);
|
|
||||||
|
|
||||||
if (TaintedBy.HasValue)
|
if (TaintedBy.HasValue)
|
||||||
TaintedBy.Value.Read(_worldPacket);
|
TaintedBy.Value.Read(_worldPacket);
|
||||||
|
|
||||||
for (var i = 0; i < auctionIDCount; ++i)
|
for (var i = 0; i < auctionIDCount; ++i)
|
||||||
AuctionItemIDs[i] = _worldPacket.ReadUInt32();
|
AuctionItemIDs[i] = _worldPacket.ReadUInt32();
|
||||||
|
|
||||||
|
for (var i = 0; i < sortCount; ++i)
|
||||||
|
Sorts[i] = new AuctionSortDef(_worldPacket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,14 +170,14 @@ namespace Game.Networking.Packets
|
|||||||
uint bucketKeysCount = _worldPacket.ReadBits<uint>(7);
|
uint bucketKeysCount = _worldPacket.ReadBits<uint>(7);
|
||||||
uint sortCount = _worldPacket.ReadBits<uint>(2);
|
uint sortCount = _worldPacket.ReadBits<uint>(2);
|
||||||
|
|
||||||
for (var i = 0; i < sortCount; ++i)
|
|
||||||
Sorts[i] = new AuctionSortDef(_worldPacket);
|
|
||||||
|
|
||||||
if (TaintedBy.HasValue)
|
if (TaintedBy.HasValue)
|
||||||
TaintedBy.Value.Read(_worldPacket);
|
TaintedBy.Value.Read(_worldPacket);
|
||||||
|
|
||||||
for (var i = 0; i < bucketKeysCount; ++i)
|
for (var i = 0; i < bucketKeysCount; ++i)
|
||||||
BucketKeys[i] = new AuctionBucketKey(_worldPacket);
|
BucketKeys[i] = new AuctionBucketKey(_worldPacket);
|
||||||
|
|
||||||
|
for (var i = 0; i < sortCount; ++i)
|
||||||
|
Sorts[i] = new AuctionSortDef(_worldPacket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,13 +201,14 @@ namespace Game.Networking.Packets
|
|||||||
TaintedBy = new();
|
TaintedBy = new();
|
||||||
|
|
||||||
uint sortCount = _worldPacket.ReadBits<uint>(2);
|
uint sortCount = _worldPacket.ReadBits<uint>(2);
|
||||||
for (var i = 0; i < sortCount; ++i)
|
|
||||||
Sorts[i] = new AuctionSortDef(_worldPacket);
|
|
||||||
|
|
||||||
BucketKey = new AuctionBucketKey(_worldPacket);
|
BucketKey = new AuctionBucketKey(_worldPacket);
|
||||||
|
|
||||||
if (TaintedBy.HasValue)
|
if (TaintedBy.HasValue)
|
||||||
TaintedBy.Value.Read(_worldPacket);
|
TaintedBy.Value.Read(_worldPacket);
|
||||||
|
|
||||||
|
for (var i = 0; i < sortCount; ++i)
|
||||||
|
Sorts[i] = new AuctionSortDef(_worldPacket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -234,11 +235,11 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
uint sortCount = _worldPacket.ReadBits<uint>(2);
|
uint sortCount = _worldPacket.ReadBits<uint>(2);
|
||||||
|
|
||||||
for (var i = 0; i < sortCount; ++i)
|
|
||||||
Sorts[i] = new AuctionSortDef(_worldPacket);
|
|
||||||
|
|
||||||
if (TaintedBy.HasValue)
|
if (TaintedBy.HasValue)
|
||||||
TaintedBy.Value.Read(_worldPacket);
|
TaintedBy.Value.Read(_worldPacket);
|
||||||
|
|
||||||
|
for (var i = 0; i < sortCount; ++i)
|
||||||
|
Sorts[i] = new AuctionSortDef(_worldPacket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -260,11 +261,11 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
uint sortCount = _worldPacket.ReadBits<uint>(2);
|
uint sortCount = _worldPacket.ReadBits<uint>(2);
|
||||||
|
|
||||||
for (var i = 0; i < sortCount; ++i)
|
|
||||||
Sorts[i] = new AuctionSortDef(_worldPacket);
|
|
||||||
|
|
||||||
if (TaintedBy.HasValue)
|
if (TaintedBy.HasValue)
|
||||||
TaintedBy.Value.Read(_worldPacket);
|
TaintedBy.Value.Read(_worldPacket);
|
||||||
|
|
||||||
|
for (var i = 0; i < sortCount; ++i)
|
||||||
|
Sorts[i] = new AuctionSortDef(_worldPacket);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -357,12 +357,12 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
public override void Read()
|
public override void Read()
|
||||||
{
|
{
|
||||||
Serial = (ConnectToSerial)_worldPacket.ReadUInt32();
|
|
||||||
Con = _worldPacket.ReadUInt8();
|
Con = _worldPacket.ReadUInt8();
|
||||||
|
Serial = (ConnectToSerial)_worldPacket.ReadUInt32();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ConnectToSerial Serial;
|
public ConnectToSerial Serial;
|
||||||
byte Con;
|
public byte Con;
|
||||||
}
|
}
|
||||||
|
|
||||||
class EnterEncryptedMode : ServerPacket
|
class EnterEncryptedMode : ServerPacket
|
||||||
|
|||||||
@@ -84,13 +84,13 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
public override void Read()
|
public override void Read()
|
||||||
{
|
{
|
||||||
Tier = _worldPacket.ReadInt32();
|
|
||||||
AzeritePowerID = _worldPacket.ReadInt32();
|
|
||||||
ContainerSlot = _worldPacket.ReadUInt8();
|
ContainerSlot = _worldPacket.ReadUInt8();
|
||||||
Slot = _worldPacket.ReadUInt8();
|
Slot = _worldPacket.ReadUInt8();
|
||||||
|
Tier = _worldPacket.ReadUInt8();
|
||||||
|
AzeritePowerID = _worldPacket.ReadInt32();
|
||||||
}
|
}
|
||||||
|
|
||||||
public int Tier;
|
public byte Tier;
|
||||||
public int AzeritePowerID;
|
public int AzeritePowerID;
|
||||||
public byte ContainerSlot;
|
public byte ContainerSlot;
|
||||||
public byte Slot;
|
public byte Slot;
|
||||||
|
|||||||
@@ -2,12 +2,14 @@
|
|||||||
// Licensed under the GNU GENERAL PUBLIC LICENSE. See LICENSE file in the project root for full license information.
|
// Licensed under the GNU GENERAL PUBLIC LICENSE. See LICENSE file in the project root for full license information.
|
||||||
|
|
||||||
using Game.Entities;
|
using Game.Entities;
|
||||||
|
using Framework.Constants;
|
||||||
|
|
||||||
namespace Game.Networking.Packets
|
namespace Game.Networking.Packets
|
||||||
{
|
{
|
||||||
public class AutoBankItem : ClientPacket
|
public class AutoBankItem : ClientPacket
|
||||||
{
|
{
|
||||||
public InvUpdate Inv;
|
public InvUpdate Inv;
|
||||||
|
public BankType BankType;
|
||||||
public byte Bag;
|
public byte Bag;
|
||||||
public byte Slot;
|
public byte Slot;
|
||||||
|
|
||||||
@@ -16,6 +18,7 @@ namespace Game.Networking.Packets
|
|||||||
public override void Read()
|
public override void Read()
|
||||||
{
|
{
|
||||||
Inv = new InvUpdate(_worldPacket);
|
Inv = new InvUpdate(_worldPacket);
|
||||||
|
BankType = (BankType)_worldPacket.ReadInt8();
|
||||||
Bag = _worldPacket.ReadUInt8();
|
Bag = _worldPacket.ReadUInt8();
|
||||||
Slot = _worldPacket.ReadUInt8();
|
Slot = _worldPacket.ReadUInt8();
|
||||||
}
|
}
|
||||||
@@ -94,4 +97,18 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
public ObjectGuid Banker;
|
public ObjectGuid Banker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class BankerActivate : ClientPacket
|
||||||
|
{
|
||||||
|
public ObjectGuid Banker;
|
||||||
|
public PlayerInteractionType InteractionType;
|
||||||
|
|
||||||
|
public BankerActivate(WorldPacket packet) : base(packet) { }
|
||||||
|
|
||||||
|
public override void Read()
|
||||||
|
{
|
||||||
|
Banker = _worldPacket.ReadPackedGuid();
|
||||||
|
InteractionType = (PlayerInteractionType)_worldPacket.ReadInt32();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -177,7 +177,7 @@ namespace Game.Networking.Packets
|
|||||||
_worldPacket.WriteUInt64(EventID);
|
_worldPacket.WriteUInt64(EventID);
|
||||||
_worldPacket.WriteUInt8((byte)GetEventType);
|
_worldPacket.WriteUInt8((byte)GetEventType);
|
||||||
_worldPacket.WriteInt32(TextureID);
|
_worldPacket.WriteInt32(TextureID);
|
||||||
_worldPacket.WriteUInt32((uint)Flags);
|
_worldPacket.WriteUInt16((ushort)Flags);
|
||||||
Date.Write(_worldPacket);
|
Date.Write(_worldPacket);
|
||||||
LockDate.Write(_worldPacket);
|
LockDate.Write(_worldPacket);
|
||||||
_worldPacket.WriteUInt64(EventGuildID);
|
_worldPacket.WriteUInt64(EventGuildID);
|
||||||
@@ -216,7 +216,7 @@ namespace Game.Networking.Packets
|
|||||||
{
|
{
|
||||||
_worldPacket.WriteUInt64(EventID);
|
_worldPacket.WriteUInt64(EventID);
|
||||||
Date.Write(_worldPacket);
|
Date.Write(_worldPacket);
|
||||||
_worldPacket.WriteUInt32((uint)Flags);
|
_worldPacket.WriteUInt16((ushort)Flags);
|
||||||
_worldPacket.WriteUInt8((byte)EventType);
|
_worldPacket.WriteUInt8((byte)EventType);
|
||||||
_worldPacket.WriteInt32(TextureID);
|
_worldPacket.WriteInt32(TextureID);
|
||||||
_worldPacket.WriteUInt64(EventClubID);
|
_worldPacket.WriteUInt64(EventClubID);
|
||||||
@@ -229,6 +229,7 @@ namespace Game.Networking.Packets
|
|||||||
_worldPacket.WritePackedGuid(OwnerGuid);
|
_worldPacket.WritePackedGuid(OwnerGuid);
|
||||||
|
|
||||||
_worldPacket.WriteBits(EventName.GetByteCount(), 8);
|
_worldPacket.WriteBits(EventName.GetByteCount(), 8);
|
||||||
|
_worldPacket.WriteBit(Unknown_1100);
|
||||||
_worldPacket.FlushBits();
|
_worldPacket.FlushBits();
|
||||||
_worldPacket.WriteString(EventName);
|
_worldPacket.WriteString(EventName);
|
||||||
}
|
}
|
||||||
@@ -245,6 +246,7 @@ namespace Game.Networking.Packets
|
|||||||
public CalendarEventType EventType;
|
public CalendarEventType EventType;
|
||||||
public CalendarModerationRank ModeratorStatus;
|
public CalendarModerationRank ModeratorStatus;
|
||||||
public string EventName;
|
public string EventName;
|
||||||
|
public bool Unknown_1100;
|
||||||
}
|
}
|
||||||
|
|
||||||
class CalendarInvitePkt : ClientPacket
|
class CalendarInvitePkt : ClientPacket
|
||||||
@@ -390,7 +392,7 @@ namespace Game.Networking.Packets
|
|||||||
OriginalDate.Write(_worldPacket);
|
OriginalDate.Write(_worldPacket);
|
||||||
Date.Write(_worldPacket);
|
Date.Write(_worldPacket);
|
||||||
LockDate.Write(_worldPacket);
|
LockDate.Write(_worldPacket);
|
||||||
_worldPacket.WriteUInt32((uint)Flags);
|
_worldPacket.WriteUInt16((ushort)Flags);
|
||||||
_worldPacket.WriteInt32(TextureID);
|
_worldPacket.WriteInt32(TextureID);
|
||||||
_worldPacket.WriteUInt8((byte)EventType);
|
_worldPacket.WriteUInt8((byte)EventType);
|
||||||
|
|
||||||
@@ -794,7 +796,7 @@ namespace Game.Networking.Packets
|
|||||||
TextureID = data.ReadUInt32();
|
TextureID = data.ReadUInt32();
|
||||||
Time = new();
|
Time = new();
|
||||||
Time.Read(data);
|
Time.Read(data);
|
||||||
Flags = data.ReadUInt32();
|
Flags = data.ReadUInt16();
|
||||||
|
|
||||||
byte titleLen = data.ReadBits<byte>(8);
|
byte titleLen = data.ReadBits<byte>(8);
|
||||||
ushort descLen = data.ReadBits<ushort>(11);
|
ushort descLen = data.ReadBits<ushort>(11);
|
||||||
@@ -811,7 +813,7 @@ namespace Game.Networking.Packets
|
|||||||
public byte EventType;
|
public byte EventType;
|
||||||
public uint TextureID;
|
public uint TextureID;
|
||||||
public WowTime Time;
|
public WowTime Time;
|
||||||
public uint Flags;
|
public ushort Flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct CalendarSendCalendarInviteInfo
|
struct CalendarSendCalendarInviteInfo
|
||||||
@@ -859,7 +861,7 @@ namespace Game.Networking.Packets
|
|||||||
data.WriteUInt64(EventID);
|
data.WriteUInt64(EventID);
|
||||||
data.WriteUInt8((byte)EventType);
|
data.WriteUInt8((byte)EventType);
|
||||||
Date.Write(data);
|
Date.Write(data);
|
||||||
data.WriteUInt32((uint)Flags);
|
data.WriteUInt16((ushort)Flags);
|
||||||
data.WriteInt32(TextureID);
|
data.WriteInt32(TextureID);
|
||||||
data.WriteUInt64(EventClubID);
|
data.WriteUInt64(EventClubID);
|
||||||
data.WritePackedGuid(OwnerGuid);
|
data.WritePackedGuid(OwnerGuid);
|
||||||
|
|||||||
@@ -27,17 +27,21 @@ namespace Game.Networking.Packets
|
|||||||
public override void Write()
|
public override void Write()
|
||||||
{
|
{
|
||||||
_worldPacket.WriteBit(Success);
|
_worldPacket.WriteBit(Success);
|
||||||
|
_worldPacket.WriteBit(Realmless);
|
||||||
_worldPacket.WriteBit(IsDeletedCharacters);
|
_worldPacket.WriteBit(IsDeletedCharacters);
|
||||||
_worldPacket.WriteBit(IsNewPlayerRestrictionSkipped);
|
_worldPacket.WriteBit(IsNewPlayerRestrictionSkipped);
|
||||||
_worldPacket.WriteBit(IsNewPlayerRestricted);
|
_worldPacket.WriteBit(IsNewPlayerRestricted);
|
||||||
_worldPacket.WriteBit(IsNewPlayer);
|
_worldPacket.WriteBit(IsNewPlayer);
|
||||||
_worldPacket.WriteBit(IsTrialAccountRestricted);
|
_worldPacket.WriteBit(IsTrialAccountRestricted);
|
||||||
_worldPacket.WriteBit(DisabledClassesMask.HasValue);
|
_worldPacket.WriteBit(DisabledClassesMask.HasValue);
|
||||||
|
_worldPacket.WriteBit(DontCreateCharacterDisplays);
|
||||||
_worldPacket.WriteInt32(Characters.Count);
|
_worldPacket.WriteInt32(Characters.Count);
|
||||||
|
_worldPacket.WriteInt32(RegionwideCharacters.Count);
|
||||||
_worldPacket.WriteInt32(MaxCharacterLevel);
|
_worldPacket.WriteInt32(MaxCharacterLevel);
|
||||||
_worldPacket.WriteInt32(RaceUnlockData.Count);
|
_worldPacket.WriteInt32(RaceUnlockData.Count);
|
||||||
_worldPacket.WriteInt32(UnlockedConditionalAppearances.Count);
|
_worldPacket.WriteInt32(UnlockedConditionalAppearances.Count);
|
||||||
_worldPacket.WriteInt32(RaceLimitDisables.Count);
|
_worldPacket.WriteInt32(RaceLimitDisables.Count);
|
||||||
|
_worldPacket.WriteInt32(WarbandGroups.Count);
|
||||||
|
|
||||||
if (DisabledClassesMask.HasValue)
|
if (DisabledClassesMask.HasValue)
|
||||||
_worldPacket.WriteUInt32(DisabledClassesMask.Value);
|
_worldPacket.WriteUInt32(DisabledClassesMask.Value);
|
||||||
@@ -48,7 +52,13 @@ namespace Game.Networking.Packets
|
|||||||
foreach (RaceLimitDisableInfo raceLimitDisableInfo in RaceLimitDisables)
|
foreach (RaceLimitDisableInfo raceLimitDisableInfo in RaceLimitDisables)
|
||||||
raceLimitDisableInfo.Write(_worldPacket);
|
raceLimitDisableInfo.Write(_worldPacket);
|
||||||
|
|
||||||
foreach (CharacterInfo charInfo in Characters)
|
foreach (WarbandGroup warbandGroup in WarbandGroups)
|
||||||
|
warbandGroup.Write(_worldPacket);
|
||||||
|
|
||||||
|
foreach (CharacterInfoBasic charInfo in Characters)
|
||||||
|
charInfo.Write(_worldPacket);
|
||||||
|
|
||||||
|
foreach (RegionwideCharacterListEntry charInfo in RegionwideCharacters)
|
||||||
charInfo.Write(_worldPacket);
|
charInfo.Write(_worldPacket);
|
||||||
|
|
||||||
foreach (RaceUnlock raceUnlock in RaceUnlockData)
|
foreach (RaceUnlock raceUnlock in RaceUnlockData)
|
||||||
@@ -56,25 +66,30 @@ namespace Game.Networking.Packets
|
|||||||
}
|
}
|
||||||
|
|
||||||
public bool Success;
|
public bool Success;
|
||||||
|
public bool Realmless;
|
||||||
public bool IsDeletedCharacters; // used for character undelete list
|
public bool IsDeletedCharacters; // used for character undelete list
|
||||||
public bool IsNewPlayerRestrictionSkipped; // allows client to skip new player restrictions
|
public bool IsNewPlayerRestrictionSkipped; // allows client to skip new player restrictions
|
||||||
public bool IsNewPlayerRestricted; // forbids using level boost and class trials
|
public bool IsNewPlayerRestricted; // forbids using level boost and class trials
|
||||||
public bool IsNewPlayer; // forbids hero classes and allied races
|
public bool IsNewPlayer; // forbids hero classes and allied races
|
||||||
public bool IsTrialAccountRestricted;
|
public bool IsTrialAccountRestricted;
|
||||||
|
public bool DontCreateCharacterDisplays;
|
||||||
|
|
||||||
public int MaxCharacterLevel = 1;
|
public int MaxCharacterLevel = 1;
|
||||||
public uint? DisabledClassesMask = new();
|
public uint? DisabledClassesMask = new();
|
||||||
|
|
||||||
public List<CharacterInfo> Characters = new(); // all characters on the list
|
public List<CharacterInfoBasic> Characters = new(); // all characters on the list
|
||||||
public List<RaceUnlock> RaceUnlockData = new(); //
|
public List<RegionwideCharacterListEntry> RegionwideCharacters = new();
|
||||||
|
public List<RaceUnlock> RaceUnlockData = new();
|
||||||
public List<UnlockedConditionalAppearance> UnlockedConditionalAppearances = new();
|
public List<UnlockedConditionalAppearance> UnlockedConditionalAppearances = new();
|
||||||
public List<RaceLimitDisableInfo> RaceLimitDisables = new();
|
public List<RaceLimitDisableInfo> RaceLimitDisables = new();
|
||||||
|
public List<WarbandGroup> WarbandGroups = new();
|
||||||
|
|
||||||
public class CharacterInfo
|
public class CharacterInfoBasic
|
||||||
{
|
{
|
||||||
public CharacterInfo(SQLFields fields)
|
public CharacterInfoBasic(SQLFields fields)
|
||||||
{
|
{
|
||||||
Guid = ObjectGuid.Create(HighGuid.Player, fields.Read<ulong>(0));
|
Guid = ObjectGuid.Create(HighGuid.Player, fields.Read<ulong>(0));
|
||||||
|
VirtualRealmAddress = Global.WorldMgr.GetVirtualRealmAddress();
|
||||||
Name = fields.Read<string>(1);
|
Name = fields.Read<string>(1);
|
||||||
RaceId = fields.Read<byte>(2);
|
RaceId = fields.Read<byte>(2);
|
||||||
ClassId = (Class)fields.Read<byte>(3);
|
ClassId = (Class)fields.Read<byte>(3);
|
||||||
@@ -116,8 +131,6 @@ namespace Game.Networking.Packets
|
|||||||
else if (atLoginFlags.HasAnyFlag(AtLoginFlags.ChangeRace))
|
else if (atLoginFlags.HasAnyFlag(AtLoginFlags.ChangeRace))
|
||||||
Flags2 = CharacterCustomizeFlags.Race;
|
Flags2 = CharacterCustomizeFlags.Race;
|
||||||
|
|
||||||
Flags3 = 0;
|
|
||||||
Flags4 = 0;
|
|
||||||
FirstLogin = atLoginFlags.HasAnyFlag(AtLoginFlags.FirstLogin);
|
FirstLogin = atLoginFlags.HasAnyFlag(AtLoginFlags.FirstLogin);
|
||||||
|
|
||||||
// show pet at selection character in character list only for non-ghost character
|
// show pet at selection character in character list only for non-ghost character
|
||||||
@@ -132,7 +145,6 @@ namespace Game.Networking.Packets
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BoostInProgress = false;
|
|
||||||
ProfessionIds[0] = 0;
|
ProfessionIds[0] = 0;
|
||||||
ProfessionIds[1] = 0;
|
ProfessionIds[1] = 0;
|
||||||
|
|
||||||
@@ -168,41 +180,42 @@ namespace Game.Networking.Packets
|
|||||||
public void Write(WorldPacket data)
|
public void Write(WorldPacket data)
|
||||||
{
|
{
|
||||||
data.WritePackedGuid(Guid);
|
data.WritePackedGuid(Guid);
|
||||||
data.WriteUInt64(GuildClubMemberID);
|
data.WriteUInt32(VirtualRealmAddress);
|
||||||
data.WriteUInt8(ListPosition);
|
data.WriteUInt8(ListPosition);
|
||||||
data.WriteUInt8(RaceId);
|
data.WriteUInt8(RaceId);
|
||||||
data.WriteUInt8((byte)ClassId);
|
|
||||||
data.WriteUInt8(SexId);
|
data.WriteUInt8(SexId);
|
||||||
|
data.WriteUInt8((byte)ClassId);
|
||||||
|
data.WriteInt16(SpecID);
|
||||||
data.WriteInt32(Customizations.Count);
|
data.WriteInt32(Customizations.Count);
|
||||||
|
|
||||||
data.WriteUInt8(ExperienceLevel);
|
data.WriteUInt8(ExperienceLevel);
|
||||||
data.WriteUInt32(ZoneId);
|
|
||||||
data.WriteUInt32(MapId);
|
data.WriteUInt32(MapId);
|
||||||
|
data.WriteUInt32(ZoneId);
|
||||||
data.WriteVector3(PreloadPos);
|
data.WriteVector3(PreloadPos);
|
||||||
|
data.WriteUInt64(GuildClubMemberID);
|
||||||
data.WritePackedGuid(GuildGuid);
|
data.WritePackedGuid(GuildGuid);
|
||||||
data.WriteUInt32((uint)Flags);
|
data.WriteUInt32((uint)Flags);
|
||||||
data.WriteUInt32((uint)Flags2);
|
data.WriteUInt32((uint)Flags2);
|
||||||
data.WriteUInt32(Flags3);
|
data.WriteUInt32(Flags3);
|
||||||
|
data.WriteUInt8(unkWod61x);
|
||||||
|
|
||||||
data.WriteUInt32(PetCreatureDisplayId);
|
data.WriteUInt32(PetCreatureDisplayId);
|
||||||
data.WriteUInt32(PetExperienceLevel);
|
data.WriteUInt32(PetExperienceLevel);
|
||||||
data.WriteUInt32(PetCreatureFamilyId);
|
data.WriteUInt32(PetCreatureFamilyId);
|
||||||
|
|
||||||
data.WriteUInt32(ProfessionIds[0]);
|
|
||||||
data.WriteUInt32(ProfessionIds[1]);
|
|
||||||
|
|
||||||
foreach (var visualItem in VisualItems)
|
foreach (var visualItem in VisualItems)
|
||||||
visualItem.Write(data);
|
visualItem.Write(data);
|
||||||
|
|
||||||
data.WriteInt64(LastPlayedTime);
|
|
||||||
data.WriteInt16(SpecID);
|
|
||||||
data.WriteInt32(Unknown703);
|
data.WriteInt32(Unknown703);
|
||||||
|
data.WriteInt64(LastPlayedTime);
|
||||||
data.WriteInt32(LastLoginVersion);
|
data.WriteInt32(LastLoginVersion);
|
||||||
data.WriteUInt32(Flags4);
|
|
||||||
data.WriteInt32(MailSenders.Count);
|
|
||||||
data.WriteInt32(MailSenderTypes.Count);
|
|
||||||
data.WriteUInt32(OverrideSelectScreenFileDataID);
|
|
||||||
PersonalTabard.Write(data);
|
PersonalTabard.Write(data);
|
||||||
|
|
||||||
|
data.WriteUInt32(ProfessionIds[0]);
|
||||||
|
data.WriteUInt32(ProfessionIds[1]);
|
||||||
|
|
||||||
data.WriteInt32(TimerunningSeasonID);
|
data.WriteInt32(TimerunningSeasonID);
|
||||||
|
data.WriteUInt32(OverrideSelectScreenFileDataID);
|
||||||
|
|
||||||
foreach (ChrCustomizationChoice customization in Customizations)
|
foreach (ChrCustomizationChoice customization in Customizations)
|
||||||
{
|
{
|
||||||
@@ -210,29 +223,15 @@ namespace Game.Networking.Packets
|
|||||||
data.WriteUInt32(customization.ChrCustomizationChoiceID);
|
data.WriteUInt32(customization.ChrCustomizationChoiceID);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var mailSenderType in MailSenderTypes)
|
|
||||||
data.WriteUInt32(mailSenderType);
|
|
||||||
|
|
||||||
data.WriteBits(Name.GetByteCount(), 6);
|
data.WriteBits(Name.GetByteCount(), 6);
|
||||||
data.WriteBit(FirstLogin);
|
data.WriteBit(FirstLogin);
|
||||||
data.WriteBit(BoostInProgress);
|
|
||||||
data.WriteBits(unkWod61x, 5);
|
|
||||||
data.WriteBit(RpeResetAvailable);
|
|
||||||
data.WriteBit(RpeResetQuestClearAvailable);
|
|
||||||
|
|
||||||
foreach (string str in MailSenders)
|
|
||||||
data.WriteBits(str.GetByteCount() + 1, 6);
|
|
||||||
|
|
||||||
data.FlushBits();
|
data.FlushBits();
|
||||||
|
|
||||||
foreach (string str in MailSenders)
|
|
||||||
if (!str.IsEmpty())
|
|
||||||
data.WriteCString(str);
|
|
||||||
|
|
||||||
data.WriteString(Name);
|
data.WriteString(Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ObjectGuid Guid;
|
public ObjectGuid Guid;
|
||||||
|
public uint VirtualRealmAddress;
|
||||||
public ulong GuildClubMemberID; // same as bgs.protocol.club.v1.MemberId.unique_id, guessed basing on SMSG_QUERY_PLAYER_NAME_RESPONSE (that one is known)
|
public ulong GuildClubMemberID; // same as bgs.protocol.club.v1.MemberId.unique_id, guessed basing on SMSG_QUERY_PLAYER_NAME_RESPONSE (that one is known)
|
||||||
public string Name;
|
public string Name;
|
||||||
public byte ListPosition; // Order of the characters in list
|
public byte ListPosition; // Order of the characters in list
|
||||||
@@ -248,7 +247,6 @@ namespace Game.Networking.Packets
|
|||||||
public CharacterFlags Flags; // Character flag @see enum CharacterFlags
|
public CharacterFlags Flags; // Character flag @see enum CharacterFlags
|
||||||
public CharacterCustomizeFlags Flags2; // Character customization flags @see enum CharacterCustomizeFlags
|
public CharacterCustomizeFlags Flags2; // Character customization flags @see enum CharacterCustomizeFlags
|
||||||
public uint Flags3; // Character flags 3 @todo research
|
public uint Flags3; // Character flags 3 @todo research
|
||||||
public uint Flags4;
|
|
||||||
public bool FirstLogin;
|
public bool FirstLogin;
|
||||||
public byte unkWod61x;
|
public byte unkWod61x;
|
||||||
public long LastPlayedTime;
|
public long LastPlayedTime;
|
||||||
@@ -260,24 +258,20 @@ namespace Game.Networking.Packets
|
|||||||
public uint PetCreatureDisplayId;
|
public uint PetCreatureDisplayId;
|
||||||
public uint PetExperienceLevel;
|
public uint PetExperienceLevel;
|
||||||
public uint PetCreatureFamilyId;
|
public uint PetCreatureFamilyId;
|
||||||
public bool BoostInProgress; // @todo
|
|
||||||
public uint[] ProfessionIds = new uint[2]; // @todo
|
public uint[] ProfessionIds = new uint[2]; // @todo
|
||||||
public VisualItemInfo[] VisualItems = new VisualItemInfo[19];
|
public VisualItemInfo[] VisualItems = new VisualItemInfo[19];
|
||||||
public List<string> MailSenders = new();
|
public CustomTabardInfo PersonalTabard;
|
||||||
public List<uint> MailSenderTypes = new();
|
|
||||||
public bool RpeResetAvailable = false;
|
|
||||||
public bool RpeResetQuestClearAvailable = false;
|
|
||||||
public CustomTabardInfo PersonalTabard = new();
|
|
||||||
|
|
||||||
public struct VisualItemInfo
|
public struct VisualItemInfo
|
||||||
{
|
{
|
||||||
public void Write(WorldPacket data)
|
public void Write(WorldPacket data)
|
||||||
{
|
{
|
||||||
data.WriteUInt32(DisplayId);
|
data.WriteUInt32(DisplayId);
|
||||||
data.WriteUInt32(DisplayEnchantId);
|
|
||||||
data.WriteUInt32(SecondaryItemModifiedAppearanceID);
|
|
||||||
data.WriteUInt8(InvType);
|
data.WriteUInt8(InvType);
|
||||||
|
data.WriteUInt32(DisplayEnchantId);
|
||||||
data.WriteUInt8(Subclass);
|
data.WriteUInt8(Subclass);
|
||||||
|
data.WriteUInt32(SecondaryItemModifiedAppearanceID);
|
||||||
|
data.WriteUInt32(ItemID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public uint DisplayId;
|
public uint DisplayId;
|
||||||
@@ -285,6 +279,7 @@ namespace Game.Networking.Packets
|
|||||||
public uint SecondaryItemModifiedAppearanceID; // also -1 is some special value
|
public uint SecondaryItemModifiedAppearanceID; // also -1 is some special value
|
||||||
public byte InvType;
|
public byte InvType;
|
||||||
public byte Subclass;
|
public byte Subclass;
|
||||||
|
public uint ItemID;
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct PetInfo
|
public struct PetInfo
|
||||||
@@ -295,6 +290,85 @@ namespace Game.Networking.Packets
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class CharacterRestrictionAndMailData
|
||||||
|
{
|
||||||
|
public bool BoostInProgress; ///< @todo
|
||||||
|
public uint Flags4;
|
||||||
|
public List<string> MailSenders = new();
|
||||||
|
public List<uint> MailSenderTypes = new();
|
||||||
|
public bool RpeResetAvailable;
|
||||||
|
public bool RpeResetQuestClearAvailable;
|
||||||
|
|
||||||
|
public void Write(WorldPacket data)
|
||||||
|
{
|
||||||
|
Cypher.Assert(MailSenders.Count == MailSenderTypes.Count);
|
||||||
|
|
||||||
|
data.WriteBit(BoostInProgress);
|
||||||
|
data.WriteBit(RpeResetAvailable);
|
||||||
|
data.WriteBit(RpeResetQuestClearAvailable);
|
||||||
|
data.FlushBits();
|
||||||
|
|
||||||
|
data.WriteUInt32(Flags4);
|
||||||
|
data.WriteInt32(MailSenders.Count);
|
||||||
|
data.WriteInt32(MailSenderTypes.Count);
|
||||||
|
|
||||||
|
if (!MailSenderTypes.Empty())
|
||||||
|
foreach (var type in MailSenderTypes)
|
||||||
|
data.WriteUInt32(type);
|
||||||
|
|
||||||
|
foreach (string str in MailSenders)
|
||||||
|
data.WriteBits(str.GetByteCount() + 1, 6);
|
||||||
|
|
||||||
|
data.FlushBits();
|
||||||
|
|
||||||
|
foreach (string str in MailSenders)
|
||||||
|
if (!str.IsEmpty())
|
||||||
|
data.WriteCString(str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct CharacterInfo
|
||||||
|
{
|
||||||
|
public CharacterInfoBasic Basic;
|
||||||
|
public CharacterRestrictionAndMailData RestrictionsAndMails;
|
||||||
|
|
||||||
|
public CharacterInfo(SQLFields fields)
|
||||||
|
{
|
||||||
|
Basic = new(fields);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Write(WorldPacket data)
|
||||||
|
{
|
||||||
|
Basic.Write(data);
|
||||||
|
RestrictionsAndMails.Write(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct RegionwideCharacterListEntry
|
||||||
|
{
|
||||||
|
public CharacterInfoBasic Basic;
|
||||||
|
public ulong Money;
|
||||||
|
public float CurrentSeasonMythicPlusOverallScore;
|
||||||
|
public uint CurrentSeasonBestPvpRating;
|
||||||
|
public sbyte PvpRatingBracket;
|
||||||
|
public short PvpRatingAssociatedSpecID;
|
||||||
|
|
||||||
|
public RegionwideCharacterListEntry(SQLFields fields)
|
||||||
|
{
|
||||||
|
Basic = new(fields);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Write(WorldPacket data)
|
||||||
|
{
|
||||||
|
Basic.Write(data);
|
||||||
|
data.WriteUInt64(Money);
|
||||||
|
data.WriteFloat(CurrentSeasonMythicPlusOverallScore);
|
||||||
|
data.WriteUInt32(CurrentSeasonBestPvpRating);
|
||||||
|
data.WriteInt8(PvpRatingBracket);
|
||||||
|
data.WriteInt16(PvpRatingAssociatedSpecID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public struct RaceUnlock
|
public struct RaceUnlock
|
||||||
{
|
{
|
||||||
public void Write(WorldPacket data)
|
public void Write(WorldPacket data)
|
||||||
@@ -883,6 +957,7 @@ namespace Game.Networking.Packets
|
|||||||
NewSex = _worldPacket.ReadUInt8();
|
NewSex = _worldPacket.ReadUInt8();
|
||||||
CustomizedRace = _worldPacket.ReadInt32();
|
CustomizedRace = _worldPacket.ReadInt32();
|
||||||
CustomizedChrModelID = _worldPacket.ReadInt32();
|
CustomizedChrModelID = _worldPacket.ReadInt32();
|
||||||
|
UnalteredVisualRaceID = _worldPacket.ReadInt32();
|
||||||
|
|
||||||
for (var i = 0; i < customizationCount; ++i)
|
for (var i = 0; i < customizationCount; ++i)
|
||||||
{
|
{
|
||||||
@@ -900,6 +975,7 @@ namespace Game.Networking.Packets
|
|||||||
public Array<ChrCustomizationChoice> Customizations = new(250);
|
public Array<ChrCustomizationChoice> Customizations = new(250);
|
||||||
public int CustomizedRace;
|
public int CustomizedRace;
|
||||||
public int CustomizedChrModelID;
|
public int CustomizedChrModelID;
|
||||||
|
public int UnalteredVisualRaceID;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class BarberShopResult : ServerPacket
|
public class BarberShopResult : ServerPacket
|
||||||
@@ -1211,4 +1287,38 @@ namespace Game.Networking.Packets
|
|||||||
BackgroundColor = data.ReadInt32();
|
BackgroundColor = data.ReadInt32();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public struct WarbandGroupMember
|
||||||
|
{
|
||||||
|
public int WarbandScenePlacementID;
|
||||||
|
public int Type;
|
||||||
|
public ObjectGuid Guid;
|
||||||
|
|
||||||
|
public void Write(WorldPacket data)
|
||||||
|
{
|
||||||
|
data.WriteInt32(WarbandScenePlacementID);
|
||||||
|
data.WriteInt32(Type);
|
||||||
|
if (Type == 0)
|
||||||
|
data.WritePackedGuid(Guid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class WarbandGroup
|
||||||
|
{
|
||||||
|
public ulong GroupID;
|
||||||
|
public byte Unknown_1100;
|
||||||
|
public int Flags; ///< enum WarbandGroupFlags { Collapsed = 1 }
|
||||||
|
public List<WarbandGroupMember> Members = new();
|
||||||
|
|
||||||
|
public void Write(WorldPacket data)
|
||||||
|
{
|
||||||
|
data.WriteUInt64(GroupID);
|
||||||
|
data.WriteUInt8(Unknown_1100);
|
||||||
|
data.WriteInt32(Flags);
|
||||||
|
data.WriteInt32(Members.Count);
|
||||||
|
|
||||||
|
foreach (WarbandGroupMember member in Members)
|
||||||
|
member.Write(data);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ namespace Game.Networking.Packets
|
|||||||
{
|
{
|
||||||
_worldPacket.WritePackedGuid(powerDrainTarget.Victim);
|
_worldPacket.WritePackedGuid(powerDrainTarget.Victim);
|
||||||
_worldPacket.WriteUInt32(powerDrainTarget.Points);
|
_worldPacket.WriteUInt32(powerDrainTarget.Points);
|
||||||
_worldPacket.WriteUInt32(powerDrainTarget.PowerType);
|
_worldPacket.WriteInt8((sbyte)powerDrainTarget.PowerType);
|
||||||
_worldPacket.WriteFloat(powerDrainTarget.Amplitude);
|
_worldPacket.WriteFloat(powerDrainTarget.Amplitude);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -663,7 +663,7 @@ namespace Game.Networking.Packets
|
|||||||
{
|
{
|
||||||
public ObjectGuid Victim;
|
public ObjectGuid Victim;
|
||||||
public uint Points;
|
public uint Points;
|
||||||
public uint PowerType;
|
public PowerType PowerType;
|
||||||
public float Amplitude;
|
public float Amplitude;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -169,8 +169,8 @@ namespace Game.Networking.Packets
|
|||||||
_worldPacket.WriteInt32(Powers.Count);
|
_worldPacket.WriteInt32(Powers.Count);
|
||||||
foreach (var power in Powers)
|
foreach (var power in Powers)
|
||||||
{
|
{
|
||||||
_worldPacket.WriteInt32(power.Power);
|
|
||||||
_worldPacket.WriteUInt8(power.PowerType);
|
_worldPacket.WriteUInt8(power.PowerType);
|
||||||
|
_worldPacket.WriteInt32(power.Power);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -180,16 +180,16 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
class InterruptPowerRegen : ServerPacket
|
class InterruptPowerRegen : ServerPacket
|
||||||
{
|
{
|
||||||
public int PowerType;
|
public sbyte PowerType;
|
||||||
|
|
||||||
public InterruptPowerRegen(PowerType powerType) : base(ServerOpcodes.InterruptPowerRegen, ConnectionType.Instance)
|
public InterruptPowerRegen(PowerType powerType) : base(ServerOpcodes.InterruptPowerRegen, ConnectionType.Instance)
|
||||||
{
|
{
|
||||||
PowerType = (int)powerType;
|
PowerType = (sbyte)powerType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Write()
|
public override void Write()
|
||||||
{
|
{
|
||||||
_worldPacket.WriteInt32(PowerType);
|
_worldPacket.WriteInt8(PowerType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,11 @@ namespace Game.Networking.Packets
|
|||||||
public ItemInstance OldItem = new();
|
public ItemInstance OldItem = new();
|
||||||
public ItemInstance NewItem = new();
|
public ItemInstance NewItem = new();
|
||||||
public int EnchantID;
|
public int EnchantID;
|
||||||
|
public int ConcentrationCurrencyID;
|
||||||
|
public int ConcentrationSpent;
|
||||||
|
public int IngenuityRefund;
|
||||||
|
public bool HasIngenuityProc;
|
||||||
|
public bool ApplyConcentration;
|
||||||
|
|
||||||
public void Write(WorldPacket data)
|
public void Write(WorldPacket data)
|
||||||
{
|
{
|
||||||
@@ -59,6 +64,9 @@ namespace Game.Networking.Packets
|
|||||||
data.WritePackedGuid(ItemGUID);
|
data.WritePackedGuid(ItemGUID);
|
||||||
data.WriteInt32(Quantity);
|
data.WriteInt32(Quantity);
|
||||||
data.WriteInt32(EnchantID);
|
data.WriteInt32(EnchantID);
|
||||||
|
data.WriteInt32(ConcentrationCurrencyID);
|
||||||
|
data.WriteInt32(ConcentrationSpent);
|
||||||
|
data.WriteInt32(IngenuityRefund);
|
||||||
|
|
||||||
foreach (SpellReducedReagent spellReducedReagent in ResourcesReturned)
|
foreach (SpellReducedReagent spellReducedReagent in ResourcesReturned)
|
||||||
spellReducedReagent.Write(data);
|
spellReducedReagent.Write(data);
|
||||||
@@ -67,6 +75,8 @@ namespace Game.Networking.Packets
|
|||||||
data.WriteBit(field_29);
|
data.WriteBit(field_29);
|
||||||
data.WriteBit(field_2A);
|
data.WriteBit(field_2A);
|
||||||
data.WriteBit(BonusCraft);
|
data.WriteBit(BonusCraft);
|
||||||
|
data.WriteBit(HasIngenuityProc);
|
||||||
|
data.WriteBit(ApplyConcentration);
|
||||||
data.FlushBits();
|
data.FlushBits();
|
||||||
|
|
||||||
OldItem.Write(data);
|
OldItem.Write(data);
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
public override void Write()
|
public override void Write()
|
||||||
{
|
{
|
||||||
_worldPacket.WriteUInt64(GUID);
|
|
||||||
_worldPacket.WriteInt32(Type);
|
_worldPacket.WriteInt32(Type);
|
||||||
_worldPacket.WriteUInt32(SetID);
|
_worldPacket.WriteUInt32(SetID);
|
||||||
|
_worldPacket.WriteUInt64(GUID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ulong GUID; // Set Identifier
|
public ulong GUID; // Set Identifier
|
||||||
@@ -159,11 +159,11 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
public override void Write()
|
public override void Write()
|
||||||
{
|
{
|
||||||
|
_worldPacket.WriteInt32(Reason);
|
||||||
_worldPacket.WriteUInt64(GUID);
|
_worldPacket.WriteUInt64(GUID);
|
||||||
_worldPacket.WriteUInt8(Reason);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ulong GUID; //Set Identifier
|
public ulong GUID; //Set Identifier
|
||||||
public byte Reason;
|
public int Reason;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ namespace Game.Networking.Packets
|
|||||||
}
|
}
|
||||||
|
|
||||||
public GarrisonError Result;
|
public GarrisonError Result;
|
||||||
public uint GarrSiteID;
|
public uint GarrSiteID;
|
||||||
}
|
}
|
||||||
|
|
||||||
class GetGarrisonInfo : ClientPacket
|
class GetGarrisonInfo : ClientPacket
|
||||||
@@ -103,7 +103,7 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
public override void Write()
|
public override void Write()
|
||||||
{
|
{
|
||||||
_worldPacket.WriteInt32((int)GarrTypeID);
|
_worldPacket.WriteUInt8((byte)GarrTypeID);
|
||||||
_worldPacket.WriteUInt32((uint)Result);
|
_worldPacket.WriteUInt32((uint)Result);
|
||||||
BuildingInfo.Write(_worldPacket);
|
BuildingInfo.Write(_worldPacket);
|
||||||
_worldPacket.WriteBit(PlayActivationCinematic);
|
_worldPacket.WriteBit(PlayActivationCinematic);
|
||||||
@@ -136,7 +136,7 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
public override void Write()
|
public override void Write()
|
||||||
{
|
{
|
||||||
_worldPacket.WriteInt32((int)GarrTypeID);
|
_worldPacket.WriteUInt8((byte)GarrTypeID);
|
||||||
_worldPacket.WriteUInt32((uint)Result);
|
_worldPacket.WriteUInt32((uint)Result);
|
||||||
_worldPacket.WriteUInt32(GarrPlotInstanceID);
|
_worldPacket.WriteUInt32(GarrPlotInstanceID);
|
||||||
_worldPacket.WriteUInt32(GarrBuildingID);
|
_worldPacket.WriteUInt32(GarrBuildingID);
|
||||||
@@ -154,7 +154,7 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
public override void Write()
|
public override void Write()
|
||||||
{
|
{
|
||||||
_worldPacket.WriteInt32((int)GarrTypeID);
|
_worldPacket.WriteUInt8((byte)GarrTypeID);
|
||||||
_worldPacket.WriteUInt32((uint)Result);
|
_worldPacket.WriteUInt32((uint)Result);
|
||||||
_worldPacket.WriteUInt32(BuildingID);
|
_worldPacket.WriteUInt32(BuildingID);
|
||||||
}
|
}
|
||||||
@@ -170,14 +170,14 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
public override void Write()
|
public override void Write()
|
||||||
{
|
{
|
||||||
_worldPacket.WriteInt32((int)GarrTypeID);
|
_worldPacket.WriteUInt8((byte)GarrTypeID);
|
||||||
_worldPacket.WriteUInt32((uint)Result);
|
_worldPacket.WriteUInt32((uint)Result);
|
||||||
_worldPacket.WriteUInt32(BuildingID);
|
_worldPacket.WriteUInt32(BuildingID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public GarrisonType GarrTypeID;
|
public GarrisonType GarrTypeID;
|
||||||
public uint BuildingID;
|
|
||||||
public GarrisonError Result;
|
public GarrisonError Result;
|
||||||
|
public uint BuildingID;
|
||||||
}
|
}
|
||||||
|
|
||||||
class GarrisonRequestBlueprintAndSpecializationData : ClientPacket
|
class GarrisonRequestBlueprintAndSpecializationData : ClientPacket
|
||||||
@@ -193,7 +193,7 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
public override void Write()
|
public override void Write()
|
||||||
{
|
{
|
||||||
_worldPacket.WriteUInt32((uint)GarrTypeID);
|
_worldPacket.WriteUInt8((byte)GarrTypeID);
|
||||||
_worldPacket.WriteInt32(BlueprintsKnown != null ? BlueprintsKnown.Count : 0);
|
_worldPacket.WriteInt32(BlueprintsKnown != null ? BlueprintsKnown.Count : 0);
|
||||||
_worldPacket.WriteInt32(SpecializationsKnown != null ? SpecializationsKnown.Count : 0);
|
_worldPacket.WriteInt32(SpecializationsKnown != null ? SpecializationsKnown.Count : 0);
|
||||||
if (BlueprintsKnown != null)
|
if (BlueprintsKnown != null)
|
||||||
@@ -206,8 +206,8 @@ namespace Game.Networking.Packets
|
|||||||
}
|
}
|
||||||
|
|
||||||
public GarrisonType GarrTypeID;
|
public GarrisonType GarrTypeID;
|
||||||
public List<uint> SpecializationsKnown = null;
|
|
||||||
public List<uint> BlueprintsKnown = null;
|
public List<uint> BlueprintsKnown = null;
|
||||||
|
public List<uint> SpecializationsKnown = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
class GarrisonGetMapData : ClientPacket
|
class GarrisonGetMapData : ClientPacket
|
||||||
@@ -237,7 +237,7 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
public override void Write()
|
public override void Write()
|
||||||
{
|
{
|
||||||
_worldPacket.WriteInt32((int)GarrTypeID);
|
_worldPacket.WriteUInt8((byte)GarrTypeID);
|
||||||
PlotInfo.Write(_worldPacket);
|
PlotInfo.Write(_worldPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -263,8 +263,8 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
public override void Write()
|
public override void Write()
|
||||||
{
|
{
|
||||||
_worldPacket.WriteInt32((int)GarrTypeID);
|
_worldPacket.WriteUInt8((byte)GarrTypeID);
|
||||||
_worldPacket .WriteUInt32((uint)Result);
|
_worldPacket.WriteUInt32((uint)Result);
|
||||||
Follower.Write(_worldPacket);
|
Follower.Write(_worldPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -279,15 +279,15 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
public override void Write()
|
public override void Write()
|
||||||
{
|
{
|
||||||
_worldPacket.WriteUInt64(FollowerDBID);
|
_worldPacket.WriteUInt8(GarrTypeID);
|
||||||
_worldPacket.WriteInt32(GarrTypeID);
|
|
||||||
_worldPacket.WriteUInt32(Result);
|
_worldPacket.WriteUInt32(Result);
|
||||||
|
_worldPacket.WriteUInt64(FollowerDBID);
|
||||||
_worldPacket.WriteUInt32(Destroyed);
|
_worldPacket.WriteUInt32(Destroyed);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ulong FollowerDBID;
|
public byte GarrTypeID;
|
||||||
public int GarrTypeID;
|
|
||||||
public uint Result;
|
public uint Result;
|
||||||
|
public ulong FollowerDBID;
|
||||||
public uint Destroyed;
|
public uint Destroyed;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -302,7 +302,7 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
public uint GarrPlotInstanceID;
|
public uint GarrPlotInstanceID;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Structs
|
//Structs
|
||||||
public struct GarrisonPlotInfo
|
public struct GarrisonPlotInfo
|
||||||
{
|
{
|
||||||
@@ -310,12 +310,12 @@ namespace Game.Networking.Packets
|
|||||||
{
|
{
|
||||||
data.WriteUInt32(GarrPlotInstanceID);
|
data.WriteUInt32(GarrPlotInstanceID);
|
||||||
data.WriteXYZO(PlotPos);
|
data.WriteXYZO(PlotPos);
|
||||||
data.WriteUInt32(PlotType);
|
data.WriteUInt8(PlotType);
|
||||||
}
|
}
|
||||||
|
|
||||||
public uint GarrPlotInstanceID;
|
public uint GarrPlotInstanceID;
|
||||||
public Position PlotPos;
|
public Position PlotPos;
|
||||||
public uint PlotType;
|
public byte PlotType;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class GarrisonBuildingInfo
|
public class GarrisonBuildingInfo
|
||||||
@@ -600,7 +600,7 @@ namespace Game.Networking.Packets
|
|||||||
{
|
{
|
||||||
public void Write(WorldPacket data)
|
public void Write(WorldPacket data)
|
||||||
{
|
{
|
||||||
data.WriteUInt32((uint)GarrTypeID);
|
data.WriteUInt8((byte)GarrTypeID);
|
||||||
data.WriteUInt32(GarrSiteID);
|
data.WriteUInt32(GarrSiteID);
|
||||||
data.WriteUInt32(GarrSiteLevelID);
|
data.WriteUInt32(GarrSiteLevelID);
|
||||||
data.WriteInt32(Buildings.Count);
|
data.WriteInt32(Buildings.Count);
|
||||||
@@ -700,11 +700,11 @@ namespace Game.Networking.Packets
|
|||||||
{
|
{
|
||||||
public void Write(WorldPacket data)
|
public void Write(WorldPacket data)
|
||||||
{
|
{
|
||||||
data.WriteInt32(GarrFollowerTypeID);
|
data.WriteUInt8(GarrFollowerTypeID);
|
||||||
data.WriteUInt32(Count);
|
data.WriteUInt32(Count);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int GarrFollowerTypeID;
|
public byte GarrFollowerTypeID;
|
||||||
public uint Count;
|
public uint Count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -183,9 +183,14 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
public class AcceptGuildInvite : ClientPacket
|
public class AcceptGuildInvite : ClientPacket
|
||||||
{
|
{
|
||||||
|
public ObjectGuid GuildGuid;
|
||||||
|
|
||||||
public AcceptGuildInvite(WorldPacket packet) : base(packet) { }
|
public AcceptGuildInvite(WorldPacket packet) : base(packet) { }
|
||||||
|
|
||||||
public override void Read() { }
|
public override void Read()
|
||||||
|
{
|
||||||
|
GuildGuid = _worldPacket.ReadPackedGuid();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class GuildDeclineInvitation : ClientPacket
|
public class GuildDeclineInvitation : ClientPacket
|
||||||
@@ -297,7 +302,6 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
_worldPacket.WriteBits(Name.GetByteCount(), 6);
|
_worldPacket.WriteBits(Name.GetByteCount(), 6);
|
||||||
_worldPacket.WriteBit(LoggedOn);
|
_worldPacket.WriteBit(LoggedOn);
|
||||||
_worldPacket.WriteBit(Mobile);
|
|
||||||
|
|
||||||
_worldPacket.WriteString(Name);
|
_worldPacket.WriteString(Name);
|
||||||
}
|
}
|
||||||
@@ -305,7 +309,6 @@ namespace Game.Networking.Packets
|
|||||||
public ObjectGuid Guid;
|
public ObjectGuid Guid;
|
||||||
public uint VirtualRealmAddress;
|
public uint VirtualRealmAddress;
|
||||||
public string Name;
|
public string Name;
|
||||||
public bool Mobile;
|
|
||||||
public bool LoggedOn;
|
public bool LoggedOn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -139,9 +139,11 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
public override void Write()
|
public override void Write()
|
||||||
{
|
{
|
||||||
_worldPacket.WriteUInt8((byte)Type);
|
_worldPacket.WriteInt32((int)Type);
|
||||||
_worldPacket.WriteUInt32(MapID);
|
_worldPacket.WriteUInt32(MapID);
|
||||||
_worldPacket.WriteUInt32((uint)DifficultyID);
|
_worldPacket.WriteUInt32((uint)DifficultyID);
|
||||||
|
_worldPacket.WriteInt32(TimeLeft);
|
||||||
|
_worldPacket.WriteBits(WarningMessage, 8);
|
||||||
_worldPacket.WriteBit(Locked);
|
_worldPacket.WriteBit(Locked);
|
||||||
_worldPacket.WriteBit(Extended);
|
_worldPacket.WriteBit(Extended);
|
||||||
_worldPacket.FlushBits();
|
_worldPacket.FlushBits();
|
||||||
@@ -150,6 +152,8 @@ namespace Game.Networking.Packets
|
|||||||
public InstanceResetWarningType Type;
|
public InstanceResetWarningType Type;
|
||||||
public uint MapID;
|
public uint MapID;
|
||||||
public Difficulty DifficultyID;
|
public Difficulty DifficultyID;
|
||||||
|
public int TimeLeft;
|
||||||
|
public string WarningMessage; // GlobalStrings tag
|
||||||
public bool Locked;
|
public bool Locked;
|
||||||
public bool Extended;
|
public bool Extended;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -411,10 +411,11 @@ namespace Game.Networking.Packets
|
|||||||
_worldPacket.WriteInt32(QuestLogItemID);
|
_worldPacket.WriteInt32(QuestLogItemID);
|
||||||
_worldPacket.WriteUInt32(Quantity);
|
_worldPacket.WriteUInt32(Quantity);
|
||||||
_worldPacket.WriteUInt32(QuantityInInventory);
|
_worldPacket.WriteUInt32(QuantityInInventory);
|
||||||
|
_worldPacket.WriteInt32(QuantityInQuestLog);
|
||||||
_worldPacket.WriteInt32(DungeonEncounterID);
|
_worldPacket.WriteInt32(DungeonEncounterID);
|
||||||
_worldPacket.WriteInt32(BattlePetSpeciesID);
|
_worldPacket.WriteInt32(BattlePetSpeciesID);
|
||||||
_worldPacket.WriteInt32(BattlePetBreedID);
|
_worldPacket.WriteInt32(BattlePetBreedID);
|
||||||
_worldPacket.WriteUInt32(BattlePetBreedQuality);
|
_worldPacket.WriteUInt8(BattlePetBreedQuality);
|
||||||
_worldPacket.WriteInt32(BattlePetLevel);
|
_worldPacket.WriteInt32(BattlePetLevel);
|
||||||
_worldPacket.WritePackedGuid(ItemGUID);
|
_worldPacket.WritePackedGuid(ItemGUID);
|
||||||
_worldPacket.WriteInt32(Toasts.Count);
|
_worldPacket.WriteInt32(Toasts.Count);
|
||||||
@@ -448,10 +449,11 @@ namespace Game.Networking.Packets
|
|||||||
// only set if different than real ID (similar to CreatureTemplate.KillCredit)
|
// only set if different than real ID (similar to CreatureTemplate.KillCredit)
|
||||||
public uint Quantity;
|
public uint Quantity;
|
||||||
public uint QuantityInInventory;
|
public uint QuantityInInventory;
|
||||||
|
public int QuantityInQuestLog;
|
||||||
public int DungeonEncounterID;
|
public int DungeonEncounterID;
|
||||||
public int BattlePetSpeciesID;
|
public int BattlePetSpeciesID;
|
||||||
public int BattlePetBreedID;
|
public int BattlePetBreedID;
|
||||||
public uint BattlePetBreedQuality;
|
public byte BattlePetBreedQuality;
|
||||||
public int BattlePetLevel;
|
public int BattlePetLevel;
|
||||||
public ObjectGuid ItemGUID;
|
public ObjectGuid ItemGUID;
|
||||||
public List<UiEventToast> Toasts = new();
|
public List<UiEventToast> Toasts = new();
|
||||||
@@ -634,6 +636,13 @@ namespace Game.Networking.Packets
|
|||||||
public ObjectGuid Item;
|
public ObjectGuid Item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class SortAccountBankBags : ClientPacket
|
||||||
|
{
|
||||||
|
public SortAccountBankBags(WorldPacket packet) : base(packet) { }
|
||||||
|
|
||||||
|
public override void Read() { }
|
||||||
|
}
|
||||||
|
|
||||||
class SortBags : ClientPacket
|
class SortBags : ClientPacket
|
||||||
{
|
{
|
||||||
public SortBags(WorldPacket packet) : base(packet) { }
|
public SortBags(WorldPacket packet) : base(packet) { }
|
||||||
@@ -683,7 +692,7 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
class ChangeBagSlotFlag : ClientPacket
|
class ChangeBagSlotFlag : ClientPacket
|
||||||
{
|
{
|
||||||
public int BagIndex;
|
public byte BagIndex;
|
||||||
public BagSlotFlags FlagToChange;
|
public BagSlotFlags FlagToChange;
|
||||||
public bool On;
|
public bool On;
|
||||||
|
|
||||||
@@ -691,7 +700,7 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
public override void Read()
|
public override void Read()
|
||||||
{
|
{
|
||||||
BagIndex = _worldPacket.ReadInt32();
|
BagIndex = _worldPacket.ReadUInt8();
|
||||||
FlagToChange = (BagSlotFlags)_worldPacket.ReadUInt32();
|
FlagToChange = (BagSlotFlags)_worldPacket.ReadUInt32();
|
||||||
On = _worldPacket.HasBit();
|
On = _worldPacket.HasBit();
|
||||||
}
|
}
|
||||||
@@ -699,7 +708,7 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
class ChangeBankBagSlotFlag : ClientPacket
|
class ChangeBankBagSlotFlag : ClientPacket
|
||||||
{
|
{
|
||||||
public int BagIndex;
|
public byte BagIndex;
|
||||||
public BagSlotFlags FlagToChange;
|
public BagSlotFlags FlagToChange;
|
||||||
public bool On;
|
public bool On;
|
||||||
|
|
||||||
@@ -707,7 +716,7 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
public override void Read()
|
public override void Read()
|
||||||
{
|
{
|
||||||
BagIndex = _worldPacket.ReadInt32();
|
BagIndex = _worldPacket.ReadUInt8();
|
||||||
FlagToChange = (BagSlotFlags)_worldPacket.ReadUInt32();
|
FlagToChange = (BagSlotFlags)_worldPacket.ReadUInt32();
|
||||||
On = _worldPacket.HasBit();
|
On = _worldPacket.HasBit();
|
||||||
}
|
}
|
||||||
@@ -870,14 +879,14 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
public void Read(WorldPacket data)
|
public void Read(WorldPacket data)
|
||||||
{
|
{
|
||||||
Value = data.ReadUInt32();
|
|
||||||
Type = (ItemModifier)data.ReadUInt8();
|
Type = (ItemModifier)data.ReadUInt8();
|
||||||
|
Value = data.ReadUInt32();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Write(WorldPacket data)
|
public void Write(WorldPacket data)
|
||||||
{
|
{
|
||||||
data.WriteUInt32(Value);
|
|
||||||
data.WriteUInt8((byte)Type);
|
data.WriteUInt8((byte)Type);
|
||||||
|
data.WriteUInt32(Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override int GetHashCode()
|
public override int GetHashCode()
|
||||||
|
|||||||
@@ -621,12 +621,14 @@ namespace Game.Networking.Packets
|
|||||||
Loc.Write(_worldPacket);
|
Loc.Write(_worldPacket);
|
||||||
_worldPacket.WriteUInt32(Reason);
|
_worldPacket.WriteUInt32(Reason);
|
||||||
_worldPacket.WriteXYZ(MovementOffset);
|
_worldPacket.WriteXYZ(MovementOffset);
|
||||||
|
_worldPacket.WriteInt32(Counter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public uint MapID;
|
public uint MapID;
|
||||||
public uint Reason;
|
public uint Reason;
|
||||||
public TeleportLocation Loc = new();
|
public TeleportLocation Loc = new();
|
||||||
public Position MovementOffset; // Adjusts all pending movement events by this offset
|
public Position MovementOffset; // Adjusts all pending movement events by this offset
|
||||||
|
public int Counter;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class WorldPortResponse : ClientPacket
|
public class WorldPortResponse : ClientPacket
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ namespace Game.Networking.Packets
|
|||||||
{
|
{
|
||||||
_worldPacket.WritePackedGuid(GossipGUID);
|
_worldPacket.WritePackedGuid(GossipGUID);
|
||||||
_worldPacket.WriteUInt32(GossipID);
|
_worldPacket.WriteUInt32(GossipID);
|
||||||
|
_worldPacket.WriteUInt32(LfgDungeonsID);
|
||||||
_worldPacket.WriteInt32(FriendshipFactionID);
|
_worldPacket.WriteInt32(FriendshipFactionID);
|
||||||
_worldPacket.WriteInt32(GossipOptions.Count);
|
_worldPacket.WriteInt32(GossipOptions.Count);
|
||||||
_worldPacket.WriteInt32(GossipText.Count);
|
_worldPacket.WriteInt32(GossipText.Count);
|
||||||
@@ -81,6 +82,7 @@ namespace Game.Networking.Packets
|
|||||||
public int? TextID; // in classic variants this still holds npc_text id
|
public int? TextID; // in classic variants this still holds npc_text id
|
||||||
public int? BroadcastTextID;
|
public int? BroadcastTextID;
|
||||||
public uint GossipID;
|
public uint GossipID;
|
||||||
|
public uint LfgDungeonsID;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class GossipSelectOption : ClientPacket
|
public class GossipSelectOption : ClientPacket
|
||||||
@@ -346,6 +348,7 @@ namespace Game.Networking.Packets
|
|||||||
public TreasureLootList Treasure = new();
|
public TreasureLootList Treasure = new();
|
||||||
public int? SpellID;
|
public int? SpellID;
|
||||||
public int? OverrideIconID;
|
public int? OverrideIconID;
|
||||||
|
public string FailureDescription;
|
||||||
|
|
||||||
public void Write(WorldPacket data)
|
public void Write(WorldPacket data)
|
||||||
{
|
{
|
||||||
@@ -361,6 +364,7 @@ namespace Game.Networking.Packets
|
|||||||
data.WriteBits((byte)Status, 2);
|
data.WriteBits((byte)Status, 2);
|
||||||
data.WriteBit(SpellID.HasValue);
|
data.WriteBit(SpellID.HasValue);
|
||||||
data.WriteBit(OverrideIconID.HasValue);
|
data.WriteBit(OverrideIconID.HasValue);
|
||||||
|
data.WriteBits(FailureDescription.GetByteCount() + 1, 8);
|
||||||
data.FlushBits();
|
data.FlushBits();
|
||||||
|
|
||||||
Treasure.Write(data);
|
Treasure.Write(data);
|
||||||
@@ -373,6 +377,9 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
if (OverrideIconID.HasValue)
|
if (OverrideIconID.HasValue)
|
||||||
data.WriteInt32(OverrideIconID.Value);
|
data.WriteInt32(OverrideIconID.Value);
|
||||||
|
|
||||||
|
if (!FailureDescription.IsEmpty())
|
||||||
|
data.WriteCString(FailureDescription);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -382,10 +389,13 @@ namespace Game.Networking.Packets
|
|||||||
public uint ContentTuningID;
|
public uint ContentTuningID;
|
||||||
public int QuestType;
|
public int QuestType;
|
||||||
public bool Repeatable;
|
public bool Repeatable;
|
||||||
|
public bool ResetByScheduler;
|
||||||
public bool Important;
|
public bool Important;
|
||||||
|
public bool Meta;
|
||||||
public string QuestTitle;
|
public string QuestTitle;
|
||||||
public uint QuestFlags;
|
public uint QuestFlags;
|
||||||
public uint QuestFlagsEx;
|
public uint QuestFlagsEx;
|
||||||
|
public uint QuestFlagsEx2;
|
||||||
|
|
||||||
public void Write(WorldPacket data)
|
public void Write(WorldPacket data)
|
||||||
{
|
{
|
||||||
@@ -394,9 +404,12 @@ namespace Game.Networking.Packets
|
|||||||
data.WriteInt32(QuestType);
|
data.WriteInt32(QuestType);
|
||||||
data.WriteUInt32(QuestFlags);
|
data.WriteUInt32(QuestFlags);
|
||||||
data.WriteUInt32(QuestFlagsEx);
|
data.WriteUInt32(QuestFlagsEx);
|
||||||
|
data.WriteUInt32(QuestFlagsEx2);
|
||||||
|
|
||||||
data.WriteBit(Repeatable);
|
data.WriteBit(Repeatable);
|
||||||
|
data.WriteBit(ResetByScheduler);
|
||||||
data.WriteBit(Important);
|
data.WriteBit(Important);
|
||||||
|
data.WriteBit(Meta);
|
||||||
data.WriteBits(QuestTitle.GetByteCount(), 9);
|
data.WriteBits(QuestTitle.GetByteCount(), 9);
|
||||||
data.FlushBits();
|
data.FlushBits();
|
||||||
|
|
||||||
|
|||||||
@@ -769,6 +769,7 @@ namespace Game.Networking.Packets
|
|||||||
_worldPacket.WriteInt32(SequenceNum);
|
_worldPacket.WriteInt32(SequenceNum);
|
||||||
_worldPacket.WritePackedGuid(LeaderGUID);
|
_worldPacket.WritePackedGuid(LeaderGUID);
|
||||||
_worldPacket.WriteUInt8(LeaderFactionGroup);
|
_worldPacket.WriteUInt8(LeaderFactionGroup);
|
||||||
|
_worldPacket.WriteInt32((int)PingRestriction);
|
||||||
_worldPacket.WriteInt32(PlayerList.Count);
|
_worldPacket.WriteInt32(PlayerList.Count);
|
||||||
_worldPacket.WriteBit(LfgInfos.HasValue);
|
_worldPacket.WriteBit(LfgInfos.HasValue);
|
||||||
_worldPacket.WriteBit(LootSettings.HasValue);
|
_worldPacket.WriteBit(LootSettings.HasValue);
|
||||||
@@ -799,6 +800,8 @@ namespace Game.Networking.Packets
|
|||||||
public int MyIndex;
|
public int MyIndex;
|
||||||
public int SequenceNum;
|
public int SequenceNum;
|
||||||
|
|
||||||
|
public RestrictPingsTo PingRestriction;
|
||||||
|
|
||||||
public List<PartyPlayerInfo> PlayerList = new();
|
public List<PartyPlayerInfo> PlayerList = new();
|
||||||
|
|
||||||
public PartyLFGInfo? LfgInfos;
|
public PartyLFGInfo? LfgInfos;
|
||||||
@@ -939,14 +942,14 @@ namespace Game.Networking.Packets
|
|||||||
class SetRestrictPingsToAssistants : ClientPacket
|
class SetRestrictPingsToAssistants : ClientPacket
|
||||||
{
|
{
|
||||||
public byte? PartyIndex;
|
public byte? PartyIndex;
|
||||||
public bool RestrictPingsToAssistants;
|
public RestrictPingsTo RestrictTo;
|
||||||
|
|
||||||
public SetRestrictPingsToAssistants(WorldPacket packet) : base(packet) { }
|
public SetRestrictPingsToAssistants(WorldPacket packet) : base(packet) { }
|
||||||
|
|
||||||
public override void Read()
|
public override void Read()
|
||||||
{
|
{
|
||||||
bool hasPartyIndex = _worldPacket.HasBit();
|
bool hasPartyIndex = _worldPacket.HasBit();
|
||||||
RestrictPingsToAssistants = _worldPacket.HasBit();
|
RestrictTo = (RestrictPingsTo)_worldPacket.ReadInt32();
|
||||||
if (hasPartyIndex)
|
if (hasPartyIndex)
|
||||||
PartyIndex = _worldPacket.ReadUInt8();
|
PartyIndex = _worldPacket.ReadUInt8();
|
||||||
}
|
}
|
||||||
@@ -995,6 +998,7 @@ namespace Game.Networking.Packets
|
|||||||
public Vector3 Point;
|
public Vector3 Point;
|
||||||
public PingSubjectType Type = PingSubjectType.Max;
|
public PingSubjectType Type = PingSubjectType.Max;
|
||||||
public uint PinFrameID;
|
public uint PinFrameID;
|
||||||
|
public ObjectGuid Transport;
|
||||||
|
|
||||||
public SendPingWorldPoint(WorldPacket packet) : base(packet) { }
|
public SendPingWorldPoint(WorldPacket packet) : base(packet) { }
|
||||||
|
|
||||||
@@ -1003,8 +1007,9 @@ namespace Game.Networking.Packets
|
|||||||
SenderGUID = _worldPacket.ReadPackedGuid();
|
SenderGUID = _worldPacket.ReadPackedGuid();
|
||||||
MapID = _worldPacket.ReadUInt32();
|
MapID = _worldPacket.ReadUInt32();
|
||||||
Point = _worldPacket.ReadVector3();
|
Point = _worldPacket.ReadVector3();
|
||||||
Type = (PingSubjectType)_worldPacket.ReadUInt8();
|
Type = (PingSubjectType)_worldPacket.ReadUInt32();
|
||||||
PinFrameID = _worldPacket.ReadUInt32();
|
PinFrameID = _worldPacket.ReadUInt32();
|
||||||
|
Transport = _worldPacket.ReadPackedGuid();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1015,6 +1020,7 @@ namespace Game.Networking.Packets
|
|||||||
public Vector3 Point;
|
public Vector3 Point;
|
||||||
public PingSubjectType Type = PingSubjectType.Max;
|
public PingSubjectType Type = PingSubjectType.Max;
|
||||||
public uint PinFrameID;
|
public uint PinFrameID;
|
||||||
|
public ObjectGuid Transport;
|
||||||
|
|
||||||
public ReceivePingWorldPoint() : base(ServerOpcodes.ReceivePingWorldPoint) { }
|
public ReceivePingWorldPoint() : base(ServerOpcodes.ReceivePingWorldPoint) { }
|
||||||
|
|
||||||
@@ -1025,6 +1031,7 @@ namespace Game.Networking.Packets
|
|||||||
_worldPacket.WriteVector3(Point);
|
_worldPacket.WriteVector3(Point);
|
||||||
_worldPacket.WriteUInt8((byte)Type);
|
_worldPacket.WriteUInt8((byte)Type);
|
||||||
_worldPacket.WriteUInt32(PinFrameID);
|
_worldPacket.WriteUInt32(PinFrameID);
|
||||||
|
_worldPacket.WritePackedGuid(Transport);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -319,9 +319,9 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
_worldPacket.WritePackedGuid(Player);
|
_worldPacket.WritePackedGuid(Player);
|
||||||
_worldPacket.WriteInt32(ActualMapID);
|
_worldPacket.WriteInt32(ActualMapID);
|
||||||
_worldPacket.WriteVector3(Position);
|
|
||||||
_worldPacket.WriteInt32(MapID);
|
_worldPacket.WriteInt32(MapID);
|
||||||
_worldPacket.WritePackedGuid(Transport);
|
_worldPacket.WritePackedGuid(Transport);
|
||||||
|
_worldPacket.WriteVector3(Position);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ObjectGuid Player;
|
public ObjectGuid Player;
|
||||||
|
|||||||
@@ -195,7 +195,7 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
_worldPacket.WriteInt32(Info.Objectives.Count);
|
_worldPacket.WriteInt32(Info.Objectives.Count);
|
||||||
_worldPacket.WriteUInt64(Info.AllowableRaces.RawValue);
|
_worldPacket.WriteUInt64(Info.AllowableRaces.RawValue);
|
||||||
_worldPacket.WriteInt32(Info.TreasurePickerID);
|
_worldPacket.WriteInt32(Info.TreasurePickerID.Count);
|
||||||
_worldPacket.WriteInt32(Info.Expansion);
|
_worldPacket.WriteInt32(Info.Expansion);
|
||||||
_worldPacket.WriteInt32(Info.ManagedWorldStateID);
|
_worldPacket.WriteInt32(Info.ManagedWorldStateID);
|
||||||
_worldPacket.WriteInt32(Info.QuestSessionBonus);
|
_worldPacket.WriteInt32(Info.QuestSessionBonus);
|
||||||
@@ -207,6 +207,10 @@ namespace Game.Networking.Packets
|
|||||||
foreach (QuestCompleteDisplaySpell rewardDisplaySpell in Info.RewardDisplaySpell)
|
foreach (QuestCompleteDisplaySpell rewardDisplaySpell in Info.RewardDisplaySpell)
|
||||||
rewardDisplaySpell.Write(_worldPacket);
|
rewardDisplaySpell.Write(_worldPacket);
|
||||||
|
|
||||||
|
if (!Info.TreasurePickerID.Empty())
|
||||||
|
foreach (var id in Info.TreasurePickerID)
|
||||||
|
_worldPacket.WriteInt32(id);
|
||||||
|
|
||||||
_worldPacket.WriteBits(Info.LogTitle.GetByteCount(), 9);
|
_worldPacket.WriteBits(Info.LogTitle.GetByteCount(), 9);
|
||||||
_worldPacket.WriteBits(Info.LogDescription.GetByteCount(), 12);
|
_worldPacket.WriteBits(Info.LogDescription.GetByteCount(), 12);
|
||||||
_worldPacket.WriteBits(Info.QuestDescription.GetByteCount(), 12);
|
_worldPacket.WriteBits(Info.QuestDescription.GetByteCount(), 12);
|
||||||
@@ -217,12 +221,13 @@ namespace Game.Networking.Packets
|
|||||||
_worldPacket.WriteBits(Info.PortraitTurnInName.GetByteCount(), 8);
|
_worldPacket.WriteBits(Info.PortraitTurnInName.GetByteCount(), 8);
|
||||||
_worldPacket.WriteBits(Info.QuestCompletionLog.GetByteCount(), 11);
|
_worldPacket.WriteBits(Info.QuestCompletionLog.GetByteCount(), 11);
|
||||||
_worldPacket.WriteBit(Info.ReadyForTranslation);
|
_worldPacket.WriteBit(Info.ReadyForTranslation);
|
||||||
|
_worldPacket.WriteBit(Info.ResetByScheduler);
|
||||||
_worldPacket.FlushBits();
|
_worldPacket.FlushBits();
|
||||||
|
|
||||||
foreach (QuestObjective questObjective in Info.Objectives)
|
foreach (QuestObjective questObjective in Info.Objectives)
|
||||||
{
|
{
|
||||||
_worldPacket.WriteUInt32(questObjective.Id);
|
_worldPacket.WriteUInt32(questObjective.Id);
|
||||||
_worldPacket.WriteUInt8((byte)questObjective.Type);
|
_worldPacket.WriteInt32((int)questObjective.Type);
|
||||||
_worldPacket.WriteInt8(questObjective.StorageIndex);
|
_worldPacket.WriteInt8(questObjective.StorageIndex);
|
||||||
_worldPacket.WriteInt32(questObjective.ObjectID);
|
_worldPacket.WriteInt32(questObjective.ObjectID);
|
||||||
_worldPacket.WriteInt32(questObjective.Amount);
|
_worldPacket.WriteInt32(questObjective.Amount);
|
||||||
@@ -463,6 +468,7 @@ namespace Game.Networking.Packets
|
|||||||
_worldPacket.WriteInt32(DescEmotes.Count);
|
_worldPacket.WriteInt32(DescEmotes.Count);
|
||||||
_worldPacket.WriteInt32(Objectives.Count);
|
_worldPacket.WriteInt32(Objectives.Count);
|
||||||
_worldPacket.WriteInt32(QuestStartItemID);
|
_worldPacket.WriteInt32(QuestStartItemID);
|
||||||
|
_worldPacket.WriteInt32(QuestInfoID);
|
||||||
_worldPacket.WriteInt32(QuestSessionBonus);
|
_worldPacket.WriteInt32(QuestSessionBonus);
|
||||||
_worldPacket.WriteInt32(QuestGiverCreatureID);
|
_worldPacket.WriteInt32(QuestGiverCreatureID);
|
||||||
_worldPacket.WriteInt32(ConditionalDescriptionText.Count);
|
_worldPacket.WriteInt32(ConditionalDescriptionText.Count);
|
||||||
@@ -479,9 +485,9 @@ namespace Game.Networking.Packets
|
|||||||
foreach (QuestObjectiveSimple obj in Objectives)
|
foreach (QuestObjectiveSimple obj in Objectives)
|
||||||
{
|
{
|
||||||
_worldPacket.WriteUInt32(obj.Id);
|
_worldPacket.WriteUInt32(obj.Id);
|
||||||
|
_worldPacket.WriteUInt8(obj.Type);
|
||||||
_worldPacket.WriteInt32(obj.ObjectID);
|
_worldPacket.WriteInt32(obj.ObjectID);
|
||||||
_worldPacket.WriteInt32(obj.Amount);
|
_worldPacket.WriteInt32(obj.Amount);
|
||||||
_worldPacket.WriteUInt8(obj.Type);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_worldPacket.WriteBits(QuestTitle.GetByteCount(), 9);
|
_worldPacket.WriteBits(QuestTitle.GetByteCount(), 9);
|
||||||
@@ -527,6 +533,7 @@ namespace Game.Networking.Packets
|
|||||||
public uint PortraitGiverMount;
|
public uint PortraitGiverMount;
|
||||||
public int PortraitGiverModelSceneID;
|
public int PortraitGiverModelSceneID;
|
||||||
public int QuestStartItemID;
|
public int QuestStartItemID;
|
||||||
|
public int QuestInfoID;
|
||||||
public int QuestSessionBonus;
|
public int QuestSessionBonus;
|
||||||
public int QuestGiverCreatureID;
|
public int QuestGiverCreatureID;
|
||||||
public string PortraitGiverText = "";
|
public string PortraitGiverText = "";
|
||||||
@@ -562,6 +569,7 @@ namespace Game.Networking.Packets
|
|||||||
_worldPacket.WriteInt32(Collect.Count);
|
_worldPacket.WriteInt32(Collect.Count);
|
||||||
_worldPacket.WriteInt32(Currency.Count);
|
_worldPacket.WriteInt32(Currency.Count);
|
||||||
_worldPacket.WriteInt32(StatusFlags);
|
_worldPacket.WriteInt32(StatusFlags);
|
||||||
|
_worldPacket.WriteInt32(QuestInfoID);
|
||||||
|
|
||||||
foreach (QuestObjectiveCollect obj in Collect)
|
foreach (QuestObjectiveCollect obj in Collect)
|
||||||
{
|
{
|
||||||
@@ -603,6 +611,7 @@ namespace Game.Networking.Packets
|
|||||||
public List<QuestObjectiveCollect> Collect = new();
|
public List<QuestObjectiveCollect> Collect = new();
|
||||||
public List<QuestCurrency> Currency = new();
|
public List<QuestCurrency> Currency = new();
|
||||||
public int StatusFlags;
|
public int StatusFlags;
|
||||||
|
public int QuestInfoID;
|
||||||
public uint[] QuestFlags = new uint[3];
|
public uint[] QuestFlags = new uint[3];
|
||||||
public string QuestTitle = "";
|
public string QuestTitle = "";
|
||||||
public string CompletionText = "";
|
public string CompletionText = "";
|
||||||
@@ -1078,7 +1087,7 @@ namespace Game.Networking.Packets
|
|||||||
public uint CompleteSoundKitID;
|
public uint CompleteSoundKitID;
|
||||||
public uint AreaGroupID;
|
public uint AreaGroupID;
|
||||||
public long TimeAllowed;
|
public long TimeAllowed;
|
||||||
public int TreasurePickerID;
|
public List<int> TreasurePickerID = new();
|
||||||
public int Expansion;
|
public int Expansion;
|
||||||
public int ManagedWorldStateID;
|
public int ManagedWorldStateID;
|
||||||
public int QuestSessionBonus;
|
public int QuestSessionBonus;
|
||||||
@@ -1098,6 +1107,24 @@ namespace Game.Networking.Packets
|
|||||||
public uint[] RewardCurrencyID = new uint[SharedConst.QuestRewardCurrencyCount];
|
public uint[] RewardCurrencyID = new uint[SharedConst.QuestRewardCurrencyCount];
|
||||||
public uint[] RewardCurrencyQty = new uint[SharedConst.QuestRewardCurrencyCount];
|
public uint[] RewardCurrencyQty = new uint[SharedConst.QuestRewardCurrencyCount];
|
||||||
public bool ReadyForTranslation;
|
public bool ReadyForTranslation;
|
||||||
|
public bool ResetByScheduler;
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct QuestRewardItem
|
||||||
|
{
|
||||||
|
public uint ItemID;
|
||||||
|
public uint ItemQty;
|
||||||
|
public QuestRewardContextFlags? ContextFlags;
|
||||||
|
|
||||||
|
public void Write(WorldPacket data)
|
||||||
|
{
|
||||||
|
data.WriteUInt32(ItemID);
|
||||||
|
data.WriteUInt32(ItemQty);
|
||||||
|
data.WriteBit(ContextFlags.HasValue);
|
||||||
|
data.FlushBits();
|
||||||
|
if (ContextFlags.HasValue)
|
||||||
|
data.WriteInt32((int)ContextFlags);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct QuestChoiceItem
|
public struct QuestChoiceItem
|
||||||
@@ -1105,21 +1132,47 @@ namespace Game.Networking.Packets
|
|||||||
public LootItemType LootItemType;
|
public LootItemType LootItemType;
|
||||||
public ItemInstance Item;
|
public ItemInstance Item;
|
||||||
public uint Quantity;
|
public uint Quantity;
|
||||||
|
public QuestRewardContextFlags? ContextFlags;
|
||||||
|
|
||||||
public void Read(WorldPacket data)
|
public void Read(WorldPacket data)
|
||||||
{
|
{
|
||||||
data.ResetBitPos();
|
data.ResetBitPos();
|
||||||
LootItemType = (LootItemType)data.ReadBits<byte>(2);
|
LootItemType = (LootItemType)data.ReadBits<byte>(2);
|
||||||
|
bool hasContextFlags = data.HasBit();
|
||||||
Item = new ItemInstance();
|
Item = new ItemInstance();
|
||||||
Item.Read(data);
|
Item.Read(data);
|
||||||
Quantity = data.ReadUInt32();
|
Quantity = data.ReadUInt32();
|
||||||
|
if (hasContextFlags)
|
||||||
|
ContextFlags = (QuestRewardContextFlags)data.ReadInt32();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Write(WorldPacket data)
|
public void Write(WorldPacket data)
|
||||||
{
|
{
|
||||||
data.WriteBits((byte)LootItemType, 2);
|
data.WriteBits((byte)LootItemType, 2);
|
||||||
|
data.WriteBit(ContextFlags.HasValue);
|
||||||
Item.Write(data);
|
Item.Write(data);
|
||||||
data.WriteUInt32(Quantity);
|
data.WriteUInt32(Quantity);
|
||||||
|
if (ContextFlags.HasValue)
|
||||||
|
data.WriteInt32((int)ContextFlags.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct QuestRewardCurrency
|
||||||
|
{
|
||||||
|
public uint CurrencyID;
|
||||||
|
public uint CurrencyQty;
|
||||||
|
public int BonusQty;
|
||||||
|
public QuestRewardContextFlags? ContextFlags;
|
||||||
|
|
||||||
|
public void Write(WorldPacket data)
|
||||||
|
{
|
||||||
|
data.WriteUInt32(CurrencyID);
|
||||||
|
data.WriteUInt32(CurrencyQty);
|
||||||
|
data.WriteInt32(BonusQty);
|
||||||
|
data.WriteBit(ContextFlags.HasValue);
|
||||||
|
data.FlushBits();
|
||||||
|
if (ContextFlags.HasValue)
|
||||||
|
data.WriteInt32((int)ContextFlags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1138,29 +1191,23 @@ namespace Game.Networking.Packets
|
|||||||
public uint SpellCompletionID;
|
public uint SpellCompletionID;
|
||||||
public uint SkillLineID;
|
public uint SkillLineID;
|
||||||
public uint NumSkillUps;
|
public uint NumSkillUps;
|
||||||
public uint TreasurePickerID;
|
public List<int> TreasurePickerID = new();
|
||||||
public QuestChoiceItem[] ChoiceItems = new QuestChoiceItem[SharedConst.QuestRewardChoicesCount];
|
public QuestChoiceItem[] ChoiceItems = new QuestChoiceItem[SharedConst.QuestRewardChoicesCount];
|
||||||
public uint[] ItemID = new uint[SharedConst.QuestRewardItemCount];
|
public QuestRewardItem[] Items = new QuestRewardItem[SharedConst.QuestRewardItemCount];
|
||||||
public uint[] ItemQty = new uint[SharedConst.QuestRewardItemCount];
|
|
||||||
public uint[] FactionID = new uint[SharedConst.QuestRewardReputationsCount];
|
public uint[] FactionID = new uint[SharedConst.QuestRewardReputationsCount];
|
||||||
public int[] FactionValue = new int[SharedConst.QuestRewardReputationsCount];
|
public int[] FactionValue = new int[SharedConst.QuestRewardReputationsCount];
|
||||||
public int[] FactionOverride = new int[SharedConst.QuestRewardReputationsCount];
|
public int[] FactionOverride = new int[SharedConst.QuestRewardReputationsCount];
|
||||||
public int[] FactionCapIn = new int[SharedConst.QuestRewardReputationsCount];
|
public int[] FactionCapIn = new int[SharedConst.QuestRewardReputationsCount];
|
||||||
public uint[] CurrencyID = new uint[SharedConst.QuestRewardCurrencyCount];
|
public QuestRewardCurrency[] Currencies = new QuestRewardCurrency[SharedConst.QuestRewardCurrencyCount];
|
||||||
public uint[] CurrencyQty = new uint[SharedConst.QuestRewardCurrencyCount];
|
|
||||||
public bool IsBoostSpell;
|
public bool IsBoostSpell;
|
||||||
|
|
||||||
public void Write(WorldPacket data)
|
public void Write(WorldPacket data)
|
||||||
{
|
{
|
||||||
|
foreach (QuestRewardItem item in Items)
|
||||||
|
item.Write(data);
|
||||||
|
|
||||||
data.WriteUInt32(ChoiceItemCount);
|
data.WriteUInt32(ChoiceItemCount);
|
||||||
data.WriteUInt32(ItemCount);
|
data.WriteUInt32(ItemCount);
|
||||||
|
|
||||||
for (int i = 0; i < SharedConst.QuestRewardItemCount; ++i)
|
|
||||||
{
|
|
||||||
data.WriteUInt32(ItemID[i]);
|
|
||||||
data.WriteUInt32(ItemQty[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
data.WriteUInt32(Money);
|
data.WriteUInt32(Money);
|
||||||
data.WriteUInt32(XP);
|
data.WriteUInt32(XP);
|
||||||
data.WriteUInt64(ArtifactXP);
|
data.WriteUInt64(ArtifactXP);
|
||||||
@@ -1181,22 +1228,21 @@ namespace Game.Networking.Packets
|
|||||||
data.WriteInt32(id);
|
data.WriteInt32(id);
|
||||||
|
|
||||||
data.WriteUInt32(SpellCompletionID);
|
data.WriteUInt32(SpellCompletionID);
|
||||||
|
|
||||||
for (int i = 0; i < SharedConst.QuestRewardCurrencyCount; ++i)
|
|
||||||
{
|
|
||||||
data.WriteUInt32(CurrencyID[i]);
|
|
||||||
data.WriteUInt32(CurrencyQty[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
data.WriteUInt32(SkillLineID);
|
data.WriteUInt32(SkillLineID);
|
||||||
data.WriteUInt32(NumSkillUps);
|
data.WriteUInt32(NumSkillUps);
|
||||||
data.WriteUInt32(TreasurePickerID);
|
data.WriteInt32(TreasurePickerID.Count);
|
||||||
|
if (!TreasurePickerID.Empty())
|
||||||
|
foreach (var id in TreasurePickerID)
|
||||||
|
data.WriteInt32(id);
|
||||||
|
|
||||||
foreach (var choice in ChoiceItems)
|
foreach (QuestRewardCurrency currency in Currencies)
|
||||||
choice.Write(data);
|
currency.Write(data);
|
||||||
|
|
||||||
data.WriteBit(IsBoostSpell);
|
data.WriteBit(IsBoostSpell);
|
||||||
data.FlushBits();
|
data.FlushBits();
|
||||||
|
|
||||||
|
foreach (QuestChoiceItem choiceItem in ChoiceItems)
|
||||||
|
choiceItem.Write(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1223,8 +1269,9 @@ namespace Game.Networking.Packets
|
|||||||
data.WriteUInt32(QuestFlags[1]); // FlagsEx
|
data.WriteUInt32(QuestFlags[1]); // FlagsEx
|
||||||
data.WriteUInt32(QuestFlags[2]); // FlagsEx2
|
data.WriteUInt32(QuestFlags[2]); // FlagsEx2
|
||||||
data.WriteUInt32(SuggestedPartyMembers);
|
data.WriteUInt32(SuggestedPartyMembers);
|
||||||
|
data.WriteInt32(QuestInfoID);
|
||||||
data.WriteInt32(Emotes.Count);
|
data.WriteInt32(Emotes.Count);
|
||||||
|
|
||||||
foreach (QuestDescEmote emote in Emotes)
|
foreach (QuestDescEmote emote in Emotes)
|
||||||
{
|
{
|
||||||
data.WriteInt32(emote.Type);
|
data.WriteInt32(emote.Type);
|
||||||
@@ -1246,14 +1293,15 @@ namespace Game.Networking.Packets
|
|||||||
public QuestRewards Rewards = new();
|
public QuestRewards Rewards = new();
|
||||||
public List<QuestDescEmote> Emotes = new();
|
public List<QuestDescEmote> Emotes = new();
|
||||||
public uint[] QuestFlags = new uint[3]; // Flags and FlagsEx
|
public uint[] QuestFlags = new uint[3]; // Flags and FlagsEx
|
||||||
|
public int QuestInfoID;
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct QuestObjectiveSimple
|
public struct QuestObjectiveSimple
|
||||||
{
|
{
|
||||||
public uint Id;
|
public uint Id;
|
||||||
|
public byte Type;
|
||||||
public int ObjectID;
|
public int ObjectID;
|
||||||
public int Amount;
|
public int Amount;
|
||||||
public byte Type;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct QuestObjectiveCollect
|
public struct QuestObjectiveCollect
|
||||||
|
|||||||
@@ -8,27 +8,22 @@ namespace Game.Networking.Packets
|
|||||||
{
|
{
|
||||||
public class InitializeFactions : ServerPacket
|
public class InitializeFactions : ServerPacket
|
||||||
{
|
{
|
||||||
const ushort FactionCount = 1000;
|
|
||||||
|
|
||||||
public InitializeFactions() : base(ServerOpcodes.InitializeFactions, ConnectionType.Instance) { }
|
public InitializeFactions() : base(ServerOpcodes.InitializeFactions, ConnectionType.Instance) { }
|
||||||
|
|
||||||
public override void Write()
|
public override void Write()
|
||||||
{
|
{
|
||||||
for (ushort i = 0; i < FactionCount; ++i)
|
_worldPacket.WriteInt32(Factions.Count);
|
||||||
{
|
_worldPacket.WriteInt32(Bonuses.Count);
|
||||||
_worldPacket.WriteUInt16((ushort)((ushort)FactionFlags[i] & 0xFF));
|
|
||||||
_worldPacket.WriteInt32(FactionStandings[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (ushort i = 0; i < FactionCount; ++i)
|
foreach (FactionData faction in Factions)
|
||||||
_worldPacket.WriteBit(FactionHasBonus[i]);
|
faction.Write(_worldPacket);
|
||||||
|
|
||||||
_worldPacket.FlushBits();
|
foreach (FactionBonusData bonus in Bonuses)
|
||||||
|
bonus.Write(_worldPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int[] FactionStandings = new int[FactionCount];
|
public List<FactionData> Factions = new();
|
||||||
public bool[] FactionHasBonus = new bool[FactionCount]; //@todo: implement faction bonus
|
public List<FactionBonusData> Bonuses = new();
|
||||||
public ReputationFlags[] FactionFlags = new ReputationFlags[FactionCount];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class RequestForcedReactions : ClientPacket
|
class RequestForcedReactions : ClientPacket
|
||||||
@@ -73,6 +68,33 @@ namespace Game.Networking.Packets
|
|||||||
public bool ShowVisual;
|
public bool ShowVisual;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public struct FactionData
|
||||||
|
{
|
||||||
|
public uint FactionID;
|
||||||
|
public ushort Flags;
|
||||||
|
public int Standing;
|
||||||
|
|
||||||
|
public void Write(WorldPacket data)
|
||||||
|
{
|
||||||
|
data.WriteUInt32(FactionID);
|
||||||
|
data.WriteUInt16(Flags);
|
||||||
|
data.WriteInt32(Standing);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct FactionBonusData
|
||||||
|
{
|
||||||
|
public uint FactionID;
|
||||||
|
public bool FactionHasBonus;
|
||||||
|
|
||||||
|
public void Write(WorldPacket data)
|
||||||
|
{
|
||||||
|
data.WriteUInt32(FactionID);
|
||||||
|
data.WriteBit(FactionHasBonus);
|
||||||
|
data.FlushBits();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct ForcedReaction
|
struct ForcedReaction
|
||||||
{
|
{
|
||||||
public void Write(WorldPacket data)
|
public void Write(WorldPacket data)
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ namespace Game.Networking.Packets
|
|||||||
_worldPacket.WriteUInt32(SceneScriptPackageID);
|
_worldPacket.WriteUInt32(SceneScriptPackageID);
|
||||||
_worldPacket.WritePackedGuid(TransportGUID);
|
_worldPacket.WritePackedGuid(TransportGUID);
|
||||||
_worldPacket.WriteXYZO(Location);
|
_worldPacket.WriteXYZO(Location);
|
||||||
|
_worldPacket.WriteInt32(MovieID);
|
||||||
_worldPacket.WriteBit(Encrypted);
|
_worldPacket.WriteBit(Encrypted);
|
||||||
_worldPacket.FlushBits();
|
_worldPacket.FlushBits();
|
||||||
}
|
}
|
||||||
@@ -26,6 +27,7 @@ namespace Game.Networking.Packets
|
|||||||
public uint PlaybackFlags;
|
public uint PlaybackFlags;
|
||||||
public uint SceneInstanceID;
|
public uint SceneInstanceID;
|
||||||
public uint SceneScriptPackageID;
|
public uint SceneScriptPackageID;
|
||||||
|
public int MovieID;
|
||||||
public ObjectGuid TransportGUID;
|
public ObjectGuid TransportGUID;
|
||||||
public Position Location;
|
public Position Location;
|
||||||
public bool Encrypted;
|
public bool Encrypted;
|
||||||
|
|||||||
@@ -69,7 +69,6 @@ namespace Game.Networking.Packets
|
|||||||
_worldPacket.WriteUInt32(Level);
|
_worldPacket.WriteUInt32(Level);
|
||||||
_worldPacket.WriteUInt32((uint)ClassID);
|
_worldPacket.WriteUInt32((uint)ClassID);
|
||||||
_worldPacket.WriteBits(Notes.GetByteCount(), 10);
|
_worldPacket.WriteBits(Notes.GetByteCount(), 10);
|
||||||
_worldPacket.WriteBit(Mobile);
|
|
||||||
_worldPacket.FlushBits();
|
_worldPacket.FlushBits();
|
||||||
_worldPacket.WriteString(Notes);
|
_worldPacket.WriteString(Notes);
|
||||||
}
|
}
|
||||||
@@ -83,7 +82,6 @@ namespace Game.Networking.Packets
|
|||||||
public uint Level;
|
public uint Level;
|
||||||
public uint AreaID;
|
public uint AreaID;
|
||||||
public FriendsResult FriendResult;
|
public FriendsResult FriendResult;
|
||||||
public bool Mobile;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class AddFriend : ClientPacket
|
public class AddFriend : ClientPacket
|
||||||
@@ -204,7 +202,6 @@ namespace Game.Networking.Packets
|
|||||||
data.WriteUInt32(Level);
|
data.WriteUInt32(Level);
|
||||||
data.WriteUInt32((uint)ClassID);
|
data.WriteUInt32((uint)ClassID);
|
||||||
data.WriteBits(Notes.GetByteCount(), 10);
|
data.WriteBits(Notes.GetByteCount(), 10);
|
||||||
data.WriteBit(Mobile);
|
|
||||||
data.FlushBits();
|
data.FlushBits();
|
||||||
data.WriteString(Notes);
|
data.WriteString(Notes);
|
||||||
}
|
}
|
||||||
@@ -219,7 +216,6 @@ namespace Game.Networking.Packets
|
|||||||
uint AreaID;
|
uint AreaID;
|
||||||
uint Level;
|
uint Level;
|
||||||
Class ClassID;
|
Class ClassID;
|
||||||
bool Mobile;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct QualifiedGUID
|
public struct QualifiedGUID
|
||||||
|
|||||||
@@ -668,6 +668,7 @@ namespace Game.Networking.Packets
|
|||||||
_worldPacket.WriteVector3(SourceRotation);
|
_worldPacket.WriteVector3(SourceRotation);
|
||||||
_worldPacket.WriteVector3(TargetLocation);
|
_worldPacket.WriteVector3(TargetLocation);
|
||||||
_worldPacket.WritePackedGuid(Target);
|
_worldPacket.WritePackedGuid(Target);
|
||||||
|
_worldPacket.WritePackedGuid(TargetTransport);
|
||||||
_worldPacket.WriteUInt32(SpellVisualID);
|
_worldPacket.WriteUInt32(SpellVisualID);
|
||||||
_worldPacket.WriteFloat(TravelSpeed);
|
_worldPacket.WriteFloat(TravelSpeed);
|
||||||
_worldPacket.WriteFloat(LaunchDelay);
|
_worldPacket.WriteFloat(LaunchDelay);
|
||||||
@@ -677,6 +678,7 @@ namespace Game.Networking.Packets
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ObjectGuid Target; // Exclusive with TargetLocation
|
public ObjectGuid Target; // Exclusive with TargetLocation
|
||||||
|
public ObjectGuid TargetTransport;
|
||||||
public Position SourceLocation;
|
public Position SourceLocation;
|
||||||
public uint SpellVisualID;
|
public uint SpellVisualID;
|
||||||
public bool SpeedAsTime;
|
public bool SpeedAsTime;
|
||||||
@@ -1294,14 +1296,14 @@ namespace Game.Networking.Packets
|
|||||||
//Structs
|
//Structs
|
||||||
public struct SpellLogPowerData
|
public struct SpellLogPowerData
|
||||||
{
|
{
|
||||||
public SpellLogPowerData(int powerType, int amount, int cost)
|
public SpellLogPowerData(sbyte powerType, int amount, int cost)
|
||||||
{
|
{
|
||||||
PowerType = powerType;
|
PowerType = powerType;
|
||||||
Amount = amount;
|
Amount = amount;
|
||||||
Cost = cost;
|
Cost = cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int PowerType;
|
public sbyte PowerType;
|
||||||
public int Amount;
|
public int Amount;
|
||||||
public int Cost;
|
public int Cost;
|
||||||
}
|
}
|
||||||
@@ -1314,7 +1316,7 @@ namespace Game.Networking.Packets
|
|||||||
AttackPower = (int)unit.GetTotalAttackPowerValue(unit.GetClass() == Class.Hunter ? WeaponAttackType.RangedAttack : WeaponAttackType.BaseAttack);
|
AttackPower = (int)unit.GetTotalAttackPowerValue(unit.GetClass() == Class.Hunter ? WeaponAttackType.RangedAttack : WeaponAttackType.BaseAttack);
|
||||||
SpellPower = unit.SpellBaseDamageBonusDone(SpellSchoolMask.Spell);
|
SpellPower = unit.SpellBaseDamageBonusDone(SpellSchoolMask.Spell);
|
||||||
Armor = unit.GetArmor();
|
Armor = unit.GetArmor();
|
||||||
PowerData.Add(new SpellLogPowerData((int)unit.GetPowerType(), unit.GetPower(unit.GetPowerType()), 0));
|
PowerData.Add(new SpellLogPowerData((sbyte)unit.GetPowerType(), unit.GetPower(unit.GetPowerType()), 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Initialize(Spell spell)
|
public void Initialize(Spell spell)
|
||||||
@@ -1330,13 +1332,13 @@ namespace Game.Networking.Packets
|
|||||||
bool primaryPowerAdded = false;
|
bool primaryPowerAdded = false;
|
||||||
foreach (SpellPowerCost cost in spell.GetPowerCost())
|
foreach (SpellPowerCost cost in spell.GetPowerCost())
|
||||||
{
|
{
|
||||||
PowerData.Add(new SpellLogPowerData((int)cost.Power, unitCaster.GetPower(cost.Power), (int)cost.Amount));
|
PowerData.Add(new SpellLogPowerData((sbyte)cost.Power, unitCaster.GetPower(cost.Power), (int)cost.Amount));
|
||||||
if (cost.Power == primaryPowerType)
|
if (cost.Power == primaryPowerType)
|
||||||
primaryPowerAdded = true;
|
primaryPowerAdded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!primaryPowerAdded)
|
if (!primaryPowerAdded)
|
||||||
PowerData.Insert(0, new SpellLogPowerData((int)primaryPowerType, unitCaster.GetPower(primaryPowerType), 0));
|
PowerData.Insert(0, new SpellLogPowerData((sbyte)primaryPowerType, unitCaster.GetPower(primaryPowerType), 0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1351,7 +1353,7 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
foreach (SpellLogPowerData powerData in PowerData)
|
foreach (SpellLogPowerData powerData in PowerData)
|
||||||
{
|
{
|
||||||
data.WriteInt32(powerData.PowerType);
|
data.WriteInt8(powerData.PowerType);
|
||||||
data.WriteInt32(powerData.Amount);
|
data.WriteInt32(powerData.Amount);
|
||||||
data.WriteInt32(powerData.Cost);
|
data.WriteInt32(powerData.Cost);
|
||||||
}
|
}
|
||||||
@@ -1812,6 +1814,7 @@ namespace Game.Networking.Packets
|
|||||||
public Array<SpellCraftingReagent> RemovedModifications = new(6);
|
public Array<SpellCraftingReagent> RemovedModifications = new(6);
|
||||||
public Array<SpellExtraCurrencyCost> OptionalCurrencies = new(5 /*MAX_ITEM_EXT_COST_CURRENCIES*/);
|
public Array<SpellExtraCurrencyCost> OptionalCurrencies = new(5 /*MAX_ITEM_EXT_COST_CURRENCIES*/);
|
||||||
public ulong? CraftingOrderID;
|
public ulong? CraftingOrderID;
|
||||||
|
public byte CraftingFlags; // 1 = ApplyConcentration
|
||||||
public ObjectGuid CraftingNPC;
|
public ObjectGuid CraftingNPC;
|
||||||
public uint[] Misc = new uint[2];
|
public uint[] Misc = new uint[2];
|
||||||
|
|
||||||
@@ -1830,6 +1833,7 @@ namespace Game.Networking.Packets
|
|||||||
var optionalCurrenciesCount = data.ReadUInt32();
|
var optionalCurrenciesCount = data.ReadUInt32();
|
||||||
var optionalReagentsCount = data.ReadUInt32();
|
var optionalReagentsCount = data.ReadUInt32();
|
||||||
var removedModificationsCount = data.ReadUInt32();
|
var removedModificationsCount = data.ReadUInt32();
|
||||||
|
CraftingFlags = data.ReadUInt8();
|
||||||
|
|
||||||
for (var i = 0; i < optionalCurrenciesCount; ++i)
|
for (var i = 0; i < optionalCurrenciesCount; ++i)
|
||||||
OptionalCurrencies[i].Read(data);
|
OptionalCurrencies[i].Read(data);
|
||||||
@@ -1906,8 +1910,8 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
public void Write(WorldPacket data)
|
public void Write(WorldPacket data)
|
||||||
{
|
{
|
||||||
data.WriteInt32(Cost);
|
|
||||||
data.WriteInt8((sbyte)Type);
|
data.WriteInt8((sbyte)Type);
|
||||||
|
data.WriteInt32(Cost);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,8 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
_worldPacket.WriteInt32(ActiveSeason);
|
_worldPacket.WriteInt32(ActiveSeason);
|
||||||
_worldPacket.WriteInt32(GameRuleValues.Count);
|
_worldPacket.WriteInt32(GameRuleValues.Count);
|
||||||
|
_worldPacket.WriteInt32(ActiveTimerunningSeasonID);
|
||||||
|
_worldPacket.WriteInt32(RemainingTimerunningSeasonSeconds);
|
||||||
|
|
||||||
_worldPacket.WriteInt16(MaxPlayerNameQueriesPerPacket);
|
_worldPacket.WriteInt16(MaxPlayerNameQueriesPerPacket);
|
||||||
_worldPacket.WriteInt16(PlayerNameQueryTelemetryInterval);
|
_worldPacket.WriteInt16(PlayerNameQueryTelemetryInterval);
|
||||||
@@ -87,19 +89,25 @@ namespace Game.Networking.Packets
|
|||||||
_worldPacket.WriteBit(ChatDisabledByPlayer);
|
_worldPacket.WriteBit(ChatDisabledByPlayer);
|
||||||
_worldPacket.WriteBit(LFGListCustomRequiresAuthenticator);
|
_worldPacket.WriteBit(LFGListCustomRequiresAuthenticator);
|
||||||
_worldPacket.WriteBit(AddonsDisabled);
|
_worldPacket.WriteBit(AddonsDisabled);
|
||||||
|
_worldPacket.WriteBit(TimerunningEnabled);
|
||||||
_worldPacket.WriteBit(WarGamesEnabled);
|
_worldPacket.WriteBit(WarGamesEnabled);
|
||||||
_worldPacket.WriteBit(ContentTrackingEnabled);
|
_worldPacket.WriteBit(ContentTrackingEnabled);
|
||||||
_worldPacket.WriteBit(IsSellAllJunkEnabled);
|
_worldPacket.WriteBit(IsSellAllJunkEnabled);
|
||||||
_worldPacket.WriteBit(IsGroupFinderEnabled);
|
|
||||||
|
|
||||||
|
_worldPacket.WriteBit(IsGroupFinderEnabled);
|
||||||
_worldPacket.WriteBit(IsLFDEnabled);
|
_worldPacket.WriteBit(IsLFDEnabled);
|
||||||
_worldPacket.WriteBit(IsLFREnabled);
|
_worldPacket.WriteBit(IsLFREnabled);
|
||||||
_worldPacket.WriteBit(IsPremadeGroupEnabled);
|
_worldPacket.WriteBit(IsPremadeGroupEnabled);
|
||||||
_worldPacket.WriteBit(CanShowSetRoleButton);
|
_worldPacket.WriteBit(CanShowSetRoleButton);
|
||||||
_worldPacket.WriteBit(false); // unused 10.2.7
|
_worldPacket.WriteBit(false); // unused 10.2.7
|
||||||
_worldPacket.WriteBit(false); // unused 10.2.7
|
_worldPacket.WriteBit(GuildEventsEditsEnabled);
|
||||||
|
_worldPacket.WriteBit(GuildTradeSkillsEnabled);
|
||||||
|
|
||||||
_worldPacket.WriteBits(Unknown1027.GetByteCount(), 7);
|
_worldPacket.WriteBits(Unknown1027.GetByteCount(), 7);
|
||||||
|
_worldPacket.WriteBit(BNSendWhisperUseV2Services);
|
||||||
|
|
||||||
|
_worldPacket.WriteBit(BNSendGameDataUseV2Services);
|
||||||
|
_worldPacket.WriteBit(IsAccountCurrencyTransferEnabled);
|
||||||
|
|
||||||
_worldPacket.FlushBits();
|
_worldPacket.FlushBits();
|
||||||
|
|
||||||
@@ -194,6 +202,7 @@ namespace Game.Networking.Packets
|
|||||||
public bool ChatDisabledByPlayer;
|
public bool ChatDisabledByPlayer;
|
||||||
public bool LFGListCustomRequiresAuthenticator;
|
public bool LFGListCustomRequiresAuthenticator;
|
||||||
public bool AddonsDisabled;
|
public bool AddonsDisabled;
|
||||||
|
public bool TimerunningEnabled;
|
||||||
public bool WarGamesEnabled; // classic only
|
public bool WarGamesEnabled; // classic only
|
||||||
public bool ContentTrackingEnabled;
|
public bool ContentTrackingEnabled;
|
||||||
public bool IsSellAllJunkEnabled;
|
public bool IsSellAllJunkEnabled;
|
||||||
@@ -202,11 +211,18 @@ namespace Game.Networking.Packets
|
|||||||
public bool IsLFREnabled = true; // classic only
|
public bool IsLFREnabled = true; // classic only
|
||||||
public bool IsPremadeGroupEnabled = true; // classic only
|
public bool IsPremadeGroupEnabled = true; // classic only
|
||||||
public bool CanShowSetRoleButton = true;
|
public bool CanShowSetRoleButton = true;
|
||||||
|
public bool GuildEventsEditsEnabled = true;
|
||||||
|
public bool GuildTradeSkillsEnabled = true;
|
||||||
|
public bool BNSendWhisperUseV2Services = true; ///< BNSendWhisper will send to v2.WhisperService instead of v1.NotificationService
|
||||||
|
public bool BNSendGameDataUseV2Services = true; ///< BNSendGameData will send to v2.NotificationService instead of v1.NotificationService
|
||||||
|
public bool IsAccountCurrencyTransferEnabled;
|
||||||
|
|
||||||
public SocialQueueConfig QuickJoinConfig;
|
public SocialQueueConfig QuickJoinConfig;
|
||||||
public SquelchInfo Squelch;
|
public SquelchInfo Squelch;
|
||||||
public RafSystemFeatureInfo RAFSystem;
|
public RafSystemFeatureInfo RAFSystem;
|
||||||
public List<GameRuleValuePair> GameRuleValues = new();
|
public List<GameRuleValuePair> GameRuleValues = new();
|
||||||
|
public int ActiveTimerunningSeasonID;
|
||||||
|
public int RemainingTimerunningSeasonSeconds;
|
||||||
public string Unknown1027; // related to movement lua functions used by keybinds
|
public string Unknown1027; // related to movement lua functions used by keybinds
|
||||||
public AddonChatThrottleParams AddonChatThrottle;
|
public AddonChatThrottleParams AddonChatThrottle;
|
||||||
|
|
||||||
@@ -290,10 +306,11 @@ namespace Game.Networking.Packets
|
|||||||
_worldPacket.WriteBit(IsBoostEnabled);
|
_worldPacket.WriteBit(IsBoostEnabled);
|
||||||
_worldPacket.WriteBit(TrialBoostEnabled);
|
_worldPacket.WriteBit(TrialBoostEnabled);
|
||||||
_worldPacket.WriteBit(TokenBalanceEnabled);
|
_worldPacket.WriteBit(TokenBalanceEnabled);
|
||||||
|
_worldPacket.WriteBit(PaidCharacterTransfersBetweenBnetAccountsEnabled);
|
||||||
_worldPacket.WriteBit(LiveRegionCharacterListEnabled);
|
_worldPacket.WriteBit(LiveRegionCharacterListEnabled);
|
||||||
_worldPacket.WriteBit(LiveRegionCharacterCopyEnabled);
|
_worldPacket.WriteBit(LiveRegionCharacterCopyEnabled);
|
||||||
_worldPacket.WriteBit(LiveRegionAccountCopyEnabled);
|
|
||||||
|
|
||||||
|
_worldPacket.WriteBit(LiveRegionAccountCopyEnabled);
|
||||||
_worldPacket.WriteBit(LiveRegionKeyBindingsCopyEnabled);
|
_worldPacket.WriteBit(LiveRegionKeyBindingsCopyEnabled);
|
||||||
_worldPacket.WriteBit(Unknown901CheckoutRelated);
|
_worldPacket.WriteBit(Unknown901CheckoutRelated);
|
||||||
_worldPacket.WriteBit(false); // unused, 10.0.2
|
_worldPacket.WriteBit(false); // unused, 10.0.2
|
||||||
@@ -301,13 +318,18 @@ namespace Game.Networking.Packets
|
|||||||
_worldPacket.WriteBit(IsNameReservationEnabled);
|
_worldPacket.WriteBit(IsNameReservationEnabled);
|
||||||
_worldPacket.WriteBit(LaunchETA.HasValue);
|
_worldPacket.WriteBit(LaunchETA.HasValue);
|
||||||
_worldPacket.WriteBit(TimerunningEnabled);
|
_worldPacket.WriteBit(TimerunningEnabled);
|
||||||
_worldPacket.WriteBit(AddonsDisabled);
|
|
||||||
|
|
||||||
|
_worldPacket.WriteBit(AddonsDisabled);
|
||||||
_worldPacket.WriteBit(Unused1000);
|
_worldPacket.WriteBit(Unused1000);
|
||||||
_worldPacket.WriteBit(AccountSaveDataExportEnabled);
|
_worldPacket.WriteBit(AccountSaveDataExportEnabled);
|
||||||
_worldPacket.WriteBit(AccountLockedByExport);
|
_worldPacket.WriteBit(AccountLockedByExport);
|
||||||
_worldPacket.WriteBits(RealmHiddenAlert.GetByteCount() + 1, 11);
|
_worldPacket.WriteBits(RealmHiddenAlert.GetByteCount() + 1, 11);
|
||||||
|
|
||||||
|
_worldPacket.WriteBit(BNSendWhisperUseV2Services);
|
||||||
|
|
||||||
|
_worldPacket.WriteBit(BNSendGameDataUseV2Services);
|
||||||
|
_worldPacket.WriteBit(CharacterSelectListModeRealmless);
|
||||||
|
|
||||||
_worldPacket.FlushBits();
|
_worldPacket.FlushBits();
|
||||||
|
|
||||||
if (EuropaTicketSystemStatus.HasValue)
|
if (EuropaTicketSystemStatus.HasValue)
|
||||||
@@ -363,6 +385,7 @@ namespace Game.Networking.Packets
|
|||||||
public bool IsBoostEnabled; // classic only
|
public bool IsBoostEnabled; // classic only
|
||||||
public bool TrialBoostEnabled; // NYI
|
public bool TrialBoostEnabled; // NYI
|
||||||
public bool TokenBalanceEnabled; // NYI
|
public bool TokenBalanceEnabled; // NYI
|
||||||
|
public bool PaidCharacterTransfersBetweenBnetAccountsEnabled;
|
||||||
public bool LiveRegionCharacterListEnabled; // NYI
|
public bool LiveRegionCharacterListEnabled; // NYI
|
||||||
public bool LiveRegionCharacterCopyEnabled; // NYI
|
public bool LiveRegionCharacterCopyEnabled; // NYI
|
||||||
public bool LiveRegionAccountCopyEnabled; // NYI
|
public bool LiveRegionAccountCopyEnabled; // NYI
|
||||||
@@ -374,6 +397,9 @@ namespace Game.Networking.Packets
|
|||||||
public bool Unused1000;
|
public bool Unused1000;
|
||||||
public bool AccountSaveDataExportEnabled;
|
public bool AccountSaveDataExportEnabled;
|
||||||
public bool AccountLockedByExport;
|
public bool AccountLockedByExport;
|
||||||
|
public bool BNSendWhisperUseV2Services = true; ///< BNSendWhisper will send to v2.WhisperService instead of v1.NotificationService
|
||||||
|
public bool BNSendGameDataUseV2Services = true; ///< BNSendGameData will send to v2.NotificationService instead of v1.NotificationService
|
||||||
|
public bool CharacterSelectListModeRealmless;
|
||||||
public EuropaTicketConfig? EuropaTicketSystemStatus;
|
public EuropaTicketConfig? EuropaTicketSystemStatus;
|
||||||
public List<int> LiveRegionCharacterCopySourceRegions = new();
|
public List<int> LiveRegionCharacterCopySourceRegions = new();
|
||||||
public uint TokenPollTimeSeconds; // NYI
|
public uint TokenPollTimeSeconds; // NYI
|
||||||
|
|||||||
@@ -148,6 +148,51 @@ namespace Game.Networking.Packets
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class TraitSubTreeCache
|
||||||
|
{
|
||||||
|
public int TraitSubTreeID;
|
||||||
|
public List<TraitEntryPacket> Entries = new();
|
||||||
|
public bool Active;
|
||||||
|
|
||||||
|
public TraitSubTreeCache() { }
|
||||||
|
public TraitSubTreeCache(TraitSubTreeCache ufSubTreeCache)
|
||||||
|
{
|
||||||
|
TraitSubTreeID = ufSubTreeCache.TraitSubTreeID;
|
||||||
|
foreach (var ufEntry in ufSubTreeCache.Entries)
|
||||||
|
Entries.Add(ufEntry);
|
||||||
|
Active = ufSubTreeCache.Active;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Read(WorldPacket data)
|
||||||
|
{
|
||||||
|
TraitSubTreeID = data.ReadInt32();
|
||||||
|
uint entriesSize = data.ReadUInt32();
|
||||||
|
//if (entriesSize > 100)
|
||||||
|
//throw new Exception(entriesSize, 100);
|
||||||
|
|
||||||
|
for (var i = 0; i < entriesSize; ++i)
|
||||||
|
{
|
||||||
|
var entry = new TraitEntryPacket();
|
||||||
|
entry.Read(data);
|
||||||
|
Entries.Add(entry);
|
||||||
|
}
|
||||||
|
|
||||||
|
Active = data.HasBit();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Write(WorldPacket data)
|
||||||
|
{
|
||||||
|
data.WriteInt32(TraitSubTreeID);
|
||||||
|
data.WriteInt32(Entries.Count);
|
||||||
|
|
||||||
|
foreach (var traitEntry in Entries)
|
||||||
|
traitEntry.Write(data);
|
||||||
|
|
||||||
|
data.WriteBit(Active);
|
||||||
|
data.FlushBits();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public class TraitConfigPacket
|
public class TraitConfigPacket
|
||||||
{
|
{
|
||||||
public int ID;
|
public int ID;
|
||||||
@@ -158,9 +203,11 @@ namespace Game.Networking.Packets
|
|||||||
public uint SkillLineID;
|
public uint SkillLineID;
|
||||||
public int TraitSystemID;
|
public int TraitSystemID;
|
||||||
public List<TraitEntryPacket> Entries = new();
|
public List<TraitEntryPacket> Entries = new();
|
||||||
|
public List<TraitSubTreeCache> SubTrees = new();
|
||||||
public string Name = "";
|
public string Name = "";
|
||||||
|
|
||||||
public TraitConfigPacket() { }
|
public TraitConfigPacket() { }
|
||||||
|
|
||||||
public TraitConfigPacket(TraitConfig ufConfig)
|
public TraitConfigPacket(TraitConfig ufConfig)
|
||||||
{
|
{
|
||||||
ID = ufConfig.ID;
|
ID = ufConfig.ID;
|
||||||
@@ -174,12 +221,14 @@ namespace Game.Networking.Packets
|
|||||||
Entries.Add(new TraitEntryPacket(ufEntry));
|
Entries.Add(new TraitEntryPacket(ufEntry));
|
||||||
Name = ufConfig.Name;
|
Name = ufConfig.Name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Read(WorldPacket data)
|
public void Read(WorldPacket data)
|
||||||
{
|
{
|
||||||
ID = data.ReadInt32();
|
ID = data.ReadInt32();
|
||||||
Type = (TraitConfigType)data.ReadInt32();
|
Type = (TraitConfigType)data.ReadInt32();
|
||||||
var entriesCount = data.ReadInt32();
|
int entriesCount = data.ReadInt32();
|
||||||
|
int subtreesSize = data.ReadInt32();
|
||||||
|
|
||||||
switch (Type)
|
switch (Type)
|
||||||
{
|
{
|
||||||
case TraitConfigType.Combat:
|
case TraitConfigType.Combat:
|
||||||
@@ -205,6 +254,14 @@ namespace Game.Networking.Packets
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint nameLength = data.ReadBits<uint>(9);
|
uint nameLength = data.ReadBits<uint>(9);
|
||||||
|
|
||||||
|
for (var i = 0; i < subtreesSize; ++i)
|
||||||
|
{
|
||||||
|
TraitSubTreeCache subtrees = new();
|
||||||
|
subtrees.Read(data);
|
||||||
|
SubTrees.Add(subtrees);
|
||||||
|
}
|
||||||
|
|
||||||
Name = data.ReadString(nameLength);
|
Name = data.ReadString(nameLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -213,6 +270,8 @@ namespace Game.Networking.Packets
|
|||||||
data.WriteInt32(ID);
|
data.WriteInt32(ID);
|
||||||
data.WriteInt32((int)Type);
|
data.WriteInt32((int)Type);
|
||||||
data.WriteInt32(Entries.Count);
|
data.WriteInt32(Entries.Count);
|
||||||
|
data.WriteInt32(SubTrees.Count);
|
||||||
|
|
||||||
switch (Type)
|
switch (Type)
|
||||||
{
|
{
|
||||||
case TraitConfigType.Combat:
|
case TraitConfigType.Combat:
|
||||||
@@ -234,6 +293,10 @@ namespace Game.Networking.Packets
|
|||||||
traitEntry.Write(data);
|
traitEntry.Write(data);
|
||||||
|
|
||||||
data.WriteBits(Name.GetByteCount(), 9);
|
data.WriteBits(Name.GetByteCount(), 9);
|
||||||
|
|
||||||
|
foreach (TraitSubTreeCache traitSubTreeCache in SubTrees)
|
||||||
|
traitSubTreeCache.Write(data);
|
||||||
|
|
||||||
data.FlushBits();
|
data.FlushBits();
|
||||||
|
|
||||||
data.WriteString(Name);
|
data.WriteString(Name);
|
||||||
|
|||||||
+29
-11
@@ -103,7 +103,7 @@ namespace Game
|
|||||||
AreaGroupID = fields.Read<uint>(100);
|
AreaGroupID = fields.Read<uint>(100);
|
||||||
LimitTime = fields.Read<uint>(101);
|
LimitTime = fields.Read<uint>(101);
|
||||||
AllowableRaces = new(fields.Read<ulong>(102));
|
AllowableRaces = new(fields.Read<ulong>(102));
|
||||||
TreasurePickerID = fields.Read<int>(103);
|
ResetByScheduler = fields.Read<bool>(103);
|
||||||
Expansion = fields.Read<int>(104);
|
Expansion = fields.Read<int>(104);
|
||||||
ManagedWorldStateID = fields.Read<int>(105);
|
ManagedWorldStateID = fields.Read<int>(105);
|
||||||
QuestSessionBonus = fields.Read<int>(106);
|
QuestSessionBonus = fields.Read<int>(106);
|
||||||
@@ -301,7 +301,7 @@ namespace Game
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LoadConditionalConditionalQuestDescription(SQLFields fields)
|
public void LoadConditionalConditionalQuestDescription(SQLFields fields)
|
||||||
{
|
{
|
||||||
Locale locale = fields.Read<string>(4).ToEnum<Locale>();
|
Locale locale = fields.Read<string>(4).ToEnum<Locale>();
|
||||||
if (!WorldConfig.GetBoolValue(WorldCfg.LoadLocales) && locale != SharedConst.DefaultLocale)
|
if (!WorldConfig.GetBoolValue(WorldCfg.LoadLocales) && locale != SharedConst.DefaultLocale)
|
||||||
@@ -325,7 +325,7 @@ namespace Game
|
|||||||
ObjectManager.AddLocaleString(fields.Read<string>(3), locale, text.Text);
|
ObjectManager.AddLocaleString(fields.Read<string>(3), locale, text.Text);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LoadConditionalConditionalRequestItemsText(SQLFields fields)
|
public void LoadConditionalConditionalRequestItemsText(SQLFields fields)
|
||||||
{
|
{
|
||||||
Locale locale = fields.Read<string>(4).ToEnum<Locale>();
|
Locale locale = fields.Read<string>(4).ToEnum<Locale>();
|
||||||
if (!WorldConfig.GetBoolValue(WorldCfg.LoadLocales) && locale != SharedConst.DefaultLocale)
|
if (!WorldConfig.GetBoolValue(WorldCfg.LoadLocales) && locale != SharedConst.DefaultLocale)
|
||||||
@@ -350,7 +350,7 @@ namespace Game
|
|||||||
ObjectManager.AddLocaleString(fields.Read<string>(3), locale, text.Text);
|
ObjectManager.AddLocaleString(fields.Read<string>(3), locale, text.Text);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LoadConditionalConditionalOfferRewardText(SQLFields fields)
|
public void LoadConditionalConditionalOfferRewardText(SQLFields fields)
|
||||||
{
|
{
|
||||||
Locale locale = fields.Read<string>(4).ToEnum<Locale>();
|
Locale locale = fields.Read<string>(4).ToEnum<Locale>();
|
||||||
if (!WorldConfig.GetBoolValue(WorldCfg.LoadLocales) && locale != SharedConst.DefaultLocale)
|
if (!WorldConfig.GetBoolValue(WorldCfg.LoadLocales) && locale != SharedConst.DefaultLocale)
|
||||||
@@ -375,7 +375,7 @@ namespace Game
|
|||||||
ObjectManager.AddLocaleString(fields.Read<string>(3), locale, text.Text);
|
ObjectManager.AddLocaleString(fields.Read<string>(3), locale, text.Text);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LoadConditionalConditionalQuestCompletionLog(SQLFields fields)
|
public void LoadConditionalConditionalQuestCompletionLog(SQLFields fields)
|
||||||
{
|
{
|
||||||
Locale locale = fields.Read<string>(4).ToEnum<Locale>();
|
Locale locale = fields.Read<string>(4).ToEnum<Locale>();
|
||||||
if (!WorldConfig.GetBoolValue(WorldCfg.LoadLocales) && locale != SharedConst.DefaultLocale)
|
if (!WorldConfig.GetBoolValue(WorldCfg.LoadLocales) && locale != SharedConst.DefaultLocale)
|
||||||
@@ -400,6 +400,11 @@ namespace Game
|
|||||||
ObjectManager.AddLocaleString(fields.Read<string>(3), locale, text.Text);
|
ObjectManager.AddLocaleString(fields.Read<string>(3), locale, text.Text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void LoadTreasurePickers(SQLFields fields)
|
||||||
|
{
|
||||||
|
TreasurePickerID.Add(fields.Read<int>(1));
|
||||||
|
}
|
||||||
|
|
||||||
public uint XPValue(Player player)
|
public uint XPValue(Player player)
|
||||||
{
|
{
|
||||||
return XPValue(player, ContentTuningId, RewardXPDifficulty, RewardXPMultiplier, Expansion);
|
return XPValue(player, ContentTuningId, RewardXPDifficulty, RewardXPMultiplier, Expansion);
|
||||||
@@ -497,6 +502,17 @@ namespace Game
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool IsMeta()
|
||||||
|
{
|
||||||
|
var questInfo = CliDB.QuestInfoStorage.LookupByKey(QuestInfoID);
|
||||||
|
if (questInfo != null)
|
||||||
|
return (questInfo.Modifiers & 0x800) != 0;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool IsResetByScheduler() { return ResetByScheduler; }
|
||||||
|
|
||||||
public void BuildQuestRewards(QuestRewards rewards, Player player)
|
public void BuildQuestRewards(QuestRewards rewards, Player player)
|
||||||
{
|
{
|
||||||
rewards.ChoiceItemCount = GetRewChoiceItemsCount();
|
rewards.ChoiceItemCount = GetRewChoiceItemsCount();
|
||||||
@@ -521,7 +537,7 @@ namespace Game
|
|||||||
rewards.SpellCompletionID = RewardSpell;
|
rewards.SpellCompletionID = RewardSpell;
|
||||||
rewards.SkillLineID = RewardSkillId;
|
rewards.SkillLineID = RewardSkillId;
|
||||||
rewards.NumSkillUps = RewardSkillPoints;
|
rewards.NumSkillUps = RewardSkillPoints;
|
||||||
rewards.TreasurePickerID = (uint)TreasurePickerID;
|
rewards.TreasurePickerID = TreasurePickerID;
|
||||||
|
|
||||||
for (int i = 0; i < SharedConst.QuestRewardChoicesCount; ++i)
|
for (int i = 0; i < SharedConst.QuestRewardChoicesCount; ++i)
|
||||||
{
|
{
|
||||||
@@ -533,8 +549,8 @@ namespace Game
|
|||||||
|
|
||||||
for (int i = 0; i < SharedConst.QuestRewardItemCount; ++i)
|
for (int i = 0; i < SharedConst.QuestRewardItemCount; ++i)
|
||||||
{
|
{
|
||||||
rewards.ItemID[i] = RewardItemId[i];
|
rewards.Items[i].ItemID = RewardItemId[i];
|
||||||
rewards.ItemQty[i] = RewardItemCount[i];
|
rewards.Items[i].ItemQty = RewardItemCount[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < SharedConst.QuestRewardReputationsCount; ++i)
|
for (int i = 0; i < SharedConst.QuestRewardReputationsCount; ++i)
|
||||||
@@ -547,8 +563,8 @@ namespace Game
|
|||||||
|
|
||||||
for (int i = 0; i < SharedConst.QuestRewardCurrencyCount; ++i)
|
for (int i = 0; i < SharedConst.QuestRewardCurrencyCount; ++i)
|
||||||
{
|
{
|
||||||
rewards.CurrencyID[i] = RewardCurrencyId[i];
|
rewards.Currencies[i].CurrencyID = RewardCurrencyId[i];
|
||||||
rewards.CurrencyQty[i] = RewardCurrencyCount[i];
|
rewards.Currencies[i].CurrencyQty = RewardCurrencyCount[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -783,6 +799,7 @@ namespace Game
|
|||||||
response.Info.CompleteSoundKitID = SoundTurnIn;
|
response.Info.CompleteSoundKitID = SoundTurnIn;
|
||||||
response.Info.AreaGroupID = AreaGroupID;
|
response.Info.AreaGroupID = AreaGroupID;
|
||||||
response.Info.TimeAllowed = LimitTime;
|
response.Info.TimeAllowed = LimitTime;
|
||||||
|
response.Info.ResetByScheduler = IsResetByScheduler();
|
||||||
|
|
||||||
response.Write();
|
response.Write();
|
||||||
return response;
|
return response;
|
||||||
@@ -894,7 +911,7 @@ namespace Game
|
|||||||
public uint AreaGroupID;
|
public uint AreaGroupID;
|
||||||
public long LimitTime;
|
public long LimitTime;
|
||||||
public RaceMask<ulong> AllowableRaces { get; set; }
|
public RaceMask<ulong> AllowableRaces { get; set; }
|
||||||
public int TreasurePickerID;
|
public List<int> TreasurePickerID = new();
|
||||||
public int Expansion;
|
public int Expansion;
|
||||||
public int ManagedWorldStateID;
|
public int ManagedWorldStateID;
|
||||||
public int QuestSessionBonus;
|
public int QuestSessionBonus;
|
||||||
@@ -908,6 +925,7 @@ namespace Game
|
|||||||
public string PortraitTurnInText = "";
|
public string PortraitTurnInText = "";
|
||||||
public string PortraitTurnInName = "";
|
public string PortraitTurnInName = "";
|
||||||
public string QuestCompletionLog = "";
|
public string QuestCompletionLog = "";
|
||||||
|
public bool ResetByScheduler;
|
||||||
|
|
||||||
// quest_description_conditional
|
// quest_description_conditional
|
||||||
public List<QuestConditionalText> ConditionalQuestDescription = new();
|
public List<QuestConditionalText> ConditionalQuestDescription = new();
|
||||||
|
|||||||
@@ -321,12 +321,20 @@ namespace Game
|
|||||||
{
|
{
|
||||||
InitializeFactions initFactions = new();
|
InitializeFactions initFactions = new();
|
||||||
|
|
||||||
foreach (var pair in _factions)
|
foreach (var (_, factionState) in _factions)
|
||||||
{
|
{
|
||||||
initFactions.FactionFlags[pair.Key] = pair.Value.Flags;
|
FactionData factionData = new();
|
||||||
initFactions.FactionStandings[pair.Key] = pair.Value.Standing;
|
factionData.FactionID = factionState.Id;
|
||||||
|
factionData.Flags = (ushort)factionState.Flags;
|
||||||
|
factionData.Standing = factionState.Standing;
|
||||||
|
initFactions.Factions.Add(factionData);
|
||||||
|
|
||||||
// @todo faction bonus
|
// @todo faction bonus
|
||||||
pair.Value.needSend = false;
|
FactionBonusData bonus = new();
|
||||||
|
bonus.FactionID = factionState.Id;
|
||||||
|
bonus.FactionHasBonus = false;
|
||||||
|
factionState.needSend = false;
|
||||||
|
initFactions.Bonuses.Add(bonus);
|
||||||
}
|
}
|
||||||
|
|
||||||
_player.SendPacket(initFactions);
|
_player.SendPacket(initFactions);
|
||||||
|
|||||||
@@ -4356,7 +4356,7 @@ namespace Game.Spells
|
|||||||
|
|
||||||
spellLogEffectPowerDrainParams.Victim = target.GetGUID();
|
spellLogEffectPowerDrainParams.Victim = target.GetGUID();
|
||||||
spellLogEffectPowerDrainParams.Points = points;
|
spellLogEffectPowerDrainParams.Points = points;
|
||||||
spellLogEffectPowerDrainParams.PowerType = (uint)powerType;
|
spellLogEffectPowerDrainParams.PowerType = powerType;
|
||||||
spellLogEffectPowerDrainParams.Amplitude = amplitude;
|
spellLogEffectPowerDrainParams.Amplitude = amplitude;
|
||||||
|
|
||||||
GetExecuteLogEffect(effect).PowerDrainTargets.Add(spellLogEffectPowerDrainParams);
|
GetExecuteLogEffect(effect).PowerDrainTargets.Add(spellLogEffectPowerDrainParams);
|
||||||
|
|||||||
@@ -4358,6 +4358,10 @@ namespace Game.Entities
|
|||||||
|
|
||||||
// ENDOF STORMSONG VALLEY SPELLS
|
// ENDOF STORMSONG VALLEY SPELLS
|
||||||
|
|
||||||
|
//
|
||||||
|
// THE WANDERING ISLE SPELLS
|
||||||
|
//
|
||||||
|
|
||||||
// Summon Master Li Fei
|
// Summon Master Li Fei
|
||||||
ApplySpellFix(new[] { 102445 }, spellInfo =>
|
ApplySpellFix(new[] { 102445 }, spellInfo =>
|
||||||
{
|
{
|
||||||
@@ -4367,6 +4371,18 @@ namespace Game.Entities
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Summon Living Air
|
||||||
|
ApplySpellFix([102207], spellInfo =>
|
||||||
|
{
|
||||||
|
ApplySpellEffectFix(spellInfo, 0, spellEffectInfo =>
|
||||||
|
{
|
||||||
|
spellEffectInfo.TargetA = new SpellImplicitTargetInfo(Targets.DestTargetRandom);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// END OF THE WANDERING ISLE SPELLS
|
||||||
|
//
|
||||||
|
|
||||||
// Earthquake
|
// Earthquake
|
||||||
ApplySpellFix(new[] { 61882 }, spellInfo =>
|
ApplySpellFix(new[] { 61882 }, spellInfo =>
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user