Core: Update to 10.2.0
Port From (https://github.com/TrinityCore/TrinityCore/commit/1eea1d11b14d2ae065ab0f1888fba3b1ef03874f)
This commit is contained in:
@@ -447,6 +447,11 @@ namespace Framework.Constants
|
|||||||
PlayerHasCompletedQuestWithLabel = 372, /*NYI*/ // Player has previously completed quest with {QuestLabel}
|
PlayerHasCompletedQuestWithLabel = 372, /*NYI*/ // Player has previously completed quest with {QuestLabel}
|
||||||
LegacyLootIsEnabled = 373, /*NYI*/
|
LegacyLootIsEnabled = 373, /*NYI*/
|
||||||
PlayerZPositionBelow = 374,
|
PlayerZPositionBelow = 374,
|
||||||
|
PlayerWeaponHighWatermarkAboveOrEqual = 375, /*NYI*/
|
||||||
|
PlayerHeadHighWatermarkAboveOrEqual = 376, /*NYI*/
|
||||||
|
PlayerHasDisplayedCurrencyLessThan = 377, /*NYI*/ // Player has {CurrencyTypes} less than {#Amount} (value visible in ui is taken into account, not raw value)
|
||||||
|
|
||||||
|
PlayerIsOnMapWithExpansion = 380, // Player is on map that has {ExpansionID}
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum CriteriaFailEvent : byte
|
public enum CriteriaFailEvent : byte
|
||||||
@@ -467,7 +472,7 @@ namespace Framework.Constants
|
|||||||
DailyQuestsCleared = 13, // Daily quests cleared
|
DailyQuestsCleared = 13, // Daily quests cleared
|
||||||
SendEvent = 14, // Send event "{GameEvents}" (player-sent/instance only)
|
SendEvent = 14, // Send event "{GameEvents}" (player-sent/instance only)
|
||||||
|
|
||||||
Max
|
Count
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum CriteriaStartEvent : byte
|
public enum CriteriaStartEvent : byte
|
||||||
@@ -488,7 +493,7 @@ namespace Framework.Constants
|
|||||||
SendEvent = 13, // Send event "{GameEvents}" (player-sent/instance only)
|
SendEvent = 13, // Send event "{GameEvents}" (player-sent/instance only)
|
||||||
BeginScenarioStep = 14, // Begin scenario step "{#Step}" (for use with "Player on Scenario" modifier only)
|
BeginScenarioStep = 14, // Begin scenario step "{#Step}" (for use with "Player on Scenario" modifier only)
|
||||||
|
|
||||||
Max
|
Count
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum CriteriaFlags
|
public enum CriteriaFlags
|
||||||
@@ -501,7 +506,7 @@ namespace Framework.Constants
|
|||||||
IsForQuest = 0x20 // Is For Quest
|
IsForQuest = 0x20 // Is For Quest
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum CriteriaType : byte
|
public enum CriteriaType : short
|
||||||
{
|
{
|
||||||
KillCreature = 0, // Kill NPC "{Creature}"
|
KillCreature = 0, // Kill NPC "{Creature}"
|
||||||
WinBattleground = 1, // Win battleground "{Map}"
|
WinBattleground = 1, // Win battleground "{Map}"
|
||||||
@@ -745,6 +750,7 @@ namespace Framework.Constants
|
|||||||
PerksProgramMonthComplete = 249, /*NYI*/
|
PerksProgramMonthComplete = 249, /*NYI*/
|
||||||
CompleteTrackingQuest = 250, /*NYI*/
|
CompleteTrackingQuest = 250, /*NYI*/
|
||||||
|
|
||||||
|
GainLevels = 253, // Gain levels
|
||||||
Count
|
Count
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1841,7 +1841,7 @@ namespace Framework.Constants
|
|||||||
Some = 8
|
Some = 8
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum MountCapabilityFlags : byte
|
public enum MountCapabilityFlags : int
|
||||||
{
|
{
|
||||||
Ground = 0x1,
|
Ground = 0x1,
|
||||||
Flying = 0x2,
|
Flying = 0x2,
|
||||||
@@ -1850,7 +1850,7 @@ namespace Framework.Constants
|
|||||||
IgnoreRestrictions = 0x20
|
IgnoreRestrictions = 0x20
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum MountFlags : ushort
|
public enum MountFlags : int
|
||||||
{
|
{
|
||||||
SelfMount = 0x02, // Player becomes the mount himself
|
SelfMount = 0x02, // Player becomes the mount himself
|
||||||
FactionSpecific = 0x04,
|
FactionSpecific = 0x04,
|
||||||
@@ -1859,7 +1859,7 @@ namespace Framework.Constants
|
|||||||
HideIfUnknown = 0x40
|
HideIfUnknown = 0x40
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum PhaseEntryFlags : ushort
|
public enum PhaseEntryFlags : int
|
||||||
{
|
{
|
||||||
ReadOnly = 0x1,
|
ReadOnly = 0x1,
|
||||||
InternalPhase = 0x2,
|
InternalPhase = 0x2,
|
||||||
@@ -1912,7 +1912,7 @@ namespace Framework.Constants
|
|||||||
Registrar = 11,
|
Registrar = 11,
|
||||||
Vendor = 12,
|
Vendor = 12,
|
||||||
PetitionVendor = 13,
|
PetitionVendor = 13,
|
||||||
TabardVendor = 14,
|
GuildTabardVendor = 14,
|
||||||
TalentMaster = 15,
|
TalentMaster = 15,
|
||||||
SpecializationMaster = 16,
|
SpecializationMaster = 16,
|
||||||
MailInfo = 17,
|
MailInfo = 17,
|
||||||
@@ -1962,7 +1962,8 @@ namespace Framework.Constants
|
|||||||
TraitSystem = 61,
|
TraitSystem = 61,
|
||||||
BarbersChoice = 62,
|
BarbersChoice = 62,
|
||||||
JailersTowerBuffs = 63,
|
JailersTowerBuffs = 63,
|
||||||
MajorFactionRenown = 64
|
MajorFactionRenown = 64,
|
||||||
|
PersonalTabardVendor = 65
|
||||||
}
|
}
|
||||||
|
|
||||||
[Flags]
|
[Flags]
|
||||||
|
|||||||
@@ -225,7 +225,8 @@ namespace Framework.Constants
|
|||||||
ContributionCollector = 0x400,
|
ContributionCollector = 0x400,
|
||||||
AzeriteRespec = 0x4000,
|
AzeriteRespec = 0x4000,
|
||||||
IslandsQueue = 0x8000,
|
IslandsQueue = 0x8000,
|
||||||
SuppressNpcSoundsExceptEndOfInteraction = 0x00010000,
|
SuppressNpcSoundsExceptEndOfInteraction = 0x10000,
|
||||||
|
PersonalTabardDesigner = 0x200000
|
||||||
}
|
}
|
||||||
|
|
||||||
[Flags]
|
[Flags]
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ namespace Framework.Constants
|
|||||||
Binder = 5, // Golden interaction wheel
|
Binder = 5, // Golden interaction wheel
|
||||||
Banker = 6, // Brown bag (with gold coin in lower corner)
|
Banker = 6, // Brown bag (with gold coin in lower corner)
|
||||||
PetitionVendor = 7, // White chat bubble (with "..." inside)
|
PetitionVendor = 7, // White chat bubble (with "..." inside)
|
||||||
TabardVendor = 8, // White tabard
|
GuildTabardVendor = 8, // White tabard
|
||||||
Battlemaster = 9, // Two crossed swords
|
Battlemaster = 9, // Two crossed swords
|
||||||
Auctioneer = 10, // Stack of gold coins
|
Auctioneer = 10, // Stack of gold coins
|
||||||
TalentMaster = 11, // White chat bubble
|
TalentMaster = 11, // White chat bubble
|
||||||
@@ -86,6 +86,8 @@ namespace Framework.Constants
|
|||||||
TraitSystem = 51,
|
TraitSystem = 51,
|
||||||
BarbersChoice = 52,
|
BarbersChoice = 52,
|
||||||
MajorFactionRenown = 53,
|
MajorFactionRenown = 53,
|
||||||
|
PersonalTabardVendor = 54,
|
||||||
|
|
||||||
Max
|
Max
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -894,4 +894,10 @@ namespace Framework.Constants
|
|||||||
DroppedFromDeath = 0x02,
|
DroppedFromDeath = 0x02,
|
||||||
FromAccountServer = 0x04
|
FromAccountServer = 0x04
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum TabardVendorType
|
||||||
|
{
|
||||||
|
Guild = 0,
|
||||||
|
Personal = 1,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2726,293 +2726,295 @@ namespace Framework.Constants
|
|||||||
ArenaTeamPartySize = 836,
|
ArenaTeamPartySize = 836,
|
||||||
SoloShuffleWargameGroupSize = 837,
|
SoloShuffleWargameGroupSize = 837,
|
||||||
SoloShuffleWargameGroupComp = 838,
|
SoloShuffleWargameGroupComp = 838,
|
||||||
SoloShuffleMinItemLevel = 839,
|
SoloMinItemLevel = 839,
|
||||||
PvpPlayerAbandoned = 840,
|
PvpPlayerAbandoned = 840,
|
||||||
QuestForceRemovedS = 841,
|
BattlegroundJoinGroupQueueWithoutHealer = 841,
|
||||||
AttackNoActions = 842,
|
QuestForceRemovedS = 842,
|
||||||
InRandomBg = 843,
|
AttackNoActions = 843,
|
||||||
InNonRandomBg = 844,
|
InRandomBg = 844,
|
||||||
BnFriendSelf = 845,
|
InNonRandomBg = 845,
|
||||||
BnFriendAlready = 846,
|
BnFriendSelf = 846,
|
||||||
BnFriendBlocked = 847,
|
BnFriendAlready = 847,
|
||||||
BnFriendListFull = 848,
|
BnFriendBlocked = 848,
|
||||||
BnFriendRequestSent = 849,
|
BnFriendListFull = 849,
|
||||||
BnBroadcastThrottle = 850,
|
BnFriendRequestSent = 850,
|
||||||
BgDeveloperOnly = 851,
|
BnBroadcastThrottle = 851,
|
||||||
CurrencySpellSlotMismatch = 852,
|
BgDeveloperOnly = 852,
|
||||||
CurrencyNotTradable = 853,
|
CurrencySpellSlotMismatch = 853,
|
||||||
RequiresExpansionS = 854,
|
CurrencyNotTradable = 854,
|
||||||
QuestFailedSpell = 855,
|
RequiresExpansionS = 855,
|
||||||
TalentFailedUnspentTalentPoints = 856,
|
QuestFailedSpell = 856,
|
||||||
TalentFailedNotEnoughTalentsInPrimaryTree = 857,
|
TalentFailedUnspentTalentPoints = 857,
|
||||||
TalentFailedNoPrimaryTreeSelected = 858,
|
TalentFailedNotEnoughTalentsInPrimaryTree = 858,
|
||||||
TalentFailedCantRemoveTalent = 859,
|
TalentFailedNoPrimaryTreeSelected = 859,
|
||||||
TalentFailedUnknown = 860,
|
TalentFailedCantRemoveTalent = 860,
|
||||||
TalentFailedInCombat = 861,
|
TalentFailedUnknown = 861,
|
||||||
TalentFailedInPvpMatch = 862,
|
TalentFailedInCombat = 862,
|
||||||
TalentFailedInMythicPlus = 863,
|
TalentFailedInPvpMatch = 863,
|
||||||
WargameRequestFailure = 864,
|
TalentFailedInMythicPlus = 864,
|
||||||
RankRequiresAuthenticator = 865,
|
WargameRequestFailure = 865,
|
||||||
GuildBankVoucherFailed = 866,
|
RankRequiresAuthenticator = 866,
|
||||||
WargameRequestSent = 867,
|
GuildBankVoucherFailed = 867,
|
||||||
RequiresAchievementI = 868,
|
WargameRequestSent = 868,
|
||||||
RefundResultExceedMaxCurrency = 869,
|
RequiresAchievementI = 869,
|
||||||
CantBuyQuantity = 870,
|
RefundResultExceedMaxCurrency = 870,
|
||||||
ItemIsBattlePayLocked = 871,
|
CantBuyQuantity = 871,
|
||||||
PartyAlreadyInBattlegroundQueue = 872,
|
ItemIsBattlePayLocked = 872,
|
||||||
PartyConfirmingBattlegroundQueue = 873,
|
PartyAlreadyInBattlegroundQueue = 873,
|
||||||
BattlefieldTeamPartySize = 874,
|
PartyConfirmingBattlegroundQueue = 874,
|
||||||
InsuffTrackedCurrencyIs = 875,
|
BattlefieldTeamPartySize = 875,
|
||||||
NotOnTournamentRealm = 876,
|
InsuffTrackedCurrencyIs = 876,
|
||||||
GuildTrialAccountTrial = 877,
|
NotOnTournamentRealm = 877,
|
||||||
GuildTrialAccountVeteran = 878,
|
GuildTrialAccountTrial = 878,
|
||||||
GuildUndeletableDueToLevel = 879,
|
GuildTrialAccountVeteran = 879,
|
||||||
CantDoThatInAGroup = 880,
|
GuildUndeletableDueToLevel = 880,
|
||||||
GuildLeaderReplaced = 881,
|
CantDoThatInAGroup = 881,
|
||||||
TransmogrifyCantEquip = 882,
|
GuildLeaderReplaced = 882,
|
||||||
TransmogrifyInvalidItemType = 883,
|
TransmogrifyCantEquip = 883,
|
||||||
TransmogrifyNotSoulbound = 884,
|
TransmogrifyInvalidItemType = 884,
|
||||||
TransmogrifyInvalidSource = 885,
|
TransmogrifyNotSoulbound = 885,
|
||||||
TransmogrifyInvalidDestination = 886,
|
TransmogrifyInvalidSource = 886,
|
||||||
TransmogrifyMismatch = 887,
|
TransmogrifyInvalidDestination = 887,
|
||||||
TransmogrifyLegendary = 888,
|
TransmogrifyMismatch = 888,
|
||||||
TransmogrifySameItem = 889,
|
TransmogrifyLegendary = 889,
|
||||||
TransmogrifySameAppearance = 890,
|
TransmogrifySameItem = 890,
|
||||||
TransmogrifyNotEquipped = 891,
|
TransmogrifySameAppearance = 891,
|
||||||
VoidDepositFull = 892,
|
TransmogrifyNotEquipped = 892,
|
||||||
VoidWithdrawFull = 893,
|
VoidDepositFull = 893,
|
||||||
VoidStorageWrapped = 894,
|
VoidWithdrawFull = 894,
|
||||||
VoidStorageStackable = 895,
|
VoidStorageWrapped = 895,
|
||||||
VoidStorageUnbound = 896,
|
VoidStorageStackable = 896,
|
||||||
VoidStorageRepair = 897,
|
VoidStorageUnbound = 897,
|
||||||
VoidStorageCharges = 898,
|
VoidStorageRepair = 898,
|
||||||
VoidStorageQuest = 899,
|
VoidStorageCharges = 899,
|
||||||
VoidStorageConjured = 900,
|
VoidStorageQuest = 900,
|
||||||
VoidStorageMail = 901,
|
VoidStorageConjured = 901,
|
||||||
VoidStorageBag = 902,
|
VoidStorageMail = 902,
|
||||||
VoidTransferStorageFull = 903,
|
VoidStorageBag = 903,
|
||||||
VoidTransferInvFull = 904,
|
VoidTransferStorageFull = 904,
|
||||||
VoidTransferInternalError = 905,
|
VoidTransferInvFull = 905,
|
||||||
VoidTransferItemInvalid = 906,
|
VoidTransferInternalError = 906,
|
||||||
DifficultyDisabledInLfg = 907,
|
VoidTransferItemInvalid = 907,
|
||||||
VoidStorageUnique = 908,
|
DifficultyDisabledInLfg = 908,
|
||||||
VoidStorageLoot = 909,
|
VoidStorageUnique = 909,
|
||||||
VoidStorageHoliday = 910,
|
VoidStorageLoot = 910,
|
||||||
VoidStorageDuration = 911,
|
VoidStorageHoliday = 911,
|
||||||
VoidStorageLoadFailed = 912,
|
VoidStorageDuration = 912,
|
||||||
VoidStorageInvalidItem = 913,
|
VoidStorageLoadFailed = 913,
|
||||||
ParentalControlsChatMuted = 914,
|
VoidStorageInvalidItem = 914,
|
||||||
SorStartExperienceIncomplete = 915,
|
ParentalControlsChatMuted = 915,
|
||||||
SorInvalidEmail = 916,
|
SorStartExperienceIncomplete = 916,
|
||||||
SorInvalidComment = 917,
|
SorInvalidEmail = 917,
|
||||||
ChallengeModeResetCooldownS = 918,
|
SorInvalidComment = 918,
|
||||||
ChallengeModeResetKeystone = 919,
|
ChallengeModeResetCooldownS = 919,
|
||||||
PetJournalAlreadyInLoadout = 920,
|
ChallengeModeResetKeystone = 920,
|
||||||
ReportSubmittedSuccessfully = 921,
|
PetJournalAlreadyInLoadout = 921,
|
||||||
ReportSubmissionFailed = 922,
|
ReportSubmittedSuccessfully = 922,
|
||||||
SuggestionSubmittedSuccessfully = 923,
|
ReportSubmissionFailed = 923,
|
||||||
BugSubmittedSuccessfully = 924,
|
SuggestionSubmittedSuccessfully = 924,
|
||||||
ChallengeModeEnabled = 925,
|
BugSubmittedSuccessfully = 925,
|
||||||
ChallengeModeDisabled = 926,
|
ChallengeModeEnabled = 926,
|
||||||
PetbattleCreateFailed = 927,
|
ChallengeModeDisabled = 927,
|
||||||
PetbattleNotHere = 928,
|
PetbattleCreateFailed = 928,
|
||||||
PetbattleNotHereOnTransport = 929,
|
PetbattleNotHere = 929,
|
||||||
PetbattleNotHereUnevenGround = 930,
|
PetbattleNotHereOnTransport = 930,
|
||||||
PetbattleNotHereObstructed = 931,
|
PetbattleNotHereUnevenGround = 931,
|
||||||
PetbattleNotWhileInCombat = 932,
|
PetbattleNotHereObstructed = 932,
|
||||||
PetbattleNotWhileDead = 933,
|
PetbattleNotWhileInCombat = 933,
|
||||||
PetbattleNotWhileFlying = 934,
|
PetbattleNotWhileDead = 934,
|
||||||
PetbattleTargetInvalid = 935,
|
PetbattleNotWhileFlying = 935,
|
||||||
PetbattleTargetOutOfRange = 936,
|
PetbattleTargetInvalid = 936,
|
||||||
PetbattleTargetNotCapturable = 937,
|
PetbattleTargetOutOfRange = 937,
|
||||||
PetbattleNotATrainer = 938,
|
PetbattleTargetNotCapturable = 938,
|
||||||
PetbattleDeclined = 939,
|
PetbattleNotATrainer = 939,
|
||||||
PetbattleInBattle = 940,
|
PetbattleDeclined = 940,
|
||||||
PetbattleInvalidLoadout = 941,
|
PetbattleInBattle = 941,
|
||||||
PetbattleAllPetsDead = 942,
|
PetbattleInvalidLoadout = 942,
|
||||||
PetbattleNoPetsInSlots = 943,
|
PetbattleAllPetsDead = 943,
|
||||||
PetbattleNoAccountLock = 944,
|
PetbattleNoPetsInSlots = 944,
|
||||||
PetbattleWildPetTapped = 945,
|
PetbattleNoAccountLock = 945,
|
||||||
PetbattleRestrictedAccount = 946,
|
PetbattleWildPetTapped = 946,
|
||||||
PetbattleOpponentNotAvailable = 947,
|
PetbattleRestrictedAccount = 947,
|
||||||
PetbattleNotWhileInMatchedBattle = 948,
|
PetbattleOpponentNotAvailable = 948,
|
||||||
CantHaveMorePetsOfThatType = 949,
|
PetbattleNotWhileInMatchedBattle = 949,
|
||||||
CantHaveMorePets = 950,
|
CantHaveMorePetsOfThatType = 950,
|
||||||
PvpMapNotFound = 951,
|
CantHaveMorePets = 951,
|
||||||
PvpMapNotSet = 952,
|
PvpMapNotFound = 952,
|
||||||
PetbattleQueueQueued = 953,
|
PvpMapNotSet = 953,
|
||||||
PetbattleQueueAlreadyQueued = 954,
|
PetbattleQueueQueued = 954,
|
||||||
PetbattleQueueJoinFailed = 955,
|
PetbattleQueueAlreadyQueued = 955,
|
||||||
PetbattleQueueJournalLock = 956,
|
PetbattleQueueJoinFailed = 956,
|
||||||
PetbattleQueueRemoved = 957,
|
PetbattleQueueJournalLock = 957,
|
||||||
PetbattleQueueProposalDeclined = 958,
|
PetbattleQueueRemoved = 958,
|
||||||
PetbattleQueueProposalTimeout = 959,
|
PetbattleQueueProposalDeclined = 959,
|
||||||
PetbattleQueueOpponentDeclined = 960,
|
PetbattleQueueProposalTimeout = 960,
|
||||||
PetbattleQueueRequeuedInternal = 961,
|
PetbattleQueueOpponentDeclined = 961,
|
||||||
PetbattleQueueRequeuedRemoved = 962,
|
PetbattleQueueRequeuedInternal = 962,
|
||||||
PetbattleQueueSlotLocked = 963,
|
PetbattleQueueRequeuedRemoved = 963,
|
||||||
PetbattleQueueSlotEmpty = 964,
|
PetbattleQueueSlotLocked = 964,
|
||||||
PetbattleQueueSlotNoTracker = 965,
|
PetbattleQueueSlotEmpty = 965,
|
||||||
PetbattleQueueSlotNoSpecies = 966,
|
PetbattleQueueSlotNoTracker = 966,
|
||||||
PetbattleQueueSlotCantBattle = 967,
|
PetbattleQueueSlotNoSpecies = 967,
|
||||||
PetbattleQueueSlotRevoked = 968,
|
PetbattleQueueSlotCantBattle = 968,
|
||||||
PetbattleQueueSlotDead = 969,
|
PetbattleQueueSlotRevoked = 969,
|
||||||
PetbattleQueueSlotNoPet = 970,
|
PetbattleQueueSlotDead = 970,
|
||||||
PetbattleQueueNotWhileNeutral = 971,
|
PetbattleQueueSlotNoPet = 971,
|
||||||
PetbattleGameTimeLimitWarning = 972,
|
PetbattleQueueNotWhileNeutral = 972,
|
||||||
PetbattleGameRoundsLimitWarning = 973,
|
PetbattleGameTimeLimitWarning = 973,
|
||||||
HasRestriction = 974,
|
PetbattleGameRoundsLimitWarning = 974,
|
||||||
ItemUpgradeItemTooLowLevel = 975,
|
HasRestriction = 975,
|
||||||
ItemUpgradeNoPath = 976,
|
ItemUpgradeItemTooLowLevel = 976,
|
||||||
ItemUpgradeNoMoreUpgrades = 977,
|
ItemUpgradeNoPath = 977,
|
||||||
BonusRollEmpty = 978,
|
ItemUpgradeNoMoreUpgrades = 978,
|
||||||
ChallengeModeFull = 979,
|
BonusRollEmpty = 979,
|
||||||
ChallengeModeInProgress = 980,
|
ChallengeModeFull = 980,
|
||||||
ChallengeModeIncorrectKeystone = 981,
|
ChallengeModeInProgress = 981,
|
||||||
BattletagFriendNotFound = 982,
|
ChallengeModeIncorrectKeystone = 982,
|
||||||
BattletagFriendNotValid = 983,
|
BattletagFriendNotFound = 983,
|
||||||
BattletagFriendNotAllowed = 984,
|
BattletagFriendNotValid = 984,
|
||||||
BattletagFriendThrottled = 985,
|
BattletagFriendNotAllowed = 985,
|
||||||
BattletagFriendSuccess = 986,
|
BattletagFriendThrottled = 986,
|
||||||
PetTooHighLevelToUncage = 987,
|
BattletagFriendSuccess = 987,
|
||||||
PetbattleInternal = 988,
|
PetTooHighLevelToUncage = 988,
|
||||||
CantCagePetYet = 989,
|
PetbattleInternal = 989,
|
||||||
NoLootInChallengeMode = 990,
|
CantCagePetYet = 990,
|
||||||
QuestPetBattleVictoriesPvpIi = 991,
|
NoLootInChallengeMode = 991,
|
||||||
RoleCheckAlreadyInProgress = 992,
|
QuestPetBattleVictoriesPvpIi = 992,
|
||||||
RecruitAFriendAccountLimit = 993,
|
RoleCheckAlreadyInProgress = 993,
|
||||||
RecruitAFriendFailed = 994,
|
RecruitAFriendAccountLimit = 994,
|
||||||
SetLootPersonal = 995,
|
RecruitAFriendFailed = 995,
|
||||||
SetLootMethodFailedCombat = 996,
|
SetLootPersonal = 996,
|
||||||
ReagentBankFull = 997,
|
SetLootMethodFailedCombat = 997,
|
||||||
ReagentBankLocked = 998,
|
ReagentBankFull = 998,
|
||||||
GarrisonBuildingExists = 999,
|
ReagentBankLocked = 999,
|
||||||
GarrisonInvalidPlot = 1000,
|
GarrisonBuildingExists = 1000,
|
||||||
GarrisonInvalidBuildingid = 1001,
|
GarrisonInvalidPlot = 1001,
|
||||||
GarrisonInvalidPlotBuilding = 1002,
|
GarrisonInvalidBuildingid = 1002,
|
||||||
GarrisonRequiresBlueprint = 1003,
|
GarrisonInvalidPlotBuilding = 1003,
|
||||||
GarrisonNotEnoughCurrency = 1004,
|
GarrisonRequiresBlueprint = 1004,
|
||||||
GarrisonNotEnoughGold = 1005,
|
GarrisonNotEnoughCurrency = 1005,
|
||||||
GarrisonCompleteMissionWrongFollowerType = 1006,
|
GarrisonNotEnoughGold = 1006,
|
||||||
AlreadyUsingLfgList = 1007,
|
GarrisonCompleteMissionWrongFollowerType = 1007,
|
||||||
RestrictedAccountLfgListTrial = 1008,
|
AlreadyUsingLfgList = 1008,
|
||||||
ToyUseLimitReached = 1009,
|
RestrictedAccountLfgListTrial = 1009,
|
||||||
ToyAlreadyKnown = 1010,
|
ToyUseLimitReached = 1010,
|
||||||
TransmogSetAlreadyKnown = 1011,
|
ToyAlreadyKnown = 1011,
|
||||||
NotEnoughCurrency = 1012,
|
TransmogSetAlreadyKnown = 1012,
|
||||||
SpecIsDisabled = 1013,
|
NotEnoughCurrency = 1013,
|
||||||
FeatureRestrictedTrial = 1014,
|
SpecIsDisabled = 1014,
|
||||||
CantBeObliterated = 1015,
|
FeatureRestrictedTrial = 1015,
|
||||||
CantBeScrapped = 1016,
|
CantBeObliterated = 1016,
|
||||||
CantBeRecrafted = 1017,
|
CantBeScrapped = 1017,
|
||||||
ArtifactRelicDoesNotMatchArtifact = 1018,
|
CantBeRecrafted = 1018,
|
||||||
MustEquipArtifact = 1019,
|
ArtifactRelicDoesNotMatchArtifact = 1019,
|
||||||
CantDoThatRightNow = 1020,
|
MustEquipArtifact = 1020,
|
||||||
AffectingCombat = 1021,
|
CantDoThatRightNow = 1021,
|
||||||
EquipmentManagerCombatSwapS = 1022,
|
AffectingCombat = 1022,
|
||||||
EquipmentManagerBagsFull = 1023,
|
EquipmentManagerCombatSwapS = 1023,
|
||||||
EquipmentManagerMissingItemS = 1024,
|
EquipmentManagerBagsFull = 1024,
|
||||||
MovieRecordingWarningPerf = 1025,
|
EquipmentManagerMissingItemS = 1025,
|
||||||
MovieRecordingWarningDiskFull = 1026,
|
MovieRecordingWarningPerf = 1026,
|
||||||
MovieRecordingWarningNoMovie = 1027,
|
MovieRecordingWarningDiskFull = 1027,
|
||||||
MovieRecordingWarningRequirements = 1028,
|
MovieRecordingWarningNoMovie = 1028,
|
||||||
MovieRecordingWarningCompressing = 1029,
|
MovieRecordingWarningRequirements = 1029,
|
||||||
NoChallengeModeReward = 1030,
|
MovieRecordingWarningCompressing = 1030,
|
||||||
ClaimedChallengeModeReward = 1031,
|
NoChallengeModeReward = 1031,
|
||||||
ChallengeModePeriodResetSs = 1032,
|
ClaimedChallengeModeReward = 1032,
|
||||||
CantDoThatChallengeModeActive = 1033,
|
ChallengeModePeriodResetSs = 1033,
|
||||||
TalentFailedRestArea = 1034,
|
CantDoThatChallengeModeActive = 1034,
|
||||||
CannotAbandonLastPet = 1035,
|
TalentFailedRestArea = 1035,
|
||||||
TestCvarSetSss = 1036,
|
CannotAbandonLastPet = 1036,
|
||||||
QuestTurnInFailReason = 1037,
|
TestCvarSetSss = 1037,
|
||||||
ClaimedChallengeModeRewardOld = 1038,
|
QuestTurnInFailReason = 1038,
|
||||||
TalentGrantedByAura = 1039,
|
ClaimedChallengeModeRewardOld = 1039,
|
||||||
ChallengeModeAlreadyComplete = 1040,
|
TalentGrantedByAura = 1040,
|
||||||
GlyphTargetNotAvailable = 1041,
|
ChallengeModeAlreadyComplete = 1041,
|
||||||
PvpWarmodeToggleOn = 1042,
|
GlyphTargetNotAvailable = 1042,
|
||||||
PvpWarmodeToggleOff = 1043,
|
PvpWarmodeToggleOn = 1043,
|
||||||
SpellFailedLevelRequirement = 1044,
|
PvpWarmodeToggleOff = 1044,
|
||||||
SpellFailedCantFlyHere = 1045,
|
SpellFailedLevelRequirement = 1045,
|
||||||
BattlegroundJoinRequiresLevel = 1046,
|
SpellFailedCantFlyHere = 1046,
|
||||||
BattlegroundJoinDisqualified = 1047,
|
BattlegroundJoinRequiresLevel = 1047,
|
||||||
BattlegroundJoinDisqualifiedNoName = 1048,
|
BattlegroundJoinDisqualified = 1048,
|
||||||
VoiceChatGenericUnableToConnect = 1049,
|
BattlegroundJoinDisqualifiedNoName = 1049,
|
||||||
VoiceChatServiceLost = 1050,
|
VoiceChatGenericUnableToConnect = 1050,
|
||||||
VoiceChatChannelNameTooShort = 1051,
|
VoiceChatServiceLost = 1051,
|
||||||
VoiceChatChannelNameTooLong = 1052,
|
VoiceChatChannelNameTooShort = 1052,
|
||||||
VoiceChatChannelAlreadyExists = 1053,
|
VoiceChatChannelNameTooLong = 1053,
|
||||||
VoiceChatTargetNotFound = 1054,
|
VoiceChatChannelAlreadyExists = 1054,
|
||||||
VoiceChatTooManyRequests = 1055,
|
VoiceChatTargetNotFound = 1055,
|
||||||
VoiceChatPlayerSilenced = 1056,
|
VoiceChatTooManyRequests = 1056,
|
||||||
VoiceChatParentalDisableAll = 1057,
|
VoiceChatPlayerSilenced = 1057,
|
||||||
VoiceChatDisabled = 1058,
|
VoiceChatParentalDisableAll = 1058,
|
||||||
NoPvpReward = 1059,
|
VoiceChatDisabled = 1059,
|
||||||
ClaimedPvpReward = 1060,
|
NoPvpReward = 1060,
|
||||||
AzeriteEssenceSelectionFailedEssenceNotUnlocked = 1061,
|
ClaimedPvpReward = 1061,
|
||||||
AzeriteEssenceSelectionFailedCantRemoveEssence = 1062,
|
AzeriteEssenceSelectionFailedEssenceNotUnlocked = 1062,
|
||||||
AzeriteEssenceSelectionFailedConditionFailed = 1063,
|
AzeriteEssenceSelectionFailedCantRemoveEssence = 1063,
|
||||||
AzeriteEssenceSelectionFailedRestArea = 1064,
|
AzeriteEssenceSelectionFailedConditionFailed = 1064,
|
||||||
AzeriteEssenceSelectionFailedSlotLocked = 1065,
|
AzeriteEssenceSelectionFailedRestArea = 1065,
|
||||||
AzeriteEssenceSelectionFailedNotAtForge = 1066,
|
AzeriteEssenceSelectionFailedSlotLocked = 1066,
|
||||||
AzeriteEssenceSelectionFailedHeartLevelTooLow = 1067,
|
AzeriteEssenceSelectionFailedNotAtForge = 1067,
|
||||||
AzeriteEssenceSelectionFailedNotEquipped = 1068,
|
AzeriteEssenceSelectionFailedHeartLevelTooLow = 1068,
|
||||||
SocketingRequiresPunchcardredGem = 1069,
|
AzeriteEssenceSelectionFailedNotEquipped = 1069,
|
||||||
SocketingPunchcardredGemOnlyInPunchcardredslot = 1070,
|
SocketingRequiresPunchcardredGem = 1070,
|
||||||
SocketingRequiresPunchcardyellowGem = 1071,
|
SocketingPunchcardredGemOnlyInPunchcardredslot = 1071,
|
||||||
SocketingPunchcardyellowGemOnlyInPunchcardyellowslot = 1072,
|
SocketingRequiresPunchcardyellowGem = 1072,
|
||||||
SocketingRequiresPunchcardblueGem = 1073,
|
SocketingPunchcardyellowGemOnlyInPunchcardyellowslot = 1073,
|
||||||
SocketingPunchcardblueGemOnlyInPunchcardblueslot = 1074,
|
SocketingRequiresPunchcardblueGem = 1074,
|
||||||
SocketingRequiresDominationShard = 1075,
|
SocketingPunchcardblueGemOnlyInPunchcardblueslot = 1075,
|
||||||
SocketingDominationShardOnlyInDominationslot = 1076,
|
SocketingRequiresDominationShard = 1076,
|
||||||
SocketingRequiresCypherGem = 1077,
|
SocketingDominationShardOnlyInDominationslot = 1077,
|
||||||
SocketingCypherGemOnlyInCypherslot = 1078,
|
SocketingRequiresCypherGem = 1078,
|
||||||
SocketingRequiresTinkerGem = 1079,
|
SocketingCypherGemOnlyInCypherslot = 1079,
|
||||||
SocketingTinkerGemOnlyInTinkerslot = 1080,
|
SocketingRequiresTinkerGem = 1080,
|
||||||
SocketingRequiresPrimordialGem = 1081,
|
SocketingTinkerGemOnlyInTinkerslot = 1081,
|
||||||
SocketingPrimordialGemOnlyInPrimordialslot = 1082,
|
SocketingRequiresPrimordialGem = 1082,
|
||||||
LevelLinkingResultLinked = 1083,
|
SocketingPrimordialGemOnlyInPrimordialslot = 1083,
|
||||||
LevelLinkingResultUnlinked = 1084,
|
LevelLinkingResultLinked = 1084,
|
||||||
ClubFinderErrorPostClub = 1085,
|
LevelLinkingResultUnlinked = 1085,
|
||||||
ClubFinderErrorApplyClub = 1086,
|
ClubFinderErrorPostClub = 1086,
|
||||||
ClubFinderErrorRespondApplicant = 1087,
|
ClubFinderErrorApplyClub = 1087,
|
||||||
ClubFinderErrorCancelApplication = 1088,
|
ClubFinderErrorRespondApplicant = 1088,
|
||||||
ClubFinderErrorTypeAcceptApplication = 1089,
|
ClubFinderErrorCancelApplication = 1089,
|
||||||
ClubFinderErrorTypeNoInvitePermissions = 1090,
|
ClubFinderErrorTypeAcceptApplication = 1090,
|
||||||
ClubFinderErrorTypeNoPostingPermissions = 1091,
|
ClubFinderErrorTypeNoInvitePermissions = 1091,
|
||||||
ClubFinderErrorTypeApplicantList = 1092,
|
ClubFinderErrorTypeNoPostingPermissions = 1092,
|
||||||
ClubFinderErrorTypeApplicantListNoPerm = 1093,
|
ClubFinderErrorTypeApplicantList = 1093,
|
||||||
ClubFinderErrorTypeFinderNotAvailable = 1094,
|
ClubFinderErrorTypeApplicantListNoPerm = 1094,
|
||||||
ClubFinderErrorTypeGetPostingIds = 1095,
|
ClubFinderErrorTypeFinderNotAvailable = 1095,
|
||||||
ClubFinderErrorTypeJoinApplication = 1096,
|
ClubFinderErrorTypeGetPostingIds = 1096,
|
||||||
ClubFinderErrorTypeRealmNotEligible = 1097,
|
ClubFinderErrorTypeJoinApplication = 1097,
|
||||||
ClubFinderErrorTypeFlaggedRename = 1098,
|
ClubFinderErrorTypeRealmNotEligible = 1098,
|
||||||
ClubFinderErrorTypeFlaggedDescriptionChange = 1099,
|
ClubFinderErrorTypeFlaggedRename = 1099,
|
||||||
ItemInteractionNotEnoughGold = 1100,
|
ClubFinderErrorTypeFlaggedDescriptionChange = 1100,
|
||||||
ItemInteractionNotEnoughCurrency = 1101,
|
ItemInteractionNotEnoughGold = 1101,
|
||||||
PlayerChoiceErrorPendingChoice = 1102,
|
ItemInteractionNotEnoughCurrency = 1102,
|
||||||
SoulbindInvalidConduit = 1103,
|
ItemInteractionNoConversionOutput = 1103,
|
||||||
SoulbindInvalidConduitItem = 1104,
|
PlayerChoiceErrorPendingChoice = 1104,
|
||||||
SoulbindInvalidTalent = 1105,
|
SoulbindInvalidConduit = 1105,
|
||||||
SoulbindDuplicateConduit = 1106,
|
SoulbindInvalidConduitItem = 1106,
|
||||||
ActivateSoulbindS = 1107,
|
SoulbindInvalidTalent = 1107,
|
||||||
ActivateSoulbindFailedRestArea = 1108,
|
SoulbindDuplicateConduit = 1108,
|
||||||
CantUseProfanity = 1109,
|
ActivateSoulbindS = 1109,
|
||||||
NotInPetBattle = 1110,
|
ActivateSoulbindFailedRestArea = 1110,
|
||||||
NotInNpe = 1111,
|
CantUseProfanity = 1111,
|
||||||
NoSpec = 1112,
|
NotInPetBattle = 1112,
|
||||||
NoDominationshardOverwrite = 1113,
|
NotInNpe = 1113,
|
||||||
UseWeeklyRewardsDisabled = 1114,
|
NoSpec = 1114,
|
||||||
CrossFactionGroupJoined = 1115,
|
NoDominationshardOverwrite = 1115,
|
||||||
CantTargetUnfriendlyInOverworld = 1116,
|
UseWeeklyRewardsDisabled = 1116,
|
||||||
EquipablespellsSlotsFull = 1117,
|
CrossFactionGroupJoined = 1117,
|
||||||
ItemModAppearanceGroupAlreadyKnown = 1118,
|
CantTargetUnfriendlyInOverworld = 1118,
|
||||||
CantBulkSellItemWithRefund = 1119,
|
EquipablespellsSlotsFull = 1119,
|
||||||
WowLabsPartyErrorTypePartyIsFull = 1120,
|
ItemModAppearanceGroupAlreadyKnown = 1120,
|
||||||
WowLabsPartyErrorTypeMaxInviteSent = 1121,
|
CantBulkSellItemWithRefund = 1121,
|
||||||
WowLabsPartyErrorTypePlayerAlreadyInvited = 1122,
|
WowLabsPartyErrorTypePartyIsFull = 1122,
|
||||||
WowLabsPartyErrorTypePartyInviteInvalid = 1123,
|
WowLabsPartyErrorTypeMaxInviteSent = 1123,
|
||||||
WowLabsLobbyMatchmakerErrorEnterQueueFailed = 1124,
|
WowLabsPartyErrorTypePlayerAlreadyInvited = 1124,
|
||||||
WowLabsLobbyMatchmakerErrorLeaveQueueFailed = 1125,
|
WowLabsPartyErrorTypePartyInviteInvalid = 1125,
|
||||||
|
WowLabsLobbyMatchmakerErrorEnterQueueFailed = 1126,
|
||||||
|
WowLabsLobbyMatchmakerErrorLeaveQueueFailed = 1127
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum SceneFlags
|
public enum SceneFlags
|
||||||
|
|||||||
@@ -551,6 +551,7 @@ namespace Framework.Constants
|
|||||||
ModRequiredMountCapabilityFlags = 541,
|
ModRequiredMountCapabilityFlags = 541,
|
||||||
Unk542 = 542,
|
Unk542 = 542,
|
||||||
Unk543 = 543,
|
Unk543 = 543,
|
||||||
|
Unk544 = 544,
|
||||||
Total
|
Total
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,25 +35,31 @@ namespace Framework.Database
|
|||||||
"subject, deliver_time, expire_time, money, has_items FROM mail WHERE receiver = ? ");
|
"subject, deliver_time, expire_time, money, has_items FROM mail WHERE receiver = ? ");
|
||||||
PrepareStatement(CharStatements.SEL_MAIL_LIST_ITEMS, "SELECT itemEntry,count FROM item_instance WHERE guid = ?");
|
PrepareStatement(CharStatements.SEL_MAIL_LIST_ITEMS, "SELECT itemEntry,count FROM item_instance WHERE guid = ?");
|
||||||
PrepareStatement(CharStatements.SEL_ENUM, "SELECT c.guid, c.name, c.race, c.class, c.gender, c.level, c.zone, c.map, c.position_x, c.position_y, c.position_z, " +
|
PrepareStatement(CharStatements.SEL_ENUM, "SELECT c.guid, c.name, c.race, c.class, c.gender, c.level, c.zone, c.map, c.position_x, c.position_y, c.position_z, " +
|
||||||
"gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, cb.guid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild " +
|
"gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, cb.guid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild, " +
|
||||||
|
"c.personalTabardEmblemStyle, c.personalTabardEmblemColor, c.personalTabardBorderStyle, c.personalTabardBorderColor, c.personalTabardBackgroundColor " +
|
||||||
"FROM characters AS c LEFT JOIN character_pet AS cp ON c.summonedPetNumber = cp.id LEFT JOIN guild_member AS gm ON c.guid = gm.guid " +
|
"FROM characters AS c LEFT JOIN character_pet AS cp ON c.summonedPetNumber = cp.id LEFT JOIN guild_member AS gm ON c.guid = gm.guid " +
|
||||||
"LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 WHERE c.account = ? AND c.deleteInfos_Name IS NULL");
|
"LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 " +
|
||||||
PrepareStatement(CharStatements.SEL_ENUM_DECLINED_NAME, "SELECT c.guid, c.name, c.race, c.class, c.gender, c.level, c.zone, c.map, " +
|
"WHERE c.account = ? AND c.deleteInfos_Name IS NULL");
|
||||||
"c.position_x, c.position_y, c.position_z, gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, " +
|
PrepareStatement(CharStatements.SEL_ENUM_DECLINED_NAME, "SELECT c.guid, c.name, c.race, c.class, c.gender, c.level, c.zone, c.map, c.position_x, c.position_y, c.position_z, " +
|
||||||
"cb.guid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild, cd.genitive FROM characters AS c LEFT JOIN character_pet AS cp ON c.summonedPetNumber = cp.id " +
|
"gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, cb.guid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild, " +
|
||||||
"LEFT JOIN character_declinedname AS cd ON c.guid = cd.guid LEFT JOIN guild_member AS gm ON c.guid = gm.guid " +
|
"c.personalTabardEmblemStyle, c.personalTabardEmblemColor, c.personalTabardBorderStyle, c.personalTabardBorderColor, c.personalTabardBackgroundColor, cd.genitive " +
|
||||||
"LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 WHERE c.account = ? AND c.deleteInfos_Name IS NULL");
|
"FROM characters AS c LEFT JOIN character_pet AS cp ON c.summonedPetNumber = cp.id LEFT JOIN guild_member AS gm ON c.guid = gm.guid " +
|
||||||
|
"LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 LEFT JOIN character_declinedname AS cd ON c.guid = cd.guid " +
|
||||||
|
"WHERE c.account = ? AND c.deleteInfos_Name IS NULL");
|
||||||
PrepareStatement(CharStatements.SEL_ENUM_CUSTOMIZATIONS, "SELECT cc.guid, cc.chrCustomizationOptionID, cc.chrCustomizationChoiceID FROM character_customizations cc " +
|
PrepareStatement(CharStatements.SEL_ENUM_CUSTOMIZATIONS, "SELECT cc.guid, cc.chrCustomizationOptionID, cc.chrCustomizationChoiceID FROM character_customizations cc " +
|
||||||
"LEFT JOIN characters c ON cc.guid = c.guid WHERE c.account = ? AND c.deleteInfos_Name IS NULL ORDER BY cc.guid, cc.chrCustomizationOptionID");
|
"LEFT JOIN characters c ON cc.guid = c.guid WHERE c.account = ? AND c.deleteInfos_Name IS NULL ORDER BY cc.guid, cc.chrCustomizationOptionID");
|
||||||
PrepareStatement(CharStatements.SEL_UNDELETE_ENUM, "SELECT c.guid, c.deleteInfos_Name, c.race, c.class, c.gender, c.level, c.zone, c.map, c.position_x, c.position_y, c.position_z, " +
|
PrepareStatement(CharStatements.SEL_UNDELETE_ENUM, "SELECT c.guid, c.deleteInfos_Name, c.race, c.class, c.gender, c.level, c.zone, c.map, c.position_x, c.position_y, c.position_z, " +
|
||||||
"gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, cb.guid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild " +
|
"gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, cb.guid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild, " +
|
||||||
|
"c.personalTabardEmblemStyle, c.personalTabardEmblemColor, c.personalTabardBorderStyle, c.personalTabardBorderColor, c.personalTabardBackgroundColor " +
|
||||||
"FROM characters AS c LEFT JOIN character_pet AS cp ON c.summonedPetNumber = cp.id LEFT JOIN guild_member AS gm ON c.guid = gm.guid " +
|
"FROM characters AS c LEFT JOIN character_pet AS cp ON c.summonedPetNumber = cp.id LEFT JOIN guild_member AS gm ON c.guid = gm.guid " +
|
||||||
"LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 WHERE c.deleteInfos_Account = ? AND c.deleteInfos_Name IS NOT NULL");
|
"LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 " +
|
||||||
PrepareStatement(CharStatements.SEL_UNDELETE_ENUM_DECLINED_NAME, "SELECT c.guid, c.deleteInfos_Name, c.race, c.class, c.gender, c.level, c.zone, c.map, " +
|
"WHERE c.deleteInfos_Account = ? AND c.deleteInfos_Name IS NOT NULL");
|
||||||
"c.position_x, c.position_y, c.position_z, gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, " +
|
PrepareStatement(CharStatements.SEL_UNDELETE_ENUM_DECLINED_NAME, "SELECT c.guid, c.deleteInfos_Name, c.race, c.class, c.gender, c.level, c.zone, c.map, c.position_x, c.position_y, c.position_z, " +
|
||||||
"cb.guid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild, cd.genitive FROM characters AS c LEFT JOIN character_pet AS cp ON c.summonedPetNumber = cp.id " +
|
"gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, cb.guid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild, " +
|
||||||
"LEFT JOIN character_declinedname AS cd ON c.guid = cd.guid LEFT JOIN guild_member AS gm ON c.guid = gm.guid " +
|
"c.personalTabardEmblemStyle, c.personalTabardEmblemColor, c.personalTabardBorderStyle, c.personalTabardBorderColor, c.personalTabardBackgroundColor, cd.genitive" +
|
||||||
"LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 WHERE c.deleteInfos_Account = ? AND c.deleteInfos_Name IS NOT NULL");
|
"FROM characters AS c LEFT JOIN character_pet AS cp ON c.summonedPetNumber = cp.id LEFT JOIN guild_member AS gm ON c.guid = gm.guid " +
|
||||||
|
"LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 LEFT JOIN character_declinedname AS cd ON c.guid = cd.guid " +
|
||||||
|
"WHERE c.deleteInfos_Account = ? AND c.deleteInfos_Name IS NOT NULL");
|
||||||
PrepareStatement(CharStatements.SEL_UNDELETE_ENUM_CUSTOMIZATIONS, "SELECT cc.guid, cc.chrCustomizationOptionID, cc.chrCustomizationChoiceID FROM character_customizations cc " +
|
PrepareStatement(CharStatements.SEL_UNDELETE_ENUM_CUSTOMIZATIONS, "SELECT cc.guid, cc.chrCustomizationOptionID, cc.chrCustomizationChoiceID FROM character_customizations cc " +
|
||||||
"LEFT JOIN characters c ON cc.guid = c.guid WHERE c.deleteInfos_Account = ? AND c.deleteInfos_Name IS NOT NULL ORDER BY cc.guid, cc.chrCustomizationOptionID");
|
"LEFT JOIN characters c ON cc.guid = c.guid WHERE c.deleteInfos_Account = ? AND c.deleteInfos_Name IS NOT NULL ORDER BY cc.guid, cc.chrCustomizationOptionID");
|
||||||
|
|
||||||
@@ -71,7 +77,8 @@ namespace Framework.Database
|
|||||||
"resettalents_time, primarySpecialization, trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, summonedPetNumber, at_login, zone, online, death_expire_time, taxi_path, dungeonDifficulty, " +
|
"resettalents_time, primarySpecialization, trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, summonedPetNumber, at_login, zone, online, death_expire_time, taxi_path, dungeonDifficulty, " +
|
||||||
"totalKills, todayKills, yesterdayKills, chosenTitle, watchedFaction, drunk, " +
|
"totalKills, todayKills, yesterdayKills, chosenTitle, watchedFaction, drunk, " +
|
||||||
"health, power1, power2, power3, power4, power5, power6, power7, power8, power9, power10, instance_id, activeTalentGroup, lootSpecId, exploredZones, knownTitles, actionBars, " +
|
"health, power1, power2, power3, power4, power5, power6, power7, power8, power9, power10, instance_id, activeTalentGroup, lootSpecId, exploredZones, knownTitles, actionBars, " +
|
||||||
"raidDifficulty, legacyRaidDifficulty, fishingSteps, honor, honorLevel, honorRestState, honorRestBonus, numRespecs " +
|
"raidDifficulty, legacyRaidDifficulty, fishingSteps, honor, honorLevel, honorRestState, honorRestBonus, numRespecs, " +
|
||||||
|
"personalTabardEmblemStyle, personalTabardEmblemColor, personalTabardBorderStyle, personalTabardBorderColor, personalTabardBackgroundColor " +
|
||||||
"FROM characters c LEFT JOIN character_fishingsteps cfs ON c.guid = cfs.guid WHERE c.guid = ?");
|
"FROM characters c LEFT JOIN character_fishingsteps cfs ON c.guid = cfs.guid WHERE c.guid = ?");
|
||||||
|
|
||||||
PrepareStatement(CharStatements.SEL_CHARACTER_CUSTOMIZATIONS, "SELECT chrCustomizationOptionID, chrCustomizationChoiceID FROM character_customizations WHERE guid = ? ORDER BY chrCustomizationOptionID");
|
PrepareStatement(CharStatements.SEL_CHARACTER_CUSTOMIZATIONS, "SELECT chrCustomizationOptionID, chrCustomizationChoiceID FROM character_customizations WHERE guid = ? ORDER BY chrCustomizationOptionID");
|
||||||
@@ -248,7 +255,7 @@ namespace Framework.Database
|
|||||||
PrepareStatement(CharStatements.DEL_GUILD_RANKS, "DELETE FROM guild_rank WHERE guildid = ?");
|
PrepareStatement(CharStatements.DEL_GUILD_RANKS, "DELETE FROM guild_rank WHERE guildid = ?");
|
||||||
PrepareStatement(CharStatements.DEL_GUILD_RANK, "DELETE FROM guild_rank WHERE guildid = ? AND rid = ?");
|
PrepareStatement(CharStatements.DEL_GUILD_RANK, "DELETE FROM guild_rank WHERE guildid = ? AND rid = ?");
|
||||||
PrepareStatement(CharStatements.INS_GUILD_BANK_TAB, "INSERT INTO guild_bank_tab (guildid, TabId) VALUES (?, ?)");
|
PrepareStatement(CharStatements.INS_GUILD_BANK_TAB, "INSERT INTO guild_bank_tab (guildid, TabId) VALUES (?, ?)");
|
||||||
PrepareStatement(CharStatements.DEL_GUILD_BANK_TAB, "DELETE FROM guild_bank_tab WHERE guildid = ? AND TabId = ?");
|
PrepareStatement(CharStatements.DEL_GUILD_BANK_TAB, "DELETE FROM guild_bank_tab WHERE guildid = ? AND TabId = ?");
|
||||||
PrepareStatement(CharStatements.DEL_GUILD_BANK_TABS, "DELETE FROM guild_bank_tab WHERE guildid = ?");
|
PrepareStatement(CharStatements.DEL_GUILD_BANK_TABS, "DELETE FROM guild_bank_tab WHERE guildid = ?");
|
||||||
|
|
||||||
PrepareStatement(CharStatements.INS_GUILD_BANK_ITEM, "INSERT INTO guild_bank_item (guildid, TabId, SlotId, item_guid) VALUES (?, ?, ?, ?)");
|
PrepareStatement(CharStatements.INS_GUILD_BANK_ITEM, "INSERT INTO guild_bank_item (guildid, TabId, SlotId, item_guid) VALUES (?, ?, ?, ?)");
|
||||||
@@ -312,7 +319,7 @@ namespace Framework.Database
|
|||||||
|
|
||||||
// Equipmentsets
|
// Equipmentsets
|
||||||
PrepareStatement(CharStatements.UPD_EQUIP_SET, "UPDATE character_equipmentsets SET name=?, iconname=?, ignore_mask=?, AssignedSpecIndex=?, item0=?, item1=?, item2=?, item3=?, " +
|
PrepareStatement(CharStatements.UPD_EQUIP_SET, "UPDATE character_equipmentsets SET name=?, iconname=?, ignore_mask=?, AssignedSpecIndex=?, item0=?, item1=?, item2=?, item3=?, " +
|
||||||
"item4=?, item5=?, item6=?, item7=?, item8=?, item9=?, item10=?, item11=?, item12=?, item13=?, item14=?, item15=?, item16=?, " +
|
"item4=?, item5=?, item6=?, item7=?, item8=?, item9=?, item10=?, item11=?, item12=?, item13=?, item14=?, item15=?, item16=?, " +
|
||||||
"item17=?, item18=? WHERE guid=? AND setguid=? AND setindex=?");
|
"item17=?, item18=? WHERE guid=? AND setguid=? AND setindex=?");
|
||||||
PrepareStatement(CharStatements.INS_EQUIP_SET, "INSERT INTO character_equipmentsets (guid, setguid, setindex, name, iconname, ignore_mask, AssignedSpecIndex, item0, item1, item2, item3, " +
|
PrepareStatement(CharStatements.INS_EQUIP_SET, "INSERT INTO character_equipmentsets (guid, setguid, setindex, name, iconname, ignore_mask, AssignedSpecIndex, item0, item1, item2, item3, " +
|
||||||
"item4, item5, item6, item7, item8, item9, item10, item11, item12, item13, item14, item15, item16, item17, item18) " +
|
"item4, item5, item6, item7, item8, item9, item10, item11, item12, item13, item14, item15, item16, item17, item18) " +
|
||||||
|
|||||||
@@ -270,13 +270,13 @@ namespace Framework.Database
|
|||||||
|
|
||||||
// ChrCustomizationDisplayInfo.db2
|
// ChrCustomizationDisplayInfo.db2
|
||||||
PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_DISPLAY_INFO, "SELECT ID, ShapeshiftFormID, DisplayID, BarberShopMinCameraDistance, " +
|
PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_DISPLAY_INFO, "SELECT ID, ShapeshiftFormID, DisplayID, BarberShopMinCameraDistance, " +
|
||||||
"BarberShopHeightOffset FROM chr_customization_display_info WHERE (`VerifiedBuild` > 0) = ?");
|
"BarberShopHeightOffset, BarberShopCameraZoomOffset FROM chr_customization_display_info WHERE (`VerifiedBuild` > 0) = ?");
|
||||||
|
|
||||||
// ChrCustomizationElement.db2
|
// ChrCustomizationElement.db2
|
||||||
PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_ELEMENT, "SELECT ID, ChrCustomizationChoiceID, RelatedChrCustomizationChoiceID, " +
|
PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_ELEMENT, "SELECT ID, ChrCustomizationChoiceID, RelatedChrCustomizationChoiceID, " +
|
||||||
"ChrCustomizationGeosetID, ChrCustomizationSkinnedModelID, ChrCustomizationMaterialID, ChrCustomizationBoneSetID, " +
|
"ChrCustomizationGeosetID, ChrCustomizationSkinnedModelID, ChrCustomizationMaterialID, ChrCustomizationBoneSetID, " +
|
||||||
"ChrCustomizationCondModelID, ChrCustomizationDisplayInfoID, ChrCustItemGeoModifyID, ChrCustomizationVoiceID, AnimKitID, ParticleColorID" +
|
"ChrCustomizationCondModelID, ChrCustomizationDisplayInfoID, ChrCustItemGeoModifyID, ChrCustomizationVoiceID, AnimKitID, ParticleColorID, " +
|
||||||
" FROM chr_customization_element WHERE (`VerifiedBuild` > 0) = ?");
|
"ChrCustGeoComponentLinkID FROM chr_customization_element WHERE (`VerifiedBuild` > 0) = ?");
|
||||||
|
|
||||||
// ChrCustomizationOption.db2
|
// ChrCustomizationOption.db2
|
||||||
PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_OPTION, "SELECT Name, ID, SecondaryID, Flags, ChrModelID, SortIndex, ChrCustomizationCategoryID, " +
|
PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_OPTION, "SELECT Name, ID, SecondaryID, Flags, ChrModelID, SortIndex, ChrCustomizationCategoryID, " +
|
||||||
@@ -357,8 +357,8 @@ namespace Framework.Database
|
|||||||
" WHERE (`VerifiedBuild` > 0) = ?");
|
" WHERE (`VerifiedBuild` > 0) = ?");
|
||||||
|
|
||||||
// ConversationLine.db2
|
// ConversationLine.db2
|
||||||
PrepareStatement(HotfixStatements.SEL_CONVERSATION_LINE, "SELECT ID, BroadcastTextID, SpellVisualKitID, AdditionalDuration, NextConversationLineID, " +
|
PrepareStatement(HotfixStatements.SEL_CONVERSATION_LINE, "SELECT ID, BroadcastTextID, Unused1020, SpellVisualKitID, AdditionalDuration, " +
|
||||||
"AnimKitID, SpeechType, StartAnimation, EndAnimation FROM conversation_line WHERE (`VerifiedBuild` > 0) = ?");
|
"NextConversationLineID, AnimKitID, SpeechType, StartAnimation, EndAnimation FROM conversation_line WHERE (`VerifiedBuild` > 0) = ?");
|
||||||
|
|
||||||
// CorruptionEffects.db2
|
// CorruptionEffects.db2
|
||||||
PrepareStatement(HotfixStatements.SEL_CORRUPTION_EFFECTS, "SELECT ID, MinCorruption, Aura, PlayerConditionID, Flags FROM corruption_effects" +
|
PrepareStatement(HotfixStatements.SEL_CORRUPTION_EFFECTS, "SELECT ID, MinCorruption, Aura, PlayerConditionID, Flags FROM corruption_effects" +
|
||||||
@@ -1121,6 +1121,10 @@ namespace Framework.Database
|
|||||||
// SceneScriptText.db2
|
// SceneScriptText.db2
|
||||||
PrepareStatement(HotfixStatements.SEL_SCENE_SCRIPT_TEXT, "SELECT ID, Name, Script FROM scene_script_text WHERE (`VerifiedBuild` > 0) = ?");
|
PrepareStatement(HotfixStatements.SEL_SCENE_SCRIPT_TEXT, "SELECT ID, Name, Script FROM scene_script_text WHERE (`VerifiedBuild` > 0) = ?");
|
||||||
|
|
||||||
|
// ServerMessages.db2
|
||||||
|
PrepareStatement(HotfixStatements.SEL_SERVER_MESSAGES, "SELECT ID, `Text` FROM server_messages WHERE (`VerifiedBuild` > 0) = ?");
|
||||||
|
PrepareStatement(HotfixStatements.SEL_SERVER_MESSAGES_LOCALE, "SELECT ID, Text_lang FROM server_messages_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?");
|
||||||
|
|
||||||
// SkillLine.db2
|
// SkillLine.db2
|
||||||
PrepareStatement(HotfixStatements.SEL_SKILL_LINE, "SELECT DisplayName, AlternateVerb, Description, HordeDisplayName, OverrideSourceInfoDisplayName, ID, " +
|
PrepareStatement(HotfixStatements.SEL_SKILL_LINE, "SELECT DisplayName, AlternateVerb, Description, HordeDisplayName, OverrideSourceInfoDisplayName, ID, " +
|
||||||
"CategoryID, SpellIconFileID, CanLink, ParentSkillLineID, ParentTierIndex, Flags, SpellBookSpellID, ExpansionNameSharedStringID, " +
|
"CategoryID, SpellIconFileID, CanLink, ParentSkillLineID, ParentTierIndex, Flags, SpellBookSpellID, ExpansionNameSharedStringID, " +
|
||||||
@@ -1305,10 +1309,9 @@ namespace Framework.Database
|
|||||||
"ShapeshiftMask2 FROM spell_shapeshift WHERE (`VerifiedBuild` > 0) = ?");
|
"ShapeshiftMask2 FROM spell_shapeshift WHERE (`VerifiedBuild` > 0) = ?");
|
||||||
|
|
||||||
// SpellShapeshiftForm.db2
|
// SpellShapeshiftForm.db2
|
||||||
PrepareStatement(HotfixStatements.SEL_SPELL_SHAPESHIFT_FORM, "SELECT ID, Name, CreatureType, Flags, AttackIconFileID, BonusActionBar, CombatRoundTime, " +
|
PrepareStatement(HotfixStatements.SEL_SPELL_SHAPESHIFT_FORM, "SELECT ID, Name, CreatureDisplayID, CreatureType, Flags, AttackIconFileID, BonusActionBar, " +
|
||||||
"DamageVariance, MountTypeID, CreatureDisplayID1, CreatureDisplayID2, CreatureDisplayID3, CreatureDisplayID4, PresetSpellID1, PresetSpellID2, " +
|
"CombatRoundTime, DamageVariance, MountTypeID, PresetSpellID1, PresetSpellID2, PresetSpellID3, PresetSpellID4, PresetSpellID5, " +
|
||||||
"PresetSpellID3, PresetSpellID4, PresetSpellID5, PresetSpellID6, PresetSpellID7, PresetSpellID8 FROM spell_shapeshift_form" +
|
"PresetSpellID6, PresetSpellID7, PresetSpellID8 FROM spell_shapeshift_form WHERE (`VerifiedBuild` > 0) = ?");
|
||||||
" WHERE (`VerifiedBuild` > 0) = ?");
|
|
||||||
PrepareStatement(HotfixStatements.SEL_SPELL_SHAPESHIFT_FORM_LOCALE, "SELECT ID, Name_lang FROM spell_shapeshift_form_locale WHERE (`VerifiedBuild` > 0) = ?" +
|
PrepareStatement(HotfixStatements.SEL_SPELL_SHAPESHIFT_FORM_LOCALE, "SELECT ID, Name_lang FROM spell_shapeshift_form_locale WHERE (`VerifiedBuild` > 0) = ?" +
|
||||||
" AND locale = ?");
|
" AND locale = ?");
|
||||||
|
|
||||||
@@ -2119,6 +2122,9 @@ namespace Framework.Database
|
|||||||
|
|
||||||
SEL_SCENE_SCRIPT_TEXT,
|
SEL_SCENE_SCRIPT_TEXT,
|
||||||
|
|
||||||
|
SEL_SERVER_MESSAGES,
|
||||||
|
SEL_SERVER_MESSAGES_LOCALE,
|
||||||
|
|
||||||
SEL_SKILL_LINE,
|
SEL_SKILL_LINE,
|
||||||
SEL_SKILL_LINE_LOCALE,
|
SEL_SKILL_LINE_LOCALE,
|
||||||
|
|
||||||
|
|||||||
@@ -153,6 +153,7 @@ namespace Game.Achievements
|
|||||||
case CriteriaType.DamageDealt:
|
case CriteriaType.DamageDealt:
|
||||||
case CriteriaType.HealingDone:
|
case CriteriaType.HealingDone:
|
||||||
case CriteriaType.EarnArtifactXPForAzeriteItem:
|
case CriteriaType.EarnArtifactXPForAzeriteItem:
|
||||||
|
case CriteriaType.GainLevels:
|
||||||
SetCriteriaProgress(criteria, miscValue1, referencePlayer, ProgressType.Accumulate);
|
SetCriteriaProgress(criteria, miscValue1, referencePlayer, ProgressType.Accumulate);
|
||||||
break;
|
break;
|
||||||
case CriteriaType.KillCreature:
|
case CriteriaType.KillCreature:
|
||||||
@@ -458,7 +459,7 @@ namespace Game.Achievements
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
_startedCriteria[key] -= timeDiff;
|
_startedCriteria[key] -= timeDiff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void StartCriteria(CriteriaStartEvent startEvent, uint entry, TimeSpan timeLost = default)
|
public void StartCriteria(CriteriaStartEvent startEvent, uint entry, TimeSpan timeLost = default)
|
||||||
@@ -799,6 +800,7 @@ namespace Game.Achievements
|
|||||||
case CriteriaType.CompleteAnyReplayQuest:
|
case CriteriaType.CompleteAnyReplayQuest:
|
||||||
case CriteriaType.BuyItemsFromVendors:
|
case CriteriaType.BuyItemsFromVendors:
|
||||||
case CriteriaType.SellItemsToVendors:
|
case CriteriaType.SellItemsToVendors:
|
||||||
|
case CriteriaType.GainLevels:
|
||||||
return progress.Counter >= requiredAmount;
|
return progress.Counter >= requiredAmount;
|
||||||
case CriteriaType.EarnAchievement:
|
case CriteriaType.EarnAchievement:
|
||||||
case CriteriaType.CompleteQuest:
|
case CriteriaType.CompleteQuest:
|
||||||
@@ -932,6 +934,7 @@ namespace Game.Achievements
|
|||||||
case CriteriaType.CompleteAnyReplayQuest:
|
case CriteriaType.CompleteAnyReplayQuest:
|
||||||
case CriteriaType.BuyItemsFromVendors:
|
case CriteriaType.BuyItemsFromVendors:
|
||||||
case CriteriaType.SellItemsToVendors:
|
case CriteriaType.SellItemsToVendors:
|
||||||
|
case CriteriaType.GainLevels:
|
||||||
if (miscValue1 == 0)
|
if (miscValue1 == 0)
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
@@ -3291,6 +3294,15 @@ namespace Game.Achievements
|
|||||||
case 149: // Shadowlands Season 2 End
|
case 149: // Shadowlands Season 2 End
|
||||||
// timestamp = unknown
|
// timestamp = unknown
|
||||||
break;
|
break;
|
||||||
|
case 349: // Dragonflight Season 3 Start (pre-season)
|
||||||
|
eventTimestamp = 1699340400L; // November 7, 2023 8:00
|
||||||
|
break;
|
||||||
|
case 350: // Dragonflight Season 3 Start
|
||||||
|
eventTimestamp = 1699945200L; // November 14, 2023 8:00
|
||||||
|
break;
|
||||||
|
case 352: // Dragonflight Season 3 End
|
||||||
|
// eventTimestamp = time_t(); unknown
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -3668,6 +3680,13 @@ namespace Game.Achievements
|
|||||||
if (referencePlayer.GetPositionZ() >= reqValue)
|
if (referencePlayer.GetPositionZ() >= reqValue)
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
|
case ModifierTreeType.PlayerIsOnMapWithExpansion: // 380
|
||||||
|
{
|
||||||
|
var mapEntry = referencePlayer.GetMap().GetEntry();
|
||||||
|
if (mapEntry.ExpansionID != reqValue)
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -3706,8 +3725,8 @@ namespace Game.Achievements
|
|||||||
MultiMap<uint, Criteria>[] _scenarioCriteriasByTypeAndScenarioId = new MultiMap<uint, Criteria>[(int)CriteriaType.Count];
|
MultiMap<uint, Criteria>[] _scenarioCriteriasByTypeAndScenarioId = new MultiMap<uint, Criteria>[(int)CriteriaType.Count];
|
||||||
MultiMap<CriteriaType, Criteria> _questObjectiveCriteriasByType = new();
|
MultiMap<CriteriaType, Criteria> _questObjectiveCriteriasByType = new();
|
||||||
|
|
||||||
MultiMap<int, Criteria>[] _criteriasByStartEvent = new MultiMap<int, Criteria>[(int)CriteriaStartEvent.Max];
|
MultiMap<int, Criteria>[] _criteriasByStartEvent = new MultiMap<int, Criteria>[(int)CriteriaStartEvent.Count];
|
||||||
MultiMap<int, Criteria>[] _criteriasByFailEvent = new MultiMap<int, Criteria>[(int)CriteriaFailEvent.Max];
|
MultiMap<int, Criteria>[] _criteriasByFailEvent = new MultiMap<int, Criteria>[(int)CriteriaFailEvent.Count];
|
||||||
|
|
||||||
CriteriaManager()
|
CriteriaManager()
|
||||||
{
|
{
|
||||||
@@ -3717,10 +3736,10 @@ namespace Game.Achievements
|
|||||||
_scenarioCriteriasByTypeAndScenarioId[i] = new MultiMap<uint, Criteria>();
|
_scenarioCriteriasByTypeAndScenarioId[i] = new MultiMap<uint, Criteria>();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var i = 0; i < (int)CriteriaStartEvent.Max; ++i)
|
for (var i = 0; i < (int)CriteriaStartEvent.Count; ++i)
|
||||||
_criteriasByStartEvent[i] = new();
|
_criteriasByStartEvent[i] = new();
|
||||||
|
|
||||||
for (var i = 0; i < (int)CriteriaFailEvent.Max; ++i)
|
for (var i = 0; i < (int)CriteriaFailEvent.Count; ++i)
|
||||||
_criteriasByFailEvent[i] = new();
|
_criteriasByFailEvent[i] = new();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -3836,7 +3855,7 @@ namespace Game.Achievements
|
|||||||
_criteriaTreeByCriteria.Add(pair.Value.Entry.CriteriaID, pair.Value);
|
_criteriaTreeByCriteria.Add(pair.Value.Entry.CriteriaID, pair.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var i = 0; i < (int)CriteriaFailEvent.Max; ++i)
|
for (var i = 0; i < (int)CriteriaFailEvent.Count; ++i)
|
||||||
_criteriasByFailEvent[i] = new MultiMap<int, Criteria>();
|
_criteriasByFailEvent[i] = new MultiMap<int, Criteria>();
|
||||||
|
|
||||||
// Load criteria
|
// Load criteria
|
||||||
@@ -3846,10 +3865,9 @@ namespace Game.Achievements
|
|||||||
uint questObjectiveCriterias = 0;
|
uint questObjectiveCriterias = 0;
|
||||||
foreach (CriteriaRecord criteriaEntry in CliDB.CriteriaStorage.Values)
|
foreach (CriteriaRecord criteriaEntry in CliDB.CriteriaStorage.Values)
|
||||||
{
|
{
|
||||||
Cypher.Assert(criteriaEntry.Type < CriteriaType.Count,
|
Cypher.Assert(criteriaEntry.Type < CriteriaType.Count, $"CriteriaType.Count must be greater than or equal to {criteriaEntry.Type + 1} but is currently equal to {CriteriaType.Count}");
|
||||||
$"CRITERIA_TYPE_TOTAL must be greater than or equal to {criteriaEntry.Type + 1} but is currently equal to {CriteriaType.Count}");
|
Cypher.Assert(criteriaEntry.StartEvent < (byte)CriteriaStartEvent.Count, $"CriteriaStartEvent.Count must be greater than or equal to {criteriaEntry.StartEvent + 1} but is currently equal to {CriteriaStartEvent.Count}");
|
||||||
Cypher.Assert(criteriaEntry.StartEvent < (byte)CriteriaStartEvent.Max, $"CRITERIA_TYPE_TOTAL must be greater than or equal to {criteriaEntry.StartEvent + 1} but is currently equal to {CriteriaStartEvent.Max}");
|
Cypher.Assert(criteriaEntry.FailEvent < (byte)CriteriaFailEvent.Count, $"CriteriaFailEvent.Count must be greater than or equal to {criteriaEntry.FailEvent + 1} but is currently equal to {CriteriaFailEvent.Count}");
|
||||||
Cypher.Assert(criteriaEntry.FailEvent < (byte)CriteriaFailEvent.Max, $"CRITERIA_CONDITION_MAX must be greater than or equal to {criteriaEntry.FailEvent + 1} but is currently equal to {CriteriaFailEvent.Max}");
|
|
||||||
|
|
||||||
var treeList = _criteriaTreeByCriteria.LookupByKey(criteriaEntry.Id);
|
var treeList = _criteriaTreeByCriteria.LookupByKey(criteriaEntry.Id);
|
||||||
if (treeList.Empty())
|
if (treeList.Empty())
|
||||||
@@ -4086,7 +4104,7 @@ namespace Game.Achievements
|
|||||||
{
|
{
|
||||||
return _criteriasByFailEvent[(int)failEvent].LookupByKey(asset);
|
return _criteriasByFailEvent[(int)failEvent].LookupByKey(asset);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Criteria> GetGuildCriteriaByType(CriteriaType type)
|
public List<Criteria> GetGuildCriteriaByType(CriteriaType type)
|
||||||
{
|
{
|
||||||
return _guildCriteriasByType.LookupByKey(type);
|
return _guildCriteriasByType.LookupByKey(type);
|
||||||
|
|||||||
@@ -281,6 +281,7 @@ namespace Game.DataStorage
|
|||||||
SceneScriptGlobalTextStorage = ReadDB2<SceneScriptGlobalTextRecord>("SceneScriptGlobalText.db2", HotfixStatements.SEL_SCENE_SCRIPT_GLOBAL_TEXT);
|
SceneScriptGlobalTextStorage = ReadDB2<SceneScriptGlobalTextRecord>("SceneScriptGlobalText.db2", HotfixStatements.SEL_SCENE_SCRIPT_GLOBAL_TEXT);
|
||||||
SceneScriptPackageStorage = ReadDB2<SceneScriptPackageRecord>("SceneScriptPackage.db2", HotfixStatements.SEL_SCENE_SCRIPT_PACKAGE);
|
SceneScriptPackageStorage = ReadDB2<SceneScriptPackageRecord>("SceneScriptPackage.db2", HotfixStatements.SEL_SCENE_SCRIPT_PACKAGE);
|
||||||
SceneScriptTextStorage = ReadDB2<SceneScriptTextRecord>("SceneScriptText.db2", HotfixStatements.SEL_SCENE_SCRIPT_TEXT);
|
SceneScriptTextStorage = ReadDB2<SceneScriptTextRecord>("SceneScriptText.db2", HotfixStatements.SEL_SCENE_SCRIPT_TEXT);
|
||||||
|
ServerMessagesStorage = ReadDB2<ServerMessagesRecord>("ServerMessages.db2", HotfixStatements.SEL_SERVER_MESSAGES, HotfixStatements.SEL_SERVER_MESSAGES_LOCALE);
|
||||||
SkillLineStorage = ReadDB2<SkillLineRecord>("SkillLine.db2", HotfixStatements.SEL_SKILL_LINE, HotfixStatements.SEL_SKILL_LINE_LOCALE);
|
SkillLineStorage = ReadDB2<SkillLineRecord>("SkillLine.db2", HotfixStatements.SEL_SKILL_LINE, HotfixStatements.SEL_SKILL_LINE_LOCALE);
|
||||||
SkillLineAbilityStorage = ReadDB2<SkillLineAbilityRecord>("SkillLineAbility.db2", HotfixStatements.SEL_SKILL_LINE_ABILITY);
|
SkillLineAbilityStorage = ReadDB2<SkillLineAbilityRecord>("SkillLineAbility.db2", HotfixStatements.SEL_SKILL_LINE_ABILITY);
|
||||||
SkillLineXTraitTreeStorage = ReadDB2<SkillLineXTraitTreeRecord>("SkillLineXTraitTree.db2", HotfixStatements.SEL_SKILL_LINE_X_TRAIT_TREE);
|
SkillLineXTraitTreeStorage = ReadDB2<SkillLineXTraitTreeRecord>("SkillLineXTraitTree.db2", HotfixStatements.SEL_SKILL_LINE_X_TRAIT_TREE);
|
||||||
@@ -715,6 +716,7 @@ namespace Game.DataStorage
|
|||||||
public static DB6Storage<SceneScriptGlobalTextRecord> SceneScriptGlobalTextStorage;
|
public static DB6Storage<SceneScriptGlobalTextRecord> SceneScriptGlobalTextStorage;
|
||||||
public static DB6Storage<SceneScriptPackageRecord> SceneScriptPackageStorage;
|
public static DB6Storage<SceneScriptPackageRecord> SceneScriptPackageStorage;
|
||||||
public static DB6Storage<SceneScriptTextRecord> SceneScriptTextStorage;
|
public static DB6Storage<SceneScriptTextRecord> SceneScriptTextStorage;
|
||||||
|
public static DB6Storage<ServerMessagesRecord> ServerMessagesStorage;
|
||||||
public static DB6Storage<SkillLineRecord> SkillLineStorage;
|
public static DB6Storage<SkillLineRecord> SkillLineStorage;
|
||||||
public static DB6Storage<SkillLineAbilityRecord> SkillLineAbilityStorage;
|
public static DB6Storage<SkillLineAbilityRecord> SkillLineAbilityStorage;
|
||||||
public static DB6Storage<SkillLineXTraitTreeRecord> SkillLineXTraitTreeStorage;
|
public static DB6Storage<SkillLineXTraitTreeRecord> SkillLineXTraitTreeStorage;
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ namespace Game.DataStorage
|
|||||||
public Vector3 Pos;
|
public Vector3 Pos;
|
||||||
public uint Id;
|
public uint Id;
|
||||||
public ushort ContinentID;
|
public ushort ContinentID;
|
||||||
public sbyte PhaseUseFlags;
|
public int PhaseUseFlags;
|
||||||
public ushort PhaseID;
|
public ushort PhaseID;
|
||||||
public ushort PhaseGroupID;
|
public ushort PhaseGroupID;
|
||||||
public float Radius;
|
public float Radius;
|
||||||
|
|||||||
@@ -163,6 +163,7 @@ namespace Game.DataStorage
|
|||||||
public uint DisplayID;
|
public uint DisplayID;
|
||||||
public float BarberShopMinCameraDistance;
|
public float BarberShopMinCameraDistance;
|
||||||
public float BarberShopHeightOffset;
|
public float BarberShopHeightOffset;
|
||||||
|
public float BarberShopCameraZoomOffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
public sealed class ChrCustomizationElementRecord
|
public sealed class ChrCustomizationElementRecord
|
||||||
@@ -180,6 +181,7 @@ namespace Game.DataStorage
|
|||||||
public int ChrCustomizationVoiceID;
|
public int ChrCustomizationVoiceID;
|
||||||
public int AnimKitID;
|
public int AnimKitID;
|
||||||
public int ParticleColorID;
|
public int ParticleColorID;
|
||||||
|
public int ChrCustGeoComponentLinkID;
|
||||||
}
|
}
|
||||||
|
|
||||||
public sealed class ChrCustomizationOptionRecord
|
public sealed class ChrCustomizationOptionRecord
|
||||||
@@ -422,6 +424,7 @@ namespace Game.DataStorage
|
|||||||
{
|
{
|
||||||
public uint Id;
|
public uint Id;
|
||||||
public uint BroadcastTextID;
|
public uint BroadcastTextID;
|
||||||
|
public uint Unused1020;
|
||||||
public uint SpellVisualKitID;
|
public uint SpellVisualKitID;
|
||||||
public int AdditionalDuration;
|
public int AdditionalDuration;
|
||||||
public ushort NextConversationLineID;
|
public ushort NextConversationLineID;
|
||||||
|
|||||||
@@ -234,7 +234,7 @@ namespace Game.DataStorage
|
|||||||
public byte KeyID;
|
public byte KeyID;
|
||||||
public uint AudioFileDataID;
|
public uint AudioFileDataID;
|
||||||
public uint SubtitleFileDataID;
|
public uint SubtitleFileDataID;
|
||||||
public int SubtitleFileFormat;
|
public uint SubtitleFileFormat;
|
||||||
}
|
}
|
||||||
|
|
||||||
public sealed class MythicPlusSeasonRecord
|
public sealed class MythicPlusSeasonRecord
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ namespace Game.DataStorage
|
|||||||
public int MaxAvgItemLevel;
|
public int MaxAvgItemLevel;
|
||||||
public ushort MinAvgEquippedItemLevel;
|
public ushort MinAvgEquippedItemLevel;
|
||||||
public ushort MaxAvgEquippedItemLevel;
|
public ushort MaxAvgEquippedItemLevel;
|
||||||
public byte PhaseUseFlags;
|
public int PhaseUseFlags;
|
||||||
public ushort PhaseID;
|
public ushort PhaseID;
|
||||||
public uint PhaseGroupID;
|
public uint PhaseGroupID;
|
||||||
public int Flags;
|
public int Flags;
|
||||||
|
|||||||
@@ -68,6 +68,12 @@ namespace Game.DataStorage
|
|||||||
public string Script;
|
public string Script;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public sealed class ServerMessagesRecord
|
||||||
|
{
|
||||||
|
public uint Id;
|
||||||
|
public LocalizedString Text;
|
||||||
|
}
|
||||||
|
|
||||||
public sealed class SkillLineRecord
|
public sealed class SkillLineRecord
|
||||||
{
|
{
|
||||||
public LocalizedString DisplayName;
|
public LocalizedString DisplayName;
|
||||||
@@ -544,6 +550,7 @@ namespace Game.DataStorage
|
|||||||
{
|
{
|
||||||
public uint Id;
|
public uint Id;
|
||||||
public string Name;
|
public string Name;
|
||||||
|
public uint CreatureDisplayID;
|
||||||
public sbyte CreatureType;
|
public sbyte CreatureType;
|
||||||
public SpellShapeshiftFormFlags Flags;
|
public SpellShapeshiftFormFlags Flags;
|
||||||
public int AttackIconFileID;
|
public int AttackIconFileID;
|
||||||
@@ -551,7 +558,6 @@ namespace Game.DataStorage
|
|||||||
public ushort CombatRoundTime;
|
public ushort CombatRoundTime;
|
||||||
public float DamageVariance;
|
public float DamageVariance;
|
||||||
public ushort MountTypeID;
|
public ushort MountTypeID;
|
||||||
public uint[] CreatureDisplayID = new uint[4];
|
|
||||||
public uint[] PresetSpellID = new uint[SpellConst.MaxShapeshift];
|
public uint[] PresetSpellID = new uint[SpellConst.MaxShapeshift];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ namespace Game.DataStorage
|
|||||||
public uint Id;
|
public uint Id;
|
||||||
public int ParentUiMapID;
|
public int ParentUiMapID;
|
||||||
public int Flags;
|
public int Flags;
|
||||||
public byte System;
|
public sbyte System;
|
||||||
public UiMapType Type;
|
public UiMapType Type;
|
||||||
public int BountySetID;
|
public int BountySetID;
|
||||||
public uint BountyDisplayLocation;
|
public uint BountyDisplayLocation;
|
||||||
|
|||||||
@@ -127,15 +127,16 @@ namespace Game.Entities
|
|||||||
if (!Global.ConditionMgr.IsObjectMeetingNotGroupedConditions(ConditionSourceType.ConversationLine, line.Id, creator))
|
if (!Global.ConditionMgr.IsObjectMeetingNotGroupedConditions(ConditionSourceType.ConversationLine, line.Id, creator))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
var convoLine = CliDB.ConversationLineStorage.LookupByKey(line.Id); // never null for conversationTemplate->Lines
|
||||||
|
|
||||||
ConversationLine lineField = new();
|
ConversationLine lineField = new();
|
||||||
lineField.ConversationLineID = line.Id;
|
lineField.ConversationLineID = line.Id;
|
||||||
|
lineField.BroadcastTextID = convoLine.BroadcastTextID;
|
||||||
lineField.UiCameraID = line.UiCameraID;
|
lineField.UiCameraID = line.UiCameraID;
|
||||||
lineField.ActorIndex = line.ActorIdx;
|
lineField.ActorIndex = line.ActorIdx;
|
||||||
lineField.Flags = line.Flags;
|
lineField.Flags = line.Flags;
|
||||||
lineField.ChatType = line.ChatType;
|
lineField.ChatType = line.ChatType;
|
||||||
|
|
||||||
ConversationLineRecord convoLine = CliDB.ConversationLineStorage.LookupByKey(line.Id); // never null for conversationTemplate->Lines
|
|
||||||
|
|
||||||
for (Locale locale = Locale.enUS; locale < Locale.Total; locale = locale + 1)
|
for (Locale locale = Locale.enUS; locale < Locale.Total; locale = locale + 1)
|
||||||
{
|
{
|
||||||
if (locale == Locale.None)
|
if (locale == Locale.None)
|
||||||
|
|||||||
@@ -126,6 +126,43 @@ namespace Game.Entities
|
|||||||
public bool HasValue() { return _hasValue; }
|
public bool HasValue() { return _hasValue; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class UpdateFieldArrayString
|
||||||
|
{
|
||||||
|
public string[] _values;
|
||||||
|
public int FirstElementBit;
|
||||||
|
public int Bit;
|
||||||
|
|
||||||
|
public UpdateFieldArrayString(uint size, int bit, int firstElementBit)
|
||||||
|
{
|
||||||
|
_values = new string[size];
|
||||||
|
for (var i = 0; i < size; ++i)
|
||||||
|
_values[i] = "";
|
||||||
|
|
||||||
|
Bit = bit;
|
||||||
|
FirstElementBit = firstElementBit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string this[int index]
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _values[index];
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_values[index] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int GetSize() { return _values.Length; }
|
||||||
|
|
||||||
|
public IEnumerator<string> GetEnumerator()
|
||||||
|
{
|
||||||
|
foreach (var obj in _values)
|
||||||
|
yield return obj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public class UpdateFieldArray<T> where T : new()
|
public class UpdateFieldArray<T> where T : new()
|
||||||
{
|
{
|
||||||
public T[] _values;
|
public T[] _values;
|
||||||
@@ -404,6 +441,8 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ClearChangesMask(UpdateFieldArrayString updateField) { }
|
||||||
|
|
||||||
public void ClearChangesMask<U>(DynamicUpdateField<U> updateField) where U : new()
|
public void ClearChangesMask<U>(DynamicUpdateField<U> updateField) where U : new()
|
||||||
{
|
{
|
||||||
if (typeof(IHasChangesMask).IsAssignableFrom(typeof(U)))
|
if (typeof(IHasChangesMask).IsAssignableFrom(typeof(U)))
|
||||||
@@ -421,24 +460,30 @@ namespace Game.Entities
|
|||||||
return updateField;
|
return updateField;
|
||||||
}
|
}
|
||||||
|
|
||||||
public OptionalUpdateField<U> ModifyValue<U>(OptionalUpdateField<U> updateField) where U : new()
|
|
||||||
{
|
|
||||||
MarkChanged(updateField);
|
|
||||||
return updateField;
|
|
||||||
}
|
|
||||||
|
|
||||||
public UpdateFieldString ModifyValue(UpdateFieldString updateField)
|
public UpdateFieldString ModifyValue(UpdateFieldString updateField)
|
||||||
{
|
{
|
||||||
MarkChanged(updateField);
|
MarkChanged(updateField);
|
||||||
return updateField;
|
return updateField;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public OptionalUpdateField<U> ModifyValue<U>(OptionalUpdateField<U> updateField) where U : new()
|
||||||
|
{
|
||||||
|
MarkChanged(updateField);
|
||||||
|
return updateField;
|
||||||
|
}
|
||||||
|
|
||||||
public ref U ModifyValue<U>(UpdateFieldArray<U> updateField, int index) where U : new()
|
public ref U ModifyValue<U>(UpdateFieldArray<U> updateField, int index) where U : new()
|
||||||
{
|
{
|
||||||
MarkChanged(updateField, index);
|
MarkChanged(updateField, index);
|
||||||
return ref updateField._values[index];
|
return ref updateField._values[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ref string ModifyValue(UpdateFieldArrayString updateField, int index)
|
||||||
|
{
|
||||||
|
MarkChanged(updateField, index);
|
||||||
|
return ref updateField._values[index];
|
||||||
|
}
|
||||||
|
|
||||||
public DynamicUpdateField<U> ModifyValue<U>(DynamicUpdateField<U> updateField) where U : new()
|
public DynamicUpdateField<U> ModifyValue<U>(DynamicUpdateField<U> updateField) where U : new()
|
||||||
{
|
{
|
||||||
_changesMask.Set(updateField.BlockBit);
|
_changesMask.Set(updateField.BlockBit);
|
||||||
@@ -486,6 +531,12 @@ namespace Game.Entities
|
|||||||
_changesMask.Set(updateField.FirstElementBit + index);
|
_changesMask.Set(updateField.FirstElementBit + index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void MarkChanged(UpdateFieldArrayString updateField, int index)
|
||||||
|
{
|
||||||
|
_changesMask.Set(updateField.Bit);
|
||||||
|
_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)
|
||||||
{
|
{
|
||||||
data.WriteBits(size, bitsForSize);
|
data.WriteBits(size, bitsForSize);
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -832,6 +832,15 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetUpdateFieldValue(ref string value, string newValue)
|
||||||
|
{
|
||||||
|
if (!newValue.Equals(value))
|
||||||
|
{
|
||||||
|
value = newValue;
|
||||||
|
AddToObjectUpdateIfNeeded();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void SetUpdateFieldValue<T>(DynamicUpdateField<T> updateField, int index, T newValue) where T : new()
|
public void SetUpdateFieldValue<T>(DynamicUpdateField<T> updateField, int index, T newValue) where T : new()
|
||||||
{
|
{
|
||||||
if (!newValue.Equals(updateField[index]))
|
if (!newValue.Equals(updateField[index]))
|
||||||
|
|||||||
@@ -465,7 +465,7 @@ namespace Game.Entities
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
var spell = m_spells.LookupByKey(favoritesResult.Read<uint>(0));
|
var spell = m_spells.LookupByKey(favoritesResult.Read<uint>(0));
|
||||||
if (spell !=null)
|
if (spell != null)
|
||||||
spell.Favorite = true;
|
spell.Favorite = true;
|
||||||
} while (favoritesResult.NextRow());
|
} while (favoritesResult.NextRow());
|
||||||
}
|
}
|
||||||
@@ -1388,9 +1388,9 @@ namespace Game.Entities
|
|||||||
if (result.IsEmpty())
|
if (result.IsEmpty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
_declinedname = new DeclinedName();
|
DeclinedNames declinedNames = m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.DeclinedNames);
|
||||||
for (byte i = 0; i < SharedConst.MaxDeclinedNameCases; ++i)
|
for (int i = 0; i < SharedConst.MaxDeclinedNameCases; ++i)
|
||||||
_declinedname.name[i] = result.Read<string>(i);
|
SetUpdateFieldValue(ref declinedNames.ModifyValue(declinedNames.Name, i), result.Read<string>(i));
|
||||||
}
|
}
|
||||||
void _LoadArenaTeamInfo(SQLResult result)
|
void _LoadArenaTeamInfo(SQLResult result)
|
||||||
{
|
{
|
||||||
@@ -2047,7 +2047,7 @@ namespace Game.Entities
|
|||||||
void _SaveActions(SQLTransaction trans)
|
void _SaveActions(SQLTransaction trans)
|
||||||
{
|
{
|
||||||
int traitConfigId = 0;
|
int traitConfigId = 0;
|
||||||
|
|
||||||
TraitConfig traitConfig = GetTraitConfig((int)(uint)m_activePlayerData.ActiveCombatTraitConfigID);
|
TraitConfig traitConfig = GetTraitConfig((int)(uint)m_activePlayerData.ActiveCombatTraitConfigID);
|
||||||
if (traitConfig != null)
|
if (traitConfig != null)
|
||||||
{
|
{
|
||||||
@@ -2430,7 +2430,7 @@ namespace Game.Entities
|
|||||||
|
|
||||||
m_traitConfigStates.Clear();
|
m_traitConfigStates.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void _SaveMail(SQLTransaction trans)
|
public void _SaveMail(SQLTransaction trans)
|
||||||
{
|
{
|
||||||
PreparedStatement stmt;
|
PreparedStatement stmt;
|
||||||
@@ -2863,7 +2863,11 @@ namespace Game.Entities
|
|||||||
PlayerRestState honorRestState = (PlayerRestState)result.Read<byte>(fieldIndex++);
|
PlayerRestState honorRestState = (PlayerRestState)result.Read<byte>(fieldIndex++);
|
||||||
float honorRestBonus = result.Read<float>(fieldIndex++);
|
float honorRestBonus = result.Read<float>(fieldIndex++);
|
||||||
byte numRespecs = result.Read<byte>(fieldIndex++);
|
byte numRespecs = result.Read<byte>(fieldIndex++);
|
||||||
|
int personalTabardEmblemStyle = result.Read<int>(fieldIndex++);
|
||||||
|
int personalTabardEmblemColor = result.Read<int>(fieldIndex++);
|
||||||
|
int personalTabardBorderStyle = result.Read<int>(fieldIndex++);
|
||||||
|
int personalTabardBorderColor = result.Read<int>(fieldIndex++);
|
||||||
|
int personalTabardBackgroundColor = result.Read<int>(fieldIndex++);
|
||||||
|
|
||||||
// check if the character's account in the db and the logged in account match.
|
// check if the character's account in the db and the logged in account match.
|
||||||
// player should be able to load/delete character only with correct account!
|
// player should be able to load/delete character only with correct account!
|
||||||
@@ -2895,9 +2899,10 @@ namespace Game.Entities
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SetUpdateFieldValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.Name), GetName());
|
||||||
|
|
||||||
SetUpdateFieldValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.WowAccount), GetSession().GetAccountGUID());
|
SetUpdateFieldValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.WowAccount), GetSession().GetAccountGUID());
|
||||||
SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.BnetAccount), GetSession().GetBattlenetAccountGUID());
|
SetUpdateFieldValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.BnetAccount), GetSession().GetBattlenetAccountGUID());
|
||||||
|
|
||||||
if (gender >= Gender.None)
|
if (gender >= Gender.None)
|
||||||
{
|
{
|
||||||
@@ -3099,7 +3104,7 @@ namespace Game.Entities
|
|||||||
transport = transportOnMap;
|
transport = transportOnMap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (transport != null)
|
if (transport != null)
|
||||||
{
|
{
|
||||||
float x = trans_x;
|
float x = trans_x;
|
||||||
@@ -3217,7 +3222,7 @@ namespace Game.Entities
|
|||||||
else if (map.IsDungeon()) // if map is dungeon...
|
else if (map.IsDungeon()) // if map is dungeon...
|
||||||
{
|
{
|
||||||
TransferAbortParams denyReason = map.CannotEnter(this); // ... and can't enter map, then look for entry point.
|
TransferAbortParams denyReason = map.CannotEnter(this); // ... and can't enter map, then look for entry point.
|
||||||
if (denyReason != null)
|
if (denyReason != null)
|
||||||
{
|
{
|
||||||
SendTransferAborted(map.GetId(), denyReason.Reason, denyReason.Arg, denyReason.MapDifficultyXConditionId);
|
SendTransferAborted(map.GetId(), denyReason.Reason, denyReason.Arg, denyReason.MapDifficultyXConditionId);
|
||||||
areaTrigger = Global.ObjectMgr.GetGoBackTrigger(mapId);
|
areaTrigger = Global.ObjectMgr.GetGoBackTrigger(mapId);
|
||||||
@@ -3460,6 +3465,8 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SetPersonalTabard(personalTabardEmblemStyle, personalTabardEmblemColor, personalTabardBorderStyle, personalTabardBorderColor, personalTabardBackgroundColor);
|
||||||
|
|
||||||
Log.outDebug(LogFilter.Player, "The value of player {0} after load item and aura is: ", GetName());
|
Log.outDebug(LogFilter.Player, "The value of player {0} after load item and aura is: ", GetName());
|
||||||
|
|
||||||
// GM state
|
// GM state
|
||||||
|
|||||||
@@ -237,7 +237,6 @@ namespace Game.Entities
|
|||||||
TimeTracker m_groupUpdateTimer;
|
TimeTracker m_groupUpdateTimer;
|
||||||
|
|
||||||
ulong m_GuildIdInvited;
|
ulong m_GuildIdInvited;
|
||||||
DeclinedName _declinedname;
|
|
||||||
Runes m_runes = new();
|
Runes m_runes = new();
|
||||||
uint m_hostileReferenceCheckTimer;
|
uint m_hostileReferenceCheckTimer;
|
||||||
uint m_drunkTimer;
|
uint m_drunkTimer;
|
||||||
|
|||||||
@@ -138,7 +138,6 @@ namespace Game.Entities
|
|||||||
PlayerTalkClass.ClearMenus();
|
PlayerTalkClass.ClearMenus();
|
||||||
ItemSetEff.Clear();
|
ItemSetEff.Clear();
|
||||||
|
|
||||||
_declinedname = null;
|
|
||||||
m_runes = null;
|
m_runes = null;
|
||||||
m_achievementSys = null;
|
m_achievementSys = null;
|
||||||
reputationMgr = null;
|
reputationMgr = null;
|
||||||
@@ -816,7 +815,7 @@ namespace Game.Entities
|
|||||||
_session.SendPacket(data);
|
_session.SendPacket(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DeclinedName GetDeclinedNames() { return _declinedname; }
|
public DeclinedNames GetDeclinedNames() { return m_playerData.DeclinedNames.HasValue() ? m_playerData.DeclinedNames.GetValue() : null; }
|
||||||
|
|
||||||
public void CreateGarrison(uint garrSiteId)
|
public void CreateGarrison(uint garrSiteId)
|
||||||
{
|
{
|
||||||
@@ -1040,7 +1039,7 @@ namespace Game.Entities
|
|||||||
if (!m_activePlayerData.PetStable.HasValue())
|
if (!m_activePlayerData.PetStable.HasValue())
|
||||||
return ObjectGuid.Empty;
|
return ObjectGuid.Empty;
|
||||||
|
|
||||||
return m_activePlayerData.PetStable.GetValue().StableMaster;
|
return m_activePlayerData.PetStable.GetValue().StableMaster;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetStableMaster(ObjectGuid stableMaster)
|
public void SetStableMaster(ObjectGuid stableMaster)
|
||||||
@@ -1051,7 +1050,7 @@ namespace Game.Entities
|
|||||||
StableInfo stableInfo = m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.PetStable);
|
StableInfo stableInfo = m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.PetStable);
|
||||||
SetUpdateFieldValue(stableInfo.ModifyValue(stableInfo.StableMaster), stableMaster);
|
SetUpdateFieldValue(stableInfo.ModifyValue(stableInfo.StableMaster), stableMaster);
|
||||||
}
|
}
|
||||||
|
|
||||||
// last used pet number (for BG's)
|
// last used pet number (for BG's)
|
||||||
public uint GetLastPetNumber() { return m_lastpetnumber; }
|
public uint GetLastPetNumber() { return m_lastpetnumber; }
|
||||||
public void SetLastPetNumber(uint petnumber) { m_lastpetnumber = petnumber; }
|
public void SetLastPetNumber(uint petnumber) { m_lastpetnumber = petnumber; }
|
||||||
@@ -1059,7 +1058,7 @@ namespace Game.Entities
|
|||||||
public void SetTemporaryUnsummonedPetNumber(uint petnumber) { m_temporaryUnsummonedPetNumber = petnumber; }
|
public void SetTemporaryUnsummonedPetNumber(uint petnumber) { m_temporaryUnsummonedPetNumber = petnumber; }
|
||||||
|
|
||||||
public ReactStates? GetTemporaryPetReactState() { return m_temporaryPetReactState; }
|
public ReactStates? GetTemporaryPetReactState() { return m_temporaryPetReactState; }
|
||||||
|
|
||||||
public void DisablePetControlsOnMount(ReactStates reactState, CommandStates commandState)
|
public void DisablePetControlsOnMount(ReactStates reactState, CommandStates commandState)
|
||||||
{
|
{
|
||||||
Pet pet = GetPet();
|
Pet pet = GetPet();
|
||||||
@@ -2667,11 +2666,12 @@ namespace Game.Entities
|
|||||||
case GossipOptionNpc.Binder:
|
case GossipOptionNpc.Binder:
|
||||||
case GossipOptionNpc.Banker:
|
case GossipOptionNpc.Banker:
|
||||||
case GossipOptionNpc.PetitionVendor:
|
case GossipOptionNpc.PetitionVendor:
|
||||||
case GossipOptionNpc.TabardVendor:
|
case GossipOptionNpc.GuildTabardVendor:
|
||||||
case GossipOptionNpc.Auctioneer:
|
case GossipOptionNpc.Auctioneer:
|
||||||
case GossipOptionNpc.Mailbox:
|
case GossipOptionNpc.Mailbox:
|
||||||
case GossipOptionNpc.Transmogrify:
|
case GossipOptionNpc.Transmogrify:
|
||||||
case GossipOptionNpc.AzeriteRespec:
|
case GossipOptionNpc.AzeriteRespec:
|
||||||
|
case GossipOptionNpc.PersonalTabardVendor:
|
||||||
break; // No checks
|
break; // No checks
|
||||||
case GossipOptionNpc.CemeterySelect:
|
case GossipOptionNpc.CemeterySelect:
|
||||||
canTalk = false; // Deprecated
|
canTalk = false; // Deprecated
|
||||||
@@ -2887,7 +2887,7 @@ namespace Game.Entities
|
|||||||
{
|
{
|
||||||
PlayerInteractionType.None, PlayerInteractionType.Vendor, PlayerInteractionType.TaxiNode,
|
PlayerInteractionType.None, PlayerInteractionType.Vendor, PlayerInteractionType.TaxiNode,
|
||||||
PlayerInteractionType.Trainer, PlayerInteractionType.SpiritHealer, PlayerInteractionType.Binder,
|
PlayerInteractionType.Trainer, PlayerInteractionType.SpiritHealer, PlayerInteractionType.Binder,
|
||||||
PlayerInteractionType.Banker, PlayerInteractionType.PetitionVendor, PlayerInteractionType.TabardVendor,
|
PlayerInteractionType.Banker, PlayerInteractionType.PetitionVendor, PlayerInteractionType.GuildTabardVendor,
|
||||||
PlayerInteractionType.BattleMaster, PlayerInteractionType.Auctioneer, PlayerInteractionType.TalentMaster,
|
PlayerInteractionType.BattleMaster, PlayerInteractionType.Auctioneer, PlayerInteractionType.TalentMaster,
|
||||||
PlayerInteractionType.StableMaster, PlayerInteractionType.None, PlayerInteractionType.GuildBanker,
|
PlayerInteractionType.StableMaster, PlayerInteractionType.None, PlayerInteractionType.GuildBanker,
|
||||||
PlayerInteractionType.None, PlayerInteractionType.None, PlayerInteractionType.None,
|
PlayerInteractionType.None, PlayerInteractionType.None, PlayerInteractionType.None,
|
||||||
@@ -2902,7 +2902,8 @@ namespace Game.Entities
|
|||||||
PlayerInteractionType.LegendaryCrafting, PlayerInteractionType.NewPlayerGuide, PlayerInteractionType.LegendaryCrafting,
|
PlayerInteractionType.LegendaryCrafting, PlayerInteractionType.NewPlayerGuide, PlayerInteractionType.LegendaryCrafting,
|
||||||
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 interactionType = GossipOptionNpcToInteractionType[(int)gossipOptionNpc];
|
PlayerInteractionType interactionType = GossipOptionNpcToInteractionType[(int)gossipOptionNpc];
|
||||||
@@ -4313,9 +4314,9 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
|
|
||||||
ObjectGuid GetSpiritHealerGUID() { return _areaSpiritHealerGUID; }
|
ObjectGuid GetSpiritHealerGUID() { return _areaSpiritHealerGUID; }
|
||||||
|
|
||||||
public bool CanAcceptAreaSpiritHealFrom(Unit spiritHealer) { return spiritHealer.GetGUID() == _areaSpiritHealerGUID; }
|
public bool CanAcceptAreaSpiritHealFrom(Unit spiritHealer) { return spiritHealer.GetGUID() == _areaSpiritHealerGUID; }
|
||||||
|
|
||||||
public void SetAreaSpiritHealer(Creature creature)
|
public void SetAreaSpiritHealer(Creature creature)
|
||||||
{
|
{
|
||||||
if (creature == null)
|
if (creature == null)
|
||||||
@@ -4349,7 +4350,7 @@ namespace Game.Entities
|
|||||||
areaSpiritHealerTime.TimeLeft = (uint)timeLeft;
|
areaSpiritHealerTime.TimeLeft = (uint)timeLeft;
|
||||||
SendPacket(areaSpiritHealerTime);
|
SendPacket(areaSpiritHealerTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void KillPlayer()
|
public void KillPlayer()
|
||||||
{
|
{
|
||||||
if (IsFlying() && GetTransport() == null)
|
if (IsFlying() && GetTransport() == null)
|
||||||
@@ -5254,7 +5255,7 @@ namespace Game.Entities
|
|||||||
if (guildId != 0)
|
if (guildId != 0)
|
||||||
{
|
{
|
||||||
SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.GuildGUID), ObjectGuid.Create(HighGuid.Guild, guildId));
|
SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.GuildGUID), ObjectGuid.Create(HighGuid.Guild, guildId));
|
||||||
SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.GuildClubMemberID), GetGUID().GetCounter());
|
SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_playerData.GuildClubMemberID), GetGUID().GetCounter());
|
||||||
SetPlayerFlag(PlayerFlags.GuildLevelEnabled);
|
SetPlayerFlag(PlayerFlags.GuildLevelEnabled);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -5376,6 +5377,8 @@ namespace Game.Entities
|
|||||||
StartCriteria(CriteriaStartEvent.ReachLevel, level);
|
StartCriteria(CriteriaStartEvent.ReachLevel, level);
|
||||||
UpdateCriteria(CriteriaType.ReachLevel);
|
UpdateCriteria(CriteriaType.ReachLevel);
|
||||||
UpdateCriteria(CriteriaType.ActivelyReachLevel, level);
|
UpdateCriteria(CriteriaType.ActivelyReachLevel, level);
|
||||||
|
if (level > oldLevel)
|
||||||
|
UpdateCriteria(CriteriaType.GainLevels, level - oldLevel);
|
||||||
|
|
||||||
PushQuests();
|
PushQuests();
|
||||||
|
|
||||||
@@ -7691,10 +7694,10 @@ namespace Game.Entities
|
|||||||
public void RemoveAuraVision(PlayerFieldByte2Flags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.AuraVision), (byte)flags); }
|
public void RemoveAuraVision(PlayerFieldByte2Flags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.AuraVision), (byte)flags); }
|
||||||
|
|
||||||
public void SetTransportServerTime(int transportServerTime) { SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.TransportServerTime), transportServerTime); }
|
public void SetTransportServerTime(int transportServerTime) { SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.TransportServerTime), transportServerTime); }
|
||||||
|
|
||||||
public void SetRequiredMountCapabilityFlag(byte flag) { SetUpdateFieldFlagValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.RequiredMountCapabilityFlags), flag); }
|
public void SetRequiredMountCapabilityFlag(byte flag) { SetUpdateFieldFlagValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.RequiredMountCapabilityFlags), flag); }
|
||||||
public void ReplaceAllRequiredMountCapabilityFlags(byte flags) { SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.RequiredMountCapabilityFlags), flags); }
|
public void ReplaceAllRequiredMountCapabilityFlags(byte flags) { SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.RequiredMountCapabilityFlags), flags); }
|
||||||
|
|
||||||
public bool CanTameExoticPets() { return IsGameMaster() || HasAuraType(AuraType.AllowTamePetType); }
|
public bool CanTameExoticPets() { return IsGameMaster() || HasAuraType(AuraType.AllowTamePetType); }
|
||||||
|
|
||||||
void SendAttackSwingCantAttack() { SendPacket(new AttackSwingError(AttackSwingErr.CantAttack)); }
|
void SendAttackSwingCantAttack() { SendPacket(new AttackSwingError(AttackSwingErr.CantAttack)); }
|
||||||
@@ -7874,5 +7877,15 @@ namespace Game.Entities
|
|||||||
|
|
||||||
//Clears the Menu
|
//Clears the Menu
|
||||||
public void ClearGossipMenu() { PlayerTalkClass.ClearMenus(); }
|
public void ClearGossipMenu() { PlayerTalkClass.ClearMenus(); }
|
||||||
|
|
||||||
|
public void SetPersonalTabard(int style, int color, int borderStyle, int borderColor, int backgroundColor)
|
||||||
|
{
|
||||||
|
CustomTabardInfo personalTabard = m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.PersonalTabard);
|
||||||
|
SetUpdateFieldValue(personalTabard.ModifyValue(personalTabard.EmblemStyle), style);
|
||||||
|
SetUpdateFieldValue(personalTabard.ModifyValue(personalTabard.EmblemColor), color);
|
||||||
|
SetUpdateFieldValue(personalTabard.ModifyValue(personalTabard.BorderStyle), borderStyle);
|
||||||
|
SetUpdateFieldValue(personalTabard.ModifyValue(personalTabard.BorderColor), borderColor);
|
||||||
|
SetUpdateFieldValue(personalTabard.ModifyValue(personalTabard.BackgroundColor), backgroundColor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -566,7 +566,14 @@ namespace Game.Entities
|
|||||||
public class DeclinedName
|
public class DeclinedName
|
||||||
{
|
{
|
||||||
public StringArray name = new(SharedConst.MaxDeclinedNameCases);
|
public StringArray name = new(SharedConst.MaxDeclinedNameCases);
|
||||||
}
|
|
||||||
|
public DeclinedName() { }
|
||||||
|
public DeclinedName(DeclinedNames uf)
|
||||||
|
{
|
||||||
|
for (var i = 0; i < SharedConst.MaxDeclinedNameCases; ++i)
|
||||||
|
name[i] = uf.Name[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct PositionUpdateInfo
|
struct PositionUpdateInfo
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1495,27 +1495,11 @@ namespace Game.Entities
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uint modelid = 0;
|
|
||||||
SpellShapeshiftFormRecord formEntry = CliDB.SpellShapeshiftFormStorage.LookupByKey(form);
|
SpellShapeshiftFormRecord formEntry = CliDB.SpellShapeshiftFormStorage.LookupByKey(form);
|
||||||
if (formEntry != null && formEntry.CreatureDisplayID[0] != 0)
|
if (formEntry != null && formEntry.CreatureDisplayID != 0)
|
||||||
{
|
return formEntry.CreatureDisplayID;
|
||||||
// Take the alliance modelid as default
|
|
||||||
if (GetTypeId() != TypeId.Player)
|
|
||||||
return formEntry.CreatureDisplayID[0];
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (Player.TeamForRace(GetRace()) == Team.Alliance)
|
|
||||||
modelid = formEntry.CreatureDisplayID[0];
|
|
||||||
else
|
|
||||||
modelid = formEntry.CreatureDisplayID[1];
|
|
||||||
|
|
||||||
// If the player is horde but there are no values for the horde modelid - take the alliance modelid
|
return 0;
|
||||||
if (modelid == 0 && Player.TeamForRace(GetRace()) == Team.Horde)
|
|
||||||
modelid = formEntry.CreatureDisplayID[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return modelid;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Totem ToTotem() { return IsTotem() ? (this as Totem) : null; }
|
public Totem ToTotem() { return IsTotem() ? (this as Totem) : null; }
|
||||||
|
|||||||
@@ -3539,9 +3539,14 @@ namespace Game.Guilds
|
|||||||
|
|
||||||
public bool ValidateEmblemColors()
|
public bool ValidateEmblemColors()
|
||||||
{
|
{
|
||||||
return CliDB.GuildColorBackgroundStorage.ContainsKey(m_backgroundColor) &&
|
return ValidateEmblemColors(m_style, m_color, m_borderStyle, m_borderColor, m_backgroundColor);
|
||||||
CliDB.GuildColorBorderStorage.ContainsKey(m_borderColor) &&
|
}
|
||||||
CliDB.GuildColorEmblemStorage.ContainsKey(m_color);
|
|
||||||
|
public static bool ValidateEmblemColors(uint style, uint color, uint borderStyle, uint borderColor, uint backgroundColor)
|
||||||
|
{
|
||||||
|
return CliDB.GuildColorBackgroundStorage.ContainsKey(backgroundColor) &&
|
||||||
|
CliDB.GuildColorBorderStorage.ContainsKey(borderColor) &&
|
||||||
|
CliDB.GuildColorEmblemStorage.ContainsKey(color);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool LoadFromDB(SQLFields field)
|
public bool LoadFromDB(SQLFields field)
|
||||||
|
|||||||
@@ -607,8 +607,17 @@ namespace Game
|
|||||||
{
|
{
|
||||||
// This packet is completely irrelevant, it triggers PVP_TYPES_ENABLED lua event but that is not handled in interface code as of 6.1.2
|
// This packet is completely irrelevant, it triggers PVP_TYPES_ENABLED lua event but that is not handled in interface code as of 6.1.2
|
||||||
PVPOptionsEnabled pvpOptionsEnabled = new();
|
PVPOptionsEnabled pvpOptionsEnabled = new();
|
||||||
|
pvpOptionsEnabled.RatedBattlegrounds = false;
|
||||||
pvpOptionsEnabled.PugBattlegrounds = true;
|
pvpOptionsEnabled.PugBattlegrounds = true;
|
||||||
SendPacket(new PVPOptionsEnabled());
|
pvpOptionsEnabled.WargameBattlegrounds = false;
|
||||||
|
pvpOptionsEnabled.WargameArenas = false;
|
||||||
|
pvpOptionsEnabled.RatedArenas = false;
|
||||||
|
pvpOptionsEnabled.ArenaSkirmish = false;
|
||||||
|
pvpOptionsEnabled.SoloShuffle = false;
|
||||||
|
pvpOptionsEnabled.RatedSoloShuffle = false;
|
||||||
|
pvpOptionsEnabled.BattlegroundBlitz = false;
|
||||||
|
pvpOptionsEnabled.RatedBattlegroundBlitz = false;
|
||||||
|
SendPacket(pvpOptionsEnabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
[WorldPacketHandler(ClientOpcodes.RequestPvpRewards, Processing = PacketProcessing.Inplace)]
|
[WorldPacketHandler(ClientOpcodes.RequestPvpRewards, Processing = PacketProcessing.Inplace)]
|
||||||
|
|||||||
@@ -26,8 +26,8 @@ namespace Game
|
|||||||
CalendarSendCalendar packet = new();
|
CalendarSendCalendar packet = new();
|
||||||
packet.ServerTime = currTime;
|
packet.ServerTime = currTime;
|
||||||
|
|
||||||
var invites = Global.CalendarMgr.GetPlayerInvites(guid);
|
var playerInvites = Global.CalendarMgr.GetPlayerInvites(guid);
|
||||||
foreach (var invite in invites)
|
foreach (var invite in playerInvites)
|
||||||
{
|
{
|
||||||
CalendarSendCalendarInviteInfo inviteInfo = new();
|
CalendarSendCalendarInviteInfo inviteInfo = new();
|
||||||
inviteInfo.EventID = invite.EventId;
|
inviteInfo.EventID = invite.EventId;
|
||||||
@@ -45,7 +45,7 @@ namespace Game
|
|||||||
var playerEvents = Global.CalendarMgr.GetPlayerEvents(guid);
|
var playerEvents = Global.CalendarMgr.GetPlayerEvents(guid);
|
||||||
foreach (var calendarEvent in playerEvents)
|
foreach (var calendarEvent in playerEvents)
|
||||||
{
|
{
|
||||||
CalendarSendCalendarEventInfo eventInfo;
|
CalendarSendCalendarEventInfo eventInfo = new();
|
||||||
eventInfo.EventID = calendarEvent.EventId;
|
eventInfo.EventID = calendarEvent.EventId;
|
||||||
eventInfo.Date = calendarEvent.Date;
|
eventInfo.Date = calendarEvent.Date;
|
||||||
eventInfo.EventClubID = calendarEvent.GuildId;
|
eventInfo.EventClubID = calendarEvent.GuildId;
|
||||||
@@ -61,7 +61,6 @@ namespace Game
|
|||||||
foreach (InstanceLock instanceLock in Global.InstanceLockMgr.GetInstanceLocksForPlayer(_player.GetGUID()))
|
foreach (InstanceLock instanceLock in Global.InstanceLockMgr.GetInstanceLocksForPlayer(_player.GetGUID()))
|
||||||
{
|
{
|
||||||
CalendarSendCalendarRaidLockoutInfo lockoutInfo = new();
|
CalendarSendCalendarRaidLockoutInfo lockoutInfo = new();
|
||||||
|
|
||||||
lockoutInfo.MapID = (int)instanceLock.GetMapId();
|
lockoutInfo.MapID = (int)instanceLock.GetMapId();
|
||||||
lockoutInfo.DifficultyID = (uint)instanceLock.GetDifficultyId();
|
lockoutInfo.DifficultyID = (uint)instanceLock.GetDifficultyId();
|
||||||
lockoutInfo.ExpireTime = (int)Math.Max((instanceLock.GetEffectiveExpiryTime() - GameTime.GetSystemTime()).TotalSeconds, 0);
|
lockoutInfo.ExpireTime = (int)Math.Max((instanceLock.GetEffectiveExpiryTime() - GameTime.GetSystemTime()).TotalSeconds, 0);
|
||||||
|
|||||||
@@ -111,8 +111,6 @@ namespace Game
|
|||||||
while (result.NextRow() && charResult.Characters.Count < 200);
|
while (result.NextRow() && charResult.Characters.Count < 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
charResult.IsAlliedRacesCreationAllowed = CanAccessAlliedRaces();
|
|
||||||
|
|
||||||
foreach (var requirement in Global.ObjectMgr.GetRaceUnlockRequirements())
|
foreach (var requirement in Global.ObjectMgr.GetRaceUnlockRequirements())
|
||||||
{
|
{
|
||||||
EnumCharactersResult.RaceUnlock raceUnlock = new();
|
EnumCharactersResult.RaceUnlock raceUnlock = new();
|
||||||
@@ -811,9 +809,8 @@ namespace Game
|
|||||||
|
|
||||||
SendFeatureSystemStatus();
|
SendFeatureSystemStatus();
|
||||||
|
|
||||||
MOTD motd = new();
|
foreach (var motdLine in Global.WorldMgr.GetMotd())
|
||||||
motd.Text = Global.WorldMgr.GetMotd();
|
Global.WorldMgr.SendServerMessage(ServerMessageType.String, motdLine, pCurrChar);
|
||||||
SendPacket(motd);
|
|
||||||
|
|
||||||
SendSetTimeZoneInformation();
|
SendSetTimeZoneInformation();
|
||||||
|
|
||||||
@@ -2544,6 +2541,29 @@ namespace Game
|
|||||||
GetPlayer().SetStandState(packet.StandState);
|
GetPlayer().SetStandState(packet.StandState);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[WorldPacketHandler(ClientOpcodes.SavePersonalEmblem)]
|
||||||
|
void HandleSavePersonalEmblem(SavePersonalEmblem savePersonalEmblem)
|
||||||
|
{
|
||||||
|
if (_player.GetNPCIfCanInteractWith(savePersonalEmblem.Vendor, NPCFlags.None, NPCFlags2.PersonalTabardDesigner) == null)
|
||||||
|
{
|
||||||
|
SendPacket(new PlayerSavePersonalEmblem(GuildEmblemError.InvalidVendor));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Guild.EmblemInfo.ValidateEmblemColors((uint)savePersonalEmblem.PersonalTabard.EmblemStyle, (uint)savePersonalEmblem.PersonalTabard.EmblemColor,
|
||||||
|
(uint)savePersonalEmblem.PersonalTabard.BorderStyle, (uint)savePersonalEmblem.PersonalTabard.BorderColor, (uint)savePersonalEmblem.PersonalTabard.BackgroundColor))
|
||||||
|
{
|
||||||
|
SendPacket(new PlayerSavePersonalEmblem(GuildEmblemError.InvalidTabardColors));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_player.SetPersonalTabard(savePersonalEmblem.PersonalTabard.EmblemStyle, savePersonalEmblem.PersonalTabard.EmblemColor,
|
||||||
|
savePersonalEmblem.PersonalTabard.BorderStyle, savePersonalEmblem.PersonalTabard.BorderColor,
|
||||||
|
savePersonalEmblem.PersonalTabard.BackgroundColor);
|
||||||
|
|
||||||
|
SendPacket(new PlayerSavePersonalEmblem(GuildEmblemError.Success));
|
||||||
|
}
|
||||||
|
|
||||||
void SendCharCreate(ResponseCodes result, ObjectGuid guid = default)
|
void SendCharCreate(ResponseCodes result, ObjectGuid guid = default)
|
||||||
{
|
{
|
||||||
CreateChar response = new();
|
CreateChar response = new();
|
||||||
|
|||||||
@@ -17,27 +17,44 @@ namespace Game
|
|||||||
public partial class WorldSession
|
public partial class WorldSession
|
||||||
{
|
{
|
||||||
[WorldPacketHandler(ClientOpcodes.TabardVendorActivate, Processing = PacketProcessing.Inplace)]
|
[WorldPacketHandler(ClientOpcodes.TabardVendorActivate, Processing = PacketProcessing.Inplace)]
|
||||||
void HandleTabardVendorActivate(Hello packet)
|
void HandleTabardVendorActivate(TabardVendorActivate tabardVendorActivate)
|
||||||
{
|
{
|
||||||
Creature unit = GetPlayer().GetNPCIfCanInteractWith(packet.Unit, NPCFlags.TabardDesigner, NPCFlags2.None);
|
Creature unit = GetPlayer().GetNPCIfCanInteractWith(tabardVendorActivate.Vendor, NPCFlags.TabardDesigner, NPCFlags2.None);
|
||||||
if (unit == null)
|
if (unit == null)
|
||||||
{
|
{
|
||||||
Log.outDebug(LogFilter.Network, "WORLD: HandleTabardVendorActivateOpcode - {0} not found or you can not interact with him.", packet.Unit.ToString());
|
Log.outDebug(LogFilter.Network, $"WORLD: HandleTabardVendorActivateOpcode - {tabardVendorActivate.Vendor} not found or you can not interact with him.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TabardVendorType type = (TabardVendorType)tabardVendorActivate.Type;
|
||||||
|
if (type != TabardVendorType.Guild && type != TabardVendorType.Personal)
|
||||||
|
return;
|
||||||
|
|
||||||
// remove fake death
|
// remove fake death
|
||||||
if (GetPlayer().HasUnitState(UnitState.Died))
|
if (GetPlayer().HasUnitState(UnitState.Died))
|
||||||
GetPlayer().RemoveAurasByType(AuraType.FeignDeath);
|
GetPlayer().RemoveAurasByType(AuraType.FeignDeath);
|
||||||
|
|
||||||
SendTabardVendorActivate(packet.Unit);
|
SendTabardVendorActivate(tabardVendorActivate.Vendor, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendTabardVendorActivate(ObjectGuid guid)
|
public void SendTabardVendorActivate(ObjectGuid guid, TabardVendorType type)
|
||||||
{
|
{
|
||||||
NPCInteractionOpenResult npcInteraction = new();
|
NPCInteractionOpenResult npcInteraction = new();
|
||||||
npcInteraction.Npc = guid;
|
npcInteraction.Npc = guid;
|
||||||
npcInteraction.InteractionType = PlayerInteractionType.TabardVendor;
|
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case TabardVendorType.Guild:
|
||||||
|
npcInteraction.InteractionType = PlayerInteractionType.GuildTabardVendor;
|
||||||
|
break;
|
||||||
|
case TabardVendorType.Personal:
|
||||||
|
npcInteraction.InteractionType = PlayerInteractionType.PersonalTabardVendor;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Log.outFatal(LogFilter.Server, $"Unsupported tabard vendor type {type}");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
npcInteraction.Success = true;
|
npcInteraction.Success = true;
|
||||||
SendPacket(npcInteraction);
|
SendPacket(npcInteraction);
|
||||||
}
|
}
|
||||||
@@ -345,7 +362,7 @@ namespace Game
|
|||||||
|
|
||||||
_player.SetPetSlot(setPetSlot.PetNumber, (PetSaveMode)setPetSlot.DestSlot);
|
_player.SetPetSlot(setPetSlot.PetNumber, (PetSaveMode)setPetSlot.DestSlot);
|
||||||
}
|
}
|
||||||
|
|
||||||
[WorldPacketHandler(ClientOpcodes.RepairItem, Processing = PacketProcessing.Inplace)]
|
[WorldPacketHandler(ClientOpcodes.RepairItem, Processing = PacketProcessing.Inplace)]
|
||||||
void HandleRepairItem(RepairItem packet)
|
void HandleRepairItem(RepairItem packet)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -310,15 +310,23 @@ namespace Game.Networking.Packets
|
|||||||
_worldPacket.WriteBit(WargameArenas);
|
_worldPacket.WriteBit(WargameArenas);
|
||||||
_worldPacket.WriteBit(RatedArenas);
|
_worldPacket.WriteBit(RatedArenas);
|
||||||
_worldPacket.WriteBit(ArenaSkirmish);
|
_worldPacket.WriteBit(ArenaSkirmish);
|
||||||
|
_worldPacket.WriteBit(SoloShuffle);
|
||||||
|
_worldPacket.WriteBit(RatedSoloShuffle);
|
||||||
|
_worldPacket.WriteBit(BattlegroundBlitz);
|
||||||
|
_worldPacket.WriteBit(RatedBattlegroundBlitz);
|
||||||
_worldPacket.FlushBits();
|
_worldPacket.FlushBits();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool RatedBattlegrounds;
|
||||||
|
public bool PugBattlegrounds;
|
||||||
|
public bool WargameBattlegrounds;
|
||||||
public bool WargameArenas;
|
public bool WargameArenas;
|
||||||
public bool RatedArenas;
|
public bool RatedArenas;
|
||||||
public bool WargameBattlegrounds;
|
|
||||||
public bool ArenaSkirmish;
|
public bool ArenaSkirmish;
|
||||||
public bool PugBattlegrounds;
|
public bool SoloShuffle;
|
||||||
public bool RatedBattlegrounds;
|
public bool RatedSoloShuffle;
|
||||||
|
public bool BattlegroundBlitz;
|
||||||
|
public bool RatedBattlegroundBlitz; // solo rbg
|
||||||
}
|
}
|
||||||
|
|
||||||
class RequestBattlefieldStatus : ClientPacket
|
class RequestBattlefieldStatus : ClientPacket
|
||||||
@@ -510,7 +518,7 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
PVPMatchState State;
|
PVPMatchState State;
|
||||||
}
|
}
|
||||||
|
|
||||||
class PVPMatchComplete : ServerPacket
|
class PVPMatchComplete : ServerPacket
|
||||||
{
|
{
|
||||||
public PVPMatchComplete() : base(ServerOpcodes.PvpMatchComplete, ConnectionType.Instance) { }
|
public PVPMatchComplete() : base(ServerOpcodes.PvpMatchComplete, ConnectionType.Instance) { }
|
||||||
|
|||||||
@@ -149,12 +149,12 @@ namespace Game.Networking.Packets
|
|||||||
_worldPacket.WriteInt32(Events.Count);
|
_worldPacket.WriteInt32(Events.Count);
|
||||||
_worldPacket.WriteInt32(RaidLockouts.Count);
|
_worldPacket.WriteInt32(RaidLockouts.Count);
|
||||||
|
|
||||||
foreach (var invite in Invites)
|
|
||||||
invite.Write(_worldPacket);
|
|
||||||
|
|
||||||
foreach (var lockout in RaidLockouts)
|
foreach (var lockout in RaidLockouts)
|
||||||
lockout.Write(_worldPacket);
|
lockout.Write(_worldPacket);
|
||||||
|
|
||||||
|
foreach (var invite in Invites)
|
||||||
|
invite.Write(_worldPacket);
|
||||||
|
|
||||||
foreach (var Event in Events)
|
foreach (var Event in Events)
|
||||||
Event.Write(_worldPacket);
|
Event.Write(_worldPacket);
|
||||||
}
|
}
|
||||||
@@ -822,6 +822,8 @@ namespace Game.Networking.Packets
|
|||||||
data.WriteUInt8((byte)Moderator);
|
data.WriteUInt8((byte)Moderator);
|
||||||
data.WriteUInt8(InviteType);
|
data.WriteUInt8(InviteType);
|
||||||
data.WritePackedGuid(InviterGuid);
|
data.WritePackedGuid(InviterGuid);
|
||||||
|
data.WriteBit(IgnoreFriendAndGuildRestriction);
|
||||||
|
data.FlushBits();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ulong EventID;
|
public ulong EventID;
|
||||||
@@ -830,6 +832,7 @@ namespace Game.Networking.Packets
|
|||||||
public CalendarInviteStatus Status;
|
public CalendarInviteStatus Status;
|
||||||
public CalendarModerationRank Moderator;
|
public CalendarModerationRank Moderator;
|
||||||
public byte InviteType;
|
public byte InviteType;
|
||||||
|
public bool IgnoreFriendAndGuildRestriction;
|
||||||
}
|
}
|
||||||
struct CalendarSendCalendarRaidLockoutInfo
|
struct CalendarSendCalendarRaidLockoutInfo
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ namespace Game.Networking.Packets
|
|||||||
_worldPacket.WriteBit(IsNewPlayer);
|
_worldPacket.WriteBit(IsNewPlayer);
|
||||||
_worldPacket.WriteBit(IsTrialAccountRestricted);
|
_worldPacket.WriteBit(IsTrialAccountRestricted);
|
||||||
_worldPacket.WriteBit(DisabledClassesMask.HasValue);
|
_worldPacket.WriteBit(DisabledClassesMask.HasValue);
|
||||||
_worldPacket.WriteBit(IsAlliedRacesCreationAllowed);
|
|
||||||
_worldPacket.WriteInt32(Characters.Count);
|
_worldPacket.WriteInt32(Characters.Count);
|
||||||
_worldPacket.WriteInt32(MaxCharacterLevel);
|
_worldPacket.WriteInt32(MaxCharacterLevel);
|
||||||
_worldPacket.WriteInt32(RaceUnlockData.Count);
|
_worldPacket.WriteInt32(RaceUnlockData.Count);
|
||||||
@@ -62,7 +61,6 @@ namespace Game.Networking.Packets
|
|||||||
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 IsAlliedRacesCreationAllowed;
|
|
||||||
|
|
||||||
public int MaxCharacterLevel = 1;
|
public int MaxCharacterLevel = 1;
|
||||||
public uint? DisabledClassesMask = new();
|
public uint? DisabledClassesMask = new();
|
||||||
@@ -105,7 +103,7 @@ namespace Game.Networking.Packets
|
|||||||
if (fields.Read<uint>(18) != 0)
|
if (fields.Read<uint>(18) != 0)
|
||||||
Flags |= CharacterFlags.LockedByBilling;
|
Flags |= CharacterFlags.LockedByBilling;
|
||||||
|
|
||||||
if (WorldConfig.GetBoolValue(WorldCfg.DeclinedNamesUsed) && !string.IsNullOrEmpty(fields.Read<string>(23)))
|
if (WorldConfig.GetBoolValue(WorldCfg.DeclinedNamesUsed) && !string.IsNullOrEmpty(fields.Read<string>(28)))
|
||||||
Flags |= CharacterFlags.Declined;
|
Flags |= CharacterFlags.Declined;
|
||||||
|
|
||||||
if (atLoginFlags.HasAnyFlag(AtLoginFlags.Customize))
|
if (atLoginFlags.HasAnyFlag(AtLoginFlags.Customize))
|
||||||
@@ -145,6 +143,12 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
LastLoginVersion = fields.Read<int>(22);
|
LastLoginVersion = fields.Read<int>(22);
|
||||||
|
|
||||||
|
PersonalTabard.EmblemStyle = fields.Read<int>(23);
|
||||||
|
PersonalTabard.EmblemColor = fields.Read<int>(24);
|
||||||
|
PersonalTabard.BorderStyle = fields.Read<int>(25);
|
||||||
|
PersonalTabard.BorderColor = fields.Read<int>(26);
|
||||||
|
PersonalTabard.BackgroundColor = fields.Read<int>(27);
|
||||||
|
|
||||||
int equipmentFieldsPerSlot = 5;
|
int equipmentFieldsPerSlot = 5;
|
||||||
|
|
||||||
for (var slot = 0; slot < VisualItems.Length && (slot + 1) * equipmentFieldsPerSlot <= equipment.Length; ++slot)
|
for (var slot = 0; slot < VisualItems.Length && (slot + 1) * equipmentFieldsPerSlot <= equipment.Length; ++slot)
|
||||||
@@ -194,6 +198,7 @@ namespace Game.Networking.Packets
|
|||||||
data.WriteInt32(MailSenders.Count);
|
data.WriteInt32(MailSenders.Count);
|
||||||
data.WriteInt32(MailSenderTypes.Count);
|
data.WriteInt32(MailSenderTypes.Count);
|
||||||
data.WriteUInt32(OverrideSelectScreenFileDataID);
|
data.WriteUInt32(OverrideSelectScreenFileDataID);
|
||||||
|
PersonalTabard.Write(data);
|
||||||
|
|
||||||
foreach (ChrCustomizationChoice customization in Customizations)
|
foreach (ChrCustomizationChoice customization in Customizations)
|
||||||
{
|
{
|
||||||
@@ -208,6 +213,8 @@ namespace Game.Networking.Packets
|
|||||||
data.WriteBit(FirstLogin);
|
data.WriteBit(FirstLogin);
|
||||||
data.WriteBit(BoostInProgress);
|
data.WriteBit(BoostInProgress);
|
||||||
data.WriteBits(unkWod61x, 5);
|
data.WriteBits(unkWod61x, 5);
|
||||||
|
data.WriteBit(RpeResetAvailable);
|
||||||
|
data.WriteBit(RpeResetQuestClearAvailable);
|
||||||
|
|
||||||
foreach (string str in MailSenders)
|
foreach (string str in MailSenders)
|
||||||
data.WriteBits(str.GetByteCount() + 1, 6);
|
data.WriteBits(str.GetByteCount() + 1, 6);
|
||||||
@@ -228,7 +235,7 @@ namespace Game.Networking.Packets
|
|||||||
public byte RaceId;
|
public byte RaceId;
|
||||||
public Class ClassId;
|
public Class ClassId;
|
||||||
public byte SexId;
|
public byte SexId;
|
||||||
public Array<ChrCustomizationChoice> Customizations = new(125);
|
public Array<ChrCustomizationChoice> Customizations = new(250);
|
||||||
public byte ExperienceLevel;
|
public byte ExperienceLevel;
|
||||||
public uint ZoneId;
|
public uint ZoneId;
|
||||||
public uint MapId;
|
public uint MapId;
|
||||||
@@ -253,6 +260,9 @@ namespace Game.Networking.Packets
|
|||||||
public VisualItemInfo[] VisualItems = new VisualItemInfo[InventorySlots.ReagentBagEnd];
|
public VisualItemInfo[] VisualItems = new VisualItemInfo[InventorySlots.ReagentBagEnd];
|
||||||
public List<string> MailSenders = new();
|
public List<string> MailSenders = new();
|
||||||
public List<uint> MailSenderTypes = new();
|
public List<uint> MailSenderTypes = new();
|
||||||
|
public bool RpeResetAvailable = false;
|
||||||
|
public bool RpeResetQuestClearAvailable = false;
|
||||||
|
public CustomTabardInfo PersonalTabard = new();
|
||||||
|
|
||||||
public struct VisualItemInfo
|
public struct VisualItemInfo
|
||||||
{
|
{
|
||||||
@@ -288,6 +298,7 @@ namespace Game.Networking.Packets
|
|||||||
data.WriteBit(HasExpansion);
|
data.WriteBit(HasExpansion);
|
||||||
data.WriteBit(HasAchievement);
|
data.WriteBit(HasAchievement);
|
||||||
data.WriteBit(HasHeritageArmor);
|
data.WriteBit(HasHeritageArmor);
|
||||||
|
data.WriteBit(IsLocked);
|
||||||
data.FlushBits();
|
data.FlushBits();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -295,6 +306,7 @@ namespace Game.Networking.Packets
|
|||||||
public bool HasExpansion;
|
public bool HasExpansion;
|
||||||
public bool HasAchievement;
|
public bool HasAchievement;
|
||||||
public bool HasHeritageArmor;
|
public bool HasHeritageArmor;
|
||||||
|
public bool IsLocked;
|
||||||
}
|
}
|
||||||
|
|
||||||
public struct UnlockedConditionalAppearance
|
public struct UnlockedConditionalAppearance
|
||||||
@@ -329,7 +341,7 @@ namespace Game.Networking.Packets
|
|||||||
}
|
}
|
||||||
|
|
||||||
class CheckCharacterNameAvailability : ClientPacket
|
class CheckCharacterNameAvailability : ClientPacket
|
||||||
{
|
{
|
||||||
public uint SequenceIndex;
|
public uint SequenceIndex;
|
||||||
public string Name;
|
public string Name;
|
||||||
|
|
||||||
@@ -359,7 +371,7 @@ namespace Game.Networking.Packets
|
|||||||
_worldPacket.WriteUInt32((uint)Result);
|
_worldPacket.WriteUInt32((uint)Result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class CreateCharacter : ClientPacket
|
public class CreateCharacter : ClientPacket
|
||||||
{
|
{
|
||||||
public CreateCharacter(WorldPacket packet) : base(packet) { }
|
public CreateCharacter(WorldPacket packet) : base(packet) { }
|
||||||
@@ -570,7 +582,7 @@ namespace Game.Networking.Packets
|
|||||||
public string Name;
|
public string Name;
|
||||||
public byte SexID;
|
public byte SexID;
|
||||||
public byte RaceID;
|
public byte RaceID;
|
||||||
public Array<ChrCustomizationChoice> Customizations = new(125);
|
public Array<ChrCustomizationChoice> Customizations = new(250);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -883,7 +895,7 @@ namespace Game.Networking.Packets
|
|||||||
}
|
}
|
||||||
|
|
||||||
public byte NewSex;
|
public byte NewSex;
|
||||||
public Array<ChrCustomizationChoice> Customizations = new(125);
|
public Array<ChrCustomizationChoice> Customizations = new(250);
|
||||||
public int CustomizedRace;
|
public int CustomizedRace;
|
||||||
public int CustomizedChrModelID;
|
public int CustomizedChrModelID;
|
||||||
}
|
}
|
||||||
@@ -952,7 +964,7 @@ namespace Game.Networking.Packets
|
|||||||
FactionIndex = _worldPacket.ReadUInt8();
|
FactionIndex = _worldPacket.ReadUInt8();
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte FactionIndex;
|
public ushort FactionIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
class SetFactionNotAtWar : ClientPacket
|
class SetFactionNotAtWar : ClientPacket
|
||||||
@@ -964,7 +976,7 @@ namespace Game.Networking.Packets
|
|||||||
FactionIndex = _worldPacket.ReadUInt8();
|
FactionIndex = _worldPacket.ReadUInt8();
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte FactionIndex;
|
public ushort FactionIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
class SetFactionInactive : ClientPacket
|
class SetFactionInactive : ClientPacket
|
||||||
@@ -1089,6 +1101,35 @@ namespace Game.Networking.Packets
|
|||||||
public DeclinedNameResult ResultCode;
|
public DeclinedNameResult ResultCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class SavePersonalEmblem : ClientPacket
|
||||||
|
{
|
||||||
|
public ObjectGuid Vendor;
|
||||||
|
public CustomTabardInfo PersonalTabard = new();
|
||||||
|
|
||||||
|
public SavePersonalEmblem(WorldPacket packet) : base(packet) { }
|
||||||
|
|
||||||
|
public override void Read()
|
||||||
|
{
|
||||||
|
Vendor = _worldPacket.ReadPackedGuid();
|
||||||
|
PersonalTabard.Read(_worldPacket);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class PlayerSavePersonalEmblem : ServerPacket
|
||||||
|
{
|
||||||
|
public GuildEmblemError Error;
|
||||||
|
|
||||||
|
public PlayerSavePersonalEmblem(GuildEmblemError error) : base(ServerOpcodes.PlayerSavePersonalEmblem)
|
||||||
|
{
|
||||||
|
Error = error;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Write()
|
||||||
|
{
|
||||||
|
_worldPacket.WriteInt32((int)Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//Structs
|
//Structs
|
||||||
public class CharacterCreateInfo
|
public class CharacterCreateInfo
|
||||||
{
|
{
|
||||||
@@ -1096,7 +1137,7 @@ namespace Game.Networking.Packets
|
|||||||
public Race RaceId = Race.None;
|
public Race RaceId = Race.None;
|
||||||
public Class ClassId = Class.None;
|
public Class ClassId = Class.None;
|
||||||
public Gender Sex = Gender.None;
|
public Gender Sex = Gender.None;
|
||||||
public Array<ChrCustomizationChoice> Customizations = new(125);
|
public Array<ChrCustomizationChoice> Customizations = new(250);
|
||||||
public uint? TemplateSet;
|
public uint? TemplateSet;
|
||||||
public bool IsTrialBoost;
|
public bool IsTrialBoost;
|
||||||
public bool UseNPE;
|
public bool UseNPE;
|
||||||
@@ -1117,7 +1158,7 @@ namespace Game.Networking.Packets
|
|||||||
public ObjectGuid CharGUID;
|
public ObjectGuid CharGUID;
|
||||||
public Gender SexID = Gender.None;
|
public Gender SexID = Gender.None;
|
||||||
public string CharName;
|
public string CharName;
|
||||||
public Array<ChrCustomizationChoice> Customizations = new(125);
|
public Array<ChrCustomizationChoice> Customizations = new(250);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class CharRaceOrFactionChangeInfo
|
public class CharRaceOrFactionChangeInfo
|
||||||
@@ -1128,15 +1169,42 @@ namespace Game.Networking.Packets
|
|||||||
public ObjectGuid Guid;
|
public ObjectGuid Guid;
|
||||||
public bool FactionChange;
|
public bool FactionChange;
|
||||||
public string Name;
|
public string Name;
|
||||||
public Array<ChrCustomizationChoice> Customizations = new(125);
|
public Array<ChrCustomizationChoice> Customizations = new(250);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class CharacterUndeleteInfo
|
public class CharacterUndeleteInfo
|
||||||
{ // User specified variables
|
{ // User specified variables
|
||||||
public ObjectGuid CharacterGuid; // Guid of the character to restore
|
public ObjectGuid CharacterGuid; // Guid of the character to restore
|
||||||
public int ClientToken = 0; // @todo: research
|
public int ClientToken; // @todo: research
|
||||||
|
|
||||||
// Server side data
|
// Server side data
|
||||||
public string Name;
|
public string Name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class CustomTabardInfo
|
||||||
|
{
|
||||||
|
public int EmblemStyle = -1;
|
||||||
|
public int EmblemColor = -1;
|
||||||
|
public int BorderStyle = -1;
|
||||||
|
public int BorderColor = -1;
|
||||||
|
public int BackgroundColor = -1;
|
||||||
|
|
||||||
|
public void Write(WorldPacket data)
|
||||||
|
{
|
||||||
|
data.WriteInt32(EmblemStyle);
|
||||||
|
data.WriteInt32(EmblemColor);
|
||||||
|
data.WriteInt32(BorderStyle);
|
||||||
|
data.WriteInt32(BorderColor);
|
||||||
|
data.WriteInt32(BackgroundColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Read(WorldPacket data)
|
||||||
|
{
|
||||||
|
EmblemStyle = data.ReadInt32();
|
||||||
|
EmblemColor = data.ReadInt32();
|
||||||
|
BorderStyle = data.ReadInt32();
|
||||||
|
BorderColor = data.ReadInt32();
|
||||||
|
BackgroundColor = data.ReadInt32();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -108,6 +108,7 @@ namespace Game.Networking.Packets
|
|||||||
_worldPacket.WriteBit(FirstCraftOperationID.HasValue);
|
_worldPacket.WriteBit(FirstCraftOperationID.HasValue);
|
||||||
_worldPacket.WriteBit(NextRechargeTime.HasValue);
|
_worldPacket.WriteBit(NextRechargeTime.HasValue);
|
||||||
_worldPacket.WriteBit(RechargeCycleStartTime.HasValue);
|
_worldPacket.WriteBit(RechargeCycleStartTime.HasValue);
|
||||||
|
_worldPacket.WriteBit(OverflownCurrencyID.HasValue);
|
||||||
_worldPacket.FlushBits();
|
_worldPacket.FlushBits();
|
||||||
|
|
||||||
if (WeeklyQuantity.HasValue)
|
if (WeeklyQuantity.HasValue)
|
||||||
@@ -139,6 +140,9 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
if (RechargeCycleStartTime.HasValue)
|
if (RechargeCycleStartTime.HasValue)
|
||||||
_worldPacket.WriteInt64(RechargeCycleStartTime.Value);
|
_worldPacket.WriteInt64(RechargeCycleStartTime.Value);
|
||||||
|
|
||||||
|
if (OverflownCurrencyID.HasValue)
|
||||||
|
_worldPacket.WriteInt32(OverflownCurrencyID.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public uint Type;
|
public uint Type;
|
||||||
@@ -155,6 +159,7 @@ namespace Game.Networking.Packets
|
|||||||
public uint? FirstCraftOperationID;
|
public uint? FirstCraftOperationID;
|
||||||
public long? NextRechargeTime;
|
public long? NextRechargeTime;
|
||||||
public long? RechargeCycleStartTime;
|
public long? RechargeCycleStartTime;
|
||||||
|
public int? OverflownCurrencyID; // what currency was originally changed but couldn't be incremented because of a cap
|
||||||
public bool SuppressChatLog;
|
public bool SuppressChatLog;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1442,17 +1447,17 @@ namespace Game.Networking.Packets
|
|||||||
{
|
{
|
||||||
public PhaseShiftDataPhase(uint phaseFlags, uint id)
|
public PhaseShiftDataPhase(uint phaseFlags, uint id)
|
||||||
{
|
{
|
||||||
PhaseFlags = (ushort)phaseFlags;
|
PhaseFlags = phaseFlags;
|
||||||
Id = (ushort)id;
|
Id = (ushort)id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Write(WorldPacket data)
|
public void Write(WorldPacket data)
|
||||||
{
|
{
|
||||||
data.WriteUInt16(PhaseFlags);
|
data.WriteUInt32(PhaseFlags);
|
||||||
data.WriteUInt16(Id);
|
data.WriteUInt16(Id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ushort PhaseFlags;
|
public uint PhaseFlags;
|
||||||
public ushort Id;
|
public ushort Id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1497,7 +1497,6 @@ namespace Game.Networking.Packets
|
|||||||
public void Write(WorldPacket data)
|
public void Write(WorldPacket data)
|
||||||
{
|
{
|
||||||
data.WriteUInt32(Id);
|
data.WriteUInt32(Id);
|
||||||
data.WriteVector3(Destination);
|
|
||||||
data.WriteBit(CrzTeleport);
|
data.WriteBit(CrzTeleport);
|
||||||
data.WriteBits(StopDistanceTolerance, 3);
|
data.WriteBits(StopDistanceTolerance, 3);
|
||||||
|
|
||||||
@@ -1505,7 +1504,6 @@ namespace Game.Networking.Packets
|
|||||||
}
|
}
|
||||||
|
|
||||||
public uint Id;
|
public uint Id;
|
||||||
public Vector3 Destination;
|
|
||||||
public bool CrzTeleport;
|
public bool CrzTeleport;
|
||||||
public byte StopDistanceTolerance; // Determines how far from spline destination the mover is allowed to stop in place 0, 0, 3.0, 2.76, numeric_limits<float>::max, 1.1, float(INT_MAX); default before this field existed was distance 3.0 (index 2)
|
public byte StopDistanceTolerance; // Determines how far from spline destination the mover is allowed to stop in place 0, 0, 3.0, 2.76, numeric_limits<float>::max, 1.1, float(INT_MAX); default before this field existed was distance 3.0 (index 2)
|
||||||
public MovementSpline Move;
|
public MovementSpline Move;
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ namespace Game.Networking.Packets
|
|||||||
public PlayerInteractionType InteractionType;
|
public PlayerInteractionType InteractionType;
|
||||||
public bool Success = true;
|
public bool Success = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class GossipMessagePkt : ServerPacket
|
public class GossipMessagePkt : ServerPacket
|
||||||
{
|
{
|
||||||
public GossipMessagePkt() : base(ServerOpcodes.GossipMessage) { }
|
public GossipMessagePkt() : base(ServerOpcodes.GossipMessage) { }
|
||||||
@@ -122,7 +122,7 @@ namespace Game.Networking.Packets
|
|||||||
public int GossipNpcOptionID;
|
public int GossipNpcOptionID;
|
||||||
public int? FriendshipFactionID;
|
public int? FriendshipFactionID;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class GossipComplete : ServerPacket
|
public class GossipComplete : ServerPacket
|
||||||
{
|
{
|
||||||
public bool SuppressSound;
|
public bool SuppressSound;
|
||||||
@@ -230,6 +230,20 @@ namespace Game.Networking.Packets
|
|||||||
public ObjectGuid Healer;
|
public ObjectGuid Healer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class TabardVendorActivate : ClientPacket
|
||||||
|
{
|
||||||
|
public ObjectGuid Vendor;
|
||||||
|
public int Type;
|
||||||
|
|
||||||
|
public TabardVendorActivate(WorldPacket packet) : base(packet) { }
|
||||||
|
|
||||||
|
public override void Read()
|
||||||
|
{
|
||||||
|
Vendor = _worldPacket.ReadPackedGuid();
|
||||||
|
Type = _worldPacket.ReadInt32();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class TrainerBuySpell : ClientPacket
|
class TrainerBuySpell : ClientPacket
|
||||||
{
|
{
|
||||||
public TrainerBuySpell(WorldPacket packet) : base(packet) { }
|
public TrainerBuySpell(WorldPacket packet) : base(packet) { }
|
||||||
@@ -238,7 +252,7 @@ namespace Game.Networking.Packets
|
|||||||
{
|
{
|
||||||
TrainerGUID = _worldPacket.ReadPackedGuid();
|
TrainerGUID = _worldPacket.ReadPackedGuid();
|
||||||
TrainerID = _worldPacket.ReadUInt32();
|
TrainerID = _worldPacket.ReadUInt32();
|
||||||
SpellID= _worldPacket.ReadUInt32();
|
SpellID = _worldPacket.ReadUInt32();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ObjectGuid TrainerGUID;
|
public ObjectGuid TrainerGUID;
|
||||||
@@ -289,7 +303,7 @@ namespace Game.Networking.Packets
|
|||||||
public uint PetNumber;
|
public uint PetNumber;
|
||||||
public byte DestSlot;
|
public byte DestSlot;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Structs
|
//Structs
|
||||||
public struct TreasureItem
|
public struct TreasureItem
|
||||||
{
|
{
|
||||||
@@ -406,7 +420,7 @@ namespace Game.Networking.Packets
|
|||||||
data.WriteBit(DoNotFilterOnVendor);
|
data.WriteBit(DoNotFilterOnVendor);
|
||||||
data.WriteBit(Refundable);
|
data.WriteBit(Refundable);
|
||||||
data.FlushBits();
|
data.FlushBits();
|
||||||
|
|
||||||
Item.Write(data);
|
Item.Write(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1042,17 +1042,17 @@ namespace Game.Networking.Packets
|
|||||||
{
|
{
|
||||||
public PartyMemberPhase(uint flags, uint id)
|
public PartyMemberPhase(uint flags, uint id)
|
||||||
{
|
{
|
||||||
Flags = (ushort)flags;
|
Flags = flags;
|
||||||
Id = (ushort)id;
|
Id = (ushort)id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Write(WorldPacket data)
|
public void Write(WorldPacket data)
|
||||||
{
|
{
|
||||||
data.WriteUInt16(Flags);
|
data.WriteUInt32(Flags);
|
||||||
data.WriteUInt16(Id);
|
data.WriteUInt16(Id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ushort Flags;
|
public uint Flags;
|
||||||
public ushort Id;
|
public ushort Id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -601,9 +601,9 @@ namespace Game.Networking.Packets
|
|||||||
ClassID = player.GetClass();
|
ClassID = player.GetClass();
|
||||||
Level = (byte)player.GetLevel();
|
Level = (byte)player.GetLevel();
|
||||||
|
|
||||||
DeclinedName names = player.GetDeclinedNames();
|
DeclinedNames names = player.GetDeclinedNames();
|
||||||
if (names != null)
|
if (names != null)
|
||||||
DeclinedNames = names;
|
DeclinedNames = new(names);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ namespace Game.Networking.Packets
|
|||||||
{
|
{
|
||||||
public class InitializeFactions : ServerPacket
|
public class InitializeFactions : ServerPacket
|
||||||
{
|
{
|
||||||
const ushort FactionCount = 443;
|
const ushort FactionCount = 1000;
|
||||||
|
|
||||||
public InitializeFactions() : base(ServerOpcodes.InitializeFactions, ConnectionType.Instance) { }
|
public InitializeFactions() : base(ServerOpcodes.InitializeFactions, ConnectionType.Instance) { }
|
||||||
|
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ namespace Game.Networking.Packets
|
|||||||
public override void Read()
|
public override void Read()
|
||||||
{
|
{
|
||||||
uint nameLength = _worldPacket.ReadBits<uint>(9);
|
uint nameLength = _worldPacket.ReadBits<uint>(9);
|
||||||
uint noteslength = _worldPacket.ReadBits<uint>(10);
|
uint noteslength = _worldPacket.ReadBits<uint>(9);
|
||||||
Name = _worldPacket.ReadString(nameLength);
|
Name = _worldPacket.ReadString(nameLength);
|
||||||
Notes = _worldPacket.ReadString(noteslength);
|
Notes = _worldPacket.ReadString(noteslength);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -83,9 +83,13 @@ namespace Game.Networking.Packets
|
|||||||
_worldPacket.WriteBit(ChatDisabledByPlayer);
|
_worldPacket.WriteBit(ChatDisabledByPlayer);
|
||||||
_worldPacket.WriteBit(LFGListCustomRequiresAuthenticator);
|
_worldPacket.WriteBit(LFGListCustomRequiresAuthenticator);
|
||||||
_worldPacket.WriteBit(AddonsDisabled);
|
_worldPacket.WriteBit(AddonsDisabled);
|
||||||
_worldPacket.WriteBit(Unused1000);
|
_worldPacket.WriteBit(WarGamesEnabled);
|
||||||
_worldPacket.WriteBit(ContentTrackingEnabled);
|
_worldPacket.WriteBit(ContentTrackingEnabled);
|
||||||
_worldPacket.WriteBit(IsSellAllJunkEnabled);
|
_worldPacket.WriteBit(IsSellAllJunkEnabled);
|
||||||
|
_worldPacket.WriteBit(IsGroupFinderEnabled);
|
||||||
|
_worldPacket.WriteBit(IsLFDEnabled);
|
||||||
|
_worldPacket.WriteBit(IsLFREnabled);
|
||||||
|
_worldPacket.WriteBit(IsPremadeGroupEnabled);
|
||||||
|
|
||||||
_worldPacket.FlushBits();
|
_worldPacket.FlushBits();
|
||||||
|
|
||||||
@@ -177,9 +181,13 @@ namespace Game.Networking.Packets
|
|||||||
public bool ChatDisabledByPlayer;
|
public bool ChatDisabledByPlayer;
|
||||||
public bool LFGListCustomRequiresAuthenticator;
|
public bool LFGListCustomRequiresAuthenticator;
|
||||||
public bool AddonsDisabled;
|
public bool AddonsDisabled;
|
||||||
public bool Unused1000;
|
public bool WarGamesEnabled; // classic only
|
||||||
public bool ContentTrackingEnabled;
|
public bool ContentTrackingEnabled;
|
||||||
public bool IsSellAllJunkEnabled;
|
public bool IsSellAllJunkEnabled;
|
||||||
|
public bool IsGroupFinderEnabled = true; // classic only
|
||||||
|
public bool IsLFDEnabled = true; // classic only
|
||||||
|
public bool IsLFREnabled = true; // classic only
|
||||||
|
public bool IsPremadeGroupEnabled = true; // classic only
|
||||||
|
|
||||||
public SocialQueueConfig QuickJoinConfig;
|
public SocialQueueConfig QuickJoinConfig;
|
||||||
public SquelchInfo Squelch;
|
public SquelchInfo Squelch;
|
||||||
@@ -361,26 +369,6 @@ namespace Game.Networking.Packets
|
|||||||
public string RealmHiddenAlert;
|
public string RealmHiddenAlert;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MOTD : ServerPacket
|
|
||||||
{
|
|
||||||
public MOTD() : base(ServerOpcodes.Motd) { }
|
|
||||||
|
|
||||||
public override void Write()
|
|
||||||
{
|
|
||||||
_worldPacket.WriteBits(Text.Count, 4);
|
|
||||||
_worldPacket.FlushBits();
|
|
||||||
|
|
||||||
foreach (var line in Text)
|
|
||||||
{
|
|
||||||
_worldPacket.WriteBits(line.GetByteCount(), 7);
|
|
||||||
_worldPacket.FlushBits();
|
|
||||||
_worldPacket.WriteString(line);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<string> Text;
|
|
||||||
}
|
|
||||||
|
|
||||||
public class SetTimeZoneInformation : ServerPacket
|
public class SetTimeZoneInformation : ServerPacket
|
||||||
{
|
{
|
||||||
public SetTimeZoneInformation() : base(ServerOpcodes.SetTimeZoneInformation) { }
|
public SetTimeZoneInformation() : base(ServerOpcodes.SetTimeZoneInformation) { }
|
||||||
|
|||||||
@@ -42,9 +42,11 @@ namespace Game.Networking.Packets
|
|||||||
public override void Read()
|
public override void Read()
|
||||||
{
|
{
|
||||||
uint areasCount = _worldPacket.ReadBits<uint>(4);
|
uint areasCount = _worldPacket.ReadBits<uint>(4);
|
||||||
|
IsFromAddOn = _worldPacket.HasBit();
|
||||||
|
|
||||||
Request.Read(_worldPacket);
|
Request.Read(_worldPacket);
|
||||||
RequestID = _worldPacket.ReadUInt32();
|
RequestID = _worldPacket.ReadUInt32();
|
||||||
|
Origin = _worldPacket.ReadUInt8();
|
||||||
|
|
||||||
for (int i = 0; i < areasCount; ++i)
|
for (int i = 0; i < areasCount; ++i)
|
||||||
Areas.Add(_worldPacket.ReadInt32());
|
Areas.Add(_worldPacket.ReadInt32());
|
||||||
@@ -52,6 +54,8 @@ namespace Game.Networking.Packets
|
|||||||
|
|
||||||
public WhoRequest Request = new();
|
public WhoRequest Request = new();
|
||||||
public uint RequestID;
|
public uint RequestID;
|
||||||
|
public byte Origin; // 1 = Social, 2 = Chat, 3 = Item
|
||||||
|
public bool IsFromAddOn;
|
||||||
public List<int> Areas= new();
|
public List<int> Areas= new();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1899,9 +1899,13 @@ namespace Game
|
|||||||
|
|
||||||
public void SendServerMessage(ServerMessageType messageID, string stringParam = "", Player player = null)
|
public void SendServerMessage(ServerMessageType messageID, string stringParam = "", Player player = null)
|
||||||
{
|
{
|
||||||
|
ServerMessagesRecord serverMessage = CliDB.ServerMessagesStorage.LookupByKey(messageID);
|
||||||
|
if (serverMessage == null)
|
||||||
|
return;
|
||||||
|
|
||||||
ChatServerMessage packet = new();
|
ChatServerMessage packet = new();
|
||||||
packet.MessageID = (int)messageID;
|
packet.MessageID = (int)messageID;
|
||||||
if (messageID <= ServerMessageType.String)
|
if (serverMessage.Text[player != null ? player.GetSession().GetSessionDbcLocale() : GetDefaultDbcLocale()].Contains("%s"))
|
||||||
packet.StringParam = stringParam;
|
packet.StringParam = stringParam;
|
||||||
|
|
||||||
if (player != null)
|
if (player != null)
|
||||||
|
|||||||
Reference in New Issue
Block a user