Messed up the commit history, so here is all the files rip, Credit to TrinityCore

This commit is contained in:
hondacrx
2023-09-16 08:42:35 -04:00
parent 87284bbded
commit f636ea225f
373 changed files with 158910 additions and 2170 deletions
+1 -1
View File
@@ -2,7 +2,7 @@
CypherCore is an open source server project for World of Warcraft written in C#.
The current support game version is: 10.1.0.50000
The current support game version is: 10.1.7.51313
### Prerequisites
* .NET 7.0 SDK [Download](https://dotnet.microsoft.com/en-us/download/dotnet/7.0)
@@ -38,24 +38,24 @@ namespace BNetServer
}
_hostnames[0] = ConfigMgr.GetDefaultValue("LoginREST.ExternalAddress", "127.0.0.1");
var externalAddress = Dns.GetHostEntry($"{_hostnames[0]}:{_port}", System.Net.Sockets.AddressFamily.InterNetwork);
if (externalAddress == null || externalAddress.AddressList.Empty())
var externalAddress = Dns.GetHostAddresses(_hostnames[0], System.Net.Sockets.AddressFamily.InterNetwork);
if (externalAddress == null || externalAddress.Empty())
{
Log.outError(LogFilter.Network, $"Could not resolve LoginREST.ExternalAddress {_hostnames[0]}");
return;
}
_addresses[0] = externalAddress.AddressList[0];
_addresses[0] = externalAddress[0];
_hostnames[1] = ConfigMgr.GetDefaultValue("LoginREST.LocalAddress", "127.0.0.1");
var localAddress = Dns.GetHostEntry($"{_hostnames[1]}:{_port}", System.Net.Sockets.AddressFamily.InterNetwork);
if (localAddress == null || localAddress.AddressList.Empty())
var localAddress = Dns.GetHostAddresses(_hostnames[1], System.Net.Sockets.AddressFamily.InterNetwork);
if (localAddress == null || localAddress.Empty())
{
Log.outError(LogFilter.Network, $"Could not resolve LoginREST.ExternalAddress {_hostnames[1]}");
return;
}
_addresses[1] = localAddress.AddressList[0];
_addresses[1] = localAddress[0];
// set up form inputs
formInputs.Type = "LOGIN_FORM";
+2 -2
View File
@@ -2050,14 +2050,14 @@ namespace Framework.Constants
DontDismissWhenEncounterIsAborted = 0x80000000 // NYI
}
public enum TaxiNodeFlags : ushort
public enum TaxiNodeFlags : int
{
Alliance = 0x1,
Horde = 0x2,
UseFavoriteMount = 0x10
}
public enum TaxiPathNodeFlags : byte
public enum TaxiPathNodeFlags : int
{
Teleport = 0x1,
Stop = 0x2
+13
View File
@@ -61,6 +61,7 @@ namespace Framework.Constants
EveryoneAssistant = 0x040, // Script_IsEveryoneAssistant()
GuildGroup = 0x100,
CrossFaction = 0x200,
RestrictPings = 0x400,
MaskBgRaid = FakeRaid | Raid
}
@@ -153,4 +154,16 @@ namespace Framework.Constants
Max
}
public enum PingSubjectType
{
Attack = 0,
Warning = 1,
Assist = 2,
OnMyWay = 3,
AlertThreat = 4,
AlertNotThreat = 5,
Max
}
}
+5 -1
View File
@@ -1274,6 +1274,7 @@ namespace Framework.Constants
ReagentBagWrongSlot = 115,// Reagent Bags can only be placed in the reagent bag slot.
SlotOnlyReagentBag = 116,// Only Reagent Bags can be placed in the reagent bag slot.
ReagentBagItemType = 117,// Only Reagents can be placed in Reagent Bags.
CantBulkSellItemWithRefund = 118// Items that can be refunded can't be bulk sold.
}
public enum BuyResult
@@ -1297,7 +1298,10 @@ namespace Framework.Constants
YouDontOwnThatItem = 4, // You don't own that item.
Unk = 5, // Nothing Appears...
OnlyEmptyBag = 6, // You can only do that with empty bags.
CantSellToThisMerchant = 7 // You cannot sell items to this merchant.
CantSellToThisMerchant = 7, // You cannot sell items to this merchant.
MustRepairDurability = 8, // DESCRIPTION You must repair that item's durability to use it.
VendorRefuseScappableAzerite = 9, // DESCRIPTION The merchant doesn't want that item. Bring it to the Scrapper to extract Titan Residuum.
InternalBagError = 10, // DESCRIPTION Internal Bag Error
}
public enum EnchantmentSlot
File diff suppressed because it is too large Load Diff
@@ -71,4 +71,11 @@ namespace Framework.Constants
//Apply,
//Remove
}
public enum EncounterType
{
DungeonEncounter,
Battleground,
MythicPlusRun
}
}
+359 -357
View File
@@ -2654,363 +2654,365 @@ namespace Framework.Constants
BattlegroundJoinNoValidSpecForRole = 764,
BattlegroundJoinRespec = 765,
BattlegroundInvitationDeclined = 766,
BattlegroundJoinTimedOut = 767,
BattlegroundDupeQueue = 768,
BattlegroundJoinMustCompleteQuest = 769,
InBattlegroundRespec = 770,
MailLimitedDurationItem = 771,
YellRestrictedTrial = 772,
ChatRaidRestrictedTrial = 773,
LfgRoleCheckFailed = 774,
LfgRoleCheckFailedTimeout = 775,
LfgRoleCheckFailedNotViable = 776,
LfgReadyCheckFailed = 777,
LfgReadyCheckFailedTimeout = 778,
LfgGroupFull = 779,
LfgNoLfgObject = 780,
LfgNoSlotsPlayer = 781,
LfgNoSlotsParty = 782,
LfgNoSpec = 783,
LfgMismatchedSlots = 784,
LfgMismatchedSlotsLocalXrealm = 785,
LfgPartyPlayersFromDifferentRealms = 786,
LfgMembersNotPresent = 787,
LfgGetInfoTimeout = 788,
LfgInvalidSlot = 789,
LfgDeserterPlayer = 790,
LfgDeserterParty = 791,
LfgDead = 792,
LfgRandomCooldownPlayer = 793,
LfgRandomCooldownParty = 794,
LfgTooManyMembers = 795,
LfgTooFewMembers = 796,
LfgProposalFailed = 797,
LfgProposalDeclinedSelf = 798,
LfgProposalDeclinedParty = 799,
LfgNoSlotsSelected = 800,
LfgNoRolesSelected = 801,
LfgRoleCheckInitiated = 802,
LfgReadyCheckInitiated = 803,
LfgPlayerDeclinedRoleCheck = 804,
LfgPlayerDeclinedReadyCheck = 805,
LfgJoinedQueue = 806,
LfgJoinedFlexQueue = 807,
LfgJoinedRfQueue = 808,
LfgJoinedScenarioQueue = 809,
LfgJoinedWorldPvpQueue = 810,
LfgJoinedBattlefieldQueue = 811,
LfgJoinedList = 812,
LfgLeftQueue = 813,
LfgLeftList = 814,
LfgRoleCheckAborted = 815,
LfgReadyCheckAborted = 816,
LfgCantUseBattleground = 817,
LfgCantUseDungeons = 818,
LfgReasonTooManyLfg = 819,
LfgFarmLimit = 820,
LfgNoCrossFactionParties = 821,
InvalidTeleportLocation = 822,
TooFarToInteract = 823,
BattlegroundPlayersFromDifferentRealms = 824,
DifficultyChangeCooldownS = 825,
DifficultyChangeCombatCooldownS = 826,
DifficultyChangeWorldstate = 827,
DifficultyChangeEncounter = 828,
DifficultyChangeCombat = 829,
DifficultyChangePlayerBusy = 830,
DifficultyChangePlayerOnVehicle = 831,
DifficultyChangeAlreadyStarted = 832,
DifficultyChangeOtherHeroicS = 833,
DifficultyChangeHeroicInstanceAlreadyRunning = 834,
ArenaTeamPartySize = 835,
SoloShuffleWargameGroupSize = 836,
SoloShuffleWargameGroupComp = 837,
SoloShuffleMinItemLevel = 838,
PvpPlayerAbandoned = 839,
QuestForceRemovedS = 840,
AttackNoActions = 841,
InRandomBg = 842,
InNonRandomBg = 843,
BnFriendSelf = 844,
BnFriendAlready = 845,
BnFriendBlocked = 846,
BnFriendListFull = 847,
BnFriendRequestSent = 848,
BnBroadcastThrottle = 849,
BgDeveloperOnly = 850,
CurrencySpellSlotMismatch = 851,
CurrencyNotTradable = 852,
RequiresExpansionS = 853,
QuestFailedSpell = 854,
TalentFailedUnspentTalentPoints = 855,
TalentFailedNotEnoughTalentsInPrimaryTree = 856,
TalentFailedNoPrimaryTreeSelected = 857,
TalentFailedCantRemoveTalent = 858,
TalentFailedUnknown = 859,
TalentFailedInCombat = 860,
TalentFailedInPvpMatch = 861,
TalentFailedInMythicPlus = 862,
WargameRequestFailure = 863,
RankRequiresAuthenticator = 864,
GuildBankVoucherFailed = 865,
WargameRequestSent = 866,
RequiresAchievementI = 867,
RefundResultExceedMaxCurrency = 868,
CantBuyQuantity = 869,
ItemIsBattlePayLocked = 870,
PartyAlreadyInBattlegroundQueue = 871,
PartyConfirmingBattlegroundQueue = 872,
BattlefieldTeamPartySize = 873,
InsuffTrackedCurrencyIs = 874,
NotOnTournamentRealm = 875,
GuildTrialAccountTrial = 876,
GuildTrialAccountVeteran = 877,
GuildUndeletableDueToLevel = 878,
CantDoThatInAGroup = 879,
GuildLeaderReplaced = 880,
TransmogrifyCantEquip = 881,
TransmogrifyInvalidItemType = 882,
TransmogrifyNotSoulbound = 883,
TransmogrifyInvalidSource = 884,
TransmogrifyInvalidDestination = 885,
TransmogrifyMismatch = 886,
TransmogrifyLegendary = 887,
TransmogrifySameItem = 888,
TransmogrifySameAppearance = 889,
TransmogrifyNotEquipped = 890,
VoidDepositFull = 891,
VoidWithdrawFull = 892,
VoidStorageWrapped = 893,
VoidStorageStackable = 894,
VoidStorageUnbound = 895,
VoidStorageRepair = 896,
VoidStorageCharges = 897,
VoidStorageQuest = 898,
VoidStorageConjured = 899,
VoidStorageMail = 900,
VoidStorageBag = 901,
VoidTransferStorageFull = 902,
VoidTransferInvFull = 903,
VoidTransferInternalError = 904,
VoidTransferItemInvalid = 905,
DifficultyDisabledInLfg = 906,
VoidStorageUnique = 907,
VoidStorageLoot = 908,
VoidStorageHoliday = 909,
VoidStorageDuration = 910,
VoidStorageLoadFailed = 911,
VoidStorageInvalidItem = 912,
ParentalControlsChatMuted = 913,
SorStartExperienceIncomplete = 914,
SorInvalidEmail = 915,
SorInvalidComment = 916,
ChallengeModeResetCooldownS = 917,
ChallengeModeResetKeystone = 918,
PetJournalAlreadyInLoadout = 919,
ReportSubmittedSuccessfully = 920,
ReportSubmissionFailed = 921,
SuggestionSubmittedSuccessfully = 922,
BugSubmittedSuccessfully = 923,
ChallengeModeEnabled = 924,
ChallengeModeDisabled = 925,
PetbattleCreateFailed = 926,
PetbattleNotHere = 927,
PetbattleNotHereOnTransport = 928,
PetbattleNotHereUnevenGround = 929,
PetbattleNotHereObstructed = 930,
PetbattleNotWhileInCombat = 931,
PetbattleNotWhileDead = 932,
PetbattleNotWhileFlying = 933,
PetbattleTargetInvalid = 934,
PetbattleTargetOutOfRange = 935,
PetbattleTargetNotCapturable = 936,
PetbattleNotATrainer = 937,
PetbattleDeclined = 938,
PetbattleInBattle = 939,
PetbattleInvalidLoadout = 940,
PetbattleAllPetsDead = 941,
PetbattleNoPetsInSlots = 942,
PetbattleNoAccountLock = 943,
PetbattleWildPetTapped = 944,
PetbattleRestrictedAccount = 945,
PetbattleOpponentNotAvailable = 946,
PetbattleNotWhileInMatchedBattle = 947,
CantHaveMorePetsOfThatType = 948,
CantHaveMorePets = 949,
PvpMapNotFound = 950,
PvpMapNotSet = 951,
PetbattleQueueQueued = 952,
PetbattleQueueAlreadyQueued = 953,
PetbattleQueueJoinFailed = 954,
PetbattleQueueJournalLock = 955,
PetbattleQueueRemoved = 956,
PetbattleQueueProposalDeclined = 957,
PetbattleQueueProposalTimeout = 958,
PetbattleQueueOpponentDeclined = 959,
PetbattleQueueRequeuedInternal = 960,
PetbattleQueueRequeuedRemoved = 961,
PetbattleQueueSlotLocked = 962,
PetbattleQueueSlotEmpty = 963,
PetbattleQueueSlotNoTracker = 964,
PetbattleQueueSlotNoSpecies = 965,
PetbattleQueueSlotCantBattle = 966,
PetbattleQueueSlotRevoked = 967,
PetbattleQueueSlotDead = 968,
PetbattleQueueSlotNoPet = 969,
PetbattleQueueNotWhileNeutral = 970,
PetbattleGameTimeLimitWarning = 971,
PetbattleGameRoundsLimitWarning = 972,
HasRestriction = 973,
ItemUpgradeItemTooLowLevel = 974,
ItemUpgradeNoPath = 975,
ItemUpgradeNoMoreUpgrades = 976,
BonusRollEmpty = 977,
ChallengeModeFull = 978,
ChallengeModeInProgress = 979,
ChallengeModeIncorrectKeystone = 980,
BattletagFriendNotFound = 981,
BattletagFriendNotValid = 982,
BattletagFriendNotAllowed = 983,
BattletagFriendThrottled = 984,
BattletagFriendSuccess = 985,
PetTooHighLevelToUncage = 986,
PetbattleInternal = 987,
CantCagePetYet = 988,
NoLootInChallengeMode = 989,
QuestPetBattleVictoriesPvpIi = 990,
RoleCheckAlreadyInProgress = 991,
RecruitAFriendAccountLimit = 992,
RecruitAFriendFailed = 993,
SetLootPersonal = 994,
SetLootMethodFailedCombat = 995,
ReagentBankFull = 996,
ReagentBankLocked = 997,
GarrisonBuildingExists = 998,
GarrisonInvalidPlot = 999,
GarrisonInvalidBuildingid = 1000,
GarrisonInvalidPlotBuilding = 1001,
GarrisonRequiresBlueprint = 1002,
GarrisonNotEnoughCurrency = 1003,
GarrisonNotEnoughGold = 1004,
GarrisonCompleteMissionWrongFollowerType = 1005,
AlreadyUsingLfgList = 1006,
RestrictedAccountLfgListTrial = 1007,
ToyUseLimitReached = 1008,
ToyAlreadyKnown = 1009,
TransmogSetAlreadyKnown = 1010,
NotEnoughCurrency = 1011,
SpecIsDisabled = 1012,
FeatureRestrictedTrial = 1013,
CantBeObliterated = 1014,
CantBeScrapped = 1015,
CantBeRecrafted = 1016,
ArtifactRelicDoesNotMatchArtifact = 1017,
MustEquipArtifact = 1018,
CantDoThatRightNow = 1019,
AffectingCombat = 1020,
EquipmentManagerCombatSwapS = 1021,
EquipmentManagerBagsFull = 1022,
EquipmentManagerMissingItemS = 1023,
MovieRecordingWarningPerf = 1024,
MovieRecordingWarningDiskFull = 1025,
MovieRecordingWarningNoMovie = 1026,
MovieRecordingWarningRequirements = 1027,
MovieRecordingWarningCompressing = 1028,
NoChallengeModeReward = 1029,
ClaimedChallengeModeReward = 1030,
ChallengeModePeriodResetSs = 1031,
CantDoThatChallengeModeActive = 1032,
TalentFailedRestArea = 1033,
CannotAbandonLastPet = 1034,
TestCvarSetSss = 1035,
QuestTurnInFailReason = 1036,
ClaimedChallengeModeRewardOld = 1037,
TalentGrantedByAura = 1038,
ChallengeModeAlreadyComplete = 1039,
GlyphTargetNotAvailable = 1040,
PvpWarmodeToggleOn = 1041,
PvpWarmodeToggleOff = 1042,
SpellFailedLevelRequirement = 1043,
SpellFailedCantFlyHere = 1044,
BattlegroundJoinRequiresLevel = 1045,
BattlegroundJoinDisqualified = 1046,
BattlegroundJoinDisqualifiedNoName = 1047,
VoiceChatGenericUnableToConnect = 1048,
VoiceChatServiceLost = 1049,
VoiceChatChannelNameTooShort = 1050,
VoiceChatChannelNameTooLong = 1051,
VoiceChatChannelAlreadyExists = 1052,
VoiceChatTargetNotFound = 1053,
VoiceChatTooManyRequests = 1054,
VoiceChatPlayerSilenced = 1055,
VoiceChatParentalDisableAll = 1056,
VoiceChatDisabled = 1057,
NoPvpReward = 1058,
ClaimedPvpReward = 1059,
AzeriteEssenceSelectionFailedEssenceNotUnlocked = 1060,
AzeriteEssenceSelectionFailedCantRemoveEssence = 1061,
AzeriteEssenceSelectionFailedConditionFailed = 1062,
AzeriteEssenceSelectionFailedRestArea = 1063,
AzeriteEssenceSelectionFailedSlotLocked = 1064,
AzeriteEssenceSelectionFailedNotAtForge = 1065,
AzeriteEssenceSelectionFailedHeartLevelTooLow = 1066,
AzeriteEssenceSelectionFailedNotEquipped = 1067,
SocketingRequiresPunchcardredGem = 1068,
SocketingPunchcardredGemOnlyInPunchcardredslot = 1069,
SocketingRequiresPunchcardyellowGem = 1070,
SocketingPunchcardyellowGemOnlyInPunchcardyellowslot = 1071,
SocketingRequiresPunchcardblueGem = 1072,
SocketingPunchcardblueGemOnlyInPunchcardblueslot = 1073,
SocketingRequiresDominationShard = 1074,
SocketingDominationShardOnlyInDominationslot = 1075,
SocketingRequiresCypherGem = 1076,
SocketingCypherGemOnlyInCypherslot = 1077,
SocketingRequiresTinkerGem = 1078,
SocketingTinkerGemOnlyInTinkerslot = 1079,
SocketingRequiresPrimordialGem = 1080,
SocketingPrimordialGemOnlyInPrimordialslot = 1081,
LevelLinkingResultLinked = 1082,
LevelLinkingResultUnlinked = 1083,
ClubFinderErrorPostClub = 1084,
ClubFinderErrorApplyClub = 1085,
ClubFinderErrorRespondApplicant = 1086,
ClubFinderErrorCancelApplication = 1087,
ClubFinderErrorTypeAcceptApplication = 1088,
ClubFinderErrorTypeNoInvitePermissions = 1089,
ClubFinderErrorTypeNoPostingPermissions = 1090,
ClubFinderErrorTypeApplicantList = 1091,
ClubFinderErrorTypeApplicantListNoPerm = 1092,
ClubFinderErrorTypeFinderNotAvailable = 1093,
ClubFinderErrorTypeGetPostingIds = 1094,
ClubFinderErrorTypeJoinApplication = 1095,
ClubFinderErrorTypeRealmNotEligible = 1096,
ClubFinderErrorTypeFlaggedRename = 1097,
ClubFinderErrorTypeFlaggedDescriptionChange = 1098,
ItemInteractionNotEnoughGold = 1099,
ItemInteractionNotEnoughCurrency = 1100,
PlayerChoiceErrorPendingChoice = 1101,
SoulbindInvalidConduit = 1102,
SoulbindInvalidConduitItem = 1103,
SoulbindInvalidTalent = 1104,
SoulbindDuplicateConduit = 1105,
ActivateSoulbindS = 1106,
ActivateSoulbindFailedRestArea = 1107,
CantUseProfanity = 1108,
NotInPetBattle = 1109,
NotInNpe = 1110,
NoSpec = 1111,
NoDominationshardOverwrite = 1112,
UseWeeklyRewardsDisabled = 1113,
CrossFactionGroupJoined = 1114,
CantTargetUnfriendlyInOverworld = 1115,
EquipablespellsSlotsFull = 1116,
ItemModAppearanceGroupAlreadyKnown = 1117,
WowLabsPartyErrorTypePartyIsFull = 1118,
WowLabsPartyErrorTypeMaxInviteSent = 1119,
WowLabsPartyErrorTypePlayerAlreadyInvited = 1120,
WowLabsPartyErrorTypePartyInviteInvalid = 1121,
WowLabsLobbyMatchmakerErrorEnterQueueFailed = 1122,
WowLabsLobbyMatchmakerErrorLeaveQueueFailed = 1123,
BattlegroundInvitationDeclinedBy = 767,
BattlegroundJoinTimedOut = 768,
BattlegroundDupeQueue = 769,
BattlegroundJoinMustCompleteQuest = 770,
InBattlegroundRespec = 771,
MailLimitedDurationItem = 772,
YellRestrictedTrial = 773,
ChatRaidRestrictedTrial = 774,
LfgRoleCheckFailed = 775,
LfgRoleCheckFailedTimeout = 776,
LfgRoleCheckFailedNotViable = 777,
LfgReadyCheckFailed = 778,
LfgReadyCheckFailedTimeout = 779,
LfgGroupFull = 780,
LfgNoLfgObject = 781,
LfgNoSlotsPlayer = 782,
LfgNoSlotsParty = 783,
LfgNoSpec = 784,
LfgMismatchedSlots = 785,
LfgMismatchedSlotsLocalXrealm = 786,
LfgPartyPlayersFromDifferentRealms = 787,
LfgMembersNotPresent = 788,
LfgGetInfoTimeout = 789,
LfgInvalidSlot = 790,
LfgDeserterPlayer = 791,
LfgDeserterParty = 792,
LfgDead = 793,
LfgRandomCooldownPlayer = 794,
LfgRandomCooldownParty = 795,
LfgTooManyMembers = 796,
LfgTooFewMembers = 797,
LfgProposalFailed = 798,
LfgProposalDeclinedSelf = 799,
LfgProposalDeclinedParty = 800,
LfgNoSlotsSelected = 801,
LfgNoRolesSelected = 802,
LfgRoleCheckInitiated = 803,
LfgReadyCheckInitiated = 804,
LfgPlayerDeclinedRoleCheck = 805,
LfgPlayerDeclinedReadyCheck = 806,
LfgJoinedQueue = 807,
LfgJoinedFlexQueue = 808,
LfgJoinedRfQueue = 809,
LfgJoinedScenarioQueue = 810,
LfgJoinedWorldPvpQueue = 811,
LfgJoinedBattlefieldQueue = 812,
LfgJoinedList = 813,
LfgLeftQueue = 814,
LfgLeftList = 815,
LfgRoleCheckAborted = 816,
LfgReadyCheckAborted = 817,
LfgCantUseBattleground = 818,
LfgCantUseDungeons = 819,
LfgReasonTooManyLfg = 820,
LfgFarmLimit = 821,
LfgNoCrossFactionParties = 822,
InvalidTeleportLocation = 823,
TooFarToInteract = 824,
BattlegroundPlayersFromDifferentRealms = 825,
DifficultyChangeCooldownS = 826,
DifficultyChangeCombatCooldownS = 827,
DifficultyChangeWorldstate = 828,
DifficultyChangeEncounter = 829,
DifficultyChangeCombat = 830,
DifficultyChangePlayerBusy = 831,
DifficultyChangePlayerOnVehicle = 832,
DifficultyChangeAlreadyStarted = 833,
DifficultyChangeOtherHeroicS = 834,
DifficultyChangeHeroicInstanceAlreadyRunning = 835,
ArenaTeamPartySize = 836,
SoloShuffleWargameGroupSize = 837,
SoloShuffleWargameGroupComp = 838,
SoloShuffleMinItemLevel = 839,
PvpPlayerAbandoned = 840,
QuestForceRemovedS = 841,
AttackNoActions = 842,
InRandomBg = 843,
InNonRandomBg = 844,
BnFriendSelf = 845,
BnFriendAlready = 846,
BnFriendBlocked = 847,
BnFriendListFull = 848,
BnFriendRequestSent = 849,
BnBroadcastThrottle = 850,
BgDeveloperOnly = 851,
CurrencySpellSlotMismatch = 852,
CurrencyNotTradable = 853,
RequiresExpansionS = 854,
QuestFailedSpell = 855,
TalentFailedUnspentTalentPoints = 856,
TalentFailedNotEnoughTalentsInPrimaryTree = 857,
TalentFailedNoPrimaryTreeSelected = 858,
TalentFailedCantRemoveTalent = 859,
TalentFailedUnknown = 860,
TalentFailedInCombat = 861,
TalentFailedInPvpMatch = 862,
TalentFailedInMythicPlus = 863,
WargameRequestFailure = 864,
RankRequiresAuthenticator = 865,
GuildBankVoucherFailed = 866,
WargameRequestSent = 867,
RequiresAchievementI = 868,
RefundResultExceedMaxCurrency = 869,
CantBuyQuantity = 870,
ItemIsBattlePayLocked = 871,
PartyAlreadyInBattlegroundQueue = 872,
PartyConfirmingBattlegroundQueue = 873,
BattlefieldTeamPartySize = 874,
InsuffTrackedCurrencyIs = 875,
NotOnTournamentRealm = 876,
GuildTrialAccountTrial = 877,
GuildTrialAccountVeteran = 878,
GuildUndeletableDueToLevel = 879,
CantDoThatInAGroup = 880,
GuildLeaderReplaced = 881,
TransmogrifyCantEquip = 882,
TransmogrifyInvalidItemType = 883,
TransmogrifyNotSoulbound = 884,
TransmogrifyInvalidSource = 885,
TransmogrifyInvalidDestination = 886,
TransmogrifyMismatch = 887,
TransmogrifyLegendary = 888,
TransmogrifySameItem = 889,
TransmogrifySameAppearance = 890,
TransmogrifyNotEquipped = 891,
VoidDepositFull = 892,
VoidWithdrawFull = 893,
VoidStorageWrapped = 894,
VoidStorageStackable = 895,
VoidStorageUnbound = 896,
VoidStorageRepair = 897,
VoidStorageCharges = 898,
VoidStorageQuest = 899,
VoidStorageConjured = 900,
VoidStorageMail = 901,
VoidStorageBag = 902,
VoidTransferStorageFull = 903,
VoidTransferInvFull = 904,
VoidTransferInternalError = 905,
VoidTransferItemInvalid = 906,
DifficultyDisabledInLfg = 907,
VoidStorageUnique = 908,
VoidStorageLoot = 909,
VoidStorageHoliday = 910,
VoidStorageDuration = 911,
VoidStorageLoadFailed = 912,
VoidStorageInvalidItem = 913,
ParentalControlsChatMuted = 914,
SorStartExperienceIncomplete = 915,
SorInvalidEmail = 916,
SorInvalidComment = 917,
ChallengeModeResetCooldownS = 918,
ChallengeModeResetKeystone = 919,
PetJournalAlreadyInLoadout = 920,
ReportSubmittedSuccessfully = 921,
ReportSubmissionFailed = 922,
SuggestionSubmittedSuccessfully = 923,
BugSubmittedSuccessfully = 924,
ChallengeModeEnabled = 925,
ChallengeModeDisabled = 926,
PetbattleCreateFailed = 927,
PetbattleNotHere = 928,
PetbattleNotHereOnTransport = 929,
PetbattleNotHereUnevenGround = 930,
PetbattleNotHereObstructed = 931,
PetbattleNotWhileInCombat = 932,
PetbattleNotWhileDead = 933,
PetbattleNotWhileFlying = 934,
PetbattleTargetInvalid = 935,
PetbattleTargetOutOfRange = 936,
PetbattleTargetNotCapturable = 937,
PetbattleNotATrainer = 938,
PetbattleDeclined = 939,
PetbattleInBattle = 940,
PetbattleInvalidLoadout = 941,
PetbattleAllPetsDead = 942,
PetbattleNoPetsInSlots = 943,
PetbattleNoAccountLock = 944,
PetbattleWildPetTapped = 945,
PetbattleRestrictedAccount = 946,
PetbattleOpponentNotAvailable = 947,
PetbattleNotWhileInMatchedBattle = 948,
CantHaveMorePetsOfThatType = 949,
CantHaveMorePets = 950,
PvpMapNotFound = 951,
PvpMapNotSet = 952,
PetbattleQueueQueued = 953,
PetbattleQueueAlreadyQueued = 954,
PetbattleQueueJoinFailed = 955,
PetbattleQueueJournalLock = 956,
PetbattleQueueRemoved = 957,
PetbattleQueueProposalDeclined = 958,
PetbattleQueueProposalTimeout = 959,
PetbattleQueueOpponentDeclined = 960,
PetbattleQueueRequeuedInternal = 961,
PetbattleQueueRequeuedRemoved = 962,
PetbattleQueueSlotLocked = 963,
PetbattleQueueSlotEmpty = 964,
PetbattleQueueSlotNoTracker = 965,
PetbattleQueueSlotNoSpecies = 966,
PetbattleQueueSlotCantBattle = 967,
PetbattleQueueSlotRevoked = 968,
PetbattleQueueSlotDead = 969,
PetbattleQueueSlotNoPet = 970,
PetbattleQueueNotWhileNeutral = 971,
PetbattleGameTimeLimitWarning = 972,
PetbattleGameRoundsLimitWarning = 973,
HasRestriction = 974,
ItemUpgradeItemTooLowLevel = 975,
ItemUpgradeNoPath = 976,
ItemUpgradeNoMoreUpgrades = 977,
BonusRollEmpty = 978,
ChallengeModeFull = 979,
ChallengeModeInProgress = 980,
ChallengeModeIncorrectKeystone = 981,
BattletagFriendNotFound = 982,
BattletagFriendNotValid = 983,
BattletagFriendNotAllowed = 984,
BattletagFriendThrottled = 985,
BattletagFriendSuccess = 986,
PetTooHighLevelToUncage = 987,
PetbattleInternal = 988,
CantCagePetYet = 989,
NoLootInChallengeMode = 990,
QuestPetBattleVictoriesPvpIi = 991,
RoleCheckAlreadyInProgress = 992,
RecruitAFriendAccountLimit = 993,
RecruitAFriendFailed = 994,
SetLootPersonal = 995,
SetLootMethodFailedCombat = 996,
ReagentBankFull = 997,
ReagentBankLocked = 998,
GarrisonBuildingExists = 999,
GarrisonInvalidPlot = 1000,
GarrisonInvalidBuildingid = 1001,
GarrisonInvalidPlotBuilding = 1002,
GarrisonRequiresBlueprint = 1003,
GarrisonNotEnoughCurrency = 1004,
GarrisonNotEnoughGold = 1005,
GarrisonCompleteMissionWrongFollowerType = 1006,
AlreadyUsingLfgList = 1007,
RestrictedAccountLfgListTrial = 1008,
ToyUseLimitReached = 1009,
ToyAlreadyKnown = 1010,
TransmogSetAlreadyKnown = 1011,
NotEnoughCurrency = 1012,
SpecIsDisabled = 1013,
FeatureRestrictedTrial = 1014,
CantBeObliterated = 1015,
CantBeScrapped = 1016,
CantBeRecrafted = 1017,
ArtifactRelicDoesNotMatchArtifact = 1018,
MustEquipArtifact = 1019,
CantDoThatRightNow = 1020,
AffectingCombat = 1021,
EquipmentManagerCombatSwapS = 1022,
EquipmentManagerBagsFull = 1023,
EquipmentManagerMissingItemS = 1024,
MovieRecordingWarningPerf = 1025,
MovieRecordingWarningDiskFull = 1026,
MovieRecordingWarningNoMovie = 1027,
MovieRecordingWarningRequirements = 1028,
MovieRecordingWarningCompressing = 1029,
NoChallengeModeReward = 1030,
ClaimedChallengeModeReward = 1031,
ChallengeModePeriodResetSs = 1032,
CantDoThatChallengeModeActive = 1033,
TalentFailedRestArea = 1034,
CannotAbandonLastPet = 1035,
TestCvarSetSss = 1036,
QuestTurnInFailReason = 1037,
ClaimedChallengeModeRewardOld = 1038,
TalentGrantedByAura = 1039,
ChallengeModeAlreadyComplete = 1040,
GlyphTargetNotAvailable = 1041,
PvpWarmodeToggleOn = 1042,
PvpWarmodeToggleOff = 1043,
SpellFailedLevelRequirement = 1044,
SpellFailedCantFlyHere = 1045,
BattlegroundJoinRequiresLevel = 1046,
BattlegroundJoinDisqualified = 1047,
BattlegroundJoinDisqualifiedNoName = 1048,
VoiceChatGenericUnableToConnect = 1049,
VoiceChatServiceLost = 1050,
VoiceChatChannelNameTooShort = 1051,
VoiceChatChannelNameTooLong = 1052,
VoiceChatChannelAlreadyExists = 1053,
VoiceChatTargetNotFound = 1054,
VoiceChatTooManyRequests = 1055,
VoiceChatPlayerSilenced = 1056,
VoiceChatParentalDisableAll = 1057,
VoiceChatDisabled = 1058,
NoPvpReward = 1059,
ClaimedPvpReward = 1060,
AzeriteEssenceSelectionFailedEssenceNotUnlocked = 1061,
AzeriteEssenceSelectionFailedCantRemoveEssence = 1062,
AzeriteEssenceSelectionFailedConditionFailed = 1063,
AzeriteEssenceSelectionFailedRestArea = 1064,
AzeriteEssenceSelectionFailedSlotLocked = 1065,
AzeriteEssenceSelectionFailedNotAtForge = 1066,
AzeriteEssenceSelectionFailedHeartLevelTooLow = 1067,
AzeriteEssenceSelectionFailedNotEquipped = 1068,
SocketingRequiresPunchcardredGem = 1069,
SocketingPunchcardredGemOnlyInPunchcardredslot = 1070,
SocketingRequiresPunchcardyellowGem = 1071,
SocketingPunchcardyellowGemOnlyInPunchcardyellowslot = 1072,
SocketingRequiresPunchcardblueGem = 1073,
SocketingPunchcardblueGemOnlyInPunchcardblueslot = 1074,
SocketingRequiresDominationShard = 1075,
SocketingDominationShardOnlyInDominationslot = 1076,
SocketingRequiresCypherGem = 1077,
SocketingCypherGemOnlyInCypherslot = 1078,
SocketingRequiresTinkerGem = 1079,
SocketingTinkerGemOnlyInTinkerslot = 1080,
SocketingRequiresPrimordialGem = 1081,
SocketingPrimordialGemOnlyInPrimordialslot = 1082,
LevelLinkingResultLinked = 1083,
LevelLinkingResultUnlinked = 1084,
ClubFinderErrorPostClub = 1085,
ClubFinderErrorApplyClub = 1086,
ClubFinderErrorRespondApplicant = 1087,
ClubFinderErrorCancelApplication = 1088,
ClubFinderErrorTypeAcceptApplication = 1089,
ClubFinderErrorTypeNoInvitePermissions = 1090,
ClubFinderErrorTypeNoPostingPermissions = 1091,
ClubFinderErrorTypeApplicantList = 1092,
ClubFinderErrorTypeApplicantListNoPerm = 1093,
ClubFinderErrorTypeFinderNotAvailable = 1094,
ClubFinderErrorTypeGetPostingIds = 1095,
ClubFinderErrorTypeJoinApplication = 1096,
ClubFinderErrorTypeRealmNotEligible = 1097,
ClubFinderErrorTypeFlaggedRename = 1098,
ClubFinderErrorTypeFlaggedDescriptionChange = 1099,
ItemInteractionNotEnoughGold = 1100,
ItemInteractionNotEnoughCurrency = 1101,
PlayerChoiceErrorPendingChoice = 1102,
SoulbindInvalidConduit = 1103,
SoulbindInvalidConduitItem = 1104,
SoulbindInvalidTalent = 1105,
SoulbindDuplicateConduit = 1106,
ActivateSoulbindS = 1107,
ActivateSoulbindFailedRestArea = 1108,
CantUseProfanity = 1109,
NotInPetBattle = 1110,
NotInNpe = 1111,
NoSpec = 1112,
NoDominationshardOverwrite = 1113,
UseWeeklyRewardsDisabled = 1114,
CrossFactionGroupJoined = 1115,
CantTargetUnfriendlyInOverworld = 1116,
EquipablespellsSlotsFull = 1117,
ItemModAppearanceGroupAlreadyKnown = 1118,
CantBulkSellItemWithRefund = 1119,
WowLabsPartyErrorTypePartyIsFull = 1120,
WowLabsPartyErrorTypeMaxInviteSent = 1121,
WowLabsPartyErrorTypePlayerAlreadyInvited = 1122,
WowLabsPartyErrorTypePartyInviteInvalid = 1123,
WowLabsLobbyMatchmakerErrorEnterQueueFailed = 1124,
WowLabsLobbyMatchmakerErrorLeaveQueueFailed = 1125,
}
public enum SceneFlags
@@ -549,6 +549,8 @@ namespace Framework.Constants
AllowMountInCombat = 539,
ModSupportStat = 540, // NYI
ModRequiredMountCapabilityFlags = 541,
Unk542 = 542,
Unk543 = 543,
Total
}
@@ -169,7 +169,10 @@ namespace Framework.Constants
TouchingGround = 0x40000, // NYI
ChromieTime = 0x80000, // NYI
SplineFlightOrFreeFlight = 0x100000, // NYI
ProcOrPeriodicAttacking = 0x200000 // NYI
ProcOrPeriodicAttacking = 0x200000, // NYI
StartOfMythicPlusRun = 0x400000, // Implemented in Unit::AtStartOfEncounter
StartOfDungeonEncounter = 0x800000, // Implemented in Unit::AtStartOfEncounter - Similar to StartOfEncounter (but only with bosses, not m+ run or battleground)
EndOfDungeonEncounter = 0x1000000, // Implemented in Unit::AtEndOfEncounter - Similar to EndOfEncounter (but only with bosses, not m+ run or battleground)
}
// Enum with EffectRadiusIndex and their actual radius
@@ -242,11 +242,11 @@ namespace Framework.Database
// ChrClasses.db2
PrepareStatement(HotfixStatements.SEL_CHR_CLASSES, "SELECT Name, Filename, NameMale, NameFemale, PetNameToken, Description, RoleInfoString, DisabledString, " +
"HyphenatedNameMale, HyphenatedNameFemale, ID, CreateScreenFileDataID, SelectScreenFileDataID, IconFileDataID, LowResScreenFileDataID, Flags, " +
"SpellTextureBlobFileDataID, RolesMask, ArmorTypeMask, CharStartKitUnknown901, MaleCharacterCreationVisualFallback, " +
"SpellTextureBlobFileDataID, ArmorTypeMask, CharStartKitUnknown901, MaleCharacterCreationVisualFallback, " +
"MaleCharacterCreationIdleVisualFallback, FemaleCharacterCreationVisualFallback, FemaleCharacterCreationIdleVisualFallback, " +
"CharacterCreationIdleGroundVisualFallback, CharacterCreationGroundVisualFallback, AlteredFormCharacterCreationIdleVisualFallback, " +
"CharacterCreationAnimLoopWaitTimeMsFallback, CinematicSequenceID, DefaultSpec, PrimaryStatPriority, DisplayPower, " +
"RangedAttackPowerPerAgility, AttackPowerPerAgility, AttackPowerPerStrength, SpellClassSet, ClassColorR, ClassColorG, ClassColorB" +
"RangedAttackPowerPerAgility, AttackPowerPerAgility, AttackPowerPerStrength, SpellClassSet, ClassColorR, ClassColorG, ClassColorB, RolesMask" +
" FROM chr_classes WHERE (`VerifiedBuild` > 0) = ?");
PrepareStatement(HotfixStatements.SEL_CHR_CLASSES_LOCALE, "SELECT ID, Name_lang, NameMale_lang, NameFemale_lang, Description_lang, RoleInfoString_lang, " +
"DisabledString_lang, HyphenatedNameMale_lang, HyphenatedNameFemale_lang FROM chr_classes_locale WHERE (`VerifiedBuild` > 0) = ?" +
@@ -270,7 +270,7 @@ namespace Framework.Database
// ChrCustomizationElement.db2
PrepareStatement(HotfixStatements.SEL_CHR_CUSTOMIZATION_ELEMENT, "SELECT ID, ChrCustomizationChoiceID, RelatedChrCustomizationChoiceID, " +
"ChrCustomizationGeosetID, ChrCustomizationSkinnedModelID, ChrCustomizationMaterialID, ChrCustomizationBoneSetID, " +
"ChrCustomizationCondModelID, ChrCustomizationDisplayInfoID, ChrCustItemGeoModifyID, ChrCustomizationVoiceID, AnimKitID" +
"ChrCustomizationCondModelID, ChrCustomizationDisplayInfoID, ChrCustItemGeoModifyID, ChrCustomizationVoiceID, AnimKitID, ParticleColorID" +
" FROM chr_customization_element WHERE (`VerifiedBuild` > 0) = ?");
// ChrCustomizationOption.db2
@@ -376,12 +376,12 @@ namespace Framework.Database
PrepareStatement(HotfixStatements.SEL_CREATURE_FAMILY_LOCALE, "SELECT ID, Name_lang FROM creature_family_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?");
// CreatureModelData.db2
PrepareStatement(HotfixStatements.SEL_CREATURE_MODEL_DATA, "SELECT ID, GeoBox1, GeoBox2, GeoBox3, GeoBox4, GeoBox5, GeoBox6, Flags, FileDataID, BloodID, " +
"FootprintTextureID, FootprintTextureLength, FootprintTextureWidth, FootprintParticleScale, FoleyMaterialID, FootstepCameraEffectID, " +
"DeathThudCameraEffectID, SoundID, SizeClass, CollisionWidth, CollisionHeight, WorldEffectScale, CreatureGeosetDataID, HoverHeight, " +
"AttachedEffectScale, ModelScale, MissileCollisionRadius, MissileCollisionPush, MissileCollisionRaise, MountHeight, OverrideLootEffectScale, " +
"OverrideNameScale, OverrideSelectionRadius, TamedPetBaseScale, Unknown820_1, Unknown820_2, Unknown820_31, Unknown820_32" +
" FROM creature_model_data WHERE (`VerifiedBuild` > 0) = ?");
PrepareStatement(HotfixStatements.SEL_CREATURE_MODEL_DATA, "SELECT ID, GeoBox1, GeoBox2, GeoBox3, GeoBox4, GeoBox5, GeoBox6, Flags, FileDataID, WalkSpeed, " +
"RunSpeed, BloodID, FootprintTextureID, FootprintTextureLength, FootprintTextureWidth, FootprintParticleScale, FoleyMaterialID, " +
"FootstepCameraEffectID, DeathThudCameraEffectID, SoundID, SizeClass, CollisionWidth, CollisionHeight, WorldEffectScale, " +
"CreatureGeosetDataID, HoverHeight, AttachedEffectScale, ModelScale, MissileCollisionRadius, MissileCollisionPush, MissileCollisionRaise, " +
"MountHeight, OverrideLootEffectScale, OverrideNameScale, OverrideSelectionRadius, TamedPetBaseScale, Unknown820_1, Unknown820_2, " +
"Unknown820_31, Unknown820_32 FROM creature_model_data WHERE (`VerifiedBuild` > 0) = ?");
// CreatureType.db2
PrepareStatement(HotfixStatements.SEL_CREATURE_TYPE, "SELECT ID, Name, Flags FROM creature_type WHERE (`VerifiedBuild` > 0) = ?");
+1 -1
View File
@@ -283,7 +283,7 @@ public RealmBuildInfo GetBuildInfo(uint build)
addressFamily.Id = 1;
var address = new Address();
address.Ip = realm.GetAddressForClient(clientAddress).Address.ToString();
address.Ip = realm.GetAddressForClient(clientAddress).ToString();
address.Port = realm.Port;
addressFamily.Addresses.Add(address);
serverAddresses.Families.Add(addressFamily);
+2 -2
View File
@@ -354,7 +354,7 @@ namespace Game.BattleGrounds
{
Player player = Global.ObjAccessor.FindPlayer(guid);
if (player != null)
player.AtStartOfEncounter();
player.AtStartOfEncounter(EncounterType.Battleground);
}
// Remove preparation
@@ -805,7 +805,7 @@ namespace Game.BattleGrounds
player.RemoveAura(BattlegroundConst.SpellMercenaryShapeshift);
player.RemovePlayerFlagEx(PlayerFlagsEx.MercenaryMode);
player.AtEndOfEncounter();
player.AtEndOfEncounter(EncounterType.Battleground);
player.RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2.LeaveArenaOrBattleground);
@@ -270,20 +270,25 @@ namespace Game.DataStorage
public void LoadAreaTriggerSpawns()
{
// build single time for check spawnmask
MultiMap<uint, Difficulty> spawnMasks = new();
foreach (var mapDifficulty in CliDB.MapDifficultyStorage.Values)
spawnMasks.Add(mapDifficulty.MapID, (Difficulty)mapDifficulty.DifficultyID);
uint oldMSTime = Time.GetMSTime();
// Load area trigger positions (to put them on the server)
// 0 1 2 3 4 5 6 7 8 9 10
SQLResult templates = DB.World.Query("SELECT SpawnId, AreaTriggerId, IsServerSide, MapId, PosX, PosY, PosZ, Orientation, PhaseUseFlags, PhaseId, PhaseGroup, " +
//11 12 13 14 15 16 17 18 19 20
"Shape, ShapeData0, ShapeData1, ShapeData2, ShapeData3, ShapeData4, ShapeData5, ShapeData6, ShapeData7, ScriptName FROM `areatrigger`");
if (!templates.IsEmpty())
// 0 1 2 3 4 5 6 7 8 9 10 11
SQLResult result = DB.World.Query("SELECT SpawnId, AreaTriggerId, IsServerSide, MapId, SpawnDifficulties, PosX, PosY, PosZ, Orientation, PhaseUseFlags, PhaseId, PhaseGroup, " +
//12 13 14 15 16 17 18 19 20 21 22
"Shape, ShapeData0, ShapeData1, ShapeData2, ShapeData3, ShapeData4, ShapeData5, ShapeData6, ShapeData7, SpellForVisuals, ScriptName FROM `areatrigger`");
if (!result.IsEmpty())
{
do
{
ulong spawnId = templates.Read<ulong>(0);
AreaTriggerId areaTriggerId = new(templates.Read<uint>(1), templates.Read<byte>(2) == 1);
WorldLocation location = new(templates.Read<uint>(3), templates.Read<float>(4), templates.Read<float>(5), templates.Read<float>(6), templates.Read<float>(7));
AreaTriggerTypes shape = (AreaTriggerTypes)templates.Read<byte>(11);
ulong spawnId = result.Read<ulong>(0);
AreaTriggerId areaTriggerId = new(result.Read<uint>(1), result.Read<byte>(2) == 1);
WorldLocation location = new(result.Read<uint>(3), result.Read<float>(5), result.Read<float>(6), result.Read<float>(7), result.Read<float>(8));
AreaTriggerTypes shape = (AreaTriggerTypes)result.Read<byte>(12);
if (GetAreaTriggerTemplate(areaTriggerId) == null)
{
@@ -303,36 +308,60 @@ namespace Game.DataStorage
continue;
}
var difficulties = Global.ObjectMgr.ParseSpawnDifficulties(result.Read<string>(4), "areatrigger", spawnId, location.GetMapId(), spawnMasks[location.GetMapId()]);
if (difficulties.Empty())
{
Log.outDebug(LogFilter.Sql, $"Table `areatrigger` has areatrigger (GUID: {spawnId}) that is not spawned in any difficulty, skipped.");
continue;
}
AreaTriggerSpawn spawn = new();
spawn.SpawnId = spawnId;
spawn.MapId = location.GetMapId();
spawn.TriggerId = areaTriggerId;
spawn.SpawnPoint = new Position(location);
spawn.PhaseUseFlags = (PhaseUseFlagsValues)templates.Read<byte>(8);
spawn.PhaseId = templates.Read<uint>(9);
spawn.PhaseGroup = templates.Read<uint>(10);
spawn.PhaseUseFlags = (PhaseUseFlagsValues)result.Read<byte>(9);
spawn.PhaseId = result.Read<uint>(10);
spawn.PhaseGroup = result.Read<uint>(11);
spawn.Shape.TriggerType = shape;
unsafe
{
for (var i = 0; i < SharedConst.MaxAreatriggerEntityData; ++i)
spawn.Shape.DefaultDatas.Data[i] = templates.Read<float>(12 + i);
spawn.Shape.DefaultDatas.Data[i] = result.Read<float>(13 + i);
}
spawn.ScriptId = Global.ObjectMgr.GetScriptId(templates.Read<string>(20));
if (!result.IsNull(21))
{
spawn.SpellForVisuals = result.Read<uint>(21);
if (!Global.SpellMgr.HasSpellInfo(spawn.SpellForVisuals.Value, Difficulty.None))
{
Log.outError(LogFilter.Sql, $"Table `areatrigger` has listed areatrigger SpawnId: {spawnId} with invalid SpellForVisual {spawn.SpellForVisuals}, set to none.");
spawn.SpellForVisuals = null;
}
}
spawn.ScriptId = Global.ObjectMgr.GetScriptId(result.Read<string>(22));
spawn.spawnGroupData = Global.ObjectMgr.GetLegacySpawnGroup();
// Add the trigger to a map::cell map, which is later used by GridLoader to query
CellCoord cellCoord = GridDefines.ComputeCellCoord(spawn.SpawnPoint.GetPositionX(), spawn.SpawnPoint.GetPositionY());
if (!_areaTriggerSpawnsByLocation.ContainsKey((spawn.MapId, cellCoord.GetId())))
_areaTriggerSpawnsByLocation[(spawn.MapId, cellCoord.GetId())] = new SortedSet<ulong>();
_areaTriggerSpawnsByLocation[(spawn.MapId, cellCoord.GetId())].Add(spawnId);
foreach (Difficulty difficulty in difficulties)
{
if (!_areaTriggerSpawnsByLocation.ContainsKey((spawn.MapId, difficulty)))
_areaTriggerSpawnsByLocation[(spawn.MapId, difficulty)] = new Dictionary<uint, SortedSet<ulong>>();
if (!_areaTriggerSpawnsByLocation[(spawn.MapId, difficulty)].ContainsKey(cellCoord.GetId()))
_areaTriggerSpawnsByLocation[(spawn.MapId, difficulty)][cellCoord.GetId()] = new SortedSet<ulong>();
_areaTriggerSpawnsByLocation[(spawn.MapId, difficulty)][cellCoord.GetId()].Add(spawnId);
}
// add the position to the map
_areaTriggerSpawnsBySpawnId[spawnId] = spawn;
} while (templates.NextRow());
} while (result.NextRow());
}
Log.outInfo(LogFilter.ServerLoading, $"Loaded {_areaTriggerSpawnsBySpawnId.Count} areatrigger spawns in {Time.GetMSTimeDiffToNow(oldMSTime)} ms.");
@@ -348,9 +377,13 @@ namespace Game.DataStorage
return _areaTriggerCreateProperties.LookupByKey(spellMiscValue);
}
public SortedSet<ulong> GetAreaTriggersForMapAndCell(uint mapId, uint cellId)
public SortedSet<ulong> GetAreaTriggersForMapAndCell(uint mapId, Difficulty difficulty, uint cellId)
{
return _areaTriggerSpawnsByLocation.LookupByKey((mapId, cellId));
var atForMapAndDifficulty = _areaTriggerSpawnsByLocation.LookupByKey((mapId, difficulty));
if (atForMapAndDifficulty != null)
return atForMapAndDifficulty.LookupByKey(cellId);
return null;
}
public AreaTriggerSpawn GetAreaTriggerSpawn(ulong spawnId)
@@ -358,7 +391,7 @@ namespace Game.DataStorage
return _areaTriggerSpawnsBySpawnId.LookupByKey(spawnId);
}
Dictionary<(uint mapId, uint cellId), SortedSet<ulong>> _areaTriggerSpawnsByLocation = new();
Dictionary<(uint, Difficulty), Dictionary<uint, SortedSet<ulong>>> _areaTriggerSpawnsByLocation = new();
Dictionary<ulong, AreaTriggerSpawn> _areaTriggerSpawnsBySpawnId = new();
Dictionary<AreaTriggerId, AreaTriggerTemplate> _areaTriggerTemplateStore = new();
Dictionary<uint, AreaTriggerCreateProperties> _areaTriggerCreateProperties = new();
+7 -1
View File
@@ -34,7 +34,13 @@ namespace Game.DataStorage
DB6Storage<T> ReadDB2<T>(string fileName, HotfixStatements preparedStatement, HotfixStatements preparedStatementLocale = 0) where T : new()
{
DB6Storage<T> storage = new();
storage.LoadData($"{db2Path}/{defaultLocale}/{fileName}");
if (!storage.LoadData($"{db2Path}/{defaultLocale}/{fileName}"))
{
Log.outError(LogFilter.ServerLoading, "Error loading DB2 files");
Environment.Exit(1);
return null;
}
storage.LoadHotfixData(availableDb2Locales, preparedStatement, preparedStatementLocale);
Global.DB2Mgr.AddDB2(storage.GetTableHash(), storage);
@@ -32,12 +32,12 @@ namespace Game.DataStorage
WDCHeader _header;
string _tableName = typeof(T).Name;
public void LoadData(string fullFileName)
public bool LoadData(string fullFileName)
{
if (!File.Exists(fullFileName))
{
Log.outError(LogFilter.ServerLoading, $"File {fullFileName} not found.");
return;
return false;
}
DBReader reader = new();
@@ -46,7 +46,7 @@ namespace Game.DataStorage
if (!reader.Load(stream))
{
Log.outError(LogFilter.ServerLoading, $"Error loading {fullFileName}.");
return;
return false;
}
}
@@ -54,6 +54,8 @@ namespace Game.DataStorage
foreach (var b in reader.Records)
Add((uint)b.Key, b.Value.As<T>());
return true;
}
public void LoadHotfixData(BitSet availableDb2Locales, HotfixStatements preparedStatement, HotfixStatements preparedStatementLocale)
+4 -1
View File
@@ -92,7 +92,6 @@ namespace Game.DataStorage
public uint LowResScreenFileDataID;
public int Flags;
public uint SpellTextureBlobFileDataID;
public uint RolesMask;
public uint ArmorTypeMask;
public int CharStartKitUnknown901;
public int MaleCharacterCreationVisualFallback;
@@ -114,6 +113,7 @@ namespace Game.DataStorage
public byte ClassColorR;
public byte ClassColorG;
public byte ClassColorB;
public byte RolesMask;
}
public sealed class ChrClassesXPowerTypesRecord
@@ -161,6 +161,7 @@ namespace Game.DataStorage
public int ChrCustItemGeoModifyID;
public int ChrCustomizationVoiceID;
public int AnimKitID;
public int ParticleColorID;
}
public sealed class ChrCustomizationOptionRecord
@@ -481,6 +482,8 @@ namespace Game.DataStorage
public float[] GeoBox = new float[6];
public uint Flags;
public uint FileDataID;
public float WalkSpeed;
public float RunSpeed;
public uint BloodID;
public uint FootprintTextureID;
public float FootprintTextureLength;
+7 -1
View File
@@ -95,7 +95,13 @@ namespace Game.DataStorage
public bool IsDynamicDifficultyMap() { return GetFlags().HasFlag(MapFlags.DynamicDifficulty); }
public bool IsFlexLocking() { return GetFlags().HasFlag(MapFlags.FlexibleRaidLocking); }
public bool IsGarrison() { return GetFlags().HasFlag(MapFlags.Garrison); }
public bool IsSplitByFaction() { return Id == 609 || Id == 2175 || Id == 2570; }
public bool IsSplitByFaction()
{
return Id == 609 || // Acherus (DeathKnight Start)
Id == 1265 || // Assault on the Dark Portal (WoD Intro)
Id == 2175 || // Exiles Reach - NPE
Id == 2570; // Forbidden Reach (Dracthyr/Evoker Start)
}
public MapFlags GetFlags() { return (MapFlags)Flags[0]; }
public MapFlags2 GetFlags2() { return (MapFlags2)Flags[1]; }
+26 -13
View File
@@ -246,13 +246,26 @@ namespace Game.Entities
SetEntry(areaTriggerTemplate.Id.Id);
SetObjectScale(1.0f);
SetDuration(-1);
SetUpdateFieldValue(m_areaTriggerData.ModifyValue(m_areaTriggerData.BoundsRadius2D), GetMaxSearchRadius());
SetUpdateFieldValue(m_areaTriggerData.ModifyValue(m_areaTriggerData.DecalPropertiesID), 24u); // blue decal, for .debug areatrigger visibility
if (position.SpellForVisuals.HasValue)
{
SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(position.SpellForVisuals.Value, Difficulty.None);
SetUpdateFieldValue(m_areaTriggerData.ModifyValue(m_areaTriggerData.SpellForVisuals), position.SpellForVisuals.Value);
ScaleCurve extraScaleCurve = m_areaTriggerData.ModifyValue(m_areaTriggerData.ExtraScaleCurve);
SetUpdateFieldValue(extraScaleCurve.ModifyValue(extraScaleCurve.ParameterCurve), (uint)1.0000001f);
SetUpdateFieldValue(extraScaleCurve.ModifyValue(extraScaleCurve.OverrideActive), true);
SpellCastVisualField spellCastVisual = m_areaTriggerData.ModifyValue(m_areaTriggerData.SpellVisual);
SetUpdateFieldValue(ref spellCastVisual.SpellXSpellVisualID, spellInfo.GetSpellXSpellVisualId());
SetUpdateFieldValue(ref spellCastVisual.ScriptVisualID, 0u);
}
if (IsServerSide())
SetUpdateFieldValue(m_areaTriggerData.ModifyValue(m_areaTriggerData.DecalPropertiesID), 24u); // blue decal, for .debug areatrigger visibility
SetScaleCurve(m_areaTriggerData.ModifyValue(m_areaTriggerData.ExtraScaleCurve), new AreaTriggerScaleCurveTemplate());
VisualAnim visualAnim = m_areaTriggerData.ModifyValue(m_areaTriggerData.VisualAnim);
SetUpdateFieldValue(visualAnim.ModifyValue(visualAnim.AnimationDataID), -1);
_shape = position.Shape;
_maxSearchRadius = _shape.GetMaxSearchRadius();
@@ -289,16 +302,16 @@ namespace Game.Entities
}
else
UpdateSplinePosition(diff);
}
if (GetDuration() != -1)
if (GetDuration() != -1)
{
if (GetDuration() > diff)
_UpdateDuration((int)(_duration - diff));
else
{
if (GetDuration() > diff)
_UpdateDuration((int)(_duration - diff));
else
{
Remove(); // expired
return;
}
Remove(); // expired
return;
}
}
@@ -368,7 +381,7 @@ namespace Game.Entities
SetUpdateFieldValue(scaleCurve.ModifyValue(scaleCurve.OverrideActive), true);
SetUpdateFieldValue(scaleCurve.ModifyValue(scaleCurve.StartTimeOffset), curve.StartTimeOffset);
Position point = null;
Position point = new Position();
// ParameterCurve packing information
// (not_using_points & 1) | ((interpolation_mode & 0x7) << 1) | ((first_point_offset & 0xFFFFF) << 4) | ((point_count & 0xFF) << 24)
// if not_using_points is set then the entire field is simply read as a float (ignoring that lowest bit)
@@ -292,6 +292,7 @@ namespace Game.Entities
{
public AreaTriggerId TriggerId;
public AreaTriggerShapeInfo Shape = new();
public uint? SpellForVisuals;
public AreaTriggerSpawn() : base(SpawnObjectType.AreaTrigger) { }
}
+32 -16
View File
@@ -1315,10 +1315,11 @@ namespace Game.Entities
CreatureData data = Global.ObjectMgr.NewOrExistCreatureData(m_spawnId);
uint displayId = GetNativeDisplayId();
ulong npcflag = ((ulong)m_unitData.NpcFlags[1] << 32) | m_unitData.NpcFlags[0];
uint unitFlags = m_unitData.Flags;
uint unitFlags2 = m_unitData.Flags2;
uint unitFlags3 = m_unitData.Flags3;
ulong spawnNpcFlags = ((ulong)m_unitData.NpcFlags[1] << 32) | m_unitData.NpcFlags[0];
ulong? npcflag = null;
uint? unitFlags = null;
uint? unitFlags2 = null;
uint? unitFlags3 = null;
// check if it's a custom model and if not, use 0 for displayId
CreatureTemplate cinfo = GetCreatureTemplate();
@@ -1328,17 +1329,17 @@ namespace Game.Entities
if (displayId != 0 && displayId == model.CreatureDisplayID)
displayId = 0;
if (npcflag == (uint)cinfo.Npcflag)
npcflag = 0;
if (spawnNpcFlags != cinfo.Npcflag)
npcflag = spawnNpcFlags;
if (unitFlags == (uint)cinfo.UnitFlags)
unitFlags = 0;
if (m_unitData.Flags == (uint)cinfo.UnitFlags)
unitFlags = m_unitData.Flags;
if (unitFlags2 == cinfo.UnitFlags2)
unitFlags2 = 0;
if (m_unitData.Flags2 == cinfo.UnitFlags2)
unitFlags2 = m_unitData.Flags2;
if (unitFlags3 == cinfo.UnitFlags3)
unitFlags3 = 0;
if (m_unitData.Flags3 == cinfo.UnitFlags3)
unitFlags3 = m_unitData.Flags3;
}
if (data.SpawnId == 0)
@@ -1408,10 +1409,25 @@ namespace Game.Entities
stmt.AddValue(index++, GetHealth());
stmt.AddValue(index++, GetPower(PowerType.Mana));
stmt.AddValue(index++, (byte)GetDefaultMovementType());
stmt.AddValue(index++, npcflag);
stmt.AddValue(index++, unitFlags);
stmt.AddValue(index++, unitFlags2);
stmt.AddValue(index++, unitFlags3);
if (npcflag.HasValue)
stmt.AddValue(index++, npcflag.Value);
else
stmt.AddNull(index++);
if (unitFlags.HasValue)
stmt.AddValue(index++, unitFlags.Value);
else
stmt.AddNull(index++);
if (unitFlags2.HasValue)
stmt.AddValue(index++, unitFlags2.Value);
else
stmt.AddNull(index++);
if (unitFlags3.HasValue)
stmt.AddValue(index++, unitFlags3.Value);
else
stmt.AddNull(index++);
trans.Append(stmt);
DB.World.CommitTransaction(trans);
@@ -266,10 +266,10 @@ namespace Game.Entities
public uint curhealth;
public uint curmana;
public byte movementType;
public ulong npcflag;
public uint unit_flags; // enum UnitFlags mask values
public uint unit_flags2; // enum UnitFlags2 mask values
public uint unit_flags3; // enum UnitFlags3 mask values
public ulong? npcflag;
public uint? unit_flags; // enum UnitFlags mask values
public uint? unit_flags2; // enum UnitFlags2 mask values
public uint? unit_flags3; // enum UnitFlags3 mask values
public CreatureData() : base(SpawnObjectType.Creature) { }
}
+10 -3
View File
@@ -716,7 +716,7 @@ namespace Game.Entities
loot?.Update();
// Non-consumable chest was partially looted and restock time passed, restock all loot now
if (GetGoInfo().Chest.consumable == 0 && GetGoInfo().Chest.chestRestockTime != 0 && GameTime.GetGameTime() >= m_restockTime)
if (GetGoInfo().Chest.consumable == 0 && m_restockTime != 0 && GameTime.GetGameTime() >= m_restockTime)
{
m_restockTime = 0;
m_lootState = LootState.Ready;
@@ -2361,7 +2361,11 @@ namespace Game.Entities
if (info == null)
return;
if (!user.IsPlayer())
Player player = user.ToPlayer();
if (player == null)
return;
if (!player.CanUseBattlegroundObject(this))
return;
GameObjectType.NewFlag newFlag = (GameObjectType.NewFlag)m_goTypeImpl;
@@ -2384,12 +2388,15 @@ namespace Game.Entities
if (!user.IsPlayer())
return;
if (!user.IsAlive())
return;
GameObject owner = GetMap().GetGameObject(GetOwnerGUID());
if (owner != null)
{
if (owner.GetGoType() == GameObjectTypes.NewFlag)
{
GameObjectType.NewFlag newFlag = (GameObjectType.NewFlag)m_goTypeImpl;
GameObjectType.NewFlag newFlag = (GameObjectType.NewFlag)owner.m_goTypeImpl;
if (newFlag == null)
return;
@@ -47,187 +47,187 @@ namespace Game.Entities
[FieldOffset(64)]
public uint ScriptId;
[FieldOffset(68)]
[FieldOffset(72)]
public string StringId;
[FieldOffset(72)]
[FieldOffset(80)]
public door Door;
[FieldOffset(72)]
[FieldOffset(80)]
public button Button;
[FieldOffset(72)]
[FieldOffset(80)]
public questgiver QuestGiver;
[FieldOffset(72)]
[FieldOffset(80)]
public chest Chest;
[FieldOffset(72)]
[FieldOffset(80)]
public binder Binder;
[FieldOffset(72)]
[FieldOffset(80)]
public generic Generic;
[FieldOffset(72)]
[FieldOffset(80)]
public trap Trap;
[FieldOffset(72)]
[FieldOffset(80)]
public chair Chair;
[FieldOffset(72)]
[FieldOffset(80)]
public spellFocus SpellFocus;
[FieldOffset(72)]
[FieldOffset(80)]
public text Text;
[FieldOffset(72)]
[FieldOffset(80)]
public goober Goober;
[FieldOffset(72)]
[FieldOffset(80)]
public transport Transport;
[FieldOffset(72)]
[FieldOffset(80)]
public areadamage AreaDamage;
[FieldOffset(72)]
[FieldOffset(80)]
public camera Camera;
[FieldOffset(72)]
[FieldOffset(80)]
public moTransport MoTransport;
[FieldOffset(72)]
[FieldOffset(80)]
public duelflag DuelFlag;
[FieldOffset(72)]
[FieldOffset(80)]
public fishingnode FishingNode;
[FieldOffset(72)]
[FieldOffset(80)]
public ritual Ritual;
[FieldOffset(72)]
[FieldOffset(80)]
public mailbox MailBox;
[FieldOffset(72)]
[FieldOffset(80)]
public guardpost GuardPost;
[FieldOffset(72)]
[FieldOffset(80)]
public spellcaster SpellCaster;
[FieldOffset(72)]
[FieldOffset(80)]
public meetingstone MeetingStone;
[FieldOffset(72)]
[FieldOffset(80)]
public flagstand FlagStand;
[FieldOffset(72)]
[FieldOffset(80)]
public fishinghole FishingHole;
[FieldOffset(72)]
[FieldOffset(80)]
public flagdrop FlagDrop;
[FieldOffset(72)]
[FieldOffset(80)]
public controlzone ControlZone;
[FieldOffset(72)]
[FieldOffset(80)]
public auraGenerator AuraGenerator;
[FieldOffset(72)]
[FieldOffset(80)]
public dungeonDifficulty DungeonDifficulty;
[FieldOffset(72)]
[FieldOffset(80)]
public barberChair BarberChair;
[FieldOffset(72)]
[FieldOffset(80)]
public destructiblebuilding DestructibleBuilding;
[FieldOffset(72)]
[FieldOffset(80)]
public guildbank GuildBank;
[FieldOffset(72)]
[FieldOffset(80)]
public trapDoor TrapDoor;
[FieldOffset(72)]
[FieldOffset(80)]
public newflag NewFlag;
[FieldOffset(72)]
[FieldOffset(80)]
public newflagdrop NewFlagDrop;
[FieldOffset(72)]
[FieldOffset(80)]
public garrisonbuilding GarrisonBuilding;
[FieldOffset(72)]
[FieldOffset(80)]
public garrisonplot GarrisonPlot;
[FieldOffset(72)]
[FieldOffset(80)]
public clientcreature ClientCreature;
[FieldOffset(72)]
[FieldOffset(80)]
public clientitem ClientItem;
[FieldOffset(72)]
[FieldOffset(80)]
public capturepoint CapturePoint;
[FieldOffset(72)]
[FieldOffset(80)]
public phaseablemo PhaseableMO;
[FieldOffset(72)]
[FieldOffset(80)]
public garrisonmonument GarrisonMonument;
[FieldOffset(72)]
[FieldOffset(80)]
public garrisonshipment GarrisonShipment;
[FieldOffset(72)]
[FieldOffset(80)]
public garrisonmonumentplaque GarrisonMonumentPlaque;
[FieldOffset(72)]
[FieldOffset(80)]
public itemforge ItemForge;
[FieldOffset(72)]
[FieldOffset(80)]
public uilink UILink;
[FieldOffset(72)]
[FieldOffset(80)]
public keystonereceptacle KeystoneReceptacle;
[FieldOffset(72)]
[FieldOffset(80)]
public gatheringnode GatheringNode;
[FieldOffset(72)]
[FieldOffset(80)]
public challengemodereward ChallengeModeReward;
[FieldOffset(72)]
[FieldOffset(80)]
public multi Multi;
[FieldOffset(72)]
[FieldOffset(80)]
public siegeableMulti SiegeableMulti;
[FieldOffset(72)]
[FieldOffset(80)]
public siegeableMO SiegeableMO;
[FieldOffset(72)]
[FieldOffset(80)]
public pvpReward PvpReward;
[FieldOffset(72)]
[FieldOffset(80)]
public playerchoicechest PlayerChoiceChest;
[FieldOffset(72)]
[FieldOffset(80)]
public legendaryforge LegendaryForge;
[FieldOffset(72)]
[FieldOffset(80)]
public garrtalenttree GarrTalentTree;
[FieldOffset(72)]
[FieldOffset(80)]
public weeklyrewardchest WeeklyRewardChest;
[FieldOffset(72)]
[FieldOffset(80)]
public clientmodel ClientModel;
[FieldOffset(72)]
[FieldOffset(80)]
public craftingTable CraftingTable;
[FieldOffset(72)]
[FieldOffset(80)]
public raw Raw;
[FieldOffset(208)]
[FieldOffset(224)]
public QueryGameObjectResponse QueryData;
// helpers
File diff suppressed because it is too large Load Diff
+5 -1
View File
@@ -2638,9 +2638,13 @@ namespace Game.Entities
if (IsFriendlyTo(target) || target.IsFriendlyTo(this))
return false;
Player playerAffectingAttacker = unit != null && unit.HasUnitFlag(UnitFlags.PlayerControlled) ? GetAffectingPlayer() : go != null ? GetAffectingPlayer() : null;
Player playerAffectingAttacker = (unit != null && unit.HasUnitFlag(UnitFlags.PlayerControlled)) || go != null ? GetAffectingPlayer() : null;
Player playerAffectingTarget = unitTarget != null && unitTarget.HasUnitFlag(UnitFlags.PlayerControlled) ? unitTarget.GetAffectingPlayer() : null;
// Pets of mounted players are immune to NPCs
if (playerAffectingAttacker == null && unitTarget != null && unitTarget.IsPet() && playerAffectingTarget != null && playerAffectingTarget.IsMounted())
return false;
// Not all neutral creatures can be attacked (even some unfriendly faction does not react aggresive to you, like Sporaggar)
if ((playerAffectingAttacker && !playerAffectingTarget) || (!playerAffectingAttacker && playerAffectingTarget))
{
+9 -7
View File
@@ -176,6 +176,8 @@ namespace Game.Entities
return false;
}
owner.SetTemporaryUnsummonedPetNumber(0);
Map map = owner.GetMap();
ulong guid = map.GenerateLowGuid(HighGuid.Pet);
@@ -290,9 +292,6 @@ namespace Game.Entities
Cypher.Assert(activePetIndex != -1);
// Check that we either have no pet (unsummoned by player) or it matches temporarily unsummoned pet by server (for example on flying mount)
Cypher.Assert(!petStable.CurrentPetIndex.HasValue || petStable.CurrentPetIndex == activePetIndex);
petStable.SetCurrentActivePetIndex((uint)activePetIndex);
}
@@ -384,6 +383,9 @@ namespace Game.Entities
}
}
if (owner.IsMounted())
owner.DisablePetControlsOnMount(ReactStates.Passive, CommandStates.Follow);
// must be after SetMinion (owner guid check)
LoadTemplateImmunities();
m_loading = false;
@@ -458,7 +460,7 @@ namespace Game.Entities
string actionBar = GenerateActionBarData();
Cypher.Assert(owner.GetPetStable().GetCurrentPet() != null && owner.GetPetStable().GetCurrentPet().PetNumber == GetCharmInfo().GetPetNumber());
FillPetInfo(owner.GetPetStable().GetCurrentPet());
FillPetInfo(owner.GetPetStable().GetCurrentPet(), owner.GetTemporaryPetReactState());
stmt = CharacterDatabase.GetPreparedStatement(CharStatements.INS_PET);
stmt.AddValue(0, GetCharmInfo().GetPetNumber());
@@ -467,7 +469,7 @@ namespace Game.Entities
stmt.AddValue(3, GetNativeDisplayId());
stmt.AddValue(4, GetLevel());
stmt.AddValue(5, m_unitData.PetExperience);
stmt.AddValue(6, (byte)GetReactState());
stmt.AddValue(6, (byte)owner.GetTemporaryPetReactState().GetValueOrDefault(GetReactState()));
stmt.AddValue(7, (owner.GetPetStable().GetCurrentActivePetIndex().HasValue ? (short)owner.GetPetStable().GetCurrentActivePetIndex().Value : (short)PetSaveMode.NotInSlot));
stmt.AddValue(8, GetName());
stmt.AddValue(9, HasPetFlag(UnitPetFlags.CanBeRenamed) ? 0 : 1);
@@ -492,14 +494,14 @@ namespace Game.Entities
}
}
public void FillPetInfo(PetStable.PetInfo petInfo)
public void FillPetInfo(PetStable.PetInfo petInfo, ReactStates? forcedReactState = null)
{
petInfo.PetNumber = GetCharmInfo().GetPetNumber();
petInfo.CreatureId = GetEntry();
petInfo.DisplayId = GetNativeDisplayId();
petInfo.Level = (byte)GetLevel();
petInfo.Experience = m_unitData.PetExperience;
petInfo.ReactState = GetReactState();
petInfo.ReactState = forcedReactState.GetValueOrDefault(GetReactState());
petInfo.Name = GetName();
petInfo.WasRenamed = !HasPetFlag(UnitPetFlags.CanBeRenamed);
petInfo.Health = (uint)GetHealth();
@@ -122,6 +122,7 @@ namespace Game.Entities
PetStable m_petStable;
public List<PetAura> m_petAuras = new();
uint m_temporaryUnsummonedPetNumber;
ReactStates? m_temporaryPetReactState;
uint m_lastpetnumber;
// Player summoning
+28 -7
View File
@@ -35,9 +35,9 @@ namespace Game.Entities
return nearMembers[randTarget];
}
public PartyResult CanUninviteFromGroup(ObjectGuid guidMember = default)
public PartyResult CanUninviteFromGroup(ObjectGuid guidMember, byte? partyIndex)
{
Group grp = GetGroup();
Group grp = GetGroup(partyIndex);
if (!grp)
return PartyResult.NotInGroup;
@@ -58,7 +58,7 @@ namespace Game.Entities
return PartyResult.PartyLfgBootDungeonComplete;
Player player = Global.ObjAccessor.FindConnectedPlayer(guidMember);
if (!player.m_lootRolls.Empty())
if (player != null && !player.m_lootRolls.Empty())
return PartyResult.PartyLfgBootLootRolls;
// @todo Should also be sent when anyone has recently left combat, with an aprox ~5 seconds timer.
@@ -150,6 +150,23 @@ namespace Game.Entities
return false;
}
public Group GetGroup(byte? partyIndex)
{
Group group = GetGroup();
if (!partyIndex.HasValue)
return group;
GroupCategory category = (GroupCategory)partyIndex;
if (group != null && group.GetGroupCategory() == category)
return group;
Group originalGroup = GetOriginalGroup();
if (originalGroup && originalGroup.GetGroupCategory() == category)
return originalGroup;
return null;
}
public void SetGroup(Group group, byte subgroup = 0)
{
@@ -167,10 +184,7 @@ namespace Game.Entities
public void SetPartyType(GroupCategory category, GroupType type)
{
Cypher.Assert(category < GroupCategory.Max);
byte value = m_playerData.PartyType;
value &= (byte)~((byte)0xFF << ((byte)category * 4));
value |= (byte)((byte)type << ((byte)category * 4));
SetUpdateFieldValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.PartyType), value);
SetUpdateFieldValue(ref m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.PartyType, (int)category), (byte)type);
}
public void ResetGroupUpdateSequenceIfNeeded(Group group)
@@ -207,12 +221,19 @@ namespace Game.Entities
}
public Group GetGroupInvite() { return m_groupInvite; }
public void SetGroupInvite(Group group) { m_groupInvite = group; }
public Group GetGroup() { return m_group.GetTarget(); }
public GroupReference GetGroupRef() { return m_group; }
public byte GetSubGroup() { return m_group.GetSubGroup(); }
public GroupUpdateFlags GetGroupUpdateFlag() { return m_groupUpdateMask; }
public void SetGroupUpdateFlag(GroupUpdateFlags flag) { m_groupUpdateMask |= flag; }
public void RemoveGroupUpdateFlag(GroupUpdateFlags flag) { m_groupUpdateMask &= ~flag; }
public Group GetOriginalGroup() { return m_originalGroup.GetTarget(); }
+54 -5
View File
@@ -109,8 +109,8 @@ namespace Game.Entities
m_questObjectiveCriteriaMgr = new QuestObjectiveCriteriaManager(this);
m_sceneMgr = new SceneMgr(this);
m_bgBattlegroundQueueID[0] = new BgBattlegroundQueueID_Rec();
m_bgBattlegroundQueueID[1] = new BgBattlegroundQueueID_Rec();
for (var i = 0; i < SharedConst.MaxPlayerBGQueues; ++i)
m_bgBattlegroundQueueID[i] = new BgBattlegroundQueueID_Rec();
m_bgData = new BGData();
@@ -1057,6 +1057,55 @@ namespace Game.Entities
public void SetLastPetNumber(uint petnumber) { m_lastpetnumber = petnumber; }
public uint GetTemporaryUnsummonedPetNumber() { return m_temporaryUnsummonedPetNumber; }
public void SetTemporaryUnsummonedPetNumber(uint petnumber) { m_temporaryUnsummonedPetNumber = petnumber; }
public ReactStates? GetTemporaryPetReactState() { return m_temporaryPetReactState; }
public void DisablePetControlsOnMount(ReactStates reactState, CommandStates commandState)
{
Pet pet = GetPet();
if (pet == null)
return;
m_temporaryPetReactState = pet.GetReactState();
pet.SetReactState(reactState);
CharmInfo charmInfo = pet.GetCharmInfo();
if (charmInfo != null)
charmInfo.SetCommandState(commandState);
pet.GetMotionMaster().MoveFollow(this, SharedConst.PetFollowDist, pet.GetFollowAngle());
PetMode petMode = new();
petMode.PetGUID = pet.GetGUID();
petMode.ReactState = reactState;
petMode.CommandState = commandState;
petMode.Flag = 0;
SendPacket(petMode);
}
public void EnablePetControlsOnDismount()
{
Pet pet = GetPet();
if (pet != null)
{
PetMode petMode = new();
petMode.PetGUID = pet.GetGUID();
if (m_temporaryPetReactState.HasValue)
{
petMode.ReactState = m_temporaryPetReactState.Value;
pet.SetReactState(m_temporaryPetReactState.Value);
}
CharmInfo charmInfo = pet.GetCharmInfo();
if (charmInfo != null)
petMode.CommandState = charmInfo.GetCommandState();
petMode.Flag = 0;
SendPacket(petMode);
}
m_temporaryPetReactState = null;
}
public void UnsummonPetTemporaryIfAny()
{
Pet pet = GetPet();
@@ -1091,7 +1140,7 @@ namespace Game.Entities
public bool IsPetNeedBeTemporaryUnsummoned()
{
return !IsInWorld || !IsAlive() || IsMounted();
return !IsInWorld || !IsAlive() || HasUnitMovementFlag(MovementFlag.Flying) || HasExtraUnitMovementFlag2(MovementFlags3.AdvFlying);
}
public void SendRemoveControlBar()
@@ -6400,8 +6449,8 @@ namespace Game.Entities
public void SendSellError(SellResult msg, Creature creature, ObjectGuid guid)
{
SellResponse sellResponse = new();
sellResponse.VendorGUID = (creature ? creature.GetGUID() : ObjectGuid.Empty);
sellResponse.ItemGUID = guid;
sellResponse.VendorGUID = creature ? creature.GetGUID() : ObjectGuid.Empty;
sellResponse.ItemGUIDs.Add(guid);
sellResponse.Reason = msg;
SendPacket(sellResponse);
}
+1 -1
View File
@@ -175,7 +175,7 @@ namespace Game.Entities
m_lifetime = duration;
if (m_type == TempSummonType.ManualDespawn)
m_type = (duration == TimeSpan.Zero) ? TempSummonType.DeadDespawn : TempSummonType.TimedDespawn;
m_type = (duration <= TimeSpan.Zero) ? TempSummonType.DeadDespawn : TempSummonType.TimedDespawn;
if (summoner != null && summoner.IsPlayer())
{
+4 -31
View File
@@ -1430,23 +1430,8 @@ namespace Game.Entities
}
}
// unsummon pet
Pet pet = player.GetPet();
if (pet != null)
{
Battleground bg = ToPlayer().GetBattleground();
// don't unsummon pet in arena but SetFlag UNIT_FLAG_STUNNED to disable pet's interface
if (bg && bg.IsArena())
pet.SetUnitFlag(UnitFlags.Stunned);
else
player.UnsummonPetTemporaryIfAny();
}
// if we have charmed npc, stun him also (everywhere)
Unit charm = player.GetCharmed();
if (charm)
if (charm.GetTypeId() == TypeId.Unit)
charm.SetUnitFlag(UnitFlags.Stunned);
// disable pet controls
player.DisablePetControlsOnMount(ReactStates.Passive, CommandStates.Follow);
player.SendMovementSetCollisionHeight(player.GetCollisionHeight(), UpdateCollisionHeightReason.Mount);
}
@@ -1483,20 +1468,8 @@ namespace Game.Entities
Player player = ToPlayer();
if (player != null)
{
Pet pPet = player.GetPet();
if (pPet != null)
{
if (pPet.HasUnitFlag(UnitFlags.Stunned) && !pPet.HasUnitState(UnitState.Stunned))
pPet.RemoveUnitFlag(UnitFlags.Stunned);
}
else
player.ResummonPetTemporaryUnSummonedIfAny();
// if we have charmed npc, remove stun also
Unit charm = player.GetCharmed();
if (charm)
if (charm.GetTypeId() == TypeId.Unit && charm.HasUnitFlag(UnitFlags.Stunned) && !charm.HasUnitState(UnitState.Stunned))
charm.RemoveUnitFlag(UnitFlags.Stunned);
player.EnablePetControlsOnDismount();
player.ResummonPetTemporaryUnSummonedIfAny();
}
}
+23 -2
View File
@@ -589,18 +589,39 @@ namespace Game.Entities
return GetTransport();
}
public void AtStartOfEncounter()
public void AtStartOfEncounter(EncounterType type)
{
RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2.StartOfEncounter);
switch (type)
{
case EncounterType.DungeonEncounter:
RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2.StartOfDungeonEncounter);
break;
case EncounterType.MythicPlusRun:
RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2.StartOfMythicPlusRun);
break;
default:
break;
}
if (IsAlive())
Unit.ProcSkillsAndAuras(this, null, new ProcFlagsInit(ProcFlags.EncounterStart), new ProcFlagsInit(), ProcFlagsSpellType.MaskAll, ProcFlagsSpellPhase.None, ProcFlagsHit.None, null, null, null);
}
public void AtEndOfEncounter()
public void AtEndOfEncounter(EncounterType type)
{
RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2.EndOfEncounter);
switch (type)
{
case EncounterType.DungeonEncounter:
RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2.EndOfDungeonEncounter);
break;
default:
break;
}
GetSpellHistory().ResetCooldowns(pair =>
{
SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(pair.Key, Difficulty.None);
+9
View File
@@ -188,6 +188,15 @@ namespace Game.Entities
// We just remove the aura and the unapply handler will make the target leave the vehicle.
// We don't need to iterate over Seats
_me.RemoveAurasByType(AuraType.ControlVehicle);
// Aura script might cause the vehicle to be despawned in the middle of handling SPELL_AURA_CONTROL_VEHICLE removal
// In that case, aura effect has already been unregistered but passenger may still be found in Seats
foreach (var (_, seat) in Seats)
{
Unit passenger = Global.ObjAccessor.GetUnit(_me, seat.Passenger.Guid);
if (passenger != null)
passenger._ExitVehicle();
}
}
public bool HasEmptySeat(sbyte seatId)
+35 -21
View File
@@ -106,10 +106,10 @@ namespace Game
public static void ChooseCreatureFlags(CreatureTemplate cInfo, out ulong npcFlag, out uint unitFlags, out uint unitFlags2, out uint unitFlags3, CreatureData data = null)
{
npcFlag = data != null && data.npcflag != 0 ? data.npcflag : cInfo.Npcflag;
unitFlags = data != null && data.unit_flags != 0 ? data.unit_flags : (uint)cInfo.UnitFlags;
unitFlags2 = data != null && data.unit_flags2 != 0 ? data.unit_flags2 : cInfo.UnitFlags2;
unitFlags3 = data != null && data.unit_flags3 != 0 ? data.unit_flags3 : cInfo.UnitFlags3;
npcFlag = data != null && data.npcflag.HasValue ? data.npcflag.Value : cInfo.Npcflag;
unitFlags = data != null && data.unit_flags.HasValue ? data.unit_flags.Value : (uint)cInfo.UnitFlags;
unitFlags2 = data != null && data.unit_flags2.HasValue ? data.unit_flags2.Value : cInfo.UnitFlags2;
unitFlags3 = data != null && data.unit_flags3.HasValue ? data.unit_flags3.Value : cInfo.UnitFlags3;
}
public static ResponseCodes CheckPlayerName(string name, Locale locale, bool create = false)
@@ -3519,10 +3519,15 @@ namespace Game
data.SpawnDifficulties = ParseSpawnDifficulties(result.Read<string>(15), "creature", guid, data.MapId, spawnMasks.LookupByKey(data.MapId));
short gameEvent = result.Read<short>(16);
data.poolId = result.Read<uint>(17);
data.npcflag = result.Read<ulong>(18);
data.unit_flags = result.Read<uint>(19);
data.unit_flags2 = result.Read<uint>(20);
data.unit_flags3 = result.Read<uint>(21);
if (!result.IsNull(18))
data.npcflag = result.Read<ulong>(18);
if (!result.IsNull(19))
data.unit_flags = result.Read<uint>(19);
if (!result.IsNull(20))
data.unit_flags2 = result.Read<uint>(20);
if (!result.IsNull(21))
data.unit_flags3 = result.Read<uint>(21);
data.PhaseUseFlags = (PhaseUseFlagsValues)result.Read<byte>(22);
data.PhaseId = result.Read<uint>(23);
@@ -3636,25 +3641,34 @@ namespace Game
}
}
uint disallowedUnitFlags = (uint)(cInfo.UnitFlags & ~UnitFlags.Allowed);
if (disallowedUnitFlags != 0)
if (data.unit_flags.HasValue)
{
Log.outError(LogFilter.Sql, $"Table `creature_template` lists creature (Entry: {cInfo.Entry}) with disallowed `unit_flags` {disallowedUnitFlags}, removing incorrect flag.");
cInfo.UnitFlags &= UnitFlags.Allowed;
uint disallowedUnitFlags = (data.unit_flags.Value & ~(uint)UnitFlags.Allowed);
if (disallowedUnitFlags != 0)
{
Log.outError(LogFilter.Sql, $"Table `creature_template` lists creature (Entry: {cInfo.Entry}) with disallowed `unit_flags` {disallowedUnitFlags}, removing incorrect flag.");
data.unit_flags = data.unit_flags & (uint)UnitFlags.Allowed;
}
}
uint disallowedUnitFlags2 = (cInfo.UnitFlags2 & ~(uint)UnitFlags2.Allowed);
if (disallowedUnitFlags2 != 0)
if (data.unit_flags2.HasValue)
{
Log.outError(LogFilter.Sql, $"Table `creature_template` lists creature (Entry: {cInfo.Entry}) with disallowed `unit_flags2` {disallowedUnitFlags2}, removing incorrect flag.");
cInfo.UnitFlags2 &= (uint)UnitFlags2.Allowed;
uint disallowedUnitFlags2 = (data.unit_flags2.Value & ~(uint)UnitFlags2.Allowed);
if (disallowedUnitFlags2 != 0)
{
Log.outError(LogFilter.Sql, $"Table `creature_template` lists creature (Entry: {cInfo.Entry}) with disallowed `unit_flags2` {disallowedUnitFlags2}, removing incorrect flag.");
data.unit_flags2 = data.unit_flags2 & (uint)UnitFlags2.Allowed;
}
}
uint disallowedUnitFlags3 = (cInfo.UnitFlags3 & ~(uint)UnitFlags3.Allowed);
if (disallowedUnitFlags3 != 0)
if (data.unit_flags3.HasValue)
{
Log.outError(LogFilter.Sql, $"Table `creature_template` lists creature (Entry: {cInfo.Entry}) with disallowed `unit_flags2` {disallowedUnitFlags3}, removing incorrect flag.");
cInfo.UnitFlags3 &= (uint)UnitFlags3.Allowed;
uint disallowedUnitFlags3 = (data.unit_flags3.Value & ~(uint)UnitFlags3.Allowed);
if (disallowedUnitFlags3 != 0)
{
Log.outError(LogFilter.Sql, $"Table `creature_template` lists creature (Entry: {cInfo.Entry}) with disallowed `unit_flags2` {disallowedUnitFlags3}, removing incorrect flag.");
data.unit_flags3 = data.unit_flags3 & (uint)UnitFlags3.Allowed;
}
}
if (WorldConfig.GetBoolValue(WorldCfg.CalculateCreatureZoneAreaData))
@@ -4798,7 +4812,7 @@ namespace Game
goInfo.entry, goInfo.type, N, dataN);
}
List<Difficulty> ParseSpawnDifficulties(string difficultyString, string table, ulong spawnId, uint mapId, List<Difficulty> mapDifficulties)
public List<Difficulty> ParseSpawnDifficulties(string difficultyString, string table, ulong spawnId, uint mapId, List<Difficulty> mapDifficulties)
{
List<Difficulty> difficulties = new();
StringArray tokens = new(difficultyString, ',');
+55 -17
View File
@@ -141,7 +141,7 @@ namespace Game.Groups
stmt.AddValue(index++, m_targetIcons[5].GetRawValue());
stmt.AddValue(index++, m_targetIcons[6].GetRawValue());
stmt.AddValue(index++, m_targetIcons[7].GetRawValue());
stmt.AddValue(index++, (byte)m_groupFlags);
stmt.AddValue(index++, (ushort)m_groupFlags);
stmt.AddValue(index++, (byte)m_dungeonDifficulty);
stmt.AddValue(index++, (byte)m_raidDifficulty);
stmt.AddValue(index++, (byte)m_legacyRaidDifficulty);
@@ -181,7 +181,7 @@ namespace Game.Groups
for (byte i = 0; i < MapConst.TargetIconsCount; ++i)
m_targetIcons[i].SetRawValue(field.Read<byte[]>(4 + i));
m_groupFlags = (GroupFlags)field.Read<byte>(12);
m_groupFlags = (GroupFlags)field.Read<ushort>(12);
if (m_groupFlags.HasAnyFlag(GroupFlags.Raid))
_initRaidSubGroupsCounter();
@@ -210,6 +210,9 @@ namespace Game.Groups
return;
}
if (m_groupFlags.HasFlag(GroupFlags.EveryoneAssistant))
memberFlags |= (byte)GroupMemberFlags.Assistant;
member.name = character.Name;
member.race = character.RaceId;
member._class = (byte)character.ClassId;
@@ -234,7 +237,7 @@ namespace Game.Groups
{
PreparedStatement stmt = CharacterDatabase.GetPreparedStatement(CharStatements.UPD_GROUP_TYPE);
stmt.AddValue(0, (byte)m_groupFlags);
stmt.AddValue(0, (ushort)m_groupFlags);
stmt.AddValue(1, m_dbStoreId);
DB.Characters.Execute(stmt);
@@ -253,7 +256,7 @@ namespace Game.Groups
{
PreparedStatement stmt = CharacterDatabase.GetPreparedStatement(CharStatements.UPD_GROUP_TYPE);
stmt.AddValue(0, (byte)m_groupFlags);
stmt.AddValue(0, (ushort)m_groupFlags);
stmt.AddValue(1, m_dbStoreId);
DB.Characters.Execute(stmt);
@@ -275,7 +278,7 @@ namespace Game.Groups
if (m_memberSlots.Count > 5)
return; // What message error should we send?
m_groupFlags = GroupFlags.None;
m_groupFlags &= ~GroupFlags.Raid;
m_subGroupsCounts = null;
@@ -283,7 +286,7 @@ namespace Game.Groups
{
PreparedStatement stmt = CharacterDatabase.GetPreparedStatement(CharStatements.UPD_GROUP_TYPE);
stmt.AddValue(0, (byte)m_groupFlags);
stmt.AddValue(0, (ushort)m_groupFlags);
stmt.AddValue(1, m_dbStoreId);
DB.Characters.Execute(stmt);
@@ -631,7 +634,7 @@ namespace Game.Groups
}
}
public void ChangeLeader(ObjectGuid newLeaderGuid, sbyte partyIndex = 0)
public void ChangeLeader(ObjectGuid newLeaderGuid)
{
var slot = _getMemberSlot(newLeaderGuid);
if (slot == null)
@@ -673,7 +676,7 @@ namespace Game.Groups
GroupNewLeader groupNewLeader = new();
groupNewLeader.Name = m_leaderName;
groupNewLeader.PartyIndex = partyIndex;
groupNewLeader.PartyIndex = (sbyte)GetGroupCategory();
BroadcastPacket(groupNewLeader, true);
}
@@ -743,7 +746,7 @@ namespace Game.Groups
Global.GroupMgr.RemoveGroup(this);
}
public void SetTargetIcon(byte symbol, ObjectGuid target, ObjectGuid changedBy, sbyte partyIndex)
public void SetTargetIcon(byte symbol, ObjectGuid target, ObjectGuid changedBy)
{
if (symbol >= MapConst.TargetIconsCount)
return;
@@ -752,25 +755,25 @@ namespace Game.Groups
if (!target.IsEmpty())
for (byte i = 0; i < MapConst.TargetIconsCount; ++i)
if (m_targetIcons[i] == target)
SetTargetIcon(i, ObjectGuid.Empty, changedBy, partyIndex);
SetTargetIcon(i, ObjectGuid.Empty, changedBy);
m_targetIcons[symbol] = target;
SendRaidTargetUpdateSingle updateSingle = new();
updateSingle.PartyIndex = partyIndex;
updateSingle.PartyIndex = (sbyte)GetGroupCategory();
updateSingle.Target = target;
updateSingle.ChangedBy = changedBy;
updateSingle.Symbol = (sbyte)symbol;
BroadcastPacket(updateSingle, true);
}
public void SendTargetIconList(WorldSession session, sbyte partyIndex)
public void SendTargetIconList(WorldSession session)
{
if (session == null)
return;
SendRaidTargetUpdateAll updateAll = new();
updateAll.PartyIndex = partyIndex;
updateAll.PartyIndex = (sbyte)GetGroupCategory();
for (byte i = 0; i < MapConst.TargetIconsCount; i++)
updateAll.TargetIcons.Add(i, m_targetIcons[i]);
@@ -1435,7 +1438,7 @@ namespace Game.Groups
EndReadyCheck();
}
public void StartReadyCheck(ObjectGuid starterGuid, sbyte partyIndex, TimeSpan duration)
public void StartReadyCheck(ObjectGuid starterGuid, TimeSpan duration)
{
if (m_readyCheckStarted)
return;
@@ -1453,7 +1456,7 @@ namespace Game.Groups
ReadyCheckStarted readyCheckStarted = new();
readyCheckStarted.PartyGUID = m_guid;
readyCheckStarted.PartyIndex = partyIndex;
readyCheckStarted.PartyIndex = (sbyte)GetGroupCategory();
readyCheckStarted.InitiatorGUID = starterGuid;
readyCheckStarted.Duration = (uint)duration.TotalMilliseconds;
BroadcastPacket(readyCheckStarted, false);
@@ -1554,11 +1557,11 @@ namespace Game.Groups
SendRaidMarkersChanged();
}
public void SendRaidMarkersChanged(WorldSession session = null, sbyte partyIndex = 0)
public void SendRaidMarkersChanged(WorldSession session = null)
{
RaidMarkersChanged packet = new();
packet.PartyIndex = partyIndex;
packet.PartyIndex = (sbyte)GetGroupCategory();
packet.ActiveMarkers = m_activeMarkers;
for (byte i = 0; i < MapConst.RaidMarkersCount; i++)
@@ -1843,6 +1846,41 @@ namespace Game.Groups
foreach (MemberSlot member in m_memberSlots)
ToggleGroupMemberFlag(member, GroupMemberFlags.Assistant, apply);
if (!IsBGGroup() && !IsBFGroup())
{
PreparedStatement stmt = CharacterDatabase.GetPreparedStatement(CharStatements.UPD_GROUP_TYPE);
stmt.AddValue(0, (ushort)m_groupFlags);
stmt.AddValue(1, m_dbStoreId);
DB.Characters.Execute(stmt);
}
SendUpdate();
}
public bool IsRestrictPingsToAssistants()
{
return m_groupFlags.HasFlag(GroupFlags.RestrictPings);
}
public void SetRestrictPingsToAssistants(bool restrictPingsToAssistants)
{
if (restrictPingsToAssistants)
m_groupFlags |= GroupFlags.RestrictPings;
else
m_groupFlags &= ~GroupFlags.RestrictPings;
if (!IsBGGroup() && !IsBFGroup())
{
PreparedStatement stmt = CharacterDatabase.GetPreparedStatement(CharStatements.UPD_GROUP_TYPE);
stmt.AddValue(0, (ushort)m_groupFlags);
stmt.AddValue(1, m_dbStoreId);
DB.Characters.Execute(stmt);
}
SendUpdate();
}
+131 -46
View File
@@ -82,17 +82,11 @@ namespace Game
return;
}
Group group = invitingPlayer.GetGroup();
if (group != null && group.IsBGGroup())
group = invitingPlayer.GetOriginalGroup();
Group group = invitingPlayer.GetGroup(packet.PartyIndex);
if (group == null)
group = invitingPlayer.GetGroupInvite();
Group group2 = invitedPlayer.GetGroup();
if (group2 != null && group2.IsBGGroup())
group2 = invitedPlayer.GetOriginalGroup();
Group group2 = invitedPlayer.GetGroup(packet.PartyIndex);
PartyInvite partyInvite;
// player already in another group or invited
if (group2 || invitedPlayer.GetGroupInvite())
@@ -161,7 +155,10 @@ namespace Game
void HandlePartyInviteResponse(PartyInviteResponse packet)
{
Group group = GetPlayer().GetGroupInvite();
if (!group)
if (group == null)
return;
if (packet.PartyIndex != 0 && group.GetGroupCategory() != (GroupCategory)packet.PartyIndex)
return;
if (packet.Accept)
@@ -235,14 +232,14 @@ namespace Game
return;
}
PartyResult res = GetPlayer().CanUninviteFromGroup(packet.TargetGUID);
PartyResult res = GetPlayer().CanUninviteFromGroup(packet.TargetGUID, packet.PartyIndex);
if (res != PartyResult.Ok)
{
SendPartyResult(PartyOperation.UnInvite, "", res);
return;
}
Group grp = GetPlayer().GetGroup();
Group grp = GetPlayer().GetGroup(packet.PartyIndex);
// grp is checked already above in CanUninviteFromGroup()
Cypher.Assert(grp);
@@ -265,7 +262,7 @@ namespace Game
void HandleSetPartyLeader(SetPartyLeader packet)
{
Player player = Global.ObjAccessor.FindConnectedPlayer(packet.TargetGUID);
Group group = GetPlayer().GetGroup();
Group group = GetPlayer().GetGroup(packet.PartyIndex);
if (!group || !player)
return;
@@ -274,7 +271,7 @@ namespace Game
return;
// Everything's fine, accepted.
group.ChangeLeader(packet.TargetGUID, packet.PartyIndex);
group.ChangeLeader(packet.TargetGUID);
group.SendUpdate();
}
@@ -283,12 +280,12 @@ namespace Game
{
RoleChangedInform roleChangedInform = new();
Group group = GetPlayer().GetGroup();
Group group = GetPlayer().GetGroup(packet.PartyIndex);
byte oldRole = (byte)(group ? group.GetLfgRoles(packet.TargetGUID) : 0);
if (oldRole == packet.Role)
return;
roleChangedInform.PartyIndex = packet.PartyIndex;
roleChangedInform.PartyIndex = (byte)group.GetGroupCategory();
roleChangedInform.From = GetPlayer().GetGUID();
roleChangedInform.ChangedUnit = packet.TargetGUID;
roleChangedInform.OldRole = oldRole;
@@ -306,7 +303,7 @@ namespace Game
[WorldPacketHandler(ClientOpcodes.LeaveGroup)]
void HandleLeaveGroup(LeaveGroup packet)
{
Group grp = GetPlayer().GetGroup();
Group grp = GetPlayer().GetGroup(packet.PartyIndex);
Group grpInvite = GetPlayer().GetGroupInvite();
if (grp == null && grpInvite == null)
return;
@@ -338,7 +335,7 @@ namespace Game
{
// not allowed to change
/*
Group group = GetPlayer().GetGroup();
Group group = GetPlayer().GetGroup(packet.PartyIndex);
if (!group)
return;
@@ -376,14 +373,15 @@ namespace Game
[WorldPacketHandler(ClientOpcodes.MinimapPing)]
void HandleMinimapPing(MinimapPingClient packet)
{
if (!GetPlayer().GetGroup())
Group group = GetPlayer().GetGroup(packet.PartyIndex);
if (group == null)
return;
MinimapPing minimapPing = new();
minimapPing.Sender = GetPlayer().GetGUID();
minimapPing.PositionX = packet.PositionX;
minimapPing.PositionY = packet.PositionY;
GetPlayer().GetGroup().BroadcastPacket(minimapPing, true, -1, GetPlayer().GetGUID());
group.BroadcastPacket(minimapPing, true, -1, GetPlayer().GetGUID());
}
[WorldPacketHandler(ClientOpcodes.RandomRoll)]
@@ -398,12 +396,12 @@ namespace Game
[WorldPacketHandler(ClientOpcodes.UpdateRaidTarget)]
void HandleUpdateRaidTarget(UpdateRaidTarget packet)
{
Group group = GetPlayer().GetGroup();
if (!group)
Group group = GetPlayer().GetGroup(packet.PartyIndex);
if (group == null)
return;
if (packet.Symbol == -1) // target icon request
group.SendTargetIconList(this, packet.PartyIndex);
group.SendTargetIconList(this);
else // target icon update
{
if (group.IsRaidGroup() && !group.IsLeader(GetPlayer().GetGUID()) && !group.IsAssistant(GetPlayer().GetGUID()))
@@ -416,7 +414,7 @@ namespace Game
return;
}
group.SetTargetIcon((byte)packet.Symbol, packet.Target, GetPlayer().GetGUID(), packet.PartyIndex);
group.SetTargetIcon((byte)packet.Symbol, packet.Target, GetPlayer().GetGUID());
}
}
@@ -447,20 +445,20 @@ namespace Game
[WorldPacketHandler(ClientOpcodes.RequestPartyJoinUpdates)]
void HandleRequestPartyJoinUpdates(RequestPartyJoinUpdates packet)
{
Group group = GetPlayer().GetGroup();
if (!group)
Group group = GetPlayer().GetGroup(packet.PartyIndex);
if (group == null)
return;
group.SendTargetIconList(this, packet.PartyIndex);
group.SendRaidMarkersChanged(this, packet.PartyIndex);
group.SendTargetIconList(this);
group.SendRaidMarkersChanged(this);
}
[WorldPacketHandler(ClientOpcodes.ChangeSubGroup, Processing = PacketProcessing.ThreadUnsafe)]
void HandleChangeSubGroup(ChangeSubGroup packet)
{
// we will get correct for group here, so we don't have to check if group is BG raid
Group group = GetPlayer().GetGroup();
if (!group)
Group group = GetPlayer().GetGroup(packet.PartyIndex);
if (group == null)
return;
if (packet.NewSubGroup >= MapConst.MaxRaidSubGroups)
@@ -479,8 +477,8 @@ namespace Game
[WorldPacketHandler(ClientOpcodes.SwapSubGroups, Processing = PacketProcessing.ThreadUnsafe)]
void HandleSwapSubGroups(SwapSubGroups packet)
{
Group group = GetPlayer().GetGroup();
if (!group)
Group group = GetPlayer().GetGroup(packet.PartyIndex);
if (group == null)
return;
ObjectGuid senderGuid = GetPlayer().GetGUID();
@@ -493,8 +491,8 @@ namespace Game
[WorldPacketHandler(ClientOpcodes.SetAssistantLeader)]
void HandleSetAssistantLeader(SetAssistantLeader packet)
{
Group group = GetPlayer().GetGroup();
if (!group)
Group group = GetPlayer().GetGroup(packet.PartyIndex);
if (group == null)
return;
if (!group.IsLeader(GetPlayer().GetGUID()))
@@ -506,8 +504,8 @@ namespace Game
[WorldPacketHandler(ClientOpcodes.SetPartyAssignment)]
void HandleSetPartyAssignment(SetPartyAssignment packet)
{
Group group = GetPlayer().GetGroup();
if (!group)
Group group = GetPlayer().GetGroup(packet.PartyIndex);
if (group == null)
return;
ObjectGuid senderGuid = GetPlayer().GetGUID();
@@ -532,8 +530,8 @@ namespace Game
[WorldPacketHandler(ClientOpcodes.DoReadyCheck)]
void HandleDoReadyCheckOpcode(DoReadyCheck packet)
{
Group group = GetPlayer().GetGroup();
if (!group)
Group group = GetPlayer().GetGroup(packet.PartyIndex);
if (group == null)
return;
/** error handling **/
@@ -541,14 +539,14 @@ namespace Game
return;
// everything's fine, do it
group.StartReadyCheck(GetPlayer().GetGUID(), packet.PartyIndex, TimeSpan.FromMilliseconds(MapConst.ReadycheckDuration));
group.StartReadyCheck(GetPlayer().GetGUID(), TimeSpan.FromMilliseconds(MapConst.ReadycheckDuration));
}
[WorldPacketHandler(ClientOpcodes.ReadyCheckResponse, Processing = PacketProcessing.Inplace)]
void HandleReadyCheckResponseOpcode(ReadyCheckResponseClient packet)
{
Group group = GetPlayer().GetGroup();
if (!group)
Group group = GetPlayer().GetGroup(packet.PartyIndex);
if (group == null)
return;
// everything's fine, do it
@@ -596,8 +594,8 @@ namespace Game
[WorldPacketHandler(ClientOpcodes.InitiateRolePoll)]
void HandleInitiateRolePoll(InitiateRolePoll packet)
{
Group group = GetPlayer().GetGroup();
if (!group)
Group group = GetPlayer().GetGroup(packet.PartyIndex);
if (group == null)
return;
ObjectGuid guid = GetPlayer().GetGUID();
@@ -606,15 +604,15 @@ namespace Game
RolePollInform rolePollInform = new();
rolePollInform.From = guid;
rolePollInform.PartyIndex = packet.PartyIndex;
rolePollInform.PartyIndex = (sbyte)group.GetGroupCategory();
group.BroadcastPacket(rolePollInform, true);
}
[WorldPacketHandler(ClientOpcodes.SetEveryoneIsAssistant)]
void HandleSetEveryoneIsAssistant(SetEveryoneIsAssistant packet)
{
Group group = GetPlayer().GetGroup();
if (!group)
Group group = GetPlayer().GetGroup(packet.PartyIndex);
if (group == null)
return;
if (!group.IsLeader(GetPlayer().GetGUID()))
@@ -627,7 +625,7 @@ namespace Game
void HandleClearRaidMarker(ClearRaidMarker packet)
{
Group group = GetPlayer().GetGroup();
if (!group)
if (group == null)
return;
if (group.IsRaidGroup() && !group.IsLeader(GetPlayer().GetGUID()) && !group.IsAssistant(GetPlayer().GetGUID()))
@@ -635,5 +633,92 @@ namespace Game
group.DeleteRaidMarker(packet.MarkerId);
}
bool CanSendPing(Player player, PingSubjectType type, ref Group group)
{
if (type >= PingSubjectType.Max)
return false;
if (!player.GetSession().CanSpeak())
return false;
group = player.GetGroup();
if (!group)
return false;
if (group.IsRestrictPingsToAssistants() && !group.IsLeader(player.GetGUID()) && !group.IsAssistant(player.GetGUID()))
return false;
return true;
}
[WorldPacketHandler(ClientOpcodes.SetRestrictPingsToAssistants)]
void HandleSetRestrictPingsToAssistants(SetRestrictPingsToAssistants setRestrictPingsToAssistants)
{
Group group = GetPlayer().GetGroup(setRestrictPingsToAssistants.PartyIndex);
if (!group)
return;
if (!group.IsLeader(GetPlayer().GetGUID()))
return;
group.SetRestrictPingsToAssistants(setRestrictPingsToAssistants.RestrictPingsToAssistants);
}
[WorldPacketHandler(ClientOpcodes.SendPingUnit)]
void HandleSendPingUnit(SendPingUnit pingUnit)
{
Group group = null;
if (!CanSendPing(_player, pingUnit.Type, ref group))
return;
Unit target = Global.ObjAccessor.GetUnit(_player, pingUnit.TargetGUID);
if (!target || !_player.HaveAtClient(target))
return;
ReceivePingUnit broadcastPingUnit = new();
broadcastPingUnit.SenderGUID = _player.GetGUID();
broadcastPingUnit.TargetGUID = pingUnit.TargetGUID;
broadcastPingUnit.Type = pingUnit.Type;
broadcastPingUnit.PinFrameID = pingUnit.PinFrameID;
broadcastPingUnit.Write();
for (GroupReference itr = group.GetFirstMember(); itr != null; itr = itr.Next())
{
Player member = itr.GetSource();
if (_player == member || !_player.IsInMap(member))
continue;
member.SendPacket(broadcastPingUnit);
}
}
[WorldPacketHandler(ClientOpcodes.SendPingWorldPoint)]
void HandleSendPingWorldPoint(SendPingWorldPoint pingWorldPoint)
{
Group group = null;
if (!CanSendPing(_player, pingWorldPoint.Type, ref group))
return;
if (_player.GetMapId() != pingWorldPoint.MapID)
return;
ReceivePingWorldPoint broadcastPingWorldPoint = new();
broadcastPingWorldPoint.SenderGUID = _player.GetGUID();
broadcastPingWorldPoint.MapID = pingWorldPoint.MapID;
broadcastPingWorldPoint.Point = pingWorldPoint.Point;
broadcastPingWorldPoint.Type = pingWorldPoint.Type;
broadcastPingWorldPoint.PinFrameID = pingWorldPoint.PinFrameID;
broadcastPingWorldPoint.Write();
for (GroupReference itr = group.GetFirstMember(); itr != null; itr = itr.Next())
{
Player member = itr.GetSource();
if (_player == member || !_player.IsInMap(member))
continue;
member.SendPacket(broadcastPingWorldPoint);
}
}
}
}
+10
View File
@@ -38,6 +38,16 @@ namespace Game
if (v.Value != PlayerSpellState.Removed)
inspectResult.Talents.Add((ushort)v.Key);
}
var pvpTalents = player.GetPvpTalentMap(player.GetActiveTalentGroup());
for (int i = 0; i < pvpTalents.Length; ++i)
inspectResult.PvpTalents[i] = (ushort)pvpTalents[i];
inspectResult.TalentTraits.Level = (int)player.GetLevel();
inspectResult.TalentTraits.ChrSpecializationID = (int)player.GetPrimarySpecialization();
TraitConfig traitConfig = player.GetTraitConfig((int)(uint)player.m_activePlayerData.ActiveCombatTraitConfigID);
if (traitConfig != null)
inspectResult.TalentTraits.Config = new TraitConfigPacket(traitConfig);
}
Guild guild = Global.GuildMgr.GetGuildById(player.GetGuildId());
+2 -2
View File
@@ -265,7 +265,7 @@ namespace Game
foreach (var dungeonId in updateData.dungeons)
lfgUpdateStatus.Slots.Add(Global.LFGMgr.GetLFGDungeonEntry(dungeonId));
lfgUpdateStatus.RequestedRoles = (uint)Global.LFGMgr.GetRoles(_player.GetGUID());
lfgUpdateStatus.RequestedRoles = (byte)Global.LFGMgr.GetRoles(_player.GetGUID());
//lfgUpdateStatus.SuspendedPlayers;
lfgUpdateStatus.IsParty = party;
lfgUpdateStatus.NotifyUI = true;
@@ -480,7 +480,7 @@ namespace Game
foreach (var pair in proposal.players)
{
var proposalPlayer = new LFGProposalUpdatePlayer();
proposalPlayer.Roles = (uint)pair.Value.role;
proposalPlayer.Roles = (byte)pair.Value.role;
proposalPlayer.Me = (pair.Key == playerGuid);
proposalPlayer.MyParty = !pair.Value.group.IsEmpty() && pair.Value.group == proposal.group;
proposalPlayer.SameParty = !pair.Value.group.IsEmpty() && pair.Value.group == guildGuid;
+3
View File
@@ -138,6 +138,9 @@ namespace Game
if (opcode == ClientOpcodes.MoveFallLand || opcode == ClientOpcodes.MoveStartSwim || opcode == ClientOpcodes.MoveSetFly)
mover.RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags.LandingOrFlight); // Parachutes
if (opcode == ClientOpcodes.MoveSetFly || opcode == ClientOpcodes.MoveSetAdvFly)
_player.UnsummonPetTemporaryIfAny(); // always do the pet removal on current client activeplayer only
movementInfo.Guid = mover.GetGUID();
movementInfo.Time = AdjustClientMovementTime(movementInfo.Time);
mover.m_movementInfo = movementInfo;
+3
View File
@@ -40,6 +40,9 @@ namespace Game
[WorldPacketHandler(ClientOpcodes.PetAction)]
void HandlePetAction(PetAction packet)
{
if (_player.IsMounted())
return;
ObjectGuid guid1 = packet.PetGUID; //pet guid
ObjectGuid guid2 = packet.TargetGUID; //tag guid
+3 -3
View File
@@ -366,14 +366,14 @@ namespace Game.Maps
InitializeCombatResurrections(1, resInterval);
SendEncounterStart(1, 9, resInterval, resInterval);
instance.DoOnPlayers(player => player.AtStartOfEncounter());
instance.DoOnPlayers(player => player.AtStartOfEncounter(EncounterType.DungeonEncounter));
break;
}
case EncounterState.Fail:
ResetCombatResurrections();
SendEncounterEnd();
instance.DoOnPlayers(player => player.AtEndOfEncounter());
instance.DoOnPlayers(player => player.AtEndOfEncounter(EncounterType.DungeonEncounter));
break;
case EncounterState.Done:
ResetCombatResurrections();
@@ -385,7 +385,7 @@ namespace Game.Maps
SendBossKillCredit(dungeonEncounter.Id);
}
instance.DoOnPlayers(player => player.AtEndOfEncounter());
instance.DoOnPlayers(player => player.AtEndOfEncounter(EncounterType.DungeonEncounter));
break;
default:
break;
+1 -1
View File
@@ -120,7 +120,7 @@ namespace Game.Maps
public override void Visit(IList<AreaTrigger> objs)
{
CellCoord cellCoord = i_cell.GetCellCoord();
SortedSet<ulong> areaTriggers = Global.AreaTriggerDataStorage.GetAreaTriggersForMapAndCell(i_map.GetId(), cellCoord.GetId());
SortedSet<ulong> areaTriggers = Global.AreaTriggerDataStorage.GetAreaTriggersForMapAndCell(i_map.GetId(), i_map.GetDifficultyID(), cellCoord.GetId());
if (areaTriggers == null)
return;
+15 -20
View File
@@ -5,32 +5,32 @@ using Framework.Constants;
using System.Runtime.InteropServices;
namespace Game.Miscellaneous
{
{
public struct RaceMask
{
public static RaceMask<ulong> AllPlayable = new RaceMask<ulong>(
public static RaceMask<ulong> AllPlayable = new RaceMask<ulong>((ulong)(
RaceMask<ulong>.GetMaskForRace(Race.Human) | RaceMask<ulong>.GetMaskForRace(Race.Orc) | RaceMask<ulong>.GetMaskForRace(Race.Dwarf) | RaceMask<ulong>.GetMaskForRace(Race.NightElf) |
RaceMask<ulong>.GetMaskForRace(Race.Undead) | RaceMask<ulong>.GetMaskForRace(Race.Tauren) | RaceMask<ulong>.GetMaskForRace(Race.Gnome) | RaceMask<ulong>.GetMaskForRace(Race.Troll) |
RaceMask<ulong>.GetMaskForRace(Race.BloodElf) | RaceMask<ulong>.GetMaskForRace(Race.Draenei) | RaceMask<ulong>.GetMaskForRace(Race.Goblin) | RaceMask<ulong>.GetMaskForRace(Race.Worgen) |
RaceMask<ulong>.GetMaskForRace(Race.PandarenNeutral) | RaceMask<ulong>.GetMaskForRace(Race.PandarenAlliance) | RaceMask<ulong>.GetMaskForRace(Race.PandarenHorde) | RaceMask<ulong>.GetMaskForRace(Race.Nightborne) |
RaceMask<ulong>.GetMaskForRace(Race.HighmountainTauren) | RaceMask<ulong>.GetMaskForRace(Race.VoidElf) | RaceMask<ulong>.GetMaskForRace(Race.LightforgedDraenei) | RaceMask<ulong>.GetMaskForRace(Race.ZandalariTroll) |
RaceMask<ulong>.GetMaskForRace(Race.KulTiran) | RaceMask<ulong>.GetMaskForRace(Race.DarkIronDwarf) | RaceMask<ulong>.GetMaskForRace(Race.Vulpera) | RaceMask<ulong>.GetMaskForRace(Race.MagharOrc) |
RaceMask<ulong>.GetMaskForRace(Race.MechaGnome) | RaceMask<ulong>.GetMaskForRace(Race.DracthyrAlliance) | RaceMask<ulong>.GetMaskForRace(Race.DracthyrHorde));
RaceMask<ulong>.GetMaskForRace(Race.MechaGnome) | RaceMask<ulong>.GetMaskForRace(Race.DracthyrAlliance) | RaceMask<ulong>.GetMaskForRace(Race.DracthyrHorde)));
public static RaceMask<ulong> Neutral = new RaceMask<ulong>((ulong)RaceMask<ulong>.GetMaskForRace(Race.PandarenNeutral));
public static RaceMask<ulong> Neutral = new(RaceMask<ulong>.GetMaskForRace(Race.PandarenNeutral));
public static RaceMask<ulong> Alliance = new(
public static RaceMask<ulong> Alliance = new RaceMask<ulong>((ulong)(
RaceMask<ulong>.GetMaskForRace(Race.Human) | RaceMask<ulong>.GetMaskForRace(Race.Dwarf) | RaceMask<ulong>.GetMaskForRace(Race.NightElf) |
RaceMask<ulong>.GetMaskForRace(Race.Gnome) | RaceMask<ulong>.GetMaskForRace(Race.Draenei) | RaceMask<ulong>.GetMaskForRace(Race.Worgen) |
RaceMask<ulong>.GetMaskForRace(Race.PandarenAlliance) | RaceMask<ulong>.GetMaskForRace(Race.VoidElf) | RaceMask<ulong>.GetMaskForRace(Race.LightforgedDraenei) |
RaceMask<ulong>.GetMaskForRace(Race.KulTiran) | RaceMask<ulong>.GetMaskForRace(Race.DarkIronDwarf) | RaceMask<ulong>.GetMaskForRace(Race.MechaGnome) | RaceMask<ulong>.GetMaskForRace(Race.DracthyrAlliance));
RaceMask<ulong>.GetMaskForRace(Race.KulTiran) | RaceMask<ulong>.GetMaskForRace(Race.DarkIronDwarf) | RaceMask<ulong>.GetMaskForRace(Race.MechaGnome) | RaceMask<ulong>.GetMaskForRace(Race.DracthyrAlliance)));
public static RaceMask<ulong> Horde = new(AllPlayable.RawValue & ~(Neutral | Alliance).RawValue);
public static RaceMask<ulong> Horde = new RaceMask<ulong>((ulong)(AllPlayable.RawValue & (~(Neutral | Alliance).RawValue)));
}
public struct RaceMask<T> where T : unmanaged
public struct RaceMask<T>
{
public T RawValue;
public dynamic RawValue;
public RaceMask(T rawValue)
{
@@ -39,26 +39,21 @@ namespace Game.Miscellaneous
public bool HasRace(Race raceId)
{
return ((dynamic)RawValue & GetMaskForRace(raceId)) != 0;
return (RawValue & GetMaskForRace(raceId)) != 0;
}
public bool IsEmpty()
{
return RawValue == (dynamic)0;
return RawValue == 0;
}
public static RaceMask<T> operator &(RaceMask<T> left, RaceMask<T> right) { return new RaceMask<T>((dynamic)left.RawValue & right.RawValue); }
public static RaceMask<T> operator |(RaceMask<T> left, RaceMask<T> right) { return new RaceMask<T>((dynamic)left.RawValue | right.RawValue); }
public static explicit operator T(RaceMask<T> raceMask)
{
return raceMask.RawValue;
}
public static RaceMask<T> operator &(RaceMask<T> left, RaceMask<T> right) { return new RaceMask<T>(left.RawValue & right.RawValue); }
public static RaceMask<T> operator |(RaceMask<T> left, RaceMask<T> right) { return new RaceMask<T>(left.RawValue | right.RawValue); }
public static dynamic GetMaskForRace(Race raceId)
{
int raceBit = GetRaceBit(raceId);
return (raceBit >= 0 && (uint)raceBit < Marshal.SizeOf<T>() * 8 ? (1 << raceBit) : 0);
return (T)(dynamic)(raceBit >= 0 && (uint)raceBit < Marshal.SizeOf<T>() * 8 ? (1 << raceBit) : 0);
}
static int GetRaceBit(Race raceId)
@@ -532,8 +532,8 @@ namespace Game.Networking.Packets
public override void Write()
{
_worldPacket.WriteUInt32(RankID);
_worldPacket.WriteInt32(WithdrawGoldLimit);
_worldPacket.WriteInt32(Flags);
_worldPacket.WriteInt32(WithdrawGoldLimit);
_worldPacket.WriteInt32(NumTabs);
_worldPacket.WriteInt32(Tab.Count);
@@ -224,7 +224,7 @@ namespace Game.Networking.Packets
public override void Write()
{
_worldPacket.WriteInt8((sbyte)BagResult);
_worldPacket.WriteInt32((int)BagResult);
_worldPacket.WritePackedGuid(Item[0]);
_worldPacket.WritePackedGuid(Item[1]);
_worldPacket.WriteUInt8(ContainerBSlot); // bag type subclass, used with EQUIP_ERR_EVENT_AUTOEQUIP_BIND_CONFIRM and EQUIP_ERR_WRONG_BAG_TYPE_2
@@ -389,12 +389,14 @@ namespace Game.Networking.Packets
public override void Write()
{
_worldPacket.WritePackedGuid(VendorGUID);
_worldPacket.WritePackedGuid(ItemGUID);
_worldPacket.WriteUInt8((byte)Reason);
_worldPacket.WriteInt32(ItemGUIDs.Count);
_worldPacket.WriteInt32((int)Reason);
foreach (ObjectGuid itemGuid in ItemGUIDs)
_worldPacket.WritePackedGuid(itemGuid);
}
public ObjectGuid VendorGUID;
public ObjectGuid ItemGUID;
public List<ObjectGuid> ItemGUIDs = new();
public SellResult Reason = SellResult.Unk;
}
+24 -18
View File
@@ -16,18 +16,21 @@ namespace Game.Networking.Packets
public override void Read()
{
QueueAsGroup = _worldPacket.HasBit();
bool hasPartyIndex = _worldPacket.HasBit();
Unknown = _worldPacket.HasBit();
PartyIndex = _worldPacket.ReadUInt8();
Roles = (LfgRoles)_worldPacket.ReadUInt32();
var slotsCount = _worldPacket.ReadInt32();
if (hasPartyIndex)
PartyIndex = _worldPacket.ReadUInt8();
for (var i = 0; i < slotsCount; ++i) // Slots
Slots.Add(_worldPacket.ReadUInt32());
}
public bool QueueAsGroup;
bool Unknown; // Always false in 7.2.5
public byte PartyIndex;
public bool Unknown; // Always false in 7.2.5
public byte? PartyIndex;
public LfgRoles Roles;
public List<uint> Slots = new();
}
@@ -68,12 +71,14 @@ namespace Game.Networking.Packets
public override void Read()
{
bool hasPartyIndex = _worldPacket.HasBit();
RolesDesired = (LfgRoles)_worldPacket.ReadUInt32();
PartyIndex = _worldPacket.ReadUInt8();
if (hasPartyIndex)
PartyIndex = _worldPacket.ReadUInt8();
}
public LfgRoles RolesDesired;
public byte PartyIndex;
public byte? PartyIndex;
}
class DFBootPlayerVote : ClientPacket
@@ -107,10 +112,11 @@ namespace Game.Networking.Packets
public override void Read()
{
Player = _worldPacket.HasBit();
PartyIndex = _worldPacket.ReadUInt8();
if (_worldPacket.HasBit())
PartyIndex = _worldPacket.ReadUInt8();
}
public byte PartyIndex;
public byte? PartyIndex;
public bool Player;
}
@@ -163,7 +169,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt8(SubType);
_worldPacket.WriteUInt8(Reason);
_worldPacket.WriteInt32(Slots.Count);
_worldPacket.WriteUInt32(RequestedRoles);
_worldPacket.WriteUInt8(RequestedRoles);
_worldPacket.WriteInt32(SuspendedPlayers.Count);
_worldPacket.WriteUInt32(QueueMapID);
@@ -186,7 +192,7 @@ namespace Game.Networking.Packets
public byte SubType;
public byte Reason;
public List<uint> Slots = new();
public uint RequestedRoles;
public byte RequestedRoles;
public List<ObjectGuid> SuspendedPlayers = new();
public uint QueueMapID;
public bool NotifyUI;
@@ -204,7 +210,7 @@ namespace Game.Networking.Packets
public override void Write()
{
_worldPacket.WritePackedGuid(Player);
_worldPacket.WriteUInt32((uint)RoleMask);
_worldPacket.WriteUInt8((byte)RoleMask);
_worldPacket.WriteBit(Accepted);
_worldPacket.FlushBits();
}
@@ -497,7 +503,7 @@ namespace Game.Networking.Packets
{
public void Write(WorldPacket data)
{
data.WriteUInt32(Mask);
data.WriteUInt8(Mask);
data.WriteUInt32(RewardMoney);
data.WriteUInt32(RewardXP);
data.WriteInt32(Item.Count);
@@ -544,7 +550,7 @@ namespace Game.Networking.Packets
data.WriteInt32(Honor.Value);
}
public uint Mask;
public byte Mask;
public uint RewardMoney;
public uint RewardXP;
public List<LfgPlayerQuestRewardItem> Item = new();
@@ -608,7 +614,7 @@ namespace Game.Networking.Packets
public class LFGRoleCheckUpdateMember
{
public LFGRoleCheckUpdateMember(ObjectGuid guid, uint rolesDesired, byte level, bool roleCheckComplete)
public LFGRoleCheckUpdateMember(ObjectGuid guid, byte rolesDesired, byte level, bool roleCheckComplete)
{
Guid = guid;
RolesDesired = rolesDesired;
@@ -619,14 +625,14 @@ namespace Game.Networking.Packets
public void Write(WorldPacket data)
{
data.WritePackedGuid(Guid);
data.WriteUInt32(RolesDesired);
data.WriteUInt8(RolesDesired);
data.WriteUInt8(Level);
data.WriteBit(RoleCheckComplete);
data.FlushBits();
}
public ObjectGuid Guid;
public uint RolesDesired;
public byte RolesDesired;
public byte Level;
public bool RoleCheckComplete;
}
@@ -723,7 +729,7 @@ namespace Game.Networking.Packets
{
public void Write(WorldPacket data)
{
data.WriteUInt32(Roles);
data.WriteUInt8(Roles);
data.WriteBit(Me);
data.WriteBit(SameParty);
data.WriteBit(MyParty);
@@ -732,7 +738,7 @@ namespace Game.Networking.Packets
data.FlushBits();
}
public uint Roles;
public byte Roles;
public bool Me;
public bool SameParty;
public bool MyParty;
@@ -754,14 +754,16 @@ namespace Game.Networking.Packets
public override void Read()
{
bool hasPartyIndex = _worldPacket.HasBit();
Min = _worldPacket.ReadUInt32();
Max = _worldPacket.ReadUInt32();
PartyIndex = _worldPacket.ReadUInt8();
if (hasPartyIndex)
PartyIndex = _worldPacket.ReadUInt8();
}
public uint Min;
public uint Max;
public byte PartyIndex;
public byte? PartyIndex;
}
public class RandomRoll : ServerPacket
+204 -61
View File
@@ -8,6 +8,7 @@ using Game.Groups;
using Game.Spells;
using System;
using System.Collections.Generic;
using System.Numerics;
namespace Game.Networking.Packets
{
@@ -39,8 +40,9 @@ namespace Game.Networking.Packets
public override void Read()
{
PartyIndex = _worldPacket.ReadUInt8();
bool hasPartyIndex = _worldPacket.HasBit();
_worldPacket.ResetBitPos();
uint targetNameLen = _worldPacket.ReadBits<uint>(9);
uint targetRealmLen = _worldPacket.ReadBits<uint>(9);
@@ -49,9 +51,11 @@ namespace Game.Networking.Packets
TargetName = _worldPacket.ReadString(targetNameLen);
TargetRealm = _worldPacket.ReadString(targetRealmLen);
if (hasPartyIndex)
PartyIndex = _worldPacket.ReadUInt8();
}
public byte PartyIndex;
public byte? PartyIndex;
public uint ProposedRoles;
public string TargetName;
public string TargetRealm;
@@ -70,7 +74,7 @@ namespace Game.Networking.Packets
InviterGUID = inviter.GetGUID();
InviterBNetAccountId = inviter.GetSession().GetAccountGUID();
ProposedRoles = proposedRoles;
ProposedRoles = (byte)proposedRoles;
var realm = Global.WorldMgr.GetRealm();
InviterRealm = new VirtualRealmInfo(realm.Id.GetAddress(), true, false, realm.Name, realm.NormalizedName);
@@ -91,7 +95,7 @@ namespace Game.Networking.Packets
_worldPacket.WritePackedGuid(InviterGUID);
_worldPacket.WritePackedGuid(InviterBNetAccountId);
_worldPacket.WriteUInt16(Unk1);
_worldPacket.WriteUInt32(ProposedRoles);
_worldPacket.WriteUInt8(ProposedRoles);
_worldPacket.WriteInt32(LfgSlots.Count);
_worldPacket.WriteInt32(LfgCompletedMask);
@@ -119,7 +123,7 @@ namespace Game.Networking.Packets
public bool IsXRealm;
// Lfg
public uint ProposedRoles;
public byte ProposedRoles;
public int LfgCompletedMask;
public List<int> LfgSlots = new();
}
@@ -130,18 +134,21 @@ namespace Game.Networking.Packets
public override void Read()
{
PartyIndex = _worldPacket.ReadUInt8();
bool hasPartyIndex = _worldPacket.HasBit();
Accept = _worldPacket.HasBit();
bool hasRolesDesired = _worldPacket.HasBit();
if (hasPartyIndex)
PartyIndex = _worldPacket.ReadUInt8();
if (hasRolesDesired)
RolesDesired = _worldPacket.ReadUInt32();
RolesDesired = _worldPacket.ReadUInt8();
}
public byte PartyIndex;
public byte? PartyIndex;
public bool Accept;
public uint? RolesDesired;
public byte? RolesDesired;
}
class PartyUninvite : ClientPacket
@@ -150,14 +157,18 @@ namespace Game.Networking.Packets
public override void Read()
{
PartyIndex = _worldPacket.ReadUInt8();
bool hasPartyIndex = _worldPacket.HasBit();
byte reasonLen = _worldPacket.ReadBits<byte>(8);
TargetGUID = _worldPacket.ReadPackedGuid();
byte reasonLen = _worldPacket.ReadBits<byte>(8);
if (hasPartyIndex)
PartyIndex = _worldPacket.ReadUInt8();
Reason = _worldPacket.ReadString(reasonLen);
}
public byte PartyIndex;
public byte? PartyIndex;
public ObjectGuid TargetGUID;
public string Reason;
}
@@ -192,11 +203,13 @@ namespace Game.Networking.Packets
public override void Read()
{
PartyIndex = _worldPacket.ReadUInt8();
bool hasPartyIndex = _worldPacket.HasBit();
TargetGUID = _worldPacket.ReadPackedGuid();
if (hasPartyIndex)
PartyIndex = _worldPacket.ReadUInt8();
}
public byte PartyIndex;
public byte? PartyIndex;
public ObjectGuid TargetGUID;
}
@@ -265,8 +278,8 @@ namespace Game.Networking.Packets
MemberStats.PositionZ = (short)(player.GetPositionZ());
MemberStats.SpecID = (ushort)player.GetPrimarySpecialization();
MemberStats.PartyType[0] = (sbyte)(player.m_playerData.PartyType & 0xF);
MemberStats.PartyType[1] = (sbyte)(player.m_playerData.PartyType >> 4);
MemberStats.PartyType[0] = player.m_playerData.PartyType[0];
MemberStats.PartyType[1] = player.m_playerData.PartyType[1];
MemberStats.WmoGroupID = 0;
MemberStats.WmoDoodadPlacementID = 0;
@@ -356,11 +369,13 @@ namespace Game.Networking.Packets
public override void Read()
{
PartyIndex = _worldPacket.ReadInt8();
bool hasPartyIndex = _worldPacket.HasBit();
TargetGUID = _worldPacket.ReadPackedGuid();
if (hasPartyIndex)
PartyIndex = _worldPacket.ReadUInt8();
}
public sbyte PartyIndex;
public byte? PartyIndex;
public ObjectGuid TargetGUID;
}
@@ -370,14 +385,16 @@ namespace Game.Networking.Packets
public override void Read()
{
PartyIndex = _worldPacket.ReadInt8();
bool hasPartyIndex = _worldPacket.HasBit();
TargetGUID = _worldPacket.ReadPackedGuid();
Role = _worldPacket.ReadInt32();
Role = _worldPacket.ReadUInt8();
if (hasPartyIndex)
PartyIndex = _worldPacket.ReadUInt8();
}
public sbyte PartyIndex;
public byte? PartyIndex;
public ObjectGuid TargetGUID;
public int Role;
public byte Role;
}
class RoleChangedInform : ServerPacket
@@ -386,18 +403,18 @@ namespace Game.Networking.Packets
public override void Write()
{
_worldPacket.WriteInt8(PartyIndex);
_worldPacket.WriteUInt8(PartyIndex);
_worldPacket.WritePackedGuid(From);
_worldPacket.WritePackedGuid(ChangedUnit);
_worldPacket.WriteInt32(OldRole);
_worldPacket.WriteInt32(NewRole);
_worldPacket.WriteUInt8(OldRole);
_worldPacket.WriteUInt8(NewRole);
}
public sbyte PartyIndex;
public byte PartyIndex;
public ObjectGuid From;
public ObjectGuid ChangedUnit;
public int OldRole;
public int NewRole;
public byte OldRole;
public byte NewRole;
}
class LeaveGroup : ClientPacket
@@ -406,10 +423,11 @@ namespace Game.Networking.Packets
public override void Read()
{
PartyIndex = _worldPacket.ReadInt8();
if (_worldPacket.HasBit())
PartyIndex = _worldPacket.ReadUInt8();
}
public sbyte PartyIndex;
public byte? PartyIndex;
}
class GroupDestroyed : ServerPacket
@@ -425,13 +443,15 @@ namespace Game.Networking.Packets
public override void Read()
{
PartyIndex = _worldPacket.ReadInt8();
bool hasPartyIndex = _worldPacket.HasBit();
LootMethod = (LootMethod)_worldPacket.ReadUInt8();
LootMasterGUID = _worldPacket.ReadPackedGuid();
LootThreshold = (ItemQuality)_worldPacket.ReadUInt32();
if (hasPartyIndex)
PartyIndex = _worldPacket.ReadUInt8();
}
public sbyte PartyIndex;
public byte? PartyIndex;
public ObjectGuid LootMasterGUID;
public LootMethod LootMethod;
public ItemQuality LootThreshold;
@@ -443,12 +463,14 @@ namespace Game.Networking.Packets
public override void Read()
{
bool hasPartyIndex = _worldPacket.HasBit();
PositionX = _worldPacket.ReadFloat();
PositionY = _worldPacket.ReadFloat();
PartyIndex = _worldPacket.ReadInt8();
if (hasPartyIndex)
PartyIndex = _worldPacket.ReadUInt8();
}
public sbyte PartyIndex;
public byte? PartyIndex;
public float PositionX;
public float PositionY;
}
@@ -475,12 +497,14 @@ namespace Game.Networking.Packets
public override void Read()
{
PartyIndex = _worldPacket.ReadInt8();
bool hasPartyIndex = _worldPacket.HasBit();
Target = _worldPacket.ReadPackedGuid();
Symbol = _worldPacket.ReadInt8();
if (hasPartyIndex)
PartyIndex = _worldPacket.ReadUInt8();
}
public sbyte PartyIndex;
public byte? PartyIndex;
public ObjectGuid Target;
public sbyte Symbol;
}
@@ -542,10 +566,11 @@ namespace Game.Networking.Packets
public override void Read()
{
PartyIndex = _worldPacket.ReadInt8();
if (_worldPacket.HasBit())
PartyIndex = _worldPacket.ReadUInt8();
}
public sbyte PartyIndex;
public byte? PartyIndex;
}
class SetAssistantLeader : ClientPacket
@@ -554,13 +579,15 @@ namespace Game.Networking.Packets
public override void Read()
{
PartyIndex = _worldPacket.ReadUInt8();
Target = _worldPacket.ReadPackedGuid();
bool hasPartyIndex = _worldPacket.HasBit();
Apply = _worldPacket.HasBit();
Target = _worldPacket.ReadPackedGuid();
if (hasPartyIndex)
PartyIndex = _worldPacket.ReadUInt8();
}
public ObjectGuid Target;
public byte PartyIndex;
public byte? PartyIndex;
public bool Apply;
}
@@ -570,14 +597,16 @@ namespace Game.Networking.Packets
public override void Read()
{
PartyIndex = _worldPacket.ReadUInt8();
bool hasPartyIndex = _worldPacket.HasBit();
Set = _worldPacket.HasBit();
Assignment = _worldPacket.ReadUInt8();
Target = _worldPacket.ReadPackedGuid();
Set = _worldPacket.HasBit();
if (hasPartyIndex)
PartyIndex = _worldPacket.ReadUInt8();
}
public byte Assignment;
public byte PartyIndex;
public byte? PartyIndex;
public ObjectGuid Target;
public bool Set;
}
@@ -588,10 +617,11 @@ namespace Game.Networking.Packets
public override void Read()
{
PartyIndex = _worldPacket.ReadInt8();
if (_worldPacket.HasBit())
PartyIndex = _worldPacket.ReadUInt8();
}
public sbyte PartyIndex;
public byte? PartyIndex;
}
class ReadyCheckStarted : ServerPacket
@@ -618,11 +648,12 @@ namespace Game.Networking.Packets
public override void Read()
{
PartyIndex = _worldPacket.ReadUInt8();
IsReady = _worldPacket.HasBit();
if (_worldPacket.HasBit())
PartyIndex = _worldPacket.ReadUInt8();
}
public byte PartyIndex;
public byte? PartyIndex;
public bool IsReady;
}
@@ -683,10 +714,11 @@ namespace Game.Networking.Packets
public override void Read()
{
PartyIndex = _worldPacket.ReadInt8();
if (_worldPacket.HasBit())
PartyIndex = _worldPacket.ReadUInt8();
}
public sbyte PartyIndex;
public byte? PartyIndex;
}
class RolePollInform : ServerPacket
@@ -775,11 +807,13 @@ namespace Game.Networking.Packets
public override void Read()
{
PartyIndex = _worldPacket.ReadUInt8();
bool hasPartyIndex = _worldPacket.HasBit();
EveryoneIsAssistant = _worldPacket.HasBit();
if (hasPartyIndex)
PartyIndex = _worldPacket.ReadUInt8();
}
public byte PartyIndex;
public byte? PartyIndex;
public bool EveryoneIsAssistant;
}
@@ -790,12 +824,13 @@ namespace Game.Networking.Packets
public override void Read()
{
TargetGUID = _worldPacket.ReadPackedGuid();
PartyIndex = _worldPacket.ReadInt8();
NewSubGroup = _worldPacket.ReadUInt8();
if (_worldPacket.HasBit())
PartyIndex = _worldPacket.ReadUInt8();
}
public ObjectGuid TargetGUID;
public sbyte PartyIndex;
public byte? PartyIndex;
public byte NewSubGroup;
}
@@ -805,14 +840,16 @@ namespace Game.Networking.Packets
public override void Read()
{
PartyIndex = _worldPacket.ReadInt8();
bool hasPartyIndex = _worldPacket.HasBit();
FirstTarget = _worldPacket.ReadPackedGuid();
SecondTarget = _worldPacket.ReadPackedGuid();
if (hasPartyIndex)
PartyIndex = _worldPacket.ReadUInt8();
}
public ObjectGuid FirstTarget;
public ObjectGuid SecondTarget;
public sbyte PartyIndex;
public byte? PartyIndex;
}
class ClearRaidMarker : ClientPacket
@@ -893,7 +930,113 @@ namespace Game.Networking.Packets
_worldPacket.FlushBits();
}
}
class SetRestrictPingsToAssistants : ClientPacket
{
public byte? PartyIndex;
public bool RestrictPingsToAssistants;
public SetRestrictPingsToAssistants(WorldPacket packet) : base(packet) { }
public override void Read()
{
bool hasPartyIndex = _worldPacket.HasBit();
RestrictPingsToAssistants = _worldPacket.HasBit();
if (hasPartyIndex)
PartyIndex = _worldPacket.ReadUInt8();
}
}
class SendPingUnit : ClientPacket
{
public ObjectGuid SenderGUID;
public ObjectGuid TargetGUID;
public PingSubjectType Type = PingSubjectType.Max;
public uint PinFrameID;
public SendPingUnit(WorldPacket packet) : base(packet) { }
public override void Read()
{
SenderGUID = _worldPacket.ReadPackedGuid();
TargetGUID = _worldPacket.ReadPackedGuid();
Type = (PingSubjectType)_worldPacket.ReadUInt8();
PinFrameID = _worldPacket.ReadUInt32();
}
}
class ReceivePingUnit : ServerPacket
{
public ObjectGuid SenderGUID;
public ObjectGuid TargetGUID;
public PingSubjectType Type = PingSubjectType.Max;
public uint PinFrameID;
public ReceivePingUnit() : base(ServerOpcodes.ReceivePingUnit) { }
public override void Write()
{
_worldPacket.WritePackedGuid(SenderGUID);
_worldPacket.WritePackedGuid(TargetGUID);
_worldPacket.WriteUInt8((byte)Type);
_worldPacket.WriteUInt32(PinFrameID);
}
}
class SendPingWorldPoint : ClientPacket
{
public ObjectGuid SenderGUID;
public uint MapID;
public Vector3 Point;
public PingSubjectType Type = PingSubjectType.Max;
public uint PinFrameID;
public SendPingWorldPoint(WorldPacket packet) : base(packet) { }
public override void Read()
{
SenderGUID = _worldPacket.ReadPackedGuid();
MapID = _worldPacket.ReadUInt32();
Point = _worldPacket.ReadVector3();
Type = (PingSubjectType)_worldPacket.ReadUInt8();
PinFrameID = _worldPacket.ReadUInt32();
}
}
class ReceivePingWorldPoint : ServerPacket
{
public ObjectGuid SenderGUID;
public uint MapID = 0;
public Vector3 Point;
public PingSubjectType Type = PingSubjectType.Max;
public uint PinFrameID;
public ReceivePingWorldPoint() : base(ServerOpcodes.ReceivePingWorldPoint) { }
public override void Write()
{
_worldPacket.WritePackedGuid(SenderGUID);
_worldPacket.WriteUInt32(MapID);
_worldPacket.WriteVector3(Point);
_worldPacket.WriteUInt8((byte)Type);
_worldPacket.WriteUInt32(PinFrameID);
}
}
class CancelPingPin : ServerPacket
{
public ObjectGuid SenderGUID;
public uint PinFrameID;
public CancelPingPin() : base(ServerOpcodes.CancelPingPin) { }
public override void Write()
{
_worldPacket.WritePackedGuid(SenderGUID);
_worldPacket.WriteUInt32(PinFrameID);
}
}
//Structs
public struct PartyMemberPhase
{
@@ -931,7 +1074,7 @@ namespace Game.Networking.Packets
}
class PartyMemberAuraStates
{
{
public int SpellID;
public ushort Flags;
public uint ActiveFlags;
@@ -993,7 +1136,7 @@ namespace Game.Networking.Packets
public void Write(WorldPacket data)
{
for (byte i = 0; i < 2; i++)
data.WriteInt8(PartyType[i]);
data.WriteUInt8(PartyType[i]);
data.WriteInt16((short)Status);
data.WriteUInt8(PowerType);
@@ -1053,7 +1196,7 @@ namespace Game.Networking.Packets
public ushort SpecID;
public ushort WmoGroupID;
public uint WmoDoodadPlacementID;
public sbyte[] PartyType = new sbyte[2];
public byte[] PartyType = new byte[2];
public CTROptions ChromieTime;
public DungeonScoreSummary DungeonScore = new();
}
@@ -337,6 +337,23 @@ namespace Game.Networking.Packets
public byte Result;
}
class PetMode : ServerPacket
{
public ObjectGuid PetGUID;
public ReactStates ReactState;
public CommandStates CommandState;
public byte Flag;
public PetMode() : base(ServerOpcodes.PetMode, ConnectionType.Instance) { }
public override void Write()
{
_worldPacket.WritePackedGuid(PetGUID);
_worldPacket.WriteUInt16((ushort)((int)CommandState | Flag << 8));
_worldPacket.WriteUInt8((byte)ReactState);
}
}
//Structs
public class PetSpellCooldown
+7 -21
View File
@@ -1753,11 +1753,9 @@ namespace Game.Networking.Packets
public void Write(WorldPacket data)
{
data.WriteBits((byte)Reason, 4);
data.WriteUInt8((byte)Reason);
if (Reason == SpellMissInfo.Reflect)
data.WriteBits(ReflectStatus, 4);
data.FlushBits();
data.WriteUInt8((byte)ReflectStatus);
}
public SpellMissInfo Reason;
@@ -1805,18 +1803,6 @@ namespace Game.Networking.Packets
}
}
public struct SpellAmmo
{
public int DisplayID;
public sbyte InventoryType;
public void Write(WorldPacket data)
{
data.WriteInt32(DisplayID);
data.WriteInt8(InventoryType);
}
}
public struct CreatureImmunities
{
public uint School;
@@ -1861,7 +1847,7 @@ namespace Game.Networking.Packets
MissileTrajectory.Write(data);
data.WriteInt32(Ammo.DisplayID);
data.WriteInt32(AmmoDisplayID);
data.WriteUInt8(DestLocSpellCastIndex);
Immunities.Write(data);
@@ -1876,9 +1862,6 @@ namespace Game.Networking.Packets
data.WriteBits(TargetPoints.Count, 16);
data.FlushBits();
foreach (SpellMissStatus missStatus in MissStatus)
missStatus.Write(data);
Target.Write(data);
foreach (ObjectGuid hitTarget in HitTargets)
@@ -1890,6 +1873,9 @@ namespace Game.Networking.Packets
foreach (SpellHitStatus hitStatus in HitStatus)
hitStatus.Write(data);
foreach (SpellMissStatus missStatus in MissStatus)
missStatus.Write(data);
foreach (SpellPowerData power in RemainingPower)
power.Write(data);
@@ -1917,7 +1903,7 @@ namespace Game.Networking.Packets
public List<SpellPowerData> RemainingPower = new();
public RuneData RemainingRunes;
public MissileTrajectoryResult MissileTrajectory;
public SpellAmmo Ammo;
public int AmmoDisplayID;
public byte DestLocSpellCastIndex;
public List<TargetLocation> TargetPoints = new();
public CreatureImmunities Immunities;
@@ -85,6 +85,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteBit(AddonsDisabled);
_worldPacket.WriteBit(Unused1000);
_worldPacket.WriteBit(ContentTrackingEnabled);
_worldPacket.WriteBit(IsSellAllJunkEnabled);
_worldPacket.FlushBits();
@@ -178,6 +179,7 @@ namespace Game.Networking.Packets
public bool AddonsDisabled;
public bool Unused1000;
public bool ContentTrackingEnabled;
public bool IsSellAllJunkEnabled;
public SocialQueueConfig QuickJoinConfig;
public SquelchInfo Squelch;
@@ -272,6 +274,10 @@ namespace Game.Networking.Packets
_worldPacket.WriteBit(AccountSaveDataExportEnabled);
_worldPacket.WriteBit(AccountLockedByExport);
_worldPacket.WriteBit(!RealmHiddenAlert.IsEmpty());
if (!RealmHiddenAlert.IsEmpty())
_worldPacket.WriteBits(RealmHiddenAlert.GetByteCount() + 1, 11);
_worldPacket.FlushBits();
@@ -299,6 +305,9 @@ namespace Game.Networking.Packets
if (LaunchETA.HasValue)
_worldPacket.WriteInt32(LaunchETA.Value);
if (!RealmHiddenAlert.IsEmpty())
_worldPacket.WriteString(RealmHiddenAlert);
foreach (var sourceRegion in LiveRegionCharacterCopySourceRegions)
_worldPacket.WriteInt32(sourceRegion);
@@ -349,6 +358,7 @@ namespace Game.Networking.Packets
public int? LaunchETA;
public List<DebugTimeEventInfo> DebugTimeEvents = new();
public int Unused1007;
public string RealmHiddenAlert;
}
public class MOTD : ServerPacket
+1
View File
@@ -156,6 +156,7 @@ namespace Game.Scripting
case "ConversationScript":
case "AchievementScript":
case "BattlefieldScript":
case "EventScript":
if (!attribute.Name.IsEmpty())
name = attribute.Name;
+5 -5
View File
@@ -3860,9 +3860,10 @@ namespace Game.Spells
}
}
UpdateSpellCastDataAmmo(castData.Ammo);
if (castFlags.HasFlag(SpellCastFlags.Projectile))
castData.AmmoDisplayID = (int)GetSpellCastDataAmmo();
if (castFlags.HasAnyFlag(SpellCastFlags.Immunity))
if (castFlags.HasFlag(SpellCastFlags.Immunity))
{
castData.Immunities.School = schoolImmunityMask;
castData.Immunities.Value = (uint)mechanicImmunityMask;
@@ -4010,7 +4011,7 @@ namespace Game.Spells
m_channelTargetEffectMask = 0;
}
void UpdateSpellCastDataAmmo(SpellAmmo ammo)
uint GetSpellCastDataAmmo()
{
InventoryType ammoInventoryType = 0;
uint ammoDisplayID = 0;
@@ -4084,8 +4085,7 @@ namespace Game.Spells
}
}
ammo.DisplayID = (int)ammoDisplayID;
ammo.InventoryType = (sbyte)ammoInventoryType;
return ammoDisplayID;
}
void SendSpellExecuteLog()
+1 -1
View File
@@ -121,7 +121,7 @@ namespace Scripts.Smart
{
public SmartEventTrigger() : base("SmartEventTrigger") { }
void OnTrigger(WorldObject obj, WorldObject invoker, uint eventId)
public override void OnTrigger(WorldObject obj, WorldObject invoker, uint eventId)
{
Log.outDebug(LogFilter.ScriptsAi, $"Event {eventId} is using SmartEventTrigger script");
SmartScript script = new();
+3 -3
View File
@@ -824,7 +824,7 @@ namespace Scripts.Spells.Priest
uint _damageSpellId;
uint _healingSpellId;
spell_pri_penance(uint damageSpellId, uint healingSpellId)
public spell_pri_penance(uint damageSpellId, uint healingSpellId)
{
_damageSpellId = damageSpellId;
_healingSpellId = healingSpellId;
@@ -862,9 +862,9 @@ namespace Scripts.Spells.Priest
if (target)
{
if (caster.IsFriendlyTo(target))
caster.CastSpell(target, _healingSpellId, new CastSpellExtraArgs().SetTriggeringSpell(GetSpell()));
caster.CastSpell(target, _healingSpellId, new CastSpellExtraArgs(TriggerCastFlags.IgnoreGCD | TriggerCastFlags.IgnoreSpellAndCategoryCD).SetTriggeringSpell(GetSpell()));
else
caster.CastSpell(target, _damageSpellId, new CastSpellExtraArgs().SetTriggeringSpell(GetSpell()));
caster.CastSpell(target, _damageSpellId, new CastSpellExtraArgs(TriggerCastFlags.IgnoreGCD | TriggerCastFlags.IgnoreSpellAndCategoryCD).SetTriggeringSpell(GetSpell()));
}
}
+49 -21
View File
@@ -1,8 +1,8 @@
-- MySQL dump 10.13 Distrib 8.0.32, for Linux (x86_64)
-- MySQL dump 10.13 Distrib 8.0.33, for Linux (x86_64)
--
-- Host: localhost Database: auth
-- ------------------------------------------------------
-- Server version 8.0.32-0ubuntu0.20.04.2
-- Server version 8.0.33-0ubuntu0.20.04.2
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
@@ -707,8 +707,8 @@ INSERT INTO `build_info` VALUES
(48966,10,0,7,NULL,NULL,'823142CA131FBB715FF55D4343E55C6D',NULL,NULL,NULL),
(48999,10,0,7,NULL,NULL,'79BA6FF0F9672EEF875F64155C8B62D4',NULL,NULL,NULL),
(49267,10,0,7,NULL,NULL,'EEE77EA5A216E0731ADBB41AEFB1DF31',NULL,NULL,NULL),
(49343,10,0,7,NULL,NULL,'301A0B4C0942B9B6F605B903AD6C1F60',NULL,NULL,NULL),
(49318,10,1,0,NULL,NULL,'AF439AEE62EE48B36C1725111E3D9BBF',NULL,NULL,NULL),
(49343,10,0,7,NULL,NULL,'301A0B4C0942B9B6F605B903AD6C1F60',NULL,NULL,NULL),
(49407,10,1,0,NULL,NULL,'6413820DC9885BB0693B37090CBB2F30',NULL,NULL,NULL),
(49426,10,1,0,NULL,NULL,'D85EDFBFE9A94A55E2B4510BE41C19B2',NULL,NULL,NULL),
(49444,10,1,0,NULL,NULL,'363B2B05285BDD8857419D2866316D3C',NULL,NULL,NULL),
@@ -718,7 +718,21 @@ INSERT INTO `build_info` VALUES
(49741,10,1,0,NULL,NULL,'0EF181E2BB0E946CF3B7422ADEB6CD1A',NULL,NULL,NULL),
(49801,10,1,0,NULL,NULL,'0832179567B66CA85DBD5678B604C683',NULL,NULL,NULL),
(49890,10,1,0,NULL,NULL,'22A5B8A1EB797A64995F705B3DBCB14C',NULL,NULL,NULL),
(50000,10,1,0,NULL,NULL,'02F06FFA2296FD66384295DBFD5A4C91',NULL,NULL,NULL);
(50000,10,1,0,NULL,NULL,'02F06FFA2296FD66384295DBFD5A4C91',NULL,NULL,NULL),
(50401,10,1,5,NULL,NULL,'3EEF52D902CCE81D16D0E255F0AA4938',NULL,NULL,NULL),
(50438,10,1,5,NULL,NULL,'0B5F68F06B129CB4C57702F6D30F260B',NULL,NULL,NULL),
(50467,10,1,5,NULL,NULL,'5E996B1CDCEE68432D6340138E68D1EB',NULL,NULL,NULL),
(50469,10,1,5,NULL,NULL,'1768CCB6589E16AB3BEFA9D608A393A2',NULL,NULL,NULL),
(50504,10,1,5,NULL,NULL,'7D5FD20C0B32C9AF5DD65433B391D49C',NULL,NULL,NULL),
(50585,10,1,5,NULL,NULL,'C4F7CC38A3B84935A485F7EDAD3E764B',NULL,NULL,NULL),
(50622,10,1,5,NULL,NULL,'D23A26FD75FD9A6073EB7060AA28E6A7',NULL,NULL,NULL),
(50747,10,1,5,NULL,NULL,'2D3C386A9C45C27304ED3A3C6EB3F7C8',NULL,NULL,NULL),
(50791,10,1,5,NULL,NULL,'0BE7D0BB07EF37C25CBC682409091EA0',NULL,NULL,NULL),
(51130,10,1,5,NULL,NULL,'44CD2C91E4F0655DA387483726CE4035',NULL,NULL,NULL),
(51187,10,1,7,NULL,NULL,'74E2055D3965269447B5CB1B31FC71C6',NULL,NULL,NULL),
(51237,10,1,7,NULL,NULL,'C8660A21B766646FBD67F481CFCF55C3',NULL,NULL,NULL),
(51261,10,1,7,NULL,NULL,'1BEBB57AE450331E9F8C301AA7876FAB',NULL,NULL,NULL),
(51313,10,1,7,NULL,NULL,'35419ED0AB16735CF720858F45DC300C',NULL,NULL,NULL);
/*!40000 ALTER TABLE `build_info` ENABLE KEYS */;
UNLOCK TABLES;
@@ -2326,7 +2340,7 @@ CREATE TABLE `realmlist` (
`timezone` tinyint unsigned NOT NULL DEFAULT '0',
`allowedSecurityLevel` tinyint unsigned NOT NULL DEFAULT '0',
`population` float unsigned NOT NULL DEFAULT '0',
`gamebuild` int unsigned NOT NULL DEFAULT '50000',
`gamebuild` int unsigned NOT NULL DEFAULT '51313',
`Region` tinyint unsigned NOT NULL DEFAULT '1',
`Battlegroup` tinyint unsigned NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
@@ -2341,7 +2355,7 @@ CREATE TABLE `realmlist` (
LOCK TABLES `realmlist` WRITE;
/*!40000 ALTER TABLE `realmlist` DISABLE KEYS */;
INSERT INTO `realmlist` VALUES
(1,'Trinity','127.0.0.1','127.0.0.1','255.255.255.0',8085,0,0,1,0,0,50000,1,1);
(1,'Trinity','127.0.0.1','127.0.0.1','255.255.255.0',8085,0,0,1,0,0,51313,1,1);
/*!40000 ALTER TABLE `realmlist` ENABLE KEYS */;
UNLOCK TABLES;
@@ -2693,20 +2707,34 @@ INSERT INTO `updates` VALUES
('2023_03_31_00_auth.sql','3F8CB31A261BCFE5C9A08B12945221CAA652AB24','ARCHIVED','2023-03-31 11:15:43',0),
('2023_03_31_01_auth.sql','A70E14B46537BC9208663B94EDF6CE51CB1B23BA','ARCHIVED','2023-03-31 23:16:09',0),
('2023_04_02_00_auth.sql','0238E0CE22D6422B19F648D026349A018CD4DB04','ARCHIVED','2023-04-02 01:02:26',0),
('2023_04_05_00_auth.sql','67317FC9DAA66EBF68468E60F99E1F6DD5B237E8','RELEASED','2023-04-05 10:39:51',0),
('2023_04_06_00_auth.sql','FECA06F32D077B1660D9FF8204D94F5C8E4065B4','RELEASED','2023-04-06 04:18:58',0),
('2023_04_12_00_auth.sql','E28F892FCC2A923683E5EEE24E98C618A9534318','RELEASED','2023-04-12 00:26:10',0),
('2023_04_25_00_auth.sql','AF297F37715F4A4C84E84182358C26CA83B0C655','RELEASED','2023-04-25 11:14:36',0),
('2023_04_28_00_auth.sql','A686A23CE63EE116F0F100F93ABB07CD0450E937','RELEASED','2023-04-28 01:50:20',0),
('2023_05_04_00_auth.sql','1015EC7619C1F43B9FD70C8971F883D0CBF4D002','RELEASED','2023-05-04 16:02:32',0),
('2023_05_05_00_auth.sql','C0F435B417D238619DC390F52B27BA0E08DDE2CF','RELEASED','2023-05-05 00:55:38',0),
('2023_05_09_00_auth.sql','E14DC7567533284034ADCD74ED99486A4AD331AE','RELEASED','2023-05-09 01:07:29',0),
('2023_05_15_00_auth.sql','B2A9E5D5ECDC04C44136B4BAC7350AAF1522E916','RELEASED','2023-05-15 00:36:20',0),
('2023_05_23_00_auth.sql','C58C31ABA0AF08508B1946143746C44FB6ACB824','RELEASED','2023-05-23 09:23:42',0),
('2023_05_25_00_auth.sql','52C460A556EE08EF149E55E021AF0A9B5EC9AE13','RELEASED','2023-05-25 00:34:18',0),
('2023_05_27_00_auth.sql','C7B7718915274FC21BAE243D42D7419F67F93792','RELEASED','2023-05-27 12:10:20',0),
('2023_06_06_00_auth.sql','F327269C75DF6D09B3D7B33137681E0C1188120A','RELEASED','2023-06-06 00:50:17',0),
('2023_06_12_00_auth.sql','5BEE858205C3EDE75C5A5A1E46FBEE2257F97B83','RELEASED','2023-06-12 23:47:51',0);
('2023_04_05_00_auth.sql','67317FC9DAA66EBF68468E60F99E1F6DD5B237E8','ARCHIVED','2023-04-05 10:39:51',0),
('2023_04_06_00_auth.sql','FECA06F32D077B1660D9FF8204D94F5C8E4065B4','ARCHIVED','2023-04-06 04:18:58',0),
('2023_04_12_00_auth.sql','E28F892FCC2A923683E5EEE24E98C618A9534318','ARCHIVED','2023-04-12 00:26:10',0),
('2023_04_25_00_auth.sql','AF297F37715F4A4C84E84182358C26CA83B0C655','ARCHIVED','2023-04-25 11:14:36',0),
('2023_04_28_00_auth.sql','779248686CB60F21CA7E9514E33B2D3E37C91B9E','ARCHIVED','2023-07-14 08:19:57',0),
('2023_05_04_00_auth.sql','1015EC7619C1F43B9FD70C8971F883D0CBF4D002','ARCHIVED','2023-05-04 16:02:32',0),
('2023_05_05_00_auth.sql','C0F435B417D238619DC390F52B27BA0E08DDE2CF','ARCHIVED','2023-05-05 00:55:38',0),
('2023_05_09_00_auth.sql','E14DC7567533284034ADCD74ED99486A4AD331AE','ARCHIVED','2023-05-09 01:07:29',0),
('2023_05_15_00_auth.sql','B2A9E5D5ECDC04C44136B4BAC7350AAF1522E916','ARCHIVED','2023-05-15 00:36:20',0),
('2023_05_23_00_auth.sql','C58C31ABA0AF08508B1946143746C44FB6ACB824','ARCHIVED','2023-05-23 09:23:42',0),
('2023_05_25_00_auth.sql','52C460A556EE08EF149E55E021AF0A9B5EC9AE13','ARCHIVED','2023-05-25 00:34:18',0),
('2023_05_27_00_auth.sql','C7B7718915274FC21BAE243D42D7419F67F93792','ARCHIVED','2023-05-27 12:10:20',0),
('2023_06_06_00_auth.sql','F327269C75DF6D09B3D7B33137681E0C1188120A','ARCHIVED','2023-06-06 00:50:17',0),
('2023_06_12_00_auth.sql','5BEE858205C3EDE75C5A5A1E46FBEE2257F97B83','ARCHIVED','2023-06-12 23:47:51',0),
('2023_07_12_00_auth.sql','E610FC5F0B1079070F69B5AAA6D6BDA5630B081F','ARCHIVED','2023-07-12 11:21:50',0),
('2023_07_13_00_auth.sql','BF718B6F8F2A324092D95BC1370120F0EE699BD2','ARCHIVED','2023-07-13 19:53:43',0),
('2023_07_14_00_auth.sql','B66CDB7EE7E554992BB2A9DAB3C16122411C81DF','ARCHIVED','2023-07-14 08:24:44',0),
('2023_07_14_01_auth.sql','8037C5101A08824DA6FE6B16E0004704DFC5B8FA','RELEASED','2023-07-14 19:35:41',0),
('2023_07_15_00_auth.sql','89D51F3E0EAAA957A7C0E4A4A7812505F61F12E6','RELEASED','2023-07-15 00:15:31',0),
('2023_07_19_00_auth.sql','8FE0EAB6C8DA5B060E95A9715F3D374340E361DD','RELEASED','2023-07-19 19:31:35',0),
('2023_07_22_00_auth.sql','38BDC8DE5697366E26588552830E34E420861008','RELEASED','2023-07-22 13:57:13',0),
('2023_07_28_00_auth.sql','1CC6C4E639ED9FD2EABFD0713C4D809C707E5E3F','RELEASED','2023-07-28 20:03:06',0),
('2023_08_03_00_auth.sql','57B92FF9D84AFE5F37A533F8F7187E26A708D8EE','RELEASED','2023-08-03 22:49:11',0),
('2023_08_09_00_auth.sql','3A0B9E91EB66D237785CD3F3CDFE5A6EAB33578E','RELEASED','2023-08-09 10:01:04',0),
('2023_08_31_00_auth.sql','3A2242F0755CCC7658F458847B12E308FE75A314','RELEASED','2023-08-31 19:06:27',0),
('2023_09_07_00_auth.sql','9127F7B6723477DE25886D451FE174ABF2039B94','RELEASED','2023-09-07 00:30:01',0),
('2023_09_08_00_auth.sql','AA4E52CC2344F503151C88284807E8B7319B7C69','RELEASED','2023-09-08 21:46:01',0),
('2023_09_13_00_auth.sql','49C44AE960C71C71DC9966D10D8DAA127976D22B','RELEASED','2023-09-13 00:30:28',0);
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
UNLOCK TABLES;
@@ -2849,4 +2877,4 @@ SET character_set_client = @saved_cs_client;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2023-04-02 1:02:28
-- Dump completed on 2023-07-14 8:24:46
+11 -7
View File
@@ -1,8 +1,8 @@
-- MySQL dump 10.13 Distrib 8.0.32, for Linux (x86_64)
-- MySQL dump 10.13 Distrib 8.0.33, for Linux (x86_64)
--
-- Host: localhost Database: characters
-- ------------------------------------------------------
-- Server version 8.0.32-0ubuntu0.20.04.2
-- Server version 8.0.33-0ubuntu0.20.04.2
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
@@ -636,6 +636,7 @@ CREATE TABLE `character_battleground_data` (
`taxiStart` int unsigned NOT NULL DEFAULT '0',
`taxiEnd` int unsigned NOT NULL DEFAULT '0',
`mountSpell` int unsigned NOT NULL DEFAULT '0',
`queueId` BIGINT UNSIGNED DEFAULT '0',
PRIMARY KEY (`guid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Player System';
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -2285,7 +2286,7 @@ CREATE TABLE `groups` (
`icon6` binary(16) NOT NULL,
`icon7` binary(16) NOT NULL,
`icon8` binary(16) NOT NULL,
`groupType` tinyint unsigned NOT NULL,
`groupType` smallint unsigned NOT NULL,
`difficulty` tinyint unsigned NOT NULL DEFAULT '1',
`raidDifficulty` tinyint unsigned NOT NULL DEFAULT '14',
`legacyRaidDifficulty` tinyint unsigned NOT NULL DEFAULT '3',
@@ -3397,7 +3398,7 @@ CREATE TABLE `pvpstats_battlegrounds` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`winner_faction` tinyint NOT NULL,
`bracket_id` tinyint unsigned NOT NULL,
`type` tinyint unsigned NOT NULL,
`type` int unsigned NOT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
@@ -3706,8 +3707,11 @@ INSERT INTO `updates` VALUES
('2023_02_03_00_characters.sql','A04BA4386B3D5C60407D22CA4BF9A4A6258AA39D','ARCHIVED','2023-02-03 01:13:52',0),
('2023_02_08_00_characters.sql','C9DF607CCE99540F613F5E25E17090176C995C7C','ARCHIVED','2023-02-08 21:41:17',0),
('2023_04_02_00_characters.sql','AAC1B81AFE4716CF4DAB6BCF01D22F421BFAD253','ARCHIVED','2023-04-02 01:02:26',0),
('2023_05_04_00_characters.sql','9AC370E51507F5BD368707E90D8F6BF0FF16CA09','RELEASED','2023-05-04 16:17:31',0),
('2023_05_19_00_characters.sql','5E0C9338554BAA481566EDFF3FE2FCEFF1B67DA9','RELEASED','2023-05-19 18:40:42',0);
('2023_05_04_00_characters.sql','9AC370E51507F5BD368707E90D8F6BF0FF16CA09','ARCHIVED','2023-05-04 16:17:31',0),
('2023_05_19_00_characters.sql','5E0C9338554BAA481566EDFF3FE2FCEFF1B67DA9','ARCHIVED','2023-05-19 18:40:42',0),
('2023_07_14_00_characters.sql','BB44A95A9C4B0C16878A5316AC38E702A8AACDE2','ARCHIVED','2023-07-14 08:24:44',0),
('2023_08_26_00_characters.sql','FA50838609AB5E645FB2DCAC970BD5706F9EFAAF','RELEASED','2023-08-26 12:18:22',0),
('2023_09_14_00_characters.sql','DAC56929C724C2971A4476400F2439CBDFAF3C5C','RELEASED','2023-09-13 22:20:22',0);
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
UNLOCK TABLES;
@@ -3834,4 +3838,4 @@ UNLOCK TABLES;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2023-04-02 1:02:28
-- Dump completed on 2023-07-14 8:24:47
+241 -14
View File
@@ -1,8 +1,8 @@
-- MySQL dump 10.13 Distrib 8.0.32, for Linux (x86_64)
-- MySQL dump 10.13 Distrib 8.0.33, for Linux (x86_64)
--
-- Host: localhost Database: hotfixes
-- ------------------------------------------------------
-- Server version 8.0.32-0ubuntu0.20.04.2
-- Server version 8.0.33-0ubuntu0.20.04.2
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
@@ -318,7 +318,7 @@ CREATE TABLE `area_table` (
`UwIntroSound` int unsigned NOT NULL DEFAULT '0',
`FactionGroupMask` tinyint unsigned NOT NULL DEFAULT '0',
`AmbientMultiplier` float NOT NULL DEFAULT '0',
`MountFlags` tinyint unsigned NOT NULL DEFAULT '0',
`MountFlags` int NOT NULL DEFAULT '0',
`PvpCombatWorldStateID` smallint NOT NULL DEFAULT '0',
`WildBattlePetLevelMin` tinyint unsigned NOT NULL DEFAULT '0',
`WildBattlePetLevelMax` tinyint unsigned NOT NULL DEFAULT '0',
@@ -1109,6 +1109,55 @@ CREATE TABLE `barber_shop_style_locale` (
PARTITION zhTW VALUES IN ('zhTW') ENGINE = InnoDB) */;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `battle_pet_ability`
--
DROP TABLE IF EXISTS `battle_pet_ability`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `battle_pet_ability` (
`ID` int unsigned NOT NULL DEFAULT '0',
`Name` text COLLATE utf8mb4_unicode_ci,
`Description` text COLLATE utf8mb4_unicode_ci,
`IconFileDataID` int NOT NULL DEFAULT '0',
`PetTypeEnum` tinyint NOT NULL DEFAULT '0',
`Cooldown` int unsigned NOT NULL DEFAULT '0',
`BattlePetVisualID` smallint unsigned NOT NULL DEFAULT '0',
`Flags` tinyint unsigned NOT NULL DEFAULT '0',
`VerifiedBuild` int NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`,`VerifiedBuild`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `battle_pet_ability_locale`
--
DROP TABLE IF EXISTS `battle_pet_ability_locale`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `battle_pet_ability_locale` (
`ID` int unsigned NOT NULL DEFAULT '0',
`locale` varchar(4) COLLATE utf8mb4_unicode_ci NOT NULL,
`Name_lang` text COLLATE utf8mb4_unicode_ci,
`Description_lang` text COLLATE utf8mb4_unicode_ci,
`VerifiedBuild` int NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`,`locale`,`VerifiedBuild`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
/*!50500 PARTITION BY LIST COLUMNS(locale)
(PARTITION deDE VALUES IN ('deDE') ENGINE = InnoDB,
PARTITION esES VALUES IN ('esES') ENGINE = InnoDB,
PARTITION esMX VALUES IN ('esMX') ENGINE = InnoDB,
PARTITION frFR VALUES IN ('frFR') ENGINE = InnoDB,
PARTITION itIT VALUES IN ('itIT') ENGINE = InnoDB,
PARTITION koKR VALUES IN ('koKR') ENGINE = InnoDB,
PARTITION ptBR VALUES IN ('ptBR') ENGINE = InnoDB,
PARTITION ruRU VALUES IN ('ruRU') ENGINE = InnoDB,
PARTITION zhCN VALUES IN ('zhCN') ENGINE = InnoDB,
PARTITION zhTW VALUES IN ('zhTW') ENGINE = InnoDB) */;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `battle_pet_breed_quality`
--
@@ -1383,6 +1432,27 @@ CREATE TABLE `cfg_regions` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `challenge_mode_item_bonus_override`
--
DROP TABLE IF EXISTS `challenge_mode_item_bonus_override`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `challenge_mode_item_bonus_override` (
`ID` int unsigned NOT NULL DEFAULT '0',
`ItemBonusTreeGroupID` int NOT NULL DEFAULT '0',
`DstItemBonusTreeID` int NOT NULL DEFAULT '0',
`Type` tinyint NOT NULL DEFAULT '0',
`Value` int NOT NULL DEFAULT '0',
`MythicPlusSeasonID` int NOT NULL DEFAULT '0',
`PvPSeasonID` int NOT NULL DEFAULT '0',
`SrcItemBonusTreeID` int unsigned NOT NULL DEFAULT '0',
`VerifiedBuild` int NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`,`VerifiedBuild`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `char_titles`
--
@@ -1646,6 +1716,7 @@ CREATE TABLE `chr_customization_choice` (
`UiOrderIndex` smallint unsigned NOT NULL DEFAULT '0',
`Flags` int NOT NULL DEFAULT '0',
`AddedInPatch` int NOT NULL DEFAULT '0',
`SoundKitID` int NOT NULL DEFAULT '0',
`SwatchColor1` int NOT NULL DEFAULT '0',
`SwatchColor2` int NOT NULL DEFAULT '0',
`VerifiedBuild` int NOT NULL DEFAULT '0',
@@ -1717,6 +1788,7 @@ CREATE TABLE `chr_customization_element` (
`ChrCustomizationDisplayInfoID` int NOT NULL DEFAULT '0',
`ChrCustItemGeoModifyID` int NOT NULL DEFAULT '0',
`ChrCustomizationVoiceID` int NOT NULL DEFAULT '0',
`AnimKitID` int NOT NULL DEFAULT '0',
`VerifiedBuild` int NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`,`VerifiedBuild`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
@@ -1784,6 +1856,7 @@ DROP TABLE IF EXISTS `chr_customization_req`;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `chr_customization_req` (
`ID` int unsigned NOT NULL DEFAULT '0',
`RaceMask` bigint NOT NULL DEFAULT '0',
`ReqSource` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
`Flags` int NOT NULL DEFAULT '0',
`ClassMask` int NOT NULL DEFAULT '0',
@@ -2106,6 +2179,43 @@ CREATE TABLE `cinematic_sequences` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `conditional_chr_model`
--
DROP TABLE IF EXISTS `conditional_chr_model`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `conditional_chr_model` (
`ID` int NOT NULL DEFAULT '0',
`ChrModelID` int unsigned NOT NULL DEFAULT '0',
`ChrCustomizationReqID` int NOT NULL DEFAULT '0',
`PlayerConditionID` int NOT NULL DEFAULT '0',
`Flags` int NOT NULL DEFAULT '0',
`ChrCustomizationCategoryID` int NOT NULL DEFAULT '0',
`VerifiedBuild` int NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`,`VerifiedBuild`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `conditional_content_tuning`
--
DROP TABLE IF EXISTS `conditional_content_tuning`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `conditional_content_tuning` (
`ID` int unsigned NOT NULL DEFAULT '0',
`OrderIndex` int NOT NULL DEFAULT '0',
`RedirectContentTuningID` int NOT NULL DEFAULT '0',
`RedirectFlag` int NOT NULL DEFAULT '0',
`ParentContentTuningID` int unsigned NOT NULL DEFAULT '0',
`VerifiedBuild` int NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`,`VerifiedBuild`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `content_tuning`
--
@@ -2126,6 +2236,7 @@ CREATE TABLE `content_tuning` (
`TargetLevelMin` int NOT NULL DEFAULT '0',
`TargetLevelMax` int NOT NULL DEFAULT '0',
`MinItemLevel` int NOT NULL DEFAULT '0',
`QuestXpMultiplier` float NOT NULL DEFAULT '0',
`VerifiedBuild` int NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`,`VerifiedBuild`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
@@ -2149,6 +2260,22 @@ CREATE TABLE `content_tuning_x_expected` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `content_tuning_x_label`
--
DROP TABLE IF EXISTS `content_tuning_x_label`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `content_tuning_x_label` (
`ID` int unsigned NOT NULL DEFAULT '0',
`LabelID` int NOT NULL DEFAULT '0',
`ContentTuningID` int unsigned NOT NULL DEFAULT '0',
`VerifiedBuild` int NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`,`VerifiedBuild`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `conversation_line`
--
@@ -2467,12 +2594,12 @@ CREATE TABLE `criteria` (
`Type` smallint NOT NULL DEFAULT '0',
`Asset` int NOT NULL DEFAULT '0',
`ModifierTreeId` int unsigned NOT NULL DEFAULT '0',
`StartEvent` tinyint unsigned NOT NULL DEFAULT '0',
`StartEvent` int NOT NULL DEFAULT '0',
`StartAsset` int NOT NULL DEFAULT '0',
`StartTimer` smallint unsigned NOT NULL DEFAULT '0',
`FailEvent` tinyint unsigned NOT NULL DEFAULT '0',
`FailEvent` int NOT NULL DEFAULT '0',
`FailAsset` int NOT NULL DEFAULT '0',
`Flags` tinyint unsigned NOT NULL DEFAULT '0',
`Flags` int NOT NULL DEFAULT '0',
`EligibilityWorldStateID` smallint NOT NULL DEFAULT '0',
`EligibilityWorldStateValue` tinyint NOT NULL DEFAULT '0',
`VerifiedBuild` int NOT NULL DEFAULT '0',
@@ -2492,7 +2619,7 @@ CREATE TABLE `criteria_tree` (
`Description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
`Parent` int unsigned NOT NULL DEFAULT '0',
`Amount` int unsigned NOT NULL DEFAULT '0',
`Operator` tinyint NOT NULL DEFAULT '0',
`Operator` int NOT NULL DEFAULT '0',
`CriteriaID` int unsigned NOT NULL DEFAULT '0',
`OrderIndex` int NOT NULL DEFAULT '0',
`Flags` int NOT NULL DEFAULT '0',
@@ -2667,7 +2794,7 @@ CREATE TABLE `curve_point` (
`PreSLSquishPosX` float NOT NULL DEFAULT '0',
`PreSLSquishPosY` float NOT NULL DEFAULT '0',
`ID` int unsigned NOT NULL DEFAULT '0',
`CurveID` smallint unsigned NOT NULL DEFAULT '0',
`CurveID` int NOT NULL DEFAULT '0',
`OrderIndex` tinyint unsigned NOT NULL DEFAULT '0',
`VerifiedBuild` int NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`,`VerifiedBuild`)
@@ -3220,6 +3347,9 @@ CREATE TABLE `gameobject_display_info` (
`ObjectEffectPackageID` smallint NOT NULL DEFAULT '0',
`OverrideLootEffectScale` float NOT NULL DEFAULT '0',
`OverrideNameScale` float NOT NULL DEFAULT '0',
`AlternateDisplayType` int NOT NULL DEFAULT '0',
`ClientCreatureDisplayInfoID` int NOT NULL DEFAULT '0',
`ClientItemID` int NOT NULL DEFAULT '0',
`VerifiedBuild` int NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`,`VerifiedBuild`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
@@ -4386,6 +4516,28 @@ CREATE TABLE `item_bonus` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `item_bonus_list_group_entry`
--
DROP TABLE IF EXISTS `item_bonus_list_group_entry`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `item_bonus_list_group_entry` (
`ID` int unsigned NOT NULL DEFAULT '0',
`ItemBonusListGroupID` int NOT NULL DEFAULT '0',
`ItemBonusListID` int NOT NULL DEFAULT '0',
`ItemLevelSelectorID` int NOT NULL DEFAULT '0',
`SequenceValue` int NOT NULL DEFAULT '0',
`ItemExtendedCostID` int NOT NULL DEFAULT '0',
`PlayerConditionID` int NOT NULL DEFAULT '0',
`Flags` int NOT NULL DEFAULT '0',
`ItemLogicalCostGroupID` int NOT NULL DEFAULT '0',
`VerifiedBuild` int NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`,`VerifiedBuild`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `item_bonus_list_level_delta`
--
@@ -4401,6 +4553,22 @@ CREATE TABLE `item_bonus_list_level_delta` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `item_bonus_tree`
--
DROP TABLE IF EXISTS `item_bonus_tree`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `item_bonus_tree` (
`ID` int unsigned NOT NULL DEFAULT '0',
`Flags` int NOT NULL DEFAULT '0',
`InventoryTypeSlotMask` int NOT NULL DEFAULT '0',
`VerifiedBuild` int NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`,`VerifiedBuild`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `item_bonus_tree_node`
--
@@ -4416,6 +4584,8 @@ CREATE TABLE `item_bonus_tree_node` (
`ChildItemLevelSelectorID` smallint unsigned NOT NULL DEFAULT '0',
`ChildItemBonusListGroupID` int NOT NULL DEFAULT '0',
`IblGroupPointsModSetID` int NOT NULL DEFAULT '0',
`MinMythicPlusLevel` int NOT NULL DEFAULT '0',
`MaxMythicPlusLevel` int NOT NULL DEFAULT '0',
`ParentItemBonusTreeID` int unsigned NOT NULL DEFAULT '0',
`VerifiedBuild` int NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`,`VerifiedBuild`)
@@ -4484,6 +4654,27 @@ CREATE TABLE `item_class_locale` (
PARTITION zhTW VALUES IN ('zhTW') ENGINE = InnoDB) */;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `item_context_picker_entry`
--
DROP TABLE IF EXISTS `item_context_picker_entry`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `item_context_picker_entry` (
`ID` int unsigned NOT NULL DEFAULT '0',
`ItemCreationContext` tinyint unsigned NOT NULL DEFAULT '0',
`OrderIndex` tinyint unsigned NOT NULL DEFAULT '0',
`PVal` int NOT NULL DEFAULT '0',
`LabelID` int NOT NULL DEFAULT '0',
`Flags` int unsigned NOT NULL DEFAULT '0',
`PlayerConditionID` int unsigned NOT NULL DEFAULT '0',
`ItemContextPickerID` int unsigned NOT NULL DEFAULT '0',
`VerifiedBuild` int NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`,`VerifiedBuild`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `item_currency_cost`
--
@@ -6243,6 +6434,24 @@ CREATE TABLE `movie` (
`KeyID` tinyint unsigned NOT NULL DEFAULT '0',
`AudioFileDataID` int unsigned NOT NULL DEFAULT '0',
`SubtitleFileDataID` int unsigned NOT NULL DEFAULT '0',
`SubtitleFileFormat` int NOT NULL DEFAULT '0',
`VerifiedBuild` int NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`,`VerifiedBuild`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `mythic_plus_season`
--
DROP TABLE IF EXISTS `mythic_plus_season`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `mythic_plus_season` (
`ID` int unsigned NOT NULL DEFAULT '0',
`MilestoneSeason` int NOT NULL DEFAULT '0',
`ExpansionLevel` int NOT NULL DEFAULT '0',
`HeroicLFGDungeonMinGear` int NOT NULL DEFAULT '0',
`VerifiedBuild` int NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`,`VerifiedBuild`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
@@ -6728,6 +6937,23 @@ CREATE TABLE `pvp_item` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `pvp_season`
--
DROP TABLE IF EXISTS `pvp_season`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `pvp_season` (
`ID` int unsigned NOT NULL DEFAULT '0',
`MilestoneSeason` int NOT NULL DEFAULT '0',
`AllianceAchievementID` int NOT NULL DEFAULT '0',
`HordeAchievementID` int NOT NULL DEFAULT '0',
`VerifiedBuild` int NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`,`VerifiedBuild`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `pvp_talent`
--
@@ -7723,7 +7949,7 @@ DROP TABLE IF EXISTS `spell_category`;
CREATE TABLE `spell_category` (
`ID` int unsigned NOT NULL DEFAULT '0',
`Name` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
`Flags` tinyint NOT NULL DEFAULT '0',
`Flags` int NOT NULL DEFAULT '0',
`UsesPerWeek` tinyint unsigned NOT NULL DEFAULT '0',
`MaxCharges` tinyint NOT NULL DEFAULT '0',
`ChargeRecoveryTime` int NOT NULL DEFAULT '0',
@@ -8073,7 +8299,7 @@ DROP TABLE IF EXISTS `spell_keybound_override`;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `spell_keybound_override` (
`ID` int unsigned NOT NULL DEFAULT '0',
`Function` text COLLATE utf8mb4_unicode_ci,
`Function` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
`Type` tinyint NOT NULL DEFAULT '0',
`Data` int NOT NULL DEFAULT '0',
`Flags` int NOT NULL DEFAULT '0',
@@ -9671,10 +9897,11 @@ CREATE TABLE `ui_map` (
`ID` int unsigned NOT NULL DEFAULT '0',
`ParentUiMapID` int NOT NULL DEFAULT '0',
`Flags` int NOT NULL DEFAULT '0',
`System` int unsigned NOT NULL DEFAULT '0',
`Type` int unsigned NOT NULL DEFAULT '0',
`System` tinyint unsigned NOT NULL DEFAULT '0',
`Type` tinyint unsigned NOT NULL DEFAULT '0',
`BountySetID` int NOT NULL DEFAULT '0',
`BountyDisplayLocation` int unsigned NOT NULL DEFAULT '0',
`VisibilityPlayerConditionID2` int NOT NULL DEFAULT '0',
`VisibilityPlayerConditionID` int NOT NULL DEFAULT '0',
`HelpTextPosition` tinyint NOT NULL DEFAULT '0',
`BkgAtlasID` int NOT NULL DEFAULT '0',
@@ -9996,7 +10223,7 @@ DROP TABLE IF EXISTS `vehicle`;
CREATE TABLE `vehicle` (
`ID` int unsigned NOT NULL DEFAULT '0',
`Flags` int NOT NULL DEFAULT '0',
`FlagsB` tinyint unsigned NOT NULL DEFAULT '0',
`FlagsB` int NOT NULL DEFAULT '0',
`TurnSpeed` float NOT NULL DEFAULT '0',
`PitchSpeed` float NOT NULL DEFAULT '0',
`PitchMin` float NOT NULL DEFAULT '0',
@@ -10238,4 +10465,4 @@ CREATE TABLE `world_state_expression` (
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2023-04-02 1:02:34
-- Dump completed on 2023-07-14 8:24:54
+101 -78
View File
@@ -1,8 +1,8 @@
-- MySQL dump 10.13 Distrib 8.0.32, for Linux (x86_64)
-- MySQL dump 10.13 Distrib 8.0.33, for Linux (x86_64)
--
-- Host: localhost Database: world
-- ------------------------------------------------------
-- Server version 8.0.32-0ubuntu0.20.04.2
-- Server version 8.0.33-0ubuntu0.20.04.2
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
@@ -550,6 +550,7 @@ CREATE TABLE `conversation_line_template` (
`UiCameraID` int unsigned NOT NULL DEFAULT '0',
`ActorIdx` tinyint unsigned NOT NULL DEFAULT '0',
`Flags` tinyint unsigned NOT NULL DEFAULT '0',
`ChatType` tinyint unsigned NOT NULL DEFAULT '0',
`VerifiedBuild` int unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
@@ -606,7 +607,6 @@ CREATE TABLE `creature` (
`unit_flags` int unsigned NOT NULL DEFAULT '0',
`unit_flags2` int unsigned NOT NULL DEFAULT '0',
`unit_flags3` int unsigned NOT NULL DEFAULT '0',
`dynamicflags` int unsigned NOT NULL DEFAULT '0',
`ScriptName` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`StringId` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`VerifiedBuild` int NOT NULL DEFAULT '0',
@@ -824,10 +824,11 @@ DROP TABLE IF EXISTS `creature_questitem`;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `creature_questitem` (
`CreatureEntry` int unsigned NOT NULL DEFAULT '0',
`DifficultyID` tinyint unsigned NOT NULL DEFAULT '0',
`Idx` int unsigned NOT NULL DEFAULT '0',
`ItemId` int unsigned NOT NULL DEFAULT '0',
`VerifiedBuild` int NOT NULL DEFAULT '0',
PRIMARY KEY (`CreatureEntry`,`Idx`)
PRIMARY KEY (`CreatureEntry`,`DifficultyID`,`Idx`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
@@ -893,9 +894,6 @@ DROP TABLE IF EXISTS `creature_template`;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `creature_template` (
`entry` int unsigned NOT NULL DEFAULT '0',
`difficulty_entry_1` int unsigned NOT NULL DEFAULT '0',
`difficulty_entry_2` int unsigned NOT NULL DEFAULT '0',
`difficulty_entry_3` int unsigned NOT NULL DEFAULT '0',
`KillCredit1` int unsigned NOT NULL DEFAULT '0',
`KillCredit2` int unsigned NOT NULL DEFAULT '0',
`name` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
@@ -903,8 +901,6 @@ CREATE TABLE `creature_template` (
`subname` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
`TitleAlt` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
`IconName` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`gossip_menu_id` int unsigned NOT NULL DEFAULT '0',
`HealthScalingExpansion` int NOT NULL DEFAULT '0',
`RequiredExpansion` int NOT NULL DEFAULT '0',
`VignetteID` int NOT NULL DEFAULT '0',
`faction` smallint unsigned NOT NULL DEFAULT '0',
@@ -922,31 +918,15 @@ CREATE TABLE `creature_template` (
`unit_flags` int unsigned NOT NULL DEFAULT '0',
`unit_flags2` int unsigned NOT NULL DEFAULT '0',
`unit_flags3` int unsigned NOT NULL DEFAULT '0',
`dynamicflags` int unsigned NOT NULL DEFAULT '0',
`family` int NOT NULL DEFAULT '0',
`trainer_class` tinyint unsigned NOT NULL DEFAULT '0',
`type` tinyint unsigned NOT NULL DEFAULT '0',
`type_flags` int unsigned NOT NULL DEFAULT '0',
`type_flags2` int unsigned NOT NULL DEFAULT '0',
`lootid` int unsigned NOT NULL DEFAULT '0',
`pickpocketloot` int unsigned NOT NULL DEFAULT '0',
`skinloot` int unsigned NOT NULL DEFAULT '0',
`VehicleId` int unsigned NOT NULL DEFAULT '0',
`mingold` int unsigned NOT NULL DEFAULT '0',
`maxgold` int unsigned NOT NULL DEFAULT '0',
`AIName` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`MovementType` tinyint unsigned NOT NULL DEFAULT '0',
`HoverHeight` float NOT NULL DEFAULT '1',
`HealthModifier` float NOT NULL DEFAULT '1',
`HealthModifierExtra` float NOT NULL DEFAULT '1',
`ManaModifier` float NOT NULL DEFAULT '1',
`ManaModifierExtra` float NOT NULL DEFAULT '1',
`ArmorModifier` float NOT NULL DEFAULT '1',
`DamageModifier` float NOT NULL DEFAULT '1',
`ExperienceModifier` float NOT NULL DEFAULT '1',
`RacialLeader` tinyint unsigned NOT NULL DEFAULT '0',
`movementId` int unsigned NOT NULL DEFAULT '0',
`CreatureDifficultyID` int NOT NULL DEFAULT '0',
`WidgetSetID` int NOT NULL DEFAULT '0',
`WidgetSetUnitConditionID` int NOT NULL DEFAULT '0',
`RegenHealth` tinyint unsigned NOT NULL DEFAULT '1',
@@ -987,6 +967,60 @@ CREATE TABLE `creature_template_addon` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `creature_template_difficulty`
--
DROP TABLE IF EXISTS `creature_template_difficulty`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `creature_template_difficulty` (
`Entry` int unsigned NOT NULL,
`DifficultyID` tinyint unsigned NOT NULL DEFAULT '0',
`LevelScalingDeltaMin` smallint NOT NULL DEFAULT '0',
`LevelScalingDeltaMax` smallint NOT NULL DEFAULT '0',
`ContentTuningID` int NOT NULL DEFAULT '0',
`HealthScalingExpansion` int NOT NULL DEFAULT '0',
`HealthModifier` float NOT NULL DEFAULT '1',
`ManaModifier` float NOT NULL DEFAULT '1',
`ArmorModifier` float NOT NULL DEFAULT '1',
`DamageModifier` float NOT NULL DEFAULT '1',
`CreatureDifficultyID` int NOT NULL DEFAULT '0',
`TypeFlags` int unsigned NOT NULL DEFAULT '0',
`TypeFlags2` int unsigned NOT NULL DEFAULT '0',
`LootID` int unsigned NOT NULL DEFAULT '0',
`PickPocketLootID` int unsigned NOT NULL DEFAULT '0',
`SkinLootID` int unsigned NOT NULL DEFAULT '0',
`GoldMin` int unsigned NOT NULL DEFAULT '0',
`GoldMax` int unsigned NOT NULL DEFAULT '0',
`StaticFlags1` int unsigned NOT NULL DEFAULT '0',
`StaticFlags2` int unsigned NOT NULL DEFAULT '0',
`StaticFlags3` int unsigned NOT NULL DEFAULT '0',
`StaticFlags4` int unsigned NOT NULL DEFAULT '0',
`StaticFlags5` int unsigned NOT NULL DEFAULT '0',
`StaticFlags6` int unsigned NOT NULL DEFAULT '0',
`StaticFlags7` int unsigned NOT NULL DEFAULT '0',
`StaticFlags8` int unsigned NOT NULL DEFAULT '0',
`VerifiedBuild` int NOT NULL DEFAULT '0',
PRIMARY KEY (`Entry`,`DifficultyID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `creature_template_gossip`
--
DROP TABLE IF EXISTS `creature_template_gossip`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `creature_template_gossip` (
`CreatureID` int unsigned NOT NULL,
`MenuID` int unsigned NOT NULL,
`VerifiedBuild` int NOT NULL DEFAULT '0',
PRIMARY KEY (`CreatureID`,`MenuID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `creature_template_locale`
--
@@ -1061,21 +1095,17 @@ CREATE TABLE `creature_template_resistance` (
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `creature_template_scaling`
-- Table structure for table `creature_template_sparring`
--
DROP TABLE IF EXISTS `creature_template_scaling`;
DROP TABLE IF EXISTS `creature_template_sparring`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `creature_template_scaling` (
CREATE TABLE `creature_template_sparring` (
`Entry` int unsigned NOT NULL,
`DifficultyID` tinyint unsigned NOT NULL DEFAULT '0',
`LevelScalingDeltaMin` smallint NOT NULL DEFAULT '0',
`LevelScalingDeltaMax` smallint NOT NULL DEFAULT '0',
`ContentTuningID` int NOT NULL DEFAULT '0',
`VerifiedBuild` int NOT NULL DEFAULT '0',
PRIMARY KEY (`Entry`,`DifficultyID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
`NoNPCDamageBelowHealthPct` float NOT NULL,
PRIMARY KEY (`Entry`,`NoNPCDamageBelowHealthPct`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
@@ -1210,6 +1240,20 @@ CREATE TABLE `disenchant_loot_template` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Loot System';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `event_script_names`
--
DROP TABLE IF EXISTS `event_script_names`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `event_script_names` (
`Id` int unsigned NOT NULL,
`ScriptName` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `event_scripts`
--
@@ -1524,7 +1568,7 @@ CREATE TABLE `game_tele` (
`map` smallint unsigned NOT NULL DEFAULT '0',
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1965 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Tele Command';
) ENGINE=InnoDB AUTO_INCREMENT=1967 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Tele Command';
/*!40101 SET character_set_client = @saved_cs_client */;
--
@@ -1920,7 +1964,6 @@ DROP TABLE IF EXISTS `graveyard_zone`;
CREATE TABLE `graveyard_zone` (
`ID` int unsigned NOT NULL DEFAULT '0',
`GhostZone` int unsigned NOT NULL DEFAULT '0',
`Faction` smallint unsigned NOT NULL DEFAULT '0',
`Comment` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
PRIMARY KEY (`ID`,`GhostZone`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Trigger System';
@@ -3078,6 +3121,24 @@ CREATE TABLE `quest_objectives` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `quest_objectives_completion_effect`
--
DROP TABLE IF EXISTS `quest_objectives_completion_effect`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `quest_objectives_completion_effect` (
`ObjectiveID` int NOT NULL,
`GameEventID` int DEFAULT NULL,
`SpellID` int DEFAULT NULL,
`ConversationID` int DEFAULT NULL,
`UpdatePhaseShift` tinyint(1) DEFAULT '0',
`UpdateZoneAuras` tinyint(1) DEFAULT '0',
PRIMARY KEY (`ObjectiveID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `quest_objectives_locale`
--
@@ -3320,6 +3381,7 @@ CREATE TABLE `quest_reward_display_spell` (
`Idx` int unsigned NOT NULL,
`SpellID` int unsigned DEFAULT '0',
`PlayerConditionID` int unsigned DEFAULT '0',
`Type` int unsigned NOT NULL DEFAULT '0',
`VerifiedBuild` int NOT NULL DEFAULT '0',
PRIMARY KEY (`QuestID`,`Idx`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
@@ -3437,7 +3499,7 @@ CREATE TABLE `quest_template` (
`AcceptedSoundKitID` int unsigned NOT NULL DEFAULT '0',
`CompleteSoundKitID` int unsigned NOT NULL DEFAULT '0',
`AreaGroupID` int unsigned NOT NULL DEFAULT '0',
`TimeAllowed` int unsigned NOT NULL DEFAULT '0',
`TimeAllowed` bigint NOT NULL DEFAULT '0',
`AllowableRaces` bigint unsigned DEFAULT '0',
`TreasurePickerID` int NOT NULL DEFAULT '0',
`Expansion` int NOT NULL DEFAULT '0',
@@ -3727,25 +3789,6 @@ CREATE TABLE `script_spline_chain_waypoints` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `script_waypoint`
--
DROP TABLE IF EXISTS `script_waypoint`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `script_waypoint` (
`entry` int unsigned NOT NULL DEFAULT '0' COMMENT 'creature_template entry',
`pointid` int unsigned NOT NULL DEFAULT '0',
`location_x` float NOT NULL DEFAULT '0',
`location_y` float NOT NULL DEFAULT '0',
`location_z` float NOT NULL DEFAULT '0',
`waittime` int unsigned NOT NULL DEFAULT '0' COMMENT 'waittime in millisecs',
`point_comment` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
PRIMARY KEY (`entry`,`pointid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Script Creature waypoints';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `serverside_spell`
--
@@ -4748,26 +4791,6 @@ CREATE TABLE `waypoint_scripts` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `waypoints`
--
DROP TABLE IF EXISTS `waypoints`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `waypoints` (
`entry` int unsigned NOT NULL DEFAULT '0',
`pointid` int unsigned NOT NULL DEFAULT '0',
`position_x` float NOT NULL DEFAULT '0',
`position_y` float NOT NULL DEFAULT '0',
`position_z` float NOT NULL DEFAULT '0',
`orientation` float DEFAULT NULL,
`delay` int unsigned NOT NULL DEFAULT '0',
`point_comment` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
PRIMARY KEY (`entry`,`pointid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Creature waypoints';
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `world_safe_locs`
--
@@ -4872,4 +4895,4 @@ CREATE TABLE `world_state` (
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2023-04-02 1:02:30
-- Dump completed on 2023-07-14 8:24:49
@@ -0,0 +1,7 @@
DELETE FROM `build_info` WHERE `build`=50401;
INSERT INTO `build_info` (`build`,`majorVersion`,`minorVersion`,`bugfixVersion`,`hotfixVersion`,`winAuthSeed`,`win64AuthSeed`,`mac64AuthSeed`,`winChecksumSeed`,`macChecksumSeed`) VALUES
(50401,10,1,5,NULL,NULL,'3EEF52D902CCE81D16D0E255F0AA4938',NULL,NULL,NULL);
UPDATE `realmlist` SET `gamebuild`=50401 WHERE `gamebuild`=50000;
ALTER TABLE `realmlist` CHANGE `gamebuild` `gamebuild` int unsigned NOT NULL DEFAULT '50401';
@@ -0,0 +1,7 @@
DELETE FROM `build_info` WHERE `build`=50438;
INSERT INTO `build_info` (`build`,`majorVersion`,`minorVersion`,`bugfixVersion`,`hotfixVersion`,`winAuthSeed`,`win64AuthSeed`,`mac64AuthSeed`,`winChecksumSeed`,`macChecksumSeed`) VALUES
(50438,10,1,5,NULL,NULL,'0B5F68F06B129CB4C57702F6D30F260B',NULL,NULL,NULL);
UPDATE `realmlist` SET `gamebuild`=50438 WHERE `gamebuild`=50401;
ALTER TABLE `realmlist` CHANGE `gamebuild` `gamebuild` int unsigned NOT NULL DEFAULT '50438';
@@ -0,0 +1,33 @@
--
-- Table structure for table `conditional_chr_model`
--
DROP TABLE IF EXISTS `conditional_chr_model`;
CREATE TABLE `conditional_chr_model` (
`ID` int(11) NOT NULL DEFAULT '0',
`ChrModelID` int(10) unsigned NOT NULL DEFAULT '0',
`ChrCustomizationReqID` int(11) NOT NULL DEFAULT '0',
`PlayerConditionID` int(11) NOT NULL DEFAULT '0',
`Flags` int(11) NOT NULL DEFAULT '0',
`ChrCustomizationCategoryID` int(11) NOT NULL DEFAULT '0',
`VerifiedBuild` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`,`VerifiedBuild`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
ALTER TABLE `area_table` MODIFY `MountFlags` int NOT NULL DEFAULT 0 AFTER `AmbientMultiplier`;
ALTER TABLE `chr_customization_req` ADD `RaceMask` bigint NOT NULL DEFAULT 0 AFTER `ID`;
ALTER TABLE `criteria` MODIFY `StartEvent` int NOT NULL DEFAULT 0 AFTER `ModifierTreeId`;
ALTER TABLE `criteria` MODIFY `FailEvent` int NOT NULL DEFAULT 0 AFTER `StartTimer`;
ALTER TABLE `criteria` MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `FailAsset`;
ALTER TABLE `criteria_tree` MODIFY `Operator` int NOT NULL DEFAULT 0 AFTER `Amount`;
ALTER TABLE `gameobject_display_info` ADD `AlternateDisplayType` int NOT NULL DEFAULT 0 AFTER `OverrideNameScale`;
ALTER TABLE `gameobject_display_info` ADD `ClientCreatureDisplayInfoID` int NOT NULL DEFAULT 0 AFTER `AlternateDisplayType`;
ALTER TABLE `gameobject_display_info` ADD `ClientItemID` int NOT NULL DEFAULT 0 AFTER `ClientCreatureDisplayInfoID`;
ALTER TABLE `spell_category` MODIFY `Flags` int NOT NULL DEFAULT 0 AFTER `Name`;
ALTER TABLE `ui_map` ADD `VisibilityPlayerConditionID2` int NOT NULL DEFAULT 0 AFTER `BountyDisplayLocation`;
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More