diff options
| author | Shauren <shauren.trinity@gmail.com> | 2018-12-09 14:45:03 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2018-12-09 14:45:03 +0100 |
| commit | f94deace764f0b8d99249760d2bc2e85c891c387 (patch) | |
| tree | 4c7c56f34768fc7aef05268061a12845c5bf67ce /src/server/game | |
| parent | 8725eec9c1c15f3e76bd9d524d4a5d8d0b3f0a44 (diff) | |
| parent | a70030ff252b266d12023ffada2a309409c1ccdb (diff) | |
Merge branch 'bfa'
Diffstat (limited to 'src/server/game')
183 files changed, 20299 insertions, 11985 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 6c888550494..a19d01fceb0 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -412,10 +412,10 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { if (CreatureTemplate const* ci = sObjectMgr->GetCreatureTemplate(e.action.morphOrMount.creature)) { - uint32 displayId = ObjectMgr::ChooseDisplayId(ci); - (*itr)->ToCreature()->SetDisplayId(displayId); + CreatureModel const* model = ObjectMgr::ChooseDisplayId(ci); + (*itr)->ToCreature()->SetDisplayId(model->CreatureDisplayID, model->DisplayScale); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_MORPH_TO_ENTRY_OR_MODEL: Creature entry %u, %s set displayid to %u", - (*itr)->GetEntry(), (*itr)->GetGUID().ToString().c_str(), displayId); + (*itr)->GetEntry(), (*itr)->GetGUID().ToString().c_str(), model->CreatureDisplayID); } } //if no param1, then use value from param2 (modelId) @@ -1291,7 +1291,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (e.action.morphOrMount.creature > 0) { if (CreatureTemplate const* cInfo = sObjectMgr->GetCreatureTemplate(e.action.morphOrMount.creature)) - (*itr)->ToUnit()->Mount(ObjectMgr::ChooseDisplayId(cInfo)); + (*itr)->ToUnit()->Mount(ObjectMgr::ChooseDisplayId(cInfo)->CreatureDisplayID); } else (*itr)->ToUnit()->Mount(e.action.morphOrMount.model); diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 5ebb0f971b6..9531bdff1ed 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -597,7 +597,7 @@ void PlayerAchievementMgr::SendAchievementEarned(AchievementEntry const* achieve if (achievement->Flags & (ACHIEVEMENT_FLAG_REALM_FIRST_KILL | ACHIEVEMENT_FLAG_REALM_FIRST_REACH)) { // broadcast realm first reached - WorldPackets::Achievement::ServerFirstAchievement serverFirstAchievement; + WorldPackets::Achievement::BroadcastAchievement serverFirstAchievement; serverFirstAchievement.Name = _owner->GetName(); serverFirstAchievement.PlayerGUID = _owner->GetGUID(); serverFirstAchievement.AchievementID = achievement->ID; @@ -945,7 +945,7 @@ void GuildAchievementMgr::SendAchievementEarned(AchievementEntry const* achievem if (achievement->Flags & (ACHIEVEMENT_FLAG_REALM_FIRST_KILL | ACHIEVEMENT_FLAG_REALM_FIRST_REACH)) { // broadcast realm first reached - WorldPackets::Achievement::ServerFirstAchievement serverFirstAchievement; + WorldPackets::Achievement::BroadcastAchievement serverFirstAchievement; serverFirstAchievement.Name = _owner->GetName(); serverFirstAchievement.PlayerGUID = _owner->GetGUID(); serverFirstAchievement.AchievementID = achievement->ID; diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp index 879967ef31f..bef431b367f 100644 --- a/src/server/game/Achievements/CriteriaHandler.cpp +++ b/src/server/game/Achievements/CriteriaHandler.cpp @@ -107,7 +107,7 @@ bool CriteriaData::IsValid(Criteria const* criteria) criteria->ID, criteria->Entry->Type, DataType, ClassRace.Class); return false; } - if (ClassRace.Race && ((1 << (ClassRace.Race-1)) & RACEMASK_ALL_PLAYABLE) == 0) + if (ClassRace.Race && ((UI64LIT(1) << (ClassRace.Race-1)) & RACEMASK_ALL_PLAYABLE) == 0) { TC_LOG_ERROR("sql.sql", "Table `criteria_data` (Entry: %u Type: %u) for data type CRITERIA_DATA_TYPE_T_PLAYER_CLASS_RACE (%u) contains a non-existing race in value2 (%u), ignored.", criteria->ID, criteria->Entry->Type, DataType, ClassRace.Race); @@ -252,7 +252,7 @@ bool CriteriaData::IsValid(Criteria const* criteria) criteria->ID, criteria->Entry->Type, DataType, ClassRace.Class); return false; } - if (ClassRace.Race && ((1 << (ClassRace.Race-1)) & RACEMASK_ALL_PLAYABLE) == 0) + if (ClassRace.Race && ((UI64LIT(1) << (ClassRace.Race-1)) & RACEMASK_ALL_PLAYABLE) == 0) { TC_LOG_ERROR("sql.sql", "Table `criteria_data` (Entry: %u Type: %u) for data type CRITERIA_DATA_TYPE_S_PLAYER_CLASS_RACE (%u) contains a non-existing race entry in value2 (%u), ignored.", criteria->ID, criteria->Entry->Type, DataType, ClassRace.Race); @@ -504,6 +504,8 @@ void CriteriaHandler::UpdateCriteria(CriteriaTypes type, uint64 miscValue1 /*= 0 case CRITERIA_TYPE_OWN_BATTLE_PET_COUNT: case CRITERIA_TYPE_HONOR_LEVEL_REACHED: case CRITERIA_TYPE_PRESTIGE_REACHED: + case CRITERIA_TYPE_APPEARANCE_UNLOCKED_BY_SLOT: + case CRITERIA_TYPE_TRANSMOG_SET_UNLOCKED: SetCriteriaProgress(criteria, 1, referencePlayer, PROGRESS_ACCUMULATE); break; // std case: increment at miscValue1 @@ -593,7 +595,7 @@ void CriteriaHandler::UpdateCriteria(CriteriaTypes type, uint64 miscValue1 /*= 0 for (RewardedQuestSet::const_iterator itr = rewQuests.begin(); itr != rewQuests.end(); ++itr) { Quest const* quest = sObjectMgr->GetQuestTemplate(*itr); - if (quest && quest->GetZoneOrSort() >= 0 && uint32(quest->GetZoneOrSort()) == criteria->Entry->Asset.ZoneID) + if (quest && quest->GetZoneOrSort() >= 0 && quest->GetZoneOrSort() == criteria->Entry->Asset.ZoneID) ++counter; } SetCriteriaProgress(criteria, counter, referencePlayer); @@ -655,7 +657,7 @@ void CriteriaHandler::UpdateCriteria(CriteriaTypes type, uint64 miscValue1 /*= 0 SetCriteriaProgress(criteria, referencePlayer->GetReputationMgr().GetVisibleFactionCount(), referencePlayer); break; case CRITERIA_TYPE_EARN_HONORABLE_KILL: - SetCriteriaProgress(criteria, referencePlayer->GetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS), referencePlayer); + SetCriteriaProgress(criteria, referencePlayer->GetUInt32Value(ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS), referencePlayer); break; case CRITERIA_TYPE_HIGHEST_GOLD_VALUE_OWNED: SetCriteriaProgress(criteria, referencePlayer->GetMoney(), referencePlayer, PROGRESS_HIGHEST); @@ -700,16 +702,6 @@ void CriteriaHandler::UpdateCriteria(CriteriaTypes type, uint64 miscValue1 /*= 0 case CRITERIA_TYPE_REACH_GUILD_LEVEL: SetCriteriaProgress(criteria, miscValue1, referencePlayer); break; - case CRITERIA_TYPE_TRANSMOG_SET_UNLOCKED: - if (miscValue1 != criteria->Entry->Asset.TransmogSetGroupID) - continue; - SetCriteriaProgress(criteria, 1, referencePlayer, PROGRESS_ACCUMULATE); - break; - case CRITERIA_TYPE_APPEARANCE_UNLOCKED_BY_SLOT: - if (!miscValue2 /*login case*/ || miscValue1 != criteria->Entry->Asset.EquipmentSlot) - continue; - SetCriteriaProgress(criteria, 1, referencePlayer, PROGRESS_ACCUMULATE); - break; // FIXME: not triggered in code as result, need to implement case CRITERIA_TYPE_COMPLETE_RAID: case CRITERIA_TYPE_PLAY_ARENA: @@ -789,6 +781,9 @@ void CriteriaHandler::UpdateCriteria(CriteriaTypes type, uint64 miscValue1 /*= 0 case CRITERIA_TYPE_GAIN_PARAGON_REPUTATION: case CRITERIA_TYPE_EARN_HONOR_XP: case CRITERIA_TYPE_RELIC_TALENT_UNLOCKED: + case CRITERIA_TYPE_REACH_ACCOUNT_HONOR_LEVEL: + case CRITERIA_TREE_HEART_OF_AZEROTH_ARTIFACT_POWER_EARNED: + case CRITERIA_TREE_HEART_OF_AZEROTH_LEVEL_REACHED: break; // Not implemented yet :( } @@ -1151,6 +1146,9 @@ bool CriteriaHandler::IsCompletedCriteria(Criteria const* criteria, uint64 requi case CRITERIA_TYPE_GAIN_PARAGON_REPUTATION: case CRITERIA_TYPE_EARN_HONOR_XP: case CRITERIA_TYPE_RELIC_TALENT_UNLOCKED: + case CRITERIA_TYPE_REACH_ACCOUNT_HONOR_LEVEL: + case CRITERIA_TREE_HEART_OF_AZEROTH_ARTIFACT_POWER_EARNED: + case CRITERIA_TREE_HEART_OF_AZEROTH_LEVEL_REACHED: return progress->Counter >= requiredAmount; case CRITERIA_TYPE_COMPLETE_ACHIEVEMENT: case CRITERIA_TYPE_COMPLETE_QUEST: @@ -1335,22 +1333,22 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis case CRITERIA_TYPE_WIN_BG: case CRITERIA_TYPE_COMPLETE_BATTLEGROUND: case CRITERIA_TYPE_DEATH_AT_MAP: - if (!miscValue1 || criteria->Entry->Asset.MapID != referencePlayer->GetMapId()) + if (!miscValue1 || uint32(criteria->Entry->Asset.MapID) != referencePlayer->GetMapId()) return false; break; case CRITERIA_TYPE_KILL_CREATURE: case CRITERIA_TYPE_KILLED_BY_CREATURE: - if (!miscValue1 || criteria->Entry->Asset.CreatureID != miscValue1) + if (!miscValue1 || uint32(criteria->Entry->Asset.CreatureID) != miscValue1) return false; break; case CRITERIA_TYPE_REACH_SKILL_LEVEL: case CRITERIA_TYPE_LEARN_SKILL_LEVEL: // update at loading or specific skill update - if (miscValue1 && miscValue1 != criteria->Entry->Asset.SkillID) + if (miscValue1 && miscValue1 != uint32(criteria->Entry->Asset.SkillID)) return false; break; case CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE: - if (miscValue1 && miscValue1 != criteria->Entry->Asset.ZoneID) + if (miscValue1 && miscValue1 != uint32(criteria->Entry->Asset.ZoneID)) return false; break; case CRITERIA_TYPE_DEATH: @@ -1369,7 +1367,7 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis return false; //FIXME: work only for instances where max == min for players - if (map->ToInstanceMap()->GetMaxPlayers() != criteria->Entry->Asset.GroupSize) + if (map->ToInstanceMap()->GetMaxPlayers() != uint32(criteria->Entry->Asset.GroupSize)) return false; break; } @@ -1378,7 +1376,7 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis return false; break; case CRITERIA_TYPE_DEATHS_FROM: - if (!miscValue1 || miscValue2 != criteria->Entry->Asset.DamageType) + if (!miscValue1 || miscValue2 != uint32(criteria->Entry->Asset.DamageType)) return false; break; case CRITERIA_TYPE_COMPLETE_QUEST: @@ -1386,7 +1384,7 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis // if miscValues != 0, it contains the questID. if (miscValue1) { - if (miscValue1 != criteria->Entry->Asset.QuestID) + if (miscValue1 != uint32(criteria->Entry->Asset.QuestID)) return false; } else @@ -1405,11 +1403,11 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis case CRITERIA_TYPE_BE_SPELL_TARGET2: case CRITERIA_TYPE_CAST_SPELL: case CRITERIA_TYPE_CAST_SPELL2: - if (!miscValue1 || miscValue1 != criteria->Entry->Asset.SpellID) + if (!miscValue1 || miscValue1 != uint32(criteria->Entry->Asset.SpellID)) return false; break; case CRITERIA_TYPE_LEARN_SPELL: - if (miscValue1 && miscValue1 != criteria->Entry->Asset.SpellID) + if (miscValue1 && miscValue1 != uint32(criteria->Entry->Asset.SpellID)) return false; if (!referencePlayer->HasSpell(criteria->Entry->Asset.SpellID)) @@ -1418,17 +1416,17 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis case CRITERIA_TYPE_LOOT_TYPE: // miscValue1 = itemId - miscValue2 = count of item loot // miscValue3 = loot_type (note: 0 = LOOT_CORPSE and then it ignored) - if (!miscValue1 || !miscValue2 || !miscValue3 || miscValue3 != criteria->Entry->Asset.LootType) + if (!miscValue1 || !miscValue2 || !miscValue3 || miscValue3 != uint32(criteria->Entry->Asset.LootType)) return false; break; case CRITERIA_TYPE_OWN_ITEM: - if (miscValue1 && criteria->Entry->Asset.ItemID != miscValue1) + if (miscValue1 && uint32(criteria->Entry->Asset.ItemID) != miscValue1) return false; break; case CRITERIA_TYPE_USE_ITEM: case CRITERIA_TYPE_LOOT_ITEM: case CRITERIA_TYPE_EQUIP_ITEM: - if (!miscValue1 || criteria->Entry->Asset.ItemID != miscValue1) + if (!miscValue1 || uint32(criteria->Entry->Asset.ItemID )!= miscValue1) return false; break; case CRITERIA_TYPE_EXPLORE_AREA: @@ -1452,7 +1450,7 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis continue; uint32 mask = 1 << (uint32(area->AreaBit) % 32); - if (referencePlayer->GetUInt32Value(PLAYER_EXPLORED_ZONES_1 + playerIndexOffset) & mask) + if (referencePlayer->GetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + playerIndexOffset) & mask) { matchFound = true; break; @@ -1464,19 +1462,19 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis break; } case CRITERIA_TYPE_GAIN_REPUTATION: - if (miscValue1 && miscValue1 != criteria->Entry->Asset.FactionID) + if (miscValue1 && miscValue1 != uint32(criteria->Entry->Asset.FactionID)) return false; break; case CRITERIA_TYPE_EQUIP_EPIC_ITEM: // miscValue1 = itemid miscValue2 = itemSlot - if (!miscValue1 || miscValue2 != criteria->Entry->Asset.ItemSlot) + if (!miscValue1 || miscValue2 != uint32(criteria->Entry->Asset.ItemSlot)) return false; break; case CRITERIA_TYPE_ROLL_NEED_ON_LOOT: case CRITERIA_TYPE_ROLL_GREED_ON_LOOT: { // miscValue1 = itemid miscValue2 = diced value - if (!miscValue1 || miscValue2 != criteria->Entry->Asset.RollValue) + if (!miscValue1 || miscValue2 != uint32(criteria->Entry->Asset.RollValue)) return false; ItemTemplate const* proto = sObjectMgr->GetItemTemplate(uint32(miscValue1)); @@ -1485,7 +1483,7 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis break; } case CRITERIA_TYPE_DO_EMOTE: - if (!miscValue1 || miscValue1 != criteria->Entry->Asset.EmoteID) + if (!miscValue1 || miscValue1 != uint32(criteria->Entry->Asset.EmoteID)) return false; break; case CRITERIA_TYPE_DAMAGE_DONE: @@ -1505,12 +1503,12 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis break; case CRITERIA_TYPE_USE_GAMEOBJECT: case CRITERIA_TYPE_FISH_IN_GAMEOBJECT: - if (!miscValue1 || miscValue1 != criteria->Entry->Asset.GameObjectID) + if (!miscValue1 || miscValue1 != uint32(criteria->Entry->Asset.GameObjectID)) return false; break; case CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS: case CRITERIA_TYPE_LEARN_SKILL_LINE: - if (miscValue1 && miscValue1 != criteria->Entry->Asset.SkillID) + if (miscValue1 && miscValue1 != uint32(criteria->Entry->Asset.SkillID)) return false; break; case CRITERIA_TYPE_LOOT_EPIC_ITEM: @@ -1524,34 +1522,42 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis break; } case CRITERIA_TYPE_HK_CLASS: - if (!miscValue1 || miscValue1 != criteria->Entry->Asset.ClassID) + if (!miscValue1 || miscValue1 != uint32(criteria->Entry->Asset.ClassID)) return false; break; case CRITERIA_TYPE_HK_RACE: - if (!miscValue1 || miscValue1 != criteria->Entry->Asset.RaceID) + if (!miscValue1 || miscValue1 != uint32(criteria->Entry->Asset.RaceID)) return false; break; case CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE: - if (!miscValue1 || miscValue1 != criteria->Entry->Asset.ObjectiveId) + if (!miscValue1 || miscValue1 != uint32(criteria->Entry->Asset.ObjectiveId)) return false; break; case CRITERIA_TYPE_HONORABLE_KILL_AT_AREA: - if (!miscValue1 || miscValue1 != criteria->Entry->Asset.AreaID) + if (!miscValue1 || miscValue1 != uint32(criteria->Entry->Asset.AreaID)) return false; break; case CRITERIA_TYPE_CURRENCY: if (!miscValue1 || !miscValue2 || int64(miscValue2) < 0 - || miscValue1 != criteria->Entry->Asset.CurrencyID) + || miscValue1 != uint32(criteria->Entry->Asset.CurrencyID)) return false; break; case CRITERIA_TYPE_WIN_ARENA: - if (miscValue1 != criteria->Entry->Asset.MapID) + if (miscValue1 != uint32(criteria->Entry->Asset.MapID)) return false; break; case CRITERIA_TYPE_HIGHEST_TEAM_RATING: return false; case CRITERIA_TYPE_PLACE_GARRISON_BUILDING: - if (miscValue1 != criteria->Entry->Asset.GarrBuildingID) + if (miscValue1 != uint32(criteria->Entry->Asset.GarrBuildingID)) + return false; + break; + case CRITERIA_TYPE_TRANSMOG_SET_UNLOCKED: + if (miscValue1 != uint32(criteria->Entry->Asset.TransmogSetGroupID)) + return false; + break; + case CRITERIA_TYPE_APPEARANCE_UNLOCKED_BY_SLOT: + if (!miscValue2 /*login case*/ || miscValue1 != uint32(criteria->Entry->Asset.EquipmentSlot)) return false; break; default: @@ -1781,9 +1787,7 @@ bool CriteriaHandler::AdditionalRequirementsSatisfied(ModifierTreeNode const* tr return false; break; case CRITERIA_ADDITIONAL_CONDITION_PRESTIGE_LEVEL: // 194 - if (!referencePlayer || referencePlayer->GetPrestigeLevel() != reqValue) - return false; - break; + return false; default: break; } @@ -2157,6 +2161,12 @@ char const* CriteriaMgr::GetCriteriaTypeString(CriteriaTypes type) return "EARN_HONOR_XP"; case CRITERIA_TYPE_RELIC_TALENT_UNLOCKED: return "RELIC_TALENT_UNLOCKED"; + case CRITERIA_TYPE_REACH_ACCOUNT_HONOR_LEVEL: + return "REACH_ACCOUNT_HONOR_LEVEL"; + case CRITERIA_TREE_HEART_OF_AZEROTH_ARTIFACT_POWER_EARNED: + return "HEART_OF_AZEROTH_ARTIFACT_POWER_EARNED"; + case CRITERIA_TREE_HEART_OF_AZEROTH_LEVEL_REACHED: + return "HEART_OF_AZEROTH_LEVEL_REACHED"; } return "MISSING_TYPE"; } diff --git a/src/server/game/BattlePets/BattlePetMgr.cpp b/src/server/game/BattlePets/BattlePetMgr.cpp index 2c96b93e7fe..42be357f802 100644 --- a/src/server/game/BattlePets/BattlePetMgr.cpp +++ b/src/server/game/BattlePets/BattlePetMgr.cpp @@ -444,7 +444,7 @@ void BattlePetMgr::SummonPet(ObjectGuid guid) return; // TODO: set proper CreatureID for spell DEFAULT_SUMMON_BATTLE_PET_SPELL (default EffectMiscValueA is 40721 - Murkimus the Gladiator) - _owner->GetPlayer()->SetGuidValue(PLAYER_FIELD_SUMMONED_BATTLE_PET_ID, guid); + _owner->GetPlayer()->SetGuidValue(ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID, guid); _owner->GetPlayer()->CastSpell(_owner->GetPlayer(), speciesEntry->SummonSpellID ? speciesEntry->SummonSpellID : uint32(DEFAULT_SUMMON_BATTLE_PET_SPELL)); // TODO: set pet level, quality... update fields @@ -454,10 +454,10 @@ void BattlePetMgr::DismissPet() { Player* ownerPlayer = _owner->GetPlayer(); Creature* pet = ObjectAccessor::GetCreatureOrPetOrVehicle(*ownerPlayer, ownerPlayer->GetCritterGUID()); - if (pet && ownerPlayer->GetGuidValue(PLAYER_FIELD_SUMMONED_BATTLE_PET_ID) == pet->GetGuidValue(UNIT_FIELD_BATTLE_PET_COMPANION_GUID)) + if (pet && ownerPlayer->GetGuidValue(ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID) == pet->GetGuidValue(UNIT_FIELD_BATTLE_PET_COMPANION_GUID)) { pet->DespawnOrUnsummon(); - ownerPlayer->SetGuidValue(PLAYER_FIELD_SUMMONED_BATTLE_PET_ID, ObjectGuid::Empty); + ownerPlayer->SetGuidValue(ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID, ObjectGuid::Empty); } } diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index 3ddca3a7b33..e63accbb018 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -1289,9 +1289,10 @@ void Battleground::BuildPvPLogDataPacket(WorldPackets::Battleground::PVPLogData& { playerData.IsInWorld = true; playerData.PrimaryTalentTree = player->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID); - playerData.PrimaryTalentTreeNameIndex = 0; + playerData.Sex = player->getGender(); playerData.Race = player->getRace(); - playerData.Prestige = player->GetPrestigeLevel(); + playerData.Class = player->getClass(); + playerData.HonorLevel = player->GetHonorLevel(); } pvpLogData.Players.push_back(playerData); diff --git a/src/server/game/Calendar/CalendarMgr.cpp b/src/server/game/Calendar/CalendarMgr.cpp index cf4898d8099..73d6c49f7ff 100644 --- a/src/server/game/Calendar/CalendarMgr.cpp +++ b/src/server/game/Calendar/CalendarMgr.cpp @@ -463,6 +463,7 @@ void CalendarMgr::SendCalendarEventUpdateAlert(CalendarEvent const& calendarEven packet.ClearPending = true; // FIXME packet.Date = calendarEvent.GetDate(); packet.Description = calendarEvent.GetDescription(); + packet.EventClubID = calendarEvent.GetGuildId(); packet.EventID = calendarEvent.GetEventId(); packet.EventName = calendarEvent.GetTitle(); packet.EventType = calendarEvent.GetType(); @@ -534,18 +535,15 @@ void CalendarMgr::SendCalendarEventInviteAlert(CalendarEvent const& calendarEven packet.OwnerGuid = calendarEvent.GetOwnerGUID(); packet.Status = invite.GetStatus(); packet.TextureID = calendarEvent.GetTextureId(); - - Guild* guild = sGuildMgr->GetGuildById(calendarEvent.GetGuildId()); - packet.EventGuildID = guild ? guild->GetGUID() : ObjectGuid::Empty; + packet.EventClubID = calendarEvent.GetGuildId(); if (calendarEvent.IsGuildEvent() || calendarEvent.IsGuildAnnouncement()) { - if (guild) + if (Guild* guild = sGuildMgr->GetGuildById(calendarEvent.GetGuildId())) guild->BroadcastPacket(packet.Write()); } - else - if (Player* player = ObjectAccessor::FindConnectedPlayer(invite.GetInviteeGUID())) - player->SendDirectMessage(packet.Write()); + else if (Player* player = ObjectAccessor::FindConnectedPlayer(invite.GetInviteeGUID())) + player->SendDirectMessage(packet.Write()); } void CalendarMgr::SendCalendarEvent(ObjectGuid guid, CalendarEvent const& calendarEvent, CalendarSendEventType sendType) @@ -567,9 +565,7 @@ void CalendarMgr::SendCalendarEvent(ObjectGuid guid, CalendarEvent const& calend packet.LockDate = calendarEvent.GetLockDate(); // Always 0 ? packet.OwnerGuid = calendarEvent.GetOwnerGUID(); packet.TextureID = calendarEvent.GetTextureId(); - - Guild* guild = sGuildMgr->GetGuildById(calendarEvent.GetGuildId()); - packet.EventGuildID = (guild ? guild->GetGUID() : ObjectGuid::Empty); + packet.EventClubID = calendarEvent.GetGuildId(); for (auto const& calendarInvite : eventInviteeList) { diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp index 8ef212e6d85..63223e0ccc9 100644 --- a/src/server/game/Chat/Chat.cpp +++ b/src/server/game/Chat/Chat.cpp @@ -455,7 +455,7 @@ bool ChatHandler::isValidChatMessage(char const* message) /* Valid examples: |cffa335ee|Hitem:812:0:0:0:0:0:0:0:70|h[Glowing Brightwood Staff]|h|r -|cff808080|Hquest:2278:47|h[The Platinum Discs]|h|r +|cffffff00|Hquest:51101:-1:110:120:5|h[The Wounded King]|h|r |cffffd000|Htrade:4037:1:150:1:6AAAAAAAAAAAAAAAAAAAAAAOAADAAAAAAAAAAAAAAAAIAAAAAAAAA|h[Engineering]|h|r |cff4e96f7|Htalent:2232:-1|h[Taste for Blood]|h|r |cff71d5ff|Hspell:21563|h[Command]|h|r diff --git a/src/server/game/Chat/ChatLink.cpp b/src/server/game/Chat/ChatLink.cpp index 2f1cc1162f7..6cfec8193e5 100644 --- a/src/server/game/Chat/ChatLink.cpp +++ b/src/server/game/Chat/ChatLink.cpp @@ -40,7 +40,8 @@ // - client, item icon shift click // |color|Hitemset:itemset_id|h[name]|h|r // |color|Hplayer:name|h[name]|h|r - client, in some messages, at click copy only name instead link -// |color|Hquest:quest_id:quest_level|h[name]|h|r - client, quest list name shift-click +// |color|Hquest:quest_id:quest_level:min_level:max_level:scaling_faction|h[name]|h|r +// - client, quest list name shift-click // |color|Hskill:skill_id|h[name]|h|r // |color|Hspell:spell_id|h[name]|h|r - client, spellbook spell icon shift-click // |color|Htalent:talent_id, rank|h[name]|h|r - client, talent icon shift-click @@ -395,8 +396,8 @@ bool ItemChatLink::ValidateName(char* buffer, char const* context) return false; } -// |color|Hquest:quest_id:quest_level|h[name]|h|r -// |cff808080|Hquest:2278:47|h[The Platinum Discs]|h|r +// |color|Hquest:quest_id:quest_level:min_level:max_level:scaling_faction|h[name]|h|r +// |cffffff00|Hquest:51101:-1:110:120:5|h[The Wounded King]|h|r bool QuestChatLink::Initialize(std::istringstream& iss) { // Read quest id @@ -428,6 +429,21 @@ bool QuestChatLink::Initialize(std::istringstream& iss) TC_LOG_TRACE("chat.system", "ChatHandler::isValidChatMessage('%s'): quest level %d is too big", iss.str().c_str(), _questLevel); return false; } + if (!ReadInt32(iss, _minLevel)) + { + TC_LOG_TRACE("chat.system", "ChatHandler::isValidChatMessage('%s'): sequence finished unexpectedly while reading quest min level", iss.str().c_str()); + return false; + } + if (!ReadInt32(iss, _maxLevel)) + { + TC_LOG_TRACE("chat.system", "ChatHandler::isValidChatMessage('%s'): sequence finished unexpectedly while reading quest max level", iss.str().c_str()); + return false; + } + if (!ReadInt32(iss, _scalingFaction)) + { + TC_LOG_TRACE("chat.system", "ChatHandler::isValidChatMessage('%s'): sequence finished unexpectedly while reading quest scaling faction", iss.str().c_str()); + return false; + } return true; } diff --git a/src/server/game/Chat/ChatLink.h b/src/server/game/Chat/ChatLink.h index 505bc6b66f7..746cb5c93d9 100644 --- a/src/server/game/Chat/ChatLink.h +++ b/src/server/game/Chat/ChatLink.h @@ -90,13 +90,16 @@ protected: class TC_GAME_API QuestChatLink : public ChatLink { public: - QuestChatLink() : ChatLink(), _quest(nullptr), _questLevel(0) { } + QuestChatLink() : ChatLink(), _quest(nullptr), _questLevel(0), _minLevel(0), _maxLevel(0), _scalingFaction(0) { } virtual bool Initialize(std::istringstream& iss) override; virtual bool ValidateName(char* buffer, const char* context) override; protected: Quest const* _quest; int32 _questLevel; + int32 _minLevel; + int32 _maxLevel; + int32 _scalingFaction; }; // SpellChatLink - link to quest diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index bad5c195667..a6e1e2f73b9 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -2002,7 +2002,7 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond) const } case CONDITION_CLASS: { - if (!(cond->ConditionValue1 & CLASSMASK_ALL_PLAYABLE)) + if (cond->ConditionValue1 & ~CLASSMASK_ALL_PLAYABLE) { TC_LOG_ERROR("sql.sql", "%s has non existing classmask (%u), skipped.", cond->ToString(true).c_str(), cond->ConditionValue1 & ~CLASSMASK_ALL_PLAYABLE); return false; @@ -2011,9 +2011,9 @@ bool ConditionMgr::isConditionTypeValid(Condition* cond) const } case CONDITION_RACE: { - if (!(cond->ConditionValue1 & RACEMASK_ALL_PLAYABLE)) + if (cond->ConditionValue1 & ~RACEMASK_ALL_PLAYABLE) { - TC_LOG_ERROR("sql.sql", "%s has non existing racemask (%u), skipped.", cond->ToString(true).c_str(), cond->ConditionValue1 & ~RACEMASK_ALL_PLAYABLE); + TC_LOG_ERROR("sql.sql", "%s has non existing racemask (" UI64FMTD "), skipped.", cond->ToString(true).c_str(), cond->ConditionValue1 & ~RACEMASK_ALL_PLAYABLE); return false; } break; @@ -2590,10 +2590,10 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio } } - if (condition->PvpMedal && !((1 << (condition->PvpMedal - 1)) & player->GetUInt32Value(PLAYER_FIELD_PVP_MEDALS))) + if (condition->PvpMedal && !((1 << (condition->PvpMedal - 1)) & player->GetUInt32Value(ACTIVE_PLAYER_FIELD_PVP_MEDALS))) return false; - if (condition->LifetimeMaxPVPRank && player->GetByteValue(PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_LIFETIME_MAX_PVP_RANK) != condition->LifetimeMaxPVPRank) + if (condition->LifetimeMaxPVPRank && player->GetByteValue(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_LIFETIME_MAX_PVP_RANK) != condition->LifetimeMaxPVPRank) return false; if (condition->MovementFlags[0] && !(player->GetUnitMovementFlags() & condition->MovementFlags[0])) @@ -2647,7 +2647,7 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio results.fill(true); for (std::size_t i = 0; i < PrevQuestCount::value; ++i) if (uint32 questBit = sDB2Manager.GetQuestUniqueBitFlag(condition->PrevQuestID[i])) - results[i] = (player->GetUInt32Value(PLAYER_FIELD_QUEST_COMPLETED + ((questBit - 1) >> 5)) & (1 << ((questBit - 1) & 31))) != 0; + results[i] = (player->GetUInt32Value(ACTIVE_PLAYER_FIELD_QUEST_COMPLETED + ((questBit - 1) >> 5)) & (1 << ((questBit - 1) & 31))) != 0; if (!PlayerConditionLogic(condition->PrevQuestLogic, results)) return false; @@ -2731,7 +2731,7 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio for (std::size_t i = 0; i < ExploredCount::value; ++i) { if (AreaTableEntry const* area = sAreaTableStore.LookupEntry(condition->Explored[i])) - if (area->AreaBit != -1 && !(player->GetUInt32Value(PLAYER_EXPLORED_ZONES_1 + area->AreaBit / 32) & (1 << (uint32(area->AreaBit) % 32)))) + if (area->AreaBit != -1 && !(player->GetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + area->AreaBit / 32) & (1 << (uint32(area->AreaBit) % 32)))) return false; } } diff --git a/src/server/game/DataStores/DB2LoadInfo.h b/src/server/game/DataStores/DB2LoadInfo.h index a6b4c1c0426..81ba8e1d6df 100644 --- a/src/server/game/DataStores/DB2LoadInfo.h +++ b/src/server/game/DataStores/DB2LoadInfo.h @@ -30,27 +30,45 @@ struct AchievementLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_STRING, "Title" }, { false, FT_STRING, "Description" }, + { false, FT_STRING, "Title" }, { false, FT_STRING, "Reward" }, - { true, FT_INT, "Flags" }, + { false, FT_INT, "ID" }, { true, FT_SHORT, "InstanceID" }, + { true, FT_BYTE, "Faction" }, { true, FT_SHORT, "Supercedes" }, { true, FT_SHORT, "Category" }, - { true, FT_SHORT, "UiOrder" }, - { true, FT_SHORT, "SharesCriteria" }, - { true, FT_BYTE, "Faction" }, - { true, FT_BYTE, "Points" }, { true, FT_BYTE, "MinimumCriteria" }, - { false, FT_INT, "ID" }, + { true, FT_BYTE, "Points" }, + { true, FT_INT, "Flags" }, + { true, FT_SHORT, "UiOrder" }, { true, FT_INT, "IconFileID" }, { false, FT_INT, "CriteriaTree" }, + { true, FT_SHORT, "SharesCriteria" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, AchievementMeta::Instance(), HOTFIX_SEL_ACHIEVEMENT); return &loadInfo; } }; +struct AnimationDataLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_INT, "ID" }, + { false, FT_SHORT, "Fallback" }, + { false, FT_BYTE, "BehaviorTier" }, + { true, FT_INT, "BehaviorID" }, + { true, FT_INT, "Flags1" }, + { true, FT_INT, "Flags2" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, AnimationDataMeta::Instance(), HOTFIX_SEL_ANIMATION_DATA); + return &loadInfo; + } +}; + struct AnimKitLoadInfo { static DB2LoadInfo const* Instance() @@ -91,31 +109,31 @@ struct AreaTableLoadInfo { false, FT_INT, "ID" }, { false, FT_STRING_NOT_LOCALIZED, "ZoneName" }, { false, FT_STRING, "AreaName" }, - { true, FT_INT, "Flags1" }, - { true, FT_INT, "Flags2" }, - { false, FT_FLOAT, "AmbientMultiplier" }, { false, FT_SHORT, "ContinentID" }, { false, FT_SHORT, "ParentAreaID" }, { true, FT_SHORT, "AreaBit" }, + { false, FT_BYTE, "SoundProviderPref" }, + { false, FT_BYTE, "SoundProviderPrefUnderwater" }, { false, FT_SHORT, "AmbienceID" }, + { false, FT_SHORT, "UwAmbience" }, { false, FT_SHORT, "ZoneMusic" }, - { false, FT_SHORT, "IntroSound" }, - { false, FT_SHORT, "LiquidTypeID1" }, - { false, FT_SHORT, "LiquidTypeID2" }, - { false, FT_SHORT, "LiquidTypeID3" }, - { false, FT_SHORT, "LiquidTypeID4" }, { false, FT_SHORT, "UwZoneMusic" }, - { false, FT_SHORT, "UwAmbience" }, - { true, FT_SHORT, "PvpCombatWorldStateID" }, - { false, FT_BYTE, "SoundProviderPref" }, - { false, FT_BYTE, "SoundProviderPrefUnderwater" }, { true, FT_BYTE, "ExplorationLevel" }, + { false, FT_SHORT, "IntroSound" }, + { false, FT_INT, "UwIntroSound" }, { false, FT_BYTE, "FactionGroupMask" }, + { false, FT_FLOAT, "AmbientMultiplier" }, { false, FT_BYTE, "MountFlags" }, + { true, FT_SHORT, "PvpCombatWorldStateID" }, { false, FT_BYTE, "WildBattlePetLevelMin" }, { false, FT_BYTE, "WildBattlePetLevelMax" }, { false, FT_BYTE, "WindSettingsID" }, - { false, FT_INT, "UwIntroSound" }, + { true, FT_INT, "Flags1" }, + { true, FT_INT, "Flags2" }, + { false, FT_SHORT, "LiquidTypeID1" }, + { false, FT_SHORT, "LiquidTypeID2" }, + { false, FT_SHORT, "LiquidTypeID3" }, + { false, FT_SHORT, "LiquidTypeID4" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, AreaTableMeta::Instance(), HOTFIX_SEL_AREA_TABLE); return &loadInfo; @@ -131,20 +149,20 @@ struct AreaTriggerLoadInfo { false, FT_FLOAT, "PosX" }, { false, FT_FLOAT, "PosY" }, { false, FT_FLOAT, "PosZ" }, + { false, FT_INT, "ID" }, + { true, FT_SHORT, "ContinentID" }, + { true, FT_BYTE, "PhaseUseFlags" }, + { true, FT_SHORT, "PhaseID" }, + { true, FT_SHORT, "PhaseGroupID" }, { false, FT_FLOAT, "Radius" }, { false, FT_FLOAT, "BoxLength" }, { false, FT_FLOAT, "BoxWidth" }, { false, FT_FLOAT, "BoxHeight" }, { false, FT_FLOAT, "BoxYaw" }, - { true, FT_SHORT, "ContinentID" }, - { true, FT_SHORT, "PhaseID" }, - { true, FT_SHORT, "PhaseGroupID" }, + { true, FT_BYTE, "ShapeType" }, { true, FT_SHORT, "ShapeID" }, { true, FT_SHORT, "AreaTriggerActionSetID" }, - { true, FT_BYTE, "PhaseUseFlags" }, - { true, FT_BYTE, "ShapeType" }, { true, FT_BYTE, "Flags" }, - { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, AreaTriggerMeta::Instance(), HOTFIX_SEL_AREA_TRIGGER); return &loadInfo; @@ -175,15 +193,15 @@ struct ArtifactLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, + { false, FT_INT, "ID" }, + { false, FT_SHORT, "UiTextureKitID" }, + { true, FT_INT, "UiNameColor" }, { true, FT_INT, "UiBarOverlayColor" }, { true, FT_INT, "UiBarBackgroundColor" }, - { true, FT_INT, "UiNameColor" }, - { false, FT_SHORT, "UiTextureKitID" }, { false, FT_SHORT, "ChrSpecializationID" }, - { false, FT_BYTE, "ArtifactCategoryID" }, { false, FT_BYTE, "Flags" }, + { false, FT_BYTE, "ArtifactCategoryID" }, { false, FT_INT, "UiModelSceneID" }, { false, FT_INT, "SpellVisualKitID" }, }; @@ -199,20 +217,20 @@ struct ArtifactAppearanceLoadInfo static DB2FieldMeta const fields[] = { { false, FT_STRING, "Name" }, - { true, FT_INT, "UiSwatchColor" }, - { false, FT_FLOAT, "UiModelSaturation" }, - { false, FT_FLOAT, "UiModelOpacity" }, - { false, FT_INT, "OverrideShapeshiftDisplayID" }, + { false, FT_INT, "ID" }, { false, FT_SHORT, "ArtifactAppearanceSetID" }, - { false, FT_SHORT, "UiCameraID" }, { false, FT_BYTE, "DisplayIndex" }, + { false, FT_INT, "UnlockPlayerConditionID" }, { false, FT_BYTE, "ItemAppearanceModifierID" }, - { false, FT_BYTE, "Flags" }, + { true, FT_INT, "UiSwatchColor" }, + { false, FT_FLOAT, "UiModelSaturation" }, + { false, FT_FLOAT, "UiModelOpacity" }, { false, FT_BYTE, "OverrideShapeshiftFormID" }, - { false, FT_INT, "ID" }, - { false, FT_INT, "UnlockPlayerConditionID" }, + { false, FT_INT, "OverrideShapeshiftDisplayID" }, { false, FT_INT, "UiItemAppearanceID" }, { false, FT_INT, "UiAltItemAppearanceID" }, + { false, FT_BYTE, "Flags" }, + { false, FT_SHORT, "UiCameraID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ArtifactAppearanceMeta::Instance(), HOTFIX_SEL_ARTIFACT_APPEARANCE); return &loadInfo; @@ -227,12 +245,12 @@ struct ArtifactAppearanceSetLoadInfo { { false, FT_STRING, "Name" }, { false, FT_STRING, "Description" }, + { false, FT_INT, "ID" }, + { false, FT_BYTE, "DisplayIndex" }, { false, FT_SHORT, "UiCameraID" }, { false, FT_SHORT, "AltHandUICameraID" }, - { false, FT_BYTE, "DisplayIndex" }, { true, FT_BYTE, "ForgeAttachmentOverride" }, { false, FT_BYTE, "Flags" }, - { false, FT_INT, "ID" }, { false, FT_BYTE, "ArtifactID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ArtifactAppearanceSetMeta::Instance(), HOTFIX_SEL_ARTIFACT_APPEARANCE_SET); @@ -261,14 +279,14 @@ struct ArtifactPowerLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_FLOAT, "PosX" }, - { false, FT_FLOAT, "PosY" }, + { false, FT_FLOAT, "DisplayPosX" }, + { false, FT_FLOAT, "DisplayPosY" }, + { false, FT_INT, "ID" }, { false, FT_BYTE, "ArtifactID" }, - { false, FT_BYTE, "Flags" }, { false, FT_BYTE, "MaxPurchasableRank" }, - { false, FT_BYTE, "Tier" }, - { false, FT_INT, "ID" }, { true, FT_INT, "Label" }, + { false, FT_BYTE, "Flags" }, + { false, FT_BYTE, "Tier" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ArtifactPowerMeta::Instance(), HOTFIX_SEL_ARTIFACT_POWER); return &loadInfo; @@ -311,10 +329,10 @@ struct ArtifactPowerRankLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_BYTE, "RankIndex" }, { true, FT_INT, "SpellID" }, - { false, FT_FLOAT, "AuraPointsOverride" }, { false, FT_SHORT, "ItemBonusListID" }, - { false, FT_BYTE, "RankIndex" }, + { false, FT_FLOAT, "AuraPointsOverride" }, { false, FT_SHORT, "ArtifactPowerID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ArtifactPowerRankMeta::Instance(), HOTFIX_SEL_ARTIFACT_POWER_RANK); @@ -370,9 +388,9 @@ struct ArtifactUnlockLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_SHORT, "ItemBonusListID" }, - { false, FT_BYTE, "PowerRank" }, { false, FT_INT, "PowerID" }, + { false, FT_BYTE, "PowerRank" }, + { false, FT_SHORT, "ItemBonusListID" }, { false, FT_INT, "PlayerConditionID" }, { false, FT_BYTE, "ArtifactID" }, }; @@ -436,12 +454,12 @@ struct BarberShopStyleLoadInfo { { false, FT_STRING, "DisplayName" }, { false, FT_STRING, "Description" }, - { false, FT_FLOAT, "CostModifier" }, + { false, FT_INT, "ID" }, { false, FT_BYTE, "Type" }, + { false, FT_FLOAT, "CostModifier" }, { false, FT_BYTE, "Race" }, { false, FT_BYTE, "Sex" }, { false, FT_BYTE, "Data" }, - { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, BarberShopStyleMeta::Instance(), HOTFIX_SEL_BARBER_SHOP_STYLE); return &loadInfo; @@ -470,8 +488,8 @@ struct BattlePetBreedStateLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_SHORT, "Value" }, { false, FT_BYTE, "BattlePetStateID" }, + { false, FT_SHORT, "Value" }, { false, FT_BYTE, "BattlePetBreedID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, BattlePetBreedStateMeta::Instance(), HOTFIX_SEL_BATTLE_PET_BREED_STATE); @@ -485,15 +503,15 @@ struct BattlePetSpeciesLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_STRING, "SourceText" }, { false, FT_STRING, "Description" }, + { false, FT_STRING, "SourceText" }, + { false, FT_INT, "ID" }, { true, FT_INT, "CreatureID" }, - { true, FT_INT, "IconFileDataID" }, { true, FT_INT, "SummonSpellID" }, - { false, FT_SHORT, "Flags" }, + { true, FT_INT, "IconFileDataID" }, { false, FT_BYTE, "PetTypeEnum" }, + { false, FT_SHORT, "Flags" }, { true, FT_BYTE, "SourceTypeEnum" }, - { false, FT_INT, "ID" }, { true, FT_INT, "CardUIModelSceneID" }, { true, FT_INT, "LoadoutUIModelSceneID" }, }; @@ -509,8 +527,8 @@ struct BattlePetSpeciesStateLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "Value" }, { false, FT_BYTE, "BattlePetStateID" }, + { true, FT_INT, "Value" }, { false, FT_SHORT, "BattlePetSpeciesID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, BattlePetSpeciesStateMeta::Instance(), HOTFIX_SEL_BATTLE_PET_SPECIES_STATE); @@ -529,7 +547,18 @@ struct BattlemasterListLoadInfo { false, FT_STRING, "GameType" }, { false, FT_STRING, "ShortDescription" }, { false, FT_STRING, "LongDescription" }, + { true, FT_BYTE, "InstanceType" }, + { true, FT_BYTE, "MinLevel" }, + { true, FT_BYTE, "MaxLevel" }, + { true, FT_BYTE, "RatedPlayers" }, + { true, FT_BYTE, "MinPlayers" }, + { true, FT_BYTE, "MaxPlayers" }, + { true, FT_BYTE, "GroupsAllowed" }, + { true, FT_BYTE, "MaxGroupSize" }, + { true, FT_SHORT, "HolidayWorldState" }, + { true, FT_BYTE, "Flags" }, { true, FT_INT, "IconFileDataID" }, + { true, FT_SHORT, "RequiredPlayerConditionID" }, { true, FT_SHORT, "MapID1" }, { true, FT_SHORT, "MapID2" }, { true, FT_SHORT, "MapID3" }, @@ -546,17 +575,6 @@ struct BattlemasterListLoadInfo { true, FT_SHORT, "MapID14" }, { true, FT_SHORT, "MapID15" }, { true, FT_SHORT, "MapID16" }, - { true, FT_SHORT, "HolidayWorldState" }, - { true, FT_SHORT, "RequiredPlayerConditionID" }, - { true, FT_BYTE, "InstanceType" }, - { true, FT_BYTE, "GroupsAllowed" }, - { true, FT_BYTE, "MaxGroupSize" }, - { true, FT_BYTE, "MinLevel" }, - { true, FT_BYTE, "MaxLevel" }, - { true, FT_BYTE, "RatedPlayers" }, - { true, FT_BYTE, "MinPlayers" }, - { true, FT_BYTE, "MaxPlayers" }, - { true, FT_BYTE, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, BattlemasterListMeta::Instance(), HOTFIX_SEL_BATTLEMASTER_LIST); return &loadInfo; @@ -569,21 +587,22 @@ struct BroadcastTextLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_INT, "ID" }, { false, FT_STRING, "Text" }, { false, FT_STRING, "Text1" }, + { false, FT_INT, "ID" }, + { false, FT_BYTE, "LanguageID" }, + { true, FT_INT, "ConditionID" }, + { false, FT_SHORT, "EmotesID" }, + { false, FT_BYTE, "Flags" }, + { false, FT_INT, "ChatBubbleDurationMs" }, + { false, FT_INT, "SoundEntriesID1" }, + { false, FT_INT, "SoundEntriesID2" }, { false, FT_SHORT, "EmoteID1" }, { false, FT_SHORT, "EmoteID2" }, { false, FT_SHORT, "EmoteID3" }, { false, FT_SHORT, "EmoteDelay1" }, { false, FT_SHORT, "EmoteDelay2" }, { false, FT_SHORT, "EmoteDelay3" }, - { false, FT_SHORT, "EmotesID" }, - { false, FT_BYTE, "LanguageID" }, - { false, FT_BYTE, "Flags" }, - { true, FT_INT, "ConditionID" }, - { false, FT_INT, "SoundEntriesID1" }, - { false, FT_INT, "SoundEntriesID2" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, BroadcastTextMeta::Instance(), HOTFIX_SEL_BROADCAST_TEXT); return &loadInfo; @@ -598,10 +617,10 @@ struct CfgRegionsLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING_NOT_LOCALIZED, "Tag" }, - { false, FT_INT, "Raidorigin" }, - { false, FT_INT, "ChallengeOrigin" }, { false, FT_SHORT, "RegionID" }, + { false, FT_INT, "Raidorigin" }, { false, FT_BYTE, "RegionGroupMask" }, + { false, FT_INT, "ChallengeOrigin" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, Cfg_RegionsMeta::Instance(), HOTFIX_SEL_CFG_REGIONS); return &loadInfo; @@ -636,9 +655,9 @@ struct CharBaseSectionLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_BYTE, "LayoutResType" }, { false, FT_BYTE, "VariationEnum" }, { false, FT_BYTE, "ResolutionVariationEnum" }, - { false, FT_BYTE, "LayoutResType" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CharBaseSectionMeta::Instance(), HOTFIX_SEL_CHAR_BASE_SECTION); return &loadInfo; @@ -652,15 +671,15 @@ struct CharSectionsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "MaterialResourcesID1" }, - { true, FT_INT, "MaterialResourcesID2" }, - { true, FT_INT, "MaterialResourcesID3" }, - { true, FT_SHORT, "Flags" }, { true, FT_BYTE, "RaceID" }, { true, FT_BYTE, "SexID" }, { true, FT_BYTE, "BaseSection" }, { true, FT_BYTE, "VariationIndex" }, { true, FT_BYTE, "ColorIndex" }, + { true, FT_SHORT, "Flags" }, + { true, FT_INT, "MaterialResourcesID1" }, + { true, FT_INT, "MaterialResourcesID2" }, + { true, FT_INT, "MaterialResourcesID3" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CharSectionsMeta::Instance(), HOTFIX_SEL_CHAR_SECTIONS); return &loadInfo; @@ -674,6 +693,11 @@ struct CharStartOutfitLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_BYTE, "ClassID" }, + { false, FT_BYTE, "SexID" }, + { false, FT_BYTE, "OutfitID" }, + { false, FT_INT, "PetDisplayID" }, + { false, FT_BYTE, "PetFamilyID" }, { true, FT_INT, "ItemID1" }, { true, FT_INT, "ItemID2" }, { true, FT_INT, "ItemID3" }, @@ -698,11 +722,6 @@ struct CharStartOutfitLoadInfo { true, FT_INT, "ItemID22" }, { true, FT_INT, "ItemID23" }, { true, FT_INT, "ItemID24" }, - { false, FT_INT, "PetDisplayID" }, - { false, FT_BYTE, "ClassID" }, - { false, FT_BYTE, "SexID" }, - { false, FT_BYTE, "OutfitID" }, - { false, FT_BYTE, "PetFamilyID" }, { false, FT_BYTE, "RaceID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CharStartOutfitMeta::Instance(), HOTFIX_SEL_CHAR_START_OUTFIT); @@ -750,26 +769,26 @@ struct ChrClassesLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_STRING_NOT_LOCALIZED, "PetNameToken" }, { false, FT_STRING, "Name" }, - { false, FT_STRING, "NameFemale" }, - { false, FT_STRING, "NameMale" }, { false, FT_STRING_NOT_LOCALIZED, "Filename" }, + { false, FT_STRING, "NameMale" }, + { false, FT_STRING, "NameFemale" }, + { false, FT_STRING_NOT_LOCALIZED, "PetNameToken" }, + { false, FT_INT, "ID" }, { false, FT_INT, "CreateScreenFileDataID" }, { false, FT_INT, "SelectScreenFileDataID" }, - { false, FT_INT, "LowResScreenFileDataID" }, { false, FT_INT, "IconFileDataID" }, + { false, FT_INT, "LowResScreenFileDataID" }, { true, FT_INT, "StartingLevel" }, { false, FT_SHORT, "Flags" }, { false, FT_SHORT, "CinematicSequenceID" }, { false, FT_SHORT, "DefaultSpec" }, + { false, FT_BYTE, "PrimaryStatPriority" }, { false, FT_BYTE, "DisplayPower" }, - { false, FT_BYTE, "SpellClassSet" }, - { false, FT_BYTE, "AttackPowerPerStrength" }, - { false, FT_BYTE, "AttackPowerPerAgility" }, { false, FT_BYTE, "RangedAttackPowerPerAgility" }, - { false, FT_BYTE, "PrimaryStatPriority" }, - { false, FT_INT, "ID" }, + { false, FT_BYTE, "AttackPowerPerAgility" }, + { false, FT_BYTE, "AttackPowerPerStrength" }, + { false, FT_BYTE, "SpellClassSet" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ChrClassesMeta::Instance(), HOTFIX_SEL_CHR_CLASSES); return &loadInfo; @@ -783,7 +802,7 @@ struct ChrClassesXPowerTypesLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_BYTE, "PowerType" }, + { true, FT_BYTE, "PowerType" }, { false, FT_BYTE, "ClassID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ChrClassesXPowerTypesMeta::Instance(), HOTFIX_SEL_CHR_CLASSES_X_POWER_TYPES); @@ -803,9 +822,12 @@ struct ChrRacesLoadInfo { false, FT_STRING, "NameFemale" }, { false, FT_STRING, "NameLowercase" }, { false, FT_STRING, "NameFemaleLowercase" }, + { false, FT_INT, "ID" }, { true, FT_INT, "Flags" }, { false, FT_INT, "MaleDisplayId" }, { false, FT_INT, "FemaleDisplayId" }, + { false, FT_INT, "HighResMaleDisplayId" }, + { false, FT_INT, "HighResFemaleDisplayId" }, { true, FT_INT, "CreateScreenFileDataID" }, { true, FT_INT, "SelectScreenFileDataID" }, { false, FT_FLOAT, "MaleCustomizeOffset1" }, @@ -815,34 +837,39 @@ struct ChrRacesLoadInfo { false, FT_FLOAT, "FemaleCustomizeOffset2" }, { false, FT_FLOAT, "FemaleCustomizeOffset3" }, { true, FT_INT, "LowResScreenFileDataID" }, + { false, FT_INT, "AlteredFormStartVisualKitID1" }, + { false, FT_INT, "AlteredFormStartVisualKitID2" }, + { false, FT_INT, "AlteredFormStartVisualKitID3" }, + { false, FT_INT, "AlteredFormFinishVisualKitID1" }, + { false, FT_INT, "AlteredFormFinishVisualKitID2" }, + { false, FT_INT, "AlteredFormFinishVisualKitID3" }, + { true, FT_INT, "HeritageArmorAchievementID" }, { true, FT_INT, "StartingLevel" }, { true, FT_INT, "UiDisplayOrder" }, + { true, FT_INT, "FemaleSkeletonFileDataID" }, + { true, FT_INT, "MaleSkeletonFileDataID" }, + { true, FT_INT, "HelmVisFallbackRaceID" }, { true, FT_SHORT, "FactionID" }, + { true, FT_SHORT, "CinematicSequenceID" }, { true, FT_SHORT, "ResSicknessSpellID" }, { true, FT_SHORT, "SplashSoundID" }, - { true, FT_SHORT, "CinematicSequenceID" }, { true, FT_BYTE, "BaseLanguage" }, { true, FT_BYTE, "CreatureType" }, { true, FT_BYTE, "Alliance" }, { true, FT_BYTE, "RaceRelated" }, { true, FT_BYTE, "UnalteredVisualRaceID" }, { true, FT_BYTE, "CharComponentTextureLayoutID" }, + { true, FT_BYTE, "CharComponentTexLayoutHiResID" }, { true, FT_BYTE, "DefaultClassID" }, { true, FT_BYTE, "NeutralRaceID" }, - { true, FT_BYTE, "DisplayRaceID" }, - { true, FT_BYTE, "CharComponentTexLayoutHiResID" }, - { false, FT_INT, "ID" }, - { false, FT_INT, "HighResMaleDisplayId" }, - { false, FT_INT, "HighResFemaleDisplayId" }, - { true, FT_INT, "HeritageArmorAchievementID" }, - { true, FT_INT, "MaleSkeletonFileDataID" }, - { true, FT_INT, "FemaleSkeletonFileDataID" }, - { false, FT_INT, "AlteredFormStartVisualKitID1" }, - { false, FT_INT, "AlteredFormStartVisualKitID2" }, - { false, FT_INT, "AlteredFormStartVisualKitID3" }, - { false, FT_INT, "AlteredFormFinishVisualKitID1" }, - { false, FT_INT, "AlteredFormFinishVisualKitID2" }, - { false, FT_INT, "AlteredFormFinishVisualKitID3" }, + { true, FT_BYTE, "MaleModelFallbackRaceID" }, + { true, FT_BYTE, "MaleModelFallbackSex" }, + { true, FT_BYTE, "FemaleModelFallbackRaceID" }, + { true, FT_BYTE, "FemaleModelFallbackSex" }, + { true, FT_BYTE, "MaleTextureFallbackRaceID" }, + { true, FT_BYTE, "MaleTextureFallbackSex" }, + { true, FT_BYTE, "FemaleTextureFallbackRaceID" }, + { true, FT_BYTE, "FemaleTextureFallbackSex" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ChrRacesMeta::Instance(), HOTFIX_SEL_CHR_RACES); return &loadInfo; @@ -858,17 +885,17 @@ struct ChrSpecializationLoadInfo { false, FT_STRING, "Name" }, { false, FT_STRING, "FemaleName" }, { false, FT_STRING, "Description" }, - { true, FT_INT, "MasterySpellID1" }, - { true, FT_INT, "MasterySpellID2" }, + { false, FT_INT, "ID" }, { true, FT_BYTE, "ClassID" }, { true, FT_BYTE, "OrderIndex" }, { true, FT_BYTE, "PetTalentType" }, { true, FT_BYTE, "Role" }, - { true, FT_BYTE, "PrimaryStatPriority" }, - { false, FT_INT, "ID" }, - { true, FT_INT, "SpellIconFileID" }, { false, FT_INT, "Flags" }, + { true, FT_INT, "SpellIconFileID" }, + { true, FT_BYTE, "PrimaryStatPriority" }, { true, FT_INT, "AnimReplacements" }, + { true, FT_INT, "MasterySpellID1" }, + { true, FT_INT, "MasterySpellID2" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ChrSpecializationMeta::Instance(), HOTFIX_SEL_CHR_SPECIALIZATION); return &loadInfo; @@ -882,10 +909,10 @@ struct CinematicCameraLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "SoundID" }, { false, FT_FLOAT, "OriginX" }, { false, FT_FLOAT, "OriginY" }, { false, FT_FLOAT, "OriginZ" }, + { false, FT_INT, "SoundID" }, { false, FT_FLOAT, "OriginFacing" }, { false, FT_INT, "FileDataID" }, }; @@ -916,6 +943,24 @@ struct CinematicSequencesLoadInfo } }; +struct ContentTuningLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_INT, "ID" }, + { true, FT_INT, "MinLevel" }, + { true, FT_INT, "MaxLevel" }, + { true, FT_INT, "Flags" }, + { true, FT_INT, "ExpectedStatModID" }, + { true, FT_INT, "DifficultyESMID" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ContentTuningMeta::Instance(), HOTFIX_SEL_CONTENT_TUNING); + return &loadInfo; + } +}; + struct ConversationLineLoadInfo { static DB2LoadInfo const* Instance() @@ -944,27 +989,29 @@ struct CreatureDisplayInfoLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "CreatureModelScale" }, { false, FT_SHORT, "ModelID" }, - { false, FT_SHORT, "NPCSoundID" }, + { false, FT_SHORT, "SoundID" }, { true, FT_BYTE, "SizeClass" }, - { false, FT_BYTE, "Flags" }, - { true, FT_BYTE, "Gender" }, - { true, FT_INT, "ExtendedDisplayInfoID" }, - { true, FT_INT, "PortraitTextureFileDataID" }, + { false, FT_FLOAT, "CreatureModelScale" }, { false, FT_BYTE, "CreatureModelAlpha" }, - { false, FT_SHORT, "SoundID" }, - { false, FT_FLOAT, "PlayerOverrideScale" }, - { true, FT_INT, "PortraitCreatureDisplayInfoID" }, { false, FT_BYTE, "BloodID" }, + { true, FT_INT, "ExtendedDisplayInfoID" }, + { false, FT_SHORT, "NPCSoundID" }, { false, FT_SHORT, "ParticleColorID" }, - { false, FT_INT, "CreatureGeosetData" }, + { true, FT_INT, "PortraitCreatureDisplayInfoID" }, + { true, FT_INT, "PortraitTextureFileDataID" }, { false, FT_SHORT, "ObjectEffectPackageID" }, { false, FT_SHORT, "AnimReplacementSetID" }, - { true, FT_BYTE, "UnarmedWeaponType" }, + { false, FT_BYTE, "Flags" }, { true, FT_INT, "StateSpellVisualKitID" }, + { false, FT_FLOAT, "PlayerOverrideScale" }, { false, FT_FLOAT, "PetInstanceScale" }, + { true, FT_BYTE, "UnarmedWeaponType" }, { true, FT_INT, "MountPoofSpellVisualKitID" }, + { true, FT_INT, "DissolveEffectID" }, + { true, FT_BYTE, "Gender" }, + { true, FT_INT, "DissolveOutEffectID" }, + { true, FT_BYTE, "CreatureModelMinLod" }, { true, FT_INT, "TextureVariationFileDataID1" }, { true, FT_INT, "TextureVariationFileDataID2" }, { true, FT_INT, "TextureVariationFileDataID3" }, @@ -981,8 +1028,6 @@ struct CreatureDisplayInfoExtraLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "BakeMaterialResourcesID" }, - { true, FT_INT, "HDBakeMaterialResourcesID" }, { true, FT_BYTE, "DisplayRaceID" }, { true, FT_BYTE, "DisplaySexID" }, { true, FT_BYTE, "DisplayClassID" }, @@ -991,10 +1036,12 @@ struct CreatureDisplayInfoExtraLoadInfo { true, FT_BYTE, "HairStyleID" }, { true, FT_BYTE, "HairColorID" }, { true, FT_BYTE, "FacialHairID" }, + { true, FT_BYTE, "Flags" }, + { true, FT_INT, "BakeMaterialResourcesID" }, + { true, FT_INT, "HDBakeMaterialResourcesID" }, { false, FT_BYTE, "CustomDisplayOption1" }, { false, FT_BYTE, "CustomDisplayOption2" }, { false, FT_BYTE, "CustomDisplayOption3" }, - { true, FT_BYTE, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CreatureDisplayInfoExtraMeta::Instance(), HOTFIX_SEL_CREATURE_DISPLAY_INFO_EXTRA); return &loadInfo; @@ -1010,14 +1057,14 @@ struct CreatureFamilyLoadInfo { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, { false, FT_FLOAT, "MinScale" }, + { true, FT_BYTE, "MinScaleLevel" }, { false, FT_FLOAT, "MaxScale" }, + { true, FT_BYTE, "MaxScaleLevel" }, + { true, FT_SHORT, "PetFoodMask" }, + { true, FT_BYTE, "PetTalentType" }, { true, FT_INT, "IconFileID" }, { true, FT_SHORT, "SkillLine1" }, { true, FT_SHORT, "SkillLine2" }, - { true, FT_SHORT, "PetFoodMask" }, - { true, FT_BYTE, "MinScaleLevel" }, - { true, FT_BYTE, "MaxScaleLevel" }, - { true, FT_BYTE, "PetTalentType" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CreatureFamilyMeta::Instance(), HOTFIX_SEL_CREATURE_FAMILY); return &loadInfo; @@ -1031,39 +1078,39 @@ struct CreatureModelDataLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "ModelScale" }, - { false, FT_FLOAT, "FootprintTextureLength" }, - { false, FT_FLOAT, "FootprintTextureWidth" }, - { false, FT_FLOAT, "FootprintParticleScale" }, - { false, FT_FLOAT, "CollisionWidth" }, - { false, FT_FLOAT, "CollisionHeight" }, - { false, FT_FLOAT, "MountHeight" }, { false, FT_FLOAT, "GeoBox1" }, { false, FT_FLOAT, "GeoBox2" }, { false, FT_FLOAT, "GeoBox3" }, { false, FT_FLOAT, "GeoBox4" }, { false, FT_FLOAT, "GeoBox5" }, { false, FT_FLOAT, "GeoBox6" }, - { false, FT_FLOAT, "WorldEffectScale" }, - { false, FT_FLOAT, "AttachedEffectScale" }, - { false, FT_FLOAT, "MissileCollisionRadius" }, - { false, FT_FLOAT, "MissileCollisionPush" }, - { false, FT_FLOAT, "MissileCollisionRaise" }, - { false, FT_FLOAT, "OverrideLootEffectScale" }, - { false, FT_FLOAT, "OverrideNameScale" }, - { false, FT_FLOAT, "OverrideSelectionRadius" }, - { false, FT_FLOAT, "TamedPetBaseScale" }, - { false, FT_FLOAT, "HoverHeight" }, { false, FT_INT, "Flags" }, { false, FT_INT, "FileDataID" }, - { false, FT_INT, "SizeClass" }, { false, FT_INT, "BloodID" }, { false, FT_INT, "FootprintTextureID" }, + { false, FT_FLOAT, "FootprintTextureLength" }, + { false, FT_FLOAT, "FootprintTextureWidth" }, + { false, FT_FLOAT, "FootprintParticleScale" }, { false, FT_INT, "FoleyMaterialID" }, { false, FT_INT, "FootstepCameraEffectID" }, { false, FT_INT, "DeathThudCameraEffectID" }, { false, FT_INT, "SoundID" }, + { false, FT_INT, "SizeClass" }, + { false, FT_FLOAT, "CollisionWidth" }, + { false, FT_FLOAT, "CollisionHeight" }, + { false, FT_FLOAT, "WorldEffectScale" }, { false, FT_INT, "CreatureGeosetDataID" }, + { false, FT_FLOAT, "HoverHeight" }, + { false, FT_FLOAT, "AttachedEffectScale" }, + { false, FT_FLOAT, "ModelScale" }, + { false, FT_FLOAT, "MissileCollisionRadius" }, + { false, FT_FLOAT, "MissileCollisionPush" }, + { false, FT_FLOAT, "MissileCollisionRaise" }, + { false, FT_FLOAT, "MountHeight" }, + { false, FT_FLOAT, "OverrideLootEffectScale" }, + { false, FT_FLOAT, "OverrideNameScale" }, + { false, FT_FLOAT, "OverrideSelectionRadius" }, + { false, FT_FLOAT, "TamedPetBaseScale" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CreatureModelDataMeta::Instance(), HOTFIX_SEL_CREATURE_MODEL_DATA); return &loadInfo; @@ -1092,16 +1139,16 @@ struct CriteriaLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "Asset" }, - { true, FT_INT, "StartAsset" }, - { true, FT_INT, "FailAsset" }, + { true, FT_SHORT, "Type" }, + { true, FT_INT, "Asset" }, { false, FT_INT, "ModifierTreeId" }, - { false, FT_SHORT, "StartTimer" }, - { true, FT_SHORT, "EligibilityWorldStateID" }, - { false, FT_BYTE, "Type" }, { false, FT_BYTE, "StartEvent" }, + { true, FT_INT, "StartAsset" }, + { false, FT_SHORT, "StartTimer" }, { false, FT_BYTE, "FailEvent" }, + { true, FT_INT, "FailAsset" }, { false, FT_BYTE, "Flags" }, + { true, FT_SHORT, "EligibilityWorldStateID" }, { true, FT_BYTE, "EligibilityWorldStateValue" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CriteriaMeta::Instance(), HOTFIX_SEL_CRITERIA); @@ -1117,12 +1164,12 @@ struct CriteriaTreeLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Description" }, - { true, FT_INT, "Amount" }, - { true, FT_SHORT, "Flags" }, + { false, FT_INT, "Parent" }, + { false, FT_INT, "Amount" }, { true, FT_BYTE, "Operator" }, { false, FT_INT, "CriteriaID" }, - { false, FT_INT, "Parent" }, { true, FT_INT, "OrderIndex" }, + { true, FT_SHORT, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CriteriaTreeMeta::Instance(), HOTFIX_SEL_CRITERIA_TREE); return &loadInfo; @@ -1138,14 +1185,15 @@ struct CurrencyTypesLoadInfo { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, { false, FT_STRING, "Description" }, - { false, FT_INT, "MaxQty" }, - { false, FT_INT, "MaxEarnablePerWeek" }, - { false, FT_INT, "Flags" }, { false, FT_BYTE, "CategoryID" }, - { false, FT_BYTE, "SpellCategory" }, - { false, FT_BYTE, "Quality" }, { true, FT_INT, "InventoryIconFileID" }, { false, FT_INT, "SpellWeight" }, + { false, FT_BYTE, "SpellCategory" }, + { false, FT_INT, "MaxQty" }, + { false, FT_INT, "MaxEarnablePerWeek" }, + { false, FT_INT, "Flags" }, + { true, FT_BYTE, "Quality" }, + { true, FT_INT, "FactionID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CurrencyTypesMeta::Instance(), HOTFIX_SEL_CURRENCY_TYPES); return &loadInfo; @@ -1191,28 +1239,28 @@ struct DestructibleModelDataLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_SHORT, "State0Wmo" }, - { false, FT_SHORT, "State1Wmo" }, - { false, FT_SHORT, "State2Wmo" }, - { false, FT_SHORT, "State3Wmo" }, - { false, FT_SHORT, "HealEffectSpeed" }, { true, FT_BYTE, "State0ImpactEffectDoodadSet" }, { false, FT_BYTE, "State0AmbientDoodadSet" }, - { true, FT_BYTE, "State0NameSet" }, + { false, FT_SHORT, "State1Wmo" }, { true, FT_BYTE, "State1DestructionDoodadSet" }, { true, FT_BYTE, "State1ImpactEffectDoodadSet" }, { false, FT_BYTE, "State1AmbientDoodadSet" }, - { true, FT_BYTE, "State1NameSet" }, + { false, FT_SHORT, "State2Wmo" }, { true, FT_BYTE, "State2DestructionDoodadSet" }, { true, FT_BYTE, "State2ImpactEffectDoodadSet" }, { false, FT_BYTE, "State2AmbientDoodadSet" }, - { true, FT_BYTE, "State2NameSet" }, + { false, FT_SHORT, "State3Wmo" }, { false, FT_BYTE, "State3InitDoodadSet" }, { false, FT_BYTE, "State3AmbientDoodadSet" }, - { true, FT_BYTE, "State3NameSet" }, { false, FT_BYTE, "EjectDirection" }, { false, FT_BYTE, "DoNotHighlight" }, + { false, FT_SHORT, "State0Wmo" }, { false, FT_BYTE, "HealEffect" }, + { false, FT_SHORT, "HealEffectSpeed" }, + { true, FT_BYTE, "State0NameSet" }, + { true, FT_BYTE, "State1NameSet" }, + { true, FT_BYTE, "State2NameSet" }, + { true, FT_BYTE, "State3NameSet" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, DestructibleModelDataMeta::Instance(), HOTFIX_SEL_DESTRUCTIBLE_MODEL_DATA); return &loadInfo; @@ -1227,18 +1275,18 @@ struct DifficultyLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, - { false, FT_SHORT, "GroupSizeHealthCurveID" }, - { false, FT_SHORT, "GroupSizeDmgCurveID" }, - { false, FT_SHORT, "GroupSizeSpellPointsCurveID" }, - { false, FT_BYTE, "FallbackDifficultyID" }, { false, FT_BYTE, "InstanceType" }, + { false, FT_BYTE, "OrderIndex" }, + { true, FT_BYTE, "OldEnumValue" }, + { false, FT_BYTE, "FallbackDifficultyID" }, { false, FT_BYTE, "MinPlayers" }, { false, FT_BYTE, "MaxPlayers" }, - { true, FT_BYTE, "OldEnumValue" }, { false, FT_BYTE, "Flags" }, - { false, FT_BYTE, "ToggleDifficultyID" }, { false, FT_BYTE, "ItemContext" }, - { false, FT_BYTE, "OrderIndex" }, + { false, FT_BYTE, "ToggleDifficultyID" }, + { false, FT_SHORT, "GroupSizeHealthCurveID" }, + { false, FT_SHORT, "GroupSizeDmgCurveID" }, + { false, FT_SHORT, "GroupSizeSpellPointsCurveID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, DifficultyMeta::Instance(), HOTFIX_SEL_DIFFICULTY); return &loadInfo; @@ -1252,13 +1300,13 @@ struct DungeonEncounterLoadInfo static DB2FieldMeta const fields[] = { { false, FT_STRING, "Name" }, - { true, FT_INT, "CreatureDisplayID" }, + { false, FT_INT, "ID" }, { true, FT_SHORT, "MapID" }, { true, FT_BYTE, "DifficultyID" }, + { true, FT_INT, "OrderIndex" }, { true, FT_BYTE, "Bit" }, + { true, FT_INT, "CreatureDisplayID" }, { false, FT_BYTE, "Flags" }, - { false, FT_INT, "ID" }, - { true, FT_INT, "OrderIndex" }, { true, FT_INT, "SpellIconFileID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, DungeonEncounterMeta::Instance(), HOTFIX_SEL_DUNGEON_ENCOUNTER); @@ -1331,13 +1379,13 @@ struct EmotesLoadInfo { false, FT_INT, "ID" }, { true, FT_LONG, "RaceMask" }, { false, FT_STRING_NOT_LOCALIZED, "EmoteSlashCommand" }, + { true, FT_INT, "AnimID" }, { false, FT_INT, "EmoteFlags" }, - { false, FT_INT, "SpellVisualKitID" }, - { true, FT_SHORT, "AnimID" }, { false, FT_BYTE, "EmoteSpecProc" }, - { true, FT_INT, "ClassMask" }, { false, FT_INT, "EmoteSpecProcParam" }, { false, FT_INT, "EventSoundID" }, + { false, FT_INT, "SpellVisualKitID" }, + { true, FT_INT, "ClassMask" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, EmotesMeta::Instance(), HOTFIX_SEL_EMOTES); return &loadInfo; @@ -1367,8 +1415,8 @@ struct EmotesTextSoundLoadInfo { { false, FT_INT, "ID" }, { false, FT_BYTE, "RaceID" }, - { false, FT_BYTE, "SexID" }, { false, FT_BYTE, "ClassID" }, + { false, FT_BYTE, "SexID" }, { false, FT_INT, "SoundID" }, { false, FT_SHORT, "EmotesTextID" }, }; @@ -1377,6 +1425,52 @@ struct EmotesTextSoundLoadInfo } }; +struct ExpectedStatLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_INT, "ID" }, + { true, FT_INT, "ExpansionID" }, + { false, FT_FLOAT, "CreatureHealth" }, + { false, FT_FLOAT, "PlayerHealth" }, + { false, FT_FLOAT, "CreatureAutoAttackDps" }, + { false, FT_FLOAT, "CreatureArmor" }, + { false, FT_FLOAT, "PlayerMana" }, + { false, FT_FLOAT, "PlayerPrimaryStat" }, + { false, FT_FLOAT, "PlayerSecondaryStat" }, + { false, FT_FLOAT, "ArmorConstant" }, + { false, FT_FLOAT, "CreatureSpellDamage" }, + { true, FT_INT, "Lvl" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ExpectedStatMeta::Instance(), HOTFIX_SEL_EXPECTED_STAT); + return &loadInfo; + } +}; + +struct ExpectedStatModLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_INT, "ID" }, + { false, FT_FLOAT, "CreatureHealthMod" }, + { false, FT_FLOAT, "PlayerHealthMod" }, + { false, FT_FLOAT, "CreatureAutoAttackDPSMod" }, + { false, FT_FLOAT, "CreatureArmorMod" }, + { false, FT_FLOAT, "PlayerManaMod" }, + { false, FT_FLOAT, "PlayerPrimaryStatMod" }, + { false, FT_FLOAT, "PlayerSecondaryStatMod" }, + { false, FT_FLOAT, "ArmorConstantMod" }, + { false, FT_FLOAT, "CreatureSpellDamageMod" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ExpectedStatModMeta::Instance(), HOTFIX_SEL_EXPECTED_STAT_MOD); + return &loadInfo; + } +}; + struct FactionLoadInfo { static DB2LoadInfo const* Instance() @@ -1390,17 +1484,12 @@ struct FactionLoadInfo { false, FT_STRING, "Name" }, { false, FT_STRING, "Description" }, { false, FT_INT, "ID" }, - { true, FT_INT, "ReputationBase1" }, - { true, FT_INT, "ReputationBase2" }, - { true, FT_INT, "ReputationBase3" }, - { true, FT_INT, "ReputationBase4" }, - { false, FT_FLOAT, "ParentFactionMod1" }, - { false, FT_FLOAT, "ParentFactionMod2" }, - { true, FT_INT, "ReputationMax1" }, - { true, FT_INT, "ReputationMax2" }, - { true, FT_INT, "ReputationMax3" }, - { true, FT_INT, "ReputationMax4" }, { true, FT_SHORT, "ReputationIndex" }, + { false, FT_SHORT, "ParentFactionID" }, + { false, FT_BYTE, "Expansion" }, + { false, FT_BYTE, "FriendshipRepID" }, + { false, FT_BYTE, "Flags" }, + { false, FT_SHORT, "ParagonFactionID" }, { true, FT_SHORT, "ReputationClassMask1" }, { true, FT_SHORT, "ReputationClassMask2" }, { true, FT_SHORT, "ReputationClassMask3" }, @@ -1409,13 +1498,18 @@ struct FactionLoadInfo { false, FT_SHORT, "ReputationFlags2" }, { false, FT_SHORT, "ReputationFlags3" }, { false, FT_SHORT, "ReputationFlags4" }, - { false, FT_SHORT, "ParentFactionID" }, - { false, FT_SHORT, "ParagonFactionID" }, + { true, FT_INT, "ReputationBase1" }, + { true, FT_INT, "ReputationBase2" }, + { true, FT_INT, "ReputationBase3" }, + { true, FT_INT, "ReputationBase4" }, + { true, FT_INT, "ReputationMax1" }, + { true, FT_INT, "ReputationMax2" }, + { true, FT_INT, "ReputationMax3" }, + { true, FT_INT, "ReputationMax4" }, + { false, FT_FLOAT, "ParentFactionMod1" }, + { false, FT_FLOAT, "ParentFactionMod2" }, { false, FT_BYTE, "ParentFactionCap1" }, { false, FT_BYTE, "ParentFactionCap2" }, - { false, FT_BYTE, "Expansion" }, - { false, FT_BYTE, "Flags" }, - { false, FT_BYTE, "FriendshipRepID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, FactionMeta::Instance(), HOTFIX_SEL_FACTION); return &loadInfo; @@ -1431,6 +1525,9 @@ struct FactionTemplateLoadInfo { false, FT_INT, "ID" }, { false, FT_SHORT, "Faction" }, { false, FT_SHORT, "Flags" }, + { false, FT_BYTE, "FactionGroup" }, + { false, FT_BYTE, "FriendGroup" }, + { false, FT_BYTE, "EnemyGroup" }, { false, FT_SHORT, "Enemies1" }, { false, FT_SHORT, "Enemies2" }, { false, FT_SHORT, "Enemies3" }, @@ -1439,9 +1536,6 @@ struct FactionTemplateLoadInfo { false, FT_SHORT, "Friend2" }, { false, FT_SHORT, "Friend3" }, { false, FT_SHORT, "Friend4" }, - { false, FT_BYTE, "FactionGroup" }, - { false, FT_BYTE, "FriendGroup" }, - { false, FT_BYTE, "EnemyGroup" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, FactionTemplateMeta::Instance(), HOTFIX_SEL_FACTION_TEMPLATE); return &loadInfo; @@ -1455,16 +1549,16 @@ struct GameobjectDisplayInfoLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "FileDataID" }, { false, FT_FLOAT, "GeoBoxMinX" }, { false, FT_FLOAT, "GeoBoxMinY" }, { false, FT_FLOAT, "GeoBoxMinZ" }, { false, FT_FLOAT, "GeoBoxMaxX" }, { false, FT_FLOAT, "GeoBoxMaxY" }, { false, FT_FLOAT, "GeoBoxMaxZ" }, + { true, FT_INT, "FileDataID" }, + { true, FT_SHORT, "ObjectEffectPackageID" }, { false, FT_FLOAT, "OverrideLootEffectScale" }, { false, FT_FLOAT, "OverrideNameScale" }, - { true, FT_SHORT, "ObjectEffectPackageID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GameObjectDisplayInfoMeta::Instance(), HOTFIX_SEL_GAMEOBJECT_DISPLAY_INFO); return &loadInfo; @@ -1485,7 +1579,14 @@ struct GameobjectsLoadInfo { false, FT_FLOAT, "Rot2" }, { false, FT_FLOAT, "Rot3" }, { false, FT_FLOAT, "Rot4" }, + { false, FT_INT, "ID" }, + { false, FT_SHORT, "OwnerID" }, + { false, FT_SHORT, "DisplayID" }, { false, FT_FLOAT, "Scale" }, + { false, FT_BYTE, "TypeID" }, + { false, FT_BYTE, "PhaseUseFlags" }, + { false, FT_SHORT, "PhaseID" }, + { false, FT_SHORT, "PhaseGroupID" }, { true, FT_INT, "PropValue1" }, { true, FT_INT, "PropValue2" }, { true, FT_INT, "PropValue3" }, @@ -1494,13 +1595,6 @@ struct GameobjectsLoadInfo { true, FT_INT, "PropValue6" }, { true, FT_INT, "PropValue7" }, { true, FT_INT, "PropValue8" }, - { false, FT_SHORT, "OwnerID" }, - { false, FT_SHORT, "DisplayID" }, - { false, FT_SHORT, "PhaseID" }, - { false, FT_SHORT, "PhaseGroupID" }, - { false, FT_BYTE, "PhaseUseFlags" }, - { false, FT_BYTE, "TypeID" }, - { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GameObjectsMeta::Instance(), HOTFIX_SEL_GAMEOBJECTS); return &loadInfo; @@ -1515,12 +1609,12 @@ struct GarrAbilityLoadInfo { { false, FT_STRING, "Name" }, { false, FT_STRING, "Description" }, - { true, FT_INT, "IconFileDataID" }, - { false, FT_SHORT, "Flags" }, - { false, FT_SHORT, "FactionChangeGarrAbilityID" }, + { false, FT_INT, "ID" }, { false, FT_BYTE, "GarrAbilityCategoryID" }, { false, FT_BYTE, "GarrFollowerTypeID" }, - { false, FT_INT, "ID" }, + { true, FT_INT, "IconFileDataID" }, + { false, FT_SHORT, "FactionChangeGarrAbilityID" }, + { false, FT_SHORT, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GarrAbilityMeta::Instance(), HOTFIX_SEL_GARR_ABILITY); return &loadInfo; @@ -1534,30 +1628,30 @@ struct GarrBuildingLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_STRING, "AllianceName" }, { false, FT_STRING, "HordeName" }, + { false, FT_STRING, "AllianceName" }, { false, FT_STRING, "Description" }, { false, FT_STRING, "Tooltip" }, + { false, FT_BYTE, "GarrTypeID" }, + { false, FT_BYTE, "BuildingType" }, { true, FT_INT, "HordeGameObjectID" }, { true, FT_INT, "AllianceGameObjectID" }, - { true, FT_INT, "IconFileDataID" }, + { false, FT_BYTE, "GarrSiteID" }, + { false, FT_BYTE, "UpgradeLevel" }, + { true, FT_INT, "BuildSeconds" }, { false, FT_SHORT, "CurrencyTypeID" }, + { true, FT_INT, "CurrencyQty" }, { false, FT_SHORT, "HordeUiTextureKitID" }, { false, FT_SHORT, "AllianceUiTextureKitID" }, + { true, FT_INT, "IconFileDataID" }, { false, FT_SHORT, "AllianceSceneScriptPackageID" }, { false, FT_SHORT, "HordeSceneScriptPackageID" }, + { true, FT_INT, "MaxAssignments" }, + { false, FT_BYTE, "ShipmentCapacity" }, { false, FT_SHORT, "GarrAbilityID" }, { false, FT_SHORT, "BonusGarrAbilityID" }, { false, FT_SHORT, "GoldCost" }, - { false, FT_BYTE, "GarrSiteID" }, - { false, FT_BYTE, "BuildingType" }, - { false, FT_BYTE, "UpgradeLevel" }, { false, FT_BYTE, "Flags" }, - { false, FT_BYTE, "ShipmentCapacity" }, - { false, FT_BYTE, "GarrTypeID" }, - { true, FT_INT, "BuildSeconds" }, - { true, FT_INT, "CurrencyQty" }, - { true, FT_INT, "MaxAssignments" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GarrBuildingMeta::Instance(), HOTFIX_SEL_GARR_BUILDING); return &loadInfo; @@ -1572,10 +1666,10 @@ struct GarrBuildingPlotInstLoadInfo { { false, FT_FLOAT, "MapOffsetX" }, { false, FT_FLOAT, "MapOffsetY" }, - { false, FT_SHORT, "UiTextureAtlasMemberID" }, - { false, FT_SHORT, "GarrSiteLevelPlotInstID" }, - { false, FT_BYTE, "GarrBuildingID" }, { false, FT_INT, "ID" }, + { false, FT_BYTE, "GarrBuildingID" }, + { false, FT_SHORT, "GarrSiteLevelPlotInstID" }, + { false, FT_SHORT, "UiTextureAtlasMemberID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GarrBuildingPlotInstMeta::Instance(), HOTFIX_SEL_GARR_BUILDING_PLOT_INST); return &loadInfo; @@ -1591,11 +1685,11 @@ struct GarrClassSpecLoadInfo { false, FT_STRING, "ClassSpec" }, { false, FT_STRING, "ClassSpecMale" }, { false, FT_STRING, "ClassSpecFemale" }, + { false, FT_INT, "ID" }, { false, FT_SHORT, "UiTextureAtlasMemberID" }, { false, FT_SHORT, "GarrFollItemSetID" }, { false, FT_BYTE, "FollowerClassLimit" }, { false, FT_BYTE, "Flags" }, - { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GarrClassSpecMeta::Instance(), HOTFIX_SEL_GARR_CLASS_SPEC); return &loadInfo; @@ -1611,35 +1705,35 @@ struct GarrFollowerLoadInfo { false, FT_STRING, "HordeSourceText" }, { false, FT_STRING, "AllianceSourceText" }, { false, FT_STRING, "TitleName" }, + { false, FT_INT, "ID" }, + { false, FT_BYTE, "GarrTypeID" }, + { false, FT_BYTE, "GarrFollowerTypeID" }, { true, FT_INT, "HordeCreatureID" }, { true, FT_INT, "AllianceCreatureID" }, - { true, FT_INT, "HordeIconFileDataID" }, - { true, FT_INT, "AllianceIconFileDataID" }, - { false, FT_INT, "HordeSlottingBroadcastTextID" }, - { false, FT_INT, "AllySlottingBroadcastTextID" }, - { false, FT_SHORT, "HordeGarrFollItemSetID" }, - { false, FT_SHORT, "AllianceGarrFollItemSetID" }, - { false, FT_SHORT, "ItemLevelWeapon" }, - { false, FT_SHORT, "ItemLevelArmor" }, - { false, FT_SHORT, "HordeUITextureKitID" }, - { false, FT_SHORT, "AllianceUITextureKitID" }, - { false, FT_BYTE, "GarrFollowerTypeID" }, { false, FT_BYTE, "HordeGarrFollRaceID" }, { false, FT_BYTE, "AllianceGarrFollRaceID" }, - { false, FT_BYTE, "Quality" }, { false, FT_BYTE, "HordeGarrClassSpecID" }, { false, FT_BYTE, "AllianceGarrClassSpecID" }, + { false, FT_BYTE, "Quality" }, { false, FT_BYTE, "FollowerLevel" }, - { false, FT_BYTE, "Gender" }, - { false, FT_BYTE, "Flags" }, + { false, FT_SHORT, "ItemLevelWeapon" }, + { false, FT_SHORT, "ItemLevelArmor" }, { true, FT_BYTE, "HordeSourceTypeEnum" }, { true, FT_BYTE, "AllianceSourceTypeEnum" }, - { false, FT_BYTE, "GarrTypeID" }, + { true, FT_INT, "HordeIconFileDataID" }, + { true, FT_INT, "AllianceIconFileDataID" }, + { false, FT_SHORT, "HordeGarrFollItemSetID" }, + { false, FT_SHORT, "AllianceGarrFollItemSetID" }, + { false, FT_SHORT, "HordeUITextureKitID" }, + { false, FT_SHORT, "AllianceUITextureKitID" }, { false, FT_BYTE, "Vitality" }, - { false, FT_BYTE, "ChrClassID" }, { false, FT_BYTE, "HordeFlavorGarrStringID" }, { false, FT_BYTE, "AllianceFlavorGarrStringID" }, - { false, FT_INT, "ID" }, + { false, FT_INT, "HordeSlottingBroadcastTextID" }, + { false, FT_INT, "AllySlottingBroadcastTextID" }, + { false, FT_BYTE, "ChrClassID" }, + { false, FT_BYTE, "Flags" }, + { false, FT_BYTE, "Gender" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GarrFollowerMeta::Instance(), HOTFIX_SEL_GARR_FOLLOWER); return &loadInfo; @@ -1653,8 +1747,9 @@ struct GarrFollowerXAbilityLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_SHORT, "GarrAbilityID" }, + { false, FT_BYTE, "OrderIndex" }, { false, FT_BYTE, "FactionIndex" }, + { false, FT_SHORT, "GarrAbilityID" }, { false, FT_SHORT, "GarrFollowerID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GarrFollowerXAbilityMeta::Instance(), HOTFIX_SEL_GARR_FOLLOWER_X_ABILITY); @@ -1669,12 +1764,12 @@ struct GarrPlotLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_STRING, "Name" }, - { true, FT_INT, "AllianceConstructObjID" }, - { true, FT_INT, "HordeConstructObjID" }, - { false, FT_BYTE, "UiCategoryID" }, + { false, FT_STRING_NOT_LOCALIZED, "Name" }, { false, FT_BYTE, "PlotType" }, + { true, FT_INT, "HordeConstructObjID" }, + { true, FT_INT, "AllianceConstructObjID" }, { false, FT_BYTE, "Flags" }, + { false, FT_BYTE, "UiCategoryID" }, { false, FT_INT, "UpgradeRequirement1" }, { false, FT_INT, "UpgradeRequirement2" }, }; @@ -1722,14 +1817,14 @@ struct GarrSiteLevelLoadInfo { false, FT_INT, "ID" }, { false, FT_FLOAT, "TownHallUiPosX" }, { false, FT_FLOAT, "TownHallUiPosY" }, + { false, FT_INT, "GarrSiteID" }, + { false, FT_BYTE, "GarrLevel" }, { false, FT_SHORT, "MapID" }, - { false, FT_SHORT, "UiTextureKitID" }, { false, FT_SHORT, "UpgradeMovieID" }, + { false, FT_SHORT, "UiTextureKitID" }, + { false, FT_BYTE, "MaxBuildingLevel" }, { false, FT_SHORT, "UpgradeCost" }, { false, FT_SHORT, "UpgradeGoldCost" }, - { false, FT_BYTE, "GarrLevel" }, - { false, FT_BYTE, "GarrSiteID" }, - { false, FT_BYTE, "MaxBuildingLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GarrSiteLevelMeta::Instance(), HOTFIX_SEL_GARR_SITE_LEVEL); return &loadInfo; @@ -1761,8 +1856,8 @@ struct GemPropertiesLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "Type" }, { false, FT_SHORT, "EnchantId" }, + { true, FT_INT, "Type" }, { false, FT_SHORT, "MinItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GemPropertiesMeta::Instance(), HOTFIX_SEL_GEM_PROPERTIES); @@ -1825,8 +1920,8 @@ struct GuildColorBackgroundLoadInfo { { false, FT_INT, "ID" }, { false, FT_BYTE, "Red" }, - { false, FT_BYTE, "Green" }, { false, FT_BYTE, "Blue" }, + { false, FT_BYTE, "Green" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GuildColorBackgroundMeta::Instance(), HOTFIX_SEL_GUILD_COLOR_BACKGROUND); return &loadInfo; @@ -1841,8 +1936,8 @@ struct GuildColorBorderLoadInfo { { false, FT_INT, "ID" }, { false, FT_BYTE, "Red" }, - { false, FT_BYTE, "Green" }, { false, FT_BYTE, "Blue" }, + { false, FT_BYTE, "Green" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GuildColorBorderMeta::Instance(), HOTFIX_SEL_GUILD_COLOR_BORDER); return &loadInfo; @@ -1857,8 +1952,8 @@ struct GuildColorEmblemLoadInfo { { false, FT_INT, "ID" }, { false, FT_BYTE, "Red" }, - { false, FT_BYTE, "Green" }, { false, FT_BYTE, "Blue" }, + { false, FT_BYTE, "Green" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GuildColorEmblemMeta::Instance(), HOTFIX_SEL_GUILD_COLOR_EMBLEM); return &loadInfo; @@ -1886,19 +1981,19 @@ struct HeirloomLoadInfo static DB2FieldMeta const fields[] = { { false, FT_STRING, "SourceText" }, + { false, FT_INT, "ID" }, { true, FT_INT, "ItemID" }, - { true, FT_INT, "LegacyItemID" }, { true, FT_INT, "LegacyUpgradedItemID" }, { true, FT_INT, "StaticUpgradedItemID" }, + { true, FT_BYTE, "SourceTypeEnum" }, + { false, FT_BYTE, "Flags" }, + { true, FT_INT, "LegacyItemID" }, { true, FT_INT, "UpgradeItemID1" }, { true, FT_INT, "UpgradeItemID2" }, { true, FT_INT, "UpgradeItemID3" }, { false, FT_SHORT, "UpgradeItemBonusListID1" }, { false, FT_SHORT, "UpgradeItemBonusListID2" }, { false, FT_SHORT, "UpgradeItemBonusListID3" }, - { false, FT_BYTE, "Flags" }, - { true, FT_BYTE, "SourceTypeEnum" }, - { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, HeirloomMeta::Instance(), HOTFIX_SEL_HEIRLOOM); return &loadInfo; @@ -1912,6 +2007,23 @@ struct HolidaysLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_SHORT, "Region" }, + { false, FT_BYTE, "Looping" }, + { false, FT_INT, "HolidayNameID" }, + { false, FT_INT, "HolidayDescriptionID" }, + { false, FT_BYTE, "Priority" }, + { true, FT_BYTE, "CalendarFilterType" }, + { false, FT_BYTE, "Flags" }, + { false, FT_SHORT, "Duration1" }, + { false, FT_SHORT, "Duration2" }, + { false, FT_SHORT, "Duration3" }, + { false, FT_SHORT, "Duration4" }, + { false, FT_SHORT, "Duration5" }, + { false, FT_SHORT, "Duration6" }, + { false, FT_SHORT, "Duration7" }, + { false, FT_SHORT, "Duration8" }, + { false, FT_SHORT, "Duration9" }, + { false, FT_SHORT, "Duration10" }, { false, FT_INT, "Date1" }, { false, FT_INT, "Date2" }, { false, FT_INT, "Date3" }, @@ -1928,18 +2040,6 @@ struct HolidaysLoadInfo { false, FT_INT, "Date14" }, { false, FT_INT, "Date15" }, { false, FT_INT, "Date16" }, - { false, FT_SHORT, "Duration1" }, - { false, FT_SHORT, "Duration2" }, - { false, FT_SHORT, "Duration3" }, - { false, FT_SHORT, "Duration4" }, - { false, FT_SHORT, "Duration5" }, - { false, FT_SHORT, "Duration6" }, - { false, FT_SHORT, "Duration7" }, - { false, FT_SHORT, "Duration8" }, - { false, FT_SHORT, "Duration9" }, - { false, FT_SHORT, "Duration10" }, - { false, FT_SHORT, "Region" }, - { false, FT_BYTE, "Looping" }, { false, FT_BYTE, "CalendarFlags1" }, { false, FT_BYTE, "CalendarFlags2" }, { false, FT_BYTE, "CalendarFlags3" }, @@ -1950,11 +2050,6 @@ struct HolidaysLoadInfo { false, FT_BYTE, "CalendarFlags8" }, { false, FT_BYTE, "CalendarFlags9" }, { false, FT_BYTE, "CalendarFlags10" }, - { false, FT_BYTE, "Priority" }, - { true, FT_BYTE, "CalendarFilterType" }, - { false, FT_BYTE, "Flags" }, - { false, FT_INT, "HolidayNameID" }, - { false, FT_INT, "HolidayDescriptionID" }, { true, FT_INT, "TextureFileDataID1" }, { true, FT_INT, "TextureFileDataID2" }, { true, FT_INT, "TextureFileDataID3" }, @@ -2030,13 +2125,13 @@ struct ItemLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "IconFileDataID" }, { false, FT_BYTE, "ClassID" }, { false, FT_BYTE, "SubclassID" }, - { true, FT_BYTE, "SoundOverrideSubclassID" }, { false, FT_BYTE, "Material" }, - { false, FT_BYTE, "InventoryType" }, + { true, FT_BYTE, "InventoryType" }, { false, FT_BYTE, "SheatheType" }, + { true, FT_BYTE, "SoundOverrideSubclassID" }, + { true, FT_INT, "IconFileDataID" }, { false, FT_BYTE, "ItemGroupSoundsID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemMeta::Instance(), HOTFIX_SEL_ITEM); @@ -2051,10 +2146,10 @@ struct ItemAppearanceLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_BYTE, "DisplayType" }, { true, FT_INT, "ItemDisplayInfoID" }, { true, FT_INT, "DefaultIconFileDataID" }, { true, FT_INT, "UiOrder" }, - { false, FT_BYTE, "DisplayType" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemAppearanceMeta::Instance(), HOTFIX_SEL_ITEM_APPEARANCE); return &loadInfo; @@ -2075,7 +2170,6 @@ struct ItemArmorQualityLoadInfo { false, FT_FLOAT, "Qualitymod5" }, { false, FT_FLOAT, "Qualitymod6" }, { false, FT_FLOAT, "Qualitymod7" }, - { true, FT_SHORT, "ItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemArmorQualityMeta::Instance(), HOTFIX_SEL_ITEM_ARMOR_QUALITY); return &loadInfo; @@ -2110,11 +2204,11 @@ struct ItemArmorTotalLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { true, FT_SHORT, "ItemLevel" }, { false, FT_FLOAT, "Cloth" }, { false, FT_FLOAT, "Leather" }, { false, FT_FLOAT, "Mail" }, { false, FT_FLOAT, "Plate" }, - { true, FT_SHORT, "ItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemArmorTotalMeta::Instance(), HOTFIX_SEL_ITEM_ARMOR_TOTAL); return &loadInfo; @@ -2175,10 +2269,10 @@ struct ItemBonusTreeNodeLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_BYTE, "ItemContext" }, { false, FT_SHORT, "ChildItemBonusTreeID" }, { false, FT_SHORT, "ChildItemBonusListID" }, { false, FT_SHORT, "ChildItemLevelSelectorID" }, - { false, FT_BYTE, "ItemContext" }, { false, FT_SHORT, "ParentItemBonusTreeID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemBonusTreeNodeMeta::Instance(), HOTFIX_SEL_ITEM_BONUS_TREE_NODE); @@ -2210,8 +2304,8 @@ struct ItemClassLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "ClassName" }, - { false, FT_FLOAT, "PriceModifier" }, { true, FT_BYTE, "ClassID" }, + { false, FT_FLOAT, "PriceModifier" }, { false, FT_BYTE, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemClassMeta::Instance(), HOTFIX_SEL_ITEM_CLASS); @@ -2240,6 +2334,7 @@ struct ItemDamageAmmoLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_SHORT, "ItemLevel" }, { false, FT_FLOAT, "Quality1" }, { false, FT_FLOAT, "Quality2" }, { false, FT_FLOAT, "Quality3" }, @@ -2247,7 +2342,6 @@ struct ItemDamageAmmoLoadInfo { false, FT_FLOAT, "Quality5" }, { false, FT_FLOAT, "Quality6" }, { false, FT_FLOAT, "Quality7" }, - { false, FT_SHORT, "ItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemDamageAmmoMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_AMMO); return &loadInfo; @@ -2261,6 +2355,7 @@ struct ItemDamageOneHandLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_SHORT, "ItemLevel" }, { false, FT_FLOAT, "Quality1" }, { false, FT_FLOAT, "Quality2" }, { false, FT_FLOAT, "Quality3" }, @@ -2268,7 +2363,6 @@ struct ItemDamageOneHandLoadInfo { false, FT_FLOAT, "Quality5" }, { false, FT_FLOAT, "Quality6" }, { false, FT_FLOAT, "Quality7" }, - { false, FT_SHORT, "ItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemDamageOneHandMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_ONE_HAND); return &loadInfo; @@ -2282,6 +2376,7 @@ struct ItemDamageOneHandCasterLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_SHORT, "ItemLevel" }, { false, FT_FLOAT, "Quality1" }, { false, FT_FLOAT, "Quality2" }, { false, FT_FLOAT, "Quality3" }, @@ -2289,7 +2384,6 @@ struct ItemDamageOneHandCasterLoadInfo { false, FT_FLOAT, "Quality5" }, { false, FT_FLOAT, "Quality6" }, { false, FT_FLOAT, "Quality7" }, - { false, FT_SHORT, "ItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemDamageOneHandCasterMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_ONE_HAND_CASTER); return &loadInfo; @@ -2303,6 +2397,7 @@ struct ItemDamageTwoHandLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_SHORT, "ItemLevel" }, { false, FT_FLOAT, "Quality1" }, { false, FT_FLOAT, "Quality2" }, { false, FT_FLOAT, "Quality3" }, @@ -2310,7 +2405,6 @@ struct ItemDamageTwoHandLoadInfo { false, FT_FLOAT, "Quality5" }, { false, FT_FLOAT, "Quality6" }, { false, FT_FLOAT, "Quality7" }, - { false, FT_SHORT, "ItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemDamageTwoHandMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_TWO_HAND); return &loadInfo; @@ -2324,6 +2418,7 @@ struct ItemDamageTwoHandCasterLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_SHORT, "ItemLevel" }, { false, FT_FLOAT, "Quality1" }, { false, FT_FLOAT, "Quality2" }, { false, FT_FLOAT, "Quality3" }, @@ -2331,7 +2426,6 @@ struct ItemDamageTwoHandCasterLoadInfo { false, FT_FLOAT, "Quality5" }, { false, FT_FLOAT, "Quality6" }, { false, FT_FLOAT, "Quality7" }, - { false, FT_SHORT, "ItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemDamageTwoHandCasterMeta::Instance(), HOTFIX_SEL_ITEM_DAMAGE_TWO_HAND_CASTER); return &loadInfo; @@ -2345,11 +2439,11 @@ struct ItemDisenchantLootLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { true, FT_BYTE, "Subclass" }, + { false, FT_BYTE, "Quality" }, { false, FT_SHORT, "MinLevel" }, { false, FT_SHORT, "MaxLevel" }, { false, FT_SHORT, "SkillRequired" }, - { true, FT_BYTE, "Subclass" }, - { false, FT_BYTE, "Quality" }, { true, FT_BYTE, "ExpansionID" }, { false, FT_BYTE, "Class" }, }; @@ -2365,14 +2459,14 @@ struct ItemEffectLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "SpellID" }, + { false, FT_BYTE, "LegacySlotIndex" }, + { true, FT_BYTE, "TriggerType" }, + { true, FT_SHORT, "Charges" }, { true, FT_INT, "CoolDownMSec" }, { true, FT_INT, "CategoryCoolDownMSec" }, - { true, FT_SHORT, "Charges" }, { false, FT_SHORT, "SpellCategoryID" }, + { true, FT_INT, "SpellID" }, { false, FT_SHORT, "ChrSpecializationID" }, - { false, FT_BYTE, "LegacySlotIndex" }, - { true, FT_BYTE, "TriggerType" }, { true, FT_INT, "ParentItemID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemEffectMeta::Instance(), HOTFIX_SEL_ITEM_EFFECT); @@ -2387,32 +2481,32 @@ struct ItemExtendedCostLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_SHORT, "RequiredArenaRating" }, + { true, FT_BYTE, "ArenaBracket" }, + { false, FT_BYTE, "Flags" }, + { false, FT_BYTE, "MinFactionID" }, + { false, FT_BYTE, "MinReputation" }, + { false, FT_BYTE, "RequiredAchievement" }, { true, FT_INT, "ItemID1" }, { true, FT_INT, "ItemID2" }, { true, FT_INT, "ItemID3" }, { true, FT_INT, "ItemID4" }, { true, FT_INT, "ItemID5" }, - { false, FT_INT, "CurrencyCount1" }, - { false, FT_INT, "CurrencyCount2" }, - { false, FT_INT, "CurrencyCount3" }, - { false, FT_INT, "CurrencyCount4" }, - { false, FT_INT, "CurrencyCount5" }, { false, FT_SHORT, "ItemCount1" }, { false, FT_SHORT, "ItemCount2" }, { false, FT_SHORT, "ItemCount3" }, { false, FT_SHORT, "ItemCount4" }, { false, FT_SHORT, "ItemCount5" }, - { false, FT_SHORT, "RequiredArenaRating" }, { false, FT_SHORT, "CurrencyID1" }, { false, FT_SHORT, "CurrencyID2" }, { false, FT_SHORT, "CurrencyID3" }, { false, FT_SHORT, "CurrencyID4" }, { false, FT_SHORT, "CurrencyID5" }, - { false, FT_BYTE, "ArenaBracket" }, - { false, FT_BYTE, "MinFactionID" }, - { false, FT_BYTE, "MinReputation" }, - { false, FT_BYTE, "Flags" }, - { false, FT_BYTE, "RequiredAchievement" }, + { false, FT_INT, "CurrencyCount1" }, + { false, FT_INT, "CurrencyCount2" }, + { false, FT_INT, "CurrencyCount3" }, + { false, FT_INT, "CurrencyCount4" }, + { false, FT_INT, "CurrencyCount5" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemExtendedCostMeta::Instance(), HOTFIX_SEL_ITEM_EXTENDED_COST); return &loadInfo; @@ -2503,8 +2597,8 @@ struct ItemModifiedAppearanceLoadInfo { static DB2FieldMeta const fields[] = { - { true, FT_INT, "ItemID" }, { false, FT_INT, "ID" }, + { true, FT_INT, "ItemID" }, { false, FT_BYTE, "ItemAppearanceModifierID" }, { false, FT_SHORT, "ItemAppearanceID" }, { false, FT_BYTE, "OrderIndex" }, @@ -2522,9 +2616,9 @@ struct ItemPriceBaseLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_SHORT, "ItemLevel" }, { false, FT_FLOAT, "Armor" }, { false, FT_FLOAT, "Weapon" }, - { false, FT_SHORT, "ItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemPriceBaseMeta::Instance(), HOTFIX_SEL_ITEM_PRICE_BASE); return &loadInfo; @@ -2583,19 +2677,20 @@ struct ItemSearchNameLoadInfo { true, FT_LONG, "AllowableRace" }, { false, FT_STRING, "Display" }, { false, FT_INT, "ID" }, - { true, FT_INT, "Flags1" }, - { true, FT_INT, "Flags2" }, - { true, FT_INT, "Flags3" }, - { false, FT_SHORT, "ItemLevel" }, { false, FT_BYTE, "OverallQualityID" }, { false, FT_BYTE, "ExpansionID" }, - { true, FT_BYTE, "RequiredLevel" }, { false, FT_SHORT, "MinFactionID" }, { false, FT_BYTE, "MinReputation" }, { true, FT_INT, "AllowableClass" }, + { true, FT_BYTE, "RequiredLevel" }, { false, FT_SHORT, "RequiredSkill" }, { false, FT_SHORT, "RequiredSkillRank" }, { false, FT_INT, "RequiredAbility" }, + { false, FT_SHORT, "ItemLevel" }, + { true, FT_INT, "Flags1" }, + { true, FT_INT, "Flags2" }, + { true, FT_INT, "Flags3" }, + { true, FT_INT, "Flags4" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemSearchNameMeta::Instance(), HOTFIX_SEL_ITEM_SEARCH_NAME); return &loadInfo; @@ -2610,6 +2705,9 @@ struct ItemSetLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, + { false, FT_INT, "SetFlags" }, + { false, FT_INT, "RequiredSkill" }, + { false, FT_SHORT, "RequiredSkillRank" }, { false, FT_INT, "ItemID1" }, { false, FT_INT, "ItemID2" }, { false, FT_INT, "ItemID3" }, @@ -2627,9 +2725,6 @@ struct ItemSetLoadInfo { false, FT_INT, "ItemID15" }, { false, FT_INT, "ItemID16" }, { false, FT_INT, "ItemID17" }, - { false, FT_SHORT, "RequiredSkillRank" }, - { false, FT_INT, "RequiredSkill" }, - { false, FT_INT, "SetFlags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemSetMeta::Instance(), HOTFIX_SEL_ITEM_SET); return &loadInfo; @@ -2643,8 +2738,8 @@ struct ItemSetSpellLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "SpellID" }, { false, FT_SHORT, "ChrSpecID" }, + { false, FT_INT, "SpellID" }, { false, FT_BYTE, "Threshold" }, { false, FT_SHORT, "ItemSetID" }, }; @@ -2661,33 +2756,16 @@ struct ItemSparseLoadInfo { { false, FT_INT, "ID" }, { true, FT_LONG, "AllowableRace" }, - { false, FT_STRING, "Display" }, - { false, FT_STRING, "Display1" }, - { false, FT_STRING, "Display2" }, - { false, FT_STRING, "Display3" }, { false, FT_STRING, "Description" }, - { true, FT_INT, "Flags1" }, - { true, FT_INT, "Flags2" }, - { true, FT_INT, "Flags3" }, - { true, FT_INT, "Flags4" }, - { false, FT_FLOAT, "PriceRandomValue" }, - { false, FT_FLOAT, "PriceVariance" }, - { false, FT_INT, "VendorStackCount" }, - { false, FT_INT, "BuyPrice" }, - { false, FT_INT, "SellPrice" }, - { false, FT_INT, "RequiredAbility" }, - { true, FT_INT, "MaxCount" }, - { true, FT_INT, "Stackable" }, - { true, FT_INT, "StatPercentEditor1" }, - { true, FT_INT, "StatPercentEditor2" }, - { true, FT_INT, "StatPercentEditor3" }, - { true, FT_INT, "StatPercentEditor4" }, - { true, FT_INT, "StatPercentEditor5" }, - { true, FT_INT, "StatPercentEditor6" }, - { true, FT_INT, "StatPercentEditor7" }, - { true, FT_INT, "StatPercentEditor8" }, - { true, FT_INT, "StatPercentEditor9" }, - { true, FT_INT, "StatPercentEditor10" }, + { false, FT_STRING, "Display3" }, + { false, FT_STRING, "Display2" }, + { false, FT_STRING, "Display1" }, + { false, FT_STRING, "Display" }, + { false, FT_FLOAT, "DmgVariance" }, + { false, FT_INT, "DurationInInventory" }, + { false, FT_FLOAT, "QualityModifier" }, + { false, FT_INT, "BagFamily" }, + { false, FT_FLOAT, "ItemRange" }, { false, FT_FLOAT, "StatPercentageOfSocket1" }, { false, FT_FLOAT, "StatPercentageOfSocket2" }, { false, FT_FLOAT, "StatPercentageOfSocket3" }, @@ -2698,50 +2776,64 @@ struct ItemSparseLoadInfo { false, FT_FLOAT, "StatPercentageOfSocket8" }, { false, FT_FLOAT, "StatPercentageOfSocket9" }, { false, FT_FLOAT, "StatPercentageOfSocket10" }, - { false, FT_FLOAT, "ItemRange" }, - { false, FT_INT, "BagFamily" }, - { false, FT_FLOAT, "QualityModifier" }, - { false, FT_INT, "DurationInInventory" }, - { false, FT_FLOAT, "DmgVariance" }, - { true, FT_SHORT, "AllowableClass" }, - { false, FT_SHORT, "ItemLevel" }, - { false, FT_SHORT, "RequiredSkill" }, - { false, FT_SHORT, "RequiredSkillRank" }, - { false, FT_SHORT, "MinFactionID" }, - { true, FT_SHORT, "ItemStatValue1" }, - { true, FT_SHORT, "ItemStatValue2" }, - { true, FT_SHORT, "ItemStatValue3" }, - { true, FT_SHORT, "ItemStatValue4" }, - { true, FT_SHORT, "ItemStatValue5" }, - { true, FT_SHORT, "ItemStatValue6" }, - { true, FT_SHORT, "ItemStatValue7" }, - { true, FT_SHORT, "ItemStatValue8" }, - { true, FT_SHORT, "ItemStatValue9" }, - { true, FT_SHORT, "ItemStatValue10" }, - { false, FT_SHORT, "ScalingStatDistributionID" }, - { false, FT_SHORT, "ItemDelay" }, - { false, FT_SHORT, "PageID" }, - { false, FT_SHORT, "StartQuestID" }, - { false, FT_SHORT, "LockID" }, - { false, FT_SHORT, "RandomSelect" }, - { false, FT_SHORT, "ItemRandomSuffixGroupID" }, - { false, FT_SHORT, "ItemSet" }, - { false, FT_SHORT, "ZoneBound" }, - { false, FT_SHORT, "InstanceBound" }, - { false, FT_SHORT, "TotemCategoryID" }, - { false, FT_SHORT, "SocketMatchEnchantmentId" }, - { false, FT_SHORT, "GemProperties" }, - { false, FT_SHORT, "LimitCategory" }, - { false, FT_SHORT, "RequiredHoliday" }, - { false, FT_SHORT, "RequiredTransmogHoliday" }, + { true, FT_INT, "StatPercentEditor1" }, + { true, FT_INT, "StatPercentEditor2" }, + { true, FT_INT, "StatPercentEditor3" }, + { true, FT_INT, "StatPercentEditor4" }, + { true, FT_INT, "StatPercentEditor5" }, + { true, FT_INT, "StatPercentEditor6" }, + { true, FT_INT, "StatPercentEditor7" }, + { true, FT_INT, "StatPercentEditor8" }, + { true, FT_INT, "StatPercentEditor9" }, + { true, FT_INT, "StatPercentEditor10" }, + { true, FT_INT, "Stackable" }, + { true, FT_INT, "MaxCount" }, + { false, FT_INT, "RequiredAbility" }, + { false, FT_INT, "SellPrice" }, + { false, FT_INT, "BuyPrice" }, + { false, FT_INT, "VendorStackCount" }, + { false, FT_FLOAT, "PriceVariance" }, + { false, FT_FLOAT, "PriceRandomValue" }, + { true, FT_INT, "Flags1" }, + { true, FT_INT, "Flags2" }, + { true, FT_INT, "Flags3" }, + { true, FT_INT, "Flags4" }, + { true, FT_INT, "FactionRelated" }, { false, FT_SHORT, "ItemNameDescriptionID" }, - { false, FT_BYTE, "OverallQualityID" }, - { false, FT_BYTE, "InventoryType" }, - { true, FT_BYTE, "RequiredLevel" }, - { false, FT_BYTE, "RequiredPVPRank" }, - { false, FT_BYTE, "RequiredPVPMedal" }, - { false, FT_BYTE, "MinReputation" }, - { false, FT_BYTE, "ContainerSlots" }, + { false, FT_SHORT, "RequiredTransmogHoliday" }, + { false, FT_SHORT, "RequiredHoliday" }, + { false, FT_SHORT, "LimitCategory" }, + { false, FT_SHORT, "GemProperties" }, + { false, FT_SHORT, "SocketMatchEnchantmentId" }, + { false, FT_SHORT, "TotemCategoryID" }, + { false, FT_SHORT, "InstanceBound" }, + { false, FT_SHORT, "ZoneBound" }, + { false, FT_SHORT, "ItemSet" }, + { false, FT_SHORT, "ItemRandomSuffixGroupID" }, + { false, FT_SHORT, "RandomSelect" }, + { false, FT_SHORT, "LockID" }, + { false, FT_SHORT, "StartQuestID" }, + { false, FT_SHORT, "PageID" }, + { false, FT_SHORT, "ItemDelay" }, + { false, FT_SHORT, "ScalingStatDistributionID" }, + { false, FT_SHORT, "MinFactionID" }, + { false, FT_SHORT, "RequiredSkillRank" }, + { false, FT_SHORT, "RequiredSkill" }, + { false, FT_SHORT, "ItemLevel" }, + { true, FT_SHORT, "AllowableClass" }, + { false, FT_BYTE, "ExpansionID" }, + { false, FT_BYTE, "ArtifactID" }, + { false, FT_BYTE, "SpellWeight" }, + { false, FT_BYTE, "SpellWeightCategory" }, + { false, FT_BYTE, "SocketType1" }, + { false, FT_BYTE, "SocketType2" }, + { false, FT_BYTE, "SocketType3" }, + { false, FT_BYTE, "SheatheType" }, + { false, FT_BYTE, "Material" }, + { false, FT_BYTE, "PageMaterialID" }, + { false, FT_BYTE, "LanguageID" }, + { false, FT_BYTE, "Bonding" }, + { false, FT_BYTE, "DamageDamageType" }, { true, FT_BYTE, "StatModifierBonusStat1" }, { true, FT_BYTE, "StatModifierBonusStat2" }, { true, FT_BYTE, "StatModifierBonusStat3" }, @@ -2752,19 +2844,13 @@ struct ItemSparseLoadInfo { true, FT_BYTE, "StatModifierBonusStat8" }, { true, FT_BYTE, "StatModifierBonusStat9" }, { true, FT_BYTE, "StatModifierBonusStat10" }, - { false, FT_BYTE, "DamageDamageType" }, - { false, FT_BYTE, "Bonding" }, - { false, FT_BYTE, "LanguageID" }, - { false, FT_BYTE, "PageMaterialID" }, - { false, FT_BYTE, "Material" }, - { false, FT_BYTE, "SheatheType" }, - { false, FT_BYTE, "SocketType1" }, - { false, FT_BYTE, "SocketType2" }, - { false, FT_BYTE, "SocketType3" }, - { false, FT_BYTE, "SpellWeightCategory" }, - { false, FT_BYTE, "SpellWeight" }, - { false, FT_BYTE, "ArtifactID" }, - { false, FT_BYTE, "ExpansionID" }, + { false, FT_BYTE, "ContainerSlots" }, + { false, FT_BYTE, "MinReputation" }, + { false, FT_BYTE, "RequiredPVPMedal" }, + { false, FT_BYTE, "RequiredPVPRank" }, + { true, FT_BYTE, "RequiredLevel" }, + { false, FT_BYTE, "InventoryType" }, + { false, FT_BYTE, "OverallQualityID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemSparseMeta::Instance(), HOTFIX_SEL_ITEM_SPARSE); return &loadInfo; @@ -2778,12 +2864,12 @@ struct ItemSpecLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_SHORT, "SpecializationID" }, { false, FT_BYTE, "MinLevel" }, { false, FT_BYTE, "MaxLevel" }, { false, FT_BYTE, "ItemType" }, { false, FT_BYTE, "PrimaryStat" }, { false, FT_BYTE, "SecondaryStat" }, + { false, FT_SHORT, "SpecializationID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemSpecMeta::Instance(), HOTFIX_SEL_ITEM_SPEC); return &loadInfo; @@ -2812,11 +2898,11 @@ struct ItemUpgradeLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "CurrencyAmount" }, - { false, FT_SHORT, "PrerequisiteID" }, - { false, FT_SHORT, "CurrencyType" }, { false, FT_BYTE, "ItemUpgradePathID" }, { false, FT_BYTE, "ItemLevelIncrement" }, + { false, FT_SHORT, "PrerequisiteID" }, + { false, FT_SHORT, "CurrencyType" }, + { false, FT_INT, "CurrencyAmount" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ItemUpgradeMeta::Instance(), HOTFIX_SEL_ITEM_UPGRADE); return &loadInfo; @@ -2892,37 +2978,38 @@ struct LfgDungeonsLoadInfo { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, { false, FT_STRING, "Description" }, - { true, FT_INT, "Flags" }, - { false, FT_FLOAT, "MinGear" }, - { false, FT_SHORT, "MaxLevel" }, - { false, FT_SHORT, "TargetLevelMax" }, - { true, FT_SHORT, "MapID" }, - { false, FT_SHORT, "RandomID" }, - { false, FT_SHORT, "ScenarioID" }, - { false, FT_SHORT, "FinalEncounterID" }, - { false, FT_SHORT, "BonusReputationAmount" }, - { false, FT_SHORT, "MentorItemLevel" }, - { false, FT_SHORT, "RequiredPlayerConditionId" }, { false, FT_BYTE, "MinLevel" }, - { false, FT_BYTE, "TargetLevel" }, - { false, FT_BYTE, "TargetLevelMin" }, - { false, FT_BYTE, "DifficultyID" }, + { false, FT_SHORT, "MaxLevel" }, { false, FT_BYTE, "TypeID" }, + { false, FT_BYTE, "Subtype" }, { true, FT_BYTE, "Faction" }, + { true, FT_INT, "IconTextureFileID" }, + { true, FT_INT, "RewardsBgTextureFileID" }, + { true, FT_INT, "PopupBgTextureFileID" }, { false, FT_BYTE, "ExpansionLevel" }, - { false, FT_BYTE, "OrderIndex" }, + { true, FT_SHORT, "MapID" }, + { false, FT_BYTE, "DifficultyID" }, + { false, FT_FLOAT, "MinGear" }, { false, FT_BYTE, "GroupID" }, + { false, FT_BYTE, "OrderIndex" }, + { false, FT_INT, "RequiredPlayerConditionId" }, + { false, FT_BYTE, "TargetLevel" }, + { false, FT_BYTE, "TargetLevelMin" }, + { false, FT_SHORT, "TargetLevelMax" }, + { false, FT_SHORT, "RandomID" }, + { false, FT_SHORT, "ScenarioID" }, + { false, FT_SHORT, "FinalEncounterID" }, { false, FT_BYTE, "CountTank" }, { false, FT_BYTE, "CountHealer" }, { false, FT_BYTE, "CountDamage" }, { false, FT_BYTE, "MinCountTank" }, { false, FT_BYTE, "MinCountHealer" }, { false, FT_BYTE, "MinCountDamage" }, - { false, FT_BYTE, "Subtype" }, + { false, FT_SHORT, "BonusReputationAmount" }, + { false, FT_SHORT, "MentorItemLevel" }, { false, FT_BYTE, "MentorCharLevel" }, - { true, FT_INT, "IconTextureFileID" }, - { true, FT_INT, "RewardsBgTextureFileID" }, - { true, FT_INT, "PopupBgTextureFileID" }, + { true, FT_INT, "Flags1" }, + { true, FT_INT, "Flags2" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, LFGDungeonsMeta::Instance(), HOTFIX_SEL_LFG_DUNGEONS); return &loadInfo; @@ -2970,12 +3057,26 @@ struct LiquidTypeLoadInfo { false, FT_STRING_NOT_LOCALIZED, "Texture4" }, { false, FT_STRING_NOT_LOCALIZED, "Texture5" }, { false, FT_STRING_NOT_LOCALIZED, "Texture6" }, + { false, FT_SHORT, "Flags" }, + { false, FT_BYTE, "SoundBank" }, + { false, FT_INT, "SoundID" }, { false, FT_INT, "SpellID" }, { false, FT_FLOAT, "MaxDarkenDepth" }, { false, FT_FLOAT, "FogDarkenIntensity" }, { false, FT_FLOAT, "AmbDarkenIntensity" }, { false, FT_FLOAT, "DirDarkenIntensity" }, + { false, FT_SHORT, "LightID" }, { false, FT_FLOAT, "ParticleScale" }, + { false, FT_BYTE, "ParticleMovement" }, + { false, FT_BYTE, "ParticleTexSlots" }, + { false, FT_BYTE, "MaterialID" }, + { true, FT_INT, "MinimapStaticCol" }, + { false, FT_BYTE, "FrameCountTexture1" }, + { false, FT_BYTE, "FrameCountTexture2" }, + { false, FT_BYTE, "FrameCountTexture3" }, + { false, FT_BYTE, "FrameCountTexture4" }, + { false, FT_BYTE, "FrameCountTexture5" }, + { false, FT_BYTE, "FrameCountTexture6" }, { true, FT_INT, "Color1" }, { true, FT_INT, "Color2" }, { false, FT_FLOAT, "Float1" }, @@ -3000,19 +3101,10 @@ struct LiquidTypeLoadInfo { false, FT_INT, "Int2" }, { false, FT_INT, "Int3" }, { false, FT_INT, "Int4" }, - { false, FT_SHORT, "Flags" }, - { false, FT_SHORT, "LightID" }, - { false, FT_BYTE, "SoundBank" }, - { false, FT_BYTE, "ParticleMovement" }, - { false, FT_BYTE, "ParticleTexSlots" }, - { false, FT_BYTE, "MaterialID" }, - { false, FT_BYTE, "FrameCountTexture1" }, - { false, FT_BYTE, "FrameCountTexture2" }, - { false, FT_BYTE, "FrameCountTexture3" }, - { false, FT_BYTE, "FrameCountTexture4" }, - { false, FT_BYTE, "FrameCountTexture5" }, - { false, FT_BYTE, "FrameCountTexture6" }, - { false, FT_INT, "SoundID" }, + { false, FT_FLOAT, "Coefficient1" }, + { false, FT_FLOAT, "Coefficient2" }, + { false, FT_FLOAT, "Coefficient3" }, + { false, FT_FLOAT, "Coefficient4" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, LiquidTypeMeta::Instance(), HOTFIX_SEL_LIQUID_TYPE); return &loadInfo; @@ -3091,23 +3183,24 @@ struct MapLoadInfo { false, FT_STRING, "MapDescription1" }, { false, FT_STRING, "PvpShortDescription" }, { false, FT_STRING, "PvpLongDescription" }, - { true, FT_INT, "Flags1" }, - { true, FT_INT, "Flags2" }, - { false, FT_FLOAT, "MinimapIconScale" }, { false, FT_FLOAT, "CorpseX" }, { false, FT_FLOAT, "CorpseY" }, + { false, FT_BYTE, "MapType" }, + { true, FT_BYTE, "InstanceType" }, + { false, FT_BYTE, "ExpansionID" }, { false, FT_SHORT, "AreaTableID" }, { true, FT_SHORT, "LoadingScreenID" }, - { true, FT_SHORT, "CorpseMapID" }, { true, FT_SHORT, "TimeOfDayOverride" }, { true, FT_SHORT, "ParentMapID" }, { true, FT_SHORT, "CosmeticParentMapID" }, - { true, FT_SHORT, "WindSettingsID" }, - { false, FT_BYTE, "InstanceType" }, - { false, FT_BYTE, "MapType" }, - { false, FT_BYTE, "ExpansionID" }, - { false, FT_BYTE, "MaxPlayers" }, { false, FT_BYTE, "TimeOffset" }, + { false, FT_FLOAT, "MinimapIconScale" }, + { true, FT_SHORT, "CorpseMapID" }, + { false, FT_BYTE, "MaxPlayers" }, + { true, FT_SHORT, "WindSettingsID" }, + { true, FT_INT, "ZmpFileDataID" }, + { true, FT_INT, "Flags1" }, + { true, FT_INT, "Flags2" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, MapMeta::Instance(), HOTFIX_SEL_MAP); return &loadInfo; @@ -3122,13 +3215,14 @@ struct MapDifficultyLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Message" }, + { false, FT_INT, "ItemContextPickerID" }, + { true, FT_INT, "ContentTuningID" }, { false, FT_BYTE, "DifficultyID" }, + { false, FT_BYTE, "LockID" }, { false, FT_BYTE, "ResetInterval" }, { false, FT_BYTE, "MaxPlayers" }, - { false, FT_BYTE, "LockID" }, - { false, FT_BYTE, "Flags" }, { false, FT_BYTE, "ItemContext" }, - { false, FT_INT, "ItemContextPickerID" }, + { false, FT_BYTE, "Flags" }, { false, FT_SHORT, "MapID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, MapDifficultyMeta::Instance(), HOTFIX_SEL_MAP_DIFFICULTY); @@ -3143,13 +3237,13 @@ struct ModifierTreeLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "Asset" }, - { true, FT_INT, "SecondaryAsset" }, { false, FT_INT, "Parent" }, - { false, FT_BYTE, "Type" }, - { true, FT_BYTE, "TertiaryAsset" }, { true, FT_BYTE, "Operator" }, { true, FT_BYTE, "Amount" }, + { false, FT_BYTE, "Type" }, + { true, FT_INT, "Asset" }, + { true, FT_INT, "SecondaryAsset" }, + { true, FT_BYTE, "TertiaryAsset" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ModifierTreeMeta::Instance(), HOTFIX_SEL_MODIFIER_TREE); return &loadInfo; @@ -3163,15 +3257,15 @@ struct MountLoadInfo static DB2FieldMeta const fields[] = { { false, FT_STRING, "Name" }, - { false, FT_STRING, "Description" }, { false, FT_STRING, "SourceText" }, - { true, FT_INT, "SourceSpellID" }, - { false, FT_FLOAT, "MountFlyRideHeight" }, + { false, FT_STRING, "Description" }, + { false, FT_INT, "ID" }, { false, FT_SHORT, "MountTypeID" }, { false, FT_SHORT, "Flags" }, { true, FT_BYTE, "SourceTypeEnum" }, - { false, FT_INT, "ID" }, + { true, FT_INT, "SourceSpellID" }, { false, FT_INT, "PlayerConditionID" }, + { false, FT_FLOAT, "MountFlyRideHeight" }, { true, FT_INT, "UiModelSceneID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, MountMeta::Instance(), HOTFIX_SEL_MOUNT); @@ -3185,14 +3279,14 @@ struct MountCapabilityLoadInfo { static DB2FieldMeta const fields[] = { - { true, FT_INT, "ReqSpellKnownID" }, - { true, FT_INT, "ModSpellAuraID" }, + { false, FT_INT, "ID" }, + { false, FT_BYTE, "Flags" }, { false, FT_SHORT, "ReqRidingSkill" }, { false, FT_SHORT, "ReqAreaID" }, - { true, FT_SHORT, "ReqMapID" }, - { false, FT_BYTE, "Flags" }, - { false, FT_INT, "ID" }, { false, FT_INT, "ReqSpellAuraID" }, + { true, FT_INT, "ReqSpellKnownID" }, + { true, FT_INT, "ModSpellAuraID" }, + { true, FT_SHORT, "ReqMapID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, MountCapabilityMeta::Instance(), HOTFIX_SEL_MOUNT_CAPABILITY); return &loadInfo; @@ -3238,10 +3332,10 @@ struct MovieLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "AudioFileDataID" }, - { false, FT_INT, "SubtitleFileDataID" }, { false, FT_BYTE, "Volume" }, { false, FT_BYTE, "KeyID" }, + { false, FT_INT, "AudioFileDataID" }, + { false, FT_INT, "SubtitleFileDataID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, MovieMeta::Instance(), HOTFIX_SEL_MOVIE); return &loadInfo; @@ -3308,6 +3402,22 @@ struct NamesReservedLocaleLoadInfo } }; +struct NumTalentsAtLevelLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_INT, "ID" }, + { true, FT_INT, "NumTalents" }, + { true, FT_INT, "NumTalentsDeathKnight" }, + { true, FT_INT, "NumTalentsDemonHunter" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, NumTalentsAtLevelMeta::Instance(), HOTFIX_SEL_NUM_TALENTS_AT_LEVEL); + return &loadInfo; + } +}; + struct OverrideSpellDataLoadInfo { static DB2LoadInfo const* Instance() @@ -3371,12 +3481,9 @@ struct PlayerConditionLoadInfo { true, FT_LONG, "RaceMask" }, { false, FT_STRING, "FailureDescription" }, { false, FT_INT, "ID" }, - { false, FT_BYTE, "Flags" }, { false, FT_SHORT, "MinLevel" }, { false, FT_SHORT, "MaxLevel" }, { true, FT_INT, "ClassMask" }, - { true, FT_BYTE, "Gender" }, - { true, FT_BYTE, "NativeGender" }, { false, FT_INT, "SkillLogic" }, { false, FT_BYTE, "LanguageID" }, { false, FT_BYTE, "MinLanguage" }, @@ -3385,8 +3492,6 @@ struct PlayerConditionLoadInfo { false, FT_BYTE, "MaxReputation" }, { false, FT_INT, "ReputationLogic" }, { true, FT_BYTE, "CurrentPvpFaction" }, - { false, FT_BYTE, "MinPVPRank" }, - { false, FT_BYTE, "MaxPVPRank" }, { false, FT_BYTE, "PvpMedal" }, { false, FT_INT, "PrevQuestLogic" }, { false, FT_INT, "CurrQuestLogic" }, @@ -3400,31 +3505,36 @@ struct PlayerConditionLoadInfo { false, FT_BYTE, "PartyStatus" }, { false, FT_BYTE, "LifetimeMaxPVPRank" }, { false, FT_INT, "AchievementLogic" }, - { false, FT_INT, "LfgLogic" }, + { true, FT_BYTE, "Gender" }, + { true, FT_BYTE, "NativeGender" }, { false, FT_INT, "AreaLogic" }, + { false, FT_INT, "LfgLogic" }, { false, FT_INT, "CurrencyLogic" }, { false, FT_SHORT, "QuestKillID" }, { false, FT_INT, "QuestKillLogic" }, { true, FT_BYTE, "MinExpansionLevel" }, { true, FT_BYTE, "MaxExpansionLevel" }, - { true, FT_BYTE, "MinExpansionTier" }, - { true, FT_BYTE, "MaxExpansionTier" }, - { false, FT_BYTE, "MinGuildLevel" }, - { false, FT_BYTE, "MaxGuildLevel" }, - { false, FT_BYTE, "PhaseUseFlags" }, - { false, FT_SHORT, "PhaseID" }, - { false, FT_INT, "PhaseGroupID" }, { true, FT_INT, "MinAvgItemLevel" }, { true, FT_INT, "MaxAvgItemLevel" }, { false, FT_SHORT, "MinAvgEquippedItemLevel" }, { false, FT_SHORT, "MaxAvgEquippedItemLevel" }, + { false, FT_BYTE, "PhaseUseFlags" }, + { false, FT_SHORT, "PhaseID" }, + { false, FT_INT, "PhaseGroupID" }, + { false, FT_BYTE, "Flags" }, { true, FT_BYTE, "ChrSpecializationIndex" }, { true, FT_BYTE, "ChrSpecializationRole" }, + { false, FT_INT, "ModifierTreeID" }, { true, FT_BYTE, "PowerType" }, { false, FT_BYTE, "PowerTypeComp" }, { false, FT_BYTE, "PowerTypeValue" }, - { false, FT_INT, "ModifierTreeID" }, { true, FT_INT, "WeaponSubclassMask" }, + { false, FT_BYTE, "MaxGuildLevel" }, + { false, FT_BYTE, "MinGuildLevel" }, + { true, FT_BYTE, "MaxExpansionTier" }, + { true, FT_BYTE, "MinExpansionTier" }, + { false, FT_BYTE, "MinPVPRank" }, + { false, FT_BYTE, "MaxPVPRank" }, { false, FT_SHORT, "SkillID1" }, { false, FT_SHORT, "SkillID2" }, { false, FT_SHORT, "SkillID3" }, @@ -3483,6 +3593,10 @@ struct PlayerConditionLoadInfo { false, FT_SHORT, "Achievement2" }, { false, FT_SHORT, "Achievement3" }, { false, FT_SHORT, "Achievement4" }, + { false, FT_SHORT, "AreaID1" }, + { false, FT_SHORT, "AreaID2" }, + { false, FT_SHORT, "AreaID3" }, + { false, FT_SHORT, "AreaID4" }, { false, FT_BYTE, "LfgStatus1" }, { false, FT_BYTE, "LfgStatus2" }, { false, FT_BYTE, "LfgStatus3" }, @@ -3495,10 +3609,6 @@ struct PlayerConditionLoadInfo { false, FT_INT, "LfgValue2" }, { false, FT_INT, "LfgValue3" }, { false, FT_INT, "LfgValue4" }, - { false, FT_SHORT, "AreaID1" }, - { false, FT_SHORT, "AreaID2" }, - { false, FT_SHORT, "AreaID3" }, - { false, FT_SHORT, "AreaID4" }, { false, FT_INT, "CurrencyID1" }, { false, FT_INT, "CurrencyID2" }, { false, FT_INT, "CurrencyID3" }, @@ -3548,16 +3658,16 @@ struct PowerTypeLoadInfo { false, FT_INT, "ID" }, { false, FT_STRING_NOT_LOCALIZED, "NameGlobalStringTag" }, { false, FT_STRING_NOT_LOCALIZED, "CostGlobalStringTag" }, - { false, FT_FLOAT, "RegenPeace" }, - { false, FT_FLOAT, "RegenCombat" }, - { true, FT_SHORT, "MaxBasePower" }, - { true, FT_SHORT, "RegenInterruptTimeMS" }, - { true, FT_SHORT, "Flags" }, { true, FT_BYTE, "PowerTypeEnum" }, { true, FT_BYTE, "MinPower" }, + { true, FT_SHORT, "MaxBasePower" }, { true, FT_BYTE, "CenterPower" }, { true, FT_BYTE, "DefaultPower" }, { true, FT_BYTE, "DisplayModifier" }, + { true, FT_SHORT, "RegenInterruptTimeMS" }, + { false, FT_FLOAT, "RegenPeace" }, + { false, FT_FLOAT, "RegenCombat" }, + { true, FT_SHORT, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, PowerTypeMeta::Instance(), HOTFIX_SEL_POWER_TYPE); return &loadInfo; @@ -3572,9 +3682,10 @@ struct PrestigeLevelInfoLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, + { true, FT_INT, "PrestigeLevel" }, { true, FT_INT, "BadgeTextureFileDataID" }, - { false, FT_BYTE, "PrestigeLevel" }, { false, FT_BYTE, "Flags" }, + { true, FT_INT, "AwardedAchievementID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, PrestigeLevelInfoMeta::Instance(), HOTFIX_SEL_PRESTIGE_LEVEL_INFO); return &loadInfo; @@ -3613,57 +3724,54 @@ struct PvpItemLoadInfo } }; -struct PvpRewardLoadInfo +struct PvpTalentLoadInfo { static DB2LoadInfo const* Instance() { static DB2FieldMeta const fields[] = { + { false, FT_STRING, "Description" }, { false, FT_INT, "ID" }, - { true, FT_INT, "HonorLevel" }, - { true, FT_INT, "PrestigeLevel" }, - { true, FT_INT, "RewardPackID" }, + { true, FT_INT, "SpecID" }, + { true, FT_INT, "SpellID" }, + { true, FT_INT, "OverridesSpellID" }, + { true, FT_INT, "Flags" }, + { true, FT_INT, "ActionBarSpellID" }, + { true, FT_INT, "PvpTalentCategoryID" }, + { true, FT_INT, "LevelRequired" }, }; - static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, PvpRewardMeta::Instance(), HOTFIX_SEL_PVP_REWARD); + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, PvpTalentMeta::Instance(), HOTFIX_SEL_PVP_TALENT); return &loadInfo; } }; -struct PvpTalentLoadInfo +struct PvpTalentCategoryLoadInfo { static DB2LoadInfo const* Instance() { static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_STRING, "Description" }, - { true, FT_INT, "SpellID" }, - { true, FT_INT, "OverridesSpellID" }, - { true, FT_INT, "ActionBarSpellID" }, - { true, FT_INT, "TierID" }, - { true, FT_INT, "ColumnIndex" }, - { true, FT_INT, "Flags" }, - { true, FT_INT, "ClassID" }, - { true, FT_INT, "SpecID" }, - { true, FT_INT, "Role" }, + { false, FT_BYTE, "TalentSlotMask" }, }; - static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, PvpTalentMeta::Instance(), HOTFIX_SEL_PVP_TALENT); + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, PvpTalentCategoryMeta::Instance(), HOTFIX_SEL_PVP_TALENT_CATEGORY); return &loadInfo; } }; -struct PvpTalentUnlockLoadInfo +struct PvpTalentSlotUnlockLoadInfo { static DB2LoadInfo const* Instance() { static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "TierID" }, - { true, FT_INT, "ColumnIndex" }, - { true, FT_INT, "HonorLevel" }, + { true, FT_BYTE, "Slot" }, + { true, FT_INT, "LevelRequired" }, + { true, FT_INT, "DeathKnightLevelRequired" }, + { true, FT_INT, "DemonHunterLevelRequired" }, }; - static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, PvpTalentUnlockMeta::Instance(), HOTFIX_SEL_PVP_TALENT_UNLOCK); + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, PvpTalentSlotUnlockMeta::Instance(), HOTFIX_SEL_PVP_TALENT_SLOT_UNLOCK); return &loadInfo; } }; @@ -3721,10 +3829,10 @@ struct QuestPackageItemLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "ItemID" }, { false, FT_SHORT, "PackageID" }, - { false, FT_BYTE, "DisplayType" }, + { true, FT_INT, "ItemID" }, { false, FT_INT, "ItemQuantity" }, + { false, FT_BYTE, "DisplayType" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, QuestPackageItemMeta::Instance(), HOTFIX_SEL_QUEST_PACKAGE_ITEM); return &loadInfo; @@ -3790,6 +3898,7 @@ struct RandPropPointsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { true, FT_INT, "DamageReplaceStat" }, { false, FT_INT, "Epic1" }, { false, FT_INT, "Epic2" }, { false, FT_INT, "Epic3" }, @@ -3818,11 +3927,11 @@ struct RewardPackLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { true, FT_INT, "CharTitleID" }, { false, FT_INT, "Money" }, - { false, FT_FLOAT, "ArtifactXPMultiplier" }, { true, FT_BYTE, "ArtifactXPDifficulty" }, + { false, FT_FLOAT, "ArtifactXPMultiplier" }, { false, FT_BYTE, "ArtifactXPCategoryID" }, - { true, FT_INT, "CharTitleID" }, { false, FT_INT, "TreasurePickerID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, RewardPackMeta::Instance(), HOTFIX_SEL_REWARD_PACK); @@ -3877,22 +3986,6 @@ struct RulesetItemUpgradeLoadInfo } }; -struct SandboxScalingLoadInfo -{ - static DB2LoadInfo const* Instance() - { - static DB2FieldMeta const fields[] = - { - { false, FT_INT, "ID" }, - { true, FT_INT, "MinLevel" }, - { true, FT_INT, "MaxLevel" }, - { true, FT_INT, "Flags" }, - }; - static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SandboxScalingMeta::Instance(), HOTFIX_SEL_SANDBOX_SCALING); - return &loadInfo; - } -}; - struct ScalingStatDistributionLoadInfo { static DB2LoadInfo const* Instance() @@ -3918,8 +4011,9 @@ struct ScenarioLoadInfo { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, { false, FT_SHORT, "AreaTableID" }, - { false, FT_BYTE, "Flags" }, { false, FT_BYTE, "Type" }, + { false, FT_BYTE, "Flags" }, + { false, FT_INT, "UiTextureKitID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ScenarioMeta::Instance(), HOTFIX_SEL_SCENARIO); return &loadInfo; @@ -3936,12 +4030,14 @@ struct ScenarioStepLoadInfo { false, FT_STRING, "Description" }, { false, FT_STRING, "Title" }, { false, FT_SHORT, "ScenarioID" }, - { false, FT_SHORT, "Supersedes" }, + { false, FT_INT, "Criteriatreeid" }, { false, FT_SHORT, "RewardQuestID" }, + { true, FT_INT, "RelatedStep" }, + { false, FT_SHORT, "Supersedes" }, { false, FT_BYTE, "OrderIndex" }, { false, FT_BYTE, "Flags" }, - { false, FT_INT, "Criteriatreeid" }, - { true, FT_INT, "RelatedStep" }, + { false, FT_INT, "VisibilityPlayerConditionID" }, + { false, FT_SHORT, "WidgetSetID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ScenarioStepMeta::Instance(), HOTFIX_SEL_SCENARIO_STEP); return &loadInfo; @@ -4013,15 +4109,19 @@ struct SkillLineLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_INT, "ID" }, { false, FT_STRING, "DisplayName" }, - { false, FT_STRING, "Description" }, { false, FT_STRING, "AlternateVerb" }, - { false, FT_SHORT, "Flags" }, + { false, FT_STRING, "Description" }, + { false, FT_STRING, "HordeDisplayName" }, + { false, FT_STRING_NOT_LOCALIZED, "OverrideSourceInfoDisplayName" }, + { false, FT_INT, "ID" }, { true, FT_BYTE, "CategoryID" }, - { true, FT_BYTE, "CanLink" }, { true, FT_INT, "SpellIconFileID" }, + { true, FT_BYTE, "CanLink" }, { false, FT_INT, "ParentSkillLineID" }, + { true, FT_INT, "ParentTierIndex" }, + { false, FT_SHORT, "Flags" }, + { true, FT_INT, "SpellBookSpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SkillLineMeta::Instance(), HOTFIX_SEL_SKILL_LINE); return &loadInfo; @@ -4036,18 +4136,19 @@ struct SkillLineAbilityLoadInfo { { true, FT_LONG, "RaceMask" }, { false, FT_INT, "ID" }, + { true, FT_SHORT, "SkillLine" }, { true, FT_INT, "Spell" }, + { true, FT_SHORT, "MinSkillLineRank" }, + { true, FT_INT, "ClassMask" }, { true, FT_INT, "SupercedesSpell" }, - { true, FT_SHORT, "SkillLine" }, + { true, FT_BYTE, "AcquireMethod" }, { true, FT_SHORT, "TrivialSkillLineRankHigh" }, { true, FT_SHORT, "TrivialSkillLineRankLow" }, + { true, FT_BYTE, "Flags" }, + { true, FT_BYTE, "NumSkillUps" }, { true, FT_SHORT, "UniqueBit" }, { true, FT_SHORT, "TradeSkillCategoryID" }, - { true, FT_BYTE, "NumSkillUps" }, - { true, FT_INT, "ClassMask" }, - { true, FT_SHORT, "MinSkillLineRank" }, - { true, FT_BYTE, "AcquireMethod" }, - { true, FT_BYTE, "Flags" }, + { true, FT_SHORT, "SkillupSkillLineID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SkillLineAbilityMeta::Instance(), HOTFIX_SEL_SKILL_LINE_ABILITY); return &loadInfo; @@ -4063,11 +4164,11 @@ struct SkillRaceClassInfoLoadInfo { false, FT_INT, "ID" }, { true, FT_LONG, "RaceMask" }, { true, FT_SHORT, "SkillID" }, + { true, FT_INT, "ClassMask" }, { false, FT_SHORT, "Flags" }, - { true, FT_SHORT, "SkillTierID" }, { true, FT_BYTE, "Availability" }, { true, FT_BYTE, "MinLevel" }, - { true, FT_INT, "ClassMask" }, + { true, FT_SHORT, "SkillTierID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SkillRaceClassInfoMeta::Instance(), HOTFIX_SEL_SKILL_RACE_CLASS_INFO); return &loadInfo; @@ -4081,18 +4182,18 @@ struct SoundKitLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_BYTE, "SoundType" }, { false, FT_FLOAT, "VolumeFloat" }, + { false, FT_SHORT, "Flags" }, { false, FT_FLOAT, "MinDistance" }, { false, FT_FLOAT, "DistanceCutoff" }, - { false, FT_SHORT, "Flags" }, - { false, FT_SHORT, "SoundEntriesAdvancedID" }, - { false, FT_BYTE, "SoundType" }, - { false, FT_BYTE, "DialogType" }, { false, FT_BYTE, "EAXDef" }, + { false, FT_INT, "SoundKitAdvancedID" }, { false, FT_FLOAT, "VolumeVariationPlus" }, { false, FT_FLOAT, "VolumeVariationMinus" }, { false, FT_FLOAT, "PitchVariationPlus" }, { false, FT_FLOAT, "PitchVariationMinus" }, + { true, FT_BYTE, "DialogType" }, { false, FT_FLOAT, "PitchAdjust" }, { false, FT_SHORT, "BusOverwriteID" }, { false, FT_BYTE, "MaxInstances" }, @@ -4109,34 +4210,17 @@ struct SpecializationSpellsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_STRING, "Description" }, + { false, FT_INT, "ID" }, + { false, FT_SHORT, "SpecID" }, { true, FT_INT, "SpellID" }, { true, FT_INT, "OverridesSpellID" }, - { false, FT_SHORT, "SpecID" }, { false, FT_BYTE, "DisplayOrder" }, - { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpecializationSpellsMeta::Instance(), HOTFIX_SEL_SPECIALIZATION_SPELLS); return &loadInfo; } }; -struct SpellLoadInfo -{ - static DB2LoadInfo const* Instance() - { - static DB2FieldMeta const fields[] = - { - { false, FT_INT, "ID" }, - { false, FT_STRING, "Name" }, - { false, FT_STRING, "NameSubtext" }, - { false, FT_STRING, "Description" }, - { false, FT_STRING, "AuraDescription" }, - }; - static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellMeta::Instance(), HOTFIX_SEL_SPELL); - return &loadInfo; - } -}; - struct SpellAuraOptionsLoadInfo { static DB2LoadInfo const* Instance() @@ -4144,13 +4228,14 @@ struct SpellAuraOptionsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "ProcCharges" }, - { true, FT_INT, "ProcTypeMask" }, - { true, FT_INT, "ProcCategoryRecovery" }, - { false, FT_SHORT, "CumulativeAura" }, - { false, FT_SHORT, "SpellProcsPerMinuteID" }, { false, FT_BYTE, "DifficultyID" }, + { false, FT_SHORT, "CumulativeAura" }, + { true, FT_INT, "ProcCategoryRecovery" }, { false, FT_BYTE, "ProcChance" }, + { true, FT_INT, "ProcCharges" }, + { false, FT_SHORT, "SpellProcsPerMinuteID" }, + { true, FT_INT, "ProcTypeMask1" }, + { true, FT_INT, "ProcTypeMask2" }, { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellAuraOptionsMeta::Instance(), HOTFIX_SEL_SPELL_AURA_OPTIONS); @@ -4165,15 +4250,15 @@ struct SpellAuraRestrictionsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "CasterAuraSpell" }, - { true, FT_INT, "TargetAuraSpell" }, - { true, FT_INT, "ExcludeCasterAuraSpell" }, - { true, FT_INT, "ExcludeTargetAuraSpell" }, { false, FT_BYTE, "DifficultyID" }, { false, FT_BYTE, "CasterAuraState" }, { false, FT_BYTE, "TargetAuraState" }, { false, FT_BYTE, "ExcludeCasterAuraState" }, { false, FT_BYTE, "ExcludeTargetAuraState" }, + { true, FT_INT, "CasterAuraSpell" }, + { true, FT_INT, "TargetAuraSpell" }, + { true, FT_INT, "ExcludeCasterAuraSpell" }, + { true, FT_INT, "ExcludeTargetAuraSpell" }, { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellAuraRestrictionsMeta::Instance(), HOTFIX_SEL_SPELL_AURA_RESTRICTIONS); @@ -4189,8 +4274,8 @@ struct SpellCastTimesLoadInfo { { false, FT_INT, "ID" }, { true, FT_INT, "Base" }, - { true, FT_INT, "Minimum" }, { true, FT_SHORT, "PerLevel" }, + { true, FT_INT, "Minimum" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellCastTimesMeta::Instance(), HOTFIX_SEL_SPELL_CAST_TIMES); return &loadInfo; @@ -4205,12 +4290,12 @@ struct SpellCastingRequirementsLoadInfo { { false, FT_INT, "ID" }, { true, FT_INT, "SpellID" }, - { false, FT_SHORT, "MinFactionID" }, - { false, FT_SHORT, "RequiredAreasID" }, - { false, FT_SHORT, "RequiresSpellFocus" }, { false, FT_BYTE, "FacingCasterFlags" }, + { false, FT_SHORT, "MinFactionID" }, { true, FT_BYTE, "MinReputation" }, + { false, FT_SHORT, "RequiredAreasID" }, { false, FT_BYTE, "RequiredAuraVision" }, + { false, FT_SHORT, "RequiresSpellFocus" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellCastingRequirementsMeta::Instance(), HOTFIX_SEL_SPELL_CASTING_REQUIREMENTS); return &loadInfo; @@ -4224,14 +4309,14 @@ struct SpellCategoriesLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_SHORT, "Category" }, - { true, FT_SHORT, "StartRecoveryCategory" }, - { true, FT_SHORT, "ChargeCategory" }, { false, FT_BYTE, "DifficultyID" }, + { true, FT_SHORT, "Category" }, { true, FT_BYTE, "DefenseType" }, { true, FT_BYTE, "DispelType" }, { true, FT_BYTE, "Mechanic" }, { true, FT_BYTE, "PreventionType" }, + { true, FT_SHORT, "StartRecoveryCategory" }, + { true, FT_SHORT, "ChargeCategory" }, { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellCategoriesMeta::Instance(), HOTFIX_SEL_SPELL_CATEGORIES); @@ -4247,10 +4332,10 @@ struct SpellCategoryLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, - { true, FT_INT, "ChargeRecoveryTime" }, { true, FT_BYTE, "Flags" }, { false, FT_BYTE, "UsesPerWeek" }, { true, FT_BYTE, "MaxCharges" }, + { true, FT_INT, "ChargeRecoveryTime" }, { true, FT_INT, "TypeMask" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellCategoryMeta::Instance(), HOTFIX_SEL_SPELL_CATEGORY); @@ -4266,12 +4351,12 @@ struct SpellClassOptionsLoadInfo { { false, FT_INT, "ID" }, { true, FT_INT, "SpellID" }, - { false, FT_INT, "SpellClassMask1" }, - { false, FT_INT, "SpellClassMask2" }, - { false, FT_INT, "SpellClassMask3" }, - { false, FT_INT, "SpellClassMask4" }, - { false, FT_BYTE, "SpellClassSet" }, { false, FT_INT, "ModalNextSpell" }, + { false, FT_BYTE, "SpellClassSet" }, + { true, FT_INT, "SpellClassMask1" }, + { true, FT_INT, "SpellClassMask2" }, + { true, FT_INT, "SpellClassMask3" }, + { true, FT_INT, "SpellClassMask4" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellClassOptionsMeta::Instance(), HOTFIX_SEL_SPELL_CLASS_OPTIONS); return &loadInfo; @@ -4285,10 +4370,10 @@ struct SpellCooldownsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_BYTE, "DifficultyID" }, { true, FT_INT, "CategoryRecoveryTime" }, { true, FT_INT, "RecoveryTime" }, { true, FT_INT, "StartRecoveryTime" }, - { false, FT_BYTE, "DifficultyID" }, { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellCooldownsMeta::Instance(), HOTFIX_SEL_SPELL_COOLDOWNS); @@ -4304,8 +4389,8 @@ struct SpellDurationLoadInfo { { false, FT_INT, "ID" }, { true, FT_INT, "Duration" }, - { true, FT_INT, "MaxDuration" }, { false, FT_INT, "DurationPerLevel" }, + { true, FT_INT, "MaxDuration" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellDurationMeta::Instance(), HOTFIX_SEL_SPELL_DURATION); return &loadInfo; @@ -4319,40 +4404,39 @@ struct SpellEffectLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "Effect" }, - { true, FT_INT, "EffectBasePoints" }, - { true, FT_INT, "EffectIndex" }, - { true, FT_INT, "EffectAura" }, { true, FT_INT, "DifficultyID" }, + { true, FT_INT, "EffectIndex" }, + { false, FT_INT, "Effect" }, { false, FT_FLOAT, "EffectAmplitude" }, + { true, FT_INT, "EffectAttributes" }, + { true, FT_SHORT, "EffectAura" }, { true, FT_INT, "EffectAuraPeriod" }, { false, FT_FLOAT, "EffectBonusCoefficient" }, { false, FT_FLOAT, "EffectChainAmplitude" }, { true, FT_INT, "EffectChainTargets" }, - { true, FT_INT, "EffectDieSides" }, { true, FT_INT, "EffectItemType" }, { true, FT_INT, "EffectMechanic" }, { false, FT_FLOAT, "EffectPointsPerResource" }, + { false, FT_FLOAT, "EffectPosFacing" }, { false, FT_FLOAT, "EffectRealPointsPerLevel" }, { true, FT_INT, "EffectTriggerSpell" }, - { false, FT_FLOAT, "EffectPosFacing" }, - { true, FT_INT, "EffectAttributes" }, { false, FT_FLOAT, "BonusCoefficientFromAP" }, { false, FT_FLOAT, "PvpMultiplier" }, { false, FT_FLOAT, "Coefficient" }, { false, FT_FLOAT, "Variance" }, { false, FT_FLOAT, "ResourceCoefficient" }, { false, FT_FLOAT, "GroupSizeBasePointsCoefficient" }, - { false, FT_INT, "EffectSpellClassMask1" }, - { false, FT_INT, "EffectSpellClassMask2" }, - { false, FT_INT, "EffectSpellClassMask3" }, - { false, FT_INT, "EffectSpellClassMask4" }, + { false, FT_FLOAT, "EffectBasePoints" }, { true, FT_INT, "EffectMiscValue1" }, { true, FT_INT, "EffectMiscValue2" }, { false, FT_INT, "EffectRadiusIndex1" }, { false, FT_INT, "EffectRadiusIndex2" }, - { false, FT_INT, "ImplicitTarget1" }, - { false, FT_INT, "ImplicitTarget2" }, + { true, FT_INT, "EffectSpellClassMask1" }, + { true, FT_INT, "EffectSpellClassMask2" }, + { true, FT_INT, "EffectSpellClassMask3" }, + { true, FT_INT, "EffectSpellClassMask4" }, + { true, FT_SHORT, "ImplicitTarget1" }, + { true, FT_SHORT, "ImplicitTarget2" }, { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellEffectMeta::Instance(), HOTFIX_SEL_SPELL_EFFECT); @@ -4368,9 +4452,9 @@ struct SpellEquippedItemsLoadInfo { { false, FT_INT, "ID" }, { true, FT_INT, "SpellID" }, + { true, FT_BYTE, "EquippedItemClass" }, { true, FT_INT, "EquippedItemInvTypes" }, { true, FT_INT, "EquippedItemSubclass" }, - { true, FT_BYTE, "EquippedItemClass" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellEquippedItemsMeta::Instance(), HOTFIX_SEL_SPELL_EQUIPPED_ITEMS); return &loadInfo; @@ -4419,6 +4503,7 @@ struct SpellItemEnchantmentLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, + { false, FT_STRING, "HordeName" }, { false, FT_INT, "EffectArg1" }, { false, FT_INT, "EffectArg2" }, { false, FT_INT, "EffectArg3" }, @@ -4427,6 +4512,7 @@ struct SpellItemEnchantmentLoadInfo { false, FT_FLOAT, "EffectScalingPoints3" }, { false, FT_INT, "TransmogCost" }, { false, FT_INT, "IconFileDataID" }, + { false, FT_INT, "TransmogPlayerConditionID" }, { true, FT_SHORT, "EffectPointsMin1" }, { true, FT_SHORT, "EffectPointsMin2" }, { true, FT_SHORT, "EffectPointsMin3" }, @@ -4439,12 +4525,11 @@ struct SpellItemEnchantmentLoadInfo { false, FT_BYTE, "Effect1" }, { false, FT_BYTE, "Effect2" }, { false, FT_BYTE, "Effect3" }, + { true, FT_BYTE, "ScalingClass" }, + { true, FT_BYTE, "ScalingClassRestricted" }, { false, FT_BYTE, "ConditionID" }, { false, FT_BYTE, "MinLevel" }, { false, FT_BYTE, "MaxLevel" }, - { true, FT_BYTE, "ScalingClass" }, - { true, FT_BYTE, "ScalingClassRestricted" }, - { false, FT_INT, "TransmogPlayerConditionID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellItemEnchantmentMeta::Instance(), HOTFIX_SEL_SPELL_ITEM_ENCHANTMENT); return &loadInfo; @@ -4458,16 +4543,16 @@ struct SpellItemEnchantmentConditionLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "LtOperand1" }, - { false, FT_INT, "LtOperand2" }, - { false, FT_INT, "LtOperand3" }, - { false, FT_INT, "LtOperand4" }, - { false, FT_INT, "LtOperand5" }, { false, FT_BYTE, "LtOperandType1" }, { false, FT_BYTE, "LtOperandType2" }, { false, FT_BYTE, "LtOperandType3" }, { false, FT_BYTE, "LtOperandType4" }, { false, FT_BYTE, "LtOperandType5" }, + { false, FT_INT, "LtOperand1" }, + { false, FT_INT, "LtOperand2" }, + { false, FT_INT, "LtOperand3" }, + { false, FT_INT, "LtOperand4" }, + { false, FT_INT, "LtOperand5" }, { false, FT_BYTE, "Operator1" }, { false, FT_BYTE, "Operator2" }, { false, FT_BYTE, "Operator3" }, @@ -4517,10 +4602,10 @@ struct SpellLevelsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_BYTE, "DifficultyID" }, { true, FT_SHORT, "BaseLevel" }, { true, FT_SHORT, "MaxLevel" }, { true, FT_SHORT, "SpellLevel" }, - { false, FT_BYTE, "DifficultyID" }, { false, FT_BYTE, "MaxPassiveAuraLevel" }, { true, FT_INT, "SpellID" }, }; @@ -4536,15 +4621,16 @@ struct SpellMiscLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, + { false, FT_BYTE, "DifficultyID" }, { false, FT_SHORT, "CastingTimeIndex" }, { false, FT_SHORT, "DurationIndex" }, { false, FT_SHORT, "RangeIndex" }, { false, FT_BYTE, "SchoolMask" }, - { true, FT_INT, "SpellIconFileDataID" }, { false, FT_FLOAT, "Speed" }, - { true, FT_INT, "ActiveIconFileDataID" }, { false, FT_FLOAT, "LaunchDelay" }, - { false, FT_BYTE, "DifficultyID" }, + { false, FT_FLOAT, "MinDuration" }, + { true, FT_INT, "SpellIconFileDataID" }, + { true, FT_INT, "ActiveIconFileDataID" }, { true, FT_INT, "Attributes1" }, { true, FT_INT, "Attributes2" }, { true, FT_INT, "Attributes3" }, @@ -4566,25 +4652,39 @@ struct SpellMiscLoadInfo } }; +struct SpellNameLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_INT, "ID" }, + { false, FT_STRING, "Name" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellNameMeta::Instance(), HOTFIX_SEL_SPELL_NAME); + return &loadInfo; + } +}; + struct SpellPowerLoadInfo { static DB2LoadInfo const* Instance() { static DB2FieldMeta const fields[] = { - { true, FT_INT, "ManaCost" }, - { false, FT_FLOAT, "PowerCostPct" }, - { false, FT_FLOAT, "PowerPctPerSecond" }, - { true, FT_INT, "RequiredAuraSpellID" }, - { false, FT_FLOAT, "PowerCostMaxPct" }, - { false, FT_BYTE, "OrderIndex" }, - { true, FT_BYTE, "PowerType" }, { false, FT_INT, "ID" }, + { false, FT_BYTE, "OrderIndex" }, + { true, FT_INT, "ManaCost" }, { true, FT_INT, "ManaCostPerLevel" }, { true, FT_INT, "ManaPerSecond" }, - { false, FT_INT, "OptionalCost" }, { false, FT_INT, "PowerDisplayID" }, { true, FT_INT, "AltPowerBarID" }, + { false, FT_FLOAT, "PowerCostPct" }, + { false, FT_FLOAT, "PowerCostMaxPct" }, + { false, FT_FLOAT, "PowerPctPerSecond" }, + { true, FT_BYTE, "PowerType" }, + { true, FT_INT, "RequiredAuraSpellID" }, + { false, FT_INT, "OptionalCost" }, { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellPowerMeta::Instance(), HOTFIX_SEL_SPELL_POWER); @@ -4598,9 +4698,9 @@ struct SpellPowerDifficultyLoadInfo { static DB2FieldMeta const fields[] = { + { false, FT_INT, "ID" }, { false, FT_BYTE, "DifficultyID" }, { false, FT_BYTE, "OrderIndex" }, - { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellPowerDifficultyMeta::Instance(), HOTFIX_SEL_SPELL_POWER_DIFFICULTY); return &loadInfo; @@ -4629,9 +4729,9 @@ struct SpellProcsPerMinuteModLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "Coeff" }, - { true, FT_SHORT, "Param" }, { false, FT_BYTE, "Type" }, + { true, FT_SHORT, "Param" }, + { false, FT_FLOAT, "Coeff" }, { false, FT_SHORT, "SpellProcsPerMinuteID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellProcsPerMinuteModMeta::Instance(), HOTFIX_SEL_SPELL_PROCS_PER_MINUTE_MOD); @@ -4665,11 +4765,11 @@ struct SpellRangeLoadInfo { false, FT_INT, "ID" }, { false, FT_STRING, "DisplayName" }, { false, FT_STRING, "DisplayNameShort" }, + { false, FT_BYTE, "Flags" }, { false, FT_FLOAT, "RangeMin1" }, { false, FT_FLOAT, "RangeMin2" }, { false, FT_FLOAT, "RangeMax1" }, { false, FT_FLOAT, "RangeMax2" }, - { false, FT_BYTE, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellRangeMeta::Instance(), HOTFIX_SEL_SPELL_RANGE); return &loadInfo; @@ -4714,10 +4814,10 @@ struct SpellScalingLoadInfo { { false, FT_INT, "ID" }, { true, FT_INT, "SpellID" }, - { true, FT_SHORT, "ScalesFromItemLevel" }, { true, FT_INT, "Class" }, { false, FT_INT, "MinScalingLevel" }, { false, FT_INT, "MaxScalingLevel" }, + { true, FT_SHORT, "ScalesFromItemLevel" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellScalingMeta::Instance(), HOTFIX_SEL_SPELL_SCALING); return &loadInfo; @@ -4732,11 +4832,11 @@ struct SpellShapeshiftLoadInfo { { false, FT_INT, "ID" }, { true, FT_INT, "SpellID" }, + { true, FT_BYTE, "StanceBarOrder" }, { true, FT_INT, "ShapeshiftExclude1" }, { true, FT_INT, "ShapeshiftExclude2" }, { true, FT_INT, "ShapeshiftMask1" }, { true, FT_INT, "ShapeshiftMask2" }, - { true, FT_BYTE, "StanceBarOrder" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellShapeshiftMeta::Instance(), HOTFIX_SEL_SPELL_SHAPESHIFT); return &loadInfo; @@ -4751,13 +4851,13 @@ struct SpellShapeshiftFormLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, - { false, FT_FLOAT, "DamageVariance" }, + { true, FT_BYTE, "CreatureType" }, { true, FT_INT, "Flags" }, + { true, FT_INT, "AttackIconFileID" }, + { true, FT_BYTE, "BonusActionBar" }, { true, FT_SHORT, "CombatRoundTime" }, + { false, FT_FLOAT, "DamageVariance" }, { false, FT_SHORT, "MountTypeID" }, - { true, FT_BYTE, "CreatureType" }, - { true, FT_BYTE, "BonusActionBar" }, - { true, FT_INT, "AttackIconFileID" }, { false, FT_INT, "CreatureDisplayID1" }, { false, FT_INT, "CreatureDisplayID2" }, { false, FT_INT, "CreatureDisplayID3" }, @@ -4783,13 +4883,13 @@ struct SpellTargetRestrictionsLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_FLOAT, "ConeDegrees" }, - { false, FT_FLOAT, "Width" }, - { true, FT_INT, "Targets" }, - { true, FT_SHORT, "TargetCreatureType" }, { false, FT_BYTE, "DifficultyID" }, + { false, FT_FLOAT, "ConeDegrees" }, { false, FT_BYTE, "MaxTargets" }, { false, FT_INT, "MaxTargetLevel" }, + { true, FT_SHORT, "TargetCreatureType" }, + { true, FT_INT, "Targets" }, + { false, FT_FLOAT, "Width" }, { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellTargetRestrictionsMeta::Instance(), HOTFIX_SEL_SPELL_TARGET_RESTRICTIONS); @@ -4805,10 +4905,10 @@ struct SpellTotemsLoadInfo { { false, FT_INT, "ID" }, { true, FT_INT, "SpellID" }, - { true, FT_INT, "Totem1" }, - { true, FT_INT, "Totem2" }, { false, FT_SHORT, "RequiredTotemCategoryID1" }, { false, FT_SHORT, "RequiredTotemCategoryID2" }, + { true, FT_INT, "Totem1" }, + { true, FT_INT, "Totem2" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellTotemsMeta::Instance(), HOTFIX_SEL_SPELL_TOTEMS); return &loadInfo; @@ -4821,18 +4921,18 @@ struct SpellXSpellVisualLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_INT, "SpellVisualID" }, { false, FT_INT, "ID" }, + { false, FT_BYTE, "DifficultyID" }, + { false, FT_INT, "SpellVisualID" }, { false, FT_FLOAT, "Probability" }, - { false, FT_SHORT, "CasterPlayerConditionID" }, - { false, FT_SHORT, "CasterUnitConditionID" }, - { false, FT_SHORT, "ViewerPlayerConditionID" }, - { false, FT_SHORT, "ViewerUnitConditionID" }, - { true, FT_INT, "SpellIconFileID" }, - { true, FT_INT, "ActiveIconFileID" }, { false, FT_BYTE, "Flags" }, - { false, FT_BYTE, "DifficultyID" }, { false, FT_BYTE, "Priority" }, + { true, FT_INT, "SpellIconFileID" }, + { true, FT_INT, "ActiveIconFileID" }, + { false, FT_SHORT, "ViewerUnitConditionID" }, + { false, FT_INT, "ViewerPlayerConditionID" }, + { false, FT_SHORT, "CasterUnitConditionID" }, + { false, FT_INT, "CasterPlayerConditionID" }, { true, FT_INT, "SpellID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SpellXSpellVisualMeta::Instance(), HOTFIX_SEL_SPELL_X_SPELL_VISUAL); @@ -4847,11 +4947,11 @@ struct SummonPropertiesLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "Flags" }, { true, FT_INT, "Control" }, { true, FT_INT, "Faction" }, { true, FT_INT, "Title" }, { true, FT_INT, "Slot" }, + { true, FT_INT, "Flags" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SummonPropertiesMeta::Instance(), HOTFIX_SEL_SUMMON_PROPERTIES); return &loadInfo; @@ -4895,15 +4995,15 @@ struct TalentLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Description" }, - { false, FT_INT, "SpellID" }, - { false, FT_INT, "OverridesSpellID" }, - { false, FT_SHORT, "SpecID" }, { false, FT_BYTE, "TierID" }, - { false, FT_BYTE, "ColumnIndex" }, { false, FT_BYTE, "Flags" }, + { false, FT_BYTE, "ColumnIndex" }, + { false, FT_BYTE, "ClassID" }, + { false, FT_SHORT, "SpecID" }, + { false, FT_INT, "SpellID" }, + { false, FT_INT, "OverridesSpellID" }, { false, FT_BYTE, "CategoryMask1" }, { false, FT_BYTE, "CategoryMask2" }, - { false, FT_BYTE, "ClassID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, TalentMeta::Instance(), HOTFIX_SEL_TALENT); return &loadInfo; @@ -4916,24 +5016,25 @@ struct TaxiNodesLoadInfo { static DB2FieldMeta const fields[] = { - { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, { false, FT_FLOAT, "PosX" }, { false, FT_FLOAT, "PosY" }, { false, FT_FLOAT, "PosZ" }, - { true, FT_INT, "MountCreatureID1" }, - { true, FT_INT, "MountCreatureID2" }, { false, FT_FLOAT, "MapOffsetX" }, { false, FT_FLOAT, "MapOffsetY" }, - { false, FT_FLOAT, "Facing" }, { false, FT_FLOAT, "FlightMapOffsetX" }, { false, FT_FLOAT, "FlightMapOffsetY" }, + { false, FT_INT, "ID" }, { false, FT_SHORT, "ContinentID" }, { false, FT_SHORT, "ConditionID" }, { false, FT_SHORT, "CharacterBitNumber" }, { false, FT_BYTE, "Flags" }, { true, FT_INT, "UiTextureKitID" }, + { false, FT_FLOAT, "Facing" }, { false, FT_INT, "SpecialIconConditionID" }, + { false, FT_INT, "VisibilityConditionID" }, + { true, FT_INT, "MountCreatureID1" }, + { true, FT_INT, "MountCreatureID2" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, TaxiNodesMeta::Instance(), HOTFIX_SEL_TAXI_NODES); return &loadInfo; @@ -4946,9 +5047,9 @@ struct TaxiPathLoadInfo { static DB2FieldMeta const fields[] = { + { false, FT_INT, "ID" }, { false, FT_SHORT, "FromTaxiNode" }, { false, FT_SHORT, "ToTaxiNode" }, - { false, FT_INT, "ID" }, { false, FT_INT, "Cost" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, TaxiPathMeta::Instance(), HOTFIX_SEL_TAXI_PATH); @@ -4965,10 +5066,10 @@ struct TaxiPathNodeLoadInfo { false, FT_FLOAT, "LocX" }, { false, FT_FLOAT, "LocY" }, { false, FT_FLOAT, "LocZ" }, + { false, FT_INT, "ID" }, { false, FT_SHORT, "PathID" }, + { true, FT_INT, "NodeIndex" }, { false, FT_SHORT, "ContinentID" }, - { false, FT_BYTE, "NodeIndex" }, - { false, FT_INT, "ID" }, { false, FT_BYTE, "Flags" }, { false, FT_INT, "Delay" }, { false, FT_SHORT, "ArrivalEventID" }, @@ -4987,8 +5088,8 @@ struct TotemCategoryLoadInfo { { false, FT_INT, "ID" }, { false, FT_STRING, "Name" }, - { true, FT_INT, "TotemCategoryMask" }, { false, FT_BYTE, "TotemCategoryType" }, + { true, FT_INT, "TotemCategoryMask" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, TotemCategoryMeta::Instance(), HOTFIX_SEL_TOTEM_CATEGORY); return &loadInfo; @@ -5002,10 +5103,10 @@ struct ToyLoadInfo static DB2FieldMeta const fields[] = { { false, FT_STRING, "SourceText" }, + { false, FT_INT, "ID" }, { true, FT_INT, "ItemID" }, { false, FT_BYTE, "Flags" }, { true, FT_BYTE, "SourceTypeEnum" }, - { false, FT_INT, "ID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, ToyMeta::Instance(), HOTFIX_SEL_TOY); return &loadInfo; @@ -5033,15 +5134,15 @@ struct TransmogSetLoadInfo static DB2FieldMeta const fields[] = { { false, FT_STRING, "Name" }, - { false, FT_SHORT, "ParentTransmogSetID" }, - { true, FT_SHORT, "UiOrder" }, - { false, FT_BYTE, "ExpansionID" }, { false, FT_INT, "ID" }, - { true, FT_INT, "Flags" }, - { false, FT_INT, "TrackingQuestID" }, { true, FT_INT, "ClassMask" }, - { true, FT_INT, "ItemNameDescriptionID" }, + { false, FT_INT, "TrackingQuestID" }, + { true, FT_INT, "Flags" }, { false, FT_INT, "TransmogSetGroupID" }, + { true, FT_INT, "ItemNameDescriptionID" }, + { false, FT_SHORT, "ParentTransmogSetID" }, + { false, FT_BYTE, "ExpansionID" }, + { true, FT_SHORT, "UiOrder" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, TransmogSetMeta::Instance(), HOTFIX_SEL_TRANSMOG_SET); return &loadInfo; @@ -5085,11 +5186,11 @@ struct TransportAnimationLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "TimeIndex" }, { false, FT_FLOAT, "PosX" }, { false, FT_FLOAT, "PosY" }, { false, FT_FLOAT, "PosZ" }, { false, FT_BYTE, "SequenceID" }, + { false, FT_INT, "TimeIndex" }, { true, FT_INT, "TransportID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, TransportAnimationMeta::Instance(), HOTFIX_SEL_TRANSPORT_ANIMATION); @@ -5104,11 +5205,11 @@ struct TransportRotationLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { false, FT_INT, "TimeIndex" }, { false, FT_FLOAT, "Rot1" }, { false, FT_FLOAT, "Rot2" }, { false, FT_FLOAT, "Rot3" }, { false, FT_FLOAT, "Rot4" }, + { false, FT_INT, "TimeIndex" }, { true, FT_INT, "GameObjectsID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, TransportRotationMeta::Instance(), HOTFIX_SEL_TRANSPORT_ROTATION); @@ -5116,6 +5217,96 @@ struct TransportRotationLoadInfo } }; +struct UiMapLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_STRING, "Name" }, + { false, FT_INT, "ID" }, + { true, FT_INT, "ParentUiMapID" }, + { true, FT_INT, "Flags" }, + { true, FT_INT, "System" }, + { true, FT_INT, "Type" }, + { false, FT_INT, "LevelRangeMin" }, + { false, FT_INT, "LevelRangeMax" }, + { true, FT_INT, "BountySetID" }, + { false, FT_INT, "BountyDisplayLocation" }, + { true, FT_INT, "VisibilityPlayerConditionID" }, + { true, FT_BYTE, "HelpTextPosition" }, + { true, FT_INT, "BkgAtlasID" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, UiMapMeta::Instance(), HOTFIX_SEL_UI_MAP); + return &loadInfo; + } +}; + +struct UiMapAssignmentLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_FLOAT, "UiMinX" }, + { false, FT_FLOAT, "UiMinY" }, + { false, FT_FLOAT, "UiMaxX" }, + { false, FT_FLOAT, "UiMaxY" }, + { false, FT_FLOAT, "Region1X" }, + { false, FT_FLOAT, "Region1Y" }, + { false, FT_FLOAT, "Region1Z" }, + { false, FT_FLOAT, "Region2X" }, + { false, FT_FLOAT, "Region2Y" }, + { false, FT_FLOAT, "Region2Z" }, + { false, FT_INT, "ID" }, + { true, FT_INT, "UiMapID" }, + { true, FT_INT, "OrderIndex" }, + { true, FT_INT, "MapID" }, + { true, FT_INT, "AreaID" }, + { true, FT_INT, "WmoDoodadPlacementID" }, + { true, FT_INT, "WmoGroupID" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, UiMapAssignmentMeta::Instance(), HOTFIX_SEL_UI_MAP_ASSIGNMENT); + return &loadInfo; + } +}; + +struct UiMapLinkLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_FLOAT, "UiMinX" }, + { false, FT_FLOAT, "UiMinY" }, + { false, FT_FLOAT, "UiMaxX" }, + { false, FT_FLOAT, "UiMaxY" }, + { false, FT_INT, "ID" }, + { true, FT_INT, "ParentUiMapID" }, + { true, FT_INT, "OrderIndex" }, + { true, FT_INT, "ChildUiMapID" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, UiMapLinkMeta::Instance(), HOTFIX_SEL_UI_MAP_LINK); + return &loadInfo; + } +}; + +struct UiMapXMapArtLoadInfo +{ + static DB2LoadInfo const* Instance() + { + static DB2FieldMeta const fields[] = + { + { false, FT_INT, "ID" }, + { true, FT_INT, "PhaseID" }, + { true, FT_INT, "UiMapArtID" }, + { true, FT_INT, "UiMapID" }, + }; + static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, UiMapXMapArtMeta::Instance(), HOTFIX_SEL_UI_MAP_X_MAP_ART); + return &loadInfo; + } +}; + struct UnitPowerBarLoadInfo { static DB2LoadInfo const* Instance() @@ -5127,8 +5318,16 @@ struct UnitPowerBarLoadInfo { false, FT_STRING, "Cost" }, { false, FT_STRING, "OutOfError" }, { false, FT_STRING, "ToolTip" }, + { false, FT_INT, "MinPower" }, + { false, FT_INT, "MaxPower" }, + { false, FT_SHORT, "StartPower" }, + { false, FT_BYTE, "CenterPower" }, { false, FT_FLOAT, "RegenerationPeace" }, { false, FT_FLOAT, "RegenerationCombat" }, + { false, FT_BYTE, "BarType" }, + { false, FT_SHORT, "Flags" }, + { false, FT_FLOAT, "StartInset" }, + { false, FT_FLOAT, "EndInset" }, { true, FT_INT, "FileDataID1" }, { true, FT_INT, "FileDataID2" }, { true, FT_INT, "FileDataID3" }, @@ -5141,14 +5340,6 @@ struct UnitPowerBarLoadInfo { true, FT_INT, "Color4" }, { true, FT_INT, "Color5" }, { true, FT_INT, "Color6" }, - { false, FT_FLOAT, "StartInset" }, - { false, FT_FLOAT, "EndInset" }, - { false, FT_SHORT, "StartPower" }, - { false, FT_SHORT, "Flags" }, - { false, FT_BYTE, "CenterPower" }, - { false, FT_BYTE, "BarType" }, - { false, FT_INT, "MinPower" }, - { false, FT_INT, "MaxPower" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, UnitPowerBarMeta::Instance(), HOTFIX_SEL_UNIT_POWER_BAR); return &loadInfo; @@ -5163,6 +5354,7 @@ struct VehicleLoadInfo { { false, FT_INT, "ID" }, { true, FT_INT, "Flags" }, + { false, FT_BYTE, "FlagsB" }, { false, FT_FLOAT, "TurnSpeed" }, { false, FT_FLOAT, "PitchSpeed" }, { false, FT_FLOAT, "PitchMin" }, @@ -5174,6 +5366,9 @@ struct VehicleLoadInfo { false, FT_FLOAT, "FacingLimitRight" }, { false, FT_FLOAT, "FacingLimitLeft" }, { false, FT_FLOAT, "CameraYawOffset" }, + { false, FT_BYTE, "UiLocomotionType" }, + { false, FT_SHORT, "VehicleUIIndicatorID" }, + { true, FT_INT, "MissileTargetingID" }, { false, FT_SHORT, "SeatID1" }, { false, FT_SHORT, "SeatID2" }, { false, FT_SHORT, "SeatID3" }, @@ -5182,13 +5377,9 @@ struct VehicleLoadInfo { false, FT_SHORT, "SeatID6" }, { false, FT_SHORT, "SeatID7" }, { false, FT_SHORT, "SeatID8" }, - { false, FT_SHORT, "VehicleUIIndicatorID" }, { false, FT_SHORT, "PowerDisplayID1" }, { false, FT_SHORT, "PowerDisplayID2" }, { false, FT_SHORT, "PowerDisplayID3" }, - { false, FT_BYTE, "FlagsB" }, - { false, FT_BYTE, "UiLocomotionType" }, - { true, FT_INT, "MissileTargetingID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, VehicleMeta::Instance(), HOTFIX_SEL_VEHICLE); return &loadInfo; @@ -5202,12 +5393,16 @@ struct VehicleSeatLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "Flags" }, - { true, FT_INT, "FlagsB" }, - { true, FT_INT, "FlagsC" }, { false, FT_FLOAT, "AttachmentOffsetX" }, { false, FT_FLOAT, "AttachmentOffsetY" }, { false, FT_FLOAT, "AttachmentOffsetZ" }, + { false, FT_FLOAT, "CameraOffsetX" }, + { false, FT_FLOAT, "CameraOffsetY" }, + { false, FT_FLOAT, "CameraOffsetZ" }, + { true, FT_INT, "Flags" }, + { true, FT_INT, "FlagsB" }, + { true, FT_INT, "FlagsC" }, + { true, FT_BYTE, "AttachmentID" }, { false, FT_FLOAT, "EnterPreDelay" }, { false, FT_FLOAT, "EnterSpeed" }, { false, FT_FLOAT, "EnterGravity" }, @@ -5215,6 +5410,12 @@ struct VehicleSeatLoadInfo { false, FT_FLOAT, "EnterMaxDuration" }, { false, FT_FLOAT, "EnterMinArcHeight" }, { false, FT_FLOAT, "EnterMaxArcHeight" }, + { true, FT_INT, "EnterAnimStart" }, + { true, FT_INT, "EnterAnimLoop" }, + { true, FT_INT, "RideAnimStart" }, + { true, FT_INT, "RideAnimLoop" }, + { true, FT_INT, "RideUpperAnimStart" }, + { true, FT_INT, "RideUpperAnimLoop" }, { false, FT_FLOAT, "ExitPreDelay" }, { false, FT_FLOAT, "ExitSpeed" }, { false, FT_FLOAT, "ExitGravity" }, @@ -5222,36 +5423,34 @@ struct VehicleSeatLoadInfo { false, FT_FLOAT, "ExitMaxDuration" }, { false, FT_FLOAT, "ExitMinArcHeight" }, { false, FT_FLOAT, "ExitMaxArcHeight" }, + { true, FT_INT, "ExitAnimStart" }, + { true, FT_INT, "ExitAnimLoop" }, + { true, FT_INT, "ExitAnimEnd" }, + { true, FT_SHORT, "VehicleEnterAnim" }, + { true, FT_BYTE, "VehicleEnterAnimBone" }, + { true, FT_SHORT, "VehicleExitAnim" }, + { true, FT_BYTE, "VehicleExitAnimBone" }, + { true, FT_SHORT, "VehicleRideAnimLoop" }, + { true, FT_BYTE, "VehicleRideAnimLoopBone" }, + { true, FT_BYTE, "PassengerAttachmentID" }, { false, FT_FLOAT, "PassengerYaw" }, { false, FT_FLOAT, "PassengerPitch" }, { false, FT_FLOAT, "PassengerRoll" }, { false, FT_FLOAT, "VehicleEnterAnimDelay" }, { false, FT_FLOAT, "VehicleExitAnimDelay" }, + { true, FT_BYTE, "VehicleAbilityDisplay" }, + { false, FT_INT, "EnterUISoundID" }, + { false, FT_INT, "ExitUISoundID" }, + { true, FT_INT, "UiSkinFileDataID" }, { false, FT_FLOAT, "CameraEnteringDelay" }, { false, FT_FLOAT, "CameraEnteringDuration" }, { false, FT_FLOAT, "CameraExitingDelay" }, { false, FT_FLOAT, "CameraExitingDuration" }, - { false, FT_FLOAT, "CameraOffsetX" }, - { false, FT_FLOAT, "CameraOffsetY" }, - { false, FT_FLOAT, "CameraOffsetZ" }, { false, FT_FLOAT, "CameraPosChaseRate" }, { false, FT_FLOAT, "CameraFacingChaseRate" }, { false, FT_FLOAT, "CameraEnteringZoom" }, { false, FT_FLOAT, "CameraSeatZoomMin" }, { false, FT_FLOAT, "CameraSeatZoomMax" }, - { true, FT_INT, "UiSkinFileDataID" }, - { true, FT_SHORT, "EnterAnimStart" }, - { true, FT_SHORT, "EnterAnimLoop" }, - { true, FT_SHORT, "RideAnimStart" }, - { true, FT_SHORT, "RideAnimLoop" }, - { true, FT_SHORT, "RideUpperAnimStart" }, - { true, FT_SHORT, "RideUpperAnimLoop" }, - { true, FT_SHORT, "ExitAnimStart" }, - { true, FT_SHORT, "ExitAnimLoop" }, - { true, FT_SHORT, "ExitAnimEnd" }, - { true, FT_SHORT, "VehicleEnterAnim" }, - { true, FT_SHORT, "VehicleExitAnim" }, - { true, FT_SHORT, "VehicleRideAnimLoop" }, { true, FT_SHORT, "EnterAnimKitID" }, { true, FT_SHORT, "RideAnimKitID" }, { true, FT_SHORT, "ExitAnimKitID" }, @@ -5259,14 +5458,6 @@ struct VehicleSeatLoadInfo { true, FT_SHORT, "VehicleRideAnimKitID" }, { true, FT_SHORT, "VehicleExitAnimKitID" }, { true, FT_SHORT, "CameraModeID" }, - { true, FT_BYTE, "AttachmentID" }, - { true, FT_BYTE, "PassengerAttachmentID" }, - { true, FT_BYTE, "VehicleEnterAnimBone" }, - { true, FT_BYTE, "VehicleExitAnimBone" }, - { true, FT_BYTE, "VehicleRideAnimLoopBone" }, - { true, FT_BYTE, "VehicleAbilityDisplay" }, - { false, FT_INT, "EnterUISoundID" }, - { false, FT_INT, "ExitUISoundID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, VehicleSeatMeta::Instance(), HOTFIX_SEL_VEHICLE_SEAT); return &loadInfo; @@ -5280,20 +5471,20 @@ struct WmoAreaTableLoadInfo static DB2FieldMeta const fields[] = { { false, FT_STRING, "AreaName" }, + { false, FT_INT, "ID" }, + { false, FT_SHORT, "WmoID" }, + { false, FT_BYTE, "NameSetID" }, { true, FT_INT, "WmoGroupID" }, + { false, FT_BYTE, "SoundProviderPref" }, + { false, FT_BYTE, "SoundProviderPrefUnderwater" }, { false, FT_SHORT, "AmbienceID" }, + { false, FT_SHORT, "UwAmbience" }, { false, FT_SHORT, "ZoneMusic" }, + { false, FT_INT, "UwZoneMusic" }, { false, FT_SHORT, "IntroSound" }, - { false, FT_SHORT, "AreaTableID" }, { false, FT_SHORT, "UwIntroSound" }, - { false, FT_SHORT, "UwAmbience" }, - { false, FT_BYTE, "NameSetID" }, - { false, FT_BYTE, "SoundProviderPref" }, - { false, FT_BYTE, "SoundProviderPrefUnderwater" }, + { false, FT_SHORT, "AreaTableID" }, { false, FT_BYTE, "Flags" }, - { false, FT_INT, "ID" }, - { false, FT_INT, "UwZoneMusic" }, - { false, FT_SHORT, "WmoID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, WMOAreaTableMeta::Instance(), HOTFIX_SEL_WMO_AREA_TABLE); return &loadInfo; @@ -5307,63 +5498,33 @@ struct WorldEffectLoadInfo static DB2FieldMeta const fields[] = { { false, FT_INT, "ID" }, - { true, FT_INT, "TargetAsset" }, - { false, FT_SHORT, "CombatConditionID" }, - { false, FT_BYTE, "TargetType" }, - { false, FT_BYTE, "WhenToDisplay" }, { false, FT_INT, "QuestFeedbackEffectID" }, + { false, FT_BYTE, "WhenToDisplay" }, + { false, FT_BYTE, "TargetType" }, + { true, FT_INT, "TargetAsset" }, { false, FT_INT, "PlayerConditionID" }, + { false, FT_SHORT, "CombatConditionID" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, WorldEffectMeta::Instance(), HOTFIX_SEL_WORLD_EFFECT); return &loadInfo; } }; -struct WorldMapAreaLoadInfo -{ - static DB2LoadInfo const* Instance() - { - static DB2FieldMeta const fields[] = - { - { false, FT_STRING_NOT_LOCALIZED, "AreaName" }, - { false, FT_FLOAT, "LocLeft" }, - { false, FT_FLOAT, "LocRight" }, - { false, FT_FLOAT, "LocTop" }, - { false, FT_FLOAT, "LocBottom" }, - { false, FT_INT, "Flags" }, - { true, FT_SHORT, "MapID" }, - { false, FT_SHORT, "AreaID" }, - { true, FT_SHORT, "DisplayMapID" }, - { false, FT_SHORT, "DefaultDungeonFloor" }, - { false, FT_SHORT, "ParentWorldMapID" }, - { false, FT_BYTE, "LevelRangeMin" }, - { false, FT_BYTE, "LevelRangeMax" }, - { false, FT_BYTE, "BountySetID" }, - { false, FT_BYTE, "BountyDisplayLocation" }, - { false, FT_INT, "ID" }, - { false, FT_INT, "VisibilityPlayerConditionID" }, - }; - static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, WorldMapAreaMeta::Instance(), HOTFIX_SEL_WORLD_MAP_AREA); - return &loadInfo; - } -}; - struct WorldMapOverlayLoadInfo { static DB2LoadInfo const* Instance() { static DB2FieldMeta const fields[] = { - { false, FT_STRING_NOT_LOCALIZED, "TextureName" }, { false, FT_INT, "ID" }, + { false, FT_INT, "UiMapArtID" }, { false, FT_SHORT, "TextureWidth" }, { false, FT_SHORT, "TextureHeight" }, - { false, FT_INT, "MapAreaID" }, { true, FT_INT, "OffsetX" }, { true, FT_INT, "OffsetY" }, { true, FT_INT, "HitRectTop" }, - { true, FT_INT, "HitRectLeft" }, { true, FT_INT, "HitRectBottom" }, + { true, FT_INT, "HitRectLeft" }, { true, FT_INT, "HitRectRight" }, { false, FT_INT, "PlayerConditionID" }, { false, FT_INT, "Flags" }, @@ -5377,35 +5538,6 @@ struct WorldMapOverlayLoadInfo } }; -struct WorldMapTransformsLoadInfo -{ - static DB2LoadInfo const* Instance() - { - static DB2FieldMeta const fields[] = - { - { false, FT_INT, "ID" }, - { false, FT_FLOAT, "RegionMinX" }, - { false, FT_FLOAT, "RegionMinY" }, - { false, FT_FLOAT, "RegionMinZ" }, - { false, FT_FLOAT, "RegionMaxX" }, - { false, FT_FLOAT, "RegionMaxY" }, - { false, FT_FLOAT, "RegionMaxZ" }, - { false, FT_FLOAT, "RegionOffsetX" }, - { false, FT_FLOAT, "RegionOffsetY" }, - { false, FT_FLOAT, "RegionScale" }, - { false, FT_SHORT, "MapID" }, - { false, FT_SHORT, "AreaID" }, - { false, FT_SHORT, "NewMapID" }, - { false, FT_SHORT, "NewDungeonMapID" }, - { false, FT_SHORT, "NewAreaID" }, - { false, FT_BYTE, "Flags" }, - { true, FT_INT, "Priority" }, - }; - static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, WorldMapTransformsMeta::Instance(), HOTFIX_SEL_WORLD_MAP_TRANSFORMS); - return &loadInfo; - } -}; - struct WorldSafeLocsLoadInfo { static DB2LoadInfo const* Instance() @@ -5417,8 +5549,8 @@ struct WorldSafeLocsLoadInfo { false, FT_FLOAT, "LocX" }, { false, FT_FLOAT, "LocY" }, { false, FT_FLOAT, "LocZ" }, - { false, FT_FLOAT, "Facing" }, { false, FT_SHORT, "MapID" }, + { false, FT_FLOAT, "Facing" }, }; static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, WorldSafeLocsMeta::Instance(), HOTFIX_SEL_WORLD_SAFE_LOCS); return &loadInfo; diff --git a/src/server/game/DataStores/DB2Metadata.h b/src/server/game/DataStores/DB2Metadata.h index f65b1190066..1d2e317b148 100644 --- a/src/server/game/DataStores/DB2Metadata.h +++ b/src/server/game/DataStores/DB2Metadata.h @@ -24,9 +24,25 @@ struct AchievementMeta { static DB2Meta const* Instance() { - static char const* types = "sssihhhhhbbbiii"; - static uint8 const arraySizes[15] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(12, 15, 0x2C4BE18C, types, arraySizes, 7); + static DB2MetaField const fields[15] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(3, 15, 0x13CB7BEE, fields, 11); return &instance; } }; @@ -35,9 +51,14 @@ struct Achievement_CategoryMeta { static DB2Meta const* Instance() { - static char const* types = "shbi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(3, 4, 0xED226BC9, types, arraySizes, 2); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(1, 4, 0x0B008A91, fields, 3); return &instance; } }; @@ -46,9 +67,32 @@ struct AdventureJournalMeta { static DB2Meta const* Instance() { - static char const* types = "sssssiihhhhhhbbbbbbbii"; - static uint8 const arraySizes[22] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1 }; - static DB2Meta instance(-1, 22, 0xB2FFA8DD, types, arraySizes, -1); + static DB2MetaField const fields[22] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 2, false }, + { FT_BYTE, 2, false }, + }; + static DB2Meta instance(-1, 22, 0x9D620FC8, fields, -1); return &instance; } }; @@ -57,9 +101,22 @@ struct AdventureMapPOIMeta { static DB2Meta const* Instance() { - static char const* types = "ssfibiiiiiiii"; - static uint8 const arraySizes[13] = { 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 13, 0x0C288A82, types, arraySizes, -1); + static DB2MetaField const fields[12] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_FLOAT, 2, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 12, 0x4AABC870, fields, -1); return &instance; } }; @@ -68,9 +125,18 @@ struct AlliedRaceMeta { static DB2Meta const* Instance() { - static char const* types = "iiiiiiii"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(1, 8, 0xB13ABE04, types, arraySizes, -1); + static DB2MetaField const fields[8] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 8, 0xE89FA2D2, fields, -1); return &instance; } }; @@ -79,9 +145,15 @@ struct AlliedRaceRacialAbilityMeta { static DB2Meta const* Instance() { - static char const* types = "ssbii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x9EBF9B09, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x96902165, fields, 4); return &instance; } }; @@ -90,9 +162,13 @@ struct AnimKitMeta { static DB2Meta const* Instance() { - static char const* types = "ihh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x81D6D250, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x0C4BCDEC, fields, -1); return &instance; } }; @@ -101,9 +177,15 @@ struct AnimKitBoneSetMeta { static DB2Meta const* Instance() { - static char const* types = "sbbbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xFE4B9B1F, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x1C432613, fields, -1); return &instance; } }; @@ -112,9 +194,12 @@ struct AnimKitBoneSetAliasMeta { static DB2Meta const* Instance() { - static char const* types = "bb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xEA8B67BC, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xB307E8FC, fields, -1); return &instance; } }; @@ -123,9 +208,11 @@ struct AnimKitConfigMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x8A70ED4C, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 1, 0x972D46F8, fields, -1); return &instance; } }; @@ -134,9 +221,13 @@ struct AnimKitConfigBoneSetMeta { static DB2Meta const* Instance() { - static char const* types = "hbh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x3D9B3BA7, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x48518303, fields, 2); return &instance; } }; @@ -145,9 +236,11 @@ struct AnimKitPriorityMeta { static DB2Meta const* Instance() { - static char const* types = "b"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x5E93C107, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 1, 0x27ED596B, fields, -1); return &instance; } }; @@ -156,9 +249,15 @@ struct AnimKitReplacementMeta { static DB2Meta const* Instance() { - static char const* types = "hhhih"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(3, 5, 0x0735DB83, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(0, 5, 0xB0BBA55F, fields, 4); return &instance; } }; @@ -167,9 +266,28 @@ struct AnimKitSegmentMeta { static DB2Meta const* Instance() { - static char const* types = "iiifihhhhhhbbbbbbi"; - static uint8 const arraySizes[18] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 18, 0x08F09B89, types, arraySizes, 5); + static DB2MetaField const fields[18] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 18, 0xEBF796F5, fields, 0); return &instance; } }; @@ -178,9 +296,15 @@ struct AnimReplacementMeta { static DB2Meta const* Instance() { - static char const* types = "hhhih"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(3, 5, 0x2C8B0F35, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(0, 5, 0x5D91ABFD, fields, 4); return &instance; } }; @@ -189,9 +313,11 @@ struct AnimReplacementSetMeta { static DB2Meta const* Instance() { - static char const* types = "b"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x3761247A, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 1, 0x15AFC3D6, fields, -1); return &instance; } }; @@ -200,9 +326,48 @@ struct AnimationDataMeta { static DB2Meta const* Instance() { - static char const* types = "ihhb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x03182786, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 2, true }, + }; + static DB2Meta instance(-1, 4, 0xFB408E92, fields, -1); + return &instance; + } +}; + +struct AoiBoxMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[5] = + { + { FT_FLOAT, 6, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x173154C8, fields, 4); + return &instance; + } +}; + +struct AreaConditionalDataMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(1, 5, 0xBE8C656A, fields, 4); return &instance; } }; @@ -211,9 +376,14 @@ struct AreaFarClipOverrideMeta { static DB2Meta const* Instance() { - static char const* types = "iffii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(4, 5, 0xEB5921CC, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0xD7028AD6, fields, -1); return &instance; } }; @@ -222,9 +392,12 @@ struct AreaGroupMemberMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x50AA43EE, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x27C84A16, fields, 1); return &instance; } }; @@ -233,9 +406,27 @@ struct AreaPOIMeta { static DB2Meta const* Instance() { - static char const* types = "ssifiihhhhbbiiii"; - static uint8 const arraySizes[16] = { 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 16, 0xB161EE90, types, arraySizes, -1); + static DB2MetaField const fields[17] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 3, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(2, 17, 0x34D56581, fields, 11); return &instance; } }; @@ -244,9 +435,15 @@ struct AreaPOIStateMeta { static DB2Meta const* Instance() { - static char const* types = "sbbih"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x673BDA80, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 5, 0xEB8CA12C, fields, 4); return &instance; } }; @@ -255,9 +452,33 @@ struct AreaTableMeta { static DB2Meta const* Instance() { - static char const* types = "ssifhhhhhhhhhhbbbbbbbbi"; - static uint8 const arraySizes[23] = { 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 23, 0x0CA01129, types, arraySizes, -1); + static DB2MetaField const fields[23] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 2, true }, + { FT_SHORT, 4, false }, + }; + static DB2Meta instance(-1, 23, 0x22229BE7, fields, -1); return &instance; } }; @@ -266,9 +487,25 @@ struct AreaTriggerMeta { static DB2Meta const* Instance() { - static char const* types = "ffffffhhhhhbbbi"; - static uint8 const arraySizes[15] = { 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(14, 15, 0x378573E8, types, arraySizes, 6); + static DB2MetaField const fields[15] = + { + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(1, 15, 0x61A4F966, fields, 2); return &instance; } }; @@ -277,9 +514,11 @@ struct AreaTriggerActionSetMeta { static DB2Meta const* Instance() { - static char const* types = "h"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x5DA480BD, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xBE34F649, fields, -1); return &instance; } }; @@ -288,9 +527,25 @@ struct AreaTriggerBoxMeta { static DB2Meta const* Instance() { - static char const* types = "f"; - static uint8 const arraySizes[1] = { 3 }; - static DB2Meta instance(-1, 1, 0x602CFDA6, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_FLOAT, 3, true }, + }; + static DB2Meta instance(-1, 1, 0x14918F12, fields, -1); + return &instance; + } +}; + +struct AreaTriggerCreatePropertiesMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xAAE6E300, fields, -1); return &instance; } }; @@ -299,9 +554,13 @@ struct AreaTriggerCylinderMeta { static DB2Meta const* Instance() { - static char const* types = "fff"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x26D4052D, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x867834A9, fields, -1); return &instance; } }; @@ -310,9 +569,11 @@ struct AreaTriggerSphereMeta { static DB2Meta const* Instance() { - static char const* types = "f"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x9141AC7F, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xF1D2220B, fields, -1); return &instance; } }; @@ -321,9 +582,15 @@ struct ArmorLocationMeta { static DB2Meta const* Instance() { - static char const* types = "fffff"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xCCFBD16E, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x1C0BBC02, fields, -1); return &instance; } }; @@ -332,9 +599,21 @@ struct ArtifactMeta { static DB2Meta const* Instance() { - static char const* types = "siiihhbbii"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0x76CF31A8, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(1, 11, 0x780D61EA, fields, -1); return &instance; } }; @@ -343,9 +622,25 @@ struct ArtifactAppearanceMeta { static DB2Meta const* Instance() { - static char const* types = "siffihhbbbbiiii"; - static uint8 const arraySizes[15] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(11, 15, 0xAEED7395, types, arraySizes, 5); + static DB2MetaField const fields[15] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(1, 15, 0x330F75C9, fields, 2); return &instance; } }; @@ -354,9 +649,19 @@ struct ArtifactAppearanceSetMeta { static DB2Meta const* Instance() { - static char const* types = "sshhbbbib"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(7, 9, 0x53DFED74, types, arraySizes, 8); + static DB2MetaField const fields[9] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(2, 9, 0xBB4DB4D3, fields, 8); return &instance; } }; @@ -365,9 +670,27 @@ struct ArtifactCategoryMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x21328475, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x484A6D55, fields, -1); + return &instance; + } +}; + +struct ArtifactItemToTransmogMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xD54CBBE1, fields, 0); return &instance; } }; @@ -376,9 +699,17 @@ struct ArtifactPowerMeta { static DB2Meta const* Instance() { - static char const* types = "fbbbbii"; - static uint8 const arraySizes[7] = { 2, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(5, 7, 0x45240818, types, arraySizes, 1); + static DB2MetaField const fields[7] = + { + { FT_FLOAT, 2, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(1, 7, 0x1F7637C8, fields, 2); return &instance; } }; @@ -387,9 +718,12 @@ struct ArtifactPowerLinkMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xE179618C, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xBB7E3584, fields, -1); return &instance; } }; @@ -398,9 +732,11 @@ struct ArtifactPowerPickerMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x2D6AF006, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 1, 0x253242BA, fields, -1); return &instance; } }; @@ -409,9 +745,15 @@ struct ArtifactPowerRankMeta { static DB2Meta const* Instance() { - static char const* types = "ifhbh"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xA87EACC4, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x7DC78F1E, fields, 4); return &instance; } }; @@ -420,9 +762,11 @@ struct ArtifactQuestXPMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 10 }; - static DB2Meta instance(-1, 1, 0x86397302, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 10, false }, + }; + static DB2Meta instance(-1, 1, 0x7E00C5B6, fields, -1); return &instance; } }; @@ -431,9 +775,15 @@ struct ArtifactTierMeta { static DB2Meta const* Instance() { - static char const* types = "iiiii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x1A5A50B9, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 5, 0xA47F6D9D, fields, -1); return &instance; } }; @@ -442,9 +792,15 @@ struct ArtifactUnlockMeta { static DB2Meta const* Instance() { - static char const* types = "hbiib"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x52839A77, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x40C54B9F, fields, 4); return &instance; } }; @@ -453,9 +809,105 @@ struct AuctionHouseMeta { static DB2Meta const* Instance() { - static char const* types = "shbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x51CFEEFF, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x61E641BA, fields, -1); + return &instance; + } +}; + +struct AzeriteEmpoweredItemMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x4078BECD, fields, -1); + return &instance; + } +}; + +struct AzeriteItemMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[1] = + { + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xDAC6A93C, fields, -1); + return &instance; + } +}; + +struct AzeriteItemMilestonePowerMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x7C4DC43D, fields, -1); + return &instance; + } +}; + +struct AzeritePowerMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0xE7FE46AC, fields, -1); + return &instance; + } +}; + +struct AzeritePowerSetMemberMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[5] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 5, 0xDB24A281, fields, 4); + return &instance; + } +}; + +struct AzeriteTierUnlockMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x2B04F059, fields, 3); return &instance; } }; @@ -464,9 +916,11 @@ struct BankBagSlotPricesMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xEA0AC2AA, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 1, 0x897A4D1E, fields, -1); return &instance; } }; @@ -475,9 +929,13 @@ struct BannedAddonsMeta { static DB2Meta const* Instance() { - static char const* types = "ssb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xF779B6E5, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xF4525F59, fields, -1); return &instance; } }; @@ -486,9 +944,18 @@ struct BarberShopStyleMeta { static DB2Meta const* Instance() { - static char const* types = "ssfbbbbi"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(7, 8, 0x670C71AE, types, arraySizes, -1); + static DB2MetaField const fields[8] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(2, 8, 0x2DD3952C, fields, -1); return &instance; } }; @@ -497,9 +964,17 @@ struct BattlePetAbilityMeta { static DB2Meta const* Instance() { - static char const* types = "ssihbbi"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x0F29944D, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 7, 0x4C3AF583, fields, -1); return &instance; } }; @@ -508,9 +983,17 @@ struct BattlePetAbilityEffectMeta { static DB2Meta const* Instance() { - static char const* types = "hhhhhbi"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 6, 1, 1 }; - static DB2Meta instance(6, 7, 0x5D30EBC5, types, arraySizes, 0); + static DB2MetaField const fields[7] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 6, true }, + }; + static DB2Meta instance(0, 7, 0xC850B549, fields, 1); return &instance; } }; @@ -519,9 +1002,13 @@ struct BattlePetAbilityStateMeta { static DB2Meta const* Instance() { - static char const* types = "ibh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x0E40A884, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x73DDAA6A, fields, 2); return &instance; } }; @@ -530,9 +1017,16 @@ struct BattlePetAbilityTurnMeta { static DB2Meta const* Instance() { - static char const* types = "hhbbbi"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(5, 6, 0xCB063F4F, types, arraySizes, 0); + static DB2MetaField const fields[6] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(0, 6, 0xF2218887, fields, 1); return &instance; } }; @@ -541,9 +1035,12 @@ struct BattlePetBreedQualityMeta { static DB2Meta const* Instance() { - static char const* types = "fb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xBDE74E1D, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x6CD46EB5, fields, -1); return &instance; } }; @@ -552,9 +1049,13 @@ struct BattlePetBreedStateMeta { static DB2Meta const* Instance() { - static char const* types = "hbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x68D5C999, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xC1A59CCF, fields, 2); return &instance; } }; @@ -563,9 +1064,14 @@ struct BattlePetDisplayOverrideMeta { static DB2Meta const* Instance() { - static char const* types = "iiib"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xDE5129EA, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x6F9CB092, fields, -1); return &instance; } }; @@ -574,9 +1080,13 @@ struct BattlePetEffectPropertiesMeta { static DB2Meta const* Instance() { - static char const* types = "shb"; - static uint8 const arraySizes[3] = { 6, 1, 6 }; - static DB2Meta instance(-1, 3, 0x56070751, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING_NOT_LOCALIZED, 6, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 6, false }, + }; + static DB2Meta instance(-1, 3, 0xA2D4ADF5, fields, -1); return &instance; } }; @@ -585,9 +1095,11 @@ struct BattlePetNPCTeamMemberMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x4423F004, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x9F2C8370, fields, -1); return &instance; } }; @@ -596,9 +1108,21 @@ struct BattlePetSpeciesMeta { static DB2Meta const* Instance() { - static char const* types = "ssiiihbbiii"; - static uint8 const arraySizes[11] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(8, 11, 0x8A3D97A4, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(2, 11, 0x78A6B928, fields, -1); return &instance; } }; @@ -607,9 +1131,13 @@ struct BattlePetSpeciesStateMeta { static DB2Meta const* Instance() { - static char const* types = "ibh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x8F958D5C, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x99EBACAA, fields, 2); return &instance; } }; @@ -618,9 +1146,14 @@ struct BattlePetSpeciesXAbilityMeta { static DB2Meta const* Instance() { - static char const* types = "hbbh"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x9EE27D6A, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x630BA932, fields, 3); return &instance; } }; @@ -629,9 +1162,13 @@ struct BattlePetStateMeta { static DB2Meta const* Instance() { - static char const* types = "shh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x1797AB4A, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xF9579FAC, fields, -1); return &instance; } }; @@ -640,9 +1177,17 @@ struct BattlePetVisualMeta { static DB2Meta const* Instance() { - static char const* types = "sihhhbb"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x097E0F6C, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 7, 0x284AF258, fields, -1); return &instance; } }; @@ -651,9 +1196,27 @@ struct BattlemasterListMeta { static DB2Meta const* Instance() { - static char const* types = "ssssihhhbbbbbbbbb"; - static uint8 const arraySizes[17] = { 1, 1, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 17, 0xD8AAA088, types, arraySizes, -1); + static DB2MetaField const fields[17] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 16, true }, + }; + static DB2Meta instance(-1, 17, 0x167284E8, fields, -1); return &instance; } }; @@ -662,9 +1225,20 @@ struct BeamEffectMeta { static DB2Meta const* Instance() { - static char const* types = "iffihhhhhh"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0x42C18603, types, arraySizes, -1); + static DB2MetaField const fields[10] = + { + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 10, 0x0E55B843, fields, -1); return &instance; } }; @@ -673,9 +1247,12 @@ struct BoneWindModifierModelMeta { static DB2Meta const* Instance() { - static char const* types = "ii"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x577A0772, types, arraySizes, 0); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x77B007CA, fields, 0); return &instance; } }; @@ -684,9 +1261,28 @@ struct BoneWindModifiersMeta { static DB2Meta const* Instance() { - static char const* types = "ff"; - static uint8 const arraySizes[2] = { 3, 1 }; - static DB2Meta instance(-1, 2, 0xB4E7449E, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_FLOAT, 3, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xC6F446CE, fields, -1); + return &instance; + } +}; + +struct BonusRollMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xF7A194FA, fields, -1); return &instance; } }; @@ -695,9 +1291,15 @@ struct BountyMeta { static DB2Meta const* Instance() { - static char const* types = "ihhib"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xE76E716C, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x797CCAA0, fields, 4); return &instance; } }; @@ -706,9 +1308,12 @@ struct BountySetMeta { static DB2Meta const* Instance() { - static char const* types = "hi"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x96B908A5, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xB67E3F83, fields, -1); return &instance; } }; @@ -717,9 +1322,21 @@ struct BroadcastTextMeta { static DB2Meta const* Instance() { - static char const* types = "sshhhbbii"; - static uint8 const arraySizes[9] = { 1, 1, 3, 3, 1, 1, 1, 1, 2 }; - static DB2Meta instance(-1, 9, 0x51BF0C33, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 2, false }, + { FT_SHORT, 3, false }, + { FT_SHORT, 3, false }, + }; + static DB2Meta instance(2, 11, 0x6318993B, fields, -1); return &instance; } }; @@ -728,9 +1345,11 @@ struct CameraEffectMeta { static DB2Meta const* Instance() { - static char const* types = "b"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xF6AB4622, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 1, 0xAB0FD78E, fields, -1); return &instance; } }; @@ -739,9 +1358,26 @@ struct CameraEffectEntryMeta { static DB2Meta const* Instance() { - static char const* types = "ffffffffhbbbbbbh"; - static uint8 const arraySizes[16] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 16, 0xC5105557, types, arraySizes, 15); + static DB2MetaField const fields[16] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 16, 0xED27DC2F, fields, 15); return &instance; } }; @@ -750,9 +1386,70 @@ struct CameraModeMeta { static DB2Meta const* Instance() { - static char const* types = "fffffhbbbbb"; - static uint8 const arraySizes[11] = { 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 11, 0xCDB6BC2F, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 11, 0xEE5489F4, fields, -1); + return &instance; + } +}; + +struct CampaignMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[7] = + { + { FT_STRING, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(3, 7, 0x2D49AABD, fields, -1); + return &instance; + } +}; + +struct CampaignXConditionMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x638FC159, fields, 2); + return &instance; + } +}; + +struct CampaignXQuestLineMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x7303E0F9, fields, 0); return &instance; } }; @@ -761,9 +1458,12 @@ struct CastableRaidBuffsMeta { static DB2Meta const* Instance() { - static char const* types = "ii"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x5BDD4028, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x3B349C01, fields, 1); return &instance; } }; @@ -772,9 +1472,25 @@ struct CelestialBodyMeta { static DB2Meta const* Instance() { - static char const* types = "iiiiiifffffffhi"; - static uint8 const arraySizes[15] = { 1, 1, 2, 1, 1, 2, 2, 2, 1, 2, 1, 3, 1, 1, 1 }; - static DB2Meta instance(14, 15, 0xD09BE31C, types, arraySizes, -1); + static DB2MetaField const fields[15] = + { + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 2, true }, + { FT_FLOAT, 2, true }, + { FT_INT, 2, true }, + { FT_FLOAT, 2, true }, + { FT_FLOAT, 2, true }, + }; + static DB2Meta instance(1, 15, 0xFC417DCA, fields, -1); return &instance; } }; @@ -783,9 +1499,15 @@ struct Cfg_CategoriesMeta { static DB2Meta const* Instance() { - static char const* types = "shbbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x705B82C8, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 5, 0xB6FEB874, fields, -1); return &instance; } }; @@ -794,9 +1516,14 @@ struct Cfg_ConfigsMeta { static DB2Meta const* Instance() { - static char const* types = "fhbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xC618392F, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0xA275539B, fields, -1); return &instance; } }; @@ -805,9 +1532,15 @@ struct Cfg_RegionsMeta { static DB2Meta const* Instance() { - static char const* types = "siihb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x9F4272BF, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x0125202F, fields, -1); return &instance; } }; @@ -816,9 +1549,12 @@ struct CharBaseInfoMeta { static DB2Meta const* Instance() { - static char const* types = "bb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x9E9939B8, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x10AA45F8, fields, -1); return &instance; } }; @@ -827,9 +1563,13 @@ struct CharBaseSectionMeta { static DB2Meta const* Instance() { - static char const* types = "bbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x4F08B5F3, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xF9D1C513, fields, -1); return &instance; } }; @@ -838,9 +1578,12 @@ struct CharComponentTextureLayoutsMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x0F515E34, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x48D8D7BC, fields, -1); return &instance; } }; @@ -849,9 +1592,17 @@ struct CharComponentTextureSectionsMeta { static DB2Meta const* Instance() { - static char const* types = "ihhhhbb"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0xCE76000F, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 7, 0xD6EDA743, fields, -1); return &instance; } }; @@ -860,9 +1611,20 @@ struct CharHairGeosetsMeta { static DB2Meta const* Instance() { - static char const* types = "ibbbbbbbbi"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0x33EB32D2, types, arraySizes, 1); + static DB2MetaField const fields[10] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 10, 0xE3732EA9, fields, 0); return &instance; } }; @@ -871,9 +1633,17 @@ struct CharSectionsMeta { static DB2Meta const* Instance() { - static char const* types = "ihbbbbb"; - static uint8 const arraySizes[7] = { 3, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0xE349E55B, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 3, true }, + }; + static DB2Meta instance(-1, 7, 0x273A7F6F, fields, -1); return &instance; } }; @@ -882,9 +1652,19 @@ struct CharShipmentMeta { static DB2Meta const* Instance() { - static char const* types = "iiiiihhbb"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 9, 0xE6D3C7C1, types, arraySizes, 5); + static DB2MetaField const fields[9] = + { + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 9, 0xD47EC921, fields, 0); return &instance; } }; @@ -893,9 +1673,26 @@ struct CharShipmentContainerMeta { static DB2Meta const* Instance() { - static char const* types = "ssihhhhhhbbbbbbi"; - static uint8 const arraySizes[16] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 16, 0x194896E3, types, arraySizes, -1); + static DB2MetaField const fields[16] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 16, 0x13048703, fields, -1); return &instance; } }; @@ -904,9 +1701,17 @@ struct CharStartOutfitMeta { static DB2Meta const* Instance() { - static char const* types = "iibbbbb"; - static uint8 const arraySizes[7] = { 24, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x0EEBEE24, types, arraySizes, 6); + static DB2MetaField const fields[7] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 24, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 7, 0x0F59DD96, fields, 6); return &instance; } }; @@ -915,9 +1720,14 @@ struct CharTitlesMeta { static DB2Meta const* Instance() { - static char const* types = "sshb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x7A58AA5F, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 4, 0x81B69C5F, fields, -1); return &instance; } }; @@ -926,9 +1736,15 @@ struct CharacterFaceBoneSetMeta { static DB2Meta const* Instance() { - static char const* types = "ibbbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x1C634076, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x3C6DE4D7, fields, 4); return &instance; } }; @@ -937,9 +1753,14 @@ struct CharacterFacialHairStylesMeta { static DB2Meta const* Instance() { - static char const* types = "ibbb"; - static uint8 const arraySizes[4] = { 5, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x47D79688, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 5, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xAA817A08, fields, -1); return &instance; } }; @@ -948,9 +1769,13 @@ struct CharacterLoadoutMeta { static DB2Meta const* Instance() { - static char const* types = "lbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x87B51673, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_LONG, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xA07F9727, fields, -1); return &instance; } }; @@ -959,9 +1784,12 @@ struct CharacterLoadoutItemMeta { static DB2Meta const* Instance() { - static char const* types = "ih"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x3C3D40B9, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xD892CDA9, fields, 0); return &instance; } }; @@ -970,9 +1798,21 @@ struct CharacterServiceInfoMeta { static DB2Meta const* Instance() { - static char const* types = "sssiiiiiiii"; - static uint8 const arraySizes[11] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 11, 0xADE120EF, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 11, 0xC263D77C, fields, -1); return &instance; } }; @@ -981,9 +1821,14 @@ struct ChatChannelsMeta { static DB2Meta const* Instance() { - static char const* types = "ssib"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x1A325E80, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 4, 0x113E92FA, fields, -1); return &instance; } }; @@ -992,9 +1837,12 @@ struct ChatProfanityMeta { static DB2Meta const* Instance() { - static char const* types = "sb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x328E1FE6, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xAF5F92A6, fields, -1); return &instance; } }; @@ -1003,9 +1851,16 @@ struct ChrClassRaceSexMeta { static DB2Meta const* Instance() { - static char const* types = "bbbiii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x5E29DFA1, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 6, 0x204BD561, fields, -1); return &instance; } }; @@ -1014,9 +1869,13 @@ struct ChrClassTitleMeta { static DB2Meta const* Instance() { - static char const* types = "ssb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xC155DB2C, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xA01D47C8, fields, -1); return &instance; } }; @@ -1025,9 +1884,13 @@ struct ChrClassUIDisplayMeta { static DB2Meta const* Instance() { - static char const* types = "bii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x59A95A73, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x3D58F88F, fields, -1); return &instance; } }; @@ -1036,9 +1899,13 @@ struct ChrClassVillainMeta { static DB2Meta const* Instance() { - static char const* types = "sbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xA6AC18CD, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x601C7CCD, fields, -1); return &instance; } }; @@ -1047,9 +1914,30 @@ struct ChrClassesMeta { static DB2Meta const* Instance() { - static char const* types = "sssssiiiiihhhbbbbbbi"; - static uint8 const arraySizes[20] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(19, 20, 0x6F7AB8E7, types, arraySizes, -1); + static DB2MetaField const fields[20] = + { + { FT_STRING, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(5, 20, 0x2CD115AC, fields, -1); return &instance; } }; @@ -1058,9 +1946,12 @@ struct ChrClassesXPowerTypesMeta { static DB2Meta const* Instance() { - static char const* types = "bb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xAF977B23, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x6DE888E7, fields, 1); return &instance; } }; @@ -1069,9 +1960,17 @@ struct ChrCustomizationMeta { static DB2Meta const* Instance() { - static char const* types = "siiiii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 3, 1 }; - static DB2Meta instance(-1, 6, 0x71833CE5, types, arraySizes, 5); + static DB2MetaField const fields[7] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 3, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 7, 0xC29562A3, fields, 6); return &instance; } }; @@ -1080,9 +1979,56 @@ struct ChrRacesMeta { static DB2Meta const* Instance() { - static char const* types = "ssssssiiiiiffiiihhhhbbbbbbbbbbiiiiiiii"; - static uint8 const arraySizes[38] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3 }; - static DB2Meta instance(30, 38, 0x51C511F9, types, arraySizes, -1); + static DB2MetaField const fields[46] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_INT, 1, true }, + { FT_INT, 3, false }, + { FT_INT, 3, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(6, 46, 0xC8BCDC89, fields, -1); return &instance; } }; @@ -1091,9 +2037,23 @@ struct ChrSpecializationMeta { static DB2Meta const* Instance() { - static char const* types = "sssibbbbbiiii"; - static uint8 const arraySizes[13] = { 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(9, 13, 0x3D86B8F7, types, arraySizes, 4); + static DB2MetaField const fields[13] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 2, true }, + }; + static DB2Meta instance(3, 13, 0xFF9DD5DD, fields, 4); return &instance; } }; @@ -1102,9 +2062,13 @@ struct ChrUpgradeBucketMeta { static DB2Meta const* Instance() { - static char const* types = "hib"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(1, 3, 0xACF64A80, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(0, 3, 0x81B7C74C, fields, 2); return &instance; } }; @@ -1113,9 +2077,12 @@ struct ChrUpgradeBucketSpellMeta { static DB2Meta const* Instance() { - static char const* types = "ih"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xDF939031, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xC665F469, fields, 1); return &instance; } }; @@ -1124,9 +2091,14 @@ struct ChrUpgradeTierMeta { static DB2Meta const* Instance() { - static char const* types = "sbbi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(3, 4, 0x2C87937D, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(1, 4, 0xEC517FDD, fields, -1); return &instance; } }; @@ -1135,9 +2107,14 @@ struct CinematicCameraMeta { static DB2Meta const* Instance() { - static char const* types = "iffi"; - static uint8 const arraySizes[4] = { 1, 3, 1, 1 }; - static DB2Meta instance(-1, 4, 0x0062B0F4, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x20C5E540, fields, -1); return &instance; } }; @@ -1146,9 +2123,25 @@ struct CinematicSequencesMeta { static DB2Meta const* Instance() { - static char const* types = "ih"; - static uint8 const arraySizes[2] = { 1, 8 }; - static DB2Meta instance(-1, 2, 0x470FDA8C, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, false }, + { FT_SHORT, 8, false }, + }; + static DB2Meta instance(-1, 2, 0x6A232AD4, fields, -1); + return &instance; + } +}; + +struct ClientSceneEffectMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[1] = + { + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x00EE4486, fields, -1); return &instance; } }; @@ -1157,9 +2150,37 @@ struct CloakDampeningMeta { static DB2Meta const* Instance() { - static char const* types = "fffffff"; - static uint8 const arraySizes[7] = { 5, 5, 2, 2, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0xB2DF7F2A, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 5, true }, + { FT_FLOAT, 5, true }, + { FT_FLOAT, 2, true }, + { FT_FLOAT, 2, true }, + }; + static DB2Meta instance(-1, 7, 0xF7C03F6E, fields, -1); + return &instance; + } +}; + +struct CloneEffectMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[8] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 8, 0x2F946F74, fields, -1); return &instance; } }; @@ -1168,9 +2189,21 @@ struct CombatConditionMeta { static DB2Meta const* Instance() { - static char const* types = "hhhhhbbbbbb"; - static uint8 const arraySizes[11] = { 1, 1, 1, 2, 2, 2, 2, 1, 2, 2, 1 }; - static DB2Meta instance(-1, 11, 0x28D253C6, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 2, false }, + { FT_BYTE, 2, false }, + { FT_BYTE, 2, false }, + { FT_SHORT, 2, false }, + { FT_BYTE, 2, false }, + { FT_BYTE, 2, false }, + }; + static DB2Meta instance(-1, 11, 0x75A29044, fields, -1); return &instance; } }; @@ -1179,9 +2212,12 @@ struct CommentatorStartLocationMeta { static DB2Meta const* Instance() { - static char const* types = "fi"; - static uint8 const arraySizes[2] = { 3, 1 }; - static DB2Meta instance(-1, 2, 0xEFD540EF, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_FLOAT, 3, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xF552D58F, fields, -1); return &instance; } }; @@ -1190,9 +2226,29 @@ struct CommentatorTrackedCooldownMeta { static DB2Meta const* Instance() { - static char const* types = "bbih"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x84985168, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x3A1476FC, fields, 3); + return &instance; + } +}; + +struct CommunityIconMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 3, 0x7E19DEAD, fields, -1); return &instance; } }; @@ -1201,9 +2257,14 @@ struct ComponentModelFileDataMeta { static DB2Meta const* Instance() { - static char const* types = "bbbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x25BB55A7, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 4, 0x0F90AFAF, fields, -1); return &instance; } }; @@ -1212,9 +2273,13 @@ struct ComponentTextureFileDataMeta { static DB2Meta const* Instance() { - static char const* types = "bbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x50C58D4F, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x263AACE3, fields, -1); return &instance; } }; @@ -1223,9 +2288,30 @@ struct ConfigurationWarningMeta { static DB2Meta const* Instance() { - static char const* types = "si"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x0B350390, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x99BCBA2D, fields, -1); + return &instance; + } +}; + +struct ContentTuningMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[6] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 6, 0xD1A210D1, fields, -1); return &instance; } }; @@ -1234,9 +2320,49 @@ struct ContributionMeta { static DB2Meta const* Instance() { - static char const* types = "ssiiii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 4, 1 }; - static DB2Meta instance(2, 6, 0x8EDF6090, types, arraySizes, 3); + static DB2MetaField const fields[7] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 4, true }, + }; + static DB2Meta instance(2, 7, 0x37C49135, fields, 3); + return &instance; + } +}; + +struct ContributionStyleMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[7] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 7, 0x799AE511, fields, -1); + return &instance; + } +}; + +struct ContributionStyleContainerMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[1] = + { + { FT_INT, 5, true }, + }; + static DB2Meta instance(-1, 1, 0x55DAA69B, fields, -1); return &instance; } }; @@ -1245,9 +2371,18 @@ struct ConversationLineMeta { static DB2Meta const* Instance() { - static char const* types = "iiihhbbb"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 8, 0x032B137B, types, arraySizes, -1); + static DB2MetaField const fields[8] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 8, 0x227B5003, fields, -1); return &instance; } }; @@ -1256,9 +2391,21 @@ struct CreatureMeta { static DB2Meta const* Instance() { - static char const* types = "ssssiiifbbbb"; - static uint8 const arraySizes[12] = { 1, 1, 1, 1, 3, 1, 4, 4, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 12, 0xCFB508A9, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 4, true }, + { FT_FLOAT, 4, true }, + { FT_INT, 3, true }, + }; + static DB2Meta instance(-1, 11, 0x0D492BF3, fields, -1); return &instance; } }; @@ -1267,9 +2414,17 @@ struct CreatureDifficultyMeta { static DB2Meta const* Instance() { - static char const* types = "ihbbbi"; - static uint8 const arraySizes[6] = { 7, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x4291EEC6, types, arraySizes, 5); + static DB2MetaField const fields[7] = + { + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 7, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 7, 0xD344A642, fields, 6); return &instance; } }; @@ -1278,9 +2433,12 @@ struct CreatureDispXUiCameraMeta { static DB2Meta const* Instance() { - static char const* types = "ih"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x6E0E7C15, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xD3D075FD, fields, -1); return &instance; } }; @@ -1289,9 +2447,35 @@ struct CreatureDisplayInfoMeta { static DB2Meta const* Instance() { - static char const* types = "ifhhbbbiibhfibhihhbifii"; - static uint8 const arraySizes[23] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3 }; - static DB2Meta instance(0, 23, 0x406268DF, types, arraySizes, -1); + static DB2MetaField const fields[25] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 3, true }, + }; + static DB2Meta instance(0, 25, 0x613413D1, fields, -1); return &instance; } }; @@ -1300,9 +2484,25 @@ struct CreatureDisplayInfoCondMeta { static DB2Meta const* Instance() { - static char const* types = "liiibbiiiiiiiii"; - static uint8 const arraySizes[15] = { 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1 }; - static DB2Meta instance(-1, 15, 0x26CD44AB, types, arraySizes, 14); + static DB2MetaField const fields[15] = + { + { FT_LONG, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 2, true }, + { FT_INT, 2, true }, + { FT_INT, 2, true }, + { FT_INT, 3, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 15, 0x596B4605, fields, 14); return &instance; } }; @@ -1311,9 +2511,14 @@ struct CreatureDisplayInfoEvtMeta { static DB2Meta const* Instance() { - static char const* types = "iibi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x3FEF69BB, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0x16C6EC13, fields, 3); return &instance; } }; @@ -1322,9 +2527,37 @@ struct CreatureDisplayInfoExtraMeta { static DB2Meta const* Instance() { - static char const* types = "iibbbbbbbbbb"; - static uint8 const arraySizes[12] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1 }; - static DB2Meta instance(-1, 12, 0x6DF98EF6, types, arraySizes, -1); + static DB2MetaField const fields[12] = + { + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 3, false }, + }; + static DB2Meta instance(-1, 12, 0x89E31B13, fields, -1); + return &instance; + } +}; + +struct CreatureDisplayInfoGeosetDataMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x13350FA0, fields, 2); return &instance; } }; @@ -1333,9 +2566,16 @@ struct CreatureDisplayInfoTrnMeta { static DB2Meta const* Instance() { - static char const* types = "ifiiii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x8E687740, types, arraySizes, 5); + static DB2MetaField const fields[6] = + { + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 6, 0xC3E28858, fields, 5); return &instance; } }; @@ -1344,9 +2584,19 @@ struct CreatureFamilyMeta { static DB2Meta const* Instance() { - static char const* types = "sffihhbbb"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 2, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 9, 0xE2DC5126, types, arraySizes, -1); + static DB2MetaField const fields[9] = + { + { FT_STRING, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 2, true }, + }; + static DB2Meta instance(-1, 9, 0x9D14B492, fields, -1); return &instance; } }; @@ -1355,9 +2605,19 @@ struct CreatureImmunitiesMeta { static DB2Meta const* Instance() { - static char const* types = "ibbbbbiii"; - static uint8 const arraySizes[9] = { 2, 1, 1, 1, 1, 1, 1, 8, 16 }; - static DB2Meta instance(-1, 9, 0x2D20050B, types, arraySizes, -1); + static DB2MetaField const fields[9] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 2, true }, + { FT_INT, 9, false }, + { FT_INT, 16, false }, + }; + static DB2Meta instance(-1, 9, 0x36D9340F, fields, -1); return &instance; } }; @@ -1366,9 +2626,38 @@ struct CreatureModelDataMeta { static DB2Meta const* Instance() { - static char const* types = "ffffffffffffffffffiiiiiiiiii"; - static uint8 const arraySizes[28] = { 1, 1, 1, 1, 1, 1, 1, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 28, 0x983BD312, types, arraySizes, -1); + static DB2MetaField const fields[28] = + { + { FT_FLOAT, 6, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 28, 0xF61D550A, fields, -1); return &instance; } }; @@ -1377,9 +2666,11 @@ struct CreatureMovementInfoMeta { static DB2Meta const* Instance() { - static char const* types = "f"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x39F710E3, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x31BE6397, fields, -1); return &instance; } }; @@ -1388,9 +2679,47 @@ struct CreatureSoundDataMeta { static DB2Meta const* Instance() { - static char const* types = "ffbiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii"; - static uint8 const arraySizes[37] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 4 }; - static DB2Meta instance(-1, 37, 0x7C3C39B9, types, arraySizes, -1); + static DB2MetaField const fields[37] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 5, false }, + { FT_INT, 4, false }, + }; + static DB2Meta instance(-1, 37, 0xA58BDB91, fields, -1); return &instance; } }; @@ -1399,9 +2728,12 @@ struct CreatureTypeMeta { static DB2Meta const* Instance() { - static char const* types = "sb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x7BA9D2F8, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x218D575A, fields, -1); return &instance; } }; @@ -1410,9 +2742,30 @@ struct CreatureXContributionMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(0, 3, 0x3448DF58, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 3, 0x2DC69C04, fields, 2); + return &instance; + } +}; + +struct CreatureXDisplayInfoMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[5] = + { + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x44D147A6, fields, 4); return &instance; } }; @@ -1421,9 +2774,21 @@ struct CriteriaMeta { static DB2Meta const* Instance() { - static char const* types = "iiiihhbbbbb"; - static uint8 const arraySizes[11] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 11, 0xA87A5BB9, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 11, 0x754DDF45, fields, -1); return &instance; } }; @@ -1432,9 +2797,17 @@ struct CriteriaTreeMeta { static DB2Meta const* Instance() { - static char const* types = "sihbiii"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x0A1B99C2, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 7, 0xC926CF94, fields, -1); return &instance; } }; @@ -1443,9 +2816,12 @@ struct CriteriaTreeXEffectMeta { static DB2Meta const* Instance() { - static char const* types = "hi"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x929D9B0C, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x80C700F5, fields, 1); return &instance; } }; @@ -1454,9 +2830,33 @@ struct CurrencyCategoryMeta { static DB2Meta const* Instance() { - static char const* types = "sbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xC3735D76, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x0DB1F53C, fields, -1); + return &instance; + } +}; + +struct CurrencyContainerMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[8] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 8, 0xAC6030BF, fields, 7); return &instance; } }; @@ -1465,9 +2865,21 @@ struct CurrencyTypesMeta { static DB2Meta const* Instance() { - static char const* types = "ssiiibbbii"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0x6CC25CBF, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 11, 0x998F0AAA, fields, -1); return &instance; } }; @@ -1476,9 +2888,12 @@ struct CurveMeta { static DB2Meta const* Instance() { - static char const* types = "bb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x17EA5154, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x4E6F1184, fields, -1); return &instance; } }; @@ -1487,9 +2902,13 @@ struct CurvePointMeta { static DB2Meta const* Instance() { - static char const* types = "fhb"; - static uint8 const arraySizes[3] = { 2, 1, 1 }; - static DB2Meta instance(-1, 3, 0xF36752EB, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_FLOAT, 2, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xFA003217, fields, -1); return &instance; } }; @@ -1498,9 +2917,14 @@ struct DeathThudLookupsMeta { static DB2Meta const* Instance() { - static char const* types = "bbii"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xD469085C, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x3BF7542C, fields, -1); return &instance; } }; @@ -1509,9 +2933,28 @@ struct DecalPropertiesMeta { static DB2Meta const* Instance() { - static char const* types = "iiffffffffbbiiiii"; - static uint8 const arraySizes[17] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(0, 17, 0xDD48C72A, types, arraySizes, -1); + static DB2MetaField const fields[18] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(0, 18, 0xB11F3B40, fields, -1); return &instance; } }; @@ -1520,9 +2963,12 @@ struct DeclinedWordMeta { static DB2Meta const* Instance() { - static char const* types = "si"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(1, 2, 0x3FF5EC3E, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(1, 2, 0x10D7C6A6, fields, -1); return &instance; } }; @@ -1531,9 +2977,13 @@ struct DeclinedWordCasesMeta { static DB2Meta const* Instance() { - static char const* types = "sbi"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x821A20A9, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x3E19B9C5, fields, 2); return &instance; } }; @@ -1542,9 +2992,32 @@ struct DestructibleModelDataMeta { static DB2Meta const* Instance() { - static char const* types = "hhhhhbbbbbbbbbbbbbbbbb"; - static uint8 const arraySizes[22] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 22, 0x1092C9AF, types, arraySizes, -1); + static DB2MetaField const fields[22] = + { + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 22, 0xF245BA93, fields, -1); return &instance; } }; @@ -1553,9 +3026,12 @@ struct DeviceBlacklistMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xD956413D, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x2A350905, fields, -1); return &instance; } }; @@ -1564,9 +3040,13 @@ struct DeviceDefaultSettingsMeta { static DB2Meta const* Instance() { - static char const* types = "hhb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x90CFEC8C, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x2AB8A38C, fields, -1); return &instance; } }; @@ -1575,9 +3055,23 @@ struct DifficultyMeta { static DB2Meta const* Instance() { - static char const* types = "shhhbbbbbbbbb"; - static uint8 const arraySizes[13] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 13, 0x92302BB8, types, arraySizes, -1); + static DB2MetaField const fields[13] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 13, 0x29FC158C, fields, -1); return &instance; } }; @@ -1586,9 +3080,24 @@ struct DissolveEffectMeta { static DB2Meta const* Instance() { - static char const* types = "ffffffffbbiiii"; - static uint8 const arraySizes[14] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 14, 0x566413E7, types, arraySizes, -1); + static DB2MetaField const fields[14] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 14, 0x77C510EC, fields, -1); return &instance; } }; @@ -1597,9 +3106,17 @@ struct DriverBlacklistMeta { static DB2Meta const* Instance() { - static char const* types = "iihbbbb"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x1466ACAD, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 7, 0x88C28C05, fields, -1); return &instance; } }; @@ -1608,130 +3125,218 @@ struct DungeonEncounterMeta { static DB2Meta const* Instance() { - static char const* types = "sihbbbiii"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(6, 9, 0xB04A2596, types, arraySizes, 2); + static DB2MetaField const fields[9] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(1, 9, 0x6E5C2332, fields, 2); return &instance; } }; -struct DungeonMapMeta +struct DurabilityCostsMeta { static DB2Meta const* Instance() { - static char const* types = "ffhhbbbi"; - static uint8 const arraySizes[8] = { 2, 2, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(7, 8, 0xB5A245F4, types, arraySizes, 2); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 21, false }, + { FT_SHORT, 8, false }, + }; + static DB2Meta instance(-1, 2, 0xBB493F52, fields, -1); return &instance; } }; -struct DungeonMapChunkMeta +struct DurabilityQualityMeta { static DB2Meta const* Instance() { - static char const* types = "fihhh"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x7927A3A7, types, arraySizes, 2); + static DB2MetaField const fields[1] = + { + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xCFF4EEC9, fields, -1); return &instance; } }; -struct DurabilityCostsMeta +struct EdgeGlowEffectMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 21, 8 }; - static DB2Meta instance(-1, 2, 0x8447966A, types, arraySizes, -1); + static DB2MetaField const fields[13] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 13, 0xCBCC7336, fields, -1); return &instance; } }; -struct DurabilityQualityMeta +struct EmotesMeta { static DB2Meta const* Instance() { - static char const* types = "f"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x6F64793D, types, arraySizes, -1); + static DB2MetaField const fields[9] = + { + { FT_LONG, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 9, 0xA909E182, fields, -1); return &instance; } }; -struct EdgeGlowEffectMeta +struct EmotesTextMeta { static DB2Meta const* Instance() { - static char const* types = "ffffffffffbii"; - static uint8 const arraySizes[13] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 13, 0x083BF2C4, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xE255C6B0, fields, -1); return &instance; } }; -struct EmotesMeta +struct EmotesTextDataMeta { static DB2Meta const* Instance() { - static char const* types = "lsiihbiii"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 9, 0x14467F27, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x460E8F09, fields, 2); return &instance; } }; -struct EmotesTextMeta +struct EmotesTextSoundMeta { static DB2Meta const* Instance() { - static char const* types = "sh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xE85AFA10, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x3A15105C, fields, 4); return &instance; } }; -struct EmotesTextDataMeta +struct EnvironmentalDamageMeta { static DB2Meta const* Instance() { - static char const* types = "sbh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x0E19BCF1, types, arraySizes, 2); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x448422B4, fields, -1); return &instance; } }; -struct EmotesTextSoundMeta +struct ExhaustionMeta { static DB2Meta const* Instance() { - static char const* types = "bbbih"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x6DFAF9BC, types, arraySizes, 4); + static DB2MetaField const fields[8] = + { + { FT_STRING, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(2, 8, 0xF0F48BB5, fields, -1); return &instance; } }; -struct EnvironmentalDamageMeta +struct ExpectedStatMeta { static DB2Meta const* Instance() { - static char const* types = "hb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xC4552C14, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 11, 0xF0E61875, fields, 10); return &instance; } }; -struct ExhaustionMeta +struct ExpectedStatModMeta { static DB2Meta const* Instance() { - static char const* types = "ssiffffi"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(7, 8, 0xE6E16045, types, arraySizes, -1); + static DB2MetaField const fields[9] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 9, 0xEA56E599, fields, -1); return &instance; } }; @@ -1740,9 +3345,26 @@ struct FactionMeta { static DB2Meta const* Instance() { - static char const* types = "lssiifihhhhhbbbb"; - static uint8 const arraySizes[16] = { 4, 1, 1, 1, 4, 2, 4, 1, 4, 4, 1, 1, 2, 1, 1, 1 }; - static DB2Meta instance(3, 16, 0x6BFE8737, types, arraySizes, -1); + static DB2MetaField const fields[16] = + { + { FT_LONG, 4, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 4, true }, + { FT_SHORT, 4, false }, + { FT_INT, 4, true }, + { FT_INT, 4, true }, + { FT_FLOAT, 2, true }, + { FT_BYTE, 2, false }, + }; + static DB2Meta instance(3, 16, 0x86FE2D69, fields, -1); return &instance; } }; @@ -1751,9 +3373,16 @@ struct FactionGroupMeta { static DB2Meta const* Instance() { - static char const* types = "ssibii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(2, 6, 0x7A7F9A51, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(2, 6, 0xB9B4369B, fields, -1); return &instance; } }; @@ -1762,9 +3391,17 @@ struct FactionTemplateMeta { static DB2Meta const* Instance() { - static char const* types = "hhhhbbb"; - static uint8 const arraySizes[7] = { 1, 1, 4, 4, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x6F1D2135, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 4, false }, + { FT_SHORT, 4, false }, + }; + static DB2Meta instance(-1, 7, 0xD7143473, fields, -1); return &instance; } }; @@ -1773,9 +3410,13 @@ struct FootprintTexturesMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xFD6FF285, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xF82F1359, fields, -1); return &instance; } }; @@ -1784,9 +3425,14 @@ struct FootstepTerrainLookupMeta { static DB2Meta const* Instance() { - static char const* types = "hbii"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x454895AE, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xC70AACC6, fields, -1); return &instance; } }; @@ -1795,9 +3441,13 @@ struct FriendshipRepReactionMeta { static DB2Meta const* Instance() { - static char const* types = "shb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x9C412E5B, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x8B096063, fields, 1); return &instance; } }; @@ -1806,9 +3456,14 @@ struct FriendshipReputationMeta { static DB2Meta const* Instance() { - static char const* types = "sihi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(3, 4, 0x406EE0AB, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(1, 4, 0xECCE459C, fields, -1); return &instance; } }; @@ -1817,9 +3472,38 @@ struct FullScreenEffectMeta { static DB2Meta const* Instance() { - static char const* types = "fffffffffffffffffffffffiiii"; - static uint8 const arraySizes[27] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 27, 0x5CBF1D1B, types, arraySizes, -1); + static DB2MetaField const fields[28] = + { + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 28, 0x9854A6AC, fields, -1); return &instance; } }; @@ -1828,9 +3512,13 @@ struct GMSurveyAnswersMeta { static DB2Meta const* Instance() { - static char const* types = "sbi"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x422747F6, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xDE59EC07, fields, 2); return &instance; } }; @@ -1839,9 +3527,11 @@ struct GMSurveyCurrentSurveyMeta { static DB2Meta const* Instance() { - static char const* types = "b"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x617205BF, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 1, 0xAD0D7453, fields, -1); return &instance; } }; @@ -1850,9 +3540,11 @@ struct GMSurveyQuestionsMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x9D852FDC, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x12B097E1, fields, -1); return &instance; } }; @@ -1861,9 +3553,11 @@ struct GMSurveySurveysMeta { static DB2Meta const* Instance() { - static char const* types = "b"; - static uint8 const arraySizes[1] = { 15 }; - static DB2Meta instance(-1, 1, 0x17FEF812, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_BYTE, 15, false }, + }; + static DB2Meta instance(-1, 1, 0x24BB51BE, fields, -1); return &instance; } }; @@ -1872,9 +3566,12 @@ struct GameObjectArtKitMeta { static DB2Meta const* Instance() { - static char const* types = "ii"; - static uint8 const arraySizes[2] = { 1, 3 }; - static DB2Meta instance(-1, 2, 0x6F65BC41, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, true }, + { FT_INT, 3, true }, + }; + static DB2Meta instance(-1, 2, 0xECF16719, fields, -1); return &instance; } }; @@ -1883,9 +3580,14 @@ struct GameObjectDiffAnimMapMeta { static DB2Meta const* Instance() { - static char const* types = "hbbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x89A617CF, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xDB3508F3, fields, 3); return &instance; } }; @@ -1894,9 +3596,15 @@ struct GameObjectDisplayInfoMeta { static DB2Meta const* Instance() { - static char const* types = "ifffh"; - static uint8 const arraySizes[5] = { 1, 6, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x9F2098D1, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_FLOAT, 6, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x7A816799, fields, -1); return &instance; } }; @@ -1905,9 +3613,13 @@ struct GameObjectDisplayInfoXSoundKitMeta { static DB2Meta const* Instance() { - static char const* types = "bii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x4BBA66F2, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x456E4627, fields, 2); return &instance; } }; @@ -1916,9 +3628,22 @@ struct GameObjectsMeta { static DB2Meta const* Instance() { - static char const* types = "sfffihhhhbbi"; - static uint8 const arraySizes[12] = { 1, 3, 4, 1, 8, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(11, 12, 0x597E8643, types, arraySizes, 5); + static DB2MetaField const fields[12] = + { + { FT_STRING, 1, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 4, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 8, true }, + }; + static DB2Meta instance(3, 12, 0x0995B956, fields, 4); return &instance; } }; @@ -1927,9 +3652,14 @@ struct GameTipsMeta { static DB2Meta const* Instance() { - static char const* types = "shhb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x547E3F0F, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x768EB877, fields, -1); return &instance; } }; @@ -1938,9 +3668,18 @@ struct GarrAbilityMeta { static DB2Meta const* Instance() { - static char const* types = "ssihhbbi"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(7, 8, 0x5DF95DBD, types, arraySizes, -1); + static DB2MetaField const fields[8] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(2, 8, 0x8256E595, fields, -1); return &instance; } }; @@ -1949,9 +3688,11 @@ struct GarrAbilityCategoryMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x96663ABF, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x9F2C8370, fields, -1); return &instance; } }; @@ -1960,9 +3701,22 @@ struct GarrAbilityEffectMeta { static DB2Meta const* Instance() { - static char const* types = "fffihbbbbbbi"; - static uint8 const arraySizes[12] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(11, 12, 0xE6A6CB99, types, arraySizes, 4); + static DB2MetaField const fields[12] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(0, 12, 0x682EE0E1, fields, 1); return &instance; } }; @@ -1971,9 +3725,34 @@ struct GarrBuildingMeta { static DB2Meta const* Instance() { - static char const* types = "ssssiiihhhhhhhhbbbbbbiii"; - static uint8 const arraySizes[24] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 24, 0x200F9858, types, arraySizes, -1); + static DB2MetaField const fields[24] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 24, 0x158D48D4, fields, -1); return &instance; } }; @@ -1982,9 +3761,15 @@ struct GarrBuildingDoodadSetMeta { static DB2Meta const* Instance() { - static char const* types = "bbbbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x2A861C7F, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x9A6DE309, fields, -1); return &instance; } }; @@ -1993,9 +3778,15 @@ struct GarrBuildingPlotInstMeta { static DB2Meta const* Instance() { - static char const* types = "fhhbi"; - static uint8 const arraySizes[5] = { 2, 1, 1, 1, 1 }; - static DB2Meta instance(4, 5, 0xF45B6227, types, arraySizes, 3); + static DB2MetaField const fields[5] = + { + { FT_FLOAT, 2, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(1, 5, 0xFB61E627, fields, 2); return &instance; } }; @@ -2004,9 +3795,18 @@ struct GarrClassSpecMeta { static DB2Meta const* Instance() { - static char const* types = "ssshhbbi"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(7, 8, 0x194CD478, types, arraySizes, -1); + static DB2MetaField const fields[8] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(3, 8, 0x644E1AC4, fields, -1); return &instance; } }; @@ -2015,9 +3815,16 @@ struct GarrClassSpecPlayerCondMeta { static DB2Meta const* Instance() { - static char const* types = "sibiii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x06936172, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 6, 0x561DEBFE, fields, -1); return &instance; } }; @@ -2026,9 +3833,17 @@ struct GarrEncounterMeta { static DB2Meta const* Instance() { - static char const* types = "siffiii"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(5, 7, 0x63EF121A, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(1, 7, 0xD193D559, fields, -1); return &instance; } }; @@ -2037,9 +3852,13 @@ struct GarrEncounterSetXEncounterMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(0, 3, 0x3AA64423, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(0, 3, 0xCA7143E7, fields, 2); return &instance; } }; @@ -2048,9 +3867,13 @@ struct GarrEncounterXMechanicMeta { static DB2Meta const* Instance() { - static char const* types = "bbh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x97080E17, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x0960A66B, fields, 2); return &instance; } }; @@ -2059,9 +3882,14 @@ struct GarrFollItemSetMemberMeta { static DB2Meta const* Instance() { - static char const* types = "ihbh"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xCA1C4CBF, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x9166B16F, fields, 3); return &instance; } }; @@ -2070,9 +3898,14 @@ struct GarrFollSupportSpellMeta { static DB2Meta const* Instance() { - static char const* types = "iibi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xB7DBA2D1, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0xDB563FC8, fields, 3); return &instance; } }; @@ -2081,9 +3914,42 @@ struct GarrFollowerMeta { static DB2Meta const* Instance() { - static char const* types = "sssiiiiiihhhhhhbbbbbbbbbbbbbbbbi"; - static uint8 const arraySizes[32] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(31, 32, 0xAAB75E04, types, arraySizes, -1); + static DB2MetaField const fields[32] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(3, 32, 0x7C5C19F1, fields, -1); return &instance; } }; @@ -2092,9 +3958,14 @@ struct GarrFollowerLevelXPMeta { static DB2Meta const* Instance() { - static char const* types = "hhbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x1ED485E2, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xABD178B2, fields, -1); return &instance; } }; @@ -2103,9 +3974,17 @@ struct GarrFollowerQualityMeta { static DB2Meta const* Instance() { - static char const* types = "ihbbbbi"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0xAFF4CF7E, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 7, 0xCAE87042, fields, -1); return &instance; } }; @@ -2114,9 +3993,12 @@ struct GarrFollowerSetXFollowerMeta { static DB2Meta const* Instance() { - static char const* types = "ii"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xDB0E0A17, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x621C60FF, fields, 1); return &instance; } }; @@ -2125,9 +4007,17 @@ struct GarrFollowerTypeMeta { static DB2Meta const* Instance() { - static char const* types = "hbbbbbb"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0xD676FBC0, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 7, 0xB4B34EF0, fields, -1); return &instance; } }; @@ -2136,9 +4026,16 @@ struct GarrFollowerUICreatureMeta { static DB2Meta const* Instance() { - static char const* types = "ifbbbh"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x7E275E96, types, arraySizes, 5); + static DB2MetaField const fields[6] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 6, 0x93A1FAA6, fields, 5); return &instance; } }; @@ -2147,9 +4044,14 @@ struct GarrFollowerXAbilityMeta { static DB2Meta const* Instance() { - static char const* types = "hbh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x996447F1, types, arraySizes, 2); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x590C69F7, fields, 3); return &instance; } }; @@ -2158,9 +4060,15 @@ struct GarrItemLevelUpgradeDataMeta { static DB2Meta const* Instance() { - static char const* types = "iiiii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(0, 5, 0x069F44E5, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 5, 0x6B8723A1, fields, -1); return &instance; } }; @@ -2169,9 +4077,13 @@ struct GarrMechanicMeta { static DB2Meta const* Instance() { - static char const* types = "fbi"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xAB49DA61, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xA83BF5A9, fields, -1); return &instance; } }; @@ -2180,9 +4092,13 @@ struct GarrMechanicSetXMechanicMeta { static DB2Meta const* Instance() { - static char const* types = "bii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(1, 3, 0x59514F7B, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(0, 3, 0xFC7F16A3, fields, 2); return &instance; } }; @@ -2191,9 +4107,15 @@ struct GarrMechanicTypeMeta { static DB2Meta const* Instance() { - static char const* types = "ssibi"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(4, 5, 0x6FEA569F, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(2, 5, 0x05F19FE7, fields, -1); return &instance; } }; @@ -2202,9 +4124,39 @@ struct GarrMissionMeta { static DB2Meta const* Instance() { - static char const* types = "sssiiffhhhbbbbbbbbbiiiiiiiiii"; - static uint8 const arraySizes[29] = { 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(19, 29, 0xDDD70490, types, arraySizes, 28); + static DB2MetaField const fields[29] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_FLOAT, 2, true }, + { FT_FLOAT, 2, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(5, 29, 0x00777205, fields, 28); return &instance; } }; @@ -2213,9 +4165,12 @@ struct GarrMissionTextureMeta { static DB2Meta const* Instance() { - static char const* types = "fh"; - static uint8 const arraySizes[2] = { 2, 1 }; - static DB2Meta instance(-1, 2, 0x3071301C, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_FLOAT, 2, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x0D378464, fields, -1); return &instance; } }; @@ -2224,9 +4179,13 @@ struct GarrMissionTypeMeta { static DB2Meta const* Instance() { - static char const* types = "shh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xA289655E, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x3FC87149, fields, -1); return &instance; } }; @@ -2235,9 +4194,15 @@ struct GarrMissionXEncounterMeta { static DB2Meta const* Instance() { - static char const* types = "biiii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(1, 5, 0xBCB016C6, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 5, 0x539B5B1B, fields, 4); return &instance; } }; @@ -2246,9 +4211,13 @@ struct GarrMissionXFollowerMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x1EBABA29, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xFB9C7E3D, fields, 2); return &instance; } }; @@ -2257,9 +4226,15 @@ struct GarrMssnBonusAbilityMeta { static DB2Meta const* Instance() { - static char const* types = "fihbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x35F5AE92, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x91DD4CE6, fields, -1); return &instance; } }; @@ -2268,9 +4243,17 @@ struct GarrPlotMeta { static DB2Meta const* Instance() { - static char const* types = "siibbbi"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 2 }; - static DB2Meta instance(-1, 7, 0xE12049E0, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 2, false }, + }; + static DB2Meta instance(-1, 7, 0x3897880E, fields, -1); return &instance; } }; @@ -2279,9 +4262,12 @@ struct GarrPlotBuildingMeta { static DB2Meta const* Instance() { - static char const* types = "bb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x3F77A6FA, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x1ECDCE0A, fields, -1); return &instance; } }; @@ -2290,9 +4276,12 @@ struct GarrPlotInstanceMeta { static DB2Meta const* Instance() { - static char const* types = "sb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xB708BB37, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x1FD77CCF, fields, -1); return &instance; } }; @@ -2301,9 +4290,12 @@ struct GarrPlotUICategoryMeta { static DB2Meta const* Instance() { - static char const* types = "sb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xA94645EE, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x867482E6, fields, -1); return &instance; } }; @@ -2312,9 +4304,19 @@ struct GarrSiteLevelMeta { static DB2Meta const* Instance() { - static char const* types = "fhhhhhbbb"; - static uint8 const arraySizes[9] = { 2, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 9, 0xD3979C38, types, arraySizes, -1); + static DB2MetaField const fields[9] = + { + { FT_FLOAT, 2, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 9, 0x4D823E68, fields, -1); return &instance; } }; @@ -2323,9 +4325,14 @@ struct GarrSiteLevelPlotInstMeta { static DB2Meta const* Instance() { - static char const* types = "fhbb"; - static uint8 const arraySizes[4] = { 2, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xC4E74201, types, arraySizes, 1); + static DB2MetaField const fields[4] = + { + { FT_FLOAT, 2, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xA3DF8AD1, fields, 1); return &instance; } }; @@ -2334,9 +4341,17 @@ struct GarrSpecializationMeta { static DB2Meta const* Instance() { - static char const* types = "ssifbbb"; - static uint8 const arraySizes[7] = { 1, 1, 1, 2, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x797A0F2F, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 2, true }, + }; + static DB2Meta instance(-1, 7, 0x8400A7E7, fields, -1); return &instance; } }; @@ -2345,9 +4360,11 @@ struct GarrStringMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xE1C08C0C, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xF404C7D8, fields, -1); return &instance; } }; @@ -2356,9 +4373,30 @@ struct GarrTalentMeta { static DB2Meta const* Instance() { - static char const* types = "ssiibbbiiiiiiiiiiiii"; - static uint8 const arraySizes[20] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(7, 20, 0x53D5FD16, types, arraySizes, 8); + static DB2MetaField const fields[20] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(2, 20, 0x96BE787E, fields, 3); return &instance; } }; @@ -2367,9 +4405,17 @@ struct GarrTalentTreeMeta { static DB2Meta const* Instance() { - static char const* types = "hbbii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x676CBC04, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 7, 0x9A3BC97D, fields, -1); return &instance; } }; @@ -2378,9 +4424,15 @@ struct GarrTypeMeta { static DB2Meta const* Instance() { - static char const* types = "iiiii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 2 }; - static DB2Meta instance(-1, 5, 0x7C52F3B7, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 2, true }, + }; + static DB2Meta instance(-1, 5, 0xCCA7D7B5, fields, -1); return &instance; } }; @@ -2389,9 +4441,16 @@ struct GarrUiAnimClassInfoMeta { static DB2Meta const* Instance() { - static char const* types = "fbbiii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0xDBF4633D, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 6, 0xF6444415, fields, -1); return &instance; } }; @@ -2400,9 +4459,23 @@ struct GarrUiAnimRaceInfoMeta { static DB2Meta const* Instance() { - static char const* types = "ffffffffffffb"; - static uint8 const arraySizes[13] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 13, 0x44B9C1DE, types, arraySizes, -1); + static DB2MetaField const fields[13] = + { + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 13, 0x62B1D302, fields, -1); return &instance; } }; @@ -2411,9 +4484,13 @@ struct GemPropertiesMeta { static DB2Meta const* Instance() { - static char const* types = "ihh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x84558CAB, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xBCE902DB, fields, -1); return &instance; } }; @@ -2422,9 +4499,13 @@ struct GlobalStringsMeta { static DB2Meta const* Instance() { - static char const* types = "ssb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x2CA3EA1E, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x843675FD, fields, -1); return &instance; } }; @@ -2433,9 +4514,12 @@ struct GlyphBindableSpellMeta { static DB2Meta const* Instance() { - static char const* types = "ih"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xEA228DFA, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x03429C72, fields, 1); return &instance; } }; @@ -2444,9 +4528,11 @@ struct GlyphExclusiveCategoryMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xFE598FCD, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x59622339, fields, -1); return &instance; } }; @@ -2455,9 +4541,14 @@ struct GlyphPropertiesMeta { static DB2Meta const* Instance() { - static char const* types = "ihbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xD0046829, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x7C1C2F11, fields, -1); return &instance; } }; @@ -2466,9 +4557,12 @@ struct GlyphRequiredSpecMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xDD6481CE, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x70D4ECC6, fields, 1); return &instance; } }; @@ -2477,9 +4571,14 @@ struct GroundEffectDoodadMeta { static DB2Meta const* Instance() { - static char const* types = "ffbi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x0376B2D6, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0xAB0C6E12, fields, -1); return &instance; } }; @@ -2488,9 +4587,14 @@ struct GroundEffectTextureMeta { static DB2Meta const* Instance() { - static char const* types = "hbbi"; - static uint8 const arraySizes[4] = { 4, 4, 1, 1 }; - static DB2Meta instance(-1, 4, 0x84549F0A, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 4, false }, + { FT_BYTE, 4, true }, + }; + static DB2Meta instance(-1, 4, 0xCCBD52E8, fields, -1); return &instance; } }; @@ -2499,9 +4603,24 @@ struct GroupFinderActivityMeta { static DB2Meta const* Instance() { - static char const* types = "sshhhbbbbbbbbb"; - static uint8 const arraySizes[14] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 14, 0x3EF2F3BD, types, arraySizes, -1); + static DB2MetaField const fields[14] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 14, 0xEC40E4B1, fields, -1); return &instance; } }; @@ -2510,9 +4629,12 @@ struct GroupFinderActivityGrpMeta { static DB2Meta const* Instance() { - static char const* types = "sb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xC9458196, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x1EC8D046, fields, -1); return &instance; } }; @@ -2521,9 +4643,13 @@ struct GroupFinderCategoryMeta { static DB2Meta const* Instance() { - static char const* types = "sbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x9213552F, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xBFF47DC0, fields, -1); return &instance; } }; @@ -2532,9 +4658,13 @@ struct GuildColorBackgroundMeta { static DB2Meta const* Instance() { - static char const* types = "bbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xCC0CEFF1, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xCC5FFB4D, fields, -1); return &instance; } }; @@ -2543,9 +4673,13 @@ struct GuildColorBorderMeta { static DB2Meta const* Instance() { - static char const* types = "bbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xCC0CEFF1, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xCC5FFB4D, fields, -1); return &instance; } }; @@ -2554,9 +4688,13 @@ struct GuildColorEmblemMeta { static DB2Meta const* Instance() { - static char const* types = "bbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xCC0CEFF1, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xCC5FFB4D, fields, -1); return &instance; } }; @@ -2565,9 +4703,11 @@ struct GuildPerkSpellsMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xC15D6E9F, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xC9961BEB, fields, -1); return &instance; } }; @@ -2576,9 +4716,20 @@ struct HeirloomMeta { static DB2Meta const* Instance() { - static char const* types = "siiiiihbbi"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 3, 3, 1, 1, 1 }; - static DB2Meta instance(9, 10, 0x36887C6F, types, arraySizes, -1); + static DB2MetaField const fields[10] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 3, true }, + { FT_SHORT, 3, false }, + }; + static DB2Meta instance(1, 10, 0xB5925FE9, fields, -1); return &instance; } }; @@ -2587,9 +4738,13 @@ struct HelmetAnimScalingMeta { static DB2Meta const* Instance() { - static char const* types = "fii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xB9EC1058, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xC43CA2FC, fields, 2); return &instance; } }; @@ -2598,9 +4753,11 @@ struct HelmetGeosetVisDataMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 9 }; - static DB2Meta instance(-1, 1, 0x3B38D999, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 9, true }, + }; + static DB2Meta instance(-1, 1, 0x2E7C7FED, fields, -1); return &instance; } }; @@ -2609,9 +4766,15 @@ struct HighlightColorMeta { static DB2Meta const* Instance() { - static char const* types = "iiibb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x5FADC5D3, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 5, 0xDC14DB43, fields, -1); return &instance; } }; @@ -2620,9 +4783,11 @@ struct HolidayDescriptionsMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x92A95550, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xE70F298C, fields, -1); return &instance; } }; @@ -2631,9 +4796,11 @@ struct HolidayNamesMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x96663ABF, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xF2917D77, fields, -1); return &instance; } }; @@ -2642,20 +4809,37 @@ struct HolidaysMeta { static DB2Meta const* Instance() { - static char const* types = "iihhbbbbbiii"; - static uint8 const arraySizes[12] = { 1, 16, 10, 1, 1, 10, 1, 1, 1, 1, 1, 3 }; - static DB2Meta instance(0, 12, 0x7C3E60FC, types, arraySizes, -1); + static DB2MetaField const fields[12] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 10, false }, + { FT_INT, 16, false }, + { FT_BYTE, 10, false }, + { FT_INT, 3, true }, + }; + static DB2Meta instance(0, 12, 0xF6DA3904, fields, -1); return &instance; } }; -struct HotfixMeta +struct HotfixesMeta { static DB2Meta const* Instance() { - static char const* types = "sii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x3747930B, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xB67D3F47, fields, -1); return &instance; } }; @@ -2664,9 +4848,14 @@ struct ImportPriceArmorMeta { static DB2Meta const* Instance() { - static char const* types = "ffff"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x1F7A850F, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0xC4C8D847, fields, -1); return &instance; } }; @@ -2675,9 +4864,11 @@ struct ImportPriceQualityMeta { static DB2Meta const* Instance() { - static char const* types = "f"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x6F64793D, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xCFF4EEC9, fields, -1); return &instance; } }; @@ -2686,9 +4877,11 @@ struct ImportPriceShieldMeta { static DB2Meta const* Instance() { - static char const* types = "f"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x6F64793D, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xCFF4EEC9, fields, -1); return &instance; } }; @@ -2697,9 +4890,11 @@ struct ImportPriceWeaponMeta { static DB2Meta const* Instance() { - static char const* types = "f"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x6F64793D, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xCFF4EEC9, fields, -1); return &instance; } }; @@ -2708,9 +4903,20 @@ struct InvasionClientDataMeta { static DB2Meta const* Instance() { - static char const* types = "sfiiiiiiii"; - static uint8 const arraySizes[10] = { 1, 2, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(2, 10, 0x4C93379F, types, arraySizes, 9); + static DB2MetaField const fields[10] = + { + { FT_STRING, 1, true }, + { FT_FLOAT, 2, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(2, 10, 0x04FC0B4F, fields, 9); return &instance; } }; @@ -2719,9 +4925,18 @@ struct ItemMeta { static DB2Meta const* Instance() { - static char const* types = "ibbbbbbb"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 8, 0x0DFCC83D, types, arraySizes, -1); + static DB2MetaField const fields[8] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 8, 0xF9600007, fields, -1); return &instance; } }; @@ -2730,9 +4945,14 @@ struct ItemAppearanceMeta { static DB2Meta const* Instance() { - static char const* types = "iiib"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x06D35A59, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0x422F764D, fields, -1); return &instance; } }; @@ -2741,9 +4961,12 @@ struct ItemAppearanceXUiCameraMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x67747E15, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xCD3677FD, fields, -1); return &instance; } }; @@ -2752,9 +4975,11 @@ struct ItemArmorQualityMeta { static DB2Meta const* Instance() { - static char const* types = "fh"; - static uint8 const arraySizes[2] = { 7, 1 }; - static DB2Meta instance(-1, 2, 0x85642CC0, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_FLOAT, 7, true }, + }; + static DB2Meta instance(-1, 1, 0x0B17E016, fields, -1); return &instance; } }; @@ -2763,9 +4988,12 @@ struct ItemArmorShieldMeta { static DB2Meta const* Instance() { - static char const* types = "fh"; - static uint8 const arraySizes[2] = { 7, 1 }; - static DB2Meta instance(-1, 2, 0xC2186F95, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_FLOAT, 7, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xC88C8C8D, fields, -1); return &instance; } }; @@ -2774,9 +5002,15 @@ struct ItemArmorTotalMeta { static DB2Meta const* Instance() { - static char const* types = "ffffh"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x45C396DD, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_SHORT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0xC4CD0FD9, fields, -1); return &instance; } }; @@ -2785,9 +5019,11 @@ struct ItemBagFamilyMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x96663ABF, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x9F2C8370, fields, -1); return &instance; } }; @@ -2796,9 +5032,14 @@ struct ItemBonusMeta { static DB2Meta const* Instance() { - static char const* types = "ihbb"; - static uint8 const arraySizes[4] = { 3, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xE12FB1A0, types, arraySizes, 1); + static DB2MetaField const fields[4] = + { + { FT_INT, 3, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xB96C1748, fields, 1); return &instance; } }; @@ -2807,9 +5048,12 @@ struct ItemBonusListLevelDeltaMeta { static DB2Meta const* Instance() { - static char const* types = "hi"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(1, 2, 0xDFBF5AC9, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(1, 2, 0x819C0CC1, fields, -1); return &instance; } }; @@ -2818,9 +5062,15 @@ struct ItemBonusTreeNodeMeta { static DB2Meta const* Instance() { - static char const* types = "hhhbh"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x84FE93B7, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x1DDAA885, fields, 4); return &instance; } }; @@ -2829,9 +5079,13 @@ struct ItemChildEquipmentMeta { static DB2Meta const* Instance() { - static char const* types = "ibi"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xB6940674, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x48E64550, fields, 2); return &instance; } }; @@ -2840,9 +5094,14 @@ struct ItemClassMeta { static DB2Meta const* Instance() { - static char const* types = "sfbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xA1E4663C, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xB6C67A3D, fields, -1); return &instance; } }; @@ -2851,9 +5110,16 @@ struct ItemContextPickerEntryMeta { static DB2Meta const* Instance() { - static char const* types = "bbiiii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x4A6DF90B, types, arraySizes, 5); + static DB2MetaField const fields[6] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 6, 0x1596EAF3, fields, 5); return &instance; } }; @@ -2862,9 +5128,11 @@ struct ItemCurrencyCostMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xE2FF5688, types, arraySizes, 0); + static DB2MetaField const fields[1] = + { + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xDAC6A93C, fields, 0); return &instance; } }; @@ -2873,9 +5141,12 @@ struct ItemDamageAmmoMeta { static DB2Meta const* Instance() { - static char const* types = "fh"; - static uint8 const arraySizes[2] = { 7, 1 }; - static DB2Meta instance(-1, 2, 0xC2186F95, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_FLOAT, 7, true }, + }; + static DB2Meta instance(-1, 2, 0x1309BE8D, fields, -1); return &instance; } }; @@ -2884,9 +5155,12 @@ struct ItemDamageOneHandMeta { static DB2Meta const* Instance() { - static char const* types = "fh"; - static uint8 const arraySizes[2] = { 7, 1 }; - static DB2Meta instance(-1, 2, 0xC2186F95, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_FLOAT, 7, true }, + }; + static DB2Meta instance(-1, 2, 0x1309BE8D, fields, -1); return &instance; } }; @@ -2895,9 +5169,12 @@ struct ItemDamageOneHandCasterMeta { static DB2Meta const* Instance() { - static char const* types = "fh"; - static uint8 const arraySizes[2] = { 7, 1 }; - static DB2Meta instance(-1, 2, 0xC2186F95, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_FLOAT, 7, true }, + }; + static DB2Meta instance(-1, 2, 0x1309BE8D, fields, -1); return &instance; } }; @@ -2906,9 +5183,12 @@ struct ItemDamageTwoHandMeta { static DB2Meta const* Instance() { - static char const* types = "fh"; - static uint8 const arraySizes[2] = { 7, 1 }; - static DB2Meta instance(-1, 2, 0xC2186F95, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_FLOAT, 7, true }, + }; + static DB2Meta instance(-1, 2, 0x1309BE8D, fields, -1); return &instance; } }; @@ -2917,9 +5197,12 @@ struct ItemDamageTwoHandCasterMeta { static DB2Meta const* Instance() { - static char const* types = "fh"; - static uint8 const arraySizes[2] = { 7, 1 }; - static DB2Meta instance(-1, 2, 0xC2186F95, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_FLOAT, 7, true }, + }; + static DB2Meta instance(-1, 2, 0x1309BE8D, fields, -1); return &instance; } }; @@ -2928,9 +5211,17 @@ struct ItemDisenchantLootMeta { static DB2Meta const* Instance() { - static char const* types = "hhhbbbb"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0xC0D926CC, types, arraySizes, 6); + static DB2MetaField const fields[7] = + { + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 7, 0x146B9F40, fields, 6); return &instance; } }; @@ -2939,9 +5230,25 @@ struct ItemDisplayInfoMeta { static DB2Meta const* Instance() { - static char const* types = "iiiiiiiiiiiiiii"; - static uint8 const arraySizes[15] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 2 }; - static DB2Meta instance(-1, 15, 0x99606089, types, arraySizes, -1); + static DB2MetaField const fields[15] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 2, false }, + { FT_INT, 2, true }, + { FT_INT, 6, true }, + { FT_INT, 6, true }, + { FT_INT, 2, true }, + }; + static DB2Meta instance(-1, 15, 0x089404D9, fields, -1); return &instance; } }; @@ -2950,9 +5257,13 @@ struct ItemDisplayInfoMaterialResMeta { static DB2Meta const* Instance() { - static char const* types = "ibi"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xDEE4ED7B, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x936E6A99, fields, 2); return &instance; } }; @@ -2961,9 +5272,12 @@ struct ItemDisplayXUiCameraMeta { static DB2Meta const* Instance() { - static char const* types = "ih"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xE57737B2, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x3E999EAA, fields, -1); return &instance; } }; @@ -2972,9 +5286,19 @@ struct ItemEffectMeta { static DB2Meta const* Instance() { - static char const* types = "iiihhhbbi"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 9, 0xA390FA40, types, arraySizes, 8); + static DB2MetaField const fields[9] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 9, 0x46818AA6, fields, 8); return &instance; } }; @@ -2983,9 +5307,20 @@ struct ItemExtendedCostMeta { static DB2Meta const* Instance() { - static char const* types = "iihhhbbbbb"; - static uint8 const arraySizes[10] = { 5, 5, 5, 1, 5, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0xC31F4DEF, types, arraySizes, -1); + static DB2MetaField const fields[10] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 5, true }, + { FT_SHORT, 5, false }, + { FT_SHORT, 5, false }, + { FT_INT, 5, false }, + }; + static DB2Meta instance(-1, 10, 0x2AC5BE11, fields, -1); return &instance; } }; @@ -2994,9 +5329,11 @@ struct ItemGroupSoundsMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 4 }; - static DB2Meta instance(-1, 1, 0xDC2EE466, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 4, false }, + }; + static DB2Meta instance(-1, 1, 0x909375D2, fields, -1); return &instance; } }; @@ -3005,9 +5342,12 @@ struct ItemLevelSelectorMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x8143060E, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x3112276E, fields, -1); return &instance; } }; @@ -3016,9 +5356,13 @@ struct ItemLevelSelectorQualityMeta { static DB2Meta const* Instance() { - static char const* types = "ibh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xB7174A51, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xC40169D5, fields, 2); return &instance; } }; @@ -3027,9 +5371,12 @@ struct ItemLevelSelectorQualitySetMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x20055BA8, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x89657A48, fields, -1); return &instance; } }; @@ -3038,9 +5385,13 @@ struct ItemLimitCategoryMeta { static DB2Meta const* Instance() { - static char const* types = "sbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xB6BB188D, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xE068171C, fields, -1); return &instance; } }; @@ -3049,9 +5400,13 @@ struct ItemLimitCategoryConditionMeta { static DB2Meta const* Instance() { - static char const* types = "bii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xDE8EAD49, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x7F847085, fields, 2); return &instance; } }; @@ -3060,9 +5415,16 @@ struct ItemModifiedAppearanceMeta { static DB2Meta const* Instance() { - static char const* types = "iibhbb"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(1, 6, 0xE64FD18B, types, arraySizes, 0); + static DB2MetaField const fields[6] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(0, 6, 0x9C32B7FF, fields, 1); return &instance; } }; @@ -3071,9 +5433,15 @@ struct ItemModifiedAppearanceExtraMeta { static DB2Meta const* Instance() { - static char const* types = "iibbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x77212236, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x7E2FD302, fields, -1); return &instance; } }; @@ -3082,9 +5450,12 @@ struct ItemNameDescriptionMeta { static DB2Meta const* Instance() { - static char const* types = "si"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x16760BD4, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xBBF04CCC, fields, -1); return &instance; } }; @@ -3093,9 +5464,11 @@ struct ItemPetFoodMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xE4923C1F, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xD6AB60EB, fields, -1); return &instance; } }; @@ -3104,9 +5477,13 @@ struct ItemPriceBaseMeta { static DB2Meta const* Instance() { - static char const* types = "ffh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x4BD234D7, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xC90092C7, fields, -1); return &instance; } }; @@ -3115,9 +5492,12 @@ struct ItemRandomPropertiesMeta { static DB2Meta const* Instance() { - static char const* types = "sh"; - static uint8 const arraySizes[2] = { 1, 5 }; - static DB2Meta instance(-1, 2, 0xB67375F8, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING, 1, true }, + { FT_SHORT, 5, false }, + }; + static DB2Meta instance(-1, 2, 0xBDA8BFCD, fields, -1); return &instance; } }; @@ -3126,9 +5506,13 @@ struct ItemRandomSuffixMeta { static DB2Meta const* Instance() { - static char const* types = "shh"; - static uint8 const arraySizes[3] = { 1, 5, 5 }; - static DB2Meta instance(-1, 3, 0x95CAB825, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_SHORT, 5, false }, + { FT_SHORT, 5, false }, + }; + static DB2Meta instance(-1, 3, 0xABCC4871, fields, -1); return &instance; } }; @@ -3137,9 +5521,14 @@ struct ItemRangedDisplayInfoMeta { static DB2Meta const* Instance() { - static char const* types = "iiii"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x687A28D1, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xA6B99F0D, fields, -1); return &instance; } }; @@ -3148,9 +5537,24 @@ struct ItemSearchNameMeta { static DB2Meta const* Instance() { - static char const* types = "lsiihbbbhbihhi"; - static uint8 const arraySizes[14] = { 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(2, 14, 0x2D4B72FA, types, arraySizes, -1); + static DB2MetaField const fields[14] = + { + { FT_LONG, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 4, true }, + }; + static DB2Meta instance(2, 14, 0xF0940AFC, fields, -1); return &instance; } }; @@ -3159,9 +5563,15 @@ struct ItemSetMeta { static DB2Meta const* Instance() { - static char const* types = "sihii"; - static uint8 const arraySizes[5] = { 1, 17, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x847FF58A, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 17, false }, + }; + static DB2Meta instance(-1, 5, 0xB02A9041, fields, -1); return &instance; } }; @@ -3170,9 +5580,14 @@ struct ItemSetSpellMeta { static DB2Meta const* Instance() { - static char const* types = "ihbh"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xF65D0AF8, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xD6AEEA60, fields, 3); return &instance; } }; @@ -3181,9 +5596,74 @@ struct ItemSparseMeta { static DB2Meta const* Instance() { - static char const* types = "lsssssiffiiiiiiiffififhhhhhhhhhhhhhhhhhhhhhhhbbbbbbbbbbbbbbbbbbb"; - static uint8 const arraySizes[64] = { 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 64, 0x4007DE16, types, arraySizes, -1); + static DB2MetaField const fields[64] = + { + { FT_LONG, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 10, true }, + { FT_INT, 10, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 4, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 3, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 10, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 64, 0xF9021F01, fields, -1); return &instance; } }; @@ -3192,9 +5672,16 @@ struct ItemSpecMeta { static DB2Meta const* Instance() { - static char const* types = "hbbbbb"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0xB17B7986, types, arraySizes, 3); + static DB2MetaField const fields[6] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 6, 0xEB138F8E, fields, 2); return &instance; } }; @@ -3203,9 +5690,12 @@ struct ItemSpecOverrideMeta { static DB2Meta const* Instance() { - static char const* types = "hi"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xE499CD2A, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xB235D33A, fields, 1); return &instance; } }; @@ -3214,9 +5704,20 @@ struct ItemSubClassMeta { static DB2Meta const* Instance() { - static char const* types = "sshbbbbbbb"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0xDAD92A67, types, arraySizes, 3); + static DB2MetaField const fields[10] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 10, 0xC7178B11, fields, 2); return &instance; } }; @@ -3225,9 +5726,13 @@ struct ItemSubClassMaskMeta { static DB2Meta const* Instance() { - static char const* types = "sib"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xFC1DA850, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x146E3154, fields, -1); return &instance; } }; @@ -3236,9 +5741,15 @@ struct ItemUpgradeMeta { static DB2Meta const* Instance() { - static char const* types = "ihhbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x8F3A4137, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x706FA369, fields, -1); return &instance; } }; @@ -3247,9 +5758,11 @@ struct ItemVisualsMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 5 }; - static DB2Meta instance(-1, 1, 0x485EA782, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 5, true }, + }; + static DB2Meta instance(-1, 1, 0x4025FA36, fields, -1); return &instance; } }; @@ -3258,9 +5771,12 @@ struct ItemXBonusTreeMeta { static DB2Meta const* Instance() { - static char const* types = "hi"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x87C4B605, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x57244BD5, fields, 1); return &instance; } }; @@ -3269,9 +5785,20 @@ struct JournalEncounterMeta { static DB2Meta const* Instance() { - static char const* types = "ssfhhhhbbii"; - static uint8 const arraySizes[11] = { 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 11, 0x2935A0FD, types, arraySizes, -1); + static DB2MetaField const fields[10] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_FLOAT, 2, true }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 10, 0x5E057FAD, fields, -1); return &instance; } }; @@ -3280,9 +5807,18 @@ struct JournalEncounterCreatureMeta { static DB2Meta const* Instance() { - static char const* types = "ssiiihbi"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(7, 8, 0x22C79A42, types, arraySizes, 5); + static DB2MetaField const fields[8] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(2, 8, 0x71CE658D, fields, 3); return &instance; } }; @@ -3291,9 +5827,16 @@ struct JournalEncounterItemMeta { static DB2Meta const* Instance() { - static char const* types = "ihbbbi"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(5, 6, 0x39230FF9, types, arraySizes, 1); + static DB2MetaField const fields[6] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(0, 6, 0x5FD94071, fields, 1); return &instance; } }; @@ -3302,9 +5845,25 @@ struct JournalEncounterSectionMeta { static DB2Meta const* Instance() { - static char const* types = "ssiiiihhhhhhbbb"; - static uint8 const arraySizes[15] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 15, 0x13E56B12, types, arraySizes, -1); + static DB2MetaField const fields[15] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 15, 0x582FB4F6, fields, -1); return &instance; } }; @@ -3313,9 +5872,12 @@ struct JournalEncounterXDifficultyMeta { static DB2Meta const* Instance() { - static char const* types = "bh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x321FD542, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x436676BA, fields, 1); return &instance; } }; @@ -3324,9 +5886,15 @@ struct JournalEncounterXMapLocMeta { static DB2Meta const* Instance() { - static char const* types = "fbiiii"; - static uint8 const arraySizes[6] = { 2, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x430540E4, types, arraySizes, 5); + static DB2MetaField const fields[5] = + { + { FT_FLOAT, 2, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0xBCE56697, fields, 4); return &instance; } }; @@ -3335,9 +5903,21 @@ struct JournalInstanceMeta { static DB2Meta const* Instance() { - static char const* types = "ssiiiihhbbi"; - static uint8 const arraySizes[11] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(10, 11, 0x1691CC3D, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(2, 11, 0xBB10478F, fields, -1); return &instance; } }; @@ -3346,9 +5926,12 @@ struct JournalItemXDifficultyMeta { static DB2Meta const* Instance() { - static char const* types = "bh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x60D9CA15, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xF938F4BD, fields, 1); return &instance; } }; @@ -3357,9 +5940,12 @@ struct JournalSectionXDifficultyMeta { static DB2Meta const* Instance() { - static char const* types = "bh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x243822A7, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xE02C355F, fields, 1); return &instance; } }; @@ -3368,9 +5954,11 @@ struct JournalTierMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x8046B23F, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xE0D727CB, fields, -1); return &instance; } }; @@ -3379,9 +5967,12 @@ struct JournalTierXInstanceMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x9C4F4D2A, types, arraySizes, 0); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xD584CE6A, fields, 0); return &instance; } }; @@ -3390,9 +5981,11 @@ struct KeychainMeta { static DB2Meta const* Instance() { - static char const* types = "b"; - static uint8 const arraySizes[1] = { 32 }; - static DB2Meta instance(-1, 1, 0x5B214E82, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_BYTE, 32, false }, + }; + static DB2Meta instance(-1, 1, 0x67DDA82E, fields, -1); return &instance; } }; @@ -3401,9 +5994,14 @@ struct KeystoneAffixMeta { static DB2Meta const* Instance() { - static char const* types = "ssi"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x1BCB46AA, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(2, 4, 0x60D97B7F, fields, -1); return &instance; } }; @@ -3412,9 +6010,17 @@ struct LFGDungeonExpansionMeta { static DB2Meta const* Instance() { - static char const* types = "hbbbiih"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0xB41DEA61, types, arraySizes, 6); + static DB2MetaField const fields[7] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 7, 0x6754EDAB, fields, 6); return &instance; } }; @@ -3423,9 +6029,14 @@ struct LFGDungeonGroupMeta { static DB2Meta const* Instance() { - static char const* types = "shbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x724D58E7, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x4E84BE76, fields, -1); return &instance; } }; @@ -3434,9 +6045,43 @@ struct LFGDungeonsMeta { static DB2Meta const* Instance() { - static char const* types = "ssifhhhhhhhhhbbbbbbbbbbbbbbbbbiii"; - static uint8 const arraySizes[33] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 33, 0xF02081A0, types, arraySizes, -1); + static DB2MetaField const fields[33] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 2, true }, + }; + static DB2Meta instance(-1, 33, 0xD9B678AD, fields, -1); return &instance; } }; @@ -3445,9 +6090,13 @@ struct LFGRoleRequirementMeta { static DB2Meta const* Instance() { - static char const* types = "bih"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x7EB8A359, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x35B34A59, fields, 2); return &instance; } }; @@ -3456,9 +6105,12 @@ struct LanguageWordsMeta { static DB2Meta const* Instance() { - static char const* types = "sb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xC15912BD, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xFBB33D15, fields, -1); return &instance; } }; @@ -3467,9 +6119,12 @@ struct LanguagesMeta { static DB2Meta const* Instance() { - static char const* types = "si"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(1, 2, 0x6FA5D0C4, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(1, 2, 0xAA508D47, fields, -1); return &instance; } }; @@ -3478,9 +6133,13 @@ struct LfgDungeonsGroupingMapMeta { static DB2Meta const* Instance() { - static char const* types = "hbh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x8CB35C50, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xD50B89E4, fields, 2); return &instance; } }; @@ -3489,9 +6148,15 @@ struct LightMeta { static DB2Meta const* Instance() { - static char const* types = "fffhh"; - static uint8 const arraySizes[5] = { 3, 1, 1, 1, 8 }; - static DB2Meta instance(-1, 5, 0x25025A13, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_FLOAT, 3, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 8, false }, + }; + static DB2Meta instance(-1, 5, 0x04052B1F, fields, -1); return &instance; } }; @@ -3500,9 +6165,46 @@ struct LightDataMeta { static DB2Meta const* Instance() { - static char const* types = "iiiiiiiiiiiiiiiiiifffffffffiiiiiihh"; - static uint8 const arraySizes[35] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 35, 0x2D2BA7FA, types, arraySizes, 34); + static DB2MetaField const fields[36] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 36, 0xE7CA3F85, fields, 0); return &instance; } }; @@ -3511,9 +6213,22 @@ struct LightParamsMeta { static DB2Meta const* Instance() { - static char const* types = "ffffffhbbbi"; - static uint8 const arraySizes[11] = { 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1 }; - static DB2Meta instance(10, 11, 0xF67DE2AF, types, arraySizes, -1); + static DB2MetaField const fields[12] = + { + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(1, 12, 0xA08FAABA, fields, -1); return &instance; } }; @@ -3522,9 +6237,60 @@ struct LightSkyboxMeta { static DB2Meta const* Instance() { - static char const* types = "siib"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x8817C02C, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0x757E9EB6, fields, -1); + return &instance; + } +}; + +struct LightningMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[34] = + { + { FT_FLOAT, 2, true }, + { FT_INT, 3, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 34, 0x8B6D192C, fields, -1); return &instance; } }; @@ -3533,9 +6299,12 @@ struct LiquidMaterialMeta { static DB2Meta const* Instance() { - static char const* types = "bb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x62BE0340, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x6A7287A2, fields, -1); return &instance; } }; @@ -3544,9 +6313,15 @@ struct LiquidObjectMeta { static DB2Meta const* Instance() { - static char const* types = "ffhbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xACC168A6, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x7AF380AA, fields, -1); return &instance; } }; @@ -3555,9 +6330,31 @@ struct LiquidTypeMeta { static DB2Meta const* Instance() { - static char const* types = "ssifffffifihhbbbbbi"; - static uint8 const arraySizes[19] = { 1, 6, 1, 1, 1, 1, 1, 1, 2, 18, 4, 1, 1, 1, 1, 1, 1, 6, 1 }; - static DB2Meta instance(-1, 19, 0x3313BBF3, types, arraySizes, -1); + static DB2MetaField const fields[21] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING_NOT_LOCALIZED, 6, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 6, false }, + { FT_INT, 2, true }, + { FT_FLOAT, 18, true }, + { FT_INT, 4, false }, + { FT_FLOAT, 4, true }, + }; + static DB2Meta instance(-1, 21, 0x29F8C65E, fields, -1); return &instance; } }; @@ -3566,9 +6363,15 @@ struct LoadingScreenTaxiSplinesMeta { static DB2Meta const* Instance() { - static char const* types = "ffhhb"; - static uint8 const arraySizes[5] = { 10, 10, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x4D6292C3, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 10, true }, + { FT_FLOAT, 10, true }, + }; + static DB2Meta instance(-1, 5, 0xCDF5DDF1, fields, -1); return &instance; } }; @@ -3577,9 +6380,13 @@ struct LoadingScreensMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x99C0EB78, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xA2488A1C, fields, -1); return &instance; } }; @@ -3588,9 +6395,14 @@ struct LocaleMeta { static DB2Meta const* Instance() { - static char const* types = "ibbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x592AE13B, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x65638FD5, fields, -1); return &instance; } }; @@ -3599,9 +6411,12 @@ struct LocationMeta { static DB2Meta const* Instance() { - static char const* types = "ff"; - static uint8 const arraySizes[2] = { 3, 3 }; - static DB2Meta instance(-1, 2, 0xBBC1BE7A, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + }; + static DB2Meta instance(-1, 2, 0x71BD1122, fields, -1); return &instance; } }; @@ -3610,9 +6425,14 @@ struct LockMeta { static DB2Meta const* Instance() { - static char const* types = "ihbb"; - static uint8 const arraySizes[4] = { 8, 8, 8, 8 }; - static DB2Meta instance(-1, 4, 0xDAC7F42F, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 8, true }, + { FT_SHORT, 8, false }, + { FT_BYTE, 8, false }, + { FT_BYTE, 8, false }, + }; + static DB2Meta instance(-1, 4, 0x156C0BD7, fields, -1); return &instance; } }; @@ -3621,9 +6441,15 @@ struct LockTypeMeta { static DB2Meta const* Instance() { - static char const* types = "ssssi"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(4, 5, 0xCD5E1D2F, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(4, 5, 0x3F736720, fields, -1); return &instance; } }; @@ -3632,9 +6458,28 @@ struct LookAtControllerMeta { static DB2Meta const* Instance() { - static char const* types = "ffffhhhhbbbbbiiiii"; - static uint8 const arraySizes[18] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 18, 0x543C0D56, types, arraySizes, -1); + static DB2MetaField const fields[18] = + { + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 18, 0x2E077E56, fields, -1); return &instance; } }; @@ -3643,9 +6488,11 @@ struct MailTemplateMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x25C8D6CC, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xC6E0D9B5, fields, -1); return &instance; } }; @@ -3654,9 +6501,20 @@ struct ManagedWorldStateMeta { static DB2Meta const* Instance() { - static char const* types = "iiiiiiiiii"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(9, 10, 0xBA06FC33, types, arraySizes, -1); + static DB2MetaField const fields[10] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 4, true }, + }; + static DB2Meta instance(0, 10, 0x043BFC8F, fields, -1); return &instance; } }; @@ -3665,9 +6523,14 @@ struct ManagedWorldStateBuffMeta { static DB2Meta const* Instance() { - static char const* types = "iiii"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x6D201DC7, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0x049B986F, fields, 3); return &instance; } }; @@ -3676,9 +6539,13 @@ struct ManagedWorldStateInputMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x0FC1A9B0, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x21237CDC, fields, -1); return &instance; } }; @@ -3687,9 +6554,11 @@ struct ManifestInterfaceActionIconMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(0, 1, 0x6A529F37, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 1, false }, + }; + static DB2Meta instance(0, 1, 0xB5EE0DCB, fields, -1); return &instance; } }; @@ -3698,9 +6567,12 @@ struct ManifestInterfaceDataMeta { static DB2Meta const* Instance() { - static char const* types = "ss"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x9E5F4C99, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x03E4C021, fields, -1); return &instance; } }; @@ -3709,9 +6581,11 @@ struct ManifestInterfaceItemIconMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(0, 1, 0x6A529F37, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 1, false }, + }; + static DB2Meta instance(0, 1, 0xB5EE0DCB, fields, -1); return &instance; } }; @@ -3720,9 +6594,11 @@ struct ManifestInterfaceTOCDataMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x6F7D397D, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xD00DAF09, fields, -1); return &instance; } }; @@ -3731,9 +6607,11 @@ struct ManifestMP3Meta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(0, 1, 0x6A529F37, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 1, false }, + }; + static DB2Meta instance(0, 1, 0xB5EE0DCB, fields, -1); return &instance; } }; @@ -3742,9 +6620,32 @@ struct MapMeta { static DB2Meta const* Instance() { - static char const* types = "ssssssiffhhhhhhhbbbbb"; - static uint8 const arraySizes[21] = { 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 21, 0xF568DF12, types, arraySizes, -1); + static DB2MetaField const fields[22] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_FLOAT, 2, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 2, true }, + }; + static DB2Meta instance(-1, 22, 0x503A3E58, fields, -1); return &instance; } }; @@ -3753,9 +6654,13 @@ struct MapCelestialBodyMeta { static DB2Meta const* Instance() { - static char const* types = "hih"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xBDE1C11C, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_SHORT, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x14543648, fields, 2); return &instance; } }; @@ -3764,9 +6669,15 @@ struct MapChallengeModeMeta { static DB2Meta const* Instance() { - static char const* types = "sihhb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 3, 1 }; - static DB2Meta instance(1, 5, 0xC5261662, types, arraySizes, 2); + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 3, true }, + }; + static DB2Meta instance(1, 5, 0x50F3ABC2, fields, 2); return &instance; } }; @@ -3775,9 +6686,20 @@ struct MapDifficultyMeta { static DB2Meta const* Instance() { - static char const* types = "sbbbbbbih"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 9, 0x2B3B759E, types, arraySizes, 8); + static DB2MetaField const fields[10] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 10, 0xF876E8BA, fields, 9); return &instance; } }; @@ -3786,9 +6708,14 @@ struct MapDifficultyXConditionMeta { static DB2Meta const* Instance() { - static char const* types = "siii"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x5F5D7102, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x8DBA5D16, fields, 3); return &instance; } }; @@ -3797,9 +6724,15 @@ struct MapLoadingScreenMeta { static DB2Meta const* Instance() { - static char const* types = "ffiii"; - static uint8 const arraySizes[5] = { 2, 2, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xBBE57FE4, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_FLOAT, 2, true }, + { FT_FLOAT, 2, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0xC4CFD9A8, fields, 4); return &instance; } }; @@ -3808,9 +6741,17 @@ struct MarketingPromotionsXLocaleMeta { static DB2Meta const* Instance() { - static char const* types = "siiiibb"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x80362F57, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 7, 0xC04E61FB, fields, -1); return &instance; } }; @@ -3819,9 +6760,14 @@ struct MaterialMeta { static DB2Meta const* Instance() { - static char const* types = "biii"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x0BC8C134, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x370D43B4, fields, -1); return &instance; } }; @@ -3830,9 +6776,13 @@ struct MinorTalentMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xAAEF0DF8, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x09F57B9C, fields, 2); return &instance; } }; @@ -3841,9 +6791,22 @@ struct MissileTargetingMeta { static DB2Meta const* Instance() { - static char const* types = "fffffffffiii"; - static uint8 const arraySizes[12] = { 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2 }; - static DB2Meta instance(-1, 12, 0x2305491E, types, arraySizes, -1); + static DB2MetaField const fields[12] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 2, true }, + { FT_INT, 2, true }, + }; + static DB2Meta instance(-1, 12, 0xF695DDBA, fields, -1); return &instance; } }; @@ -3852,9 +6815,13 @@ struct ModelAnimCloakDampeningMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x839B4263, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xAA668B4F, fields, 2); return &instance; } }; @@ -3863,9 +6830,14 @@ struct ModelFileDataMeta { static DB2Meta const* Instance() { - static char const* types = "bii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(1, 3, 0xA395EB50, types, arraySizes, 2); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(0, 4, 0x9C9B4543, fields, 3); return &instance; } }; @@ -3874,9 +6846,12 @@ struct ModelRibbonQualityMeta { static DB2Meta const* Instance() { - static char const* types = "bi"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x38F764D9, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xA26E8DD1, fields, 1); return &instance; } }; @@ -3885,9 +6860,17 @@ struct ModifierTreeMeta { static DB2Meta const* Instance() { - static char const* types = "iiibbbb"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x7718AFC2, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 7, 0x643002AE, fields, -1); return &instance; } }; @@ -3896,9 +6879,21 @@ struct MountMeta { static DB2Meta const* Instance() { - static char const* types = "sssifhhbiii"; - static uint8 const arraySizes[11] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(8, 11, 0x4D812F19, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(3, 11, 0x629E87E2, fields, -1); return &instance; } }; @@ -3907,9 +6902,18 @@ struct MountCapabilityMeta { static DB2Meta const* Instance() { - static char const* types = "iihhhbii"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(6, 8, 0xB0D11D52, types, arraySizes, -1); + static DB2MetaField const fields[8] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(0, 8, 0xD8A906D6, fields, -1); return &instance; } }; @@ -3918,9 +6922,13 @@ struct MountTypeXCapabilityMeta { static DB2Meta const* Instance() { - static char const* types = "hhb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xA34A8445, types, arraySizes, 0); + static DB2MetaField const fields[3] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x613701E9, fields, 0); return &instance; } }; @@ -3929,9 +6937,13 @@ struct MountXDisplayMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xD59B9FE4, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x2D4F3D78, fields, 2); return &instance; } }; @@ -3940,9 +6952,14 @@ struct MovieMeta { static DB2Meta const* Instance() { - static char const* types = "iibb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xF3E9AE3B, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x4848C4FB, fields, -1); return &instance; } }; @@ -3951,9 +6968,11 @@ struct MovieFileDataMeta { static DB2Meta const* Instance() { - static char const* types = "h"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xAA16D59F, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 1, 0xB24F82EB, fields, -1); return &instance; } }; @@ -3962,9 +6981,69 @@ struct MovieVariationMeta { static DB2Meta const* Instance() { - static char const* types = "iih"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x3BFD250E, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xAEA671AA, fields, 2); + return &instance; + } +}; + +struct MultiStatePropertiesMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[11] = + { + { FT_FLOAT, 3, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 11, 0x50BB5EDC, fields, 10); + return &instance; + } +}; + +struct MultiTransitionPropertiesMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[5] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x5720F452, fields, -1); + return &instance; + } +}; + +struct MythicPlusSeasonRewardLevelsMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0xAD6A6D9F, fields, 3); return &instance; } }; @@ -3973,9 +7052,13 @@ struct NPCModelItemSlotDisplayInfoMeta { static DB2Meta const* Instance() { - static char const* types = "ibi"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x11D16204, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xB8EC2628, fields, 2); return &instance; } }; @@ -3984,9 +7067,11 @@ struct NPCSoundsMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 4 }; - static DB2Meta instance(-1, 1, 0x672E1A6B, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 4, false }, + }; + static DB2Meta instance(-1, 1, 0x5EF56D1F, fields, -1); return &instance; } }; @@ -3995,9 +7080,13 @@ struct NameGenMeta { static DB2Meta const* Instance() { - static char const* types = "sbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x2EF936CD, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xB0EBC6C9, fields, -1); return &instance; } }; @@ -4006,9 +7095,12 @@ struct NamesProfanityMeta { static DB2Meta const* Instance() { - static char const* types = "sb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xDFB56E0E, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xCD33D2BE, fields, -1); return &instance; } }; @@ -4017,9 +7109,11 @@ struct NamesReservedMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xE4923C1F, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xECCAE96B, fields, -1); return &instance; } }; @@ -4028,9 +7122,28 @@ struct NamesReservedLocaleMeta { static DB2Meta const* Instance() { - static char const* types = "sb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xC1403093, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x5AAEEDD3, fields, -1); + return &instance; + } +}; + +struct NumTalentsAtLevelMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 4, 0xDE3268EF, fields, -1); return &instance; } }; @@ -4039,9 +7152,18 @@ struct ObjectEffectMeta { static DB2Meta const* Instance() { - static char const* types = "fhbbbbii"; - static uint8 const arraySizes[8] = { 3, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 8, 0x6A0CF743, types, arraySizes, -1); + static DB2MetaField const fields[8] = + { + { FT_FLOAT, 3, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 8, 0x48D89FCF, fields, -1); return &instance; } }; @@ -4050,9 +7172,14 @@ struct ObjectEffectModifierMeta { static DB2Meta const* Instance() { - static char const* types = "fbbb"; - static uint8 const arraySizes[4] = { 4, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xA482B053, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_FLOAT, 4, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x68D120B3, fields, -1); return &instance; } }; @@ -4061,9 +7188,66 @@ struct ObjectEffectPackageElemMeta { static DB2Meta const* Instance() { - static char const* types = "hhh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x8CF043E5, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x3B8C53F9, fields, -1); + return &instance; + } +}; + +struct OccluderMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[9] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(0, 9, 0xFEDCAAB3, fields, -1); + return &instance; + } +}; + +struct OccluderLocationMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[4] = + { + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(2, 4, 0x95F8BBE4, fields, -1); + return &instance; + } +}; + +struct OccluderNodeMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 4, 0x19A34490, fields, -1); return &instance; } }; @@ -4072,9 +7256,16 @@ struct OutlineEffectMeta { static DB2Meta const* Instance() { - static char const* types = "fiiiii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x466B2BC4, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 2, false }, + }; + static DB2Meta instance(-1, 6, 0xECA16738, fields, -1); return &instance; } }; @@ -4083,9 +7274,13 @@ struct OverrideSpellDataMeta { static DB2Meta const* Instance() { - static char const* types = "iib"; - static uint8 const arraySizes[3] = { 10, 1, 1 }; - static DB2Meta instance(-1, 3, 0x9417628C, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 10, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xCEE01938, fields, -1); return &instance; } }; @@ -4094,9 +7289,12 @@ struct PVPBracketTypesMeta { static DB2Meta const* Instance() { - static char const* types = "bi"; - static uint8 const arraySizes[2] = { 1, 4 }; - static DB2Meta instance(-1, 2, 0x7C55E5BB, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, true }, + { FT_INT, 4, false }, + }; + static DB2Meta instance(-1, 2, 0x54CF87FB, fields, -1); return &instance; } }; @@ -4105,9 +7303,14 @@ struct PVPDifficultyMeta { static DB2Meta const* Instance() { - static char const* types = "bbbh"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x970B5E15, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x794DB95D, fields, 3); return &instance; } }; @@ -4116,9 +7319,12 @@ struct PVPItemMeta { static DB2Meta const* Instance() { - static char const* types = "ib"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xBD449801, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x0CD750C1, fields, -1); return &instance; } }; @@ -4127,9 +7333,11 @@ struct PageTextMaterialMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x96663ABF, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xF6F6B04B, fields, -1); return &instance; } }; @@ -4138,9 +7346,13 @@ struct PaperDollItemFrameMeta { static DB2Meta const* Instance() { - static char const* types = "sbi"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x66B0597E, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xB85F646E, fields, -1); return &instance; } }; @@ -4149,9 +7361,13 @@ struct ParagonReputationMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xD7712F98, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xF9AC6E2E, fields, 0); return &instance; } }; @@ -4160,9 +7376,30 @@ struct ParticleColorMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 3, 3, 3 }; - static DB2Meta instance(-1, 3, 0x1576D1E1, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 3, true }, + { FT_INT, 3, true }, + { FT_INT, 3, true }, + }; + static DB2Meta instance(-1, 3, 0xB44B4D4D, fields, -1); + return &instance; + } +}; + +struct ParticulateSoundMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[5] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0xF60E0955, fields, 0); return &instance; } }; @@ -4171,9 +7408,17 @@ struct PathMeta { static DB2Meta const* Instance() { - static char const* types = "bbbbbbb"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x5017579F, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 7, 0x3551690B, fields, -1); return &instance; } }; @@ -4182,9 +7427,14 @@ struct PathNodeMeta { static DB2Meta const* Instance() { - static char const* types = "iihh"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(0, 4, 0x76615830, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 4, 0x19A34490, fields, -1); return &instance; } }; @@ -4193,9 +7443,15 @@ struct PathNodePropertyMeta { static DB2Meta const* Instance() { - static char const* types = "hhbii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(3, 5, 0x92C03009, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 5, 0x578DA815, fields, -1); return &instance; } }; @@ -4204,9 +7460,14 @@ struct PathPropertyMeta { static DB2Meta const* Instance() { - static char const* types = "ihbi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(3, 4, 0x3D29C266, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 4, 0x3B269A90, fields, -1); return &instance; } }; @@ -4215,9 +7476,11 @@ struct PhaseMeta { static DB2Meta const* Instance() { - static char const* types = "h"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x0043219C, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 1, 0x60D39728, fields, -1); return &instance; } }; @@ -4226,9 +7489,23 @@ struct PhaseShiftZoneSoundsMeta { static DB2Meta const* Instance() { - static char const* types = "hhhhhbbbbiiii"; - static uint8 const arraySizes[13] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 13, 0x85ACB830, types, arraySizes, -1); + static DB2MetaField const fields[13] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 13, 0x7CA0A010, fields, -1); return &instance; } }; @@ -4237,9 +7514,12 @@ struct PhaseXPhaseGroupMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x66517AF6, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xF00195AE, fields, 1); return &instance; } }; @@ -4248,9 +7528,91 @@ struct PlayerConditionMeta { static DB2Meta const* Instance() { - static char const* types = "lsibhhibbibbihbibbbbiiiiibihbbbiiiihibbbbbbbhiiihhbbbbbiihhhibhhhiiihiibhbbihiiii"; - static uint8 const arraySizes[81] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 3, 3, 4, 4, 4, 4, 4, 4, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 2 }; - static DB2Meta instance(2, 81, 0x5B3DA113, types, arraySizes, -1); + static DB2MetaField const fields[81] = + { + { FT_LONG, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 4, false }, + { FT_SHORT, 4, false }, + { FT_SHORT, 4, false }, + { FT_INT, 3, false }, + { FT_BYTE, 3, false }, + { FT_SHORT, 4, false }, + { FT_SHORT, 4, false }, + { FT_SHORT, 4, false }, + { FT_INT, 4, true }, + { FT_INT, 4, true }, + { FT_INT, 4, false }, + { FT_SHORT, 2, false }, + { FT_INT, 2, false }, + { FT_INT, 4, true }, + { FT_BYTE, 4, false }, + { FT_SHORT, 4, false }, + { FT_SHORT, 4, false }, + { FT_BYTE, 4, false }, + { FT_BYTE, 4, false }, + { FT_INT, 4, false }, + { FT_INT, 4, false }, + { FT_INT, 4, false }, + { FT_INT, 6, false }, + { FT_INT, 2, true }, + }; + static DB2Meta instance(2, 81, 0xF28CBD18, fields, -1); return &instance; } }; @@ -4259,9 +7621,14 @@ struct PositionerMeta { static DB2Meta const* Instance() { - static char const* types = "fhbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xE830F1B1, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x533B33CB, fields, -1); return &instance; } }; @@ -4270,9 +7637,18 @@ struct PositionerStateMeta { static DB2Meta const* Instance() { - static char const* types = "fbiiiiii"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 8, 0x6C975DF4, types, arraySizes, -1); + static DB2MetaField const fields[8] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 8, 0x9E87B63A, fields, -1); return &instance; } }; @@ -4281,9 +7657,21 @@ struct PositionerStateEntryMeta { static DB2Meta const* Instance() { - static char const* types = "ffhhhhbbbbi"; - static uint8 const arraySizes[11] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 11, 0x667ED965, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 11, 0xBA9A19C4, fields, -1); return &instance; } }; @@ -4292,9 +7680,15 @@ struct PowerDisplayMeta { static DB2Meta const* Instance() { - static char const* types = "sbbbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xFD152E5B, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 5, 0xEB89C62F, fields, -1); return &instance; } }; @@ -4303,9 +7697,22 @@ struct PowerTypeMeta { static DB2Meta const* Instance() { - static char const* types = "ssffhhhbbbbb"; - static uint8 const arraySizes[12] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 12, 0x0C3844E1, types, arraySizes, -1); + static DB2MetaField const fields[12] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 12, 0x6D438CB5, fields, -1); return &instance; } }; @@ -4314,64 +7721,113 @@ struct PrestigeLevelInfoMeta { static DB2Meta const* Instance() { - static char const* types = "sibb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xA7B2D559, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x31BD813F, fields, -1); return &instance; } }; -struct PvpRewardMeta +struct PvpScalingEffectMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x72F4C016, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xAF88F6DB, fields, 1); return &instance; } }; -struct PvpScalingEffectMeta +struct PvpScalingEffectTypeMeta { static DB2Meta const* Instance() { - static char const* types = "fii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x52121A41, types, arraySizes, 1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xF6F6B04B, fields, -1); return &instance; } }; -struct PvpScalingEffectTypeMeta +struct PvpTalentMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x96663ABF, types, arraySizes, -1); + static DB2MetaField const fields[9] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(1, 9, 0x340BABA3, fields, 2); return &instance; } }; -struct PvpTalentMeta +struct PvpTalentCategoryMeta { static DB2Meta const* Instance() { - static char const* types = "siiiiiiiii"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0x6EB51740, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 1, 0xBB4B5731, fields, -1); return &instance; } }; -struct PvpTalentUnlockMeta +struct PvpTalentSlotUnlockMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x465C83BC, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0x572DDD84, fields, -1); + return &instance; + } +}; + +struct PvpTierMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[8] = + { + { FT_STRING, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 8, 0x689983C8, fields, 5); return &instance; } }; @@ -4380,9 +7836,11 @@ struct QuestFactionRewardMeta { static DB2Meta const* Instance() { - static char const* types = "h"; - static uint8 const arraySizes[1] = { 10 }; - static DB2Meta instance(-1, 1, 0xB0E02541, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_SHORT, 10, true }, + }; + static DB2Meta instance(-1, 1, 0x504FAFB5, fields, -1); return &instance; } }; @@ -4391,9 +7849,16 @@ struct QuestFeedbackEffectMeta { static DB2Meta const* Instance() { - static char const* types = "ihbbbb"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x89D55A27, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 6, 0x58E79FBF, fields, -1); return &instance; } }; @@ -4402,9 +7867,14 @@ struct QuestInfoMeta { static DB2Meta const* Instance() { - static char const* types = "shbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x4F45F445, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xDDB38B83, fields, -1); return &instance; } }; @@ -4413,9 +7883,13 @@ struct QuestLineMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x8046B23F, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xC4BD3235, fields, -1); return &instance; } }; @@ -4424,9 +7898,13 @@ struct QuestLineXQuestMeta { static DB2Meta const* Instance() { - static char const* types = "hhb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x8FA4A9C7, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x57EF18BF, fields, 0); return &instance; } }; @@ -4435,9 +7913,11 @@ struct QuestMoneyRewardMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 10 }; - static DB2Meta instance(-1, 1, 0x86397302, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 10, false }, + }; + static DB2Meta instance(-1, 1, 0x7E00C5B6, fields, -1); return &instance; } }; @@ -4446,9 +7926,18 @@ struct QuestObjectiveMeta { static DB2Meta const* Instance() { - static char const* types = "siibbbbh"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 8, 0xDD995180, types, arraySizes, 7); + static DB2MetaField const fields[8] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 8, 0x37353FB6, fields, 7); return &instance; } }; @@ -4457,9 +7946,17 @@ struct QuestPOIBlobMeta { static DB2Meta const* Instance() { - static char const* types = "ihhbbiii"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(0, 8, 0xEC15976E, types, arraySizes, 2); + static DB2MetaField const fields[7] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(0, 7, 0x5DF4B040, fields, 1); return &instance; } }; @@ -4468,9 +7965,14 @@ struct QuestPOIPointMeta { static DB2Meta const* Instance() { - static char const* types = "ihhi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(0, 4, 0x8CF2B119, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 4, 0x18D6E719, fields, 3); return &instance; } }; @@ -4479,9 +7981,14 @@ struct QuestPackageItemMeta { static DB2Meta const* Instance() { - static char const* types = "ihbi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xCF9401CF, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xEB0764D1, fields, -1); return &instance; } }; @@ -4490,9 +7997,12 @@ struct QuestSortMeta { static DB2Meta const* Instance() { - static char const* types = "sb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xAD7072C6, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x2F5E2228, fields, -1); return &instance; } }; @@ -4501,9 +8011,11 @@ struct QuestV2Meta { static DB2Meta const* Instance() { - static char const* types = "h"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x70495C9B, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 1, 0x638D02EF, fields, -1); return &instance; } }; @@ -4512,9 +8024,34 @@ struct QuestV2CliTaskMeta { static DB2Meta const* Instance() { - static char const* types = "lssihhhhhhbbbbbbbbbbiiii"; - static uint8 const arraySizes[24] = { 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(20, 24, 0x3F026A14, types, arraySizes, -1); + static DB2MetaField const fields[24] = + { + { FT_LONG, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 3, false }, + }; + static DB2Meta instance(3, 24, 0xC0387D4E, fields, -1); return &instance; } }; @@ -4523,9 +8060,12 @@ struct QuestXGroupActivityMeta { static DB2Meta const* Instance() { - static char const* types = "ii"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x06CC45D3, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xAA88A593, fields, -1); return &instance; } }; @@ -4534,9 +8074,11 @@ struct QuestXPMeta { static DB2Meta const* Instance() { - static char const* types = "h"; - static uint8 const arraySizes[1] = { 10 }; - static DB2Meta instance(-1, 1, 0xCB76B4C0, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_SHORT, 10, false }, + }; + static DB2Meta instance(-1, 1, 0xC33E0774, fields, -1); return &instance; } }; @@ -4545,9 +8087,14 @@ struct RandPropPointsMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 5, 5, 5 }; - static DB2Meta instance(-1, 3, 0x4E2C0BCC, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_INT, 5, false }, + { FT_INT, 5, false }, + { FT_INT, 5, false }, + }; + static DB2Meta instance(-1, 4, 0x7741F65C, fields, -1); return &instance; } }; @@ -4556,9 +8103,13 @@ struct RelicSlotTierRequirementMeta { static DB2Meta const* Instance() { - static char const* types = "ibb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x129FCC09, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x22CDBDE9, fields, -1); return &instance; } }; @@ -4567,9 +8118,15 @@ struct RelicTalentMeta { static DB2Meta const* Instance() { - static char const* types = "hbiii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x7A5963FD, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x8BEAE937, fields, -1); return &instance; } }; @@ -4578,9 +8135,16 @@ struct ResearchBranchMeta { static DB2Meta const* Instance() { - static char const* types = "sihbii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x58A3876E, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 6, 0xA6CB64A5, fields, -1); return &instance; } }; @@ -4589,9 +8153,13 @@ struct ResearchFieldMeta { static DB2Meta const* Instance() { - static char const* types = "sbi"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(2, 3, 0x85868B9F, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(1, 3, 0xD7448990, fields, -1); return &instance; } }; @@ -4600,9 +8168,19 @@ struct ResearchProjectMeta { static DB2Meta const* Instance() { - static char const* types = "ssihbbiii"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(6, 9, 0xB1CAB80B, types, arraySizes, -1); + static DB2MetaField const fields[9] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(2, 9, 0x4A748755, fields, -1); return &instance; } }; @@ -4611,9 +8189,14 @@ struct ResearchSiteMeta { static DB2Meta const* Instance() { - static char const* types = "sihi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x25F7DCC7, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x14F7693B, fields, -1); return &instance; } }; @@ -4622,9 +8205,13 @@ struct ResistancesMeta { static DB2Meta const* Instance() { - static char const* types = "sbi"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xA3EAE5AE, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xF7F049B5, fields, -1); return &instance; } }; @@ -4633,9 +8220,16 @@ struct RewardPackMeta { static DB2Meta const* Instance() { - static char const* types = "ifbbii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0xDB6CC0AB, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 6, 0xB0527FA7, fields, -1); return &instance; } }; @@ -4644,9 +8238,13 @@ struct RewardPackXCurrencyTypeMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x217E6712, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xEA88FC16, fields, 2); return &instance; } }; @@ -4655,9 +8253,13 @@ struct RewardPackXItemMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x74F6B9BD, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x277E8179, fields, 2); return &instance; } }; @@ -4666,9 +8268,15 @@ struct RibbonQualityMeta { static DB2Meta const* Instance() { - static char const* types = "fffbi"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xC75DAEA8, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 5, 0xBB0CC4F4, fields, -1); return &instance; } }; @@ -4677,9 +8285,12 @@ struct RulesetItemUpgradeMeta { static DB2Meta const* Instance() { - static char const* types = "ih"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xFB641AE0, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xA03B4C48, fields, -1); return &instance; } }; @@ -4688,20 +8299,11 @@ struct SDReplacementModelMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xE1F906C2, types, arraySizes, -1); - return &instance; - } -}; - -struct SandboxScalingMeta -{ - static DB2Meta const* Instance() - { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x5200B7F5, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xD9C05976, fields, -1); return &instance; } }; @@ -4710,9 +8312,13 @@ struct ScalingStatDistributionMeta { static DB2Meta const* Instance() { - static char const* types = "hii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xDED48286, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x34B9A97A, fields, -1); return &instance; } }; @@ -4721,9 +8327,15 @@ struct ScenarioMeta { static DB2Meta const* Instance() { - static char const* types = "shbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xD052232A, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x0857765A, fields, -1); return &instance; } }; @@ -4732,9 +8344,12 @@ struct ScenarioEventEntryMeta { static DB2Meta const* Instance() { - static char const* types = "hb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x02E80455, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x34B30E13, fields, -1); return &instance; } }; @@ -4743,9 +8358,21 @@ struct ScenarioStepMeta { static DB2Meta const* Instance() { - static char const* types = "sshhhbbii"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 9, 0x201B0EFC, types, arraySizes, 2); + static DB2MetaField const fields[11] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 11, 0x8FF5E1E6, fields, 2); return &instance; } }; @@ -4754,9 +8381,12 @@ struct SceneScriptMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xC694B81E, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xEF472E96, fields, -1); return &instance; } }; @@ -4765,9 +8395,12 @@ struct SceneScriptGlobalTextMeta { static DB2Meta const* Instance() { - static char const* types = "ss"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xB9F8FDF1, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xDE6E2251, fields, -1); return &instance; } }; @@ -4776,9 +8409,11 @@ struct SceneScriptPackageMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x96663ABF, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xF6F6B04B, fields, -1); return &instance; } }; @@ -4787,9 +8422,14 @@ struct SceneScriptPackageMemberMeta { static DB2Meta const* Instance() { - static char const* types = "hhhb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x787A715F, types, arraySizes, 0); + static DB2MetaField const fields[4] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x9E18D06F, fields, 0); return &instance; } }; @@ -4798,9 +8438,12 @@ struct SceneScriptTextMeta { static DB2Meta const* Instance() { - static char const* types = "ss"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xB9F8FDF1, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xDE6E2251, fields, -1); return &instance; } }; @@ -4809,9 +8452,15 @@ struct ScheduledIntervalMeta { static DB2Meta const* Instance() { - static char const* types = "iiiii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x5DD2FF46, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x0C287F7A, fields, -1); return &instance; } }; @@ -4820,9 +8469,18 @@ struct ScheduledWorldStateMeta { static DB2Meta const* Instance() { - static char const* types = "iiiiiiii"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 8, 0xFCB13A6A, types, arraySizes, 0); + static DB2MetaField const fields[8] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 8, 0xDC45735A, fields, 0); return &instance; } }; @@ -4831,9 +8489,15 @@ struct ScheduledWorldStateGroupMeta { static DB2Meta const* Instance() { - static char const* types = "iiiii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x21F6EE03, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0xCF71B287, fields, -1); return &instance; } }; @@ -4842,9 +8506,13 @@ struct ScheduledWorldStateXUniqCatMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(0, 3, 0x7EFF57FD, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 3, 0xF512C749, fields, 2); return &instance; } }; @@ -4853,9 +8521,22 @@ struct ScreenEffectMeta { static DB2Meta const* Instance() { - static char const* types = "sihhhhbbbiii"; - static uint8 const arraySizes[12] = { 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 12, 0x4D5B91C5, types, arraySizes, -1); + static DB2MetaField const fields[12] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 4, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 12, 0x7A371491, fields, -1); return &instance; } }; @@ -4864,9 +8545,11 @@ struct ScreenLocationMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x96663ABF, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xF6F6B04B, fields, -1); return &instance; } }; @@ -4875,9 +8558,11 @@ struct SeamlessSiteMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xBFE7B9D3, types, arraySizes, 0); + static DB2MetaField const fields[1] = + { + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x9E36592F, fields, 0); return &instance; } }; @@ -4886,9 +8571,11 @@ struct ServerMessagesMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x1C7A1347, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xCC7971DF, fields, -1); return &instance; } }; @@ -4897,9 +8584,39 @@ struct ShadowyEffectMeta { static DB2Meta const* Instance() { - static char const* types = "iifffffffbbii"; - static uint8 const arraySizes[13] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 13, 0xE909BB18, types, arraySizes, -1); + static DB2MetaField const fields[13] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 13, 0x7292BC4C, fields, -1); + return &instance; + } +}; + +struct SiegeablePropertiesMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x98E42A9F, fields, -1); return &instance; } }; @@ -4908,9 +8625,23 @@ struct SkillLineMeta { static DB2Meta const* Instance() { - static char const* types = "ssshbbii"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 8, 0x3F7E88AF, types, arraySizes, -1); + static DB2MetaField const fields[13] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(5, 13, 0xEC83FE8A, fields, -1); return &instance; } }; @@ -4919,9 +8650,25 @@ struct SkillLineAbilityMeta { static DB2Meta const* Instance() { - static char const* types = "liiihhhhhbihbb"; - static uint8 const arraySizes[14] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(1, 14, 0x97B5A653, types, arraySizes, 4); + static DB2MetaField const fields[15] = + { + { FT_LONG, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(1, 15, 0xA38AD072, fields, 2); return &instance; } }; @@ -4930,9 +8677,17 @@ struct SkillRaceClassInfoMeta { static DB2Meta const* Instance() { - static char const* types = "lhhhbbi"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x9752C2CE, types, arraySizes, 1); + static DB2MetaField const fields[7] = + { + { FT_LONG, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 7, 0x4CFD464E, fields, 1); return &instance; } }; @@ -4941,9 +8696,16 @@ struct SoundAmbienceMeta { static DB2Meta const* Instance() { - static char const* types = "biii"; - static uint8 const arraySizes[4] = { 1, 1, 1, 2 }; - static DB2Meta instance(-1, 4, 0xB073D4B5, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 2, false }, + { FT_INT, 2, false }, + { FT_INT, 2, false }, + }; + static DB2Meta instance(-1, 6, 0x625245C7, fields, -1); return &instance; } }; @@ -4952,9 +8714,13 @@ struct SoundAmbienceFlavorMeta { static DB2Meta const* Instance() { - static char const* types = "iih"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x2C58D929, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x41E33D5D, fields, 2); return &instance; } }; @@ -4963,9 +8729,18 @@ struct SoundBusMeta { static DB2Meta const* Instance() { - static char const* types = "fbbbbbih"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(6, 8, 0xB2ACDE2A, types, arraySizes, 7); + static DB2MetaField const fields[8] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(0, 8, 0x7CC84C2D, fields, 7); return &instance; } }; @@ -4974,9 +8749,17 @@ struct SoundBusOverrideMeta { static DB2Meta const* Instance() { - static char const* types = "ifbbbii"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(0, 7, 0x6D887F48, types, arraySizes, 5); + static DB2MetaField const fields[7] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(0, 7, 0xF321EA82, fields, 1); return &instance; } }; @@ -4985,9 +8768,12 @@ struct SoundEmitterPillPointsMeta { static DB2Meta const* Instance() { - static char const* types = "fh"; - static uint8 const arraySizes[2] = { 3, 1 }; - static DB2Meta instance(-1, 2, 0x41FCF15B, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_FLOAT, 3, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xD63C5DE3, fields, 1); return &instance; } }; @@ -4996,9 +8782,22 @@ struct SoundEmittersMeta { static DB2Meta const* Instance() { - static char const* types = "sffhhbbbiiih"; - static uint8 const arraySizes[12] = { 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(8, 12, 0x55A3B17E, types, arraySizes, 11); + static DB2MetaField const fields[12] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(3, 12, 0x1FDCDD5A, fields, 11); return &instance; } }; @@ -5007,9 +8806,17 @@ struct SoundEnvelopeMeta { static DB2Meta const* Instance() { - static char const* types = "iihhhbi"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x5B78031C, types, arraySizes, 0); + static DB2MetaField const fields[7] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 7, 0xBD6F1248, fields, 0); return &instance; } }; @@ -5018,9 +8825,11 @@ struct SoundFilterMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x96663ABF, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xF6F6B04B, fields, -1); return &instance; } }; @@ -5029,9 +8838,13 @@ struct SoundFilterElemMeta { static DB2Meta const* Instance() { - static char const* types = "fbb"; - static uint8 const arraySizes[3] = { 9, 1, 1 }; - static DB2Meta instance(-1, 3, 0xE17AC589, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_FLOAT, 9, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x84F8D205, fields, 2); return &instance; } }; @@ -5040,9 +8853,26 @@ struct SoundKitMeta { static DB2Meta const* Instance() { - static char const* types = "ifffhhbbbfffffhb"; - static uint8 const arraySizes[16] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(0, 16, 0x0E9CB7AE, types, arraySizes, -1); + static DB2MetaField const fields[16] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(0, 16, 0xAF055926, fields, -1); return &instance; } }; @@ -5051,9 +8881,53 @@ struct SoundKitAdvancedMeta { static DB2Meta const* Instance() { - static char const* types = "ifffffiifbiiiiiiiiiibffffbhffiiibbiiiiii"; - static uint8 const arraySizes[40] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(0, 40, 0x73F6F023, types, arraySizes, -1); + static DB2MetaField const fields[43] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(0, 43, 0x6EAFA63E, fields, -1); return &instance; } }; @@ -5062,9 +8936,12 @@ struct SoundKitChildMeta { static DB2Meta const* Instance() { - static char const* types = "ii"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x2827A3B5, types, arraySizes, 0); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x4215B0DD, fields, 1); return &instance; } }; @@ -5073,9 +8950,14 @@ struct SoundKitEntryMeta { static DB2Meta const* Instance() { - static char const* types = "iibf"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x6ED6E26F, types, arraySizes, 0); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0xCBC66B5F, fields, 0); return &instance; } }; @@ -5084,9 +8966,12 @@ struct SoundKitFallbackMeta { static DB2Meta const* Instance() { - static char const* types = "ii"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xB1A5106F, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x53D01CD7, fields, -1); return &instance; } }; @@ -5095,9 +8980,11 @@ struct SoundKitNameMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x96663ABF, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xF6F6B04B, fields, -1); return &instance; } }; @@ -5106,9 +8993,15 @@ struct SoundOverrideMeta { static DB2Meta const* Instance() { - static char const* types = "hhhb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xFB7643F6, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x4EC15243, fields, -1); return &instance; } }; @@ -5117,9 +9010,33 @@ struct SoundProviderPreferencesMeta { static DB2Meta const* Instance() { - static char const* types = "sfffffffffffffffhhhhhbb"; - static uint8 const arraySizes[23] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 23, 0x85F218A4, types, arraySizes, -1); + static DB2MetaField const fields[23] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 23, 0xF0F42A22, fields, -1); return &instance; } }; @@ -5128,9 +9045,14 @@ struct SourceInfoMeta { static DB2Meta const* Instance() { - static char const* types = "sbbi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x7C214135, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xA94C7962, fields, 3); return &instance; } }; @@ -5139,9 +9061,25 @@ struct SpamMessagesMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x0D4BA7E7, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x1A080193, fields, -1); + return &instance; + } +}; + +struct SpecSetMemberMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[2] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xC05B6C73, fields, 1); return &instance; } }; @@ -5150,9 +9088,30 @@ struct SpecializationSpellsMeta { static DB2Meta const* Instance() { - static char const* types = "siihbi"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(5, 6, 0xAE3436F3, types, arraySizes, 3); + static DB2MetaField const fields[6] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(1, 6, 0x88A56A2F, fields, 2); + return &instance; + } +}; + +struct SpecializationSpellsDisplayMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_INT, 6, false }, + }; + static DB2Meta instance(-1, 2, 0xBD5EEC46, fields, 0); return &instance; } }; @@ -5161,9 +9120,13 @@ struct SpellMeta { static DB2Meta const* Instance() { - static char const* types = "ssss"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x2273DFFF, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xFFF1DA38, fields, -1); return &instance; } }; @@ -5172,9 +9135,12 @@ struct SpellActionBarPrefMeta { static DB2Meta const* Instance() { - static char const* types = "ih"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x1EF80B2B, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xCF471C9B, fields, -1); return &instance; } }; @@ -5183,9 +9149,18 @@ struct SpellActivationOverlayMeta { static DB2Meta const* Instance() { - static char const* types = "iiifibbi"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 4, 1, 1, 1 }; - static DB2Meta instance(-1, 8, 0x23568FC7, types, arraySizes, -1); + static DB2MetaField const fields[8] = + { + { FT_INT, 4, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 8, 0xE72C81EF, fields, -1); return &instance; } }; @@ -5194,9 +9169,18 @@ struct SpellAuraOptionsMeta { static DB2Meta const* Instance() { - static char const* types = "iiihhbbi"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 8, 0xE05BE94F, types, arraySizes, 7); + static DB2MetaField const fields[8] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 2, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 8, 0xCBDA0981, fields, 7); return &instance; } }; @@ -5205,9 +9189,20 @@ struct SpellAuraRestrictionsMeta { static DB2Meta const* Instance() { - static char const* types = "iiiibbbbbi"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0x7CDF3311, types, arraySizes, 9); + static DB2MetaField const fields[10] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 10, 0xD7479271, fields, 9); return &instance; } }; @@ -5216,9 +9211,12 @@ struct SpellAuraVisXChrSpecMeta { static DB2Meta const* Instance() { - static char const* types = "hh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xA65B6A4A, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x8F54FD52, fields, 1); return &instance; } }; @@ -5227,9 +9225,14 @@ struct SpellAuraVisibilityMeta { static DB2Meta const* Instance() { - static char const* types = "bbii"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(2, 4, 0xA549F79C, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 4, 0xB7F28C20, fields, 3); return &instance; } }; @@ -5238,9 +9241,13 @@ struct SpellCastTimesMeta { static DB2Meta const* Instance() { - static char const* types = "iih"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x4129C6A4, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xA66E197C, fields, -1); return &instance; } }; @@ -5249,9 +9256,17 @@ struct SpellCastingRequirementsMeta { static DB2Meta const* Instance() { - static char const* types = "ihhhbbb"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0xD8B56E5D, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 7, 0xC6D7C649, fields, -1); return &instance; } }; @@ -5260,9 +9275,19 @@ struct SpellCategoriesMeta { static DB2Meta const* Instance() { - static char const* types = "hhhbbbbbi"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 9, 0x14E916CC, types, arraySizes, 8); + static DB2MetaField const fields[9] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 9, 0xEF1D2548, fields, 8); return &instance; } }; @@ -5271,9 +9296,16 @@ struct SpellCategoryMeta { static DB2Meta const* Instance() { - static char const* types = "sibbbi"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0xEA60E384, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 6, 0x53EB1CD3, fields, -1); return &instance; } }; @@ -5282,9 +9314,70 @@ struct SpellChainEffectsMeta { static DB2Meta const* Instance() { - static char const* types = "fffiiffffffffffffffffffffffffffffffffffiffffhhhhbbbbbbbbbbii"; - static uint8 const arraySizes[60] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3 }; - static DB2Meta instance(-1, 60, 0x4E8FF369, types, arraySizes, -1); + static DB2MetaField const fields[60] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 11, false }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_INT, 3, true }, + }; + static DB2Meta instance(-1, 60, 0x461F9829, fields, -1); return &instance; } }; @@ -5293,9 +9386,14 @@ struct SpellClassOptionsMeta { static DB2Meta const* Instance() { - static char const* types = "iibi"; - static uint8 const arraySizes[4] = { 1, 4, 1, 1 }; - static DB2Meta instance(-1, 4, 0x80FBD67A, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 4, true }, + }; + static DB2Meta instance(-1, 4, 0xB4E205E0, fields, -1); return &instance; } }; @@ -5304,9 +9402,15 @@ struct SpellCooldownsMeta { static DB2Meta const* Instance() { - static char const* types = "iiibi"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xCA8D8B3C, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x24886B08, fields, 4); return &instance; } }; @@ -5315,9 +9419,11 @@ struct SpellDescriptionVariablesMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xA8EDE75B, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x9C318DAF, fields, -1); return &instance; } }; @@ -5326,9 +9432,14 @@ struct SpellDispelTypeMeta { static DB2Meta const* Instance() { - static char const* types = "ssbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xE9DDA799, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xAA83295A, fields, -1); return &instance; } }; @@ -5337,9 +9448,13 @@ struct SpellDurationMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x0D6C9082, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x22236CBC, fields, -1); return &instance; } }; @@ -5348,9 +9463,59 @@ struct SpellEffectMeta { static DB2Meta const* Instance() { - static char const* types = "iiiiiififfiiiiffififfffffiiiii"; - static uint8 const arraySizes[30] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 2, 2, 2, 1 }; - static DB2Meta instance(0, 30, 0x3244098B, types, arraySizes, 29); + static DB2MetaField const fields[28] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 2, true }, + { FT_INT, 2, false }, + { FT_INT, 4, true }, + { FT_SHORT, 2, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 28, 0x803150B7, fields, 27); + return &instance; + } +}; + +struct SpellEffectAutoDescriptionMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[9] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 9, 0x7C523D94, fields, -1); return &instance; } }; @@ -5359,9 +9524,14 @@ struct SpellEffectEmissionMeta { static DB2Meta const* Instance() { - static char const* types = "ffhb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xC6E61A9B, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 4, 0x66D096CB, fields, -1); return &instance; } }; @@ -5370,9 +9540,14 @@ struct SpellEquippedItemsMeta { static DB2Meta const* Instance() { - static char const* types = "iiib"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xCE628176, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0xA0588766, fields, -1); return &instance; } }; @@ -5381,9 +9556,16 @@ struct SpellFlyoutMeta { static DB2Meta const* Instance() { - static char const* types = "lssbii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x437671BD, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_LONG, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 6, 0x1F516F53, fields, -1); return &instance; } }; @@ -5392,9 +9574,13 @@ struct SpellFlyoutItemMeta { static DB2Meta const* Instance() { - static char const* types = "ibb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xF86ADE09, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x650A0B4D, fields, 2); return &instance; } }; @@ -5403,9 +9589,11 @@ struct SpellFocusObjectMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x96663ABF, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x9F2C8370, fields, -1); return &instance; } }; @@ -5414,9 +9602,15 @@ struct SpellInterruptsMeta { static DB2Meta const* Instance() { - static char const* types = "bhiii"; - static uint8 const arraySizes[5] = { 1, 1, 2, 2, 1 }; - static DB2Meta instance(-1, 5, 0x2FA8EA94, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, true }, + { FT_INT, 2, true }, + { FT_INT, 2, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0xF551B940, fields, 4); return &instance; } }; @@ -5425,9 +9619,30 @@ struct SpellItemEnchantmentMeta { static DB2Meta const* Instance() { - static char const* types = "sifiihhhhhhbbbbbbbi"; - static uint8 const arraySizes[19] = { 1, 3, 3, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 19, 0x80DEA734, types, arraySizes, -1); + static DB2MetaField const fields[20] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 3, false }, + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 3, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 3, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 20, 0x96D1828E, fields, -1); return &instance; } }; @@ -5436,9 +9651,16 @@ struct SpellItemEnchantmentConditionMeta { static DB2Meta const* Instance() { - static char const* types = "ibbbbb"; - static uint8 const arraySizes[6] = { 5, 5, 5, 5, 5, 5 }; - static DB2Meta instance(-1, 6, 0xB9C16961, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_BYTE, 5, false }, + { FT_INT, 5, false }, + { FT_BYTE, 5, false }, + { FT_BYTE, 5, false }, + { FT_BYTE, 5, false }, + { FT_BYTE, 5, false }, + }; + static DB2Meta instance(-1, 6, 0xFAA95A11, fields, -1); return &instance; } }; @@ -5447,9 +9669,13 @@ struct SpellKeyboundOverrideMeta { static DB2Meta const* Instance() { - static char const* types = "sib"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x6ECA16FC, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xFB8AD330, fields, -1); return &instance; } }; @@ -5458,9 +9684,12 @@ struct SpellLabelMeta { static DB2Meta const* Instance() { - static char const* types = "ii"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x68E44736, types, arraySizes, 1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xCCA24F16, fields, 1); return &instance; } }; @@ -5469,9 +9698,13 @@ struct SpellLearnSpellMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x153EBA26, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xCC8637D2, fields, -1); return &instance; } }; @@ -5480,9 +9713,16 @@ struct SpellLevelsMeta { static DB2Meta const* Instance() { - static char const* types = "hhhbbi"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x9E7D1CCD, types, arraySizes, 5); + static DB2MetaField const fields[6] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 6, 0xE3096221, fields, 5); return &instance; } }; @@ -5491,9 +9731,11 @@ struct SpellMechanicMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xF2075D8C, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x24C6F0F3, fields, -1); return &instance; } }; @@ -5502,9 +9744,22 @@ struct SpellMiscMeta { static DB2Meta const* Instance() { - static char const* types = "hhhbififbii"; - static uint8 const arraySizes[11] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 1 }; - static DB2Meta instance(-1, 11, 0xCDC114D5, types, arraySizes, 10); + static DB2MetaField const fields[12] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 14, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 12, 0x76E982BB, fields, 11); return &instance; } }; @@ -5513,9 +9768,25 @@ struct SpellMissileMeta { static DB2Meta const* Instance() { - static char const* types = "ifffffffffffffb"; - static uint8 const arraySizes[15] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 15, 0x1D35645E, types, arraySizes, -1); + static DB2MetaField const fields[15] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 15, 0xAF286A50, fields, -1); return &instance; } }; @@ -5524,9 +9795,27 @@ struct SpellMissileMotionMeta { static DB2Meta const* Instance() { - static char const* types = "ssbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x6B78A45B, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xA61A5983, fields, -1); + return &instance; + } +}; + +struct SpellNameMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[1] = + { + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x9F2C8370, fields, -1); return &instance; } }; @@ -5535,9 +9824,24 @@ struct SpellPowerMeta { static DB2Meta const* Instance() { - static char const* types = "iffifbbiiiiiii"; - static uint8 const arraySizes[14] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(7, 14, 0x8E5E46EC, types, arraySizes, 13); + static DB2MetaField const fields[14] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 14, 0x12ED7A99, fields, 13); return &instance; } }; @@ -5546,9 +9850,13 @@ struct SpellPowerDifficultyMeta { static DB2Meta const* Instance() { - static char const* types = "bbi"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(2, 3, 0x74714FF7, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(0, 3, 0x08FEDBFF, fields, -1); return &instance; } }; @@ -5557,9 +9865,13 @@ struct SpellProceduralEffectMeta { static DB2Meta const* Instance() { - static char const* types = "fbi"; - static uint8 const arraySizes[3] = { 4, 1, 1 }; - static DB2Meta instance(2, 3, 0x3E47F4EF, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_FLOAT, 4, true }, + }; + static DB2Meta instance(0, 3, 0xF320E3AD, fields, -1); return &instance; } }; @@ -5568,9 +9880,12 @@ struct SpellProcsPerMinuteMeta { static DB2Meta const* Instance() { - static char const* types = "fb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x4BC1931B, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xBEBE0C8B, fields, -1); return &instance; } }; @@ -5579,9 +9894,14 @@ struct SpellProcsPerMinuteModMeta { static DB2Meta const* Instance() { - static char const* types = "fhbh"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x2503C18B, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xE5827335, fields, 3); return &instance; } }; @@ -5590,9 +9910,14 @@ struct SpellRadiusMeta { static DB2Meta const* Instance() { - static char const* types = "ffff"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xC12E5C90, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0xAE4257F8, fields, -1); return &instance; } }; @@ -5601,9 +9926,15 @@ struct SpellRangeMeta { static DB2Meta const* Instance() { - static char const* types = "ssffb"; - static uint8 const arraySizes[5] = { 1, 1, 2, 2, 1 }; - static DB2Meta instance(-1, 5, 0xDE2E3F8E, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 2, true }, + { FT_FLOAT, 2, true }, + }; + static DB2Meta instance(-1, 5, 0x6B9E2FD2, fields, -1); return &instance; } }; @@ -5612,9 +9943,13 @@ struct SpellReagentsMeta { static DB2Meta const* Instance() { - static char const* types = "iih"; - static uint8 const arraySizes[3] = { 1, 8, 8 }; - static DB2Meta instance(-1, 3, 0x0463C688, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 8, true }, + { FT_SHORT, 8, true }, + }; + static DB2Meta instance(-1, 3, 0x4B7DC644, fields, -1); return &instance; } }; @@ -5623,9 +9958,13 @@ struct SpellReagentsCurrencyMeta { static DB2Meta const* Instance() { - static char const* types = "ihh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x90A5E5D2, types, arraySizes, 0); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x4D3F01C6, fields, 0); return &instance; } }; @@ -5634,9 +9973,15 @@ struct SpellScalingMeta { static DB2Meta const* Instance() { - static char const* types = "ihiii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xF67A5719, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x4B0C2E65, fields, -1); return &instance; } }; @@ -5645,9 +9990,14 @@ struct SpellShapeshiftMeta { static DB2Meta const* Instance() { - static char const* types = "iiib"; - static uint8 const arraySizes[4] = { 1, 2, 2, 1 }; - static DB2Meta instance(-1, 4, 0xA461C24D, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 2, true }, + { FT_INT, 2, true }, + }; + static DB2Meta instance(-1, 4, 0x91C4FFE9, fields, -1); return &instance; } }; @@ -5656,9 +10006,20 @@ struct SpellShapeshiftFormMeta { static DB2Meta const* Instance() { - static char const* types = "sfihhbbiii"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 4, 8 }; - static DB2Meta instance(-1, 10, 0x130819AF, types, arraySizes, -1); + static DB2MetaField const fields[10] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 4, false }, + { FT_INT, 8, false }, + }; + static DB2Meta instance(-1, 10, 0x7082136E, fields, -1); return &instance; } }; @@ -5667,9 +10028,12 @@ struct SpellSpecialUnitEffectMeta { static DB2Meta const* Instance() { - static char const* types = "hi"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x76989615, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0xF084B84D, fields, -1); return &instance; } }; @@ -5678,9 +10042,18 @@ struct SpellTargetRestrictionsMeta { static DB2Meta const* Instance() { - static char const* types = "ffihbbii"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 8, 0x7B330026, types, arraySizes, 7); + static DB2MetaField const fields[8] = + { + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 8, 0x47BE0E0C, fields, 7); return &instance; } }; @@ -5689,9 +10062,13 @@ struct SpellTotemsMeta { static DB2Meta const* Instance() { - static char const* types = "iih"; - static uint8 const arraySizes[3] = { 1, 2, 2 }; - static DB2Meta instance(-1, 3, 0xEC0C4866, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_SHORT, 2, false }, + { FT_INT, 2, true }, + }; + static DB2Meta instance(-1, 3, 0x5214FD94, fields, -1); return &instance; } }; @@ -5700,9 +10077,25 @@ struct SpellVisualMeta { static DB2Meta const* Instance() { - static char const* types = "ffihbbiiiihiii"; - static uint8 const arraySizes[14] = { 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 14, 0x1C1301D2, types, arraySizes, -1); + static DB2MetaField const fields[15] = + { + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 15, 0x514F85ED, fields, -1); return &instance; } }; @@ -5711,9 +10104,13 @@ struct SpellVisualAnimMeta { static DB2Meta const* Instance() { - static char const* types = "hhh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x0ABD7A19, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xB27FB4A5, fields, -1); return &instance; } }; @@ -5722,9 +10119,21 @@ struct SpellVisualColorEffectMeta { static DB2Meta const* Instance() { - static char const* types = "fifhhhhhbbi"; - static uint8 const arraySizes[11] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 11, 0x7E5B2E66, types, arraySizes, -1); + static DB2MetaField const fields[11] = + { + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 11, 0x773CE0DE, fields, -1); return &instance; } }; @@ -5733,9 +10142,24 @@ struct SpellVisualEffectNameMeta { static DB2Meta const* Instance() { - static char const* types = "ffffffiiibiii"; - static uint8 const arraySizes[13] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 13, 0xB930A934, types, arraySizes, -1); + static DB2MetaField const fields[14] = + { + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 14, 0x10206967, fields, -1); return &instance; } }; @@ -5744,9 +10168,19 @@ struct SpellVisualEventMeta { static DB2Meta const* Instance() { - static char const* types = "iiiiiiiii"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 9, 0xAE75BC3C, types, arraySizes, 8); + static DB2MetaField const fields[9] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 9, 0x8352EE58, fields, 8); return &instance; } }; @@ -5755,9 +10189,15 @@ struct SpellVisualKitMeta { static DB2Meta const* Instance() { - static char const* types = "ifihh"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xDC04F488, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 5, 0x3F538334, fields, -1); return &instance; } }; @@ -5766,9 +10206,16 @@ struct SpellVisualKitAreaModelMeta { static DB2Meta const* Instance() { - static char const* types = "ifffhb"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0xBE76E593, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 6, 0x34C79353, fields, -1); return &instance; } }; @@ -5777,9 +10224,13 @@ struct SpellVisualKitEffectMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xB78084B7, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xF104E59F, fields, 2); return &instance; } }; @@ -5788,9 +10239,32 @@ struct SpellVisualKitModelAttachMeta { static DB2Meta const* Instance() { - static char const* types = "ffihbbhffffffffhhhhifi"; - static uint8 const arraySizes[22] = { 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(2, 22, 0xBCE18649, types, arraySizes, 21); + static DB2MetaField const fields[22] = + { + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(2, 22, 0x75650E39, fields, 21); return &instance; } }; @@ -5799,9 +10273,26 @@ struct SpellVisualMissileMeta { static DB2Meta const* Instance() { - static char const* types = "iiiffhhhhhbbiiih"; - static uint8 const arraySizes[16] = { 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(12, 16, 0x00BA67A5, types, arraySizes, 15); + static DB2MetaField const fields[16] = + { + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(2, 16, 0x0A0345EB, fields, 15); return &instance; } }; @@ -5810,9 +10301,12 @@ struct SpellXDescriptionVariablesMeta { static DB2Meta const* Instance() { - static char const* types = "ii"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xB08E6876, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xFBC7B7AE, fields, -1); return &instance; } }; @@ -5821,9 +10315,23 @@ struct SpellXSpellVisualMeta { static DB2Meta const* Instance() { - static char const* types = "iifhhhhiibbbi"; - static uint8 const arraySizes[13] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(1, 13, 0x4F4B8A2A, types, arraySizes, 12); + static DB2MetaField const fields[13] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 13, 0xCDAF2854, fields, 12); return &instance; } }; @@ -5832,9 +10340,13 @@ struct StartupFilesMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x51FEBBB5, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xF1381769, fields, -1); return &instance; } }; @@ -5843,9 +10355,12 @@ struct Startup_StringsMeta { static DB2Meta const* Instance() { - static char const* types = "ss"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xF8CDDEE7, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x82058A06, fields, -1); return &instance; } }; @@ -5854,9 +10369,13 @@ struct StationeryMeta { static DB2Meta const* Instance() { - static char const* types = "bii"; - static uint8 const arraySizes[3] = { 1, 1, 2 }; - static DB2Meta instance(-1, 3, 0x20F6BABD, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 2, true }, + }; + static DB2Meta instance(-1, 3, 0x8B250029, fields, -1); return &instance; } }; @@ -5865,9 +10384,15 @@ struct SummonPropertiesMeta { static DB2Meta const* Instance() { - static char const* types = "iiiii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xFB8338FC, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x4134937A, fields, -1); return &instance; } }; @@ -5876,9 +10401,11 @@ struct TactKeyMeta { static DB2Meta const* Instance() { - static char const* types = "b"; - static uint8 const arraySizes[1] = { 16 }; - static DB2Meta instance(-1, 1, 0xF0F98B62, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_BYTE, 16, false }, + }; + static DB2Meta instance(-1, 1, 0xA55E1CCE, fields, -1); return &instance; } }; @@ -5887,9 +10414,11 @@ struct TactKeyLookupMeta { static DB2Meta const* Instance() { - static char const* types = "b"; - static uint8 const arraySizes[1] = { 8 }; - static DB2Meta instance(-1, 1, 0x3C1AC92A, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_BYTE, 8, false }, + }; + static DB2Meta instance(-1, 1, 0x1A696886, fields, -1); return &instance; } }; @@ -5898,9 +10427,19 @@ struct TalentMeta { static DB2Meta const* Instance() { - static char const* types = "siihbbbbb"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 1, 1, 1, 2, 1 }; - static DB2Meta instance(-1, 9, 0xE8850B48, types, arraySizes, -1); + static DB2MetaField const fields[9] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_BYTE, 2, false }, + }; + static DB2Meta instance(-1, 9, 0x2661E6C2, fields, -1); return &instance; } }; @@ -5909,9 +10448,24 @@ struct TaxiNodesMeta { static DB2Meta const* Instance() { - static char const* types = "sfifffhhhbii"; - static uint8 const arraySizes[12] = { 1, 3, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 12, 0xB46C6A8B, types, arraySizes, -1); + static DB2MetaField const fields[14] = + { + { FT_STRING, 1, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 2, true }, + { FT_FLOAT, 2, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 2, true }, + }; + static DB2Meta instance(4, 14, 0x91ADBF11, fields, 5); return &instance; } }; @@ -5920,9 +10474,14 @@ struct TaxiPathMeta { static DB2Meta const* Instance() { - static char const* types = "hhii"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(2, 4, 0xF44E2BF5, types, arraySizes, 0); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(0, 4, 0x3716BBCD, fields, 1); return &instance; } }; @@ -5931,9 +10490,19 @@ struct TaxiPathNodeMeta { static DB2Meta const* Instance() { - static char const* types = "fhhbibihh"; - static uint8 const arraySizes[9] = { 3, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(4, 9, 0xD38E8C01, types, arraySizes, 1); + static DB2MetaField const fields[9] = + { + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(1, 9, 0xE28C3360, fields, 2); return &instance; } }; @@ -5942,9 +10511,13 @@ struct TerrainMaterialMeta { static DB2Meta const* Instance() { - static char const* types = "bii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x19D9496F, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x9F25E6D3, fields, -1); return &instance; } }; @@ -5953,9 +10526,15 @@ struct TerrainTypeMeta { static DB2Meta const* Instance() { - static char const* types = "shhbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x4FE20345, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 5, 0xB4573071, fields, -1); return &instance; } }; @@ -5964,9 +10543,11 @@ struct TerrainTypeSoundsMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xE4923C1F, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xECCAE96B, fields, -1); return &instance; } }; @@ -5975,9 +10556,20 @@ struct TextureBlendSetMeta { static DB2Meta const* Instance() { - static char const* types = "ifffffbbbb"; - static uint8 const arraySizes[10] = { 3, 3, 3, 3, 3, 4, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0xA2323E0C, types, arraySizes, -1); + static DB2MetaField const fields[10] = + { + { FT_INT, 3, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 4, true }, + }; + static DB2Meta instance(-1, 10, 0xF2AFFE4C, fields, -1); return &instance; } }; @@ -5986,9 +10578,13 @@ struct TextureFileDataMeta { static DB2Meta const* Instance() { - static char const* types = "iib"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(0, 3, 0xE0790D00, types, arraySizes, 1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 3, 0x71D3BD92, fields, 2); return &instance; } }; @@ -5997,9 +10593,13 @@ struct TotemCategoryMeta { static DB2Meta const* Instance() { - static char const* types = "sib"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x20B9177A, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x2AA9FB1E, fields, -1); return &instance; } }; @@ -6008,9 +10608,15 @@ struct ToyMeta { static DB2Meta const* Instance() { - static char const* types = "sibbi"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(4, 5, 0x5409C5EA, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(1, 5, 0x6156EBCA, fields, -1); return &instance; } }; @@ -6019,9 +10625,17 @@ struct TradeSkillCategoryMeta { static DB2Meta const* Instance() { - static char const* types = "shhhb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x5D3ADD4D, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(2, 7, 0xAFEA1AAD, fields, -1); return &instance; } }; @@ -6030,9 +10644,12 @@ struct TradeSkillItemMeta { static DB2Meta const* Instance() { - static char const* types = "hb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xFDE283DA, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xA90CD5D2, fields, -1); return &instance; } }; @@ -6041,9 +10658,15 @@ struct TransformMatrixMeta { static DB2Meta const* Instance() { - static char const* types = "fffff"; - static uint8 const arraySizes[5] = { 3, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xB6A2C431, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_FLOAT, 3, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0xBA00B2FD, fields, -1); return &instance; } }; @@ -6052,9 +10675,12 @@ struct TransmogHolidayMeta { static DB2Meta const* Instance() { - static char const* types = "ii"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(0, 2, 0xB420EB18, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 2, 0x6FC325A0, fields, -1); return &instance; } }; @@ -6063,9 +10689,20 @@ struct TransmogSetMeta { static DB2Meta const* Instance() { - static char const* types = "shhbiiiiii"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(4, 10, 0xBEDFD7D1, types, arraySizes, 1); + static DB2MetaField const fields[10] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(1, 10, 0x3F0E4AEF, fields, 7); return &instance; } }; @@ -6074,9 +10711,12 @@ struct TransmogSetGroupMeta { static DB2Meta const* Instance() { - static char const* types = "si"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(1, 2, 0xCD072FE5, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(1, 2, 0x0F60CFC9, fields, -1); return &instance; } }; @@ -6085,9 +10725,14 @@ struct TransmogSetItemMeta { static DB2Meta const* Instance() { - static char const* types = "iiii"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(0, 4, 0x0E96B3A2, types, arraySizes, 1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 4, 0x23855A82, fields, 1); return &instance; } }; @@ -6096,9 +10741,14 @@ struct TransportAnimationMeta { static DB2Meta const* Instance() { - static char const* types = "ifbi"; - static uint8 const arraySizes[4] = { 1, 3, 1, 1 }; - static DB2Meta instance(-1, 4, 0x099987ED, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_FLOAT, 3, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0x6329464B, fields, 3); return &instance; } }; @@ -6107,9 +10757,20 @@ struct TransportPhysicsMeta { static DB2Meta const* Instance() { - static char const* types = "ffffffffff"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0x2C1FB208, types, arraySizes, -1); + static DB2MetaField const fields[10] = + { + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 10, 0x0B297C98, fields, -1); return &instance; } }; @@ -6118,9 +10779,13 @@ struct TransportRotationMeta { static DB2Meta const* Instance() { - static char const* types = "ifi"; - static uint8 const arraySizes[3] = { 1, 4, 1 }; - static DB2Meta instance(-1, 3, 0x72035AA9, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_FLOAT, 4, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x5FE3BC91, fields, 2); return &instance; } }; @@ -6129,9 +10794,14 @@ struct TrophyMeta { static DB2Meta const* Instance() { - static char const* types = "shbi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xE16151C5, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x0AE68C93, fields, -1); return &instance; } }; @@ -6140,9 +10810,13 @@ struct UIExpansionDisplayInfoMeta { static DB2Meta const* Instance() { - static char const* types = "iii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x73DFDEC5, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xCD407FA1, fields, -1); return &instance; } }; @@ -6151,9 +10825,13 @@ struct UIExpansionDisplayInfoIconMeta { static DB2Meta const* Instance() { - static char const* types = "sii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x331022F2, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xC9B51E5D, fields, -1); return &instance; } }; @@ -6162,9 +10840,15 @@ struct UiCamFbackTransmogChrRaceMeta { static DB2Meta const* Instance() { - static char const* types = "hbbbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x9FB4CC78, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 5, 0xB1C9DAC4, fields, -1); return &instance; } }; @@ -6173,9 +10857,14 @@ struct UiCamFbackTransmogWeaponMeta { static DB2Meta const* Instance() { - static char const* types = "hbbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x020890B7, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x5148437F, fields, -1); return &instance; } }; @@ -6184,9 +10873,19 @@ struct UiCameraMeta { static DB2Meta const* Instance() { - static char const* types = "sfffhbbbi"; - static uint8 const arraySizes[9] = { 1, 3, 3, 3, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 9, 0xCA6C98D4, types, arraySizes, -1); + static DB2MetaField const fields[9] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 9, 0xC54B36EE, fields, -1); return &instance; } }; @@ -6195,20 +10894,209 @@ struct UiCameraTypeMeta { static DB2Meta const* Instance() { - static char const* types = "sii"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x644732AE, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x34F64532, fields, -1); + return &instance; + } +}; + +struct UiCanvasMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(0, 3, 0x77DC2C2A, fields, -1); + return &instance; + } +}; + +struct UiMapMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[13] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(1, 13, 0x4B07CF16, fields, 2); + return &instance; + } +}; + +struct UiMapArtMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xD85EF8B6, fields, -1); + return &instance; + } +}; + +struct UiMapArtStyleLayerMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[9] = + { + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 9, 0xAFF6429A, fields, 8); + return &instance; + } +}; + +struct UiMapArtTileMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0xBA5290E9, fields, 4); + return &instance; + } +}; + +struct UiMapAssignmentMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[10] = + { + { FT_FLOAT, 2, true }, + { FT_FLOAT, 2, true }, + { FT_FLOAT, 6, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(3, 10, 0xFA919770, fields, 4); return &instance; } }; -struct UiMapPOIMeta +struct UiMapFogOfWarMeta { static DB2Meta const* Instance() { - static char const* types = "ifiihhi"; - static uint8 const arraySizes[7] = { 1, 3, 1, 1, 1, 1, 1 }; - static DB2Meta instance(6, 7, 0x559E1F11, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(0, 4, 0x257E044E, fields, 1); + return &instance; + } +}; + +struct UiMapFogOfWarVisualizationMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[3] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xB8110379, fields, -1); + return &instance; + } +}; + +struct UiMapGroupMemberMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[5] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x3D1DDDA1, fields, 1); + return &instance; + } +}; + +struct UiMapLinkMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[6] = + { + { FT_FLOAT, 2, true }, + { FT_FLOAT, 2, true }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(2, 6, 0x1A2F1836, fields, 3); + return &instance; + } +}; + +struct UiMapXMapArtMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0xD74B6E49, fields, 2); return &instance; } }; @@ -6217,9 +11105,12 @@ struct UiModelSceneMeta { static DB2Meta const* Instance() { - static char const* types = "bb"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xA7D62B8A, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x0B9EFECA, fields, -1); return &instance; } }; @@ -6228,9 +11119,20 @@ struct UiModelSceneActorMeta { static DB2Meta const* Instance() { - static char const* types = "sfffffbiii"; - static uint8 const arraySizes[10] = { 1, 3, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(7, 10, 0x679AC95F, types, arraySizes, 9); + static DB2MetaField const fields[10] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(2, 10, 0x8B5BF449, fields, 9); return &instance; } }; @@ -6239,9 +11141,17 @@ struct UiModelSceneActorDisplayMeta { static DB2Meta const* Instance() { - static char const* types = "fffii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x6137F4BE, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + }; + static DB2Meta instance(-1, 7, 0xDD1DD903, fields, -1); return &instance; } }; @@ -6250,9 +11160,44 @@ struct UiModelSceneCameraMeta { static DB2Meta const* Instance() { - static char const* types = "sfffffffffffbbii"; - static uint8 const arraySizes[16] = { 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(14, 16, 0xC58AA5EC, types, arraySizes, 15); + static DB2MetaField const fields[16] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(3, 16, 0xEDFBD5A2, fields, 15); + return &instance; + } +}; + +struct UiPartyPoseMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[6] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 6, 0x880480BF, fields, 5); return &instance; } }; @@ -6261,9 +11206,28 @@ struct UiTextureAtlasMeta { static DB2Meta const* Instance() { - static char const* types = "ihh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x9879592A, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x6951B2FD, fields, -1); + return &instance; + } +}; + +struct UiTextureAtlasElementMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(1, 2, 0xBBDA0A61, fields, -1); return &instance; } }; @@ -6272,9 +11236,20 @@ struct UiTextureAtlasMemberMeta { static DB2Meta const* Instance() { - static char const* types = "sihhhhhb"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(1, 8, 0x81E2055F, types, arraySizes, -1); + static DB2MetaField const fields[10] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(1, 10, 0x4D58B085, fields, 7); return &instance; } }; @@ -6283,64 +11258,166 @@ struct UiTextureKitMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x2C7E0372, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x1FC1A9C6, fields, -1); return &instance; } }; -struct UnitBloodMeta +struct UiWidgetMeta { static DB2Meta const* Instance() { - static char const* types = "iiiiii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x4689A9A0, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 6, 0xC4C60F67, fields, -1); return &instance; } }; -struct UnitBloodLevelsMeta +struct UiWidgetConstantSourceMeta { static DB2Meta const* Instance() { - static char const* types = "b"; - static uint8 const arraySizes[1] = { 3 }; - static DB2Meta instance(-1, 1, 0x31A6BD58, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xFE573B5D, fields, 2); return &instance; } }; -struct UnitConditionMeta +struct UiWidgetDataSourceMeta { static DB2Meta const* Instance() { - static char const* types = "ibbb"; - static uint8 const arraySizes[4] = { 8, 1, 8, 8 }; - static DB2Meta instance(-1, 4, 0x62802D9C, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x27BC34FD, fields, 3); return &instance; } }; -struct UnitPowerBarMeta +struct UiWidgetStringSourceMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x86CECC21, fields, 2); + return &instance; + } +}; + +struct UiWidgetVisualizationMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0x1DB32AF9, fields, -1); + return &instance; + } +}; + +struct UnitBloodMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[6] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 6, 0x007ED968, fields, -1); + return &instance; + } +}; + +struct UnitBloodLevelsMeta { static DB2Meta const* Instance() { - static char const* types = "ssssffiiffhhbbii"; - static uint8 const arraySizes[16] = { 1, 1, 1, 1, 1, 1, 6, 6, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 16, 0x626C94CD, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_BYTE, 3, false }, + }; + static DB2Meta instance(-1, 1, 0x684D24F4, fields, -1); return &instance; } }; -struct UnitTestMeta +struct UnitConditionMeta { static DB2Meta const* Instance() { - static char const* types = "ssiii"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(2, 5, 0x63B4527B, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 8, false }, + { FT_BYTE, 8, true }, + { FT_INT, 8, true }, + }; + static DB2Meta instance(-1, 4, 0x215CBCD2, fields, -1); + return &instance; + } +}; + +struct UnitPowerBarMeta +{ + static DB2Meta const* Instance() + { + static DB2MetaField const fields[16] = + { + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 6, true }, + { FT_INT, 6, true }, + }; + static DB2Meta instance(-1, 16, 0x2640852D, fields, -1); return &instance; } }; @@ -6349,9 +11426,28 @@ struct VehicleMeta { static DB2Meta const* Instance() { - static char const* types = "ifffffffffffhhhbbi"; - static uint8 const arraySizes[18] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 3, 1, 1, 1 }; - static DB2Meta instance(-1, 18, 0x1606C582, types, arraySizes, -1); + static DB2MetaField const fields[18] = + { + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 8, false }, + { FT_SHORT, 3, false }, + }; + static DB2Meta instance(-1, 18, 0x221A0252, fields, -1); return &instance; } }; @@ -6360,9 +11456,71 @@ struct VehicleSeatMeta { static DB2Meta const* Instance() { - static char const* types = "iiiffffffffffffffffffffffffffffffihhhhhhhhhhhhhhhhhhhbbbbbbii"; - static uint8 const arraySizes[61] = { 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 61, 0x242E0ECD, types, arraySizes, -1); + static DB2MetaField const fields[61] = + { + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_SHORT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 61, 0x7AB200FA, fields, -1); return &instance; } }; @@ -6371,9 +11529,14 @@ struct VehicleUIIndSeatMeta { static DB2Meta const* Instance() { - static char const* types = "ffbh"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x5F688502, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x590E3162, fields, 3); return &instance; } }; @@ -6382,9 +11545,11 @@ struct VehicleUIIndicatorMeta { static DB2Meta const* Instance() { - static char const* types = "i"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0x68486100, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 1, 0x4B1AACBC, fields, -1); return &instance; } }; @@ -6393,9 +11558,19 @@ struct VignetteMeta { static DB2Meta const* Instance() { - static char const* types = "sffiiii"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x52E3B381, types, arraySizes, -1); + static DB2MetaField const fields[9] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 9, 0xE70E083E, fields, -1); return &instance; } }; @@ -6404,9 +11579,12 @@ struct VirtualAttachmentMeta { static DB2Meta const* Instance() { - static char const* types = "sh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0xEC767C57, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0xA9D90777, fields, -1); return &instance; } }; @@ -6415,9 +11593,13 @@ struct VirtualAttachmentCustomizationMeta { static DB2Meta const* Instance() { - static char const* types = "ihh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xC354C931, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_SHORT, 1, true }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 3, 0x5812DF35, fields, -1); return &instance; } }; @@ -6426,9 +11608,14 @@ struct VocalUISoundsMeta { static DB2Meta const* Instance() { - static char const* types = "bbbi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 2 }; - static DB2Meta instance(-1, 4, 0xED48CFA9, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 2, false }, + }; + static DB2Meta instance(-1, 4, 0x264C4E59, fields, -1); return &instance; } }; @@ -6437,9 +11624,25 @@ struct WMOAreaTableMeta { static DB2Meta const* Instance() { - static char const* types = "sihhhhhhbbbbiih"; - static uint8 const arraySizes[15] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(12, 15, 0x4616C893, types, arraySizes, 14); + static DB2MetaField const fields[15] = + { + { FT_STRING, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(1, 15, 0x60EC930B, fields, 2); return &instance; } }; @@ -6448,9 +11651,15 @@ struct WMOMinimapTextureMeta { static DB2Meta const* Instance() { - static char const* types = "ihbbh"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0x8F4AE3C0, types, arraySizes, 4); + static DB2MetaField const fields[5] = + { + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0x48CE176C, fields, 4); return &instance; } }; @@ -6459,9 +11668,15 @@ struct WbAccessControlListMeta { static DB2Meta const* Instance() { - static char const* types = "shbbb"; - static uint8 const arraySizes[5] = { 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 5, 0xBE044710, types, arraySizes, -1); + static DB2MetaField const fields[5] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 5, 0xDC9D8334, fields, -1); return &instance; } }; @@ -6470,9 +11685,14 @@ struct WbCertWhitelistMeta { static DB2Meta const* Instance() { - static char const* types = "sbbb"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x01D13030, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x1524F278, fields, -1); return &instance; } }; @@ -6481,9 +11701,17 @@ struct WeaponImpactSoundsMeta { static DB2Meta const* Instance() { - static char const* types = "bbbiiii"; - static uint8 const arraySizes[7] = { 1, 1, 1, 11, 11, 11, 11 }; - static DB2Meta instance(-1, 7, 0x774C043A, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 11, false }, + { FT_INT, 11, false }, + { FT_INT, 11, false }, + { FT_INT, 11, false }, + }; + static DB2Meta instance(-1, 7, 0x9C7F9BA6, fields, -1); return &instance; } }; @@ -6492,9 +11720,13 @@ struct WeaponSwingSounds2Meta { static DB2Meta const* Instance() { - static char const* types = "bbi"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0xD45347C3, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x18B6CC57, fields, -1); return &instance; } }; @@ -6503,9 +11735,19 @@ struct WeaponTrailMeta { static DB2Meta const* Instance() { - static char const* types = "ifffiffff"; - static uint8 const arraySizes[9] = { 1, 1, 1, 1, 3, 3, 3, 3, 3 }; - static DB2Meta instance(-1, 9, 0x49754C60, types, arraySizes, -1); + static DB2MetaField const fields[9] = + { + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + }; + static DB2Meta instance(-1, 9, 0xB05F809A, fields, -1); return &instance; } }; @@ -6514,9 +11756,13 @@ struct WeaponTrailModelDefMeta { static DB2Meta const* Instance() { - static char const* types = "ihh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x7DE7C508, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_INT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xCE7AD194, fields, 2); return &instance; } }; @@ -6525,9 +11771,20 @@ struct WeaponTrailParamMeta { static DB2Meta const* Instance() { - static char const* types = "fffffbbbbh"; - static uint8 const arraySizes[10] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0x9B0F7200, types, arraySizes, 9); + static DB2MetaField const fields[10] = + { + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 10, 0xC3B87CA4, fields, 9); return &instance; } }; @@ -6536,86 +11793,133 @@ struct WeatherMeta { static DB2Meta const* Instance() { - static char const* types = "ffffffffhbbbii"; - static uint8 const arraySizes[14] = { 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 14, 0x7C160B07, types, arraySizes, -1); - return &instance; - } -}; - -struct WindSettingsMeta -{ - static DB2Meta const* Instance() - { - static char const* types = "fffffffffb"; - static uint8 const arraySizes[10] = { 1, 3, 1, 1, 3, 1, 3, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0x5308550C, types, arraySizes, -1); + static DB2MetaField const fields[22] = + { + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_FLOAT, 2, true }, + { FT_FLOAT, 3, true }, + }; + static DB2Meta instance(-1, 22, 0x784E91E0, fields, -1); return &instance; } }; -struct WorldBossLockoutMeta +struct WeatherXParticulateMeta { static DB2Meta const* Instance() { - static char const* types = "sh"; - static uint8 const arraySizes[2] = { 1, 1 }; - static DB2Meta instance(-1, 2, 0x4D7103A0, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 2, 0x791A7865, fields, 1); return &instance; } }; -struct WorldChunkSoundsMeta +struct WindSettingsMeta { static DB2Meta const* Instance() { - static char const* types = "hbbbbb"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0xD06AA126, types, arraySizes, -1); + static DB2MetaField const fields[10] = + { + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 3, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_FLOAT, 1, true }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 10, 0xE09E01C4, fields, -1); return &instance; } }; -struct WorldEffectMeta +struct WorldBossLockoutMeta { static DB2Meta const* Instance() { - static char const* types = "ihbbii"; - static uint8 const arraySizes[6] = { 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 6, 0x2E9B9BFD, types, arraySizes, -1); + static DB2MetaField const fields[2] = + { + { FT_STRING, 1, true }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 2, 0x57E8ADB8, fields, -1); return &instance; } }; -struct WorldElapsedTimerMeta +struct WorldChunkSoundsMeta { static DB2Meta const* Instance() { - static char const* types = "sbb"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x6C026FDE, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 6, 0xA5616A27, fields, -1); return &instance; } }; -struct WorldMapAreaMeta +struct WorldEffectMeta { static DB2Meta const* Instance() { - static char const* types = "sffffihhhhhbbbbii"; - static uint8 const arraySizes[17] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(15, 17, 0xC7E90019, types, arraySizes, -1); + static DB2MetaField const fields[6] = + { + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 6, 0xBCB8719B, fields, -1); return &instance; } }; -struct WorldMapContinentMeta +struct WorldElapsedTimerMeta { static DB2Meta const* Instance() { - static char const* types = "ffffhhbbbbb"; - static uint8 const arraySizes[11] = { 2, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 11, 0x8F75E077, types, arraySizes, -1); + static DB2MetaField const fields[3] = + { + { FT_STRING, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 3, 0x103B8712, fields, -1); return &instance; } }; @@ -6624,20 +11928,40 @@ struct WorldMapOverlayMeta { static DB2Meta const* Instance() { - static char const* types = "sihhiiiiiiiiii"; - static uint8 const arraySizes[14] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4 }; - static DB2Meta instance(1, 14, 0xDC4B6AF3, types, arraySizes, 4); + static DB2MetaField const fields[13] = + { + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 4, false }, + }; + static DB2Meta instance(0, 13, 0x837A3DAA, fields, 1); return &instance; } }; -struct WorldMapTransformsMeta +struct WorldMapOverlayTileMeta { static DB2Meta const* Instance() { - static char const* types = "fffhhhhhbi"; - static uint8 const arraySizes[10] = { 6, 2, 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 10, 0x99FB4B71, types, arraySizes, 3); + static DB2MetaField const fields[5] = + { + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 5, 0xC4DCC916, fields, 4); return &instance; } }; @@ -6646,9 +11970,14 @@ struct WorldSafeLocsMeta { static DB2Meta const* Instance() { - static char const* types = "sffh"; - static uint8 const arraySizes[4] = { 1, 3, 1, 1 }; - static DB2Meta instance(-1, 4, 0x605EA8A6, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_STRING, 1, false }, + { FT_FLOAT, 3, false }, + { FT_SHORT, 1, false }, + { FT_FLOAT, 1, false } + }; + static DB2Meta instance(-1, 4, 0x6BF0D7EC, fields, 3); return &instance; } }; @@ -6657,9 +11986,11 @@ struct WorldStateExpressionMeta { static DB2Meta const* Instance() { - static char const* types = "s"; - static uint8 const arraySizes[1] = { 1 }; - static DB2Meta instance(-1, 1, 0xA69C9812, types, arraySizes, -1); + static DB2MetaField const fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + static DB2Meta instance(-1, 1, 0xF23806A6, fields, -1); return &instance; } }; @@ -6668,9 +11999,27 @@ struct WorldStateUIMeta { static DB2Meta const* Instance() { - static char const* types = "ssssshhhhhhbbbiii"; - static uint8 const arraySizes[17] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(14, 17, 0x70808977, types, arraySizes, 5); + static DB2MetaField const fields[17] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING, 1, true }, + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, false }, + { FT_SHORT, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 3, false }, + }; + static DB2Meta instance(5, 17, 0xE1F042FE, fields, 6); return &instance; } }; @@ -6679,9 +12028,18 @@ struct WorldStateZoneSoundsMeta { static DB2Meta const* Instance() { - static char const* types = "ihhhhhhb"; - static uint8 const arraySizes[8] = { 1, 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 8, 0xB9572D3D, types, arraySizes, -1); + static DB2MetaField const fields[8] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_INT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 8, 0x44CFA417, fields, -1); return &instance; } }; @@ -6690,9 +12048,17 @@ struct World_PVP_AreaMeta { static DB2Meta const* Instance() { - static char const* types = "hhhhhbb"; - static uint8 const arraySizes[7] = { 1, 1, 1, 1, 1, 1, 1 }; - static DB2Meta instance(-1, 7, 0x6FBBF76B, types, arraySizes, -1); + static DB2MetaField const fields[7] = + { + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, true }, + }; + static DB2Meta instance(-1, 7, 0x3F8DDC83, fields, -1); return &instance; } }; @@ -6701,9 +12067,14 @@ struct ZoneIntroMusicTableMeta { static DB2Meta const* Instance() { - static char const* types = "shbi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0x1F8417ED, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 1, false }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 4, 0x5453B51D, fields, -1); return &instance; } }; @@ -6712,9 +12083,14 @@ struct ZoneLightMeta { static DB2Meta const* Instance() { - static char const* types = "shh"; - static uint8 const arraySizes[3] = { 1, 1, 1 }; - static DB2Meta instance(-1, 3, 0x3C11F38B, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_SHORT, 1, false }, + { FT_SHORT, 1, false }, + { FT_BYTE, 1, false }, + }; + static DB2Meta instance(-1, 4, 0xD553DE84, fields, -1); return &instance; } }; @@ -6723,9 +12099,13 @@ struct ZoneLightPointMeta { static DB2Meta const* Instance() { - static char const* types = "fbh"; - static uint8 const arraySizes[3] = { 2, 1, 1 }; - static DB2Meta instance(-1, 3, 0xEF93DC50, types, arraySizes, 2); + static DB2MetaField const fields[3] = + { + { FT_FLOAT, 2, true }, + { FT_BYTE, 1, false }, + { FT_SHORT, 1, false }, + }; + static DB2Meta instance(-1, 3, 0xB21DA554, fields, 2); return &instance; } }; @@ -6734,9 +12114,14 @@ struct ZoneMusicMeta { static DB2Meta const* Instance() { - static char const* types = "siii"; - static uint8 const arraySizes[4] = { 1, 2, 2, 2 }; - static DB2Meta instance(-1, 4, 0x9E2B332D, types, arraySizes, -1); + static DB2MetaField const fields[4] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + { FT_INT, 2, false }, + { FT_INT, 2, false }, + { FT_INT, 2, false }, + }; + static DB2Meta instance(-1, 4, 0x9EBD4495, fields, -1); return &instance; } }; @@ -6745,9 +12130,14 @@ struct ZoneStoryMeta { static DB2Meta const* Instance() { - static char const* types = "iibi"; - static uint8 const arraySizes[4] = { 1, 1, 1, 1 }; - static DB2Meta instance(-1, 4, 0xEE16D6F3, types, arraySizes, 3); + static DB2MetaField const fields[4] = + { + { FT_BYTE, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, false }, + { FT_INT, 1, true }, + }; + static DB2Meta instance(-1, 4, 0x5BFB82E8, fields, 3); return &instance; } }; diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp index fe91d679d97..957d44407e8 100644 --- a/src/server/game/DataStores/DB2Stores.cpp +++ b/src/server/game/DataStores/DB2Stores.cpp @@ -27,6 +27,7 @@ #include "Timer.h" #include "Util.h" #include <array> +#include <numeric> #include <sstream> #include <cctype> @@ -36,6 +37,7 @@ #endif DB2Storage<AchievementEntry> sAchievementStore("Achievement.db2", AchievementLoadInfo::Instance()); +DB2Storage<AnimationDataEntry> sAnimationDataStore("AnimationData.db2", AnimationDataLoadInfo::Instance()); DB2Storage<AnimKitEntry> sAnimKitStore("AnimKit.db2", AnimKitLoadInfo::Instance()); DB2Storage<AreaGroupMemberEntry> sAreaGroupMemberStore("AreaGroupMember.db2", AreaGroupMemberLoadInfo::Instance()); DB2Storage<AreaTableEntry> sAreaTableStore("AreaTable.db2", AreaTableLoadInfo::Instance()); @@ -75,6 +77,7 @@ DB2Storage<ChrRacesEntry> sChrRacesStore("ChrRaces.db2", C DB2Storage<ChrSpecializationEntry> sChrSpecializationStore("ChrSpecialization.db2", ChrSpecializationLoadInfo::Instance()); DB2Storage<CinematicCameraEntry> sCinematicCameraStore("CinematicCamera.db2", CinematicCameraLoadInfo::Instance()); DB2Storage<CinematicSequencesEntry> sCinematicSequencesStore("CinematicSequences.db2", CinematicSequencesLoadInfo::Instance()); +DB2Storage<ContentTuningEntry> sContentTuningStore("ContentTuning.db2", ContentTuningLoadInfo::Instance()); DB2Storage<ConversationLineEntry> sConversationLineStore("ConversationLine.db2", ConversationLineLoadInfo::Instance()); DB2Storage<CreatureDisplayInfoEntry> sCreatureDisplayInfoStore("CreatureDisplayInfo.db2", CreatureDisplayInfoLoadInfo::Instance()); DB2Storage<CreatureDisplayInfoExtraEntry> sCreatureDisplayInfoExtraStore("CreatureDisplayInfoExtra.db2", CreatureDisplayInfoExtraLoadInfo::Instance()); @@ -94,6 +97,8 @@ DB2Storage<DurabilityQualityEntry> sDurabilityQualityStore("Durabil DB2Storage<EmotesEntry> sEmotesStore("Emotes.db2", EmotesLoadInfo::Instance()); DB2Storage<EmotesTextEntry> sEmotesTextStore("EmotesText.db2", EmotesTextLoadInfo::Instance()); DB2Storage<EmotesTextSoundEntry> sEmotesTextSoundStore("EmotesTextSound.db2", EmotesTextSoundLoadInfo::Instance()); +DB2Storage<ExpectedStatEntry> sExpectedStatStore("ExpectedStat.db2", ExpectedStatLoadInfo::Instance()); +DB2Storage<ExpectedStatModEntry> sExpectedStatModStore("ExpectedStatMod.db2", ExpectedStatModLoadInfo::Instance()); DB2Storage<FactionEntry> sFactionStore("Faction.db2", FactionLoadInfo::Instance()); DB2Storage<FactionTemplateEntry> sFactionTemplateStore("FactionTemplate.db2", FactionTemplateLoadInfo::Instance()); DB2Storage<GameObjectDisplayInfoEntry> sGameObjectDisplayInfoStore("GameObjectDisplayInfo.db2", GameobjectDisplayInfoLoadInfo::Instance()); @@ -178,6 +183,7 @@ DB2Storage<NameGenEntry> sNameGenStore("NameGen.db2", Nam DB2Storage<NamesProfanityEntry> sNamesProfanityStore("NamesProfanity.db2", NamesProfanityLoadInfo::Instance()); DB2Storage<NamesReservedEntry> sNamesReservedStore("NamesReserved.db2", NamesReservedLoadInfo::Instance()); DB2Storage<NamesReservedLocaleEntry> sNamesReservedLocaleStore("NamesReservedLocale.db2", NamesReservedLocaleLoadInfo::Instance()); +DB2Storage<NumTalentsAtLevelEntry> sNumTalentsAtLevelStore("NumTalentsAtLevel.db2", NumTalentsAtLevelLoadInfo::Instance()); DB2Storage<OverrideSpellDataEntry> sOverrideSpellDataStore("OverrideSpellData.db2", OverrideSpellDataLoadInfo::Instance()); DB2Storage<PhaseEntry> sPhaseStore("Phase.db2", PhaseLoadInfo::Instance()); DB2Storage<PhaseXPhaseGroupEntry> sPhaseXPhaseGroupStore("PhaseXPhaseGroup.db2", PhaseXPhaseGroupLoadInfo::Instance()); @@ -187,9 +193,9 @@ DB2Storage<PowerTypeEntry> sPowerTypeStore("PowerType.db2", DB2Storage<PrestigeLevelInfoEntry> sPrestigeLevelInfoStore("PrestigeLevelInfo.db2", PrestigeLevelInfoLoadInfo::Instance()); DB2Storage<PVPDifficultyEntry> sPVPDifficultyStore("PVPDifficulty.db2", PvpDifficultyLoadInfo::Instance()); DB2Storage<PVPItemEntry> sPVPItemStore("PVPItem.db2", PvpItemLoadInfo::Instance()); -DB2Storage<PvpRewardEntry> sPvpRewardStore("PvpReward.db2", PvpRewardLoadInfo::Instance()); DB2Storage<PvpTalentEntry> sPvpTalentStore("PvpTalent.db2", PvpTalentLoadInfo::Instance()); -DB2Storage<PvpTalentUnlockEntry> sPvpTalentUnlockStore("PvpTalentUnlock.db2", PvpTalentUnlockLoadInfo::Instance()); +DB2Storage<PvpTalentCategoryEntry> sPvpTalentCategoryStore("PvpTalentCategory.db2", PvpTalentCategoryLoadInfo::Instance()); +DB2Storage<PvpTalentSlotUnlockEntry> sPvpTalentSlotUnlockStore("PvpTalentSlotUnlock.db2", PvpTalentSlotUnlockLoadInfo::Instance()); DB2Storage<QuestFactionRewardEntry> sQuestFactionRewardStore("QuestFactionReward.db2", QuestFactionRewardLoadInfo::Instance()); DB2Storage<QuestMoneyRewardEntry> sQuestMoneyRewardStore("QuestMoneyReward.db2", QuestMoneyRewardLoadInfo::Instance()); DB2Storage<QuestPackageItemEntry> sQuestPackageItemStore("QuestPackageItem.db2", QuestPackageItemLoadInfo::Instance()); @@ -201,7 +207,6 @@ DB2Storage<RewardPackEntry> sRewardPackStore("RewardPack.db2 DB2Storage<RewardPackXCurrencyTypeEntry> sRewardPackXCurrencyTypeStore("RewardPackXCurrencyType.db2", RewardPackXCurrencyTypeLoadInfo::Instance()); DB2Storage<RewardPackXItemEntry> sRewardPackXItemStore("RewardPackXItem.db2", RewardPackXItemLoadInfo::Instance()); DB2Storage<RulesetItemUpgradeEntry> sRulesetItemUpgradeStore("RulesetItemUpgrade.db2", RulesetItemUpgradeLoadInfo::Instance()); -DB2Storage<SandboxScalingEntry> sSandboxScalingStore("SandboxScaling.db2", SandboxScalingLoadInfo::Instance()); DB2Storage<ScalingStatDistributionEntry> sScalingStatDistributionStore("ScalingStatDistribution.db2", ScalingStatDistributionLoadInfo::Instance()); DB2Storage<ScenarioEntry> sScenarioStore("Scenario.db2", ScenarioLoadInfo::Instance()); DB2Storage<ScenarioStepEntry> sScenarioStepStore("ScenarioStep.db2", ScenarioStepLoadInfo::Instance()); @@ -214,7 +219,6 @@ DB2Storage<SkillLineAbilityEntry> sSkillLineAbilityStore("SkillLin DB2Storage<SkillRaceClassInfoEntry> sSkillRaceClassInfoStore("SkillRaceClassInfo.db2", SkillRaceClassInfoLoadInfo::Instance()); DB2Storage<SoundKitEntry> sSoundKitStore("SoundKit.db2", SoundKitLoadInfo::Instance()); DB2Storage<SpecializationSpellsEntry> sSpecializationSpellsStore("SpecializationSpells.db2", SpecializationSpellsLoadInfo::Instance()); -DB2Storage<SpellEntry> sSpellStore("Spell.db2", SpellLoadInfo::Instance()); DB2Storage<SpellAuraOptionsEntry> sSpellAuraOptionsStore("SpellAuraOptions.db2", SpellAuraOptionsLoadInfo::Instance()); DB2Storage<SpellAuraRestrictionsEntry> sSpellAuraRestrictionsStore("SpellAuraRestrictions.db2", SpellAuraRestrictionsLoadInfo::Instance()); DB2Storage<SpellCastTimesEntry> sSpellCastTimesStore("SpellCastTimes.db2", SpellCastTimesLoadInfo::Instance()); @@ -233,6 +237,7 @@ DB2Storage<SpellItemEnchantmentConditionEntry> sSpellItemEnchantmentConditionSt DB2Storage<SpellLearnSpellEntry> sSpellLearnSpellStore("SpellLearnSpell.db2", SpellLearnSpellLoadInfo::Instance()); DB2Storage<SpellLevelsEntry> sSpellLevelsStore("SpellLevels.db2", SpellLevelsLoadInfo::Instance()); DB2Storage<SpellMiscEntry> sSpellMiscStore("SpellMisc.db2", SpellMiscLoadInfo::Instance()); +DB2Storage<SpellNameEntry> sSpellNameStore("SpellName.db2", SpellNameLoadInfo::Instance()); DB2Storage<SpellPowerEntry> sSpellPowerStore("SpellPower.db2", SpellPowerLoadInfo::Instance()); DB2Storage<SpellPowerDifficultyEntry> sSpellPowerDifficultyStore("SpellPowerDifficulty.db2", SpellPowerDifficultyLoadInfo::Instance()); DB2Storage<SpellProcsPerMinuteEntry> sSpellProcsPerMinuteStore("SpellProcsPerMinute.db2", SpellProcsPerMinuteLoadInfo::Instance()); @@ -260,14 +265,16 @@ DB2Storage<TransmogSetGroupEntry> sTransmogSetGroupStore("Transmog DB2Storage<TransmogSetItemEntry> sTransmogSetItemStore("TransmogSetItem.db2", TransmogSetItemLoadInfo::Instance()); DB2Storage<TransportAnimationEntry> sTransportAnimationStore("TransportAnimation.db2", TransportAnimationLoadInfo::Instance()); DB2Storage<TransportRotationEntry> sTransportRotationStore("TransportRotation.db2", TransportRotationLoadInfo::Instance()); +DB2Storage<UiMapEntry> sUiMapStore("UiMap.db2", UiMapLoadInfo::Instance()); +DB2Storage<UiMapAssignmentEntry> sUiMapAssignmentStore("UiMapAssignment.db2", UiMapAssignmentLoadInfo::Instance()); +DB2Storage<UiMapLinkEntry> sUiMapLinkStore("UiMapLink.db2", UiMapLinkLoadInfo::Instance()); +DB2Storage<UiMapXMapArtEntry> sUiMapXMapArtStore("UiMapXMapArt.db2", UiMapXMapArtLoadInfo::Instance()); DB2Storage<UnitPowerBarEntry> sUnitPowerBarStore("UnitPowerBar.db2", UnitPowerBarLoadInfo::Instance()); DB2Storage<VehicleEntry> sVehicleStore("Vehicle.db2", VehicleLoadInfo::Instance()); DB2Storage<VehicleSeatEntry> sVehicleSeatStore("VehicleSeat.db2", VehicleSeatLoadInfo::Instance()); DB2Storage<WMOAreaTableEntry> sWMOAreaTableStore("WMOAreaTable.db2", WmoAreaTableLoadInfo::Instance()); DB2Storage<WorldEffectEntry> sWorldEffectStore("WorldEffect.db2", WorldEffectLoadInfo::Instance()); -DB2Storage<WorldMapAreaEntry> sWorldMapAreaStore("WorldMapArea.db2", WorldMapAreaLoadInfo::Instance()); DB2Storage<WorldMapOverlayEntry> sWorldMapOverlayStore("WorldMapOverlay.db2", WorldMapOverlayLoadInfo::Instance()); -DB2Storage<WorldMapTransformsEntry> sWorldMapTransformsStore("WorldMapTransforms.db2", WorldMapTransformsLoadInfo::Instance()); DB2Storage<WorldSafeLocsEntry> sWorldSafeLocsStore("WorldSafeLocs.db2", WorldSafeLocsLoadInfo::Instance()); TaxiMask sTaxiNodesMask; @@ -317,7 +324,6 @@ typedef std::unordered_map<uint32, std::array<std::vector<NameGenEntry const*>, typedef std::array<std::vector<Trinity::wregex>, TOTAL_LOCALES + 1> NameValidationRegexContainer; typedef std::unordered_map<uint32, std::vector<uint32>> PhaseGroupContainer; typedef std::array<PowerTypeEntry const*, MAX_POWERS> PowerTypesContainer; -typedef std::vector<PvpTalentEntry const*> PvpTalentsByPosition[MAX_CLASSES][MAX_PVP_TALENT_TIERS][MAX_PVP_TALENT_COLUMNS]; typedef std::unordered_map<uint32, std::pair<std::vector<QuestPackageItemEntry const*>, std::vector<QuestPackageItemEntry const*>>> QuestPackageItemContainer; typedef std::unordered_map<uint32, uint32> RulesetItemUpgradeContainer; typedef std::unordered_multimap<uint32, SkillRaceClassInfoEntry const*> SkillRaceClassInfoContainer; @@ -329,12 +335,20 @@ typedef std::vector<TalentEntry const*> TalentsByPosition[MAX_CLASSES][MAX_TALEN typedef std::unordered_set<uint32> ToyItemIdsContainer; typedef std::tuple<uint16, uint8, int32> WMOAreaTableKey; typedef std::map<WMOAreaTableKey, WMOAreaTableEntry const*> WMOAreaTableLookupContainer; -typedef std::unordered_map<uint32, WorldMapAreaEntry const*> WorldMapAreaByAreaIDContainer; namespace { + struct UiMapBounds + { + // these coords are mixed when calculated and used... its a mess + float Bounds[4]; + bool IsUiAssignment; + bool IsUiLink; + }; + StorageMap _stores; std::map<uint64, int32> _hotfixData; + std::map<std::pair<uint32 /*tableHash*/, int32 /*recordId*/>, std::vector<uint8>> _hotfixBlob; AreaGroupMemberContainer _areaGroupMembers; ArtifactPowersContainer _artifactPowers; @@ -348,6 +362,7 @@ namespace ChrSpecialzationByClassContainer _defaultChrSpecializationsByClass; CurvePointsContainer _curvePoints; EmotesTextSoundContainer _emoteTextSounds; + std::unordered_map<std::pair<uint32 /*level*/, int32 /*expansion*/>, ExpectedStatEntry const*> _expectedStatsByLevel; FactionTeamContainer _factionTeams; HeirloomItemsContainer _heirlooms; GlyphBindableSpellsContainer _glyphBindableSpells; @@ -373,13 +388,12 @@ namespace PhaseGroupContainer _phasesByGroup; PowerTypesContainer _powerTypes; std::unordered_map<uint32, uint8> _pvpItemBonus; - std::unordered_map<std::pair<uint32 /*prestige level*/, uint32 /*honor level*/>, uint32> _pvpRewardPack; - PvpTalentsByPosition _pvpTalentsByPosition; - uint32 _pvpTalentUnlock[MAX_PVP_TALENT_TIERS][MAX_PVP_TALENT_COLUMNS]; + PvpTalentSlotUnlockEntry const* _pvpTalentSlotUnlock[MAX_PVP_TALENT_SLOTS]; QuestPackageItemContainer _questPackages; std::unordered_map<uint32, std::vector<RewardPackXCurrencyTypeEntry const*>> _rewardPackCurrencyTypes; std::unordered_map<uint32, std::vector<RewardPackXItemEntry const*>> _rewardPackItems; RulesetItemUpgradeContainer _rulesetItemUpgrade; + std::unordered_map<uint32, std::vector<SkillLineAbilityEntry const*>> _skillLineAbilitiesBySkillupSkill; SkillRaceClassInfoContainer _skillRaceClassInfoBySkill; SpecializationSpellsContainer _specializationSpellsBySpec; std::unordered_set<uint8> _spellFamilyNames; @@ -390,25 +404,28 @@ namespace ToyItemIdsContainer _toys; std::unordered_map<uint32, std::vector<TransmogSetEntry const*>> _transmogSetsByItemModifiedAppearance; std::unordered_map<uint32, std::vector<TransmogSetItemEntry const*>> _transmogSetItemsByTransmogSet; + std::unordered_map<int32, UiMapBounds> _uiMapBounds; + std::unordered_multimap<int32, UiMapAssignmentEntry const*> _uiMapAssignmentByMap[MAX_UI_MAP_SYSTEM]; + std::unordered_multimap<int32, UiMapAssignmentEntry const*> _uiMapAssignmentByArea[MAX_UI_MAP_SYSTEM]; + std::unordered_multimap<int32, UiMapAssignmentEntry const*> _uiMapAssignmentByWmoDoodadPlacement[MAX_UI_MAP_SYSTEM]; + std::unordered_multimap<int32, UiMapAssignmentEntry const*> _uiMapAssignmentByWmoGroup[MAX_UI_MAP_SYSTEM]; + std::unordered_set<int32> _uiMapPhases; WMOAreaTableLookupContainer _wmoAreaTableLookup; - WorldMapAreaByAreaIDContainer _worldMapAreaByAreaID; } -typedef std::vector<std::string> DB2StoreProblemList; - template<class T, template<class> class DB2> -inline void LoadDB2(uint32& availableDb2Locales, DB2StoreProblemList& errlist, StorageMap& stores, DB2StorageBase* storage, std::string const& db2Path, uint32 defaultLocale, DB2<T> const& /*hint*/) +inline void LoadDB2(uint32& availableDb2Locales, std::vector<std::string>& errlist, StorageMap& stores, DB2StorageBase* storage, std::string const& db2Path, uint32 defaultLocale, DB2<T> const& /*hint*/) { // validate structure DB2LoadInfo const* loadInfo = storage->GetLoadInfo(); { std::string clientMetaString, ourMetaString; for (std::size_t i = 0; i < loadInfo->Meta->FieldCount; ++i) - for (std::size_t j = 0; j < loadInfo->Meta->ArraySizes[i]; ++j) - clientMetaString += loadInfo->Meta->Types[i]; + for (std::size_t j = 0; j < loadInfo->Meta->Fields[i].ArraySize; ++j) + clientMetaString += loadInfo->Meta->Fields[i].Type; for (std::size_t i = loadInfo->Meta->HasIndexFieldInData() ? 0 : 1; i < loadInfo->FieldCount; ++i) - ourMetaString += char(std::tolower(loadInfo->Fields[i].Type)); + ourMetaString += loadInfo->Fields[i].Type; ASSERT(clientMetaString == ourMetaString, "%s C++ structure fields %s do not match generated types from the client %s", @@ -422,7 +439,7 @@ inline void LoadDB2(uint32& availableDb2Locales, DB2StoreProblemList& errlist, S if (storage->Load(db2Path + localeNames[defaultLocale] + '/', defaultLocale)) { - storage->LoadFromDB(); + storage->LoadFromDB(); // LoadFromDB() always loads strings into enUS locale, other locales are expected to have data in corresponding _locale tables // so we need to make additional call to load that data in case said locale is set as default by worldserver.conf (and we do not want to load all this data from .db2 file again) if (defaultLocale != LOCALE_enUS) @@ -471,12 +488,13 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) std::string db2Path = dataPath + "dbc/"; - DB2StoreProblemList bad_db2_files; + std::vector<std::string> bad_db2_files; uint32 availableDb2Locales = 0xFF; #define LOAD_DB2(store) LoadDB2(availableDb2Locales, bad_db2_files, _stores, &store, db2Path, defaultLocale, store) LOAD_DB2(sAchievementStore); + LOAD_DB2(sAnimationDataStore); LOAD_DB2(sAnimKitStore); LOAD_DB2(sAreaGroupMemberStore); LOAD_DB2(sAreaTableStore); @@ -515,6 +533,7 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) LOAD_DB2(sChrSpecializationStore); LOAD_DB2(sCinematicCameraStore); LOAD_DB2(sCinematicSequencesStore); + LOAD_DB2(sContentTuningStore); LOAD_DB2(sConversationLineStore); LOAD_DB2(sCreatureDisplayInfoStore); LOAD_DB2(sCreatureDisplayInfoExtraStore); @@ -534,6 +553,8 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) LOAD_DB2(sEmotesStore); LOAD_DB2(sEmotesTextStore); LOAD_DB2(sEmotesTextSoundStore); + LOAD_DB2(sExpectedStatStore); + LOAD_DB2(sExpectedStatModStore); LOAD_DB2(sFactionStore); LOAD_DB2(sFactionTemplateStore); LOAD_DB2(sGameObjectsStore); @@ -618,6 +639,7 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) LOAD_DB2(sNamesProfanityStore); LOAD_DB2(sNamesReservedStore); LOAD_DB2(sNamesReservedLocaleStore); + LOAD_DB2(sNumTalentsAtLevelStore); LOAD_DB2(sOverrideSpellDataStore); LOAD_DB2(sPhaseStore); LOAD_DB2(sPhaseXPhaseGroupStore); @@ -627,9 +649,9 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) LOAD_DB2(sPrestigeLevelInfoStore); LOAD_DB2(sPVPDifficultyStore); LOAD_DB2(sPVPItemStore); - LOAD_DB2(sPvpRewardStore); LOAD_DB2(sPvpTalentStore); - LOAD_DB2(sPvpTalentUnlockStore); + LOAD_DB2(sPvpTalentCategoryStore); + LOAD_DB2(sPvpTalentSlotUnlockStore); LOAD_DB2(sQuestFactionRewardStore); LOAD_DB2(sQuestMoneyRewardStore); LOAD_DB2(sQuestPackageItemStore); @@ -641,7 +663,6 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) LOAD_DB2(sRewardPackXCurrencyTypeStore); LOAD_DB2(sRewardPackXItemStore); LOAD_DB2(sRulesetItemUpgradeStore); - LOAD_DB2(sSandboxScalingStore); LOAD_DB2(sScalingStatDistributionStore); LOAD_DB2(sScenarioStore); LOAD_DB2(sScenarioStepStore); @@ -654,7 +675,6 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) LOAD_DB2(sSkillRaceClassInfoStore); LOAD_DB2(sSoundKitStore); LOAD_DB2(sSpecializationSpellsStore); - LOAD_DB2(sSpellStore); LOAD_DB2(sSpellAuraOptionsStore); LOAD_DB2(sSpellAuraRestrictionsStore); LOAD_DB2(sSpellCastTimesStore); @@ -673,6 +693,7 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) LOAD_DB2(sSpellLearnSpellStore); LOAD_DB2(sSpellLevelsStore); LOAD_DB2(sSpellMiscStore); + LOAD_DB2(sSpellNameStore); LOAD_DB2(sSpellPowerStore); LOAD_DB2(sSpellPowerDifficultyStore); LOAD_DB2(sSpellProcsPerMinuteStore); @@ -700,14 +721,16 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) LOAD_DB2(sTransmogSetItemStore); LOAD_DB2(sTransportAnimationStore); LOAD_DB2(sTransportRotationStore); + LOAD_DB2(sUiMapStore); + LOAD_DB2(sUiMapAssignmentStore); + LOAD_DB2(sUiMapLinkStore); + LOAD_DB2(sUiMapXMapArtStore); LOAD_DB2(sUnitPowerBarStore); LOAD_DB2(sVehicleStore); LOAD_DB2(sVehicleSeatStore); LOAD_DB2(sWMOAreaTableStore); LOAD_DB2(sWorldEffectStore); - LOAD_DB2(sWorldMapAreaStore); LOAD_DB2(sWorldMapOverlayStore); - LOAD_DB2(sWorldMapTransformsStore); LOAD_DB2(sWorldSafeLocsStore); #undef LOAD_DB2 @@ -816,6 +839,9 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) for (EmotesTextSoundEntry const* emoteTextSound : sEmotesTextSoundStore) _emoteTextSounds[EmotesTextSoundContainer::key_type(emoteTextSound->EmotesTextID, emoteTextSound->RaceID, emoteTextSound->SexID, emoteTextSound->ClassID)] = emoteTextSound; + for (ExpectedStatEntry const* expectedStat : sExpectedStatStore) + _expectedStatsByLevel[std::make_pair(expectedStat->Lvl, expectedStat->ExpansionID)] = expectedStat; + for (FactionEntry const* faction : sFactionStore) if (faction->ParentFactionID) _factionTeams[faction->ParentFactionID].push_back(faction->ID); @@ -969,28 +995,17 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) for (PVPItemEntry const* pvpItem : sPVPItemStore) _pvpItemBonus[pvpItem->ItemID] = pvpItem->ItemLevelDelta; - for (PvpRewardEntry const* pvpReward : sPvpRewardStore) - _pvpRewardPack[std::make_pair(pvpReward->PrestigeLevel, pvpReward->HonorLevel)] = pvpReward->RewardPackID; - - for (PvpTalentEntry const* talentInfo : sPvpTalentStore) + for (PvpTalentSlotUnlockEntry const* talentUnlock : sPvpTalentSlotUnlockStore) { - ASSERT(talentInfo->ClassID < MAX_CLASSES); - ASSERT(talentInfo->TierID < MAX_PVP_TALENT_TIERS, "MAX_PVP_TALENT_TIERS must be at least %u", talentInfo->TierID + 1); - ASSERT(talentInfo->ColumnIndex < MAX_PVP_TALENT_COLUMNS, "MAX_PVP_TALENT_COLUMNS must be at least %u", talentInfo->ColumnIndex + 1); - if (!talentInfo->ClassID) + ASSERT(talentUnlock->Slot < (1 << MAX_PVP_TALENT_SLOTS)); + for (int8 i = 0; i < MAX_PVP_TALENT_SLOTS; ++i) { - for (uint32 i = 1; i < MAX_CLASSES; ++i) - _pvpTalentsByPosition[i][talentInfo->TierID][talentInfo->ColumnIndex].push_back(talentInfo); + if (talentUnlock->Slot & (1 << i)) + { + ASSERT(!_pvpTalentSlotUnlock[i]); + _pvpTalentSlotUnlock[i] = talentUnlock; + } } - else - _pvpTalentsByPosition[talentInfo->ClassID][talentInfo->TierID][talentInfo->ColumnIndex].push_back(talentInfo); - } - - for (PvpTalentUnlockEntry const* talentUnlock : sPvpTalentUnlockStore) - { - ASSERT(talentUnlock->TierID < MAX_PVP_TALENT_TIERS, "MAX_PVP_TALENT_TIERS must be at least %u", talentUnlock->TierID + 1); - ASSERT(talentUnlock->ColumnIndex < MAX_PVP_TALENT_COLUMNS, "MAX_PVP_TALENT_COLUMNS must be at least %u", talentUnlock->ColumnIndex + 1); - _pvpTalentUnlock[talentUnlock->TierID][talentUnlock->ColumnIndex] = talentUnlock->HonorLevel; } for (QuestPackageItemEntry const* questPackageItem : sQuestPackageItemStore) @@ -1010,6 +1025,9 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) for (RulesetItemUpgradeEntry const* rulesetItemUpgrade : sRulesetItemUpgradeStore) _rulesetItemUpgrade[rulesetItemUpgrade->ItemID] = rulesetItemUpgrade->ItemUpgradeID; + for (SkillLineAbilityEntry const* skillLineAbility : sSkillLineAbilityStore) + _skillLineAbilitiesBySkillupSkill[skillLineAbility->SkillupSkillLineID ? skillLineAbility->SkillupSkillLineID : skillLineAbility->SkillLine].push_back(skillLineAbility); + for (SkillRaceClassInfoEntry const* entry : sSkillRaceClassInfoStore) if (sSkillLineStore.LookupEntry(entry->SkillID)) _skillRaceClassInfoBySkill.insert(SkillRaceClassInfoContainer::value_type(entry->SkillID, entry)); @@ -1073,6 +1091,118 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) for (TaxiPathNodeEntry const* entry : sTaxiPathNodeStore) sTaxiPathNodesByPath[entry->PathID][entry->NodeIndex] = entry; + for (ToyEntry const* toy : sToyStore) + _toys.insert(toy->ItemID); + + for (TransmogSetItemEntry const* transmogSetItem : sTransmogSetItemStore) + { + TransmogSetEntry const* set = sTransmogSetStore.LookupEntry(transmogSetItem->TransmogSetID); + if (!set) + continue; + + _transmogSetsByItemModifiedAppearance[transmogSetItem->ItemModifiedAppearanceID].push_back(set); + _transmogSetItemsByTransmogSet[transmogSetItem->TransmogSetID].push_back(transmogSetItem); + } + + std::unordered_multimap<int32, UiMapAssignmentEntry const*> uiMapAssignmentByUiMap; + for (UiMapAssignmentEntry const* uiMapAssignment : sUiMapAssignmentStore) + { + uiMapAssignmentByUiMap.emplace(uiMapAssignment->UiMapID, uiMapAssignment); + if (UiMapEntry const* uiMap = sUiMapStore.LookupEntry(uiMapAssignment->UiMapID)) + { + ASSERT(uiMap->System < MAX_UI_MAP_SYSTEM, "MAX_TALENT_TIERS must be at least %u", uiMap->System + 1); + if (uiMapAssignment->MapID >= 0) + _uiMapAssignmentByMap[uiMap->System].emplace(uiMapAssignment->MapID, uiMapAssignment); + if (uiMapAssignment->AreaID) + _uiMapAssignmentByArea[uiMap->System].emplace(uiMapAssignment->AreaID, uiMapAssignment); + if (uiMapAssignment->WmoDoodadPlacementID) + _uiMapAssignmentByWmoDoodadPlacement[uiMap->System].emplace(uiMapAssignment->WmoDoodadPlacementID, uiMapAssignment); + if (uiMapAssignment->WmoGroupID) + _uiMapAssignmentByWmoGroup[uiMap->System].emplace(uiMapAssignment->WmoGroupID, uiMapAssignment); + } + } + + std::unordered_map<std::pair<int32, uint32>, UiMapLinkEntry const*> uiMapLinks; + for (UiMapLinkEntry const* uiMapLink : sUiMapLinkStore) + uiMapLinks[std::make_pair(uiMapLink->ParentUiMapID, uint32(uiMapLink->ChildUiMapID))] = uiMapLink; + + for (UiMapEntry const* uiMap : sUiMapStore) + { + UiMapBounds& bounds = _uiMapBounds[uiMap->ID]; + memset(&bounds, 0, sizeof(bounds)); + if (UiMapEntry const* parentUiMap = sUiMapStore.LookupEntry(uiMap->ParentUiMapID)) + { + if (parentUiMap->Flags & 0x80) + continue; + + UiMapAssignmentEntry const* uiMapAssignment = nullptr; + UiMapAssignmentEntry const* parentUiMapAssignment = nullptr; + for (auto uiMapAssignmentForMap : Trinity::Containers::MapEqualRange(uiMapAssignmentByUiMap, uiMap->ID)) + { + if (uiMapAssignmentForMap.second->MapID >= 0 && + uiMapAssignmentForMap.second->Region[1].X - uiMapAssignmentForMap.second->Region[0].X > 0 && + uiMapAssignmentForMap.second->Region[1].Y - uiMapAssignmentForMap.second->Region[0].Y > 0) + { + uiMapAssignment = uiMapAssignmentForMap.second; + break; + } + } + + if (!uiMapAssignment) + continue; + + for (auto uiMapAssignmentForMap : Trinity::Containers::MapEqualRange(uiMapAssignmentByUiMap, uiMap->ParentUiMapID)) + { + if (uiMapAssignmentForMap.second->MapID == uiMapAssignment->MapID && + uiMapAssignmentForMap.second->Region[1].X - uiMapAssignmentForMap.second->Region[0].X > 0 && + uiMapAssignmentForMap.second->Region[1].Y - uiMapAssignmentForMap.second->Region[0].Y > 0) + { + parentUiMapAssignment = uiMapAssignmentForMap.second; + break; + } + } + + if (!parentUiMapAssignment) + continue; + + float parentXsize = parentUiMapAssignment->Region[1].X - parentUiMapAssignment->Region[0].X; + float parentYsize = parentUiMapAssignment->Region[1].Y - parentUiMapAssignment->Region[0].Y; + float bound0scale = (uiMapAssignment->Region[1].X - parentUiMapAssignment->Region[0].X) / parentXsize; + float bound0 = ((1.0f - bound0scale) * parentUiMapAssignment->UiMax.Y) + (bound0scale * parentUiMapAssignment->UiMin.Y); + float bound2scale = (uiMapAssignment->Region[0].X - parentUiMapAssignment->Region[0].X) / parentXsize; + float bound2 = ((1.0f - bound2scale) * parentUiMapAssignment->UiMax.Y) + (bound2scale * parentUiMapAssignment->UiMin.Y); + float bound1scale = (uiMapAssignment->Region[1].Y - parentUiMapAssignment->Region[0].Y) / parentYsize; + float bound1 = ((1.0f - bound1scale) * parentUiMapAssignment->UiMax.X) + (bound1scale * parentUiMapAssignment->UiMin.X); + float bound3scale = (uiMapAssignment->Region[0].Y - parentUiMapAssignment->Region[0].Y) / parentYsize; + float bound3 = ((1.0f - bound3scale) * parentUiMapAssignment->UiMax.X) + (bound3scale * parentUiMapAssignment->UiMin.X); + if ((bound3 - bound1) > 0.0f || (bound2 - bound0) > 0.0f) + { + bounds.Bounds[0] = bound0; + bounds.Bounds[1] = bound1; + bounds.Bounds[2] = bound2; + bounds.Bounds[3] = bound3; + bounds.IsUiAssignment = true; + } + } + + if (UiMapLinkEntry const* uiMapLink = Trinity::Containers::MapGetValuePtr(uiMapLinks, std::make_pair(uiMap->ParentUiMapID, uiMap->ID))) + { + bounds.IsUiAssignment = false; + bounds.IsUiLink = true; + bounds.Bounds[0] = uiMapLink->UiMin.Y; + bounds.Bounds[1] = uiMapLink->UiMin.X; + bounds.Bounds[2] = uiMapLink->UiMax.Y; + bounds.Bounds[3] = uiMapLink->UiMax.X; + } + } + + for (UiMapXMapArtEntry const* uiMapArt : sUiMapXMapArtStore) + if (uiMapArt->PhaseID) + _uiMapPhases.insert(uiMapArt->PhaseID); + + for (WMOAreaTableEntry const* entry : sWMOAreaTableStore) + _wmoAreaTableLookup[WMOAreaTableKey(entry->WmoID, entry->NameSetID, entry->WmoGroupID)] = entry; + // Initialize global taxinodes mask // include existed nodes that have at least single not spell base (scripted) path { @@ -1093,7 +1223,7 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) continue; // valid taxi network node - uint8 field = (uint8)((node->ID - 1) / 8); + uint32 field = uint32((node->ID - 1) / 8); uint32 submask = 1 << ((node->ID - 1) % 8); sTaxiNodesMask[field] |= submask; @@ -1102,32 +1232,15 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) if (node->Flags & TAXI_NODE_FLAG_ALLIANCE) sAllianceTaxiNodesMask[field] |= submask; - uint32 nodeMap; - DeterminaAlternateMapPosition(node->ContinentID, node->Pos.X, node->Pos.Y, node->Pos.Z, &nodeMap); - if (nodeMap < 2) + int32 uiMapId = -1; + if (!GetUiMapPosition(node->Pos.X, node->Pos.Y, node->Pos.Z, node->ContinentID, 0, 0, 0, UI_MAP_SYSTEM_ADVENTURE, false, &uiMapId)) + GetUiMapPosition(node->Pos.X, node->Pos.Y, node->Pos.Z, node->ContinentID, 0, 0, 0, UI_MAP_SYSTEM_TAXI, false, &uiMapId); + + if (uiMapId == 985 || uiMapId == 986) sOldContinentsNodesMask[field] |= submask; } } - for (ToyEntry const* toy : sToyStore) - _toys.insert(toy->ItemID); - - for (TransmogSetItemEntry const* transmogSetItem : sTransmogSetItemStore) - { - TransmogSetEntry const* set = sTransmogSetStore.LookupEntry(transmogSetItem->TransmogSetID); - if (!set) - continue; - - _transmogSetsByItemModifiedAppearance[transmogSetItem->ItemModifiedAppearanceID].push_back(set); - _transmogSetItemsByTransmogSet[transmogSetItem->TransmogSetID].push_back(transmogSetItem); - } - - for (WMOAreaTableEntry const* entry : sWMOAreaTableStore) - _wmoAreaTableLookup[WMOAreaTableKey(entry->WmoID, entry->NameSetID, entry->WmoGroupID)] = entry; - - for (WorldMapAreaEntry const* worldMapArea : sWorldMapAreaStore) - _worldMapAreaByAreaID[worldMapArea->AreaID] = worldMapArea; - // error checks if (bad_db2_files.size() == _stores.size()) { @@ -1145,13 +1258,13 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) } // Check loaded DB2 files proper version - if (!sAreaTableStore.LookupEntry(9531) || // last area added in 7.3.5 (25996) - !sCharTitlesStore.LookupEntry(522) || // last char title added in 7.3.5 (25996) - !sGemPropertiesStore.LookupEntry(3632) || // last gem property added in 7.3.5 (25996) - !sItemStore.LookupEntry(157831) || // last item added in 7.3.5 (25996) - !sItemExtendedCostStore.LookupEntry(6300) || // last item extended cost added in 7.3.5 (25996) - !sMapStore.LookupEntry(1903) || // last map added in 7.3.5 (25996) - !sSpellStore.LookupEntry(263166)) // last spell added in 7.3.5 (25996) + if (!sAreaTableStore.LookupEntry(10048) || // last area added in 8.0.1 (28153) + !sCharTitlesStore.LookupEntry(633) || // last char title added in 8.0.1 (28153) + !sGemPropertiesStore.LookupEntry(3745) || // last gem property added in 8.0.1 (28153) + !sItemStore.LookupEntry(164760) || // last item added in 8.0.1 (28153) + !sItemExtendedCostStore.LookupEntry(6448) || // last item extended cost added in 8.0.1 (28153) + !sMapStore.LookupEntry(2103) || // last map added in 8.0.1 (28153) + !sSpellNameStore.LookupEntry(281872)) // last spell added in 8.0.1 (28153) { TC_LOG_ERROR("misc", "You have _outdated_ DB2 files. Please extract correct versions from current using client."); exit(1); @@ -1193,9 +1306,9 @@ void DB2Manager::LoadHotfixData() uint32 tableHash = fields[1].GetUInt32(); int32 recordId = fields[2].GetInt32(); bool deleted = fields[3].GetBool(); - if (_stores.find(tableHash) == _stores.end()) + if (_stores.find(tableHash) == _stores.end() && _hotfixBlob.find(std::make_pair(tableHash, recordId)) == _hotfixBlob.end()) { - TC_LOG_ERROR("sql.sql", "Table `hotfix_data` references unknown DB2 store by hash 0x%X in hotfix id %d", tableHash, id); + TC_LOG_ERROR("sql.sql", "Table `hotfix_data` references unknown DB2 store by hash 0x%X and has no reference to `hotfix_blob` in hotfix id %d", tableHash, id); continue; } @@ -1210,7 +1323,40 @@ void DB2Manager::LoadHotfixData() if (DB2StorageBase* store = Trinity::Containers::MapGetValuePtr(_stores, itr->first.first)) store->EraseRecord(itr->first.second); - TC_LOG_INFO("server.loading", ">> Loaded %u hotfix records in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); + TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " hotfix records in %u ms", _hotfixData.size(), GetMSTimeDiffToNow(oldMSTime)); +} + +void DB2Manager::LoadHotfixBlob() +{ + uint32 oldMSTime = getMSTime(); + _hotfixBlob.clear(); + + QueryResult result = HotfixDatabase.Query("SELECT TableHash, RecordId, `Blob` FROM hotfix_blob ORDER BY TableHash"); + + if (!result) + { + TC_LOG_INFO("server.loading", ">> Loaded 0 hotfix blob entries."); + return; + } + + do + { + Field* fields = result->Fetch(); + + uint32 tableHash = fields[0].GetUInt32(); + auto storeItr = _stores.find(tableHash); + if (storeItr != _stores.end()) + { + TC_LOG_ERROR("server.loading", "Table hash 0x%X points to a loaded DB2 store %s, fill related table instead of hotfix_blob", + tableHash, storeItr->second->GetFileName().c_str()); + continue; + } + + int32 recordId = fields[1].GetInt32(); + _hotfixBlob[std::make_pair(tableHash, recordId)] = fields[2].GetBinary(); + } while (result->NextRow()); + + TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " hotfix blob records in %u ms", _hotfixBlob.size(), GetMSTimeDiffToNow(oldMSTime)); } std::map<uint64, int32> const& DB2Manager::GetHotfixData() const @@ -1218,6 +1364,11 @@ std::map<uint64, int32> const& DB2Manager::GetHotfixData() const return _hotfixData; } +std::vector<uint8> const* DB2Manager::GetHotfixBlobData(uint32 tableHash, int32 recordId) +{ + return Trinity::Containers::MapGetValuePtr(_hotfixBlob, std::make_pair(tableHash, recordId)); +} + void DB2Manager::InsertNewHotfix(uint32 tableHash, uint32 recordId) { _hotfixData[MAKE_PAIR64(tableHash, ++_maxHotfixId)] = recordId; @@ -1545,6 +1696,98 @@ EmotesTextSoundEntry const* DB2Manager::GetTextSoundEmoteFor(uint32 emote, uint8 return nullptr; } +template<float(ExpectedStatModEntry::*field)> +struct ExpectedStatModReducer +{ + float operator()(float mod, ExpectedStatModEntry const* expectedStatMod) + { + return mod * (expectedStatMod ? expectedStatMod->*field : 1.0f); + } +}; + +float DB2Manager::EvaluateExpectedStat(ExpectedStatType stat, uint32 level, int32 expansion, uint32 contentTuningId, Classes unitClass) const +{ + auto expectedStatItr = _expectedStatsByLevel.find(std::make_pair(level, expansion)); + if (expectedStatItr == _expectedStatsByLevel.end()) + expectedStatItr = _expectedStatsByLevel.find(std::make_pair(level, -2)); + + if (expectedStatItr == _expectedStatsByLevel.end()) + return 1.0f; + + std::array<ExpectedStatModEntry const*, 3> mods; + mods.fill(nullptr); + if (ContentTuningEntry const* contentTuning = sContentTuningStore.LookupEntry(contentTuningId)) + { + mods[0] = sExpectedStatModStore.LookupEntry(contentTuning->ExpectedStatModID); + mods[1] = sExpectedStatModStore.LookupEntry(contentTuning->DifficultyESMID); + } + + switch (unitClass) + { + case CLASS_WARRIOR: + mods[2] = sExpectedStatModStore.LookupEntry(4); + break; + case CLASS_PALADIN: + mods[2] = sExpectedStatModStore.LookupEntry(2); + break; + case CLASS_ROGUE: + mods[2] = sExpectedStatModStore.LookupEntry(3); + break; + case CLASS_MAGE: + mods[2] = sExpectedStatModStore.LookupEntry(1); + break; + default: + break; + } + + float value = 0.0f; + switch (stat) + { + case ExpectedStatType::CreatureHealth: + value = std::accumulate(mods.begin(), mods.end(), expectedStatItr->second->CreatureHealth, + ExpectedStatModReducer<&ExpectedStatModEntry::CreatureHealthMod>()); + break; + case ExpectedStatType::PlayerHealth: + value = std::accumulate(mods.begin(), mods.end(), expectedStatItr->second->PlayerHealth, + ExpectedStatModReducer<&ExpectedStatModEntry::PlayerHealthMod>()); + break; + case ExpectedStatType::CreatureAutoAttackDps: + value = std::accumulate(mods.begin(), mods.end(), expectedStatItr->second->CreatureAutoAttackDps, + ExpectedStatModReducer<&ExpectedStatModEntry::CreatureAutoAttackDPSMod>()); + break; + case ExpectedStatType::CreatureArmor: + value = std::accumulate(mods.begin(), mods.end(), expectedStatItr->second->CreatureArmor, + ExpectedStatModReducer<&ExpectedStatModEntry::CreatureArmorMod>()); + break; + case ExpectedStatType::PlayerMana: + value = std::accumulate(mods.begin(), mods.end(), expectedStatItr->second->PlayerMana, + ExpectedStatModReducer<&ExpectedStatModEntry::PlayerManaMod>()); + break; + case ExpectedStatType::PlayerPrimaryStat: + value = std::accumulate(mods.begin(), mods.end(), expectedStatItr->second->PlayerPrimaryStat, + ExpectedStatModReducer<&ExpectedStatModEntry::PlayerPrimaryStatMod>()); + break; + case ExpectedStatType::PlayerSecondaryStat: + value = std::accumulate(mods.begin(), mods.end(), expectedStatItr->second->PlayerSecondaryStat, + ExpectedStatModReducer<&ExpectedStatModEntry::PlayerSecondaryStatMod>()); + break; + case ExpectedStatType::ArmorConstant: + value = std::accumulate(mods.begin(), mods.end(), expectedStatItr->second->ArmorConstant, + ExpectedStatModReducer<&ExpectedStatModEntry::ArmorConstantMod>()); + break; + case ExpectedStatType::None: + break; + case ExpectedStatType::CreatureSpellDamage: + value = std::accumulate(mods.begin(), mods.end(), expectedStatItr->second->CreatureSpellDamage, + ExpectedStatModReducer<&ExpectedStatModEntry::CreatureSpellDamageMod>()); + break; + default: + break; + } + + return value; +} + std::vector<uint32> const* DB2Manager::GetFactionTeamList(uint32 faction) const { auto itr = _factionTeams.find(faction); @@ -1901,14 +2144,26 @@ ResponseCodes DB2Manager::ValidateName(std::wstring const& name, LocaleConstant return CHAR_NAME_SUCCESS; } -uint8 DB2Manager::GetMaxPrestige() const +int32 DB2Manager::GetNumTalentsAtLevel(uint32 level, Classes playerClass) { - uint8 max = 0; - for (PrestigeLevelInfoEntry const* prestigeLevelInfo : sPrestigeLevelInfoStore) - if (!prestigeLevelInfo->IsDisabled()) - max = std::max(prestigeLevelInfo->PrestigeLevel, max); + NumTalentsAtLevelEntry const* numTalentsAtLevel = sNumTalentsAtLevelStore.LookupEntry(level); + if (!numTalentsAtLevel) + numTalentsAtLevel = sNumTalentsAtLevelStore.LookupEntry(sNumTalentsAtLevelStore.GetNumRows() - 1); - return max; + if (numTalentsAtLevel) + { + switch (playerClass) + { + case CLASS_DEATH_KNIGHT: + return numTalentsAtLevel->NumTalentsDeathKnight; + case CLASS_DEMON_HUNTER: + return numTalentsAtLevel->NumTalentsDemonHunter; + default: + return numTalentsAtLevel->NumTalents; + } + } + + return 0; } PVPDifficultyEntry const* DB2Manager::GetBattlegroundBracketByLevel(uint32 mapid, uint32 level) @@ -1941,27 +2196,34 @@ PVPDifficultyEntry const* DB2Manager::GetBattlegroundBracketById(uint32 mapid, B return nullptr; } -uint32 DB2Manager::GetRewardPackIDForPvpRewardByHonorLevelAndPrestige(uint8 honorLevel, uint8 prestige) const +uint32 DB2Manager::GetRequiredLevelForPvpTalentSlot(uint8 slot, Classes class_) const { - auto itr = _pvpRewardPack.find({ prestige, honorLevel }); - if (itr == _pvpRewardPack.end()) - itr = _pvpRewardPack.find({ 0, honorLevel }); - - if (itr == _pvpRewardPack.end()) - return 0; + ASSERT(slot < MAX_PVP_TALENT_SLOTS); + if (_pvpTalentSlotUnlock[slot]) + { + switch (class_) + { + case CLASS_DEATH_KNIGHT: + return _pvpTalentSlotUnlock[slot]->DeathKnightLevelRequired; + case CLASS_DEMON_HUNTER: + return _pvpTalentSlotUnlock[slot]->DemonHunterLevelRequired; + default: + break; + } + return _pvpTalentSlotUnlock[slot]->LevelRequired; + } - return itr->second; + return 0; } -uint32 DB2Manager::GetRequiredHonorLevelForPvpTalent(PvpTalentEntry const* talentInfo) const +int32 DB2Manager::GetPvpTalentNumSlotsAtLevel(uint32 level, Classes class_) const { - ASSERT(talentInfo); - return _pvpTalentUnlock[talentInfo->TierID][talentInfo->ColumnIndex]; -} + int32 slots = 0; + for (uint8 slot = 0; slot < MAX_PVP_TALENT_SLOTS; ++slot) + if (level >= GetRequiredLevelForPvpTalentSlot(slot, class_)) + ++slots; -std::vector<PvpTalentEntry const*> const& DB2Manager::GetPvpTalentsByPosition(uint32 class_, uint32 tier, uint32 column) const -{ - return _pvpTalentsByPosition[class_][tier][column]; + return slots; } std::vector<QuestPackageItemEntry const*> const* DB2Manager::GetQuestPackageItems(uint32 questPackageID) const @@ -2059,6 +2321,11 @@ uint32 DB2Manager::GetRulesetItemUpgrade(uint32 itemId) const return 0; } +std::vector<SkillLineAbilityEntry const*> const* DB2Manager::GetSkillLineAbilitiesBySkill(uint32 skillId) const +{ + return Trinity::Containers::MapGetValuePtr(_skillLineAbilitiesBySkillupSkill, skillId); +} + SkillRaceClassInfoEntry const* DB2Manager::GetSkillRaceClassInfo(uint32 skill, uint8 race, uint8 class_) { auto bounds = _skillRaceClassInfoBySkill.equal_range(skill); @@ -2180,99 +2447,354 @@ std::vector<TransmogSetItemEntry const*> const* DB2Manager::GetTransmogSetItems( return Trinity::Containers::MapGetValuePtr(_transmogSetItemsByTransmogSet, transmogSetId); } -WMOAreaTableEntry const* DB2Manager::GetWMOAreaTable(int32 rootId, int32 adtId, int32 groupId) const +struct UiMapAssignmentStatus { - auto i = _wmoAreaTableLookup.find(WMOAreaTableKey(int16(rootId), int8(adtId), groupId)); - if (i != _wmoAreaTableLookup.end()) - return i->second; + UiMapAssignmentEntry const* UiMapAssignment = nullptr; + // distances if inside + struct + { + float DistanceToRegionCenterSquared = std::numeric_limits<float>::max(); + float DistanceToRegionBottom = std::numeric_limits<float>::max(); + } Inside; - return nullptr; -} + // distances if outside + struct + { + float DistanceToRegionEdgeSquared = std::numeric_limits<float>::max(); + float DistanceToRegionTop = std::numeric_limits<float>::max(); + float DistanceToRegionBottom = std::numeric_limits<float>::max(); + } Outside; + + int8 MapPriority = 3; + int8 AreaPriority = -1; + int8 WmoPriority = 3; -uint32 DB2Manager::GetVirtualMapForMapAndZone(uint32 mapId, uint32 zoneId) const + bool IsInside() const + { + return Outside.DistanceToRegionEdgeSquared < std::numeric_limits<float>::epsilon() && + std::abs(Outside.DistanceToRegionTop) < std::numeric_limits<float>::epsilon() && + std::abs(Outside.DistanceToRegionBottom) < std::numeric_limits<float>::epsilon(); + } +}; + +static bool operator<(UiMapAssignmentStatus const& left, UiMapAssignmentStatus const& right) { - if (mapId != 530 && mapId != 571 && mapId != 732) // speed for most cases - return mapId; + bool leftInside = left.IsInside(); + bool rightInside = right.IsInside(); + if (leftInside != rightInside) + return leftInside; + + if (left.UiMapAssignment && right.UiMapAssignment && + left.UiMapAssignment->UiMapID == right.UiMapAssignment->UiMapID && + left.UiMapAssignment->OrderIndex != right.UiMapAssignment->OrderIndex) + return left.UiMapAssignment->OrderIndex < right.UiMapAssignment->OrderIndex; + + if (left.WmoPriority != right.WmoPriority) + return left.WmoPriority < right.WmoPriority; + + if (left.AreaPriority != right.AreaPriority) + return left.AreaPriority < right.AreaPriority; + + if (left.MapPriority != right.MapPriority) + return left.MapPriority < right.MapPriority; + + if (leftInside) + { + if (left.Inside.DistanceToRegionBottom != right.Inside.DistanceToRegionBottom) + return left.Inside.DistanceToRegionBottom < right.Inside.DistanceToRegionBottom; - auto itr = _worldMapAreaByAreaID.find(zoneId); - if (itr != _worldMapAreaByAreaID.end()) - return itr->second->DisplayMapID >= 0 ? itr->second->DisplayMapID : itr->second->MapID; + float leftUiSizeX = left.UiMapAssignment ? (left.UiMapAssignment->UiMax.X - left.UiMapAssignment->UiMin.X) : 0.0f; + float rightUiSizeX = right.UiMapAssignment ? (right.UiMapAssignment->UiMax.X - right.UiMapAssignment->UiMin.X) : 0.0f; - return mapId; + if (leftUiSizeX > std::numeric_limits<float>::epsilon() && rightUiSizeX > std::numeric_limits<float>::epsilon()) + { + float leftScale = (left.UiMapAssignment->Region[1].X - left.UiMapAssignment->Region[0].X) / leftUiSizeX; + float rightScale = (right.UiMapAssignment->Region[1].X - right.UiMapAssignment->Region[0].X) / rightUiSizeX; + if (leftScale != rightScale) + return leftScale < rightScale; + } + + if (left.Inside.DistanceToRegionCenterSquared != right.Inside.DistanceToRegionCenterSquared) + return left.Inside.DistanceToRegionCenterSquared < right.Inside.DistanceToRegionCenterSquared; + } + else + { + if (left.Outside.DistanceToRegionTop != right.Outside.DistanceToRegionTop) + return left.Outside.DistanceToRegionTop < right.Outside.DistanceToRegionTop; + + if (left.Outside.DistanceToRegionBottom != right.Outside.DistanceToRegionBottom) + return left.Outside.DistanceToRegionBottom < right.Outside.DistanceToRegionBottom; + + if (left.Outside.DistanceToRegionEdgeSquared != right.Outside.DistanceToRegionEdgeSquared) + return left.Outside.DistanceToRegionEdgeSquared < right.Outside.DistanceToRegionEdgeSquared; + } + + return true; } -void DB2Manager::Zone2MapCoordinates(uint32 areaId, float& x, float& y) const +static bool CheckUiMapAssignmentStatus(float x, float y, float z, int32 mapId, int32 areaId, int32 wmoDoodadPlacementId, int32 wmoGroupId, + UiMapAssignmentEntry const* uiMapAssignment, UiMapAssignmentStatus* status) { - auto itr = _worldMapAreaByAreaID.find(areaId); - if (itr == _worldMapAreaByAreaID.end()) - return; + status->UiMapAssignment = uiMapAssignment; + // x,y not in region + if (x < uiMapAssignment->Region[0].X || x > uiMapAssignment->Region[1].X || y < uiMapAssignment->Region[0].Y || y > uiMapAssignment->Region[1].Y) + { + float xDiff, yDiff; + if (x >= uiMapAssignment->Region[0].X) + { + xDiff = 0.0f; + if (x > uiMapAssignment->Region[1].X) + xDiff = x - uiMapAssignment->Region[0].X; + } + else + xDiff = uiMapAssignment->Region[0].X - x; - std::swap(x, y); // at client map coords swapped - x = x*((itr->second->LocBottom - itr->second->LocTop) / 100) + itr->second->LocTop; - y = y*((itr->second->LocRight - itr->second->LocLeft) / 100) + itr->second->LocLeft; // client y coord from top to down + if (y >= uiMapAssignment->Region[0].Y) + { + yDiff = 0.0f; + if (y > uiMapAssignment->Region[1].Y) + yDiff = y - uiMapAssignment->Region[0].Y; + } + else + yDiff = uiMapAssignment->Region[0].Y - y; + + status->Outside.DistanceToRegionEdgeSquared = xDiff * xDiff + yDiff * yDiff; + } + else + { + status->Inside.DistanceToRegionCenterSquared = + (x - (uiMapAssignment->Region[0].X + uiMapAssignment->Region[1].X) * 0.5f) * (x - (uiMapAssignment->Region[0].X + uiMapAssignment->Region[1].X) * 0.5f) + + (y - (uiMapAssignment->Region[0].Y + uiMapAssignment->Region[1].Y) * 0.5f) * (y - (uiMapAssignment->Region[0].Y + uiMapAssignment->Region[1].Y) * 0.5f); + status->Outside.DistanceToRegionEdgeSquared = 0.0f; + } + + // z not in region + if (z < uiMapAssignment->Region[0].Z || z > uiMapAssignment->Region[1].Z) + { + if (z < uiMapAssignment->Region[1].Z) + { + if (z < uiMapAssignment->Region[0].Z) + status->Outside.DistanceToRegionBottom = std::min(uiMapAssignment->Region[0].Z - z, 10000.0f); + } + else + status->Outside.DistanceToRegionTop = std::min(z - uiMapAssignment->Region[1].Z, 10000.0f); + } + else + { + status->Outside.DistanceToRegionTop = 0.0f; + status->Outside.DistanceToRegionBottom = 0.0f; + status->Inside.DistanceToRegionBottom = std::min(uiMapAssignment->Region[0].Z - z, 10000.0f); + } + + if (areaId && uiMapAssignment->AreaID) + { + int8 areaPriority = 0; + if (areaId) + { + while (areaId != uiMapAssignment->AreaID) + { + if (AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(areaId)) + { + areaId = areaEntry->ParentAreaID; + ++areaPriority; + } + else + return false; + } + } + else + return false; + + status->AreaPriority = areaPriority; + } + + if (mapId >= 0 && uiMapAssignment->MapID >= 0) + { + if (mapId != uiMapAssignment->MapID) + { + if (MapEntry const* mapEntry = sMapStore.LookupEntry(mapId)) + { + if (mapEntry->ParentMapID == uiMapAssignment->MapID) + status->MapPriority = 1; + else if (mapEntry->CosmeticParentMapID == uiMapAssignment->MapID) + status->MapPriority = 2; + else + return false; + } + else + return false; + } + else + status->MapPriority = 0; + } + + if (wmoGroupId || wmoDoodadPlacementId) + { + if (uiMapAssignment->WmoGroupID || uiMapAssignment->WmoDoodadPlacementID) + { + bool hasDoodadPlacement = false; + if (wmoDoodadPlacementId && uiMapAssignment->WmoDoodadPlacementID) + { + if (wmoDoodadPlacementId != uiMapAssignment->WmoDoodadPlacementID) + return false; + + hasDoodadPlacement = true; + } + + if (wmoGroupId && uiMapAssignment->WmoGroupID) + { + if (wmoGroupId != uiMapAssignment->WmoGroupID) + return false; + + if (hasDoodadPlacement) + status->WmoPriority = 0; + else + status->WmoPriority = 2; + } + else if (hasDoodadPlacement) + status->WmoPriority = 1; + } + } + + return true; } -void DB2Manager::Map2ZoneCoordinates(uint32 areaId, float& x, float& y) const +static UiMapAssignmentEntry const* FindNearestMapAssignment(float x, float y, float z, int32 mapId, int32 areaId, int32 wmoDoodadPlacementId, int32 wmoGroupId, UiMapSystem system) { - auto itr = _worldMapAreaByAreaID.find(areaId); - if (itr == _worldMapAreaByAreaID.end()) - return; + UiMapAssignmentStatus nearestMapAssignment; + auto iterateUiMapAssignments = [&](std::unordered_multimap<int32, UiMapAssignmentEntry const*> const& assignments, int32 id) + { + for (auto assignment : Trinity::Containers::MapEqualRange(assignments, id)) + { + UiMapAssignmentStatus status; + if (CheckUiMapAssignmentStatus(x, y, z, mapId, areaId, wmoDoodadPlacementId, wmoGroupId, assignment.second, &status)) + if (status < nearestMapAssignment) + nearestMapAssignment = status; + } + }; + + iterateUiMapAssignments(_uiMapAssignmentByWmoGroup[system], wmoGroupId); + iterateUiMapAssignments(_uiMapAssignmentByWmoDoodadPlacement[system], wmoDoodadPlacementId); + + AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(areaId); + while (areaEntry) + { + iterateUiMapAssignments(_uiMapAssignmentByArea[system], areaEntry->ID); + areaEntry = sAreaTableStore.LookupEntry(areaEntry->ParentAreaID); + } - x = (x - itr->second->LocTop) / ((itr->second->LocBottom - itr->second->LocTop) / 100); - y = (y - itr->second->LocLeft) / ((itr->second->LocRight - itr->second->LocLeft) / 100); // client y coord from top to down - std::swap(x, y); // client have map coords swapped + if (MapEntry const* mapEntry = sMapStore.LookupEntry(mapId)) + { + iterateUiMapAssignments(_uiMapAssignmentByMap[system], mapEntry->ID); + if (mapEntry->ParentMapID >= 0) + iterateUiMapAssignments(_uiMapAssignmentByMap[system], mapEntry->ParentMapID); + if (mapEntry->CosmeticParentMapID >= 0) + iterateUiMapAssignments(_uiMapAssignmentByMap[system], mapEntry->CosmeticParentMapID); + } + + return nearestMapAssignment.UiMapAssignment; } -void DB2Manager::DeterminaAlternateMapPosition(uint32 mapId, float x, float y, float z, uint32* newMapId /*= nullptr*/, DBCPosition2D* newPos /*= nullptr*/) +static DBCPosition2D CalculateGlobalUiMapPosition(int32 uiMapID, DBCPosition2D uiPosition) { - ASSERT(newMapId || newPos); - WorldMapTransformsEntry const* transformation = nullptr; - for (WorldMapTransformsEntry const* transform : sWorldMapTransformsStore) + UiMapEntry const* uiMap = sUiMapStore.LookupEntry(uiMapID); + while (uiMap) { - if (transform->MapID != mapId) - continue; - if (transform->AreaID) - continue; - if (transform->Flags & WORLD_MAP_TRANSFORMS_FLAG_DUNGEON) - continue; - if (transform->RegionMin.X > x || transform->RegionMax.X < x) - continue; - if (transform->RegionMin.Y > y || transform->RegionMax.Y < y) - continue; - if (transform->RegionMin.Z > z || transform->RegionMax.Z < z) - continue; + if (uiMap->Type <= UI_MAP_TYPE_CONTINENT) + break; + + UiMapBounds const* bounds = Trinity::Containers::MapGetValuePtr(_uiMapBounds, uiMap->ID); + if (!bounds || !bounds->IsUiAssignment) + break; - if (!transformation || transformation->Priority < transform->Priority) - transformation = transform; + uiPosition.X = ((1.0 - uiPosition.X) * bounds->Bounds[1]) + (bounds->Bounds[3] * uiPosition.X); + uiPosition.Y = ((1.0 - uiPosition.Y) * bounds->Bounds[0]) + (bounds->Bounds[2] * uiPosition.Y); + + uiMap = sUiMapStore.LookupEntry(uiMap->ParentUiMapID); } - if (!transformation) - { - if (newMapId) - *newMapId = mapId; + return uiPosition; +} - if (newPos) - { - newPos->X = x; - newPos->Y = y; - } - return; +bool DB2Manager::GetUiMapPosition(float x, float y, float z, int32 mapId, int32 areaId, int32 wmoDoodadPlacementId, int32 wmoGroupId, UiMapSystem system, bool local, + int32* uiMapId /*= nullptr*/, DBCPosition2D* newPos /*= nullptr*/) +{ + if (uiMapId) + *uiMapId = -1; + + if (newPos) + { + newPos->X = 0.0f; + newPos->Y = 0.0f; } - if (newMapId) - *newMapId = transformation->NewMapID; + UiMapAssignmentEntry const* uiMapAssignment = FindNearestMapAssignment(x, y, z, mapId, areaId, wmoDoodadPlacementId, wmoGroupId, system); + if (!uiMapAssignment) + return false; + + if (uiMapId) + *uiMapId = uiMapAssignment->UiMapID; + + DBCPosition2D relativePosition{ 0.5f, 0.5f }; + DBCPosition2D regionSize{ uiMapAssignment->Region[1].X - uiMapAssignment->Region[0].X, uiMapAssignment->Region[1].Y - uiMapAssignment->Region[0].Y }; + if (regionSize.X > 0.0f) + relativePosition.X = (x - uiMapAssignment->Region[0].X) / regionSize.X; + if (regionSize.Y > 0.0f) + relativePosition.Y = (y - uiMapAssignment->Region[0].Y) / regionSize.Y; + + DBCPosition2D uiPosition + { + // x any y are swapped + ((1.0f - (1.0f - relativePosition.Y)) * uiMapAssignment->UiMin.X) + ((1.0f - relativePosition.Y) * uiMapAssignment->UiMax.X), + ((1.0f - (1.0f - relativePosition.X)) * uiMapAssignment->UiMin.Y) + ((1.0f - relativePosition.X) * uiMapAssignment->UiMax.Y) + }; + + if (!local) + uiPosition = CalculateGlobalUiMapPosition(uiMapAssignment->UiMapID, uiPosition); + + if (newPos) + *newPos = uiPosition; - if (!newPos) + return true; +} + +void DB2Manager::Zone2MapCoordinates(uint32 areaId, float& x, float& y) const +{ + AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(areaId); + if (!areaEntry) return; - if (std::abs(transformation->RegionScale - 1.0f) > 0.001f) + for (auto assignment : Trinity::Containers::MapEqualRange(_uiMapAssignmentByArea[UI_MAP_SYSTEM_WORLD], areaId)) { - x = (x - transformation->RegionMin.X) * transformation->RegionScale + transformation->RegionMin.X; - y = (y - transformation->RegionMin.Y) * transformation->RegionScale + transformation->RegionMin.Y; + if (assignment.second->MapID >= 0 && assignment.second->MapID != areaEntry->ContinentID) + continue; + + float tmpY = 1.0 - ((y - assignment.second->UiMin.Y) / (assignment.second->UiMax.Y - assignment.second->UiMin.Y)); + float tmpX = 1.0 - ((x - assignment.second->UiMin.X) / (assignment.second->UiMax.X - assignment.second->UiMin.X)); + y = ((1.0 - tmpY) * assignment.second->Region[0].X) + (tmpY * assignment.second->Region[1].X); + x = ((1.0 - tmpX) * assignment.second->Region[0].Y) + (tmpX * assignment.second->Region[1].Y); + break; } +} + +void DB2Manager::Map2ZoneCoordinates(uint32 areaId, float& x, float& y) const +{ + DBCPosition2D zoneCoords; + if (!GetUiMapPosition(x, y, 0.0f, -1, areaId, 0, 0, UI_MAP_SYSTEM_WORLD, true, nullptr, &zoneCoords)) + return; - newPos->X = x + transformation->RegionOffset.X; - newPos->Y = y + transformation->RegionOffset.Y; + x = zoneCoords.Y * 100.0f; + y = zoneCoords.X * 100.0f; +} + +bool DB2Manager::IsUiMapPhase(uint32 phaseId) const +{ + return _uiMapPhases.find(phaseId) != _uiMapPhases.end(); +} + +WMOAreaTableEntry const* DB2Manager::GetWMOAreaTable(int32 rootId, int32 adtId, int32 groupId) const +{ + return Trinity::Containers::MapGetValuePtr(_wmoAreaTableLookup, WMOAreaTableKey(int16(rootId), int8(adtId), groupId)); } bool ChrClassesXPowerTypesEntryComparator::Compare(ChrClassesXPowerTypesEntry const* left, ChrClassesXPowerTypesEntry const* right) diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h index d5f0af253a0..3e61c1513ad 100644 --- a/src/server/game/DataStores/DB2Stores.h +++ b/src/server/game/DataStores/DB2Stores.h @@ -35,6 +35,7 @@ class DB2HotfixGeneratorBase; TC_GAME_API extern DB2Storage<AchievementEntry> sAchievementStore; +TC_GAME_API extern DB2Storage<AnimationDataEntry> sAnimationDataStore; TC_GAME_API extern DB2Storage<AnimKitEntry> sAnimKitStore; TC_GAME_API extern DB2Storage<AreaTableEntry> sAreaTableStore; TC_GAME_API extern DB2Storage<AreaTriggerEntry> sAreaTriggerStore; @@ -65,6 +66,7 @@ TC_GAME_API extern DB2Storage<ChrRacesEntry> sChrRacesSto TC_GAME_API extern DB2Storage<ChrSpecializationEntry> sChrSpecializationStore; TC_GAME_API extern DB2Storage<CinematicCameraEntry> sCinematicCameraStore; TC_GAME_API extern DB2Storage<CinematicSequencesEntry> sCinematicSequencesStore; +TC_GAME_API extern DB2Storage<ContentTuningEntry> sContentTuningStore; TC_GAME_API extern DB2Storage<ConversationLineEntry> sConversationLineStore; TC_GAME_API extern DB2Storage<CreatureDisplayInfoEntry> sCreatureDisplayInfoStore; TC_GAME_API extern DB2Storage<CreatureDisplayInfoExtraEntry> sCreatureDisplayInfoExtraStore; @@ -148,14 +150,14 @@ TC_GAME_API extern DB2Storage<PhaseEntry> sPhaseStore; TC_GAME_API extern DB2Storage<PlayerConditionEntry> sPlayerConditionStore; TC_GAME_API extern DB2Storage<PowerDisplayEntry> sPowerDisplayStore; TC_GAME_API extern DB2Storage<PvpTalentEntry> sPvpTalentStore; -TC_GAME_API extern DB2Storage<PvpTalentUnlockEntry> sPvpTalentUnlockStore; +TC_GAME_API extern DB2Storage<PvpTalentCategoryEntry> sPvpTalentCategoryStore; +TC_GAME_API extern DB2Storage<PvpTalentSlotUnlockEntry> sPvpTalentSlotUnlockStore; TC_GAME_API extern DB2Storage<QuestFactionRewardEntry> sQuestFactionRewardStore; TC_GAME_API extern DB2Storage<QuestMoneyRewardEntry> sQuestMoneyRewardStore; TC_GAME_API extern DB2Storage<QuestSortEntry> sQuestSortStore; TC_GAME_API extern DB2Storage<QuestXPEntry> sQuestXPStore; TC_GAME_API extern DB2Storage<RandPropPointsEntry> sRandPropPointsStore; TC_GAME_API extern DB2Storage<RewardPackEntry> sRewardPackStore; -TC_GAME_API extern DB2Storage<SandboxScalingEntry> sSandboxScalingStore; TC_GAME_API extern DB2Storage<ScalingStatDistributionEntry> sScalingStatDistributionStore; TC_GAME_API extern DB2Storage<ScenarioEntry> sScenarioStore; TC_GAME_API extern DB2Storage<ScenarioStepEntry> sScenarioStepStore; @@ -164,7 +166,6 @@ TC_GAME_API extern DB2Storage<SceneScriptPackageEntry> sSceneScript TC_GAME_API extern DB2Storage<SkillLineAbilityEntry> sSkillLineAbilityStore; TC_GAME_API extern DB2Storage<SkillRaceClassInfoEntry> sSkillRaceClassInfoStore; TC_GAME_API extern DB2Storage<SoundKitEntry> sSoundKitStore; -TC_GAME_API extern DB2Storage<SpellEntry> sSpellStore; TC_GAME_API extern DB2Storage<SpellAuraOptionsEntry> sSpellAuraOptionsStore; TC_GAME_API extern DB2Storage<SpellAuraRestrictionsEntry> sSpellAuraRestrictionsStore; TC_GAME_API extern DB2Storage<SpellCastTimesEntry> sSpellCastTimesStore; @@ -183,6 +184,7 @@ TC_GAME_API extern DB2Storage<SpellItemEnchantmentConditionEntry> sSpellItemEn TC_GAME_API extern DB2Storage<SpellLearnSpellEntry> sSpellLearnSpellStore; TC_GAME_API extern DB2Storage<SpellLevelsEntry> sSpellLevelsStore; TC_GAME_API extern DB2Storage<SpellMiscEntry> sSpellMiscStore; +TC_GAME_API extern DB2Storage<SpellNameEntry> sSpellNameStore; TC_GAME_API extern DB2Storage<SpellPowerEntry> sSpellPowerStore; TC_GAME_API extern DB2Storage<SpellProcsPerMinuteEntry> sSpellProcsPerMinuteStore; TC_GAME_API extern DB2Storage<SpellRadiusEntry> sSpellRadiusStore; @@ -208,7 +210,6 @@ TC_GAME_API extern DB2Storage<UnitPowerBarEntry> sUnitPowerBa TC_GAME_API extern DB2Storage<VehicleEntry> sVehicleStore; TC_GAME_API extern DB2Storage<VehicleSeatEntry> sVehicleSeatStore; TC_GAME_API extern DB2Storage<WorldEffectEntry> sWorldEffectStore; -TC_GAME_API extern DB2Storage<WorldMapAreaEntry> sWorldMapAreaStore; TC_GAME_API extern DB2Storage<WorldMapOverlayEntry> sWorldMapOverlayStore; TC_GAME_API extern DB2Storage<WorldSafeLocsEntry> sWorldSafeLocsStore; @@ -257,7 +258,9 @@ public: DB2StorageBase const* GetStorage(uint32 type) const; void LoadHotfixData(); + void LoadHotfixBlob(); std::map<uint64, int32> const& GetHotfixData() const; + std::vector<uint8> const* GetHotfixBlobData(uint32 tableHash, int32 recordId); std::vector<uint32> GetAreasForGroup(uint32 areaGroupId) const; static bool IsInArea(uint32 objectAreaId, uint32 areaId); @@ -277,6 +280,7 @@ public: static char const* GetCreatureFamilyPetName(uint32 petfamily, uint32 locale); float GetCurveValueAt(uint32 curveId, float x) const; EmotesTextSoundEntry const* GetTextSoundEmoteFor(uint32 emote, uint8 race, uint8 gender, uint8 class_) const; + float EvaluateExpectedStat(ExpectedStatType stat, uint32 level, int32 expansion, uint32 contentTuningId, Classes unitClass) const; std::vector<uint32> const* GetFactionTeamList(uint32 faction) const; HeirloomEntry const* GetHeirloomByItemId(uint32 itemId) const; std::vector<uint32> const* GetGlyphBindableSpells(uint32 glyphPropertiesId) const; @@ -300,28 +304,28 @@ public: MapDifficultyEntry const* GetDefaultMapDifficulty(uint32 mapId, Difficulty* difficulty = nullptr) const; MapDifficultyEntry const* GetMapDifficultyData(uint32 mapId, Difficulty difficulty) const; MapDifficultyEntry const* GetDownscaledMapDifficultyData(uint32 mapId, Difficulty &difficulty) const; - std::string GetNameGenEntry(uint8 race, uint8 gender) const; MountEntry const* GetMount(uint32 spellId) const; MountEntry const* GetMountById(uint32 id) const; MountTypeXCapabilitySet const* GetMountCapabilities(uint32 mountType) const; MountXDisplayContainer const* GetMountDisplays(uint32 mountId) const; + std::string GetNameGenEntry(uint8 race, uint8 gender) const; ResponseCodes ValidateName(std::wstring const& name, LocaleConstant locale) const; + static int32 GetNumTalentsAtLevel(uint32 level, Classes playerClass); std::vector<uint32> const* GetPhasesForGroup(uint32 group) const; PowerTypeEntry const* GetPowerTypeEntry(Powers power) const; PowerTypeEntry const* GetPowerTypeByName(std::string const& name) const; uint8 GetPvpItemLevelBonus(uint32 itemId) const; - uint8 GetMaxPrestige() const; static PVPDifficultyEntry const* GetBattlegroundBracketByLevel(uint32 mapid, uint32 level); static PVPDifficultyEntry const* GetBattlegroundBracketById(uint32 mapid, BattlegroundBracketId id); - uint32 GetRewardPackIDForPvpRewardByHonorLevelAndPrestige(uint8 honorLevel, uint8 prestige) const; - uint32 GetRequiredHonorLevelForPvpTalent(PvpTalentEntry const* talentInfo) const; - std::vector<PvpTalentEntry const*> const& GetPvpTalentsByPosition(uint32 class_, uint32 tier, uint32 column) const; + uint32 GetRequiredLevelForPvpTalentSlot(uint8 slot, Classes class_) const; + int32 GetPvpTalentNumSlotsAtLevel(uint32 level, Classes class_) const; std::vector<QuestPackageItemEntry const*> const* GetQuestPackageItems(uint32 questPackageID) const; std::vector<QuestPackageItemEntry const*> const* GetQuestPackageItemsFallback(uint32 questPackageID) const; uint32 GetQuestUniqueBitFlag(uint32 questId); std::vector<RewardPackXCurrencyTypeEntry const*> const* GetRewardPackCurrencyTypesByRewardID(uint32 rewardPackID) const; std::vector<RewardPackXItemEntry const*> const* GetRewardPackItemsByRewardID(uint32 rewardPackID) const; uint32 GetRulesetItemUpgrade(uint32 itemId) const; + std::vector<SkillLineAbilityEntry const*> const* GetSkillLineAbilitiesBySkill(uint32 skillId) const; SkillRaceClassInfoEntry const* GetSkillRaceClassInfo(uint32 skill, uint8 race, uint8 class_); std::vector<SpecializationSpellsEntry const*> const* GetSpecializationSpells(uint32 specId) const; static bool IsValidSpellFamiliyName(SpellFamilyNames family); @@ -332,11 +336,12 @@ public: bool IsToyItem(uint32 toy) const; std::vector<TransmogSetEntry const*> const* GetTransmogSetsForItemModifiedAppearance(uint32 itemModifiedAppearanceId) const; std::vector<TransmogSetItemEntry const*> const* GetTransmogSetItems(uint32 transmogSetId) const; - WMOAreaTableEntry const* GetWMOAreaTable(int32 rootId, int32 adtId, int32 groupId) const; - uint32 GetVirtualMapForMapAndZone(uint32 mapId, uint32 zoneId) const; + static bool GetUiMapPosition(float x, float y, float z, int32 mapId, int32 areaId, int32 wmoDoodadPlacementId, int32 wmoGroupId, UiMapSystem system, bool local, + int32* uiMapId = nullptr, DBCPosition2D* newPos = nullptr); void Zone2MapCoordinates(uint32 areaId, float& x, float& y) const; void Map2ZoneCoordinates(uint32 areaId, float& x, float& y) const; - static void DeterminaAlternateMapPosition(uint32 mapId, float x, float y, float z, uint32* newMapId = nullptr, DBCPosition2D* newPos = nullptr); + bool IsUiMapPhase(uint32 phaseId) const; + WMOAreaTableEntry const* GetWMOAreaTable(int32 rootId, int32 adtId, int32 groupId) const; private: friend class DB2HotfixGeneratorBase; diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index e5f46417a81..0c38d0fb213 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -28,21 +28,30 @@ struct LocalizedString; struct AchievementEntry { - LocalizedString* Title; LocalizedString* Description; + LocalizedString* Title; LocalizedString* Reward; - int32 Flags; + uint32 ID; int16 InstanceID; // -1 = none + int8 Faction; // -1 = all, 0 = horde, 1 = alliance int16 Supercedes; // its Achievement parent (can`t start while parent uncomplete, use its Criteria if don`t have own, use its progress on begin) int16 Category; - int16 UiOrder; - int16 SharesCriteria; // referenced achievement (counting of all completed criterias) - int8 Faction; // -1 = all, 0 = horde, 1 = alliance - int8 Points; int8 MinimumCriteria; // need this count of completed criterias (own or referenced achievement criterias) - uint32 ID; + int8 Points; + int32 Flags; + int16 UiOrder; int32 IconFileID; uint32 CriteriaTree; + int16 SharesCriteria; // referenced achievement (counting of all completed criterias) +}; + +struct AnimationDataEntry +{ + uint32 ID; + uint16 Fallback; + uint8 BehaviorTier; + int32 BehaviorID; + int32 Flags[2]; }; struct AnimKitEntry @@ -65,27 +74,27 @@ struct AreaTableEntry uint32 ID; char const* ZoneName; LocalizedString* AreaName; - int32 Flags[2]; - float AmbientMultiplier; uint16 ContinentID; uint16 ParentAreaID; int16 AreaBit; + uint8 SoundProviderPref; + uint8 SoundProviderPrefUnderwater; uint16 AmbienceID; + uint16 UwAmbience; uint16 ZoneMusic; - uint16 IntroSound; - uint16 LiquidTypeID[4]; uint16 UwZoneMusic; - uint16 UwAmbience; - int16 PvpCombatWorldStateID; - uint8 SoundProviderPref; - uint8 SoundProviderPrefUnderwater; int8 ExplorationLevel; + uint16 IntroSound; + uint32 UwIntroSound; uint8 FactionGroupMask; + float AmbientMultiplier; uint8 MountFlags; + int16 PvpCombatWorldStateID; uint8 WildBattlePetLevelMin; uint8 WildBattlePetLevelMax; uint8 WindSettingsID; - uint32 UwIntroSound; + int32 Flags[2]; + uint16 LiquidTypeID[4]; // helpers bool IsSanctuary() const @@ -99,20 +108,20 @@ struct AreaTableEntry struct AreaTriggerEntry { DBCPosition3D Pos; + uint32 ID; + int16 ContinentID; + int8 PhaseUseFlags; + int16 PhaseID; + int16 PhaseGroupID; float Radius; float BoxLength; float BoxWidth; float BoxHeight; float BoxYaw; - int16 ContinentID; - int16 PhaseID; - int16 PhaseGroupID; + int8 ShapeType; int16 ShapeID; int16 AreaTriggerActionSetID; - int8 PhaseUseFlags; - int8 ShapeType; int8 Flags; - uint32 ID; }; struct ArmorLocationEntry @@ -127,15 +136,15 @@ struct ArmorLocationEntry struct ArtifactEntry { - uint32 ID; LocalizedString* Name; + uint32 ID; + uint16 UiTextureKitID; + int32 UiNameColor; int32 UiBarOverlayColor; int32 UiBarBackgroundColor; - int32 UiNameColor; - uint16 UiTextureKitID; uint16 ChrSpecializationID; - uint8 ArtifactCategoryID; uint8 Flags; + uint8 ArtifactCategoryID; uint32 UiModelSceneID; uint32 SpellVisualKitID; }; @@ -143,32 +152,32 @@ struct ArtifactEntry struct ArtifactAppearanceEntry { LocalizedString* Name; - int32 UiSwatchColor; - float UiModelSaturation; - float UiModelOpacity; - uint32 OverrideShapeshiftDisplayID; + uint32 ID; uint16 ArtifactAppearanceSetID; - uint16 UiCameraID; uint8 DisplayIndex; + uint32 UnlockPlayerConditionID; uint8 ItemAppearanceModifierID; - uint8 Flags; + int32 UiSwatchColor; + float UiModelSaturation; + float UiModelOpacity; uint8 OverrideShapeshiftFormID; - uint32 ID; - uint32 UnlockPlayerConditionID; + uint32 OverrideShapeshiftDisplayID; uint32 UiItemAppearanceID; uint32 UiAltItemAppearanceID; + uint8 Flags; + uint16 UiCameraID; }; struct ArtifactAppearanceSetEntry { LocalizedString* Name; LocalizedString* Description; + uint32 ID; + uint8 DisplayIndex; uint16 UiCameraID; uint16 AltHandUICameraID; - uint8 DisplayIndex; int8 ForgeAttachmentOverride; uint8 Flags; - uint32 ID; uint8 ArtifactID; }; @@ -181,13 +190,13 @@ struct ArtifactCategoryEntry struct ArtifactPowerEntry { - DBCPosition2D Pos; + DBCPosition2D DisplayPos; + uint32 ID; uint8 ArtifactID; - uint8 Flags; uint8 MaxPurchasableRank; - uint8 Tier; - uint32 ID; int32 Label; + uint8 Flags; + uint8 Tier; }; struct ArtifactPowerLinkEntry @@ -206,10 +215,10 @@ struct ArtifactPowerPickerEntry struct ArtifactPowerRankEntry { uint32 ID; + uint8 RankIndex; int32 SpellID; - float AuraPointsOverride; uint16 ItemBonusListID; - uint8 RankIndex; + float AuraPointsOverride; uint16 ArtifactPowerID; }; @@ -232,9 +241,9 @@ struct ArtifactTierEntry struct ArtifactUnlockEntry { uint32 ID; - uint16 ItemBonusListID; - uint8 PowerRank; uint32 PowerID; + uint8 PowerRank; + uint16 ItemBonusListID; uint32 PlayerConditionID; uint8 ArtifactID; }; @@ -266,12 +275,12 @@ struct BarberShopStyleEntry { LocalizedString* DisplayName; LocalizedString* Description; - float CostModifier; + uint32 ID; uint8 Type; // value 0 -> hair, value 2 -> facialhair + float CostModifier; uint8 Race; uint8 Sex; uint8 Data; // real ID to hair/facial hair - uint32 ID; }; struct BattlePetBreedQualityEntry @@ -284,22 +293,22 @@ struct BattlePetBreedQualityEntry struct BattlePetBreedStateEntry { uint32 ID; - uint16 Value; uint8 BattlePetStateID; + uint16 Value; uint8 BattlePetBreedID; }; struct BattlePetSpeciesEntry { - LocalizedString* SourceText; LocalizedString* Description; + LocalizedString* SourceText; + uint32 ID; int32 CreatureID; - int32 IconFileDataID; int32 SummonSpellID; - uint16 Flags; + int32 IconFileDataID; uint8 PetTypeEnum; + uint16 Flags; int8 SourceTypeEnum; - uint32 ID; int32 CardUIModelSceneID; int32 LoadoutUIModelSceneID; }; @@ -307,8 +316,8 @@ struct BattlePetSpeciesEntry struct BattlePetSpeciesStateEntry { uint32 ID; - int32 Value; uint8 BattlePetStateID; + int32 Value; uint16 BattlePetSpeciesID; }; @@ -319,45 +328,46 @@ struct BattlemasterListEntry LocalizedString* GameType; LocalizedString* ShortDescription; LocalizedString* LongDescription; - int32 IconFileDataID; - int16 MapID[16]; - int16 HolidayWorldState; - int16 RequiredPlayerConditionID; int8 InstanceType; - int8 GroupsAllowed; - int8 MaxGroupSize; int8 MinLevel; int8 MaxLevel; int8 RatedPlayers; int8 MinPlayers; int8 MaxPlayers; + int8 GroupsAllowed; + int8 MaxGroupSize; + int16 HolidayWorldState; int8 Flags; + int32 IconFileDataID; + int16 RequiredPlayerConditionID; + int16 MapID[16]; }; #define MAX_BROADCAST_TEXT_EMOTES 3 struct BroadcastTextEntry { - uint32 ID; LocalizedString* Text; LocalizedString* Text1; - uint16 EmoteID[MAX_BROADCAST_TEXT_EMOTES]; - uint16 EmoteDelay[MAX_BROADCAST_TEXT_EMOTES]; - uint16 EmotesID; + uint32 ID; uint8 LanguageID; - uint8 Flags; int32 ConditionID; + uint16 EmotesID; + uint8 Flags; + uint32 ChatBubbleDurationMs; uint32 SoundEntriesID[2]; + uint16 EmoteID[MAX_BROADCAST_TEXT_EMOTES]; + uint16 EmoteDelay[MAX_BROADCAST_TEXT_EMOTES]; }; struct Cfg_RegionsEntry { uint32 ID; char const* Tag; - uint32 Raidorigin; // Date of first raid reset, all other resets are calculated as this date plus interval - uint32 ChallengeOrigin; uint16 RegionID; + uint32 Raidorigin; // Date of first raid reset, all other resets are calculated as this date plus interval uint8 RegionGroupMask; + uint32 ChallengeOrigin; }; struct CharacterFacialHairStylesEntry @@ -372,21 +382,21 @@ struct CharacterFacialHairStylesEntry struct CharBaseSectionEntry { uint32 ID; + uint8 LayoutResType; uint8 VariationEnum; uint8 ResolutionVariationEnum; - uint8 LayoutResType; }; struct CharSectionsEntry { uint32 ID; - int32 MaterialResourcesID[3]; - int16 Flags; int8 RaceID; int8 SexID; int8 BaseSection; int8 VariationIndex; int8 ColorIndex; + int16 Flags; + int32 MaterialResourcesID[3]; }; #define MAX_OUTFIT_ITEMS 24 @@ -394,12 +404,12 @@ struct CharSectionsEntry struct CharStartOutfitEntry { uint32 ID; - int32 ItemID[MAX_OUTFIT_ITEMS]; - uint32 PetDisplayID; // Pet Model ID for starting pet uint8 ClassID; uint8 SexID; uint8 OutfitID; + uint32 PetDisplayID; // Pet Model ID for starting pet uint8 PetFamilyID; // Pet Family Entry for starting pet + int32 ItemID[MAX_OUTFIT_ITEMS]; uint8 RaceID; }; @@ -423,32 +433,32 @@ struct ChatChannelsEntry struct ChrClassesEntry { - char const* PetNameToken; LocalizedString* Name; - LocalizedString* NameFemale; - LocalizedString* NameMale; char const* Filename; + LocalizedString* NameMale; + LocalizedString* NameFemale; + char const* PetNameToken; + uint32 ID; uint32 CreateScreenFileDataID; uint32 SelectScreenFileDataID; - uint32 LowResScreenFileDataID; uint32 IconFileDataID; + uint32 LowResScreenFileDataID; int32 StartingLevel; uint16 Flags; uint16 CinematicSequenceID; uint16 DefaultSpec; + uint8 PrimaryStatPriority; uint8 DisplayPower; - uint8 SpellClassSet; - uint8 AttackPowerPerStrength; - uint8 AttackPowerPerAgility; uint8 RangedAttackPowerPerAgility; - uint8 PrimaryStatPriority; - uint32 ID; + uint8 AttackPowerPerAgility; + uint8 AttackPowerPerStrength; + uint8 SpellClassSet; }; struct ChrClassesXPowerTypesEntry { uint32 ID; - uint8 PowerType; + int8 PowerType; uint8 ClassID; }; @@ -460,38 +470,46 @@ struct ChrRacesEntry LocalizedString* NameFemale; LocalizedString* NameLowercase; LocalizedString* NameFemaleLowercase; + uint32 ID; int32 Flags; uint32 MaleDisplayId; uint32 FemaleDisplayId; + uint32 HighResMaleDisplayId; + uint32 HighResFemaleDisplayId; int32 CreateScreenFileDataID; int32 SelectScreenFileDataID; float MaleCustomizeOffset[3]; float FemaleCustomizeOffset[3]; int32 LowResScreenFileDataID; + uint32 AlteredFormStartVisualKitID[3]; + uint32 AlteredFormFinishVisualKitID[3]; + int32 HeritageArmorAchievementID; int32 StartingLevel; int32 UiDisplayOrder; + int32 FemaleSkeletonFileDataID; + int32 MaleSkeletonFileDataID; + int32 HelmVisFallbackRaceID; int16 FactionID; + int16 CinematicSequenceID; int16 ResSicknessSpellID; int16 SplashSoundID; - int16 CinematicSequenceID; int8 BaseLanguage; int8 CreatureType; int8 Alliance; int8 RaceRelated; int8 UnalteredVisualRaceID; int8 CharComponentTextureLayoutID; + int8 CharComponentTexLayoutHiResID; int8 DefaultClassID; int8 NeutralRaceID; - int8 DisplayRaceID; - int8 CharComponentTexLayoutHiResID; - uint32 ID; - uint32 HighResMaleDisplayId; - uint32 HighResFemaleDisplayId; - int32 HeritageArmorAchievementID; - int32 MaleSkeletonFileDataID; - int32 FemaleSkeletonFileDataID; - uint32 AlteredFormStartVisualKitID[3]; - uint32 AlteredFormFinishVisualKitID[3]; + int8 MaleModelFallbackRaceID; + int8 MaleModelFallbackSex; + int8 FemaleModelFallbackRaceID; + int8 FemaleModelFallbackSex; + int8 MaleTextureFallbackRaceID; + int8 MaleTextureFallbackSex; + int8 FemaleTextureFallbackRaceID; + int8 FemaleTextureFallbackSex; }; #define MAX_MASTERY_SPELLS 2 @@ -501,16 +519,16 @@ struct ChrSpecializationEntry LocalizedString* Name; LocalizedString* FemaleName; LocalizedString* Description; - int32 MasterySpellID[MAX_MASTERY_SPELLS]; + uint32 ID; int8 ClassID; int8 OrderIndex; int8 PetTalentType; int8 Role; - int8 PrimaryStatPriority; - uint32 ID; - int32 SpellIconFileID; uint32 Flags; + int32 SpellIconFileID; + int8 PrimaryStatPriority; int32 AnimReplacements; + int32 MasterySpellID[MAX_MASTERY_SPELLS]; bool IsPetSpecialization() const { @@ -521,9 +539,9 @@ struct ChrSpecializationEntry struct CinematicCameraEntry { uint32 ID; - uint32 SoundID; // Sound ID (voiceover for cinematic) DBCPosition3D Origin; // Position in map used for basis for M2 co-ordinates - float OriginFacing; // Orientation in map used for basis for M2 co- + uint32 SoundID; // Sound ID (voiceover for cinematic) + float OriginFacing; // Orientation in map used for basis for M2 co uint32 FileDataID; // Model }; @@ -534,6 +552,16 @@ struct CinematicSequencesEntry uint16 Camera[8]; }; +struct ContentTuningEntry +{ + uint32 ID; + int32 MinLevel; + int32 MaxLevel; + int32 Flags; + int32 ExpectedStatModID; + int32 DifficultyESMID; +}; + struct ConversationLineEntry { uint32 ID; @@ -550,35 +578,35 @@ struct ConversationLineEntry struct CreatureDisplayInfoEntry { uint32 ID; - float CreatureModelScale; uint16 ModelID; - uint16 NPCSoundID; + uint16 SoundID; int8 SizeClass; - uint8 Flags; - int8 Gender; - int32 ExtendedDisplayInfoID; - int32 PortraitTextureFileDataID; + float CreatureModelScale; uint8 CreatureModelAlpha; - uint16 SoundID; - float PlayerOverrideScale; - int32 PortraitCreatureDisplayInfoID; uint8 BloodID; + int32 ExtendedDisplayInfoID; + uint16 NPCSoundID; uint16 ParticleColorID; - uint32 CreatureGeosetData; + int32 PortraitCreatureDisplayInfoID; + int32 PortraitTextureFileDataID; uint16 ObjectEffectPackageID; uint16 AnimReplacementSetID; - int8 UnarmedWeaponType; + uint8 Flags; int32 StateSpellVisualKitID; + float PlayerOverrideScale; float PetInstanceScale; // scale of not own player pets inside dungeons/raids/scenarios + int8 UnarmedWeaponType; int32 MountPoofSpellVisualKitID; + int32 DissolveEffectID; + int8 Gender; + int32 DissolveOutEffectID; + int8 CreatureModelMinLod; int32 TextureVariationFileDataID[3]; }; struct CreatureDisplayInfoExtraEntry { uint32 ID; - int32 BakeMaterialResourcesID; - int32 HDBakeMaterialResourcesID; int8 DisplayRaceID; int8 DisplaySexID; int8 DisplayClassID; @@ -587,8 +615,10 @@ struct CreatureDisplayInfoExtraEntry int8 HairStyleID; int8 HairColorID; int8 FacialHairID; - uint8 CustomDisplayOption[3]; int8 Flags; + int32 BakeMaterialResourcesID; + int32 HDBakeMaterialResourcesID; + uint8 CustomDisplayOption[3]; }; struct CreatureFamilyEntry @@ -596,46 +626,46 @@ struct CreatureFamilyEntry uint32 ID; LocalizedString* Name; float MinScale; - float MaxScale; - int32 IconFileID; - int16 SkillLine[2]; - int16 PetFoodMask; int8 MinScaleLevel; + float MaxScale; int8 MaxScaleLevel; + int16 PetFoodMask; int8 PetTalentType; + int32 IconFileID; + int16 SkillLine[2]; }; struct CreatureModelDataEntry { uint32 ID; - float ModelScale; + float GeoBox[6]; + uint32 Flags; + uint32 FileDataID; + uint32 BloodID; + uint32 FootprintTextureID; float FootprintTextureLength; float FootprintTextureWidth; float FootprintParticleScale; + uint32 FoleyMaterialID; + uint32 FootstepCameraEffectID; + uint32 DeathThudCameraEffectID; + uint32 SoundID; + uint32 SizeClass; float CollisionWidth; float CollisionHeight; - float MountHeight; - float GeoBox[6]; float WorldEffectScale; + uint32 CreatureGeosetDataID; + float HoverHeight; float AttachedEffectScale; + float ModelScale; float MissileCollisionRadius; float MissileCollisionPush; float MissileCollisionRaise; + float MountHeight; float OverrideLootEffectScale; float OverrideNameScale; float OverrideSelectionRadius; float TamedPetBaseScale; - float HoverHeight; - uint32 Flags; - uint32 FileDataID; - uint32 SizeClass; - uint32 BloodID; - uint32 FootprintTextureID; - uint32 FoleyMaterialID; - uint32 FootstepCameraEffectID; - uint32 DeathThudCameraEffectID; - uint32 SoundID; - uint32 CreatureGeosetDataID; }; struct CreatureTypeEntry @@ -648,144 +678,150 @@ struct CreatureTypeEntry struct CriteriaEntry { uint32 ID; + int16 Type; union AssetNameAlias { - uint32 ID; + int32 ID; // CRITERIA_TYPE_KILL_CREATURE = 0 // CRITERIA_TYPE_KILLED_BY_CREATURE = 20 - uint32 CreatureID; + int32 CreatureID; // CRITERIA_TYPE_WIN_BG = 1 // CRITERIA_TYPE_COMPLETE_BATTLEGROUND = 15 // CRITERIA_TYPE_DEATH_AT_MAP = 16 // CRITERIA_TYPE_WIN_ARENA = 32 // CRITERIA_TYPE_PLAY_ARENA = 33 - uint32 MapID; + int32 MapID; // CRITERIA_TYPE_REACH_SKILL_LEVEL = 7 // CRITERIA_TYPE_LEARN_SKILL_LEVEL = 40 // CRITERIA_TYPE_LEARN_SKILLLINE_SPELLS = 75 // CRITERIA_TYPE_LEARN_SKILL_LINE = 112 - uint32 SkillID; + int32 SkillID; // CRITERIA_TYPE_COMPLETE_ACHIEVEMENT = 8 - uint32 AchievementID; + int32 AchievementID; // CRITERIA_TYPE_COMPLETE_QUESTS_IN_ZONE = 11 - uint32 ZoneID; + int32 ZoneID; // CRITERIA_TYPE_CURRENCY = 12 - uint32 CurrencyID; + int32 CurrencyID; // CRITERIA_TYPE_DEATH_IN_DUNGEON = 18 // CRITERIA_TYPE_COMPLETE_RAID = 19 - uint32 GroupSize; + int32 GroupSize; // CRITERIA_TYPE_DEATHS_FROM = 26 - uint32 DamageType; + int32 DamageType; // CRITERIA_TYPE_COMPLETE_QUEST = 27 - uint32 QuestID; + int32 QuestID; // CRITERIA_TYPE_BE_SPELL_TARGET = 28 // CRITERIA_TYPE_BE_SPELL_TARGET2 = 69 // CRITERIA_TYPE_CAST_SPELL = 29 // CRITERIA_TYPE_CAST_SPELL2 = 110 // CRITERIA_TYPE_LEARN_SPELL = 34 - uint32 SpellID; + int32 SpellID; // CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE - uint32 ObjectiveId; + int32 ObjectiveId; // CRITERIA_TYPE_HONORABLE_KILL_AT_AREA = 31 // CRITERIA_TYPE_ENTER_AREA = 163 // CRITERIA_TYPE_LEAVE_AREA = 164 - uint32 AreaID; + int32 AreaID; // CRITERIA_TYPE_OWN_ITEM = 36 // CRITERIA_TYPE_USE_ITEM = 41 // CRITERIA_TYPE_LOOT_ITEM = 42 // CRITERIA_TYPE_EQUIP_ITEM = 57 // CRITERIA_TYPE_OWN_TOY = 185 - uint32 ItemID; + int32 ItemID; // CRITERIA_TYPE_HIGHEST_TEAM_RATING = 38 // CRITERIA_TYPE_REACH_TEAM_RATING = 39 // CRITERIA_TYPE_HIGHEST_PERSONAL_RATING = 39 - uint32 TeamType; + int32 TeamType; // CRITERIA_TYPE_EXPLORE_AREA = 43 - uint32 WorldMapOverlayID; + int32 WorldMapOverlayID; // CRITERIA_TYPE_GAIN_REPUTATION = 46 // CRITERIA_TYPE_GAIN_PARAGON_REPUTATION = 206 - uint32 FactionID; + int32 FactionID; // CRITERIA_TYPE_EQUIP_EPIC_ITEM = 49 - uint32 ItemSlot; + int32 ItemSlot; // CRITERIA_TYPE_ROLL_NEED_ON_LOOT = 50 // CRITERIA_TYPE_ROLL_GREED_ON_LOOT = 51 - uint32 RollValue; + int32 RollValue; // CRITERIA_TYPE_HK_CLASS = 52 - uint32 ClassID; + int32 ClassID; // CRITERIA_TYPE_HK_RACE = 53 - uint32 RaceID; + int32 RaceID; // CRITERIA_TYPE_DO_EMOTE = 54 - uint32 EmoteID; + int32 EmoteID; // CRITERIA_TYPE_USE_GAMEOBJECT = 68 // CRITERIA_TYPE_FISH_IN_GAMEOBJECT = 72 - uint32 GameObjectID; + int32 GameObjectID; // CRITERIA_TYPE_HIGHEST_POWER = 96 - uint32 PowerType; + int32 PowerType; // CRITERIA_TYPE_HIGHEST_STAT = 97 - uint32 StatType; + int32 StatType; // CRITERIA_TYPE_HIGHEST_SPELLPOWER = 98 - uint32 SpellSchool; + int32 SpellSchool; // CRITERIA_TYPE_LOOT_TYPE = 109 - uint32 LootType; + int32 LootType; // CRITERIA_TYPE_COMPLETE_DUNGEON_ENCOUNTER = 165 - uint32 DungeonEncounterID; + int32 DungeonEncounterID; // CRITERIA_TYPE_CONSTRUCT_GARRISON_BUILDING = 169 - uint32 GarrBuildingID; + int32 GarrBuildingID; // CRITERIA_TYPE_UPGRADE_GARRISON = 170 - uint32 GarrisonLevel; + int32 GarrisonLevel; // CRITERIA_TYPE_COMPLETE_GARRISON_MISSION = 174 - uint32 GarrMissionID; + int32 GarrMissionID; // CRITERIA_TYPE_COMPLETE_GARRISON_SHIPMENT = 182 - uint32 CharShipmentContainerID; + int32 CharShipmentContainerID; // CRITERIA_TYPE_APPEARANCE_UNLOCKED_BY_SLOT - uint32 EquipmentSlot; + int32 EquipmentSlot; // CRITERIA_TYPE_TRANSMOG_SET_UNLOCKED = 205 - uint32 TransmogSetGroupID; + int32 TransmogSetGroupID; // CRITERIA_TYPE_RELIC_TALENT_UNLOCKED = 211 - uint32 ArtifactPowerID; + int32 ArtifactPowerID; + + // CRITERIA_TYPE_REACH_ACCOUNT_HONOR_LEVEL = 213 + int32 AccountHonorLevel; + + // CRITERIA_TREE_HEART_OF_AZEROTH_LEVEL_REACHED = 215 + int32 HeartOfAzerothLevel; } Asset; - int32 StartAsset; - int32 FailAsset; uint32 ModifierTreeId; - uint16 StartTimer; - int16 EligibilityWorldStateID; - uint8 Type; uint8 StartEvent; + int32 StartAsset; + uint16 StartTimer; uint8 FailEvent; + int32 FailAsset; uint8 Flags; + int16 EligibilityWorldStateID; int8 EligibilityWorldStateValue; }; @@ -793,12 +829,12 @@ struct CriteriaTreeEntry { uint32 ID; LocalizedString* Description; - int32 Amount; - int16 Flags; + uint32 Parent; + uint32 Amount; int8 Operator; uint32 CriteriaID; - uint32 Parent; int32 OrderIndex; + int16 Flags; }; struct CurrencyTypesEntry @@ -806,14 +842,15 @@ struct CurrencyTypesEntry uint32 ID; LocalizedString* Name; LocalizedString* Description; - uint32 MaxQty; - uint32 MaxEarnablePerWeek; - uint32 Flags; uint8 CategoryID; - uint8 SpellCategory; - uint8 Quality; int32 InventoryIconFileID; uint32 SpellWeight; + uint8 SpellCategory; + uint32 MaxQty; + uint32 MaxEarnablePerWeek; + uint32 Flags; + int8 Quality; + int32 FactionID; }; struct CurveEntry @@ -834,58 +871,58 @@ struct CurvePointEntry struct DestructibleModelDataEntry { uint32 ID; - uint16 State0Wmo; - uint16 State1Wmo; - uint16 State2Wmo; - uint16 State3Wmo; - uint16 HealEffectSpeed; int8 State0ImpactEffectDoodadSet; uint8 State0AmbientDoodadSet; - int8 State0NameSet; + uint16 State1Wmo; int8 State1DestructionDoodadSet; int8 State1ImpactEffectDoodadSet; uint8 State1AmbientDoodadSet; - int8 State1NameSet; + uint16 State2Wmo; int8 State2DestructionDoodadSet; int8 State2ImpactEffectDoodadSet; uint8 State2AmbientDoodadSet; - int8 State2NameSet; + uint16 State3Wmo; uint8 State3InitDoodadSet; uint8 State3AmbientDoodadSet; - int8 State3NameSet; uint8 EjectDirection; uint8 DoNotHighlight; + uint16 State0Wmo; uint8 HealEffect; + uint16 HealEffectSpeed; + int8 State0NameSet; + int8 State1NameSet; + int8 State2NameSet; + int8 State3NameSet; }; struct DifficultyEntry { uint32 ID; LocalizedString* Name; - uint16 GroupSizeHealthCurveID; - uint16 GroupSizeDmgCurveID; - uint16 GroupSizeSpellPointsCurveID; - uint8 FallbackDifficultyID; uint8 InstanceType; + uint8 OrderIndex; + int8 OldEnumValue; + uint8 FallbackDifficultyID; uint8 MinPlayers; uint8 MaxPlayers; - int8 OldEnumValue; uint8 Flags; - uint8 ToggleDifficultyID; uint8 ItemContext; - uint8 OrderIndex; + uint8 ToggleDifficultyID; + uint16 GroupSizeHealthCurveID; + uint16 GroupSizeDmgCurveID; + uint16 GroupSizeSpellPointsCurveID; }; struct DungeonEncounterEntry { LocalizedString* Name; - int32 CreatureDisplayID; + uint32 ID; int16 MapID; int8 DifficultyID; + int32 OrderIndex; int8 Bit; + int32 CreatureDisplayID; uint8 Flags; - uint32 ID; - int32 OrderIndex; int32 SpellIconFileID; }; @@ -907,13 +944,13 @@ struct EmotesEntry uint32 ID; int64 RaceMask; char const* EmoteSlashCommand; + int32 AnimID; uint32 EmoteFlags; - uint32 SpellVisualKitID; - int16 AnimID; uint8 EmoteSpecProc; - int32 ClassMask; uint32 EmoteSpecProcParam; uint32 EventSoundID; + uint32 SpellVisualKitID; + int32 ClassMask; }; struct EmotesTextEntry @@ -927,30 +964,60 @@ struct EmotesTextSoundEntry { uint32 ID; uint8 RaceID; - uint8 SexID; uint8 ClassID; + uint8 SexID; uint32 SoundID; uint16 EmotesTextID; }; +struct ExpectedStatEntry +{ + uint32 ID; + int32 ExpansionID; + float CreatureHealth; + float PlayerHealth; + float CreatureAutoAttackDps; + float CreatureArmor; + float PlayerMana; + float PlayerPrimaryStat; + float PlayerSecondaryStat; + float ArmorConstant; + float CreatureSpellDamage; + int32 Lvl; +}; + +struct ExpectedStatModEntry +{ + uint32 ID; + float CreatureHealthMod; + float PlayerHealthMod; + float CreatureAutoAttackDPSMod; + float CreatureArmorMod; + float PlayerManaMod; + float PlayerPrimaryStatMod; + float PlayerSecondaryStatMod; + float ArmorConstantMod; + float CreatureSpellDamageMod; +}; + struct FactionEntry { int64 ReputationRaceMask[4]; LocalizedString* Name; LocalizedString* Description; uint32 ID; - int32 ReputationBase[4]; - float ParentFactionMod[2]; // Faction outputs rep * ParentFactionModOut as spillover reputation - int32 ReputationMax[4]; int16 ReputationIndex; - int16 ReputationClassMask[4]; - uint16 ReputationFlags[4]; uint16 ParentFactionID; - uint16 ParagonFactionID; - uint8 ParentFactionCap[2]; // The highest rank the faction will profit from incoming spillover uint8 Expansion; - uint8 Flags; uint8 FriendshipRepID; + uint8 Flags; + uint16 ParagonFactionID; + int16 ReputationClassMask[4]; + uint16 ReputationFlags[4]; + int32 ReputationBase[4]; + int32 ReputationMax[4]; + float ParentFactionMod[2]; // Faction outputs rep * ParentFactionModOut as spillover reputation + uint8 ParentFactionCap[2]; // The highest rank the faction will profit from incoming spillover // helpers bool CanHaveReputation() const @@ -966,11 +1033,11 @@ struct FactionTemplateEntry uint32 ID; uint16 Faction; uint16 Flags; - uint16 Enemies[MAX_FACTION_RELATIONS]; - uint16 Friend[MAX_FACTION_RELATIONS]; uint8 FactionGroup; uint8 FriendGroup; uint8 EnemyGroup; + uint16 Enemies[MAX_FACTION_RELATIONS]; + uint16 Friend[MAX_FACTION_RELATIONS]; //------------------------------------------------------- end structure @@ -1020,12 +1087,12 @@ struct FactionTemplateEntry struct GameObjectDisplayInfoEntry { uint32 ID; - int32 FileDataID; DBCPosition3D GeoBoxMin; DBCPosition3D GeoBoxMax; + int32 FileDataID; + int16 ObjectEffectPackageID; float OverrideLootEffectScale; float OverrideNameScale; - int16 ObjectEffectPackageID; }; struct GameObjectsEntry @@ -1033,65 +1100,65 @@ struct GameObjectsEntry LocalizedString* Name; DBCPosition3D Pos; float Rot[4]; - float Scale; - int32 PropValue[8]; + uint32 ID; uint16 OwnerID; uint16 DisplayID; + float Scale; + uint8 TypeID; + uint8 PhaseUseFlags; uint16 PhaseID; uint16 PhaseGroupID; - uint8 PhaseUseFlags; - uint8 TypeID; - uint32 ID; + int32 PropValue[8]; }; struct GarrAbilityEntry { LocalizedString* Name; LocalizedString* Description; - int32 IconFileDataID; - uint16 Flags; - uint16 FactionChangeGarrAbilityID; + uint32 ID; uint8 GarrAbilityCategoryID; uint8 GarrFollowerTypeID; - uint32 ID; + int32 IconFileDataID; + uint16 FactionChangeGarrAbilityID; + uint16 Flags; }; struct GarrBuildingEntry { uint32 ID; - LocalizedString* AllianceName; LocalizedString* HordeName; + LocalizedString* AllianceName; LocalizedString* Description; LocalizedString* Tooltip; + uint8 GarrTypeID; + uint8 BuildingType; int32 HordeGameObjectID; int32 AllianceGameObjectID; - int32 IconFileDataID; + uint8 GarrSiteID; + uint8 UpgradeLevel; + int32 BuildSeconds; uint16 CurrencyTypeID; + int32 CurrencyQty; uint16 HordeUiTextureKitID; uint16 AllianceUiTextureKitID; + int32 IconFileDataID; uint16 AllianceSceneScriptPackageID; uint16 HordeSceneScriptPackageID; + int32 MaxAssignments; + uint8 ShipmentCapacity; uint16 GarrAbilityID; uint16 BonusGarrAbilityID; uint16 GoldCost; - uint8 GarrSiteID; - uint8 BuildingType; - uint8 UpgradeLevel; uint8 Flags; - uint8 ShipmentCapacity; - uint8 GarrTypeID; - int32 BuildSeconds; - int32 CurrencyQty; - int32 MaxAssignments; }; struct GarrBuildingPlotInstEntry { DBCPosition2D MapOffset; - uint16 UiTextureAtlasMemberID; - uint16 GarrSiteLevelPlotInstID; - uint8 GarrBuildingID; uint32 ID; + uint8 GarrBuildingID; + uint16 GarrSiteLevelPlotInstID; + uint16 UiTextureAtlasMemberID; }; struct GarrClassSpecEntry @@ -1099,11 +1166,11 @@ struct GarrClassSpecEntry LocalizedString* ClassSpec; LocalizedString* ClassSpecMale; LocalizedString* ClassSpecFemale; + uint32 ID; uint16 UiTextureAtlasMemberID; uint16 GarrFollItemSetID; uint8 FollowerClassLimit; uint8 Flags; - uint32 ID; }; struct GarrFollowerEntry @@ -1111,54 +1178,55 @@ struct GarrFollowerEntry LocalizedString* HordeSourceText; LocalizedString* AllianceSourceText; LocalizedString* TitleName; + uint32 ID; + uint8 GarrTypeID; + uint8 GarrFollowerTypeID; int32 HordeCreatureID; int32 AllianceCreatureID; - int32 HordeIconFileDataID; - int32 AllianceIconFileDataID; - uint32 HordeSlottingBroadcastTextID; - uint32 AllySlottingBroadcastTextID; - uint16 HordeGarrFollItemSetID; - uint16 AllianceGarrFollItemSetID; - uint16 ItemLevelWeapon; - uint16 ItemLevelArmor; - uint16 HordeUITextureKitID; - uint16 AllianceUITextureKitID; - uint8 GarrFollowerTypeID; uint8 HordeGarrFollRaceID; uint8 AllianceGarrFollRaceID; - uint8 Quality; uint8 HordeGarrClassSpecID; uint8 AllianceGarrClassSpecID; + uint8 Quality; uint8 FollowerLevel; - uint8 Gender; - uint8 Flags; + uint16 ItemLevelWeapon; + uint16 ItemLevelArmor; int8 HordeSourceTypeEnum; int8 AllianceSourceTypeEnum; - uint8 GarrTypeID; + int32 HordeIconFileDataID; + int32 AllianceIconFileDataID; + uint16 HordeGarrFollItemSetID; + uint16 AllianceGarrFollItemSetID; + uint16 HordeUITextureKitID; + uint16 AllianceUITextureKitID; uint8 Vitality; - uint8 ChrClassID; uint8 HordeFlavorGarrStringID; uint8 AllianceFlavorGarrStringID; - uint32 ID; + uint32 HordeSlottingBroadcastTextID; + uint32 AllySlottingBroadcastTextID; + uint8 ChrClassID; + uint8 Flags; + uint8 Gender; }; struct GarrFollowerXAbilityEntry { uint32 ID; - uint16 GarrAbilityID; + uint8 OrderIndex; uint8 FactionIndex; + uint16 GarrAbilityID; uint16 GarrFollowerID; }; struct GarrPlotEntry { uint32 ID; - LocalizedString* Name; - int32 AllianceConstructObjID; - int32 HordeConstructObjID; - uint8 UiCategoryID; + char const* Name; uint8 PlotType; + int32 HordeConstructObjID; + int32 AllianceConstructObjID; uint8 Flags; + uint8 UiCategoryID; uint32 UpgradeRequirement[2]; }; @@ -1180,14 +1248,14 @@ struct GarrSiteLevelEntry { uint32 ID; DBCPosition2D TownHallUiPos; + uint32 GarrSiteID; + uint8 GarrLevel; uint16 MapID; - uint16 UiTextureKitID; uint16 UpgradeMovieID; + uint16 UiTextureKitID; + uint8 MaxBuildingLevel; uint16 UpgradeCost; uint16 UpgradeGoldCost; - uint8 GarrLevel; - uint8 GarrSiteID; - uint8 MaxBuildingLevel; }; struct GarrSiteLevelPlotInstEntry @@ -1202,8 +1270,8 @@ struct GarrSiteLevelPlotInstEntry struct GemPropertiesEntry { uint32 ID; - uint32 Type; uint16 EnchantId; + int32 Type; uint16 MinItemLevel; }; @@ -1234,24 +1302,24 @@ struct GuildColorBackgroundEntry { uint32 ID; uint8 Red; - uint8 Green; uint8 Blue; + uint8 Green; }; struct GuildColorBorderEntry { uint32 ID; uint8 Red; - uint8 Green; uint8 Blue; + uint8 Green; }; struct GuildColorEmblemEntry { uint32 ID; uint8 Red; - uint8 Green; uint8 Blue; + uint8 Green; }; struct GuildPerkSpellsEntry @@ -1263,15 +1331,15 @@ struct GuildPerkSpellsEntry struct HeirloomEntry { LocalizedString* SourceText; + uint32 ID; int32 ItemID; - int32 LegacyItemID; int32 LegacyUpgradedItemID; int32 StaticUpgradedItemID; + int8 SourceTypeEnum; + uint8 Flags; + int32 LegacyItemID; int32 UpgradeItemID[3]; uint16 UpgradeItemBonusListID[3]; - uint8 Flags; - int8 SourceTypeEnum; - uint32 ID; }; #define MAX_HOLIDAY_DURATIONS 10 @@ -1281,16 +1349,16 @@ struct HeirloomEntry struct HolidaysEntry { uint32 ID; - uint32 Date[MAX_HOLIDAY_DATES]; // dates in unix time starting at January, 1, 2000 - uint16 Duration[MAX_HOLIDAY_DURATIONS]; uint16 Region; uint8 Looping; - uint8 CalendarFlags[MAX_HOLIDAY_FLAGS]; + uint32 HolidayNameID; + uint32 HolidayDescriptionID; uint8 Priority; int8 CalendarFilterType; uint8 Flags; - uint32 HolidayNameID; - uint32 HolidayDescriptionID; + uint16 Duration[MAX_HOLIDAY_DURATIONS]; + uint32 Date[MAX_HOLIDAY_DATES]; // dates in unix time starting at January, 1, 2000 + uint8 CalendarFlags[MAX_HOLIDAY_DURATIONS]; int32 TextureFileDataID[3]; }; @@ -1324,30 +1392,29 @@ struct ImportPriceWeaponEntry struct ItemEntry { uint32 ID; - int32 IconFileDataID; uint8 ClassID; uint8 SubclassID; - int8 SoundOverrideSubclassID; uint8 Material; - uint8 InventoryType; + int8 InventoryType; uint8 SheatheType; + int8 SoundOverrideSubclassID; + int32 IconFileDataID; uint8 ItemGroupSoundsID; }; struct ItemAppearanceEntry { uint32 ID; + uint8 DisplayType; int32 ItemDisplayInfoID; int32 DefaultIconFileDataID; int32 UiOrder; - uint8 DisplayType; }; struct ItemArmorQualityEntry { uint32 ID; float Qualitymod[7]; - int16 ItemLevel; }; struct ItemArmorShieldEntry @@ -1360,11 +1427,11 @@ struct ItemArmorShieldEntry struct ItemArmorTotalEntry { uint32 ID; + int16 ItemLevel; float Cloth; float Leather; float Mail; float Plate; - int16 ItemLevel; }; struct ItemBagFamilyEntry @@ -1391,10 +1458,10 @@ struct ItemBonusListLevelDeltaEntry struct ItemBonusTreeNodeEntry { uint32 ID; + uint8 ItemContext; uint16 ChildItemBonusTreeID; uint16 ChildItemBonusListID; uint16 ChildItemLevelSelectorID; - uint8 ItemContext; uint16 ParentItemBonusTreeID; }; @@ -1410,8 +1477,8 @@ struct ItemClassEntry { uint32 ID; LocalizedString* ClassName; - float PriceModifier; int8 ClassID; + float PriceModifier; uint8 Flags; }; @@ -1424,46 +1491,46 @@ struct ItemCurrencyCostEntry struct ItemDamageAmmoEntry { uint32 ID; - float Quality[7]; uint16 ItemLevel; + float Quality[7]; }; struct ItemDamageOneHandEntry { uint32 ID; - float Quality[7]; uint16 ItemLevel; + float Quality[7]; }; struct ItemDamageOneHandCasterEntry { uint32 ID; - float Quality[7]; uint16 ItemLevel; + float Quality[7]; }; struct ItemDamageTwoHandEntry { uint32 ID; - float Quality[7]; uint16 ItemLevel; + float Quality[7]; }; struct ItemDamageTwoHandCasterEntry { uint32 ID; - float Quality[7]; uint16 ItemLevel; + float Quality[7]; }; struct ItemDisenchantLootEntry { uint32 ID; + int8 Subclass; + uint8 Quality; uint16 MinLevel; uint16 MaxLevel; uint16 SkillRequired; - int8 Subclass; - uint8 Quality; int8 ExpansionID; uint8 Class; }; @@ -1471,14 +1538,14 @@ struct ItemDisenchantLootEntry struct ItemEffectEntry { uint32 ID; - int32 SpellID; + uint8 LegacySlotIndex; + int8 TriggerType; + int16 Charges; int32 CoolDownMSec; int32 CategoryCoolDownMSec; - int16 Charges; uint16 SpellCategoryID; + int32 SpellID; uint16 ChrSpecializationID; - uint8 LegacySlotIndex; - int8 TriggerType; int32 ParentItemID; }; @@ -1488,16 +1555,16 @@ struct ItemEffectEntry struct ItemExtendedCostEntry { uint32 ID; + uint16 RequiredArenaRating; + int8 ArenaBracket; // arena slot restrictions (min slot value) + uint8 Flags; + uint8 MinFactionID; + uint8 MinReputation; + uint8 RequiredAchievement; // required personal arena rating int32 ItemID[MAX_ITEM_EXT_COST_ITEMS]; // required item id - uint32 CurrencyCount[MAX_ITEM_EXT_COST_CURRENCIES]; // required curency count uint16 ItemCount[MAX_ITEM_EXT_COST_ITEMS]; // required count of 1st item - uint16 RequiredArenaRating; // required personal arena rating uint16 CurrencyID[MAX_ITEM_EXT_COST_CURRENCIES]; // required curency id - uint8 ArenaBracket; // arena slot restrictions (min slot value) - uint8 MinFactionID; - uint8 MinReputation; - uint8 Flags; - uint8 RequiredAchievement; + uint32 CurrencyCount[MAX_ITEM_EXT_COST_CURRENCIES]; // required curency count }; struct ItemLevelSelectorEntry @@ -1540,8 +1607,8 @@ struct ItemLimitCategoryConditionEntry struct ItemModifiedAppearanceEntry { - int32 ItemID; uint32 ID; + int32 ItemID; uint8 ItemAppearanceModifierID; uint16 ItemAppearanceID; uint8 OrderIndex; @@ -1551,9 +1618,9 @@ struct ItemModifiedAppearanceEntry struct ItemPriceBaseEntry { uint32 ID; + uint16 ItemLevel; float Armor; float Weapon; - uint16 ItemLevel; }; #define MAX_ITEM_RANDOM_PROPERTIES 5 @@ -1578,17 +1645,17 @@ struct ItemSearchNameEntry int64 AllowableRace; LocalizedString* Display; uint32 ID; - int32 Flags[3]; - uint16 ItemLevel; uint8 OverallQualityID; uint8 ExpansionID; - int8 RequiredLevel; uint16 MinFactionID; uint8 MinReputation; int32 AllowableClass; + int8 RequiredLevel; uint16 RequiredSkill; uint16 RequiredSkillRank; uint32 RequiredAbility; + uint16 ItemLevel; + int32 Flags[4]; }; #define MAX_ITEM_SET_ITEMS 17 @@ -1597,17 +1664,17 @@ struct ItemSetEntry { uint32 ID; LocalizedString* Name; - uint32 ItemID[MAX_ITEM_SET_ITEMS]; - uint16 RequiredSkillRank; - uint32 RequiredSkill; uint32 SetFlags; + uint32 RequiredSkill; + uint16 RequiredSkillRank; + uint32 ItemID[MAX_ITEM_SET_ITEMS]; }; struct ItemSetSpellEntry { uint32 ID; - uint32 SpellID; uint16 ChrSpecID; + uint32 SpellID; uint8 Threshold; uint16 ItemSetID; }; @@ -1616,80 +1683,80 @@ struct ItemSparseEntry { uint32 ID; int64 AllowableRace; - LocalizedString* Display; - LocalizedString* Display1; - LocalizedString* Display2; - LocalizedString* Display3; LocalizedString* Description; - int32 Flags[MAX_ITEM_PROTO_FLAGS]; - float PriceRandomValue; - float PriceVariance; - uint32 VendorStackCount; - uint32 BuyPrice; - uint32 SellPrice; - uint32 RequiredAbility; - int32 MaxCount; - int32 Stackable; - int32 StatPercentEditor[MAX_ITEM_PROTO_STATS]; - float StatPercentageOfSocket[MAX_ITEM_PROTO_STATS]; - float ItemRange; - uint32 BagFamily; - float QualityModifier; - uint32 DurationInInventory; + LocalizedString* Display3; + LocalizedString* Display2; + LocalizedString* Display1; + LocalizedString* Display; float DmgVariance; - int16 AllowableClass; - uint16 ItemLevel; - uint16 RequiredSkill; - uint16 RequiredSkillRank; - uint16 MinFactionID; - int16 ItemStatValue[MAX_ITEM_PROTO_STATS]; - uint16 ScalingStatDistributionID; - uint16 ItemDelay; - uint16 PageID; - uint16 StartQuestID; - uint16 LockID; - uint16 RandomSelect; - uint16 ItemRandomSuffixGroupID; - uint16 ItemSet; - uint16 ZoneBound; - uint16 InstanceBound; - uint16 TotemCategoryID; - uint16 SocketMatchEnchantmentId; - uint16 GemProperties; - uint16 LimitCategory; - uint16 RequiredHoliday; - uint16 RequiredTransmogHoliday; + uint32 DurationInInventory; + float QualityModifier; + uint32 BagFamily; + float ItemRange; + float StatPercentageOfSocket[MAX_ITEM_PROTO_STATS]; + int32 StatPercentEditor[MAX_ITEM_PROTO_STATS]; + int32 Stackable; + int32 MaxCount; + uint32 RequiredAbility; + uint32 SellPrice; + uint32 BuyPrice; + uint32 VendorStackCount; + float PriceVariance; + float PriceRandomValue; + int32 Flags[MAX_ITEM_PROTO_FLAGS]; + int32 FactionRelated; uint16 ItemNameDescriptionID; - uint8 OverallQualityID; - uint8 InventoryType; - int8 RequiredLevel; - uint8 RequiredPVPRank; - uint8 RequiredPVPMedal; - uint8 MinReputation; - uint8 ContainerSlots; - int8 StatModifierBonusStat[MAX_ITEM_PROTO_STATS]; - uint8 DamageDamageType; - uint8 Bonding; - uint8 LanguageID; - uint8 PageMaterialID; - uint8 Material; - uint8 SheatheType; - uint8 SocketType[MAX_ITEM_PROTO_SOCKETS]; - uint8 SpellWeightCategory; - uint8 SpellWeight; - uint8 ArtifactID; + uint16 RequiredTransmogHoliday; + uint16 RequiredHoliday; + uint16 LimitCategory; + uint16 GemProperties; + uint16 SocketMatchEnchantmentId; + uint16 TotemCategoryID; + uint16 InstanceBound; + uint16 ZoneBound; + uint16 ItemSet; + uint16 ItemRandomSuffixGroupID; + uint16 RandomSelect; + uint16 LockID; + uint16 StartQuestID; + uint16 PageID; + uint16 ItemDelay; + uint16 ScalingStatDistributionID; + uint16 MinFactionID; + uint16 RequiredSkillRank; + uint16 RequiredSkill; + uint16 ItemLevel; + int16 AllowableClass; uint8 ExpansionID; + uint8 ArtifactID; + uint8 SpellWeight; + uint8 SpellWeightCategory; + uint8 SocketType[MAX_ITEM_PROTO_SOCKETS]; + uint8 SheatheType; + uint8 Material; + uint8 PageMaterialID; + uint8 LanguageID; + uint8 Bonding; + uint8 DamageDamageType; + int8 StatModifierBonusStat[MAX_ITEM_PROTO_STATS]; + uint8 ContainerSlots; + uint8 MinReputation; + uint8 RequiredPVPMedal; + uint8 RequiredPVPRank; + int8 RequiredLevel; + uint8 InventoryType; + uint8 OverallQualityID; }; struct ItemSpecEntry { uint32 ID; - uint16 SpecializationID; uint8 MinLevel; uint8 MaxLevel; uint8 ItemType; uint8 PrimaryStat; uint8 SecondaryStat; + uint16 SpecializationID; }; struct ItemSpecOverrideEntry @@ -1702,11 +1769,11 @@ struct ItemSpecOverrideEntry struct ItemUpgradeEntry { uint32 ID; - uint32 CurrencyAmount; - uint16 PrerequisiteID; - uint16 CurrencyType; uint8 ItemUpgradePathID; uint8 ItemLevelIncrement; + uint16 PrerequisiteID; + uint16 CurrencyType; + uint32 CurrencyAmount; }; struct ItemXBonusTreeEntry @@ -1729,37 +1796,37 @@ struct LFGDungeonsEntry uint32 ID; LocalizedString* Name; LocalizedString* Description; - int32 Flags; - float MinGear; - uint16 MaxLevel; - uint16 TargetLevelMax; - int16 MapID; - uint16 RandomID; - uint16 ScenarioID; - uint16 FinalEncounterID; - uint16 BonusReputationAmount; - uint16 MentorItemLevel; - uint16 RequiredPlayerConditionId; uint8 MinLevel; - uint8 TargetLevel; - uint8 TargetLevelMin; - uint8 DifficultyID; + uint16 MaxLevel; uint8 TypeID; + uint8 Subtype; int8 Faction; + int32 IconTextureFileID; + int32 RewardsBgTextureFileID; + int32 PopupBgTextureFileID; uint8 ExpansionLevel; - uint8 OrderIndex; + int16 MapID; + uint8 DifficultyID; + float MinGear; uint8 GroupID; + uint8 OrderIndex; + uint32 RequiredPlayerConditionId; + uint8 TargetLevel; + uint8 TargetLevelMin; + uint16 TargetLevelMax; + uint16 RandomID; + uint16 ScenarioID; + uint16 FinalEncounterID; uint8 CountTank; uint8 CountHealer; uint8 CountDamage; uint8 MinCountTank; uint8 MinCountHealer; uint8 MinCountDamage; - uint8 Subtype; + uint16 BonusReputationAmount; + uint16 MentorItemLevel; uint8 MentorCharLevel; - int32 IconTextureFileID; - int32 RewardsBgTextureFileID; - int32 PopupBgTextureFileID; + int32 Flags[2]; // Helpers uint32 Entry() const { return ID + (TypeID << 24); } @@ -1780,23 +1847,25 @@ struct LiquidTypeEntry uint32 ID; char const* Name; char const* Texture[6]; + uint16 Flags; + uint8 SoundBank; // used to be "type", maybe needs fixing (works well for now) + uint32 SoundID; uint32 SpellID; float MaxDarkenDepth; float FogDarkenIntensity; float AmbDarkenIntensity; float DirDarkenIntensity; - float ParticleScale; - int32 Color[2]; - float Float[18]; - uint32 Int[4]; - uint16 Flags; uint16 LightID; - uint8 SoundBank; // used to be "type", maybe needs fixing (works well for now) + float ParticleScale; uint8 ParticleMovement; uint8 ParticleTexSlots; uint8 MaterialID; + int32 MinimapStaticCol; uint8 FrameCountTexture[6]; - uint32 SoundID; + int32 Color[2]; + float Float[18]; + uint32 Int[4]; + float Coefficient[4]; }; #define MAX_LOCK_CASE 8 @@ -1825,21 +1894,22 @@ struct MapEntry LocalizedString* MapDescription1; // Alliance LocalizedString* PvpShortDescription; LocalizedString* PvpLongDescription; - int32 Flags[2]; - float MinimapIconScale; DBCPosition2D Corpse; // entrance coordinates in ghost mode (in most cases = normal entrance) + uint8 MapType; + int8 InstanceType; + uint8 ExpansionID; uint16 AreaTableID; int16 LoadingScreenID; - int16 CorpseMapID; // map_id of entrance map in ghost mode (continent always and in most cases = normal entrance) int16 TimeOfDayOverride; int16 ParentMapID; int16 CosmeticParentMapID; - int16 WindSettingsID; - uint8 InstanceType; - uint8 MapType; - uint8 ExpansionID; - uint8 MaxPlayers; uint8 TimeOffset; + float MinimapIconScale; + int16 CorpseMapID; // map_id of entrance map in ghost mode (continent always and in most cases = normal entrance) + uint8 MaxPlayers; + int16 WindSettingsID; + int32 ZmpFileDataID; + int32 Flags[2]; // Helpers uint8 Expansion() const { return ExpansionID; } @@ -1877,13 +1947,14 @@ struct MapDifficultyEntry { uint32 ID; LocalizedString* Message; // m_message_lang (text showed when transfer to map failed) + uint32 ItemContextPickerID; + int32 ContentTuningID; uint8 DifficultyID; + uint8 LockID; uint8 ResetInterval; uint8 MaxPlayers; - uint8 LockID; - uint8 Flags; uint8 ItemContext; - uint32 ItemContextPickerID; + uint8 Flags; uint16 MapID; uint32 GetRaidDuration() const @@ -1899,27 +1970,27 @@ struct MapDifficultyEntry struct ModifierTreeEntry { uint32 ID; - int32 Asset; - int32 SecondaryAsset; uint32 Parent; - uint8 Type; - int8 TertiaryAsset; int8 Operator; int8 Amount; + uint8 Type; + int32 Asset; + int32 SecondaryAsset; + int8 TertiaryAsset; }; struct MountEntry { LocalizedString* Name; - LocalizedString* Description; LocalizedString* SourceText; - int32 SourceSpellID; - float MountFlyRideHeight; + LocalizedString* Description; + uint32 ID; uint16 MountTypeID; uint16 Flags; int8 SourceTypeEnum; - uint32 ID; + int32 SourceSpellID; uint32 PlayerConditionID; + float MountFlyRideHeight; int32 UiModelSceneID; bool IsSelfMount() const { return (Flags & MOUNT_FLAG_SELF_MOUNT) != 0; } @@ -1927,14 +1998,14 @@ struct MountEntry struct MountCapabilityEntry { - int32 ReqSpellKnownID; - int32 ModSpellAuraID; + uint32 ID; + uint8 Flags; uint16 ReqRidingSkill; uint16 ReqAreaID; - int16 ReqMapID; - uint8 Flags; - uint32 ID; uint32 ReqSpellAuraID; + int32 ReqSpellKnownID; + int32 ModSpellAuraID; + int16 ReqMapID; }; struct MountTypeXCapabilityEntry @@ -1956,10 +2027,10 @@ struct MountXDisplayEntry struct MovieEntry { uint32 ID; - uint32 AudioFileDataID; - uint32 SubtitleFileDataID; uint8 Volume; uint8 KeyID; + uint32 AudioFileDataID; + uint32 SubtitleFileDataID; }; struct NameGenEntry @@ -1990,6 +2061,14 @@ struct NamesReservedLocaleEntry uint8 LocaleMask; }; +struct NumTalentsAtLevelEntry +{ + uint32 ID; + int32 NumTalents; + int32 NumTalentsDeathKnight; + int32 NumTalentsDemonHunter; +}; + #define MAX_OVERRIDE_SPELL 10 struct OverrideSpellDataEntry @@ -2018,12 +2097,9 @@ struct PlayerConditionEntry int64 RaceMask; LocalizedString* FailureDescription; uint32 ID; - uint8 Flags; uint16 MinLevel; uint16 MaxLevel; int32 ClassMask; - int8 Gender; - int8 NativeGender; uint32 SkillLogic; uint8 LanguageID; uint8 MinLanguage; @@ -2032,8 +2108,6 @@ struct PlayerConditionEntry uint8 MaxReputation; uint32 ReputationLogic; int8 CurrentPvpFaction; - uint8 MinPVPRank; - uint8 MaxPVPRank; uint8 PvpMedal; uint32 PrevQuestLogic; uint32 CurrQuestLogic; @@ -2047,31 +2121,36 @@ struct PlayerConditionEntry uint8 PartyStatus; uint8 LifetimeMaxPVPRank; uint32 AchievementLogic; - uint32 LfgLogic; + int8 Gender; + int8 NativeGender; uint32 AreaLogic; + uint32 LfgLogic; uint32 CurrencyLogic; uint16 QuestKillID; uint32 QuestKillLogic; int8 MinExpansionLevel; int8 MaxExpansionLevel; - int8 MinExpansionTier; - int8 MaxExpansionTier; - uint8 MinGuildLevel; - uint8 MaxGuildLevel; - uint8 PhaseUseFlags; - uint16 PhaseID; - uint32 PhaseGroupID; int32 MinAvgItemLevel; int32 MaxAvgItemLevel; uint16 MinAvgEquippedItemLevel; uint16 MaxAvgEquippedItemLevel; + uint8 PhaseUseFlags; + uint16 PhaseID; + uint32 PhaseGroupID; + uint8 Flags; int8 ChrSpecializationIndex; int8 ChrSpecializationRole; + uint32 ModifierTreeID; int8 PowerType; uint8 PowerTypeComp; uint8 PowerTypeValue; - uint32 ModifierTreeID; int32 WeaponSubclassMask; + uint8 MaxGuildLevel; + uint8 MinGuildLevel; + int8 MaxExpansionTier; + int8 MinExpansionTier; + uint8 MinPVPRank; + uint8 MaxPVPRank; uint16 SkillID[4]; uint16 MinSkill[4]; uint16 MaxSkill[4]; @@ -2088,10 +2167,10 @@ struct PlayerConditionEntry int32 AuraSpellID[4]; uint8 AuraStacks[4]; uint16 Achievement[4]; + uint16 AreaID[4]; uint8 LfgStatus[4]; uint8 LfgCompare[4]; uint32 LfgValue[4]; - uint16 AreaID[4]; uint32 CurrencyID[4]; uint32 CurrencyCount[4]; uint32 QuestKillMonster[6]; @@ -2113,25 +2192,26 @@ struct PowerTypeEntry uint32 ID; char const* NameGlobalStringTag; char const* CostGlobalStringTag; - float RegenPeace; - float RegenCombat; - int16 MaxBasePower; - int16 RegenInterruptTimeMS; - int16 Flags; int8 PowerTypeEnum; int8 MinPower; + int16 MaxBasePower; int8 CenterPower; int8 DefaultPower; int8 DisplayModifier; + int16 RegenInterruptTimeMS; + float RegenPeace; + float RegenCombat; + int16 Flags; }; struct PrestigeLevelInfoEntry { uint32 ID; LocalizedString* Name; + int32 PrestigeLevel; int32 BadgeTextureFileDataID; - uint8 PrestigeLevel; uint8 Flags; + int32 AwardedAchievementID; bool IsDisabled() const { return (Flags & PRESTIGE_FLAG_DISABLED) != 0; } }; @@ -2155,35 +2235,32 @@ struct PVPItemEntry uint8 ItemLevelDelta; }; -struct PvpRewardEntry -{ - uint32 ID; - int32 HonorLevel; - int32 PrestigeLevel; - int32 RewardPackID; -}; - struct PvpTalentEntry { - uint32 ID; LocalizedString* Description; + uint32 ID; + int32 SpecID; int32 SpellID; int32 OverridesSpellID; - int32 ActionBarSpellID; - int32 TierID; - int32 ColumnIndex; int32 Flags; - int32 ClassID; - int32 SpecID; - int32 Role; + int32 ActionBarSpellID; + int32 PvpTalentCategoryID; + int32 LevelRequired; +}; + +struct PvpTalentCategoryEntry +{ + uint32 ID; + uint8 TalentSlotMask; }; -struct PvpTalentUnlockEntry +struct PvpTalentSlotUnlockEntry { uint32 ID; - int32 TierID; - int32 ColumnIndex; - int32 HonorLevel; + int8 Slot; + int32 LevelRequired; + int32 DeathKnightLevelRequired; + int32 DemonHunterLevelRequired; }; struct QuestFactionRewardEntry @@ -2201,10 +2278,10 @@ struct QuestMoneyRewardEntry struct QuestPackageItemEntry { uint32 ID; - int32 ItemID; uint16 PackageID; - uint8 DisplayType; + int32 ItemID; uint32 ItemQuantity; + uint8 DisplayType; }; struct QuestSortEntry @@ -2229,6 +2306,7 @@ struct QuestXPEntry struct RandPropPointsEntry { uint32 ID; + int32 DamageReplaceStat; uint32 Epic[5]; uint32 Superior[5]; uint32 Good[5]; @@ -2237,11 +2315,11 @@ struct RandPropPointsEntry struct RewardPackEntry { uint32 ID; + int32 CharTitleID; uint32 Money; - float ArtifactXPMultiplier; int8 ArtifactXPDifficulty; + float ArtifactXPMultiplier; uint8 ArtifactXPCategoryID; - int32 CharTitleID; uint32 TreasurePickerID; }; @@ -2268,14 +2346,6 @@ struct RulesetItemUpgradeEntry uint16 ItemUpgradeID; }; -struct SandboxScalingEntry -{ - uint32 ID; - int32 MinLevel; - int32 MaxLevel; - int32 Flags; -}; - struct ScalingStatDistributionEntry { uint32 ID; @@ -2289,8 +2359,9 @@ struct ScenarioEntry uint32 ID; LocalizedString* Name; uint16 AreaTableID; - uint8 Flags; uint8 Type; + uint8 Flags; + uint32 UiTextureKitID; }; struct ScenarioStepEntry @@ -2299,12 +2370,14 @@ struct ScenarioStepEntry LocalizedString* Description; LocalizedString* Title; uint16 ScenarioID; - uint16 Supersedes; // Used in conjunction with Proving Grounds scenarios, when sequencing steps (Not using step order?) + uint32 Criteriatreeid; uint16 RewardQuestID; + int32 RelatedStep; // Bonus step can only be completed if scenario is in the step specified in this field + uint16 Supersedes; // Used in conjunction with Proving Grounds scenarios, when sequencing steps (Not using step order?) uint8 OrderIndex; uint8 Flags; - uint32 Criteriatreeid; - int32 RelatedStep; // Bonus step can only be completed if scenario is in the step specified in this field + uint32 VisibilityPlayerConditionID; + uint16 WidgetSetID; // helpers bool IsBonusObjective() const @@ -2342,33 +2415,38 @@ struct SceneScriptTextEntry struct SkillLineEntry { - uint32 ID; LocalizedString* DisplayName; - LocalizedString* Description; LocalizedString* AlternateVerb; - uint16 Flags; + LocalizedString* Description; + LocalizedString* HordeDisplayName; + char const* OverrideSourceInfoDisplayName; + uint32 ID; int8 CategoryID; - int8 CanLink; int32 SpellIconFileID; + int8 CanLink; uint32 ParentSkillLineID; + int32 ParentTierIndex; + uint16 Flags; + int32 SpellBookSpellID; }; struct SkillLineAbilityEntry { int64 RaceMask; uint32 ID; + int16 SkillLine; int32 Spell; + int16 MinSkillLineRank; + int32 ClassMask; int32 SupercedesSpell; - int16 SkillLine; + int8 AcquireMethod; int16 TrivialSkillLineRankHigh; int16 TrivialSkillLineRankLow; + int8 Flags; + int8 NumSkillUps; int16 UniqueBit; int16 TradeSkillCategoryID; - int8 NumSkillUps; - int32 ClassMask; - int16 MinSkillLineRank; - int8 AcquireMethod; - int8 Flags; + int16 SkillupSkillLineID; }; struct SkillRaceClassInfoEntry @@ -2376,28 +2454,28 @@ struct SkillRaceClassInfoEntry uint32 ID; int64 RaceMask; int16 SkillID; + int32 ClassMask; uint16 Flags; - int16 SkillTierID; int8 Availability; int8 MinLevel; - int32 ClassMask; + int16 SkillTierID; }; struct SoundKitEntry { uint32 ID; + uint8 SoundType; float VolumeFloat; + uint16 Flags; float MinDistance; float DistanceCutoff; - uint16 Flags; - uint16 SoundEntriesAdvancedID; - uint8 SoundType; - uint8 DialogType; uint8 EAXDef; + uint32 SoundKitAdvancedID; float VolumeVariationPlus; float VolumeVariationMinus; float PitchVariationPlus; float PitchVariationMinus; + int8 DialogType; float PitchAdjust; uint16 BusOverwriteID; uint8 MaxInstances; @@ -2406,47 +2484,38 @@ struct SoundKitEntry struct SpecializationSpellsEntry { LocalizedString* Description; + uint32 ID; + uint16 SpecID; int32 SpellID; int32 OverridesSpellID; - uint16 SpecID; uint8 DisplayOrder; - uint32 ID; -}; - -struct SpellEntry -{ - uint32 ID; - LocalizedString* Name; - LocalizedString* NameSubtext; - LocalizedString* Description; - LocalizedString* AuraDescription; }; struct SpellAuraOptionsEntry { uint32 ID; - int32 ProcCharges; - int32 ProcTypeMask; - int32 ProcCategoryRecovery; - uint16 CumulativeAura; - uint16 SpellProcsPerMinuteID; uint8 DifficultyID; + uint16 CumulativeAura; + int32 ProcCategoryRecovery; uint8 ProcChance; + int32 ProcCharges; + uint16 SpellProcsPerMinuteID; + int32 ProcTypeMask[2]; int32 SpellID; }; struct SpellAuraRestrictionsEntry { uint32 ID; - int32 CasterAuraSpell; - int32 TargetAuraSpell; - int32 ExcludeCasterAuraSpell; - int32 ExcludeTargetAuraSpell; uint8 DifficultyID; uint8 CasterAuraState; uint8 TargetAuraState; uint8 ExcludeCasterAuraState; uint8 ExcludeTargetAuraState; + int32 CasterAuraSpell; + int32 TargetAuraSpell; + int32 ExcludeCasterAuraSpell; + int32 ExcludeTargetAuraSpell; int32 SpellID; }; @@ -2454,33 +2523,33 @@ struct SpellCastTimesEntry { uint32 ID; int32 Base; - int32 Minimum; int16 PerLevel; + int32 Minimum; }; struct SpellCastingRequirementsEntry { uint32 ID; int32 SpellID; - uint16 MinFactionID; - uint16 RequiredAreasID; - uint16 RequiresSpellFocus; uint8 FacingCasterFlags; + uint16 MinFactionID; int8 MinReputation; + uint16 RequiredAreasID; uint8 RequiredAuraVision; + uint16 RequiresSpellFocus; }; struct SpellCategoriesEntry { uint32 ID; - int16 Category; - int16 StartRecoveryCategory; - int16 ChargeCategory; uint8 DifficultyID; + int16 Category; int8 DefenseType; int8 DispelType; int8 Mechanic; int8 PreventionType; + int16 StartRecoveryCategory; + int16 ChargeCategory; int32 SpellID; }; @@ -2488,10 +2557,10 @@ struct SpellCategoryEntry { uint32 ID; LocalizedString* Name; - int32 ChargeRecoveryTime; int8 Flags; uint8 UsesPerWeek; int8 MaxCharges; + int32 ChargeRecoveryTime; int32 TypeMask; }; @@ -2499,18 +2568,18 @@ struct SpellClassOptionsEntry { uint32 ID; int32 SpellID; - flag128 SpellClassMask; - uint8 SpellClassSet; uint32 ModalNextSpell; + uint8 SpellClassSet; + flag128 SpellClassMask; }; struct SpellCooldownsEntry { uint32 ID; + uint8 DifficultyID; int32 CategoryRecoveryTime; int32 RecoveryTime; int32 StartRecoveryTime; - uint8 DifficultyID; int32 SpellID; }; @@ -2518,41 +2587,40 @@ struct SpellDurationEntry { uint32 ID; int32 Duration; - int32 MaxDuration; uint32 DurationPerLevel; + int32 MaxDuration; }; struct SpellEffectEntry { uint32 ID; - uint32 Effect; - int32 EffectBasePoints; - int32 EffectIndex; - int32 EffectAura; int32 DifficultyID; + int32 EffectIndex; + uint32 Effect; float EffectAmplitude; + int32 EffectAttributes; + int16 EffectAura; int32 EffectAuraPeriod; float EffectBonusCoefficient; float EffectChainAmplitude; int32 EffectChainTargets; - int32 EffectDieSides; int32 EffectItemType; int32 EffectMechanic; float EffectPointsPerResource; + float EffectPosFacing; float EffectRealPointsPerLevel; int32 EffectTriggerSpell; - float EffectPosFacing; - int32 EffectAttributes; float BonusCoefficientFromAP; float PvpMultiplier; float Coefficient; float Variance; float ResourceCoefficient; float GroupSizeBasePointsCoefficient; - flag128 EffectSpellClassMask; + float EffectBasePoints; int32 EffectMiscValue[2]; uint32 EffectRadiusIndex[2]; - uint32 ImplicitTarget[2]; + flag128 EffectSpellClassMask; + int16 ImplicitTarget[2]; int32 SpellID; }; @@ -2560,9 +2628,9 @@ struct SpellEquippedItemsEntry { uint32 ID; int32 SpellID; + int8 EquippedItemClass; int32 EquippedItemInvTypes; int32 EquippedItemSubclass; - int8 EquippedItemClass; }; struct SpellFocusObjectEntry @@ -2587,10 +2655,12 @@ struct SpellItemEnchantmentEntry { uint32 ID; LocalizedString* Name; + LocalizedString* HordeName; uint32 EffectArg[MAX_ITEM_ENCHANTMENT_EFFECTS]; float EffectScalingPoints[MAX_ITEM_ENCHANTMENT_EFFECTS]; uint32 TransmogCost; uint32 IconFileDataID; + uint32 TransmogPlayerConditionID; int16 EffectPointsMin[MAX_ITEM_ENCHANTMENT_EFFECTS]; uint16 ItemVisual; uint16 Flags; @@ -2599,19 +2669,18 @@ struct SpellItemEnchantmentEntry uint16 ItemLevel; uint8 Charges; uint8 Effect[MAX_ITEM_ENCHANTMENT_EFFECTS]; + int8 ScalingClass; + int8 ScalingClassRestricted; uint8 ConditionID; uint8 MinLevel; uint8 MaxLevel; - int8 ScalingClass; - int8 ScalingClassRestricted; - uint32 TransmogPlayerConditionID; }; struct SpellItemEnchantmentConditionEntry { uint32 ID; - uint32 LtOperand[5]; uint8 LtOperandType[5]; + uint32 LtOperand[5]; uint8 Operator[5]; uint8 RtOperandType[5]; uint8 RtOperand[5]; @@ -2629,10 +2698,10 @@ struct SpellLearnSpellEntry struct SpellLevelsEntry { uint32 ID; + uint8 DifficultyID; int16 BaseLevel; int16 MaxLevel; int16 SpellLevel; - uint8 DifficultyID; uint8 MaxPassiveAuraLevel; int32 SpellID; }; @@ -2640,43 +2709,50 @@ struct SpellLevelsEntry struct SpellMiscEntry { uint32 ID; + uint8 DifficultyID; uint16 CastingTimeIndex; uint16 DurationIndex; uint16 RangeIndex; uint8 SchoolMask; - int32 SpellIconFileDataID; float Speed; - int32 ActiveIconFileDataID; float LaunchDelay; - uint8 DifficultyID; + float MinDuration; + int32 SpellIconFileDataID; + int32 ActiveIconFileDataID; int32 Attributes[14]; int32 SpellID; }; +struct SpellNameEntry +{ + uint32 ID; // SpellID + LocalizedString* Name; +}; + struct SpellPowerEntry { - int32 ManaCost; - float PowerCostPct; - float PowerPctPerSecond; - int32 RequiredAuraSpellID; - float PowerCostMaxPct; - uint8 OrderIndex; - int8 PowerType; uint32 ID; + uint8 OrderIndex; + int32 ManaCost; int32 ManaCostPerLevel; int32 ManaPerSecond; - uint32 OptionalCost; // Spell uses [ManaCost, ManaCost+ManaCostAdditional] power - affects tooltip parsing as multiplier on SpellEffectEntry::EffectPointsPerResource - // only SPELL_EFFECT_WEAPON_DAMAGE_NOSCHOOL, SPELL_EFFECT_WEAPON_PERCENT_DAMAGE, SPELL_EFFECT_WEAPON_DAMAGE, SPELL_EFFECT_NORMALIZED_WEAPON_DMG uint32 PowerDisplayID; int32 AltPowerBarID; + float PowerCostPct; + float PowerCostMaxPct; + float PowerPctPerSecond; + int8 PowerType; + int32 RequiredAuraSpellID; + uint32 OptionalCost; // Spell uses [ManaCost, ManaCost+ManaCostAdditional] power - affects tooltip parsing as multiplier on SpellEffectEntry::EffectPointsPerResource + // only SPELL_EFFECT_WEAPON_DAMAGE_NOSCHOOL, SPELL_EFFECT_WEAPON_PERCENT_DAMAGE, SPELL_EFFECT_WEAPON_DAMAGE, SPELL_EFFECT_NORMALIZED_WEAPON_DMG int32 SpellID; }; struct SpellPowerDifficultyEntry { + uint32 ID; uint8 DifficultyID; uint8 OrderIndex; - uint32 ID; }; struct SpellProcsPerMinuteEntry @@ -2689,9 +2765,9 @@ struct SpellProcsPerMinuteEntry struct SpellProcsPerMinuteModEntry { uint32 ID; - float Coeff; - int16 Param; uint8 Type; + int16 Param; + float Coeff; uint16 SpellProcsPerMinuteID; }; @@ -2709,9 +2785,9 @@ struct SpellRangeEntry uint32 ID; LocalizedString* DisplayName; LocalizedString* DisplayNameShort; + uint8 Flags; float RangeMin[2]; float RangeMax[2]; - uint8 Flags; }; #define MAX_SPELL_REAGENTS 8 @@ -2728,19 +2804,19 @@ struct SpellScalingEntry { uint32 ID; int32 SpellID; - int16 ScalesFromItemLevel; int32 Class; uint32 MinScalingLevel; uint32 MaxScalingLevel; + int16 ScalesFromItemLevel; }; struct SpellShapeshiftEntry { uint32 ID; int32 SpellID; + int8 StanceBarOrder; int32 ShapeshiftExclude[2]; int32 ShapeshiftMask[2]; - int8 StanceBarOrder; }; #define MAX_SHAPESHIFT_SPELLS 8 @@ -2749,13 +2825,13 @@ struct SpellShapeshiftFormEntry { uint32 ID; LocalizedString* Name; - float DamageVariance; + int8 CreatureType; int32 Flags; + int32 AttackIconFileID; + int8 BonusActionBar; int16 CombatRoundTime; + float DamageVariance; uint16 MountTypeID; - int8 CreatureType; - int8 BonusActionBar; - int32 AttackIconFileID; uint32 CreatureDisplayID[4]; uint32 PresetSpellID[MAX_SHAPESHIFT_SPELLS]; }; @@ -2763,13 +2839,13 @@ struct SpellShapeshiftFormEntry struct SpellTargetRestrictionsEntry { uint32 ID; - float ConeDegrees; - float Width; - int32 Targets; - int16 TargetCreatureType; uint8 DifficultyID; + float ConeDegrees; uint8 MaxTargets; uint32 MaxTargetLevel; + int16 TargetCreatureType; + int32 Targets; + float Width; int32 SpellID; }; @@ -2779,35 +2855,35 @@ struct SpellTotemsEntry { uint32 ID; int32 SpellID; - int32 Totem[MAX_SPELL_TOTEMS]; uint16 RequiredTotemCategoryID[MAX_SPELL_TOTEMS]; + int32 Totem[MAX_SPELL_TOTEMS]; }; struct SpellXSpellVisualEntry { - uint32 SpellVisualID; uint32 ID; + uint8 DifficultyID; + uint32 SpellVisualID; float Probability; - uint16 CasterPlayerConditionID; - uint16 CasterUnitConditionID; - uint16 ViewerPlayerConditionID; - uint16 ViewerUnitConditionID; - int32 SpellIconFileID; - int32 ActiveIconFileID; uint8 Flags; - uint8 DifficultyID; uint8 Priority; + int32 SpellIconFileID; + int32 ActiveIconFileID; + uint16 ViewerUnitConditionID; + uint32 ViewerPlayerConditionID; + uint16 CasterUnitConditionID; + uint32 CasterPlayerConditionID; int32 SpellID; }; struct SummonPropertiesEntry { uint32 ID; - int32 Flags; int32 Control; int32 Faction; int32 Title; int32 Slot; + int32 Flags; }; #define TACTKEY_SIZE 16 @@ -2822,48 +2898,49 @@ struct TalentEntry { uint32 ID; LocalizedString* Description; - uint32 SpellID; - uint32 OverridesSpellID; - uint16 SpecID; uint8 TierID; - uint8 ColumnIndex; uint8 Flags; - uint8 CategoryMask[2]; + uint8 ColumnIndex; uint8 ClassID; + uint16 SpecID; + uint32 SpellID; + uint32 OverridesSpellID; + uint8 CategoryMask[2]; }; struct TaxiNodesEntry { - uint32 ID; LocalizedString* Name; DBCPosition3D Pos; - int32 MountCreatureID[2]; DBCPosition2D MapOffset; - float Facing; DBCPosition2D FlightMapOffset; + uint32 ID; uint16 ContinentID; uint16 ConditionID; uint16 CharacterBitNumber; uint8 Flags; int32 UiTextureKitID; + float Facing; uint32 SpecialIconConditionID; + uint32 VisibilityConditionID; + int32 MountCreatureID[2]; }; struct TaxiPathEntry { + uint32 ID; uint16 FromTaxiNode; uint16 ToTaxiNode; - uint32 ID; uint32 Cost; }; struct TaxiPathNodeEntry { DBCPosition3D Loc; + uint32 ID; uint16 PathID; + int32 NodeIndex; uint16 ContinentID; - uint8 NodeIndex; - uint32 ID; uint8 Flags; uint32 Delay; uint16 ArrivalEventID; @@ -2874,17 +2951,17 @@ struct TotemCategoryEntry { uint32 ID; LocalizedString* Name; - int32 TotemCategoryMask; uint8 TotemCategoryType; + int32 TotemCategoryMask; }; struct ToyEntry { LocalizedString* SourceText; + uint32 ID; int32 ItemID; uint8 Flags; int8 SourceTypeEnum; - uint32 ID; }; struct TransmogHolidayEntry @@ -2896,15 +2973,15 @@ struct TransmogHolidayEntry struct TransmogSetEntry { LocalizedString* Name; - uint16 ParentTransmogSetID; - int16 UiOrder; - uint8 ExpansionID; uint32 ID; - int32 Flags; - uint32 TrackingQuestID; int32 ClassMask; - int32 ItemNameDescriptionID; + uint32 TrackingQuestID; + int32 Flags; uint32 TransmogSetGroupID; + int32 ItemNameDescriptionID; + uint16 ParentTransmogSetID; + uint8 ExpansionID; + int16 UiOrder; }; struct TransmogSetGroupEntry @@ -2924,20 +3001,69 @@ struct TransmogSetItemEntry struct TransportAnimationEntry { uint32 ID; - uint32 TimeIndex; DBCPosition3D Pos; uint8 SequenceID; + uint32 TimeIndex; int32 TransportID; }; struct TransportRotationEntry { uint32 ID; - uint32 TimeIndex; float Rot[4]; + uint32 TimeIndex; int32 GameObjectsID; }; +struct UiMapEntry +{ + LocalizedString* Name; + uint32 ID; + int32 ParentUiMapID; + int32 Flags; + int32 System; + int32 Type; + uint32 LevelRangeMin; + uint32 LevelRangeMax; + int32 BountySetID; + uint32 BountyDisplayLocation; + int32 VisibilityPlayerConditionID; + int8 HelpTextPosition; + int32 BkgAtlasID; +}; + +struct UiMapAssignmentEntry +{ + DBCPosition2D UiMin; + DBCPosition2D UiMax; + DBCPosition3D Region[2]; + uint32 ID; + int32 UiMapID; + int32 OrderIndex; + int32 MapID; + int32 AreaID; + int32 WmoDoodadPlacementID; + int32 WmoGroupID; +}; + +struct UiMapLinkEntry +{ + DBCPosition2D UiMin; + DBCPosition2D UiMax; + uint32 ID; + int32 ParentUiMapID; + int32 OrderIndex; + int32 ChildUiMapID; +}; + +struct UiMapXMapArtEntry +{ + uint32 ID; + int32 PhaseID; + int32 UiMapArtID; + int32 UiMapID; +}; + struct UnitPowerBarEntry { uint32 ID; @@ -2945,18 +3071,18 @@ struct UnitPowerBarEntry LocalizedString* Cost; LocalizedString* OutOfError; LocalizedString* ToolTip; + uint32 MinPower; + uint32 MaxPower; + uint16 StartPower; + uint8 CenterPower; float RegenerationPeace; float RegenerationCombat; - int32 FileDataID[6]; - int32 Color[6]; + uint8 BarType; + uint16 Flags; float StartInset; float EndInset; - uint16 StartPower; - uint16 Flags; - uint8 CenterPower; - uint8 BarType; - uint32 MinPower; - uint32 MaxPower; + int32 FileDataID[6]; + int32 Color[6]; }; #define MAX_VEHICLE_SEATS 8 @@ -2965,6 +3091,7 @@ struct VehicleEntry { uint32 ID; int32 Flags; + uint8 FlagsB; float TurnSpeed; float PitchSpeed; float PitchMin; @@ -2976,21 +3103,22 @@ struct VehicleEntry float FacingLimitRight; float FacingLimitLeft; float CameraYawOffset; - uint16 SeatID[MAX_VEHICLE_SEATS]; - uint16 VehicleUIIndicatorID; - uint16 PowerDisplayID[3]; - uint8 FlagsB; uint8 UiLocomotionType; + uint16 VehicleUIIndicatorID; int32 MissileTargetingID; + uint16 SeatID[8]; + uint16 PowerDisplayID[3]; }; struct VehicleSeatEntry { uint32 ID; + DBCPosition3D AttachmentOffset; + DBCPosition3D CameraOffset; int32 Flags; int32 FlagsB; int32 FlagsC; - DBCPosition3D AttachmentOffset; + int8 AttachmentID; float EnterPreDelay; float EnterSpeed; float EnterGravity; @@ -2998,6 +3126,12 @@ struct VehicleSeatEntry float EnterMaxDuration; float EnterMinArcHeight; float EnterMaxArcHeight; + int32 EnterAnimStart; + int32 EnterAnimLoop; + int32 RideAnimStart; + int32 RideAnimLoop; + int32 RideUpperAnimStart; + int32 RideUpperAnimLoop; float ExitPreDelay; float ExitSpeed; float ExitGravity; @@ -3005,34 +3139,34 @@ struct VehicleSeatEntry float ExitMaxDuration; float ExitMinArcHeight; float ExitMaxArcHeight; + int32 ExitAnimStart; + int32 ExitAnimLoop; + int32 ExitAnimEnd; + int16 VehicleEnterAnim; + int8 VehicleEnterAnimBone; + int16 VehicleExitAnim; + int8 VehicleExitAnimBone; + int16 VehicleRideAnimLoop; + int8 VehicleRideAnimLoopBone; + int8 PassengerAttachmentID; float PassengerYaw; float PassengerPitch; float PassengerRoll; float VehicleEnterAnimDelay; float VehicleExitAnimDelay; + int8 VehicleAbilityDisplay; + uint32 EnterUISoundID; + uint32 ExitUISoundID; + int32 UiSkinFileDataID; float CameraEnteringDelay; float CameraEnteringDuration; float CameraExitingDelay; float CameraExitingDuration; - DBCPosition3D CameraOffset; float CameraPosChaseRate; float CameraFacingChaseRate; float CameraEnteringZoom; float CameraSeatZoomMin; float CameraSeatZoomMax; - int32 UiSkinFileDataID; - int16 EnterAnimStart; - int16 EnterAnimLoop; - int16 RideAnimStart; - int16 RideAnimLoop; - int16 RideUpperAnimStart; - int16 RideUpperAnimLoop; - int16 ExitAnimStart; - int16 ExitAnimLoop; - int16 ExitAnimEnd; - int16 VehicleEnterAnim; - int16 VehicleExitAnim; - int16 VehicleRideAnimLoop; int16 EnterAnimKitID; int16 RideAnimKitID; int16 ExitAnimKitID; @@ -3040,14 +3174,6 @@ struct VehicleSeatEntry int16 VehicleRideAnimKitID; int16 VehicleExitAnimKitID; int16 CameraModeID; - int8 AttachmentID; - int8 PassengerAttachmentID; - int8 VehicleEnterAnimBone; - int8 VehicleExitAnimBone; - int8 VehicleRideAnimLoopBone; - int8 VehicleAbilityDisplay; - uint32 EnterUISoundID; - uint32 ExitUISoundID; bool CanEnterOrExit() const { @@ -3068,97 +3194,59 @@ struct VehicleSeatEntry struct WMOAreaTableEntry { LocalizedString* AreaName; + uint32 ID; + uint16 WmoID; // used in root WMO + uint8 NameSetID; // used in adt file int32 WmoGroupID; // used in group WMO + uint8 SoundProviderPref; + uint8 SoundProviderPrefUnderwater; uint16 AmbienceID; + uint16 UwAmbience; uint16 ZoneMusic; + uint32 UwZoneMusic; uint16 IntroSound; - uint16 AreaTableID; uint16 UwIntroSound; - uint16 UwAmbience; - uint8 NameSetID; // used in adt file - uint8 SoundProviderPref; - uint8 SoundProviderPrefUnderwater; + uint16 AreaTableID; uint8 Flags; - uint32 ID; - uint32 UwZoneMusic; - uint16 WmoID; // used in root WMO }; struct WorldEffectEntry { uint32 ID; - int32 TargetAsset; - uint16 CombatConditionID; - uint8 TargetType; - uint8 WhenToDisplay; uint32 QuestFeedbackEffectID; + uint8 WhenToDisplay; + uint8 TargetType; + int32 TargetAsset; uint32 PlayerConditionID; -}; - -struct WorldMapAreaEntry -{ - char const* AreaName; - float LocLeft; - float LocRight; - float LocTop; - float LocBottom; - uint32 Flags; - int16 MapID; - uint16 AreaID; - int16 DisplayMapID; - uint16 DefaultDungeonFloor; - uint16 ParentWorldMapID; - uint8 LevelRangeMin; - uint8 LevelRangeMax; - uint8 BountySetID; - uint8 BountyDisplayLocation; - uint32 ID; - uint32 VisibilityPlayerConditionID; + uint16 CombatConditionID; }; #define MAX_WORLD_MAP_OVERLAY_AREA_IDX 4 struct WorldMapOverlayEntry { - char const* TextureName; uint32 ID; + uint32 UiMapArtID; uint16 TextureWidth; uint16 TextureHeight; - uint32 MapAreaID; // idx in WorldMapArea.dbc int32 OffsetX; int32 OffsetY; int32 HitRectTop; - int32 HitRectLeft; int32 HitRectBottom; + int32 HitRectLeft; int32 HitRectRight; uint32 PlayerConditionID; uint32 Flags; uint32 AreaID[MAX_WORLD_MAP_OVERLAY_AREA_IDX]; }; -struct WorldMapTransformsEntry -{ - uint32 ID; - DBCPosition3D RegionMin; - DBCPosition3D RegionMax; - DBCPosition2D RegionOffset; - float RegionScale; - uint16 MapID; - uint16 AreaID; - uint16 NewMapID; - uint16 NewDungeonMapID; - uint16 NewAreaID; - uint8 Flags; - int32 Priority; -}; - struct WorldSafeLocsEntry { uint32 ID; LocalizedString* AreaName; DBCPosition3D Loc; - float Facing; uint16 MapID; + float Facing; }; #pragma pack(pop) diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index 6b269dbe406..2655e0e0a12 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -44,11 +44,11 @@ enum LevelLimit // Client expected level limitation, like as used in DBC item max levels for "until max player level" // use as default max player level, must be fit max level for used client // also see MAX_LEVEL and STRONG_MAX_LEVEL define - DEFAULT_MAX_LEVEL = 110, + DEFAULT_MAX_LEVEL = 120, // client supported max level for player/pets/etc. Avoid overflow or client stability affected. // also see GT_MAX_LEVEL define - MAX_LEVEL = 110, + MAX_LEVEL = 120, // Server side limitation. Base at used code requirements. // also see MAX_LEVEL and GT_MAX_LEVEL define @@ -58,7 +58,7 @@ enum LevelLimit enum BattlegroundBracketId // bracketId for level ranges { BG_BRACKET_ID_FIRST = 0, - BG_BRACKET_ID_LAST = 11, + BG_BRACKET_ID_LAST = 12, // must be max value in PvPDificulty slot + 1 MAX_BATTLEGROUND_BRACKETS @@ -166,7 +166,7 @@ enum ArtifactPowerFlag : uint8 #define MAX_ARTIFACT_TIER 1 -#define BATTLE_PET_SPECIES_MAX_ID 2164 +#define BATTLE_PET_SPECIES_MAX_ID 2480 enum ChrSpecializationFlag { @@ -502,10 +502,13 @@ enum CriteriaTypes : uint8 CRITERIA_TYPE_TRANSMOG_SET_UNLOCKED = 205, CRITERIA_TYPE_GAIN_PARAGON_REPUTATION = 206, CRITERIA_TYPE_EARN_HONOR_XP = 207, - CRITERIA_TYPE_RELIC_TALENT_UNLOCKED = 211 + CRITERIA_TYPE_RELIC_TALENT_UNLOCKED = 211, + CRITERIA_TYPE_REACH_ACCOUNT_HONOR_LEVEL = 213, + CRITERIA_TREE_HEART_OF_AZEROTH_ARTIFACT_POWER_EARNED= 214, + CRITERIA_TREE_HEART_OF_AZEROTH_LEVEL_REACHED = 215 }; -#define CRITERIA_TYPE_TOTAL 213 +#define CRITERIA_TYPE_TOTAL 216 enum CriteriaTreeFlags : uint16 { @@ -608,6 +611,11 @@ enum Difficulty : uint8 DIFFICULTY_WORLD_PVP_SCENARIO_2 = 32, DIFFICULTY_TIMEWALKING_RAID = 33, DIFFICULTY_PVP = 34, + DIFFICULTY_NORMAL_ISLAND = 38, + DIFFICULTY_HEROIC_ISLAND = 39, + DIFFICULTY_MYTHIC_ISLAND = 40, + DIFFICULTY_PVP_ISLAND = 45, + DIFFICULTY_NORMAL_WARFRONT = 147, MAX_DIFFICULTY }; @@ -643,6 +651,20 @@ enum SpawnMask SPAWNMASK_RAID_ALL = (SPAWNMASK_RAID_NORMAL_ALL | SPAWNMASK_RAID_HEROIC_ALL) }; +enum class ExpectedStatType : uint8 +{ + CreatureHealth = 0, + PlayerHealth = 1, + CreatureAutoAttackDps = 2, + CreatureArmor = 3, + PlayerMana = 4, + PlayerPrimaryStat = 5, + PlayerSecondaryStat = 6, + ArmorConstant = 7, + None = 8, + CreatureSpellDamage = 9 +}; + enum FactionTemplateFlags { FACTION_TEMPLATE_ENEMY_SPAR = 0x00000020, // guessed, sparring with enemies? @@ -745,6 +767,68 @@ enum ItemBonusType ITEM_BONUS_OVERRIDE_REQUIRED_LEVEL = 18 }; +enum class ItemContext : uint8 +{ + NONE = 0, + Dungeon_Normal = 1, + Dungeon_Heroic = 2, + Raid_Normal = 3, + Raid_Raid_Finder = 4, + Raid_Heroic = 5, + Raid_Mythic = 6, + PVP_Unranked_1 = 7, + PVP_Ranked_1 = 8, + Scenario_Normal = 9, + Scenario_Heroic = 10, + Quest_Reward = 11, + Store = 12, + Trade_Skill = 13, + Vendor = 14, + Black_Market = 15, + Challenge_Mode_1 = 16, + Dungeon_Lvl_Up_1 = 17, + Dungeon_Lvl_Up_2 = 18, + Dungeon_Lvl_Up_3 = 19, + Dungeon_Lvl_Up_4 = 20, + Force_to_NONE = 21, + TimeWalker = 22, + Dungeon_Mythic = 23, + Pvp_Honor_Reward = 24, + World_Quest_1 = 25, + World_Quest_2 = 26, + World_Quest_3 = 27, + World_Quest_4 = 28, + World_Quest_5 = 29, + World_Quest_6 = 30, + Mission_Reward_1 = 31, + Mission_Reward_2 = 32, + Challenge_Mode_2 = 33, + Challenge_Mode_3 = 34, + Challenge_Mode_Jackpot = 35, + World_Quest_7 = 36, + World_Quest_8 = 37, + PVP_Ranked_2 = 38, + PVP_Ranked_3 = 39, + PVP_Ranked_4 = 40, + PVP_Unranked_2 = 41, + World_Quest_9 = 42, + World_Quest_10 = 43, + PVP_Ranked_5 = 44, + PVP_Ranked_6 = 45, + PVP_Ranked_7 = 46, + PVP_Unranked_3 = 47, + PVP_Unranked_4 = 48, + PVP_Unranked_5 = 49, + PVP_Unranked_6 = 50, + PVP_Unranked_7 = 51, + PVP_Ranked_8 = 52, + World_Quest_11 = 53, + World_Quest_12 = 54, + World_Quest_13 = 55, + PVP_Ranked_Jackpot = 56, + Tournament_Realm = 57, +}; + enum ItemLimitCategoryMode { ITEM_LIMIT_CATEGORY_MODE_HAVE = 0, // limit applied to amount items in inventory/bank @@ -917,7 +1001,7 @@ enum SpellShapeshiftFormFlags SHAPESHIFT_FORM_PREVENT_EMOTE_SOUNDS = 0x1000 }; -#define TaxiMaskSize 258 +#define TaxiMaskSize 286 typedef std::array<uint8, TaxiMaskSize> TaxiMask; enum TotemCategoryType @@ -989,8 +1073,7 @@ enum SummonPropFlags #define MAX_TALENT_TIERS 7 #define MAX_TALENT_COLUMNS 3 -#define MAX_PVP_TALENT_TIERS 6 -#define MAX_PVP_TALENT_COLUMNS 3 +#define MAX_PVP_TALENT_SLOTS 4 enum TaxiNodeFlags { @@ -1005,6 +1088,25 @@ enum TaxiPathNodeFlags TAXI_PATH_NODE_FLAG_STOP = 0x2 }; +enum UiMapSystem : int8 +{ + UI_MAP_SYSTEM_WORLD = 0, + UI_MAP_SYSTEM_TAXI = 1, + UI_MAP_SYSTEM_ADVENTURE = 2, + MAX_UI_MAP_SYSTEM = 3 +}; + +enum UiMapType : int8 +{ + UI_MAP_TYPE_COSMIC = 0, + UI_MAP_TYPE_WORLD = 1, + UI_MAP_TYPE_CONTINENT = 2, + UI_MAP_TYPE_ZONE = 3, + UI_MAP_TYPE_DUNGEON = 4, + UI_MAP_TYPE_MICRO = 5, + UI_MAP_TYPE_ORPHAN = 6, +}; + enum VehicleSeatFlags { VEHICLE_SEAT_FLAG_HAS_LOWER_ANIM_FOR_ENTER = 0x00000001, diff --git a/src/server/game/DataStores/GameTables.cpp b/src/server/game/DataStores/GameTables.cpp index 0dd01aa3930..c4232087a7c 100644 --- a/src/server/game/DataStores/GameTables.cpp +++ b/src/server/game/DataStores/GameTables.cpp @@ -29,7 +29,6 @@ GameTable<GtBarberShopCostBaseEntry> sBarberShopCostBaseGameTable; GameTable<GtBaseMPEntry> sBaseMPGameTable; GameTable<GtCombatRatingsEntry> sCombatRatingsGameTable; GameTable<GtCombatRatingsMultByILvl> sCombatRatingsMultByILvlGameTable; -GameTable<GtHonorLevelEntry> sHonorLevelGameTable; GameTable<GtHpPerStaEntry> sHpPerStaGameTable; GameTable<GtItemSocketCostPerLevelEntry> sItemSocketCostPerLevelGameTable; GameTable<GtNpcDamageByClassEntry> sNpcDamageByClassGameTable[MAX_EXPANSIONS]; @@ -118,7 +117,6 @@ void LoadGameTables(std::string const& dataPath) LOAD_GT(sCombatRatingsGameTable, "CombatRatings.txt"); LOAD_GT(sCombatRatingsMultByILvlGameTable, "CombatRatingsMultByILvl.txt"); LOAD_GT(sItemSocketCostPerLevelGameTable, "ItemSocketCostPerLevel.txt"); - LOAD_GT(sHonorLevelGameTable, "HonorLevel.txt"); LOAD_GT(sHpPerStaGameTable, "HpPerSta.txt"); LOAD_GT(sNpcDamageByClassGameTable[0], "NpcDamageByClass.txt"); LOAD_GT(sNpcDamageByClassGameTable[1], "NpcDamageByClassExp1.txt"); @@ -127,6 +125,7 @@ void LoadGameTables(std::string const& dataPath) LOAD_GT(sNpcDamageByClassGameTable[4], "NpcDamageByClassExp4.txt"); LOAD_GT(sNpcDamageByClassGameTable[5], "NpcDamageByClassExp5.txt"); LOAD_GT(sNpcDamageByClassGameTable[6], "NpcDamageByClassExp6.txt"); + LOAD_GT(sNpcDamageByClassGameTable[7], "NpcDamageByClassExp7.txt"); LOAD_GT(sNpcManaCostScalerGameTable, "NPCManaCostScaler.txt"); LOAD_GT(sNpcTotalHpGameTable[0], "NpcTotalHp.txt"); LOAD_GT(sNpcTotalHpGameTable[1], "NpcTotalHpExp1.txt"); @@ -135,6 +134,7 @@ void LoadGameTables(std::string const& dataPath) LOAD_GT(sNpcTotalHpGameTable[4], "NpcTotalHpExp4.txt"); LOAD_GT(sNpcTotalHpGameTable[5], "NpcTotalHpExp5.txt"); LOAD_GT(sNpcTotalHpGameTable[6], "NpcTotalHpExp6.txt"); + LOAD_GT(sNpcTotalHpGameTable[7], "NpcTotalHpExp7.txt"); LOAD_GT(sSpellScalingGameTable, "SpellScaling.txt"); LOAD_GT(sXpGameTable, "xp.txt"); diff --git a/src/server/game/DataStores/GameTables.h b/src/server/game/DataStores/GameTables.h index d265f2657a9..28365a7ff1c 100644 --- a/src/server/game/DataStores/GameTables.h +++ b/src/server/game/DataStores/GameTables.h @@ -103,12 +103,6 @@ struct GtCombatRatingsMultByILvl float JewelryMultiplier = 0.0f; }; -uint8 constexpr PRESTIGE_COLUMN_COUNT = 33; -struct GtHonorLevelEntry -{ - float Prestige[PRESTIGE_COLUMN_COUNT] = { }; -}; - struct GtHpPerStaEntry { float Health = 0.0f; @@ -176,6 +170,7 @@ struct GtSpellScalingEntry float Gem2 = 0.0f; float Gem3 = 0.0f; float Health = 0.0f; + float DamageReplaceStat = 0.0f; }; struct GtXpEntry @@ -214,7 +209,6 @@ TC_GAME_API extern GameTable<GtBarberShopCostBaseEntry> sBarberShopC TC_GAME_API extern GameTable<GtBaseMPEntry> sBaseMPGameTable; TC_GAME_API extern GameTable<GtCombatRatingsEntry> sCombatRatingsGameTable; TC_GAME_API extern GameTable<GtCombatRatingsMultByILvl> sCombatRatingsMultByILvlGameTable; -TC_GAME_API extern GameTable<GtHonorLevelEntry> sHonorLevelGameTable; TC_GAME_API extern GameTable<GtHpPerStaEntry> sHpPerStaGameTable; TC_GAME_API extern GameTable<GtItemSocketCostPerLevelEntry> sItemSocketCostPerLevelGameTable; TC_GAME_API extern GameTable<GtNpcDamageByClassEntry> sNpcDamageByClassGameTable[MAX_EXPANSIONS]; @@ -290,6 +284,7 @@ inline float GetSpellScalingColumnForClass(GtSpellScalingEntry const* row, int32 case CLASS_DEMON_HUNTER: return row->DemonHunter; case -1: + case -7: return row->Item; case -2: return row->Consumable; @@ -301,6 +296,8 @@ inline float GetSpellScalingColumnForClass(GtSpellScalingEntry const* row, int32 return row->Gem3; case -6: return row->Health; + case -8: + return row->DamageReplaceStat; default: break; } diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 48ea6f04f0c..3ac3cc1f9f5 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -51,7 +51,7 @@ requiredItemLevel(0) LFGDungeonData::LFGDungeonData(LFGDungeonsEntry const* dbc) : id(dbc->ID), name(dbc->Name->Str[sWorld->GetDefaultDbcLocale()]), map(dbc->MapID), type(uint8(dbc->TypeID)), expansion(uint8(dbc->ExpansionLevel)), group(uint8(dbc->GroupID)), minlevel(uint8(dbc->MinLevel)), maxlevel(uint8(dbc->MaxLevel)), difficulty(Difficulty(dbc->DifficultyID)), -seasonal((dbc->Flags & LFG_FLAG_SEASONAL) != 0), x(0.0f), y(0.0f), z(0.0f), o(0.0f), +seasonal((dbc->Flags[0] & LFG_FLAG_SEASONAL) != 0), x(0.0f), y(0.0f), z(0.0f), o(0.0f), requiredItemLevel(0) { } diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp index b03bdab76ce..4e4e70e1b0a 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp @@ -46,7 +46,8 @@ AreaTrigger::AreaTrigger() : WorldObject(false), MapObject(), _aurEff(nullptr), m_objectType |= TYPEMASK_AREATRIGGER; m_objectTypeId = TYPEID_AREATRIGGER; - m_updateFlag = UPDATEFLAG_STATIONARY_POSITION | UPDATEFLAG_AREATRIGGER; + m_updateFlag.Stationary = true; + m_updateFlag.AreaTrigger = true; m_valuesCount = AREATRIGGER_END; _dynamicValuesCount = AREATRIGGER_DYNAMIC_END; @@ -142,7 +143,7 @@ bool AreaTrigger::Create(uint32 spellMiscId, Unit* caster, Unit* target, SpellIn { AreaTriggerCircularMovementInfo cmi = GetMiscTemplate()->CircularMovementInfo; if (target && GetTemplate()->HasFlag(AREATRIGGER_FLAG_HAS_ATTACHED)) - cmi.TargetGUID = target->GetGUID(); + cmi.PathTarget = target->GetGUID(); else cmi.Center = pos; @@ -637,12 +638,12 @@ void AreaTrigger::InitSplines(std::vector<G3D::Vector3> splinePoints, uint32 tim { if (_reachedDestination) { - WorldPackets::AreaTrigger::AreaTriggerReShape reshape; + WorldPackets::AreaTrigger::AreaTriggerRePath reshape; reshape.TriggerGUID = GetGUID(); SendMessageToSet(reshape.Write(), true); } - WorldPackets::AreaTrigger::AreaTriggerReShape reshape; + WorldPackets::AreaTrigger::AreaTriggerRePath reshape; reshape.TriggerGUID = GetGUID(); reshape.AreaTriggerSpline = boost::in_place(); reshape.AreaTriggerSpline->ElapsedTimeForMovement = GetElapsedTimeForMovement(); @@ -664,7 +665,7 @@ bool AreaTrigger::HasSplines() const void AreaTrigger::InitCircularMovement(AreaTriggerCircularMovementInfo const& cmi, uint32 timeToTarget) { // Circular movement requires either a center position or an attached unit - ASSERT(cmi.Center.is_initialized() || cmi.TargetGUID.is_initialized()); + ASSERT(cmi.Center.is_initialized() || cmi.PathTarget.is_initialized()); // should be sent in object create packets only m_uint32Values[AREATRIGGER_TIME_TO_TARGET] = timeToTarget; @@ -676,7 +677,7 @@ void AreaTrigger::InitCircularMovement(AreaTriggerCircularMovementInfo const& cm if (IsInWorld()) { - WorldPackets::AreaTrigger::AreaTriggerReShape reshape; + WorldPackets::AreaTrigger::AreaTriggerRePath reshape; reshape.TriggerGUID = GetGUID(); reshape.AreaTriggerCircularMovement = _circularMovementInfo; @@ -691,11 +692,11 @@ bool AreaTrigger::HasCircularMovement() const Position const* AreaTrigger::GetCircularMovementCenterPosition() const { - if (_circularMovementInfo.is_initialized()) + if (!_circularMovementInfo.is_initialized()) return nullptr; - if (_circularMovementInfo->TargetGUID.is_initialized()) - if (WorldObject* center = ObjectAccessor::GetWorldObject(*this, *_circularMovementInfo->TargetGUID)) + if (_circularMovementInfo->PathTarget.is_initialized()) + if (WorldObject* center = ObjectAccessor::GetWorldObject(*this, *_circularMovementInfo->PathTarget)) return center; if (_circularMovementInfo->Center.is_initialized()) diff --git a/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.cpp b/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.cpp index 633988b17b0..431c4cc7d57 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.cpp +++ b/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.cpp @@ -96,6 +96,9 @@ AreaTriggerMiscTemplate::AreaTriggerMiscTemplate() MorphCurveId = 0; FacingCurveId = 0; + AnimId = 0; + AnimKitId = 0; + DecalPropertiesId = 0; TimeToTarget = 0; diff --git a/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h b/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h index 35be0f40f7f..2371c65cf09 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h +++ b/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h @@ -36,10 +36,11 @@ enum AreaTriggerFlags AREATRIGGER_FLAG_HAS_FOLLOWS_TERRAIN = 0x00010, // NYI AREATRIGGER_FLAG_UNK1 = 0x00020, AREATRIGGER_FLAG_HAS_TARGET_ROLL_PITCH_YAW = 0x00040, // NYI - AREATRIGGER_FLAG_UNK2 = 0x00080, + AREATRIGGER_FLAG_HAS_ANIM_ID = 0x00080, AREATRIGGER_FLAG_UNK3 = 0x00100, - AREATRIGGER_FLAG_UNK4 = 0x00200, - AREATRIGGER_FLAG_HAS_CIRCULAR_MOVEMENT = 0x00400 + AREATRIGGER_FLAG_HAS_ANIM_KIT_ID = 0x00200, + AREATRIGGER_FLAG_HAS_CIRCULAR_MOVEMENT = 0x00400, + AREATRIGGER_FLAG_UNK5 = 0x00800, }; enum AreaTriggerTypes @@ -96,7 +97,7 @@ struct AreaTriggerScaleInfo struct AreaTriggerCircularMovementInfo { - Optional<ObjectGuid> TargetGUID; + Optional<ObjectGuid> PathTarget; Optional<TaggedPosition<Position::XYZ>> Center; bool CounterClockwise = false; bool CanLoop = false; @@ -190,6 +191,9 @@ public: uint32 MorphCurveId; uint32 FacingCurveId; + int32 AnimId; + int32 AnimKitId; + uint32 DecalPropertiesId; uint32 TimeToTarget; diff --git a/src/server/game/Entities/Conversation/Conversation.cpp b/src/server/game/Entities/Conversation/Conversation.cpp index 13339f3169f..0445f8ff6bc 100644 --- a/src/server/game/Entities/Conversation/Conversation.cpp +++ b/src/server/game/Entities/Conversation/Conversation.cpp @@ -30,7 +30,8 @@ Conversation::Conversation() : WorldObject(false), _duration(0) m_objectType |= TYPEMASK_CONVERSATION; m_objectTypeId = TYPEID_CONVERSATION; - m_updateFlag = UPDATEFLAG_STATIONARY_POSITION; + m_updateFlag.Stationary = true; + m_updateFlag.Conversation = true; m_valuesCount = CONVERSATION_END; _dynamicValuesCount = CONVERSATION_DYNAMIC_END; @@ -123,13 +124,15 @@ bool Conversation::Create(ObjectGuid::LowType lowGuid, uint32 conversationEntry, SetUInt32Value(CONVERSATION_LAST_LINE_END_TIME, conversationTemplate->LastLineEndTime); _duration = conversationTemplate->LastLineEndTime; + _textureKitId = conversationTemplate->TextureKitId; for (uint16 actorIndex = 0; actorIndex < conversationTemplate->Actors.size(); ++actorIndex) { if (ConversationActorTemplate const* actor = conversationTemplate->Actors[actorIndex]) { ConversationDynamicFieldActor actorField; - actorField.ActorTemplate = *actor; + actorField.ActorTemplate.CreatureId = actor->CreatureId; + actorField.ActorTemplate.CreatureModelId = actor->CreatureModelId; actorField.Type = ConversationDynamicFieldActor::ActorType::CreatureActor; SetDynamicStructuredValue(CONVERSATION_DYNAMIC_FIELD_ACTORS, actorIndex, &actorField); } diff --git a/src/server/game/Entities/Conversation/Conversation.h b/src/server/game/Entities/Conversation/Conversation.h index 860264b1de8..ddc44ddfea9 100644 --- a/src/server/game/Entities/Conversation/Conversation.h +++ b/src/server/game/Entities/Conversation/Conversation.h @@ -47,8 +47,11 @@ struct ConversationDynamicFieldActor union { ObjectGuid ActorGuid; - - ConversationActorTemplate ActorTemplate; + struct + { + uint32 CreatureId; + uint32 CreatureModelId; + } ActorTemplate; struct { @@ -75,6 +78,7 @@ class TC_GAME_API Conversation : public WorldObject, public GridObject<Conversat void Update(uint32 diff) override; void Remove(); int32 GetDuration() const { return _duration; } + uint32 GetTextureKitId() const { return _textureKitId; } static Conversation* CreateConversation(uint32 conversationEntry, Unit* creator, Position const& pos, GuidUnorderedSet&& participants, SpellInfo const* spellInfo = nullptr); bool Create(ObjectGuid::LowType lowGuid, uint32 conversationEntry, Map* map, Unit* creator, Position const& pos, GuidUnorderedSet&& participants, SpellInfo const* spellInfo = nullptr); @@ -95,6 +99,7 @@ class TC_GAME_API Conversation : public WorldObject, public GridObject<Conversat Position _stationaryPosition; ObjectGuid _creatorGuid; uint32 _duration; + uint32 _textureKitId; GuidUnorderedSet _participants; }; diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp index a62b2ecbbc1..a2956b61cb3 100644 --- a/src/server/game/Entities/Corpse/Corpse.cpp +++ b/src/server/game/Entities/Corpse/Corpse.cpp @@ -33,7 +33,7 @@ Corpse::Corpse(CorpseType type) : WorldObject(type != CORPSE_BONES), m_type(type m_objectType |= TYPEMASK_CORPSE; m_objectTypeId = TYPEID_CORPSE; - m_updateFlag = UPDATEFLAG_STATIONARY_POSITION; + m_updateFlag.Stationary = true; m_valuesCount = CORPSE_END; _dynamicValuesCount = CORPSE_DYNAMIC_END; diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index e0f03a7717e..fde7d49a943 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -77,68 +77,67 @@ VendorItem const* VendorItemData::FindItemCostPair(uint32 item_id, uint32 extend return nullptr; } -uint32 CreatureTemplate::GetRandomValidModelId() const -{ - uint8 c = 0; - uint32 modelIDs[4]; - - if (Modelid1) modelIDs[c++] = Modelid1; - if (Modelid2) modelIDs[c++] = Modelid2; - if (Modelid3) modelIDs[c++] = Modelid3; - if (Modelid4) modelIDs[c++] = Modelid4; - - return ((c>0) ? modelIDs[urand(0, c-1)] : 0); -} +CreatureModel const CreatureModel::DefaultInvisibleModel(11686, 1.0f, 1.0f); +CreatureModel const CreatureModel::DefaultVisibleModel(17519, 1.0f, 1.0f); -uint32 CreatureTemplate::GetFirstValidModelId() const +CreatureModel const* CreatureTemplate::GetModelByIdx(uint32 idx) const { - if (Modelid1) return Modelid1; - if (Modelid2) return Modelid2; - if (Modelid3) return Modelid3; - if (Modelid4) return Modelid4; - return 0; + return idx < Models.size() ? &Models[idx] : nullptr; } -uint32 CreatureTemplate::GetFirstInvisibleModel() const +CreatureModel const* CreatureTemplate::GetRandomValidModel() const { - CreatureModelInfo const* modelInfo = sObjectMgr->GetCreatureModelInfo(Modelid1); - if (modelInfo && modelInfo->is_trigger) - return Modelid1; + if (!Models.size()) + return nullptr; - modelInfo = sObjectMgr->GetCreatureModelInfo(Modelid2); - if (modelInfo && modelInfo->is_trigger) - return Modelid2; + // If only one element, ignore the Probability (even if 0) + if (Models.size() == 1) + return &Models[0]; - modelInfo = sObjectMgr->GetCreatureModelInfo(Modelid3); - if (modelInfo && modelInfo->is_trigger) - return Modelid3; + auto selectedItr = Trinity::Containers::SelectRandomWeightedContainerElement(Models, [](CreatureModel const& model) + { + return model.Probability; + }); - modelInfo = sObjectMgr->GetCreatureModelInfo(Modelid4); - if (modelInfo && modelInfo->is_trigger) - return Modelid4; + return &(*selectedItr); +} - return 11686; +CreatureModel const* CreatureTemplate::GetFirstValidModel() const +{ + for (CreatureModel const& model : Models) + if (model.CreatureDisplayID) + return &model; + + return nullptr; } -uint32 CreatureTemplate::GetFirstVisibleModel() const +CreatureModel const* CreatureTemplate::GetModelWithDisplayId(uint32 displayId) const { - CreatureModelInfo const* modelInfo = sObjectMgr->GetCreatureModelInfo(Modelid1); - if (modelInfo && !modelInfo->is_trigger) - return Modelid1; + for (CreatureModel const& model : Models) + if (displayId == model.CreatureDisplayID) + return &model; - modelInfo = sObjectMgr->GetCreatureModelInfo(Modelid2); - if (modelInfo && !modelInfo->is_trigger) - return Modelid2; + return nullptr; +} - modelInfo = sObjectMgr->GetCreatureModelInfo(Modelid3); - if (modelInfo && !modelInfo->is_trigger) - return Modelid3; +CreatureModel const* CreatureTemplate::GetFirstInvisibleModel() const +{ + for (CreatureModel const& model : Models) + if (CreatureModelInfo const* modelInfo = sObjectMgr->GetCreatureModelInfo(model.CreatureDisplayID)) + if (modelInfo && modelInfo->is_trigger) + return &model; + + return &CreatureModel::DefaultInvisibleModel; +} - modelInfo = sObjectMgr->GetCreatureModelInfo(Modelid4); - if (modelInfo && !modelInfo->is_trigger) - return Modelid4; +CreatureModel const* CreatureTemplate::GetFirstVisibleModel() const +{ + for (CreatureModel const& model : Models) + if (CreatureModelInfo const* modelInfo = sObjectMgr->GetCreatureModelInfo(model.CreatureDisplayID)) + if (modelInfo && !modelInfo->is_trigger) + return &model; - return 17519; + return &CreatureModel::DefaultVisibleModel; } bool AssistDelayEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/) @@ -347,22 +346,22 @@ bool Creature::InitEntry(uint32 entry, CreatureData const* data /*= nullptr*/) SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, uint8(cinfo->unit_class)); // Cancel load if no model defined - if (!(cinfo->GetFirstValidModelId())) + if (!(cinfo->GetFirstValidModel())) { TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) has no model defined in table `creature_template`, can't load. ", entry); return false; } - uint32 displayID = ObjectMgr::ChooseDisplayId(GetCreatureTemplate(), data); - CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelRandomGender(&displayID); + CreatureModel model = *ObjectMgr::ChooseDisplayId(cinfo, data); + CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelRandomGender(&model, cinfo); if (!minfo) // Cancel load if no model defined { - TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) has invalid model %u defined in table `creature_template`, can't load.", entry, displayID); + TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) has invalid model %u defined in table `creature_template`, can't load.", entry, model.CreatureDisplayID); return false; } - SetDisplayId(displayID); - SetNativeDisplayId(displayID); + SetDisplayId(model.CreatureDisplayID, model.DisplayScale); + SetNativeDisplayId(model.CreatureDisplayID, model.DisplayScale); SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, minfo->gender); // Load creature equipment @@ -388,7 +387,7 @@ bool Creature::InitEntry(uint32 entry, CreatureData const* data /*= nullptr*/) SetSpeedRate(MOVE_SWIM, 1.0f); // using 1.0 rate SetSpeedRate(MOVE_FLIGHT, 1.0f); // using 1.0 rate - // Will set UNIT_FIELD_BOUNDINGRADIUS and UNIT_FIELD_COMBATREACH + // Will set UNIT_FIELD_BOUNDINGRADIUS, UNIT_FIELD_COMBATREACH and UNIT_FIELD_DISPLAYSCALE SetObjectScale(cinfo->scale); SetFloatValue(UNIT_FIELD_HOVERHEIGHT, cinfo->HoverHeight); @@ -434,6 +433,8 @@ bool Creature::UpdateEntry(uint32 entry, CreatureData const* data /*= nullptr*/, SetUInt32Value(OBJECT_DYNAMIC_FLAGS, dynamicFlags); + SetUInt32Value(UNIT_FIELD_STATE_ANIM_ID, sAnimationDataStore.GetNumRows()); + RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); SetBaseAttackTime(BASE_ATTACK, cInfo->BaseAttackTime); @@ -894,7 +895,8 @@ bool Creature::Create(ObjectGuid::LowType guidlow, Map* map, uint32 entry, float if (!CreateFromProto(guidlow, entry, data, vehId)) return false; - switch (GetCreatureTemplate()->rank) + cinfo = GetCreatureTemplate(); // might be different than initially requested + switch (cinfo->rank) { case CREATURE_ELITE_RARE: m_corpseDelay = sWorld->getIntConfig(CONFIG_CORPSE_DECAY_RARE); @@ -924,12 +926,12 @@ bool Creature::Create(ObjectGuid::LowType guidlow, Map* map, uint32 entry, float Relocate(x, y, z, ang); } - uint32 displayID = GetNativeDisplayId(); - CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelRandomGender(&displayID); + CreatureModel display(GetNativeDisplayId(), GetNativeDisplayScale(), 1.0f); + CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelRandomGender(&display, cinfo); if (minfo && !IsTotem()) // Cancel load if no model defined or if totem { - SetDisplayId(displayID); - SetNativeDisplayId(displayID); + SetDisplayId(display.CreatureDisplayID, display.DisplayScale); + SetNativeDisplayId(display.CreatureDisplayID, display.DisplayScale); SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, minfo->gender); } @@ -942,10 +944,10 @@ bool Creature::Create(ObjectGuid::LowType guidlow, Map* map, uint32 entry, float m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST); } - if (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_IGNORE_PATHFINDING) + if (cinfo->flags_extra & CREATURE_FLAG_EXTRA_IGNORE_PATHFINDING) AddUnitState(UNIT_STATE_IGNORE_PATHFINDING); - if (GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_IMMUNITY_KNOCKBACK) + if (cinfo->flags_extra & CREATURE_FLAG_EXTRA_IMMUNITY_KNOCKBACK) { ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true); ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK_DEST, true); @@ -1129,9 +1131,9 @@ void Creature::SaveToDB(uint32 mapid, std::vector<Difficulty> const& spawnDiffic CreatureTemplate const* cinfo = GetCreatureTemplate(); if (cinfo) { - if (displayId == cinfo->Modelid1 || displayId == cinfo->Modelid2 || - displayId == cinfo->Modelid3 || displayId == cinfo->Modelid4) - displayId = 0; + for (CreatureModel model : cinfo->Models) + if (displayId && displayId == model.CreatureDisplayID) + displayId = 0; if (npcflag == cinfo->npcflag) npcflag = 0; @@ -1844,12 +1846,12 @@ void Creature::Respawn(bool force) setDeathState(JUST_RESPAWNED); - uint32 displayID = GetNativeDisplayId(); - CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelRandomGender(&displayID); + CreatureModel display(GetNativeDisplayId(), GetNativeDisplayScale(), 1.0f); + CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelRandomGender(&display, GetCreatureTemplate()); if (minfo) // Cancel load if no model defined { - SetDisplayId(displayID); - SetNativeDisplayId(displayID); + SetDisplayId(display.CreatureDisplayID, display.DisplayScale); + SetNativeDisplayId(display.CreatureDisplayID, display.DisplayScale); SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, minfo->gender); } @@ -2575,7 +2577,7 @@ uint8 Creature::GetLevelForTarget(WorldObject const* target) const uint8 targetLevelWithDelta = unitTarget->getLevel() + GetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA); if (target->IsPlayer()) - targetLevelWithDelta += target->GetUInt32Value(PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA); + targetLevelWithDelta += target->GetUInt32Value(ACTIVE_PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA); return RoundToInterval<uint8>(targetLevelWithDelta, GetUInt32Value(UNIT_FIELD_SCALING_LEVEL_MIN), GetUInt32Value(UNIT_FIELD_SCALING_LEVEL_MAX)); } @@ -2853,9 +2855,9 @@ void Creature::SetObjectScale(float scale) } } -void Creature::SetDisplayId(uint32 modelId) +void Creature::SetDisplayId(uint32 modelId, float displayScale /*= 1.f*/) { - Unit::SetDisplayId(modelId); + Unit::SetDisplayId(modelId, displayScale); if (CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelInfo(modelId)) { @@ -2864,6 +2866,12 @@ void Creature::SetDisplayId(uint32 modelId) } } +void Creature::SetDisplayFromModel(uint32 modelIdx) +{ + if (CreatureModel const* model = GetCreatureTemplate()->GetModelByIdx(modelIdx)) + SetDisplayId(model->CreatureDisplayID, model->DisplayScale); +} + void Creature::SetTarget(ObjectGuid const& guid) { if (IsFocusing(nullptr, true)) diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index d87db9be2ca..b56fe8c9137 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -69,7 +69,8 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma void RemoveFromWorld() override; void SetObjectScale(float scale) override; - void SetDisplayId(uint32 modelId) override; + void SetDisplayId(uint32 displayId, float displayScale = 1.f) override; + void SetDisplayFromModel(uint32 modelIdx); void DisappearAndDie(); @@ -149,7 +150,6 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma bool UpdateStats(Stats stat) override; bool UpdateAllStats() override; - void UpdateResistances(uint32 school) override; void UpdateArmor() override; void UpdateMaxHealth() override; void UpdateMaxPower(Powers power) override; diff --git a/src/server/game/Entities/Creature/CreatureData.h b/src/server/game/Entities/Creature/CreatureData.h index d0d29d842e7..02fdcfbff16 100644 --- a/src/server/game/Entities/Creature/CreatureData.h +++ b/src/server/game/Entities/Creature/CreatureData.h @@ -301,16 +301,29 @@ struct CreatureLevelScaling int16 DeltaLevelMax; }; +struct CreatureModel +{ + static CreatureModel const DefaultInvisibleModel; + static CreatureModel const DefaultVisibleModel; + + CreatureModel() : + CreatureDisplayID(0), DisplayScale(0.0f), Probability(0.0f) { } + + CreatureModel(uint32 creatureDisplayID, float displayScale, float probability) : + CreatureDisplayID(creatureDisplayID), DisplayScale(displayScale), Probability(probability) { } + + uint32 CreatureDisplayID; + float DisplayScale; + float Probability; +}; + // from `creature_template` table struct TC_GAME_API CreatureTemplate { uint32 Entry; uint32 DifficultyEntry[MAX_CREATURE_DIFFICULTIES]; uint32 KillCredit[MAX_KILL_CREDIT]; - uint32 Modelid1; - uint32 Modelid2; - uint32 Modelid3; - uint32 Modelid4; + std::vector<CreatureModel> Models; std::string Name; std::string FemaleName; std::string SubName; @@ -369,10 +382,12 @@ struct TC_GAME_API CreatureTemplate uint32 MechanicImmuneMask; uint32 flags_extra; uint32 ScriptID; - uint32 GetRandomValidModelId() const; - uint32 GetFirstValidModelId() const; - uint32 GetFirstInvisibleModel() const; - uint32 GetFirstVisibleModel() const; + CreatureModel const* GetModelByIdx(uint32 idx) const; + CreatureModel const* GetRandomValidModel() const; + CreatureModel const* GetFirstValidModel() const; + CreatureModel const* GetModelWithDisplayId(uint32 displayId) const; + CreatureModel const* GetFirstInvisibleModel() const; + CreatureModel const* GetFirstVisibleModel() const; // helpers SkillType GetRequiredLootSkill() const diff --git a/src/server/game/Entities/Creature/GossipDef.cpp b/src/server/game/Entities/Creature/GossipDef.cpp index 98a253fe870..9f5b461ef8d 100644 --- a/src/server/game/Entities/Creature/GossipDef.cpp +++ b/src/server/game/Entities/Creature/GossipDef.cpp @@ -286,6 +286,7 @@ void PlayerMenu::SendPointOfInterest(uint32 id) const } WorldPackets::NPC::GossipPOI packet; + packet.ID = pointOfInterest->ID; packet.Name = pointOfInterest->Name; LocaleConstant localeConstant = _session->GetSessionDbLocaleIndex(); @@ -438,6 +439,7 @@ void PlayerMenu::SendQuestGiverQuestDetails(Quest const* quest, ObjectGuid npcGU packet.InformUnit = _session->GetPlayer()->GetDivider(); packet.QuestID = quest->GetQuestId(); packet.PortraitGiver = quest->GetQuestGiverPortrait(); + packet.PortraitGiverMount = quest->GetQuestGiverPortraitMount(); packet.PortraitTurnIn = quest->GetQuestTurnInPortrait(); packet.AutoLaunched = autoLaunched; packet.DisplayPopup = displayPopup; @@ -512,6 +514,7 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const packet.Info.QuestID = quest->GetQuestId(); packet.Info.QuestType = quest->GetQuestType(); packet.Info.QuestLevel = quest->GetQuestLevel(); + packet.Info.QuestScalingFactionGroup = quest->GetQuestScalingFactionGroup(); packet.Info.QuestMaxScalingLevel = quest->GetQuestMaxScalingLevel(); packet.Info.QuestPackageID = quest->GetQuestPackageID(); packet.Info.QuestMinLevel = quest->GetMinLevel(); @@ -543,12 +546,14 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const packet.Info.StartItem = quest->GetSrcItemId(); packet.Info.Flags = quest->GetFlags(); packet.Info.FlagsEx = quest->GetFlagsEx(); + packet.Info.FlagsEx2 = quest->GetFlagsEx2(); packet.Info.RewardTitle = quest->GetRewTitle(); packet.Info.RewardArenaPoints = quest->GetRewArenaPoints(); packet.Info.RewardSkillLineID = quest->GetRewardSkillId(); packet.Info.RewardNumSkillUps = quest->GetRewardSkillPoints(); packet.Info.RewardFactionFlags = quest->GetRewardReputationMask(); packet.Info.PortraitGiver = quest->GetQuestGiverPortrait(); + packet.Info.PortraitGiverMount = quest->GetQuestGiverPortraitMount(); packet.Info.PortraitTurnIn = quest->GetQuestTurnInPortrait(); for (uint8 i = 0; i < QUEST_ITEM_DROP_COUNT; ++i) @@ -585,7 +590,7 @@ void PlayerMenu::SendQuestQueryResponse(Quest const* quest) const packet.Info.POIPriority = quest->GetPOIPriority(); packet.Info.AllowableRaces = quest->GetAllowableRaces(); - packet.Info.QuestRewardID = quest->GetRewardId(); + packet.Info.TreasurePickerID = quest->GetTreasurePickerId(); packet.Info.Expansion = quest->GetExpansion(); for (QuestObjective const& questObjective : quest->GetObjectives()) @@ -666,6 +671,7 @@ void PlayerMenu::SendQuestGiverOfferReward(Quest const* quest, ObjectGuid npcGUI packet.PortraitTurnIn = quest->GetQuestTurnInPortrait(); packet.PortraitGiver = quest->GetQuestGiverPortrait(); + packet.PortraitGiverMount = quest->GetQuestGiverPortraitMount(); packet.QuestPackageID = quest->GetQuestPackageID(); _session->SendPacket(packet.Write()); diff --git a/src/server/game/Entities/Creature/Trainer.cpp b/src/server/game/Entities/Creature/Trainer.cpp index fb9f0af7f19..af59acb7496 100644 --- a/src/server/game/Entities/Creature/Trainer.cpp +++ b/src/server/game/Entities/Creature/Trainer.cpp @@ -24,6 +24,10 @@ namespace Trainer { + bool Spell::IsCastable() const + { + return sSpellMgr->AssertSpellInfo(SpellId)->HasEffect(SPELL_EFFECT_LEARN_SPELL); + } Trainer::Trainer(uint32 id, Type type, std::string greeting, std::vector<Spell> spells) : _id(id), _type(type), _spells(std::move(spells)) { @@ -136,9 +140,30 @@ namespace Trainer return SpellState::Unavailable; // check ranks - if (uint32 previousRankSpellId = sSpellMgr->GetPrevSpellInChain(trainerSpell->LearnedSpellId)) - if (!player->HasSpell(previousRankSpellId)) - return SpellState::Unavailable; + bool hasLearnSpellEffect = false; + bool knowsAllLearnedSpells = true; + for (SpellEffectInfo const* spellEffect : sSpellMgr->AssertSpellInfo(trainerSpell->SpellId)->GetEffectsForDifficulty(DIFFICULTY_NONE)) + { + if (!spellEffect || !spellEffect->IsEffect(SPELL_EFFECT_LEARN_SPELL)) + continue; + + hasLearnSpellEffect = true; + if (!player->HasSpell(spellEffect->TriggerSpell)) + knowsAllLearnedSpells = false; + + if (uint32 previousRankSpellId = sSpellMgr->GetPrevSpellInChain(spellEffect->TriggerSpell)) + if (!player->HasSpell(previousRankSpellId)) + return SpellState::Unavailable; + } + + if (!hasLearnSpellEffect) + { + if (uint32 previousRankSpellId = sSpellMgr->GetPrevSpellInChain(trainerSpell->SpellId)) + if (!player->HasSpell(previousRankSpellId)) + return SpellState::Unavailable; + } + else if (knowsAllLearnedSpells) + return SpellState::Known; // check additional spell requirement for (auto const& requirePair : sSpellMgr->GetSpellsRequiredForSpellBounds(trainerSpell->SpellId)) diff --git a/src/server/game/Entities/Creature/Trainer.h b/src/server/game/Entities/Creature/Trainer.h index f7e9c51dba1..20ee7deb3f5 100644 --- a/src/server/game/Entities/Creature/Trainer.h +++ b/src/server/game/Entities/Creature/Trainer.h @@ -59,8 +59,7 @@ namespace Trainer std::array<uint32, 3> ReqAbility = { }; uint8 ReqLevel = 0; - uint32 LearnedSpellId = 0; - bool IsCastable() const { return LearnedSpellId != SpellId; } + bool IsCastable() const; }; class Trainer diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.cpp b/src/server/game/Entities/DynamicObject/DynamicObject.cpp index ed5e3dc043b..8ee595cb179 100644 --- a/src/server/game/Entities/DynamicObject/DynamicObject.cpp +++ b/src/server/game/Entities/DynamicObject/DynamicObject.cpp @@ -38,7 +38,7 @@ DynamicObject::DynamicObject(bool isWorldObject) : WorldObject(isWorldObject), m_objectType |= TYPEMASK_DYNAMICOBJECT; m_objectTypeId = TYPEID_DYNAMICOBJECT; - m_updateFlag = UPDATEFLAG_STATIONARY_POSITION; + m_updateFlag.Stationary = true; m_valuesCount = DYNAMICOBJECT_END; _dynamicValuesCount = DYNAMICOBJECT_DYNAMIC_END; diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 89b59a11ab2..435ccc5c9a9 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -61,7 +61,8 @@ GameObject::GameObject() : WorldObject(false), MapObject(), m_objectType |= TYPEMASK_GAMEOBJECT; m_objectTypeId = TYPEID_GAMEOBJECT; - m_updateFlag = (UPDATEFLAG_STATIONARY_POSITION | UPDATEFLAG_ROTATION); + m_updateFlag.Stationary = true; + m_updateFlag.Rotation = true; m_valuesCount = GAMEOBJECT_END; _dynamicValuesCount = GAMEOBJECT_DYNAMIC_END; @@ -238,7 +239,7 @@ bool GameObject::Create(uint32 entry, Map* map, Position const& pos, QuaternionD else { guid = ObjectGuid::Create<HighGuid::Transport>(map->GenerateLowGuid<HighGuid::Transport>()); - m_updateFlag |= UPDATEFLAG_TRANSPORT; + m_updateFlag.ServerTime = true; } Object::_Create(guid); @@ -271,7 +272,7 @@ bool GameObject::Create(uint32 entry, Map* map, Position const& pos, QuaternionD if (m_goTemplateAddon->WorldEffectID) { - m_updateFlag |= UPDATEFLAG_GAMEOBJECT; + m_updateFlag.GameObject = true; SetWorldEffectID(m_goTemplateAddon->WorldEffectID); } } @@ -292,6 +293,8 @@ bool GameObject::Create(uint32 entry, Map* map, Position const& pos, QuaternionD SetGoState(goState); SetGoArtKit(artKit); + SetUInt32Value(GAMEOBJECT_STATE_ANIM_ID, sAnimationDataStore.GetNumRows()); + switch (goInfo->type) { case GAMEOBJECT_TYPE_FISHINGHOLE: @@ -376,7 +379,7 @@ bool GameObject::Create(uint32 entry, Map* map, Position const& pos, QuaternionD if (gameObjectAddon && gameObjectAddon->WorldEffectID) { - m_updateFlag |= UPDATEFLAG_GAMEOBJECT; + m_updateFlag.GameObject = true; SetWorldEffectID(gameObjectAddon->WorldEffectID); } diff --git a/src/server/game/Entities/GameObject/GameObjectData.h b/src/server/game/Entities/GameObject/GameObjectData.h index 3e600376a97..a699be4bcf7 100644 --- a/src/server/game/Entities/GameObject/GameObjectData.h +++ b/src/server/game/Entities/GameObject/GameObjectData.h @@ -105,7 +105,7 @@ struct GameObjectTemplate uint32 usegrouplootrules; // 15 use group loot rules, enum { false, true, }; Default: false uint32 floatingTooltip; // 16 floatingTooltip, enum { false, true, }; Default: false uint32 conditionID1; // 17 conditionID1, References: PlayerCondition, NoValue = 0 - int32 xpLevel; // 18 xpLevel, int, Min value: -1, Max value: 123, Default value: 0 + uint32 XPLevelRange; // 18 XP Level Range, References: ContentTuning, NoValue = 0 uint32 xpDifficulty; // 19 xpDifficulty, enum { No Exp, Trivial, Very Small, Small, Substandard, Standard, High, Epic, Dungeon, 5, }; Default: No Exp uint32 lootLevel; // 20 lootLevel, int, Min value: 0, Max value: 123, Default value: 0 uint32 GroupXP; // 21 Group XP, enum { false, true, }; Default: false @@ -120,6 +120,7 @@ struct GameObjectTemplate uint32 chestPersonalLoot; // 30 chest Personal Loot, References: Treasure, NoValue = 0 uint32 turnpersonallootsecurityoff; // 31 turn personal loot security off, enum { false, true, }; Default: false uint32 ChestProperties; // 32 Chest Properties, References: ChestProperties, NoValue = 0 + uint32 chestPushLoot; // 33 chest Push Loot, References: Treasure, NoValue = 0 } chest; // 4 GAMEOBJECT_TYPE_BINDER struct @@ -332,6 +333,7 @@ struct GameObjectTemplate { uint32 creatureID; // 0 creatureID, References: Creature, NoValue = 0 uint32 charges; // 1 charges, int, Min value: 0, Max value: 65535, Default value: 1 + uint32 Preferonlyifinlineofsight; // 2 Prefer only if in line of sight (expensive), enum { false, true, }; Default: false } guardPost; // 22 GAMEOBJECT_TYPE_SPELLCASTER struct @@ -503,7 +505,10 @@ struct GameObjectTemplate uint32 startOpen; // 1 startOpen, enum { false, true, }; Default: false uint32 autoClose; // 2 autoClose (ms), int, Min value: 0, Max value: 2147483647, Default value: 0 uint32 BlocksPathsDown; // 3 Blocks Paths Down, enum { false, true, }; Default: false - uint32 PathBlockerBump; // 4 Path Blocker Bump (ft), int, Min value: -2147483648, Max value: 2147483647, Default value: 0 + int32 PathBlockerBump; // 4 Path Blocker Bump (ft), int, Min value: -2147483648, Max value: 2147483647, Default value: 0 + uint32 GiganticAOI; // 5 Gigantic AOI, enum { false, true, }; Default: false + uint32 InfiniteAOI; // 6 Infinite AOI, enum { false, true, }; Default: false + uint32 DoorisOpaque; // 7 Door is Opaque (Disable portal on close), enum { false, true, }; Default: false } trapdoor; // 36 GAMEOBJECT_TYPE_NEW_FLAG struct @@ -581,7 +586,7 @@ struct GameObjectTemplate struct { int32 SpawnMap; // 0 Spawn Map, References: Map, NoValue = -1 - uint32 AreaNameSet; // 1 Area Name Set (Index), int, Min value: -2147483648, Max value: 2147483647, Default value: 0 + int32 AreaNameSet; // 1 Area Name Set (Index), int, Min value: -2147483648, Max value: 2147483647, Default value: 0 uint32 DoodadSetA; // 2 Doodad Set A, int, Min value: 0, Max value: 2147483647, Default value: 0 uint32 DoodadSetB; // 3 Doodad Set B, int, Min value: 0, Max value: 2147483647, Default value: 0 } phaseableMO; @@ -616,7 +621,7 @@ struct GameObjectTemplate // 48 GAMEOBJECT_TYPE_UI_LINK struct { - uint32 UILinkType; // 0 UI Link Type, enum { Adventure Journal, Obliterum Forge, }; Default: Adventure Journal + uint32 UILinkType; // 0 UI Link Type, enum { Adventure Journal, Obliterum Forge, Scrapping Machine, }; Default: Adventure Journal uint32 allowMounted; // 1 allowMounted, enum { false, true, }; Default: false uint32 GiganticAOI; // 2 Gigantic AOI, enum { false, true, }; Default: false uint32 spellFocusType; // 3 spellFocusType, References: SpellFocusObject, NoValue = 0 @@ -641,7 +646,7 @@ struct GameObjectTemplate uint32 openTextID; // 9 openTextID, References: BroadcastText, NoValue = 0 uint32 floatingTooltip; // 10 floatingTooltip, enum { false, true, }; Default: false uint32 conditionID1; // 11 conditionID1, References: PlayerCondition, NoValue = 0 - uint32 xpLevel; // 12 xpLevel, int, Min value: -1, Max value: 123, Default value: 0 + uint32 XPLevelRange; // 12 XP Level Range, References: ContentTuning, NoValue = 0 uint32 xpDifficulty; // 13 xpDifficulty, enum { No Exp, Trivial, Very Small, Small, Substandard, Standard, High, Epic, Dungeon, 5, }; Default: No Exp uint32 spell; // 14 spell, References: Spell, NoValue = 0 uint32 GiganticAOI; // 15 Gigantic AOI, enum { false, true, }; Default: false @@ -650,13 +655,45 @@ struct GameObjectTemplate uint32 MaxNumberofLoots; // 18 Max Number of Loots, int, Min value: 1, Max value: 40, Default value: 10 uint32 logloot; // 19 log loot, enum { false, true, }; Default: false uint32 linkedTrap; // 20 linkedTrap, References: GameObjects, NoValue = 0 + uint32 PlayOpenAnimationonOpening; // 21 Play Open Animation on Opening, enum { false, true, }; Default: false } gatheringNode; // 51 GAMEOBJECT_TYPE_CHALLENGE_MODE_REWARD struct { uint32 chestLoot; // 0 chestLoot, References: Treasure, NoValue = 0 uint32 WhenAvailable; // 1 When Available, References: GameObjectDisplayInfo, NoValue = 0 + uint32 open; // 2 open, References: Lock_, NoValue = 0 + uint32 openTextID; // 3 openTextID, References: BroadcastText, NoValue = 0 } challengeModeReward; + // 52 GAMEOBJECT_TYPE_MULTI + struct + { + uint32 MultiProperties; // 0 Multi Properties, References: MultiProperties, NoValue = 0 + } multi; + // 53 GAMEOBJECT_TYPE_SIEGEABLE_MULTI + struct + { + uint32 MultiProperties; // 0 Multi Properties, References: MultiProperties, NoValue = 0 + uint32 InitialDamage; // 1 Initial Damage, enum { None, Raw, Ratio, }; Default: None + } siegeableMulti; + // 54 GAMEOBJECT_TYPE_SIEGEABLE_MO + struct + { + uint32 SiegeableProperties; // 0 Siegeable Properties, References: SiegeableProperties, NoValue = 0 + uint32 DoodadSetA; // 1 Doodad Set A, int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 DoodadSetB; // 2 Doodad Set B, int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 DoodadSetC; // 3 Doodad Set C, int, Min value: 0, Max value: 2147483647, Default value: 0 + int32 SpawnMap; // 4 Spawn Map, References: Map, NoValue = -1 + int32 AreaNameSet; // 5 Area Name Set (Index), int, Min value: -2147483648, Max value: 2147483647, Default value: 0 + } siegeableMO; + // 55 GAMEOBJECT_TYPE_PVP_REWARD + struct + { + uint32 chestLoot; // 0 chestLoot, References: Treasure, NoValue = 0 + uint32 WhenAvailable; // 1 When Available, References: GameObjectDisplayInfo, NoValue = 0 + uint32 open; // 2 open, References: Lock_, NoValue = 0 + uint32 openTextID; // 3 openTextID, References: BroadcastText, NoValue = 0 + } pvpReward; struct { uint32 data[MAX_GAMEOBJECT_DATA]; @@ -709,6 +746,8 @@ struct GameObjectTemplate case GAMEOBJECT_TYPE_NEW_FLAG_DROP: return newflagdrop.open; case GAMEOBJECT_TYPE_CAPTURE_POINT: return capturePoint.open; case GAMEOBJECT_TYPE_GATHERING_NODE: return gatheringNode.open; + case GAMEOBJECT_TYPE_CHALLENGE_MODE_REWARD: return challengeModeReward.open; + case GAMEOBJECT_TYPE_PVP_REWARD: return pvpReward.open; default: return 0; } } diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index a146d3f0b58..847c3c47c79 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -275,8 +275,6 @@ Item::Item() m_objectType |= TYPEMASK_ITEM; m_objectTypeId = TYPEID_ITEM; - m_updateFlag = 0; - m_valuesCount = ITEM_END; _dynamicValuesCount = ITEM_DYNAMIC_END; m_slot = 0; @@ -316,14 +314,8 @@ bool Item::Create(ObjectGuid::LowType guidlow, uint32 itemId, Player const* owne SetUInt32Value(ITEM_FIELD_DURABILITY, itemProto->MaxDurability); for (std::size_t i = 0; i < itemProto->Effects.size(); ++i) - { if (i < 5) SetSpellCharges(i, itemProto->Effects[i]->Charges); - if (SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(itemProto->Effects[i]->SpellID)) - if (owner && spellInfo->HasEffect(SPELL_EFFECT_GIVE_ARTIFACT_POWER)) - if (uint32 artifactKnowledgeLevel = sWorld->getIntConfig(CONFIG_CURRENCY_START_ARTIFACT_KNOWLEDGE)) - SetModifier(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL, artifactKnowledgeLevel + 1); - } SetUInt32Value(ITEM_FIELD_DURATION, itemProto->GetDuration()); SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, 0); @@ -1709,7 +1701,7 @@ bool Item::HasStats() const ItemTemplate const* proto = GetTemplate(); Player const* owner = GetOwner(); for (uint8 i = 0; i < MAX_ITEM_PROTO_STATS; ++i) - if ((owner ? GetItemStatValue(i, owner) : proto->GetItemStatValue(i)) != 0) + if ((owner ? GetItemStatValue(i, owner) : proto->GetItemStatAllocation(i)) != 0) return true; return false; @@ -1721,7 +1713,7 @@ bool Item::HasStats(WorldPackets::Item::ItemInstance const& itemInstance, BonusD return true; for (uint8 i = 0; i < MAX_ITEM_PROTO_STATS; ++i) - if (bonus->ItemStatValue[i] != 0) + if (bonus->ItemStatAllocation[i] != 0) return true; return false; @@ -2231,9 +2223,9 @@ uint32 Item::GetItemLevel(ItemTemplate const* itemTemplate, BonusData const& bon else level = std::min(std::max(int32(level), ssd->MinLevel), ssd->MaxLevel); - if (SandboxScalingEntry const* sandbox = sSandboxScalingStore.LookupEntry(bonusData.SandboxScalingId)) - if ((sandbox->Flags & 2 || sandbox->MinLevel || sandbox->MaxLevel) && !(sandbox->Flags & 4)) - level = std::min(std::max(int32(level), sandbox->MinLevel), sandbox->MaxLevel); + if (ContentTuningEntry const* contentTuning = sContentTuningStore.LookupEntry(bonusData.ContentTuningId)) + if ((contentTuning->Flags & 2 || contentTuning->MinLevel || contentTuning->MaxLevel) && !(contentTuning->Flags & 4)) + level = std::min(std::max(int32(level), contentTuning->MinLevel), contentTuning->MaxLevel); if (uint32 heirloomIlvl = uint32(sDB2Manager.GetCurveValueAt(ssd->PlayerLevelToItemLevelCurveID, level))) itemLevel = heirloomIlvl; @@ -2276,7 +2268,7 @@ int32 Item::GetItemStatValue(uint32 index, Player const* owner) const return int32(std::floor(statValue + 0.5f)); } - return _bonusData.ItemStatValue[index]; + return 0; } ItemDisenchantLootEntry const* Item::GetDisenchantLoot(Player const* owner) const @@ -2565,8 +2557,6 @@ void Item::GiveArtifactXp(uint64 amount, Item* sourceItem, uint32 artifactCatego uint32 artifactKnowledgeLevel = 1; if (sourceItem && sourceItem->GetModifier(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL)) artifactKnowledgeLevel = sourceItem->GetModifier(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL); - else if (artifactCategoryId == ARTIFACT_CATEGORY_PRIMARY) - artifactKnowledgeLevel = sWorld->getIntConfig(CONFIG_CURRENCY_START_ARTIFACT_KNOWLEDGE) + 1; if (GtArtifactKnowledgeMultiplierEntry const* artifactKnowledge = sArtifactKnowledgeMultiplierGameTable.GetRow(artifactKnowledgeLevel)) amount = uint64(amount * artifactKnowledge->Multiplier); @@ -2598,9 +2588,9 @@ void Item::SetFixedLevel(uint8 level) { level = std::min(std::max(int32(level), ssd->MinLevel), ssd->MaxLevel); - if (SandboxScalingEntry const* sandbox = sSandboxScalingStore.LookupEntry(_bonusData.SandboxScalingId)) - if ((sandbox->Flags & 2 || sandbox->MinLevel || sandbox->MaxLevel) && !(sandbox->Flags & 4)) - level = std::min(std::max(int32(level), sandbox->MinLevel), sandbox->MaxLevel); + if (ContentTuningEntry const* contentTuning = sContentTuningStore.LookupEntry(_bonusData.ContentTuningId)) + if ((contentTuning->Flags & 2 || contentTuning->MinLevel || contentTuning->MaxLevel) && !(contentTuning->Flags & 4)) + level = std::min(std::max(int32(level), contentTuning->MinLevel), contentTuning->MaxLevel); SetModifier(ITEM_MODIFIER_SCALING_STAT_DISTRIBUTION_FIXED_LEVEL, level); } @@ -2625,9 +2615,6 @@ void BonusData::Initialize(ItemTemplate const* proto) ItemStatType[i] = proto->GetItemStatType(i); for (uint32 i = 0; i < MAX_ITEM_PROTO_STATS; ++i) - ItemStatValue[i] = proto->GetItemStatValue(i); - - for (uint32 i = 0; i < MAX_ITEM_PROTO_STATS; ++i) ItemStatAllocation[i] = proto->GetItemStatAllocation(i); for (uint32 i = 0; i < MAX_ITEM_PROTO_STATS; ++i) @@ -2646,7 +2633,7 @@ void BonusData::Initialize(ItemTemplate const* proto) AppearanceModID = 0; RepairCostMultiplier = 1.0f; ScalingStatDistribution = proto->GetScalingStatDistribution(); - SandboxScalingId = 0; + ContentTuningId = 0; RelicType = -1; HasItemLevelBonus = false; HasFixedLevel = false; @@ -2734,7 +2721,7 @@ void BonusData::AddBonus(uint32 type, int32 const (&values)[3]) if (values[1] < _state.ScalingStatDistributionPriority) { ScalingStatDistribution = static_cast<uint32>(values[0]); - SandboxScalingId = static_cast<uint32>(values[2]); + ContentTuningId = static_cast<uint32>(values[2]); _state.ScalingStatDistributionPriority = values[1]; HasFixedLevel = type == ITEM_BONUS_SCALING_STAT_DISTRIBUTION_FIXED; } diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h index a51415abcbb..6ee784c8d7d 100644 --- a/src/server/game/Entities/Item/Item.h +++ b/src/server/game/Entities/Item/Item.h @@ -78,7 +78,6 @@ struct BonusData int32 ItemLevelBonus; int32 RequiredLevel; int32 ItemStatType[MAX_ITEM_PROTO_STATS]; - int32 ItemStatValue[MAX_ITEM_PROTO_STATS]; int32 ItemStatAllocation[MAX_ITEM_PROTO_STATS]; float ItemStatSocketCostMultiplier[MAX_ITEM_PROTO_STATS]; uint32 SocketColor[MAX_ITEM_PROTO_SOCKETS]; @@ -86,7 +85,7 @@ struct BonusData uint32 AppearanceModID; float RepairCostMultiplier; uint32 ScalingStatDistribution; - uint32 SandboxScalingId; + uint32 ContentTuningId; uint32 DisenchantLootId; uint32 GemItemLevelBonus[MAX_ITEM_PROTO_SOCKETS]; int32 GemRelicType[MAX_ITEM_PROTO_SOCKETS]; diff --git a/src/server/game/Entities/Item/ItemDefines.h b/src/server/game/Entities/Item/ItemDefines.h index 107a89c6152..6b74a600d50 100644 --- a/src/server/game/Entities/Item/ItemDefines.h +++ b/src/server/game/Entities/Item/ItemDefines.h @@ -51,79 +51,82 @@ enum InventoryResult : uint8 EQUIP_ERR_TOO_FEW_TO_SPLIT = 26, // Tried to split more than number in stack. EQUIP_ERR_SPLIT_FAILED = 27, // Couldn't split those items. EQUIP_ERR_SPELL_FAILED_REAGENTS_GENERIC = 28, // Missing reagent - EQUIP_ERR_NOT_ENOUGH_MONEY = 29, // You don't have enough money. - EQUIP_ERR_NOT_A_BAG = 30, // Not a bag. - EQUIP_ERR_DESTROY_NONEMPTY_BAG = 31, // You can only do that with empty bags. - EQUIP_ERR_NOT_OWNER = 32, // You don't own that item. - EQUIP_ERR_ONLY_ONE_QUIVER = 33, // You can only equip one quiver. - EQUIP_ERR_NO_BANK_SLOT = 34, // You must purchase that bag slot first - EQUIP_ERR_NO_BANK_HERE = 35, // You are too far away from a bank. - EQUIP_ERR_ITEM_LOCKED = 36, // Item is locked. - EQUIP_ERR_GENERIC_STUNNED = 37, // You are stunned - EQUIP_ERR_PLAYER_DEAD = 38, // You can't do that when you're dead. - EQUIP_ERR_CLIENT_LOCKED_OUT = 39, // You can't do that right now. - EQUIP_ERR_INTERNAL_BAG_ERROR = 40, // Internal Bag Error - EQUIP_ERR_ONLY_ONE_BOLT = 41, // You can only equip one quiver. - EQUIP_ERR_ONLY_ONE_AMMO = 42, // You can only equip one ammo pouch. - EQUIP_ERR_CANT_WRAP_STACKABLE = 43, // Stackable items can't be wrapped. - EQUIP_ERR_CANT_WRAP_EQUIPPED = 44, // Equipped items can't be wrapped. - EQUIP_ERR_CANT_WRAP_WRAPPED = 45, // Wrapped items can't be wrapped. - EQUIP_ERR_CANT_WRAP_BOUND = 46, // Bound items can't be wrapped. - EQUIP_ERR_CANT_WRAP_UNIQUE = 47, // Unique items can't be wrapped. - EQUIP_ERR_CANT_WRAP_BAGS = 48, // Bags can't be wrapped. - EQUIP_ERR_LOOT_GONE = 49, // Already looted - EQUIP_ERR_INV_FULL = 50, // Inventory is full. - EQUIP_ERR_BANK_FULL = 51, // Your bank is full - EQUIP_ERR_VENDOR_SOLD_OUT = 52, // That item is currently sold out. - EQUIP_ERR_BAG_FULL_2 = 53, // That bag is full. - EQUIP_ERR_ITEM_NOT_FOUND_2 = 54, // The item was not found. - EQUIP_ERR_CANT_STACK_2 = 55, // This item cannot stack. - EQUIP_ERR_BAG_FULL_3 = 56, // That bag is full. - EQUIP_ERR_VENDOR_SOLD_OUT_2 = 57, // That item is currently sold out. - EQUIP_ERR_OBJECT_IS_BUSY = 58, // That object is busy. - EQUIP_ERR_CANT_BE_DISENCHANTED = 59, - EQUIP_ERR_NOT_IN_COMBAT = 60, // You can't do that while in combat - EQUIP_ERR_NOT_WHILE_DISARMED = 61, // You can't do that while disarmed - EQUIP_ERR_BAG_FULL_4 = 62, // That bag is full. - EQUIP_ERR_CANT_EQUIP_RANK = 63, // You don't have the required rank for that item - EQUIP_ERR_CANT_EQUIP_REPUTATION = 64, // You don't have the required reputation for that item - EQUIP_ERR_TOO_MANY_SPECIAL_BAGS = 65, // You cannot equip another bag of that type - EQUIP_ERR_LOOT_CANT_LOOT_THAT_NOW = 66, // You can't loot that item now. - EQUIP_ERR_ITEM_UNIQUE_EQUIPPABLE = 67, // You cannot equip more than one of those. - EQUIP_ERR_VENDOR_MISSING_TURNINS = 68, // You do not have the required items for that purchase - EQUIP_ERR_NOT_ENOUGH_HONOR_POINTS = 69, // You don't have enough honor points - EQUIP_ERR_NOT_ENOUGH_ARENA_POINTS = 70, // You don't have enough arena points - EQUIP_ERR_ITEM_MAX_COUNT_SOCKETED = 71, // You have the maximum number of those gems in your inventory or socketed into items. - EQUIP_ERR_MAIL_BOUND_ITEM = 72, // You can't mail soulbound items. - EQUIP_ERR_INTERNAL_BAG_ERROR_2 = 73, // Internal Bag Error - EQUIP_ERR_BAG_FULL_5 = 74, // That bag is full. - EQUIP_ERR_ITEM_MAX_COUNT_EQUIPPED_SOCKETED = 75, // You have the maximum number of those gems socketed into equipped items. - EQUIP_ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED = 76, // You cannot socket more than one of those gems into a single item. - EQUIP_ERR_TOO_MUCH_GOLD = 77, // At gold limit - EQUIP_ERR_NOT_DURING_ARENA_MATCH = 78, // You can't do that while in an arena match - EQUIP_ERR_TRADE_BOUND_ITEM = 79, // You can't trade a soulbound item. - EQUIP_ERR_CANT_EQUIP_RATING = 80, // You don't have the personal, team, or battleground rating required to buy that item - EQUIP_ERR_EVENT_AUTOEQUIP_BIND_CONFIRM = 81, - EQUIP_ERR_NOT_SAME_ACCOUNT = 82, // Account-bound items can only be given to your own characters. - EQUIP_ERR_NO_OUTPUT = 83, - EQUIP_ERR_ITEM_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 84, // You can only carry %d %s - EQUIP_ERR_ITEM_MAX_LIMIT_CATEGORY_SOCKETED_EXCEEDED_IS = 85, // You can only equip %d |4item:items in the %s category - EQUIP_ERR_SCALING_STAT_ITEM_LEVEL_EXCEEDED = 86, // Your level is too high to use that item - EQUIP_ERR_PURCHASE_LEVEL_TOO_LOW = 87, // You must reach level %d to purchase that item. - EQUIP_ERR_CANT_EQUIP_NEED_TALENT = 88, // You do not have the required talent to equip that. - EQUIP_ERR_ITEM_MAX_LIMIT_CATEGORY_EQUIPPED_EXCEEDED_IS = 89, // You can only equip %d |4item:items in the %s category - EQUIP_ERR_SHAPESHIFT_FORM_CANNOT_EQUIP = 90, // Cannot equip item in this form - EQUIP_ERR_ITEM_INVENTORY_FULL_SATCHEL = 91, // Your inventory is full. Your satchel has been delivered to your mailbox. - EQUIP_ERR_SCALING_STAT_ITEM_LEVEL_TOO_LOW = 92, // Your level is too low to use that item - EQUIP_ERR_CANT_BUY_QUANTITY = 93, // You can't buy the specified quantity of that item. - EQUIP_ERR_ITEM_IS_BATTLE_PAY_LOCKED = 94, // Your purchased item is still waiting to be unlocked - EQUIP_ERR_REAGENT_BANK_FULL = 95, // Your reagent bank is full - EQUIP_ERR_REAGENT_BANK_LOCKED = 96, - EQUIP_ERR_WRONG_BAG_TYPE_3 = 97, - EQUIP_ERR_CANT_USE_ITEM = 98, // You can't use that item. - EQUIP_ERR_CANT_BE_OBLITERATED = 99, // You can't obliterate that item - EQUIP_ERR_GUILD_BANK_CONJURED_ITEM = 100,// You cannot store conjured items in the guild bank - EQUIP_ERR_CANT_DO_THAT_RIGHT_NOW = 101,// You can't do that right now. + EQUIP_ERR_CANT_TRADE_GOLD = 29, // Gold may only be offered by one trader. + EQUIP_ERR_NOT_ENOUGH_MONEY = 30, // You don't have enough money. + EQUIP_ERR_NOT_A_BAG = 31, // Not a bag. + EQUIP_ERR_DESTROY_NONEMPTY_BAG = 32, // You can only do that with empty bags. + EQUIP_ERR_NOT_OWNER = 33, // You don't own that item. + EQUIP_ERR_ONLY_ONE_QUIVER = 34, // You can only equip one quiver. + EQUIP_ERR_NO_BANK_SLOT = 35, // You must purchase that bag slot first + EQUIP_ERR_NO_BANK_HERE = 36, // You are too far away from a bank. + EQUIP_ERR_ITEM_LOCKED = 37, // Item is locked. + EQUIP_ERR_GENERIC_STUNNED = 38, // You are stunned + EQUIP_ERR_PLAYER_DEAD = 39, // You can't do that when you're dead. + EQUIP_ERR_CLIENT_LOCKED_OUT = 40, // You can't do that right now. + EQUIP_ERR_INTERNAL_BAG_ERROR = 41, // Internal Bag Error + EQUIP_ERR_ONLY_ONE_BOLT = 42, // You can only equip one quiver. + EQUIP_ERR_ONLY_ONE_AMMO = 43, // You can only equip one ammo pouch. + EQUIP_ERR_CANT_WRAP_STACKABLE = 44, // Stackable items can't be wrapped. + EQUIP_ERR_CANT_WRAP_EQUIPPED = 45, // Equipped items can't be wrapped. + EQUIP_ERR_CANT_WRAP_WRAPPED = 46, // Wrapped items can't be wrapped. + EQUIP_ERR_CANT_WRAP_BOUND = 47, // Bound items can't be wrapped. + EQUIP_ERR_CANT_WRAP_UNIQUE = 48, // Unique items can't be wrapped. + EQUIP_ERR_CANT_WRAP_BAGS = 49, // Bags can't be wrapped. + EQUIP_ERR_LOOT_GONE = 50, // Already looted + EQUIP_ERR_INV_FULL = 51, // Inventory is full. + EQUIP_ERR_BANK_FULL = 52, // Your bank is full + EQUIP_ERR_VENDOR_SOLD_OUT = 53, // That item is currently sold out. + EQUIP_ERR_BAG_FULL_2 = 54, // That bag is full. + EQUIP_ERR_ITEM_NOT_FOUND_2 = 55, // The item was not found. + EQUIP_ERR_CANT_STACK_2 = 56, // This item cannot stack. + EQUIP_ERR_BAG_FULL_3 = 57, // That bag is full. + EQUIP_ERR_VENDOR_SOLD_OUT_2 = 58, // That item is currently sold out. + EQUIP_ERR_OBJECT_IS_BUSY = 59, // That object is busy. + EQUIP_ERR_CANT_BE_DISENCHANTED = 60, // Item cannot be disenchanted + EQUIP_ERR_NOT_IN_COMBAT = 61, // You can't do that while in combat + EQUIP_ERR_NOT_WHILE_DISARMED = 62, // You can't do that while disarmed + EQUIP_ERR_BAG_FULL_4 = 63, // That bag is full. + EQUIP_ERR_CANT_EQUIP_RANK = 64, // You don't have the required rank for that item + EQUIP_ERR_CANT_EQUIP_REPUTATION = 65, // You don't have the required reputation for that item + EQUIP_ERR_TOO_MANY_SPECIAL_BAGS = 66, // You cannot equip another bag of that type + EQUIP_ERR_LOOT_CANT_LOOT_THAT_NOW = 67, // You can't loot that item now. + EQUIP_ERR_ITEM_UNIQUE_EQUIPPABLE = 68, // You cannot equip more than one of those. + EQUIP_ERR_VENDOR_MISSING_TURNINS = 69, // You do not have the required items for that purchase + EQUIP_ERR_NOT_ENOUGH_HONOR_POINTS = 70, // You don't have enough honor points + EQUIP_ERR_NOT_ENOUGH_ARENA_POINTS = 71, // You don't have enough arena points + EQUIP_ERR_ITEM_MAX_COUNT_SOCKETED = 72, // You have the maximum number of those gems in your inventory or socketed into items. + EQUIP_ERR_MAIL_BOUND_ITEM = 73, // You can't mail soulbound items. + EQUIP_ERR_INTERNAL_BAG_ERROR_2 = 74, // Internal Bag Error + EQUIP_ERR_BAG_FULL_5 = 75, // That bag is full. + EQUIP_ERR_ITEM_MAX_COUNT_EQUIPPED_SOCKETED = 76, // You have the maximum number of those gems socketed into equipped items. + EQUIP_ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED = 77, // You cannot socket more than one of those gems into a single item. + EQUIP_ERR_TOO_MUCH_GOLD = 78, // At gold limit + EQUIP_ERR_NOT_DURING_ARENA_MATCH = 79, // You can't do that while in an arena match + EQUIP_ERR_TRADE_BOUND_ITEM = 80, // You can't trade a soulbound item. + EQUIP_ERR_CANT_EQUIP_RATING = 81, // You don't have the personal, team, or battleground rating required to buy that item + EQUIP_ERR_EVENT_AUTOEQUIP_BIND_CONFIRM = 82, + EQUIP_ERR_NOT_SAME_ACCOUNT = 83, // Account-bound items can only be given to your own characters. + EQUIP_NONE_3 = 84, + EQUIP_ERR_ITEM_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 85, // You can only carry %d %s + EQUIP_ERR_ITEM_MAX_LIMIT_CATEGORY_SOCKETED_EXCEEDED_IS = 86, // You can only equip %d |4item:items in the %s category + EQUIP_ERR_SCALING_STAT_ITEM_LEVEL_EXCEEDED = 87, // Your level is too high to use that item + EQUIP_ERR_PURCHASE_LEVEL_TOO_LOW = 88, // You must reach level %d to purchase that item. + EQUIP_ERR_CANT_EQUIP_NEED_TALENT = 89, // You do not have the required talent to equip that. + EQUIP_ERR_ITEM_MAX_LIMIT_CATEGORY_EQUIPPED_EXCEEDED_IS = 90, // You can only equip %d |4item:items in the %s category + EQUIP_ERR_SHAPESHIFT_FORM_CANNOT_EQUIP = 91, // Cannot equip item in this form + EQUIP_ERR_ITEM_INVENTORY_FULL_SATCHEL = 92, // Your inventory is full. Your satchel has been delivered to your mailbox. + EQUIP_ERR_SCALING_STAT_ITEM_LEVEL_TOO_LOW = 93, // Your level is too low to use that item + EQUIP_ERR_CANT_BUY_QUANTITY = 94, // You can't buy the specified quantity of that item. + EQUIP_ERR_ITEM_IS_BATTLE_PAY_LOCKED = 95, // Your purchased item is still waiting to be unlocked + EQUIP_ERR_REAGENT_BANK_FULL = 96, // Your reagent bank is full + EQUIP_ERR_REAGENT_BANK_LOCKED = 97, + EQUIP_ERR_WRONG_BAG_TYPE_3 = 98, // That item doesn't go in that container. + EQUIP_ERR_CANT_USE_ITEM = 99, // You can't use that item. + EQUIP_ERR_CANT_BE_OBLITERATED = 100,// You can't obliterate that item + EQUIP_ERR_GUILD_BANK_CONJURED_ITEM = 101,// You cannot store conjured items in the guild bank + EQUIP_ERR_CANT_DO_THAT_RIGHT_NOW = 102,// You can't do that right now. + EQUIP_ERR_BAG_FULL_6 = 103,// That bag is full. + EQUIP_ERR_CANT_BE_SCRAPPED = 104,// You can't scrap that item }; enum BuyResult diff --git a/src/server/game/Entities/Item/ItemTemplate.cpp b/src/server/game/Entities/Item/ItemTemplate.cpp index d541f70215d..abb4d47bfe8 100644 --- a/src/server/game/Entities/Item/ItemTemplate.cpp +++ b/src/server/game/Entities/Item/ItemTemplate.cpp @@ -21,7 +21,7 @@ #include "ItemTemplate.h" #include "Player.h" -uint32 const SocketColorToGemTypeMask[19] = +int32 const SocketColorToGemTypeMask[19] = { 0, SOCKET_COLOR_META, @@ -241,7 +241,7 @@ bool ItemTemplate::IsUsableByLootSpecialization(Player const* player, bool alway if (GetFlags() & ITEM_FLAG_IS_BOUND_TO_ACCOUNT && alwaysAllowBoundToAccount) return true; - uint32 spec = player->GetUInt32Value(PLAYER_FIELD_LOOT_SPEC_ID); + uint32 spec = player->GetUInt32Value(ACTIVE_PLAYER_FIELD_LOOT_SPEC_ID); if (!spec) spec = player->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID); if (!spec) diff --git a/src/server/game/Entities/Item/ItemTemplate.h b/src/server/game/Entities/Item/ItemTemplate.h index c5e83ff6bab..6e806f0c124 100644 --- a/src/server/game/Entities/Item/ItemTemplate.h +++ b/src/server/game/Entities/Item/ItemTemplate.h @@ -337,7 +337,7 @@ enum SocketColor SOCKET_COLOR_RELIC_HOLY = 0x10000 }; -extern uint32 const SocketColorToGemTypeMask[19]; +extern int32 const SocketColorToGemTypeMask[19]; #define SOCKET_COLOR_STANDARD (SOCKET_COLOR_RED | SOCKET_COLOR_YELLOW | SOCKET_COLOR_BLUE) @@ -732,7 +732,6 @@ struct TC_GAME_API ItemTemplate uint32 GetMaxCount() const { return ExtendedData->MaxCount; } uint32 GetContainerSlots() const { return ExtendedData->ContainerSlots; } int32 GetItemStatType(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_STATS); return ExtendedData->StatModifierBonusStat[index]; } - int32 GetItemStatValue(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_STATS); return ExtendedData->ItemStatValue[index]; } int32 GetItemStatAllocation(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_STATS); return ExtendedData->StatPercentEditor[index]; } float GetItemStatSocketCostMultiplier(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_STATS); return ExtendedData->StatPercentageOfSocket[index]; } uint32 GetScalingStatDistribution() const { return ExtendedData->ScalingStatDistributionID; } diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 47e07803819..2921ddf673f 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -55,7 +55,7 @@ Object::Object() { m_objectTypeId = TYPEID_OBJECT; m_objectType = TYPEMASK_OBJECT; - m_updateFlag = UPDATEFLAG_NONE; + m_updateFlag.Clear(); m_uint32Values = nullptr; _dynamicValues = nullptr; @@ -130,7 +130,6 @@ void Object::_Create(ObjectGuid const& guid) if (!m_uint32Values) _InitValues(); SetGuidValue(OBJECT_FIELD_GUID, guid); - SetUInt16Value(OBJECT_FIELD_TYPE, 0, m_objectType); } std::string Object::_ConcatFields(uint16 startIndex, uint16 size) const @@ -171,12 +170,19 @@ void Object::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) c if (!target) return; - uint8 updateType = UPDATETYPE_CREATE_OBJECT; - uint32 flags = m_updateFlag; + uint8 updateType = UPDATETYPE_CREATE_OBJECT; + uint8 objectType = m_objectTypeId; + uint16 objectTypeMask = m_objectType; + CreateObjectBits flags = m_updateFlag; /** lower flag1 **/ if (target == this) // building packet for yourself - flags |= UPDATEFLAG_SELF; + { + flags.ThisIsYou = true; + flags.ActivePlayer = true; + objectType = TYPEID_ACTIVE_PLAYER; + objectTypeMask |= TYPEMASK_ACTIVE_PLAYER; + } switch (GetGUID().GetHigh()) { @@ -209,15 +215,14 @@ void Object::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) c if (WorldObject const* worldObject = dynamic_cast<WorldObject const*>(this)) { - if (!(flags & UPDATEFLAG_LIVING)) - if (!worldObject->m_movementInfo.transport.guid.IsEmpty()) - flags |= UPDATEFLAG_TRANSPORT_POSITION; + if (!flags.MovementUpdate && !worldObject->m_movementInfo.transport.guid.IsEmpty()) + flags.MovementTransport = true; if (worldObject->GetAIAnimKitId() || worldObject->GetMovementAnimKitId() || worldObject->GetMeleeAnimKitId()) - flags |= UPDATEFLAG_ANIMKITS; + flags.AnimKit = true; } - if (flags & UPDATEFLAG_STATIONARY_POSITION) + if (flags.Stationary) { // UPDATETYPE_CREATE_OBJECT2 for some gameobject types... if (isType(TYPEMASK_GAMEOBJECT)) @@ -238,12 +243,13 @@ void Object::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) c if (Unit const* unit = ToUnit()) if (unit->GetVictim()) - flags |= UPDATEFLAG_HAS_TARGET; + flags.CombatVictim = true; ByteBuffer buf(0x400); buf << uint8(updateType); buf << GetGUID(); - buf << uint8(m_objectTypeId); + buf << uint8(objectType); + buf << uint32(objectTypeMask); BuildMovementUpdate(&buf, flags); BuildValuesUpdate(updateType, &buf, target); @@ -338,25 +344,8 @@ ObjectGuid const& Object::GetGuidValue(uint16 index) const return *((ObjectGuid*)&(m_uint32Values[index])); } -void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const -{ - bool NoBirthAnim = false; - bool EnablePortals = false; - bool PlayHoverAnim = false; - bool HasMovementUpdate = (flags & UPDATEFLAG_LIVING) != 0; - bool HasMovementTransport = (flags & UPDATEFLAG_TRANSPORT_POSITION) != 0; - bool Stationary = (flags & UPDATEFLAG_STATIONARY_POSITION) != 0; - bool CombatVictim = (flags & UPDATEFLAG_HAS_TARGET) != 0; - bool ServerTime = (flags & UPDATEFLAG_TRANSPORT) != 0; - bool VehicleCreate = (flags & UPDATEFLAG_VEHICLE) != 0; - bool AnimKitCreate = (flags & UPDATEFLAG_ANIMKITS) != 0; - bool Rotation = (flags & UPDATEFLAG_ROTATION) != 0; - bool HasAreaTrigger = (flags & UPDATEFLAG_AREATRIGGER) != 0; - bool HasGameObject = (flags & UPDATEFLAG_GAMEOBJECT) != 0; - bool ThisIsYou = (flags & UPDATEFLAG_SELF) != 0; - bool SmoothPhasing = false; - bool SceneObjCreate = false; - bool PlayerCreateData = GetTypeId() == TYPEID_PLAYER && ToUnit()->GetPowerIndex(POWER_RUNES) != MAX_POWERS; +void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags) const +{ std::vector<uint32> const* PauseTimes = nullptr; uint32 PauseTimesCount = 0; if (GameObject const* go = ToGameObject()) @@ -368,26 +357,27 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const } } - data->WriteBit(NoBirthAnim); - data->WriteBit(EnablePortals); - data->WriteBit(PlayHoverAnim); - data->WriteBit(HasMovementUpdate); - data->WriteBit(HasMovementTransport); - data->WriteBit(Stationary); - data->WriteBit(CombatVictim); - data->WriteBit(ServerTime); - data->WriteBit(VehicleCreate); - data->WriteBit(AnimKitCreate); - data->WriteBit(Rotation); - data->WriteBit(HasAreaTrigger); - data->WriteBit(HasGameObject); - data->WriteBit(SmoothPhasing); - data->WriteBit(ThisIsYou); - data->WriteBit(SceneObjCreate); - data->WriteBit(PlayerCreateData); + data->WriteBit(flags.NoBirthAnim); + data->WriteBit(flags.EnablePortals); + data->WriteBit(flags.PlayHoverAnim); + data->WriteBit(flags.MovementUpdate); + data->WriteBit(flags.MovementTransport); + data->WriteBit(flags.Stationary); + data->WriteBit(flags.CombatVictim); + data->WriteBit(flags.ServerTime); + data->WriteBit(flags.Vehicle); + data->WriteBit(flags.AnimKit); + data->WriteBit(flags.Rotation); + data->WriteBit(flags.AreaTrigger); + data->WriteBit(flags.GameObject); + data->WriteBit(flags.SmoothPhasing); + data->WriteBit(flags.ThisIsYou); + data->WriteBit(flags.SceneObject); + data->WriteBit(flags.ActivePlayer); + data->WriteBit(flags.Conversation); data->FlushBits(); - if (HasMovementUpdate) + if (flags.MovementUpdate) { Unit const* unit = ToUnit(); bool HasFallDirection = unit->HasUnitMovementFlag(MOVEMENTFLAG_FALLING); @@ -458,6 +448,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const // *data << uint32(TransportID); // *data << float(Magnitude); // data->WriteBits(Type, 2); + // data->FlushBits(); //} if (HasSpline) @@ -466,7 +457,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const *data << uint32(PauseTimesCount); - if (Stationary) + if (flags.Stationary) { WorldObject const* self = static_cast<WorldObject const*>(this); *data << float(self->GetStationaryX()); @@ -475,10 +466,10 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const *data << float(self->GetStationaryO()); } - if (CombatVictim) + if (flags.CombatVictim) *data << ToUnit()->GetVictim()->GetGUID(); // CombatVictim - if (ServerTime) + if (flags.ServerTime) { GameObject const* go = ToGameObject(); /** @TODO Use IsTransport() to also handle type 11 (TRANSPORT) @@ -492,14 +483,14 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const *data << uint32(getMSTime()); } - if (VehicleCreate) + if (flags.Vehicle) { Unit const* unit = ToUnit(); *data << uint32(unit->GetVehicleKit()->GetVehicleInfo()->ID); // RecID *data << float(unit->GetOrientation()); // InitialRawFacing } - if (AnimKitCreate) + if (flags.AnimKit) { WorldObject const* self = static_cast<WorldObject const*>(this); *data << uint16(self->GetAIAnimKitId()); // AiID @@ -507,19 +498,19 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const *data << uint16(self->GetMeleeAnimKitId()); // MeleeID } - if (Rotation) + if (flags.Rotation) *data << uint64(ToGameObject()->GetPackedWorldRotation()); // Rotation if (PauseTimesCount) data->append(PauseTimes->data(), PauseTimes->size()); - if (HasMovementTransport) + if (flags.MovementTransport) { WorldObject const* self = static_cast<WorldObject const*>(this); *data << self->m_movementInfo.transport; } - if (HasAreaTrigger) + if (flags.AreaTrigger) { AreaTrigger const* areaTrigger = ToAreaTrigger(); AreaTriggerMiscTemplate const* areaTriggerMiscTemplate = areaTrigger->GetMiscTemplate(); @@ -540,9 +531,10 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const bool hasMorphCurveID = areaTriggerMiscTemplate->MorphCurveId != 0; bool hasFacingCurveID = areaTriggerMiscTemplate->FacingCurveId != 0; bool hasMoveCurveID = areaTriggerMiscTemplate->MoveCurveId != 0; - bool hasUnk2 = areaTriggerTemplate->HasFlag(AREATRIGGER_FLAG_UNK2); + bool hasAnimation = areaTriggerTemplate->HasFlag(AREATRIGGER_FLAG_HAS_ANIM_ID); bool hasUnk3 = areaTriggerTemplate->HasFlag(AREATRIGGER_FLAG_UNK3); - bool hasUnk4 = areaTriggerTemplate->HasFlag(AREATRIGGER_FLAG_UNK4); + bool hasAnimKitID = areaTriggerTemplate->HasFlag(AREATRIGGER_FLAG_HAS_ANIM_KIT_ID); + bool hasAnimProgress = false; bool hasAreaTriggerSphere = areaTriggerTemplate->IsSphere(); bool hasAreaTriggerBox = areaTriggerTemplate->IsBox(); bool hasAreaTriggerPolygon = areaTriggerTemplate->IsPolygon(); @@ -561,9 +553,10 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const data->WriteBit(hasMorphCurveID); data->WriteBit(hasFacingCurveID); data->WriteBit(hasMoveCurveID); - data->WriteBit(hasUnk2); + data->WriteBit(hasAnimation); + data->WriteBit(hasAnimKitID); data->WriteBit(hasUnk3); - data->WriteBit(hasUnk4); + data->WriteBit(hasAnimProgress); data->WriteBit(hasAreaTriggerSphere); data->WriteBit(hasAreaTriggerBox); data->WriteBit(hasAreaTriggerPolygon); @@ -599,10 +592,13 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const if (hasMoveCurveID) *data << uint32(areaTriggerMiscTemplate->MoveCurveId); - if (hasUnk2) - *data << int32(0); + if (hasAnimation) + *data << int32(areaTriggerMiscTemplate->AnimId); + + if (hasAnimKitID) + *data << int32(areaTriggerMiscTemplate->AnimKitId); - if (hasUnk4) + if (hasAnimProgress) *data << uint32(0); if (hasAreaTriggerSphere) @@ -649,7 +645,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const *data << *areaTrigger->GetCircularMovementInfo(); } - if (HasGameObject) + if (flags.GameObject) { bool bit8 = false; uint32 Int1 = 0; @@ -664,7 +660,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const *data << uint32(Int1); } - //if (SmoothPhasing) + //if (flags.SmoothPhasing) //{ // data->WriteBit(ReplaceActive); // data->WriteBit(HasReplaceObject); @@ -673,7 +669,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const // *data << ObjectGuid(ReplaceObject); //} - //if (SceneObjCreate) + //if (flags.SceneObject) //{ // data->WriteBit(HasLocalScriptData); // data->WriteBit(HasPetBattleFullUpdate); @@ -783,7 +779,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const // } //} - if (PlayerCreateData) + if (flags.ActivePlayer) { bool HasSceneInstanceIDs = false; bool HasRuneState = ToUnit()->GetPowerIndex(POWER_RUNES) != MAX_POWERS; @@ -810,6 +806,15 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint32 flags) const *data << uint8((baseCd - float(player->GetRuneCooldown(i))) / baseCd * 255); } } + + if (flags.Conversation) + { + Conversation const* self = ToConversation(); + if (data->WriteBit(self->GetTextureKitId() != 0)) + *data << uint32(self->GetTextureKitId()); + + data->FlushBits(); + } } void Object::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) const @@ -843,7 +848,11 @@ void Object::BuildDynamicValuesUpdate(uint8 updateType, ByteBuffer* data, Player if (!target) return; - std::size_t blockCount = UpdateMask::GetBlockCount(_dynamicValuesCount); + std::size_t valueCount = _dynamicValuesCount; + if (target != this && GetTypeId() == TYPEID_PLAYER) + valueCount = PLAYER_DYNAMIC_END; + + std::size_t blockCount = UpdateMask::GetBlockCount(valueCount); uint32* flags = nullptr; uint32 visibleFlag = GetDynamicUpdateFieldData(target, flags); @@ -852,7 +861,7 @@ void Object::BuildDynamicValuesUpdate(uint8 updateType, ByteBuffer* data, Player std::size_t maskPos = data->wpos(); data->resize(data->size() + blockCount * sizeof(UpdateMask::BlockType)); - for (uint16 index = 0; index < _dynamicValuesCount; ++index) + for (uint16 index = 0; index < valueCount; ++index) { std::vector<uint32> const& values = _dynamicValues[index]; if (_fieldNotifyFlags & flags[index] || @@ -928,7 +937,17 @@ uint32 Object::GetUpdateFieldData(Player const* target, uint32*& flags) const { case TYPEID_ITEM: case TYPEID_CONTAINER: - flags = ItemUpdateFieldFlags; + flags = ContainerUpdateFieldFlags; + if (((Item const*)this)->GetOwnerGUID() == target->GetGUID()) + visibleFlag |= UF_FLAG_OWNER | UF_FLAG_ITEM_OWNER; + break; + case TYPEID_AZERITE_EMPOWERED_ITEM: + flags = AzeriteEmpoweredItemUpdateFieldFlags; + if (((Item const*)this)->GetOwnerGUID() == target->GetGUID()) + visibleFlag |= UF_FLAG_OWNER | UF_FLAG_ITEM_OWNER; + break; + case TYPEID_AZERITE_ITEM: + flags = AzeriteItemUpdateFieldFlags; if (((Item const*)this)->GetOwnerGUID() == target->GetGUID()) visibleFlag |= UF_FLAG_OWNER | UF_FLAG_ITEM_OWNER; break; @@ -973,6 +992,7 @@ uint32 Object::GetUpdateFieldData(Player const* target, uint32*& flags) const flags = ConversationUpdateFieldFlags; break; case TYPEID_OBJECT: + case TYPEID_ACTIVE_PLAYER: ABORT(); break; } @@ -991,6 +1011,8 @@ uint32 Object::GetDynamicUpdateFieldData(Player const* target, uint32*& flags) c { case TYPEID_ITEM: case TYPEID_CONTAINER: + case TYPEID_AZERITE_EMPOWERED_ITEM: + case TYPEID_AZERITE_ITEM: flags = ItemDynamicUpdateFieldFlags; if (((Item const*)this)->GetOwnerGUID() == target->GetGUID()) visibleFlag |= UF_FLAG_OWNER | UF_FLAG_ITEM_OWNER; @@ -2983,7 +3005,7 @@ struct WorldObjectChangeAccumulator { //Caster may be NULL if DynObj is in removelist if (Player* caster = ObjectAccessor::FindPlayer(guid)) - if (caster->GetGuidValue(PLAYER_FARSIGHT) == source->GetGUID()) + if (caster->GetGuidValue(ACTIVE_PLAYER_FIELD_FARSIGHT) == source->GetGUID()) BuildPacket(caster); } } diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 7823a2a2a68..17979a441a8 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -55,6 +55,33 @@ struct QuaternionData; typedef std::unordered_map<Player*, UpdateData> UpdateDataMapType; +struct CreateObjectBits +{ + bool NoBirthAnim : 1; + bool EnablePortals : 1; + bool PlayHoverAnim : 1; + bool MovementUpdate : 1; + bool MovementTransport : 1; + bool Stationary : 1; + bool CombatVictim : 1; + bool ServerTime : 1; + bool Vehicle : 1; + bool AnimKit : 1; + bool Rotation : 1; + bool AreaTrigger : 1; + bool GameObject : 1; + bool SmoothPhasing : 1; + bool ThisIsYou : 1; + bool SceneObject : 1; + bool ActivePlayer : 1; + bool Conversation : 1; + + void Clear() + { + memset(this, 0, sizeof(CreateObjectBits)); + } +}; + namespace UpdateMask { typedef uint32 BlockType; @@ -299,14 +326,14 @@ class TC_GAME_API Object uint32 GetUpdateFieldData(Player const* target, uint32*& flags) const; uint32 GetDynamicUpdateFieldData(Player const* target, uint32*& flags) const; - void BuildMovementUpdate(ByteBuffer* data, uint32 flags) const; + void BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags) const; virtual void BuildValuesUpdate(uint8 updatetype, ByteBuffer* data, Player* target) const; virtual void BuildDynamicValuesUpdate(uint8 updatetype, ByteBuffer* data, Player* target) const; uint16 m_objectType; TypeID m_objectTypeId; - uint32 m_updateFlag; + CreateObjectBits m_updateFlag; union { diff --git a/src/server/game/Entities/Object/ObjectGuid.cpp b/src/server/game/Entities/Object/ObjectGuid.cpp index d5094aea2b0..f8ee803ed22 100644 --- a/src/server/game/Entities/Object/ObjectGuid.cpp +++ b/src/server/game/Entities/Object/ObjectGuid.cpp @@ -87,6 +87,7 @@ namespace SET_GUID_NAME(CommerceObj); SET_GUID_NAME(ClientSession); SET_GUID_NAME(Cast); + SET_GUID_NAME(ClientConnection); #undef SET_GUID_NAME } diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h index 941608f9493..0584c0d7262 100644 --- a/src/server/game/Entities/Object/ObjectGuid.h +++ b/src/server/game/Entities/Object/ObjectGuid.h @@ -30,35 +30,41 @@ enum TypeID { - TYPEID_OBJECT = 0, - TYPEID_ITEM = 1, - TYPEID_CONTAINER = 2, - TYPEID_UNIT = 3, - TYPEID_PLAYER = 4, - TYPEID_GAMEOBJECT = 5, - TYPEID_DYNAMICOBJECT = 6, - TYPEID_CORPSE = 7, - TYPEID_AREATRIGGER = 8, - TYPEID_SCENEOBJECT = 9, - TYPEID_CONVERSATION = 10 + TYPEID_OBJECT = 0, + TYPEID_ITEM = 1, + TYPEID_CONTAINER = 2, + TYPEID_AZERITE_EMPOWERED_ITEM = 3, + TYPEID_AZERITE_ITEM = 4, + TYPEID_UNIT = 5, + TYPEID_PLAYER = 6, + TYPEID_ACTIVE_PLAYER = 7, + TYPEID_GAMEOBJECT = 8, + TYPEID_DYNAMICOBJECT = 9, + TYPEID_CORPSE = 10, + TYPEID_AREATRIGGER = 11, + TYPEID_SCENEOBJECT = 12, + TYPEID_CONVERSATION = 13 }; -#define NUM_CLIENT_OBJECT_TYPES 11 +#define NUM_CLIENT_OBJECT_TYPES 14 enum TypeMask { - TYPEMASK_OBJECT = 0x0001, - TYPEMASK_ITEM = 0x0002, - TYPEMASK_CONTAINER = 0x0004, - TYPEMASK_UNIT = 0x0008, - TYPEMASK_PLAYER = 0x0010, - TYPEMASK_GAMEOBJECT = 0x0020, - TYPEMASK_DYNAMICOBJECT = 0x0040, - TYPEMASK_CORPSE = 0x0080, - TYPEMASK_AREATRIGGER = 0x0100, - TYPEMASK_SCENEOBJECT = 0x0200, - TYPEMASK_CONVERSATION = 0x0400, - TYPEMASK_SEER = TYPEMASK_PLAYER | TYPEMASK_UNIT | TYPEMASK_DYNAMICOBJECT + TYPEMASK_OBJECT = 0x0001, + TYPEMASK_ITEM = 0x0002, + TYPEMASK_CONTAINER = 0x0004, + TYPEMASK_AZERITE_EMPOWERED_ITEM = 0x0008, + TYPEMASK_AZERITE_ITEM = 0x0010, + TYPEMASK_UNIT = 0x0020, + TYPEMASK_PLAYER = 0x0040, + TYPEMASK_ACTIVE_PLAYER = 0x0080, + TYPEMASK_GAMEOBJECT = 0x0100, + TYPEMASK_DYNAMICOBJECT = 0x0200, + TYPEMASK_CORPSE = 0x0400, + TYPEMASK_AREATRIGGER = 0x0800, + TYPEMASK_SCENEOBJECT = 0x1000, + TYPEMASK_CONVERSATION = 0x2000, + TYPEMASK_SEER = TYPEMASK_PLAYER | TYPEMASK_UNIT | TYPEMASK_DYNAMICOBJECT }; enum class HighGuid @@ -111,6 +117,7 @@ enum class HighGuid CommerceObj = 45, ClientSession = 46, Cast = 47, + ClientConnection = 48, Count, }; @@ -349,6 +356,7 @@ class TC_GAME_API ObjectGuidGeneratorBase { public: ObjectGuidGeneratorBase(ObjectGuid::LowType start = UI64LIT(1)) : _nextGuid(start) { } + virtual ~ObjectGuidGeneratorBase() { } virtual void Set(uint64 val) { _nextGuid = val; } virtual ObjectGuid::LowType Generate() = 0; diff --git a/src/server/game/Entities/Object/Updates/UpdateData.h b/src/server/game/Entities/Object/Updates/UpdateData.h index 800948c4281..9d438ed625e 100644 --- a/src/server/game/Entities/Object/Updates/UpdateData.h +++ b/src/server/game/Entities/Object/Updates/UpdateData.h @@ -34,29 +34,6 @@ enum OBJECT_UPDATE_TYPE UPDATETYPE_OUT_OF_RANGE_OBJECTS = 3, }; -enum OBJECT_UPDATE_FLAGS -{ - UPDATEFLAG_NONE = 0x0000, - UPDATEFLAG_SELF = 0x0001, - UPDATEFLAG_TRANSPORT = 0x0002, - UPDATEFLAG_HAS_TARGET = 0x0004, - UPDATEFLAG_LIVING = 0x0008, - UPDATEFLAG_STATIONARY_POSITION = 0x0010, - UPDATEFLAG_VEHICLE = 0x0020, - UPDATEFLAG_TRANSPORT_POSITION = 0x0040, - UPDATEFLAG_ROTATION = 0x0080, - UPDATEFLAG_ANIMKITS = 0x0100, - UPDATEFLAG_AREATRIGGER = 0x0200, - UPDATEFLAG_GAMEOBJECT = 0x0400, - //UPDATEFLAG_REPLACE_ACTIVE = 0x0800, - //UPDATEFLAG_NO_BIRTH_ANIM = 0x1000, - //UPDATEFLAG_ENABLE_PORTALS = 0x2000, - //UPDATEFLAG_PLAY_HOVER_ANIM = 0x4000, - //UPDATEFLAG_IS_SUPPRESSING_GREETINGS = 0x8000 - //UPDATEFLAG_SCENEOBJECT = 0x10000, - //UPDATEFLAG_SCENE_PENDING_INSTANCE = 0x20000 -}; - class UpdateData { public: diff --git a/src/server/game/Entities/Object/Updates/UpdateFieldFlags.cpp b/src/server/game/Entities/Object/Updates/UpdateFieldFlags.cpp index 9a26e2a8c53..350c64d3c7b 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFieldFlags.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFieldFlags.cpp @@ -17,17 +17,12 @@ #include "UpdateFieldFlags.h" -uint32 ItemUpdateFieldFlags[CONTAINER_END] = +uint32 ContainerUpdateFieldFlags[CONTAINER_END] = { UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1 UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+2 UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+3 - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+1 - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+2 - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+3 - UF_FLAG_PUBLIC, // OBJECT_FIELD_TYPE UF_FLAG_DYNAMIC, // OBJECT_FIELD_ENTRY UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // OBJECT_DYNAMIC_FLAGS UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X @@ -251,26 +246,198 @@ uint32 ItemUpdateFieldFlags[CONTAINER_END] = UF_FLAG_PUBLIC, // CONTAINER_FIELD_NUM_SLOTS }; -uint32 ItemDynamicUpdateFieldFlags[CONTAINER_DYNAMIC_END] = +uint32 AzeriteEmpoweredItemUpdateFieldFlags[AZERITE_EMPOWERED_ITEM_END] = +{ + UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID + UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1 + UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+2 + UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+3 + UF_FLAG_DYNAMIC, // OBJECT_FIELD_ENTRY + UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // OBJECT_DYNAMIC_FLAGS + UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X + UF_FLAG_PUBLIC, // ITEM_FIELD_OWNER + UF_FLAG_PUBLIC, // ITEM_FIELD_OWNER+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_OWNER+2 + UF_FLAG_PUBLIC, // ITEM_FIELD_OWNER+3 + UF_FLAG_PUBLIC, // ITEM_FIELD_CONTAINED + UF_FLAG_PUBLIC, // ITEM_FIELD_CONTAINED+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_CONTAINED+2 + UF_FLAG_PUBLIC, // ITEM_FIELD_CONTAINED+3 + UF_FLAG_PUBLIC, // ITEM_FIELD_CREATOR + UF_FLAG_PUBLIC, // ITEM_FIELD_CREATOR+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_CREATOR+2 + UF_FLAG_PUBLIC, // ITEM_FIELD_CREATOR+3 + UF_FLAG_PUBLIC, // ITEM_FIELD_GIFTCREATOR + UF_FLAG_PUBLIC, // ITEM_FIELD_GIFTCREATOR+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_GIFTCREATOR+2 + UF_FLAG_PUBLIC, // ITEM_FIELD_GIFTCREATOR+3 + UF_FLAG_OWNER, // ITEM_FIELD_STACK_COUNT + UF_FLAG_OWNER, // ITEM_FIELD_DURATION + UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES + UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES+1 + UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES+2 + UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES+3 + UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES+4 + UF_FLAG_PUBLIC, // ITEM_FIELD_FLAGS + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+2 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+3 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+4 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+5 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+6 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+7 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+8 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+9 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+10 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+11 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+12 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+13 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+14 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+15 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+16 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+17 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+18 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+19 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+20 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+21 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+22 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+23 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+24 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+25 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+26 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+27 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+28 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+29 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+30 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+31 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+32 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+33 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+34 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+35 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+36 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+37 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+38 + UF_FLAG_PUBLIC, // ITEM_FIELD_PROPERTY_SEED + UF_FLAG_PUBLIC, // ITEM_FIELD_RANDOM_PROPERTIES_ID + UF_FLAG_OWNER, // ITEM_FIELD_DURABILITY + UF_FLAG_OWNER, // ITEM_FIELD_MAXDURABILITY + UF_FLAG_PUBLIC, // ITEM_FIELD_CREATE_PLAYED_TIME + UF_FLAG_OWNER, // ITEM_FIELD_MODIFIERS_MASK + UF_FLAG_PUBLIC, // ITEM_FIELD_CONTEXT + UF_FLAG_OWNER, // ITEM_FIELD_ARTIFACT_XP + UF_FLAG_OWNER, // ITEM_FIELD_ARTIFACT_XP+1 + UF_FLAG_OWNER, // ITEM_FIELD_APPEARANCE_MOD_ID + UF_FLAG_PUBLIC, // AZERITE_EMPOWERED_ITEM_FIELD_SELECTIONS + UF_FLAG_PUBLIC, // AZERITE_EMPOWERED_ITEM_FIELD_SELECTIONS+1 + UF_FLAG_PUBLIC, // AZERITE_EMPOWERED_ITEM_FIELD_SELECTIONS+2 + UF_FLAG_PUBLIC, // AZERITE_EMPOWERED_ITEM_FIELD_SELECTIONS+3 +}; + +uint32 AzeriteItemUpdateFieldFlags[AZERITE_ITEM_END] = +{ + UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID + UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1 + UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+2 + UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+3 + UF_FLAG_DYNAMIC, // OBJECT_FIELD_ENTRY + UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // OBJECT_DYNAMIC_FLAGS + UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X + UF_FLAG_PUBLIC, // ITEM_FIELD_OWNER + UF_FLAG_PUBLIC, // ITEM_FIELD_OWNER+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_OWNER+2 + UF_FLAG_PUBLIC, // ITEM_FIELD_OWNER+3 + UF_FLAG_PUBLIC, // ITEM_FIELD_CONTAINED + UF_FLAG_PUBLIC, // ITEM_FIELD_CONTAINED+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_CONTAINED+2 + UF_FLAG_PUBLIC, // ITEM_FIELD_CONTAINED+3 + UF_FLAG_PUBLIC, // ITEM_FIELD_CREATOR + UF_FLAG_PUBLIC, // ITEM_FIELD_CREATOR+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_CREATOR+2 + UF_FLAG_PUBLIC, // ITEM_FIELD_CREATOR+3 + UF_FLAG_PUBLIC, // ITEM_FIELD_GIFTCREATOR + UF_FLAG_PUBLIC, // ITEM_FIELD_GIFTCREATOR+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_GIFTCREATOR+2 + UF_FLAG_PUBLIC, // ITEM_FIELD_GIFTCREATOR+3 + UF_FLAG_OWNER, // ITEM_FIELD_STACK_COUNT + UF_FLAG_OWNER, // ITEM_FIELD_DURATION + UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES + UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES+1 + UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES+2 + UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES+3 + UF_FLAG_OWNER, // ITEM_FIELD_SPELL_CHARGES+4 + UF_FLAG_PUBLIC, // ITEM_FIELD_FLAGS + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+1 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+2 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+3 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+4 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+5 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+6 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+7 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+8 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+9 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+10 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+11 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+12 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+13 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+14 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+15 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+16 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+17 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+18 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+19 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+20 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+21 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+22 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+23 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+24 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+25 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+26 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+27 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+28 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+29 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+30 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+31 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+32 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+33 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+34 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+35 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+36 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+37 + UF_FLAG_PUBLIC, // ITEM_FIELD_ENCHANTMENT+38 + UF_FLAG_PUBLIC, // ITEM_FIELD_PROPERTY_SEED + UF_FLAG_PUBLIC, // ITEM_FIELD_RANDOM_PROPERTIES_ID + UF_FLAG_OWNER, // ITEM_FIELD_DURABILITY + UF_FLAG_OWNER, // ITEM_FIELD_MAXDURABILITY + UF_FLAG_PUBLIC, // ITEM_FIELD_CREATE_PLAYED_TIME + UF_FLAG_OWNER, // ITEM_FIELD_MODIFIERS_MASK + UF_FLAG_PUBLIC, // ITEM_FIELD_CONTEXT + UF_FLAG_OWNER, // ITEM_FIELD_ARTIFACT_XP + UF_FLAG_OWNER, // ITEM_FIELD_ARTIFACT_XP+1 + UF_FLAG_OWNER, // ITEM_FIELD_APPEARANCE_MOD_ID + UF_FLAG_PUBLIC, // AZERITE_ITEM_FIELD_XP + UF_FLAG_PUBLIC, // AZERITE_ITEM_FIELD_XP+1 + UF_FLAG_PUBLIC, // AZERITE_ITEM_FIELD_LEVEL + UF_FLAG_PUBLIC, // AZERITE_ITEM_FIELD_AURA_LEVEL + UF_FLAG_OWNER, // AZERITE_ITEM_FIELD_KNOWLEDGE_LEVEL + UF_FLAG_OWNER, // AZERITE_ITEM_FIELD_DEBUG_KNOWLEDGE_WEEK +}; + +uint32 ItemDynamicUpdateFieldFlags[ITEM_DYNAMIC_END] = { UF_FLAG_OWNER, // ITEM_DYNAMIC_FIELD_MODIFIERS UF_FLAG_OWNER | UF_FLAG_0x100, // ITEM_DYNAMIC_FIELD_BONUSLIST_IDS UF_FLAG_OWNER, // ITEM_DYNAMIC_FIELD_ARTIFACT_POWERS UF_FLAG_OWNER, // ITEM_DYNAMIC_FIELD_GEMS - UF_FLAG_OWNER, // ITEM_DYNAMIC_FIELD_RELIC_TALENT_DATA }; -uint32 UnitUpdateFieldFlags[PLAYER_END] = +uint32 UnitUpdateFieldFlags[ACTIVE_PLAYER_END] = { UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1 UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+2 UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+3 - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+1 - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+2 - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+3 - UF_FLAG_PUBLIC, // OBJECT_FIELD_TYPE UF_FLAG_DYNAMIC, // OBJECT_FIELD_ENTRY UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // OBJECT_DYNAMIC_FLAGS UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X @@ -302,6 +469,10 @@ uint32 UnitUpdateFieldFlags[PLAYER_END] = UF_FLAG_PUBLIC, // UNIT_FIELD_DEMON_CREATOR+1 UF_FLAG_PUBLIC, // UNIT_FIELD_DEMON_CREATOR+2 UF_FLAG_PUBLIC, // UNIT_FIELD_DEMON_CREATOR+3 + UF_FLAG_PUBLIC, // UNIT_FIELD_LOOK_AT_CONTROLLER_TARGET + UF_FLAG_PUBLIC, // UNIT_FIELD_LOOK_AT_CONTROLLER_TARGET+1 + UF_FLAG_PUBLIC, // UNIT_FIELD_LOOK_AT_CONTROLLER_TARGET+2 + UF_FLAG_PUBLIC, // UNIT_FIELD_LOOK_AT_CONTROLLER_TARGET+3 UF_FLAG_PUBLIC, // UNIT_FIELD_TARGET UF_FLAG_PUBLIC, // UNIT_FIELD_TARGET+1 UF_FLAG_PUBLIC, // UNIT_FIELD_TARGET+2 @@ -348,10 +519,13 @@ uint32 UnitUpdateFieldFlags[PLAYER_END] = UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNIT_ALL, // UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER+5 UF_FLAG_PUBLIC, // UNIT_FIELD_LEVEL UF_FLAG_PUBLIC, // UNIT_FIELD_EFFECTIVE_LEVEL - UF_FLAG_PUBLIC, // UNIT_FIELD_SANDBOX_SCALING_ID + UF_FLAG_PUBLIC, // UNIT_FIELD_CONTENT_TUNING_ID UF_FLAG_PUBLIC, // UNIT_FIELD_SCALING_LEVEL_MIN UF_FLAG_PUBLIC, // UNIT_FIELD_SCALING_LEVEL_MAX UF_FLAG_PUBLIC, // UNIT_FIELD_SCALING_LEVEL_DELTA + UF_FLAG_PUBLIC, // UNIT_FIELD_SCALING_FACTION_GROUP + UF_FLAG_PUBLIC, // UNIT_FIELD_SCALING_HEALTH_ITEM_LEVEL_CURVE_ID + UF_FLAG_PUBLIC, // UNIT_FIELD_SCALING_DAMAGE_ITEM_LEVEL_CURVE_ID UF_FLAG_PUBLIC, // UNIT_FIELD_FACTIONTEMPLATE UF_FLAG_PUBLIC, // UNIT_VIRTUAL_ITEM_SLOT_ID UF_FLAG_PUBLIC, // UNIT_VIRTUAL_ITEM_SLOT_ID+1 @@ -369,7 +543,9 @@ uint32 UnitUpdateFieldFlags[PLAYER_END] = UF_FLAG_PUBLIC, // UNIT_FIELD_BOUNDINGRADIUS UF_FLAG_PUBLIC, // UNIT_FIELD_COMBATREACH UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // UNIT_FIELD_DISPLAYID + UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // UNIT_FIELD_DISPLAY_SCALE UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_FIELD_NATIVEDISPLAYID + UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_FIELD_NATIVE_X_DISPLAY_SCALE UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_FIELD_MOUNTDISPLAYID UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_MINDAMAGE UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_MAXDAMAGE @@ -409,21 +585,13 @@ uint32 UnitUpdateFieldFlags[PLAYER_END] = UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_RESISTANCES+4 UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_RESISTANCES+5 UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_RESISTANCES+6 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE+1 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE+2 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE+3 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE+4 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE+5 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE+6 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE+1 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE+2 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE+3 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE+4 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE+5 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE+6 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_MOD_BONUS_ARMOR + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_BONUS_RESISTANCE_MODS + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_BONUS_RESISTANCE_MODS+1 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_BONUS_RESISTANCE_MODS+2 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_BONUS_RESISTANCE_MODS+3 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_BONUS_RESISTANCE_MODS+4 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_BONUS_RESISTANCE_MODS+5 + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_BONUS_RESISTANCE_MODS+6 UF_FLAG_PUBLIC, // UNIT_FIELD_BASE_MANA UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_BASE_HEALTH UF_FLAG_PUBLIC, // UNIT_FIELD_BYTES_2 @@ -435,7 +603,11 @@ uint32 UnitUpdateFieldFlags[PLAYER_END] = UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RANGED_ATTACK_POWER_MOD_POS UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RANGED_ATTACK_POWER_MOD_NEG UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_MAIN_HAND_WEAPON_ATTACK_POWER + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_OFF_HAND_WEAPON_ATTACK_POWER + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RANGED_HAND_WEAPON_ATTACK_POWER UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_ATTACK_SPEED_AURA + UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_LIFESTEAL UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_MINRANGEDDAMAGE UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_MAXRANGEDDAMAGE UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MODIFIER @@ -471,10 +643,10 @@ uint32 UnitUpdateFieldFlags[PLAYER_END] = UF_FLAG_PUBLIC, // UNIT_FIELD_LOOKS_LIKE_MOUNT_ID UF_FLAG_PUBLIC, // UNIT_FIELD_LOOKS_LIKE_CREATURE_ID UF_FLAG_PUBLIC, // UNIT_FIELD_LOOK_AT_CONTROLLER_ID - UF_FLAG_PUBLIC, // UNIT_FIELD_LOOK_AT_CONTROLLER_TARGET - UF_FLAG_PUBLIC, // UNIT_FIELD_LOOK_AT_CONTROLLER_TARGET+1 - UF_FLAG_PUBLIC, // UNIT_FIELD_LOOK_AT_CONTROLLER_TARGET+2 - UF_FLAG_PUBLIC, // UNIT_FIELD_LOOK_AT_CONTROLLER_TARGET+3 + UF_FLAG_PUBLIC, // UNIT_FIELD_GUILD_GUID + UF_FLAG_PUBLIC, // UNIT_FIELD_GUILD_GUID+1 + UF_FLAG_PUBLIC, // UNIT_FIELD_GUILD_GUID+2 + UF_FLAG_PUBLIC, // UNIT_FIELD_GUILD_GUID+3 UF_FLAG_PUBLIC, // PLAYER_DUEL_ARBITER UF_FLAG_PUBLIC, // PLAYER_DUEL_ARBITER+1 UF_FLAG_PUBLIC, // PLAYER_DUEL_ARBITER+2 @@ -1298,6 +1470,806 @@ uint32 UnitUpdateFieldFlags[PLAYER_END] = UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+797 UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+798 UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+799 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+800 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+801 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+802 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+803 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+804 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+805 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+806 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+807 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+808 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+809 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+810 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+811 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+812 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+813 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+814 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+815 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+816 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+817 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+818 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+819 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+820 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+821 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+822 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+823 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+824 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+825 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+826 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+827 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+828 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+829 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+830 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+831 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+832 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+833 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+834 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+835 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+836 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+837 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+838 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+839 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+840 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+841 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+842 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+843 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+844 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+845 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+846 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+847 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+848 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+849 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+850 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+851 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+852 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+853 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+854 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+855 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+856 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+857 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+858 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+859 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+860 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+861 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+862 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+863 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+864 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+865 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+866 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+867 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+868 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+869 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+870 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+871 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+872 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+873 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+874 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+875 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+876 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+877 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+878 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+879 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+880 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+881 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+882 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+883 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+884 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+885 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+886 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+887 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+888 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+889 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+890 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+891 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+892 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+893 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+894 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+895 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+896 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+897 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+898 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+899 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+900 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+901 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+902 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+903 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+904 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+905 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+906 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+907 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+908 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+909 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+910 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+911 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+912 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+913 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+914 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+915 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+916 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+917 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+918 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+919 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+920 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+921 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+922 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+923 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+924 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+925 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+926 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+927 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+928 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+929 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+930 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+931 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+932 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+933 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+934 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+935 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+936 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+937 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+938 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+939 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+940 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+941 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+942 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+943 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+944 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+945 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+946 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+947 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+948 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+949 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+950 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+951 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+952 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+953 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+954 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+955 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+956 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+957 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+958 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+959 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+960 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+961 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+962 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+963 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+964 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+965 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+966 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+967 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+968 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+969 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+970 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+971 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+972 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+973 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+974 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+975 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+976 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+977 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+978 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+979 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+980 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+981 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+982 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+983 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+984 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+985 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+986 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+987 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+988 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+989 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+990 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+991 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+992 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+993 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+994 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+995 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+996 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+997 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+998 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+999 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1000 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1001 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1002 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1003 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1004 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1005 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1006 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1007 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1008 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1009 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1010 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1011 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1012 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1013 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1014 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1015 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1016 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1017 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1018 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1019 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1020 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1021 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1022 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1023 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1024 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1025 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1026 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1027 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1028 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1029 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1030 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1031 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1032 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1033 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1034 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1035 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1036 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1037 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1038 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1039 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1040 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1041 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1042 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1043 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1044 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1045 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1046 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1047 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1048 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1049 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1050 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1051 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1052 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1053 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1054 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1055 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1056 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1057 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1058 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1059 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1060 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1061 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1062 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1063 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1064 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1065 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1066 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1067 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1068 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1069 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1070 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1071 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1072 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1073 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1074 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1075 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1076 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1077 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1078 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1079 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1080 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1081 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1082 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1083 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1084 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1085 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1086 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1087 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1088 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1089 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1090 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1091 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1092 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1093 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1094 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1095 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1096 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1097 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1098 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1099 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1100 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1101 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1102 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1103 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1104 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1105 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1106 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1107 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1108 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1109 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1110 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1111 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1112 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1113 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1114 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1115 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1116 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1117 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1118 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1119 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1120 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1121 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1122 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1123 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1124 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1125 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1126 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1127 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1128 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1129 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1130 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1131 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1132 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1133 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1134 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1135 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1136 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1137 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1138 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1139 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1140 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1141 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1142 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1143 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1144 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1145 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1146 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1147 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1148 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1149 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1150 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1151 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1152 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1153 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1154 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1155 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1156 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1157 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1158 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1159 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1160 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1161 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1162 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1163 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1164 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1165 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1166 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1167 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1168 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1169 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1170 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1171 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1172 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1173 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1174 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1175 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1176 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1177 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1178 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1179 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1180 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1181 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1182 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1183 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1184 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1185 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1186 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1187 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1188 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1189 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1190 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1191 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1192 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1193 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1194 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1195 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1196 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1197 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1198 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1199 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1200 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1201 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1202 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1203 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1204 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1205 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1206 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1207 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1208 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1209 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1210 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1211 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1212 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1213 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1214 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1215 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1216 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1217 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1218 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1219 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1220 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1221 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1222 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1223 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1224 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1225 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1226 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1227 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1228 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1229 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1230 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1231 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1232 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1233 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1234 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1235 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1236 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1237 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1238 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1239 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1240 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1241 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1242 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1243 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1244 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1245 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1246 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1247 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1248 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1249 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1250 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1251 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1252 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1253 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1254 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1255 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1256 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1257 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1258 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1259 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1260 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1261 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1262 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1263 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1264 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1265 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1266 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1267 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1268 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1269 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1270 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1271 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1272 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1273 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1274 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1275 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1276 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1277 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1278 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1279 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1280 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1281 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1282 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1283 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1284 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1285 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1286 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1287 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1288 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1289 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1290 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1291 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1292 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1293 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1294 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1295 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1296 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1297 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1298 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1299 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1300 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1301 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1302 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1303 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1304 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1305 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1306 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1307 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1308 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1309 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1310 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1311 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1312 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1313 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1314 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1315 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1316 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1317 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1318 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1319 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1320 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1321 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1322 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1323 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1324 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1325 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1326 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1327 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1328 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1329 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1330 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1331 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1332 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1333 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1334 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1335 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1336 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1337 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1338 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1339 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1340 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1341 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1342 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1343 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1344 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1345 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1346 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1347 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1348 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1349 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1350 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1351 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1352 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1353 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1354 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1355 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1356 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1357 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1358 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1359 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1360 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1361 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1362 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1363 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1364 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1365 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1366 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1367 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1368 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1369 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1370 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1371 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1372 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1373 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1374 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1375 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1376 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1377 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1378 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1379 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1380 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1381 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1382 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1383 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1384 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1385 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1386 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1387 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1388 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1389 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1390 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1391 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1392 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1393 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1394 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1395 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1396 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1397 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1398 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1399 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1400 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1401 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1402 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1403 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1404 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1405 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1406 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1407 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1408 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1409 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1410 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1411 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1412 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1413 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1414 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1415 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1416 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1417 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1418 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1419 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1420 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1421 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1422 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1423 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1424 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1425 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1426 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1427 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1428 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1429 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1430 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1431 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1432 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1433 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1434 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1435 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1436 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1437 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1438 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1439 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1440 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1441 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1442 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1443 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1444 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1445 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1446 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1447 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1448 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1449 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1450 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1451 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1452 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1453 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1454 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1455 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1456 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1457 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1458 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1459 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1460 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1461 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1462 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1463 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1464 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1465 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1466 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1467 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1468 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1469 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1470 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1471 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1472 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1473 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1474 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1475 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1476 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1477 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1478 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1479 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1480 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1481 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1482 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1483 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1484 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1485 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1486 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1487 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1488 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1489 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1490 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1491 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1492 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1493 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1494 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1495 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1496 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1497 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1498 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1499 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1500 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1501 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1502 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1503 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1504 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1505 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1506 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1507 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1508 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1509 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1510 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1511 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1512 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1513 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1514 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1515 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1516 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1517 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1518 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1519 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1520 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1521 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1522 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1523 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1524 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1525 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1526 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1527 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1528 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1529 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1530 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1531 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1532 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1533 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1534 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1535 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1536 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1537 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1538 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1539 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1540 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1541 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1542 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1543 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1544 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1545 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1546 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1547 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1548 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1549 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1550 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1551 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1552 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1553 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1554 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1555 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1556 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1557 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1558 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1559 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1560 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1561 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1562 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1563 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1564 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1565 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1566 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1567 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1568 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1569 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1570 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1571 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1572 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1573 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1574 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1575 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1576 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1577 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1578 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1579 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1580 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1581 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1582 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1583 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1584 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1585 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1586 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1587 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1588 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1589 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1590 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1591 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1592 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1593 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1594 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1595 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1596 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1597 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1598 + UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1599 UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+1 UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+2 @@ -1346,3568 +2318,4021 @@ uint32 UnitUpdateFieldFlags[PLAYER_END] = UF_FLAG_PUBLIC, // PLAYER_FIELD_AVG_ITEM_LEVEL+2 UF_FLAG_PUBLIC, // PLAYER_FIELD_AVG_ITEM_LEVEL+3 UF_FLAG_PUBLIC, // PLAYER_FIELD_CURRENT_BATTLE_PET_BREED_QUALITY - UF_FLAG_PUBLIC, // PLAYER_FIELD_PRESTIGE UF_FLAG_PUBLIC, // PLAYER_FIELD_HONOR_LEVEL - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+1 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+2 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+3 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+4 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+5 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+6 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+7 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+8 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+9 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+10 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+11 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+12 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+13 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+14 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+15 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+16 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+17 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+18 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+19 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+20 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+21 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+22 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+23 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+24 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+25 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+26 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+27 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+28 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+29 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+30 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+31 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+32 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+33 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+34 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+35 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+36 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+37 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+38 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+39 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+40 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+41 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+42 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+43 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+44 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+45 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+46 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+47 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+48 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+49 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+50 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+51 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+52 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+53 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+54 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+55 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+56 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+57 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+58 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+59 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+60 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+61 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+62 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+63 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+64 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+65 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+66 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+67 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+68 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+69 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+70 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+71 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+72 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+73 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+74 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+75 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+76 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+77 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+78 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+79 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+80 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+81 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+82 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+83 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+84 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+85 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+86 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+87 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+88 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+89 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+90 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+91 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+92 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+93 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+94 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+95 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+96 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+97 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+98 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+99 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+100 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+101 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+102 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+103 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+104 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+105 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+106 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+107 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+108 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+109 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+110 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+111 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+112 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+113 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+114 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+115 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+116 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+117 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+118 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+119 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+120 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+121 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+122 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+123 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+124 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+125 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+126 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+127 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+128 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+129 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+130 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+131 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+132 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+133 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+134 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+135 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+136 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+137 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+138 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+139 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+140 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+141 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+142 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+143 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+144 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+145 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+146 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+147 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+148 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+149 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+150 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+151 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+152 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+153 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+154 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+155 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+156 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+157 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+158 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+159 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+160 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+161 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+162 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+163 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+164 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+165 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+166 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+167 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+168 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+169 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+170 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+171 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+172 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+173 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+174 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+175 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+176 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+177 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+178 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+179 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+180 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+181 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+182 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+183 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+184 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+185 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+186 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+187 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+188 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+189 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+190 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+191 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+192 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+193 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+194 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+195 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+196 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+197 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+198 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+199 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+200 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+201 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+202 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+203 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+204 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+205 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+206 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+207 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+208 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+209 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+210 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+211 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+212 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+213 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+214 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+215 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+216 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+217 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+218 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+219 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+220 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+221 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+222 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+223 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+224 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+225 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+226 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+227 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+228 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+229 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+230 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+231 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+232 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+233 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+234 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+235 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+236 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+237 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+238 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+239 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+240 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+241 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+242 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+243 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+244 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+245 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+246 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+247 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+248 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+249 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+250 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+251 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+252 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+253 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+254 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+255 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+256 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+257 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+258 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+259 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+260 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+261 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+262 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+263 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+264 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+265 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+266 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+267 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+268 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+269 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+270 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+271 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+272 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+273 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+274 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+275 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+276 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+277 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+278 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+279 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+280 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+281 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+282 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+283 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+284 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+285 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+286 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+287 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+288 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+289 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+290 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+291 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+292 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+293 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+294 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+295 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+296 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+297 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+298 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+299 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+300 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+301 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+302 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+303 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+304 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+305 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+306 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+307 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+308 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+309 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+310 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+311 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+312 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+313 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+314 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+315 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+316 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+317 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+318 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+319 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+320 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+321 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+322 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+323 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+324 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+325 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+326 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+327 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+328 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+329 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+330 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+331 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+332 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+333 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+334 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+335 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+336 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+337 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+338 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+339 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+340 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+341 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+342 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+343 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+344 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+345 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+346 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+347 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+348 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+349 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+350 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+351 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+352 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+353 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+354 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+355 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+356 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+357 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+358 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+359 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+360 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+361 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+362 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+363 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+364 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+365 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+366 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+367 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+368 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+369 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+370 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+371 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+372 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+373 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+374 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+375 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+376 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+377 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+378 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+379 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+380 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+381 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+382 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+383 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+384 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+385 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+386 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+387 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+388 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+389 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+390 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+391 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+392 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+393 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+394 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+395 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+396 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+397 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+398 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+399 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+400 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+401 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+402 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+403 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+404 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+405 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+406 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+407 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+408 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+409 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+410 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+411 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+412 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+413 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+414 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+415 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+416 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+417 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+418 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+419 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+420 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+421 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+422 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+423 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+424 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+425 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+426 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+427 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+428 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+429 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+430 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+431 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+432 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+433 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+434 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+435 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+436 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+437 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+438 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+439 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+440 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+441 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+442 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+443 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+444 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+445 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+446 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+447 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+448 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+449 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+450 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+451 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+452 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+453 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+454 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+455 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+456 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+457 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+458 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+459 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+460 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+461 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+462 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+463 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+464 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+465 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+466 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+467 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+468 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+469 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+470 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+471 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+472 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+473 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+474 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+475 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+476 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+477 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+478 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+479 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+480 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+481 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+482 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+483 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+484 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+485 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+486 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+487 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+488 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+489 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+490 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+491 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+492 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+493 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+494 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+495 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+496 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+497 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+498 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+499 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+500 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+501 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+502 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+503 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+504 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+505 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+506 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+507 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+508 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+509 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+510 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+511 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+512 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+513 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+514 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+515 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+516 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+517 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+518 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+519 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+520 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+521 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+522 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+523 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+524 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+525 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+526 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+527 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+528 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+529 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+530 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+531 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+532 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+533 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+534 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+535 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+536 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+537 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+538 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+539 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+540 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+541 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+542 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+543 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+544 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+545 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+546 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+547 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+548 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+549 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+550 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+551 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+552 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+553 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+554 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+555 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+556 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+557 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+558 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+559 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+560 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+561 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+562 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+563 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+564 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+565 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+566 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+567 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+568 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+569 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+570 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+571 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+572 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+573 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+574 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+575 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+576 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+577 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+578 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+579 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+580 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+581 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+582 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+583 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+584 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+585 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+586 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+587 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+588 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+589 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+590 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+591 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+592 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+593 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+594 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+595 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+596 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+597 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+598 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+599 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+600 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+601 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+602 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+603 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+604 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+605 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+606 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+607 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+608 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+609 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+610 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+611 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+612 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+613 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+614 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+615 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+616 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+617 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+618 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+619 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+620 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+621 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+622 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+623 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+624 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+625 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+626 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+627 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+628 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+629 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+630 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+631 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+632 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+633 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+634 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+635 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+636 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+637 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+638 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+639 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+640 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+641 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+642 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+643 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+644 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+645 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+646 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+647 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+648 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+649 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+650 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+651 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+652 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+653 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+654 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+655 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+656 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+657 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+658 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+659 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+660 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+661 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+662 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+663 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+664 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+665 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+666 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+667 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+668 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+669 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+670 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+671 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+672 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+673 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+674 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+675 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+676 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+677 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+678 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+679 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+680 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+681 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+682 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+683 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+684 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+685 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+686 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+687 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+688 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+689 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+690 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+691 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+692 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+693 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+694 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+695 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+696 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+697 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+698 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+699 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+700 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+701 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+702 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+703 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+704 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+705 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+706 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+707 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+708 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+709 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+710 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+711 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+712 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+713 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+714 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+715 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+716 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+717 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+718 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+719 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+720 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+721 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+722 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+723 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+724 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+725 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+726 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+727 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+728 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+729 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+730 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+731 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+732 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+733 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+734 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+735 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+736 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+737 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+738 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+739 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+740 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+741 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+742 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+743 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+744 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+745 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+746 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+747 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+748 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+749 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+750 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+751 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+752 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+753 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+754 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+755 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+756 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+757 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+758 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+759 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+760 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+761 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+762 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+763 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+764 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+765 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+766 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+767 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+768 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+769 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+770 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+771 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+772 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+773 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+774 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+775 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+776 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+777 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+778 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INV_SLOT_HEAD+779 - UF_FLAG_PRIVATE, // PLAYER_FARSIGHT - UF_FLAG_PRIVATE, // PLAYER_FARSIGHT+1 - UF_FLAG_PRIVATE, // PLAYER_FARSIGHT+2 - UF_FLAG_PRIVATE, // PLAYER_FARSIGHT+3 - UF_FLAG_PRIVATE, // PLAYER_FIELD_SUMMONED_BATTLE_PET_ID - UF_FLAG_PRIVATE, // PLAYER_FIELD_SUMMONED_BATTLE_PET_ID+1 - UF_FLAG_PRIVATE, // PLAYER_FIELD_SUMMONED_BATTLE_PET_ID+2 - UF_FLAG_PRIVATE, // PLAYER_FIELD_SUMMONED_BATTLE_PET_ID+3 - UF_FLAG_PRIVATE, // PLAYER__FIELD_KNOWN_TITLES - UF_FLAG_PRIVATE, // PLAYER__FIELD_KNOWN_TITLES+1 - UF_FLAG_PRIVATE, // PLAYER__FIELD_KNOWN_TITLES+2 - UF_FLAG_PRIVATE, // PLAYER__FIELD_KNOWN_TITLES+3 - UF_FLAG_PRIVATE, // PLAYER__FIELD_KNOWN_TITLES+4 - UF_FLAG_PRIVATE, // PLAYER__FIELD_KNOWN_TITLES+5 - UF_FLAG_PRIVATE, // PLAYER__FIELD_KNOWN_TITLES+6 - UF_FLAG_PRIVATE, // PLAYER__FIELD_KNOWN_TITLES+7 - UF_FLAG_PRIVATE, // PLAYER__FIELD_KNOWN_TITLES+8 - UF_FLAG_PRIVATE, // PLAYER__FIELD_KNOWN_TITLES+9 - UF_FLAG_PRIVATE, // PLAYER__FIELD_KNOWN_TITLES+10 - UF_FLAG_PRIVATE, // PLAYER__FIELD_KNOWN_TITLES+11 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COINAGE - UF_FLAG_PRIVATE, // PLAYER_FIELD_COINAGE+1 - UF_FLAG_PRIVATE, // PLAYER_XP - UF_FLAG_PRIVATE, // PLAYER_NEXT_LEVEL_XP - UF_FLAG_PRIVATE, // PLAYER_TRIAL_XP - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+1 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+2 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+3 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+4 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+5 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+6 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+7 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+8 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+9 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+10 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+11 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+12 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+13 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+14 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+15 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+16 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+17 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+18 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+19 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+20 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+21 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+22 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+23 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+24 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+25 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+26 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+27 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+28 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+29 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+30 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+31 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+32 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+33 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+34 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+35 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+36 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+37 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+38 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+39 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+40 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+41 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+42 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+43 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+44 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+45 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+46 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+47 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+48 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+49 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+50 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+51 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+52 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+53 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+54 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+55 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+56 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+57 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+58 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+59 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+60 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+61 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+62 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+63 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+64 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+65 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+66 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+67 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+68 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+69 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+70 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+71 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+72 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+73 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+74 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+75 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+76 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+77 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+78 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+79 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+80 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+81 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+82 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+83 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+84 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+85 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+86 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+87 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+88 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+89 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+90 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+91 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+92 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+93 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+94 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+95 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+96 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+97 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+98 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+99 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+100 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+101 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+102 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+103 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+104 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+105 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+106 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+107 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+108 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+109 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+110 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+111 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+112 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+113 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+114 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+115 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+116 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+117 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+118 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+119 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+120 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+121 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+122 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+123 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+124 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+125 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+126 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+127 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+128 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+129 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+130 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+131 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+132 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+133 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+134 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+135 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+136 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+137 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+138 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+139 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+140 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+141 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+142 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+143 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+144 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+145 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+146 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+147 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+148 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+149 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+150 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+151 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+152 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+153 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+154 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+155 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+156 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+157 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+158 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+159 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+160 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+161 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+162 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+163 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+164 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+165 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+166 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+167 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+168 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+169 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+170 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+171 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+172 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+173 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+174 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+175 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+176 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+177 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+178 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+179 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+180 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+181 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+182 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+183 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+184 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+185 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+186 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+187 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+188 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+189 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+190 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+191 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+192 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+193 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+194 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+195 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+196 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+197 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+198 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+199 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+200 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+201 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+202 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+203 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+204 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+205 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+206 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+207 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+208 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+209 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+210 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+211 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+212 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+213 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+214 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+215 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+216 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+217 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+218 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+219 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+220 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+221 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+222 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+223 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+224 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+225 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+226 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+227 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+228 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+229 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+230 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+231 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+232 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+233 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+234 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+235 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+236 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+237 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+238 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+239 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+240 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+241 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+242 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+243 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+244 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+245 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+246 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+247 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+248 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+249 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+250 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+251 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+252 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+253 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+254 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+255 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+256 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+257 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+258 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+259 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+260 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+261 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+262 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+263 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+264 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+265 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+266 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+267 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+268 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+269 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+270 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+271 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+272 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+273 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+274 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+275 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+276 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+277 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+278 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+279 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+280 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+281 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+282 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+283 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+284 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+285 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+286 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+287 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+288 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+289 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+290 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+291 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+292 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+293 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+294 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+295 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+296 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+297 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+298 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+299 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+300 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+301 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+302 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+303 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+304 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+305 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+306 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+307 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+308 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+309 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+310 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+311 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+312 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+313 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+314 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+315 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+316 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+317 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+318 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+319 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+320 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+321 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+322 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+323 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+324 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+325 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+326 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+327 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+328 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+329 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+330 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+331 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+332 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+333 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+334 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+335 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+336 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+337 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+338 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+339 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+340 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+341 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+342 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+343 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+344 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+345 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+346 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+347 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+348 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+349 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+350 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+351 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+352 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+353 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+354 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+355 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+356 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+357 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+358 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+359 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+360 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+361 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+362 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+363 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+364 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+365 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+366 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+367 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+368 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+369 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+370 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+371 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+372 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+373 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+374 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+375 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+376 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+377 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+378 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+379 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+380 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+381 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+382 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+383 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+384 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+385 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+386 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+387 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+388 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+389 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+390 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+391 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+392 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+393 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+394 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+395 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+396 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+397 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+398 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+399 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+400 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+401 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+402 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+403 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+404 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+405 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+406 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+407 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+408 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+409 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+410 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+411 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+412 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+413 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+414 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+415 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+416 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+417 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+418 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+419 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+420 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+421 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+422 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+423 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+424 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+425 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+426 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+427 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+428 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+429 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+430 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+431 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+432 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+433 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+434 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+435 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+436 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+437 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+438 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+439 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+440 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+441 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+442 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+443 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+444 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+445 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+446 - UF_FLAG_PRIVATE, // PLAYER_SKILL_LINEID+447 - UF_FLAG_PRIVATE, // PLAYER_CHARACTER_POINTS - UF_FLAG_PRIVATE, // PLAYER_FIELD_MAX_TALENT_TIERS - UF_FLAG_PRIVATE, // PLAYER_TRACK_CREATURES - UF_FLAG_PRIVATE, // PLAYER_TRACK_RESOURCES - UF_FLAG_PRIVATE, // PLAYER_EXPERTISE - UF_FLAG_PRIVATE, // PLAYER_OFFHAND_EXPERTISE - UF_FLAG_PRIVATE, // PLAYER_FIELD_RANGED_EXPERTISE - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_EXPERTISE - UF_FLAG_PRIVATE, // PLAYER_BLOCK_PERCENTAGE - UF_FLAG_PRIVATE, // PLAYER_DODGE_PERCENTAGE - UF_FLAG_PRIVATE, // PLAYER_DODGE_PERCENTAGE_FROM_ATTRIBUTE - UF_FLAG_PRIVATE, // PLAYER_PARRY_PERCENTAGE - UF_FLAG_PRIVATE, // PLAYER_PARRY_PERCENTAGE_FROM_ATTRIBUTE - UF_FLAG_PRIVATE, // PLAYER_CRIT_PERCENTAGE - UF_FLAG_PRIVATE, // PLAYER_RANGED_CRIT_PERCENTAGE - UF_FLAG_PRIVATE, // PLAYER_OFFHAND_CRIT_PERCENTAGE - UF_FLAG_PRIVATE, // PLAYER_SPELL_CRIT_PERCENTAGE1 - UF_FLAG_PRIVATE, // PLAYER_SHIELD_BLOCK - UF_FLAG_PRIVATE, // PLAYER_SHIELD_BLOCK_CRIT_PERCENTAGE - UF_FLAG_PRIVATE, // PLAYER_MASTERY - UF_FLAG_PRIVATE, // PLAYER_SPEED - UF_FLAG_PRIVATE, // PLAYER_LIFESTEAL - UF_FLAG_PRIVATE, // PLAYER_AVOIDANCE - UF_FLAG_PRIVATE, // PLAYER_STURDINESS - UF_FLAG_PRIVATE, // PLAYER_VERSATILITY - UF_FLAG_PRIVATE, // PLAYER_VERSATILITY_BONUS - UF_FLAG_PRIVATE, // PLAYER_FIELD_PVP_POWER_DAMAGE - UF_FLAG_PRIVATE, // PLAYER_FIELD_PVP_POWER_HEALING - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+1 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+2 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+3 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+4 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+5 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+6 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+7 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+8 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+9 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+10 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+11 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+12 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+13 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+14 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+15 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+16 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+17 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+18 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+19 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+20 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+21 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+22 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+23 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+24 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+25 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+26 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+27 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+28 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+29 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+30 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+31 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+32 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+33 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+34 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+35 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+36 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+37 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+38 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+39 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+40 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+41 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+42 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+43 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+44 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+45 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+46 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+47 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+48 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+49 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+50 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+51 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+52 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+53 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+54 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+55 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+56 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+57 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+58 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+59 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+60 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+61 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+62 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+63 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+64 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+65 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+66 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+67 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+68 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+69 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+70 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+71 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+72 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+73 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+74 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+75 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+76 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+77 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+78 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+79 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+80 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+81 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+82 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+83 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+84 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+85 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+86 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+87 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+88 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+89 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+90 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+91 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+92 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+93 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+94 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+95 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+96 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+97 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+98 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+99 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+100 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+101 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+102 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+103 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+104 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+105 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+106 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+107 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+108 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+109 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+110 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+111 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+112 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+113 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+114 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+115 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+116 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+117 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+118 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+119 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+120 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+121 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+122 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+123 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+124 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+125 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+126 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+127 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+128 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+129 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+130 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+131 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+132 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+133 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+134 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+135 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+136 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+137 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+138 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+139 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+140 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+141 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+142 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+143 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+144 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+145 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+146 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+147 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+148 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+149 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+150 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+151 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+152 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+153 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+154 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+155 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+156 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+157 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+158 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+159 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+160 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+161 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+162 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+163 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+164 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+165 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+166 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+167 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+168 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+169 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+170 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+171 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+172 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+173 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+174 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+175 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+176 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+177 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+178 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+179 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+180 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+181 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+182 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+183 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+184 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+185 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+186 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+187 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+188 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+189 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+190 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+191 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+192 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+193 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+194 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+195 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+196 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+197 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+198 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+199 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+200 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+201 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+202 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+203 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+204 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+205 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+206 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+207 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+208 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+209 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+210 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+211 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+212 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+213 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+214 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+215 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+216 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+217 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+218 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+219 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+220 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+221 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+222 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+223 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+224 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+225 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+226 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+227 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+228 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+229 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+230 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+231 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+232 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+233 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+234 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+235 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+236 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+237 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+238 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+239 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+240 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+241 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+242 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+243 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+244 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+245 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+246 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+247 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+248 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+249 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+250 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+251 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+252 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+253 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+254 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+255 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+256 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+257 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+258 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+259 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+260 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+261 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+262 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+263 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+264 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+265 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+266 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+267 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+268 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+269 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+270 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+271 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+272 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+273 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+274 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+275 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+276 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+277 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+278 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+279 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+280 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+281 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+282 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+283 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+284 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+285 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+286 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+287 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+288 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+289 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+290 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+291 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+292 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+293 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+294 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+295 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+296 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+297 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+298 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+299 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+300 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+301 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+302 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+303 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+304 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+305 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+306 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+307 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+308 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+309 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+310 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+311 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+312 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+313 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+314 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+315 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+316 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+317 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+318 - UF_FLAG_PRIVATE, // PLAYER_EXPLORED_ZONES_1+319 - UF_FLAG_PRIVATE, // PLAYER_FIELD_REST_INFO - UF_FLAG_PRIVATE, // PLAYER_FIELD_REST_INFO+1 - UF_FLAG_PRIVATE, // PLAYER_FIELD_REST_INFO+2 - UF_FLAG_PRIVATE, // PLAYER_FIELD_REST_INFO+3 - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_POS - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_POS+1 - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_POS+2 - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_POS+3 - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_POS+4 - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_POS+5 - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_POS+6 - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_NEG - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+1 - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+2 - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+3 - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+4 - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+5 - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+6 - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_PCT - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_PCT+1 - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_PCT+2 - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_PCT+3 - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_PCT+4 - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_PCT+5 - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_DAMAGE_DONE_PCT+6 - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_HEALING_DONE_POS - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_HEALING_PCT - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_HEALING_DONE_PCT - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_PERIODIC_HEALING_DONE_PERCENT - UF_FLAG_PRIVATE, // PLAYER_FIELD_WEAPON_DMG_MULTIPLIERS - UF_FLAG_PRIVATE, // PLAYER_FIELD_WEAPON_DMG_MULTIPLIERS+1 - UF_FLAG_PRIVATE, // PLAYER_FIELD_WEAPON_DMG_MULTIPLIERS+2 - UF_FLAG_PRIVATE, // PLAYER_FIELD_WEAPON_ATK_SPEED_MULTIPLIERS - UF_FLAG_PRIVATE, // PLAYER_FIELD_WEAPON_ATK_SPEED_MULTIPLIERS+1 - UF_FLAG_PRIVATE, // PLAYER_FIELD_WEAPON_ATK_SPEED_MULTIPLIERS+2 - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_SPELL_POWER_PCT - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_RESILIENCE_PERCENT - UF_FLAG_PRIVATE, // PLAYER_FIELD_OVERRIDE_SPELL_POWER_BY_AP_PCT - UF_FLAG_PRIVATE, // PLAYER_FIELD_OVERRIDE_AP_BY_SPELL_POWER_PERCENT - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_TARGET_RESISTANCE - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE - UF_FLAG_PRIVATE, // PLAYER_FIELD_LOCAL_FLAGS - UF_FLAG_PRIVATE, // PLAYER_FIELD_BYTES - UF_FLAG_PRIVATE, // PLAYER_FIELD_PVP_MEDALS - UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1+1 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1+2 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1+3 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1+4 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1+5 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1+6 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1+7 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1+8 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1+9 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1+10 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_PRICE_1+11 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_TIMESTAMP_1 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_TIMESTAMP_1+1 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_TIMESTAMP_1+2 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_TIMESTAMP_1+3 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_TIMESTAMP_1+4 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_TIMESTAMP_1+5 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_TIMESTAMP_1+6 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_TIMESTAMP_1+7 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_TIMESTAMP_1+8 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_TIMESTAMP_1+9 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_TIMESTAMP_1+10 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BUYBACK_TIMESTAMP_1+11 - UF_FLAG_PRIVATE, // PLAYER_FIELD_KILLS - UF_FLAG_PRIVATE, // PLAYER_FIELD_LIFETIME_HONORABLE_KILLS - UF_FLAG_PRIVATE, // PLAYER_FIELD_WATCHED_FACTION_INDEX - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+1 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+2 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+3 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+4 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+5 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+6 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+7 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+8 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+9 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+10 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+11 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+12 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+13 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+14 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+15 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+16 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+17 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+18 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+19 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+20 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+21 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+22 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+23 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+24 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+25 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+26 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+27 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+28 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+29 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+30 - UF_FLAG_PRIVATE, // PLAYER_FIELD_COMBAT_RATING_1+31 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+1 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+2 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+3 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+4 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+5 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+6 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+7 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+8 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+9 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+10 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+11 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+12 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+13 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+14 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+15 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+16 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+17 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+18 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+19 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+20 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+21 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+22 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+23 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+24 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+25 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+26 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+27 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+28 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+29 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+30 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+31 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+32 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+33 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+34 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+35 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+36 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+37 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+38 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+39 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+40 - UF_FLAG_PRIVATE, // PLAYER_FIELD_ARENA_TEAM_INFO_1_1+41 - UF_FLAG_PRIVATE, // PLAYER_FIELD_MAX_LEVEL - UF_FLAG_PRIVATE, // PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA - UF_FLAG_PRIVATE, // PLAYER_FIELD_MAX_CREATURE_SCALING_LEVEL - UF_FLAG_PRIVATE, // PLAYER_NO_REAGENT_COST_1 - UF_FLAG_PRIVATE, // PLAYER_NO_REAGENT_COST_1+1 - UF_FLAG_PRIVATE, // PLAYER_NO_REAGENT_COST_1+2 - UF_FLAG_PRIVATE, // PLAYER_NO_REAGENT_COST_1+3 - UF_FLAG_PRIVATE, // PLAYER_PET_SPELL_POWER - UF_FLAG_PRIVATE, // PLAYER_FIELD_RESEARCHING_1 - UF_FLAG_PRIVATE, // PLAYER_FIELD_RESEARCHING_1+1 - UF_FLAG_PRIVATE, // PLAYER_FIELD_RESEARCHING_1+2 - UF_FLAG_PRIVATE, // PLAYER_FIELD_RESEARCHING_1+3 - UF_FLAG_PRIVATE, // PLAYER_FIELD_RESEARCHING_1+4 - UF_FLAG_PRIVATE, // PLAYER_FIELD_RESEARCHING_1+5 - UF_FLAG_PRIVATE, // PLAYER_FIELD_RESEARCHING_1+6 - UF_FLAG_PRIVATE, // PLAYER_FIELD_RESEARCHING_1+7 - UF_FLAG_PRIVATE, // PLAYER_FIELD_RESEARCHING_1+8 - UF_FLAG_PRIVATE, // PLAYER_FIELD_RESEARCHING_1+9 - UF_FLAG_PRIVATE, // PLAYER_PROFESSION_SKILL_LINE_1 - UF_FLAG_PRIVATE, // PLAYER_PROFESSION_SKILL_LINE_1+1 - UF_FLAG_PRIVATE, // PLAYER_FIELD_UI_HIT_MODIFIER - UF_FLAG_PRIVATE, // PLAYER_FIELD_UI_SPELL_HIT_MODIFIER - UF_FLAG_PRIVATE, // PLAYER_FIELD_HOME_REALM_TIME_OFFSET - UF_FLAG_PRIVATE, // PLAYER_FIELD_MOD_PET_HASTE - UF_FLAG_PRIVATE, // PLAYER_FIELD_BYTES2 - UF_FLAG_PRIVATE | UF_FLAG_URGENT_SELF_ONLY, // PLAYER_FIELD_BYTES3 - UF_FLAG_PRIVATE, // PLAYER_FIELD_LFG_BONUS_FACTION_ID - UF_FLAG_PRIVATE, // PLAYER_FIELD_LOOT_SPEC_ID - UF_FLAG_PRIVATE | UF_FLAG_URGENT_SELF_ONLY, // PLAYER_FIELD_OVERRIDE_ZONE_PVP_TYPE - UF_FLAG_PRIVATE, // PLAYER_FIELD_BAG_SLOT_FLAGS - UF_FLAG_PRIVATE, // PLAYER_FIELD_BAG_SLOT_FLAGS+1 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BAG_SLOT_FLAGS+2 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BAG_SLOT_FLAGS+3 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_BAG_SLOT_FLAGS - UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_BAG_SLOT_FLAGS+1 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_BAG_SLOT_FLAGS+2 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_BAG_SLOT_FLAGS+3 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_BAG_SLOT_FLAGS+4 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_BAG_SLOT_FLAGS+5 - UF_FLAG_PRIVATE, // PLAYER_FIELD_BANK_BAG_SLOT_FLAGS+6 - UF_FLAG_PRIVATE, // PLAYER_FIELD_INSERT_ITEMS_LEFT_TO_RIGHT - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+2 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+3 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+4 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+5 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+6 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+7 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+8 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+9 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+10 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+11 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+12 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+13 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+14 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+15 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+16 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+17 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+18 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+19 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+20 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+21 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+22 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+23 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+24 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+25 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+26 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+27 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+28 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+29 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+30 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+31 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+32 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+33 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+34 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+35 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+36 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+37 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+38 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+39 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+40 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+41 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+42 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+43 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+44 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+45 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+46 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+47 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+48 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+49 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+50 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+51 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+52 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+53 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+54 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+55 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+56 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+57 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+58 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+59 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+60 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+61 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+62 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+63 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+64 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+65 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+66 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+67 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+68 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+69 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+70 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+71 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+72 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+73 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+74 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+75 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+76 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+77 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+78 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+79 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+80 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+81 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+82 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+83 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+84 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+85 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+86 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+87 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+88 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+89 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+90 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+91 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+92 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+93 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+94 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+95 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+96 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+97 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+98 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+99 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+100 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+101 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+102 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+103 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+104 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+105 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+106 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+107 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+108 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+109 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+110 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+111 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+112 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+113 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+114 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+115 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+116 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+117 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+118 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+119 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+120 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+121 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+122 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+123 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+124 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+125 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+126 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+127 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+128 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+129 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+130 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+131 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+132 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+133 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+134 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+135 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+136 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+137 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+138 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+139 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+140 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+141 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+142 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+143 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+144 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+145 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+146 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+147 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+148 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+149 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+150 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+151 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+152 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+153 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+154 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+155 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+156 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+157 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+158 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+159 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+160 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+161 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+162 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+163 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+164 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+165 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+166 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+167 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+168 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+169 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+170 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+171 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+172 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+173 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+174 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+175 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+176 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+177 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+178 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+179 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+180 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+181 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+182 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+183 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+184 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+185 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+186 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+187 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+188 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+189 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+190 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+191 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+192 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+193 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+194 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+195 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+196 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+197 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+198 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+199 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+200 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+201 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+202 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+203 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+204 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+205 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+206 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+207 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+208 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+209 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+210 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+211 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+212 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+213 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+214 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+215 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+216 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+217 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+218 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+219 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+220 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+221 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+222 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+223 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+224 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+225 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+226 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+227 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+228 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+229 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+230 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+231 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+232 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+233 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+234 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+235 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+236 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+237 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+238 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+239 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+240 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+241 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+242 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+243 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+244 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+245 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+246 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+247 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+248 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+249 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+250 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+251 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+252 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+253 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+254 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+255 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+256 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+257 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+258 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+259 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+260 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+261 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+262 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+263 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+264 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+265 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+266 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+267 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+268 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+269 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+270 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+271 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+272 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+273 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+274 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+275 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+276 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+277 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+278 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+279 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+280 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+281 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+282 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+283 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+284 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+285 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+286 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+287 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+288 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+289 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+290 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+291 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+292 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+293 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+294 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+295 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+296 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+297 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+298 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+299 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+300 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+301 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+302 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+303 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+304 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+305 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+306 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+307 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+308 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+309 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+310 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+311 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+312 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+313 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+314 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+315 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+316 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+317 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+318 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+319 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+320 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+321 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+322 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+323 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+324 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+325 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+326 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+327 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+328 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+329 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+330 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+331 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+332 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+333 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+334 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+335 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+336 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+337 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+338 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+339 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+340 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+341 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+342 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+343 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+344 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+345 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+346 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+347 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+348 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+349 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+350 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+351 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+352 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+353 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+354 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+355 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+356 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+357 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+358 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+359 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+360 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+361 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+362 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+363 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+364 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+365 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+366 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+367 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+368 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+369 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+370 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+371 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+372 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+373 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+374 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+375 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+376 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+377 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+378 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+379 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+380 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+381 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+382 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+383 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+384 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+385 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+386 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+387 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+388 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+389 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+390 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+391 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+392 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+393 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+394 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+395 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+396 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+397 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+398 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+399 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+400 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+401 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+402 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+403 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+404 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+405 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+406 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+407 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+408 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+409 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+410 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+411 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+412 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+413 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+414 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+415 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+416 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+417 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+418 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+419 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+420 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+421 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+422 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+423 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+424 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+425 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+426 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+427 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+428 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+429 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+430 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+431 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+432 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+433 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+434 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+435 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+436 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+437 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+438 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+439 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+440 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+441 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+442 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+443 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+444 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+445 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+446 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+447 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+448 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+449 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+450 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+451 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+452 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+453 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+454 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+455 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+456 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+457 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+458 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+459 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+460 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+461 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+462 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+463 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+464 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+465 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+466 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+467 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+468 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+469 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+470 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+471 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+472 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+473 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+474 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+475 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+476 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+477 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+478 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+479 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+480 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+481 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+482 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+483 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+484 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+485 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+486 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+487 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+488 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+489 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+490 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+491 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+492 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+493 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+494 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+495 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+496 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+497 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+498 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+499 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+500 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+501 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+502 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+503 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+504 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+505 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+506 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+507 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+508 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+509 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+510 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+511 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+512 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+513 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+514 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+515 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+516 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+517 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+518 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+519 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+520 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+521 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+522 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+523 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+524 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+525 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+526 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+527 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+528 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+529 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+530 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+531 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+532 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+533 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+534 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+535 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+536 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+537 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+538 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+539 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+540 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+541 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+542 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+543 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+544 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+545 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+546 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+547 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+548 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+549 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+550 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+551 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+552 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+553 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+554 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+555 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+556 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+557 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+558 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+559 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+560 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+561 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+562 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+563 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+564 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+565 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+566 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+567 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+568 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+569 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+570 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+571 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+572 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+573 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+574 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+575 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+576 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+577 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+578 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+579 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+580 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+581 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+582 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+583 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+584 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+585 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+586 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+587 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+588 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+589 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+590 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+591 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+592 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+593 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+594 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+595 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+596 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+597 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+598 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+599 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+600 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+601 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+602 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+603 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+604 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+605 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+606 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+607 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+608 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+609 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+610 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+611 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+612 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+613 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+614 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+615 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+616 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+617 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+618 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+619 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+620 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+621 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+622 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+623 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+624 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+625 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+626 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+627 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+628 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+629 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+630 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+631 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+632 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+633 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+634 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+635 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+636 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+637 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+638 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+639 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+640 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+641 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+642 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+643 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+644 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+645 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+646 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+647 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+648 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+649 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+650 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+651 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+652 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+653 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+654 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+655 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+656 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+657 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+658 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+659 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+660 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+661 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+662 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+663 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+664 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+665 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+666 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+667 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+668 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+669 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+670 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+671 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+672 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+673 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+674 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+675 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+676 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+677 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+678 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+679 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+680 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+681 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+682 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+683 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+684 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+685 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+686 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+687 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+688 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+689 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+690 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+691 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+692 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+693 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+694 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+695 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+696 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+697 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+698 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+699 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+700 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+701 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+702 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+703 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+704 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+705 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+706 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+707 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+708 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+709 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+710 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+711 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+712 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+713 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+714 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+715 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+716 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+717 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+718 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+719 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+720 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+721 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+722 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+723 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+724 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+725 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+726 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+727 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+728 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+729 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+730 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+731 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+732 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+733 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+734 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+735 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+736 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+737 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+738 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+739 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+740 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+741 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+742 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+743 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+744 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+745 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+746 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+747 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+748 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+749 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+750 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+751 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+752 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+753 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+754 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+755 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+756 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+757 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+758 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+759 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+760 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+761 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+762 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+763 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+764 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+765 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+766 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+767 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+768 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+769 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+770 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+771 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+772 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+773 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+774 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+775 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+776 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+777 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+778 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+779 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+780 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+781 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+782 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+783 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+784 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+785 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+786 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+787 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+788 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+789 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+790 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+791 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+792 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+793 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+794 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+795 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+796 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+797 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+798 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+799 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+800 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+801 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+802 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+803 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+804 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+805 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+806 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+807 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+808 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+809 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+810 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+811 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+812 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+813 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+814 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+815 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+816 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+817 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+818 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+819 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+820 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+821 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+822 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+823 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+824 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+825 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+826 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+827 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+828 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+829 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+830 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+831 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+832 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+833 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+834 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+835 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+836 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+837 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+838 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+839 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+840 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+841 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+842 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+843 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+844 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+845 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+846 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+847 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+848 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+849 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+850 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+851 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+852 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+853 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+854 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+855 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+856 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+857 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+858 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+859 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+860 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+861 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+862 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+863 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+864 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+865 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+866 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+867 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+868 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+869 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+870 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+871 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+872 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+873 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+874 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+875 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+876 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+877 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+878 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+879 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+880 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+881 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+882 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+883 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+884 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+885 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+886 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+887 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+888 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+889 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+890 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+891 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+892 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+893 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+894 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+895 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+896 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+897 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+898 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+899 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+900 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+901 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+902 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+903 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+904 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+905 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+906 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+907 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+908 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+909 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+910 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+911 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+912 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+913 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+914 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+915 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+916 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+917 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+918 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+919 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+920 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+921 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+922 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+923 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+924 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+925 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+926 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+927 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+928 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+929 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+930 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+931 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+932 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+933 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+934 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+935 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+936 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+937 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+938 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+939 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+940 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+941 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+942 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+943 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+944 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+945 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+946 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+947 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+948 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+949 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+950 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+951 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+952 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+953 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+954 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+955 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+956 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+957 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+958 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+959 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+960 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+961 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+962 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+963 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+964 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+965 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+966 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+967 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+968 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+969 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+970 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+971 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+972 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+973 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+974 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+975 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+976 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+977 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+978 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+979 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+980 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+981 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+982 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+983 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+984 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+985 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+986 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+987 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+988 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+989 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+990 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+991 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+992 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+993 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+994 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+995 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+996 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+997 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+998 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+999 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1000 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1001 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1002 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1003 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1004 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1005 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1006 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1007 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1008 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1009 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1010 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1011 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1012 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1013 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1014 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1015 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1016 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1017 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1018 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1019 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1020 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1021 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1022 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1023 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1024 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1025 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1026 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1027 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1028 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1029 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1030 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1031 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1032 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1033 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1034 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1035 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1036 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1037 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1038 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1039 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1040 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1041 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1042 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1043 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1044 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1045 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1046 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1047 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1048 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1049 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1050 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1051 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1052 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1053 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1054 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1055 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1056 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1057 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1058 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1059 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1060 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1061 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1062 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1063 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1064 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1065 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1066 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1067 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1068 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1069 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1070 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1071 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1072 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1073 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1074 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1075 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1076 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1077 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1078 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1079 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1080 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1081 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1082 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1083 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1084 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1085 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1086 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1087 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1088 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1089 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1090 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1091 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1092 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1093 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1094 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1095 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1096 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1097 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1098 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1099 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1100 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1101 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1102 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1103 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1104 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1105 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1106 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1107 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1108 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1109 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1110 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1111 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1112 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1113 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1114 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1115 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1116 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1117 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1118 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1119 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1120 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1121 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1122 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1123 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1124 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1125 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1126 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1127 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1128 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1129 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1130 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1131 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1132 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1133 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1134 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1135 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1136 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1137 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1138 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1139 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1140 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1141 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1142 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1143 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1144 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1145 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1146 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1147 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1148 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1149 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1150 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1151 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1152 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1153 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1154 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1155 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1156 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1157 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1158 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1159 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1160 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1161 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1162 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1163 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1164 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1165 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1166 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1167 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1168 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1169 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1170 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1171 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1172 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1173 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1174 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1175 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1176 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1177 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1178 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1179 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1180 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1181 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1182 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1183 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1184 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1185 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1186 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1187 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1188 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1189 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1190 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1191 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1192 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1193 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1194 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1195 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1196 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1197 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1198 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1199 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1200 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1201 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1202 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1203 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1204 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1205 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1206 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1207 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1208 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1209 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1210 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1211 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1212 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1213 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1214 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1215 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1216 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1217 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1218 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1219 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1220 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1221 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1222 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1223 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1224 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1225 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1226 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1227 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1228 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1229 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1230 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1231 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1232 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1233 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1234 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1235 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1236 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1237 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1238 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1239 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1240 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1241 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1242 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1243 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1244 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1245 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1246 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1247 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1248 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1249 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1250 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1251 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1252 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1253 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1254 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1255 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1256 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1257 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1258 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1259 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1260 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1261 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1262 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1263 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1264 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1265 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1266 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1267 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1268 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1269 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1270 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1271 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1272 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1273 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1274 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1275 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1276 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1277 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1278 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1279 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1280 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1281 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1282 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1283 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1284 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1285 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1286 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1287 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1288 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1289 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1290 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1291 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1292 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1293 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1294 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1295 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1296 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1297 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1298 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1299 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1300 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1301 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1302 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1303 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1304 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1305 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1306 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1307 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1308 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1309 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1310 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1311 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1312 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1313 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1314 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1315 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1316 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1317 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1318 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1319 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1320 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1321 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1322 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1323 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1324 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1325 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1326 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1327 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1328 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1329 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1330 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1331 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1332 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1333 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1334 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1335 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1336 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1337 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1338 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1339 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1340 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1341 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1342 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1343 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1344 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1345 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1346 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1347 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1348 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1349 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1350 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1351 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1352 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1353 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1354 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1355 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1356 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1357 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1358 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1359 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1360 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1361 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1362 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1363 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1364 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1365 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1366 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1367 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1368 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1369 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1370 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1371 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1372 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1373 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1374 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1375 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1376 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1377 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1378 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1379 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1380 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1381 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1382 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1383 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1384 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1385 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1386 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1387 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1388 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1389 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1390 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1391 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1392 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1393 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1394 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1395 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1396 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1397 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1398 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1399 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1400 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1401 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1402 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1403 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1404 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1405 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1406 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1407 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1408 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1409 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1410 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1411 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1412 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1413 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1414 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1415 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1416 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1417 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1418 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1419 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1420 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1421 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1422 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1423 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1424 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1425 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1426 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1427 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1428 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1429 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1430 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1431 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1432 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1433 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1434 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1435 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1436 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1437 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1438 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1439 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1440 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1441 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1442 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1443 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1444 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1445 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1446 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1447 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1448 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1449 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1450 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1451 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1452 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1453 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1454 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1455 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1456 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1457 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1458 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1459 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1460 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1461 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1462 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1463 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1464 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1465 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1466 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1467 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1468 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1469 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1470 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1471 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1472 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1473 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1474 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1475 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1476 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1477 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1478 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1479 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1480 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1481 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1482 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1483 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1484 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1485 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1486 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1487 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1488 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1489 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1490 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1491 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1492 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1493 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1494 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1495 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1496 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1497 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1498 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1499 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1500 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1501 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1502 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1503 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1504 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1505 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1506 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1507 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1508 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1509 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1510 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1511 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1512 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1513 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1514 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1515 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1516 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1517 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1518 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1519 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1520 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1521 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1522 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1523 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1524 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1525 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1526 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1527 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1528 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1529 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1530 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1531 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1532 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1533 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1534 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1535 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1536 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1537 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1538 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1539 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1540 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1541 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1542 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1543 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1544 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1545 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1546 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1547 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1548 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1549 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1550 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1551 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1552 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1553 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1554 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1555 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1556 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1557 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1558 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1559 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1560 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1561 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1562 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1563 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1564 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1565 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1566 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1567 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1568 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1569 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1570 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1571 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1572 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1573 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1574 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1575 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1576 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1577 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1578 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1579 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1580 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1581 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1582 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1583 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1584 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1585 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1586 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1587 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1588 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1589 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1590 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1591 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1592 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1593 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1594 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1595 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1596 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1597 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1598 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1599 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1600 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1601 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1602 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1603 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1604 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1605 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1606 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1607 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1608 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1609 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1610 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1611 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1612 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1613 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1614 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1615 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1616 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1617 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1618 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1619 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1620 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1621 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1622 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1623 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1624 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1625 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1626 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1627 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1628 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1629 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1630 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1631 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1632 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1633 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1634 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1635 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1636 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1637 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1638 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1639 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1640 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1641 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1642 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1643 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1644 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1645 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1646 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1647 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1648 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1649 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1650 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1651 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1652 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1653 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1654 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1655 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1656 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1657 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1658 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1659 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1660 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1661 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1662 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1663 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1664 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1665 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1666 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1667 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1668 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1669 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1670 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1671 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1672 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1673 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1674 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1675 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1676 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1677 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1678 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1679 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1680 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1681 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1682 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1683 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1684 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1685 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1686 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1687 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1688 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1689 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1690 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1691 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1692 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1693 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1694 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1695 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1696 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1697 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1698 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1699 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1700 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1701 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1702 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1703 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1704 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1705 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1706 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1707 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1708 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1709 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1710 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1711 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1712 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1713 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1714 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1715 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1716 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1717 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1718 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1719 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1720 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1721 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1722 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1723 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1724 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1725 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1726 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1727 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1728 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1729 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1730 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1731 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1732 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1733 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1734 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1735 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1736 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1737 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1738 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1739 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1740 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1741 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1742 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1743 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1744 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1745 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1746 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1747 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1748 - UF_FLAG_PRIVATE, // PLAYER_FIELD_QUEST_COMPLETED+1749 - UF_FLAG_PRIVATE, // PLAYER_FIELD_HONOR - UF_FLAG_PRIVATE, // PLAYER_FIELD_HONOR_NEXT_LEVEL + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+1 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+2 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+3 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+4 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+5 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+6 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+7 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+8 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+9 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+10 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+11 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+12 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+13 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+14 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+15 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+16 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+17 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+18 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+19 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+20 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+21 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+22 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+23 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+24 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+25 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+26 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+27 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+28 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+29 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+30 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+31 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+32 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+33 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+34 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+35 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+36 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+37 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+38 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+39 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+40 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+41 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+42 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+43 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+44 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+45 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+46 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+47 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+48 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+49 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+50 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+51 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+52 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+53 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+54 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+55 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+56 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+57 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+58 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+59 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+60 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+61 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+62 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+63 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+64 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+65 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+66 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+67 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+68 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+69 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+70 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+71 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+72 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+73 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+74 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+75 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+76 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+77 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+78 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+79 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+80 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+81 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+82 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+83 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+84 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+85 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+86 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+87 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+88 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+89 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+90 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+91 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+92 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+93 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+94 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+95 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+96 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+97 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+98 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+99 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+100 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+101 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+102 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+103 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+104 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+105 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+106 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+107 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+108 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+109 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+110 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+111 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+112 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+113 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+114 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+115 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+116 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+117 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+118 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+119 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+120 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+121 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+122 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+123 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+124 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+125 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+126 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+127 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+128 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+129 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+130 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+131 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+132 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+133 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+134 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+135 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+136 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+137 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+138 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+139 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+140 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+141 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+142 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+143 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+144 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+145 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+146 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+147 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+148 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+149 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+150 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+151 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+152 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+153 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+154 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+155 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+156 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+157 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+158 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+159 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+160 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+161 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+162 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+163 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+164 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+165 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+166 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+167 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+168 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+169 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+170 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+171 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+172 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+173 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+174 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+175 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+176 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+177 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+178 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+179 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+180 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+181 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+182 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+183 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+184 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+185 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+186 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+187 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+188 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+189 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+190 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+191 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+192 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+193 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+194 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+195 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+196 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+197 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+198 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+199 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+200 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+201 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+202 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+203 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+204 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+205 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+206 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+207 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+208 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+209 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+210 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+211 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+212 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+213 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+214 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+215 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+216 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+217 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+218 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+219 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+220 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+221 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+222 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+223 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+224 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+225 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+226 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+227 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+228 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+229 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+230 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+231 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+232 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+233 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+234 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+235 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+236 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+237 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+238 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+239 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+240 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+241 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+242 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+243 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+244 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+245 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+246 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+247 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+248 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+249 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+250 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+251 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+252 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+253 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+254 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+255 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+256 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+257 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+258 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+259 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+260 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+261 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+262 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+263 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+264 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+265 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+266 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+267 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+268 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+269 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+270 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+271 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+272 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+273 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+274 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+275 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+276 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+277 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+278 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+279 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+280 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+281 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+282 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+283 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+284 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+285 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+286 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+287 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+288 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+289 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+290 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+291 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+292 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+293 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+294 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+295 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+296 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+297 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+298 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+299 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+300 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+301 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+302 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+303 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+304 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+305 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+306 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+307 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+308 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+309 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+310 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+311 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+312 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+313 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+314 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+315 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+316 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+317 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+318 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+319 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+320 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+321 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+322 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+323 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+324 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+325 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+326 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+327 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+328 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+329 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+330 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+331 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+332 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+333 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+334 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+335 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+336 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+337 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+338 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+339 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+340 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+341 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+342 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+343 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+344 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+345 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+346 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+347 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+348 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+349 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+350 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+351 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+352 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+353 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+354 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+355 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+356 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+357 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+358 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+359 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+360 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+361 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+362 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+363 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+364 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+365 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+366 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+367 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+368 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+369 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+370 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+371 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+372 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+373 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+374 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+375 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+376 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+377 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+378 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+379 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+380 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+381 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+382 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+383 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+384 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+385 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+386 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+387 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+388 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+389 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+390 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+391 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+392 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+393 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+394 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+395 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+396 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+397 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+398 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+399 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+400 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+401 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+402 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+403 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+404 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+405 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+406 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+407 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+408 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+409 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+410 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+411 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+412 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+413 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+414 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+415 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+416 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+417 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+418 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+419 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+420 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+421 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+422 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+423 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+424 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+425 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+426 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+427 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+428 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+429 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+430 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+431 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+432 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+433 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+434 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+435 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+436 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+437 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+438 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+439 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+440 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+441 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+442 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+443 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+444 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+445 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+446 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+447 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+448 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+449 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+450 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+451 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+452 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+453 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+454 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+455 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+456 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+457 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+458 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+459 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+460 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+461 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+462 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+463 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+464 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+465 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+466 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+467 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+468 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+469 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+470 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+471 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+472 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+473 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+474 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+475 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+476 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+477 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+478 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+479 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+480 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+481 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+482 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+483 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+484 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+485 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+486 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+487 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+488 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+489 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+490 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+491 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+492 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+493 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+494 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+495 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+496 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+497 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+498 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+499 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+500 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+501 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+502 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+503 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+504 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+505 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+506 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+507 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+508 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+509 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+510 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+511 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+512 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+513 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+514 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+515 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+516 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+517 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+518 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+519 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+520 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+521 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+522 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+523 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+524 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+525 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+526 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+527 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+528 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+529 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+530 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+531 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+532 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+533 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+534 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+535 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+536 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+537 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+538 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+539 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+540 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+541 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+542 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+543 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+544 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+545 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+546 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+547 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+548 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+549 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+550 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+551 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+552 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+553 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+554 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+555 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+556 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+557 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+558 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+559 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+560 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+561 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+562 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+563 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+564 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+565 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+566 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+567 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+568 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+569 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+570 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+571 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+572 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+573 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+574 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+575 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+576 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+577 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+578 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+579 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+580 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+581 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+582 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+583 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+584 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+585 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+586 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+587 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+588 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+589 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+590 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+591 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+592 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+593 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+594 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+595 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+596 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+597 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+598 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+599 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+600 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+601 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+602 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+603 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+604 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+605 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+606 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+607 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+608 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+609 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+610 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+611 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+612 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+613 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+614 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+615 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+616 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+617 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+618 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+619 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+620 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+621 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+622 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+623 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+624 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+625 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+626 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+627 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+628 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+629 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+630 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+631 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+632 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+633 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+634 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+635 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+636 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+637 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+638 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+639 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+640 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+641 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+642 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+643 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+644 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+645 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+646 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+647 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+648 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+649 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+650 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+651 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+652 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+653 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+654 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+655 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+656 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+657 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+658 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+659 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+660 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+661 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+662 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+663 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+664 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+665 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+666 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+667 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+668 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+669 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+670 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+671 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+672 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+673 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+674 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+675 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+676 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+677 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+678 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+679 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+680 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+681 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+682 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+683 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+684 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+685 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+686 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+687 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+688 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+689 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+690 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+691 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+692 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+693 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+694 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+695 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+696 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+697 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+698 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+699 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+700 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+701 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+702 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+703 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+704 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+705 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+706 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+707 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+708 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+709 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+710 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+711 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+712 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+713 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+714 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+715 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+716 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+717 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+718 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+719 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+720 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+721 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+722 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+723 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+724 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+725 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+726 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+727 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+728 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+729 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+730 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+731 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+732 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+733 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+734 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+735 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+736 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+737 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+738 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+739 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+740 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+741 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+742 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+743 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+744 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+745 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+746 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+747 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+748 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+749 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+750 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+751 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+752 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+753 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+754 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+755 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+756 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+757 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+758 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+759 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+760 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+761 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+762 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+763 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+764 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+765 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+766 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+767 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+768 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+769 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+770 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+771 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+772 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+773 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+774 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+775 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+776 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+777 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+778 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD+779 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_FARSIGHT + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_FARSIGHT+1 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_FARSIGHT+2 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_FARSIGHT+3 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID+1 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID+2 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID+3 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KNOWN_TITLES + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KNOWN_TITLES+1 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KNOWN_TITLES+2 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KNOWN_TITLES+3 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KNOWN_TITLES+4 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KNOWN_TITLES+5 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KNOWN_TITLES+6 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KNOWN_TITLES+7 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KNOWN_TITLES+8 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KNOWN_TITLES+9 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KNOWN_TITLES+10 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KNOWN_TITLES+11 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COINAGE + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COINAGE+1 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_XP + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_TRIAL_XP + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+1 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+2 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+3 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+4 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+5 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+6 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+7 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+8 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+9 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+10 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+11 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+12 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+13 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+14 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+15 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+16 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+17 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+18 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+19 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+20 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+21 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+22 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+23 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+24 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+25 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+26 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+27 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+28 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+29 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+30 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+31 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+32 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+33 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+34 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+35 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+36 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+37 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+38 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+39 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+40 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+41 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+42 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+43 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+44 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+45 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+46 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+47 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+48 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+49 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+50 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+51 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+52 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+53 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+54 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+55 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+56 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+57 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+58 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+59 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+60 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+61 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+62 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+63 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+64 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+65 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+66 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+67 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+68 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+69 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+70 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+71 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+72 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+73 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+74 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+75 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+76 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+77 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+78 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+79 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+80 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+81 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+82 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+83 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+84 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+85 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+86 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+87 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+88 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+89 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+90 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+91 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+92 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+93 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+94 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+95 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+96 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+97 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+98 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+99 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+100 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+101 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+102 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+103 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+104 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+105 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+106 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+107 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+108 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+109 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+110 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+111 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+112 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+113 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+114 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+115 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+116 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+117 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+118 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+119 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+120 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+121 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+122 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+123 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+124 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+125 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+126 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+127 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+128 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+129 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+130 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+131 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+132 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+133 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+134 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+135 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+136 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+137 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+138 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+139 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+140 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+141 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+142 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+143 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+144 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+145 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+146 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+147 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+148 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+149 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+150 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+151 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+152 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+153 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+154 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+155 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+156 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+157 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+158 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+159 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+160 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+161 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+162 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+163 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+164 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+165 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+166 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+167 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+168 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+169 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+170 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+171 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+172 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+173 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+174 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+175 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+176 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+177 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+178 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+179 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+180 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+181 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+182 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+183 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+184 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+185 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+186 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+187 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+188 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+189 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+190 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+191 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+192 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+193 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+194 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+195 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+196 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+197 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+198 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+199 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+200 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+201 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+202 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+203 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+204 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+205 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+206 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+207 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+208 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+209 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+210 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+211 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+212 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+213 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+214 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+215 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+216 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+217 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+218 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+219 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+220 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+221 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+222 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+223 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+224 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+225 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+226 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+227 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+228 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+229 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+230 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+231 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+232 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+233 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+234 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+235 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+236 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+237 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+238 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+239 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+240 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+241 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+242 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+243 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+244 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+245 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+246 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+247 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+248 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+249 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+250 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+251 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+252 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+253 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+254 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+255 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+256 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+257 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+258 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+259 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+260 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+261 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+262 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+263 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+264 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+265 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+266 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+267 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+268 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+269 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+270 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+271 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+272 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+273 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+274 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+275 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+276 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+277 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+278 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+279 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+280 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+281 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+282 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+283 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+284 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+285 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+286 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+287 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+288 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+289 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+290 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+291 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+292 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+293 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+294 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+295 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+296 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+297 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+298 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+299 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+300 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+301 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+302 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+303 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+304 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+305 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+306 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+307 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+308 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+309 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+310 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+311 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+312 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+313 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+314 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+315 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+316 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+317 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+318 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+319 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+320 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+321 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+322 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+323 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+324 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+325 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+326 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+327 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+328 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+329 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+330 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+331 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+332 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+333 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+334 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+335 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+336 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+337 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+338 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+339 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+340 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+341 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+342 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+343 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+344 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+345 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+346 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+347 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+348 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+349 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+350 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+351 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+352 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+353 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+354 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+355 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+356 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+357 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+358 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+359 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+360 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+361 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+362 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+363 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+364 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+365 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+366 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+367 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+368 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+369 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+370 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+371 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+372 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+373 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+374 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+375 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+376 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+377 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+378 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+379 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+380 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+381 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+382 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+383 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+384 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+385 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+386 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+387 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+388 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+389 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+390 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+391 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+392 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+393 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+394 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+395 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+396 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+397 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+398 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+399 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+400 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+401 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+402 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+403 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+404 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+405 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+406 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+407 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+408 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+409 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+410 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+411 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+412 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+413 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+414 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+415 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+416 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+417 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+418 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+419 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+420 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+421 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+422 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+423 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+424 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+425 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+426 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+427 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+428 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+429 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+430 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+431 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+432 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+433 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+434 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+435 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+436 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+437 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+438 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+439 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+440 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+441 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+442 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+443 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+444 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+445 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+446 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+447 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+448 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+449 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+450 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+451 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+452 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+453 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+454 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+455 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+456 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+457 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+458 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+459 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+460 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+461 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+462 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+463 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+464 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+465 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+466 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+467 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+468 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+469 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+470 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+471 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+472 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+473 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+474 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+475 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+476 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+477 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+478 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+479 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+480 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+481 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+482 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+483 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+484 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+485 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+486 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+487 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+488 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+489 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+490 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+491 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+492 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+493 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+494 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+495 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+496 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+497 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+498 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+499 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+500 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+501 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+502 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+503 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+504 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+505 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+506 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+507 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+508 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+509 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+510 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+511 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+512 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+513 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+514 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+515 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+516 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+517 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+518 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+519 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+520 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+521 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+522 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+523 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+524 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+525 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+526 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+527 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+528 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+529 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+530 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+531 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+532 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+533 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+534 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+535 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+536 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+537 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+538 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+539 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+540 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+541 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+542 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+543 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+544 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+545 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+546 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+547 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+548 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+549 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+550 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+551 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+552 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+553 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+554 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+555 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+556 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+557 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+558 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+559 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+560 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+561 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+562 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+563 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+564 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+565 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+566 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+567 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+568 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+569 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+570 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+571 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+572 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+573 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+574 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+575 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+576 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+577 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+578 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+579 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+580 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+581 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+582 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+583 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+584 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+585 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+586 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+587 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+588 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+589 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+590 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+591 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+592 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+593 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+594 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+595 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+596 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+597 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+598 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+599 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+600 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+601 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+602 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+603 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+604 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+605 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+606 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+607 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+608 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+609 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+610 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+611 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+612 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+613 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+614 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+615 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+616 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+617 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+618 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+619 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+620 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+621 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+622 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+623 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+624 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+625 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+626 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+627 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+628 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+629 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+630 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+631 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+632 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+633 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+634 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+635 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+636 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+637 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+638 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+639 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+640 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+641 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+642 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+643 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+644 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+645 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+646 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+647 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+648 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+649 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+650 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+651 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+652 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+653 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+654 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+655 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+656 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+657 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+658 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+659 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+660 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+661 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+662 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+663 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+664 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+665 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+666 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+667 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+668 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+669 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+670 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+671 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+672 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+673 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+674 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+675 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+676 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+677 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+678 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+679 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+680 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+681 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+682 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+683 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+684 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+685 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+686 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+687 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+688 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+689 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+690 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+691 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+692 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+693 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+694 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+695 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+696 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+697 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+698 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+699 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+700 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+701 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+702 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+703 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+704 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+705 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+706 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+707 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+708 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+709 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+710 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+711 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+712 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+713 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+714 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+715 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+716 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+717 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+718 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+719 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+720 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+721 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+722 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+723 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+724 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+725 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+726 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+727 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+728 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+729 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+730 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+731 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+732 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+733 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+734 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+735 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+736 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+737 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+738 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+739 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+740 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+741 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+742 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+743 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+744 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+745 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+746 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+747 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+748 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+749 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+750 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+751 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+752 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+753 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+754 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+755 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+756 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+757 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+758 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+759 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+760 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+761 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+762 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+763 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+764 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+765 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+766 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+767 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+768 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+769 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+770 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+771 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+772 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+773 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+774 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+775 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+776 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+777 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+778 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+779 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+780 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+781 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+782 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+783 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+784 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+785 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+786 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+787 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+788 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+789 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+790 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+791 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+792 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+793 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+794 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+795 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+796 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+797 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+798 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+799 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+800 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+801 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+802 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+803 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+804 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+805 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+806 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+807 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+808 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+809 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+810 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+811 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+812 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+813 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+814 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+815 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+816 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+817 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+818 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+819 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+820 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+821 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+822 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+823 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+824 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+825 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+826 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+827 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+828 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+829 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+830 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+831 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+832 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+833 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+834 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+835 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+836 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+837 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+838 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+839 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+840 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+841 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+842 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+843 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+844 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+845 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+846 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+847 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+848 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+849 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+850 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+851 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+852 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+853 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+854 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+855 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+856 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+857 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+858 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+859 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+860 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+861 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+862 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+863 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+864 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+865 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+866 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+867 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+868 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+869 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+870 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+871 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+872 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+873 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+874 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+875 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+876 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+877 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+878 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+879 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+880 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+881 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+882 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+883 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+884 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+885 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+886 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+887 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+888 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+889 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+890 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+891 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+892 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+893 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+894 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SKILL_LINEID+895 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_CHARACTER_POINTS + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MAX_TALENT_TIERS + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_TRACK_CREATURES + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_TRACK_RESOURCES + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_TRACK_RESOURCES+1 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPERTISE + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_OFFHAND_EXPERTISE + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_RANGED_EXPERTISE + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING_EXPERTISE + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BLOCK_PERCENTAGE + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_DODGE_PERCENTAGE + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_DODGE_PERCENTAGE_FROM_ATTRIBUTE + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_PARRY_PERCENTAGE + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_PARRY_PERCENTAGE_FROM_ATTRIBUTE + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_CRIT_PERCENTAGE + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_RANGED_CRIT_PERCENTAGE + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_OFFHAND_CRIT_PERCENTAGE + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SPELL_CRIT_PERCENTAGE1 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SHIELD_BLOCK + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SHIELD_BLOCK_CRIT_PERCENTAGE + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MASTERY + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SPEED + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_AVOIDANCE + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_STURDINESS + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_VERSATILITY + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_VERSATILITY_BONUS + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_PVP_POWER_DAMAGE + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_PVP_POWER_HEALING + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+1 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+2 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+3 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+4 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+5 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+6 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+7 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+8 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+9 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+10 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+11 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+12 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+13 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+14 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+15 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+16 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+17 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+18 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+19 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+20 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+21 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+22 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+23 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+24 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+25 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+26 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+27 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+28 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+29 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+30 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+31 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+32 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+33 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+34 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+35 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+36 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+37 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+38 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+39 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+40 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+41 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+42 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+43 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+44 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+45 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+46 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+47 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+48 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+49 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+50 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+51 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+52 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+53 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+54 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+55 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+56 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+57 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+58 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+59 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+60 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+61 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+62 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+63 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+64 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+65 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+66 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+67 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+68 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+69 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+70 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+71 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+72 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+73 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+74 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+75 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+76 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+77 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+78 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+79 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+80 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+81 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+82 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+83 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+84 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+85 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+86 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+87 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+88 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+89 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+90 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+91 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+92 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+93 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+94 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+95 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+96 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+97 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+98 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+99 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+100 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+101 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+102 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+103 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+104 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+105 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+106 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+107 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+108 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+109 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+110 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+111 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+112 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+113 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+114 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+115 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+116 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+117 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+118 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+119 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+120 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+121 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+122 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+123 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+124 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+125 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+126 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+127 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+128 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+129 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+130 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+131 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+132 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+133 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+134 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+135 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+136 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+137 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+138 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+139 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+140 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+141 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+142 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+143 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+144 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+145 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+146 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+147 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+148 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+149 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+150 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+151 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+152 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+153 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+154 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+155 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+156 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+157 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+158 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+159 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+160 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+161 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+162 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+163 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+164 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+165 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+166 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+167 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+168 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+169 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+170 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+171 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+172 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+173 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+174 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+175 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+176 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+177 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+178 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+179 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+180 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+181 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+182 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+183 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+184 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+185 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+186 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+187 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+188 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+189 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+190 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+191 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+192 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+193 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+194 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+195 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+196 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+197 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+198 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+199 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+200 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+201 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+202 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+203 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+204 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+205 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+206 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+207 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+208 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+209 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+210 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+211 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+212 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+213 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+214 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+215 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+216 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+217 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+218 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+219 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+220 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+221 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+222 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+223 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+224 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+225 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+226 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+227 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+228 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+229 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+230 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+231 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+232 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+233 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+234 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+235 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+236 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+237 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+238 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+239 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+240 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+241 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+242 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+243 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+244 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+245 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+246 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+247 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+248 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+249 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+250 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+251 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+252 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+253 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+254 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+255 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+256 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+257 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+258 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+259 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+260 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+261 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+262 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+263 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+264 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+265 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+266 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+267 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+268 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+269 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+270 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+271 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+272 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+273 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+274 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+275 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+276 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+277 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+278 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+279 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+280 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+281 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+282 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+283 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+284 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+285 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+286 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+287 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+288 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+289 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+290 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+291 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+292 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+293 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+294 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+295 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+296 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+297 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+298 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+299 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+300 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+301 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+302 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+303 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+304 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+305 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+306 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+307 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+308 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+309 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+310 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+311 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+312 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+313 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+314 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+315 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+316 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+317 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+318 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+319 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_REST_INFO + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_REST_INFO+1 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_REST_INFO+2 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_REST_INFO+3 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS+1 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS+2 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS+3 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS+4 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS+5 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS+6 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+1 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+2 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+3 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+4 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+5 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG+6 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT+1 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT+2 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT+3 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT+4 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT+5 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT+6 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_POS + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_HEALING_PCT + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_PCT + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_PERIODIC_HEALING_DONE_PERCENT + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_WEAPON_DMG_MULTIPLIERS + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_WEAPON_DMG_MULTIPLIERS+1 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_WEAPON_DMG_MULTIPLIERS+2 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_WEAPON_ATK_SPEED_MULTIPLIERS + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_WEAPON_ATK_SPEED_MULTIPLIERS+1 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_WEAPON_ATK_SPEED_MULTIPLIERS+2 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_SPELL_POWER_PCT + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_RESILIENCE_PERCENT + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_OVERRIDE_SPELL_POWER_BY_AP_PCT + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_OVERRIDE_AP_BY_SPELL_POWER_PERCENT + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_TARGET_RESISTANCE + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_LOCAL_FLAGS + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BYTES + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_PVP_MEDALS + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_PRICE + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_PRICE+1 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_PRICE+2 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_PRICE+3 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_PRICE+4 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_PRICE+5 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_PRICE+6 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_PRICE+7 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_PRICE+8 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_PRICE+9 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_PRICE+10 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_PRICE+11 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP+1 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP+2 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP+3 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP+4 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP+5 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP+6 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP+7 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP+8 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP+9 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP+10 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP+11 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_KILLS + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_WATCHED_FACTION_INDEX + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+1 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+2 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+3 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+4 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+5 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+6 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+7 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+8 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+9 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+10 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+11 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+12 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+13 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+14 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+15 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+16 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+17 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+18 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+19 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+20 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+21 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+22 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+23 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+24 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+25 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+26 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+27 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+28 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+29 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+30 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_COMBAT_RATING+31 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+1 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+2 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+3 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+4 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+5 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+6 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+7 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+8 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+9 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+10 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+11 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+12 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+13 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+14 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+15 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+16 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+17 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+18 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+19 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+20 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+21 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+22 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+23 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+24 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+25 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+26 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+27 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+28 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+29 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+30 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+31 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+32 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+33 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+34 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+35 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+36 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+37 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+38 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+39 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+40 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+41 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+42 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+43 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+44 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+45 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+46 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+47 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+48 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+49 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+50 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+51 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+52 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO+53 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MAX_LEVEL + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MAX_CREATURE_SCALING_LEVEL + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_NO_REAGENT_COST + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_NO_REAGENT_COST+1 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_NO_REAGENT_COST+2 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_NO_REAGENT_COST+3 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_PET_SPELL_POWER + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_PROFESSION_SKILL_LINE + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_PROFESSION_SKILL_LINE+1 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_UI_HIT_MODIFIER + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_UI_SPELL_HIT_MODIFIER + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_HOME_REALM_TIME_OFFSET + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_MOD_PET_HASTE + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BYTES2 + UF_FLAG_PUBLIC | UF_FLAG_URGENT_SELF_ONLY, // ACTIVE_PLAYER_FIELD_BYTES3 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_LFG_BONUS_FACTION_ID + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_LOOT_SPEC_ID + UF_FLAG_PUBLIC | UF_FLAG_URGENT_SELF_ONLY, // ACTIVE_PLAYER_FIELD_OVERRIDE_ZONE_PVP_TYPE + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BAG_SLOT_FLAGS + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BAG_SLOT_FLAGS+1 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BAG_SLOT_FLAGS+2 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BAG_SLOT_FLAGS+3 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BANK_BAG_SLOT_FLAGS + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BANK_BAG_SLOT_FLAGS+1 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BANK_BAG_SLOT_FLAGS+2 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BANK_BAG_SLOT_FLAGS+3 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BANK_BAG_SLOT_FLAGS+4 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BANK_BAG_SLOT_FLAGS+5 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_BANK_BAG_SLOT_FLAGS+6 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_INSERT_ITEMS_LEFT_TO_RIGHT + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+2 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+3 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+4 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+5 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+6 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+7 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+8 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+9 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+10 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+11 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+12 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+13 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+14 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+15 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+16 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+17 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+18 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+19 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+20 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+21 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+22 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+23 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+24 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+25 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+26 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+27 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+28 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+29 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+30 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+31 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+32 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+33 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+34 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+35 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+36 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+37 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+38 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+39 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+40 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+41 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+42 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+43 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+44 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+45 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+46 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+47 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+48 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+49 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+50 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+51 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+52 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+53 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+54 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+55 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+56 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+57 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+58 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+59 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+60 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+61 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+62 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+63 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+64 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+65 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+66 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+67 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+68 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+69 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+70 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+71 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+72 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+73 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+74 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+75 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+76 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+77 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+78 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+79 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+80 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+81 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+82 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+83 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+84 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+85 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+86 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+87 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+88 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+89 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+90 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+91 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+92 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+93 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+94 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+95 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+96 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+97 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+98 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+99 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+100 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+101 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+102 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+103 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+104 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+105 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+106 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+107 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+108 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+109 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+110 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+111 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+112 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+113 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+114 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+115 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+116 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+117 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+118 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+119 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+120 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+121 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+122 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+123 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+124 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+125 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+126 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+127 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+128 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+129 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+130 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+131 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+132 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+133 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+134 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+135 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+136 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+137 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+138 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+139 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+140 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+141 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+142 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+143 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+144 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+145 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+146 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+147 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+148 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+149 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+150 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+151 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+152 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+153 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+154 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+155 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+156 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+157 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+158 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+159 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+160 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+161 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+162 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+163 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+164 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+165 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+166 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+167 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+168 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+169 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+170 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+171 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+172 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+173 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+174 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+175 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+176 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+177 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+178 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+179 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+180 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+181 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+182 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+183 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+184 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+185 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+186 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+187 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+188 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+189 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+190 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+191 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+192 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+193 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+194 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+195 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+196 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+197 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+198 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+199 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+200 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+201 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+202 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+203 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+204 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+205 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+206 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+207 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+208 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+209 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+210 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+211 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+212 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+213 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+214 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+215 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+216 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+217 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+218 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+219 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+220 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+221 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+222 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+223 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+224 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+225 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+226 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+227 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+228 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+229 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+230 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+231 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+232 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+233 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+234 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+235 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+236 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+237 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+238 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+239 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+240 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+241 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+242 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+243 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+244 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+245 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+246 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+247 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+248 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+249 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+250 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+251 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+252 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+253 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+254 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+255 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+256 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+257 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+258 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+259 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+260 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+261 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+262 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+263 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+264 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+265 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+266 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+267 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+268 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+269 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+270 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+271 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+272 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+273 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+274 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+275 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+276 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+277 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+278 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+279 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+280 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+281 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+282 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+283 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+284 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+285 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+286 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+287 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+288 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+289 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+290 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+291 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+292 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+293 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+294 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+295 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+296 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+297 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+298 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+299 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+300 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+301 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+302 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+303 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+304 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+305 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+306 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+307 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+308 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+309 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+310 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+311 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+312 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+313 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+314 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+315 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+316 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+317 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+318 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+319 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+320 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+321 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+322 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+323 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+324 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+325 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+326 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+327 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+328 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+329 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+330 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+331 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+332 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+333 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+334 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+335 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+336 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+337 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+338 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+339 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+340 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+341 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+342 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+343 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+344 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+345 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+346 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+347 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+348 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+349 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+350 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+351 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+352 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+353 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+354 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+355 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+356 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+357 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+358 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+359 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+360 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+361 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+362 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+363 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+364 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+365 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+366 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+367 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+368 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+369 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+370 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+371 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+372 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+373 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+374 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+375 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+376 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+377 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+378 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+379 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+380 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+381 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+382 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+383 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+384 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+385 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+386 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+387 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+388 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+389 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+390 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+391 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+392 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+393 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+394 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+395 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+396 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+397 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+398 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+399 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+400 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+401 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+402 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+403 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+404 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+405 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+406 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+407 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+408 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+409 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+410 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+411 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+412 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+413 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+414 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+415 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+416 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+417 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+418 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+419 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+420 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+421 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+422 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+423 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+424 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+425 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+426 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+427 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+428 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+429 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+430 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+431 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+432 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+433 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+434 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+435 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+436 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+437 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+438 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+439 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+440 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+441 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+442 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+443 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+444 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+445 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+446 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+447 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+448 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+449 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+450 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+451 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+452 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+453 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+454 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+455 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+456 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+457 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+458 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+459 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+460 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+461 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+462 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+463 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+464 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+465 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+466 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+467 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+468 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+469 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+470 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+471 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+472 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+473 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+474 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+475 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+476 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+477 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+478 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+479 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+480 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+481 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+482 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+483 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+484 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+485 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+486 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+487 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+488 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+489 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+490 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+491 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+492 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+493 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+494 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+495 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+496 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+497 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+498 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+499 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+500 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+501 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+502 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+503 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+504 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+505 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+506 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+507 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+508 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+509 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+510 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+511 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+512 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+513 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+514 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+515 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+516 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+517 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+518 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+519 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+520 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+521 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+522 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+523 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+524 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+525 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+526 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+527 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+528 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+529 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+530 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+531 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+532 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+533 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+534 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+535 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+536 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+537 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+538 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+539 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+540 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+541 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+542 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+543 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+544 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+545 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+546 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+547 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+548 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+549 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+550 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+551 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+552 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+553 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+554 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+555 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+556 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+557 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+558 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+559 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+560 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+561 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+562 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+563 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+564 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+565 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+566 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+567 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+568 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+569 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+570 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+571 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+572 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+573 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+574 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+575 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+576 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+577 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+578 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+579 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+580 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+581 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+582 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+583 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+584 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+585 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+586 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+587 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+588 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+589 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+590 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+591 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+592 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+593 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+594 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+595 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+596 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+597 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+598 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+599 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+600 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+601 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+602 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+603 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+604 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+605 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+606 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+607 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+608 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+609 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+610 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+611 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+612 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+613 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+614 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+615 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+616 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+617 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+618 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+619 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+620 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+621 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+622 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+623 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+624 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+625 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+626 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+627 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+628 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+629 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+630 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+631 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+632 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+633 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+634 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+635 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+636 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+637 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+638 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+639 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+640 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+641 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+642 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+643 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+644 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+645 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+646 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+647 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+648 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+649 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+650 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+651 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+652 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+653 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+654 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+655 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+656 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+657 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+658 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+659 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+660 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+661 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+662 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+663 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+664 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+665 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+666 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+667 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+668 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+669 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+670 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+671 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+672 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+673 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+674 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+675 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+676 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+677 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+678 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+679 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+680 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+681 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+682 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+683 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+684 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+685 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+686 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+687 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+688 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+689 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+690 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+691 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+692 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+693 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+694 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+695 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+696 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+697 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+698 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+699 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+700 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+701 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+702 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+703 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+704 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+705 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+706 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+707 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+708 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+709 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+710 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+711 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+712 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+713 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+714 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+715 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+716 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+717 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+718 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+719 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+720 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+721 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+722 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+723 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+724 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+725 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+726 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+727 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+728 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+729 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+730 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+731 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+732 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+733 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+734 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+735 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+736 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+737 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+738 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+739 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+740 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+741 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+742 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+743 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+744 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+745 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+746 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+747 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+748 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+749 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+750 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+751 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+752 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+753 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+754 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+755 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+756 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+757 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+758 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+759 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+760 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+761 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+762 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+763 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+764 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+765 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+766 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+767 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+768 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+769 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+770 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+771 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+772 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+773 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+774 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+775 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+776 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+777 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+778 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+779 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+780 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+781 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+782 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+783 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+784 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+785 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+786 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+787 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+788 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+789 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+790 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+791 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+792 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+793 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+794 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+795 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+796 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+797 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+798 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+799 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+800 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+801 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+802 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+803 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+804 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+805 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+806 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+807 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+808 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+809 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+810 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+811 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+812 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+813 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+814 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+815 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+816 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+817 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+818 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+819 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+820 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+821 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+822 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+823 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+824 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+825 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+826 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+827 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+828 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+829 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+830 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+831 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+832 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+833 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+834 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+835 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+836 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+837 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+838 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+839 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+840 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+841 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+842 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+843 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+844 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+845 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+846 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+847 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+848 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+849 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+850 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+851 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+852 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+853 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+854 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+855 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+856 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+857 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+858 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+859 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+860 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+861 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+862 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+863 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+864 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+865 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+866 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+867 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+868 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+869 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+870 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+871 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+872 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+873 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+874 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+875 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+876 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+877 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+878 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+879 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+880 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+881 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+882 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+883 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+884 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+885 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+886 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+887 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+888 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+889 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+890 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+891 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+892 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+893 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+894 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+895 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+896 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+897 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+898 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+899 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+900 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+901 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+902 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+903 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+904 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+905 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+906 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+907 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+908 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+909 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+910 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+911 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+912 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+913 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+914 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+915 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+916 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+917 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+918 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+919 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+920 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+921 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+922 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+923 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+924 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+925 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+926 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+927 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+928 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+929 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+930 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+931 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+932 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+933 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+934 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+935 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+936 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+937 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+938 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+939 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+940 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+941 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+942 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+943 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+944 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+945 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+946 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+947 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+948 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+949 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+950 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+951 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+952 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+953 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+954 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+955 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+956 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+957 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+958 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+959 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+960 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+961 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+962 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+963 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+964 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+965 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+966 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+967 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+968 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+969 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+970 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+971 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+972 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+973 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+974 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+975 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+976 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+977 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+978 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+979 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+980 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+981 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+982 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+983 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+984 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+985 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+986 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+987 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+988 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+989 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+990 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+991 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+992 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+993 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+994 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+995 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+996 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+997 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+998 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+999 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1000 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1001 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1002 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1003 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1004 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1005 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1006 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1007 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1008 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1009 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1010 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1011 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1012 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1013 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1014 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1015 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1016 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1017 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1018 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1019 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1020 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1021 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1022 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1023 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1024 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1025 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1026 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1027 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1028 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1029 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1030 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1031 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1032 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1033 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1034 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1035 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1036 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1037 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1038 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1039 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1040 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1041 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1042 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1043 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1044 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1045 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1046 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1047 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1048 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1049 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1050 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1051 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1052 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1053 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1054 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1055 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1056 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1057 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1058 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1059 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1060 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1061 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1062 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1063 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1064 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1065 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1066 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1067 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1068 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1069 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1070 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1071 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1072 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1073 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1074 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1075 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1076 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1077 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1078 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1079 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1080 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1081 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1082 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1083 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1084 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1085 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1086 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1087 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1088 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1089 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1090 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1091 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1092 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1093 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1094 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1095 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1096 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1097 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1098 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1099 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1100 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1101 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1102 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1103 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1104 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1105 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1106 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1107 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1108 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1109 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1110 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1111 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1112 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1113 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1114 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1115 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1116 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1117 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1118 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1119 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1120 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1121 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1122 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1123 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1124 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1125 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1126 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1127 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1128 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1129 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1130 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1131 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1132 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1133 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1134 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1135 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1136 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1137 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1138 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1139 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1140 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1141 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1142 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1143 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1144 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1145 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1146 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1147 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1148 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1149 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1150 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1151 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1152 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1153 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1154 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1155 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1156 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1157 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1158 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1159 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1160 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1161 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1162 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1163 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1164 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1165 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1166 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1167 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1168 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1169 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1170 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1171 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1172 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1173 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1174 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1175 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1176 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1177 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1178 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1179 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1180 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1181 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1182 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1183 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1184 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1185 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1186 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1187 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1188 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1189 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1190 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1191 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1192 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1193 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1194 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1195 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1196 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1197 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1198 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1199 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1200 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1201 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1202 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1203 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1204 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1205 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1206 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1207 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1208 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1209 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1210 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1211 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1212 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1213 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1214 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1215 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1216 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1217 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1218 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1219 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1220 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1221 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1222 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1223 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1224 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1225 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1226 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1227 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1228 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1229 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1230 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1231 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1232 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1233 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1234 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1235 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1236 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1237 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1238 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1239 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1240 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1241 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1242 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1243 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1244 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1245 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1246 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1247 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1248 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1249 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1250 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1251 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1252 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1253 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1254 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1255 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1256 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1257 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1258 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1259 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1260 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1261 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1262 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1263 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1264 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1265 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1266 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1267 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1268 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1269 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1270 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1271 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1272 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1273 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1274 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1275 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1276 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1277 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1278 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1279 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1280 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1281 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1282 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1283 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1284 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1285 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1286 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1287 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1288 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1289 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1290 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1291 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1292 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1293 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1294 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1295 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1296 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1297 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1298 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1299 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1300 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1301 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1302 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1303 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1304 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1305 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1306 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1307 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1308 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1309 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1310 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1311 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1312 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1313 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1314 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1315 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1316 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1317 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1318 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1319 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1320 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1321 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1322 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1323 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1324 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1325 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1326 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1327 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1328 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1329 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1330 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1331 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1332 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1333 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1334 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1335 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1336 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1337 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1338 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1339 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1340 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1341 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1342 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1343 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1344 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1345 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1346 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1347 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1348 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1349 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1350 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1351 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1352 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1353 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1354 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1355 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1356 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1357 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1358 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1359 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1360 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1361 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1362 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1363 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1364 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1365 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1366 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1367 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1368 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1369 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1370 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1371 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1372 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1373 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1374 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1375 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1376 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1377 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1378 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1379 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1380 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1381 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1382 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1383 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1384 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1385 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1386 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1387 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1388 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1389 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1390 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1391 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1392 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1393 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1394 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1395 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1396 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1397 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1398 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1399 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1400 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1401 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1402 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1403 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1404 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1405 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1406 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1407 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1408 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1409 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1410 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1411 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1412 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1413 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1414 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1415 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1416 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1417 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1418 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1419 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1420 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1421 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1422 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1423 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1424 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1425 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1426 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1427 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1428 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1429 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1430 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1431 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1432 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1433 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1434 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1435 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1436 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1437 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1438 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1439 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1440 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1441 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1442 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1443 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1444 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1445 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1446 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1447 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1448 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1449 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1450 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1451 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1452 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1453 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1454 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1455 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1456 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1457 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1458 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1459 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1460 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1461 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1462 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1463 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1464 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1465 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1466 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1467 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1468 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1469 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1470 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1471 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1472 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1473 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1474 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1475 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1476 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1477 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1478 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1479 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1480 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1481 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1482 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1483 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1484 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1485 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1486 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1487 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1488 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1489 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1490 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1491 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1492 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1493 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1494 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1495 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1496 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1497 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1498 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1499 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1500 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1501 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1502 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1503 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1504 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1505 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1506 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1507 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1508 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1509 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1510 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1511 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1512 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1513 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1514 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1515 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1516 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1517 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1518 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1519 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1520 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1521 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1522 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1523 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1524 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1525 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1526 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1527 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1528 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1529 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1530 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1531 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1532 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1533 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1534 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1535 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1536 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1537 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1538 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1539 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1540 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1541 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1542 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1543 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1544 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1545 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1546 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1547 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1548 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1549 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1550 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1551 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1552 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1553 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1554 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1555 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1556 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1557 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1558 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1559 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1560 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1561 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1562 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1563 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1564 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1565 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1566 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1567 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1568 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1569 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1570 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1571 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1572 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1573 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1574 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1575 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1576 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1577 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1578 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1579 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1580 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1581 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1582 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1583 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1584 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1585 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1586 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1587 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1588 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1589 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1590 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1591 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1592 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1593 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1594 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1595 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1596 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1597 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1598 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1599 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1600 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1601 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1602 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1603 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1604 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1605 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1606 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1607 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1608 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1609 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1610 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1611 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1612 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1613 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1614 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1615 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1616 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1617 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1618 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1619 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1620 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1621 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1622 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1623 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1624 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1625 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1626 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1627 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1628 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1629 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1630 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1631 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1632 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1633 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1634 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1635 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1636 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1637 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1638 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1639 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1640 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1641 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1642 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1643 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1644 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1645 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1646 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1647 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1648 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1649 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1650 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1651 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1652 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1653 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1654 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1655 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1656 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1657 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1658 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1659 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1660 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1661 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1662 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1663 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1664 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1665 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1666 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1667 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1668 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1669 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1670 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1671 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1672 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1673 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1674 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1675 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1676 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1677 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1678 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1679 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1680 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1681 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1682 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1683 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1684 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1685 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1686 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1687 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1688 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1689 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1690 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1691 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1692 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1693 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1694 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1695 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1696 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1697 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1698 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1699 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1700 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1701 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1702 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1703 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1704 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1705 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1706 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1707 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1708 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1709 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1710 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1711 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1712 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1713 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1714 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1715 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1716 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1717 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1718 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1719 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1720 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1721 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1722 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1723 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1724 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1725 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1726 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1727 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1728 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1729 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1730 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1731 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1732 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1733 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1734 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1735 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1736 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1737 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1738 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1739 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1740 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1741 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1742 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1743 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1744 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1745 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1746 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1747 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1748 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_QUEST_COMPLETED+1749 + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_HONOR + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_HONOR_NEXT_LEVEL + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_PVP_TIER_MAX_FROM_WINS + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_FIELD_PVP_LAST_WEEKS_TIER_MAX_FROM_WINS }; -uint32 UnitDynamicUpdateFieldFlags[PLAYER_DYNAMIC_END] = +uint32 UnitDynamicUpdateFieldFlags[ACTIVE_PLAYER_DYNAMIC_END] = { UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_DYNAMIC_FIELD_PASSIVE_SPELLS UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_DYNAMIC_FIELD_WORLD_EFFECTS UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_DYNAMIC_FIELD_CHANNEL_OBJECTS - UF_FLAG_PRIVATE, // PLAYER_DYNAMIC_FIELD_RESERACH_SITE - UF_FLAG_PRIVATE, // PLAYER_DYNAMIC_FIELD_RESEARCH_SITE_PROGRESS - UF_FLAG_PRIVATE, // PLAYER_DYNAMIC_FIELD_DAILY_QUESTS - UF_FLAG_PRIVATE, // PLAYER_DYNAMIC_FIELD_AVAILABLE_QUEST_LINE_X_QUEST_ID - UF_FLAG_PRIVATE, // PLAYER_DYNAMIC_FIELD_HEIRLOOMS - UF_FLAG_PRIVATE, // PLAYER_DYNAMIC_FIELD_HEIRLOOM_FLAGS - UF_FLAG_PRIVATE, // PLAYER_DYNAMIC_FIELD_TOYS - UF_FLAG_PRIVATE, // PLAYER_DYNAMIC_FIELD_TRANSMOG - UF_FLAG_PRIVATE, // PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG - UF_FLAG_PRIVATE, // PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS - UF_FLAG_PRIVATE, // PLAYER_DYNAMIC_FIELD_CHARACTER_RESTRICTIONS - UF_FLAG_PRIVATE, // PLAYER_DYNAMIC_FIELD_SPELL_PCT_MOD_BY_LABEL - UF_FLAG_PRIVATE, // PLAYER_DYNAMIC_FIELD_SPELL_FLAT_MOD_BY_LABEL UF_FLAG_PUBLIC, // PLAYER_DYNAMIC_FIELD_ARENA_COOLDOWNS + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_RESERACH_SITE + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_RESEARCH_SITE_PROGRESS + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_AVAILABLE_QUEST_LINE_X_QUEST_ID + UF_FLAG_NONE, // + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOMS + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOM_FLAGS + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_TOYS + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_TRANSMOG + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_CHARACTER_RESTRICTIONS + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_SPELL_PCT_MOD_BY_LABEL + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_SPELL_FLAT_MOD_BY_LABEL + UF_FLAG_PUBLIC, // ACTIVE_PLAYER_DYNAMIC_FIELD_RESERACH }; uint32 GameObjectUpdateFieldFlags[GAMEOBJECT_END] = @@ -4916,11 +6341,6 @@ uint32 GameObjectUpdateFieldFlags[GAMEOBJECT_END] = UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1 UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+2 UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+3 - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+1 - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+2 - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+3 - UF_FLAG_PUBLIC, // OBJECT_FIELD_TYPE UF_FLAG_DYNAMIC, // OBJECT_FIELD_ENTRY UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // OBJECT_DYNAMIC_FLAGS UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X @@ -4928,6 +6348,10 @@ uint32 GameObjectUpdateFieldFlags[GAMEOBJECT_END] = UF_FLAG_PUBLIC, // GAMEOBJECT_FIELD_CREATED_BY+1 UF_FLAG_PUBLIC, // GAMEOBJECT_FIELD_CREATED_BY+2 UF_FLAG_PUBLIC, // GAMEOBJECT_FIELD_CREATED_BY+3 + UF_FLAG_PUBLIC, // GAMEOBJECT_FIELD_GUILD_GUID + UF_FLAG_PUBLIC, // GAMEOBJECT_FIELD_GUILD_GUID+1 + UF_FLAG_PUBLIC, // GAMEOBJECT_FIELD_GUILD_GUID+2 + UF_FLAG_PUBLIC, // GAMEOBJECT_FIELD_GUILD_GUID+3 UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // GAMEOBJECT_DISPLAYID UF_FLAG_PUBLIC | UF_FLAG_URGENT, // GAMEOBJECT_FLAGS UF_FLAG_PUBLIC, // GAMEOBJECT_PARENTROTATION @@ -4945,6 +6369,7 @@ uint32 GameObjectUpdateFieldFlags[GAMEOBJECT_END] = UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // GAMEOBJECT_STATE_WORLD_EFFECT_ID+1 UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // GAMEOBJECT_STATE_WORLD_EFFECT_ID+2 UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // GAMEOBJECT_STATE_WORLD_EFFECT_ID+3 + UF_FLAG_PUBLIC | UF_FLAG_URGENT, // GAMEOBJECT_FIELD_CUSTOM_PARAM }; uint32 GameObjectDynamicUpdateFieldFlags[GAMEOBJECT_DYNAMIC_END] = @@ -4958,11 +6383,6 @@ uint32 DynamicObjectUpdateFieldFlags[DYNAMICOBJECT_END] = UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1 UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+2 UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+3 - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+1 - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+2 - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+3 - UF_FLAG_PUBLIC, // OBJECT_FIELD_TYPE UF_FLAG_DYNAMIC, // OBJECT_FIELD_ENTRY UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // OBJECT_DYNAMIC_FLAGS UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X @@ -4983,11 +6403,6 @@ uint32 CorpseUpdateFieldFlags[CORPSE_END] = UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1 UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+2 UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+3 - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+1 - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+2 - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+3 - UF_FLAG_PUBLIC, // OBJECT_FIELD_TYPE UF_FLAG_DYNAMIC, // OBJECT_FIELD_ENTRY UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // OBJECT_DYNAMIC_FLAGS UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X @@ -4999,6 +6414,10 @@ uint32 CorpseUpdateFieldFlags[CORPSE_END] = UF_FLAG_PUBLIC, // CORPSE_FIELD_PARTY+1 UF_FLAG_PUBLIC, // CORPSE_FIELD_PARTY+2 UF_FLAG_PUBLIC, // CORPSE_FIELD_PARTY+3 + UF_FLAG_PUBLIC, // CORPSE_FIELD_GUILD_GUID + UF_FLAG_PUBLIC, // CORPSE_FIELD_GUILD_GUID+1 + UF_FLAG_PUBLIC, // CORPSE_FIELD_GUILD_GUID+2 + UF_FLAG_PUBLIC, // CORPSE_FIELD_GUILD_GUID+3 UF_FLAG_PUBLIC, // CORPSE_FIELD_DISPLAY_ID UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+1 @@ -5033,11 +6452,6 @@ uint32 AreaTriggerUpdateFieldFlags[AREATRIGGER_END] = UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1 UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+2 UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+3 - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+1 - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+2 - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+3 - UF_FLAG_PUBLIC, // OBJECT_FIELD_TYPE UF_FLAG_DYNAMIC, // OBJECT_FIELD_ENTRY UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // OBJECT_DYNAMIC_FLAGS UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X @@ -5080,11 +6494,6 @@ uint32 SceneObjectUpdateFieldFlags[SCENEOBJECT_END] = UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1 UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+2 UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+3 - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+1 - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+2 - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+3 - UF_FLAG_PUBLIC, // OBJECT_FIELD_TYPE UF_FLAG_DYNAMIC, // OBJECT_FIELD_ENTRY UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // OBJECT_DYNAMIC_FLAGS UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X @@ -5103,11 +6512,6 @@ uint32 ConversationUpdateFieldFlags[CONVERSATION_END] = UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+1 UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+2 UF_FLAG_PUBLIC, // OBJECT_FIELD_GUID+3 - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+1 - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+2 - UF_FLAG_PUBLIC, // OBJECT_FIELD_DATA+3 - UF_FLAG_PUBLIC, // OBJECT_FIELD_TYPE UF_FLAG_DYNAMIC, // OBJECT_FIELD_ENTRY UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // OBJECT_DYNAMIC_FLAGS UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X diff --git a/src/server/game/Entities/Object/Updates/UpdateFieldFlags.h b/src/server/game/Entities/Object/Updates/UpdateFieldFlags.h index d5c151ee4a9..97523f323e3 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFieldFlags.h +++ b/src/server/game/Entities/Object/Updates/UpdateFieldFlags.h @@ -37,10 +37,12 @@ enum UpdatefieldFlags UF_FLAG_URGENT_SELF_ONLY = 0x400 }; -TC_GAME_API extern uint32 ItemUpdateFieldFlags[CONTAINER_END]; +TC_GAME_API extern uint32 ContainerUpdateFieldFlags[CONTAINER_END]; +TC_GAME_API extern uint32 AzeriteEmpoweredItemUpdateFieldFlags[AZERITE_EMPOWERED_ITEM_END]; +TC_GAME_API extern uint32 AzeriteItemUpdateFieldFlags[AZERITE_ITEM_END]; TC_GAME_API extern uint32 ItemDynamicUpdateFieldFlags[CONTAINER_DYNAMIC_END]; -TC_GAME_API extern uint32 UnitUpdateFieldFlags[PLAYER_END]; -TC_GAME_API extern uint32 UnitDynamicUpdateFieldFlags[PLAYER_DYNAMIC_END]; +TC_GAME_API extern uint32 UnitUpdateFieldFlags[ACTIVE_PLAYER_END]; +TC_GAME_API extern uint32 UnitDynamicUpdateFieldFlags[ACTIVE_PLAYER_DYNAMIC_END]; TC_GAME_API extern uint32 GameObjectUpdateFieldFlags[GAMEOBJECT_END]; TC_GAME_API extern uint32 GameObjectDynamicUpdateFieldFlags[GAMEOBJECT_DYNAMIC_END]; TC_GAME_API extern uint32 DynamicObjectUpdateFieldFlags[DYNAMICOBJECT_END]; diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index 6fb0a5d952c..ca3410f5dfd 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -19,17 +19,15 @@ #ifndef _UPDATEFIELDS_H #define _UPDATEFIELDS_H -// Auto generated for version 7, 3, 5, 25928 +// Auto generated for version 8, 0, 1, 27980 enum ObjectFields { OBJECT_FIELD_GUID = 0x000, // Size: 4, Flags: PUBLIC - OBJECT_FIELD_DATA = 0x004, // Size: 4, Flags: PUBLIC - OBJECT_FIELD_TYPE = 0x008, // Size: 1, Flags: PUBLIC - OBJECT_FIELD_ENTRY = 0x009, // Size: 1, Flags: DYNAMIC - OBJECT_DYNAMIC_FLAGS = 0x00A, // Size: 1, Flags: DYNAMIC, URGENT - OBJECT_FIELD_SCALE_X = 0x00B, // Size: 1, Flags: PUBLIC - OBJECT_END = 0x00C, + OBJECT_FIELD_ENTRY = 0x004, // Size: 1, Flags: DYNAMIC + OBJECT_DYNAMIC_FLAGS = 0x005, // Size: 1, Flags: DYNAMIC, URGENT + OBJECT_FIELD_SCALE_X = 0x006, // Size: 1, Flags: PUBLIC + OBJECT_END = 0x007, }; enum ObjectDynamicFields @@ -66,8 +64,7 @@ enum ItemDynamicFields ITEM_DYNAMIC_FIELD_BONUSLIST_IDS = OBJECT_DYNAMIC_END + 0x001, // Flags: OWNER, 0x100 ITEM_DYNAMIC_FIELD_ARTIFACT_POWERS = OBJECT_DYNAMIC_END + 0x002, // Flags: OWNER ITEM_DYNAMIC_FIELD_GEMS = OBJECT_DYNAMIC_END + 0x003, // Flags: OWNER - ITEM_DYNAMIC_FIELD_RELIC_TALENT_DATA = OBJECT_DYNAMIC_END + 0x004, // Flags: OWNER - ITEM_DYNAMIC_END = OBJECT_DYNAMIC_END + 0x005, + ITEM_DYNAMIC_END = OBJECT_DYNAMIC_END + 0x004, }; enum ContainerFields @@ -82,6 +79,32 @@ enum ContainerDynamicFields CONTAINER_DYNAMIC_END = ITEM_DYNAMIC_END + 0x000, }; +enum AzeriteEmpoweredItemField +{ + AZERITE_EMPOWERED_ITEM_FIELD_SELECTIONS = ITEM_END + 0x000, // Size: 4, Flags: PUBLIC + AZERITE_EMPOWERED_ITEM_END = ITEM_END + 0x004, +}; + +enum AzeriteEmpoweredItemDynamicField +{ + AZERITE_EMPOWERED_ITEM_DYNAMIC_END = ITEM_DYNAMIC_END + 0x000, +}; + +enum AzeriteItemField +{ + AZERITE_ITEM_FIELD_XP = ITEM_END + 0x000, // Size: 2, Flags: PUBLIC + AZERITE_ITEM_FIELD_LEVEL = ITEM_END + 0x002, // Size: 1, Flags: PUBLIC + AZERITE_ITEM_FIELD_AURA_LEVEL = ITEM_END + 0x003, // Size: 1, Flags: PUBLIC + AZERITE_ITEM_FIELD_KNOWLEDGE_LEVEL = ITEM_END + 0x004, // Size: 1, Flags: OWNER + AZERITE_ITEM_FIELD_DEBUG_KNOWLEDGE_WEEK = ITEM_END + 0x005, // Size: 1, Flags: OWNER + AZERITE_ITEM_END = ITEM_END + 0x006, +}; + +enum AzeriteItemDynamicField +{ + AZERITE_ITEM_DYNAMIC_END = ITEM_DYNAMIC_END + 0x000, +}; + enum UnitFields { UNIT_FIELD_CHARM = OBJECT_END + 0x000, // Size: 4, Flags: PUBLIC @@ -91,98 +114,106 @@ enum UnitFields UNIT_FIELD_SUMMONEDBY = OBJECT_END + 0x010, // Size: 4, Flags: PUBLIC UNIT_FIELD_CREATEDBY = OBJECT_END + 0x014, // Size: 4, Flags: PUBLIC UNIT_FIELD_DEMON_CREATOR = OBJECT_END + 0x018, // Size: 4, Flags: PUBLIC - UNIT_FIELD_TARGET = OBJECT_END + 0x01C, // Size: 4, Flags: PUBLIC - UNIT_FIELD_BATTLE_PET_COMPANION_GUID = OBJECT_END + 0x020, // Size: 4, Flags: PUBLIC - UNIT_FIELD_BATTLE_PET_DB_ID = OBJECT_END + 0x024, // Size: 2, Flags: PUBLIC - UNIT_FIELD_CHANNEL_DATA = OBJECT_END + 0x026, // Size: 2, Flags: PUBLIC, URGENT - UNIT_FIELD_SUMMONED_BY_HOME_REALM = OBJECT_END + 0x028, // Size: 1, Flags: PUBLIC - UNIT_FIELD_BYTES_0 = OBJECT_END + 0x029, // Size: 1, Flags: PUBLIC - UNIT_FIELD_DISPLAY_POWER = OBJECT_END + 0x02A, // Size: 1, Flags: PUBLIC - UNIT_FIELD_OVERRIDE_DISPLAY_POWER_ID = OBJECT_END + 0x02B, // Size: 1, Flags: PUBLIC - UNIT_FIELD_HEALTH = OBJECT_END + 0x02C, // Size: 2, Flags: PUBLIC - UNIT_FIELD_POWER = OBJECT_END + 0x02E, // Size: 6, Flags: PUBLIC, URGENT_SELF_ONLY - UNIT_FIELD_MAXHEALTH = OBJECT_END + 0x034, // Size: 2, Flags: PUBLIC - UNIT_FIELD_MAXPOWER = OBJECT_END + 0x036, // Size: 6, Flags: PUBLIC - UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER = OBJECT_END + 0x03C, // Size: 6, Flags: PRIVATE, OWNER, UNIT_ALL - UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER = OBJECT_END + 0x042, // Size: 6, Flags: PRIVATE, OWNER, UNIT_ALL - UNIT_FIELD_LEVEL = OBJECT_END + 0x048, // Size: 1, Flags: PUBLIC - UNIT_FIELD_EFFECTIVE_LEVEL = OBJECT_END + 0x049, // Size: 1, Flags: PUBLIC - UNIT_FIELD_SANDBOX_SCALING_ID = OBJECT_END + 0x04A, // Size: 1, Flags: PUBLIC - UNIT_FIELD_SCALING_LEVEL_MIN = OBJECT_END + 0x04B, // Size: 1, Flags: PUBLIC - UNIT_FIELD_SCALING_LEVEL_MAX = OBJECT_END + 0x04C, // Size: 1, Flags: PUBLIC - UNIT_FIELD_SCALING_LEVEL_DELTA = OBJECT_END + 0x04D, // Size: 1, Flags: PUBLIC - UNIT_FIELD_FACTIONTEMPLATE = OBJECT_END + 0x04E, // Size: 1, Flags: PUBLIC - UNIT_VIRTUAL_ITEM_SLOT_ID = OBJECT_END + 0x04F, // Size: 6, Flags: PUBLIC - UNIT_FIELD_FLAGS = OBJECT_END + 0x055, // Size: 1, Flags: PUBLIC, URGENT - UNIT_FIELD_FLAGS_2 = OBJECT_END + 0x056, // Size: 1, Flags: PUBLIC, URGENT - UNIT_FIELD_FLAGS_3 = OBJECT_END + 0x057, // Size: 1, Flags: PUBLIC, URGENT - UNIT_FIELD_AURASTATE = OBJECT_END + 0x058, // Size: 1, Flags: PUBLIC - UNIT_FIELD_BASEATTACKTIME = OBJECT_END + 0x059, // Size: 2, Flags: PUBLIC - UNIT_FIELD_RANGEDATTACKTIME = OBJECT_END + 0x05B, // Size: 1, Flags: PRIVATE - UNIT_FIELD_BOUNDINGRADIUS = OBJECT_END + 0x05C, // Size: 1, Flags: PUBLIC - UNIT_FIELD_COMBATREACH = OBJECT_END + 0x05D, // Size: 1, Flags: PUBLIC - UNIT_FIELD_DISPLAYID = OBJECT_END + 0x05E, // Size: 1, Flags: DYNAMIC, URGENT - UNIT_FIELD_NATIVEDISPLAYID = OBJECT_END + 0x05F, // Size: 1, Flags: PUBLIC, URGENT - UNIT_FIELD_MOUNTDISPLAYID = OBJECT_END + 0x060, // Size: 1, Flags: PUBLIC, URGENT - UNIT_FIELD_MINDAMAGE = OBJECT_END + 0x061, // Size: 1, Flags: PRIVATE, OWNER, SPECIAL_INFO - UNIT_FIELD_MAXDAMAGE = OBJECT_END + 0x062, // Size: 1, Flags: PRIVATE, OWNER, SPECIAL_INFO - UNIT_FIELD_MINOFFHANDDAMAGE = OBJECT_END + 0x063, // Size: 1, Flags: PRIVATE, OWNER, SPECIAL_INFO - UNIT_FIELD_MAXOFFHANDDAMAGE = OBJECT_END + 0x064, // Size: 1, Flags: PRIVATE, OWNER, SPECIAL_INFO - UNIT_FIELD_BYTES_1 = OBJECT_END + 0x065, // Size: 1, Flags: PUBLIC - UNIT_FIELD_PETNUMBER = OBJECT_END + 0x066, // Size: 1, Flags: PUBLIC - UNIT_FIELD_PET_NAME_TIMESTAMP = OBJECT_END + 0x067, // Size: 1, Flags: PUBLIC - UNIT_FIELD_PETEXPERIENCE = OBJECT_END + 0x068, // Size: 1, Flags: OWNER - UNIT_FIELD_PETNEXTLEVELEXP = OBJECT_END + 0x069, // Size: 1, Flags: OWNER - UNIT_MOD_CAST_SPEED = OBJECT_END + 0x06A, // Size: 1, Flags: PUBLIC - UNIT_MOD_CAST_HASTE = OBJECT_END + 0x06B, // Size: 1, Flags: PUBLIC - UNIT_FIELD_MOD_HASTE = OBJECT_END + 0x06C, // Size: 1, Flags: PUBLIC - UNIT_FIELD_MOD_RANGED_HASTE = OBJECT_END + 0x06D, // Size: 1, Flags: PUBLIC - UNIT_FIELD_MOD_HASTE_REGEN = OBJECT_END + 0x06E, // Size: 1, Flags: PUBLIC - UNIT_FIELD_MOD_TIME_RATE = OBJECT_END + 0x06F, // Size: 1, Flags: PUBLIC - UNIT_CREATED_BY_SPELL = OBJECT_END + 0x070, // Size: 1, Flags: PUBLIC - UNIT_NPC_FLAGS = OBJECT_END + 0x071, // Size: 2, Flags: PUBLIC, DYNAMIC - UNIT_NPC_EMOTESTATE = OBJECT_END + 0x073, // Size: 1, Flags: PUBLIC - UNIT_FIELD_STAT = OBJECT_END + 0x074, // Size: 4, Flags: PRIVATE, OWNER - UNIT_FIELD_POSSTAT = OBJECT_END + 0x078, // Size: 4, Flags: PRIVATE, OWNER - UNIT_FIELD_NEGSTAT = OBJECT_END + 0x07C, // Size: 4, Flags: PRIVATE, OWNER - UNIT_FIELD_RESISTANCES = OBJECT_END + 0x080, // Size: 7, Flags: PRIVATE, OWNER, SPECIAL_INFO - UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE = OBJECT_END + 0x087, // Size: 7, Flags: PRIVATE, OWNER - UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE = OBJECT_END + 0x08E, // Size: 7, Flags: PRIVATE, OWNER - UNIT_FIELD_MOD_BONUS_ARMOR = OBJECT_END + 0x095, // Size: 1, Flags: PRIVATE, OWNER - UNIT_FIELD_BASE_MANA = OBJECT_END + 0x096, // Size: 1, Flags: PUBLIC - UNIT_FIELD_BASE_HEALTH = OBJECT_END + 0x097, // Size: 1, Flags: PRIVATE, OWNER - UNIT_FIELD_BYTES_2 = OBJECT_END + 0x098, // Size: 1, Flags: PUBLIC - UNIT_FIELD_ATTACK_POWER = OBJECT_END + 0x099, // Size: 1, Flags: PRIVATE, OWNER - UNIT_FIELD_ATTACK_POWER_MOD_POS = OBJECT_END + 0x09A, // Size: 1, Flags: PRIVATE, OWNER - UNIT_FIELD_ATTACK_POWER_MOD_NEG = OBJECT_END + 0x09B, // Size: 1, Flags: PRIVATE, OWNER - UNIT_FIELD_ATTACK_POWER_MULTIPLIER = OBJECT_END + 0x09C, // Size: 1, Flags: PRIVATE, OWNER - UNIT_FIELD_RANGED_ATTACK_POWER = OBJECT_END + 0x09D, // Size: 1, Flags: PRIVATE, OWNER - UNIT_FIELD_RANGED_ATTACK_POWER_MOD_POS = OBJECT_END + 0x09E, // Size: 1, Flags: PRIVATE, OWNER - UNIT_FIELD_RANGED_ATTACK_POWER_MOD_NEG = OBJECT_END + 0x09F, // Size: 1, Flags: PRIVATE, OWNER - UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER = OBJECT_END + 0x0A0, // Size: 1, Flags: PRIVATE, OWNER - UNIT_FIELD_ATTACK_SPEED_AURA = OBJECT_END + 0x0A1, // Size: 1, Flags: PRIVATE, OWNER - UNIT_FIELD_MINRANGEDDAMAGE = OBJECT_END + 0x0A2, // Size: 1, Flags: PRIVATE, OWNER - UNIT_FIELD_MAXRANGEDDAMAGE = OBJECT_END + 0x0A3, // Size: 1, Flags: PRIVATE, OWNER - UNIT_FIELD_POWER_COST_MODIFIER = OBJECT_END + 0x0A4, // Size: 7, Flags: PRIVATE, OWNER - UNIT_FIELD_POWER_COST_MULTIPLIER = OBJECT_END + 0x0AB, // Size: 7, Flags: PRIVATE, OWNER - UNIT_FIELD_MAXHEALTHMODIFIER = OBJECT_END + 0x0B2, // Size: 1, Flags: PRIVATE, OWNER - UNIT_FIELD_HOVERHEIGHT = OBJECT_END + 0x0B3, // Size: 1, Flags: PUBLIC - UNIT_FIELD_MIN_ITEM_LEVEL_CUTOFF = OBJECT_END + 0x0B4, // Size: 1, Flags: PUBLIC - UNIT_FIELD_MIN_ITEM_LEVEL = OBJECT_END + 0x0B5, // Size: 1, Flags: PUBLIC - UNIT_FIELD_MAXITEMLEVEL = OBJECT_END + 0x0B6, // Size: 1, Flags: PUBLIC - UNIT_FIELD_WILD_BATTLEPET_LEVEL = OBJECT_END + 0x0B7, // Size: 1, Flags: PUBLIC - UNIT_FIELD_BATTLEPET_COMPANION_NAME_TIMESTAMP = OBJECT_END + 0x0B8, // Size: 1, Flags: PUBLIC - UNIT_FIELD_INTERACT_SPELLID = OBJECT_END + 0x0B9, // Size: 1, Flags: PUBLIC - UNIT_FIELD_STATE_SPELL_VISUAL_ID = OBJECT_END + 0x0BA, // Size: 1, Flags: DYNAMIC, URGENT - UNIT_FIELD_STATE_ANIM_ID = OBJECT_END + 0x0BB, // Size: 1, Flags: DYNAMIC, URGENT - UNIT_FIELD_STATE_ANIM_KIT_ID = OBJECT_END + 0x0BC, // Size: 1, Flags: DYNAMIC, URGENT - UNIT_FIELD_STATE_WORLD_EFFECT_ID = OBJECT_END + 0x0BD, // Size: 4, Flags: DYNAMIC, URGENT - UNIT_FIELD_SCALE_DURATION = OBJECT_END + 0x0C1, // Size: 1, Flags: PUBLIC - UNIT_FIELD_LOOKS_LIKE_MOUNT_ID = OBJECT_END + 0x0C2, // Size: 1, Flags: PUBLIC - UNIT_FIELD_LOOKS_LIKE_CREATURE_ID = OBJECT_END + 0x0C3, // Size: 1, Flags: PUBLIC - UNIT_FIELD_LOOK_AT_CONTROLLER_ID = OBJECT_END + 0x0C4, // Size: 1, Flags: PUBLIC - UNIT_FIELD_LOOK_AT_CONTROLLER_TARGET = OBJECT_END + 0x0C5, // Size: 4, Flags: PUBLIC - UNIT_END = OBJECT_END + 0x0C9, + UNIT_FIELD_LOOK_AT_CONTROLLER_TARGET = OBJECT_END + 0x01C, // Size: 4, Flags: PUBLIC + UNIT_FIELD_TARGET = OBJECT_END + 0x020, // Size: 4, Flags: PUBLIC + UNIT_FIELD_BATTLE_PET_COMPANION_GUID = OBJECT_END + 0x024, // Size: 4, Flags: PUBLIC + UNIT_FIELD_BATTLE_PET_DB_ID = OBJECT_END + 0x028, // Size: 2, Flags: PUBLIC + UNIT_FIELD_CHANNEL_DATA = OBJECT_END + 0x02A, // Size: 2, Flags: PUBLIC, URGENT + UNIT_FIELD_SUMMONED_BY_HOME_REALM = OBJECT_END + 0x02C, // Size: 1, Flags: PUBLIC + UNIT_FIELD_BYTES_0 = OBJECT_END + 0x02D, // Size: 1, Flags: PUBLIC + UNIT_FIELD_DISPLAY_POWER = OBJECT_END + 0x02E, // Size: 1, Flags: PUBLIC + UNIT_FIELD_OVERRIDE_DISPLAY_POWER_ID = OBJECT_END + 0x02F, // Size: 1, Flags: PUBLIC + UNIT_FIELD_HEALTH = OBJECT_END + 0x030, // Size: 2, Flags: PUBLIC + UNIT_FIELD_POWER = OBJECT_END + 0x032, // Size: 6, Flags: PUBLIC, URGENT_SELF_ONLY + UNIT_FIELD_MAXHEALTH = OBJECT_END + 0x038, // Size: 2, Flags: PUBLIC + UNIT_FIELD_MAXPOWER = OBJECT_END + 0x03A, // Size: 6, Flags: PUBLIC + UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER = OBJECT_END + 0x040, // Size: 6, Flags: PRIVATE, OWNER, UNIT_ALL + UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER = OBJECT_END + 0x046, // Size: 6, Flags: PRIVATE, OWNER, UNIT_ALL + UNIT_FIELD_LEVEL = OBJECT_END + 0x04C, // Size: 1, Flags: PUBLIC + UNIT_FIELD_EFFECTIVE_LEVEL = OBJECT_END + 0x04D, // Size: 1, Flags: PUBLIC + UNIT_FIELD_CONTENT_TUNING_ID = OBJECT_END + 0x04E, // Size: 1, Flags: PUBLIC + UNIT_FIELD_SCALING_LEVEL_MIN = OBJECT_END + 0x04F, // Size: 1, Flags: PUBLIC + UNIT_FIELD_SCALING_LEVEL_MAX = OBJECT_END + 0x050, // Size: 1, Flags: PUBLIC + UNIT_FIELD_SCALING_LEVEL_DELTA = OBJECT_END + 0x051, // Size: 1, Flags: PUBLIC + UNIT_FIELD_SCALING_FACTION_GROUP = OBJECT_END + 0x052, // Size: 1, Flags: PUBLIC + UNIT_FIELD_SCALING_HEALTH_ITEM_LEVEL_CURVE_ID = OBJECT_END + 0x053, // Size: 1, Flags: PUBLIC + UNIT_FIELD_SCALING_DAMAGE_ITEM_LEVEL_CURVE_ID = OBJECT_END + 0x054, // Size: 1, Flags: PUBLIC + UNIT_FIELD_FACTIONTEMPLATE = OBJECT_END + 0x055, // Size: 1, Flags: PUBLIC + UNIT_VIRTUAL_ITEM_SLOT_ID = OBJECT_END + 0x056, // Size: 6, Flags: PUBLIC + UNIT_FIELD_FLAGS = OBJECT_END + 0x05C, // Size: 1, Flags: PUBLIC, URGENT + UNIT_FIELD_FLAGS_2 = OBJECT_END + 0x05D, // Size: 1, Flags: PUBLIC, URGENT + UNIT_FIELD_FLAGS_3 = OBJECT_END + 0x05E, // Size: 1, Flags: PUBLIC, URGENT + UNIT_FIELD_AURASTATE = OBJECT_END + 0x05F, // Size: 1, Flags: PUBLIC + UNIT_FIELD_BASEATTACKTIME = OBJECT_END + 0x060, // Size: 2, Flags: PUBLIC + UNIT_FIELD_RANGEDATTACKTIME = OBJECT_END + 0x062, // Size: 1, Flags: PRIVATE + UNIT_FIELD_BOUNDINGRADIUS = OBJECT_END + 0x063, // Size: 1, Flags: PUBLIC + UNIT_FIELD_COMBATREACH = OBJECT_END + 0x064, // Size: 1, Flags: PUBLIC + UNIT_FIELD_DISPLAYID = OBJECT_END + 0x065, // Size: 1, Flags: DYNAMIC, URGENT + UNIT_FIELD_DISPLAY_SCALE = OBJECT_END + 0x066, // Size: 1, Flags: DYNAMIC, URGENT + UNIT_FIELD_NATIVEDISPLAYID = OBJECT_END + 0x067, // Size: 1, Flags: PUBLIC, URGENT + UNIT_FIELD_NATIVE_X_DISPLAY_SCALE = OBJECT_END + 0x068, // Size: 1, Flags: PUBLIC, URGENT + UNIT_FIELD_MOUNTDISPLAYID = OBJECT_END + 0x069, // Size: 1, Flags: PUBLIC, URGENT + UNIT_FIELD_MINDAMAGE = OBJECT_END + 0x06A, // Size: 1, Flags: PRIVATE, OWNER, SPECIAL_INFO + UNIT_FIELD_MAXDAMAGE = OBJECT_END + 0x06B, // Size: 1, Flags: PRIVATE, OWNER, SPECIAL_INFO + UNIT_FIELD_MINOFFHANDDAMAGE = OBJECT_END + 0x06C, // Size: 1, Flags: PRIVATE, OWNER, SPECIAL_INFO + UNIT_FIELD_MAXOFFHANDDAMAGE = OBJECT_END + 0x06D, // Size: 1, Flags: PRIVATE, OWNER, SPECIAL_INFO + UNIT_FIELD_BYTES_1 = OBJECT_END + 0x06E, // Size: 1, Flags: PUBLIC + UNIT_FIELD_PETNUMBER = OBJECT_END + 0x06F, // Size: 1, Flags: PUBLIC + UNIT_FIELD_PET_NAME_TIMESTAMP = OBJECT_END + 0x070, // Size: 1, Flags: PUBLIC + UNIT_FIELD_PETEXPERIENCE = OBJECT_END + 0x071, // Size: 1, Flags: OWNER + UNIT_FIELD_PETNEXTLEVELEXP = OBJECT_END + 0x072, // Size: 1, Flags: OWNER + UNIT_MOD_CAST_SPEED = OBJECT_END + 0x073, // Size: 1, Flags: PUBLIC + UNIT_MOD_CAST_HASTE = OBJECT_END + 0x074, // Size: 1, Flags: PUBLIC + UNIT_FIELD_MOD_HASTE = OBJECT_END + 0x075, // Size: 1, Flags: PUBLIC + UNIT_FIELD_MOD_RANGED_HASTE = OBJECT_END + 0x076, // Size: 1, Flags: PUBLIC + UNIT_FIELD_MOD_HASTE_REGEN = OBJECT_END + 0x077, // Size: 1, Flags: PUBLIC + UNIT_FIELD_MOD_TIME_RATE = OBJECT_END + 0x078, // Size: 1, Flags: PUBLIC + UNIT_CREATED_BY_SPELL = OBJECT_END + 0x079, // Size: 1, Flags: PUBLIC + UNIT_NPC_FLAGS = OBJECT_END + 0x07A, // Size: 2, Flags: PUBLIC, DYNAMIC + UNIT_NPC_EMOTESTATE = OBJECT_END + 0x07C, // Size: 1, Flags: PUBLIC + UNIT_FIELD_STAT = OBJECT_END + 0x07D, // Size: 4, Flags: PRIVATE, OWNER + UNIT_FIELD_POSSTAT = OBJECT_END + 0x081, // Size: 4, Flags: PRIVATE, OWNER + UNIT_FIELD_NEGSTAT = OBJECT_END + 0x085, // Size: 4, Flags: PRIVATE, OWNER + UNIT_FIELD_RESISTANCES = OBJECT_END + 0x089, // Size: 7, Flags: PRIVATE, OWNER, SPECIAL_INFO + UNIT_FIELD_BONUS_RESISTANCE_MODS = OBJECT_END + 0x090, // Size: 7, Flags: PRIVATE, OWNER + UNIT_FIELD_BASE_MANA = OBJECT_END + 0x097, // Size: 1, Flags: PUBLIC + UNIT_FIELD_BASE_HEALTH = OBJECT_END + 0x098, // Size: 1, Flags: PRIVATE, OWNER + UNIT_FIELD_BYTES_2 = OBJECT_END + 0x099, // Size: 1, Flags: PUBLIC + UNIT_FIELD_ATTACK_POWER = OBJECT_END + 0x09A, // Size: 1, Flags: PRIVATE, OWNER + UNIT_FIELD_ATTACK_POWER_MOD_POS = OBJECT_END + 0x09B, // Size: 1, Flags: PRIVATE, OWNER + UNIT_FIELD_ATTACK_POWER_MOD_NEG = OBJECT_END + 0x09C, // Size: 1, Flags: PRIVATE, OWNER + UNIT_FIELD_ATTACK_POWER_MULTIPLIER = OBJECT_END + 0x09D, // Size: 1, Flags: PRIVATE, OWNER + UNIT_FIELD_RANGED_ATTACK_POWER = OBJECT_END + 0x09E, // Size: 1, Flags: PRIVATE, OWNER + UNIT_FIELD_RANGED_ATTACK_POWER_MOD_POS = OBJECT_END + 0x09F, // Size: 1, Flags: PRIVATE, OWNER + UNIT_FIELD_RANGED_ATTACK_POWER_MOD_NEG = OBJECT_END + 0x0A0, // Size: 1, Flags: PRIVATE, OWNER + UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER = OBJECT_END + 0x0A1, // Size: 1, Flags: PRIVATE, OWNER + UNIT_FIELD_MAIN_HAND_WEAPON_ATTACK_POWER = OBJECT_END + 0x0A2, // Size: 1, Flags: PRIVATE, OWNER + UNIT_FIELD_OFF_HAND_WEAPON_ATTACK_POWER = OBJECT_END + 0x0A3, // Size: 1, Flags: PRIVATE, OWNER + UNIT_FIELD_RANGED_HAND_WEAPON_ATTACK_POWER = OBJECT_END + 0x0A4, // Size: 1, Flags: PRIVATE, OWNER + UNIT_FIELD_ATTACK_SPEED_AURA = OBJECT_END + 0x0A5, // Size: 1, Flags: PRIVATE, OWNER + UNIT_FIELD_LIFESTEAL = OBJECT_END + 0x0A6, // Size: 1, Flags: PRIVATE, OWNER + UNIT_FIELD_MINRANGEDDAMAGE = OBJECT_END + 0x0A7, // Size: 1, Flags: PRIVATE, OWNER + UNIT_FIELD_MAXRANGEDDAMAGE = OBJECT_END + 0x0A8, // Size: 1, Flags: PRIVATE, OWNER + UNIT_FIELD_POWER_COST_MODIFIER = OBJECT_END + 0x0A9, // Size: 7, Flags: PRIVATE, OWNER + UNIT_FIELD_POWER_COST_MULTIPLIER = OBJECT_END + 0x0B0, // Size: 7, Flags: PRIVATE, OWNER + UNIT_FIELD_MAXHEALTHMODIFIER = OBJECT_END + 0x0B7, // Size: 1, Flags: PRIVATE, OWNER + UNIT_FIELD_HOVERHEIGHT = OBJECT_END + 0x0B8, // Size: 1, Flags: PUBLIC + UNIT_FIELD_MIN_ITEM_LEVEL_CUTOFF = OBJECT_END + 0x0B9, // Size: 1, Flags: PUBLIC + UNIT_FIELD_MIN_ITEM_LEVEL = OBJECT_END + 0x0BA, // Size: 1, Flags: PUBLIC + UNIT_FIELD_MAXITEMLEVEL = OBJECT_END + 0x0BB, // Size: 1, Flags: PUBLIC + UNIT_FIELD_WILD_BATTLEPET_LEVEL = OBJECT_END + 0x0BC, // Size: 1, Flags: PUBLIC + UNIT_FIELD_BATTLEPET_COMPANION_NAME_TIMESTAMP = OBJECT_END + 0x0BD, // Size: 1, Flags: PUBLIC + UNIT_FIELD_INTERACT_SPELLID = OBJECT_END + 0x0BE, // Size: 1, Flags: PUBLIC + UNIT_FIELD_STATE_SPELL_VISUAL_ID = OBJECT_END + 0x0BF, // Size: 1, Flags: DYNAMIC, URGENT + UNIT_FIELD_STATE_ANIM_ID = OBJECT_END + 0x0C0, // Size: 1, Flags: DYNAMIC, URGENT + UNIT_FIELD_STATE_ANIM_KIT_ID = OBJECT_END + 0x0C1, // Size: 1, Flags: DYNAMIC, URGENT + UNIT_FIELD_STATE_WORLD_EFFECT_ID = OBJECT_END + 0x0C2, // Size: 4, Flags: DYNAMIC, URGENT + UNIT_FIELD_SCALE_DURATION = OBJECT_END + 0x0C6, // Size: 1, Flags: PUBLIC + UNIT_FIELD_LOOKS_LIKE_MOUNT_ID = OBJECT_END + 0x0C7, // Size: 1, Flags: PUBLIC + UNIT_FIELD_LOOKS_LIKE_CREATURE_ID = OBJECT_END + 0x0C8, // Size: 1, Flags: PUBLIC + UNIT_FIELD_LOOK_AT_CONTROLLER_ID = OBJECT_END + 0x0C9, // Size: 1, Flags: PUBLIC + UNIT_FIELD_GUILD_GUID = OBJECT_END + 0x0CA, // Size: 4, Flags: PUBLIC + UNIT_END = OBJECT_END + 0x0CE, }; enum UnitDynamicFields @@ -209,141 +240,152 @@ enum PlayerFields PLAYER_BYTES_4 = UNIT_END + 0x014, // Size: 1, Flags: PUBLIC PLAYER_DUEL_TEAM = UNIT_END + 0x015, // Size: 1, Flags: PUBLIC PLAYER_GUILD_TIMESTAMP = UNIT_END + 0x016, // Size: 1, Flags: PUBLIC - PLAYER_QUEST_LOG = UNIT_END + 0x017, // Size: 800, Flags: PARTY_MEMBER - PLAYER_VISIBLE_ITEM = UNIT_END + 0x337, // Size: 38, Flags: PUBLIC - PLAYER_CHOSEN_TITLE = UNIT_END + 0x35D, // Size: 1, Flags: PUBLIC - PLAYER_FAKE_INEBRIATION = UNIT_END + 0x35E, // Size: 1, Flags: PUBLIC - PLAYER_FIELD_VIRTUAL_PLAYER_REALM = UNIT_END + 0x35F, // Size: 1, Flags: PUBLIC - PLAYER_FIELD_CURRENT_SPEC_ID = UNIT_END + 0x360, // Size: 1, Flags: PUBLIC - PLAYER_FIELD_TAXI_MOUNT_ANIM_KIT_ID = UNIT_END + 0x361, // Size: 1, Flags: PUBLIC - PLAYER_FIELD_AVG_ITEM_LEVEL = UNIT_END + 0x362, // Size: 4, Flags: PUBLIC - PLAYER_FIELD_CURRENT_BATTLE_PET_BREED_QUALITY = UNIT_END + 0x366, // Size: 1, Flags: PUBLIC - PLAYER_FIELD_PRESTIGE = UNIT_END + 0x367, // Size: 1, Flags: PUBLIC - PLAYER_FIELD_HONOR_LEVEL = UNIT_END + 0x368, // Size: 1, Flags: PUBLIC - PLAYER_FIELD_INV_SLOT_HEAD = UNIT_END + 0x369, // Size: 780, Flags: PRIVATE - PLAYER_FIELD_END_NOT_SELF = UNIT_END + 0x369, - PLAYER_FARSIGHT = UNIT_END + 0x675, // Size: 4, Flags: PRIVATE - PLAYER_FIELD_SUMMONED_BATTLE_PET_ID = UNIT_END + 0x679, // Size: 4, Flags: PRIVATE - PLAYER__FIELD_KNOWN_TITLES = UNIT_END + 0x67D, // Size: 12, Flags: PRIVATE - PLAYER_FIELD_COINAGE = UNIT_END + 0x689, // Size: 2, Flags: PRIVATE - PLAYER_XP = UNIT_END + 0x68B, // Size: 1, Flags: PRIVATE - PLAYER_NEXT_LEVEL_XP = UNIT_END + 0x68C, // Size: 1, Flags: PRIVATE - PLAYER_TRIAL_XP = UNIT_END + 0x68D, // Size: 1, Flags: PRIVATE - PLAYER_SKILL_LINEID = UNIT_END + 0x68E, // Size: 448, Flags: PRIVATE - PLAYER_CHARACTER_POINTS = UNIT_END + 0x84E, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_MAX_TALENT_TIERS = UNIT_END + 0x84F, // Size: 1, Flags: PRIVATE - PLAYER_TRACK_CREATURES = UNIT_END + 0x850, // Size: 1, Flags: PRIVATE - PLAYER_TRACK_RESOURCES = UNIT_END + 0x851, // Size: 1, Flags: PRIVATE - PLAYER_EXPERTISE = UNIT_END + 0x852, // Size: 1, Flags: PRIVATE - PLAYER_OFFHAND_EXPERTISE = UNIT_END + 0x853, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_RANGED_EXPERTISE = UNIT_END + 0x854, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_COMBAT_RATING_EXPERTISE = UNIT_END + 0x855, // Size: 1, Flags: PRIVATE - PLAYER_BLOCK_PERCENTAGE = UNIT_END + 0x856, // Size: 1, Flags: PRIVATE - PLAYER_DODGE_PERCENTAGE = UNIT_END + 0x857, // Size: 1, Flags: PRIVATE - PLAYER_DODGE_PERCENTAGE_FROM_ATTRIBUTE = UNIT_END + 0x858, // Size: 1, Flags: PRIVATE - PLAYER_PARRY_PERCENTAGE = UNIT_END + 0x859, // Size: 1, Flags: PRIVATE - PLAYER_PARRY_PERCENTAGE_FROM_ATTRIBUTE = UNIT_END + 0x85A, // Size: 1, Flags: PRIVATE - PLAYER_CRIT_PERCENTAGE = UNIT_END + 0x85B, // Size: 1, Flags: PRIVATE - PLAYER_RANGED_CRIT_PERCENTAGE = UNIT_END + 0x85C, // Size: 1, Flags: PRIVATE - PLAYER_OFFHAND_CRIT_PERCENTAGE = UNIT_END + 0x85D, // Size: 1, Flags: PRIVATE - PLAYER_SPELL_CRIT_PERCENTAGE1 = UNIT_END + 0x85E, // Size: 1, Flags: PRIVATE - PLAYER_SHIELD_BLOCK = UNIT_END + 0x85F, // Size: 1, Flags: PRIVATE - PLAYER_SHIELD_BLOCK_CRIT_PERCENTAGE = UNIT_END + 0x860, // Size: 1, Flags: PRIVATE - PLAYER_MASTERY = UNIT_END + 0x861, // Size: 1, Flags: PRIVATE - PLAYER_SPEED = UNIT_END + 0x862, // Size: 1, Flags: PRIVATE - PLAYER_LIFESTEAL = UNIT_END + 0x863, // Size: 1, Flags: PRIVATE - PLAYER_AVOIDANCE = UNIT_END + 0x864, // Size: 1, Flags: PRIVATE - PLAYER_STURDINESS = UNIT_END + 0x865, // Size: 1, Flags: PRIVATE - PLAYER_VERSATILITY = UNIT_END + 0x866, // Size: 1, Flags: PRIVATE - PLAYER_VERSATILITY_BONUS = UNIT_END + 0x867, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_PVP_POWER_DAMAGE = UNIT_END + 0x868, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_PVP_POWER_HEALING = UNIT_END + 0x869, // Size: 1, Flags: PRIVATE - PLAYER_EXPLORED_ZONES_1 = UNIT_END + 0x86A, // Size: 320, Flags: PRIVATE - PLAYER_FIELD_REST_INFO = UNIT_END + 0x9AA, // Size: 4, Flags: PRIVATE - PLAYER_FIELD_MOD_DAMAGE_DONE_POS = UNIT_END + 0x9AE, // Size: 7, Flags: PRIVATE - PLAYER_FIELD_MOD_DAMAGE_DONE_NEG = UNIT_END + 0x9B5, // Size: 7, Flags: PRIVATE - PLAYER_FIELD_MOD_DAMAGE_DONE_PCT = UNIT_END + 0x9BC, // Size: 7, Flags: PRIVATE - PLAYER_FIELD_MOD_HEALING_DONE_POS = UNIT_END + 0x9C3, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_MOD_HEALING_PCT = UNIT_END + 0x9C4, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_MOD_HEALING_DONE_PCT = UNIT_END + 0x9C5, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_MOD_PERIODIC_HEALING_DONE_PERCENT = UNIT_END + 0x9C6, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_WEAPON_DMG_MULTIPLIERS = UNIT_END + 0x9C7, // Size: 3, Flags: PRIVATE - PLAYER_FIELD_WEAPON_ATK_SPEED_MULTIPLIERS = UNIT_END + 0x9CA, // Size: 3, Flags: PRIVATE - PLAYER_FIELD_MOD_SPELL_POWER_PCT = UNIT_END + 0x9CD, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_MOD_RESILIENCE_PERCENT = UNIT_END + 0x9CE, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_OVERRIDE_SPELL_POWER_BY_AP_PCT = UNIT_END + 0x9CF, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_OVERRIDE_AP_BY_SPELL_POWER_PERCENT = UNIT_END + 0x9D0, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_MOD_TARGET_RESISTANCE = UNIT_END + 0x9D1, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE = UNIT_END + 0x9D2, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_LOCAL_FLAGS = UNIT_END + 0x9D3, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_BYTES = UNIT_END + 0x9D4, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_PVP_MEDALS = UNIT_END + 0x9D5, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_BUYBACK_PRICE_1 = UNIT_END + 0x9D6, // Size: 12, Flags: PRIVATE - PLAYER_FIELD_BUYBACK_TIMESTAMP_1 = UNIT_END + 0x9E2, // Size: 12, Flags: PRIVATE - PLAYER_FIELD_KILLS = UNIT_END + 0x9EE, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_LIFETIME_HONORABLE_KILLS = UNIT_END + 0x9EF, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_WATCHED_FACTION_INDEX = UNIT_END + 0x9F0, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_COMBAT_RATING_1 = UNIT_END + 0x9F1, // Size: 32, Flags: PRIVATE - PLAYER_FIELD_ARENA_TEAM_INFO_1_1 = UNIT_END + 0xA11, // Size: 42, Flags: PRIVATE - PLAYER_FIELD_MAX_LEVEL = UNIT_END + 0xA3B, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA = UNIT_END + 0xA3C, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_MAX_CREATURE_SCALING_LEVEL = UNIT_END + 0xA3D, // Size: 1, Flags: PRIVATE - PLAYER_NO_REAGENT_COST_1 = UNIT_END + 0xA3E, // Size: 4, Flags: PRIVATE - PLAYER_PET_SPELL_POWER = UNIT_END + 0xA42, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_RESEARCHING_1 = UNIT_END + 0xA43, // Size: 10, Flags: PRIVATE - PLAYER_PROFESSION_SKILL_LINE_1 = UNIT_END + 0xA4D, // Size: 2, Flags: PRIVATE - PLAYER_FIELD_UI_HIT_MODIFIER = UNIT_END + 0xA4F, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_UI_SPELL_HIT_MODIFIER = UNIT_END + 0xA50, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_HOME_REALM_TIME_OFFSET = UNIT_END + 0xA51, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_MOD_PET_HASTE = UNIT_END + 0xA52, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_BYTES2 = UNIT_END + 0xA53, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_BYTES3 = UNIT_END + 0xA54, // Size: 1, Flags: PRIVATE, URGENT_SELF_ONLY - PLAYER_FIELD_LFG_BONUS_FACTION_ID = UNIT_END + 0xA55, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_LOOT_SPEC_ID = UNIT_END + 0xA56, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_OVERRIDE_ZONE_PVP_TYPE = UNIT_END + 0xA57, // Size: 1, Flags: PRIVATE, URGENT_SELF_ONLY - PLAYER_FIELD_BAG_SLOT_FLAGS = UNIT_END + 0xA58, // Size: 4, Flags: PRIVATE - PLAYER_FIELD_BANK_BAG_SLOT_FLAGS = UNIT_END + 0xA5C, // Size: 7, Flags: PRIVATE - PLAYER_FIELD_INSERT_ITEMS_LEFT_TO_RIGHT = UNIT_END + 0xA63, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_QUEST_COMPLETED = UNIT_END + 0xA64, // Size: 1750, Flags: PRIVATE - PLAYER_FIELD_HONOR = UNIT_END + 0x113A, // Size: 1, Flags: PRIVATE - PLAYER_FIELD_HONOR_NEXT_LEVEL = UNIT_END + 0x113B, // Size: 1, Flags: PRIVATE - PLAYER_END = UNIT_END + 0x113C, + PLAYER_QUEST_LOG = UNIT_END + 0x017, // Size: 1600, Flags: PARTY_MEMBER + PLAYER_VISIBLE_ITEM = UNIT_END + 0x657, // Size: 38, Flags: PUBLIC + PLAYER_CHOSEN_TITLE = UNIT_END + 0x67D, // Size: 1, Flags: PUBLIC + PLAYER_FAKE_INEBRIATION = UNIT_END + 0x67E, // Size: 1, Flags: PUBLIC + PLAYER_FIELD_VIRTUAL_PLAYER_REALM = UNIT_END + 0x67F, // Size: 1, Flags: PUBLIC + PLAYER_FIELD_CURRENT_SPEC_ID = UNIT_END + 0x680, // Size: 1, Flags: PUBLIC + PLAYER_FIELD_TAXI_MOUNT_ANIM_KIT_ID = UNIT_END + 0x681, // Size: 1, Flags: PUBLIC + PLAYER_FIELD_AVG_ITEM_LEVEL = UNIT_END + 0x682, // Size: 4, Flags: PUBLIC + PLAYER_FIELD_CURRENT_BATTLE_PET_BREED_QUALITY = UNIT_END + 0x686, // Size: 1, Flags: PUBLIC + PLAYER_FIELD_HONOR_LEVEL = UNIT_END + 0x687, // Size: 1, Flags: PUBLIC + PLAYER_END = UNIT_END + 0x688, }; enum PlayerDynamicFields { - PLAYER_DYNAMIC_FIELD_RESERACH_SITE = UNIT_DYNAMIC_END + 0x000, // Flags: PRIVATE - PLAYER_DYNAMIC_FIELD_RESEARCH_SITE_PROGRESS = UNIT_DYNAMIC_END + 0x001, // Flags: PRIVATE - PLAYER_DYNAMIC_FIELD_DAILY_QUESTS = UNIT_DYNAMIC_END + 0x002, // Flags: PRIVATE - PLAYER_DYNAMIC_FIELD_AVAILABLE_QUEST_LINE_X_QUEST_ID = UNIT_DYNAMIC_END + 0x003, // Flags: PRIVATE - PLAYER_DYNAMIC_FIELD_HEIRLOOMS = UNIT_DYNAMIC_END + 0x004, // Flags: PRIVATE - PLAYER_DYNAMIC_FIELD_HEIRLOOM_FLAGS = UNIT_DYNAMIC_END + 0x005, // Flags: PRIVATE - PLAYER_DYNAMIC_FIELD_TOYS = UNIT_DYNAMIC_END + 0x006, // Flags: PRIVATE - PLAYER_DYNAMIC_FIELD_TRANSMOG = UNIT_DYNAMIC_END + 0x007, // Flags: PRIVATE - PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG = UNIT_DYNAMIC_END + 0x008, // Flags: PRIVATE - PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS = UNIT_DYNAMIC_END + 0x009, // Flags: PRIVATE - PLAYER_DYNAMIC_FIELD_CHARACTER_RESTRICTIONS = UNIT_DYNAMIC_END + 0x00A, // Flags: PRIVATE - PLAYER_DYNAMIC_FIELD_SPELL_PCT_MOD_BY_LABEL = UNIT_DYNAMIC_END + 0x00B, // Flags: PRIVATE - PLAYER_DYNAMIC_FIELD_SPELL_FLAT_MOD_BY_LABEL = UNIT_DYNAMIC_END + 0x00C, // Flags: PRIVATE - PLAYER_DYNAMIC_FIELD_ARENA_COOLDOWNS = UNIT_DYNAMIC_END + 0x00D, // Flags: PUBLIC - PLAYER_DYNAMIC_END = UNIT_DYNAMIC_END + 0x00E, + PLAYER_DYNAMIC_FIELD_ARENA_COOLDOWNS = UNIT_DYNAMIC_END + 0x000, // Flags: PUBLIC + PLAYER_DYNAMIC_END = UNIT_DYNAMIC_END + 0x001, +}; + +enum ActivePlayerField +{ + ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD = PLAYER_END + 0x000, // Size: 780, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_FARSIGHT = PLAYER_END + 0x30C, // Size: 4, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID = PLAYER_END + 0x310, // Size: 4, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_KNOWN_TITLES = PLAYER_END + 0x314, // Size: 12, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_COINAGE = PLAYER_END + 0x320, // Size: 2, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_XP = PLAYER_END + 0x322, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP = PLAYER_END + 0x323, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_TRIAL_XP = PLAYER_END + 0x324, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_SKILL_LINEID = PLAYER_END + 0x325, // Size: 896, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_CHARACTER_POINTS = PLAYER_END + 0x6A5, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_MAX_TALENT_TIERS = PLAYER_END + 0x6A6, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_TRACK_CREATURES = PLAYER_END + 0x6A7, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_TRACK_RESOURCES = PLAYER_END + 0x6A8, // Size: 2, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_EXPERTISE = PLAYER_END + 0x6AA, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_OFFHAND_EXPERTISE = PLAYER_END + 0x6AB, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_RANGED_EXPERTISE = PLAYER_END + 0x6AC, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_COMBAT_RATING_EXPERTISE = PLAYER_END + 0x6AD, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_BLOCK_PERCENTAGE = PLAYER_END + 0x6AE, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_DODGE_PERCENTAGE = PLAYER_END + 0x6AF, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_DODGE_PERCENTAGE_FROM_ATTRIBUTE = PLAYER_END + 0x6B0, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_PARRY_PERCENTAGE = PLAYER_END + 0x6B1, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_PARRY_PERCENTAGE_FROM_ATTRIBUTE = PLAYER_END + 0x6B2, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_CRIT_PERCENTAGE = PLAYER_END + 0x6B3, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_RANGED_CRIT_PERCENTAGE = PLAYER_END + 0x6B4, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_OFFHAND_CRIT_PERCENTAGE = PLAYER_END + 0x6B5, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_SPELL_CRIT_PERCENTAGE1 = PLAYER_END + 0x6B6, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_SHIELD_BLOCK = PLAYER_END + 0x6B7, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_SHIELD_BLOCK_CRIT_PERCENTAGE = PLAYER_END + 0x6B8, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_MASTERY = PLAYER_END + 0x6B9, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_SPEED = PLAYER_END + 0x6BA, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_AVOIDANCE = PLAYER_END + 0x6BB, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_STURDINESS = PLAYER_END + 0x6BC, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_VERSATILITY = PLAYER_END + 0x6BD, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_VERSATILITY_BONUS = PLAYER_END + 0x6BE, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_PVP_POWER_DAMAGE = PLAYER_END + 0x6BF, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_PVP_POWER_HEALING = PLAYER_END + 0x6C0, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_EXPLORED_ZONES = PLAYER_END + 0x6C1, // Size: 320, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_REST_INFO = PLAYER_END + 0x801, // Size: 4, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS = PLAYER_END + 0x805, // Size: 7, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG = PLAYER_END + 0x80C, // Size: 7, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT = PLAYER_END + 0x813, // Size: 7, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_POS = PLAYER_END + 0x81A, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_MOD_HEALING_PCT = PLAYER_END + 0x81B, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_PCT = PLAYER_END + 0x81C, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_MOD_PERIODIC_HEALING_DONE_PERCENT = PLAYER_END + 0x81D, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_WEAPON_DMG_MULTIPLIERS = PLAYER_END + 0x81E, // Size: 3, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_WEAPON_ATK_SPEED_MULTIPLIERS = PLAYER_END + 0x821, // Size: 3, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_MOD_SPELL_POWER_PCT = PLAYER_END + 0x824, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_MOD_RESILIENCE_PERCENT = PLAYER_END + 0x825, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_OVERRIDE_SPELL_POWER_BY_AP_PCT = PLAYER_END + 0x826, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_OVERRIDE_AP_BY_SPELL_POWER_PERCENT = PLAYER_END + 0x827, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_MOD_TARGET_RESISTANCE = PLAYER_END + 0x828, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE = PLAYER_END + 0x829, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_LOCAL_FLAGS = PLAYER_END + 0x82A, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_BYTES = PLAYER_END + 0x82B, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_PVP_MEDALS = PLAYER_END + 0x82C, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_BUYBACK_PRICE = PLAYER_END + 0x82D, // Size: 12, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP = PLAYER_END + 0x839, // Size: 12, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_KILLS = PLAYER_END + 0x845, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS = PLAYER_END + 0x846, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_WATCHED_FACTION_INDEX = PLAYER_END + 0x847, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_COMBAT_RATING = PLAYER_END + 0x848, // Size: 32, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO = PLAYER_END + 0x868, // Size: 54, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_MAX_LEVEL = PLAYER_END + 0x89E, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA = PLAYER_END + 0x89F, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_MAX_CREATURE_SCALING_LEVEL = PLAYER_END + 0x8A0, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_NO_REAGENT_COST = PLAYER_END + 0x8A1, // Size: 4, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_PET_SPELL_POWER = PLAYER_END + 0x8A5, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_PROFESSION_SKILL_LINE = PLAYER_END + 0x8A6, // Size: 2, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_UI_HIT_MODIFIER = PLAYER_END + 0x8A8, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_UI_SPELL_HIT_MODIFIER = PLAYER_END + 0x8A9, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_HOME_REALM_TIME_OFFSET = PLAYER_END + 0x8AA, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_MOD_PET_HASTE = PLAYER_END + 0x8AB, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_BYTES2 = PLAYER_END + 0x8AC, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_BYTES3 = PLAYER_END + 0x8AD, // Size: 1, Flags: PUBLIC, URGENT_SELF_ONLY + ACTIVE_PLAYER_FIELD_LFG_BONUS_FACTION_ID = PLAYER_END + 0x8AE, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_LOOT_SPEC_ID = PLAYER_END + 0x8AF, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_OVERRIDE_ZONE_PVP_TYPE = PLAYER_END + 0x8B0, // Size: 1, Flags: PUBLIC, URGENT_SELF_ONLY + ACTIVE_PLAYER_FIELD_BAG_SLOT_FLAGS = PLAYER_END + 0x8B1, // Size: 4, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_BANK_BAG_SLOT_FLAGS = PLAYER_END + 0x8B5, // Size: 7, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_INSERT_ITEMS_LEFT_TO_RIGHT = PLAYER_END + 0x8BC, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_QUEST_COMPLETED = PLAYER_END + 0x8BD, // Size: 1750, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_HONOR = PLAYER_END + 0xF93, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_HONOR_NEXT_LEVEL = PLAYER_END + 0xF94, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_PVP_TIER_MAX_FROM_WINS = PLAYER_END + 0xF95, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_FIELD_PVP_LAST_WEEKS_TIER_MAX_FROM_WINS = PLAYER_END + 0xF96, // Size: 1, Flags: PUBLIC + ACTIVE_PLAYER_END = PLAYER_END + 0xF97, +}; + +enum ActivePlayerDynamicField +{ + ACTIVE_PLAYER_DYNAMIC_FIELD_RESERACH_SITE = PLAYER_DYNAMIC_END + 0x000, // Flags: PUBLIC + ACTIVE_PLAYER_DYNAMIC_FIELD_RESEARCH_SITE_PROGRESS = PLAYER_DYNAMIC_END + 0x001, // Flags: PUBLIC + ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS = PLAYER_DYNAMIC_END + 0x002, // Flags: PUBLIC + ACTIVE_PLAYER_DYNAMIC_FIELD_AVAILABLE_QUEST_LINE_X_QUEST_ID = PLAYER_DYNAMIC_END + 0x003, // Flags: PUBLIC + ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOMS = PLAYER_DYNAMIC_END + 0x005, // Flags: PUBLIC + ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOM_FLAGS = PLAYER_DYNAMIC_END + 0x006, // Flags: PUBLIC + ACTIVE_PLAYER_DYNAMIC_FIELD_TOYS = PLAYER_DYNAMIC_END + 0x007, // Flags: PUBLIC + ACTIVE_PLAYER_DYNAMIC_FIELD_TRANSMOG = PLAYER_DYNAMIC_END + 0x008, // Flags: PUBLIC + ACTIVE_PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG = PLAYER_DYNAMIC_END + 0x009, // Flags: PUBLIC + ACTIVE_PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS = PLAYER_DYNAMIC_END + 0x00A, // Flags: PUBLIC + ACTIVE_PLAYER_DYNAMIC_FIELD_CHARACTER_RESTRICTIONS = PLAYER_DYNAMIC_END + 0x00B, // Flags: PUBLIC + ACTIVE_PLAYER_DYNAMIC_FIELD_SPELL_PCT_MOD_BY_LABEL = PLAYER_DYNAMIC_END + 0x00C, // Flags: PUBLIC + ACTIVE_PLAYER_DYNAMIC_FIELD_SPELL_FLAT_MOD_BY_LABEL = PLAYER_DYNAMIC_END + 0x00D, // Flags: PUBLIC + ACTIVE_PLAYER_DYNAMIC_FIELD_RESERACH = PLAYER_DYNAMIC_END + 0x00E, // Flags: PUBLIC + ACTIVE_PLAYER_DYNAMIC_END = PLAYER_DYNAMIC_END + 0x00F, }; enum GameObjectFields { GAMEOBJECT_FIELD_CREATED_BY = OBJECT_END + 0x000, // Size: 4, Flags: PUBLIC - GAMEOBJECT_DISPLAYID = OBJECT_END + 0x004, // Size: 1, Flags: DYNAMIC, URGENT - GAMEOBJECT_FLAGS = OBJECT_END + 0x005, // Size: 1, Flags: PUBLIC, URGENT - GAMEOBJECT_PARENTROTATION = OBJECT_END + 0x006, // Size: 4, Flags: PUBLIC - GAMEOBJECT_FACTION = OBJECT_END + 0x00A, // Size: 1, Flags: PUBLIC - GAMEOBJECT_LEVEL = OBJECT_END + 0x00B, // Size: 1, Flags: PUBLIC - GAMEOBJECT_BYTES_1 = OBJECT_END + 0x00C, // Size: 1, Flags: PUBLIC, URGENT - GAMEOBJECT_SPELL_VISUAL_ID = OBJECT_END + 0x00D, // Size: 1, Flags: PUBLIC, DYNAMIC, URGENT - GAMEOBJECT_STATE_SPELL_VISUAL_ID = OBJECT_END + 0x00E, // Size: 1, Flags: DYNAMIC, URGENT - GAMEOBJECT_STATE_ANIM_ID = OBJECT_END + 0x00F, // Size: 1, Flags: DYNAMIC, URGENT - GAMEOBJECT_STATE_ANIM_KIT_ID = OBJECT_END + 0x010, // Size: 1, Flags: DYNAMIC, URGENT - GAMEOBJECT_STATE_WORLD_EFFECT_ID = OBJECT_END + 0x011, // Size: 4, Flags: DYNAMIC, URGENT - GAMEOBJECT_END = OBJECT_END + 0x015, + GAMEOBJECT_FIELD_GUILD_GUID = OBJECT_END + 0x004, // Size: 4, Flags: PUBLIC + GAMEOBJECT_DISPLAYID = OBJECT_END + 0x008, // Size: 1, Flags: DYNAMIC, URGENT + GAMEOBJECT_FLAGS = OBJECT_END + 0x009, // Size: 1, Flags: PUBLIC, URGENT + GAMEOBJECT_PARENTROTATION = OBJECT_END + 0x00A, // Size: 4, Flags: PUBLIC + GAMEOBJECT_FACTION = OBJECT_END + 0x00E, // Size: 1, Flags: PUBLIC + GAMEOBJECT_LEVEL = OBJECT_END + 0x00F, // Size: 1, Flags: PUBLIC + GAMEOBJECT_BYTES_1 = OBJECT_END + 0x010, // Size: 1, Flags: PUBLIC, URGENT + GAMEOBJECT_SPELL_VISUAL_ID = OBJECT_END + 0x011, // Size: 1, Flags: PUBLIC, DYNAMIC, URGENT + GAMEOBJECT_STATE_SPELL_VISUAL_ID = OBJECT_END + 0x012, // Size: 1, Flags: DYNAMIC, URGENT + GAMEOBJECT_STATE_ANIM_ID = OBJECT_END + 0x013, // Size: 1, Flags: DYNAMIC, URGENT + GAMEOBJECT_STATE_ANIM_KIT_ID = OBJECT_END + 0x014, // Size: 1, Flags: DYNAMIC, URGENT + GAMEOBJECT_STATE_WORLD_EFFECT_ID = OBJECT_END + 0x015, // Size: 4, Flags: DYNAMIC, URGENT + GAMEOBJECT_FIELD_CUSTOM_PARAM = OBJECT_END + 0x019, // Size: 1, Flags: PUBLIC, URGENT + GAMEOBJECT_END = OBJECT_END + 0x01A, }; enum GameObjectDynamicFields @@ -372,15 +414,16 @@ enum CorpseFields { CORPSE_FIELD_OWNER = OBJECT_END + 0x000, // Size: 4, Flags: PUBLIC CORPSE_FIELD_PARTY = OBJECT_END + 0x004, // Size: 4, Flags: PUBLIC - CORPSE_FIELD_DISPLAY_ID = OBJECT_END + 0x008, // Size: 1, Flags: PUBLIC - CORPSE_FIELD_ITEM = OBJECT_END + 0x009, // Size: 19, Flags: PUBLIC - CORPSE_FIELD_BYTES_1 = OBJECT_END + 0x01C, // Size: 1, Flags: PUBLIC - CORPSE_FIELD_BYTES_2 = OBJECT_END + 0x01D, // Size: 1, Flags: PUBLIC - CORPSE_FIELD_FLAGS = OBJECT_END + 0x01E, // Size: 1, Flags: PUBLIC - CORPSE_FIELD_DYNAMIC_FLAGS = OBJECT_END + 0x01F, // Size: 1, Flags: DYNAMIC - CORPSE_FIELD_FACTIONTEMPLATE = OBJECT_END + 0x020, // Size: 1, Flags: PUBLIC - CORPSE_FIELD_CUSTOM_DISPLAY_OPTION = OBJECT_END + 0x021, // Size: 1, Flags: PUBLIC - CORPSE_END = OBJECT_END + 0x022, + CORPSE_FIELD_GUILD_GUID = OBJECT_END + 0x008, // Size: 4, Flags: PUBLIC + CORPSE_FIELD_DISPLAY_ID = OBJECT_END + 0x00C, // Size: 1, Flags: PUBLIC + CORPSE_FIELD_ITEM = OBJECT_END + 0x00D, // Size: 19, Flags: PUBLIC + CORPSE_FIELD_BYTES_1 = OBJECT_END + 0x020, // Size: 1, Flags: PUBLIC + CORPSE_FIELD_BYTES_2 = OBJECT_END + 0x021, // Size: 1, Flags: PUBLIC + CORPSE_FIELD_FLAGS = OBJECT_END + 0x022, // Size: 1, Flags: PUBLIC + CORPSE_FIELD_DYNAMIC_FLAGS = OBJECT_END + 0x023, // Size: 1, Flags: DYNAMIC + CORPSE_FIELD_FACTIONTEMPLATE = OBJECT_END + 0x024, // Size: 1, Flags: PUBLIC + CORPSE_FIELD_CUSTOM_DISPLAY_OPTION = OBJECT_END + 0x025, // Size: 1, Flags: PUBLIC + CORPSE_END = OBJECT_END + 0x026, }; enum CorpseDynamicFields diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index aae4cbcb09b..f16f234ef2a 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -891,7 +891,7 @@ bool Guardian::InitStatsForLevel(uint8 petlevel) SetPowerType(POWER_ENERGY); else if (IsPetImp() || IsPetFelhunter() || IsPetVoidwalker() || IsPetSuccubus() || IsPetDoomguard() || IsPetFelguard()) // Warlock pets have energy (since 5.x) SetPowerType(POWER_ENERGY); - else + else SetPowerType(POWER_MANA); // Damage @@ -901,8 +901,8 @@ bool Guardian::InitStatsForLevel(uint8 petlevel) case SUMMON_PET: { // the damage bonus used for pets is either fire or shadow damage, whatever is higher - int32 fire = GetOwner()->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FIRE); - int32 shadow = GetOwner()->GetUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_SHADOW); + int32 fire = GetOwner()->GetUInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FIRE); + int32 shadow = GetOwner()->GetUInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_SHADOW); int32 val = (fire > shadow) ? fire : shadow; if (val < 0) val = 0; @@ -1780,9 +1780,9 @@ Player* Pet::GetOwner() const return Minion::GetOwner()->ToPlayer(); } -void Pet::SetDisplayId(uint32 modelId) +void Pet::SetDisplayId(uint32 modelId, float displayScale /*= 1.f*/) { - Guardian::SetDisplayId(modelId); + Guardian::SetDisplayId(modelId, displayScale); if (!isControlled()) return; diff --git a/src/server/game/Entities/Pet/Pet.h b/src/server/game/Entities/Pet/Pet.h index e411d2251af..f82c88e6b44 100644 --- a/src/server/game/Entities/Pet/Pet.h +++ b/src/server/game/Entities/Pet/Pet.h @@ -52,7 +52,7 @@ class TC_GAME_API Pet : public Guardian void AddToWorld() override; void RemoveFromWorld() override; - void SetDisplayId(uint32 modelId) override; + void SetDisplayId(uint32 modelId, float displayScale = 1.f) override; PetType getPetType() const { return m_petType; } void setPetType(PetType type) { m_petType = type; } diff --git a/src/server/game/Entities/Player/CollectionMgr.cpp b/src/server/game/Entities/Player/CollectionMgr.cpp index eb4834967ba..6aff0ca300a 100644 --- a/src/server/game/Entities/Player/CollectionMgr.cpp +++ b/src/server/game/Entities/Player/CollectionMgr.cpp @@ -81,14 +81,14 @@ CollectionMgr::~CollectionMgr() void CollectionMgr::LoadToys() { for (auto const& t : _toys) - _owner->GetPlayer()->AddDynamicValue(PLAYER_DYNAMIC_FIELD_TOYS, t.first); + _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_TOYS, t.first); } bool CollectionMgr::AddToy(uint32 itemId, bool isFavourite /*= false*/) { if (UpdateAccountToys(itemId, isFavourite)) { - _owner->GetPlayer()->AddDynamicValue(PLAYER_DYNAMIC_FIELD_TOYS, itemId); + _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_TOYS, itemId); return true; } @@ -204,8 +204,8 @@ void CollectionMgr::LoadHeirlooms() { for (auto const& item : _heirlooms) { - _owner->GetPlayer()->AddDynamicValue(PLAYER_DYNAMIC_FIELD_HEIRLOOMS, item.first); - _owner->GetPlayer()->AddDynamicValue(PLAYER_DYNAMIC_FIELD_HEIRLOOM_FLAGS, item.second.flags); + _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOMS, item.first); + _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOM_FLAGS, item.second.flags); } } @@ -213,8 +213,8 @@ void CollectionMgr::AddHeirloom(uint32 itemId, uint32 flags) { if (UpdateAccountHeirlooms(itemId, flags)) { - _owner->GetPlayer()->AddDynamicValue(PLAYER_DYNAMIC_FIELD_HEIRLOOMS, itemId); - _owner->GetPlayer()->AddDynamicValue(PLAYER_DYNAMIC_FIELD_HEIRLOOM_FLAGS, flags); + _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOMS, itemId); + _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOM_FLAGS, flags); } } @@ -255,10 +255,10 @@ void CollectionMgr::UpgradeHeirloom(uint32 itemId, int32 castItem) item->AddBonuses(bonusId); // Get heirloom offset to update only one part of dynamic field - std::vector<uint32> const& fields = player->GetDynamicValues(PLAYER_DYNAMIC_FIELD_HEIRLOOMS); + std::vector<uint32> const& fields = player->GetDynamicValues(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOMS); uint16 offset = uint16(std::find(fields.begin(), fields.end(), itemId) - fields.begin()); - player->SetDynamicValue(PLAYER_DYNAMIC_FIELD_HEIRLOOM_FLAGS, offset, flags); + player->SetDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOM_FLAGS, offset, flags); itr->second.flags = flags; itr->second.bonusId = bonusId; } @@ -295,11 +295,11 @@ void CollectionMgr::CheckHeirloomUpgrades(Item* item) if (newItemId) { - std::vector<uint32> const& fields = player->GetDynamicValues(PLAYER_DYNAMIC_FIELD_HEIRLOOMS); + std::vector<uint32> const& fields = player->GetDynamicValues(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOMS); uint16 offset = uint16(std::find(fields.begin(), fields.end(), itr->first) - fields.begin()); - player->SetDynamicValue(PLAYER_DYNAMIC_FIELD_HEIRLOOMS, offset, newItemId); - player->SetDynamicValue(PLAYER_DYNAMIC_FIELD_HEIRLOOM_FLAGS, offset, 0); + player->SetDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOMS, offset, newItemId); + player->SetDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOM_FLAGS, offset, 0); _heirlooms.erase(itr); _heirlooms[newItemId] = 0; @@ -460,11 +460,11 @@ void CollectionMgr::LoadItemAppearances() { boost::to_block_range(*_appearances, DynamicBitsetBlockOutputIterator([this](uint32 blockValue) { - _owner->GetPlayer()->AddDynamicValue(PLAYER_DYNAMIC_FIELD_TRANSMOG, blockValue); + _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_TRANSMOG, blockValue); })); for (auto itr = _temporaryAppearances.begin(); itr != _temporaryAppearances.end(); ++itr) - _owner->GetPlayer()->AddDynamicValue(PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG, itr->first); + _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG, itr->first); } void CollectionMgr::LoadAccountItemAppearances(PreparedQueryResult knownAppearances, PreparedQueryResult favoriteAppearances) @@ -738,18 +738,18 @@ void CollectionMgr::AddItemAppearance(ItemModifiedAppearanceEntry const* itemMod _appearances->resize(itemModifiedAppearance->ID + 1); numBlocks = _appearances->num_blocks() - numBlocks; while (numBlocks--) - _owner->GetPlayer()->AddDynamicValue(PLAYER_DYNAMIC_FIELD_TRANSMOG, 0); + _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_TRANSMOG, 0); } _appearances->set(itemModifiedAppearance->ID); uint32 blockIndex = itemModifiedAppearance->ID / 32; uint32 bitIndex = itemModifiedAppearance->ID % 32; - uint32 currentMask = _owner->GetPlayer()->GetDynamicValue(PLAYER_DYNAMIC_FIELD_TRANSMOG, blockIndex); - _owner->GetPlayer()->SetDynamicValue(PLAYER_DYNAMIC_FIELD_TRANSMOG, blockIndex, currentMask | (1 << bitIndex)); + uint32 currentMask = _owner->GetPlayer()->GetDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_TRANSMOG, blockIndex); + _owner->GetPlayer()->SetDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_TRANSMOG, blockIndex, currentMask | (1 << bitIndex)); auto temporaryAppearance = _temporaryAppearances.find(itemModifiedAppearance->ID); if (temporaryAppearance != _temporaryAppearances.end()) { - _owner->GetPlayer()->RemoveDynamicValue(PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG, itemModifiedAppearance->ID); + _owner->GetPlayer()->RemoveDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG, itemModifiedAppearance->ID); _temporaryAppearances.erase(temporaryAppearance); } @@ -770,7 +770,7 @@ void CollectionMgr::AddTemporaryAppearance(ObjectGuid const& itemGuid, ItemModif { std::unordered_set<ObjectGuid>& itemsWithAppearance = _temporaryAppearances[itemModifiedAppearance->ID]; if (itemsWithAppearance.empty()) - _owner->GetPlayer()->AddDynamicValue(PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG, itemModifiedAppearance->ID); + _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG, itemModifiedAppearance->ID); itemsWithAppearance.insert(itemGuid); } @@ -788,7 +788,7 @@ void CollectionMgr::RemoveTemporaryAppearance(Item* item) itr->second.erase(item->GetGUID()); if (itr->second.empty()) { - _owner->GetPlayer()->RemoveDynamicValue(PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG, itemModifiedAppearance->ID); + _owner->GetPlayer()->RemoveDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG, itemModifiedAppearance->ID); _temporaryAppearances.erase(itr); } } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 5ec2a72d2ad..f32bfb5d3e2 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -140,8 +140,8 @@ Player::Player(WorldSession* session) : Unit(true), m_sceneMgr(this) m_objectType |= TYPEMASK_PLAYER; m_objectTypeId = TYPEID_PLAYER; - m_valuesCount = PLAYER_END; - _dynamicValuesCount = PLAYER_DYNAMIC_END; + m_valuesCount = ACTIVE_PLAYER_END; + _dynamicValuesCount = ACTIVE_PLAYER_DYNAMIC_END; m_session = session; @@ -469,7 +469,7 @@ bool Player::Create(ObjectGuid::LowType guidlow, WorldPackets::Character::Charac SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_REGENERATE_POWER); SetFloatValue(UNIT_FIELD_HOVERHEIGHT, 1.0f); // default for players in 3.0.3 - SetInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX, uint32(-1)); // -1 is default value + SetInt32Value(ACTIVE_PLAYER_FIELD_WATCHED_FACTION_INDEX, uint32(-1)); // -1 is default value SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID, createInfo->Skin); SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID, createInfo->Face); @@ -478,23 +478,23 @@ bool Player::Create(ObjectGuid::LowType guidlow, WorldPackets::Character::Charac SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE, createInfo->FacialHairStyle); for (uint32 i = 0; i < PLAYER_CUSTOM_DISPLAY_SIZE; ++i) SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_CUSTOM_DISPLAY_OPTION + i, createInfo->CustomDisplay[i]); - SetUInt32Value(PLAYER_FIELD_REST_INFO + REST_STATE_XP, (GetSession()->IsARecruiter() || GetSession()->GetRecruiterId() != 0) ? REST_STATE_RAF_LINKED : REST_STATE_NOT_RAF_LINKED); - SetUInt32Value(PLAYER_FIELD_REST_INFO + REST_STATE_HONOR, REST_STATE_NOT_RAF_LINKED); + SetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + REST_STATE_XP, (GetSession()->IsARecruiter() || GetSession()->GetRecruiterId() != 0) ? REST_STATE_RAF_LINKED : REST_STATE_NOT_RAF_LINKED); + SetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + REST_STATE_HONOR, REST_STATE_NOT_RAF_LINKED); SetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER, createInfo->Sex); SetByteValue(PLAYER_BYTES_4, PLAYER_BYTES_4_OFFSET_ARENA_FACTION, 0); SetInventorySlotCount(INVENTORY_DEFAULT_SIZE); - SetGuidValue(OBJECT_FIELD_DATA, ObjectGuid::Empty); + SetGuidValue(UNIT_FIELD_GUILD_GUID, ObjectGuid::Empty); SetUInt32Value(PLAYER_GUILDRANK, 0); SetGuildLevel(0); SetUInt32Value(PLAYER_GUILD_TIMESTAMP, 0); for (int i = 0; i < KNOWN_TITLES_SIZE; ++i) - SetUInt64Value(PLAYER__FIELD_KNOWN_TITLES + i, 0); // 0=disabled + SetUInt64Value(ACTIVE_PLAYER_FIELD_KNOWN_TITLES + i, 0); // 0=disabled SetUInt32Value(PLAYER_CHOSEN_TITLE, 0); - SetUInt32Value(PLAYER_FIELD_KILLS, 0); - SetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS, 0); + SetUInt32Value(ACTIVE_PLAYER_FIELD_KILLS, 0); + SetUInt32Value(ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS, 0); // set starting level uint32 start_level = sWorld->getIntConfig(CONFIG_START_PLAYER_LEVEL); @@ -528,7 +528,7 @@ bool Player::Create(ObjectGuid::LowType guidlow, WorldPackets::Character::Charac InitRunes(); - SetUInt64Value(PLAYER_FIELD_COINAGE, sWorld->getIntConfig(CONFIG_START_PLAYER_MONEY)); + SetUInt64Value(ACTIVE_PLAYER_FIELD_COINAGE, sWorld->getIntConfig(CONFIG_START_PLAYER_MONEY)); SetCurrency(CURRENCY_TYPE_APEXIS_CRYSTALS, sWorld->getIntConfig(CONFIG_CURRENCY_START_APEXIS_CRYSTALS)); SetCurrency(CURRENCY_TYPE_JUSTICE_POINTS, sWorld->getIntConfig(CONFIG_CURRENCY_START_JUSTICE_POINTS)); @@ -536,7 +536,7 @@ bool Player::Create(ObjectGuid::LowType guidlow, WorldPackets::Character::Charac if (sWorld->getBoolConfig(CONFIG_START_ALL_EXPLORED)) { for (uint16 i=0; i<PLAYER_EXPLORED_ZONES_SIZE; i++) - SetFlag(PLAYER_EXPLORED_ZONES_1+i, 0xFFFFFFFF); + SetFlag(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+i, 0xFFFFFFFF); } //Reputations if "StartAllReputation" is enabled, -- @todo Fix this in a better way @@ -1404,7 +1404,7 @@ void Player::setDeathState(DeathState s) if (IsAlive() && !oldIsAlive) //clear aura case after resurrection by another way (spells will be applied before next death) - ClearDynamicValue(PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS); + ClearDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS); } void Player::ToggleAFK() @@ -2331,15 +2331,15 @@ void Player::RemoveFromGroup(Group* group, ObjectGuid guid, RemoveMethod method void Player::SetXP(uint32 xp) { - SetUInt32Value(PLAYER_XP, xp); + SetUInt32Value(ACTIVE_PLAYER_FIELD_XP, xp); int32 playerLevelDelta = 0; // If XP < 50%, player should see scaling creature with -1 level except for level max - if (getLevel() < MAX_LEVEL && xp < (GetUInt32Value(PLAYER_NEXT_LEVEL_XP) / 2)) + if (getLevel() < MAX_LEVEL && xp < (GetUInt32Value(ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP) / 2)) playerLevelDelta = -1; - SetInt32Value(PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA, playerLevelDelta); + SetInt32Value(ACTIVE_PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA, playerLevelDelta); } void Player::GiveXP(uint32 xp, Unit* victim, float group_rate) @@ -2382,8 +2382,8 @@ void Player::GiveXP(uint32 xp, Unit* victim, float group_rate) packet.ReferAFriendBonusType = recruitAFriend ? 1 : 0; GetSession()->SendPacket(packet.Write()); - uint32 curXP = GetUInt32Value(PLAYER_XP); - uint32 nextLvlXP = GetUInt32Value(PLAYER_NEXT_LEVEL_XP); + uint32 curXP = GetUInt32Value(ACTIVE_PLAYER_FIELD_XP); + uint32 nextLvlXP = GetUInt32Value(ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP); uint32 newXP = curXP + xp + bonus_xp; while (newXP >= nextLvlXP && level < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL)) @@ -2394,7 +2394,7 @@ void Player::GiveXP(uint32 xp, Unit* victim, float group_rate) GiveLevel(level + 1); level = getLevel(); - nextLvlXP = GetUInt32Value(PLAYER_NEXT_LEVEL_XP); + nextLvlXP = GetUInt32Value(ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP); } SetXP(newXP); @@ -2433,13 +2433,12 @@ void Player::GiveLevel(uint8 level) for (uint8 i = STAT_STRENGTH; i < MAX_STATS; ++i) packet.StatDelta[i] = int32(info.stats[i]) - GetCreateStat(Stats(i)); - uint32 const* rowLevels = (getClass() != CLASS_DEATH_KNIGHT) ? DefaultTalentRowLevels : DKTalentRowLevels; - - packet.Cp = std::find(rowLevels, rowLevels + MAX_TALENT_TIERS, level) != (rowLevels + MAX_TALENT_TIERS); + packet.NumNewTalents = DB2Manager::GetNumTalentsAtLevel(level, Classes(getClass())) - DB2Manager::GetNumTalentsAtLevel(oldLevel, Classes(getClass())); + packet.NumNewPvpTalentSlots = sDB2Manager.GetPvpTalentNumSlotsAtLevel(level, Classes(getClass())) - sDB2Manager.GetPvpTalentNumSlotsAtLevel(oldLevel, Classes(getClass())); GetSession()->SendPacket(packet.Write()); - SetUInt32Value(PLAYER_NEXT_LEVEL_XP, sObjectMgr->GetXPForLevel(level)); + SetUInt32Value(ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP, sObjectMgr->GetXPForLevel(level)); //update level, max level of skills m_Played_time[PLAYED_TIME_LEVEL] = 0; // Level Played Time reset @@ -2503,8 +2502,8 @@ void Player::GiveLevel(uint8 level) { ++m_grantableLevels; - if (!HasByteFlag(PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_RAF_GRANTABLE_LEVEL, 0x01)) - SetByteFlag(PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_RAF_GRANTABLE_LEVEL, 0x01); + if (!HasByteFlag(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_RAF_GRANTABLE_LEVEL, 0x01)) + SetByteFlag(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_RAF_GRANTABLE_LEVEL, 0x01); } } } @@ -2519,7 +2518,7 @@ void Player::InitTalentForLevel() if (level < MIN_SPECIALIZATION_LEVEL) ResetTalentSpecialization(); - uint32 talentTiers = CalculateTalentsTiers(); + uint32 talentTiers = DB2Manager::GetNumTalentsAtLevel(level, Classes(getClass())); if (level < 15) { // Remove all talent points @@ -2534,7 +2533,7 @@ void Player::InitTalentForLevel() RemoveTalent(talent); } - SetUInt32Value(PLAYER_FIELD_MAX_TALENT_TIERS, talentTiers); + SetUInt32Value(ACTIVE_PLAYER_FIELD_MAX_TALENT_TIERS, talentTiers); if (!GetSession()->PlayerLoading()) SendTalentsInfoData(); // update at client @@ -2551,8 +2550,8 @@ void Player::InitStatsForLevel(bool reapplyMods) PlayerLevelInfo info; sObjectMgr->GetPlayerLevelInfo(getRace(), getClass(), getLevel(), &info); - SetUInt32Value(PLAYER_FIELD_MAX_LEVEL, sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL)); - SetUInt32Value(PLAYER_NEXT_LEVEL_XP, sObjectMgr->GetXPForLevel(getLevel())); + SetUInt32Value(ACTIVE_PLAYER_FIELD_MAX_LEVEL, sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL)); + SetUInt32Value(ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP, sObjectMgr->GetXPForLevel(getLevel())); // reset before any aura state sources (health set/aura apply) SetUInt32Value(UNIT_FIELD_AURASTATE, 0); @@ -2582,26 +2581,26 @@ void Player::InitStatsForLevel(bool reapplyMods) //set create powers SetCreateMana(basemana); - SetArmor(int32(m_createStats[STAT_AGILITY]*2)); + SetArmor(int32(m_createStats[STAT_AGILITY]*2), 0); InitStatBuffMods(); //reset rating fields values - for (uint16 index = PLAYER_FIELD_COMBAT_RATING_1; index < PLAYER_FIELD_COMBAT_RATING_1 + MAX_COMBAT_RATING; ++index) - SetUInt32Value(index, 0); + for (uint16 index = 0; index < MAX_COMBAT_RATING; ++index) + SetUInt32Value(ACTIVE_PLAYER_FIELD_COMBAT_RATING + index, 0); - SetUInt32Value(PLAYER_FIELD_MOD_HEALING_DONE_POS, 0); - SetFloatValue(PLAYER_FIELD_MOD_HEALING_PCT, 1.0f); - SetFloatValue(PLAYER_FIELD_MOD_HEALING_DONE_PCT, 1.0f); - SetFloatValue(PLAYER_FIELD_MOD_PERIODIC_HEALING_DONE_PERCENT, 1.0f); + SetUInt32Value(ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_POS, 0); + SetFloatValue(ACTIVE_PLAYER_FIELD_MOD_HEALING_PCT, 1.0f); + SetFloatValue(ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_PCT, 1.0f); + SetFloatValue(ACTIVE_PLAYER_FIELD_MOD_PERIODIC_HEALING_DONE_PERCENT, 1.0f); for (uint8 i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i) { - SetInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + i, 0); - SetInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + i, 0); - SetFloatValue(PLAYER_FIELD_MOD_DAMAGE_DONE_PCT + i, 1.00f); + SetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + i, 0); + SetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + i, 0); + SetFloatValue(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT + i, 1.00f); } - SetFloatValue(PLAYER_FIELD_MOD_SPELL_POWER_PCT, 1.0f); + SetFloatValue(ACTIVE_PLAYER_FIELD_MOD_SPELL_POWER_PCT, 1.0f); //reset attack power, damage and attack speed fields for (uint8 i = BASE_ATTACK; i < MAX_ATTACK; ++i) @@ -2615,8 +2614,8 @@ void Player::InitStatsForLevel(bool reapplyMods) SetFloatValue(UNIT_FIELD_MAXRANGEDDAMAGE, 0.0f); for (uint16 i = 0; i < 3; ++i) { - SetFloatValue(PLAYER_FIELD_WEAPON_DMG_MULTIPLIERS + i, 1.0f); - SetFloatValue(PLAYER_FIELD_WEAPON_ATK_SPEED_MULTIPLIERS + i, 1.0f); + SetFloatValue(ACTIVE_PLAYER_FIELD_WEAPON_DMG_MULTIPLIERS + i, 1.0f); + SetFloatValue(ACTIVE_PLAYER_FIELD_WEAPON_ATK_SPEED_MULTIPLIERS + i, 1.0f); } SetInt32Value(UNIT_FIELD_ATTACK_POWER, 0); @@ -2625,44 +2624,42 @@ void Player::InitStatsForLevel(bool reapplyMods) SetFloatValue(UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER, 0.0f); // Base crit values (will be recalculated in UpdateAllStats() at loading and in _ApplyAllStatBonuses() at reset - SetFloatValue(PLAYER_CRIT_PERCENTAGE, 0.0f); - SetFloatValue(PLAYER_OFFHAND_CRIT_PERCENTAGE, 0.0f); - SetFloatValue(PLAYER_RANGED_CRIT_PERCENTAGE, 0.0f); + SetFloatValue(ACTIVE_PLAYER_FIELD_CRIT_PERCENTAGE, 0.0f); + SetFloatValue(ACTIVE_PLAYER_FIELD_OFFHAND_CRIT_PERCENTAGE, 0.0f); + SetFloatValue(ACTIVE_PLAYER_FIELD_RANGED_CRIT_PERCENTAGE, 0.0f); // Init spell schools (will be recalculated in UpdateAllStats() at loading and in _ApplyAllStatBonuses() at reset - SetFloatValue(PLAYER_SPELL_CRIT_PERCENTAGE1, 0.0f); + SetFloatValue(ACTIVE_PLAYER_FIELD_SPELL_CRIT_PERCENTAGE1, 0.0f); - SetFloatValue(PLAYER_PARRY_PERCENTAGE, 0.0f); - SetFloatValue(PLAYER_BLOCK_PERCENTAGE, 0.0f); + SetFloatValue(ACTIVE_PLAYER_FIELD_PARRY_PERCENTAGE, 0.0f); + SetFloatValue(ACTIVE_PLAYER_FIELD_BLOCK_PERCENTAGE, 0.0f); // Static 30% damage blocked - SetUInt32Value(PLAYER_SHIELD_BLOCK, 30); + SetUInt32Value(ACTIVE_PLAYER_FIELD_SHIELD_BLOCK, 30); // Dodge percentage - SetFloatValue(PLAYER_DODGE_PERCENTAGE, 0.0f); + SetFloatValue(ACTIVE_PLAYER_FIELD_DODGE_PERCENTAGE, 0.0f); // set armor (resistance 0) to original value (create_agility*2) - SetArmor(int32(m_createStats[STAT_AGILITY]*2)); - SetResistanceBuffMods(SPELL_SCHOOL_NORMAL, true, 0.0f); - SetResistanceBuffMods(SPELL_SCHOOL_NORMAL, false, 0.0f); + SetArmor(int32(m_createStats[STAT_AGILITY]*2), 0); + SetBonusResistanceMod(SPELL_SCHOOL_NORMAL, 0); // set other resistance to original value (0) for (uint8 i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i) { SetResistance(SpellSchools(i), 0); - SetResistanceBuffMods(SpellSchools(i), true, 0.0f); - SetResistanceBuffMods(SpellSchools(i), false, 0.0f); + SetBonusResistanceMod(SpellSchools(i), 0); } - SetUInt32Value(PLAYER_FIELD_MOD_TARGET_RESISTANCE, 0); - SetUInt32Value(PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE, 0); + SetUInt32Value(ACTIVE_PLAYER_FIELD_MOD_TARGET_RESISTANCE, 0); + SetUInt32Value(ACTIVE_PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE, 0); for (uint8 i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i) { SetUInt32Value(UNIT_FIELD_POWER_COST_MODIFIER + i, 0); SetFloatValue(UNIT_FIELD_POWER_COST_MULTIPLIER + i, 0.0f); } // Reset no reagent cost field - for (uint8 i = 0; i < 3; ++i) - SetUInt32Value(PLAYER_NO_REAGENT_COST_1 + i, 0); + for (uint8 i = 0; i < 4; ++i) + SetUInt32Value(ACTIVE_PLAYER_FIELD_NO_REAGENT_COST + i, 0); // Init data for form but skip reapply item mods for form InitDataForForm(reapplyMods); @@ -2694,9 +2691,9 @@ void Player::InitStatsForLevel(bool reapplyMods) RemoveByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_FFA_PVP | UNIT_BYTE2_FLAG_SANCTUARY); // restore if need some important flags - SetByteValue(PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_IGNORE_POWER_REGEN_PREDICTION_MASK, 0); - SetByteValue(PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_AURA_VISION, 0); - SetByteValue(PLAYER_FIELD_BYTES2, 3, 0); + SetByteValue(ACTIVE_PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_IGNORE_POWER_REGEN_PREDICTION_MASK, 0); + SetByteValue(ACTIVE_PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_AURA_VISION, 0); + SetByteValue(ACTIVE_PLAYER_FIELD_BYTES2, 3, 0); if (reapplyMods) // reapply stats values only on .reset stats (level) command _ApplyAllStatBonuses(); @@ -3579,9 +3576,6 @@ void Player::ResetPvpTalents() if (!talentInfo) continue; - if (talentInfo->ClassID && talentInfo->ClassID != getClass()) - continue; - RemovePvpTalent(talentInfo); } @@ -4316,7 +4310,7 @@ void Player::KillPlayer() //SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_IN_PVP); SetUInt32Value(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_NONE); - ApplyModFlag(PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_RELEASE_TIMER, !sMapStore.LookupEntry(GetMapId())->Instanceable() && !HasAuraType(SPELL_AURA_PREVENT_RESURRECTION)); + ApplyModFlag(ACTIVE_PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_RELEASE_TIMER, !sMapStore.LookupEntry(GetMapId())->Instanceable() && !HasAuraType(SPELL_AURA_PREVENT_RESURRECTION)); // 6 minutes until repop at graveyard m_deathTimer = 6 * MINUTE * IN_MILLISECONDS; @@ -5011,7 +5005,7 @@ float Player::GetRatingMultiplier(CombatRating cr) const float Player::GetRatingBonusValue(CombatRating cr) const { - float baseResult = float(GetUInt32Value(PLAYER_FIELD_COMBAT_RATING_1 + cr)) * GetRatingMultiplier(cr); + float baseResult = float(GetUInt32Value(ACTIVE_PLAYER_FIELD_COMBAT_RATING + cr)) * GetRatingMultiplier(cr); if (cr != CR_RESILIENCE_PLAYER_DAMAGE) return baseResult; return float(1.0f - pow(0.99f, baseResult)) * 100.0f; @@ -5023,9 +5017,9 @@ float Player::GetExpertiseDodgeOrParryReduction(WeaponAttackType attType) const switch (attType) { case BASE_ATTACK: - return baseExpertise + GetUInt32Value(PLAYER_EXPERTISE) / 4.0f; + return baseExpertise + GetUInt32Value(ACTIVE_PLAYER_FIELD_EXPERTISE) / 4.0f; case OFF_ATTACK: - return baseExpertise + GetUInt32Value(PLAYER_OFFHAND_EXPERTISE) / 4.0f; + return baseExpertise + GetUInt32Value(ACTIVE_PLAYER_FIELD_OFFHAND_EXPERTISE) / 4.0f; default: break; } @@ -5056,8 +5050,8 @@ void Player::UpdateRating(CombatRating cr) if (amount < 0) amount = 0; - uint32 oldRating = GetUInt32Value(PLAYER_FIELD_COMBAT_RATING_1 + cr); - SetUInt32Value(PLAYER_FIELD_COMBAT_RATING_1 + cr, uint32(amount)); + uint32 oldRating = GetUInt32Value(ACTIVE_PLAYER_FIELD_COMBAT_RATING + cr); + SetUInt32Value(ACTIVE_PLAYER_FIELD_COMBAT_RATING + cr, uint32(amount)); bool affectStats = CanModifyStats(); @@ -5192,43 +5186,6 @@ void Player::SetRegularAttackTime() } } -//skill+step, checking for max value -bool Player::UpdateSkill(uint32 skill_id, uint32 step) -{ - if (!skill_id) - return false; - - SkillStatusMap::iterator itr = mSkillStatus.find(skill_id); - if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED) - return false; - - uint16 field = itr->second.pos / 2; - uint8 offset = itr->second.pos & 1; // itr->second.pos % 2 - - uint16 value = GetUInt16Value(PLAYER_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset); - uint16 max = GetUInt16Value(PLAYER_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset); - - if (!max || !value || value >= max) - return false; - - if (value < max) - { - uint32 new_value = value + step; - if (new_value > max) - new_value = max; - - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, new_value); - if (itr->second.uState != SKILL_NEW) - itr->second.uState = SKILL_CHANGED; - - UpdateSkillEnchantments(skill_id, value, new_value); - UpdateCriteria(CRITERIA_TYPE_REACH_SKILL_LEVEL, skill_id); - return true; - } - - return false; -} - inline int SkillGainChance(uint32 SkillValue, uint32 GrayLevel, uint32 GreenLevel, uint32 YellowLevel) { if (SkillValue >= GrayLevel) @@ -5249,21 +5206,21 @@ bool Player::UpdateCraftSkill(uint32 spellid) for (SkillLineAbilityMap::const_iterator _spell_idx = bounds.first; _spell_idx != bounds.second; ++_spell_idx) { - if (_spell_idx->second->SkillLine) + if (_spell_idx->second->SkillupSkillLineID) { - uint32 SkillValue = GetPureSkillValue(_spell_idx->second->SkillLine); + uint32 SkillValue = GetPureSkillValue(_spell_idx->second->SkillupSkillLineID); // Alchemy Discoveries here SpellInfo const* spellEntry = sSpellMgr->GetSpellInfo(spellid); if (spellEntry && spellEntry->Mechanic == MECHANIC_DISCOVERY) { - if (uint32 discoveredSpell = GetSkillDiscoverySpell(_spell_idx->second->SkillLine, spellid, this)) + if (uint32 discoveredSpell = GetSkillDiscoverySpell(_spell_idx->second->SkillupSkillLineID, spellid, this)) LearnSpell(discoveredSpell, false); } uint32 craft_skill_gain = _spell_idx->second->NumSkillUps * sWorld->getIntConfig(CONFIG_SKILL_GAIN_CRAFTING); - return UpdateSkillPro(_spell_idx->second->SkillLine, SkillGainChance(SkillValue, + return UpdateSkillPro(_spell_idx->second->SkillupSkillLineID, SkillGainChance(SkillValue, _spell_idx->second->TrivialSkillLineRankHigh, (_spell_idx->second->TrivialSkillLineRankHigh + _spell_idx->second->TrivialSkillLineRankLow)/2, _spell_idx->second->TrivialSkillLineRankLow), @@ -5284,15 +5241,39 @@ bool Player::UpdateGatherSkill(uint32 SkillId, uint32 SkillValue, uint32 RedLeve switch (SkillId) { case SKILL_HERBALISM: + case SKILL_HERBALISM_2: + case SKILL_OUTLAND_HERBALISM: + case SKILL_NORTHREND_HERBALISM: + case SKILL_CATACLYSM_HERBALISM: + case SKILL_PANDARIA_HERBALISM: + case SKILL_DRAENOR_HERBALISM: + case SKILL_LEGION_HERBALISM: + case SKILL_KUL_TIRAN_HERBALISM: case SKILL_JEWELCRAFTING: case SKILL_INSCRIPTION: return UpdateSkillPro(SkillId, SkillGainChance(SkillValue, RedLevel+100, RedLevel+50, RedLevel+25)*Multiplicator, gathering_skill_gain); case SKILL_SKINNING: + case SKILL_SKINNING_2: + case SKILL_OUTLAND_SKINNING: + case SKILL_NORTHREND_SKINNING: + case SKILL_CATACLYSM_SKINNING: + case SKILL_PANDARIA_SKINNING: + case SKILL_DRAENOR_SKINNING: + case SKILL_LEGION_SKINNING: + case SKILL_KUL_TIRAN_SKINNING: if (sWorld->getIntConfig(CONFIG_SKILL_CHANCE_SKINNING_STEPS) == 0) return UpdateSkillPro(SkillId, SkillGainChance(SkillValue, RedLevel+100, RedLevel+50, RedLevel+25)*Multiplicator, gathering_skill_gain); else return UpdateSkillPro(SkillId, (SkillGainChance(SkillValue, RedLevel+100, RedLevel+50, RedLevel+25)*Multiplicator) >> (SkillValue/sWorld->getIntConfig(CONFIG_SKILL_CHANCE_SKINNING_STEPS)), gathering_skill_gain); case SKILL_MINING: + case SKILL_MINING_2: + case SKILL_OUTLAND_MINING: + case SKILL_NORTHREND_MINING: + case SKILL_CATACLYSM_MINING: + case SKILL_PANDARIA_MINING: + case SKILL_DRAENOR_MINING: + case SKILL_LEGION_MINING: + case SKILL_KUL_TIRAN_MINING: if (sWorld->getIntConfig(CONFIG_SKILL_CHANCE_MINING_STEPS) == 0) return UpdateSkillPro(SkillId, SkillGainChance(SkillValue, RedLevel+100, RedLevel+50, RedLevel+25)*Multiplicator, gathering_skill_gain); else @@ -5341,8 +5322,7 @@ bool Player::UpdateSkillPro(uint16 skillId, int32 chance, uint32 step) // levels sync. with spell requirement for skill levels to learn // bonus abilities in sSkillLineAbilityStore // Used only to avoid scan DBC at each skill grow - static uint32 bonusSkillLevels[] = { 75, 150, 225, 300, 375, 450, 525 }; - static const size_t bonusSkillLevelsSize = sizeof(bonusSkillLevels) / sizeof(uint32); + uint32 const bonusSkillLevels[] = { 75, 150, 225, 300, 375, 450, 525, 600, 700, 850 }; TC_LOG_DEBUG("entities.player.skills", "Player::UpdateSkillPro: Player '%s' (%s), SkillID: %u, Chance: %3.1f%%)", GetName().c_str(), GetGUID().ToString().c_str(), skillId, chance / 10.0f); @@ -5363,8 +5343,8 @@ bool Player::UpdateSkillPro(uint16 skillId, int32 chance, uint32 step) uint16 field = itr->second.pos / 2; uint8 offset = itr->second.pos & 1; // itr->second.pos % 2 - uint16 value = GetUInt16Value(PLAYER_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset); - uint16 max = GetUInt16Value(PLAYER_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset); + uint16 value = GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset); + uint16 max = GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset); if (!max || !value || value >= max) return false; @@ -5380,13 +5360,12 @@ bool Player::UpdateSkillPro(uint16 skillId, int32 chance, uint32 step) if (new_value > max) new_value = max; - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, new_value); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, new_value); if (itr->second.uState != SKILL_NEW) itr->second.uState = SKILL_CHANGED; - for (size_t i = 0; i < bonusSkillLevelsSize; ++i) + for (uint32 bsl : bonusSkillLevels) { - uint32 bsl = bonusSkillLevels[i]; if (value < bsl && new_value >= bsl) { LearnSkillRewardedSpells(skillId, new_value); @@ -5407,7 +5386,7 @@ void Player::ModifySkillBonus(uint32 skillid, int32 val, bool talent) if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED) return; - uint16 field = itr->second.pos / 2 + (talent ? PLAYER_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET : PLAYER_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET); + uint16 field = itr->second.pos / 2 + (talent ? ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET : ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET); uint8 offset = itr->second.pos & 1; // itr->second.pos % 2 uint16 bonus = GetUInt16Value(field, offset); @@ -5436,13 +5415,13 @@ void Player::UpdateSkillsForLevel() { if (!IsWeaponSkill(rcEntry->SkillID)) { - uint16 max = GetUInt16Value(PLAYER_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset); + uint16 max = GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset); /// update only level dependent max skill values if (max != 1) { - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, maxSkill); - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset, maxSkill); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, maxSkill); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset, maxSkill); if (itr->second.uState != SKILL_NEW) itr->second.uState = SKILL_CHANGED; } @@ -5450,7 +5429,7 @@ void Player::UpdateSkillsForLevel() } // Update level dependent skillline spells - LearnSkillRewardedSpells(rcEntry->SkillID, GetUInt16Value(PLAYER_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset)); + LearnSkillRewardedSpells(rcEntry->SkillID, GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset)); } } @@ -5475,11 +5454,11 @@ void Player::UpdateSkillsToMaxSkillsForLevel() uint16 field = itr->second.pos / 2; uint8 offset = itr->second.pos & 1; // itr->second.pos % 2 - uint16 max = GetUInt16Value(PLAYER_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset); + uint16 max = GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset); if (max > 1) { - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, max); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, max); if (itr->second.uState != SKILL_NEW) itr->second.uState = SKILL_CHANGED; @@ -5502,7 +5481,7 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal) { uint16 field = itr->second.pos / 2; uint8 offset = itr->second.pos & 1; // itr->second.pos % 2 - currVal = GetUInt16Value(PLAYER_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset); + currVal = GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset); if (newVal) { // if skill value is going down, update enchantments before setting the new value @@ -5510,10 +5489,10 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal) UpdateSkillEnchantments(id, currVal, newVal); // update step - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_STEP_OFFSET + field, offset, step); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_STEP_OFFSET + field, offset, step); // update value - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, newVal); - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset, maxVal); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, newVal); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset, maxVal); if (itr->second.uState != SKILL_NEW) itr->second.uState = SKILL_CHANGED; @@ -5531,12 +5510,12 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal) //remove enchantments needing this skill UpdateSkillEnchantments(id, currVal, 0); // clear skill fields - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_ID_OFFSET + field, offset, 0); - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_STEP_OFFSET + field, offset, 0); - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, 0); - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset, 0); - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET + field, offset, 0); - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset, 0); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_ID_OFFSET + field, offset, 0); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_STEP_OFFSET + field, offset, 0); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, 0); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset, 0); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET + field, offset, 0); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset, 0); // mark as deleted or simply remove from map if not saved yet if (itr->second.uState != SKILL_NEW) @@ -5545,16 +5524,19 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal) mSkillStatus.erase(itr); // remove all spells that related to this skill - for (uint32 j = 0; j < sSkillLineAbilityStore.GetNumRows(); ++j) - if (SkillLineAbilityEntry const* pAbility = sSkillLineAbilityStore.LookupEntry(j)) - if (pAbility->SkillLine == id) - RemoveSpell(sSpellMgr->GetFirstSpellInChain(pAbility->Spell)); + if (std::vector<SkillLineAbilityEntry const*> const* skillLineAbilities = sDB2Manager.GetSkillLineAbilitiesBySkill(id)) + for (SkillLineAbilityEntry const* skillLineAbility : *skillLineAbilities) + RemoveSpell(sSpellMgr->GetFirstSpellInChain(skillLineAbility->Spell)); + + for (SkillLineEntry const* childSkillLine : sSkillLineStore) + if (childSkillLine->ParentSkillLineID == id) + SetSkill(childSkillLine->ID, 0, 0, 0); // Clear profession lines - if (GetUInt32Value(PLAYER_PROFESSION_SKILL_LINE_1) == id) - SetUInt32Value(PLAYER_PROFESSION_SKILL_LINE_1, 0); - else if (GetUInt32Value(PLAYER_PROFESSION_SKILL_LINE_1 + 1) == id) - SetUInt32Value(PLAYER_PROFESSION_SKILL_LINE_1 + 1, 0); + if (GetUInt32Value(ACTIVE_PLAYER_FIELD_PROFESSION_SKILL_LINE) == id) + SetUInt32Value(ACTIVE_PLAYER_FIELD_PROFESSION_SKILL_LINE, 0); + else if (GetUInt32Value(ACTIVE_PLAYER_FIELD_PROFESSION_SKILL_LINE + 1) == id) + SetUInt32Value(ACTIVE_PLAYER_FIELD_PROFESSION_SKILL_LINE + 1, 0); } } else if (newVal) //add @@ -5565,7 +5547,7 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal) uint16 field = i / 2; uint8 offset = i & 1; // i % 2 - if (!GetUInt16Value(PLAYER_SKILL_LINEID + SKILL_ID_OFFSET + field, offset)) + if (!GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_ID_OFFSET + field, offset)) { SkillLineEntry const* skillEntry = sSkillLineStore.LookupEntry(id); if (!skillEntry) @@ -5575,18 +5557,30 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal) return; } - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_ID_OFFSET + field, offset, id); - if (skillEntry->CategoryID == SKILL_CATEGORY_PROFESSION) + if (skillEntry->ParentSkillLineID && skillEntry->ParentTierIndex > 0) { - if (!GetUInt32Value(PLAYER_PROFESSION_SKILL_LINE_1)) - SetUInt32Value(PLAYER_PROFESSION_SKILL_LINE_1, id); - else if (!GetUInt32Value(PLAYER_PROFESSION_SKILL_LINE_1 + 1)) - SetUInt32Value(PLAYER_PROFESSION_SKILL_LINE_1 + 1, id); + if (SkillRaceClassInfoEntry const* rcEntry = sDB2Manager.GetSkillRaceClassInfo(skillEntry->ParentSkillLineID, getRace(), getClass())) + { + if (SkillTiersEntry const* tier = sObjectMgr->GetSkillTier(rcEntry->SkillTierID)) + { + uint16 skillval = GetPureSkillValue(skillEntry->ParentSkillLineID); + SetSkill(skillEntry->ParentSkillLineID, skillEntry->ParentTierIndex, std::max<uint16>(skillval, 1), tier->Value[skillEntry->ParentTierIndex - 1]); + } + } + + if (skillEntry->CategoryID == SKILL_CATEGORY_PROFESSION) + { + int32 freeProfessionSlot = FindProfessionSlotFor(id); + if (freeProfessionSlot != -1) + SetUInt32Value(ACTIVE_PLAYER_FIELD_PROFESSION_SKILL_LINE + freeProfessionSlot, id); + } } - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_STEP_OFFSET + field, offset, step); - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, newVal); - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset, maxVal); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_ID_OFFSET + field, offset, id); + + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_STEP_OFFSET + field, offset, step); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, newVal); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset, maxVal); UpdateSkillEnchantments(id, currVal, newVal); UpdateCriteria(CRITERIA_TYPE_REACH_SKILL_LEVEL, id); @@ -5602,8 +5596,8 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal) mSkillStatus.insert(SkillStatusMap::value_type(id, SkillStatusData(i, SKILL_NEW))); // apply skill bonuses - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET + field, offset, 0); - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset, 0); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET + field, offset, 0); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset, 0); // temporary bonuses AuraEffectList const& mModSkill = GetAuraEffectsByType(SPELL_AURA_MOD_SKILL); for (AuraEffectList::const_iterator j = mModSkill.begin(); j != mModSkill.end(); ++j) @@ -5646,7 +5640,7 @@ uint16 Player::GetSkillStep(uint16 skill) const if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED) return 0; - return GetUInt16Value(PLAYER_SKILL_LINEID + SKILL_STEP_OFFSET + itr->second.pos / 2, itr->second.pos & 1); + return GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_STEP_OFFSET + itr->second.pos / 2, itr->second.pos & 1); } uint16 Player::GetSkillValue(uint32 skill) const @@ -5661,9 +5655,9 @@ uint16 Player::GetSkillValue(uint32 skill) const uint16 field = itr->second.pos / 2; uint8 offset = itr->second.pos & 1; - int32 result = int32(GetUInt16Value(PLAYER_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset)); - result += int32(GetUInt16Value(PLAYER_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET + field, offset)); - result += int32(GetUInt16Value(PLAYER_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset)); + int32 result = int32(GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset)); + result += int32(GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET + field, offset)); + result += int32(GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset)); return result < 0 ? 0 : result; } @@ -5679,9 +5673,9 @@ uint16 Player::GetMaxSkillValue(uint32 skill) const uint16 field = itr->second.pos / 2; uint8 offset = itr->second.pos & 1; - int32 result = int32(GetUInt16Value(PLAYER_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset)); - result += int32(GetUInt16Value(PLAYER_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET + field, offset)); - result += int32(GetUInt16Value(PLAYER_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset)); + int32 result = int32(GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset)); + result += int32(GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET + field, offset)); + result += int32(GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset)); return result < 0 ? 0 : result; } @@ -5697,7 +5691,7 @@ uint16 Player::GetPureMaxSkillValue(uint32 skill) const uint16 field = itr->second.pos / 2; uint8 offset = itr->second.pos & 1; - return GetUInt16Value(PLAYER_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset); + return GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset); } uint16 Player::GetBaseSkillValue(uint32 skill) const @@ -5712,8 +5706,8 @@ uint16 Player::GetBaseSkillValue(uint32 skill) const uint16 field = itr->second.pos / 2; uint8 offset = itr->second.pos & 1; - int32 result = int32(GetUInt16Value(PLAYER_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset)); - result += int32(GetUInt16Value(PLAYER_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset)); + int32 result = int32(GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset)); + result += int32(GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset)); return result < 0 ? 0 : result; } @@ -5729,7 +5723,7 @@ uint16 Player::GetPureSkillValue(uint32 skill) const uint16 field = itr->second.pos / 2; uint8 offset = itr->second.pos & 1; - return GetUInt16Value(PLAYER_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset); + return GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset); } int16 Player::GetSkillPermBonusValue(uint32 skill) const @@ -5744,7 +5738,7 @@ int16 Player::GetSkillPermBonusValue(uint32 skill) const uint16 field = itr->second.pos / 2; uint8 offset = itr->second.pos & 1; - return GetUInt16Value(PLAYER_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset); + return GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset); } int16 Player::GetSkillTempBonusValue(uint32 skill) const @@ -5759,7 +5753,7 @@ int16 Player::GetSkillTempBonusValue(uint32 skill) const uint16 field = itr->second.pos / 2; uint8 offset = itr->second.pos & 1; - return GetUInt16Value(PLAYER_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET + field, offset); + return GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET + field, offset); } void Player::SendActionButtons(uint32 state) const @@ -5993,11 +5987,11 @@ void Player::CheckAreaExploreAndOutdoor() } uint32 val = (uint32)(1 << (areaEntry->AreaBit % 32)); - uint32 currFields = GetUInt32Value(PLAYER_EXPLORED_ZONES_1 + offset); + uint32 currFields = GetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + offset); if (!(currFields & val)) { - SetUInt32Value(PLAYER_EXPLORED_ZONES_1 + offset, (uint32)(currFields | val)); + SetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + offset, (uint32)(currFields | val)); UpdateCriteria(CRITERIA_TYPE_EXPLORE_AREA); @@ -6272,14 +6266,14 @@ void Player::UpdateHonorFields() if (m_lastHonorUpdateTime >= yesterday) { // this is the first update today, reset today's contribution - uint16 killsToday = GetUInt16Value(PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS); - SetUInt16Value(PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS, 0); - SetUInt16Value(PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_YESTERDAY_KILLS, killsToday); + uint16 killsToday = GetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS); + SetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS, 0); + SetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_YESTERDAY_KILLS, killsToday); } else { // no honor/kills yesterday or today, reset - SetUInt32Value(PLAYER_FIELD_KILLS, 0); + SetUInt32Value(ACTIVE_PLAYER_FIELD_KILLS, 0); } } @@ -6363,9 +6357,9 @@ bool Player::RewardHonor(Unit* victim, uint32 groupsize, int32 honor, bool pvpto honor_f = std::ceil(Trinity::Honor::hk_honor_at_level_f(k_level) * (v_level - k_grey) / (k_level - k_grey)); // count the number of playerkills in one day - ApplyModUInt16Value(PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS, 1, true); + ApplyModUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS, 1, true); // and those in a lifetime - ApplyModUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS, 1, true); + ApplyModUInt32Value(ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS, 1, true); UpdateCriteria(CRITERIA_TYPE_EARN_HONORABLE_KILL); UpdateCriteria(CRITERIA_TYPE_HK_CLASS, victim->getClass()); UpdateCriteria(CRITERIA_TYPE_HK_RACE, victim->getRace()); @@ -6443,15 +6437,12 @@ bool Player::RewardHonor(Unit* victim, uint32 groupsize, int32 honor, bool pvpto return true; } -void Player::_InitHonorLevelOnLoadFromDB(uint32 honor, uint32 honorLevel, uint32 prestigeLevel) +void Player::_InitHonorLevelOnLoadFromDB(uint32 honor, uint32 honorLevel) { SetUInt32Value(PLAYER_FIELD_HONOR_LEVEL, honorLevel); - SetUInt32Value(PLAYER_FIELD_PRESTIGE, prestigeLevel); UpdateHonorNextLevel(); AddHonorXP(honor); - if (CanPrestige()) - Prestige(); } void Player::RewardPlayerWithRewardPack(uint32 rewardPackID) @@ -6480,12 +6471,12 @@ void Player::RewardPlayerWithRewardPack(RewardPackEntry const* rewardPackEntry) void Player::AddHonorXP(uint32 xp) { - uint32 currentHonorXP = GetUInt32Value(PLAYER_FIELD_HONOR); - uint32 nextHonorLevelXP = GetUInt32Value(PLAYER_FIELD_HONOR_NEXT_LEVEL); + uint32 currentHonorXP = GetUInt32Value(ACTIVE_PLAYER_FIELD_HONOR); + uint32 nextHonorLevelXP = GetUInt32Value(ACTIVE_PLAYER_FIELD_HONOR_NEXT_LEVEL); uint32 newHonorXP = currentHonorXP + xp; uint32 honorLevel = GetHonorLevel(); - if (xp < 1 || getLevel() < PLAYER_LEVEL_MIN_HONOR || IsMaxHonorLevelAndPrestige()) + if (xp < 1 || getLevel() < PLAYER_LEVEL_MIN_HONOR || IsMaxHonorLevel()) return; while (newHonorXP >= nextHonorLevelXP) @@ -6496,67 +6487,30 @@ void Player::AddHonorXP(uint32 xp) SetHonorLevel(honorLevel + 1); honorLevel = GetHonorLevel(); - nextHonorLevelXP = GetUInt32Value(PLAYER_FIELD_HONOR_NEXT_LEVEL); + nextHonorLevelXP = GetUInt32Value(ACTIVE_PLAYER_FIELD_HONOR_NEXT_LEVEL); } - SetUInt32Value(PLAYER_FIELD_HONOR, IsMaxHonorLevelAndPrestige() ? 0 : newHonorXP); + SetUInt32Value(ACTIVE_PLAYER_FIELD_HONOR, IsMaxHonorLevel() ? 0 : newHonorXP); } void Player::SetHonorLevel(uint8 level) { uint8 oldHonorLevel = GetHonorLevel(); - uint8 prestige = GetPrestigeLevel(); if (level == oldHonorLevel) return; - uint32 rewardPackID = sDB2Manager.GetRewardPackIDForPvpRewardByHonorLevelAndPrestige(level, prestige); - RewardPlayerWithRewardPack(rewardPackID); - SetUInt32Value(PLAYER_FIELD_HONOR_LEVEL, level); UpdateHonorNextLevel(); UpdateCriteria(CRITERIA_TYPE_HONOR_LEVEL_REACHED); - - // This code is here because no link was found between those items and this reward condition in the db2 files. - // Interesting CriteriaTree found: Tree ids: 51140, 51156 (criteria id 31773, modifier tree id 37759) - if (level == 50 && prestige == 1) - { - if (GetTeam() == ALLIANCE) - AddItem(138992, 1); - else - AddItem(138996, 1); - } - - if (CanPrestige()) - Prestige(); -} - -void Player::Prestige() -{ - SetUInt32Value(PLAYER_FIELD_PRESTIGE, GetPrestigeLevel() + 1); - SetUInt32Value(PLAYER_FIELD_HONOR_LEVEL, 1); - UpdateHonorNextLevel(); - - UpdateCriteria(CRITERIA_TYPE_PRESTIGE_REACHED); -} - -bool Player::CanPrestige() const -{ - if (GetSession()->GetExpansion() >= EXPANSION_LEGION && getLevel() >= PLAYER_LEVEL_MIN_HONOR && GetHonorLevel() >= PLAYER_MAX_HONOR_LEVEL && GetPrestigeLevel() < sDB2Manager.GetMaxPrestige()) - return true; - - return false; -} - -bool Player::IsMaxPrestige() const -{ - return GetPrestigeLevel() == sDB2Manager.GetMaxPrestige(); } void Player::UpdateHonorNextLevel() { - uint32 prestige = std::min(static_cast<uint32>(PRESTIGE_COLUMN_COUNT - 1), GetPrestigeLevel()); - SetUInt32Value(PLAYER_FIELD_HONOR_NEXT_LEVEL, sHonorLevelGameTable.GetRow(GetHonorLevel())->Prestige[prestige]); + // 5500 at honor level 1 + // no idea what between here + // 8800 at honor level ~14 (never goes above 8800) + SetUInt32Value(ACTIVE_PLAYER_FIELD_HONOR_NEXT_LEVEL, 8800); } void Player::_LoadCurrency(PreparedQueryResult result) @@ -6897,12 +6851,11 @@ uint32 Player::GetCurrencyTotalCap(CurrencyTypesEntry const* currency) const void Player::SetInGuild(ObjectGuid::LowType guildId) { if (guildId) - SetGuidValue(OBJECT_FIELD_DATA, ObjectGuid::Create<HighGuid::Guild>(guildId)); + SetGuidValue(UNIT_FIELD_GUILD_GUID, ObjectGuid::Create<HighGuid::Guild>(guildId)); else - SetGuidValue(OBJECT_FIELD_DATA, ObjectGuid::Empty); + SetGuidValue(UNIT_FIELD_GUILD_GUID, ObjectGuid::Empty); ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_GUILD_LEVEL_ENABLED, guildId != 0); - SetUInt16Value(OBJECT_FIELD_TYPE, 1, guildId != 0); } ObjectGuid::LowType Player::GetGuildIdFromDB(ObjectGuid guid) @@ -6927,7 +6880,7 @@ uint8 Player::GetRankFromDB(ObjectGuid guid) void Player::SetArenaTeamInfoField(uint8 slot, ArenaTeamInfoType type, uint32 value) { - SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (slot * ARENA_TEAM_END) + type, value); + SetUInt32Value(ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO + (slot * ARENA_TEAM_END) + type, value); } void Player::SetInArenaTeam(uint32 ArenaTeamId, uint8 slot, uint8 type) @@ -7516,6 +7469,9 @@ void Player::_ApplyItemBonuses(Item* item, uint8 slot, bool apply) case ITEM_MOD_MASTERY_RATING: ApplyRatingMod(CR_MASTERY, int32(val * combatRatingMultiplier), apply); break; + case ITEM_MOD_EXTRA_ARMOR: + HandleStatModifier(UNIT_MOD_ARMOR, TOTAL_VALUE, float(val), apply); + break; case ITEM_MOD_FIRE_RESISTANCE: HandleStatModifier(UNIT_MOD_RESISTANCE_FIRE, BASE_VALUE, float(val), apply); break; @@ -7597,29 +7553,7 @@ void Player::_ApplyItemBonuses(Item* item, uint8 slot, bool apply) } if (uint32 armor = item->GetArmor(this)) - { - UnitModifierType modType = TOTAL_VALUE; - if (proto->GetClass() == ITEM_CLASS_ARMOR) - { - switch (proto->GetSubClass()) - { - case ITEM_SUBCLASS_ARMOR_CLOTH: - case ITEM_SUBCLASS_ARMOR_LEATHER: - case ITEM_SUBCLASS_ARMOR_MAIL: - case ITEM_SUBCLASS_ARMOR_PLATE: - case ITEM_SUBCLASS_ARMOR_SHIELD: - modType = BASE_VALUE; - break; - } - } - - HandleStatModifier(UNIT_MOD_ARMOR, modType, float(armor), apply); - } - - /* - if (proto->GetArmorDamageModifier() > 0) - HandleStatModifier(UNIT_MOD_ARMOR, TOTAL_VALUE, float(proto->GetArmorDamageModifier()), apply); - */ + HandleStatModifier(UNIT_MOD_ARMOR, BASE_VALUE, float(armor), apply); WeaponAttackType attType = BASE_ATTACK; @@ -9989,7 +9923,7 @@ void Player::SetInventorySlotCount(uint8 slots) } } - SetByteValue(PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_NUM_BACKPACK_SLOTS, slots); + SetByteValue(ACTIVE_PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_NUM_BACKPACK_SLOTS, slots); } bool Player::HasItemCount(uint32 item, uint32 count, bool inBankAlso) const @@ -11883,7 +11817,7 @@ Item* Player::_StoreItem(uint16 pos, Item* pItem, uint32 count, bool clone, bool if (!pBag) { m_items[slot] = pItem; - SetGuidValue(PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), pItem->GetGUID()); + SetGuidValue(ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), pItem->GetGUID()); pItem->SetGuidValue(ITEM_FIELD_CONTAINED, GetGUID()); pItem->SetOwnerGUID(GetGUID()); @@ -12230,7 +12164,7 @@ void Player::VisualizeItem(uint8 slot, Item* pItem) GetName().c_str(), GetGUID().ToString().c_str(), slot, pItem->GetEntry()); m_items[slot] = pItem; - SetGuidValue(PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), pItem->GetGUID()); + SetGuidValue(ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), pItem->GetGUID()); pItem->SetGuidValue(ITEM_FIELD_CONTAINED, GetGUID()); pItem->SetOwnerGUID(GetGUID()); pItem->SetSlot(slot); @@ -12310,7 +12244,7 @@ void Player::RemoveItem(uint8 bag, uint8 slot, bool update) } m_items[slot] = nullptr; - SetGuidValue(PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), ObjectGuid::Empty); + SetGuidValue(ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), ObjectGuid::Empty); if (slot < EQUIPMENT_SLOT_END) { @@ -12412,7 +12346,7 @@ void Player::DestroyItem(uint8 bag, uint8 slot, bool update) if (bag == INVENTORY_SLOT_BAG_0) { - SetGuidValue(PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), ObjectGuid::Empty); + SetGuidValue(ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), ObjectGuid::Empty); // equipment and equipped bags can have applied bonuses if (slot < INVENTORY_SLOT_BAG_END) @@ -13381,7 +13315,7 @@ void Player::AddItemToBuyBackSlot(Item* pItem) // if current back slot non-empty search oldest or free if (m_items[slot]) { - uint32 oldest_time = GetUInt32Value(PLAYER_FIELD_BUYBACK_TIMESTAMP_1); + uint32 oldest_time = GetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP); uint32 oldest_slot = BUYBACK_SLOT_START; for (uint32 i = BUYBACK_SLOT_START+1; i < BUYBACK_SLOT_END; ++i) @@ -13393,7 +13327,7 @@ void Player::AddItemToBuyBackSlot(Item* pItem) break; } - uint32 i_time = GetUInt32Value(PLAYER_FIELD_BUYBACK_TIMESTAMP_1 + i - BUYBACK_SLOT_START); + uint32 i_time = GetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP + i - BUYBACK_SLOT_START); if (oldest_time > i_time) { @@ -13415,13 +13349,13 @@ void Player::AddItemToBuyBackSlot(Item* pItem) uint32 etime = uint32(base - m_logintime + (30 * 3600)); uint32 eslot = slot - BUYBACK_SLOT_START; - SetGuidValue(PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), pItem->GetGUID()); + SetGuidValue(ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), pItem->GetGUID()); if (ItemTemplate const* proto = pItem->GetTemplate()) - SetUInt32Value(PLAYER_FIELD_BUYBACK_PRICE_1 + eslot, proto->GetSellPrice() * pItem->GetCount()); + SetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_PRICE + eslot, proto->GetSellPrice() * pItem->GetCount()); else - SetUInt32Value(PLAYER_FIELD_BUYBACK_PRICE_1 + eslot, 0); + SetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_PRICE + eslot, 0); - SetUInt32Value(PLAYER_FIELD_BUYBACK_TIMESTAMP_1 + eslot, (uint32)etime); + SetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP + eslot, (uint32)etime); // move to next (for non filled list is move most optimized choice) if (m_currentBuybackSlot < BUYBACK_SLOT_END - 1) @@ -13455,9 +13389,9 @@ void Player::RemoveItemFromBuyBackSlot(uint32 slot, bool del) m_items[slot] = nullptr; uint32 eslot = slot - BUYBACK_SLOT_START; - SetGuidValue(PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), ObjectGuid::Empty); - SetUInt32Value(PLAYER_FIELD_BUYBACK_PRICE_1 + eslot, 0); - SetUInt32Value(PLAYER_FIELD_BUYBACK_TIMESTAMP_1 + eslot, 0); + SetGuidValue(ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), ObjectGuid::Empty); + SetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_PRICE + eslot, 0); + SetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP + eslot, 0); // if current backslot is filled set to now free slot if (m_items[m_currentBuybackSlot]) @@ -14648,6 +14582,38 @@ uint32 Player::GetDefaultGossipMenuForSource(WorldObject* source) /*** QUEST SYSTEM ***/ /*********************************************************/ +int32 Player::GetQuestMinLevel(Quest const* quest) const +{ + if (quest->GetQuestLevel() == -1 && quest->GetQuestScalingFactionGroup()) + { + ChrRacesEntry const* race = sChrRacesStore.AssertEntry(getRace()); + FactionTemplateEntry const* raceFaction = sFactionTemplateStore.LookupEntry(race->FactionID); + if (!raceFaction || raceFaction->FactionGroup != quest->GetQuestScalingFactionGroup()) + return quest->GetQuestMaxScalingLevel(); + } + + return quest->GetMinLevel(); +} + +int32 Player::GetQuestLevel(Quest const* quest) const +{ + if (!quest) + return 0; + + if (quest->GetQuestLevel() == -1) + { + int32 minLevel = GetQuestMinLevel(quest); + int32 maxLevel = quest->GetQuestMaxScalingLevel(); + int32 level = getLevel(); + if (level >= minLevel) + return std::min(level, maxLevel); + + return minLevel; + } + + return quest->GetQuestLevel(); +} + void Player::PrepareQuestMenu(ObjectGuid guid) { QuestRelationBounds objectQR; @@ -14815,7 +14781,7 @@ bool Player::CanSeeStartQuest(Quest const* quest) SatisfyQuestPrevChain(quest, false) && SatisfyQuestDay(quest, false) && SatisfyQuestWeek(quest, false) && SatisfyQuestMonth(quest, false) && SatisfyQuestSeasonal(quest, false)) { - return int32(getLevel() + sWorld->getIntConfig(CONFIG_QUEST_HIGH_LEVEL_HIDE_DIFF)) >= quest->GetMinLevel(); + return int32(getLevel() + sWorld->getIntConfig(CONFIG_QUEST_HIGH_LEVEL_HIDE_DIFF)) >= GetQuestMinLevel(quest); } return false; @@ -15241,7 +15207,7 @@ void Player::IncompleteQuest(uint32 quest_id) uint32 Player::GetQuestMoneyReward(Quest const* quest) const { - return quest->MoneyValue(getLevel()) * sWorld->getRate(RATE_MONEY_QUEST); + return quest->MoneyValue(this) * sWorld->getRate(RATE_MONEY_QUEST); } uint32 Player::GetQuestXPReward(Quest const* quest) @@ -15252,7 +15218,7 @@ uint32 Player::GetQuestXPReward(Quest const* quest) if (rewarded && !quest->IsDFQuest()) return 0; - uint32 XP = quest->XPValue(getLevel()) * sWorld->getRate(RATE_XP_QUEST); + uint32 XP = quest->XPValue(this) * sWorld->getRate(RATE_XP_QUEST); // handle SPELL_AURA_MOD_XP_QUEST_PCT auras Unit::AuraEffectList const& ModXPPctAuras = GetAuraEffectsByType(SPELL_AURA_MOD_XP_QUEST_PCT); @@ -15648,7 +15614,7 @@ bool Player::SatisfyQuestSkill(Quest const* qInfo, bool msg) const bool Player::SatisfyQuestLevel(Quest const* qInfo, bool msg) const { - if (getLevel() < qInfo->GetMinLevel()) + if (getLevel() < GetQuestMinLevel(qInfo)) { if (msg) { @@ -16039,7 +16005,7 @@ bool Player::SatisfyQuestDay(Quest const* qInfo, bool /*msg*/) const return true; } - std::vector<uint32> const& dailies = GetDynamicValues(PLAYER_DYNAMIC_FIELD_DAILY_QUESTS); + std::vector<uint32> const& dailies = GetDynamicValues(ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS); for (uint32 dailyQuestId : dailies) if (dailyQuestId == qInfo->GetQuestId()) return false; @@ -16473,7 +16439,7 @@ void Player::SetQuestCompletedBit(uint32 questBit, bool completed) if (fieldOffset >= QUESTS_COMPLETED_BITS_SIZE) return; - ApplyModFlag(PLAYER_FIELD_QUEST_COMPLETED + ((questBit - 1) >> 5), 1 << ((questBit - 1) & 31), completed); + ApplyModFlag(ACTIVE_PLAYER_FIELD_QUEST_COMPLETED + ((questBit - 1) >> 5), 1 << ((questBit - 1) & 31), completed); } void Player::AreaExploredOrEventHappens(uint32 questId) @@ -17377,7 +17343,7 @@ void Player::_LoadDeclinedNames(PreparedQueryResult result) void Player::_LoadArenaTeamInfo(PreparedQueryResult result) { // arenateamid, played_week, played_season, personal_rating - memset((void*)&m_uint32Values[PLAYER_FIELD_ARENA_TEAM_INFO_1_1], 0, sizeof(uint32) * MAX_ARENA_SLOT * ARENA_TEAM_END); + memset((void*)&m_uint32Values[ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO], 0, sizeof(uint32) * MAX_ARENA_SLOT * ARENA_TEAM_END); uint16 personalRatingCache[] = {0, 0, 0}; @@ -17664,8 +17630,8 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) SetUInt32Value(UNIT_FIELD_LEVEL, fields[6].GetUInt8()); SetXP(fields[7].GetUInt32()); - _LoadIntoDataField(fields[66].GetString(), PLAYER_EXPLORED_ZONES_1, PLAYER_EXPLORED_ZONES_SIZE); - _LoadIntoDataField(fields[67].GetString(), PLAYER__FIELD_KNOWN_TITLES, KNOWN_TITLES_SIZE * 2); + _LoadIntoDataField(fields[66].GetString(), ACTIVE_PLAYER_FIELD_EXPLORED_ZONES, PLAYER_EXPLORED_ZONES_SIZE); + _LoadIntoDataField(fields[67].GetString(), ACTIVE_PLAYER_FIELD_KNOWN_TITLES, KNOWN_TITLES_SIZE * 2); SetObjectScale(1.0f); SetFloatValue(UNIT_FIELD_HOVERHEIGHT, 1.0f); @@ -17697,7 +17663,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) SetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_INEBRIATION, fields[55].GetUInt8()); SetUInt32Value(PLAYER_FLAGS, fields[20].GetUInt32()); SetUInt32Value(PLAYER_FLAGS_EX, fields[21].GetUInt32()); - SetInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX, fields[54].GetUInt32()); + SetInt32Value(ACTIVE_PLAYER_FIELD_WATCHED_FACTION_INDEX, fields[54].GetUInt32()); if (!ValidateAppearance( fields[3].GetUInt8(), // race @@ -17715,7 +17681,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) } // set which actionbars the client has active - DO NOT REMOVE EVER AGAIN (can be changed though, if it does change fieldwise) - SetByteValue(PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES, fields[68].GetUInt8()); + SetByteValue(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES, fields[68].GetUInt8()); m_fishingSteps = fields[72].GetUInt8(); @@ -17724,7 +17690,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) // cleanup inventory related item value fields (it will be filled correctly in _LoadInventory) for (uint8 slot = EQUIPMENT_SLOT_START; slot < EQUIPMENT_SLOT_END; ++slot) { - SetGuidValue(PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), ObjectGuid::Empty); + SetGuidValue(ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), ObjectGuid::Empty); SetVisibleItemSlot(slot, nullptr); delete m_items[slot]; @@ -17781,9 +17747,9 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) } _LoadCurrency(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_CURRENCY)); - SetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS, fields[50].GetUInt32()); - SetUInt16Value(PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS, fields[51].GetUInt16()); - SetUInt16Value(PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_YESTERDAY_KILLS, fields[52].GetUInt16()); + SetUInt32Value(ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS, fields[50].GetUInt32()); + SetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS, fields[51].GetUInt16()); + SetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_YESTERDAY_KILLS, fields[52].GetUInt16()); _LoadBoundInstances(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_BOUND_INSTANCES)); _LoadInstanceTimeRestrictions(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_INSTANCE_LOCK_TIMES)); @@ -18113,14 +18079,14 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) SetGuidValue(UNIT_FIELD_CHARMEDBY, ObjectGuid::Empty); SetGuidValue(UNIT_FIELD_CHARM, ObjectGuid::Empty); SetGuidValue(UNIT_FIELD_SUMMON, ObjectGuid::Empty); - SetGuidValue(PLAYER_FARSIGHT, ObjectGuid::Empty); + SetGuidValue(ACTIVE_PLAYER_FIELD_FARSIGHT, ObjectGuid::Empty); SetCreatorGUID(ObjectGuid::Empty); RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FORCE_MOVEMENT); // reset some aura modifiers before aura apply - SetUInt32Value(PLAYER_TRACK_CREATURES, 0); - SetUInt32Value(PLAYER_TRACK_RESOURCES, 0); + SetUInt32Value(ACTIVE_PLAYER_FIELD_TRACK_CREATURES, 0); + SetUInt32Value(ACTIVE_PLAYER_FIELD_TRACK_RESOURCES, 0); // make sure the unit is considered out of combat for proper loading ClearInCombat(); @@ -18322,7 +18288,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_REFER_A_FRIEND); if (m_grantableLevels > 0) - SetByteValue(PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_RAF_GRANTABLE_LEVEL, 0x01); + SetByteValue(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_RAF_GRANTABLE_LEVEL, 0x01); _LoadDeclinedNames(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_DECLINED_NAMES)); @@ -18339,9 +18305,9 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_GARRISON_FOLLOWER_ABILITIES))) _garrison = std::move(garrison); - _InitHonorLevelOnLoadFromDB(fields[73].GetUInt32(), fields[74].GetUInt32(), fields[75].GetUInt32()); + _InitHonorLevelOnLoadFromDB(fields[73].GetUInt32(), fields[74].GetUInt32()); - _restMgr->LoadRestBonus(REST_TYPE_HONOR, PlayerRestState(fields[76].GetUInt8()), fields[77].GetFloat()); + _restMgr->LoadRestBonus(REST_TYPE_HONOR, PlayerRestState(fields[75].GetUInt8()), fields[76].GetFloat()); if (time_diff > 0) { //speed collect rest bonus in offline, in logout, far from tavern, city (section/in hour) @@ -18582,7 +18548,7 @@ void Player::LoadCorpse(PreparedQueryResult result) { Field* fields = result->Fetch(); _corpseLocation.WorldRelocate(fields[0].GetUInt16(), fields[1].GetFloat(), fields[2].GetFloat(), fields[3].GetFloat(), fields[4].GetFloat()); - ApplyModFlag(PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_RELEASE_TIMER, !sMapStore.LookupEntry(_corpseLocation.GetMapId())->Instanceable()); + ApplyModFlag(ACTIVE_PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_RELEASE_TIMER, !sMapStore.LookupEntry(_corpseLocation.GetMapId())->Instanceable()); } else ResurrectPlayer(0.5f); @@ -19307,7 +19273,7 @@ void Player::_LoadDailyQuestStatus(PreparedQueryResult result) if (!quest) continue; - AddDynamicValue(PLAYER_DYNAMIC_FIELD_DAILY_QUESTS, quest_id); + AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS, quest_id); if (uint32 questBit = sDB2Manager.GetQuestUniqueBitFlag(quest_id)) SetQuestCompletedBit(questBit, true); @@ -19703,7 +19669,7 @@ void Player::SendRaidInfo() { InstanceSave* save = itr->second.save; - WorldPackets::Instance::InstanceLockInfos lockInfos; + WorldPackets::Instance::InstanceLock lockInfos; lockInfos.InstanceID = save->GetInstanceId(); lockInfos.MapID = save->GetMapId(); @@ -19985,7 +19951,7 @@ void Player::SaveToDB(bool create /*=false*/) stmt->setUInt8(index++, getClass()); stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER)); // save gender from PLAYER_BYTES_3, UNIT_BYTES_0 changes with every transform effect stmt->setUInt8(index++, getLevel()); - stmt->setUInt32(index++, GetUInt32Value(PLAYER_XP)); + stmt->setUInt32(index++, GetUInt32Value(ACTIVE_PLAYER_FIELD_XP)); stmt->setUInt64(index++, GetMoney()); stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID)); stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID)); @@ -19996,7 +19962,7 @@ void Player::SaveToDB(bool create /*=false*/) stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_CUSTOM_DISPLAY_OPTION + i)); stmt->setUInt8(index++, GetInventorySlotCount()); stmt->setUInt8(index++, GetBankBagSlotCount()); - stmt->setUInt8(index++, uint8(GetUInt32Value(PLAYER_FIELD_REST_INFO + REST_STATE_XP))); + stmt->setUInt8(index++, uint8(GetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + REST_STATE_XP))); stmt->setUInt32(index++, GetUInt32Value(PLAYER_FLAGS)); stmt->setUInt32(index++, GetUInt32Value(PLAYER_FLAGS_EX)); stmt->setUInt16(index++, (uint16)GetMapId()); @@ -20041,11 +20007,11 @@ void Player::SaveToDB(bool create /*=false*/) ss << m_taxi.SaveTaxiDestinationsToString(); stmt->setString(index++, ss.str()); - stmt->setUInt32(index++, GetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS)); - stmt->setUInt16(index++, GetUInt16Value(PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS)); - stmt->setUInt16(index++, GetUInt16Value(PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_YESTERDAY_KILLS)); + stmt->setUInt32(index++, GetUInt32Value(ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS)); + stmt->setUInt16(index++, GetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS)); + stmt->setUInt16(index++, GetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_YESTERDAY_KILLS)); stmt->setUInt32(index++, GetUInt32Value(PLAYER_CHOSEN_TITLE)); - stmt->setUInt32(index++, GetUInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX)); + stmt->setUInt32(index++, GetUInt32Value(ACTIVE_PLAYER_FIELD_WATCHED_FACTION_INDEX)); stmt->setUInt8(index++, GetDrunkValue()); stmt->setUInt32(index++, GetHealth()); @@ -20071,7 +20037,7 @@ void Player::SaveToDB(bool create /*=false*/) ss.str(""); for (uint32 i = 0; i < PLAYER_EXPLORED_ZONES_SIZE; ++i) - ss << GetUInt32Value(PLAYER_EXPLORED_ZONES_1 + i) << ' '; + ss << GetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + i) << ' '; stmt->setString(index++, ss.str()); ss.str(""); @@ -20096,10 +20062,10 @@ void Player::SaveToDB(bool create /*=false*/) ss.str(""); for (uint32 i = 0; i < KNOWN_TITLES_SIZE * 2; ++i) - ss << GetUInt32Value(PLAYER__FIELD_KNOWN_TITLES + i) << ' '; + ss << GetUInt32Value(ACTIVE_PLAYER_FIELD_KNOWN_TITLES + i) << ' '; stmt->setString(index++, ss.str()); - stmt->setUInt8(index++, GetByteValue(PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES)); + stmt->setUInt8(index++, GetByteValue(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES)); stmt->setUInt32(index++, m_grantableLevels); stmt->setUInt32(index++, realm.Build); } @@ -20112,7 +20078,7 @@ void Player::SaveToDB(bool create /*=false*/) stmt->setUInt8(index++, getClass()); stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER)); // save gender from PLAYER_BYTES_3, UNIT_BYTES_0 changes with every transform effect stmt->setUInt8(index++, getLevel()); - stmt->setUInt32(index++, GetUInt32Value(PLAYER_XP)); + stmt->setUInt32(index++, GetUInt32Value(ACTIVE_PLAYER_FIELD_XP)); stmt->setUInt64(index++, GetMoney()); stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID)); stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID)); @@ -20123,7 +20089,7 @@ void Player::SaveToDB(bool create /*=false*/) stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_CUSTOM_DISPLAY_OPTION + i)); stmt->setUInt8(index++, GetInventorySlotCount()); stmt->setUInt8(index++, GetBankBagSlotCount()); - stmt->setUInt8(index++, uint8(GetUInt32Value(PLAYER_FIELD_REST_INFO + REST_STATE_XP))); + stmt->setUInt8(index++, uint8(GetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + REST_STATE_XP))); stmt->setUInt32(index++, GetUInt32Value(PLAYER_FLAGS)); stmt->setUInt32(index++, GetUInt32Value(PLAYER_FLAGS_EX)); @@ -20185,11 +20151,11 @@ void Player::SaveToDB(bool create /*=false*/) ss << m_taxi.SaveTaxiDestinationsToString(); stmt->setString(index++, ss.str()); - stmt->setUInt32(index++, GetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS)); - stmt->setUInt16(index++, GetUInt16Value(PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS)); - stmt->setUInt16(index++, GetUInt16Value(PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_YESTERDAY_KILLS)); + stmt->setUInt32(index++, GetUInt32Value(ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS)); + stmt->setUInt16(index++, GetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS)); + stmt->setUInt16(index++, GetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_YESTERDAY_KILLS)); stmt->setUInt32(index++, GetUInt32Value(PLAYER_CHOSEN_TITLE)); - stmt->setUInt32(index++, GetUInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX)); + stmt->setUInt32(index++, GetUInt32Value(ACTIVE_PLAYER_FIELD_WATCHED_FACTION_INDEX)); stmt->setUInt8(index++, GetDrunkValue()); stmt->setUInt32(index++, GetHealth()); @@ -20215,7 +20181,7 @@ void Player::SaveToDB(bool create /*=false*/) ss.str(""); for (uint32 i = 0; i < PLAYER_EXPLORED_ZONES_SIZE; ++i) - ss << GetUInt32Value(PLAYER_EXPLORED_ZONES_1 + i) << ' '; + ss << GetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + i) << ' '; stmt->setString(index++, ss.str()); ss.str(""); @@ -20240,17 +20206,16 @@ void Player::SaveToDB(bool create /*=false*/) ss.str(""); for (uint32 i = 0; i < KNOWN_TITLES_SIZE*2; ++i) - ss << GetUInt32Value(PLAYER__FIELD_KNOWN_TITLES + i) << ' '; + ss << GetUInt32Value(ACTIVE_PLAYER_FIELD_KNOWN_TITLES + i) << ' '; stmt->setString(index++, ss.str()); - stmt->setUInt8(index++, GetByteValue(PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES)); + stmt->setUInt8(index++, GetByteValue(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES)); stmt->setUInt32(index++, m_grantableLevels); stmt->setUInt8(index++, IsInWorld() && !GetSession()->PlayerLogout() ? 1 : 0); - stmt->setUInt32(index++, GetUInt32Value(PLAYER_FIELD_HONOR)); + stmt->setUInt32(index++, GetUInt32Value(ACTIVE_PLAYER_FIELD_HONOR)); stmt->setUInt32(index++, GetHonorLevel()); - stmt->setUInt32(index++, GetPrestigeLevel()); - stmt->setUInt8(index++, uint8(GetUInt32Value(PLAYER_FIELD_REST_INFO + REST_STATE_HONOR))); + stmt->setUInt8(index++, uint8(GetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + REST_STATE_HONOR))); stmt->setFloat(index++, finiteAlways(_restMgr->GetRestBonus(REST_TYPE_HONOR))); stmt->setUInt32(index++, realm.Build); @@ -20821,7 +20786,7 @@ void Player::_SaveDailyQuestStatus(SQLTransaction& trans) stmt->setUInt64(0, GetGUID().GetCounter()); trans->Append(stmt); - std::vector<uint32> const& dailies = GetDynamicValues(PLAYER_DYNAMIC_FIELD_DAILY_QUESTS); + std::vector<uint32> const& dailies = GetDynamicValues(ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS); for (uint32 questId : dailies) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_QUESTSTATUS_DAILY); @@ -20945,8 +20910,8 @@ void Player::_SaveSkills(SQLTransaction& trans) uint16 field = itr->second.pos / 2; uint8 offset = itr->second.pos & 1; - uint16 value = GetUInt16Value(PLAYER_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset); - uint16 max = GetUInt16Value(PLAYER_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset); + uint16 value = GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset); + uint16 max = GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset); switch (itr->second.uState) { @@ -21040,18 +21005,18 @@ void Player::_SaveStats(SQLTransaction& trans) const stmt->setUInt32(index++, GetStat(Stats(i))); for (int i = 0; i < MAX_SPELL_SCHOOL; ++i) - stmt->setUInt32(index++, GetResistance(SpellSchools(i))); - - stmt->setFloat(index++, GetFloatValue(PLAYER_BLOCK_PERCENTAGE)); - stmt->setFloat(index++, GetFloatValue(PLAYER_DODGE_PERCENTAGE)); - stmt->setFloat(index++, GetFloatValue(PLAYER_PARRY_PERCENTAGE)); - stmt->setFloat(index++, GetFloatValue(PLAYER_CRIT_PERCENTAGE)); - stmt->setFloat(index++, GetFloatValue(PLAYER_RANGED_CRIT_PERCENTAGE)); - stmt->setFloat(index++, GetFloatValue(PLAYER_SPELL_CRIT_PERCENTAGE1)); + stmt->setUInt32(index++, GetResistance(SpellSchools(i)) + GetBonusResistanceMod(SpellSchools(i))); + + stmt->setFloat(index++, GetFloatValue(ACTIVE_PLAYER_FIELD_BLOCK_PERCENTAGE)); + stmt->setFloat(index++, GetFloatValue(ACTIVE_PLAYER_FIELD_DODGE_PERCENTAGE)); + stmt->setFloat(index++, GetFloatValue(ACTIVE_PLAYER_FIELD_PARRY_PERCENTAGE)); + stmt->setFloat(index++, GetFloatValue(ACTIVE_PLAYER_FIELD_CRIT_PERCENTAGE)); + stmt->setFloat(index++, GetFloatValue(ACTIVE_PLAYER_FIELD_RANGED_CRIT_PERCENTAGE)); + stmt->setFloat(index++, GetFloatValue(ACTIVE_PLAYER_FIELD_SPELL_CRIT_PERCENTAGE1)); stmt->setUInt32(index++, GetUInt32Value(UNIT_FIELD_ATTACK_POWER)); stmt->setUInt32(index++, GetUInt32Value(UNIT_FIELD_RANGED_ATTACK_POWER)); stmt->setUInt32(index++, GetBaseSpellPowerBonus()); - stmt->setUInt32(index, GetUInt32Value(PLAYER_FIELD_COMBAT_RATING_1 + CR_RESILIENCE_PLAYER_DAMAGE)); + stmt->setUInt32(index, GetUInt32Value(ACTIVE_PLAYER_FIELD_COMBAT_RATING + CR_RESILIENCE_PLAYER_DAMAGE)); trans->Append(stmt); } @@ -21065,10 +21030,10 @@ void Player::outDebugValues() const TC_LOG_DEBUG("entities.unit", "AGILITY is: \t\t%f\t\tSTRENGTH is: \t\t%f", GetStat(STAT_AGILITY), GetStat(STAT_STRENGTH)); TC_LOG_DEBUG("entities.unit", "INTELLECT is: \t\t%f", GetStat(STAT_INTELLECT)); TC_LOG_DEBUG("entities.unit", "STAMINA is: \t\t%f", GetStat(STAT_STAMINA)); - TC_LOG_DEBUG("entities.unit", "Armor is: \t\t%u\t\tBlock is: \t\t%f", GetArmor(), GetFloatValue(PLAYER_BLOCK_PERCENTAGE)); - TC_LOG_DEBUG("entities.unit", "HolyRes is: \t\t%u\t\tFireRes is: \t\t%u", GetResistance(SPELL_SCHOOL_HOLY), GetResistance(SPELL_SCHOOL_FIRE)); - TC_LOG_DEBUG("entities.unit", "NatureRes is: \t\t%u\t\tFrostRes is: \t\t%u", GetResistance(SPELL_SCHOOL_NATURE), GetResistance(SPELL_SCHOOL_FROST)); - TC_LOG_DEBUG("entities.unit", "ShadowRes is: \t\t%u\t\tArcaneRes is: \t\t%u", GetResistance(SPELL_SCHOOL_SHADOW), GetResistance(SPELL_SCHOOL_ARCANE)); + TC_LOG_DEBUG("entities.unit", "Armor is: \t\t%u\t\tBlock is: \t\t%f", GetArmor(), GetFloatValue(ACTIVE_PLAYER_FIELD_BLOCK_PERCENTAGE)); + TC_LOG_DEBUG("entities.unit", "HolyRes is: \t\t%u\t\tFireRes is: \t\t%u", GetResistance(SPELL_SCHOOL_MASK_HOLY), GetResistance(SPELL_SCHOOL_MASK_FIRE)); + TC_LOG_DEBUG("entities.unit", "NatureRes is: \t\t%u\t\tFrostRes is: \t\t%u", GetResistance(SPELL_SCHOOL_MASK_NATURE), GetResistance(SPELL_SCHOOL_MASK_FROST)); + TC_LOG_DEBUG("entities.unit", "ShadowRes is: \t\t%u\t\tArcaneRes is: \t\t%u", GetResistance(SPELL_SCHOOL_MASK_SHADOW), GetResistance(SPELL_SCHOOL_MASK_ARCANE)); TC_LOG_DEBUG("entities.unit", "MIN_DAMAGE is: \t\t%f\tMAX_DAMAGE is: \t\t%f", GetFloatValue(UNIT_FIELD_MINDAMAGE), GetFloatValue(UNIT_FIELD_MAXDAMAGE)); TC_LOG_DEBUG("entities.unit", "MIN_OFFHAND_DAMAGE is: \t%f\tMAX_OFFHAND_DAMAGE is: \t%f", GetFloatValue(UNIT_FIELD_MINOFFHANDDAMAGE), GetFloatValue(UNIT_FIELD_MAXOFFHANDDAMAGE)); TC_LOG_DEBUG("entities.unit", "MIN_RANGED_DAMAGE is: \t%f\tMAX_RANGED_DAMAGE is: \t%f", GetFloatValue(UNIT_FIELD_MINRANGEDDAMAGE), GetFloatValue(UNIT_FIELD_MAXRANGEDDAMAGE)); @@ -22392,6 +22357,8 @@ void Player::InitDisplayIds() default: TC_LOG_ERROR("entities.player", "Player::InitDisplayIds: Player '%s' (%s) has invalid gender %u", GetName().c_str(), GetGUID().ToString().c_str(), gender); } + + SetUInt32Value(UNIT_FIELD_STATE_ANIM_ID, sAnimationDataStore.GetNumRows()); } inline bool Player::_StoreOrEquipNewItem(uint32 vendorslot, uint32 item, uint8 count, uint8 bag, uint8 slot, int64 price, ItemTemplate const* pProto, Creature* pVendor, VendorItem const* crItem, bool bStore) @@ -23303,7 +23270,7 @@ bool Player::CanAlwaysSee(WorldObject const* obj) const if (m_unitMovedByMe == obj) return true; - ObjectGuid guid = GetGuidValue(PLAYER_FARSIGHT); + ObjectGuid guid = GetGuidValue(ACTIVE_PLAYER_FIELD_FARSIGHT); if (!guid.IsEmpty()) if (obj->GetGUID() == guid) return true; @@ -23575,7 +23542,7 @@ bool Player::HasEnoughMoney(int64 amount) const void Player::SetMoney(uint64 value) { - SetUInt64Value(PLAYER_FIELD_COINAGE, value); + SetUInt64Value(ACTIVE_PLAYER_FIELD_COINAGE, value); MoneyChanged(value); UpdateCriteria(CRITERIA_TYPE_HIGHEST_GOLD_VALUE_OWNED); } @@ -24063,19 +24030,15 @@ void Player::LearnDefaultSkill(SkillRaceClassInfoEntry const* rcInfo) break; case SKILL_RANGE_RANK: { - uint16 rank = 1; - if (getClass() == CLASS_DEATH_KNIGHT && skillId == SKILL_FIRST_AID) - rank = 4; - SkillTiersEntry const* tier = sObjectMgr->GetSkillTier(rcInfo->SkillTierID); - uint16 maxValue = tier->Value[std::max<int32>(rank - 1, 0)]; + uint16 maxValue = tier->Value[0]; uint16 skillValue = 1; if (rcInfo->Flags & SKILL_FLAG_ALWAYS_MAX_VALUE) skillValue = maxValue; else if (getClass() == CLASS_DEATH_KNIGHT) skillValue = std::min(std::max(uint16(1), uint16((getLevel() - 1) * 5)), maxValue); - SetSkill(skillId, rank, skillValue, maxValue); + SetSkill(skillId, 1, skillValue, maxValue); break; } default: @@ -24154,12 +24117,12 @@ void Player::LearnSkillRewardedSpells(uint32 skillId, uint32 skillValue) { uint64 raceMask = getRaceMask(); uint32 classMask = getClassMask(); - for (uint32 j = 0; j < sSkillLineAbilityStore.GetNumRows(); ++j) - { - SkillLineAbilityEntry const* ability = sSkillLineAbilityStore.LookupEntry(j); - if (!ability || ability->SkillLine != int32(skillId)) - continue; + std::vector<SkillLineAbilityEntry const*> const* skillLineAbilities = sDB2Manager.GetSkillLineAbilitiesBySkill(skillId); + if (!skillLineAbilities) + return; + for (SkillLineAbilityEntry const* ability : *skillLineAbilities) + { SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(ability->Spell); if (!spellInfo) continue; @@ -24194,6 +24157,42 @@ void Player::LearnSkillRewardedSpells(uint32 skillId, uint32 skillValue) } } +int32 Player::FindProfessionSlotFor(uint32 skillId) const +{ + SkillLineEntry const* skillEntry = sSkillLineStore.LookupEntry(skillId); + if (!skillEntry) + return -1; + + uint32 constexpr professionSlots = 2; + uint32 const* professionsBegin = &m_uint32Values[ACTIVE_PLAYER_FIELD_PROFESSION_SKILL_LINE]; + uint32 const* professionsEnd = professionsBegin + professionSlots; + + // both free, return first slot + if (std::none_of(professionsBegin, professionsEnd, [](uint32 slot) { return slot != 0; })) + return 0; + + // when any slot is filled we need to check both - one of them might be earlier step of the same profession + auto sameProfessionSlot = std::find_if(professionsBegin, professionsEnd, [&](uint32 slot) + { + if (SkillLineEntry const* slotProfession = sSkillLineStore.LookupEntry(slot)) + if (slotProfession->ParentSkillLineID == skillEntry->ParentSkillLineID) + return true; + return false; + }); + + if (sameProfessionSlot != professionsEnd) + { + if (sSkillLineStore.AssertEntry(*sameProfessionSlot)->ParentTierIndex < skillEntry->ParentTierIndex) + return std::distance(professionsBegin, sameProfessionSlot); + + return -1; + } + + // if there is no same profession, find any free slot + auto freeSlot = std::find(professionsBegin, professionsEnd, 0u); + return freeSlot != professionsEnd ? std::distance(professionsBegin, freeSlot) : -1; +} + void Player::SendAurasForTarget(Unit* target) const { if (!target || target->GetVisibleAuras().empty()) // speedup things @@ -24222,7 +24221,7 @@ void Player::SetDailyQuestStatus(uint32 quest_id) { if (!qQuest->IsDFQuest()) { - AddDynamicValue(PLAYER_DYNAMIC_FIELD_DAILY_QUESTS, quest_id); + AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS, quest_id); m_lastDailyQuestTime = time(nullptr); // last daily quest time m_DailyQuestChanged = true; } @@ -24240,7 +24239,7 @@ bool Player::IsDailyQuestDone(uint32 quest_id) bool found = false; if (sObjectMgr->GetQuestTemplate(quest_id)) { - std::vector<uint32> const& dailies = GetDynamicValues(PLAYER_DYNAMIC_FIELD_DAILY_QUESTS); + std::vector<uint32> const& dailies = GetDynamicValues(ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS); for (uint32 dailyQuestId : dailies) { if (dailyQuestId == quest_id) @@ -24278,15 +24277,15 @@ void Player::SetMonthlyQuestStatus(uint32 quest_id) void Player::DailyReset() { - for (uint32 questId : GetDynamicValues(PLAYER_DYNAMIC_FIELD_DAILY_QUESTS)) + for (uint32 questId : GetDynamicValues(ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS)) if (uint32 questBit = sDB2Manager.GetQuestUniqueBitFlag(questId)) SetQuestCompletedBit(questBit, false); WorldPackets::Quest::DailyQuestsReset dailyQuestsReset; - dailyQuestsReset.Count = int32(GetDynamicValues(PLAYER_DYNAMIC_FIELD_DAILY_QUESTS).size()); + dailyQuestsReset.Count = int32(GetDynamicValues(ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS).size()); SendDirectMessage(dailyQuestsReset.Write()); - ClearDynamicValue(PLAYER_DYNAMIC_FIELD_DAILY_QUESTS); + ClearDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS); m_DFQuests.clear(); // Dungeon Finder Quests. @@ -24506,7 +24505,7 @@ Player* Player::GetTrader() const bool Player::IsSpellFitByClassAndRace(uint32 spell_id) const { - uint32 racemask = getRaceMask(); + uint64 racemask = getRaceMask(); uint32 classmask = getClassMask(); SkillLineAbilityMapBounds bounds = sSpellMgr->GetSkillLineAbilityMapBounds(spell_id); @@ -24801,10 +24800,10 @@ bool Player::CanNoReagentCast(SpellInfo const* spellInfo) const // Check no reagent use mask flag128 noReagentMask; - noReagentMask[0] = GetUInt32Value(PLAYER_NO_REAGENT_COST_1); - noReagentMask[1] = GetUInt32Value(PLAYER_NO_REAGENT_COST_1 + 1); - noReagentMask[2] = GetUInt32Value(PLAYER_NO_REAGENT_COST_1 + 2); - noReagentMask[3] = GetUInt32Value(PLAYER_NO_REAGENT_COST_1 + 3); + noReagentMask[0] = GetUInt32Value(ACTIVE_PLAYER_FIELD_NO_REAGENT_COST); + noReagentMask[1] = GetUInt32Value(ACTIVE_PLAYER_FIELD_NO_REAGENT_COST + 1); + noReagentMask[2] = GetUInt32Value(ACTIVE_PLAYER_FIELD_NO_REAGENT_COST + 2); + noReagentMask[3] = GetUInt32Value(ACTIVE_PLAYER_FIELD_NO_REAGENT_COST + 3); if (spellInfo->SpellFamilyFlags & noReagentMask) return true; @@ -24845,7 +24844,7 @@ void Player::RemoveItemDependentAurasAndCasts(Item* pItem) void Player::InitializeSelfResurrectionSpells() { - ClearDynamicValue(PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS); + ClearDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS); uint32 spells[3] = { }; @@ -24866,7 +24865,7 @@ void Player::InitializeSelfResurrectionSpells() for (uint32 selfResSpell : spells) if (selfResSpell) - AddDynamicValue(PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS, selfResSpell); + AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS, selfResSpell); } // Used in triggers for check "Only to targets that grant experience or honor" req @@ -25439,7 +25438,7 @@ void Player::SetViewpoint(WorldObject* target, bool apply) TC_LOG_DEBUG("maps", "Player::CreateViewpoint: Player '%s' (%s) creates seer (Entry: %u, TypeId: %u).", GetName().c_str(), GetGUID().ToString().c_str(), target->GetEntry(), target->GetTypeId()); - if (!AddGuidValue(PLAYER_FARSIGHT, target->GetGUID())) + if (!AddGuidValue(ACTIVE_PLAYER_FIELD_FARSIGHT, target->GetGUID())) { TC_LOG_FATAL("entities.player", "Player::CreateViewpoint: Player '%s' (%s) cannot add new viewpoint!", GetName().c_str(), GetGUID().ToString().c_str()); return; @@ -25456,7 +25455,7 @@ void Player::SetViewpoint(WorldObject* target, bool apply) { TC_LOG_DEBUG("maps", "Player::CreateViewpoint: Player %s removed seer", GetName().c_str()); - if (!RemoveGuidValue(PLAYER_FARSIGHT, target->GetGUID())) + if (!RemoveGuidValue(ACTIVE_PLAYER_FIELD_FARSIGHT, target->GetGUID())) { TC_LOG_FATAL("entities.player", "Player::CreateViewpoint: Player '%s' (%s) cannot remove current viewpoint!", GetName().c_str(), GetGUID().ToString().c_str()); return; @@ -25475,7 +25474,7 @@ void Player::SetViewpoint(WorldObject* target, bool apply) WorldObject* Player::GetViewpoint() const { - ObjectGuid guid = GetGuidValue(PLAYER_FARSIGHT); + ObjectGuid guid = GetGuidValue(ACTIVE_PLAYER_FIELD_FARSIGHT); if (!guid.IsEmpty()) return static_cast<WorldObject*>(ObjectAccessor::GetObjectByTypeMask(*this, guid, TYPEMASK_SEER)); return nullptr; @@ -25577,7 +25576,7 @@ bool Player::HasTitle(uint32 bitIndex) const uint32 fieldIndexOffset = bitIndex / 32; uint32 flag = 1 << (bitIndex % 32); - return HasFlag(PLAYER__FIELD_KNOWN_TITLES + fieldIndexOffset, flag); + return HasFlag(ACTIVE_PLAYER_FIELD_KNOWN_TITLES + fieldIndexOffset, flag); } bool Player::HasTitle(CharTitlesEntry const* title) const @@ -25592,17 +25591,17 @@ void Player::SetTitle(CharTitlesEntry const* title, bool lost) if (lost) { - if (!HasFlag(PLAYER__FIELD_KNOWN_TITLES + fieldIndexOffset, flag)) + if (!HasFlag(ACTIVE_PLAYER_FIELD_KNOWN_TITLES + fieldIndexOffset, flag)) return; - RemoveFlag(PLAYER__FIELD_KNOWN_TITLES + fieldIndexOffset, flag); + RemoveFlag(ACTIVE_PLAYER_FIELD_KNOWN_TITLES + fieldIndexOffset, flag); } else { - if (HasFlag(PLAYER__FIELD_KNOWN_TITLES + fieldIndexOffset, flag)) + if (HasFlag(ACTIVE_PLAYER_FIELD_KNOWN_TITLES + fieldIndexOffset, flag)) return; - SetFlag(PLAYER__FIELD_KNOWN_TITLES + fieldIndexOffset, flag); + SetFlag(ACTIVE_PLAYER_FIELD_KNOWN_TITLES + fieldIndexOffset, flag); } WorldPackets::Character::TitleEarned packet(lost ? SMSG_TITLE_LOST : SMSG_TITLE_EARNED); @@ -25834,7 +25833,6 @@ void Player::_LoadSkills(PreparedQueryResult result) // SetPQuery(PLAYER_LOGIN_QUERY_LOADSKILLS, "SELECT skill, value, max FROM character_skills WHERE guid = '%u'", GUID_LOPART(m_guid)); uint32 count = 0; - uint8 professionCount = 0; std::unordered_map<uint32, uint32> loadedSkillValues; if (result) { @@ -25888,7 +25886,7 @@ void Player::_LoadSkills(PreparedQueryResult result) uint16 field = count / 2; uint8 offset = count & 1; - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_ID_OFFSET + field, offset, skill); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_ID_OFFSET + field, offset, skill); uint16 step = 0; SkillLineEntry const* skillLine = sSkillLineStore.LookupEntry(rcEntry->SkillID); @@ -25901,16 +25899,20 @@ void Player::_LoadSkills(PreparedQueryResult result) { step = max / 75; - if (professionCount < 2) - SetUInt32Value(PLAYER_PROFESSION_SKILL_LINE_1 + professionCount++, skill); + if (skillLine->ParentSkillLineID && skillLine->ParentTierIndex) + { + int32 professionSlot = FindProfessionSlotFor(skill); + if (professionSlot != -1) + SetUInt32Value(ACTIVE_PLAYER_FIELD_PROFESSION_SKILL_LINE + professionSlot, skill); + } } } - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_STEP_OFFSET + field, offset, step); - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, value); - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset, max); - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET + field, offset, 0); - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset, 0); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_STEP_OFFSET + field, offset, step); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, value); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset, max); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET + field, offset, 0); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset, 0); mSkillStatus.insert(SkillStatusMap::value_type(skill, SkillStatusData(count, SKILL_UNCHANGED))); loadedSkillValues[skill] = value; @@ -25939,12 +25941,12 @@ void Player::_LoadSkills(PreparedQueryResult result) uint16 field = count / 2; uint8 offset = count & 1; - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_ID_OFFSET + field, offset, 0); - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_STEP_OFFSET + field, offset, 0); - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, 0); - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset, 0); - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET + field, offset, 0); - SetUInt16Value(PLAYER_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset, 0); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_ID_OFFSET + field, offset, 0); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_STEP_OFFSET + field, offset, 0); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, 0); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset, 0); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET + field, offset, 0); + SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset, 0); } } @@ -26151,7 +26153,7 @@ TalentLearnResult Player::LearnTalent(uint32 talentId, int32* spellOnCooldown) return TALENT_FAILED_UNKNOWN; // check if we have enough talent points - if (talentInfo->TierID >= GetUInt32Value(PLAYER_FIELD_MAX_TALENT_TIERS)) + if (talentInfo->TierID >= GetUInt32Value(ACTIVE_PLAYER_FIELD_MAX_TALENT_TIERS)) return TALENT_FAILED_UNKNOWN; // TODO: prevent changing talents that are on cooldown @@ -26243,62 +26245,59 @@ void Player::ResetTalentSpecialization() UpdateItemSetAuras(false); } -TalentLearnResult Player::LearnPvpTalent(uint32 talentID, int32* spellOnCooldown) +TalentLearnResult Player::LearnPvpTalent(uint32 talentID, uint8 slot, int32* spellOnCooldown) { + if (slot >= MAX_PVP_TALENT_SLOTS) + return TALENT_FAILED_UNKNOWN; + if (IsInCombat()) return TALENT_FAILED_AFFECTING_COMBAT; - if (getLevel() < PLAYER_LEVEL_MIN_HONOR) - return TALENT_FAILED_UNKNOWN; + if (isDead()) + return TALENT_FAILED_CANT_DO_THAT_RIGHT_NOW; PvpTalentEntry const* talentInfo = sPvpTalentStore.LookupEntry(talentID); if (!talentInfo) return TALENT_FAILED_UNKNOWN; - if (talentInfo->SpecID) - { - if (talentInfo->SpecID != GetInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID)) - return TALENT_FAILED_UNKNOWN; - } - else if (talentInfo->Role >= 0) - { - if (talentInfo->Role != sChrSpecializationStore.AssertEntry(GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID))->Role) - return TALENT_FAILED_UNKNOWN; - } + if (talentInfo->SpecID != GetInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID)) + return TALENT_FAILED_UNKNOWN; - // prevent learn talent for different class (cheating) - if (talentInfo->ClassID && talentInfo->ClassID != getClass()) + if (talentInfo->LevelRequired > getLevel()) + return TALENT_FAILED_UNKNOWN; + + if (sDB2Manager.GetRequiredLevelForPvpTalentSlot(slot, Classes(getClass())) > getLevel()) return TALENT_FAILED_UNKNOWN; - if (!GetPrestigeLevel()) - if (sDB2Manager.GetRequiredHonorLevelForPvpTalent(talentInfo) > GetHonorLevel()) + if (PvpTalentCategoryEntry const* talentCategory = sPvpTalentCategoryStore.LookupEntry(talentInfo->PvpTalentCategoryID)) + if (!(talentCategory->TalentSlotMask & (1 << slot))) return TALENT_FAILED_UNKNOWN; - // Check if player doesn't have any talent in current tier - for (uint32 c = 0; c < MAX_PVP_TALENT_COLUMNS; ++c) - { - for (PvpTalentEntry const* talent : sDB2Manager.GetPvpTalentsByPosition(getClass(), talentInfo->TierID, c)) - { - if (HasPvpTalent(talent->ID, GetActiveTalentGroup()) && !HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC)) - return TALENT_FAILED_REST_AREA; + // Check if player doesn't have this talent in other slot + if (HasPvpTalent(talentID, GetActiveTalentGroup())) + return TALENT_FAILED_UNKNOWN; - if (GetSpellHistory()->HasCooldown(talent->SpellID)) - { - *spellOnCooldown = talent->SpellID; - return TALENT_FAILED_CANT_REMOVE_TALENT; - } + if (PvpTalentEntry const* talent = sPvpTalentStore.LookupEntry(GetPvpTalentMap(GetActiveTalentGroup())[slot])) + { + if (!HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) && !HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_ALLOW_CHANGING_TALENTS)) + return TALENT_FAILED_REST_AREA; - RemovePvpTalent(talent); + if (GetSpellHistory()->HasCooldown(talent->SpellID)) + { + *spellOnCooldown = talent->SpellID; + return TALENT_FAILED_CANT_REMOVE_TALENT; } + + RemovePvpTalent(talent); } - if (!AddPvpTalent(talentInfo, GetActiveTalentGroup(), true)) + if (!AddPvpTalent(talentInfo, GetActiveTalentGroup(), slot)) return TALENT_FAILED_UNKNOWN; return TALENT_LEARN_OK; } -bool Player::AddPvpTalent(PvpTalentEntry const* talent, uint8 activeTalentGroup, bool learning) +bool Player::AddPvpTalent(PvpTalentEntry const* talent, uint8 activeTalentGroup, uint8 slot) { ASSERT(talent); SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(talent->SpellID); @@ -26321,11 +26320,7 @@ bool Player::AddPvpTalent(PvpTalentEntry const* talent, uint8 activeTalentGroup, if (talent->OverridesSpellID) AddOverrideSpell(talent->OverridesSpellID, talent->SpellID); - PlayerTalentMap::iterator itr = GetPvpTalentMap(activeTalentGroup)->find(talent->ID); - if (itr != GetPvpTalentMap(activeTalentGroup)->end()) - itr->second = PLAYERSPELL_UNCHANGED; - else - (*GetPvpTalentMap(activeTalentGroup))[talent->ID] = learning ? PLAYERSPELL_NEW : PLAYERSPELL_UNCHANGED; + GetPvpTalentMap(activeTalentGroup)[slot] = talent->ID; return true; } @@ -26343,28 +26338,29 @@ void Player::RemovePvpTalent(PvpTalentEntry const* talent) RemoveOverrideSpell(talent->OverridesSpellID, talent->SpellID); // if this talent rank can be found in the PlayerTalentMap, mark the talent as removed so it gets deleted - PlayerTalentMap::iterator plrPvpTalent = GetPvpTalentMap(GetActiveTalentGroup())->find(talent->ID); - if (plrPvpTalent != GetPvpTalentMap(GetActiveTalentGroup())->end()) - plrPvpTalent->second = PLAYERSPELL_REMOVED; + auto plrPvpTalent = std::find(GetPvpTalentMap(GetActiveTalentGroup()).begin(), GetPvpTalentMap(GetActiveTalentGroup()).end(), talent->ID); + if (plrPvpTalent != GetPvpTalentMap(GetActiveTalentGroup()).end()) + *plrPvpTalent = 0; } void Player::TogglePvpTalents(bool enable) { - PlayerTalentMap const* pvpTalents = GetPvpTalentMap(GetActiveTalentGroup()); - for (PlayerTalentMap::value_type const& v : *pvpTalents) + PlayerPvpTalentMap const& pvpTalents = GetPvpTalentMap(GetActiveTalentGroup()); + for (uint32 pvpTalentId : pvpTalents) { - PvpTalentEntry const* pvpTalentInfo = sPvpTalentStore.AssertEntry(v.first); - if (enable && v.second != PLAYERSPELL_REMOVED) - LearnSpell(pvpTalentInfo->SpellID, false); - else - RemoveSpell(pvpTalentInfo->SpellID, true); + if (PvpTalentEntry const* pvpTalentInfo = sPvpTalentStore.LookupEntry(pvpTalentId)) + { + if (enable) + LearnSpell(pvpTalentInfo->SpellID, false); + else + RemoveSpell(pvpTalentInfo->SpellID, true); + } } } bool Player::HasPvpTalent(uint32 talentID, uint8 activeTalentGroup) const { - PlayerTalentMap::const_iterator itr = GetPvpTalentMap(activeTalentGroup)->find(talentID); - return (itr != GetPvpTalentMap(activeTalentGroup)->end() && itr->second != PLAYERSPELL_REMOVED); + return std::find(GetPvpTalentMap(activeTalentGroup).begin(), GetPvpTalentMap(activeTalentGroup).end(), talentID) != GetPvpTalentMap(activeTalentGroup).end(); } void Player::EnablePvpRules(bool dueToCombat /*= false*/) @@ -26522,12 +26518,11 @@ void Player::SendTalentsInfoData() continue; PlayerTalentMap* talents = GetTalentMap(i); - PlayerTalentMap* pvpTalents = GetPvpTalentMap(i); + PlayerPvpTalentMap const& pvpTalents = GetPvpTalentMap(i); WorldPackets::Talent::TalentGroupInfo groupInfoPkt; groupInfoPkt.SpecID = spec->ID; groupInfoPkt.TalentIDs.reserve(talents->size()); - groupInfoPkt.PvPTalentIDs.reserve(pvpTalents->size()); for (PlayerTalentMap::const_iterator itr = talents->begin(); itr != talents->end(); ++itr) { @@ -26542,9 +26537,6 @@ void Player::SendTalentsInfoData() continue; } - if (talentInfo->ClassID != getClass()) - continue; - SpellInfo const* spellEntry = sSpellMgr->GetSpellInfo(talentInfo->SpellID); if (!spellEntry) { @@ -26556,22 +26548,19 @@ void Player::SendTalentsInfoData() groupInfoPkt.TalentIDs.push_back(uint16(itr->first)); } - for (PlayerTalentMap::const_iterator itr = pvpTalents->begin(); itr != pvpTalents->end(); ++itr) + for (std::size_t slot = 0; slot < MAX_PVP_TALENT_SLOTS; ++slot) { - if (itr->second == PLAYERSPELL_REMOVED) + if (!pvpTalents[slot]) continue; - PvpTalentEntry const* talentInfo = sPvpTalentStore.LookupEntry(itr->first); + PvpTalentEntry const* talentInfo = sPvpTalentStore.LookupEntry(pvpTalents[slot]); if (!talentInfo) { TC_LOG_ERROR("entities.player", "Player::SendTalentsInfoData: Player '%s' (%s) has unknown pvp talent id: %u", - GetName().c_str(), GetGUID().ToString().c_str(), itr->first); + GetName().c_str(), GetGUID().ToString().c_str(), pvpTalents[slot]); continue; } - if (talentInfo->ClassID && talentInfo->ClassID != getClass()) - continue; - SpellInfo const* spellEntry = sSpellMgr->GetSpellInfo(talentInfo->SpellID); if (!spellEntry) { @@ -26580,7 +26569,10 @@ void Player::SendTalentsInfoData() continue; } - groupInfoPkt.PvPTalentIDs.push_back(uint16(itr->first)); + groupInfoPkt.PvPTalents.emplace_back(); + WorldPackets::Talent::PvPTalent& pvpTalent = groupInfoPkt.PvPTalents.back(); + pvpTalent.PvPTalentID = pvpTalents[slot]; + pvpTalent.Slot = slot; } packet.Info.TalentGroups.push_back(groupInfoPkt); @@ -26859,12 +26851,13 @@ void Player::_LoadTalents(PreparedQueryResult result) void Player::_LoadPvpTalents(PreparedQueryResult result) { - // "SELECT TalentID, TalentGroup FROM character_pvp_talent WHERE guid = ?" + // "SELECT talentID0, talentID1, talentID2, talentID3, talentGroup FROM character_pvp_talent WHERE guid = ?" if (result) { do - if (PvpTalentEntry const* talent = sPvpTalentStore.LookupEntry((*result)[0].GetUInt32())) - AddPvpTalent(talent, (*result)[1].GetUInt8(), false); + for (uint8 slot = 0; slot < MAX_PVP_TALENT_SLOTS; ++slot) + if (PvpTalentEntry const* talent = sPvpTalentStore.LookupEntry((*result)[slot].GetUInt32())) + AddPvpTalent(talent, (*result)[4].GetUInt8(), slot); while (result->NextRow()); } } @@ -26875,11 +26868,10 @@ void Player::_SaveTalents(SQLTransaction& trans) stmt->setUInt64(0, GetGUID().GetCounter()); trans->Append(stmt); - PlayerTalentMap* talents; for (uint8 group = 0; group < MAX_SPECIALIZATIONS; ++group) { - talents = GetTalentMap(group); - for (PlayerTalentMap::iterator itr = talents->begin(); itr != talents->end();) + PlayerTalentMap* talents = GetTalentMap(group); + for (auto itr = talents->begin(); itr != talents->end();) { if (itr->second == PLAYERSPELL_REMOVED) { @@ -26902,22 +26894,15 @@ void Player::_SaveTalents(SQLTransaction& trans) for (uint8 group = 0; group < MAX_SPECIALIZATIONS; ++group) { - talents = GetPvpTalentMap(group); - for (PlayerTalentMap::iterator itr = talents->begin(); itr != talents->end();) - { - if (itr->second == PLAYERSPELL_REMOVED) - { - itr = talents->erase(itr); - continue; - } - - stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_PVP_TALENT); - stmt->setUInt64(0, GetGUID().GetCounter()); - stmt->setUInt32(1, itr->first); - stmt->setUInt8(2, group); - trans->Append(stmt); - ++itr; - } + PlayerPvpTalentMap const& talents = GetPvpTalentMap(group); + stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_PVP_TALENT); + stmt->setUInt64(0, GetGUID().GetCounter()); + stmt->setUInt32(1, talents[0]); + stmt->setUInt32(2, talents[1]); + stmt->setUInt32(3, talents[2]); + stmt->setUInt32(4, talents[3]); + stmt->setUInt8(5, group); + trans->Append(stmt); } } @@ -27001,15 +26986,6 @@ void Player::ActivateTalentGroup(ChrSpecializationEntry const* spec) if (!talentInfo) continue; - // unlearn only talents for character class - // some spell learned by one class as normal spells or know at creation but another class learn it as talent, - // to prevent unexpected lost normal learned spell skip another class talents - if (talentInfo->ClassID && talentInfo->ClassID != getClass()) - continue; - - if (talentInfo->SpellID == 0) - continue; - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(talentInfo->SpellID); if (!spellInfo) continue; @@ -27058,21 +27034,16 @@ void Player::ActivateTalentGroup(ChrSpecializationEntry const* spec) } } - for (uint32 pvpTalentID = 0; pvpTalentID < sTalentStore.GetNumRows(); ++pvpTalentID) + for (uint8 slot = 0; slot < MAX_PVP_TALENT_SLOTS; ++slot) { - PvpTalentEntry const* talentInfo = sPvpTalentStore.LookupEntry(pvpTalentID); + PvpTalentEntry const* talentInfo = sPvpTalentStore.LookupEntry(GetPvpTalentMap(GetActiveTalentGroup())[slot]); if (!talentInfo) continue; - // learn only talents for character class (or x-class talents) - if (talentInfo->ClassID && talentInfo->ClassID != getClass()) - continue; - if (!talentInfo->SpellID) continue; - if (HasPvpTalent(talentInfo->ID, GetActiveTalentGroup())) - AddPvpTalent(talentInfo, GetActiveTalentGroup(), true); + AddPvpTalent(talentInfo, GetActiveTalentGroup(), slot); } LearnSpecializationSpells(); @@ -27622,6 +27593,7 @@ void Player::SendPlayerChoice(ObjectGuid sender, int32 choiceId) displayPlayerChoice.Responses.resize(playerChoice->Responses.size()); displayPlayerChoice.CloseChoiceFrame = false; displayPlayerChoice.HideWarboardHeader = playerChoice->HideWarboardHeader; + displayPlayerChoice.KeepOpenAfterChoice = playerChoice->KeepOpenAfterChoice; for (std::size_t i = 0; i < playerChoice->Responses.size(); ++i) { @@ -27629,6 +27601,9 @@ void Player::SendPlayerChoice(ObjectGuid sender, int32 choiceId) WorldPackets::Quest::PlayerChoiceResponse& playerChoiceResponse = displayPlayerChoice.Responses[i]; playerChoiceResponse.ResponseID = playerChoiceResponseTemplate.ResponseId; playerChoiceResponse.ChoiceArtFileID = playerChoiceResponseTemplate.ChoiceArtFileId; + playerChoiceResponse.Flags = playerChoiceResponseTemplate.Flags; + playerChoiceResponse.WidgetSetID = playerChoiceResponseTemplate.WidgetSetID; + playerChoiceResponse.GroupID = playerChoiceResponseTemplate.GroupID; playerChoiceResponse.Answer = playerChoiceResponseTemplate.Answer; playerChoiceResponse.Header = playerChoiceResponseTemplate.Header; playerChoiceResponse.Description = playerChoiceResponseTemplate.Description; @@ -27953,29 +27928,6 @@ void Player::SendSupercededSpell(uint32 oldSpell, uint32 newSpell) const GetSession()->SendPacket(supercededSpells.Write()); } -uint32 Player::CalculateTalentsTiers() const -{ - uint32 const* rowLevels; - switch (getClass()) - { - case CLASS_DEATH_KNIGHT: - rowLevels = DKTalentRowLevels; - break; - case CLASS_DEMON_HUNTER: - rowLevels = DHTalentRowLevels; - break; - default: - rowLevels = DefaultTalentRowLevels; - break; - } - - for (uint32 i = MAX_TALENT_TIERS; i; --i) - if (getLevel() >= rowLevels[i - 1]) - return i; - - return 0; -} - Difficulty Player::GetDifficultyID(MapEntry const* mapEntry) const { if (!mapEntry->IsRaid()) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index eb12abc021c..391fbb34be3 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -101,16 +101,23 @@ namespace WorldPackets typedef std::deque<Mail*> PlayerMails; -#define PLAYER_MAX_SKILLS 128 -enum SkillFieldOffset +#define PLAYER_MAX_SKILLS 256 + +template<typename SkillArrayType> +constexpr std::size_t CalculateSkillFieldArraySize() { - SKILL_ID_OFFSET = 0, - SKILL_STEP_OFFSET = 64, - SKILL_RANK_OFFSET = SKILL_STEP_OFFSET + 64, - SUBSKILL_START_RANK_OFFSET = SKILL_RANK_OFFSET + 64, - SKILL_MAX_RANK_OFFSET = SUBSKILL_START_RANK_OFFSET + 64, - SKILL_TEMP_BONUS_OFFSET = SKILL_MAX_RANK_OFFSET + 64, - SKILL_PERM_BONUS_OFFSET = SKILL_TEMP_BONUS_OFFSET + 64 + return PLAYER_MAX_SKILLS / sizeof(uint32) * sizeof(SkillArrayType); +} + +enum SkillFieldOffset : uint16 +{ + SKILL_ID_OFFSET = 0, + SKILL_STEP_OFFSET = SKILL_ID_OFFSET + CalculateSkillFieldArraySize<uint16>(), + SKILL_RANK_OFFSET = SKILL_STEP_OFFSET + CalculateSkillFieldArraySize<uint16>(), + SUBSKILL_START_RANK_OFFSET = SKILL_RANK_OFFSET + CalculateSkillFieldArraySize<uint16>(), + SKILL_MAX_RANK_OFFSET = SUBSKILL_START_RANK_OFFSET + CalculateSkillFieldArraySize<uint16>(), + SKILL_TEMP_BONUS_OFFSET = SKILL_MAX_RANK_OFFSET + CalculateSkillFieldArraySize<uint16>(), + SKILL_PERM_BONUS_OFFSET = SKILL_TEMP_BONUS_OFFSET + CalculateSkillFieldArraySize<uint16>() }; #define PLAYER_EXPLORED_ZONES_SIZE 320 @@ -240,6 +247,7 @@ struct PlayerCurrency }; typedef std::unordered_map<uint32, PlayerSpellState> PlayerTalentMap; +typedef std::array<uint32, MAX_PVP_TALENT_SLOTS> PlayerPvpTalentMap; typedef std::unordered_map<uint32, PlayerSpell*> PlayerSpellMap; typedef std::unordered_set<SpellModifier*> SpellModContainer; typedef std::unordered_map<uint32, PlayerCurrency> PlayerCurrenciesMap; @@ -391,7 +399,7 @@ enum PlayerFlags PLAYER_FLAGS_GM = 0x00000008, PLAYER_FLAGS_GHOST = 0x00000010, PLAYER_FLAGS_RESTING = 0x00000020, - PLAYER_FLAGS_UNK6 = 0x00000040, + PLAYER_FLAGS_VOICE_CHAT = 0x00000040, PLAYER_FLAGS_UNK7 = 0x00000080, // pre-3.0.3 PLAYER_FLAGS_FFA_PVP flag for FFA PVP state PLAYER_FLAGS_CONTESTED_PVP = 0x00000100, // Player has been involved in a PvP combat and will be attacked by contested guards PLAYER_FLAGS_IN_PVP = 0x00000200, @@ -422,7 +430,8 @@ enum PlayerFlags enum PlayerFlagsEx { PLAYER_FLAGS_EX_REAGENT_BANK_UNLOCKED = 0x0001, - PLAYER_FLAGS_EX_MERCENARY_MODE = 0x0002 + PLAYER_FLAGS_EX_MERCENARY_MODE = 0x0002, + PLAYER_FLAGS_EX_ARTIFACT_FORGE_CHEAT = 0x0004 }; enum PlayerLocalFlags @@ -1001,10 +1010,6 @@ enum TalentLearnResult TALENT_FAILED_REST_AREA = 8 }; -static uint32 const DefaultTalentRowLevels[MAX_TALENT_TIERS] = { 15, 30, 45, 60, 75, 90, 100 }; -static uint32 const DKTalentRowLevels[MAX_TALENT_TIERS] = { 57, 58, 59, 60, 75, 90, 100 }; -static uint32 const DHTalentRowLevels[MAX_TALENT_TIERS] = { 99, 100, 102, 104, 106, 108, 110 }; - struct TC_GAME_API SpecializationInfo { SpecializationInfo() : ResetTalentsCost(0), ResetTalentsTime(0), PrimarySpecialization(0), ActiveGroup(0) @@ -1012,7 +1017,7 @@ struct TC_GAME_API SpecializationInfo } PlayerTalentMap Talents[MAX_SPECIALIZATIONS]; - PlayerTalentMap PvpTalents[MAX_SPECIALIZATIONS]; + PlayerPvpTalentMap PvpTalents[MAX_SPECIALIZATIONS]; std::vector<uint32> Glyphs[MAX_SPECIALIZATIONS]; uint32 ResetTalentsCost; time_t ResetTalentsTime; @@ -1033,7 +1038,7 @@ struct PlayerDynamicFieldSpellModByLabel }; #pragma pack(pop) -uint8 constexpr PLAYER_MAX_HONOR_LEVEL = 50; +uint32 constexpr PLAYER_MAX_HONOR_LEVEL = 500; uint8 constexpr PLAYER_LEVEL_MIN_HONOR = 110; uint32 constexpr SPELL_PVP_RULES_ENABLED = 134735; @@ -1188,7 +1193,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> static bool IsChildEquipmentPos(uint8 bag, uint8 slot); bool IsValidPos(uint16 pos, bool explicit_pos) const { return IsValidPos(pos >> 8, pos & 255, explicit_pos); } bool IsValidPos(uint8 bag, uint8 slot, bool explicit_pos) const; - uint8 GetInventorySlotCount() const { return GetByteValue(PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_NUM_BACKPACK_SLOTS); } + uint8 GetInventorySlotCount() const { return GetByteValue(ACTIVE_PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_NUM_BACKPACK_SLOTS); } void SetInventorySlotCount(uint8 slots); uint8 GetBankBagSlotCount() const { return GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_BANK_BAG_SLOTS); } void SetBankBagSlotCount(uint8 count) { SetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_BANK_BAG_SLOTS, count); } @@ -1349,13 +1354,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> /*** QUEST SYSTEM ***/ /*********************************************************/ - int32 GetQuestLevel(Quest const* quest) const - { - if (!quest) - return getLevel(); - return quest->GetQuestLevel() > 0 ? quest->GetQuestLevel() : std::min<int32>(getLevel(), quest->GetQuestMaxScalingLevel()); - } - + int32 GetQuestMinLevel(Quest const* quest) const; + int32 GetQuestLevel(Quest const* quest) const; void PrepareQuestMenu(ObjectGuid guid); void SendPreparedQuest(WorldObject* source); bool IsActiveQuest(uint32 quest_id) const; @@ -1501,7 +1501,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> static bool IsValidGender(uint8 Gender) { return Gender <= GENDER_FEMALE; } static bool IsValidClass(uint8 Class) { return ((1 << (Class - 1)) & CLASSMASK_ALL_PLAYABLE) != 0; } - static bool IsValidRace(uint8 Race) { return ((1 << (Race - 1)) & RACEMASK_ALL_PLAYABLE) != 0; } + static bool IsValidRace(uint8 Race) { return ((UI64LIT(1) << (Race - 1)) & RACEMASK_ALL_PLAYABLE) != 0; } static bool ValidateAppearance(uint8 race, uint8 class_, uint8 gender, uint8 hairID, uint8 hairColor, uint8 faceID, uint8 facialHair, uint8 skinColor, std::array<uint8, PLAYER_CUSTOM_DISPLAY_SIZE> const& customDisplay, bool create = false); /*********************************************************/ @@ -1530,7 +1530,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void setRegenTimerCount(uint32 time) {m_regenTimerCount = time;} void setWeaponChangeTimer(uint32 time) {m_weaponChangeTimer = time;} - uint64 GetMoney() const { return GetUInt64Value(PLAYER_FIELD_COINAGE); } + uint64 GetMoney() const { return GetUInt64Value(ACTIVE_PLAYER_FIELD_COINAGE); } bool ModifyMoney(int64 amount, bool sendError = true); bool HasEnoughMoney(uint64 amount) const { return (GetMoney() >= amount); } bool HasEnoughMoney(int64 amount) const; @@ -1622,8 +1622,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> std::string GetGuildName() const; // Loot Spec - void SetLootSpecId(uint32 id) { SetUInt32Value(PLAYER_FIELD_LOOT_SPEC_ID, id); } - uint32 GetLootSpecId() const { return GetUInt32Value(PLAYER_FIELD_LOOT_SPEC_ID); } + void SetLootSpecId(uint32 id) { SetUInt32Value(ACTIVE_PLAYER_FIELD_LOOT_SPEC_ID, id); } + uint32 GetLootSpecId() const { return GetUInt32Value(ACTIVE_PLAYER_FIELD_LOOT_SPEC_ID); } // Talents uint32 GetTalentResetCost() const { return _specializationInfo.ResetTalentsCost; } @@ -1645,11 +1645,10 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> bool AddTalent(TalentEntry const* talent, uint8 spec, bool learning); bool HasTalent(uint32 spell_id, uint8 spec) const; void RemoveTalent(TalentEntry const* talent); - uint32 CalculateTalentsTiers() const; void ResetTalentSpecialization(); - TalentLearnResult LearnPvpTalent(uint32 talentID, int32* spellOnCooldown); - bool AddPvpTalent(PvpTalentEntry const* talent, uint8 activeTalentGroup, bool learning); + TalentLearnResult LearnPvpTalent(uint32 talentID, uint8 slot, int32* spellOnCooldown); + bool AddPvpTalent(PvpTalentEntry const* talent, uint8 activeTalentGroup, uint8 slot); void RemovePvpTalent(PvpTalentEntry const* talent); void TogglePvpTalents(bool enable); bool HasPvpTalent(uint32 talentID, uint8 activeTalentGroup) const; @@ -1664,14 +1663,14 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> PlayerTalentMap const* GetTalentMap(uint8 spec) const { return &_specializationInfo.Talents[spec]; } PlayerTalentMap* GetTalentMap(uint8 spec) { return &_specializationInfo.Talents[spec]; } - PlayerTalentMap const* GetPvpTalentMap(uint8 spec) const { return &_specializationInfo.PvpTalents[spec]; } - PlayerTalentMap* GetPvpTalentMap(uint8 spec) { return &_specializationInfo.PvpTalents[spec]; } + PlayerPvpTalentMap const& GetPvpTalentMap(uint8 spec) const { return _specializationInfo.PvpTalents[spec]; } + PlayerPvpTalentMap& GetPvpTalentMap(uint8 spec) { return _specializationInfo.PvpTalents[spec]; } std::vector<uint32> const& GetGlyphs(uint8 spec) const { return _specializationInfo.Glyphs[spec]; } std::vector<uint32>& GetGlyphs(uint8 spec) { return _specializationInfo.Glyphs[spec]; } ActionButtonList const& GetActionButtons() const { return m_actionButtons; } - uint32 GetFreePrimaryProfessionPoints() const { return GetUInt32Value(PLAYER_CHARACTER_POINTS); } - void SetFreePrimaryProfessions(uint16 profs) { SetUInt32Value(PLAYER_CHARACTER_POINTS, profs); } + uint32 GetFreePrimaryProfessionPoints() const { return GetUInt32Value(ACTIVE_PLAYER_FIELD_CHARACTER_POINTS); } + void SetFreePrimaryProfessions(uint16 profs) { SetUInt32Value(ACTIVE_PLAYER_FIELD_CHARACTER_POINTS, profs); } void InitPrimaryProfessions(); PlayerSpellMap const& GetSpellMap() const { return m_spells; } @@ -1756,7 +1755,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void SetGuildLevel(uint32 level) { SetUInt32Value(PLAYER_GUILDLEVEL, level); } uint32 GetGuildLevel() const { return GetUInt32Value(PLAYER_GUILDLEVEL); } void SetGuildIdInvited(ObjectGuid::LowType GuildId) { m_GuildIdInvited = GuildId; } - ObjectGuid::LowType GetGuildId() const { return GetUInt64Value(OBJECT_FIELD_DATA); /* return only lower part */ } + ObjectGuid::LowType GetGuildId() const { return GetUInt64Value(UNIT_FIELD_GUILD_GUID); /* return only lower part */ } Guild* GetGuild(); Guild const* GetGuild() const; static ObjectGuid::LowType GetGuildIdFromDB(ObjectGuid guid); @@ -1769,8 +1768,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void SetArenaTeamInfoField(uint8 slot, ArenaTeamInfoType type, uint32 value); static uint32 GetArenaTeamIdFromDB(ObjectGuid guid, uint8 slot); static void LeaveAllArenaTeams(ObjectGuid guid); - uint32 GetArenaTeamId(uint8 slot) const { return GetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (slot * ARENA_TEAM_END) + ARENA_TEAM_ID); } - uint32 GetArenaPersonalRating(uint8 slot) const { return GetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (slot * ARENA_TEAM_END) + ARENA_TEAM_PERSONAL_RATING); } + uint32 GetArenaTeamId(uint8 slot) const { return GetUInt32Value(ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO + (slot * ARENA_TEAM_END) + ARENA_TEAM_ID); } + uint32 GetArenaPersonalRating(uint8 slot) const { return GetUInt32Value(ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO + (slot * ARENA_TEAM_END) + ARENA_TEAM_PERSONAL_RATING); } void SetArenaTeamIdInvited(uint32 ArenaTeamId) { m_ArenaTeamIdInvited = ArenaTeamId; } uint32 GetArenaTeamIdInvited() const { return m_ArenaTeamIdInvited; } uint32 GetRBGPersonalRating() const { return 0; } @@ -1787,9 +1786,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> static Difficulty CheckLoadedLegacyRaidDifficultyID(Difficulty difficulty); void SendRaidGroupOnlyMessage(RaidGroupReason reason, int32 delay) const; - bool UpdateSkill(uint32 skill_id, uint32 step); bool UpdateSkillPro(uint16 skillId, int32 chance, uint32 step); - bool UpdateCraftSkill(uint32 spellid); bool UpdateGatherSkill(uint32 SkillId, uint32 SkillValue, uint32 RedLevel, uint32 Multiplicator = 1); bool UpdateFishingSkill(); @@ -1929,6 +1926,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> uint16 GetSkillStep(uint16 skill) const; // 0...6 bool HasSkill(uint32 skill) const; void LearnSkillRewardedSpells(uint32 skillId, uint32 skillValue); + int32 FindProfessionSlotFor(uint32 skillId) const; WorldLocation& GetTeleportDest() { return m_teleport_dest; } bool IsBeingTeleported() const { return mSemaphoreTeleport_Near || mSemaphoreTeleport_Far; } @@ -1985,15 +1983,11 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void RestoreHealthAfterDuel() { SetHealth(healthBeforeDuel); } void RestoreManaAfterDuel() { SetPower(POWER_MANA, manaBeforeDuel); } - uint32 GetPrestigeLevel() const { return GetUInt32Value(PLAYER_FIELD_PRESTIGE); } uint32 GetHonorLevel() const { return GetUInt32Value(PLAYER_FIELD_HONOR_LEVEL); } void AddHonorXP(uint32 xp); void SetHonorLevel(uint8 honorLevel); - void Prestige(); - bool CanPrestige() const; - bool IsMaxPrestige() const; - bool IsMaxHonorLevelAndPrestige() const { return IsMaxPrestige() && GetHonorLevel() == PLAYER_MAX_HONOR_LEVEL; } - // Updates PLAYER_FIELD_HONOR_NEXT_LEVEL based on PLAYER_FIELD_HONOR_LEVEL and the smallest value of PLAYER_FIELD_PRESTIGE and (PRESTIGE_COLUMN_COUNT - 1) + bool IsMaxHonorLevel() const { return GetHonorLevel() == PLAYER_MAX_HONOR_LEVEL; } + // Updates PLAYER_FIELD_HONOR_NEXT_LEVEL based on PLAYER_FIELD_HONOR_LEVEL void UpdateHonorNextLevel(); //End of PvP System @@ -2010,7 +2004,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> int32 CalculateCorpseReclaimDelay(bool load = false) const; void SendCorpseReclaimDelay(uint32 delay) const; - uint32 GetBlockPercent() const override { return GetUInt32Value(PLAYER_SHIELD_BLOCK); } + uint32 GetBlockPercent() const override { return GetUInt32Value(ACTIVE_PLAYER_FIELD_SHIELD_BLOCK); } bool CanParry() const { return m_canParry; } void SetCanParry(bool value); bool CanBlock() const { return m_canBlock; } @@ -2727,7 +2721,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> std::unordered_map<ObjectGuid /*LootObject*/, ObjectGuid /*world object*/> m_AELootView; - void _InitHonorLevelOnLoadFromDB(uint32 /*honor*/, uint32 /*honorLevel*/, uint32 /*prestigeLevel*/); + void _InitHonorLevelOnLoadFromDB(uint32 honor, uint32 honorLevel); std::unique_ptr<RestMgr> _restMgr; bool _usePvpItemLevels; diff --git a/src/server/game/Entities/Player/PlayerTaxi.cpp b/src/server/game/Entities/Player/PlayerTaxi.cpp index 7a7f8d8533c..68d34e97c33 100644 --- a/src/server/game/Entities/Player/PlayerTaxi.cpp +++ b/src/server/game/Entities/Player/PlayerTaxi.cpp @@ -111,13 +111,13 @@ void PlayerTaxi::AppendTaximaskTo(WorldPackets::Taxi::ShowTaxiNodes& data, bool { if (all) { - data.CanLandNodes = &sTaxiNodesMask; // all existed nodes - data.CanUseNodes = &sTaxiNodesMask; + data.CanLandNodes = sTaxiNodesMask; // all existed nodes + data.CanUseNodes = sTaxiNodesMask; } else { - data.CanLandNodes = &m_taximask; // known nodes - data.CanUseNodes = &m_taximask; + data.CanLandNodes = m_taximask; // known nodes + data.CanUseNodes = m_taximask; } } diff --git a/src/server/game/Entities/Player/PlayerTaxi.h b/src/server/game/Entities/Player/PlayerTaxi.h index 7a98e01baa1..9da960883a6 100644 --- a/src/server/game/Entities/Player/PlayerTaxi.h +++ b/src/server/game/Entities/Player/PlayerTaxi.h @@ -44,13 +44,13 @@ class TC_GAME_API PlayerTaxi bool IsTaximaskNodeKnown(uint32 nodeidx) const { - uint8 field = uint8((nodeidx - 1) / 8); + uint32 field = uint32((nodeidx - 1) / 8); uint32 submask = 1 << ((nodeidx-1) % 8); return (m_taximask[field] & submask) == submask; } bool SetTaximaskNode(uint32 nodeidx) { - uint8 field = uint8((nodeidx - 1) / 8); + uint32 field = uint32((nodeidx - 1) / 8); uint32 submask = 1 << ((nodeidx- 1) % 8); if ((m_taximask[field] & submask) != submask) { diff --git a/src/server/game/Entities/Player/RestMgr.cpp b/src/server/game/Entities/Player/RestMgr.cpp index ba8c11c5ee0..fc100d36088 100644 --- a/src/server/game/Entities/Player/RestMgr.cpp +++ b/src/server/game/Entities/Player/RestMgr.cpp @@ -44,17 +44,17 @@ void RestMgr::SetRestBonus(RestTypes restType, float restBonus) rest_rested_offset = REST_RESTED_XP; rest_state_offset = REST_STATE_XP; - next_level_xp_field = PLAYER_NEXT_LEVEL_XP; + next_level_xp_field = ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP; affectedByRaF = true; break; case REST_TYPE_HONOR: // Reset restBonus (Honor only) for players with max honor level. - if (_player->IsMaxHonorLevelAndPrestige()) + if (_player->IsMaxHonorLevel()) restBonus = 0; rest_rested_offset = REST_RESTED_HONOR; rest_state_offset = REST_STATE_HONOR; - next_level_xp_field = PLAYER_FIELD_HONOR_NEXT_LEVEL; + next_level_xp_field = ACTIVE_PLAYER_FIELD_HONOR_NEXT_LEVEL; break; default: return; @@ -72,17 +72,17 @@ void RestMgr::SetRestBonus(RestTypes restType, float restBonus) // update data for client if (affectedByRaF && _player->GetsRecruitAFriendBonus(true) && (_player->GetSession()->IsARecruiter() || _player->GetSession()->GetRecruiterId() != 0)) - _player->SetUInt32Value(PLAYER_FIELD_REST_INFO + rest_state_offset, REST_STATE_RAF_LINKED); + _player->SetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + rest_state_offset, REST_STATE_RAF_LINKED); else { if (_restBonus[restType] > 10) - _player->SetUInt32Value(PLAYER_FIELD_REST_INFO + rest_state_offset, REST_STATE_RESTED); + _player->SetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + rest_state_offset, REST_STATE_RESTED); else if (_restBonus[restType] <= 1) - _player->SetUInt32Value(PLAYER_FIELD_REST_INFO + rest_state_offset, REST_STATE_NOT_RAF_LINKED); + _player->SetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + rest_state_offset, REST_STATE_NOT_RAF_LINKED); } // RestTickUpdate - _player->SetUInt32Value(PLAYER_FIELD_REST_INFO + rest_rested_offset, uint32(_restBonus[restType])); + _player->SetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + rest_rested_offset, uint32(_restBonus[restType])); } void RestMgr::AddRestBonus(RestTypes restType, float restBonus) @@ -153,8 +153,8 @@ void RestMgr::Update(time_t now) void RestMgr::LoadRestBonus(RestTypes restType, PlayerRestState state, float restBonus) { _restBonus[restType] = restBonus; - _player->SetUInt32Value(PLAYER_FIELD_REST_INFO + restType * 2, state); - _player->SetUInt32Value(PLAYER_FIELD_REST_INFO + restType * 2 + 1, uint32(restBonus)); + _player->SetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + restType * 2, state); + _player->SetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + restType * 2 + 1, uint32(restBonus)); } float RestMgr::CalcExtraPerSec(RestTypes restType, float bubble) const @@ -162,9 +162,9 @@ float RestMgr::CalcExtraPerSec(RestTypes restType, float bubble) const switch (restType) { case REST_TYPE_HONOR: - return float(_player->GetUInt32Value(PLAYER_FIELD_HONOR_NEXT_LEVEL)) / 72000.0f * bubble; + return float(_player->GetUInt32Value(ACTIVE_PLAYER_FIELD_HONOR_NEXT_LEVEL)) / 72000.0f * bubble; case REST_TYPE_XP: - return float(_player->GetUInt32Value(PLAYER_NEXT_LEVEL_XP)) / 72000.0f * bubble; + return float(_player->GetUInt32Value(ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP)) / 72000.0f * bubble; default: return 0.0f; } diff --git a/src/server/game/Entities/Taxi/TaxiPathGraph.cpp b/src/server/game/Entities/Taxi/TaxiPathGraph.cpp index 3ec90f577a7..2614ad0520c 100644 --- a/src/server/game/Entities/Taxi/TaxiPathGraph.cpp +++ b/src/server/game/Entities/Taxi/TaxiPathGraph.cpp @@ -21,6 +21,7 @@ #include "DB2Stores.h" #include "Config.h" #include "Util.h" +#include <boost/graph/depth_first_search.hpp> #include <boost/graph/dijkstra_shortest_paths.hpp> #include <boost/property_map/transform_value_property_map.hpp> @@ -32,7 +33,7 @@ TaxiPathGraph& TaxiPathGraph::Instance() void TaxiPathGraph::Initialize() { - if (GetVertexCount() > 0) + if (boost::num_vertices(m_graph) > 0) return; std::vector<std::pair<edge, EdgeCost>> edges; @@ -47,7 +48,7 @@ void TaxiPathGraph::Initialize() } // create graph - m_graph = Graph(GetVertexCount()); + m_graph = Graph(m_nodesByVertex.size()); WeightMap weightmap = boost::get(boost::edge_weight, m_graph); for (std::size_t j = 0; j < edges.size(); ++j) @@ -59,21 +60,22 @@ void TaxiPathGraph::Initialize() uint32 TaxiPathGraph::GetNodeIDFromVertexID(vertex_descriptor vertexID) { - if (vertexID < m_vertices.size()) - return m_vertices[vertexID]->ID; + if (vertexID < m_nodesByVertex.size()) + return m_nodesByVertex[vertexID]->ID; return std::numeric_limits<uint32>::max(); } TaxiPathGraph::vertex_descriptor TaxiPathGraph::GetVertexIDFromNodeID(TaxiNodesEntry const* node) { - return node->CharacterBitNumber; + auto itr = m_verticesByNode.find(node->ID); + return itr != m_verticesByNode.end() ? itr->second : std::numeric_limits<vertex_descriptor>::max(); } -std::size_t TaxiPathGraph::GetVertexCount() +void GetTaxiMapPosition(DBCPosition3D const& position, int32 mapId, DBCPosition2D* uiMapPosition, int32* uiMapId) { - //So we can use this function for readability, we define either max defined vertices or already loaded in graph count - return std::max(boost::num_vertices(m_graph), m_vertices.size()); + if (!DB2Manager::GetUiMapPosition(position.X, position.Y, position.Z, mapId, 0, 0, 0, UI_MAP_SYSTEM_ADVENTURE, false, uiMapId, uiMapPosition)) + DB2Manager::GetUiMapPosition(position.X, position.Y, position.Z, mapId, 0, 0, 0, UI_MAP_SYSTEM_TAXI, false, uiMapId, uiMapPosition); } void TaxiPathGraph::AddVerticeAndEdgeFromNodeInfo(TaxiNodesEntry const* from, TaxiNodesEntry const* to, uint32 pathId, std::vector<std::pair<edge, EdgeCost>>& edges) @@ -104,22 +106,21 @@ void TaxiPathGraph::AddVerticeAndEdgeFromNodeInfo(TaxiNodesEntry const* from, Ta if (nodes[i - 1]->Flags & TAXI_PATH_NODE_FLAG_TELEPORT) continue; - uint32 map1, map2; + int32 uiMap1, uiMap2; DBCPosition2D pos1, pos2; - DB2Manager::DeterminaAlternateMapPosition(nodes[i - 1]->ContinentID, nodes[i - 1]->Loc.X, nodes[i - 1]->Loc.Y, nodes[i - 1]->Loc.Z, &map1, &pos1); - DB2Manager::DeterminaAlternateMapPosition(nodes[i]->ContinentID, nodes[i]->Loc.X, nodes[i]->Loc.Y, nodes[i]->Loc.Z, &map2, &pos2); + GetTaxiMapPosition(nodes[i - 1]->Loc, nodes[i - 1]->ContinentID, &pos1, &uiMap1); + GetTaxiMapPosition(nodes[i]->Loc, nodes[i]->ContinentID, &pos2, &uiMap2); - if (map1 != map2) + if (uiMap1 != uiMap2) continue; totalDist += std::sqrt( std::pow(pos2.X - pos1.X, 2) + - std::pow(pos2.Y - pos1.Y, 2) + - std::pow(nodes[i]->Loc.Z - nodes[i - 1]->Loc.Z, 2)); + std::pow(pos2.Y - pos1.Y, 2)); } - uint32 dist = uint32(totalDist); + uint32 dist = uint32(totalDist * 32767.0f); if (dist > 0xFFFF) dist = 0xFFFF; @@ -176,14 +177,50 @@ std::size_t TaxiPathGraph::GetCompleteNodeRoute(TaxiNodesEntry const* from, Taxi return shortestPath.size(); } +template<typename T> +struct DiscoverVertexVisitor : public boost::base_visitor<DiscoverVertexVisitor<T>> +{ + using event_filter = boost::on_discover_vertex; + + DiscoverVertexVisitor(T&& func) : _func(std::forward<T>(func)) { } + + template <class Vertex, class Graph> + void operator()(Vertex v, Graph& /*g*/) + { + _func(v); + } + +private: + T _func; +}; + +template<typename T> +inline auto make_discover_vertex_dfs_visitor(T&& t) +{ + return boost::make_dfs_visitor(DiscoverVertexVisitor<T>(std::forward<T>(t))); +} + +void TaxiPathGraph::GetReachableNodesMask(TaxiNodesEntry const* from, TaxiMask* mask) +{ + boost::vector_property_map<boost::default_color_type> color(boost::num_vertices(m_graph)); + std::fill(color.storage_begin(), color.storage_end(), boost::white_color); + boost::depth_first_visit(m_graph, GetVertexIDFromNodeID(from), make_discover_vertex_dfs_visitor([this, mask](vertex_descriptor vertex) + { + if (TaxiNodesEntry const* taxiNode = sTaxiNodesStore.LookupEntry(GetNodeIDFromVertexID(vertex))) + (*mask)[(taxiNode->ID - 1) / 8] |= 1 << ((taxiNode->ID - 1) % 8); + }), color); +} + TaxiPathGraph::vertex_descriptor TaxiPathGraph::CreateVertexFromFromNodeInfoIfNeeded(TaxiNodesEntry const* node) { - //Check if we need a new one or if it may be already created - if (m_vertices.size() <= node->CharacterBitNumber) - m_vertices.resize(node->CharacterBitNumber + 1); + auto itr = m_verticesByNode.find(node->ID); + if (itr == m_verticesByNode.end()) + { + itr = m_verticesByNode.emplace(node->ID, m_nodesByVertex.size()).first; + m_nodesByVertex.push_back(node); + } - m_vertices[node->CharacterBitNumber] = node; - return node->CharacterBitNumber; + return itr->second; } uint32 TaxiPathGraph::EdgeCost::EvaluateDistance(Player const* player) const diff --git a/src/server/game/Entities/Taxi/TaxiPathGraph.h b/src/server/game/Entities/Taxi/TaxiPathGraph.h index 5331f12ba49..4f6508e2cfc 100644 --- a/src/server/game/Entities/Taxi/TaxiPathGraph.h +++ b/src/server/game/Entities/Taxi/TaxiPathGraph.h @@ -20,7 +20,10 @@ #include "Position.h" #include "Define.h" +#include "DBCEnums.h" #include <boost/graph/adjacency_list.hpp> +#include <unordered_map> +#include <vector> class Player; struct TaxiNodesEntry; @@ -32,6 +35,7 @@ public: void Initialize(); std::size_t GetCompleteNodeRoute(TaxiNodesEntry const* from, TaxiNodesEntry const* to, Player const* player, std::vector<uint32>& shortestPath); + void GetReachableNodesMask(TaxiNodesEntry const* from, TaxiMask* mask); private: struct EdgeCost @@ -53,10 +57,10 @@ private: vertex_descriptor GetVertexIDFromNodeID(TaxiNodesEntry const* node); uint32 GetNodeIDFromVertexID(vertex_descriptor vertexID); vertex_descriptor CreateVertexFromFromNodeInfoIfNeeded(TaxiNodesEntry const* node); - std::size_t GetVertexCount(); Graph m_graph; - std::vector<TaxiNodesEntry const*> m_vertices; + std::vector<TaxiNodesEntry const*> m_nodesByVertex; + std::unordered_map<uint32, vertex_descriptor> m_verticesByNode; TaxiPathGraph(TaxiPathGraph const&) = delete; TaxiPathGraph& operator=(TaxiPathGraph const&) = delete; diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index 50b1897e2c5..6de4ae21027 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -38,7 +38,9 @@ Transport::Transport() : GameObject(), _triggeredArrivalEvent(false), _triggeredDepartureEvent(false), _passengerTeleportItr(_passengers.begin()), _delayedAddModel(false), _delayedTeleport(false) { - m_updateFlag = UPDATEFLAG_TRANSPORT | UPDATEFLAG_STATIONARY_POSITION | UPDATEFLAG_ROTATION; + m_updateFlag.ServerTime = true; + m_updateFlag.Stationary = true; + m_updateFlag.Rotation = true; } Transport::~Transport() diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index 7e0d38c9875..6d940a91582 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -160,9 +160,9 @@ void Player::ApplySpellPowerBonus(int32 amount, bool apply) apply = _ModifyUInt32(apply, m_baseSpellPower, amount); // For speed just update for client - ApplyModUInt32Value(PLAYER_FIELD_MOD_HEALING_DONE_POS, amount, apply); + ApplyModUInt32Value(ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_POS, amount, apply); for (int i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i) - ApplyModUInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + i, amount, apply); + ApplyModUInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + i, amount, apply); if (HasAuraType(SPELL_AURA_OVERRIDE_ATTACK_POWER_BY_SP_PCT)) { @@ -176,18 +176,18 @@ void Player::UpdateSpellDamageAndHealingBonus() // Magic damage modifiers implemented in Unit::SpellDamageBonusDone // This information for client side use only // Get healing bonus for all schools - SetStatInt32Value(PLAYER_FIELD_MOD_HEALING_DONE_POS, SpellBaseHealingBonusDone(SPELL_SCHOOL_MASK_ALL)); + SetStatInt32Value(ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_POS, SpellBaseHealingBonusDone(SPELL_SCHOOL_MASK_ALL)); // Get damage bonus for all schools Unit::AuraEffectList const& modDamageAuras = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_DONE); for (uint16 i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i) { - SetInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + i, std::accumulate(modDamageAuras.begin(), modDamageAuras.end(), 0, [i](int32 negativeMod, AuraEffect const* aurEff) + SetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + i, std::accumulate(modDamageAuras.begin(), modDamageAuras.end(), 0, [i](int32 negativeMod, AuraEffect const* aurEff) { if (aurEff->GetAmount() < 0 && aurEff->GetMiscValue() & (1 << i)) negativeMod += aurEff->GetAmount(); return negativeMod; })); - SetStatInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + i, SpellBaseDamageBonusDone(SpellSchoolMask(1 << i)) - GetInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + i)); + SetStatInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + i, SpellBaseDamageBonusDone(SpellSchoolMask(1 << i)) - GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + i)); } if (HasAuraType(SPELL_AURA_OVERRIDE_ATTACK_POWER_BY_SP_PCT)) @@ -231,7 +231,7 @@ bool Player::UpdateAllStats() void Player::ApplySpellPenetrationBonus(int32 amount, bool apply) { - ApplyModInt32Value(PLAYER_FIELD_MOD_TARGET_RESISTANCE, -amount, apply); + ApplyModInt32Value(ACTIVE_PLAYER_FIELD_MOD_TARGET_RESISTANCE, -amount, apply); m_spellPenetrationItemMod += apply ? amount : -amount; } @@ -239,8 +239,7 @@ void Player::UpdateResistances(uint32 school) { if (school > SPELL_SCHOOL_NORMAL) { - float value = GetTotalAuraModValue(UnitMods(UNIT_MOD_RESISTANCE_START + school)); - SetResistance(SpellSchools(school), int32(value)); + Unit::UpdateResistances(school); Pet* pet = GetPet(); if (pet) @@ -255,6 +254,7 @@ void Player::UpdateArmor() UnitMods unitMod = UNIT_MOD_ARMOR; float value = GetModifierValue(unitMod, BASE_VALUE); // base armor (from items) + float baseValue = value; value *= GetModifierValue(unitMod, BASE_PCT); // armor percent from items value += GetModifierValue(unitMod, TOTAL_VALUE); @@ -268,7 +268,7 @@ void Player::UpdateArmor() value *= GetModifierValue(unitMod, TOTAL_PCT); - SetArmor(int32(value)); + SetArmor(int32(baseValue), int32(value - baseValue)); Pet* pet = GetPet(); if (pet) @@ -360,11 +360,11 @@ void Player::UpdateAttackPowerAndDamage(bool ranged) } else { - int32 minSpellPower = GetInt32Value(PLAYER_FIELD_MOD_HEALING_DONE_POS); + int32 minSpellPower = GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_POS); for (int i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i) - minSpellPower = std::min(minSpellPower, GetInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + i)); + minSpellPower = std::min(minSpellPower, GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + i)); - val2 = CalculatePct(float(minSpellPower), GetFloatValue(PLAYER_FIELD_OVERRIDE_AP_BY_SPELL_POWER_PERCENT)); + val2 = CalculatePct(float(minSpellPower), GetFloatValue(ACTIVE_PLAYER_FIELD_OVERRIDE_AP_BY_SPELL_POWER_PERCENT)); } SetModifierValue(unitMod, BASE_VALUE, val2); @@ -488,7 +488,7 @@ void Player::UpdateBlockPercentage() value = value < 0.0f ? 0.0f : value; } - SetStatFloatValue(PLAYER_BLOCK_PERCENTAGE, value); + SetStatFloatValue(ACTIVE_PLAYER_FIELD_BLOCK_PERCENTAGE, value); } void Player::UpdateCritPercentage(WeaponAttackType attType) @@ -501,18 +501,18 @@ void Player::UpdateCritPercentage(WeaponAttackType attType) { case OFF_ATTACK: modGroup = OFFHAND_CRIT_PERCENTAGE; - index = PLAYER_OFFHAND_CRIT_PERCENTAGE; + index = ACTIVE_PLAYER_FIELD_OFFHAND_CRIT_PERCENTAGE; cr = CR_CRIT_MELEE; break; case RANGED_ATTACK: modGroup = RANGED_CRIT_PERCENTAGE; - index = PLAYER_RANGED_CRIT_PERCENTAGE; + index = ACTIVE_PLAYER_FIELD_RANGED_CRIT_PERCENTAGE; cr = CR_CRIT_RANGED; break; case BASE_ATTACK: default: modGroup = CRIT_PERCENTAGE; - index = PLAYER_CRIT_PERCENTAGE; + index = ACTIVE_PLAYER_FIELD_CRIT_PERCENTAGE; cr = CR_CRIT_MELEE; break; } @@ -545,13 +545,13 @@ void Player::UpdateMastery() { if (!CanUseMastery()) { - SetFloatValue(PLAYER_MASTERY, 0.0f); + SetFloatValue(ACTIVE_PLAYER_FIELD_MASTERY, 0.0f); return; } float value = GetTotalAuraModifier(SPELL_AURA_MASTERY); value += GetRatingBonusValue(CR_MASTERY); - SetFloatValue(PLAYER_MASTERY, value); + SetFloatValue(ACTIVE_PLAYER_FIELD_MASTERY, value); ChrSpecializationEntry const* chrSpec = sChrSpecializationStore.LookupEntry(GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID)); if (!chrSpec) @@ -579,7 +579,7 @@ void Player::UpdateMastery() void Player::UpdateVersatilityDamageDone() { // No proof that CR_VERSATILITY_DAMAGE_DONE is allways = PLAYER_VERSATILITY - SetUInt32Value(PLAYER_VERSATILITY, GetUInt32Value(PLAYER_FIELD_COMBAT_RATING_1 + CR_VERSATILITY_DAMAGE_DONE)); + SetUInt32Value(ACTIVE_PLAYER_FIELD_VERSATILITY, GetUInt32Value(ACTIVE_PLAYER_FIELD_COMBAT_RATING + CR_VERSATILITY_DAMAGE_DONE)); if (getClass() == CLASS_HUNTER) UpdateDamagePhysical(RANGED_ATTACK); @@ -596,7 +596,7 @@ void Player::UpdateHealingDonePercentMod() for (AuraEffect const* auraEffect : GetAuraEffectsByType(SPELL_AURA_MOD_HEALING_DONE_PERCENT)) AddPct(value, auraEffect->GetAmount()); - SetStatFloatValue(PLAYER_FIELD_MOD_HEALING_DONE_PCT, value); + SetStatFloatValue(ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_PCT, value); } const float m_diminishing_k[MAX_CLASSES] = @@ -651,7 +651,7 @@ void Player::UpdateParryPercentage() value = value < 0.0f ? 0.0f : value; } - SetStatFloatValue(PLAYER_PARRY_PERCENTAGE, value); + SetStatFloatValue(ACTIVE_PLAYER_FIELD_PARRY_PERCENTAGE, value); } void Player::UpdateDodgePercentage() @@ -686,7 +686,7 @@ void Player::UpdateDodgePercentage() value = value > sWorld->getFloatConfig(CONFIG_STATS_LIMITS_DODGE) ? sWorld->getFloatConfig(CONFIG_STATS_LIMITS_DODGE) : value; value = value < 0.0f ? 0.0f : value; - SetStatFloatValue(PLAYER_DODGE_PERCENTAGE, value); + SetStatFloatValue(ACTIVE_PLAYER_FIELD_DODGE_PERCENTAGE, value); } void Player::UpdateSpellCritChance() @@ -700,13 +700,13 @@ void Player::UpdateSpellCritChance() crit += GetRatingBonusValue(CR_CRIT_SPELL); // Store crit value - SetFloatValue(PLAYER_SPELL_CRIT_PERCENTAGE1, crit); + SetFloatValue(ACTIVE_PLAYER_FIELD_SPELL_CRIT_PERCENTAGE1, crit); } void Player::UpdateArmorPenetration(int32 amount) { // Store Rating Value - SetUInt32Value(PLAYER_FIELD_COMBAT_RATING_1 + CR_ARMOR_PENETRATION, amount); + SetUInt32Value(ACTIVE_PLAYER_FIELD_COMBAT_RATING + CR_ARMOR_PENETRATION, amount); } void Player::UpdateMeleeHitChances() @@ -746,10 +746,10 @@ void Player::UpdateExpertise(WeaponAttackType attack) switch (attack) { case BASE_ATTACK: - SetUInt32Value(PLAYER_EXPERTISE, expertise); + SetUInt32Value(ACTIVE_PLAYER_FIELD_EXPERTISE, expertise); break; case OFF_ATTACK: - SetUInt32Value(PLAYER_OFFHAND_EXPERTISE, expertise); + SetUInt32Value(ACTIVE_PLAYER_FIELD_OFFHAND_EXPERTISE, expertise); break; default: break; @@ -855,21 +855,11 @@ bool Creature::UpdateAllStats() return true; } -void Creature::UpdateResistances(uint32 school) -{ - if (school > SPELL_SCHOOL_NORMAL) - { - float value = GetTotalAuraModValue(UnitMods(UNIT_MOD_RESISTANCE_START + school)); - SetResistance(SpellSchools(school), int32(value)); - } - else - UpdateArmor(); -} - void Creature::UpdateArmor() { + float baseValue = GetModifierValue(UNIT_MOD_ARMOR, BASE_VALUE); float value = GetTotalAuraModValue(UNIT_MOD_ARMOR); - SetArmor(int32(value)); + SetArmor(int32(baseValue), int32(value - baseValue)); } void Creature::UpdateMaxHealth() @@ -1077,13 +1067,18 @@ void Guardian::UpdateResistances(uint32 school) { if (school > SPELL_SCHOOL_NORMAL) { - float value = GetTotalAuraModValue(UnitMods(UNIT_MOD_RESISTANCE_START + school)); + float baseValue = GetModifierValue(UnitMods(UNIT_MOD_RESISTANCE_START + school), BASE_VALUE); + float bonusValue = GetTotalAuraModValue(UnitMods(UNIT_MOD_RESISTANCE_START + school)) - baseValue; // hunter and warlock pets gain 40% of owner's resistance if (IsPet()) - value += float(CalculatePct(m_owner->GetResistance(SpellSchools(school)), 40)); + { + baseValue += float(CalculatePct(m_owner->GetResistance(SpellSchools(school)), 40)); + bonusValue += float(CalculatePct(m_owner->GetBonusResistanceMod(SpellSchools(school)), 40)); + } - SetResistance(SpellSchools(school), int32(value)); + SetResistance(SpellSchools(school), int32(baseValue)); + SetBonusResistanceMod(SpellSchools(school), int32(bonusValue)); } else UpdateArmor(); @@ -1091,6 +1086,7 @@ void Guardian::UpdateResistances(uint32 school) void Guardian::UpdateArmor() { + float baseValue = 0.0f; float value = 0.0f; float bonus_armor = 0.0f; UnitMods unitMod = UNIT_MOD_ARMOR; @@ -1102,11 +1098,12 @@ void Guardian::UpdateArmor() bonus_armor = m_owner->GetArmor(); value = GetModifierValue(unitMod, BASE_VALUE); + baseValue = value; value *= GetModifierValue(unitMod, BASE_PCT); value += GetModifierValue(unitMod, TOTAL_VALUE) + bonus_armor; value *= GetModifierValue(unitMod, TOTAL_PCT); - SetArmor(int32(value)); + SetArmor(int32(baseValue), int32(value - baseValue)); } void Guardian::UpdateMaxHealth() @@ -1186,8 +1183,8 @@ void Guardian::UpdateAttackPowerAndDamage(bool ranged) //demons benefit from warlocks shadow or fire damage else if (IsPet()) { - int32 fire = owner->GetInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FIRE) - owner->GetInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_FIRE); - int32 shadow = owner->GetInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_SHADOW) - owner->GetInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_SHADOW); + int32 fire = owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FIRE) - owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_FIRE); + int32 shadow = owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_SHADOW) - owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_SHADOW); int32 maximum = (fire > shadow) ? fire : shadow; if (maximum < 0) maximum = 0; @@ -1197,7 +1194,7 @@ void Guardian::UpdateAttackPowerAndDamage(bool ranged) //water elementals benefit from mage's frost damage else if (GetEntry() == ENTRY_WATER_ELEMENTAL) { - int32 frost = owner->GetInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FROST) - owner->GetInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_FROST); + int32 frost = owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FROST) - owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_FROST); if (frost < 0) frost = 0; SetBonusDamage(int32(frost * 0.4f)); @@ -1230,14 +1227,14 @@ void Guardian::UpdateDamagePhysical(WeaponAttackType attType) //force of nature if (GetEntry() == ENTRY_TREANT) { - int32 spellDmg = m_owner->GetInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_NATURE) - m_owner->GetInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_NATURE); + int32 spellDmg = m_owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_NATURE) - m_owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_NATURE); if (spellDmg > 0) bonusDamage = spellDmg * 0.09f; } //greater fire elemental else if (GetEntry() == ENTRY_FIRE_ELEMENTAL) { - int32 spellDmg = m_owner->GetInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FIRE) - m_owner->GetInt32Value(PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_FIRE); + int32 spellDmg = m_owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + SPELL_SCHOOL_FIRE) - m_owner->GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + SPELL_SCHOOL_FIRE); if (spellDmg > 0) bonusDamage = spellDmg * 0.4f; } @@ -1266,5 +1263,5 @@ void Guardian::SetBonusDamage(int32 damage) { m_bonusSpellDamage = damage; if (GetOwner()->GetTypeId() == TYPEID_PLAYER) - GetOwner()->SetUInt32Value(PLAYER_PET_SPELL_POWER, damage); + GetOwner()->SetUInt32Value(ACTIVE_PLAYER_FIELD_PET_SPELL_POWER, damage); } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index bd375f96b6c..8261a97c32a 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -111,13 +111,13 @@ bool DispelableAura::RollDispel() const } DamageInfo::DamageInfo(Unit* attacker, Unit* victim, uint32 damage, SpellInfo const* spellInfo, SpellSchoolMask schoolMask, DamageEffectType damageType, WeaponAttackType attackType) - : m_attacker(attacker), m_victim(victim), m_damage(damage), m_spellInfo(spellInfo), m_schoolMask(schoolMask), m_damageType(damageType), m_attackType(attackType), + : m_attacker(attacker), m_victim(victim), m_damage(damage), m_originalDamage(damage), m_spellInfo(spellInfo), m_schoolMask(schoolMask), m_damageType(damageType), m_attackType(attackType), m_absorb(0), m_resist(0), m_block(0), m_hitMask(0) { } DamageInfo::DamageInfo(CalcDamageInfo const& dmgInfo) - : m_attacker(dmgInfo.attacker), m_victim(dmgInfo.target), m_damage(dmgInfo.damage), m_spellInfo(nullptr), m_schoolMask(SpellSchoolMask(dmgInfo.damageSchoolMask)), + : m_attacker(dmgInfo.attacker), m_victim(dmgInfo.target), m_damage(dmgInfo.damage), m_originalDamage(dmgInfo.damage), m_spellInfo(nullptr), m_schoolMask(SpellSchoolMask(dmgInfo.damageSchoolMask)), m_damageType(DIRECT_DAMAGE), m_attackType(dmgInfo.attackType), m_absorb(dmgInfo.absorb), m_resist(dmgInfo.resist), m_block(dmgInfo.blocked_amount), m_hitMask(0) { switch (dmgInfo.TargetState) @@ -171,7 +171,7 @@ DamageInfo::DamageInfo(CalcDamageInfo const& dmgInfo) } DamageInfo::DamageInfo(SpellNonMeleeDamage const& spellNonMeleeDamage, DamageEffectType damageType, WeaponAttackType attackType, uint32 hitMask) - : m_attacker(spellNonMeleeDamage.attacker), m_victim(spellNonMeleeDamage.target), m_damage(spellNonMeleeDamage.damage), + : m_attacker(spellNonMeleeDamage.attacker), m_victim(spellNonMeleeDamage.target), m_damage(spellNonMeleeDamage.damage), m_originalDamage(spellNonMeleeDamage.originalDamage), m_spellInfo(sSpellMgr->GetSpellInfo(spellNonMeleeDamage.SpellID)), m_schoolMask(SpellSchoolMask(spellNonMeleeDamage.schoolMask)), m_damageType(damageType), m_attackType(attackType), m_absorb(spellNonMeleeDamage.absorb), m_resist(spellNonMeleeDamage.resist), m_block(spellNonMeleeDamage.blocked), m_hitMask(hitMask) { @@ -226,7 +226,7 @@ uint32 DamageInfo::GetHitMask() const } HealInfo::HealInfo(Unit* healer, Unit* target, uint32 heal, SpellInfo const* spellInfo, SpellSchoolMask schoolMask) - : _healer(healer), _target(target), _heal(heal), _effectiveHeal(0), _absorb(0), _spellInfo(spellInfo), _schoolMask(schoolMask), _hitMask(0) + : _healer(healer), _target(target), _heal(heal), _originalHeal(heal), _effectiveHeal(0), _absorb(0), _spellInfo(spellInfo), _schoolMask(schoolMask), _hitMask(0) { } @@ -279,8 +279,8 @@ SpellSchoolMask ProcEventInfo::GetSchoolMask() const } SpellNonMeleeDamage::SpellNonMeleeDamage(Unit* _attacker, Unit* _target, uint32 _SpellID, uint32 _SpellXSpellVisualID, uint32 _schoolMask, ObjectGuid _castId) - : target(_target), attacker(_attacker), castId(_castId), SpellID(_SpellID), SpellXSpellVisualID(_SpellXSpellVisualID), damage(0), schoolMask(_schoolMask), - absorb(0), resist(0), periodicLog(false), blocked(0), HitInfo(0), cleanDamage(0), fullBlock(false), preHitHealth(_target->GetHealth()) + : target(_target), attacker(_attacker), castId(_castId), SpellID(_SpellID), SpellXSpellVisualID(_SpellXSpellVisualID), damage(0), originalDamage(0), + schoolMask(_schoolMask), absorb(0), resist(0), periodicLog(false), blocked(0), HitInfo(0), cleanDamage(0), fullBlock(false), preHitHealth(_target->GetHealth()) { } @@ -297,7 +297,7 @@ Unit::Unit(bool isWorldObject) : m_objectType |= TYPEMASK_UNIT; m_objectTypeId = TYPEID_UNIT; - m_updateFlag = UPDATEFLAG_LIVING; + m_updateFlag.MovementUpdate = true; for (uint32 i = 0; i < MAX_ATTACK; ++i) { @@ -1181,6 +1181,7 @@ void Unit::CalculateSpellDamageTaken(SpellNonMeleeDamage* damageInfo, int32 dama damage = 0; damageInfo->damage = damage; + damageInfo->originalDamage = damage; DamageInfo dmgInfo(*damageInfo, SPELL_DIRECT_DAMAGE, BASE_ATTACK, PROC_HIT_NONE); CalcAbsorbResist(dmgInfo); damageInfo->absorb = dmgInfo.GetAbsorb(); @@ -1227,6 +1228,7 @@ void Unit::CalculateMeleeDamage(Unit* victim, uint32 damage, CalcDamageInfo* dam damageInfo->damageSchoolMask = GetMeleeDamageSchoolMask(); damageInfo->attackType = attackType; damageInfo->damage = 0; + damageInfo->originalDamage = 0; damageInfo->cleanDamage = 0; damageInfo->absorb = 0; damageInfo->resist = 0; @@ -1295,17 +1297,20 @@ void Unit::CalculateMeleeDamage(Unit* victim, uint32 damage, CalcDamageInfo* dam case MELEE_HIT_EVADE: damageInfo->HitInfo |= HITINFO_MISS | HITINFO_SWINGNOHITSOUND; damageInfo->TargetState = VICTIMSTATE_EVADES; + damageInfo->originalDamage = damageInfo->damage; damageInfo->damage = 0; damageInfo->cleanDamage = 0; return; case MELEE_HIT_MISS: damageInfo->HitInfo |= HITINFO_MISS; damageInfo->TargetState = VICTIMSTATE_INTACT; + damageInfo->originalDamage = damageInfo->damage; damageInfo->damage = 0; damageInfo->cleanDamage = 0; break; case MELEE_HIT_NORMAL: damageInfo->TargetState = VICTIMSTATE_HIT; + damageInfo->originalDamage = damageInfo->damage; break; case MELEE_HIT_CRIT: { @@ -1320,21 +1325,26 @@ void Unit::CalculateMeleeDamage(Unit* victim, uint32 damage, CalcDamageInfo* dam if (mod != 0) AddPct(damageInfo->damage, mod); + + damageInfo->originalDamage = damageInfo->damage; break; } case MELEE_HIT_PARRY: damageInfo->TargetState = VICTIMSTATE_PARRY; + damageInfo->originalDamage = damageInfo->damage; damageInfo->cleanDamage += damageInfo->damage; damageInfo->damage = 0; break; case MELEE_HIT_DODGE: damageInfo->TargetState = VICTIMSTATE_DODGE; + damageInfo->originalDamage = damageInfo->damage; damageInfo->cleanDamage += damageInfo->damage; damageInfo->damage = 0; break; case MELEE_HIT_BLOCK: damageInfo->TargetState = VICTIMSTATE_HIT; damageInfo->HitInfo |= HITINFO_BLOCK; + damageInfo->originalDamage = damageInfo->damage; // 30% damage blocked, double blocked amount if block is critical damageInfo->blocked_amount = CalculatePct(damageInfo->damage, damageInfo->target->isBlockCritical() ? damageInfo->target->GetBlockPercent() * 2 : damageInfo->target->GetBlockPercent()); damageInfo->damage -= damageInfo->blocked_amount; @@ -1344,6 +1354,7 @@ void Unit::CalculateMeleeDamage(Unit* victim, uint32 damage, CalcDamageInfo* dam { damageInfo->HitInfo |= HITINFO_GLANCING; damageInfo->TargetState = VICTIMSTATE_HIT; + damageInfo->originalDamage = damageInfo->damage; int32 leveldif = int32(victim->getLevel()) - int32(getLevel()); if (leveldif > 3) leveldif = 3; @@ -1358,6 +1369,7 @@ void Unit::CalculateMeleeDamage(Unit* victim, uint32 damage, CalcDamageInfo* dam damageInfo->TargetState = VICTIMSTATE_HIT; // 150% normal damage damageInfo->damage += (damageInfo->damage / 2); + damageInfo->originalDamage = damageInfo->damage; break; default: break; @@ -1372,6 +1384,7 @@ void Unit::CalculateMeleeDamage(Unit* victim, uint32 damage, CalcDamageInfo* dam resilienceReduction = damageInfo->damage - resilienceReduction; damageInfo->damage -= resilienceReduction; damageInfo->cleanDamage += resilienceReduction; + damageInfo->originalDamage -= resilienceReduction; // Calculate absorb resist if (int32(damageInfo->damage) > 0) @@ -1514,7 +1527,6 @@ void Unit::DealMeleeDamage(CalcDamageInfo* damageInfo, bool durabilityLoss) DamageInfo damageInfo(this, victim, damage, spellInfo, spellInfo->GetSchoolMask(), SPELL_DIRECT_DAMAGE, BASE_ATTACK); victim->CalcAbsorbResist(damageInfo); damage = damageInfo.GetDamage(); - // No Unit::CalcAbsorbResist here - opcode doesn't send that data - this damage is probably not affected by that victim->DealDamageMods(this, damage, nullptr); WorldPackets::CombatLog::SpellDamageShield damageShield; @@ -1522,6 +1534,7 @@ void Unit::DealMeleeDamage(CalcDamageInfo* damageInfo, bool durabilityLoss) damageShield.Defender = GetGUID(); damageShield.SpellID = spellInfo->Id; damageShield.TotalDamage = damage; + damageShield.OriginalDamage = damageInfo.GetOriginalDamage(); damageShield.OverKill = std::max(int32(damage) - int32(GetHealth()), 0); damageShield.SchoolMask = spellInfo->SchoolMask; damageShield.LogAbsorbed = damageInfo.GetAbsorb(); @@ -1881,6 +1894,7 @@ void Unit::CalcAbsorbResist(DamageInfo& damageInfo) CleanDamage cleanDamage = CleanDamage(splitDamage, 0, BASE_ATTACK, MELEE_HIT_NORMAL); DealDamage(caster, splitDamage, &cleanDamage, DIRECT_DAMAGE, damageInfo.GetSchoolMask(), (*itr)->GetSpellInfo(), false); log.damage = splitDamage; + log.originalDamage = splitDamage; log.absorb = split_absorb; SendSpellNonMeleeDamageLog(&log); @@ -2016,6 +2030,7 @@ void Unit::FakeAttackerStateUpdate(Unit* victim, WeaponAttackType attType /*= BA damageInfo.damageSchoolMask = GetMeleeDamageSchoolMask(); damageInfo.attackType = attType; damageInfo.damage = 0; + damageInfo.originalDamage = 0; damageInfo.cleanDamage = 0; damageInfo.absorb = 0; damageInfo.resist = 0; @@ -2573,7 +2588,7 @@ float Unit::GetUnitDodgeChance(WeaponAttackType attType, Unit const* victim) con float chance = 0.0f; float levelBonus = 0.0f; if (victim->GetTypeId() == TYPEID_PLAYER) - chance = victim->GetFloatValue(PLAYER_DODGE_PERCENTAGE); + chance = victim->GetFloatValue(ACTIVE_PLAYER_FIELD_DODGE_PERCENTAGE); else { if (!victim->IsTotem()) @@ -2617,7 +2632,7 @@ float Unit::GetUnitParryChance(WeaponAttackType attType, Unit const* victim) con tmpitem = playerVictim->GetWeaponForAttack(OFF_ATTACK, true); if (tmpitem) - chance = playerVictim->GetFloatValue(PLAYER_PARRY_PERCENTAGE); + chance = playerVictim->GetFloatValue(ACTIVE_PLAYER_FIELD_PARRY_PERCENTAGE); } } else @@ -2666,7 +2681,7 @@ float Unit::GetUnitBlockChance(WeaponAttackType /*attType*/, Unit const* victim) { Item* tmpitem = playerVictim->GetUseableItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND); if (tmpitem && !tmpitem->IsBroken() && tmpitem->GetTemplate()->GetInventoryType() == INVTYPE_SHIELD) - chance = playerVictim->GetFloatValue(PLAYER_BLOCK_PERCENTAGE); + chance = playerVictim->GetFloatValue(ACTIVE_PLAYER_FIELD_BLOCK_PERCENTAGE); } } else @@ -2693,13 +2708,13 @@ float Unit::GetUnitCriticalChance(WeaponAttackType attackType, Unit const* victi switch (attackType) { case BASE_ATTACK: - chance = GetFloatValue(PLAYER_CRIT_PERCENTAGE); + chance = GetFloatValue(ACTIVE_PLAYER_FIELD_CRIT_PERCENTAGE); break; case OFF_ATTACK: - chance = GetFloatValue(PLAYER_OFFHAND_CRIT_PERCENTAGE); + chance = GetFloatValue(ACTIVE_PLAYER_FIELD_OFFHAND_CRIT_PERCENTAGE); break; case RANGED_ATTACK: - chance = GetFloatValue(PLAYER_RANGED_CRIT_PERCENTAGE); + chance = GetFloatValue(ACTIVE_PLAYER_FIELD_RANGED_CRIT_PERCENTAGE); break; // Just for good manner default: @@ -4724,26 +4739,6 @@ int32 Unit::GetMaxNegativeAuraModifierByAffectMask(AuraType auratype, SpellInfo }); } -float Unit::GetResistanceBuffMods(SpellSchools school, bool positive) const -{ - return GetFloatValue(positive ? UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE+school : UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE+school); -} - -void Unit::SetResistanceBuffMods(SpellSchools school, bool positive, float val) -{ - SetFloatValue(positive ? UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE+school : UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE+school, val); -} - -void Unit::ApplyResistanceBuffModsMod(SpellSchools school, bool positive, float val, bool apply) -{ - ApplyModSignedFloatValue(positive ? UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE+school : UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE+school, val, apply); -} - -void Unit::ApplyResistanceBuffModsPercentMod(SpellSchools school, bool positive, float val, bool apply) -{ - ApplyPercentModFloatValue(positive ? UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE+school : UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE+school, val, apply); -} - void Unit::InitStatBuffMods() { for (uint8 i = STAT_STRENGTH; i < MAX_STATS; ++i) @@ -5005,6 +5000,7 @@ void Unit::SendSpellNonMeleeDamageLog(SpellNonMeleeDamage const* log) packet.CastID = log->castId; packet.SpellID = log->SpellID; packet.Damage = log->damage; + packet.OriginalDamage = log->originalDamage; if (log->damage > log->preHitHealth) packet.Overkill = log->damage - log->preHitHealth; else @@ -5017,9 +5013,9 @@ void Unit::SendSpellNonMeleeDamageLog(SpellNonMeleeDamage const* log) packet.Periodic = log->periodicLog; packet.Flags = log->HitInfo; - WorldPackets::Spells::SandboxScalingData sandboxScalingData; - if (sandboxScalingData.GenerateDataForUnits(log->attacker, log->target)) - packet.SandboxScaling = sandboxScalingData; + WorldPackets::Spells::ContentTuningParams contentTuningParams; + if (contentTuningParams.GenerateDataForUnits(log->attacker, log->target)) + packet.ContentTuning = contentTuningParams; SendCombatLogMessage(&packet); } @@ -5045,10 +5041,10 @@ void Unit::SendPeriodicAuraLog(SpellPeriodicAuraLogInfo* info) data.SpellID = aura->GetId(); data.LogData.Initialize(this); - /// @todo: should send more logs in one packet when multistrike WorldPackets::CombatLog::SpellPeriodicAuraLog::SpellLogEffect spellLogEffect; spellLogEffect.Effect = aura->GetAuraType(); spellLogEffect.Amount = info->damage; + spellLogEffect.OriginalDamage = info->originalDamage; spellLogEffect.OverHealOrKill = info->overDamage; spellLogEffect.SchoolMaskOrPower = aura->GetSpellInfo()->GetSchoolMask(); spellLogEffect.AbsorbedOrAmplitude = info->absorb; @@ -5056,10 +5052,10 @@ void Unit::SendPeriodicAuraLog(SpellPeriodicAuraLogInfo* info) spellLogEffect.Crit = info->critical; /// @todo: implement debug info - WorldPackets::Spells::SandboxScalingData sandboxScalingData; + WorldPackets::Spells::ContentTuningParams contentTuningParams; if (Unit* caster = ObjectAccessor::GetUnit(*this, aura->GetCasterGUID())) - if (sandboxScalingData.GenerateDataForUnits(caster, this)) - spellLogEffect.SandboxScaling = sandboxScalingData; + if (contentTuningParams.GenerateDataForUnits(caster, this)) + spellLogEffect.ContentTuning = contentTuningParams; data.Effects.push_back(spellLogEffect); @@ -5101,6 +5097,7 @@ void Unit::SendAttackStateUpdate(CalcDamageInfo* damageInfo) packet.AttackerGUID = damageInfo->attacker->GetGUID(); packet.VictimGUID = damageInfo->target->GetGUID(); packet.Damage = damageInfo->damage; + packet.OriginalDamage = damageInfo->originalDamage; int32 overkill = damageInfo->damage - damageInfo->target->GetHealth(); packet.OverDamage = (overkill < 0 ? -1 : overkill); @@ -5116,9 +5113,9 @@ void Unit::SendAttackStateUpdate(CalcDamageInfo* damageInfo) packet.LogData.Initialize(damageInfo->attacker); - WorldPackets::Spells::SandboxScalingData sandboxScalingData; - if (sandboxScalingData.GenerateDataForUnits(damageInfo->attacker, damageInfo->target)) - packet.SandboxScaling = sandboxScalingData; + WorldPackets::Spells::ContentTuningParams contentTuningParams; + if (contentTuningParams.GenerateDataForUnits(damageInfo->attacker, damageInfo->target)) + packet.ContentTuning = contentTuningParams; SendCombatLogMessage(&packet); } @@ -5130,6 +5127,7 @@ void Unit::SendAttackStateUpdate(uint32 HitInfo, Unit* target, uint8 /*SwingType dmgInfo.attacker = this; dmgInfo.target = target; dmgInfo.damage = Damage - AbsorbDamage - Resist - BlockedAmount; + dmgInfo.originalDamage = Damage; dmgInfo.damageSchoolMask = damageSchoolMask; dmgInfo.absorb = AbsorbDamage; dmgInfo.resist = Resist; @@ -5899,7 +5897,7 @@ void Unit::SetMinion(Minion *minion, bool apply) { SetCritterGUID(minion->GetGUID()); if (GetTypeId() == TYPEID_PLAYER) - minion->SetGuidValue(UNIT_FIELD_BATTLE_PET_COMPANION_GUID, GetGuidValue(PLAYER_FIELD_SUMMONED_BATTLE_PET_ID)); + minion->SetGuidValue(UNIT_FIELD_BATTLE_PET_COMPANION_GUID, GetGuidValue(ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID)); } // PvP, FFAPvP @@ -6354,32 +6352,12 @@ void Unit::SendHealSpellLog(HealInfo& healInfo, bool critical /*= false*/) spellHealLog.TargetGUID = healInfo.GetTarget()->GetGUID(); spellHealLog.CasterGUID = healInfo.GetHealer()->GetGUID(); - spellHealLog.SpellID = healInfo.GetSpellInfo()->Id; spellHealLog.Health = healInfo.GetHeal(); + spellHealLog.OriginalHeal = healInfo.GetOriginalHeal(); spellHealLog.OverHeal = int32(healInfo.GetHeal()) - healInfo.GetEffectiveHeal(); spellHealLog.Absorbed = healInfo.GetAbsorb(); - spellHealLog.Crit = critical; - - /// @todo: 6.x Has to be implemented - /* - packet.ReadBit("Multistrike"); - - var hasCritRollMade = packet.ReadBit("HasCritRollMade"); - var hasCritRollNeeded = packet.ReadBit("HasCritRollNeeded"); - var hasLogData = packet.ReadBit("HasLogData"); - - if (hasCritRollMade) - packet.ReadSingle("CritRollMade"); - - if (hasCritRollNeeded) - packet.ReadSingle("CritRollNeeded"); - - if (hasLogData) - SpellParsers.ReadSpellCastLogData(packet); - */ - spellHealLog.LogData.Initialize(healInfo.GetTarget()); SendCombatLogMessage(&spellHealLog); } @@ -6514,7 +6492,7 @@ float Unit::SpellDamagePctDone(Unit* victim, SpellInfo const* spellProto, Damage { for (uint32 i = 0; i < MAX_SPELL_SCHOOL; ++i) if (spellProto->GetSchoolMask() & (1 << i)) - maxModDamagePercentSchool = std::max(maxModDamagePercentSchool, GetFloatValue(PLAYER_FIELD_MOD_DAMAGE_DONE_PCT + i)); + maxModDamagePercentSchool = std::max(maxModDamagePercentSchool, GetFloatValue(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT + i)); } else maxModDamagePercentSchool = GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, spellProto->GetSchoolMask()); @@ -6654,7 +6632,7 @@ int32 Unit::SpellBaseDamageBonusDone(SpellSchoolMask schoolMask) const { if (GetTypeId() == TYPEID_PLAYER) { - float overrideSP = GetFloatValue(PLAYER_FIELD_OVERRIDE_SPELL_POWER_BY_AP_PCT); + float overrideSP = GetFloatValue(ACTIVE_PLAYER_FIELD_OVERRIDE_SPELL_POWER_BY_AP_PCT); if (overrideSP > 0.0f) return int32(CalculatePct(GetTotalAttackPowerValue(BASE_ATTACK), overrideSP) + 0.5f); } @@ -6734,7 +6712,7 @@ float Unit::GetUnitSpellCriticalChance(Unit* victim, SpellInfo const* spellProto crit_chance = 0.0f; // For other schools else if (GetTypeId() == TYPEID_PLAYER) - crit_chance = GetFloatValue(PLAYER_SPELL_CRIT_PERCENTAGE1); + crit_chance = GetFloatValue(ACTIVE_PLAYER_FIELD_SPELL_CRIT_PERCENTAGE1); else crit_chance = (float)m_baseSpellCritChance; // taken @@ -6975,7 +6953,7 @@ float Unit::SpellHealingPctDone(Unit* /*victim*/, SpellInfo const* spellProto) c return 1.0f; if (IsPlayer()) - return GetFloatValue(PLAYER_FIELD_MOD_HEALING_DONE_PCT); + return GetFloatValue(ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_PCT); float DoneTotalMod = 1.0f; @@ -7074,7 +7052,7 @@ int32 Unit::SpellBaseHealingBonusDone(SpellSchoolMask schoolMask) const { if (GetTypeId() == TYPEID_PLAYER) { - float overrideSP = GetFloatValue(PLAYER_FIELD_OVERRIDE_SPELL_POWER_BY_AP_PCT); + float overrideSP = GetFloatValue(ACTIVE_PLAYER_FIELD_OVERRIDE_SPELL_POWER_BY_AP_PCT); if (overrideSP > 0.0f) return int32(CalculatePct(GetTotalAttackPowerValue(BASE_ATTACK), overrideSP) + 0.5f); } @@ -7346,7 +7324,7 @@ uint32 Unit::MeleeDamageBonusDone(Unit* victim, uint32 pdamage, WeaponAttackType { for (uint32 i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i) if (spellProto->GetSchoolMask() & (1 << i)) - maxModDamagePercentSchool = std::max(maxModDamagePercentSchool, GetFloatValue(PLAYER_FIELD_MOD_DAMAGE_DONE_PCT + i)); + maxModDamagePercentSchool = std::max(maxModDamagePercentSchool, GetFloatValue(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT + i)); } else maxModDamagePercentSchool = GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, spellProto->GetSchoolMask()); @@ -9337,6 +9315,19 @@ Stats Unit::GetStatByAuraGroup(UnitMods unitMod) const return stat; } +void Unit::UpdateResistances(uint32 school) +{ + if (school > SPELL_SCHOOL_NORMAL) + { + UnitMods unitMod = UnitMods(UNIT_MOD_RESISTANCE_START + school); + + SetResistance(SpellSchools(school), int32(m_auraModifiersGroup[unitMod][BASE_VALUE])); + SetBonusResistanceMod(SpellSchools(school), int32(GetTotalAuraModValue(unitMod) - GetResistance(SpellSchools(school)))); + } + else + UpdateArmor(); +} + float Unit::GetTotalAttackPowerValue(WeaponAttackType attType) const { if (attType == RANGED_ATTACK) @@ -10340,9 +10331,11 @@ bool Unit::IsPolymorphed() const return spellInfo->GetSpellSpecific() == SPELL_SPECIFIC_MAGE_POLYMORPH; } -void Unit::SetDisplayId(uint32 modelId) +void Unit::SetDisplayId(uint32 modelId, float displayScale /*= 1.f*/) { SetUInt32Value(UNIT_FIELD_DISPLAYID, modelId); + SetFloatValue(UNIT_FIELD_DISPLAY_SCALE, displayScale); + // Set Gender by modelId if (CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelInfo(modelId)) SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, minfo->gender); @@ -10365,7 +10358,7 @@ void Unit::RestoreDisplayId(bool ignorePositiveAurasPreventingMounting /*= false if (!ignorePositiveAurasPreventingMounting) handledAura = (*i); else if (CreatureTemplate const* ci = sObjectMgr->GetCreatureTemplate((*i)->GetMiscValue())) - if (!IsDisallowedMountForm((*i)->GetId(), FORM_NONE, sObjectMgr->ChooseDisplayId(ci))) + if (!IsDisallowedMountForm((*i)->GetId(), FORM_NONE, ObjectMgr::ChooseDisplayId(ci)->CreatureDisplayID)) handledAura = (*i); } // prefer negative auras @@ -11686,7 +11679,7 @@ bool Unit::CreateVehicleKit(uint32 id, uint32 creatureEntry, bool loading /*= fa return false; m_vehicleKit = new Vehicle(this, vehInfo, creatureEntry); - m_updateFlag |= UPDATEFLAG_VEHICLE; + m_updateFlag.Vehicle = true; m_unitTypeMask |= UNIT_MASK_VEHICLE; if (!loading) @@ -11708,7 +11701,7 @@ void Unit::RemoveVehicleKit(bool onRemoveFromWorld /*= false*/) m_vehicleKit = NULL; - m_updateFlag &= ~UPDATEFLAG_VEHICLE; + m_updateFlag.Vehicle = false; m_unitTypeMask &= ~UNIT_MASK_VEHICLE; RemoveFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK | UNIT_NPC_FLAG_PLAYER_VEHICLE); } @@ -13121,15 +13114,17 @@ void Unit::SendClearTarget() SendMessageToSet(breakTarget.Write(), false); } -uint32 Unit::GetResistance(SpellSchoolMask mask) const +int32 Unit::GetResistance(SpellSchoolMask mask) const { - int32 resist = -1; + Optional<int32> resist; for (int i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i) - if (mask & (1 << i) && (resist < 0 || resist > int32(GetResistance(SpellSchools(i))))) - resist = int32(GetResistance(SpellSchools(i))); + { + int32 schoolResistance = GetResistance(SpellSchools(i)) + GetBonusResistanceMod(SpellSchools(i)); + if (mask & (1 << i) && (!resist || *resist > schoolResistance)) + resist = schoolResistance; + } - // resist value will never be negative here - return uint32(resist); + return resist ? *resist : 0; } void CharmInfo::SetIsCommandAttack(bool val) @@ -13673,7 +13668,7 @@ void Unit::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) if (target == this) visibleFlag |= UF_FLAG_PRIVATE; else if (GetTypeId() == TYPEID_PLAYER) - valCount = PLAYER_FIELD_END_NOT_SELF; + valCount = PLAYER_END; std::size_t blockCount = UpdateMask::GetBlockCount(valCount); @@ -13721,8 +13716,6 @@ void Unit::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) // FIXME: Some values at server stored in float format but must be sent to client in uint32 format // there are some float values which may be negative or can't get negative due to other checks else if ((index >= UNIT_FIELD_NEGSTAT && index < UNIT_FIELD_NEGSTAT + MAX_STATS) || - (index >= UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE && index < (UNIT_FIELD_RESISTANCEBUFFMODSPOSITIVE + MAX_SPELL_SCHOOL)) || - (index >= UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE && index < (UNIT_FIELD_RESISTANCEBUFFMODSNEGATIVE + MAX_SPELL_SCHOOL)) || (index >= UNIT_FIELD_POSSTAT && index < UNIT_FIELD_POSSTAT + MAX_STATS)) { *data << uint32(m_floatValues[index]); @@ -13756,7 +13749,7 @@ void Unit::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) if (cinfo->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER) if (target->IsGameMaster()) - displayId = cinfo->GetFirstVisibleModel(); + displayId = cinfo->GetFirstVisibleModel()->CreatureDisplayID; } *data << uint32(displayId); diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 74e2ed60f77..ad8ecf37733 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -576,6 +576,7 @@ class TC_GAME_API DamageInfo Unit* const m_attacker; Unit* const m_victim; uint32 m_damage; + uint32 const m_originalDamage; SpellInfo const* const m_spellInfo; SpellSchoolMask const m_schoolMask; DamageEffectType const m_damageType; @@ -601,6 +602,7 @@ class TC_GAME_API DamageInfo DamageEffectType GetDamageType() const { return m_damageType; } WeaponAttackType GetAttackType() const { return m_attackType; } uint32 GetDamage() const { return m_damage; } + uint32 GetOriginalDamage() const { return m_originalDamage; } uint32 GetAbsorb() const { return m_absorb; } uint32 GetResist() const { return m_resist; } uint32 GetBlock() const { return m_block; } @@ -614,6 +616,7 @@ class TC_GAME_API HealInfo Unit* const _healer; Unit* const _target; uint32 _heal; + uint32 const _originalHeal; uint32 _effectiveHeal; uint32 _absorb; SpellInfo const* const _spellInfo; @@ -629,6 +632,7 @@ class TC_GAME_API HealInfo Unit* GetHealer() const { return _healer; } Unit* GetTarget() const { return _target; } uint32 GetHeal() const { return _heal; } + uint32 GetOriginalHeal() const { return _originalHeal; } uint32 GetEffectiveHeal() const { return _effectiveHeal; } uint32 GetAbsorb() const { return _absorb; } SpellInfo const* GetSpellInfo() const { return _spellInfo; }; @@ -682,6 +686,7 @@ struct CalcDamageInfo Unit *target; // Target for damage uint32 damageSchoolMask; uint32 damage; + uint32 originalDamage; uint32 absorb; uint32 resist; uint32 blocked_amount; @@ -706,6 +711,7 @@ struct TC_GAME_API SpellNonMeleeDamage uint32 SpellID; uint32 SpellXSpellVisualID; uint32 damage; + uint32 originalDamage; uint32 schoolMask; uint32 absorb; uint32 resist; @@ -720,11 +726,12 @@ struct TC_GAME_API SpellNonMeleeDamage struct SpellPeriodicAuraLogInfo { - SpellPeriodicAuraLogInfo(AuraEffect const* _auraEff, uint32 _damage, uint32 _overDamage, uint32 _absorb, uint32 _resist, float _multiplier, bool _critical) - : auraEff(_auraEff), damage(_damage), overDamage(_overDamage), absorb(_absorb), resist(_resist), multiplier(_multiplier), critical(_critical){ } + SpellPeriodicAuraLogInfo(AuraEffect const* _auraEff, uint32 _damage, uint32 _originalDamage, uint32 _overDamage, uint32 _absorb, uint32 _resist, float _multiplier, bool _critical) + : auraEff(_auraEff), damage(_damage), originalDamage(_originalDamage), overDamage(_overDamage), absorb(_absorb), resist(_resist), multiplier(_multiplier), critical(_critical){ } AuraEffect const* auraEff; uint32 damage; + uint32 originalDamage; uint32 overDamage; // overkill/overheal uint32 absorb; uint32 resist; @@ -1033,12 +1040,18 @@ class TC_GAME_API Unit : public WorldObject float GetStat(Stats stat) const { return float(GetUInt32Value(UNIT_FIELD_STAT+stat)); } void SetStat(Stats stat, int32 val) { SetStatInt32Value(UNIT_FIELD_STAT+stat, val); } - uint32 GetArmor() const { return GetResistance(SPELL_SCHOOL_NORMAL); } - void SetArmor(int32 val) { SetResistance(SPELL_SCHOOL_NORMAL, val); } + uint32 GetArmor() const { return GetResistance(SPELL_SCHOOL_NORMAL) + GetBonusResistanceMod(SPELL_SCHOOL_NORMAL); } + void SetArmor(int32 val, int32 bonusVal) + { + SetResistance(SPELL_SCHOOL_NORMAL, val); + SetBonusResistanceMod(SPELL_SCHOOL_NORMAL, bonusVal); + } - uint32 GetResistance(SpellSchools school) const { return GetUInt32Value(UNIT_FIELD_RESISTANCES+school); } - uint32 GetResistance(SpellSchoolMask mask) const; - void SetResistance(SpellSchools school, int32 val) { SetStatInt32Value(UNIT_FIELD_RESISTANCES+school, val); } + int32 GetResistance(SpellSchools school) const { return GetUInt32Value(UNIT_FIELD_RESISTANCES + school); } + int32 GetBonusResistanceMod(SpellSchools school) const { return GetUInt32Value(UNIT_FIELD_BONUS_RESISTANCE_MODS + school); } + int32 GetResistance(SpellSchoolMask mask) const; + void SetResistance(SpellSchools school, int32 val) { SetStatInt32Value(UNIT_FIELD_RESISTANCES + school, val); } + void SetBonusResistanceMod(SpellSchools school, int32 val) { SetStatInt32Value(UNIT_FIELD_BONUS_RESISTANCE_MODS + school, val); } uint64 GetHealth() const { return GetUInt64Value(UNIT_FIELD_HEALTH); } uint64 GetMaxHealth() const { return GetUInt64Value(UNIT_FIELD_MAXHEALTH); } @@ -1533,10 +1546,6 @@ class TC_GAME_API Unit : public WorldObject int32 GetMaxPositiveAuraModifierByAffectMask(AuraType auratype, SpellInfo const* affectedSpell) const; int32 GetMaxNegativeAuraModifierByAffectMask(AuraType auratype, SpellInfo const* affectedSpell) const; - float GetResistanceBuffMods(SpellSchools school, bool positive) const; - void SetResistanceBuffMods(SpellSchools school, bool positive, float val); - void ApplyResistanceBuffModsMod(SpellSchools school, bool positive, float val, bool apply); - void ApplyResistanceBuffModsPercentMod(SpellSchools school, bool positive, float val, bool apply); void InitStatBuffMods(); void ApplyStatBuffMod(Stats stat, float val, bool apply); void ApplyStatPercentBuffMod(Stats stat, float val, bool apply); @@ -1620,7 +1629,7 @@ class TC_GAME_API Unit : public WorldObject void SetCanModifyStats(bool modifyStats) { m_canModifyStats = modifyStats; } virtual bool UpdateStats(Stats stat) = 0; virtual bool UpdateAllStats() = 0; - virtual void UpdateResistances(uint32 school) = 0; + virtual void UpdateResistances(uint32 school); virtual void UpdateAllResistances(); virtual void UpdateArmor() = 0; virtual void UpdateMaxHealth() = 0; @@ -1675,10 +1684,11 @@ class TC_GAME_API Unit : public WorldObject void UpdateInterruptMask(); uint32 GetDisplayId() const { return GetUInt32Value(UNIT_FIELD_DISPLAYID); } - virtual void SetDisplayId(uint32 modelId); + virtual void SetDisplayId(uint32 modelId, float displayScale = 1.f); uint32 GetNativeDisplayId() const { return GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID); } + float GetNativeDisplayScale() const { return GetFloatValue(UNIT_FIELD_NATIVE_X_DISPLAY_SCALE); } void RestoreDisplayId(bool ignorePositiveAurasPreventingMounting = false); - void SetNativeDisplayId(uint32 modelId) { SetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID, modelId); } + void SetNativeDisplayId(uint32 displayId, float displayScale = 1.f) { SetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID, displayId); SetFloatValue(UNIT_FIELD_NATIVE_X_DISPLAY_SCALE, displayScale); } void setTransForm(uint32 spellid) { m_transform = spellid;} uint32 getTransForm() const { return m_transform;} diff --git a/src/server/game/Globals/AreaTriggerDataStore.cpp b/src/server/game/Globals/AreaTriggerDataStore.cpp index 903525c90f5..ecbaac165a6 100644 --- a/src/server/game/Globals/AreaTriggerDataStore.cpp +++ b/src/server/game/Globals/AreaTriggerDataStore.cpp @@ -147,8 +147,8 @@ void AreaTriggerDataStore::LoadAreaTriggerTemplates() while (templates->NextRow()); } - // 0 1 2 3 4 5 6 7 8 - if (QueryResult areatriggerSpellMiscs = WorldDatabase.Query("SELECT SpellMiscId, AreaTriggerId, MoveCurveId, ScaleCurveId, MorphCurveId, FacingCurveId, DecalPropertiesId, TimeToTarget, TimeToTargetScale FROM `spell_areatrigger`")) + // 0 1 2 3 4 5 6 7 8 9 10 + if (QueryResult areatriggerSpellMiscs = WorldDatabase.Query("SELECT SpellMiscId, AreaTriggerId, MoveCurveId, ScaleCurveId, MorphCurveId, FacingCurveId, AnimId, AnimKitId, DecalPropertiesId, TimeToTarget, TimeToTargetScale FROM `spell_areatrigger`")) { do { @@ -182,10 +182,13 @@ void AreaTriggerDataStore::LoadAreaTriggerTemplates() #undef VALIDATE_AND_SET_CURVE - miscTemplate.DecalPropertiesId = areatriggerSpellMiscFields[6].GetUInt32(); + miscTemplate.AnimId = areatriggerSpellMiscFields[6].GetInt32(); + miscTemplate.AnimKitId = areatriggerSpellMiscFields[7].GetInt32(); - miscTemplate.TimeToTarget = areatriggerSpellMiscFields[7].GetUInt32(); - miscTemplate.TimeToTargetScale = areatriggerSpellMiscFields[8].GetUInt32(); + miscTemplate.DecalPropertiesId = areatriggerSpellMiscFields[8].GetUInt32(); + + miscTemplate.TimeToTarget = areatriggerSpellMiscFields[9].GetUInt32(); + miscTemplate.TimeToTargetScale = areatriggerSpellMiscFields[10].GetUInt32(); miscTemplate.SplinePoints = std::move(splinesBySpellMisc[miscTemplate.MiscId]); diff --git a/src/server/game/Globals/ConversationDataStore.cpp b/src/server/game/Globals/ConversationDataStore.cpp index af2a416e000..9d57f6d0a17 100644 --- a/src/server/game/Globals/ConversationDataStore.cpp +++ b/src/server/game/Globals/ConversationDataStore.cpp @@ -150,7 +150,7 @@ void ConversationDataStore::LoadConversationTemplates() TC_LOG_INFO("server.loading", ">> Loaded 0 Conversation actors. DB table `conversation_actors` is empty."); } - if (QueryResult templates = WorldDatabase.Query("SELECT Id, FirstLineId, LastLineEndTime, ScriptName FROM conversation_template")) + if (QueryResult templates = WorldDatabase.Query("SELECT Id, FirstLineId, LastLineEndTime, TextureKitId, ScriptName FROM conversation_template")) { uint32 oldMSTime = getMSTime(); @@ -162,7 +162,8 @@ void ConversationDataStore::LoadConversationTemplates() conversationTemplate.Id = fields[0].GetUInt32(); conversationTemplate.FirstLineId = fields[1].GetUInt32(); conversationTemplate.LastLineEndTime = fields[2].GetUInt32(); - conversationTemplate.ScriptId = sObjectMgr->GetScriptId(fields[3].GetString()); + conversationTemplate.TextureKitId = fields[3].GetUInt32(); + conversationTemplate.ScriptId = sObjectMgr->GetScriptId(fields[4].GetString()); conversationTemplate.Actors = std::move(actorsByConversation[conversationTemplate.Id]); conversationTemplate.ActorGuids = std::move(actorGuidsByConversation[conversationTemplate.Id]); @@ -184,7 +185,7 @@ void ConversationDataStore::LoadConversationTemplates() currentConversationLine = sConversationLineStore.AssertEntry(currentConversationLine->NextConversationLineID); } - _conversationTemplateStore[conversationTemplate.Id] = conversationTemplate; + _conversationTemplateStore[conversationTemplate.Id] = std::move(conversationTemplate); } while (templates->NextRow()); diff --git a/src/server/game/Globals/ConversationDataStore.h b/src/server/game/Globals/ConversationDataStore.h index e6e750455d5..d4d53a2cd7d 100644 --- a/src/server/game/Globals/ConversationDataStore.h +++ b/src/server/game/Globals/ConversationDataStore.h @@ -28,7 +28,6 @@ enum ConversationLineFlags CONVERSATION_LINE_FLAG_NOTIFY_STARTED = 0x1 // Client will send CMSG_CONVERSATION_LINE_STARTED when it runs this line }; -#pragma pack(push, 1) struct ConversationActorTemplate { uint32 Id; @@ -36,6 +35,7 @@ struct ConversationActorTemplate uint32 CreatureModelId; }; +#pragma pack(push, 1) struct ConversationLineTemplate { uint32 Id; // Link to ConversationLine.db2 @@ -52,6 +52,7 @@ struct ConversationTemplate uint32 Id; uint32 FirstLineId; // Link to ConversationLine.db2 uint32 LastLineEndTime; // Time in ms after conversation creation the last line fades out + uint32 TextureKitId; // Background texture std::vector<ConversationActorTemplate const*> Actors; std::vector<ObjectGuid::LowType> ActorGuids; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 2dd2753cde3..d0b70bf3d8a 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -54,6 +54,7 @@ #include "VMapFactory.h" #include "World.h" #include <G3D/g3dmath.h> +#include <numeric> ScriptMapMap sSpellScripts; ScriptMapMap sEventScripts; @@ -171,30 +172,37 @@ ExtendedPlayerName ExtractExtendedPlayerName(std::string const& name) LanguageDesc lang_description[LANGUAGES_COUNT] = { - { LANG_ADDON, 0, 0 }, - { LANG_UNIVERSAL, 0, 0 }, - { LANG_ORCISH, 669, SKILL_LANG_ORCISH }, - { LANG_DARNASSIAN, 671, SKILL_LANG_DARNASSIAN }, - { LANG_TAURAHE, 670, SKILL_LANG_TAURAHE }, - { LANG_DWARVISH, 672, SKILL_LANG_DWARVEN }, - { LANG_COMMON, 668, SKILL_LANG_COMMON }, - { LANG_DEMONIC, 815, SKILL_LANG_DEMON_TONGUE }, - { LANG_TITAN, 816, SKILL_LANG_TITAN }, - { LANG_THALASSIAN, 813, SKILL_LANG_THALASSIAN }, - { LANG_DRACONIC, 814, SKILL_LANG_DRACONIC }, - { LANG_KALIMAG, 817, SKILL_LANG_OLD_TONGUE }, - { LANG_GNOMISH, 7340, SKILL_LANG_GNOMISH }, - { LANG_TROLL, 7341, SKILL_LANG_TROLL }, - { LANG_GUTTERSPEAK, 17737, SKILL_LANG_FORSAKEN }, - { LANG_DRAENEI, 29932, SKILL_LANG_DRAENEI }, - { LANG_ZOMBIE, 0, 0 }, - { LANG_GNOMISH_BINARY, 0, 0 }, - { LANG_GOBLIN_BINARY, 0, 0 }, - { LANG_WORGEN, 69270, SKILL_LANG_GILNEAN }, - { LANG_GOBLIN, 69269, SKILL_LANG_GOBLIN }, - { LANG_PANDAREN_NEUTRAL, 108127, SKILL_LANG_PANDAREN_NEUTRAL }, - { LANG_PANDAREN_ALLIANCE, 108130, SKILL_LANG_PANDAREN_ALLIANCE }, - { LANG_PANDAREN_HORDE, 108131, SKILL_LANG_PANDAREN_HORDE } + { LANG_ADDON, 0, 0 }, + { LANG_ADDON_LOGGED, 0, 0 }, + { LANG_UNIVERSAL, 0, 0 }, + { LANG_ORCISH, 669, SKILL_LANGUAGE_ORCISH }, + { LANG_DARNASSIAN, 671, SKILL_LANGUAGE_DARNASSIAN }, + { LANG_TAURAHE, 670, SKILL_LANGUAGE_TAURAHE }, + { LANG_DWARVISH, 672, SKILL_LANGUAGE_DWARVEN }, + { LANG_COMMON, 668, SKILL_LANGUAGE_COMMON }, + { LANG_DEMONIC, 815, SKILL_LANGUAGE_DEMON_TONGUE }, + { LANG_TITAN, 816, SKILL_LANGUAGE_TITAN }, + { LANG_THALASSIAN, 813, SKILL_LANGUAGE_THALASSIAN }, + { LANG_DRACONIC, 814, SKILL_LANGUAGE_DRACONIC }, + { LANG_KALIMAG, 265462, SKILL_LANGUAGE_OLD_TONGUE }, + { LANG_GNOMISH, 7340, SKILL_LANGUAGE_GNOMISH }, + { LANG_TROLL, 7341, SKILL_LANGUAGE_TROLL }, + { LANG_GUTTERSPEAK, 17737, SKILL_LANGUAGE_FORSAKEN }, + { LANG_DRAENEI, 29932, SKILL_LANGUAGE_DRAENEI }, + { LANG_ZOMBIE, 265467, 0 }, + { LANG_GNOMISH_BINARY, 265460, 0 }, + { LANG_GOBLIN_BINARY, 265461, 0 }, + { LANG_WORGEN, 69270, SKILL_LANGUAGE_GILNEAN }, + { LANG_GOBLIN, 69269, SKILL_LANGUAGE_GOBLIN }, + { LANG_PANDAREN_NEUTRAL, 108127, SKILL_LANGUAGE_PANDAREN_NEUTRAL }, + { LANG_PANDAREN_ALLIANCE, 108130, 0 }, + { LANG_PANDAREN_HORDE, 108131, 0 }, + { LANG_SPRITE, 265466, 0 }, + { LANG_SHATH_YAR, 265465, 0 }, + { LANG_NERGLISH, 265464, 0 }, + { LANG_MOONKIN, 265463, 0 }, + { LANG_SHALASSIAN, 262439, SKILL_LANGUAGE_SHALASSIAN }, + { LANG_THALASSIAN_2, 262454, SKILL_LANGUAGE_THALASSIAN_2 } }; LanguageDesc const* GetLanguageDescByID(uint32 lang) @@ -404,21 +412,21 @@ void ObjectMgr::LoadCreatureTemplates() { uint32 oldMSTime = getMSTime(); - // 0 1 2 3 4 5 6 7 8 - QueryResult result = WorldDatabase.Query("SELECT entry, difficulty_entry_1, difficulty_entry_2, difficulty_entry_3, KillCredit1, KillCredit2, modelid1, modelid2, modelid3, " - // 9 10 11 12 13 14 15 16 17 18 19 20 - "modelid4, name, femaleName, subname, TitleAlt, IconName, gossip_menu_id, minlevel, maxlevel, HealthScalingExpansion, RequiredExpansion, VignetteID, " - // 21 22 23 24 25 26 27 28 29 30 31 + // 0 1 2 3 4 5 6 7 8 + QueryResult result = WorldDatabase.Query("SELECT entry, difficulty_entry_1, difficulty_entry_2, difficulty_entry_3, KillCredit1, KillCredit2, name, femaleName, subname, " + // 9 10 11 12 13 14 15 16 + "TitleAlt, IconName, gossip_menu_id, minlevel, maxlevel, HealthScalingExpansion, RequiredExpansion, VignetteID, " + // 17 18 19 20 21 22 23 24 25 26 27 "faction, npcflag, speed_walk, speed_run, scale, rank, dmgschool, BaseAttackTime, RangeAttackTime, BaseVariance, RangeVariance, " - // 32 33 34 35 36 37 38 39 + // 28 29 30 31 32 33 34 35 "unit_class, unit_flags, unit_flags2, unit_flags3, dynamicflags, family, trainer_class, type, " - // 40 41 42 43 44 45 46 47 48 49 50 + // 36 37 38 39 40 41 42 43 44 45 46 "type_flags, type_flags2, lootid, pickpocketloot, skinloot, resistance1, resistance2, resistance3, resistance4, resistance5, resistance6, " - // 51 52 53 54 55 56 57 58 59 60 61 62 63 + // 47 48 49 50 51 52 53 54 55 56 57 58 59 "spell1, spell2, spell3, spell4, spell5, spell6, spell7, spell8, VehicleId, mingold, maxgold, AIName, MovementType, " - // 64 65 66 67 68 69 70 71 72 + // 60 61 62 63 64 65 66 67 68 "InhabitType, HoverHeight, HealthModifier, HealthModifierExtra, ManaModifier, ManaModifierExtra, ArmorModifier, DamageModifier, ExperienceModifier, " - // 73 74 75 76 77 78 + // 69 70 71 72 73 74 "RacialLeader, movementId, RegenHealth, mechanic_immune_mask, flags_extra, ScriptName FROM creature_template"); if (!result) @@ -435,6 +443,9 @@ void ObjectMgr::LoadCreatureTemplates() } while (result->NextRow()); + // We load the creature models after loading but before checking + LoadCreatureTemplateModels(); + // Checking needs to be done after loading because of the difficulty self referencing for (CreatureTemplateContainer::const_iterator itr = _creatureTemplateStore.begin(); itr != _creatureTemplateStore.end(); ++itr) CheckCreatureTemplate(&itr->second); @@ -456,72 +467,121 @@ void ObjectMgr::LoadCreatureTemplate(Field* fields) for (uint8 i = 0; i < MAX_KILL_CREDIT; ++i) creatureTemplate.KillCredit[i] = fields[4 + i].GetUInt32(); - creatureTemplate.Modelid1 = fields[6].GetUInt32(); - creatureTemplate.Modelid2 = fields[7].GetUInt32(); - creatureTemplate.Modelid3 = fields[8].GetUInt32(); - creatureTemplate.Modelid4 = fields[9].GetUInt32(); - creatureTemplate.Name = fields[10].GetString(); - creatureTemplate.FemaleName = fields[11].GetString(); - creatureTemplate.SubName = fields[12].GetString(); - creatureTemplate.TitleAlt = fields[13].GetString(); - creatureTemplate.IconName = fields[14].GetString(); - creatureTemplate.GossipMenuId = fields[15].GetUInt32(); - creatureTemplate.minlevel = fields[16].GetInt16(); - creatureTemplate.maxlevel = fields[17].GetInt16(); - creatureTemplate.HealthScalingExpansion = fields[18].GetInt32(); - creatureTemplate.RequiredExpansion = fields[19].GetUInt32(); - creatureTemplate.VignetteID = fields[20].GetUInt32(); - creatureTemplate.faction = fields[21].GetUInt16(); - creatureTemplate.npcflag = fields[22].GetUInt64(); - creatureTemplate.speed_walk = fields[23].GetFloat(); - creatureTemplate.speed_run = fields[24].GetFloat(); - creatureTemplate.scale = fields[25].GetFloat(); - creatureTemplate.rank = uint32(fields[26].GetUInt8()); - creatureTemplate.dmgschool = uint32(fields[27].GetInt8()); - creatureTemplate.BaseAttackTime = fields[28].GetUInt32(); - creatureTemplate.RangeAttackTime = fields[29].GetUInt32(); - creatureTemplate.BaseVariance = fields[30].GetFloat(); - creatureTemplate.RangeVariance = fields[31].GetFloat(); - creatureTemplate.unit_class = uint32(fields[32].GetUInt8()); - creatureTemplate.unit_flags = fields[33].GetUInt32(); - creatureTemplate.unit_flags2 = fields[34].GetUInt32(); - creatureTemplate.unit_flags3 = fields[35].GetUInt32(); - creatureTemplate.dynamicflags = fields[36].GetUInt32(); - creatureTemplate.family = CreatureFamily(fields[37].GetUInt8()); - creatureTemplate.trainer_class = uint32(fields[38].GetUInt8()); - creatureTemplate.type = uint32(fields[39].GetUInt8()); - creatureTemplate.type_flags = fields[40].GetUInt32(); - creatureTemplate.type_flags2 = fields[41].GetUInt32(); - creatureTemplate.lootid = fields[42].GetUInt32(); - creatureTemplate.pickpocketLootId = fields[43].GetUInt32(); - creatureTemplate.SkinLootId = fields[44].GetUInt32(); + creatureTemplate.Name = fields[6].GetString(); + creatureTemplate.FemaleName = fields[7].GetString(); + creatureTemplate.SubName = fields[8].GetString(); + creatureTemplate.TitleAlt = fields[9].GetString(); + creatureTemplate.IconName = fields[10].GetString(); + creatureTemplate.GossipMenuId = fields[11].GetUInt32(); + creatureTemplate.minlevel = fields[12].GetInt16(); + creatureTemplate.maxlevel = fields[13].GetInt16(); + creatureTemplate.HealthScalingExpansion = fields[14].GetInt32(); + creatureTemplate.RequiredExpansion = fields[15].GetUInt32(); + creatureTemplate.VignetteID = fields[16].GetUInt32(); + creatureTemplate.faction = fields[17].GetUInt16(); + creatureTemplate.npcflag = fields[18].GetUInt64(); + creatureTemplate.speed_walk = fields[19].GetFloat(); + creatureTemplate.speed_run = fields[20].GetFloat(); + creatureTemplate.scale = fields[21].GetFloat(); + creatureTemplate.rank = uint32(fields[22].GetUInt8()); + creatureTemplate.dmgschool = uint32(fields[23].GetInt8()); + creatureTemplate.BaseAttackTime = fields[24].GetUInt32(); + creatureTemplate.RangeAttackTime = fields[25].GetUInt32(); + creatureTemplate.BaseVariance = fields[26].GetFloat(); + creatureTemplate.RangeVariance = fields[27].GetFloat(); + creatureTemplate.unit_class = uint32(fields[28].GetUInt8()); + creatureTemplate.unit_flags = fields[29].GetUInt32(); + creatureTemplate.unit_flags2 = fields[30].GetUInt32(); + creatureTemplate.unit_flags3 = fields[31].GetUInt32(); + creatureTemplate.dynamicflags = fields[32].GetUInt32(); + creatureTemplate.family = CreatureFamily(fields[33].GetUInt8()); + creatureTemplate.trainer_class = uint32(fields[34].GetUInt8()); + creatureTemplate.type = uint32(fields[35].GetUInt8()); + creatureTemplate.type_flags = fields[36].GetUInt32(); + creatureTemplate.type_flags2 = fields[37].GetUInt32(); + creatureTemplate.lootid = fields[38].GetUInt32(); + creatureTemplate.pickpocketLootId = fields[39].GetUInt32(); + creatureTemplate.SkinLootId = fields[40].GetUInt32(); for (uint8 i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i) - creatureTemplate.resistance[i] = fields[45 + i - 1].GetInt16(); + creatureTemplate.resistance[i] = fields[41 + i - 1].GetInt16(); for (uint8 i = 0; i < MAX_CREATURE_SPELLS; ++i) - creatureTemplate.spells[i] = fields[51 + i].GetUInt32(); - - creatureTemplate.VehicleId = fields[59].GetUInt32(); - creatureTemplate.mingold = fields[60].GetUInt32(); - creatureTemplate.maxgold = fields[61].GetUInt32(); - creatureTemplate.AIName = fields[62].GetString(); - creatureTemplate.MovementType = uint32(fields[63].GetUInt8()); - creatureTemplate.InhabitType = uint32(fields[64].GetUInt8()); - creatureTemplate.HoverHeight = fields[65].GetFloat(); - creatureTemplate.ModHealth = fields[66].GetFloat(); - creatureTemplate.ModHealthExtra = fields[67].GetFloat(); - creatureTemplate.ModMana = fields[68].GetFloat(); - creatureTemplate.ModManaExtra = fields[69].GetFloat(); - creatureTemplate.ModArmor = fields[70].GetFloat(); - creatureTemplate.ModDamage = fields[71].GetFloat(); - creatureTemplate.ModExperience = fields[72].GetFloat(); - creatureTemplate.RacialLeader = fields[73].GetBool(); - creatureTemplate.movementId = fields[74].GetUInt32(); - creatureTemplate.RegenHealth = fields[75].GetBool(); - creatureTemplate.MechanicImmuneMask = fields[76].GetUInt32(); - creatureTemplate.flags_extra = fields[77].GetUInt32(); - creatureTemplate.ScriptID = GetScriptId(fields[78].GetString()); + creatureTemplate.spells[i] = fields[47 + i].GetUInt32(); + + creatureTemplate.VehicleId = fields[55].GetUInt32(); + creatureTemplate.mingold = fields[56].GetUInt32(); + creatureTemplate.maxgold = fields[57].GetUInt32(); + creatureTemplate.AIName = fields[58].GetString(); + creatureTemplate.MovementType = uint32(fields[59].GetUInt8()); + creatureTemplate.InhabitType = uint32(fields[60].GetUInt8()); + creatureTemplate.HoverHeight = fields[61].GetFloat(); + creatureTemplate.ModHealth = fields[62].GetFloat(); + creatureTemplate.ModHealthExtra = fields[63].GetFloat(); + creatureTemplate.ModMana = fields[64].GetFloat(); + creatureTemplate.ModManaExtra = fields[65].GetFloat(); + creatureTemplate.ModArmor = fields[66].GetFloat(); + creatureTemplate.ModDamage = fields[67].GetFloat(); + creatureTemplate.ModExperience = fields[68].GetFloat(); + creatureTemplate.RacialLeader = fields[69].GetBool(); + creatureTemplate.movementId = fields[70].GetUInt32(); + creatureTemplate.RegenHealth = fields[71].GetBool(); + creatureTemplate.MechanicImmuneMask = fields[72].GetUInt32(); + creatureTemplate.flags_extra = fields[73].GetUInt32(); + creatureTemplate.ScriptID = GetScriptId(fields[74].GetString()); +} + +void ObjectMgr::LoadCreatureTemplateModels() +{ + uint32 oldMSTime = getMSTime(); + + // 0 1 2 3 + QueryResult result = WorldDatabase.Query("SELECT CreatureID, CreatureDisplayID, DisplayScale, Probability FROM creature_template_model ORDER BY Idx ASC"); + + if (!result) + { + TC_LOG_INFO("server.loading", ">> Loaded 0 creature template model definitions. DB table `creature_template_model` is empty."); + return; + } + + uint32 count = 0; + do + { + Field* fields = result->Fetch(); + + uint32 creatureId = fields[0].GetUInt32(); + uint32 creatureDisplayId = fields[1].GetUInt32(); + float displayScale = fields[2].GetFloat(); + float probability = fields[3].GetFloat(); + + CreatureTemplate const* cInfo = GetCreatureTemplate(creatureId); + if (!cInfo) + { + TC_LOG_ERROR("sql.sql", "Creature template (Entry: %u) does not exist but has a record in `creature_template_model`", creatureId); + continue; + } + + CreatureDisplayInfoEntry const* displayEntry = sCreatureDisplayInfoStore.LookupEntry(creatureDisplayId); + if (!displayEntry) + { + TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) lists non-existing CreatureDisplayID id (%u), this can crash the client.", creatureId, creatureDisplayId); + continue; + } + + CreatureModelInfo const* modelInfo = GetCreatureModelInfo(creatureDisplayId); + if (!modelInfo) + TC_LOG_ERROR("sql.sql", "No model data exist for `CreatureDisplayID` = %u listed by creature (Entry: %u).", creatureDisplayId, creatureId); + + if (displayScale <= 0.0f) + displayScale = 1.0f; + + const_cast<CreatureTemplate*>(cInfo)->Models.emplace_back(creatureDisplayId, displayScale, probability); + + ++count; + } + while (result->NextRow()); + + TC_LOG_INFO("server.loading", ">> Loaded %u creature template models in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); } void ObjectMgr::LoadCreatureTemplateAddons() @@ -860,76 +920,6 @@ void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo) const_cast<CreatureTemplate*>(cInfo)->faction = sFactionTemplateStore.AssertEntry(35)->ID; // this might seem stupid but all shit will would break if faction 35 did not exist } - // used later for scale - CreatureDisplayInfoEntry const* displayScaleEntry = nullptr; - - if (cInfo->Modelid1) - { - CreatureDisplayInfoEntry const* displayEntry = sCreatureDisplayInfoStore.LookupEntry(cInfo->Modelid1); - if (!displayEntry) - { - TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) lists non-existing Modelid1 id (%u), this can crash the client.", cInfo->Entry, cInfo->Modelid1); - const_cast<CreatureTemplate*>(cInfo)->Modelid1 = 0; - } - else - displayScaleEntry = displayEntry; - - CreatureModelInfo const* modelInfo = GetCreatureModelInfo(cInfo->Modelid1); - if (!modelInfo) - TC_LOG_ERROR("sql.sql", "No model data exist for `Modelid1` = %u listed by creature (Entry: %u).", cInfo->Modelid1, cInfo->Entry); - } - - if (cInfo->Modelid2) - { - CreatureDisplayInfoEntry const* displayEntry = sCreatureDisplayInfoStore.LookupEntry(cInfo->Modelid2); - if (!displayEntry) - { - TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) lists non-existing Modelid2 id (%u), this can crash the client.", cInfo->Entry, cInfo->Modelid2); - const_cast<CreatureTemplate*>(cInfo)->Modelid2 = 0; - } - else if (!displayScaleEntry) - displayScaleEntry = displayEntry; - - CreatureModelInfo const* modelInfo = GetCreatureModelInfo(cInfo->Modelid2); - if (!modelInfo) - TC_LOG_ERROR("sql.sql", "No model data exist for `Modelid2` = %u listed by creature (Entry: %u).", cInfo->Modelid2, cInfo->Entry); - } - - if (cInfo->Modelid3) - { - CreatureDisplayInfoEntry const* displayEntry = sCreatureDisplayInfoStore.LookupEntry(cInfo->Modelid3); - if (!displayEntry) - { - TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) lists non-existing Modelid3 id (%u), this can crash the client.", cInfo->Entry, cInfo->Modelid3); - const_cast<CreatureTemplate*>(cInfo)->Modelid3 = 0; - } - else if (!displayScaleEntry) - displayScaleEntry = displayEntry; - - CreatureModelInfo const* modelInfo = GetCreatureModelInfo(cInfo->Modelid3); - if (!modelInfo) - TC_LOG_ERROR("sql.sql", "No model data exist for `Modelid3` = %u listed by creature (Entry: %u).", cInfo->Modelid3, cInfo->Entry); - } - - if (cInfo->Modelid4) - { - CreatureDisplayInfoEntry const* displayEntry = sCreatureDisplayInfoStore.LookupEntry(cInfo->Modelid4); - if (!displayEntry) - { - TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) lists non-existing Modelid4 id (%u), this can crash the client.", cInfo->Entry, cInfo->Modelid4); - const_cast<CreatureTemplate*>(cInfo)->Modelid4 = 0; - } - else if (!displayScaleEntry) - displayScaleEntry = displayEntry; - - CreatureModelInfo const* modelInfo = GetCreatureModelInfo(cInfo->Modelid4); - if (!modelInfo) - TC_LOG_ERROR("sql.sql", "No model data exist for `Modelid4` = %u listed by creature (Entry: %u).", cInfo->Modelid4, cInfo->Entry); - } - - if (!displayScaleEntry) - TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) does not have any existing display id in Modelid1/Modelid2/Modelid3/Modelid4.", cInfo->Entry); - for (uint8 k = 0; k < MAX_KILL_CREDIT; ++k) { if (cInfo->KillCredit[k]) @@ -942,6 +932,11 @@ void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo) } } + if (!cInfo->Models.size()) + TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) does not have any existing display id in creature_template_model.", cInfo->Entry); + else if (std::accumulate(cInfo->Models.begin(), cInfo->Models.end(), 0.0f, [](float sum, CreatureModel const& model) { return sum + model.Probability; }) <= 0.0f) + TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) has zero total chance for all models in creature_template_model.", cInfo->Entry); + if (!cInfo->unit_class || ((1 << (cInfo->unit_class-1)) & CLASSMASK_ALL_CREATURES) == 0) { TC_LOG_ERROR("sql.sql", "Creature (Entry: %u) has invalid unit_class (%u) in creature_template. Set to 1 (UNIT_CLASS_WARRIOR).", cInfo->Entry, cInfo->unit_class); @@ -1022,15 +1017,6 @@ void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo) const_cast<CreatureTemplate*>(cInfo)->MovementType = IDLE_MOTION_TYPE; } - /// if not set custom creature scale then load scale from CreatureDisplayInfo.dbc - if (cInfo->scale <= 0.0f) - { - if (displayScaleEntry) - const_cast<CreatureTemplate*>(cInfo)->scale = displayScaleEntry->CreatureModelScale; - else - const_cast<CreatureTemplate*>(cInfo)->scale = 1.0f; - } - if (cInfo->HealthScalingExpansion < EXPANSION_LEVEL_CURRENT || cInfo->HealthScalingExpansion > (MAX_EXPANSIONS - 1)) { TC_LOG_ERROR("sql.sql", "Table `creature_template` lists creature (ID: %u) with invalid `HealthScalingExpansion` %i. Ignored and set to 0.", cInfo->Entry, cInfo->HealthScalingExpansion); @@ -1402,14 +1388,16 @@ CreatureModelInfo const* ObjectMgr::GetCreatureModelInfo(uint32 modelId) const return nullptr; } -uint32 ObjectMgr::ChooseDisplayId(CreatureTemplate const* cinfo, CreatureData const* data /*= nullptr*/) +CreatureModel const* ObjectMgr::ChooseDisplayId(CreatureTemplate const* cinfo, CreatureData const* data /*= nullptr*/) { // Load creature model (display id) if (data && data->displayid) - return data->displayid; + if (CreatureModel const* model = cinfo->GetModelWithDisplayId(data->displayid)) + return model; if (!(cinfo->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER)) - return cinfo->GetRandomValidModelId(); + if (CreatureModel const* model = cinfo->GetRandomValidModel()) + return model; // Triggers by default receive the invisible model return cinfo->GetFirstInvisibleModel(); @@ -1442,9 +1430,9 @@ void ObjectMgr::ChooseCreatureFlags(CreatureTemplate const* cInfo, uint64& npcFl } } -CreatureModelInfo const* ObjectMgr::GetCreatureModelRandomGender(uint32* displayID) const +CreatureModelInfo const* ObjectMgr::GetCreatureModelRandomGender(CreatureModel* model, CreatureTemplate const* creatureTemplate) const { - CreatureModelInfo const* modelInfo = GetCreatureModelInfo(*displayID); + CreatureModelInfo const* modelInfo = GetCreatureModelInfo(model->CreatureDisplayID); if (!modelInfo) return nullptr; @@ -1453,11 +1441,20 @@ CreatureModelInfo const* ObjectMgr::GetCreatureModelRandomGender(uint32* display { CreatureModelInfo const* minfo_tmp = GetCreatureModelInfo(modelInfo->displayId_other_gender); if (!minfo_tmp) - TC_LOG_ERROR("sql.sql", "Model (Entry: %u) has modelid_other_gender %u not found in table `creature_model_info`. ", *displayID, modelInfo->displayId_other_gender); + TC_LOG_ERROR("sql.sql", "Model (Entry: %u) has modelid_other_gender %u not found in table `creature_model_info`. ", model->CreatureDisplayID, modelInfo->displayId_other_gender); else { // DisplayID changed - *displayID = modelInfo->displayId_other_gender; + model->CreatureDisplayID = modelInfo->displayId_other_gender; + if (creatureTemplate) + { + auto itr = std::find_if(creatureTemplate->Models.begin(), creatureTemplate->Models.end(), [&](CreatureModel const& templateModel) + { + return templateModel.CreatureDisplayID == modelInfo->displayId_other_gender; + }); + if (itr != creatureTemplate->Models.end()) + *model = *itr; + } return minfo_tmp; } } @@ -3492,13 +3489,13 @@ void ObjectMgr::LoadPlayerInfo() do { Field* fields = result->Fetch(); - uint32 raceMask = fields[0].GetUInt32(); + uint64 raceMask = fields[0].GetUInt64(); uint32 classMask = fields[1].GetUInt32(); uint32 spellId = fields[2].GetUInt32(); if (raceMask != 0 && !(raceMask & RACEMASK_ALL_PLAYABLE)) { - TC_LOG_ERROR("sql.sql", "Wrong race mask %u in `playercreateinfo_spell_custom` table, ignoring.", raceMask); + TC_LOG_ERROR("sql.sql", "Wrong race mask " UI64FMTD " in `playercreateinfo_spell_custom` table, ignoring.", raceMask); continue; } @@ -3510,7 +3507,7 @@ void ObjectMgr::LoadPlayerInfo() for (uint32 raceIndex = RACE_HUMAN; raceIndex < MAX_RACES; ++raceIndex) { - if (raceMask == 0 || ((1 << (raceIndex - 1)) & raceMask)) + if (raceMask == 0 || ((UI64LIT(1) << (raceIndex - 1)) & raceMask)) { for (uint32 classIndex = CLASS_WARRIOR; classIndex < MAX_CLASSES; ++classIndex) { @@ -3552,13 +3549,13 @@ void ObjectMgr::LoadPlayerInfo() do { Field* fields = result->Fetch(); - uint32 raceMask = fields[0].GetUInt32(); + uint64 raceMask = fields[0].GetUInt64(); uint32 classMask = fields[1].GetUInt32(); uint32 spellId = fields[2].GetUInt32(); if (raceMask != 0 && !(raceMask & RACEMASK_ALL_PLAYABLE)) { - TC_LOG_ERROR("sql.sql", "Wrong race mask %u in `playercreateinfo_cast_spell` table, ignoring.", raceMask); + TC_LOG_ERROR("sql.sql", "Wrong race mask " UI64FMTD " in `playercreateinfo_cast_spell` table, ignoring.", raceMask); continue; } @@ -3570,7 +3567,7 @@ void ObjectMgr::LoadPlayerInfo() for (uint32 raceIndex = RACE_HUMAN; raceIndex < MAX_RACES; ++raceIndex) { - if (raceMask == 0 || ((1 << (raceIndex - 1)) & raceMask)) + if (raceMask == 0 || ((UI64LIT(1) << (raceIndex - 1)) & raceMask)) { for (uint32 classIndex = CLASS_WARRIOR; classIndex < MAX_CLASSES; ++classIndex) { @@ -3924,35 +3921,35 @@ void ObjectMgr::LoadQuests() mExclusiveQuestGroups.clear(); QueryResult result = WorldDatabase.Query("SELECT " - //0 1 2 3 4 5 6 7 8 9 10 11 - "ID, QuestType, QuestLevel, MaxScalingLevel, QuestPackageID, MinLevel, QuestSortID, QuestInfoID, SuggestedGroupNum, RewardNextQuest, RewardXPDifficulty, RewardXPMultiplier, " - //12 13 14 15 16 17 18 19 20 21 22 + //0 1 2 3 4 5 6 7 8 9 10 11 12 + "ID, QuestType, QuestLevel, ScalingFactionGroup, MaxScalingLevel, QuestPackageID, MinLevel, QuestSortID, QuestInfoID, SuggestedGroupNum, RewardNextQuest, RewardXPDifficulty, RewardXPMultiplier, " + //13 14 15 16 17 18 19 20 21 22 23 "RewardMoney, RewardMoneyDifficulty, RewardMoneyMultiplier, RewardBonusMoney, RewardDisplaySpell1, RewardDisplaySpell2, RewardDisplaySpell3, RewardSpell, RewardHonor, RewardKillHonor, StartItem, " - //23 24 25 26 27 - "RewardArtifactXPDifficulty, RewardArtifactXPMultiplier, RewardArtifactCategoryID, Flags, FlagsEx, " - //28 29 30 31 32 33 34 35 + //24 25 26 27 28 29 + "RewardArtifactXPDifficulty, RewardArtifactXPMultiplier, RewardArtifactCategoryID, Flags, FlagsEx, FlagsEx2, " + //30 31 32 33 34 35 36 37 "RewardItem1, RewardAmount1, ItemDrop1, ItemDropQuantity1, RewardItem2, RewardAmount2, ItemDrop2, ItemDropQuantity2, " - //36 37 38 39 40 41 42 43 + //38 39 40 41 42 43 44 45 "RewardItem3, RewardAmount3, ItemDrop3, ItemDropQuantity3, RewardItem4, RewardAmount4, ItemDrop4, ItemDropQuantity4, " - //44 45 46 47 48 49 + //46 47 48 49 50 51 "RewardChoiceItemID1, RewardChoiceItemQuantity1, RewardChoiceItemDisplayID1, RewardChoiceItemID2, RewardChoiceItemQuantity2, RewardChoiceItemDisplayID2, " - //50 51 52 53 54 55 + //52 53 54 55 56 57 "RewardChoiceItemID3, RewardChoiceItemQuantity3, RewardChoiceItemDisplayID3, RewardChoiceItemID4, RewardChoiceItemQuantity4, RewardChoiceItemDisplayID4, " - //56 57 58 59 60 61 + //58 59 60 61 62 63 "RewardChoiceItemID5, RewardChoiceItemQuantity5, RewardChoiceItemDisplayID5, RewardChoiceItemID6, RewardChoiceItemQuantity6, RewardChoiceItemDisplayID6, " - //62 63 64 65 66 67 68 69 70 71 - "POIContinent, POIx, POIy, POIPriority, RewardTitle, RewardArenaPoints, RewardSkillLineID, RewardNumSkillUps, PortraitGiver, PortraitTurnIn, " - //72 73 74 75 76 77 78 79 + //64 65 66 67 68 69 70 71 72 73 74 + "POIContinent, POIx, POIy, POIPriority, RewardTitle, RewardArenaPoints, RewardSkillLineID, RewardNumSkillUps, PortraitGiver, PortraitGiverMount, PortraitTurnIn, " + //75 76 77 78 79 80 81 82 "RewardFactionID1, RewardFactionValue1, RewardFactionOverride1, RewardFactionCapIn1, RewardFactionID2, RewardFactionValue2, RewardFactionOverride2, RewardFactionCapIn2, " - //80 81 82 83 84 85 86 87 + //83 84 85 86 87 88 89 90 "RewardFactionID3, RewardFactionValue3, RewardFactionOverride3, RewardFactionCapIn3, RewardFactionID4, RewardFactionValue4, RewardFactionOverride4, RewardFactionCapIn4, " - //88 89 90 91 92 + //91 92 93 94 95 "RewardFactionID5, RewardFactionValue5, RewardFactionOverride5, RewardFactionCapIn5, RewardFactionFlags, " - //93 94 95 96 97 98 99 100 + //96 97 98 99 100 101 102 103 "RewardCurrencyID1, RewardCurrencyQty1, RewardCurrencyID2, RewardCurrencyQty2, RewardCurrencyID3, RewardCurrencyQty3, RewardCurrencyID4, RewardCurrencyQty4, " - //101 102 103 104 105 106 107 - "AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, QuestRewardID, Expansion, " - //108 109 110 111 112 113 114 115 116 + //104 105 106 107 108 109 110 + "AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, TreasurePickerID, Expansion, " + //111 112 113 114 115 116 117 118 119 "LogTitle, LogDescription, QuestDescription, AreaDescription, PortraitGiverText, PortraitGiverName, PortraitTurnInText, PortraitTurnInName, QuestCompletionLog" " FROM quest_template"); if (!result) @@ -6174,7 +6171,7 @@ uint32 ObjectMgr::GetNearestTaxiNode(float x, float y, float z, uint32 mapid, ui if (!node || node->ContinentID != mapid || !(node->Flags & requireFlag)) continue; - uint8 field = (uint8)((node->ID - 1) / 8); + uint32 field = uint32((node->ID - 1) / 8); uint32 submask = 1 << ((node->ID - 1) % 8); // skip not taxi network nodes @@ -6227,7 +6224,8 @@ void ObjectMgr::GetTaxiPath(uint32 source, uint32 destination, uint32 &path, uin uint32 ObjectMgr::GetTaxiMountDisplayId(uint32 id, uint32 team, bool allowed_alt_team /* = false */) { - uint32 mount_id = 0; + CreatureModel mountModel; + CreatureTemplate const* mount_info = nullptr; // select mount creature id TaxiNodesEntry const* node = sTaxiNodesStore.LookupEntry(id); @@ -6247,22 +6245,23 @@ uint32 ObjectMgr::GetTaxiMountDisplayId(uint32 id, uint32 team, bool allowed_alt mount_entry = team == ALLIANCE ? node->MountCreatureID[0] : node->MountCreatureID[1]; } - CreatureTemplate const* mount_info = GetCreatureTemplate(mount_entry); + mount_info = GetCreatureTemplate(mount_entry); if (mount_info) { - mount_id = mount_info->GetRandomValidModelId(); - if (!mount_id) + CreatureModel const* model = mount_info->GetRandomValidModel(); + if (!model) { TC_LOG_ERROR("sql.sql", "No displayid found for the taxi mount with the entry %u! Can't load it!", mount_entry); return 0; } + mountModel = *model; } } // minfo is not actually used but the mount_id was updated - GetCreatureModelRandomGender(&mount_id); + GetCreatureModelRandomGender(&mountModel, mount_info); - return mount_id; + return mountModel.CreatureDisplayID; } void ObjectMgr::LoadGraveyardZones() @@ -7027,8 +7026,8 @@ void ObjectMgr::LoadGameObjectTemplate() "Data0, Data1, Data2, Data3, Data4, Data5, Data6, Data7, Data8, Data9, Data10, Data11, Data12, " // 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 "Data13, Data14, Data15, Data16, Data17, Data18, Data19, Data20, Data21, Data22, Data23, Data24, Data25, Data26, Data27, Data28, " - // 37 38 39 40 41 42 43 - "Data29, Data30, Data31, Data32, RequiredLevel, AIName, ScriptName " + // 37 38 39 40 41 42 43 44 + "Data29, Data30, Data31, Data32, Data33, RequiredLevel, AIName, ScriptName " "FROM gameobject_template"); if (!result) @@ -7058,9 +7057,9 @@ void ObjectMgr::LoadGameObjectTemplate() for (uint8 i = 0; i < MAX_GAMEOBJECT_DATA; ++i) got.raw.data[i] = fields[8 + i].GetUInt32(); - got.RequiredLevel = fields[41].GetInt32(); - got.AIName = fields[42].GetString(); - got.ScriptId = GetScriptId(fields[43].GetString()); + got.RequiredLevel = fields[42].GetInt32(); + got.AIName = fields[43].GetString(); + got.ScriptId = GetScriptId(fields[44].GetString()); // Checks @@ -7696,8 +7695,8 @@ void ObjectMgr::LoadQuestPOI() uint32 count = 0; - // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 - QueryResult result = WorldDatabase.Query("SELECT QuestID, BlobIndex, Idx1, ObjectiveIndex, QuestObjectiveID, QuestObjectID, MapID, WorldMapAreaId, Floor, Priority, Flags, WorldEffectID, PlayerConditionID, WoDUnk1, AlwaysAllowMergingBlobs FROM quest_poi order by QuestID, Idx1"); + // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 + QueryResult result = WorldDatabase.Query("SELECT QuestID, BlobIndex, Idx1, ObjectiveIndex, QuestObjectiveID, QuestObjectID, MapID, UiMapID, Priority, Flags, WorldEffectID, PlayerConditionID, SpawnTrackingID, AlwaysAllowMergingBlobs FROM quest_poi order by QuestID, Idx1"); if (!result) { TC_LOG_ERROR("server.loading", ">> Loaded 0 quest POI definitions. DB table `quest_poi` is empty."); @@ -7737,33 +7736,32 @@ void ObjectMgr::LoadQuestPOI() { Field* fields = result->Fetch(); - int32 QuestID = fields[0].GetInt32(); - int32 BlobIndex = fields[1].GetInt32(); - int32 Idx1 = fields[2].GetInt32(); - int32 ObjectiveIndex = fields[3].GetInt32(); - int32 QuestObjectiveID = fields[4].GetInt32(); - int32 QuestObjectID = fields[5].GetInt32(); - int32 MapID = fields[6].GetInt32(); - int32 WorldMapAreaId = fields[7].GetInt32(); - int32 Floor = fields[8].GetInt32(); - int32 Priority = fields[9].GetInt32(); - int32 Flags = fields[10].GetInt32(); - int32 WorldEffectID = fields[11].GetInt32(); - int32 PlayerConditionID = fields[12].GetInt32(); - int32 WoDUnk1 = fields[13].GetInt32(); - bool AlwaysAllowMergingBlobs = fields[14].GetBool(); - - if (!sObjectMgr->GetQuestTemplate(QuestID)) - TC_LOG_ERROR("sql.sql", "`quest_poi` quest id (%u) Idx1 (%u) does not exist in `quest_template`", QuestID, Idx1); - - QuestPOI POI(BlobIndex, ObjectiveIndex, QuestObjectiveID, QuestObjectID, MapID, WorldMapAreaId, Floor, Priority, Flags, WorldEffectID, PlayerConditionID, WoDUnk1, AlwaysAllowMergingBlobs); - if (QuestID < int32(POIs.size()) && Idx1 < int32(POIs[QuestID].size())) - { - POI.points = POIs[QuestID][Idx1]; - _questPOIStore[QuestID].push_back(POI); + int32 questID = fields[0].GetInt32(); + int32 blobIndex = fields[1].GetInt32(); + int32 idx1 = fields[2].GetInt32(); + int32 objectiveIndex = fields[3].GetInt32(); + int32 questObjectiveID = fields[4].GetInt32(); + int32 questObjectID = fields[5].GetInt32(); + int32 mapID = fields[6].GetInt32(); + int32 uiMapID = fields[7].GetInt32(); + int32 priority = fields[8].GetInt32(); + int32 flags = fields[9].GetInt32(); + int32 worldEffectID = fields[10].GetInt32(); + int32 playerConditionID = fields[11].GetInt32(); + int32 spawnTrackingID = fields[12].GetInt32(); + bool alwaysAllowMergingBlobs = fields[13].GetBool(); + + if (!sObjectMgr->GetQuestTemplate(questID)) + TC_LOG_ERROR("sql.sql", "`quest_poi` quest id (%u) Idx1 (%u) does not exist in `quest_template`", questID, idx1); + + QuestPOI POI(blobIndex, objectiveIndex, questObjectiveID, questObjectID, mapID, uiMapID, priority, flags, worldEffectID, playerConditionID, spawnTrackingID, alwaysAllowMergingBlobs); + if (questID < int32(POIs.size()) && idx1 < int32(POIs[questID].size())) + { + POI.points = POIs[questID][idx1]; + _questPOIStore[questID].push_back(POI); } else - TC_LOG_ERROR("sql.sql", "Table quest_poi references unknown quest points for quest %i POI id %i", QuestID, BlobIndex); + TC_LOG_ERROR("sql.sql", "Table quest_poi references unknown quest points for quest %i POI id %i", questID, blobIndex); ++count; } while (result->NextRow()); @@ -8578,7 +8576,7 @@ void ObjectMgr::LoadMailLevelRewards() Field* fields = result->Fetch(); uint8 level = fields[0].GetUInt8(); - uint32 raceMask = fields[1].GetUInt32(); + uint64 raceMask = fields[1].GetUInt64(); uint32 mailTemplateId = fields[2].GetUInt32(); uint32 senderEntry = fields[3].GetUInt32(); @@ -8590,7 +8588,7 @@ void ObjectMgr::LoadMailLevelRewards() if (!(raceMask & RACEMASK_ALL_PLAYABLE)) { - TC_LOG_ERROR("sql.sql", "Table `mail_level_reward` has raceMask (%u) for level %u that not include any player races, ignoring.", raceMask, level); + TC_LOG_ERROR("sql.sql", "Table `mail_level_reward` has raceMask (" UI64FMTD ") for level %u that not include any player races, ignoring.", raceMask, level); continue; } @@ -8669,18 +8667,6 @@ void ObjectMgr::LoadTrainers() if (!allReqValid) continue; - spell.LearnedSpellId = spell.SpellId; - for (SpellEffectInfo const* spellEffect : spellInfo->GetEffectsForDifficulty(DIFFICULTY_NONE)) - { - if (spellEffect && spellEffect->IsEffect(SPELL_EFFECT_LEARN_SPELL)) - { - ASSERT(spell.LearnedSpellId == spell.SpellId, - "Only one learned spell is currently supported - spell %u already teaches %u but it tried to overwrite it with %u", - spell.SpellId, spell.LearnedSpellId, spellEffect->TriggerSpell); - spell.LearnedSpellId = spellEffect->TriggerSpell; - } - } - spellsByTrainer[trainerId].push_back(spell); } while (trainerSpellsResult->NextRow()); @@ -9282,8 +9268,8 @@ CreatureBaseStats const* ObjectMgr::GetCreatureBaseStats(uint8 level, uint8 unit void ObjectMgr::LoadCreatureClassLevelStats() { uint32 oldMSTime = getMSTime(); - // 0 1 2 3 4 5 6 7 8 9 10 11 - QueryResult result = WorldDatabase.Query("SELECT level, class, basemana, basearmor, attackpower, rangedattackpower, damage_base, damage_exp1, damage_exp2, damage_exp3, damage_exp4, damage_exp5 FROM creature_classlevelstats"); + // 0 1 2 3 4 5 + QueryResult result = WorldDatabase.Query("SELECT level, class, basemana, basearmor, attackpower, rangedattackpower FROM creature_classlevelstats"); if (!result) { @@ -9581,7 +9567,7 @@ void ObjectMgr::LoadTerrainWorldMaps() uint32 oldMSTime = getMSTime(); // 0 1 - QueryResult result = WorldDatabase.Query("SELECT TerrainSwapMap, WorldMapArea FROM `terrain_worldmap`"); + QueryResult result = WorldDatabase.Query("SELECT TerrainSwapMap, UiMapPhaseId FROM `terrain_worldmap`"); if (!result) { @@ -9595,7 +9581,7 @@ void ObjectMgr::LoadTerrainWorldMaps() Field* fields = result->Fetch(); uint32 mapId = fields[0].GetUInt32(); - uint32 worldMapArea = fields[1].GetUInt32(); + uint32 uiMapPhaseId = fields[1].GetUInt32(); if (!sMapStore.LookupEntry(mapId)) { @@ -9603,15 +9589,15 @@ void ObjectMgr::LoadTerrainWorldMaps() continue; } - if (!sWorldMapAreaStore.LookupEntry(worldMapArea)) + if (!sDB2Manager.IsUiMapPhase(uiMapPhaseId)) { - TC_LOG_ERROR("sql.sql", "WorldMapArea %u defined in `terrain_worldmap` does not exist, skipped.", worldMapArea); + TC_LOG_ERROR("sql.sql", "Phase %u defined in `terrain_worldmap` is not a valid terrain swap phase, skipped.", uiMapPhaseId); continue; } TerrainSwapInfo* terrainSwapInfo = &_terrainSwapInfoById[mapId]; terrainSwapInfo->Id = mapId; - terrainSwapInfo->UiWorldMapAreaIDSwaps.push_back(worldMapArea); + terrainSwapInfo->UiMapPhaseIDs.push_back(uiMapPhaseId); ++count; } while (result->NextRow()); @@ -9758,11 +9744,6 @@ TerrainSwapInfo const* ObjectMgr::GetTerrainSwapInfo(uint32 terrainSwapId) const return Trinity::Containers::MapGetValuePtr(_terrainSwapInfoById, terrainSwapId); } -std::vector<TerrainSwapInfo*> const* ObjectMgr::GetTerrainSwapsForMap(uint32 mapId) const -{ - return Trinity::Containers::MapGetValuePtr(_terrainSwapInfoByMap, mapId); -} - GameObjectTemplate const* ObjectMgr::GetGameObjectTemplate(uint32 entry) const { GameObjectTemplateContainer::const_iterator itr = _gameObjectTemplateStore.find(entry); @@ -10104,7 +10085,7 @@ void ObjectMgr::LoadPlayerChoices() uint32 oldMSTime = getMSTime(); _playerChoices.clear(); - QueryResult choices = WorldDatabase.Query("SELECT ChoiceId, UiTextureKitId, Question, HideWarboardHeader FROM playerchoice"); + QueryResult choices = WorldDatabase.Query("SELECT ChoiceId, UiTextureKitId, Question, HideWarboardHeader, KeepOpenAfterChoice FROM playerchoice"); if (!choices) { @@ -10129,10 +10110,11 @@ void ObjectMgr::LoadPlayerChoices() choice.UiTextureKitId = fields[1].GetInt32(); choice.Question = fields[2].GetString(); choice.HideWarboardHeader = fields[3].GetBool(); + choice.KeepOpenAfterChoice = fields[4].GetBool(); } while (choices->NextRow()); - if (QueryResult responses = WorldDatabase.Query("SELECT ChoiceId, ResponseId, ChoiceArtFileId, Header, Answer, Description, Confirmation FROM playerchoice_response ORDER BY `Index` ASC")) + if (QueryResult responses = WorldDatabase.Query("SELECT ChoiceId, ResponseId, ChoiceArtFileId, Flags, WidgetSetID, GroupID, Header, Answer, Description, Confirmation FROM playerchoice_response ORDER BY `Index` ASC")) { do { @@ -10153,10 +10135,13 @@ void ObjectMgr::LoadPlayerChoices() PlayerChoiceResponse& response = choice->Responses.back(); response.ResponseId = responseId; response.ChoiceArtFileId = fields[2].GetInt32(); - response.Header = fields[3].GetString(); - response.Answer = fields[4].GetString(); - response.Description = fields[5].GetString(); - response.Confirmation = fields[6].GetString(); + response.Flags = fields[3].GetInt32(); + response.WidgetSetID = fields[4].GetUInt32(); + response.GroupID = fields[5].GetUInt8(); + response.Header = fields[6].GetString(); + response.Answer = fields[7].GetString(); + response.Description = fields[8].GetString(); + response.Confirmation = fields[9].GetString(); ++responseCount; } while (responses->NextRow()); diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index d8a667210c1..7052bc790ca 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -609,9 +609,9 @@ struct PetLevelInfo struct MailLevelReward { MailLevelReward() : raceMask(0), mailTemplateId(0), senderEntry(0) { } - MailLevelReward(uint32 _raceMask, uint32 _mailTemplateId, uint32 _senderEntry) : raceMask(_raceMask), mailTemplateId(_mailTemplateId), senderEntry(_senderEntry) { } + MailLevelReward(uint64 _raceMask, uint32 _mailTemplateId, uint32 _senderEntry) : raceMask(_raceMask), mailTemplateId(_mailTemplateId), senderEntry(_senderEntry) { } - uint32 raceMask; + uint64 raceMask; uint32 mailTemplateId; uint32 senderEntry; }; @@ -710,20 +710,19 @@ struct QuestPOI int32 QuestObjectiveID; int32 QuestObjectID; int32 MapID; - int32 WorldMapAreaID; - int32 Floor; + int32 UiMapID; int32 Priority; int32 Flags; int32 WorldEffectID; int32 PlayerConditionID; - int32 UnkWoD1; + int32 SpawnTrackingID; std::vector<QuestPOIPoint> points; bool AlwaysAllowMergingBlobs; - QuestPOI() : BlobIndex(0), ObjectiveIndex(0), QuestObjectiveID(0), QuestObjectID(0), MapID(0), WorldMapAreaID(0), Floor(0), Priority(0), Flags(0), WorldEffectID(0), PlayerConditionID(0), UnkWoD1(0), AlwaysAllowMergingBlobs(false){ } - QuestPOI(int32 _BlobIndex, int32 _ObjectiveIndex, int32 _QuestObjectiveID, int32 _QuestObjectID, int32 _MapID, int32 _WorldMapAreaID, int32 _Foor, int32 _Priority, int32 _Flags, int32 _WorldEffectID, int32 _PlayerConditionID, int32 _UnkWoD1, bool _AlwaysAllowMergingBlobs) : - BlobIndex(_BlobIndex), ObjectiveIndex(_ObjectiveIndex), QuestObjectiveID(_QuestObjectiveID), QuestObjectID(_QuestObjectID), MapID(_MapID), WorldMapAreaID(_WorldMapAreaID), - Floor(_Foor), Priority(_Priority), Flags(_Flags), WorldEffectID(_WorldEffectID), PlayerConditionID(_PlayerConditionID), UnkWoD1(_UnkWoD1), AlwaysAllowMergingBlobs(_AlwaysAllowMergingBlobs) { } + QuestPOI() : BlobIndex(0), ObjectiveIndex(0), QuestObjectiveID(0), QuestObjectID(0), MapID(0), UiMapID(0), Priority(0), Flags(0), WorldEffectID(0), PlayerConditionID(0), SpawnTrackingID(0), AlwaysAllowMergingBlobs(false){ } + QuestPOI(int32 blobIndex, int32 objectiveIndex, int32 questObjectiveID, int32 questObjectID, int32 mapID, int32 uiMapID, int32 priority, int32 flags, int32 worldEffectID, int32 playerConditionID, int32 spawnTrackingID, bool alwaysAllowMergingBlobs) : + BlobIndex(blobIndex), ObjectiveIndex(objectiveIndex), QuestObjectiveID(questObjectiveID), QuestObjectID(questObjectID), MapID(mapID), UiMapID(uiMapID), + Priority(priority), Flags(flags), WorldEffectID(worldEffectID), PlayerConditionID(playerConditionID), SpawnTrackingID(spawnTrackingID), AlwaysAllowMergingBlobs(alwaysAllowMergingBlobs) { } }; typedef std::vector<QuestPOI> QuestPOIVector; @@ -794,6 +793,9 @@ struct PlayerChoiceResponse { int32 ResponseId; int32 ChoiceArtFileId; + int32 Flags; + uint32 WidgetSetID; + uint8 GroupID; std::string Header; std::string Answer; std::string Description; @@ -808,6 +810,7 @@ struct PlayerChoice std::string Question; std::vector<PlayerChoiceResponse> Responses; bool HideWarboardHeader; + bool KeepOpenAfterChoice; PlayerChoiceResponse const* GetResponse(int32 responseId) const { @@ -885,7 +888,7 @@ typedef std::unordered_map<uint64, DungeonEncounterList> DungeonEncounterContain struct TerrainSwapInfo { uint32 Id; - std::vector<uint32> UiWorldMapAreaIDSwaps; + std::vector<uint32> UiMapPhaseIDs; }; struct PhaseInfoStruct @@ -959,8 +962,8 @@ class TC_GAME_API ObjectMgr CreatureTemplate const* GetCreatureTemplate(uint32 entry) const; CreatureTemplateContainer const* GetCreatureTemplates() const { return &_creatureTemplateStore; } CreatureModelInfo const* GetCreatureModelInfo(uint32 modelId) const; - CreatureModelInfo const* GetCreatureModelRandomGender(uint32* displayID) const; - static uint32 ChooseDisplayId(CreatureTemplate const* cinfo, CreatureData const* data = nullptr); + CreatureModelInfo const* GetCreatureModelRandomGender(CreatureModel* mode, CreatureTemplate const* creatureTemplate) const; + static CreatureModel const* ChooseDisplayId(CreatureTemplate const* cinfo, CreatureData const* data = nullptr); static void ChooseCreatureFlags(CreatureTemplate const* cInfo, uint64& npcFlags, uint32& unitFlags, uint32& unitFlags2, uint32& unitFlags3, uint32& dynamicFlags, CreatureData const* data = nullptr); EquipmentInfo const* GetEquipmentInfo(uint32 entry, int8& id) const; CreatureAddon const* GetCreatureAddon(ObjectGuid::LowType lowguid) const; @@ -1182,6 +1185,7 @@ class TC_GAME_API ObjectMgr void LoadCreatureClassLevelStats(); void LoadCreatureLocales(); void LoadCreatureTemplates(); + void LoadCreatureTemplateModels(); void LoadCreatureTemplateAddons(); void LoadCreatureTemplate(Field* fields); void LoadCreatureScalingData(); @@ -1308,7 +1312,7 @@ class TC_GAME_API ObjectMgr ExclusiveQuestGroups mExclusiveQuestGroups; - MailLevelReward const* GetMailLevelReward(uint8 level, uint32 raceMask) + MailLevelReward const* GetMailLevelReward(uint8 level, uint64 raceMask) { MailLevelRewardContainer::const_iterator map_itr = _mailLevelRewardStore.find(level); if (map_itr == _mailLevelRewardStore.end()) @@ -1666,7 +1670,7 @@ class TC_GAME_API ObjectMgr PhaseInfoStruct const* GetPhaseInfo(uint32 phaseId) const; std::vector<PhaseAreaInfo> const* GetPhasesForArea(uint32 areaId) const; TerrainSwapInfo const* GetTerrainSwapInfo(uint32 terrainSwapId) const; - std::vector<TerrainSwapInfo*> const* GetTerrainSwapsForMap(uint32 mapId) const; + std::unordered_map<uint32, std::vector<TerrainSwapInfo*>> const& GetTerrainSwaps() const { return _terrainSwapInfoByMap; } private: std::unordered_map<uint32, PhaseInfoStruct> _phaseInfoById; diff --git a/src/server/game/Handlers/AuthHandler.cpp b/src/server/game/Handlers/AuthHandler.cpp index 296bf506edc..251708cb48d 100644 --- a/src/server/game/Handlers/AuthHandler.cpp +++ b/src/server/game/Handlers/AuthHandler.cpp @@ -98,6 +98,9 @@ void WorldSession::SendFeatureSystemStatusGlueScreen() features.BpayStoreDisabledByParentalControls = false; features.CharUndeleteEnabled = sWorld->getBoolConfig(CONFIG_FEATURE_SYSTEM_CHARACTER_UNDELETE_ENABLED); features.BpayStoreEnabled = sWorld->getBoolConfig(CONFIG_FEATURE_SYSTEM_BPAY_STORE_ENABLED); + features.MaxCharactersPerRealm = sWorld->getIntConfig(CONFIG_CHARACTERS_PER_REALM); + features.MinimumExpansionLevel = EXPANSION_CLASSIC; + features.MaximumExpansionLevel = sWorld->getIntConfig(CONFIG_EXPANSION); SendPacket(features.Write()); } diff --git a/src/server/game/Handlers/BattlePetHandler.cpp b/src/server/game/Handlers/BattlePetHandler.cpp index 295b0c52a4d..ed439b8fab6 100644 --- a/src/server/game/Handlers/BattlePetHandler.cpp +++ b/src/server/game/Handlers/BattlePetHandler.cpp @@ -68,7 +68,7 @@ void WorldSession::HandleCageBattlePet(WorldPackets::BattlePet::CageBattlePet& c void WorldSession::HandleBattlePetSummon(WorldPackets::BattlePet::BattlePetSummon& battlePetSummon) { - if (_player->GetGuidValue(PLAYER_FIELD_SUMMONED_BATTLE_PET_ID) != battlePetSummon.PetGuid) + if (_player->GetGuidValue(ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID) != battlePetSummon.PetGuid) GetBattlePetMgr()->SummonPet(battlePetSummon.PetGuid); else GetBattlePetMgr()->DismissPet(); diff --git a/src/server/game/Handlers/CalendarHandler.cpp b/src/server/game/Handlers/CalendarHandler.cpp index bf9ddd12b7b..43de963bda4 100644 --- a/src/server/game/Handlers/CalendarHandler.cpp +++ b/src/server/game/Handlers/CalendarHandler.cpp @@ -79,8 +79,7 @@ void WorldSession::HandleCalendarGetCalendar(WorldPackets::Calendar::CalendarGet WorldPackets::Calendar::CalendarSendCalendarEventInfo eventInfo; eventInfo.EventID = event->GetEventId(); eventInfo.Date = event->GetDate(); - Guild* guild = sGuildMgr->GetGuildById(event->GetGuildId()); - eventInfo.EventGuildID = guild ? guild->GetGUID() : ObjectGuid::Empty; + eventInfo.EventClubID = event->GetGuildId(); eventInfo.EventName = event->GetTitle(); eventInfo.EventType = event->GetType(); eventInfo.Flags = event->GetFlags(); @@ -124,10 +123,10 @@ void WorldSession::HandleCalendarGetEvent(WorldPackets::Calendar::CalendarGetEve sCalendarMgr->SendCalendarCommandResult(_player->GetGUID(), CALENDAR_ERROR_EVENT_INVALID); } -void WorldSession::HandleCalendarGuildFilter(WorldPackets::Calendar::CalendarGuildFilter& calendarGuildFilter) +void WorldSession::HandleCalendarCommunityFilter(WorldPackets::Calendar::CalendarCommunityFilter& calendarCommunityFilter) { if (Guild* guild = sGuildMgr->GetGuildById(_player->GetGuildId())) - guild->MassInviteToEvent(this, calendarGuildFilter.MinLevel, calendarGuildFilter.MaxLevel, calendarGuildFilter.MaxRankOrder); + guild->MassInviteToEvent(this, calendarCommunityFilter.MinLevel, calendarCommunityFilter.MaxLevel, calendarCommunityFilter.MaxRankOrder); } void WorldSession::HandleCalendarAddEvent(WorldPackets::Calendar::CalendarAddEvent& calendarAddEvent) diff --git a/src/server/game/Handlers/ChannelHandler.cpp b/src/server/game/Handlers/ChannelHandler.cpp index 90e6150a284..529bfb50fdc 100644 --- a/src/server/game/Handlers/ChannelHandler.cpp +++ b/src/server/game/Handlers/ChannelHandler.cpp @@ -146,9 +146,6 @@ void WorldSession::HandleChannelPlayerCommand(WorldPackets::Channel::ChannelPlay case CMSG_CHAT_CHANNEL_MODERATOR: channel->SetModerator(GetPlayer(), packet.Name); break; - case CMSG_CHAT_CHANNEL_MUTE: - channel->SetMute(GetPlayer(), packet.Name); - break; case CMSG_CHAT_CHANNEL_SET_OWNER: channel->SetOwner(GetPlayer(), packet.Name); break; @@ -161,9 +158,6 @@ void WorldSession::HandleChannelPlayerCommand(WorldPackets::Channel::ChannelPlay case CMSG_CHAT_CHANNEL_UNMODERATOR: channel->UnsetModerator(GetPlayer(), packet.Name); break; - case CMSG_CHAT_CHANNEL_UNMUTE: - channel->UnsetMute(GetPlayer(), packet.Name); - break; case CMSG_CHAT_CHANNEL_UNSILENCE_ALL: channel->UnsilenceAll(GetPlayer(), packet.Name); break; diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 210b2f0c915..c5b4e0487ff 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -349,6 +349,7 @@ void WorldSession::HandleCharEnum(PreparedQueryResult result) while (result->NextRow()); } + charEnum.IsTestDemonHunterCreationAllowed = canAlwaysCreateDemonHunter; charEnum.IsDemonHunterCreationAllowed = GetAccountExpansion() >= EXPANSION_LEGION || canAlwaysCreateDemonHunter; charEnum.IsAlliedRacesCreationAllowed = GetAccountExpansion() >= EXPANSION_BATTLE_FOR_AZEROTH; @@ -506,8 +507,8 @@ void WorldSession::HandleCharCreateOpcode(WorldPackets::Character::CreateCharact if (!HasPermission(rbac::RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_RACEMASK)) { - uint32 raceMaskDisabled = sWorld->getIntConfig(CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK); - if ((1 << (charCreate.CreateInfo->Race - 1)) & raceMaskDisabled) + uint64 raceMaskDisabled = sWorld->GetUInt64Config(CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK); + if ((UI64LIT(1) << (charCreate.CreateInfo->Race - 1)) & raceMaskDisabled) { SendCharCreate(CHAR_CREATE_DISABLED); return; @@ -733,7 +734,7 @@ void WorldSession::HandleCharCreateOpcode(WorldPackets::Character::CreateCharact LoginDatabase.CommitTransaction(trans); - SendCharCreate(CHAR_CREATE_SUCCESS); + SendCharCreate(CHAR_CREATE_SUCCESS, newChar.GetGUID()); TC_LOG_INFO("entities.player.character", "Account: %u (IP: %s) Create Character: %s %s", GetAccountId(), GetRemoteAddress().c_str(), createInfo->Name.c_str(), newChar.GetGUID().ToString().c_str()); sScriptMgr->OnPlayerCreate(&newChar); @@ -972,16 +973,6 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder) WorldPackets::BattlePet::BattlePetJournalLockAcquired lock; SendPacket(lock.Write()); - WorldPackets::Artifact::ArtifactKnowledge artifactKnowledge; - artifactKnowledge.ArtifactCategoryID = ARTIFACT_CATEGORY_PRIMARY; - artifactKnowledge.KnowledgeLevel = sWorld->getIntConfig(CONFIG_CURRENCY_START_ARTIFACT_KNOWLEDGE); - SendPacket(artifactKnowledge.Write()); - - WorldPackets::Artifact::ArtifactKnowledge artifactKnowledgeFishingPole; - artifactKnowledgeFishingPole.ArtifactCategoryID = ARTIFACT_CATEGORY_FISHING; - artifactKnowledgeFishingPole.KnowledgeLevel = 0; - SendPacket(artifactKnowledgeFishingPole.Write()); - pCurrChar->SendInitialPacketsBeforeAddToMap(); //Show cinematic at the first time that player login @@ -1234,7 +1225,7 @@ void WorldSession::HandleTutorialFlag(WorldPackets::Misc::TutorialSetFlag& packe void WorldSession::HandleSetWatchedFactionOpcode(WorldPackets::Character::SetWatchedFaction& packet) { - GetPlayer()->SetUInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX, packet.FactionIndex); + GetPlayer()->SetUInt32Value(ACTIVE_PLAYER_FIELD_WATCHED_FACTION_INDEX, packet.FactionIndex); } void WorldSession::HandleSetFactionInactiveOpcode(WorldPackets::Character::SetFactionInactive& packet) @@ -1834,8 +1825,8 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(std::shared_ptr<WorldPa if (!HasPermission(rbac::RBAC_PERM_SKIP_CHECK_CHARACTER_CREATION_RACEMASK)) { - uint32 raceMaskDisabled = sWorld->getIntConfig(CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK); - if ((1 << (factionChangeInfo->RaceID - 1)) & raceMaskDisabled) + uint64 raceMaskDisabled = sWorld->GetUInt64Config(CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK); + if ((UI64LIT(1) << (factionChangeInfo->RaceID - 1)) & raceMaskDisabled) { SendCharFactionChange(CHAR_CREATE_ERROR, factionChangeInfo.get()); return; @@ -1962,7 +1953,7 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(std::shared_ptr<WorldPa trans->Append(stmt); // Race specific languages - if (factionChangeInfo->RaceID != RACE_ORC && factionChangeInfo->RaceID != RACE_HUMAN) + if (factionChangeInfo->RaceID != RACE_ORC && factionChangeInfo->RaceID != RACE_HUMAN && factionChangeInfo->RaceID != RACE_MAGHAR_ORC) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHAR_SKILL_LANGUAGE); stmt->setUInt64(0, lowGuid); @@ -1970,6 +1961,7 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(std::shared_ptr<WorldPa switch (factionChangeInfo->RaceID) { case RACE_DWARF: + case RACE_DARK_IRON_DWARF: stmt->setUInt16(1, 111); break; case RACE_DRAENEI: @@ -2351,7 +2343,7 @@ void WorldSession::HandleReorderCharacters(WorldPackets::Character::ReorderChara void WorldSession::HandleOpeningCinematic(WorldPackets::Misc::OpeningCinematic& /*packet*/) { // Only players that has not yet gained any experience can use this - if (_player->GetUInt32Value(PLAYER_XP)) + if (_player->GetUInt32Value(ACTIVE_PLAYER_FIELD_XP)) return; if (ChrClassesEntry const* classEntry = sChrClassesStore.LookupEntry(_player->getClass())) @@ -2485,10 +2477,11 @@ void WorldSession::HandleCharUndeleteOpcode(WorldPackets::Character::UndeleteCha })); } -void WorldSession::SendCharCreate(ResponseCodes result) +void WorldSession::SendCharCreate(ResponseCodes result, ObjectGuid const& guid /*= ObjectGuid::Empty*/) { WorldPackets::Character::CreateChar response; response.Code = result; + response.Guid = guid; SendPacket(response.Write()); } diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index b056274adca..fb354886846 100644 --- a/src/server/game/Handlers/ChatHandler.cpp +++ b/src/server/game/Handlers/ChatHandler.cpp @@ -413,41 +413,12 @@ void WorldSession::HandleChatMessage(ChatMsg type, uint32 lang, std::string msg, void WorldSession::HandleChatAddonMessageOpcode(WorldPackets::Chat::ChatAddonMessage& chatAddonMessage) { - ChatMsg type; - - switch (chatAddonMessage.GetOpcode()) - { - case CMSG_CHAT_ADDON_MESSAGE_GUILD: - type = CHAT_MSG_GUILD; - break; - case CMSG_CHAT_ADDON_MESSAGE_OFFICER: - type = CHAT_MSG_OFFICER; - break; - case CMSG_CHAT_ADDON_MESSAGE_PARTY: - type = CHAT_MSG_PARTY; - break; - case CMSG_CHAT_ADDON_MESSAGE_RAID: - type = CHAT_MSG_RAID; - break; - case CMSG_CHAT_ADDON_MESSAGE_INSTANCE_CHAT: - type = CHAT_MSG_INSTANCE_CHAT; - break; - default: - TC_LOG_ERROR("network", "HandleChatAddonMessageOpcode: Unknown addon chat opcode (%u)", chatAddonMessage.GetOpcode()); - return; - } - - HandleChatAddonMessage(type, chatAddonMessage.Prefix, chatAddonMessage.Text); -} - -void WorldSession::HandleChatAddonMessageWhisperOpcode(WorldPackets::Chat::ChatAddonMessageWhisper& chatAddonMessageWhisper) -{ - HandleChatAddonMessage(CHAT_MSG_WHISPER, chatAddonMessageWhisper.Prefix, chatAddonMessageWhisper.Text, chatAddonMessageWhisper.Target); + HandleChatAddonMessage(chatAddonMessage.Params.Type, chatAddonMessage.Params.Prefix, chatAddonMessage.Params.Text); } -void WorldSession::HandleChatAddonMessageChannelOpcode(WorldPackets::Chat::ChatAddonMessageChannel& chatAddonMessageChannel) +void WorldSession::HandleChatAddonMessageTargetedOpcode(WorldPackets::Chat::ChatAddonMessageTargeted& chatAddonMessageTargeted) { - HandleChatAddonMessage(CHAT_MSG_CHANNEL, chatAddonMessageChannel.Prefix, chatAddonMessageChannel.Text, chatAddonMessageChannel.Target); + HandleChatAddonMessage(chatAddonMessageTargeted.Params.Type, chatAddonMessageTargeted.Params.Prefix, chatAddonMessageTargeted.Params.Text, chatAddonMessageTargeted.Target); } void WorldSession::HandleChatAddonMessage(ChatMsg type, std::string prefix, std::string text, std::string target /*= ""*/) diff --git a/src/server/game/Handlers/DuelHandler.cpp b/src/server/game/Handlers/DuelHandler.cpp index 41892196367..c017617f507 100644 --- a/src/server/game/Handlers/DuelHandler.cpp +++ b/src/server/game/Handlers/DuelHandler.cpp @@ -49,7 +49,7 @@ void WorldSession::HandleCanDuel(WorldPackets::Duel::CanDuel& packet) void WorldSession::HandleDuelResponseOpcode(WorldPackets::Duel::DuelResponse& duelResponse) { - if (duelResponse.Accepted) + if (duelResponse.Accepted && !duelResponse.Forfeited) HandleDuelAccepted(); else HandleDuelCancelled(); diff --git a/src/server/game/Handlers/HotfixHandler.cpp b/src/server/game/Handlers/HotfixHandler.cpp index 0d887769d08..4fc6426c2df 100644 --- a/src/server/game/Handlers/HotfixHandler.cpp +++ b/src/server/game/Handlers/HotfixHandler.cpp @@ -73,11 +73,16 @@ void WorldSession::HandleHotfixRequest(WorldPackets::Hotfix::HotfixRequest& hotf WorldPackets::Hotfix::HotfixResponse::HotfixData hotfixData; hotfixData.ID = hotfixId; hotfixData.RecordID = *hotfix; - if (storage->HasRecord(hotfixData.RecordID)) + if (storage && storage->HasRecord(hotfixData.RecordID)) { hotfixData.Data = boost::in_place(); storage->WriteRecord(hotfixData.RecordID, GetSessionDbcLocale(), *hotfixData.Data); } + else if (std::vector<uint8> const* blobData = sDB2Manager.GetHotfixBlobData(PAIR64_HIPART(hotfixId), *hotfix)) + { + hotfixData.Data = boost::in_place(); + hotfixData.Data->append(blobData->data(), blobData->size()); + } hotfixQueryResponse.Hotfixes.emplace_back(std::move(hotfixData)); } diff --git a/src/server/game/Handlers/InspectHandler.cpp b/src/server/game/Handlers/InspectHandler.cpp index 2d8c559de51..1121fd4647d 100644 --- a/src/server/game/Handlers/InspectHandler.cpp +++ b/src/server/game/Handlers/InspectHandler.cpp @@ -62,6 +62,10 @@ void WorldSession::HandleInspectOpcode(WorldPackets::Inspect::Inspect& inspect) if (v.second != PLAYERSPELL_REMOVED) inspectResult.Talents.push_back(v.first); } + + PlayerPvpTalentMap const& pvpTalents = player->GetPvpTalentMap(player->GetActiveTalentGroup()); + for (std::size_t i = 0; i < pvpTalents.size(); ++i) + inspectResult.PvpTalents[i] = pvpTalents[i]; } if (Guild* guild = sGuildMgr->GetGuildById(player->GetGuildId())) @@ -97,9 +101,9 @@ void WorldSession::HandleRequestHonorStatsOpcode(WorldPackets::Inspect::RequestH WorldPackets::Inspect::InspectHonorStats honorStats; honorStats.PlayerGUID = request.TargetGUID; - honorStats.LifetimeHK = player->GetUInt32Value(PLAYER_FIELD_LIFETIME_HONORABLE_KILLS); - honorStats.YesterdayHK = player->GetUInt16Value(PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_YESTERDAY_KILLS); - honorStats.TodayHK = player->GetUInt16Value(PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS); + honorStats.LifetimeHK = player->GetUInt32Value(ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS); + honorStats.YesterdayHK = player->GetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_YESTERDAY_KILLS); + honorStats.TodayHK = player->GetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS); honorStats.LifetimeMaxRank = 0; /// @todo SendPacket(honorStats.Write()); diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index 0ba24d95ac9..b518001ce34 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -516,7 +516,7 @@ void WorldSession::HandleBuybackItem(WorldPackets::Item::BuyBackItem& packet) Item* pItem = _player->GetItemFromBuyBackSlot(packet.Slot); if (pItem) { - uint32 price = _player->GetUInt32Value(PLAYER_FIELD_BUYBACK_PRICE_1 + packet.Slot - BUYBACK_SLOT_START); + uint32 price = _player->GetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_PRICE + packet.Slot - BUYBACK_SLOT_START); if (!_player->HasEnoughMoney(uint64(price))) { _player->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, creature, pItem->GetEntry(), 0); diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 296cd80e323..ec3307a0c6b 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -756,7 +756,7 @@ void WorldSession::HandleSetActionBarToggles(WorldPackets::Character::SetActionB return; } - GetPlayer()->SetByteValue(PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES, packet.Mask); + GetPlayer()->SetByteValue(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES, packet.Mask); } void WorldSession::HandlePlayedTime(WorldPackets::Character::RequestPlayedTime& packet) @@ -824,11 +824,11 @@ void WorldSession::HandleFarSightOpcode(WorldPackets::Misc::FarSight& packet) { if (packet.Enable) { - TC_LOG_DEBUG("network", "Added FarSight %s to %s", _player->GetGuidValue(PLAYER_FARSIGHT).ToString().c_str(), _player->GetGUID().ToString().c_str()); + TC_LOG_DEBUG("network", "Added FarSight %s to %s", _player->GetGuidValue(ACTIVE_PLAYER_FIELD_FARSIGHT).ToString().c_str(), _player->GetGUID().ToString().c_str()); if (WorldObject* target = _player->GetViewpoint()) _player->SetSeer(target); else - TC_LOG_DEBUG("network", "Player %s (%s) requests non-existing seer %s", _player->GetName().c_str(), _player->GetGUID().ToString().c_str(), _player->GetGuidValue(PLAYER_FARSIGHT).ToString().c_str()); + TC_LOG_DEBUG("network", "Player %s (%s) requests non-existing seer %s", _player->GetName().c_str(), _player->GetGUID().ToString().c_str(), _player->GetGuidValue(ACTIVE_PLAYER_FIELD_FARSIGHT).ToString().c_str()); } else { @@ -1152,12 +1152,6 @@ void WorldSession::HandleMountSetFavorite(WorldPackets::Misc::MountSetFavorite& _collectionMgr->MountSetFavorite(mountSetFavorite.MountSpellID, mountSetFavorite.IsFavorite); } -void WorldSession::HandlePvpPrestigeRankUp(WorldPackets::Misc::PvpPrestigeRankUp& /*pvpPrestigeRankUp*/) -{ - if (_player->CanPrestige()) - _player->Prestige(); -} - void WorldSession::HandleCloseInteraction(WorldPackets::Misc::CloseInteraction& closeInteraction) { if (_player->PlayerTalkClass->GetInteractionData().SourceGuid == closeInteraction.SourceGuid) diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp index 273bf287821..48bb45581fa 100644 --- a/src/server/game/Handlers/QueryHandler.cpp +++ b/src/server/game/Handlers/QueryHandler.cpp @@ -95,10 +95,12 @@ void WorldSession::HandleCreatureQuery(WorldPackets::Query::QueryCreature& packe for (uint32 i = 0; i < MAX_KILL_CREDIT; ++i) stats.ProxyCreatureID[i] = creatureInfo->KillCredit[i]; - stats.CreatureDisplayID[0] = creatureInfo->Modelid1; - stats.CreatureDisplayID[1] = creatureInfo->Modelid2; - stats.CreatureDisplayID[2] = creatureInfo->Modelid3; - stats.CreatureDisplayID[3] = creatureInfo->Modelid4; + std::transform(creatureInfo->Models.begin(), creatureInfo->Models.end(), std::back_inserter(stats.Display.CreatureDisplay), + [&stats](CreatureModel const& model) -> WorldPackets::Query::CreatureXDisplay + { + stats.Display.TotalProbability += model.Probability; + return { model.CreatureDisplayID, model.DisplayScale, model.Probability }; + }); stats.HpMulti = creatureInfo->ModHealth; stats.EnergyMulti = creatureInfo->ModMana; @@ -107,14 +109,14 @@ void WorldSession::HandleCreatureQuery(WorldPackets::Query::QueryCreature& packe stats.RequiredExpansion = creatureInfo->RequiredExpansion; stats.HealthScalingExpansion = creatureInfo->HealthScalingExpansion; stats.VignetteID = creatureInfo->VignetteID; + stats.Class = creatureInfo->unit_class; stats.Title = creatureInfo->SubName; stats.TitleAlt = creatureInfo->TitleAlt; stats.CursorName = creatureInfo->IconName; if (std::vector<uint32> const* items = sObjectMgr->GetCreatureQuestItemList(packet.CreatureID)) - for (uint32 item : *items) - stats.QuestItems.push_back(item); + stats.QuestItems.insert(stats.QuestItems.begin(), items->begin(), items->end()); LocaleConstant localeConstant = GetSessionDbLocaleIndex(); if (localeConstant != LOCALE_enUS) @@ -368,13 +370,12 @@ void WorldSession::HandleQuestPOIQuery(WorldPackets::Query::QuestPOIQuery& quest questPOIBlobData.QuestObjectiveID = data->QuestObjectiveID; questPOIBlobData.QuestObjectID = data->QuestObjectID; questPOIBlobData.MapID = data->MapID; - questPOIBlobData.WorldMapAreaID = data->WorldMapAreaID; - questPOIBlobData.Floor = data->Floor; + questPOIBlobData.UiMapID = data->UiMapID; questPOIBlobData.Priority = data->Priority; questPOIBlobData.Flags = data->Flags; questPOIBlobData.WorldEffectID = data->WorldEffectID; questPOIBlobData.PlayerConditionID = data->PlayerConditionID; - questPOIBlobData.UnkWoD1 = data->UnkWoD1; + questPOIBlobData.SpawnTrackingID = data->SpawnTrackingID; questPOIBlobData.AlwaysAllowMergingBlobs = data->AlwaysAllowMergingBlobs; for (QuestPOIPoint const& point : data->points) diff --git a/src/server/game/Handlers/SkillHandler.cpp b/src/server/game/Handlers/SkillHandler.cpp index fc1741c6885..1d95689d761 100644 --- a/src/server/game/Handlers/SkillHandler.cpp +++ b/src/server/game/Handlers/SkillHandler.cpp @@ -55,14 +55,14 @@ void WorldSession::HandleLearnPvpTalentsOpcode(WorldPackets::Talent::LearnPvpTal { WorldPackets::Talent::LearnPvpTalentsFailed learnPvpTalentsFailed; bool anythingLearned = false; - for (uint32 talentId : packet.Talents) + for (WorldPackets::Talent::PvPTalent pvpTalent : packet.Talents) { - if (TalentLearnResult result = _player->LearnPvpTalent(talentId, &learnPvpTalentsFailed.SpellID)) + if (TalentLearnResult result = _player->LearnPvpTalent(pvpTalent.PvPTalentID, pvpTalent.Slot, &learnPvpTalentsFailed.SpellID)) { if (!learnPvpTalentsFailed.Reason) learnPvpTalentsFailed.Reason = result; - learnPvpTalentsFailed.Talents.push_back(talentId); + learnPvpTalentsFailed.Talents.push_back(pvpTalent); } else anythingLearned = true; diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp index ca011dfd61f..f6d4a7dad5f 100644 --- a/src/server/game/Handlers/SpellHandler.cpp +++ b/src/server/game/Handlers/SpellHandler.cpp @@ -466,7 +466,7 @@ void WorldSession::HandleSelfResOpcode(WorldPackets::Spells::SelfRes& selfRes) if (_player->HasAuraType(SPELL_AURA_PREVENT_RESURRECTION)) return; // silent return, client should display error by itself and not send this opcode - std::vector<uint32> const& selfResSpells = _player->GetDynamicValues(PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS); + std::vector<uint32> const& selfResSpells = _player->GetDynamicValues(ACTIVE_PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS); if (std::find(selfResSpells.begin(), selfResSpells.end(), selfRes.SpellID) == selfResSpells.end()) return; @@ -474,7 +474,7 @@ void WorldSession::HandleSelfResOpcode(WorldPackets::Spells::SelfRes& selfRes) if (spellInfo) _player->CastSpell(_player, spellInfo, false, nullptr); - _player->RemoveDynamicValue(PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS, selfRes.SpellID); + _player->RemoveDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS, selfRes.SpellID); } void WorldSession::HandleSpellClick(WorldPackets::Spells::SpellClick& spellClick) diff --git a/src/server/game/Handlers/TaxiHandler.cpp b/src/server/game/Handlers/TaxiHandler.cpp index abb05a2a0c9..4ec66720641 100644 --- a/src/server/game/Handlers/TaxiHandler.cpp +++ b/src/server/game/Handlers/TaxiHandler.cpp @@ -107,6 +107,16 @@ void WorldSession::SendTaxiMenu(Creature* unit) GetPlayer()->m_taxi.AppendTaximaskTo(data, lastTaxiCheaterState); + TaxiMask reachableNodes; + std::fill(reachableNodes.begin(), reachableNodes.end(), 0); + sTaxiPathGraph.GetReachableNodesMask(sTaxiNodesStore.LookupEntry(curloc), &reachableNodes); + + for (std::size_t i = 0; i < TaxiMaskSize; ++i) + { + data.CanLandNodes[i] &= reachableNodes[i]; + data.CanUseNodes[i] &= reachableNodes[i]; + } + SendPacket(data.Write()); GetPlayer()->SetTaxiCheater(lastTaxiCheaterState); diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index f7bea0e904e..a3ff3403e86 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -85,15 +85,14 @@ enum Expansions EXPANSION_MISTS_OF_PANDARIA = 4, EXPANSION_WARLORDS_OF_DRAENOR = 5, EXPANSION_LEGION = 6, + EXPANSION_BATTLE_FOR_AZEROTH = 7, MAX_EXPANSIONS, - // future expansion - EXPANSION_BATTLE_FOR_AZEROTH = 7, MAX_ACCOUNT_EXPANSIONS }; -#define CURRENT_EXPANSION EXPANSION_LEGION +#define CURRENT_EXPANSION EXPANSION_BATTLE_FOR_AZEROTH inline uint32 GetMaxLevelForExpansion(uint32 expansion) { @@ -113,6 +112,8 @@ inline uint32 GetMaxLevelForExpansion(uint32 expansion) return 100; case EXPANSION_LEGION: return 110; + case EXPANSION_BATTLE_FOR_AZEROTH: + return 120; default: break; } @@ -127,10 +128,10 @@ enum Gender GENDER_NONE = 2 }; -// ChrRaces.dbc (6.0.2.18988) +// ChrRaces.db2 (8.0.1.27075) enum Races { - RACE_NONE = 0, + RACE_NONE = 0, RACE_HUMAN = 1, RACE_ORC = 2, RACE_DWARF = 3, @@ -153,54 +154,63 @@ enum Races //RACE_NORTHREND_SKELETON = 20, //RACE_ICE_TROLL = 21, RACE_WORGEN = 22, - //RACE_GILNEAN = 23 + //RACE_GILNEAN = 23, RACE_PANDAREN_NEUTRAL = 24, RACE_PANDAREN_ALLIANCE = 25, RACE_PANDAREN_HORDE = 26, RACE_NIGHTBORNE = 27, RACE_HIGHMOUNTAIN_TAUREN = 28, RACE_VOID_ELF = 29, - RACE_LIGHTFORGED_DRAENEI = 30 + RACE_LIGHTFORGED_DRAENEI = 30, + //RACE_ZANDALARI_TROLL = 31, + //RACE_KUL_TIRAN = 32, + //RACE_THIN_HUMAN = 33, + RACE_DARK_IRON_DWARF = 34, + //RACE_VULPERA = 35, + RACE_MAGHAR_ORC = 36 }; // max+1 for player race -#define MAX_RACES 31 - -#define RACEMASK_ALL_PLAYABLE \ - ((1<<(RACE_HUMAN-1)) | \ - (1<<(RACE_ORC-1)) | \ - (1<<(RACE_DWARF-1)) | \ - (1<<(RACE_NIGHTELF-1)) | \ - (1<<(RACE_UNDEAD_PLAYER-1)) | \ - (1<<(RACE_TAUREN-1)) | \ - (1<<(RACE_GNOME-1)) | \ - (1<<(RACE_TROLL-1)) | \ - (1<<(RACE_BLOODELF-1)) | \ - (1<<(RACE_DRAENEI-1)) | \ - (1<<(RACE_GOBLIN-1)) | \ - (1<<(RACE_WORGEN-1)) | \ - (1<<(RACE_PANDAREN_NEUTRAL-1)) |\ - (1<<(RACE_PANDAREN_ALLIANCE-1)) |\ - (1<<(RACE_PANDAREN_HORDE-1))|\ - (1<<(RACE_NIGHTBORNE-1))|\ - (1<<(RACE_HIGHMOUNTAIN_TAUREN-1))|\ - (1<<(RACE_VOID_ELF-1))|\ - (1<<(RACE_LIGHTFORGED_DRAENEI-1))) - -#define RACEMASK_NEUTRAL (1<<(RACE_PANDAREN_NEUTRAL-1)) - -#define RACEMASK_ALLIANCE \ - ((1<<(RACE_HUMAN-1)) | \ - (1<<(RACE_DWARF-1)) | \ - (1<<(RACE_NIGHTELF-1)) | \ - (1<<(RACE_GNOME-1)) | \ - (1<<(RACE_DRAENEI-1)) | \ - (1<<(RACE_WORGEN-1)) | \ - (1<<(RACE_PANDAREN_ALLIANCE-1)) |\ - (1<<(RACE_VOID_ELF-1)) |\ - (1<<(RACE_LIGHTFORGED_DRAENEI-1))) - -#define RACEMASK_HORDE RACEMASK_ALL_PLAYABLE & ~RACEMASK_ALLIANCE +#define MAX_RACES 37 + +#define RACEMASK_ALL_PLAYABLE \ + ((UI64LIT(1)<<(RACE_HUMAN-1)) | \ + (UI64LIT(1)<<(RACE_ORC-1)) | \ + (UI64LIT(1)<<(RACE_DWARF-1)) | \ + (UI64LIT(1)<<(RACE_NIGHTELF-1)) | \ + (UI64LIT(1)<<(RACE_UNDEAD_PLAYER-1)) | \ + (UI64LIT(1)<<(RACE_TAUREN-1)) | \ + (UI64LIT(1)<<(RACE_GNOME-1)) | \ + (UI64LIT(1)<<(RACE_TROLL-1)) | \ + (UI64LIT(1)<<(RACE_BLOODELF-1)) | \ + (UI64LIT(1)<<(RACE_DRAENEI-1)) | \ + (UI64LIT(1)<<(RACE_GOBLIN-1)) | \ + (UI64LIT(1)<<(RACE_WORGEN-1)) | \ + (UI64LIT(1)<<(RACE_PANDAREN_NEUTRAL-1)) | \ + (UI64LIT(1)<<(RACE_PANDAREN_ALLIANCE-1)) | \ + (UI64LIT(1)<<(RACE_PANDAREN_HORDE-1)) | \ + (UI64LIT(1)<<(RACE_NIGHTBORNE-1)) | \ + (UI64LIT(1)<<(RACE_HIGHMOUNTAIN_TAUREN-1)) | \ + (UI64LIT(1)<<(RACE_VOID_ELF-1)) | \ + (UI64LIT(1)<<(RACE_LIGHTFORGED_DRAENEI-1)) | \ + (UI64LIT(1)<<(RACE_DARK_IRON_DWARF-1)) | \ + (UI64LIT(1)<<(RACE_MAGHAR_ORC-1))) + +#define RACEMASK_NEUTRAL (UI64LIT(1)<<(RACE_PANDAREN_NEUTRAL-1)) + +#define RACEMASK_ALLIANCE \ + ((UI64LIT(1)<<(RACE_HUMAN-1)) | \ + (UI64LIT(1)<<(RACE_DWARF-1)) | \ + (UI64LIT(1)<<(RACE_NIGHTELF-1)) | \ + (UI64LIT(1)<<(RACE_GNOME-1)) | \ + (UI64LIT(1)<<(RACE_DRAENEI-1)) | \ + (UI64LIT(1)<<(RACE_WORGEN-1)) | \ + (UI64LIT(1)<<(RACE_PANDAREN_ALLIANCE-1)) | \ + (UI64LIT(1)<<(RACE_VOID_ELF-1)) | \ + (UI64LIT(1)<<(RACE_LIGHTFORGED_DRAENEI-1)) | \ + (UI64LIT(1)<<(RACE_DARK_IRON_DWARF-1))) + +#define RACEMASK_HORDE (RACEMASK_ALL_PLAYABLE & ~RACEMASK_ALLIANCE) // Class value is index in ChrClasses.dbc enum Classes : uint8 @@ -984,6 +994,7 @@ enum CharacterFlags4 : uint32 { CHARACTER_FLAG_4_TRIAL_BOOST = 0x00000080, CHARACTER_FLAG_4_TRIAL_BOOST_LOCKED = 0x00040000, + CHARACTER_FLAG_4_EXPANSION_TRIAL = 0x00080000, }; #define PLAYER_CUSTOM_DISPLAY_SIZE 3 @@ -1038,11 +1049,17 @@ enum Language LANG_PANDAREN_NEUTRAL = 42, LANG_PANDAREN_ALLIANCE = 43, LANG_PANDAREN_HORDE = 44, - LANG_RIKKITUN = 168, - LANG_ADDON = 0xFFFFFFFF // used by addons, in 2.4.0 not exist, replaced by messagetype? + LANG_SPRITE = 168, + LANG_SHATH_YAR = 178, + LANG_NERGLISH = 179, + LANG_MOONKIN = 180, + LANG_SHALASSIAN = 181, + LANG_THALASSIAN_2 = 182, + LANG_ADDON = 183, + LANG_ADDON_LOGGED = 184 }; -#define LANGUAGES_COUNT 25 +#define LANGUAGES_COUNT 31 enum TeamId { @@ -1266,7 +1283,7 @@ enum SpellEffectName SPELL_EFFECT_199 = 199, SPELL_EFFECT_HEAL_BATTLEPET_PCT = 200, // NYI SPELL_EFFECT_ENABLE_BATTLE_PETS = 201, // NYI - SPELL_EFFECT_202 = 202, + SPELL_EFFECT_202 = 202, // some sort of apply aura effect SPELL_EFFECT_203 = 203, SPELL_EFFECT_CHANGE_BATTLEPET_QUALITY = 204, SPELL_EFFECT_LAUNCH_QUEST_CHOICE = 205, @@ -1320,7 +1337,13 @@ enum SpellEffectName SPELL_EFFECT_GIVE_HONOR = 253, SPELL_EFFECT_254 = 254, SPELL_EFFECT_LEARN_TRANSMOG_SET = 255, - TOTAL_SPELL_EFFECTS = 256, + SPELL_EFFECT_256 = 256, + SPELL_EFFECT_257 = 257, + SPELL_EFFECT_MODIFY_KEYSTONE = 258, + SPELL_EFFECT_RESPEC_AZERITE_EMPOWERED_ITEM = 259, + SPELL_EFFECT_SUMMON_STABLED_PET = 260, + SPELL_EFFECT_SCRAP_ITEM = 261, + TOTAL_SPELL_EFFECTS }; enum SpellCastResult @@ -1598,23 +1621,29 @@ enum SpellCastResult SPELL_FAILED_NOT_WHILE_MERCENARY = 270, SPELL_FAILED_SPEC_DISABLED = 271, SPELL_FAILED_CANT_BE_OBLITERATED = 272, - SPELL_FAILED_FOLLOWER_CLASS_SPEC_CAP = 273, - SPELL_FAILED_TRANSPORT_NOT_READY = 274, - SPELL_FAILED_TRANSMOG_SET_ALREADY_KNOWN = 275, - SPELL_FAILED_DISABLED_BY_AURA_LABEL = 276, - SPELL_FAILED_DISABLED_BY_MAX_USABLE_LEVEL = 277, - SPELL_FAILED_SPELL_ALREADY_KNOWN = 278, - SPELL_FAILED_MUST_KNOW_SUPERCEDING_SPELL = 279, - SPELL_FAILED_YOU_CANNOT_USE_THAT_IN_PVP_INSTANCE = 280, - SPELL_FAILED_NO_ARTIFACT_EQUIPPED = 281, - SPELL_FAILED_WRONG_ARTIFACT_EQUIPPED = 282, - SPELL_FAILED_TARGET_IS_UNTARGETABLE_BY_ANYONE = 283, - SPELL_FAILED_SPELL_EFFECT_FAILED = 284, - SPELL_FAILED_NEED_ALL_PARTY_MEMBERS = 285, - SPELL_FAILED_ARTIFACT_AT_FULL_POWER = 286, - SPELL_FAILED_AP_ITEM_FROM_PREVIOUS_TIER = 287, - SPELL_FAILED_AREA_TRIGGER_CREATION = 288, - SPELL_FAILED_UNKNOWN = 289, + SPELL_FAILED_CANT_BE_SCRAPPED = 273, + SPELL_FAILED_FOLLOWER_CLASS_SPEC_CAP = 274, + SPELL_FAILED_TRANSPORT_NOT_READY = 275, + SPELL_FAILED_TRANSMOG_SET_ALREADY_KNOWN = 276, + SPELL_FAILED_DISABLED_BY_AURA_LABEL = 277, + SPELL_FAILED_DISABLED_BY_MAX_USABLE_LEVEL = 278, + SPELL_FAILED_SPELL_ALREADY_KNOWN = 279, + SPELL_FAILED_MUST_KNOW_SUPERCEDING_SPELL = 280, + SPELL_FAILED_YOU_CANNOT_USE_THAT_IN_PVP_INSTANCE = 281, + SPELL_FAILED_NO_ARTIFACT_EQUIPPED = 282, + SPELL_FAILED_WRONG_ARTIFACT_EQUIPPED = 283, + SPELL_FAILED_TARGET_IS_UNTARGETABLE_BY_ANYONE = 284, + SPELL_FAILED_SPELL_EFFECT_FAILED = 285, + SPELL_FAILED_NEED_ALL_PARTY_MEMBERS = 286, + SPELL_FAILED_ARTIFACT_AT_FULL_POWER = 287, + SPELL_FAILED_AP_ITEM_FROM_PREVIOUS_TIER = 288, + SPELL_FAILED_AREA_TRIGGER_CREATION = 289, + SPELL_FAILED_AZERITE_EMPOWERED_ONLY = 290, + SPELL_FAILED_AZERITE_EMPOWERED_NO_CHOICES_TO_UNDO = 291, + SPELL_FAILED_WRONG_FACTION = 292, + SPELL_FAILED_NOT_ENOUGH_CURRENCY = 293, + SPELL_FAILED_BATTLE_FOR_AZEROTH_RIDING_REQUIREMENT = 294, + SPELL_FAILED_UNKNOWN = 295, // ok cast value - here in case a future version removes SPELL_FAILED_SUCCESS and we need to use a custom value (not sent to client either way) SPELL_CAST_OK = SPELL_FAILED_SUCCESS @@ -1941,6 +1970,7 @@ enum SpellCustomErrors SPELL_CUSTOM_ERROR_CANNOT_RITUAL_OF_DOOM_WHILE_SUMMONING_SITERS = 317, // You cannot perform the Ritual of Doom while attempting to summon the sisters. SPELL_CUSTOM_ERROR_LEARNED_ALL_THAT_YOU_CAN_ABOUT_YOUR_ARTIFACT = 318, // You have learned all that you can about your artifact. SPELL_CUSTOM_ERROR_CANT_CALL_PET_WITH_LONE_WOLF = 319, // You cannot use Call Pet while Lone Wolf is active. + SPELL_CUSTOM_ERROR_TARGET_CANNOT_ALREADY_HAVE_ORB_OF_POWER = 320, // Target cannot already have a Orb of Power. SPELL_CUSTOM_ERROR_YOU_MUST_BE_IN_AN_INN_TO_STRUM_THAT_GUITAR = 321, // You must be in an inn to strum that guitar. SPELL_CUSTOM_ERROR_YOU_CANNOT_REACH_THE_LATCH = 322, // You cannot reach the latch. SPELL_CUSTOM_ERROR_REQUIRES_A_BRIMMING_KEYSTONE = 323, // Requires a Brimming Keystone. @@ -1959,22 +1989,41 @@ enum SpellCustomErrors SPELL_CUSTOM_ERROR_YOU_DO_NOT_KNOW_HOW_TO_TAME_FEATHERMANES = 336, // You do not know how to tame Feathermanes. SPELL_CUSTOM_ERROR_YOU_MUST_REACH_ARTIFACT_KNOWLEDGE_LEVEL_25 = 337, // You must reach Artifact Knowledge level 25 to use the Tome. SPELL_CUSTOM_ERROR_REQUIRES_A_NETHER_PORTAL_DISRUPTOR = 338, // Requires a Nether Portal Disruptor. + SPELL_CUSTOM_ERROR_YOU_ARE_NOT_THE_CORRECT_RANK_TO_USE_THIS_ITEM = 339, // You are not the correct Rank to use this item. SPELL_CUSTOM_ERROR_MUST_BE_STANDING_NEAR_INJURED_CHROMIE_IN_MOUNT_HYJAL = 340, // Must be standing near the injured Chromie in Mount Hyjal. + SPELL_CUSTOM_ERROR_THERES_NOTHING_FURTHER_YOU_CAN_LEARN = 341, // There's nothing further you can learn. SPELL_CUSTOM_ERROR_REMOVE_CANNONS_HEAVY_IRON_PLATING_FIRST = 342, // You should remove the cannon's Heavy Iron Plating first. SPELL_CUSTOM_ERROR_REMOVE_CANNONS_ELECTROKINETIC_DEFENSE_GRID_FIRST = 343, // You should remove the cannon's Electrokinetic Defense Grid first. SPELL_CUSTOM_ERROR_REQUIRES_THE_ARMORY_KEY_AND_DENDRITE_CLUSTERS = 344, // You are missing pieces of the Armory Key or do not have enough Dendrite Clusters. SPELL_CUSTOM_ERROR_THIS_ITEM_REQUIRES_BASIC_OBLITERUM_TO_UPGRADE = 345, // This item requires basic Obliterum to upgrade. SPELL_CUSTOM_ERROR_THIS_ITEM_REQUIRES_PRIMAL_OBLITERUM_TO_UPGRADE = 346, // This item requires Primal Obliterum to upgrade. SPELL_CUSTOM_ERROR_THIS_ITEM_REQUIRES_FLIGHT_MASTERS_WHISTLE = 347, // This item requires a Flight Master's Whistle. + SPELL_CUSTOM_ERROR_REQUIRES_MORRISONS_MASTER_KEY = 348, // Requires Morrison's Master Key. SPELL_CUSTOM_ERROR_REQUIRES_POWER_THAT_ECHOES_THAT_OF_THE_AUGARI = 349, // Will only open to one wielding the power that echoes that of the Augari. SPELL_CUSTOM_ERROR_THAT_PLAYER_HAS_A_PENDING_TOTEMIC_REVIVAL = 350, // That player has a pending Totemic Revival. SPELL_CUSTOM_ERROR_YOU_HAVE_NO_FIRE_MINES_DEPLOYED = 351, // You have no Fire Mines deployed. + SPELL_CUSTOM_ERROR_MUST_BE_AFFECTED_BY_SPIRIT_POWDER = 352, // You must be affected by the Spirit Powder to take the phylactery. SPELL_CUSTOM_ERROR_YOU_ARE_BLOCKED_BY_A_STRUCTURE_ABOVE_YOU = 353, // You are blocked by a structure above you. SPELL_CUSTOM_ERROR_REQUIRES_100_IMP_MEAT = 354, // Requires 100 Imp Meat. SPELL_CUSTOM_ERROR_YOU_HAVE_NOT_OBTAINED_ANY_BACKGROUND_FILTERS = 355, // You have not obtained any background filters. SPELL_CUSTOM_ERROR_NOTHING_INTERESTING_POSTED_HERE_RIGHT_NOW = 356, // There is nothing interesting posted here right now. SPELL_CUSTOM_ERROR_PARAGON_REPUTATION_REQUIRES_HIGHER_LEVEL = 357, // Paragon Reputation is not available until a higher level. SPELL_CUSTOM_ERROR_UUNA_IS_MISSING = 358, // Uuna is missing. + SPELL_CUSTOM_ERROR_ONLY_OTHER_HIVEMIND_MEMBERS_MAY_JOIN = 359, // Only other members of their Hivemind may join with them. + SPELL_CUSTOM_ERROR_NO_VALID_FLASK_PRESENT = 360, // No valid flask present. + SPELL_CUSTOM_ERROR_NO_WILD_IMPS_TO_SACRIFICE = 361, // There are no Wild Imps to sacrifice. + SPELL_CUSTOM_ERROR_YOU_ARE_CARRYING_TOO_MUCH_IRON = 362, // You are carrying too much Iron + SPELL_CUSTOM_ERROR_YOU_HAVE_NO_IRON_TO_COLLECT = 363, // You have no Iron to collect + SPELL_CUSTOM_ERROR_YOU_HAVE_NO_WILD_IMPS = 364, // You have no available Wild Imps. + SPELL_CUSTOM_ERROR_NEEDS_REPAIRS = 365, // Needs repairs. + SPELL_CUSTOM_ERROR_YOU_ARE_CARRYING_TOO_MUCH_WOOD = 366, // You're carrying too much wood. + SPELL_CUSTOM_ERROR_YOU_ARE_ALREADY_CARRYING_REPAIR_PARTS = 367, // You're already carrying repair parts. + SPELL_CUSTOM_ERROR_YOU_HAVE_NOT_UNLOCKED_FLIGHT_WHISTLE_FOR_ZONE = 368, // You have not unlocked the Flight Whistle for this zone. + SPELL_CUSTOM_ERROR_THERE_ARE_NO_UNLOCKED_FLIGHT_POINTS_NEARBY = 369, // There are no unlocked flight points nearby to take you to. + SPELL_CUSTOM_ERROR_YOU_MUST_HAVE_A_FELGUARD = 370, // You must have a Felguard. + SPELL_CUSTOM_ERROR_TARGET_HAS_NO_FESTERING_WOUNDS = 371, // The target has no Festering Wounds. + SPELL_CUSTOM_ERROR_YOU_DONT_HAVE_DEADLY_OR_WOUND_POISON_ACTIVE = 372, // You do not have Deadly Poison or Wound Poison active. + SPELL_CUSTOM_ERROR_CANNOT_READ_SOLDIER_DOG_TAG_WITHOUT_HEADLAMP_ON = 373, // You cannot read the soldier's dog tag without your headlamp on. }; enum StealthType @@ -2310,6 +2359,7 @@ enum Targets TARGET_UNK_147 = 147, TARGET_UNK_148 = 148, TARGET_UNK_149 = 149, + TARGET_UNIT_OWN_CRITTER = 150, // own battle pet from UNIT_FIELD_CRITTER TOTAL_SPELL_TARGETS }; @@ -2409,11 +2459,15 @@ enum GameobjectTypes : uint8 GAMEOBJECT_TYPE_UI_LINK = 48, GAMEOBJECT_TYPE_KEYSTONE_RECEPTACLE = 49, GAMEOBJECT_TYPE_GATHERING_NODE = 50, - GAMEOBJECT_TYPE_CHALLENGE_MODE_REWARD = 51 + GAMEOBJECT_TYPE_CHALLENGE_MODE_REWARD = 51, + GAMEOBJECT_TYPE_MULTI = 52, + GAMEOBJECT_TYPE_SIEGEABLE_MULTI = 53, + GAMEOBJECT_TYPE_SIEGEABLE_MO = 54, + GAMEOBJECT_TYPE_PVP_REWARD = 55, }; -#define MAX_GAMEOBJECT_TYPE 52 // sending to client this or greater value can crash client. -#define MAX_GAMEOBJECT_DATA 33 // Max number of uint32 vars in gameobject_template data field +#define MAX_GAMEOBJECT_TYPE 56 // sending to client this or greater value can crash client. +#define MAX_GAMEOBJECT_DATA 34 // Max number of uint32 vars in gameobject_template data field enum GameObjectFlags { @@ -3827,7 +3881,7 @@ enum LockKeyType // LockType.dbc (6.0.2.18988) enum LockType { - LOCKTYPE_PICKLOCK = 1, + LOCKTYPE_LOCKPICKING = 1, LOCKTYPE_HERBALISM = 2, LOCKTYPE_MINING = 3, LOCKTYPE_DISARM_TRAP = 4, @@ -3843,14 +3897,34 @@ enum LockType LOCKTYPE_OPEN_ATTACKING = 14, LOCKTYPE_GAHZRIDIAN = 15, LOCKTYPE_BLASTING = 16, - LOCKTYPE_SLOW_OPEN = 17, - LOCKTYPE_SLOW_CLOSE = 18, + LOCKTYPE_PVP_OPEN = 17, + LOCKTYPE_PVP_CLOSE = 18, LOCKTYPE_FISHING = 19, LOCKTYPE_INSCRIPTION = 20, LOCKTYPE_OPEN_FROM_VEHICLE = 21, - LOCKTYPE_ARCHAELOGY = 22, + LOCKTYPE_ARCHAEOLOGY = 22, LOCKTYPE_PVP_OPEN_FAST = 23, - LOCKTYPE_LUMBER_MILL = 28 + LOCKTYPE_LUMBER_MILL = 28, + LOCKTYPE_SKINNING = 29, + LOCKTYPE_ANCIENT_MANA = 30, + LOCKTYPE_WARBOARD = 31, + LOCKTYPE_CLASSIC_HERBALISM = 32, + LOCKTYPE_OUTLAND_HERBALISM = 33, + LOCKTYPE_NORTHREND_HERBALISM = 34, + LOCKTYPE_CATACLYSM_HERBALISM = 35, + LOCKTYPE_PANDARIA_HERBALISM = 36, + LOCKTYPE_DRAENOR_HERBALISM = 37, + LOCKTYPE_LEGION_HERBALISM = 38, + LOCKTYPE_KUL_TIRAN_HERBALISM = 39, + LOCKTYPE_CLASSIC_MINING = 40, + LOCKTYPE_OUTLAND_MINING = 41, + LOCKTYPE_NORTHREND_MINING = 42, + LOCKTYPE_CATACLYSM_MINING = 43, + LOCKTYPE_PANDARIA_MINING = 44, + LOCKTYPE_DRAENOR_MINING = 45, + LOCKTYPE_LEGION_MINING = 46, + LOCKTYPE_KUL_TIRAN_MINING = 47, + LOCKTYPE_SKINNING_2 = 48 }; // this is important type for npcs! @@ -4201,23 +4275,22 @@ enum SkillType SKILL_MACES = 54, SKILL_TWO_HANDED_SWORDS = 55, SKILL_DEFENSE = 95, - SKILL_LANG_COMMON = 98, + SKILL_LANGUAGE_COMMON = 98, SKILL_RACIAL_DWARF = 101, - SKILL_LANG_ORCISH = 109, - SKILL_LANG_DWARVEN = 111, - SKILL_LANG_DARNASSIAN = 113, - SKILL_LANG_TAURAHE = 115, + SKILL_LANGUAGE_ORCISH = 109, + SKILL_LANGUAGE_DWARVEN = 111, + SKILL_LANGUAGE_DARNASSIAN = 113, + SKILL_LANGUAGE_TAURAHE = 115, SKILL_DUAL_WIELD = 118, SKILL_RACIAL_TAUREN = 124, SKILL_RACIAL_ORC = 125, SKILL_RACIAL_NIGHT_ELF = 126, - SKILL_FIRST_AID = 129, SKILL_STAVES = 136, - SKILL_LANG_THALASSIAN = 137, - SKILL_LANG_DRACONIC = 138, - SKILL_LANG_DEMON_TONGUE = 139, - SKILL_LANG_TITAN = 140, - SKILL_LANG_OLD_TONGUE = 141, + SKILL_LANGUAGE_THALASSIAN = 137, + SKILL_LANGUAGE_DRACONIC = 138, + SKILL_LANGUAGE_DEMON_TONGUE = 139, + SKILL_LANGUAGE_TITAN = 140, + SKILL_LANGUAGE_OLD_TONGUE = 141, SKILL_SURVIVAL = 142, SKILL_HORSE_RIDING = 148, SKILL_WOLF_RIDING = 149, @@ -4262,8 +4335,8 @@ enum SkillType SKILL_PET_TURTLE = 251, SKILL_PET_GENERIC_HUNTER = 270, SKILL_PLATE_MAIL = 293, - SKILL_LANG_GNOMISH = 313, - SKILL_LANG_TROLL = 315, + SKILL_LANGUAGE_GNOMISH = 313, + SKILL_LANGUAGE_TROLL = 315, SKILL_ENCHANTING = 333, SKILL_FISHING = 356, SKILL_SKINNING = 393, @@ -4279,7 +4352,7 @@ enum SkillType SKILL_PET_HYENA = 654, SKILL_PET_BIRD_OF_PREY = 655, SKILL_PET_WIND_SERPENT = 656, - SKILL_LANG_FORSAKEN = 673, + SKILL_LANGUAGE_FORSAKEN = 673, SKILL_KODO_RIDING = 713, SKILL_RACIAL_TROLL = 733, SKILL_RACIAL_GNOME = 753, @@ -4287,7 +4360,7 @@ enum SkillType SKILL_JEWELCRAFTING = 755, SKILL_RACIAL_BLOOD_ELF = 756, SKILL_PET_EVENT_REMOTE_CONTROL = 758, - SKILL_LANG_DRAENEI = 759, + SKILL_LANGUAGE_DRAENEI = 759, SKILL_RACIAL_DRAENEI = 760, SKILL_PET_FELGUARD = 761, SKILL_RIDING = 762, @@ -4313,8 +4386,8 @@ enum SkillType SKILL_PET_EXOTIC_SPIRIT_BEAST = 788, SKILL_RACIAL_WORGEN = 789, SKILL_RACIAL_GOBLIN = 790, - SKILL_LANG_GILNEAN = 791, - SKILL_LANG_GOBLIN = 792, + SKILL_LANGUAGE_GILNEAN = 791, + SKILL_LANGUAGE_GOBLIN = 792, SKILL_ARCHAEOLOGY = 794, SKILL_HUNTER = 795, SKILL_DEATH_KNIGHT = 796, @@ -4326,7 +4399,7 @@ enum SkillType SKILL_ALL_GLYPHS = 810, SKILL_PET_DOG = 811, SKILL_PET_MONKEY = 815, - SKILL_PET_SHALE_SPIDER = 817, + SKILL_PET_EXOTIC_SHALE_SPIDER = 817, SKILL_BEETLE = 818, SKILL_ALL_GUILD_PERKS = 821, SKILL_PET_HYDRA = 824, @@ -4335,9 +4408,7 @@ enum SkillType SKILL_WARLOCK = 849, SKILL_RACIAL_PANDAREN = 899, SKILL_MAGE = 904, - SKILL_LANG_PANDAREN_NEUTRAL = 905, - SKILL_LANG_PANDAREN_ALLIANCE = 906, - SKILL_LANG_PANDAREN_HORDE = 907, + SKILL_LANGUAGE_PANDAREN_NEUTRAL = 905, SKILL_ROGUE = 921, SKILL_SHAMAN = 924, SKILL_FEL_IMP = 927, @@ -4357,17 +4428,16 @@ enum SkillType SKILL_WAY_OF_THE_BREW = 980, SKILL_APPRENTICE_COOKING = 981, SKILL_JOURNEYMAN_COOKBOOK = 982, - SKILL_PORCUPINE = 983, - SKILL_CRANE = 984, - SKILL_WATER_STRIDER = 985, + SKILL_PET_RODENT = 983, + SKILL_PET_CRANE = 984, + SKILL_PET_WATER_STRIDER = 985, SKILL_PET_EXOTIC_QUILEN = 986, SKILL_PET_GOAT = 987, - SKILL_BASILISK = 988, + SKILL_PET_BASILISK = 988, SKILL_NO_PLAYERS = 999, - SKILL_DIREHORN = 1305, + SKILL_PET_DIREHORN = 1305, SKILL_PET_PRIMAL_STORM_ELEMENTAL = 1748, SKILL_PET_WATER_ELEMENTAL_MINOR_TALENT_VERSION = 1777, - SKILL_PET_EXOTIC_RYLAK = 1818, SKILL_PET_RIVERBEAST = 1819, SKILL_UNUSED = 1830, SKILL_DEMON_HUNTER = 1848, @@ -4379,6 +4449,127 @@ enum SkillType SKILL_WARGLAIVES = 2152, SKILL_PET_MECHANICAL = 2189, SKILL_PET_ABOMINATION = 2216, + SKILL_PET_OXEN = 2279, + SKILL_PET_SCALEHIDE = 2280, + SKILL_PET_FEATHERMANE = 2361, + SKILL_RACIAL_NIGHTBORNE = 2419, + SKILL_RACIAL_HIGHMOUNTAIN_TAUREN = 2420, + SKILL_RACIAL_LIGHTFORGED_DRAENEI = 2421, + SKILL_RACIAL_VOID_ELF = 2423, + SKILL_KUL_TIRAN_BLACKSMITHING = 2437, + SKILL_LEGION_BLACKSMITHING = 2454, + SKILL_LANGUAGE_SHALASSIAN = 2464, + SKILL_LANGUAGE_THALASSIAN_2 = 2465, + SKILL_DRAENOR_BLACKSMITHING = 2472, + SKILL_PANDARIA_BLACKSMITHING = 2473, + SKILL_CATACLYSM_BLACKSMITHING = 2474, + SKILL_NORTHREND_BLACKSMITHING = 2475, + SKILL_OUTLAND_BLACKSMITHING = 2476, + SKILL_BLACKSMITHING_2 = 2477, + SKILL_KUL_TIRAN_ALCHEMY = 2478, + SKILL_LEGION_ALCHEMY = 2479, + SKILL_DRAENOR_ALCHEMY = 2480, + SKILL_PANDARIA_ALCHEMY = 2481, + SKILL_CATACLYSM_ALCHEMY = 2482, + SKILL_NORTHREND_ALCHEMY = 2483, + SKILL_OUTLAND_ALCHEMY = 2484, + SKILL_ALCHEMY_2 = 2485, + SKILL_KUL_TIRAN_ENCHANTING = 2486, + SKILL_LEGION_ENCHANTING = 2487, + SKILL_DRAENOR_ENCHANTING = 2488, + SKILL_PANDARIA_ENCHANTING = 2489, + SKILL_CATACLYSM_ENCHANTING = 2491, + SKILL_NORTHREND_ENCHANTING = 2492, + SKILL_OUTLAND_ENCHANTING = 2493, + SKILL_ENCHANTING_2 = 2494, + SKILL_KUL_TIRAN_ENGINEERING = 2499, + SKILL_LEGION_ENGINEERING = 2500, + SKILL_DRAENOR_ENGINEERING = 2501, + SKILL_PANDARIA_ENGINEERING = 2502, + SKILL_CATACLYSM_ENGINEERING = 2503, + SKILL_NORTHREND_ENGINEERING = 2504, + SKILL_OUTLAND_ENGINEERING = 2505, + SKILL_ENGINEERING_2 = 2506, + SKILL_KUL_TIRAN_INSCRIPTION = 2507, + SKILL_LEGION_INSCRIPTION = 2508, + SKILL_DRAENOR_INSCRIPTION = 2509, + SKILL_PANDARIA_INSCRIPTION = 2510, + SKILL_CATACLYSM_INSCRIPTION = 2511, + SKILL_NORTHREND_INSCRIPTION = 2512, + SKILL_OUTLAND_INSCRIPTION = 2513, + SKILL_INSCRIPTION_2 = 2514, + SKILL_KUL_TIRAN_JEWELCRAFTING = 2517, + SKILL_LEGION_JEWELCRAFTING = 2518, + SKILL_DRAENOR_JEWELCRAFTING = 2519, + SKILL_PANDARIA_JEWELCRAFTING = 2520, + SKILL_CATACLYSM_JEWELCRAFTING = 2521, + SKILL_NORTHREND_JEWELCRAFTING = 2522, + SKILL_OUTLAND_JEWELCRAFTING = 2523, + SKILL_JEWELCRAFTING_2 = 2524, + SKILL_KUL_TIRAN_LEATHERWORKING = 2525, + SKILL_LEGION_LEATHERWORKING = 2526, + SKILL_DRAENOR_LEATHERWORKING = 2527, + SKILL_PANDARIA_LEATHERWORKING = 2528, + SKILL_CATACLYSM_LEATHERWORKING = 2529, + SKILL_NORTHREND_LEATHERWORKING = 2530, + SKILL_OUTLAND_LEATHERWORKING = 2531, + SKILL_LEATHERWORKING_2 = 2532, + SKILL_KUL_TIRAN_TAILORING = 2533, + SKILL_LEGION_TAILORING = 2534, + SKILL_DRAENOR_TAILORING = 2535, + SKILL_PANDARIA_TAILORING = 2536, + SKILL_CATACLYSM_TAILORING = 2537, + SKILL_NORTHREND_TAILORING = 2538, + SKILL_OUTLAND_TAILORING = 2539, + SKILL_TAILORING_2 = 2540, + SKILL_KUL_TIRAN_COOKING = 2541, + SKILL_LEGION_COOKING = 2542, + SKILL_DRAENOR_COOKING = 2543, + SKILL_PANDARIA_COOKING = 2544, + SKILL_CATACLYSM_COOKING = 2545, + SKILL_NORTHREND_COOKING = 2546, + SKILL_OUTLAND_COOKING = 2547, + SKILL_COOKING_2 = 2548, + SKILL_KUL_TIRAN_HERBALISM = 2549, + SKILL_LEGION_HERBALISM = 2550, + SKILL_DRAENOR_HERBALISM = 2551, + SKILL_PANDARIA_HERBALISM = 2552, + SKILL_CATACLYSM_HERBALISM = 2553, + SKILL_NORTHREND_HERBALISM = 2554, + SKILL_OUTLAND_HERBALISM = 2555, + SKILL_HERBALISM_2 = 2556, + SKILL_KUL_TIRAN_SKINNING = 2557, + SKILL_LEGION_SKINNING = 2558, + SKILL_DRAENOR_SKINNING = 2559, + SKILL_PANDARIA_SKINNING = 2560, + SKILL_CATACLYSM_SKINNING = 2561, + SKILL_NORTHREND_SKINNING = 2562, + SKILL_OUTLAND_SKINNING = 2563, + SKILL_SKINNING_2 = 2564, + SKILL_KUL_TIRAN_MINING = 2565, + SKILL_LEGION_MINING = 2566, + SKILL_DRAENOR_MINING = 2567, + SKILL_PANDARIA_MINING = 2568, + SKILL_CATACLYSM_MINING = 2569, + SKILL_NORTHREND_MINING = 2570, + SKILL_OUTLAND_MINING = 2571, + SKILL_MINING_2 = 2572, + SKILL_KUL_TIRAN_FISHING = 2585, + SKILL_LEGION_FISHING = 2586, + SKILL_DRAENOR_FISHING = 2587, + SKILL_PANDARIA_FISHING = 2588, + SKILL_CATACLYSM_FISHING = 2589, + SKILL_NORTHREND_FISHING = 2590, + SKILL_OUTLAND_FISHING = 2591, + SKILL_FISHING_2 = 2592, + SKILL_RACIAL_DARK_IRON_DWARF = 2597, + SKILL_RACIAL_MAG_HAR_ORC = 2598, + SKILL_PET_LIZARD = 2703, + SKILL_PET_HORSE = 2704, + SKILL_PET_EXOTIC_PTERRORDAX = 2705, + SKILL_PET_TOAD = 2706, + SKILL_PET_EXOTIC_KROLUSK = 2707, + SKILL_SECOND_PET_HUNTER = 2716 }; inline SkillType SkillByLockType(LockType locktype) @@ -4389,8 +4580,24 @@ inline SkillType SkillByLockType(LockType locktype) case LOCKTYPE_MINING: return SKILL_MINING; case LOCKTYPE_FISHING: return SKILL_FISHING; case LOCKTYPE_INSCRIPTION: return SKILL_INSCRIPTION; - case LOCKTYPE_ARCHAELOGY: return SKILL_ARCHAEOLOGY; + case LOCKTYPE_ARCHAEOLOGY: return SKILL_ARCHAEOLOGY; case LOCKTYPE_LUMBER_MILL: return SKILL_LOGGING; + case LOCKTYPE_CLASSIC_HERBALISM: return SKILL_HERBALISM_2; + case LOCKTYPE_OUTLAND_HERBALISM: return SKILL_OUTLAND_HERBALISM; + case LOCKTYPE_NORTHREND_HERBALISM: return SKILL_NORTHREND_HERBALISM; + case LOCKTYPE_CATACLYSM_HERBALISM: return SKILL_CATACLYSM_HERBALISM; + case LOCKTYPE_PANDARIA_HERBALISM: return SKILL_PANDARIA_HERBALISM; + case LOCKTYPE_DRAENOR_HERBALISM: return SKILL_DRAENOR_HERBALISM; + case LOCKTYPE_LEGION_HERBALISM: return SKILL_LEGION_HERBALISM; + case LOCKTYPE_KUL_TIRAN_HERBALISM: return SKILL_KUL_TIRAN_HERBALISM; + case LOCKTYPE_CLASSIC_MINING: return SKILL_MINING_2; + case LOCKTYPE_OUTLAND_MINING: return SKILL_OUTLAND_MINING; + case LOCKTYPE_NORTHREND_MINING: return SKILL_NORTHREND_MINING; + case LOCKTYPE_CATACLYSM_MINING: return SKILL_CATACLYSM_MINING; + case LOCKTYPE_PANDARIA_MINING: return SKILL_PANDARIA_MINING; + case LOCKTYPE_DRAENOR_MINING: return SKILL_DRAENOR_MINING; + case LOCKTYPE_LEGION_MINING: return SKILL_LEGION_MINING; + case LOCKTYPE_KUL_TIRAN_MINING: return SKILL_KUL_TIRAN_MINING; default: break; } return SKILL_NONE; @@ -4408,7 +4615,6 @@ inline uint32 SkillByQuestSort(int32 QuestSort) case QUEST_SORT_ENGINEERING: return SKILL_ENGINEERING; case QUEST_SORT_TAILORING: return SKILL_TAILORING; case QUEST_SORT_COOKING: return SKILL_COOKING; - case QUEST_SORT_FIRST_AID: return SKILL_FIRST_AID; case QUEST_SORT_JEWELCRAFTING: return SKILL_JEWELCRAFTING; case QUEST_SORT_INSCRIPTION: return SKILL_INSCRIPTION; case QUEST_SORT_ARCHAEOLOGY: return SKILL_ARCHAEOLOGY; @@ -4500,9 +4706,9 @@ enum WeatherType #define MAX_WEATHER_TYPE 4 -enum ChatMsg +enum ChatMsg : int32 { - CHAT_MSG_ADDON = 0xFFFFFFFF, // -1 + CHAT_MSG_ADDON = -1, CHAT_MSG_SYSTEM = 0x00, CHAT_MSG_SAY = 0x01, CHAT_MSG_PARTY = 0x02, @@ -4755,52 +4961,54 @@ enum ResponseCodes CHAR_CREATE_THROTTLE = 49, CHAR_CREATE_ALLIED_RACE_ACHIEVEMENT = 50, CHAR_CREATE_LEVEL_REQUIREMENT_DEMON_HUNTER = 51, - - CHAR_DELETE_IN_PROGRESS = 52, - CHAR_DELETE_SUCCESS = 53, - CHAR_DELETE_FAILED = 54, - CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER = 55, - CHAR_DELETE_FAILED_GUILD_LEADER = 56, - CHAR_DELETE_FAILED_ARENA_CAPTAIN = 57, - CHAR_DELETE_FAILED_HAS_HEIRLOOM_OR_MAIL = 58, - CHAR_DELETE_FAILED_UPGRADE_IN_PROGRESS = 59, - CHAR_DELETE_FAILED_HAS_WOW_TOKEN = 60, - CHAR_DELETE_FAILED_VAS_TRANSACTION_IN_PROGRESS = 61, - - CHAR_LOGIN_IN_PROGRESS = 62, - CHAR_LOGIN_SUCCESS = 63, - CHAR_LOGIN_NO_WORLD = 64, - CHAR_LOGIN_DUPLICATE_CHARACTER = 65, - CHAR_LOGIN_NO_INSTANCES = 66, - CHAR_LOGIN_FAILED = 67, - CHAR_LOGIN_DISABLED = 68, - CHAR_LOGIN_NO_CHARACTER = 69, - CHAR_LOGIN_LOCKED_FOR_TRANSFER = 70, - CHAR_LOGIN_LOCKED_BY_BILLING = 71, - CHAR_LOGIN_LOCKED_BY_MOBILE_AH = 72, - CHAR_LOGIN_TEMPORARY_GM_LOCK = 73, - CHAR_LOGIN_LOCKED_BY_CHARACTER_UPGRADE = 74, - CHAR_LOGIN_LOCKED_BY_REVOKED_CHARACTER_UPGRADE = 75, - CHAR_LOGIN_LOCKED_BY_REVOKED_VAS_TRANSACTION = 76, - CHAR_LOGIN_LOCKED_BY_RESTRICTION = 77, - - CHAR_NAME_SUCCESS = 78, - CHAR_NAME_FAILURE = 79, - CHAR_NAME_NO_NAME = 80, - CHAR_NAME_TOO_SHORT = 81, - CHAR_NAME_TOO_LONG = 82, - CHAR_NAME_INVALID_CHARACTER = 83, - CHAR_NAME_MIXED_LANGUAGES = 84, - CHAR_NAME_PROFANE = 85, - CHAR_NAME_RESERVED = 86, - CHAR_NAME_INVALID_APOSTROPHE = 87, - CHAR_NAME_MULTIPLE_APOSTROPHES = 88, - CHAR_NAME_THREE_CONSECUTIVE = 89, - CHAR_NAME_INVALID_SPACE = 90, - CHAR_NAME_CONSECUTIVE_SPACES = 91, - CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 92, - CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 93, - CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 94 + CHAR_CREATE_CHARACTER_IN_COMMUNITY = 52, + + CHAR_DELETE_IN_PROGRESS = 53, + CHAR_DELETE_SUCCESS = 54, + CHAR_DELETE_FAILED = 55, + CHAR_DELETE_FAILED_LOCKED_FOR_TRANSFER = 56, + CHAR_DELETE_FAILED_GUILD_LEADER = 57, + CHAR_DELETE_FAILED_ARENA_CAPTAIN = 58, + CHAR_DELETE_FAILED_HAS_HEIRLOOM_OR_MAIL = 59, + CHAR_DELETE_FAILED_UPGRADE_IN_PROGRESS = 60, + CHAR_DELETE_FAILED_HAS_WOW_TOKEN = 61, + CHAR_DELETE_FAILED_VAS_TRANSACTION_IN_PROGRESS = 62, + CHAR_DELETE_FAILED_COMMUNITY_OWNER = 63, + + CHAR_LOGIN_IN_PROGRESS = 64, + CHAR_LOGIN_SUCCESS = 65, + CHAR_LOGIN_NO_WORLD = 66, + CHAR_LOGIN_DUPLICATE_CHARACTER = 67, + CHAR_LOGIN_NO_INSTANCES = 68, + CHAR_LOGIN_FAILED = 69, + CHAR_LOGIN_DISABLED = 70, + CHAR_LOGIN_NO_CHARACTER = 71, + CHAR_LOGIN_LOCKED_FOR_TRANSFER = 72, + CHAR_LOGIN_LOCKED_BY_BILLING = 73, + CHAR_LOGIN_LOCKED_BY_MOBILE_AH = 74, + CHAR_LOGIN_TEMPORARY_GM_LOCK = 75, + CHAR_LOGIN_LOCKED_BY_CHARACTER_UPGRADE = 76, + CHAR_LOGIN_LOCKED_BY_REVOKED_CHARACTER_UPGRADE = 77, + CHAR_LOGIN_LOCKED_BY_REVOKED_VAS_TRANSACTION = 78, + CHAR_LOGIN_LOCKED_BY_RESTRICTION = 79, + + CHAR_NAME_SUCCESS = 80, + CHAR_NAME_FAILURE = 81, + CHAR_NAME_NO_NAME = 82, + CHAR_NAME_TOO_SHORT = 83, + CHAR_NAME_TOO_LONG = 84, + CHAR_NAME_INVALID_CHARACTER = 85, + CHAR_NAME_MIXED_LANGUAGES = 86, + CHAR_NAME_PROFANE = 87, + CHAR_NAME_RESERVED = 88, + CHAR_NAME_INVALID_APOSTROPHE = 89, + CHAR_NAME_MULTIPLE_APOSTROPHES = 90, + CHAR_NAME_THREE_CONSECUTIVE = 91, + CHAR_NAME_INVALID_SPACE = 92, + CHAR_NAME_CONSECUTIVE_SPACES = 93, + CHAR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 94, + CHAR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 95, + CHAR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 96 }; enum CharacterUndeleteResult @@ -5393,842 +5601,864 @@ enum class GameError : uint32 ERR_OUT_OF_RANGE = 149, ERR_PLAYER_DEAD = 150, ERR_CLIENT_LOCKED_OUT = 151, - ERR_KILLED_BY_S = 152, - ERR_LOOT_LOCKED = 153, - ERR_LOOT_TOO_FAR = 154, - ERR_LOOT_DIDNT_KILL = 155, - ERR_LOOT_BAD_FACING = 156, - ERR_LOOT_NOTSTANDING = 157, - ERR_LOOT_STUNNED = 158, - ERR_LOOT_NO_UI = 159, - ERR_LOOT_WHILE_INVULNERABLE = 160, - ERR_NO_LOOT = 161, - ERR_QUEST_ACCEPTED_S = 162, - ERR_QUEST_COMPLETE_S = 163, - ERR_QUEST_FAILED_S = 164, - ERR_QUEST_FAILED_BAG_FULL_S = 165, - ERR_QUEST_FAILED_MAX_COUNT_S = 166, - ERR_QUEST_FAILED_LOW_LEVEL = 167, - ERR_QUEST_FAILED_MISSING_ITEMS = 168, - ERR_QUEST_FAILED_WRONG_RACE = 169, - ERR_QUEST_FAILED_NOT_ENOUGH_MONEY = 170, - ERR_QUEST_FAILED_EXPANSION = 171, - ERR_QUEST_ONLY_ONE_TIMED = 172, - ERR_QUEST_NEED_PREREQS = 173, - ERR_QUEST_NEED_PREREQS_CUSTOM = 174, - ERR_QUEST_ALREADY_ON = 175, - ERR_QUEST_ALREADY_DONE = 176, - ERR_QUEST_ALREADY_DONE_DAILY = 177, - ERR_QUEST_HAS_IN_PROGRESS = 178, - ERR_QUEST_REWARD_EXP_I = 179, - ERR_QUEST_REWARD_MONEY_S = 180, - ERR_QUEST_MUST_CHOOSE = 181, - ERR_QUEST_LOG_FULL = 182, - ERR_COMBAT_DAMAGE_SSI = 183, - ERR_INSPECT_S = 184, - ERR_CANT_USE_ITEM = 185, - ERR_CANT_USE_ITEM_IN_ARENA = 186, - ERR_CANT_USE_ITEM_IN_RATED_BATTLEGROUND = 187, - ERR_MUST_EQUIP_ITEM = 188, - ERR_PASSIVE_ABILITY = 189, - ERR_2HSKILLNOTFOUND = 190, - ERR_NO_ATTACK_TARGET = 191, - ERR_INVALID_ATTACK_TARGET = 192, - ERR_ATTACK_PVP_TARGET_WHILE_UNFLAGGED = 193, - ERR_ATTACK_STUNNED = 194, - ERR_ATTACK_PACIFIED = 195, - ERR_ATTACK_MOUNTED = 196, - ERR_ATTACK_FLEEING = 197, - ERR_ATTACK_CONFUSED = 198, - ERR_ATTACK_CHARMED = 199, - ERR_ATTACK_DEAD = 200, - ERR_ATTACK_PREVENTED_BY_MECHANIC_S = 201, - ERR_ATTACK_CHANNEL = 202, - ERR_TAXISAMENODE = 203, - ERR_TAXINOSUCHPATH = 204, - ERR_TAXIUNSPECIFIEDSERVERERROR = 205, - ERR_TAXINOTENOUGHMONEY = 206, - ERR_TAXITOOFARAWAY = 207, - ERR_TAXINOVENDORNEARBY = 208, - ERR_TAXINOTVISITED = 209, - ERR_TAXIPLAYERBUSY = 210, - ERR_TAXIPLAYERALREADYMOUNTED = 211, - ERR_TAXIPLAYERSHAPESHIFTED = 212, - ERR_TAXIPLAYERMOVING = 213, - ERR_TAXINOPATHS = 214, - ERR_TAXINOTELIGIBLE = 215, - ERR_TAXINOTSTANDING = 216, - ERR_NO_REPLY_TARGET = 217, - ERR_GENERIC_NO_TARGET = 218, - ERR_INITIATE_TRADE_S = 219, - ERR_TRADE_REQUEST_S = 220, - ERR_TRADE_BLOCKED_S = 221, - ERR_TRADE_TARGET_DEAD = 222, - ERR_TRADE_TOO_FAR = 223, - ERR_TRADE_CANCELLED = 224, - ERR_TRADE_COMPLETE = 225, - ERR_TRADE_BAG_FULL = 226, - ERR_TRADE_TARGET_BAG_FULL = 227, - ERR_TRADE_MAX_COUNT_EXCEEDED = 228, - ERR_TRADE_TARGET_MAX_COUNT_EXCEEDED = 229, - ERR_ALREADY_TRADING = 230, - ERR_MOUNT_INVALIDMOUNTEE = 231, - ERR_MOUNT_TOOFARAWAY = 232, - ERR_MOUNT_ALREADYMOUNTED = 233, - ERR_MOUNT_NOTMOUNTABLE = 234, - ERR_MOUNT_NOTYOURPET = 235, - ERR_MOUNT_OTHER = 236, - ERR_MOUNT_LOOTING = 237, - ERR_MOUNT_RACECANTMOUNT = 238, - ERR_MOUNT_SHAPESHIFTED = 239, - ERR_MOUNT_NO_FAVORITES = 240, - ERR_DISMOUNT_NOPET = 241, - ERR_DISMOUNT_NOTMOUNTED = 242, - ERR_DISMOUNT_NOTYOURPET = 243, - ERR_SPELL_FAILED_TOTEMS = 244, - ERR_SPELL_FAILED_REAGENTS = 245, - ERR_SPELL_FAILED_REAGENTS_GENERIC = 246, - ERR_SPELL_FAILED_EQUIPPED_ITEM = 247, - ERR_SPELL_FAILED_EQUIPPED_ITEM_CLASS_S = 248, - ERR_SPELL_FAILED_SHAPESHIFT_FORM_S = 249, - ERR_SPELL_FAILED_ANOTHER_IN_PROGRESS = 250, - ERR_BADATTACKFACING = 251, - ERR_BADATTACKPOS = 252, - ERR_CHEST_IN_USE = 253, - ERR_USE_CANT_OPEN = 254, - ERR_USE_LOCKED = 255, - ERR_DOOR_LOCKED = 256, - ERR_BUTTON_LOCKED = 257, - ERR_USE_LOCKED_WITH_ITEM_S = 258, - ERR_USE_LOCKED_WITH_SPELL_S = 259, - ERR_USE_LOCKED_WITH_SPELL_KNOWN_SI = 260, - ERR_USE_TOO_FAR = 261, - ERR_USE_BAD_ANGLE = 262, - ERR_USE_OBJECT_MOVING = 263, - ERR_USE_SPELL_FOCUS = 264, - ERR_USE_DESTROYED = 265, - ERR_SET_LOOT_FREEFORALL = 266, - ERR_SET_LOOT_ROUNDROBIN = 267, - ERR_SET_LOOT_MASTER = 268, - ERR_SET_LOOT_GROUP = 269, - ERR_SET_LOOT_THRESHOLD_S = 270, - ERR_NEW_LOOT_MASTER_S = 271, - ERR_SPECIFY_MASTER_LOOTER = 272, - ERR_LOOT_SPEC_CHANGED_S = 273, - ERR_TAME_FAILED = 274, - ERR_CHAT_WHILE_DEAD = 275, - ERR_CHAT_PLAYER_NOT_FOUND_S = 276, - ERR_NEWTAXIPATH = 277, - ERR_NO_PET = 278, - ERR_NOTYOURPET = 279, - ERR_PET_NOT_RENAMEABLE = 280, - ERR_QUEST_OBJECTIVE_COMPLETE_S = 281, - ERR_QUEST_UNKNOWN_COMPLETE = 282, - ERR_QUEST_ADD_KILL_SII = 283, - ERR_QUEST_ADD_FOUND_SII = 284, - ERR_QUEST_ADD_ITEM_SII = 285, - ERR_QUEST_ADD_PLAYER_KILL_SII = 286, - ERR_CANNOTCREATEDIRECTORY = 287, - ERR_CANNOTCREATEFILE = 288, - ERR_PLAYER_WRONG_FACTION = 289, - ERR_PLAYER_IS_NEUTRAL = 290, - ERR_BANKSLOT_FAILED_TOO_MANY = 291, - ERR_BANKSLOT_INSUFFICIENT_FUNDS = 292, - ERR_BANKSLOT_NOTBANKER = 293, - ERR_FRIEND_DB_ERROR = 294, - ERR_FRIEND_LIST_FULL = 295, - ERR_FRIEND_ADDED_S = 296, - ERR_BATTLETAG_FRIEND_ADDED_S = 297, - ERR_FRIEND_ONLINE_SS = 298, - ERR_FRIEND_OFFLINE_S = 299, - ERR_FRIEND_NOT_FOUND = 300, - ERR_FRIEND_WRONG_FACTION = 301, - ERR_FRIEND_REMOVED_S = 302, - ERR_BATTLETAG_FRIEND_REMOVED_S = 303, - ERR_FRIEND_ERROR = 304, - ERR_FRIEND_ALREADY_S = 305, - ERR_FRIEND_SELF = 306, - ERR_FRIEND_DELETED = 307, - ERR_IGNORE_FULL = 308, - ERR_IGNORE_SELF = 309, - ERR_IGNORE_NOT_FOUND = 310, - ERR_IGNORE_ALREADY_S = 311, - ERR_IGNORE_ADDED_S = 312, - ERR_IGNORE_REMOVED_S = 313, - ERR_IGNORE_AMBIGUOUS = 314, - ERR_IGNORE_DELETED = 315, - ERR_ONLY_ONE_BOLT = 316, - ERR_ONLY_ONE_AMMO = 317, - ERR_SPELL_FAILED_EQUIPPED_SPECIFIC_ITEM = 318, - ERR_WRONG_BAG_TYPE_SUBCLASS = 319, - ERR_CANT_WRAP_STACKABLE = 320, - ERR_CANT_WRAP_EQUIPPED = 321, - ERR_CANT_WRAP_WRAPPED = 322, - ERR_CANT_WRAP_BOUND = 323, - ERR_CANT_WRAP_UNIQUE = 324, - ERR_CANT_WRAP_BAGS = 325, - ERR_OUT_OF_MANA = 326, - ERR_OUT_OF_RAGE = 327, - ERR_OUT_OF_FOCUS = 328, - ERR_OUT_OF_ENERGY = 329, - ERR_OUT_OF_CHI = 330, - ERR_OUT_OF_HEALTH = 331, - ERR_OUT_OF_RUNES = 332, - ERR_OUT_OF_RUNIC_POWER = 333, - ERR_OUT_OF_SOUL_SHARDS = 334, - ERR_OUT_OF_LUNAR_POWER = 335, - ERR_OUT_OF_HOLY_POWER = 336, - ERR_OUT_OF_MAELSTROM = 337, - ERR_OUT_OF_COMBO_POINTS = 338, - ERR_OUT_OF_INSANITY = 339, - ERR_OUT_OF_ARCANE_CHARGES = 340, - ERR_OUT_OF_FURY = 341, - ERR_OUT_OF_PAIN = 342, - ERR_OUT_OF_POWER_DISPLAY = 343, - ERR_LOOT_GONE = 344, - ERR_MOUNT_FORCEDDISMOUNT = 345, - ERR_AUTOFOLLOW_TOO_FAR = 346, - ERR_UNIT_NOT_FOUND = 347, - ERR_INVALID_FOLLOW_TARGET = 348, - ERR_INVALID_INSPECT_TARGET = 349, - ERR_GUILDEMBLEM_SUCCESS = 350, - ERR_GUILDEMBLEM_INVALID_TABARD_COLORS = 351, - ERR_GUILDEMBLEM_NOGUILD = 352, - ERR_GUILDEMBLEM_NOTGUILDMASTER = 353, - ERR_GUILDEMBLEM_NOTENOUGHMONEY = 354, - ERR_GUILDEMBLEM_INVALIDVENDOR = 355, - ERR_EMBLEMERROR_NOTABARDGEOSET = 356, - ERR_SPELL_OUT_OF_RANGE = 357, - ERR_COMMAND_NEEDS_TARGET = 358, - ERR_NOAMMO_S = 359, - ERR_TOOBUSYTOFOLLOW = 360, - ERR_DUEL_REQUESTED = 361, - ERR_DUEL_CANCELLED = 362, - ERR_DEATHBINDALREADYBOUND = 363, - ERR_DEATHBIND_SUCCESS_S = 364, - ERR_NOEMOTEWHILERUNNING = 365, - ERR_ZONE_EXPLORED = 366, - ERR_ZONE_EXPLORED_XP = 367, - ERR_INVALID_ITEM_TARGET = 368, - ERR_INVALID_QUEST_TARGET = 369, - ERR_IGNORING_YOU_S = 370, - ERR_FISH_NOT_HOOKED = 371, - ERR_FISH_ESCAPED = 372, - ERR_SPELL_FAILED_NOTUNSHEATHED = 373, - ERR_PETITION_OFFERED_S = 374, - ERR_PETITION_SIGNED = 375, - ERR_PETITION_SIGNED_S = 376, - ERR_PETITION_DECLINED_S = 377, - ERR_PETITION_ALREADY_SIGNED = 378, - ERR_PETITION_RESTRICTED_ACCOUNT_TRIAL = 379, - ERR_PETITION_ALREADY_SIGNED_OTHER = 380, - ERR_PETITION_IN_GUILD = 381, - ERR_PETITION_CREATOR = 382, - ERR_PETITION_NOT_ENOUGH_SIGNATURES = 383, - ERR_PETITION_NOT_SAME_SERVER = 384, - ERR_PETITION_FULL = 385, - ERR_PETITION_ALREADY_SIGNED_BY_S = 386, - ERR_GUILD_NAME_INVALID = 387, - ERR_SPELL_UNLEARNED_S = 388, - ERR_PET_SPELL_ROOTED = 389, - ERR_PET_SPELL_AFFECTING_COMBAT = 390, - ERR_PET_SPELL_OUT_OF_RANGE = 391, - ERR_PET_SPELL_NOT_BEHIND = 392, - ERR_PET_SPELL_TARGETS_DEAD = 393, - ERR_PET_SPELL_DEAD = 394, - ERR_PET_SPELL_NOPATH = 395, - ERR_ITEM_CANT_BE_DESTROYED = 396, - ERR_TICKET_ALREADY_EXISTS = 397, - ERR_TICKET_CREATE_ERROR = 398, - ERR_TICKET_UPDATE_ERROR = 399, - ERR_TICKET_DB_ERROR = 400, - ERR_TICKET_NO_TEXT = 401, - ERR_TICKET_TEXT_TOO_LONG = 402, - ERR_OBJECT_IS_BUSY = 403, - ERR_EXHAUSTION_WELLRESTED = 404, - ERR_EXHAUSTION_RESTED = 405, - ERR_EXHAUSTION_NORMAL = 406, - ERR_EXHAUSTION_TIRED = 407, - ERR_EXHAUSTION_EXHAUSTED = 408, - ERR_NO_ITEMS_WHILE_SHAPESHIFTED = 409, - ERR_CANT_INTERACT_SHAPESHIFTED = 410, - ERR_REALM_NOT_FOUND = 411, - ERR_MAIL_QUEST_ITEM = 412, - ERR_MAIL_BOUND_ITEM = 413, - ERR_MAIL_CONJURED_ITEM = 414, - ERR_MAIL_BAG = 415, - ERR_MAIL_TO_SELF = 416, - ERR_MAIL_TARGET_NOT_FOUND = 417, - ERR_MAIL_DATABASE_ERROR = 418, - ERR_MAIL_DELETE_ITEM_ERROR = 419, - ERR_MAIL_WRAPPED_COD = 420, - ERR_MAIL_CANT_SEND_REALM = 421, - ERR_MAIL_SENT = 422, - ERR_NOT_HAPPY_ENOUGH = 423, - ERR_USE_CANT_IMMUNE = 424, - ERR_CANT_BE_DISENCHANTED = 425, - ERR_CANT_USE_DISARMED = 426, - ERR_AUCTION_QUEST_ITEM = 427, - ERR_AUCTION_BOUND_ITEM = 428, - ERR_AUCTION_CONJURED_ITEM = 429, - ERR_AUCTION_LIMITED_DURATION_ITEM = 430, - ERR_AUCTION_WRAPPED_ITEM = 431, - ERR_AUCTION_LOOT_ITEM = 432, - ERR_AUCTION_BAG = 433, - ERR_AUCTION_EQUIPPED_BAG = 434, - ERR_AUCTION_DATABASE_ERROR = 435, - ERR_AUCTION_BID_OWN = 436, - ERR_AUCTION_BID_INCREMENT = 437, - ERR_AUCTION_HIGHER_BID = 438, - ERR_AUCTION_MIN_BID = 439, - ERR_AUCTION_REPAIR_ITEM = 440, - ERR_AUCTION_USED_CHARGES = 441, - ERR_AUCTION_ALREADY_BID = 442, - ERR_AUCTION_STARTED = 443, - ERR_AUCTION_REMOVED = 444, - ERR_AUCTION_OUTBID_S = 445, - ERR_AUCTION_WON_S = 446, - ERR_AUCTION_SOLD_S = 447, - ERR_AUCTION_EXPIRED_S = 448, - ERR_AUCTION_REMOVED_S = 449, - ERR_AUCTION_BID_PLACED = 450, - ERR_LOGOUT_FAILED = 451, - ERR_QUEST_PUSH_SUCCESS_S = 452, - ERR_QUEST_PUSH_INVALID_S = 453, - ERR_QUEST_PUSH_ACCEPTED_S = 454, - ERR_QUEST_PUSH_DECLINED_S = 455, - ERR_QUEST_PUSH_BUSY_S = 456, - ERR_QUEST_PUSH_DEAD_S = 457, - ERR_QUEST_PUSH_LOG_FULL_S = 458, - ERR_QUEST_PUSH_ONQUEST_S = 459, - ERR_QUEST_PUSH_ALREADY_DONE_S = 460, - ERR_QUEST_PUSH_NOT_DAILY_S = 461, - ERR_QUEST_PUSH_TIMER_EXPIRED_S = 462, - ERR_QUEST_PUSH_NOT_IN_PARTY_S = 463, - ERR_QUEST_PUSH_DIFFERENT_SERVER_DAILY_S = 464, - ERR_QUEST_PUSH_NOT_ALLOWED_S = 465, - ERR_RAID_GROUP_LOWLEVEL = 466, - ERR_RAID_GROUP_ONLY = 467, - ERR_RAID_GROUP_FULL = 468, - ERR_RAID_GROUP_REQUIREMENTS_UNMATCH = 469, - ERR_CORPSE_IS_NOT_IN_INSTANCE = 470, - ERR_PVP_KILL_HONORABLE = 471, - ERR_PVP_KILL_DISHONORABLE = 472, - ERR_SPELL_FAILED_ALREADY_AT_FULL_HEALTH = 473, - ERR_SPELL_FAILED_ALREADY_AT_FULL_MANA = 474, - ERR_SPELL_FAILED_ALREADY_AT_FULL_POWER_S = 475, - ERR_AUTOLOOT_MONEY_S = 476, - ERR_GENERIC_STUNNED = 477, - ERR_TARGET_STUNNED = 478, - ERR_MUST_REPAIR_DURABILITY = 479, - ERR_RAID_YOU_JOINED = 480, - ERR_RAID_YOU_LEFT = 481, - ERR_INSTANCE_GROUP_JOINED_WITH_PARTY = 482, - ERR_INSTANCE_GROUP_JOINED_WITH_RAID = 483, - ERR_RAID_MEMBER_ADDED_S = 484, - ERR_RAID_MEMBER_REMOVED_S = 485, - ERR_INSTANCE_GROUP_ADDED_S = 486, - ERR_INSTANCE_GROUP_REMOVED_S = 487, - ERR_CLICK_ON_ITEM_TO_FEED = 488, - ERR_TOO_MANY_CHAT_CHANNELS = 489, - ERR_LOOT_ROLL_PENDING = 490, - ERR_LOOT_PLAYER_NOT_FOUND = 491, - ERR_NOT_IN_RAID = 492, - ERR_LOGGING_OUT = 493, - ERR_TARGET_LOGGING_OUT = 494, - ERR_NOT_WHILE_MOUNTED = 495, - ERR_NOT_WHILE_SHAPESHIFTED = 496, - ERR_NOT_IN_COMBAT = 497, - ERR_NOT_WHILE_DISARMED = 498, - ERR_PET_BROKEN = 499, - ERR_TALENT_WIPE_ERROR = 500, - ERR_SPEC_WIPE_ERROR = 501, - ERR_GLYPH_WIPE_ERROR = 502, - ERR_PET_SPEC_WIPE_ERROR = 503, - ERR_FEIGN_DEATH_RESISTED = 504, - ERR_MEETING_STONE_IN_QUEUE_S = 505, - ERR_MEETING_STONE_LEFT_QUEUE_S = 506, - ERR_MEETING_STONE_OTHER_MEMBER_LEFT = 507, - ERR_MEETING_STONE_PARTY_KICKED_FROM_QUEUE = 508, - ERR_MEETING_STONE_MEMBER_STILL_IN_QUEUE = 509, - ERR_MEETING_STONE_SUCCESS = 510, - ERR_MEETING_STONE_IN_PROGRESS = 511, - ERR_MEETING_STONE_MEMBER_ADDED_S = 512, - ERR_MEETING_STONE_GROUP_FULL = 513, - ERR_MEETING_STONE_NOT_LEADER = 514, - ERR_MEETING_STONE_INVALID_LEVEL = 515, - ERR_MEETING_STONE_TARGET_NOT_IN_PARTY = 516, - ERR_MEETING_STONE_TARGET_INVALID_LEVEL = 517, - ERR_MEETING_STONE_MUST_BE_LEADER = 518, - ERR_MEETING_STONE_NO_RAID_GROUP = 519, - ERR_MEETING_STONE_NEED_PARTY = 520, - ERR_MEETING_STONE_NOT_FOUND = 521, - ERR_GUILDEMBLEM_SAME = 522, - ERR_EQUIP_TRADE_ITEM = 523, - ERR_PVP_TOGGLE_ON = 524, - ERR_PVP_TOGGLE_OFF = 525, - ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS = 526, - ERR_GROUP_JOIN_BATTLEGROUND_DEAD = 527, - ERR_GROUP_JOIN_BATTLEGROUND_S = 528, - ERR_GROUP_JOIN_BATTLEGROUND_FAIL = 529, - ERR_GROUP_JOIN_BATTLEGROUND_TOO_MANY = 530, - ERR_SOLO_JOIN_BATTLEGROUND_S = 531, - ERR_BATTLEGROUND_TOO_MANY_QUEUES = 532, - ERR_BATTLEGROUND_CANNOT_QUEUE_FOR_RATED = 533, - ERR_BATTLEDGROUND_QUEUED_FOR_RATED = 534, - ERR_BATTLEGROUND_TEAM_LEFT_QUEUE = 535, - ERR_BATTLEGROUND_NOT_IN_BATTLEGROUND = 536, - ERR_ALREADY_IN_ARENA_TEAM_S = 537, - ERR_INVALID_PROMOTION_CODE = 538, - ERR_BG_PLAYER_JOINED_SS = 539, - ERR_BG_PLAYER_LEFT_S = 540, - ERR_RESTRICTED_ACCOUNT = 541, - ERR_RESTRICTED_ACCOUNT_TRIAL = 542, - ERR_PLAY_TIME_EXCEEDED = 543, - ERR_APPROACHING_PARTIAL_PLAY_TIME = 544, - ERR_APPROACHING_PARTIAL_PLAY_TIME_2 = 545, - ERR_APPROACHING_NO_PLAY_TIME = 546, - ERR_APPROACHING_NO_PLAY_TIME_2 = 547, - ERR_UNHEALTHY_TIME = 548, - ERR_CHAT_RESTRICTED_TRIAL = 549, - ERR_CHAT_THROTTLED = 550, - ERR_MAIL_REACHED_CAP = 551, - ERR_INVALID_RAID_TARGET = 552, - ERR_RAID_LEADER_READY_CHECK_START_S = 553, - ERR_READY_CHECK_IN_PROGRESS = 554, - ERR_READY_CHECK_THROTTLED = 555, - ERR_DUNGEON_DIFFICULTY_FAILED = 556, - ERR_DUNGEON_DIFFICULTY_CHANGED_S = 557, - ERR_TRADE_WRONG_REALM = 558, - ERR_TRADE_NOT_ON_TAPLIST = 559, - ERR_CHAT_PLAYER_AMBIGUOUS_S = 560, - ERR_LOOT_CANT_LOOT_THAT_NOW = 561, - ERR_LOOT_MASTER_INV_FULL = 562, - ERR_LOOT_MASTER_UNIQUE_ITEM = 563, - ERR_LOOT_MASTER_OTHER = 564, - ERR_FILTERING_YOU_S = 565, - ERR_USE_PREVENTED_BY_MECHANIC_S = 566, - ERR_ITEM_UNIQUE_EQUIPPABLE = 567, - ERR_LFG_LEADER_IS_LFM_S = 568, - ERR_LFG_PENDING = 569, - ERR_CANT_SPEAK_LANGAGE = 570, - ERR_VENDOR_MISSING_TURNINS = 571, - ERR_BATTLEGROUND_NOT_IN_TEAM = 572, - ERR_NOT_IN_BATTLEGROUND = 573, - ERR_NOT_ENOUGH_HONOR_POINTS = 574, - ERR_NOT_ENOUGH_ARENA_POINTS = 575, - ERR_SOCKETING_REQUIRES_META_GEM = 576, - ERR_SOCKETING_META_GEM_ONLY_IN_METASLOT = 577, - ERR_SOCKETING_REQUIRES_HYDRAULIC_GEM = 578, - ERR_SOCKETING_HYDRAULIC_GEM_ONLY_IN_HYDRAULICSLOT = 579, - ERR_SOCKETING_REQUIRES_COGWHEEL_GEM = 580, - ERR_SOCKETING_COGWHEEL_GEM_ONLY_IN_COGWHEELSLOT = 581, - ERR_SOCKETING_ITEM_TOO_LOW_LEVEL = 582, - ERR_ITEM_MAX_COUNT_SOCKETED = 583, - ERR_SYSTEM_DISABLED = 584, - ERR_QUEST_FAILED_TOO_MANY_DAILY_QUESTS_I = 585, - ERR_ITEM_MAX_COUNT_EQUIPPED_SOCKETED = 586, - ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED = 587, - ERR_USER_SQUELCHED = 588, - ERR_TOO_MUCH_GOLD = 589, - ERR_NOT_BARBER_SITTING = 590, - ERR_QUEST_FAILED_CAIS = 591, - ERR_INVITE_RESTRICTED_TRIAL = 592, - ERR_VOICE_IGNORE_FULL = 593, - ERR_VOICE_IGNORE_SELF = 594, - ERR_VOICE_IGNORE_NOT_FOUND = 595, - ERR_VOICE_IGNORE_ALREADY_S = 596, - ERR_VOICE_IGNORE_ADDED_S = 597, - ERR_VOICE_IGNORE_REMOVED_S = 598, - ERR_VOICE_IGNORE_AMBIGUOUS = 599, - ERR_VOICE_IGNORE_DELETED = 600, - ERR_UNKNOWN_MACRO_OPTION_S = 601, - ERR_NOT_DURING_ARENA_MATCH = 602, - ERR_PLAYER_SILENCED = 603, - ERR_PLAYER_UNSILENCED = 604, - ERR_COMSAT_DISCONNECT = 605, - ERR_COMSAT_RECONNECT_ATTEMPT = 606, - ERR_COMSAT_CONNECT_FAIL = 607, - ERR_MAIL_INVALID_ATTACHMENT_SLOT = 608, - ERR_MAIL_TOO_MANY_ATTACHMENTS = 609, - ERR_MAIL_INVALID_ATTACHMENT = 610, - ERR_MAIL_ATTACHMENT_EXPIRED = 611, - ERR_VOICE_CHAT_PARENTAL_DISABLE_ALL = 612, - ERR_VOICE_CHAT_PARENTAL_DISABLE_MIC = 613, - ERR_PROFANE_CHAT_NAME = 614, - ERR_PLAYER_SILENCED_ECHO = 615, - ERR_PLAYER_UNSILENCED_ECHO = 616, - ERR_VOICESESSION_FULL = 617, - ERR_LOOT_CANT_LOOT_THAT = 618, - ERR_ARENA_EXPIRED_CAIS = 619, - ERR_GROUP_ACTION_THROTTLED = 620, - ERR_ALREADY_PICKPOCKETED = 621, - ERR_NAME_INVALID = 622, - ERR_NAME_NO_NAME = 623, - ERR_NAME_TOO_SHORT = 624, - ERR_NAME_TOO_LONG = 625, - ERR_NAME_MIXED_LANGUAGES = 626, - ERR_NAME_PROFANE = 627, - ERR_NAME_RESERVED = 628, - ERR_NAME_THREE_CONSECUTIVE = 629, - ERR_NAME_INVALID_SPACE = 630, - ERR_NAME_CONSECUTIVE_SPACES = 631, - ERR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 632, - ERR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 633, - ERR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 634, - ERR_REFER_A_FRIEND_NOT_REFERRED_BY = 635, - ERR_REFER_A_FRIEND_TARGET_TOO_HIGH = 636, - ERR_REFER_A_FRIEND_INSUFFICIENT_GRANTABLE_LEVELS = 637, - ERR_REFER_A_FRIEND_TOO_FAR = 638, - ERR_REFER_A_FRIEND_DIFFERENT_FACTION = 639, - ERR_REFER_A_FRIEND_NOT_NOW = 640, - ERR_REFER_A_FRIEND_GRANT_LEVEL_MAX_I = 641, - ERR_REFER_A_FRIEND_SUMMON_LEVEL_MAX_I = 642, - ERR_REFER_A_FRIEND_SUMMON_COOLDOWN = 643, - ERR_REFER_A_FRIEND_SUMMON_OFFLINE_S = 644, - ERR_REFER_A_FRIEND_INSUF_EXPAN_LVL = 645, - ERR_REFER_A_FRIEND_NOT_IN_LFG = 646, - ERR_REFER_A_FRIEND_NO_XREALM = 647, - ERR_REFER_A_FRIEND_MAP_INCOMING_TRANSFER_NOT_ALLOWED = 648, - ERR_NOT_SAME_ACCOUNT = 649, - ERR_BAD_ON_USE_ENCHANT = 650, - ERR_TRADE_SELF = 651, - ERR_TOO_MANY_SOCKETS = 652, - ERR_ITEM_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 653, - ERR_TRADE_TARGET_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 654, - ERR_ITEM_MAX_LIMIT_CATEGORY_SOCKETED_EXCEEDED_IS = 655, - ERR_ITEM_MAX_LIMIT_CATEGORY_EQUIPPED_EXCEEDED_IS = 656, - ERR_SHAPESHIFT_FORM_CANNOT_EQUIP = 657, - ERR_ITEM_INVENTORY_FULL_SATCHEL = 658, - ERR_SCALING_STAT_ITEM_LEVEL_EXCEEDED = 659, - ERR_SCALING_STAT_ITEM_LEVEL_TOO_LOW = 660, - ERR_PURCHASE_LEVEL_TOO_LOW = 661, - ERR_GROUP_SWAP_FAILED = 662, - ERR_INVITE_IN_COMBAT = 663, - ERR_INVALID_GLYPH_SLOT = 664, - ERR_GENERIC_NO_VALID_TARGETS = 665, - ERR_CALENDAR_EVENT_ALERT_S = 666, - ERR_PET_LEARN_SPELL_S = 667, - ERR_PET_LEARN_ABILITY_S = 668, - ERR_PET_SPELL_UNLEARNED_S = 669, - ERR_INVITE_UNKNOWN_REALM = 670, - ERR_INVITE_NO_PARTY_SERVER = 671, - ERR_INVITE_PARTY_BUSY = 672, - ERR_PARTY_TARGET_AMBIGUOUS = 673, - ERR_PARTY_LFG_INVITE_RAID_LOCKED = 674, - ERR_PARTY_LFG_BOOT_LIMIT = 675, - ERR_PARTY_LFG_BOOT_COOLDOWN_S = 676, - ERR_PARTY_LFG_BOOT_NOT_ELIGIBLE_S = 677, - ERR_PARTY_LFG_BOOT_INPATIENT_TIMER_S = 678, - ERR_PARTY_LFG_BOOT_IN_PROGRESS = 679, - ERR_PARTY_LFG_BOOT_TOO_FEW_PLAYERS = 680, - ERR_PARTY_LFG_BOOT_VOTE_SUCCEEDED = 681, - ERR_PARTY_LFG_BOOT_VOTE_FAILED = 682, - ERR_PARTY_LFG_BOOT_IN_COMBAT = 683, - ERR_PARTY_LFG_BOOT_DUNGEON_COMPLETE = 684, - ERR_PARTY_LFG_BOOT_LOOT_ROLLS = 685, - ERR_PARTY_LFG_BOOT_VOTE_REGISTERED = 686, - ERR_PARTY_PRIVATE_GROUP_ONLY = 687, - ERR_PARTY_LFG_TELEPORT_IN_COMBAT = 688, - ERR_RAID_DISALLOWED_BY_LEVEL = 689, - ERR_RAID_DISALLOWED_BY_CROSS_REALM = 690, - ERR_PARTY_ROLE_NOT_AVAILABLE = 691, - ERR_JOIN_LFG_OBJECT_FAILED = 692, - ERR_LFG_REMOVED_LEVELUP = 693, - ERR_LFG_REMOVED_XP_TOGGLE = 694, - ERR_LFG_REMOVED_FACTION_CHANGE = 695, - ERR_BATTLEGROUND_INFO_THROTTLED = 696, - ERR_BATTLEGROUND_ALREADY_IN = 697, - ERR_ARENA_TEAM_CHANGE_FAILED_QUEUED = 698, - ERR_ARENA_TEAM_PERMISSIONS = 699, - ERR_NOT_WHILE_FALLING = 700, - ERR_NOT_WHILE_MOVING = 701, - ERR_NOT_WHILE_FATIGUED = 702, - ERR_MAX_SOCKETS = 703, - ERR_MULTI_CAST_ACTION_TOTEM_S = 704, - ERR_BATTLEGROUND_JOIN_LEVELUP = 705, - ERR_REMOVE_FROM_PVP_QUEUE_XP_GAIN = 706, - ERR_BATTLEGROUND_JOIN_XP_GAIN = 707, - ERR_BATTLEGROUND_JOIN_MERCENARY = 708, - ERR_BATTLEGROUND_JOIN_TOO_MANY_HEALERS = 709, - ERR_BATTLEGROUND_JOIN_TOO_MANY_TANKS = 710, - ERR_BATTLEGROUND_JOIN_TOO_MANY_DAMAGE = 711, - ERR_RAID_DIFFICULTY_FAILED = 712, - ERR_RAID_DIFFICULTY_CHANGED_S = 713, - ERR_LEGACY_RAID_DIFFICULTY_CHANGED_S = 714, - ERR_RAID_LOCKOUT_CHANGED_S = 715, - ERR_RAID_CONVERTED_TO_PARTY = 716, - ERR_PARTY_CONVERTED_TO_RAID = 717, - ERR_PLAYER_DIFFICULTY_CHANGED_S = 718, - ERR_GMRESPONSE_DB_ERROR = 719, - ERR_BATTLEGROUND_JOIN_RANGE_INDEX = 720, - ERR_ARENA_JOIN_RANGE_INDEX = 721, - ERR_REMOVE_FROM_PVP_QUEUE_FACTION_CHANGE = 722, - ERR_BATTLEGROUND_JOIN_FAILED = 723, - ERR_BATTLEGROUND_JOIN_NO_VALID_SPEC_FOR_ROLE = 724, - ERR_BATTLEGROUND_JOIN_RESPEC = 725, - ERR_BATTLEGROUND_INVITATION_DECLINED = 726, - ERR_BATTLEGROUND_JOIN_TIMED_OUT = 727, - ERR_BATTLEGROUND_DUPE_QUEUE = 728, - ERR_BATTLEGROUND_JOIN_MUST_COMPLETE_QUEST = 729, - ERR_IN_BATTLEGROUND_RESPEC = 730, - ERR_MAIL_LIMITED_DURATION_ITEM = 731, - ERR_YELL_RESTRICTED_TRIAL = 732, - ERR_CHAT_RAID_RESTRICTED_TRIAL = 733, - ERR_LFG_ROLE_CHECK_FAILED = 734, - ERR_LFG_ROLE_CHECK_FAILED_TIMEOUT = 735, - ERR_LFG_ROLE_CHECK_FAILED_NOT_VIABLE = 736, - ERR_LFG_READY_CHECK_FAILED = 737, - ERR_LFG_READY_CHECK_FAILED_TIMEOUT = 738, - ERR_LFG_GROUP_FULL = 739, - ERR_LFG_NO_LFG_OBJECT = 740, - ERR_LFG_NO_SLOTS_PLAYER = 741, - ERR_LFG_NO_SLOTS_PARTY = 742, - ERR_LFG_NO_SPEC = 743, - ERR_LFG_MISMATCHED_SLOTS = 744, - ERR_LFG_MISMATCHED_SLOTS_LOCAL_XREALM = 745, - ERR_LFG_PARTY_PLAYERS_FROM_DIFFERENT_REALMS = 746, - ERR_LFG_MEMBERS_NOT_PRESENT = 747, - ERR_LFG_GET_INFO_TIMEOUT = 748, - ERR_LFG_INVALID_SLOT = 749, - ERR_LFG_DESERTER_PLAYER = 750, - ERR_LFG_DESERTER_PARTY = 751, - ERR_LFG_DEAD = 752, - ERR_LFG_RANDOM_COOLDOWN_PLAYER = 753, - ERR_LFG_RANDOM_COOLDOWN_PARTY = 754, - ERR_LFG_TOO_MANY_MEMBERS = 755, - ERR_LFG_TOO_FEW_MEMBERS = 756, - ERR_LFG_PROPOSAL_FAILED = 757, - ERR_LFG_PROPOSAL_DECLINED_SELF = 758, - ERR_LFG_PROPOSAL_DECLINED_PARTY = 759, - ERR_LFG_NO_SLOTS_SELECTED = 760, - ERR_LFG_NO_ROLES_SELECTED = 761, - ERR_LFG_ROLE_CHECK_INITIATED = 762, - ERR_LFG_READY_CHECK_INITIATED = 763, - ERR_LFG_PLAYER_DECLINED_ROLE_CHECK = 764, - ERR_LFG_PLAYER_DECLINED_READY_CHECK = 765, - ERR_LFG_JOINED_QUEUE = 766, - ERR_LFG_JOINED_FLEX_QUEUE = 767, - ERR_LFG_JOINED_RF_QUEUE = 768, - ERR_LFG_JOINED_SCENARIO_QUEUE = 769, - ERR_LFG_JOINED_WORLD_PVP_QUEUE = 770, - ERR_LFG_JOINED_BATTLEFIELD_QUEUE = 771, - ERR_LFG_JOINED_LIST = 772, - ERR_LFG_LEFT_QUEUE = 773, - ERR_LFG_LEFT_LIST = 774, - ERR_LFG_ROLE_CHECK_ABORTED = 775, - ERR_LFG_READY_CHECK_ABORTED = 776, - ERR_LFG_CANT_USE_BATTLEGROUND = 777, - ERR_LFG_CANT_USE_DUNGEONS = 778, - ERR_LFG_REASON_TOO_MANY_LFG = 779, - ERR_INVALID_TELEPORT_LOCATION = 780, - ERR_TOO_FAR_TO_INTERACT = 781, - ERR_BATTLEGROUND_PLAYERS_FROM_DIFFERENT_REALMS = 782, - ERR_DIFFICULTY_CHANGE_COOLDOWN_S = 783, - ERR_DIFFICULTY_CHANGE_COMBAT_COOLDOWN_S = 784, - ERR_DIFFICULTY_CHANGE_WORLDSTATE = 785, - ERR_DIFFICULTY_CHANGE_ENCOUNTER = 786, - ERR_DIFFICULTY_CHANGE_COMBAT = 787, - ERR_DIFFICULTY_CHANGE_PLAYER_BUSY = 788, - ERR_DIFFICULTY_CHANGE_ALREADY_STARTED = 789, - ERR_DIFFICULTY_CHANGE_OTHER_HEROIC_S = 790, - ERR_DIFFICULTY_CHANGE_HEROIC_INSTANCE_ALREADY_RUNNING = 791, - ERR_ARENA_TEAM_PARTY_SIZE = 792, - ERR_QUEST_FORCE_REMOVED_S = 793, - ERR_ATTACK_NO_ACTIONS = 794, - ERR_IN_RANDOM_BG = 795, - ERR_IN_NON_RANDOM_BG = 796, - ERR_AUCTION_ENOUGH_ITEMS = 797, - ERR_BN_FRIEND_SELF = 798, - ERR_BN_FRIEND_ALREADY = 799, - ERR_BN_FRIEND_BLOCKED = 800, - ERR_BN_FRIEND_LIST_FULL = 801, - ERR_BN_FRIEND_REQUEST_SENT = 802, - ERR_BN_BROADCAST_THROTTLE = 803, - ERR_BG_DEVELOPER_ONLY = 804, - ERR_CURRENCY_SPELL_SLOT_MISMATCH = 805, - ERR_CURRENCY_NOT_TRADABLE = 806, - ERR_REQUIRES_EXPANSION_S = 807, - ERR_QUEST_FAILED_SPELL = 808, - ERR_TALENT_FAILED_NOT_ENOUGH_TALENTS_IN_PRIMARY_TREE = 809, - ERR_TALENT_FAILED_NO_PRIMARY_TREE_SELECTED = 810, - ERR_TALENT_FAILED_CANT_REMOVE_TALENT = 811, - ERR_TALENT_FAILED_UNKNOWN = 812, - ERR_WARGAME_REQUEST_FAILURE = 813, - ERR_RANK_REQUIRES_AUTHENTICATOR = 814, - ERR_GUILD_BANK_VOUCHER_FAILED = 815, - ERR_WARGAME_REQUEST_SENT = 816, - ERR_REQUIRES_ACHIEVEMENT_I = 817, - ERR_REFUND_RESULT_EXCEED_MAX_CURRENCY = 818, - ERR_CANT_BUY_QUANTITY = 819, - ERR_ITEM_IS_BATTLE_PAY_LOCKED = 820, - ERR_PARTY_ALREADY_IN_BATTLEGROUND_QUEUE = 821, - ERR_PARTY_CONFIRMING_BATTLEGROUND_QUEUE = 822, - ERR_BATTLEFIELD_TEAM_PARTY_SIZE = 823, - ERR_INSUFF_TRACKED_CURRENCY_IS = 824, - ERR_NOT_ON_TOURNAMENT_REALM = 825, - ERR_GUILD_TRIAL_ACCOUNT_TRIAL = 826, - ERR_GUILD_TRIAL_ACCOUNT_VETERAN = 827, - ERR_GUILD_UNDELETABLE_DUE_TO_LEVEL = 828, - ERR_CANT_DO_THAT_IN_A_GROUP = 829, - ERR_GUILD_LEADER_REPLACED = 830, - ERR_TRANSMOGRIFY_CANT_EQUIP = 831, - ERR_TRANSMOGRIFY_INVALID_ITEM_TYPE = 832, - ERR_TRANSMOGRIFY_NOT_SOULBOUND = 833, - ERR_TRANSMOGRIFY_INVALID_SOURCE = 834, - ERR_TRANSMOGRIFY_INVALID_DESTINATION = 835, - ERR_TRANSMOGRIFY_MISMATCH = 836, - ERR_TRANSMOGRIFY_LEGENDARY = 837, - ERR_TRANSMOGRIFY_SAME_ITEM = 838, - ERR_TRANSMOGRIFY_SAME_APPEARANCE = 839, - ERR_TRANSMOGRIFY_NOT_EQUIPPED = 840, - ERR_VOID_DEPOSIT_FULL = 841, - ERR_VOID_WITHDRAW_FULL = 842, - ERR_VOID_STORAGE_WRAPPED = 843, - ERR_VOID_STORAGE_STACKABLE = 844, - ERR_VOID_STORAGE_UNBOUND = 845, - ERR_VOID_STORAGE_REPAIR = 846, - ERR_VOID_STORAGE_CHARGES = 847, - ERR_VOID_STORAGE_QUEST = 848, - ERR_VOID_STORAGE_CONJURED = 849, - ERR_VOID_STORAGE_MAIL = 850, - ERR_VOID_STORAGE_BAG = 851, - ERR_VOID_TRANSFER_STORAGE_FULL = 852, - ERR_VOID_TRANSFER_INV_FULL = 853, - ERR_VOID_TRANSFER_INTERNAL_ERROR = 854, - ERR_VOID_TRANSFER_ITEM_INVALID = 855, - ERR_DIFFICULTY_DISABLED_IN_LFG = 856, - ERR_VOID_STORAGE_UNIQUE = 857, - ERR_VOID_STORAGE_LOOT = 858, - ERR_VOID_STORAGE_HOLIDAY = 859, - ERR_VOID_STORAGE_DURATION = 860, - ERR_VOID_STORAGE_LOAD_FAILED = 861, - ERR_VOID_STORAGE_INVALID_ITEM = 862, - ERR_PARENTAL_CONTROLS_CHAT_MUTED = 863, - ERR_SOR_START_EXPERIENCE_INCOMPLETE = 864, - ERR_SOR_INVALID_EMAIL = 865, - ERR_SOR_INVALID_COMMENT = 866, - ERR_CHALLENGE_MODE_RESET_COOLDOWN_S = 867, - ERR_CHALLENGE_MODE_RESET_KEYSTONE = 868, - ERR_PET_JOURNAL_ALREADY_IN_LOADOUT = 869, - ERR_REPORT_SUBMITTED_SUCCESSFULLY = 870, - ERR_REPORT_SUBMISSION_FAILED = 871, - ERR_SUGGESTION_SUBMITTED_SUCCESSFULLY = 872, - ERR_BUG_SUBMITTED_SUCCESSFULLY = 873, - ERR_CHALLENGE_MODE_ENABLED = 874, - ERR_CHALLENGE_MODE_DISABLED = 875, - ERR_PETBATTLE_CREATE_FAILED = 876, - ERR_PETBATTLE_NOT_HERE = 877, - ERR_PETBATTLE_NOT_HERE_ON_TRANSPORT = 878, - ERR_PETBATTLE_NOT_HERE_UNEVEN_GROUND = 879, - ERR_PETBATTLE_NOT_HERE_OBSTRUCTED = 880, - ERR_PETBATTLE_NOT_WHILE_IN_COMBAT = 881, - ERR_PETBATTLE_NOT_WHILE_DEAD = 882, - ERR_PETBATTLE_NOT_WHILE_FLYING = 883, - ERR_PETBATTLE_TARGET_INVALID = 884, - ERR_PETBATTLE_TARGET_OUT_OF_RANGE = 885, - ERR_PETBATTLE_TARGET_NOT_CAPTURABLE = 886, - ERR_PETBATTLE_NOT_A_TRAINER = 887, - ERR_PETBATTLE_DECLINED = 888, - ERR_PETBATTLE_IN_BATTLE = 889, - ERR_PETBATTLE_INVALID_LOADOUT = 890, - ERR_PETBATTLE_ALL_PETS_DEAD = 891, - ERR_PETBATTLE_NO_PETS_IN_SLOTS = 892, - ERR_PETBATTLE_NO_ACCOUNT_LOCK = 893, - ERR_PETBATTLE_WILD_PET_TAPPED = 894, - ERR_PETBATTLE_RESTRICTED_ACCOUNT = 895, - ERR_PETBATTLE_NOT_WHILE_IN_MATCHED_BATTLE = 896, - ERR_CANT_HAVE_MORE_PETS_OF_THAT_TYPE = 897, - ERR_CANT_HAVE_MORE_PETS = 898, - ERR_PVP_MAP_NOT_FOUND = 899, - ERR_PVP_MAP_NOT_SET = 900, - ERR_PETBATTLE_QUEUE_QUEUED = 901, - ERR_PETBATTLE_QUEUE_ALREADY_QUEUED = 902, - ERR_PETBATTLE_QUEUE_JOIN_FAILED = 903, - ERR_PETBATTLE_QUEUE_JOURNAL_LOCK = 904, - ERR_PETBATTLE_QUEUE_REMOVED = 905, - ERR_PETBATTLE_QUEUE_PROPOSAL_DECLINED = 906, - ERR_PETBATTLE_QUEUE_PROPOSAL_TIMEOUT = 907, - ERR_PETBATTLE_QUEUE_OPPONENT_DECLINED = 908, - ERR_PETBATTLE_QUEUE_REQUEUED_INTERNAL = 909, - ERR_PETBATTLE_QUEUE_REQUEUED_REMOVED = 910, - ERR_PETBATTLE_QUEUE_SLOT_LOCKED = 911, - ERR_PETBATTLE_QUEUE_SLOT_EMPTY = 912, - ERR_PETBATTLE_QUEUE_SLOT_NO_TRACKER = 913, - ERR_PETBATTLE_QUEUE_SLOT_NO_SPECIES = 914, - ERR_PETBATTLE_QUEUE_SLOT_CANT_BATTLE = 915, - ERR_PETBATTLE_QUEUE_SLOT_REVOKED = 916, - ERR_PETBATTLE_QUEUE_SLOT_DEAD = 917, - ERR_PETBATTLE_QUEUE_SLOT_NO_PET = 918, - ERR_PETBATTLE_QUEUE_NOT_WHILE_NEUTRAL = 919, - ERR_PETBATTLE_GAME_TIME_LIMIT_WARNING = 920, - ERR_PETBATTLE_GAME_ROUNDS_LIMIT_WARNING = 921, - ERR_HAS_RESTRICTION = 922, - ERR_ITEM_UPGRADE_ITEM_TOO_LOW_LEVEL = 923, - ERR_ITEM_UPGRADE_NO_PATH = 924, - ERR_ITEM_UPGRADE_NO_MORE_UPGRADES = 925, - ERR_BONUS_ROLL_EMPTY = 926, - ERR_CHALLENGE_MODE_FULL = 927, - ERR_CHALLENGE_MODE_IN_PROGRESS = 928, - ERR_CHALLENGE_MODE_INCORRECT_KEYSTONE = 929, - ERR_BATTLETAG_FRIEND_NOT_FOUND = 930, - ERR_BATTLETAG_FRIEND_NOT_VALID = 931, - ERR_BATTLETAG_FRIEND_NOT_ALLOWED = 932, - ERR_BATTLETAG_FRIEND_THROTTLED = 933, - ERR_BATTLETAG_FRIEND_SUCCESS = 934, - ERR_PET_TOO_HIGH_LEVEL_TO_UNCAGE = 935, - ERR_PETBATTLE_INTERNAL = 936, - ERR_CANT_CAGE_PET_YET = 937, - ERR_NO_LOOT_IN_CHALLENGE_MODE = 938, - ERR_QUEST_PET_BATTLE_VICTORIES_PVP_II = 939, - ERR_ROLE_CHECK_ALREADY_IN_PROGRESS = 940, - ERR_RECRUIT_A_FRIEND_ACCOUNT_LIMIT = 941, - ERR_RECRUIT_A_FRIEND_FAILED = 942, - ERR_SET_LOOT_PERSONAL = 943, - ERR_SET_LOOT_METHOD_FAILED_COMBAT = 944, - ERR_REAGENT_BANK_FULL = 945, - ERR_REAGENT_BANK_LOCKED = 946, - ERR_GARRISON_BUILDING_EXISTS = 947, - ERR_GARRISON_INVALID_PLOT = 948, - ERR_GARRISON_INVALID_BUILDINGID = 949, - ERR_GARRISON_INVALID_PLOT_BUILDING = 950, - ERR_GARRISON_REQUIRES_BLUEPRINT = 951, - ERR_GARRISON_NOT_ENOUGH_CURRENCY = 952, - ERR_GARRISON_NOT_ENOUGH_GOLD = 953, - ERR_GARRISON_COMPLETE_MISSION_WRONG_FOLLOWER_TYPE = 954, - ERR_ALREADY_USING_LFG_LIST = 955, - ERR_RESTRICTED_ACCOUNT_LFG_LIST_TRIAL = 956, - ERR_TOY_USE_LIMIT_REACHED = 957, - ERR_TOY_ALREADY_KNOWN = 958, - ERR_TRANSMOG_SET_ALREADY_KNOWN = 959, - ERR_NOT_ENOUGH_CURRENCY = 960, - ERR_SPEC_IS_DISABLED = 961, - ERR_FEATURE_RESTRICTED_TRIAL = 962, - ERR_CANT_BE_OBLITERATED = 963, - ERR_ARTIFACT_RELIC_DOES_NOT_MATCH_ARTIFACT = 964, - ERR_MUST_EQUIP_ARTIFACT = 965, - ERR_CANT_DO_THAT_RIGHT_NOW = 966, - ERR_AFFECTING_COMBAT = 967, - ERR_EQUIPMENT_MANAGER_COMBAT_SWAP_S = 968, - ERR_EQUIPMENT_MANAGER_BAGS_FULL = 969, - ERR_EQUIPMENT_MANAGER_MISSING_ITEM_S = 970, - ERR_MOVIE_RECORDING_WARNING_PERF = 971, - ERR_MOVIE_RECORDING_WARNING_DISK_FULL = 972, - ERR_MOVIE_RECORDING_WARNING_NO_MOVIE = 973, - ERR_MOVIE_RECORDING_WARNING_REQUIREMENTS = 974, - ERR_MOVIE_RECORDING_WARNING_COMPRESSING = 975, - ERR_NO_CHALLENGE_MODE_REWARD = 976, - ERR_CLAIMED_CHALLENGE_MODE_REWARD = 977, - ERR_CHALLENGE_MODE_PERIOD_RESET_SS = 978, - ERR_CANT_DO_THAT_CHALLENGE_MODE_ACTIVE = 979, - ERR_TALENT_FAILED_REST_AREA = 980, - ERR_CANNOT_ABANDON_LAST_PET = 981, - ERR_TEST_CVAR_SET_SSS = 982, - ERR_QUEST_TURN_IN_FAIL_REASON = 983, - ERR_CLAIMED_CHALLENGE_MODE_REWARD_OLD = 984, - ERR_TALENT_GRANTED_BY_AURA = 985, - ERR_CHALLENGE_MODE_ALREADY_COMPLETE = 986, - ERR_GLYPH_TARGET_NOT_AVAILABLE = 987, + ERR_CLIENT_ON_TRANSPORT = 152, + ERR_KILLED_BY_S = 153, + ERR_LOOT_LOCKED = 154, + ERR_LOOT_TOO_FAR = 155, + ERR_LOOT_DIDNT_KILL = 156, + ERR_LOOT_BAD_FACING = 157, + ERR_LOOT_NOTSTANDING = 158, + ERR_LOOT_STUNNED = 159, + ERR_LOOT_NO_UI = 160, + ERR_LOOT_WHILE_INVULNERABLE = 161, + ERR_NO_LOOT = 162, + ERR_QUEST_ACCEPTED_S = 163, + ERR_QUEST_COMPLETE_S = 164, + ERR_QUEST_FAILED_S = 165, + ERR_QUEST_FAILED_BAG_FULL_S = 166, + ERR_QUEST_FAILED_MAX_COUNT_S = 167, + ERR_QUEST_FAILED_LOW_LEVEL = 168, + ERR_QUEST_FAILED_MISSING_ITEMS = 169, + ERR_QUEST_FAILED_WRONG_RACE = 170, + ERR_QUEST_FAILED_NOT_ENOUGH_MONEY = 171, + ERR_QUEST_FAILED_EXPANSION = 172, + ERR_QUEST_ONLY_ONE_TIMED = 173, + ERR_QUEST_NEED_PREREQS = 174, + ERR_QUEST_NEED_PREREQS_CUSTOM = 175, + ERR_QUEST_ALREADY_ON = 176, + ERR_QUEST_ALREADY_DONE = 177, + ERR_QUEST_ALREADY_DONE_DAILY = 178, + ERR_QUEST_HAS_IN_PROGRESS = 179, + ERR_QUEST_REWARD_EXP_I = 180, + ERR_QUEST_REWARD_MONEY_S = 181, + ERR_QUEST_MUST_CHOOSE = 182, + ERR_QUEST_LOG_FULL = 183, + ERR_COMBAT_DAMAGE_SSI = 184, + ERR_INSPECT_S = 185, + ERR_CANT_USE_ITEM = 186, + ERR_CANT_USE_ITEM_IN_ARENA = 187, + ERR_CANT_USE_ITEM_IN_RATED_BATTLEGROUND = 188, + ERR_MUST_EQUIP_ITEM = 189, + ERR_PASSIVE_ABILITY = 190, + ERR_2HSKILLNOTFOUND = 191, + ERR_NO_ATTACK_TARGET = 192, + ERR_INVALID_ATTACK_TARGET = 193, + ERR_ATTACK_PVP_TARGET_WHILE_UNFLAGGED = 194, + ERR_ATTACK_STUNNED = 195, + ERR_ATTACK_PACIFIED = 196, + ERR_ATTACK_MOUNTED = 197, + ERR_ATTACK_FLEEING = 198, + ERR_ATTACK_CONFUSED = 199, + ERR_ATTACK_CHARMED = 200, + ERR_ATTACK_DEAD = 201, + ERR_ATTACK_PREVENTED_BY_MECHANIC_S = 202, + ERR_ATTACK_CHANNEL = 203, + ERR_TAXISAMENODE = 204, + ERR_TAXINOSUCHPATH = 205, + ERR_TAXIUNSPECIFIEDSERVERERROR = 206, + ERR_TAXINOTENOUGHMONEY = 207, + ERR_TAXITOOFARAWAY = 208, + ERR_TAXINOVENDORNEARBY = 209, + ERR_TAXINOTVISITED = 210, + ERR_TAXIPLAYERBUSY = 211, + ERR_TAXIPLAYERALREADYMOUNTED = 212, + ERR_TAXIPLAYERSHAPESHIFTED = 213, + ERR_TAXIPLAYERMOVING = 214, + ERR_TAXINOPATHS = 215, + ERR_TAXINOTELIGIBLE = 216, + ERR_TAXINOTSTANDING = 217, + ERR_NO_REPLY_TARGET = 218, + ERR_GENERIC_NO_TARGET = 219, + ERR_INITIATE_TRADE_S = 220, + ERR_TRADE_REQUEST_S = 221, + ERR_TRADE_BLOCKED_S = 222, + ERR_TRADE_TARGET_DEAD = 223, + ERR_TRADE_TOO_FAR = 224, + ERR_TRADE_CANCELLED = 225, + ERR_TRADE_COMPLETE = 226, + ERR_TRADE_BAG_FULL = 227, + ERR_TRADE_TARGET_BAG_FULL = 228, + ERR_TRADE_MAX_COUNT_EXCEEDED = 229, + ERR_TRADE_TARGET_MAX_COUNT_EXCEEDED = 230, + ERR_ALREADY_TRADING = 231, + ERR_MOUNT_INVALIDMOUNTEE = 232, + ERR_MOUNT_TOOFARAWAY = 233, + ERR_MOUNT_ALREADYMOUNTED = 234, + ERR_MOUNT_NOTMOUNTABLE = 235, + ERR_MOUNT_NOTYOURPET = 236, + ERR_MOUNT_OTHER = 237, + ERR_MOUNT_LOOTING = 238, + ERR_MOUNT_RACECANTMOUNT = 239, + ERR_MOUNT_SHAPESHIFTED = 240, + ERR_MOUNT_NO_FAVORITES = 241, + ERR_DISMOUNT_NOPET = 242, + ERR_DISMOUNT_NOTMOUNTED = 243, + ERR_DISMOUNT_NOTYOURPET = 244, + ERR_SPELL_FAILED_TOTEMS = 245, + ERR_SPELL_FAILED_REAGENTS = 246, + ERR_SPELL_FAILED_REAGENTS_GENERIC = 247, + ERR_CANT_TRADE_GOLD = 248, + ERR_SPELL_FAILED_EQUIPPED_ITEM = 249, + ERR_SPELL_FAILED_EQUIPPED_ITEM_CLASS_S = 250, + ERR_SPELL_FAILED_SHAPESHIFT_FORM_S = 251, + ERR_SPELL_FAILED_ANOTHER_IN_PROGRESS = 252, + ERR_BADATTACKFACING = 253, + ERR_BADATTACKPOS = 254, + ERR_CHEST_IN_USE = 255, + ERR_USE_CANT_OPEN = 256, + ERR_USE_LOCKED = 257, + ERR_DOOR_LOCKED = 258, + ERR_BUTTON_LOCKED = 259, + ERR_USE_LOCKED_WITH_ITEM_S = 260, + ERR_USE_LOCKED_WITH_SPELL_S = 261, + ERR_USE_LOCKED_WITH_SPELL_KNOWN_SI = 262, + ERR_USE_TOO_FAR = 263, + ERR_USE_BAD_ANGLE = 264, + ERR_USE_OBJECT_MOVING = 265, + ERR_USE_SPELL_FOCUS = 266, + ERR_USE_DESTROYED = 267, + ERR_SET_LOOT_FREEFORALL = 268, + ERR_SET_LOOT_ROUNDROBIN = 269, + ERR_SET_LOOT_MASTER = 270, + ERR_SET_LOOT_GROUP = 271, + ERR_SET_LOOT_THRESHOLD_S = 272, + ERR_NEW_LOOT_MASTER_S = 273, + ERR_SPECIFY_MASTER_LOOTER = 274, + ERR_LOOT_SPEC_CHANGED_S = 275, + ERR_TAME_FAILED = 276, + ERR_CHAT_WHILE_DEAD = 277, + ERR_CHAT_PLAYER_NOT_FOUND_S = 278, + ERR_NEWTAXIPATH = 279, + ERR_NO_PET = 280, + ERR_NOTYOURPET = 281, + ERR_PET_NOT_RENAMEABLE = 282, + ERR_QUEST_OBJECTIVE_COMPLETE_S = 283, + ERR_QUEST_UNKNOWN_COMPLETE = 284, + ERR_QUEST_ADD_KILL_SII = 285, + ERR_QUEST_ADD_FOUND_SII = 286, + ERR_QUEST_ADD_ITEM_SII = 287, + ERR_QUEST_ADD_PLAYER_KILL_SII = 288, + ERR_CANNOTCREATEDIRECTORY = 289, + ERR_CANNOTCREATEFILE = 290, + ERR_PLAYER_WRONG_FACTION = 291, + ERR_PLAYER_IS_NEUTRAL = 292, + ERR_BANKSLOT_FAILED_TOO_MANY = 293, + ERR_BANKSLOT_INSUFFICIENT_FUNDS = 294, + ERR_BANKSLOT_NOTBANKER = 295, + ERR_FRIEND_DB_ERROR = 296, + ERR_FRIEND_LIST_FULL = 297, + ERR_FRIEND_ADDED_S = 298, + ERR_BATTLETAG_FRIEND_ADDED_S = 299, + ERR_FRIEND_ONLINE_SS = 300, + ERR_FRIEND_OFFLINE_S = 301, + ERR_FRIEND_NOT_FOUND = 302, + ERR_FRIEND_WRONG_FACTION = 303, + ERR_FRIEND_REMOVED_S = 304, + ERR_BATTLETAG_FRIEND_REMOVED_S = 305, + ERR_FRIEND_ERROR = 306, + ERR_FRIEND_ALREADY_S = 307, + ERR_FRIEND_SELF = 308, + ERR_FRIEND_DELETED = 309, + ERR_IGNORE_FULL = 310, + ERR_IGNORE_SELF = 311, + ERR_IGNORE_NOT_FOUND = 312, + ERR_IGNORE_ALREADY_S = 313, + ERR_IGNORE_ADDED_S = 314, + ERR_IGNORE_REMOVED_S = 315, + ERR_IGNORE_AMBIGUOUS = 316, + ERR_IGNORE_DELETED = 317, + ERR_ONLY_ONE_BOLT = 318, + ERR_ONLY_ONE_AMMO = 319, + ERR_SPELL_FAILED_EQUIPPED_SPECIFIC_ITEM = 320, + ERR_WRONG_BAG_TYPE_SUBCLASS = 321, + ERR_CANT_WRAP_STACKABLE = 322, + ERR_CANT_WRAP_EQUIPPED = 323, + ERR_CANT_WRAP_WRAPPED = 324, + ERR_CANT_WRAP_BOUND = 325, + ERR_CANT_WRAP_UNIQUE = 326, + ERR_CANT_WRAP_BAGS = 327, + ERR_OUT_OF_MANA = 328, + ERR_OUT_OF_RAGE = 329, + ERR_OUT_OF_FOCUS = 330, + ERR_OUT_OF_ENERGY = 331, + ERR_OUT_OF_CHI = 332, + ERR_OUT_OF_HEALTH = 333, + ERR_OUT_OF_RUNES = 334, + ERR_OUT_OF_RUNIC_POWER = 335, + ERR_OUT_OF_SOUL_SHARDS = 336, + ERR_OUT_OF_LUNAR_POWER = 337, + ERR_OUT_OF_HOLY_POWER = 338, + ERR_OUT_OF_MAELSTROM = 339, + ERR_OUT_OF_COMBO_POINTS = 340, + ERR_OUT_OF_INSANITY = 341, + ERR_OUT_OF_ARCANE_CHARGES = 342, + ERR_OUT_OF_FURY = 343, + ERR_OUT_OF_PAIN = 344, + ERR_OUT_OF_POWER_DISPLAY = 345, + ERR_LOOT_GONE = 346, + ERR_MOUNT_FORCEDDISMOUNT = 347, + ERR_AUTOFOLLOW_TOO_FAR = 348, + ERR_UNIT_NOT_FOUND = 349, + ERR_INVALID_FOLLOW_TARGET = 350, + ERR_INVALID_FOLLOW_PVP_COMBAT = 351, + ERR_INVALID_FOLLOW_TARGET_PVP_COMBAT = 352, + ERR_INVALID_INSPECT_TARGET = 353, + ERR_GUILDEMBLEM_SUCCESS = 354, + ERR_GUILDEMBLEM_INVALID_TABARD_COLORS = 355, + ERR_GUILDEMBLEM_NOGUILD = 356, + ERR_GUILDEMBLEM_NOTGUILDMASTER = 357, + ERR_GUILDEMBLEM_NOTENOUGHMONEY = 358, + ERR_GUILDEMBLEM_INVALIDVENDOR = 359, + ERR_EMBLEMERROR_NOTABARDGEOSET = 360, + ERR_SPELL_OUT_OF_RANGE = 361, + ERR_COMMAND_NEEDS_TARGET = 362, + ERR_NOAMMO_S = 363, + ERR_TOOBUSYTOFOLLOW = 364, + ERR_DUEL_REQUESTED = 365, + ERR_DUEL_CANCELLED = 366, + ERR_DEATHBINDALREADYBOUND = 367, + ERR_DEATHBIND_SUCCESS_S = 368, + ERR_NOEMOTEWHILERUNNING = 369, + ERR_ZONE_EXPLORED = 370, + ERR_ZONE_EXPLORED_XP = 371, + ERR_INVALID_ITEM_TARGET = 372, + ERR_INVALID_QUEST_TARGET = 373, + ERR_IGNORING_YOU_S = 374, + ERR_FISH_NOT_HOOKED = 375, + ERR_FISH_ESCAPED = 376, + ERR_SPELL_FAILED_NOTUNSHEATHED = 377, + ERR_PETITION_OFFERED_S = 378, + ERR_PETITION_SIGNED = 379, + ERR_PETITION_SIGNED_S = 380, + ERR_PETITION_DECLINED_S = 381, + ERR_PETITION_ALREADY_SIGNED = 382, + ERR_PETITION_RESTRICTED_ACCOUNT_TRIAL = 383, + ERR_PETITION_ALREADY_SIGNED_OTHER = 384, + ERR_PETITION_IN_GUILD = 385, + ERR_PETITION_CREATOR = 386, + ERR_PETITION_NOT_ENOUGH_SIGNATURES = 387, + ERR_PETITION_NOT_SAME_SERVER = 388, + ERR_PETITION_FULL = 389, + ERR_PETITION_ALREADY_SIGNED_BY_S = 390, + ERR_GUILD_NAME_INVALID = 391, + ERR_SPELL_UNLEARNED_S = 392, + ERR_PET_SPELL_ROOTED = 393, + ERR_PET_SPELL_AFFECTING_COMBAT = 394, + ERR_PET_SPELL_OUT_OF_RANGE = 395, + ERR_PET_SPELL_NOT_BEHIND = 396, + ERR_PET_SPELL_TARGETS_DEAD = 397, + ERR_PET_SPELL_DEAD = 398, + ERR_PET_SPELL_NOPATH = 399, + ERR_ITEM_CANT_BE_DESTROYED = 400, + ERR_TICKET_ALREADY_EXISTS = 401, + ERR_TICKET_CREATE_ERROR = 402, + ERR_TICKET_UPDATE_ERROR = 403, + ERR_TICKET_DB_ERROR = 404, + ERR_TICKET_NO_TEXT = 405, + ERR_TICKET_TEXT_TOO_LONG = 406, + ERR_OBJECT_IS_BUSY = 407, + ERR_EXHAUSTION_WELLRESTED = 408, + ERR_EXHAUSTION_RESTED = 409, + ERR_EXHAUSTION_NORMAL = 410, + ERR_EXHAUSTION_TIRED = 411, + ERR_EXHAUSTION_EXHAUSTED = 412, + ERR_NO_ITEMS_WHILE_SHAPESHIFTED = 413, + ERR_CANT_INTERACT_SHAPESHIFTED = 414, + ERR_REALM_NOT_FOUND = 415, + ERR_MAIL_QUEST_ITEM = 416, + ERR_MAIL_BOUND_ITEM = 417, + ERR_MAIL_CONJURED_ITEM = 418, + ERR_MAIL_BAG = 419, + ERR_MAIL_TO_SELF = 420, + ERR_MAIL_TARGET_NOT_FOUND = 421, + ERR_MAIL_DATABASE_ERROR = 422, + ERR_MAIL_DELETE_ITEM_ERROR = 423, + ERR_MAIL_WRAPPED_COD = 424, + ERR_MAIL_CANT_SEND_REALM = 425, + ERR_MAIL_SENT = 426, + ERR_NOT_HAPPY_ENOUGH = 427, + ERR_USE_CANT_IMMUNE = 428, + ERR_CANT_BE_DISENCHANTED = 429, + ERR_CANT_USE_DISARMED = 430, + ERR_AUCTION_QUEST_ITEM = 431, + ERR_AUCTION_BOUND_ITEM = 432, + ERR_AUCTION_CONJURED_ITEM = 433, + ERR_AUCTION_LIMITED_DURATION_ITEM = 434, + ERR_AUCTION_WRAPPED_ITEM = 435, + ERR_AUCTION_LOOT_ITEM = 436, + ERR_AUCTION_BAG = 437, + ERR_AUCTION_EQUIPPED_BAG = 438, + ERR_AUCTION_DATABASE_ERROR = 439, + ERR_AUCTION_BID_OWN = 440, + ERR_AUCTION_BID_INCREMENT = 441, + ERR_AUCTION_HIGHER_BID = 442, + ERR_AUCTION_MIN_BID = 443, + ERR_AUCTION_REPAIR_ITEM = 444, + ERR_AUCTION_USED_CHARGES = 445, + ERR_AUCTION_ALREADY_BID = 446, + ERR_AUCTION_STARTED = 447, + ERR_AUCTION_REMOVED = 448, + ERR_AUCTION_OUTBID_S = 449, + ERR_AUCTION_WON_S = 450, + ERR_AUCTION_SOLD_S = 451, + ERR_AUCTION_EXPIRED_S = 452, + ERR_AUCTION_REMOVED_S = 453, + ERR_AUCTION_BID_PLACED = 454, + ERR_LOGOUT_FAILED = 455, + ERR_QUEST_PUSH_SUCCESS_S = 456, + ERR_QUEST_PUSH_INVALID_S = 457, + ERR_QUEST_PUSH_ACCEPTED_S = 458, + ERR_QUEST_PUSH_DECLINED_S = 459, + ERR_QUEST_PUSH_BUSY_S = 460, + ERR_QUEST_PUSH_DEAD_S = 461, + ERR_QUEST_PUSH_LOG_FULL_S = 462, + ERR_QUEST_PUSH_ONQUEST_S = 463, + ERR_QUEST_PUSH_ALREADY_DONE_S = 464, + ERR_QUEST_PUSH_NOT_DAILY_S = 465, + ERR_QUEST_PUSH_TIMER_EXPIRED_S = 466, + ERR_QUEST_PUSH_NOT_IN_PARTY_S = 467, + ERR_QUEST_PUSH_DIFFERENT_SERVER_DAILY_S = 468, + ERR_QUEST_PUSH_NOT_ALLOWED_S = 469, + ERR_RAID_GROUP_LOWLEVEL = 470, + ERR_RAID_GROUP_ONLY = 471, + ERR_RAID_GROUP_FULL = 472, + ERR_RAID_GROUP_REQUIREMENTS_UNMATCH = 473, + ERR_CORPSE_IS_NOT_IN_INSTANCE = 474, + ERR_PVP_KILL_HONORABLE = 475, + ERR_PVP_KILL_DISHONORABLE = 476, + ERR_SPELL_FAILED_ALREADY_AT_FULL_HEALTH = 477, + ERR_SPELL_FAILED_ALREADY_AT_FULL_MANA = 478, + ERR_SPELL_FAILED_ALREADY_AT_FULL_POWER_S = 479, + ERR_AUTOLOOT_MONEY_S = 480, + ERR_GENERIC_STUNNED = 481, + ERR_TARGET_STUNNED = 482, + ERR_MUST_REPAIR_DURABILITY = 483, + ERR_RAID_YOU_JOINED = 484, + ERR_RAID_YOU_LEFT = 485, + ERR_INSTANCE_GROUP_JOINED_WITH_PARTY = 486, + ERR_INSTANCE_GROUP_JOINED_WITH_RAID = 487, + ERR_RAID_MEMBER_ADDED_S = 488, + ERR_RAID_MEMBER_REMOVED_S = 489, + ERR_INSTANCE_GROUP_ADDED_S = 490, + ERR_INSTANCE_GROUP_REMOVED_S = 491, + ERR_CLICK_ON_ITEM_TO_FEED = 492, + ERR_TOO_MANY_CHAT_CHANNELS = 493, + ERR_LOOT_ROLL_PENDING = 494, + ERR_LOOT_PLAYER_NOT_FOUND = 495, + ERR_NOT_IN_RAID = 496, + ERR_LOGGING_OUT = 497, + ERR_TARGET_LOGGING_OUT = 498, + ERR_NOT_WHILE_MOUNTED = 499, + ERR_NOT_WHILE_SHAPESHIFTED = 500, + ERR_NOT_IN_COMBAT = 501, + ERR_NOT_WHILE_DISARMED = 502, + ERR_PET_BROKEN = 503, + ERR_TALENT_WIPE_ERROR = 504, + ERR_SPEC_WIPE_ERROR = 505, + ERR_GLYPH_WIPE_ERROR = 506, + ERR_PET_SPEC_WIPE_ERROR = 507, + ERR_FEIGN_DEATH_RESISTED = 508, + ERR_MEETING_STONE_IN_QUEUE_S = 509, + ERR_MEETING_STONE_LEFT_QUEUE_S = 510, + ERR_MEETING_STONE_OTHER_MEMBER_LEFT = 511, + ERR_MEETING_STONE_PARTY_KICKED_FROM_QUEUE = 512, + ERR_MEETING_STONE_MEMBER_STILL_IN_QUEUE = 513, + ERR_MEETING_STONE_SUCCESS = 514, + ERR_MEETING_STONE_IN_PROGRESS = 515, + ERR_MEETING_STONE_MEMBER_ADDED_S = 516, + ERR_MEETING_STONE_GROUP_FULL = 517, + ERR_MEETING_STONE_NOT_LEADER = 518, + ERR_MEETING_STONE_INVALID_LEVEL = 519, + ERR_MEETING_STONE_TARGET_NOT_IN_PARTY = 520, + ERR_MEETING_STONE_TARGET_INVALID_LEVEL = 521, + ERR_MEETING_STONE_MUST_BE_LEADER = 522, + ERR_MEETING_STONE_NO_RAID_GROUP = 523, + ERR_MEETING_STONE_NEED_PARTY = 524, + ERR_MEETING_STONE_NOT_FOUND = 525, + ERR_GUILDEMBLEM_SAME = 526, + ERR_EQUIP_TRADE_ITEM = 527, + ERR_PVP_TOGGLE_ON = 528, + ERR_PVP_TOGGLE_OFF = 529, + ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS = 530, + ERR_GROUP_JOIN_BATTLEGROUND_DEAD = 531, + ERR_GROUP_JOIN_BATTLEGROUND_S = 532, + ERR_GROUP_JOIN_BATTLEGROUND_FAIL = 533, + ERR_GROUP_JOIN_BATTLEGROUND_TOO_MANY = 534, + ERR_SOLO_JOIN_BATTLEGROUND_S = 535, + ERR_JOIN_SINGLE_SCENARIO_S = 536, + ERR_BATTLEGROUND_TOO_MANY_QUEUES = 537, + ERR_BATTLEGROUND_CANNOT_QUEUE_FOR_RATED = 538, + ERR_BATTLEDGROUND_QUEUED_FOR_RATED = 539, + ERR_BATTLEGROUND_TEAM_LEFT_QUEUE = 540, + ERR_BATTLEGROUND_NOT_IN_BATTLEGROUND = 541, + ERR_ALREADY_IN_ARENA_TEAM_S = 542, + ERR_INVALID_PROMOTION_CODE = 543, + ERR_BG_PLAYER_JOINED_SS = 544, + ERR_BG_PLAYER_LEFT_S = 545, + ERR_RESTRICTED_ACCOUNT = 546, + ERR_RESTRICTED_ACCOUNT_TRIAL = 547, + ERR_PLAY_TIME_EXCEEDED = 548, + ERR_APPROACHING_PARTIAL_PLAY_TIME = 549, + ERR_APPROACHING_PARTIAL_PLAY_TIME_2 = 550, + ERR_APPROACHING_NO_PLAY_TIME = 551, + ERR_APPROACHING_NO_PLAY_TIME_2 = 552, + ERR_UNHEALTHY_TIME = 553, + ERR_CHAT_RESTRICTED_TRIAL = 554, + ERR_CHAT_THROTTLED = 555, + ERR_MAIL_REACHED_CAP = 556, + ERR_INVALID_RAID_TARGET = 557, + ERR_RAID_LEADER_READY_CHECK_START_S = 558, + ERR_READY_CHECK_IN_PROGRESS = 559, + ERR_READY_CHECK_THROTTLED = 560, + ERR_DUNGEON_DIFFICULTY_FAILED = 561, + ERR_DUNGEON_DIFFICULTY_CHANGED_S = 562, + ERR_TRADE_WRONG_REALM = 563, + ERR_TRADE_NOT_ON_TAPLIST = 564, + ERR_CHAT_PLAYER_AMBIGUOUS_S = 565, + ERR_LOOT_CANT_LOOT_THAT_NOW = 566, + ERR_LOOT_MASTER_INV_FULL = 567, + ERR_LOOT_MASTER_UNIQUE_ITEM = 568, + ERR_LOOT_MASTER_OTHER = 569, + ERR_FILTERING_YOU_S = 570, + ERR_USE_PREVENTED_BY_MECHANIC_S = 571, + ERR_ITEM_UNIQUE_EQUIPPABLE = 572, + ERR_LFG_LEADER_IS_LFM_S = 573, + ERR_LFG_PENDING = 574, + ERR_CANT_SPEAK_LANGAGE = 575, + ERR_VENDOR_MISSING_TURNINS = 576, + ERR_BATTLEGROUND_NOT_IN_TEAM = 577, + ERR_NOT_IN_BATTLEGROUND = 578, + ERR_NOT_ENOUGH_HONOR_POINTS = 579, + ERR_NOT_ENOUGH_ARENA_POINTS = 580, + ERR_SOCKETING_REQUIRES_META_GEM = 581, + ERR_SOCKETING_META_GEM_ONLY_IN_METASLOT = 582, + ERR_SOCKETING_REQUIRES_HYDRAULIC_GEM = 583, + ERR_SOCKETING_HYDRAULIC_GEM_ONLY_IN_HYDRAULICSLOT = 584, + ERR_SOCKETING_REQUIRES_COGWHEEL_GEM = 585, + ERR_SOCKETING_COGWHEEL_GEM_ONLY_IN_COGWHEELSLOT = 586, + ERR_SOCKETING_ITEM_TOO_LOW_LEVEL = 587, + ERR_ITEM_MAX_COUNT_SOCKETED = 588, + ERR_SYSTEM_DISABLED = 589, + ERR_QUEST_FAILED_TOO_MANY_DAILY_QUESTS_I = 590, + ERR_ITEM_MAX_COUNT_EQUIPPED_SOCKETED = 591, + ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED = 592, + ERR_USER_SQUELCHED = 593, + ERR_TOO_MUCH_GOLD = 594, + ERR_NOT_BARBER_SITTING = 595, + ERR_QUEST_FAILED_CAIS = 596, + ERR_INVITE_RESTRICTED_TRIAL = 597, + ERR_VOICE_IGNORE_FULL = 598, + ERR_VOICE_IGNORE_SELF = 599, + ERR_VOICE_IGNORE_NOT_FOUND = 600, + ERR_VOICE_IGNORE_ALREADY_S = 601, + ERR_VOICE_IGNORE_ADDED_S = 602, + ERR_VOICE_IGNORE_REMOVED_S = 603, + ERR_VOICE_IGNORE_AMBIGUOUS = 604, + ERR_VOICE_IGNORE_DELETED = 605, + ERR_UNKNOWN_MACRO_OPTION_S = 606, + ERR_NOT_DURING_ARENA_MATCH = 607, + ERR_PLAYER_SILENCED = 608, + ERR_PLAYER_UNSILENCED = 609, + ERR_COMSAT_DISCONNECT = 610, + ERR_COMSAT_RECONNECT_ATTEMPT = 611, + ERR_COMSAT_CONNECT_FAIL = 612, + ERR_MAIL_INVALID_ATTACHMENT_SLOT = 613, + ERR_MAIL_TOO_MANY_ATTACHMENTS = 614, + ERR_MAIL_INVALID_ATTACHMENT = 615, + ERR_MAIL_ATTACHMENT_EXPIRED = 616, + ERR_VOICE_CHAT_PARENTAL_DISABLE_MIC = 617, + ERR_PROFANE_CHAT_NAME = 618, + ERR_PLAYER_SILENCED_ECHO = 619, + ERR_PLAYER_UNSILENCED_ECHO = 620, + ERR_LOOT_CANT_LOOT_THAT = 621, + ERR_ARENA_EXPIRED_CAIS = 622, + ERR_GROUP_ACTION_THROTTLED = 623, + ERR_ALREADY_PICKPOCKETED = 624, + ERR_NAME_INVALID = 625, + ERR_NAME_NO_NAME = 626, + ERR_NAME_TOO_SHORT = 627, + ERR_NAME_TOO_LONG = 628, + ERR_NAME_MIXED_LANGUAGES = 629, + ERR_NAME_PROFANE = 630, + ERR_NAME_RESERVED = 631, + ERR_NAME_THREE_CONSECUTIVE = 632, + ERR_NAME_INVALID_SPACE = 633, + ERR_NAME_CONSECUTIVE_SPACES = 634, + ERR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 635, + ERR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 636, + ERR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 637, + ERR_REFER_A_FRIEND_NOT_REFERRED_BY = 638, + ERR_REFER_A_FRIEND_TARGET_TOO_HIGH = 639, + ERR_REFER_A_FRIEND_INSUFFICIENT_GRANTABLE_LEVELS = 640, + ERR_REFER_A_FRIEND_TOO_FAR = 641, + ERR_REFER_A_FRIEND_DIFFERENT_FACTION = 642, + ERR_REFER_A_FRIEND_NOT_NOW = 643, + ERR_REFER_A_FRIEND_GRANT_LEVEL_MAX_I = 644, + ERR_REFER_A_FRIEND_SUMMON_LEVEL_MAX_I = 645, + ERR_REFER_A_FRIEND_SUMMON_COOLDOWN = 646, + ERR_REFER_A_FRIEND_SUMMON_OFFLINE_S = 647, + ERR_REFER_A_FRIEND_INSUF_EXPAN_LVL = 648, + ERR_REFER_A_FRIEND_NOT_IN_LFG = 649, + ERR_REFER_A_FRIEND_NO_XREALM = 650, + ERR_REFER_A_FRIEND_MAP_INCOMING_TRANSFER_NOT_ALLOWED = 651, + ERR_NOT_SAME_ACCOUNT = 652, + ERR_BAD_ON_USE_ENCHANT = 653, + ERR_TRADE_SELF = 654, + ERR_TOO_MANY_SOCKETS = 655, + ERR_ITEM_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 656, + ERR_TRADE_TARGET_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 657, + ERR_ITEM_MAX_LIMIT_CATEGORY_SOCKETED_EXCEEDED_IS = 658, + ERR_ITEM_MAX_LIMIT_CATEGORY_EQUIPPED_EXCEEDED_IS = 659, + ERR_SHAPESHIFT_FORM_CANNOT_EQUIP = 660, + ERR_ITEM_INVENTORY_FULL_SATCHEL = 661, + ERR_SCALING_STAT_ITEM_LEVEL_EXCEEDED = 662, + ERR_SCALING_STAT_ITEM_LEVEL_TOO_LOW = 663, + ERR_PURCHASE_LEVEL_TOO_LOW = 664, + ERR_GROUP_SWAP_FAILED = 665, + ERR_INVITE_IN_COMBAT = 666, + ERR_INVALID_GLYPH_SLOT = 667, + ERR_GENERIC_NO_VALID_TARGETS = 668, + ERR_CALENDAR_EVENT_ALERT_S = 669, + ERR_PET_LEARN_SPELL_S = 670, + ERR_PET_LEARN_ABILITY_S = 671, + ERR_PET_SPELL_UNLEARNED_S = 672, + ERR_INVITE_UNKNOWN_REALM = 673, + ERR_INVITE_NO_PARTY_SERVER = 674, + ERR_INVITE_PARTY_BUSY = 675, + ERR_PARTY_TARGET_AMBIGUOUS = 676, + ERR_PARTY_LFG_INVITE_RAID_LOCKED = 677, + ERR_PARTY_LFG_BOOT_LIMIT = 678, + ERR_PARTY_LFG_BOOT_COOLDOWN_S = 679, + ERR_PARTY_LFG_BOOT_NOT_ELIGIBLE_S = 680, + ERR_PARTY_LFG_BOOT_INPATIENT_TIMER_S = 681, + ERR_PARTY_LFG_BOOT_IN_PROGRESS = 682, + ERR_PARTY_LFG_BOOT_TOO_FEW_PLAYERS = 683, + ERR_PARTY_LFG_BOOT_VOTE_SUCCEEDED = 684, + ERR_PARTY_LFG_BOOT_VOTE_FAILED = 685, + ERR_PARTY_LFG_BOOT_IN_COMBAT = 686, + ERR_PARTY_LFG_BOOT_DUNGEON_COMPLETE = 687, + ERR_PARTY_LFG_BOOT_LOOT_ROLLS = 688, + ERR_PARTY_LFG_BOOT_VOTE_REGISTERED = 689, + ERR_PARTY_PRIVATE_GROUP_ONLY = 690, + ERR_PARTY_LFG_TELEPORT_IN_COMBAT = 691, + ERR_RAID_DISALLOWED_BY_LEVEL = 692, + ERR_RAID_DISALLOWED_BY_CROSS_REALM = 693, + ERR_PARTY_ROLE_NOT_AVAILABLE = 694, + ERR_JOIN_LFG_OBJECT_FAILED = 695, + ERR_LFG_REMOVED_LEVELUP = 696, + ERR_LFG_REMOVED_XP_TOGGLE = 697, + ERR_LFG_REMOVED_FACTION_CHANGE = 698, + ERR_BATTLEGROUND_INFO_THROTTLED = 699, + ERR_BATTLEGROUND_ALREADY_IN = 700, + ERR_ARENA_TEAM_CHANGE_FAILED_QUEUED = 701, + ERR_ARENA_TEAM_PERMISSIONS = 702, + ERR_NOT_WHILE_FALLING = 703, + ERR_NOT_WHILE_MOVING = 704, + ERR_NOT_WHILE_FATIGUED = 705, + ERR_MAX_SOCKETS = 706, + ERR_MULTI_CAST_ACTION_TOTEM_S = 707, + ERR_BATTLEGROUND_JOIN_LEVELUP = 708, + ERR_REMOVE_FROM_PVP_QUEUE_XP_GAIN = 709, + ERR_BATTLEGROUND_JOIN_XP_GAIN = 710, + ERR_BATTLEGROUND_JOIN_MERCENARY = 711, + ERR_BATTLEGROUND_JOIN_TOO_MANY_HEALERS = 712, + ERR_BATTLEGROUND_JOIN_TOO_MANY_TANKS = 713, + ERR_BATTLEGROUND_JOIN_TOO_MANY_DAMAGE = 714, + ERR_RAID_DIFFICULTY_FAILED = 715, + ERR_RAID_DIFFICULTY_CHANGED_S = 716, + ERR_LEGACY_RAID_DIFFICULTY_CHANGED_S = 717, + ERR_RAID_LOCKOUT_CHANGED_S = 718, + ERR_RAID_CONVERTED_TO_PARTY = 719, + ERR_PARTY_CONVERTED_TO_RAID = 720, + ERR_PLAYER_DIFFICULTY_CHANGED_S = 721, + ERR_GMRESPONSE_DB_ERROR = 722, + ERR_BATTLEGROUND_JOIN_RANGE_INDEX = 723, + ERR_ARENA_JOIN_RANGE_INDEX = 724, + ERR_REMOVE_FROM_PVP_QUEUE_FACTION_CHANGE = 725, + ERR_BATTLEGROUND_JOIN_FAILED = 726, + ERR_BATTLEGROUND_JOIN_NO_VALID_SPEC_FOR_ROLE = 727, + ERR_BATTLEGROUND_JOIN_RESPEC = 728, + ERR_BATTLEGROUND_INVITATION_DECLINED = 729, + ERR_BATTLEGROUND_JOIN_TIMED_OUT = 730, + ERR_BATTLEGROUND_DUPE_QUEUE = 731, + ERR_BATTLEGROUND_JOIN_MUST_COMPLETE_QUEST = 732, + ERR_IN_BATTLEGROUND_RESPEC = 733, + ERR_MAIL_LIMITED_DURATION_ITEM = 734, + ERR_YELL_RESTRICTED_TRIAL = 735, + ERR_CHAT_RAID_RESTRICTED_TRIAL = 736, + ERR_LFG_ROLE_CHECK_FAILED = 737, + ERR_LFG_ROLE_CHECK_FAILED_TIMEOUT = 738, + ERR_LFG_ROLE_CHECK_FAILED_NOT_VIABLE = 739, + ERR_LFG_READY_CHECK_FAILED = 740, + ERR_LFG_READY_CHECK_FAILED_TIMEOUT = 741, + ERR_LFG_GROUP_FULL = 742, + ERR_LFG_NO_LFG_OBJECT = 743, + ERR_LFG_NO_SLOTS_PLAYER = 744, + ERR_LFG_NO_SLOTS_PARTY = 745, + ERR_LFG_NO_SPEC = 746, + ERR_LFG_MISMATCHED_SLOTS = 747, + ERR_LFG_MISMATCHED_SLOTS_LOCAL_XREALM = 748, + ERR_LFG_PARTY_PLAYERS_FROM_DIFFERENT_REALMS = 749, + ERR_LFG_MEMBERS_NOT_PRESENT = 750, + ERR_LFG_GET_INFO_TIMEOUT = 751, + ERR_LFG_INVALID_SLOT = 752, + ERR_LFG_DESERTER_PLAYER = 753, + ERR_LFG_DESERTER_PARTY = 754, + ERR_LFG_DEAD = 755, + ERR_LFG_RANDOM_COOLDOWN_PLAYER = 756, + ERR_LFG_RANDOM_COOLDOWN_PARTY = 757, + ERR_LFG_TOO_MANY_MEMBERS = 758, + ERR_LFG_TOO_FEW_MEMBERS = 759, + ERR_LFG_PROPOSAL_FAILED = 760, + ERR_LFG_PROPOSAL_DECLINED_SELF = 761, + ERR_LFG_PROPOSAL_DECLINED_PARTY = 762, + ERR_LFG_NO_SLOTS_SELECTED = 763, + ERR_LFG_NO_ROLES_SELECTED = 764, + ERR_LFG_ROLE_CHECK_INITIATED = 765, + ERR_LFG_READY_CHECK_INITIATED = 766, + ERR_LFG_PLAYER_DECLINED_ROLE_CHECK = 767, + ERR_LFG_PLAYER_DECLINED_READY_CHECK = 768, + ERR_LFG_JOINED_QUEUE = 769, + ERR_LFG_JOINED_FLEX_QUEUE = 770, + ERR_LFG_JOINED_RF_QUEUE = 771, + ERR_LFG_JOINED_SCENARIO_QUEUE = 772, + ERR_LFG_JOINED_WORLD_PVP_QUEUE = 773, + ERR_LFG_JOINED_BATTLEFIELD_QUEUE = 774, + ERR_LFG_JOINED_LIST = 775, + ERR_LFG_LEFT_QUEUE = 776, + ERR_LFG_LEFT_LIST = 777, + ERR_LFG_ROLE_CHECK_ABORTED = 778, + ERR_LFG_READY_CHECK_ABORTED = 779, + ERR_LFG_CANT_USE_BATTLEGROUND = 780, + ERR_LFG_CANT_USE_DUNGEONS = 781, + ERR_LFG_REASON_TOO_MANY_LFG = 782, + ERR_INVALID_TELEPORT_LOCATION = 783, + ERR_TOO_FAR_TO_INTERACT = 784, + ERR_BATTLEGROUND_PLAYERS_FROM_DIFFERENT_REALMS = 785, + ERR_DIFFICULTY_CHANGE_COOLDOWN_S = 786, + ERR_DIFFICULTY_CHANGE_COMBAT_COOLDOWN_S = 787, + ERR_DIFFICULTY_CHANGE_WORLDSTATE = 788, + ERR_DIFFICULTY_CHANGE_ENCOUNTER = 789, + ERR_DIFFICULTY_CHANGE_COMBAT = 790, + ERR_DIFFICULTY_CHANGE_PLAYER_BUSY = 791, + ERR_DIFFICULTY_CHANGE_ALREADY_STARTED = 792, + ERR_DIFFICULTY_CHANGE_OTHER_HEROIC_S = 793, + ERR_DIFFICULTY_CHANGE_HEROIC_INSTANCE_ALREADY_RUNNING = 794, + ERR_ARENA_TEAM_PARTY_SIZE = 795, + ERR_QUEST_FORCE_REMOVED_S = 796, + ERR_ATTACK_NO_ACTIONS = 797, + ERR_IN_RANDOM_BG = 798, + ERR_IN_NON_RANDOM_BG = 799, + ERR_AUCTION_ENOUGH_ITEMS = 800, + ERR_BN_FRIEND_SELF = 801, + ERR_BN_FRIEND_ALREADY = 802, + ERR_BN_FRIEND_BLOCKED = 803, + ERR_BN_FRIEND_LIST_FULL = 804, + ERR_BN_FRIEND_REQUEST_SENT = 805, + ERR_BN_BROADCAST_THROTTLE = 806, + ERR_BG_DEVELOPER_ONLY = 807, + ERR_CURRENCY_SPELL_SLOT_MISMATCH = 808, + ERR_CURRENCY_NOT_TRADABLE = 809, + ERR_REQUIRES_EXPANSION_S = 810, + ERR_QUEST_FAILED_SPELL = 811, + ERR_TALENT_FAILED_NOT_ENOUGH_TALENTS_IN_PRIMARY_TREE = 812, + ERR_TALENT_FAILED_NO_PRIMARY_TREE_SELECTED = 813, + ERR_TALENT_FAILED_CANT_REMOVE_TALENT = 814, + ERR_TALENT_FAILED_UNKNOWN = 815, + ERR_WARGAME_REQUEST_FAILURE = 816, + ERR_RANK_REQUIRES_AUTHENTICATOR = 817, + ERR_GUILD_BANK_VOUCHER_FAILED = 818, + ERR_WARGAME_REQUEST_SENT = 819, + ERR_REQUIRES_ACHIEVEMENT_I = 820, + ERR_REFUND_RESULT_EXCEED_MAX_CURRENCY = 821, + ERR_CANT_BUY_QUANTITY = 822, + ERR_ITEM_IS_BATTLE_PAY_LOCKED = 823, + ERR_PARTY_ALREADY_IN_BATTLEGROUND_QUEUE = 824, + ERR_PARTY_CONFIRMING_BATTLEGROUND_QUEUE = 825, + ERR_BATTLEFIELD_TEAM_PARTY_SIZE = 826, + ERR_INSUFF_TRACKED_CURRENCY_IS = 827, + ERR_NOT_ON_TOURNAMENT_REALM = 828, + ERR_GUILD_TRIAL_ACCOUNT_TRIAL = 829, + ERR_GUILD_TRIAL_ACCOUNT_VETERAN = 830, + ERR_GUILD_UNDELETABLE_DUE_TO_LEVEL = 831, + ERR_CANT_DO_THAT_IN_A_GROUP = 832, + ERR_GUILD_LEADER_REPLACED = 833, + ERR_TRANSMOGRIFY_CANT_EQUIP = 834, + ERR_TRANSMOGRIFY_INVALID_ITEM_TYPE = 835, + ERR_TRANSMOGRIFY_NOT_SOULBOUND = 836, + ERR_TRANSMOGRIFY_INVALID_SOURCE = 837, + ERR_TRANSMOGRIFY_INVALID_DESTINATION = 838, + ERR_TRANSMOGRIFY_MISMATCH = 839, + ERR_TRANSMOGRIFY_LEGENDARY = 840, + ERR_TRANSMOGRIFY_SAME_ITEM = 841, + ERR_TRANSMOGRIFY_SAME_APPEARANCE = 842, + ERR_TRANSMOGRIFY_NOT_EQUIPPED = 843, + ERR_VOID_DEPOSIT_FULL = 844, + ERR_VOID_WITHDRAW_FULL = 845, + ERR_VOID_STORAGE_WRAPPED = 846, + ERR_VOID_STORAGE_STACKABLE = 847, + ERR_VOID_STORAGE_UNBOUND = 848, + ERR_VOID_STORAGE_REPAIR = 849, + ERR_VOID_STORAGE_CHARGES = 850, + ERR_VOID_STORAGE_QUEST = 851, + ERR_VOID_STORAGE_CONJURED = 852, + ERR_VOID_STORAGE_MAIL = 853, + ERR_VOID_STORAGE_BAG = 854, + ERR_VOID_TRANSFER_STORAGE_FULL = 855, + ERR_VOID_TRANSFER_INV_FULL = 856, + ERR_VOID_TRANSFER_INTERNAL_ERROR = 857, + ERR_VOID_TRANSFER_ITEM_INVALID = 858, + ERR_DIFFICULTY_DISABLED_IN_LFG = 859, + ERR_VOID_STORAGE_UNIQUE = 860, + ERR_VOID_STORAGE_LOOT = 861, + ERR_VOID_STORAGE_HOLIDAY = 862, + ERR_VOID_STORAGE_DURATION = 863, + ERR_VOID_STORAGE_LOAD_FAILED = 864, + ERR_VOID_STORAGE_INVALID_ITEM = 865, + ERR_PARENTAL_CONTROLS_CHAT_MUTED = 866, + ERR_SOR_START_EXPERIENCE_INCOMPLETE = 867, + ERR_SOR_INVALID_EMAIL = 868, + ERR_SOR_INVALID_COMMENT = 869, + ERR_CHALLENGE_MODE_RESET_COOLDOWN_S = 870, + ERR_CHALLENGE_MODE_RESET_KEYSTONE = 871, + ERR_PET_JOURNAL_ALREADY_IN_LOADOUT = 872, + ERR_REPORT_SUBMITTED_SUCCESSFULLY = 873, + ERR_REPORT_SUBMISSION_FAILED = 874, + ERR_SUGGESTION_SUBMITTED_SUCCESSFULLY = 875, + ERR_BUG_SUBMITTED_SUCCESSFULLY = 876, + ERR_CHALLENGE_MODE_ENABLED = 877, + ERR_CHALLENGE_MODE_DISABLED = 878, + ERR_PETBATTLE_CREATE_FAILED = 879, + ERR_PETBATTLE_NOT_HERE = 880, + ERR_PETBATTLE_NOT_HERE_ON_TRANSPORT = 881, + ERR_PETBATTLE_NOT_HERE_UNEVEN_GROUND = 882, + ERR_PETBATTLE_NOT_HERE_OBSTRUCTED = 883, + ERR_PETBATTLE_NOT_WHILE_IN_COMBAT = 884, + ERR_PETBATTLE_NOT_WHILE_DEAD = 885, + ERR_PETBATTLE_NOT_WHILE_FLYING = 886, + ERR_PETBATTLE_TARGET_INVALID = 887, + ERR_PETBATTLE_TARGET_OUT_OF_RANGE = 888, + ERR_PETBATTLE_TARGET_NOT_CAPTURABLE = 889, + ERR_PETBATTLE_NOT_A_TRAINER = 890, + ERR_PETBATTLE_DECLINED = 891, + ERR_PETBATTLE_IN_BATTLE = 892, + ERR_PETBATTLE_INVALID_LOADOUT = 893, + ERR_PETBATTLE_ALL_PETS_DEAD = 894, + ERR_PETBATTLE_NO_PETS_IN_SLOTS = 895, + ERR_PETBATTLE_NO_ACCOUNT_LOCK = 896, + ERR_PETBATTLE_WILD_PET_TAPPED = 897, + ERR_PETBATTLE_RESTRICTED_ACCOUNT = 898, + ERR_PETBATTLE_OPPONENT_NOT_AVAILABLE = 899, + ERR_PETBATTLE_NOT_WHILE_IN_MATCHED_BATTLE = 900, + ERR_CANT_HAVE_MORE_PETS_OF_THAT_TYPE = 901, + ERR_CANT_HAVE_MORE_PETS = 902, + ERR_PVP_MAP_NOT_FOUND = 903, + ERR_PVP_MAP_NOT_SET = 904, + ERR_PETBATTLE_QUEUE_QUEUED = 905, + ERR_PETBATTLE_QUEUE_ALREADY_QUEUED = 906, + ERR_PETBATTLE_QUEUE_JOIN_FAILED = 907, + ERR_PETBATTLE_QUEUE_JOURNAL_LOCK = 908, + ERR_PETBATTLE_QUEUE_REMOVED = 909, + ERR_PETBATTLE_QUEUE_PROPOSAL_DECLINED = 910, + ERR_PETBATTLE_QUEUE_PROPOSAL_TIMEOUT = 911, + ERR_PETBATTLE_QUEUE_OPPONENT_DECLINED = 912, + ERR_PETBATTLE_QUEUE_REQUEUED_INTERNAL = 913, + ERR_PETBATTLE_QUEUE_REQUEUED_REMOVED = 914, + ERR_PETBATTLE_QUEUE_SLOT_LOCKED = 915, + ERR_PETBATTLE_QUEUE_SLOT_EMPTY = 916, + ERR_PETBATTLE_QUEUE_SLOT_NO_TRACKER = 917, + ERR_PETBATTLE_QUEUE_SLOT_NO_SPECIES = 918, + ERR_PETBATTLE_QUEUE_SLOT_CANT_BATTLE = 919, + ERR_PETBATTLE_QUEUE_SLOT_REVOKED = 920, + ERR_PETBATTLE_QUEUE_SLOT_DEAD = 921, + ERR_PETBATTLE_QUEUE_SLOT_NO_PET = 922, + ERR_PETBATTLE_QUEUE_NOT_WHILE_NEUTRAL = 923, + ERR_PETBATTLE_GAME_TIME_LIMIT_WARNING = 924, + ERR_PETBATTLE_GAME_ROUNDS_LIMIT_WARNING = 925, + ERR_HAS_RESTRICTION = 926, + ERR_ITEM_UPGRADE_ITEM_TOO_LOW_LEVEL = 927, + ERR_ITEM_UPGRADE_NO_PATH = 928, + ERR_ITEM_UPGRADE_NO_MORE_UPGRADES = 929, + ERR_BONUS_ROLL_EMPTY = 930, + ERR_CHALLENGE_MODE_FULL = 931, + ERR_CHALLENGE_MODE_IN_PROGRESS = 932, + ERR_CHALLENGE_MODE_INCORRECT_KEYSTONE = 933, + ERR_BATTLETAG_FRIEND_NOT_FOUND = 934, + ERR_BATTLETAG_FRIEND_NOT_VALID = 935, + ERR_BATTLETAG_FRIEND_NOT_ALLOWED = 936, + ERR_BATTLETAG_FRIEND_THROTTLED = 937, + ERR_BATTLETAG_FRIEND_SUCCESS = 938, + ERR_PET_TOO_HIGH_LEVEL_TO_UNCAGE = 939, + ERR_PETBATTLE_INTERNAL = 940, + ERR_CANT_CAGE_PET_YET = 941, + ERR_NO_LOOT_IN_CHALLENGE_MODE = 942, + ERR_QUEST_PET_BATTLE_VICTORIES_PVP_II = 943, + ERR_ROLE_CHECK_ALREADY_IN_PROGRESS = 944, + ERR_RECRUIT_A_FRIEND_ACCOUNT_LIMIT = 945, + ERR_RECRUIT_A_FRIEND_FAILED = 946, + ERR_SET_LOOT_PERSONAL = 947, + ERR_SET_LOOT_METHOD_FAILED_COMBAT = 948, + ERR_REAGENT_BANK_FULL = 949, + ERR_REAGENT_BANK_LOCKED = 950, + ERR_GARRISON_BUILDING_EXISTS = 951, + ERR_GARRISON_INVALID_PLOT = 952, + ERR_GARRISON_INVALID_BUILDINGID = 953, + ERR_GARRISON_INVALID_PLOT_BUILDING = 954, + ERR_GARRISON_REQUIRES_BLUEPRINT = 955, + ERR_GARRISON_NOT_ENOUGH_CURRENCY = 956, + ERR_GARRISON_NOT_ENOUGH_GOLD = 957, + ERR_GARRISON_COMPLETE_MISSION_WRONG_FOLLOWER_TYPE = 958, + ERR_ALREADY_USING_LFG_LIST = 959, + ERR_RESTRICTED_ACCOUNT_LFG_LIST_TRIAL = 960, + ERR_TOY_USE_LIMIT_REACHED = 961, + ERR_TOY_ALREADY_KNOWN = 962, + ERR_TRANSMOG_SET_ALREADY_KNOWN = 963, + ERR_NOT_ENOUGH_CURRENCY = 964, + ERR_SPEC_IS_DISABLED = 965, + ERR_FEATURE_RESTRICTED_TRIAL = 966, + ERR_CANT_BE_OBLITERATED = 967, + ERR_CANT_BE_SCRAPPED = 968, + ERR_ARTIFACT_RELIC_DOES_NOT_MATCH_ARTIFACT = 969, + ERR_MUST_EQUIP_ARTIFACT = 970, + ERR_CANT_DO_THAT_RIGHT_NOW = 971, + ERR_AFFECTING_COMBAT = 972, + ERR_EQUIPMENT_MANAGER_COMBAT_SWAP_S = 973, + ERR_EQUIPMENT_MANAGER_BAGS_FULL = 974, + ERR_EQUIPMENT_MANAGER_MISSING_ITEM_S = 975, + ERR_MOVIE_RECORDING_WARNING_PERF = 976, + ERR_MOVIE_RECORDING_WARNING_DISK_FULL = 977, + ERR_MOVIE_RECORDING_WARNING_NO_MOVIE = 978, + ERR_MOVIE_RECORDING_WARNING_REQUIREMENTS = 979, + ERR_MOVIE_RECORDING_WARNING_COMPRESSING = 980, + ERR_NO_CHALLENGE_MODE_REWARD = 981, + ERR_CLAIMED_CHALLENGE_MODE_REWARD = 982, + ERR_CHALLENGE_MODE_PERIOD_RESET_SS = 983, + ERR_CANT_DO_THAT_CHALLENGE_MODE_ACTIVE = 984, + ERR_TALENT_FAILED_REST_AREA = 985, + ERR_CANNOT_ABANDON_LAST_PET = 986, + ERR_TEST_CVAR_SET_SSS = 987, + ERR_QUEST_TURN_IN_FAIL_REASON = 988, + ERR_CLAIMED_CHALLENGE_MODE_REWARD_OLD = 989, + ERR_TALENT_GRANTED_BY_AURA = 990, + ERR_CHALLENGE_MODE_ALREADY_COMPLETE = 991, + ERR_GLYPH_TARGET_NOT_AVAILABLE = 992, + ERR_PVP_WARMODE_TOGGLE_ON = 993, + ERR_PVP_WARMODE_TOGGLE_OFF = 994, + ERR_SPELL_FAILED_LEVEL_REQUIREMENT = 995, + ERR_BATTLEGROUND_JOIN_REQUIRES_LEVEL = 996, + ERR_BATTLEGROUND_JOIN_DISQUALIFIED = 997, + ERR_VOICE_CHAT_GENERIC_UNABLE_TO_CONNECT = 998, + ERR_VOICE_CHAT_SERVICE_LOST = 999, + ERR_VOICE_CHAT_CHANNEL_NAME_TOO_SHORT = 1000, + ERR_VOICE_CHAT_CHANNEL_NAME_TOO_LONG = 1001, + ERR_VOICE_CHAT_CHANNEL_ALREADY_EXISTS = 1002, + ERR_VOICE_CHAT_TARGET_NOT_FOUND = 1003, + ERR_VOICE_CHAT_TOO_MANY_REQUESTS = 1004, + ERR_VOICE_CHAT_PLAYER_SILENCED = 1005, + ERR_VOICE_CHAT_PARENTAL_DISABLE_ALL = 1006, + ERR_VOICE_CHAT_DISABLED = 1007, + ERR_NO_PVP_REWARD = 1008, + ERR_CLAIMED_PVP_REWARD = 1009, }; #endif diff --git a/src/server/game/Phasing/PhaseShift.cpp b/src/server/game/Phasing/PhaseShift.cpp index b2885ae15bb..b7df2e5cd13 100644 --- a/src/server/game/Phasing/PhaseShift.cpp +++ b/src/server/game/Phasing/PhaseShift.cpp @@ -60,23 +60,23 @@ PhaseShift::EraseResult<PhaseShift::VisibleMapIdContainer> PhaseShift::RemoveVis return { VisibleMapIds.end(), false }; } -bool PhaseShift::AddUiWorldMapAreaIdSwap(uint32 uiWorldMapAreaId, int32 references /*= 1*/) +bool PhaseShift::AddUiMapPhaseId(uint32 uiMapPhaseId, int32 references /*= 1*/) { - auto insertResult = UiWorldMapAreaIdSwaps.emplace(uiWorldMapAreaId, UiWorldMapAreaIdSwapRef{ 0 }); + auto insertResult = UiMapPhaseIds.emplace(uiMapPhaseId, UiMapPhaseIdRef{ 0 }); insertResult.first->second.References += references; return insertResult.second; } -PhaseShift::EraseResult<PhaseShift::UiWorldMapAreaIdSwapContainer> PhaseShift::RemoveUiWorldMapAreaIdSwap(uint32 uiWorldMapAreaId) +PhaseShift::EraseResult<PhaseShift::UiMapPhaseIdContainer> PhaseShift::RemoveUiMapPhaseId(uint32 uiMapPhaseId) { - auto itr = UiWorldMapAreaIdSwaps.find(uiWorldMapAreaId); - if (itr != UiWorldMapAreaIdSwaps.end()) + auto itr = UiMapPhaseIds.find(uiMapPhaseId); + if (itr != UiMapPhaseIds.end()) { if (!--itr->second.References) - return { UiWorldMapAreaIdSwaps.erase(itr), true }; + return { UiMapPhaseIds.erase(itr), true }; return { itr, false }; } - return { UiWorldMapAreaIdSwaps.end(), false }; + return { UiMapPhaseIds.end(), false }; } void PhaseShift::Clear() @@ -84,7 +84,7 @@ void PhaseShift::Clear() ClearPhases(); PersonalGuid.Clear(); VisibleMapIds.clear(); - UiWorldMapAreaIdSwaps.clear(); + UiMapPhaseIds.clear(); } void PhaseShift::ClearPhases() diff --git a/src/server/game/Phasing/PhaseShift.h b/src/server/game/Phasing/PhaseShift.h index f1929168613..c15bf4100a2 100644 --- a/src/server/game/Phasing/PhaseShift.h +++ b/src/server/game/Phasing/PhaseShift.h @@ -68,7 +68,7 @@ public: int32 References = 0; TerrainSwapInfo const* VisibleMapInfo = nullptr; }; - struct UiWorldMapAreaIdSwapRef + struct UiMapPhaseIdRef { int32 References = 0; }; @@ -80,7 +80,7 @@ public: }; typedef boost::container::flat_set<PhaseRef> PhaseContainer; typedef std::map<uint32, VisibleMapIdRef> VisibleMapIdContainer; - typedef std::map<uint32, UiWorldMapAreaIdSwapRef> UiWorldMapAreaIdSwapContainer; + typedef std::map<uint32, UiMapPhaseIdRef> UiMapPhaseIdContainer; PhaseShift() : Flags(PhaseShiftFlags::Unphased), NonCosmeticReferences(0), CosmeticReferences(0), DefaultReferences(0), IsDbPhaseShift(false) { } @@ -94,10 +94,10 @@ public: bool HasVisibleMapId(uint32 visibleMapId) const { return VisibleMapIds.find(visibleMapId) != VisibleMapIds.end(); } VisibleMapIdContainer const& GetVisibleMapIds() const { return VisibleMapIds; } - bool AddUiWorldMapAreaIdSwap(uint32 uiWorldMapAreaId, int32 references = 1); - EraseResult<UiWorldMapAreaIdSwapContainer> RemoveUiWorldMapAreaIdSwap(uint32 uiWorldMapAreaId); - bool HasUiWorldMapAreaIdSwap(uint32 uiWorldMapAreaId) const { return UiWorldMapAreaIdSwaps.find(uiWorldMapAreaId) != UiWorldMapAreaIdSwaps.end(); } - UiWorldMapAreaIdSwapContainer const& GetUiWorldMapAreaIdSwaps() const { return UiWorldMapAreaIdSwaps; } + bool AddUiMapPhaseId(uint32 uiMapPhaseId, int32 references = 1); + EraseResult<UiMapPhaseIdContainer> RemoveUiMapPhaseId(uint32 uiMapPhaseId); + bool HasUiMapPhaseId(uint32 uiMapPhaseId) const { return UiMapPhaseIds.find(uiMapPhaseId) != UiMapPhaseIds.end(); } + UiMapPhaseIdContainer const& GetUiWorldMapAreaIdSwaps() const { return UiMapPhaseIds; } void Clear(); void ClearPhases(); @@ -111,7 +111,7 @@ protected: ObjectGuid PersonalGuid; PhaseContainer Phases; VisibleMapIdContainer VisibleMapIds; - UiWorldMapAreaIdSwapContainer UiWorldMapAreaIdSwaps; + UiMapPhaseIdContainer UiMapPhaseIds; void ModifyPhasesReferences(PhaseContainer::iterator itr, int32 references); void UpdateUnphasedFlag(); diff --git a/src/server/game/Phasing/PhasingHandler.cpp b/src/server/game/Phasing/PhasingHandler.cpp index e60c87b4816..1cce3361654 100644 --- a/src/server/game/Phasing/PhasingHandler.cpp +++ b/src/server/game/Phasing/PhasingHandler.cpp @@ -146,8 +146,8 @@ void PhasingHandler::AddVisibleMapId(WorldObject* object, uint32 visibleMapId) TerrainSwapInfo const* terrainSwapInfo = sObjectMgr->GetTerrainSwapInfo(visibleMapId); bool changed = object->GetPhaseShift().AddVisibleMapId(visibleMapId, terrainSwapInfo); - for (uint32 uiWorldMapAreaIDSwap : terrainSwapInfo->UiWorldMapAreaIDSwaps) - changed = object->GetPhaseShift().AddUiWorldMapAreaIdSwap(uiWorldMapAreaIDSwap) || changed; + for (uint32 uiMapPhaseId : terrainSwapInfo->UiMapPhaseIDs) + changed = object->GetPhaseShift().AddUiMapPhaseId(uiMapPhaseId) || changed; if (Unit* unit = object->ToUnit()) { @@ -165,8 +165,8 @@ void PhasingHandler::RemoveVisibleMapId(WorldObject* object, uint32 visibleMapId TerrainSwapInfo const* terrainSwapInfo = sObjectMgr->GetTerrainSwapInfo(visibleMapId); bool changed = object->GetPhaseShift().RemoveVisibleMapId(visibleMapId).Erased; - for (uint32 uiWorldMapAreaIDSwap : terrainSwapInfo->UiWorldMapAreaIDSwaps) - changed = object->GetPhaseShift().RemoveUiWorldMapAreaIdSwap(uiWorldMapAreaIDSwap).Erased || changed; + for (uint32 uiWorldMapAreaIDSwap : terrainSwapInfo->UiMapPhaseIDs) + changed = object->GetPhaseShift().RemoveUiMapPhaseId(uiWorldMapAreaIDSwap).Erased || changed; if (Unit* unit = object->ToUnit()) { @@ -198,18 +198,21 @@ void PhasingHandler::OnMapChange(WorldObject* object) ConditionSourceInfo srcInfo = ConditionSourceInfo(object); object->GetPhaseShift().VisibleMapIds.clear(); - object->GetPhaseShift().UiWorldMapAreaIdSwaps.clear(); + object->GetPhaseShift().UiMapPhaseIds.clear(); object->GetSuppressedPhaseShift().VisibleMapIds.clear(); - if (std::vector<TerrainSwapInfo*> const* visibleMapIds = sObjectMgr->GetTerrainSwapsForMap(object->GetMapId())) + for (auto visibleMapPair : sObjectMgr->GetTerrainSwaps()) { - for (TerrainSwapInfo const* visibleMapInfo : *visibleMapIds) + for (TerrainSwapInfo const* visibleMapInfo : visibleMapPair.second) { if (sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_TERRAIN_SWAP, visibleMapInfo->Id, srcInfo)) { - phaseShift.AddVisibleMapId(visibleMapInfo->Id, visibleMapInfo); - for (uint32 uiWorldMapAreaIdSwap : visibleMapInfo->UiWorldMapAreaIDSwaps) - phaseShift.AddUiWorldMapAreaIdSwap(uiWorldMapAreaIdSwap); + if (visibleMapPair.first == object->GetMapId()) + phaseShift.AddVisibleMapId(visibleMapInfo->Id, visibleMapInfo); + + // ui map is visible on all maps + for (uint32 uiMapPhaseId : visibleMapInfo->UiMapPhaseIDs) + phaseShift.AddUiMapPhaseId(uiMapPhaseId); } else suppressedPhaseShift.AddVisibleMapId(visibleMapInfo->Id, visibleMapInfo); @@ -317,8 +320,8 @@ void PhasingHandler::OnConditionChange(WorldObject* object) if (!sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_TERRAIN_SWAP, itr->first, srcInfo)) { newSuppressions.AddVisibleMapId(itr->first, itr->second.VisibleMapInfo, itr->second.References); - for (uint32 uiWorldMapAreaIdSwap : itr->second.VisibleMapInfo->UiWorldMapAreaIDSwaps) - changed = phaseShift.RemoveUiWorldMapAreaIdSwap(uiWorldMapAreaIdSwap).Erased || changed; + for (uint32 uiMapPhaseId : itr->second.VisibleMapInfo->UiMapPhaseIDs) + changed = phaseShift.RemoveUiMapPhaseId(uiMapPhaseId).Erased || changed; itr = phaseShift.VisibleMapIds.erase(itr); } @@ -331,8 +334,8 @@ void PhasingHandler::OnConditionChange(WorldObject* object) if (sConditionMgr->IsObjectMeetingNotGroupedConditions(CONDITION_SOURCE_TYPE_TERRAIN_SWAP, itr->first, srcInfo)) { changed = phaseShift.AddVisibleMapId(itr->first, itr->second.VisibleMapInfo, itr->second.References) || changed; - for (uint32 uiWorldMapAreaIdSwap : itr->second.VisibleMapInfo->UiWorldMapAreaIDSwaps) - changed = phaseShift.AddUiWorldMapAreaIdSwap(uiWorldMapAreaIdSwap) || changed; + for (uint32 uiMapPhaseId : itr->second.VisibleMapInfo->UiMapPhaseIDs) + changed = phaseShift.AddUiMapPhaseId(uiMapPhaseId) || changed; itr = suppressedPhaseShift.VisibleMapIds.erase(itr); } @@ -403,9 +406,9 @@ void PhasingHandler::SendToPlayer(Player const* player, PhaseShift const& phaseS phaseShiftChange.VisibleMapIDs.reserve(phaseShift.VisibleMapIds.size()); std::transform(phaseShift.VisibleMapIds.begin(), phaseShift.VisibleMapIds.end(), std::back_inserter(phaseShiftChange.VisibleMapIDs), [](PhaseShift::VisibleMapIdContainer::value_type const& visibleMapId) { return visibleMapId.first; }); - phaseShiftChange.UiWorldMapAreaIDSwaps.reserve(phaseShift.UiWorldMapAreaIdSwaps.size()); - std::transform(phaseShift.UiWorldMapAreaIdSwaps.begin(), phaseShift.UiWorldMapAreaIdSwaps.end(), std::back_inserter(phaseShiftChange.UiWorldMapAreaIDSwaps), - [](PhaseShift::UiWorldMapAreaIdSwapContainer::value_type const& uiWorldMapAreaIdSwap) { return uiWorldMapAreaIdSwap.first; }); + phaseShiftChange.UiMapPhaseIDs.reserve(phaseShift.UiMapPhaseIds.size()); + std::transform(phaseShift.UiMapPhaseIds.begin(), phaseShift.UiMapPhaseIds.end(), std::back_inserter(phaseShiftChange.UiMapPhaseIDs), + [](PhaseShift::UiMapPhaseIdContainer::value_type const& uiWorldMapAreaIdSwap) { return uiWorldMapAreaIdSwap.first; }); player->SendDirectMessage(phaseShiftChange.Write()); } @@ -545,10 +548,10 @@ void PhasingHandler::PrintToChat(ChatHandler* chat, PhaseShift const& phaseShift chat->PSendSysMessage(LANG_PHASESHIFT_VISIBLE_MAP_IDS, visibleMapIds.str().c_str()); } - if (!phaseShift.UiWorldMapAreaIdSwaps.empty()) + if (!phaseShift.UiMapPhaseIds.empty()) { std::ostringstream uiWorldMapAreaIdSwaps; - for (PhaseShift::UiWorldMapAreaIdSwapContainer::value_type const& uiWorldMapAreaIdSwap : phaseShift.UiWorldMapAreaIdSwaps) + for (PhaseShift::UiMapPhaseIdContainer::value_type const& uiWorldMapAreaIdSwap : phaseShift.UiMapPhaseIds) uiWorldMapAreaIdSwaps << uiWorldMapAreaIdSwap.first << ',' << ' '; chat->PSendSysMessage(LANG_PHASESHIFT_UI_WORLD_MAP_AREA_SWAPS, uiWorldMapAreaIdSwaps.str().c_str()); diff --git a/src/server/game/Quests/QuestDef.cpp b/src/server/game/Quests/QuestDef.cpp index 6a71256a77b..1a6f95244a9 100644 --- a/src/server/game/Quests/QuestDef.cpp +++ b/src/server/game/Quests/QuestDef.cpp @@ -37,38 +37,40 @@ Quest::Quest(Field* questRecord) ID = questRecord[0].GetUInt32(); Type = questRecord[1].GetUInt8(); Level = questRecord[2].GetInt32(); - MaxScalingLevel = questRecord[3].GetInt32(); - PackageID = questRecord[4].GetUInt32(); - MinLevel = questRecord[5].GetInt32(); - QuestSortID = questRecord[6].GetInt16(); - QuestInfoID = questRecord[7].GetUInt16(); - SuggestedPlayers = questRecord[8].GetUInt8(); - NextQuestInChain = questRecord[9].GetUInt32(); - RewardXPDifficulty = questRecord[10].GetUInt32(); - RewardXPMultiplier = questRecord[11].GetFloat(); - RewardMoney = questRecord[12].GetUInt32(); - RewardMoneyDifficulty = questRecord[13].GetUInt32(); - RewardMoneyMultiplier = questRecord[14].GetFloat(); - RewardBonusMoney = questRecord[15].GetUInt32(); + ScalingFactionGroup = questRecord[3].GetInt32(); + MaxScalingLevel = questRecord[4].GetInt32(); + PackageID = questRecord[5].GetUInt32(); + MinLevel = questRecord[6].GetInt32(); + QuestSortID = questRecord[7].GetInt16(); + QuestInfoID = questRecord[8].GetUInt16(); + SuggestedPlayers = questRecord[9].GetUInt8(); + NextQuestInChain = questRecord[10].GetUInt32(); + RewardXPDifficulty = questRecord[11].GetUInt32(); + RewardXPMultiplier = questRecord[12].GetFloat(); + RewardMoney = questRecord[13].GetUInt32(); + RewardMoneyDifficulty = questRecord[14].GetUInt32(); + RewardMoneyMultiplier = questRecord[15].GetFloat(); + RewardBonusMoney = questRecord[16].GetUInt32(); for (uint32 i = 0; i < QUEST_REWARD_DISPLAY_SPELL_COUNT; ++i) - RewardDisplaySpell[i] = questRecord[16 + i].GetUInt32(); - - RewardSpell = questRecord[19].GetUInt32(); - RewardHonor = questRecord[20].GetUInt32(); - RewardKillHonor = questRecord[21].GetUInt32(); - SourceItemId = questRecord[22].GetUInt32(); - RewardArtifactXPDifficulty = questRecord[23].GetUInt32(); - RewardArtifactXPMultiplier = questRecord[24].GetFloat(); - RewardArtifactCategoryID = questRecord[25].GetUInt32(); - Flags = questRecord[26].GetUInt32(); - FlagsEx = questRecord[27].GetUInt32(); + RewardDisplaySpell[i] = questRecord[17 + i].GetUInt32(); + + RewardSpell = questRecord[20].GetUInt32(); + RewardHonor = questRecord[21].GetUInt32(); + RewardKillHonor = questRecord[22].GetUInt32(); + SourceItemId = questRecord[23].GetUInt32(); + RewardArtifactXPDifficulty = questRecord[24].GetUInt32(); + RewardArtifactXPMultiplier = questRecord[25].GetFloat(); + RewardArtifactCategoryID = questRecord[26].GetUInt32(); + Flags = questRecord[27].GetUInt32(); + FlagsEx = questRecord[28].GetUInt32(); + FlagsEx2 = questRecord[29].GetUInt32(); for (uint32 i = 0; i < QUEST_ITEM_DROP_COUNT; ++i) { - RewardItemId[i] = questRecord[28 + i * 4].GetUInt32(); - RewardItemCount[i] = questRecord[29 + i * 4].GetUInt32(); - ItemDrop[i] = questRecord[30 + i * 4].GetUInt32(); - ItemDropQuantity[i] = questRecord[31 + i * 4].GetUInt32(); + RewardItemId[i] = questRecord[30 + i * 4].GetUInt32(); + RewardItemCount[i] = questRecord[31 + i * 4].GetUInt32(); + ItemDrop[i] = questRecord[32 + i * 4].GetUInt32(); + ItemDropQuantity[i] = questRecord[33 + i * 4].GetUInt32(); if (RewardItemId[i]) ++_rewItemsCount; @@ -76,63 +78,64 @@ Quest::Quest(Field* questRecord) for (uint32 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i) { - RewardChoiceItemId[i] = questRecord[44 + i * 3].GetUInt32(); - RewardChoiceItemCount[i] = questRecord[45 + i * 3].GetUInt32(); - RewardChoiceItemDisplayId[i] = questRecord[46 + i * 3].GetUInt32(); + RewardChoiceItemId[i] = questRecord[46 + i * 3].GetUInt32(); + RewardChoiceItemCount[i] = questRecord[47 + i * 3].GetUInt32(); + RewardChoiceItemDisplayId[i] = questRecord[48 + i * 3].GetUInt32(); if (RewardChoiceItemId[i]) ++_rewChoiceItemsCount; } - POIContinent = questRecord[62].GetUInt32(); - POIx = questRecord[63].GetFloat(); - POIy = questRecord[64].GetFloat(); - POIPriority = questRecord[65].GetUInt32(); + POIContinent = questRecord[64].GetUInt32(); + POIx = questRecord[65].GetFloat(); + POIy = questRecord[66].GetFloat(); + POIPriority = questRecord[67].GetUInt32(); - RewardTitleId = questRecord[66].GetUInt32(); - RewardArenaPoints = questRecord[67].GetUInt32(); - RewardSkillId = questRecord[68].GetUInt32(); - RewardSkillPoints = questRecord[69].GetUInt32(); + RewardTitleId = questRecord[68].GetUInt32(); + RewardArenaPoints = questRecord[69].GetUInt32(); + RewardSkillId = questRecord[70].GetUInt32(); + RewardSkillPoints = questRecord[71].GetUInt32(); - QuestGiverPortrait = questRecord[70].GetUInt32(); - QuestTurnInPortrait = questRecord[71].GetUInt32(); + QuestGiverPortrait = questRecord[72].GetUInt32(); + QuestGiverPortraitMount = questRecord[73].GetUInt32(); + QuestTurnInPortrait = questRecord[74].GetUInt32(); for (uint32 i = 0; i < QUEST_REWARD_REPUTATIONS_COUNT; ++i) { - RewardFactionId[i] = questRecord[72 + i * 4].GetUInt32(); - RewardFactionValue[i] = questRecord[73 + i * 4].GetInt32(); - RewardFactionOverride[i] = questRecord[74 + i * 4].GetInt32(); - RewardFactionCapIn[i] = questRecord[75 + i * 4].GetUInt32(); + RewardFactionId[i] = questRecord[75 + i * 4].GetUInt32(); + RewardFactionValue[i] = questRecord[76 + i * 4].GetInt32(); + RewardFactionOverride[i] = questRecord[77 + i * 4].GetInt32(); + RewardFactionCapIn[i] = questRecord[78 + i * 4].GetUInt32(); } - RewardReputationMask = questRecord[92].GetUInt32(); + RewardReputationMask = questRecord[95].GetUInt32(); for (uint32 i = 0; i < QUEST_REWARD_CURRENCY_COUNT; ++i) { - RewardCurrencyId[i] = questRecord[93 + i * 2].GetUInt32(); - RewardCurrencyCount[i] = questRecord[94 + i * 2].GetUInt32(); + RewardCurrencyId[i] = questRecord[96 + i * 2].GetUInt32(); + RewardCurrencyCount[i] = questRecord[97 + i * 2].GetUInt32(); if (RewardCurrencyId[i]) ++_rewCurrencyCount; } - SoundAccept = questRecord[101].GetUInt32(); - SoundTurnIn = questRecord[102].GetUInt32(); - AreaGroupID = questRecord[103].GetUInt32(); - LimitTime = questRecord[104].GetUInt32(); - AllowableRaces = questRecord[105].GetUInt64(); - QuestRewardID = questRecord[106].GetUInt32(); - Expansion = questRecord[107].GetInt32(); - - LogTitle = questRecord[108].GetString(); - LogDescription = questRecord[109].GetString(); - QuestDescription = questRecord[110].GetString(); - AreaDescription = questRecord[111].GetString(); - PortraitGiverText = questRecord[112].GetString(); - PortraitGiverName = questRecord[113].GetString(); - PortraitTurnInText = questRecord[114].GetString(); - PortraitTurnInName = questRecord[115].GetString(); - QuestCompletionLog = questRecord[116].GetString(); + SoundAccept = questRecord[104].GetUInt32(); + SoundTurnIn = questRecord[105].GetUInt32(); + AreaGroupID = questRecord[106].GetUInt32(); + LimitTime = questRecord[107].GetUInt32(); + AllowableRaces = questRecord[108].GetUInt64(); + TreasurePickerID = questRecord[109].GetInt32(); + Expansion = questRecord[110].GetInt32(); + + LogTitle = questRecord[111].GetString(); + LogDescription = questRecord[112].GetString(); + QuestDescription = questRecord[113].GetString(); + AreaDescription = questRecord[114].GetString(); + PortraitGiverText = questRecord[115].GetString(); + PortraitGiverName = questRecord[116].GetString(); + PortraitTurnInText = questRecord[117].GetString(); + PortraitTurnInName = questRecord[118].GetString(); + QuestCompletionLog = questRecord[119].GetString(); for (uint32 i = 0; i < QUEST_EMOTE_COUNT; ++i) { @@ -255,20 +258,20 @@ void Quest::LoadQuestObjectiveVisualEffect(Field* fields) } } -uint32 Quest::XPValue(uint32 playerLevel) const +uint32 Quest::XPValue(Player const* player) const { - if (playerLevel) + if (player) { - uint32 questLevel = uint32(Level == -1 ? playerLevel : Level); + uint32 questLevel = player->GetQuestLevel(this); QuestXPEntry const* questXp = sQuestXPStore.LookupEntry(questLevel); if (!questXp || RewardXPDifficulty >= 10) return 0; float multiplier = 1.0f; - if (questLevel != playerLevel) - multiplier = sXpGameTable.GetRow(std::min(playerLevel, questLevel))->Divisor / sXpGameTable.GetRow(playerLevel)->Divisor; + if (questLevel != player->getLevel()) + multiplier = sXpGameTable.GetRow(std::min<int32>(player->getLevel(), questLevel))->Divisor / sXpGameTable.GetRow(player->getLevel())->Divisor; - int32 diffFactor = 2 * (questLevel - playerLevel) + 20; + int32 diffFactor = 2 * (questLevel + (Level == -1 ? 0 : 5) - player->getLevel()) + 10; if (diffFactor < 1) diffFactor = 1; else if (diffFactor > 10) @@ -290,11 +293,9 @@ uint32 Quest::XPValue(uint32 playerLevel) const return 0; } -uint32 Quest::MoneyValue(uint8 playerLevel) const +uint32 Quest::MoneyValue(Player const* player) const { - uint8 level = Level == -1 ? playerLevel : Level; - - if (QuestMoneyRewardEntry const* money = sQuestMoneyRewardStore.LookupEntry(level)) + if (QuestMoneyRewardEntry const* money = sQuestMoneyRewardStore.LookupEntry(player->GetQuestLevel(this))) return money->Difficulty[GetRewMoneyDifficulty()] * GetMoneyMultiplier(); else return 0; @@ -315,11 +316,11 @@ void Quest::BuildQuestRewards(WorldPackets::Quest::QuestRewards& rewards, Player rewards.SpellCompletionID = GetRewSpell(); rewards.SkillLineID = GetRewardSkillId(); rewards.NumSkillUps = GetRewardSkillPoints(); - rewards.RewardID = GetRewardId(); + rewards.TreasurePickerID = GetTreasurePickerId(); for (uint32 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i) { - rewards.ChoiceItems[i].ItemID = RewardChoiceItemId[i]; + rewards.ChoiceItems[i].Item.ItemID = RewardChoiceItemId[i]; rewards.ChoiceItems[i].Quantity = RewardChoiceItemCount[i]; } diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h index adbec0efd6c..a8d2d5a701c 100644 --- a/src/server/game/Quests/QuestDef.h +++ b/src/server/game/Quests/QuestDef.h @@ -200,6 +200,11 @@ enum QuestFlagsEx : uint32 QUEST_FLAGS_EX_CLEAR_PROGRESS_OF_CRITERIA_TREE_OBJECTIVES_ON_ACCEPT = 0x1000000 }; +enum QuestFlagsEx2 : uint32 +{ + QUEST_FLAGS_EX2_NO_WAR_MODE_BONUS = 0x2 +}; + enum QuestSpecialFlags { QUEST_SPECIAL_FLAGS_NONE = 0x000, @@ -348,17 +353,16 @@ class TC_GAME_API Quest void LoadQuestObjective(Field* fields); void LoadQuestObjectiveVisualEffect(Field* fields); - uint32 XPValue(uint32 playerLevel) const; - uint32 MoneyValue(uint8 playerLevel) const; + uint32 XPValue(Player const* player) const; + uint32 MoneyValue(Player const* player) const; - bool HasFlag(uint32 flag) const { return (Flags & flag) != 0; } - void SetFlag(uint32 flag) { Flags |= flag; } + bool HasFlag(QuestFlags flag) const { return (Flags & uint32(flag)) != 0; } + bool HasFlagEx(QuestFlagsEx flag) const { return (FlagsEx & uint32(flag)) != 0; } + bool HasFlagEx2(QuestFlagsEx2 flag) const { return (FlagsEx2 & uint32(flag)) != 0; } bool HasSpecialFlag(uint32 flag) const { return (SpecialFlags & flag) != 0; } void SetSpecialFlag(uint32 flag) { SpecialFlags |= flag; } - bool HasFlagEx(QuestFlagsEx flag) const { return (FlagsEx & uint32(flag)) != 0; } - // table data accessors: uint32 GetQuestId() const { return ID; } uint32 GetQuestType() const { return Type; } @@ -367,6 +371,7 @@ class TC_GAME_API Quest int32 GetMinLevel() const { return MinLevel; } uint32 GetMaxLevel() const { return MaxLevel; } int32 GetQuestLevel() const { return Level; } + int32 GetQuestScalingFactionGroup() const { return ScalingFactionGroup; } int32 GetQuestMaxScalingLevel() const { return MaxScalingLevel; } uint32 GetQuestInfoID() const { return QuestInfoID; } uint32 GetAllowableClasses() const { return AllowableClasses; } @@ -427,15 +432,17 @@ class TC_GAME_API Quest bool IsAutoComplete() const; uint32 GetFlags() const { return Flags; } uint32 GetFlagsEx() const { return FlagsEx; } + uint32 GetFlagsEx2() const { return FlagsEx2; } uint32 GetSpecialFlags() const { return SpecialFlags; } uint32 GetScriptId() const { return ScriptId; } uint32 GetAreaGroupID() const { return AreaGroupID; } uint32 GetRewardSkillId() const { return RewardSkillId; } uint32 GetRewardSkillPoints() const { return RewardSkillPoints; } uint32 GetRewardReputationMask() const { return RewardReputationMask; } - uint32 GetRewardId() const { return QuestRewardID; } + int32 GetTreasurePickerId() const { return TreasurePickerID; } int32 GetExpansion() const { return Expansion; } uint32 GetQuestGiverPortrait() const { return QuestGiverPortrait; } + int32 GetQuestGiverPortraitMount() const { return QuestGiverPortraitMount; } uint32 GetQuestTurnInPortrait() const { return QuestTurnInPortrait; } bool IsDaily() const { return (Flags & QUEST_FLAGS_DAILY) != 0; } bool IsWeekly() const { return (Flags & QUEST_FLAGS_WEEKLY) != 0; } @@ -469,6 +476,7 @@ class TC_GAME_API Quest uint32 ID; uint32 Type; int32 Level; + int32 ScalingFactionGroup; int32 MaxScalingLevel; uint32 PackageID; int32 MinLevel; @@ -492,6 +500,7 @@ class TC_GAME_API Quest uint32 SourceItemId; uint32 Flags; uint32 FlagsEx; + uint32 FlagsEx2; uint32 RewardItemId[QUEST_REWARD_ITEM_COUNT]; uint32 RewardItemCount[QUEST_REWARD_ITEM_COUNT]; uint32 ItemDrop[QUEST_ITEM_DROP_COUNT]; @@ -508,6 +517,7 @@ class TC_GAME_API Quest uint32 RewardSkillId; uint32 RewardSkillPoints; uint32 QuestGiverPortrait; + int32 QuestGiverPortraitMount; uint32 QuestTurnInPortrait; uint32 RewardFactionId[QUEST_REWARD_REPUTATIONS_COUNT]; int32 RewardFactionValue[QUEST_REWARD_REPUTATIONS_COUNT]; @@ -521,7 +531,7 @@ class TC_GAME_API Quest uint32 AreaGroupID; uint32 LimitTime; uint64 AllowableRaces; - uint32 QuestRewardID; + int32 TreasurePickerID; int32 Expansion; QuestObjectives Objectives; std::string LogTitle; diff --git a/src/server/game/Scenarios/ScenarioMgr.cpp b/src/server/game/Scenarios/ScenarioMgr.cpp index c70e560efd7..1fb6dc4d18b 100644 --- a/src/server/game/Scenarios/ScenarioMgr.cpp +++ b/src/server/game/Scenarios/ScenarioMgr.cpp @@ -147,8 +147,8 @@ void ScenarioMgr::LoadScenarioPOI() uint32 count = 0; - // 0 1 2 6 7 8 9 10 11 12 - QueryResult result = WorldDatabase.Query("SELECT CriteriaTreeID, BlobIndex, Idx1, MapID, WorldMapAreaId, Floor, Priority, Flags, WorldEffectID, PlayerConditionID FROM scenario_poi ORDER BY CriteriaTreeID, Idx1"); + // 0 1 2 3 4 5 6 7 8 + QueryResult result = WorldDatabase.Query("SELECT CriteriaTreeID, BlobIndex, Idx1, MapID, UiMapID, Priority, Flags, WorldEffectID, PlayerConditionID FROM scenario_poi ORDER BY CriteriaTreeID, Idx1"); if (!result) { TC_LOG_ERROR("server.loading", ">> Loaded 0 scenario POI definitions. DB table `scenario_poi` is empty."); @@ -188,24 +188,23 @@ void ScenarioMgr::LoadScenarioPOI() { Field* fields = result->Fetch(); - int32 CriteriaTreeID = fields[0].GetInt32(); - int32 BlobIndex = fields[1].GetInt32(); - int32 Idx1 = fields[2].GetInt32(); - int32 MapID = fields[3].GetInt32(); - int32 WorldMapAreaId = fields[4].GetInt32(); - int32 Floor = fields[5].GetInt32(); - int32 Priority = fields[6].GetInt32(); - int32 Flags = fields[7].GetInt32(); - int32 WorldEffectID = fields[8].GetInt32(); - int32 PlayerConditionID = fields[9].GetInt32(); - - if (!sCriteriaMgr->GetCriteriaTree(CriteriaTreeID)) - TC_LOG_ERROR("sql.sql", "`scenario_poi` CriteriaTreeID (%u) Idx1 (%u) does not correspond to a valid criteria tree", CriteriaTreeID, Idx1); - - if (CriteriaTreeID < int32(POIs.size()) && Idx1 < int32(POIs[CriteriaTreeID].size())) - _scenarioPOIStore[CriteriaTreeID].emplace_back(BlobIndex, MapID, WorldMapAreaId, Floor, Priority, Flags, WorldEffectID, PlayerConditionID, POIs[CriteriaTreeID][Idx1]); + int32 criteriaTreeID = fields[0].GetInt32(); + int32 blobIndex = fields[1].GetInt32(); + int32 idx1 = fields[2].GetInt32(); + int32 mapID = fields[3].GetInt32(); + int32 uiMapID = fields[4].GetInt32(); + int32 priority = fields[5].GetInt32(); + int32 flags = fields[6].GetInt32(); + int32 worldEffectID = fields[7].GetInt32(); + int32 playerConditionID = fields[8].GetInt32(); + + if (!sCriteriaMgr->GetCriteriaTree(criteriaTreeID)) + TC_LOG_ERROR("sql.sql", "`scenario_poi` CriteriaTreeID (%u) Idx1 (%u) does not correspond to a valid criteria tree", criteriaTreeID, idx1); + + if (criteriaTreeID < int32(POIs.size()) && idx1 < int32(POIs[criteriaTreeID].size())) + _scenarioPOIStore[criteriaTreeID].emplace_back(blobIndex, mapID, uiMapID, priority, flags, worldEffectID, playerConditionID, POIs[criteriaTreeID][idx1]); else - TC_LOG_ERROR("server.loading", "Table scenario_poi references unknown scenario poi points for criteria tree id %i POI id %i", CriteriaTreeID, BlobIndex); + TC_LOG_ERROR("server.loading", "Table scenario_poi references unknown scenario poi points for criteria tree id %i POI id %i", criteriaTreeID, blobIndex); ++count; } while (result->NextRow()); diff --git a/src/server/game/Scenarios/ScenarioMgr.h b/src/server/game/Scenarios/ScenarioMgr.h index 93a1f3a320f..932d4decce9 100644 --- a/src/server/game/Scenarios/ScenarioMgr.h +++ b/src/server/game/Scenarios/ScenarioMgr.h @@ -74,23 +74,22 @@ struct ScenarioPOI { int32 BlobIndex; int32 MapID; - int32 WorldMapAreaID; - int32 Floor; + int32 UiMapID; int32 Priority; int32 Flags; int32 WorldEffectID; int32 PlayerConditionID; std::vector<ScenarioPOIPoint> Points; - ScenarioPOI() : BlobIndex(0), MapID(0), WorldMapAreaID(0), Floor(0), Priority(0), Flags(0), WorldEffectID(0), PlayerConditionID(0) { } + ScenarioPOI() : BlobIndex(0), MapID(0), UiMapID(0), Priority(0), Flags(0), WorldEffectID(0), PlayerConditionID(0) { } - ScenarioPOI(int32 _BlobIndex, int32 _MapID, int32 _WorldMapAreaID, int32 _Floor, int32 _Priority, int32 _Flags, int32 _WorldEffectID, - int32 _PlayerConditionID, std::vector<ScenarioPOIPoint> points) : - BlobIndex(_BlobIndex), MapID(_MapID), WorldMapAreaID(_WorldMapAreaID), Floor(_Floor), Priority(_Priority), Flags(_Flags), WorldEffectID(_WorldEffectID), - PlayerConditionID(_PlayerConditionID), Points(std::move(points)) { } + ScenarioPOI(int32 blobIndex, int32 mapID, int32 uiMapID, int32 priority, int32 flags, int32 worldEffectID, + int32 playerConditionID, std::vector<ScenarioPOIPoint> points) : + BlobIndex(blobIndex), MapID(mapID), UiMapID(uiMapID), Priority(priority), Flags(flags), WorldEffectID(worldEffectID), + PlayerConditionID(playerConditionID), Points(std::move(points)) { } ScenarioPOI(ScenarioPOI&& scenarioPOI) : - BlobIndex(scenarioPOI.BlobIndex), MapID(scenarioPOI.MapID), WorldMapAreaID(scenarioPOI.WorldMapAreaID), Floor(scenarioPOI.Floor), Priority(scenarioPOI.Priority), + BlobIndex(scenarioPOI.BlobIndex), MapID(scenarioPOI.MapID), UiMapID(scenarioPOI.UiMapID), Priority(scenarioPOI.Priority), Flags(scenarioPOI.Flags), WorldEffectID(scenarioPOI.WorldEffectID), PlayerConditionID(scenarioPOI.PlayerConditionID), Points(std::move(scenarioPOI.Points)) { } }; diff --git a/src/server/game/Server/Packets/AchievementPackets.cpp b/src/server/game/Server/Packets/AchievementPackets.cpp index 87181b3006a..2c746b77ad6 100644 --- a/src/server/game/Server/Packets/AchievementPackets.cpp +++ b/src/server/game/Server/Packets/AchievementPackets.cpp @@ -111,7 +111,7 @@ WorldPacket const* WorldPackets::Achievement::AchievementEarned::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Achievement::ServerFirstAchievement::Write() +WorldPacket const* WorldPackets::Achievement::BroadcastAchievement::Write() { _worldPacket.WriteBits(Name.length(), 7); _worldPacket.WriteBit(GuildAchievement); diff --git a/src/server/game/Server/Packets/AchievementPackets.h b/src/server/game/Server/Packets/AchievementPackets.h index 56b027d024d..69262eae72f 100644 --- a/src/server/game/Server/Packets/AchievementPackets.h +++ b/src/server/game/Server/Packets/AchievementPackets.h @@ -101,7 +101,7 @@ namespace WorldPackets class AchievementDeleted final : public ServerPacket { public: - AchievementDeleted() : ServerPacket(SMSG_ACHIEVEMENT_DELETED, 4) { } + AchievementDeleted() : ServerPacket(SMSG_ACHIEVEMENT_DELETED, 8) { } WorldPacket const* Write() override; @@ -125,10 +125,10 @@ namespace WorldPackets ObjectGuid Sender; }; - class ServerFirstAchievement final : public ServerPacket + class BroadcastAchievement final : public ServerPacket { public: - ServerFirstAchievement() : ServerPacket(SMSG_SERVER_FIRST_ACHIEVEMENT) { } + BroadcastAchievement() : ServerPacket(SMSG_BROADCAST_ACHIEVEMENT) { } WorldPacket const* Write() override; diff --git a/src/server/game/Server/Packets/AreaTriggerPackets.cpp b/src/server/game/Server/Packets/AreaTriggerPackets.cpp index f99d9831f91..6b4047d0995 100644 --- a/src/server/game/Server/Packets/AreaTriggerPackets.cpp +++ b/src/server/game/Server/Packets/AreaTriggerPackets.cpp @@ -33,7 +33,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::AreaTrigger::AreaTriggerS ByteBuffer& operator<<(ByteBuffer& data, AreaTriggerCircularMovementInfo const& areaTriggerCircularMovement) { - data.WriteBit(areaTriggerCircularMovement.TargetGUID.is_initialized()); + data.WriteBit(areaTriggerCircularMovement.PathTarget.is_initialized()); data.WriteBit(areaTriggerCircularMovement.Center.is_initialized()); data.WriteBit(areaTriggerCircularMovement.CounterClockwise); data.WriteBit(areaTriggerCircularMovement.CanLoop); @@ -46,8 +46,8 @@ ByteBuffer& operator<<(ByteBuffer& data, AreaTriggerCircularMovementInfo const& data << float(areaTriggerCircularMovement.InitialAngle); data << float(areaTriggerCircularMovement.ZOffset); - if (areaTriggerCircularMovement.TargetGUID) - data << *areaTriggerCircularMovement.TargetGUID; + if (areaTriggerCircularMovement.PathTarget) + data << *areaTriggerCircularMovement.PathTarget; if (areaTriggerCircularMovement.Center) data << *areaTriggerCircularMovement.Center; @@ -74,14 +74,6 @@ WorldPacket const* WorldPackets::AreaTrigger::AreaTriggerDenied::Write() WorldPacket const* WorldPackets::AreaTrigger::AreaTriggerRePath::Write() { _worldPacket << TriggerGUID; - _worldPacket << AreaTriggerSpline; - - return &_worldPacket; -} - -WorldPacket const* WorldPackets::AreaTrigger::AreaTriggerReShape::Write() -{ - _worldPacket << TriggerGUID; _worldPacket.WriteBit(AreaTriggerSpline.is_initialized()); _worldPacket.WriteBit(AreaTriggerCircularMovement.is_initialized()); diff --git a/src/server/game/Server/Packets/AreaTriggerPackets.h b/src/server/game/Server/Packets/AreaTriggerPackets.h index e3872493481..b3abf08c5d9 100644 --- a/src/server/game/Server/Packets/AreaTriggerPackets.h +++ b/src/server/game/Server/Packets/AreaTriggerPackets.h @@ -68,18 +68,7 @@ namespace WorldPackets class AreaTriggerRePath final : public ServerPacket { public: - AreaTriggerRePath() : ServerPacket(SMSG_AREA_TRIGGER_RE_PATH, 50) { } - - WorldPacket const* Write() override; - - AreaTriggerSplineInfo AreaTriggerSpline; - ObjectGuid TriggerGUID; - }; - - class AreaTriggerReShape final : public ServerPacket - { - public: - AreaTriggerReShape() : ServerPacket(SMSG_AREA_TRIGGER_RE_SHAPE, 17) { } + AreaTriggerRePath() : ServerPacket(SMSG_AREA_TRIGGER_RE_PATH, 17) { } WorldPacket const* Write() override; diff --git a/src/server/game/Server/Packets/ArtifactPackets.cpp b/src/server/game/Server/Packets/ArtifactPackets.cpp index 8666b709cf0..2612b384f8c 100644 --- a/src/server/game/Server/Packets/ArtifactPackets.cpp +++ b/src/server/game/Server/Packets/ArtifactPackets.cpp @@ -69,11 +69,3 @@ WorldPacket const* WorldPackets::Artifact::ArtifactXpGain::Write() return &_worldPacket; } - -WorldPacket const* WorldPackets::Artifact::ArtifactKnowledge::Write() -{ - _worldPacket << int32(ArtifactCategoryID); - _worldPacket << int8(KnowledgeLevel); - - return &_worldPacket; -} diff --git a/src/server/game/Server/Packets/ArtifactPackets.h b/src/server/game/Server/Packets/ArtifactPackets.h index 25934b75c28..f208a906413 100644 --- a/src/server/game/Server/Packets/ArtifactPackets.h +++ b/src/server/game/Server/Packets/ArtifactPackets.h @@ -99,17 +99,6 @@ namespace WorldPackets ObjectGuid ArtifactGUID; uint64 Amount = 0; }; - - class ArtifactKnowledge final : public ServerPacket - { - public: - ArtifactKnowledge() : ServerPacket(SMSG_ARTIFACT_KNOWLEDGE, 1 + 4) { } - - WorldPacket const* Write() override; - - int32 ArtifactCategoryID = 0; - int8 KnowledgeLevel = 0; - }; } } diff --git a/src/server/game/Server/Packets/AuthenticationPackets.cpp b/src/server/game/Server/Packets/AuthenticationPackets.cpp index c28b8281ede..44e9608bddd 100644 --- a/src/server/game/Server/Packets/AuthenticationPackets.cpp +++ b/src/server/game/Server/Packets/AuthenticationPackets.cpp @@ -84,8 +84,6 @@ void WorldPackets::Auth::AuthSession::Read() uint32 realmJoinTicketSize; _worldPacket >> DosResponse; - _worldPacket >> Build; - _worldPacket >> BuildType; _worldPacket >> RegionID; _worldPacket >> BattlegroupID; _worldPacket >> RealmID; @@ -145,6 +143,7 @@ WorldPacket const* WorldPackets::Auth::AuthResponse::Write() _worldPacket.WriteBit(SuccessInfo->ForceCharacterTemplate); _worldPacket.WriteBit(SuccessInfo->NumPlayersHorde.is_initialized()); _worldPacket.WriteBit(SuccessInfo->NumPlayersAlliance.is_initialized()); + _worldPacket.WriteBit(SuccessInfo->ExpansionTrialExpiration.is_initialized()); _worldPacket.FlushBits(); { @@ -164,6 +163,9 @@ WorldPacket const* WorldPackets::Auth::AuthResponse::Write() if (SuccessInfo->NumPlayersAlliance) _worldPacket << uint16(*SuccessInfo->NumPlayersAlliance); + if (SuccessInfo->ExpansionTrialExpiration) + _worldPacket << int32(*SuccessInfo->ExpansionTrialExpiration); + for (VirtualRealmInfo const& virtualRealm : SuccessInfo->VirtualRealms) _worldPacket << virtualRealm; diff --git a/src/server/game/Server/Packets/AuthenticationPackets.h b/src/server/game/Server/Packets/AuthenticationPackets.h index 97662944f09..7b0e50844bb 100644 --- a/src/server/game/Server/Packets/AuthenticationPackets.h +++ b/src/server/game/Server/Packets/AuthenticationPackets.h @@ -83,8 +83,6 @@ namespace WorldPackets Digest.fill(0); } - uint16 Build = 0; - int8 BuildType = 0; uint32 RegionID = 0; uint32 BattlegroupID = 0; uint32 RealmID = 0; @@ -159,6 +157,7 @@ namespace WorldPackets bool ForceCharacterTemplate = false; ///< forces the client to always use a character template when creating a new character. @see Templates. @todo implement Optional<uint16> NumPlayersHorde; ///< number of horde players in this realm. @todo implement Optional<uint16> NumPlayersAlliance; ///< number of alliance players in this realm. @todo implement + Optional<int32> ExpansionTrialExpiration; ///< expansion trial expiration unix timestamp }; AuthResponse(); diff --git a/src/server/game/Server/Packets/BattlegroundPackets.cpp b/src/server/game/Server/Packets/BattlegroundPackets.cpp index 05851fb1dfd..14ae46e105a 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.cpp +++ b/src/server/game/Server/Packets/BattlegroundPackets.cpp @@ -67,9 +67,11 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::PVPLogData: data << uint32(playerData.HealingDone); data << uint32(playerData.Stats.size()); data << int32(playerData.PrimaryTalentTree); - data << int32(playerData.PrimaryTalentTreeNameIndex); + data << int32(playerData.Sex); data << int32(playerData.Race); - data << uint32(playerData.Prestige); + data << int32(playerData.Class); + data << int32(playerData.CreatureID); + data << int32(playerData.HonorLevel); if (!playerData.Stats.empty()) data.append(playerData.Stats.data(), playerData.Stats.size()); @@ -89,13 +91,13 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Battleground::PVPLogData: data << uint32(*playerData.PreMatchRating); if (playerData.RatingChange) - data << uint32(*playerData.RatingChange); + data << int32(*playerData.RatingChange); if (playerData.PreMatchMMR) data << uint32(*playerData.PreMatchMMR); if (playerData.MmrChange) - data << uint32(*playerData.MmrChange); + data << int32(*playerData.MmrChange); return data; } diff --git a/src/server/game/Server/Packets/BattlegroundPackets.h b/src/server/game/Server/Packets/BattlegroundPackets.h index 7340d8d7fc9..14ebc283cb5 100644 --- a/src/server/game/Server/Packets/BattlegroundPackets.h +++ b/src/server/game/Server/Packets/BattlegroundPackets.h @@ -122,9 +122,11 @@ namespace WorldPackets Optional<int32> MmrChange; std::vector<int32> Stats; int32 PrimaryTalentTree = 0; - int32 PrimaryTalentTreeNameIndex = 0; // controls which name field from ChrSpecialization.dbc will be sent to lua + int32 Sex = 0; int32 Race = 0; - uint32 Prestige = 0; + int32 Class = 0; + int32 CreatureID = 0; + int32 HonorLevel = 0; }; Optional<uint8> Winner; diff --git a/src/server/game/Server/Packets/CalendarPackets.cpp b/src/server/game/Server/Packets/CalendarPackets.cpp index 5292bb69b99..7c82bd9d377 100644 --- a/src/server/game/Server/Packets/CalendarPackets.cpp +++ b/src/server/game/Server/Packets/CalendarPackets.cpp @@ -24,7 +24,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Calendar::CalendarSendCal data.AppendPackedTime(eventInfo.Date); data << uint32(eventInfo.Flags); data << int32(eventInfo.TextureID); - data << eventInfo.EventGuildID; + data << uint64(eventInfo.EventClubID); data << eventInfo.OwnerGuid; data.WriteBits(eventInfo.EventName.size(), 8); @@ -80,8 +80,9 @@ void WorldPackets::Calendar::CalendarGetEvent::Read() _worldPacket >> EventID; } -void WorldPackets::Calendar::CalendarGuildFilter::Read() +void WorldPackets::Calendar::CalendarCommunityFilter::Read() { + _worldPacket >> ClubID; _worldPacket >> MinLevel; _worldPacket >> MaxLevel; _worldPacket >> MaxRankOrder; @@ -92,26 +93,45 @@ ByteBuffer& operator>>(ByteBuffer& buffer, WorldPackets::Calendar::CalendarAddEv buffer >> invite.Guid; buffer >> invite.Status; buffer >> invite.Moderator; + if (buffer.ReadBit()) + invite.Unused_801_1 = boost::in_place(); + + if (buffer.ReadBit()) + invite.Unused_801_2 = boost::in_place(); + + if (buffer.ReadBit()) + invite.Unused_801_3 = boost::in_place(); + + if (invite.Unused_801_1) + buffer >> *invite.Unused_801_1; + + if (invite.Unused_801_2) + buffer >> *invite.Unused_801_2; + + if (invite.Unused_801_3) + buffer >> *invite.Unused_801_3; + return buffer; } ByteBuffer& operator>>(ByteBuffer& buffer, WorldPackets::Calendar::CalendarAddEventInfo& addEventInfo) { - uint8 titleLength = buffer.ReadBits(8); - uint16 descriptionLength = buffer.ReadBits(11); - + buffer >> addEventInfo.ClubID; buffer >> addEventInfo.EventType; buffer >> addEventInfo.TextureID; addEventInfo.Time = buffer.ReadPackedTime(); buffer >> addEventInfo.Flags; addEventInfo.Invites.resize(buffer.read<uint32>()); - addEventInfo.Title = buffer.ReadString(titleLength); - addEventInfo.Description = buffer.ReadString(descriptionLength); + uint8 titleLength = buffer.ReadBits(8); + uint16 descriptionLength = buffer.ReadBits(11); for (WorldPackets::Calendar::CalendarAddEventInviteInfo& invite : addEventInfo.Invites) buffer >> invite; + addEventInfo.Title = buffer.ReadString(titleLength); + addEventInfo.Description = buffer.ReadString(descriptionLength); + return buffer; } @@ -121,20 +141,28 @@ void WorldPackets::Calendar::CalendarAddEvent::Read() _worldPacket >> MaxSize; } -void WorldPackets::Calendar::CalendarUpdateEvent::Read() +ByteBuffer& operator>>(ByteBuffer& buffer, WorldPackets::Calendar::CalendarUpdateEventInfo& updateEventInfo) { - _worldPacket >> EventInfo.EventID; - _worldPacket >> EventInfo.ModeratorID; - _worldPacket >> EventInfo.EventType; - _worldPacket >> EventInfo.TextureID; - EventInfo.Time = _worldPacket.ReadPackedTime(); - _worldPacket >> EventInfo.Flags; + buffer >> updateEventInfo.ClubID; + buffer >> updateEventInfo.EventID; + buffer >> updateEventInfo.ModeratorID; + buffer >> updateEventInfo.EventType; + buffer >> updateEventInfo.TextureID; + updateEventInfo.Time = buffer.ReadPackedTime(); + buffer >> updateEventInfo.Flags; - uint8 titleLen = _worldPacket.ReadBits(8); - uint16 descLen = _worldPacket.ReadBits(11); + uint8 titleLen = buffer.ReadBits(8); + uint16 descLen = buffer.ReadBits(11); - EventInfo.Title = _worldPacket.ReadString(titleLen); - EventInfo.Description = _worldPacket.ReadString(descLen); + updateEventInfo.Title = buffer.ReadString(titleLen); + updateEventInfo.Description = buffer.ReadString(descLen); + + return buffer; +} + +void WorldPackets::Calendar::CalendarUpdateEvent::Read() +{ + _worldPacket >> EventInfo; _worldPacket >> MaxSize; } @@ -142,6 +170,7 @@ void WorldPackets::Calendar::CalendarRemoveEvent::Read() { _worldPacket >> EventID; _worldPacket >> ModeratorID; + _worldPacket >> ClubID; _worldPacket >> Flags; } @@ -149,6 +178,7 @@ void WorldPackets::Calendar::CalendarCopyEvent::Read() { _worldPacket >> EventID; _worldPacket >> ModeratorID; + _worldPacket >> EventClubID; Date = _worldPacket.ReadPackedTime(); } @@ -163,6 +193,7 @@ void WorldPackets::Calendar::CalendarEventInvite::Read() { _worldPacket >> EventID; _worldPacket >> ModeratorID; + _worldPacket >> ClubID; uint16 nameLen = _worldPacket.ReadBits(9); Creating = _worldPacket.ReadBit(); @@ -174,6 +205,7 @@ void WorldPackets::Calendar::CalendarEventInvite::Read() void WorldPackets::Calendar::CalendarEventSignUp::Read() { _worldPacket >> EventID; + _worldPacket >> ClubID; Tentative = _worldPacket.ReadBit(); } @@ -255,7 +287,7 @@ WorldPacket const* WorldPackets::Calendar::CalendarSendEvent::Write() _worldPacket << uint32(Flags); _worldPacket.AppendPackedTime(Date); _worldPacket << uint32(LockDate); - _worldPacket << EventGuildID; + _worldPacket << uint64(EventClubID); _worldPacket << uint32(Invites.size()); _worldPacket.WriteBits(EventName.size(), 8); _worldPacket.WriteBits(Description.size(), 11); @@ -277,7 +309,7 @@ WorldPacket const* WorldPackets::Calendar::CalendarEventInviteAlert::Write() _worldPacket << uint32(Flags); _worldPacket << uint8(EventType); _worldPacket << int32(TextureID); - _worldPacket << EventGuildID; + _worldPacket << uint64(EventClubID); _worldPacket << uint64(InviteID); _worldPacket << uint8(Status); _worldPacket << uint8(ModeratorStatus); @@ -344,6 +376,7 @@ WorldPacket const* WorldPackets::Calendar::CalendarEventInviteRemovedAlert::Writ WorldPacket const* WorldPackets::Calendar::CalendarEventUpdatedAlert::Write() { + _worldPacket << uint64(EventClubID); _worldPacket << uint64(EventID); _worldPacket.AppendPackedTime(OriginalDate); @@ -462,8 +495,8 @@ WorldPacket const* WorldPackets::Calendar::CalendarEventInviteNotes::Write() _worldPacket << InviteGuid; _worldPacket << uint64(EventID); - _worldPacket.WriteBits(Notes.size(), 8); _worldPacket.WriteBit(ClearPending); + _worldPacket.WriteBits(Notes.size(), 8); _worldPacket.FlushBits(); _worldPacket.WriteString(Notes); diff --git a/src/server/game/Server/Packets/CalendarPackets.h b/src/server/game/Server/Packets/CalendarPackets.h index f7337386c3c..7757e51144b 100644 --- a/src/server/game/Server/Packets/CalendarPackets.h +++ b/src/server/game/Server/Packets/CalendarPackets.h @@ -45,13 +45,14 @@ namespace WorldPackets uint64 EventID = 0; }; - class CalendarGuildFilter final : public ClientPacket + class CalendarCommunityFilter final : public ClientPacket { public: - CalendarGuildFilter(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_GUILD_FILTER, std::move(packet)) { } + CalendarCommunityFilter(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_COMMUNITY_FILTER, std::move(packet)) { } void Read() override; + uint64 ClubID = 0; uint8 MinLevel = 1; uint8 MaxLevel = 100; uint8 MaxRankOrder = 0; @@ -62,10 +63,14 @@ namespace WorldPackets ObjectGuid Guid; uint8 Status = 0; uint8 Moderator = 0; + Optional<ObjectGuid> Unused_801_1; + Optional<uint64> Unused_801_2; + Optional<uint64> Unused_801_3; }; struct CalendarAddEventInfo { + uint64 ClubID = 0; std::string Title; std::string Description; uint8 EventType = 0; @@ -88,6 +93,7 @@ namespace WorldPackets struct CalendarUpdateEventInfo { + uint64 ClubID = 0; uint64 EventID = 0; uint64 ModeratorID = 0; std::string Title; @@ -118,6 +124,7 @@ namespace WorldPackets uint64 ModeratorID = 0; uint64 EventID = 0; + uint64 ClubID = 0; uint32 Flags = 0; }; @@ -130,6 +137,7 @@ namespace WorldPackets uint64 ModeratorID = 0; uint64 EventID = 0; + uint64 EventClubID = 0; time_t Date = time_t(0); }; @@ -176,7 +184,7 @@ namespace WorldPackets time_t Date = time_t(0); uint32 Flags = 0; int32 TextureID = 0; - ObjectGuid EventGuildID; + uint64 EventClubID = 0; ObjectGuid OwnerGuid; }; @@ -213,7 +221,7 @@ namespace WorldPackets WorldPacket const* Write() override; ObjectGuid OwnerGuid; - ObjectGuid EventGuildID; + uint64 EventClubID = 0; uint64 EventID = 0; time_t Date = time_t(0); time_t LockDate = time_t(0); @@ -234,7 +242,7 @@ namespace WorldPackets WorldPacket const* Write() override; ObjectGuid OwnerGuid; - ObjectGuid EventGuildID; + uint64 EventClubID = 0; ObjectGuid InvitedByGuid; uint64 InviteID = 0; uint64 EventID = 0; @@ -258,6 +266,7 @@ namespace WorldPackets bool IsSignUp = false; bool Creating = true; uint64 EventID = 0; + uint64 ClubID = 0; std::string Name; }; @@ -343,6 +352,7 @@ namespace WorldPackets WorldPacket const* Write() override; + uint64 EventClubID = 0; uint64 EventID = 0; time_t Date = time_t(0); uint32 Flags = 0; @@ -395,6 +405,7 @@ namespace WorldPackets bool Tentative = false; uint64 EventID = 0; + uint64 ClubID = 0; }; class CalendarRemoveInvite final : public ClientPacket diff --git a/src/server/game/Server/Packets/ChannelPackets.cpp b/src/server/game/Server/Packets/ChannelPackets.cpp index fe6969d07cf..d5cb727b441 100644 --- a/src/server/game/Server/Packets/ChannelPackets.cpp +++ b/src/server/game/Server/Packets/ChannelPackets.cpp @@ -128,7 +128,6 @@ WorldPackets::Channel::ChannelCommand::ChannelCommand(WorldPacket&& packet) : Cl case CMSG_CHAT_CHANNEL_DECLINE_INVITE: case CMSG_CHAT_CHANNEL_DISPLAY_LIST: case CMSG_CHAT_CHANNEL_LIST: - case CMSG_CHAT_CHANNEL_MODERATE: case CMSG_CHAT_CHANNEL_OWNER: break; default: @@ -150,12 +149,10 @@ WorldPackets::Channel::ChannelPlayerCommand::ChannelPlayerCommand(WorldPacket&& case CMSG_CHAT_CHANNEL_INVITE: case CMSG_CHAT_CHANNEL_KICK: case CMSG_CHAT_CHANNEL_MODERATOR: - case CMSG_CHAT_CHANNEL_MUTE: case CMSG_CHAT_CHANNEL_SET_OWNER: case CMSG_CHAT_CHANNEL_SILENCE_ALL: case CMSG_CHAT_CHANNEL_UNBAN: case CMSG_CHAT_CHANNEL_UNMODERATOR: - case CMSG_CHAT_CHANNEL_UNMUTE: case CMSG_CHAT_CHANNEL_UNSILENCE_ALL: break; default: diff --git a/src/server/game/Server/Packets/CharacterPackets.cpp b/src/server/game/Server/Packets/CharacterPackets.cpp index 538a2c7e1d5..3973c55cf0e 100644 --- a/src/server/game/Server/Packets/CharacterPackets.cpp +++ b/src/server/game/Server/Packets/CharacterPackets.cpp @@ -140,6 +140,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Character::EnumCharacters ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Character::EnumCharactersResult::CharacterInfo const& charInfo) { data << charInfo.Guid; + data << uint64(charInfo.GuildClubMemberID); data << uint8(charInfo.ListPosition); data << uint8(charInfo.Race); data << uint8(charInfo.Class); @@ -201,9 +202,9 @@ WorldPacket const* WorldPackets::Character::EnumCharactersResult::Write() _worldPacket.WriteBit(Success); _worldPacket.WriteBit(IsDeletedCharacters); - _worldPacket.WriteBit(IsDemonHunterCreationAllowed); + _worldPacket.WriteBit(IsTestDemonHunterCreationAllowed); _worldPacket.WriteBit(HasDemonHunterOnRealm); - _worldPacket.WriteBit(Unknown7x); + _worldPacket.WriteBit(IsDemonHunterCreationAllowed); _worldPacket.WriteBit(DisabledClassesMask.is_initialized()); _worldPacket.WriteBit(IsAlliedRacesCreationAllowed); _worldPacket << uint32(Characters.size()); @@ -227,6 +228,7 @@ void WorldPackets::Character::CreateCharacter::Read() CreateInfo.reset(new CharacterCreateInfo()); uint32 nameLength = _worldPacket.ReadBits(6); bool const hasTemplateSet = _worldPacket.ReadBit(); + CreateInfo->IsTrialBoost = _worldPacket.ReadBit(); _worldPacket >> CreateInfo->Race; _worldPacket >> CreateInfo->Class; @@ -246,6 +248,7 @@ void WorldPackets::Character::CreateCharacter::Read() WorldPacket const* WorldPackets::Character::CreateChar::Write() { _worldPacket << uint8(Code); + _worldPacket << Guid; return &_worldPacket; } diff --git a/src/server/game/Server/Packets/CharacterPackets.h b/src/server/game/Server/Packets/CharacterPackets.h index 1f4ce11621a..fb5984efc8a 100644 --- a/src/server/game/Server/Packets/CharacterPackets.h +++ b/src/server/game/Server/Packets/CharacterPackets.h @@ -56,6 +56,7 @@ namespace WorldPackets std::array<uint8, PLAYER_CUSTOM_DISPLAY_SIZE> CustomDisplay = { }; uint8 OutfitId = 0; Optional<int32> TemplateSet; + bool IsTrialBoost = false; std::string Name; /// Server side data @@ -121,6 +122,7 @@ namespace WorldPackets CharacterInfo(Field* fields); ObjectGuid Guid; + uint64 GuildClubMemberID = 0; ///< same as bgs.protocol.club.v1.MemberId.unique_id, guessed basing on SMSG_QUERY_PLAYER_NAME_RESPONSE (that one is known) std::string Name; uint8 ListPosition = 0; ///< Order of the characters in list uint8 Race = 0; @@ -170,22 +172,22 @@ namespace WorldPackets struct RaceUnlock { - int32 RaceID; - bool HasExpansion; - bool HasAchievement; - bool HasHeritageArmor; + int32 RaceID = 0; + bool HasExpansion = false; + bool HasAchievement = false; + bool HasHeritageArmor = false; }; EnumCharactersResult() : ServerPacket(SMSG_ENUM_CHARACTERS_RESULT) { } WorldPacket const* Write() override; - bool Success = false; ///< - bool IsDeletedCharacters = false; ///< used for character undelete list - bool IsDemonHunterCreationAllowed = false; ///< used for demon hunter early access - bool HasDemonHunterOnRealm = false; - bool Unknown7x = false; - bool IsAlliedRacesCreationAllowed = false; + bool Success = false; ///< + bool IsDeletedCharacters = false; ///< used for character undelete list + bool IsTestDemonHunterCreationAllowed = false; ///< allows client to skip 1 per realm and level 70 requirements + bool HasDemonHunterOnRealm = false; + bool IsDemonHunterCreationAllowed = false; ///< used for demon hunter early access + bool IsAlliedRacesCreationAllowed = false; int32 MaxCharacterLevel = 1; Optional<uint32> DisabledClassesMask; @@ -225,6 +227,7 @@ namespace WorldPackets WorldPacket const* Write() override; uint8 Code = 0; ///< Result code @see enum ResponseCodes + ObjectGuid Guid; }; class CharDelete final : public ClientPacket @@ -537,7 +540,7 @@ namespace WorldPackets class InitialSetup final : public ServerPacket { public: - InitialSetup() : ServerPacket(SMSG_INITIAL_SETUP, 1 + 1 + 4 + 4) { } + InitialSetup() : ServerPacket(SMSG_INITIAL_SETUP, 1 + 1) { } WorldPacket const* Write() override; diff --git a/src/server/game/Server/Packets/ChatPackets.cpp b/src/server/game/Server/Packets/ChatPackets.cpp index 26cbd48f7bf..044fe086f48 100644 --- a/src/server/game/Server/Packets/ChatPackets.cpp +++ b/src/server/game/Server/Packets/ChatPackets.cpp @@ -47,32 +47,30 @@ void WorldPackets::Chat::ChatMessageChannel::Read() Text = _worldPacket.ReadString(textLen); } -void WorldPackets::Chat::ChatAddonMessage::Read() +ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Chat::ChatAddonMessageParams& params) { - uint32 prefixLen = _worldPacket.ReadBits(5); - uint32 textLen = _worldPacket.ReadBits(9); - Prefix = _worldPacket.ReadString(prefixLen); - Text = _worldPacket.ReadString(textLen); + uint32 prefixLen = data.ReadBits(5); + uint32 textLen = data.ReadBits(8); + params.IsLogged = data.ReadBit(); + params.Type = ChatMsg(data.read<int32>()); + params.Prefix = data.ReadString(prefixLen); + params.Text = data.ReadString(textLen); + + return data; } -void WorldPackets::Chat::ChatAddonMessageWhisper::Read() +void WorldPackets::Chat::ChatAddonMessage::Read() { - uint32 targetLen = _worldPacket.ReadBits(9); - uint32 prefixLen = _worldPacket.ReadBits(5); - uint32 textLen = _worldPacket.ReadBits(9); - Target = _worldPacket.ReadString(targetLen); - Prefix = _worldPacket.ReadString(prefixLen); - Text = _worldPacket.ReadString(textLen); + _worldPacket >> Params; } -void WorldPackets::Chat::ChatAddonMessageChannel::Read() +void WorldPackets::Chat::ChatAddonMessageTargeted::Read() { uint32 targetLen = _worldPacket.ReadBits(9); - uint32 prefixLen = _worldPacket.ReadBits(5); - uint32 textLen = _worldPacket.ReadBits(9); + _worldPacket.ResetBitPos(); + + _worldPacket >> Params; Target = _worldPacket.ReadString(targetLen); - Prefix = _worldPacket.ReadString(prefixLen); - Text = _worldPacket.ReadString(textLen); } void WorldPackets::Chat::ChatMessageDND::Read() @@ -162,17 +160,17 @@ void WorldPackets::Chat::Chat::SetReceiver(WorldObject const* receiver, LocaleCo WorldPacket const* WorldPackets::Chat::Chat::Write() { - _worldPacket << SlashCmd; - _worldPacket << _Language; + _worldPacket << uint8(SlashCmd); + _worldPacket << uint32(_Language); _worldPacket << SenderGUID; _worldPacket << SenderGuildGUID; _worldPacket << SenderAccountGUID; _worldPacket << TargetGUID; - _worldPacket << TargetVirtualAddress; - _worldPacket << SenderVirtualAddress; + _worldPacket << uint32(TargetVirtualAddress); + _worldPacket << uint32(SenderVirtualAddress); _worldPacket << PartyGUID; - _worldPacket << AchievementID; - _worldPacket << DisplayTime; + _worldPacket << uint32(AchievementID); + _worldPacket << float(DisplayTime); _worldPacket.WriteBits(SenderName.length(), 11); _worldPacket.WriteBits(TargetName.length(), 11); _worldPacket.WriteBits(Prefix.length(), 5); @@ -181,6 +179,7 @@ WorldPacket const* WorldPackets::Chat::Chat::Write() _worldPacket.WriteBits(_ChatFlags, 11); _worldPacket.WriteBit(HideChatLog); _worldPacket.WriteBit(FakeSenderName); + _worldPacket.WriteBit(Unused_801.is_initialized()); _worldPacket.FlushBits(); _worldPacket.WriteString(SenderName); @@ -189,6 +188,9 @@ WorldPacket const* WorldPackets::Chat::Chat::Write() _worldPacket.WriteString(_Channel); _worldPacket.WriteString(ChatText); + if (Unused_801) + _worldPacket << uint32(*Unused_801); + return &_worldPacket; } diff --git a/src/server/game/Server/Packets/ChatPackets.h b/src/server/game/Server/Packets/ChatPackets.h index 97654aa656e..cbb9da156b0 100644 --- a/src/server/game/Server/Packets/ChatPackets.h +++ b/src/server/game/Server/Packets/ChatPackets.h @@ -53,7 +53,7 @@ namespace WorldPackets class ChatMessageWhisper final : public ClientPacket { public: - ChatMessageWhisper(WorldPacket&& packet) : ClientPacket(std::move(packet)) { } + ChatMessageWhisper(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_MESSAGE_WHISPER, std::move(packet)) { } void Read() override; @@ -66,7 +66,7 @@ namespace WorldPackets class ChatMessageChannel final : public ClientPacket { public: - ChatMessageChannel(WorldPacket&& packet) : ClientPacket(std::move(packet)) { } + ChatMessageChannel(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_MESSAGE_CHANNEL, std::move(packet)) { } void Read() override; @@ -75,46 +75,35 @@ namespace WorldPackets std::string Target; }; - // CMSG_CHAT_ADDON_MESSAGE_GUILD - // CMSG_CHAT_ADDON_MESSAGE_OFFICER - // CMSG_CHAT_ADDON_MESSAGE_PARTY - // CMSG_CHAT_ADDON_MESSAGE_RAID - // CMSG_CHAT_ADDON_MESSAGE_INSTANCE_CHAT - class ChatAddonMessage final : public ClientPacket + struct ChatAddonMessageParams { - public: - ChatAddonMessage(WorldPacket&& packet) : ClientPacket(std::move(packet)) { } - - void Read() override; - std::string Prefix; std::string Text; + ChatMsg Type = CHAT_MSG_PARTY; + bool IsLogged = false; }; - // CMSG_CHAT_ADDON_MESSAGE_WHISPER - class ChatAddonMessageWhisper final : public ClientPacket + // CMSG_CHAT_ADDON_MESSAGE + class ChatAddonMessage final : public ClientPacket { public: - ChatAddonMessageWhisper(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_ADDON_MESSAGE_WHISPER, std::move(packet)) { } + ChatAddonMessage(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_ADDON_MESSAGE, std::move(packet)) { } void Read() override; - std::string Prefix; - std::string Target; - std::string Text; + ChatAddonMessageParams Params; }; // CMSG_CHAT_ADDON_MESSAGE_CHANNEL - class ChatAddonMessageChannel final : public ClientPacket + class ChatAddonMessageTargeted final : public ClientPacket { public: - ChatAddonMessageChannel(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_ADDON_MESSAGE_CHANNEL, std::move(packet)) { } + ChatAddonMessageTargeted(WorldPacket&& packet) : ClientPacket(CMSG_CHAT_ADDON_MESSAGE_TARGETED, std::move(packet)) { } void Read() override; - std::string Text; std::string Target; - std::string Prefix; + ChatAddonMessageParams Params; }; class ChatMessageDND final : public ClientPacket @@ -161,7 +150,7 @@ namespace WorldPackets WorldPacket const* Write() override; uint8 SlashCmd = 0; ///< @see enum ChatMsg - uint8 _Language = LANG_UNIVERSAL; + uint32 _Language = LANG_UNIVERSAL; ObjectGuid SenderGUID; ObjectGuid SenderGuildGUID; ObjectGuid SenderAccountGUID; @@ -177,6 +166,7 @@ namespace WorldPackets uint32 AchievementID = 0; uint8 _ChatFlags = 0; ///< @see enum ChatFlags float DisplayTime = 0.0f; + Optional<uint32> Unused_801; bool HideChatLog = false; bool FakeSenderName = false; }; diff --git a/src/server/game/Server/Packets/CombatLogPackets.cpp b/src/server/game/Server/Packets/CombatLogPackets.cpp index 22196336960..243a7fd6e43 100644 --- a/src/server/game/Server/Packets/CombatLogPackets.cpp +++ b/src/server/game/Server/Packets/CombatLogPackets.cpp @@ -26,6 +26,7 @@ WorldPacket const* WorldPackets::CombatLog::SpellNonMeleeDamageLog::Write() *this << int32(SpellID); *this << int32(SpellXSpellVisualID); *this << int32(Damage); + *this << int32(OriginalDamage); *this << int32(Overkill); *this << uint8(SchoolMask); *this << int32(Absorbed); @@ -35,11 +36,11 @@ WorldPacket const* WorldPackets::CombatLog::SpellNonMeleeDamageLog::Write() WriteBits(Flags, 7); WriteBit(false); // Debug info WriteLogDataBit(); - WriteBit(SandboxScaling.is_initialized()); + WriteBit(ContentTuning.is_initialized()); FlushBits(); WriteLogData(); - if (SandboxScaling) - *this << *SandboxScaling; + if (ContentTuning) + *this << *ContentTuning; return &_worldPacket; } @@ -61,12 +62,12 @@ WorldPacket const* WorldPackets::CombatLog::EnvironmentalDamageLog::Write() WorldPacket const* WorldPackets::CombatLog::SpellExecuteLog::Write() { *this << Caster; - *this << SpellID; + *this << int32(SpellID); *this << uint32(Effects.size()); for (SpellLogEffect const& effect : Effects) { - *this << effect.Effect; + *this << int32(effect.Effect); *this << uint32(effect.PowerDrainTargets.size()); *this << uint32(effect.ExtraAttacksTargets.size()); @@ -78,32 +79,32 @@ WorldPacket const* WorldPackets::CombatLog::SpellExecuteLog::Write() for (SpellLogEffectPowerDrainParams const& powerDrainTarget : effect.PowerDrainTargets) { *this << powerDrainTarget.Victim; - *this << powerDrainTarget.Points; - *this << powerDrainTarget.PowerType; - *this << powerDrainTarget.Amplitude; + *this << uint32(powerDrainTarget.Points); + *this << uint32(powerDrainTarget.PowerType); + *this << float(powerDrainTarget.Amplitude); } for (SpellLogEffectExtraAttacksParams const& extraAttacksTarget : effect.ExtraAttacksTargets) { *this << extraAttacksTarget.Victim; - *this << extraAttacksTarget.NumAttacks; + *this << uint32(extraAttacksTarget.NumAttacks); } for (SpellLogEffectDurabilityDamageParams const& durabilityDamageTarget : effect.DurabilityDamageTargets) { *this << durabilityDamageTarget.Victim; - *this << durabilityDamageTarget.ItemID; - *this << durabilityDamageTarget.Amount; + *this << int32(durabilityDamageTarget.ItemID); + *this << int32(durabilityDamageTarget.Amount); } for (SpellLogEffectGenericVictimParams const& genericVictimTarget : effect.GenericVictimTargets) *this << genericVictimTarget.Victim; for (SpellLogEffectTradeSkillItemParams const& tradeSkillTarget : effect.TradeSkillTargets) - *this << tradeSkillTarget.ItemID; + *this << int32(tradeSkillTarget.ItemID); for (SpellLogEffectFeedPetParams const& feedPetTarget : effect.FeedPetTargets) - *this << feedPetTarget.ItemID; + *this << int32(feedPetTarget.ItemID); } WriteLogDataBit(); @@ -119,13 +120,14 @@ WorldPacket const* WorldPackets::CombatLog::SpellHealLog::Write() *this << CasterGUID; *this << int32(SpellID); *this << int32(Health); + *this << int32(OriginalHeal); *this << int32(OverHeal); *this << int32(Absorbed); WriteBit(Crit); WriteBit(CritRollMade.is_initialized()); WriteBit(CritRollNeeded.is_initialized()); WriteLogDataBit(); - WriteBit(SandboxScaling.is_initialized()); + WriteBit(ContentTuning.is_initialized()); FlushBits(); WriteLogData(); @@ -136,8 +138,8 @@ WorldPacket const* WorldPackets::CombatLog::SpellHealLog::Write() if (CritRollNeeded) *this << *CritRollNeeded; - if (SandboxScaling) - *this << *SandboxScaling; + if (ContentTuning) + *this << *ContentTuning; return &_worldPacket; } @@ -155,24 +157,24 @@ WorldPacket const* WorldPackets::CombatLog::SpellPeriodicAuraLog::Write() { *this << int32(effect.Effect); *this << int32(effect.Amount); + *this << int32(effect.OriginalDamage); *this << int32(effect.OverHealOrKill); *this << int32(effect.SchoolMaskOrPower); *this << int32(effect.AbsorbedOrAmplitude); *this << int32(effect.Resisted); WriteBit(effect.Crit); WriteBit(effect.DebugInfo.is_initialized()); - WriteBit(effect.SandboxScaling.is_initialized()); + WriteBit(effect.ContentTuning.is_initialized()); FlushBits(); - if (effect.SandboxScaling) - *this << *effect.SandboxScaling; + if (effect.ContentTuning) + *this << *effect.ContentTuning; if (effect.DebugInfo) { *this << float(effect.DebugInfo->CritRollMade); *this << float(effect.DebugInfo->CritRollNeeded); } - } WriteLogData(); @@ -280,6 +282,7 @@ WorldPacket const* WorldPackets::CombatLog::SpellDamageShield::Write() *this << Defender; *this << int32(SpellID); *this << int32(TotalDamage); + *this << int32(OriginalDamage); *this << int32(OverKill); *this << int32(SchoolMask); *this << int32(LogAbsorbed); @@ -297,6 +300,7 @@ WorldPacket const* WorldPackets::CombatLog::AttackerStateUpdate::Write() attackRoundInfo << AttackerGUID; attackRoundInfo << VictimGUID; attackRoundInfo << int32(Damage); + attackRoundInfo << int32(OriginalDamage); attackRoundInfo << int32(OverDamage); attackRoundInfo << uint8(SubDmg.is_initialized()); if (SubDmg) @@ -338,15 +342,16 @@ WorldPacket const* WorldPackets::CombatLog::AttackerStateUpdate::Write() if (HitInfo & (HITINFO_BLOCK | HITINFO_UNK12)) attackRoundInfo << float(Unk); - attackRoundInfo << uint8(SandboxScaling.Type); - attackRoundInfo << uint8(SandboxScaling.TargetLevel); - attackRoundInfo << uint8(SandboxScaling.Expansion); - attackRoundInfo << uint8(SandboxScaling.Class); - attackRoundInfo << uint8(SandboxScaling.TargetMinScalingLevel); - attackRoundInfo << uint8(SandboxScaling.TargetMaxScalingLevel); - attackRoundInfo << int16(SandboxScaling.PlayerLevelDelta); - attackRoundInfo << int8(SandboxScaling.TargetScalingLevelDelta); - attackRoundInfo << uint16(SandboxScaling.PlayerItemLevel); + attackRoundInfo << uint8(ContentTuning.Type); + attackRoundInfo << uint8(ContentTuning.TargetLevel); + attackRoundInfo << uint8(ContentTuning.Expansion); + attackRoundInfo << uint8(ContentTuning.TargetMinScalingLevel); + attackRoundInfo << uint8(ContentTuning.TargetMaxScalingLevel); + attackRoundInfo << int16(ContentTuning.PlayerLevelDelta); + attackRoundInfo << int8(ContentTuning.TargetScalingLevelDelta); + attackRoundInfo << uint16(ContentTuning.PlayerItemLevel); + attackRoundInfo << uint16(ContentTuning.ScalingHealthItemLevelCurveID); + attackRoundInfo << uint8(ContentTuning.ScalesWithItemLevel ? 1 : 0); WriteLogDataBit(); FlushBits(); diff --git a/src/server/game/Server/Packets/CombatLogPackets.h b/src/server/game/Server/Packets/CombatLogPackets.h index 88a427ac962..4f3d1361796 100644 --- a/src/server/game/Server/Packets/CombatLogPackets.h +++ b/src/server/game/Server/Packets/CombatLogPackets.h @@ -39,6 +39,7 @@ namespace WorldPackets int32 SpellID = 0; int32 SpellXSpellVisualID = 0; int32 Damage = 0; + int32 OriginalDamage = 0; int32 Overkill = -1; uint8 SchoolMask = 0; int32 ShieldBlock = 0; @@ -47,7 +48,7 @@ namespace WorldPackets int32 Absorbed = 0; int32 Flags = 0; // Optional<SpellNonMeleeDamageLogDebugInfo> DebugInfo; - Optional<Spells::SandboxScalingData> SandboxScaling; + Optional<Spells::ContentTuningParams> ContentTuning; }; class EnvironmentalDamageLog final : public CombatLogServerPacket @@ -99,12 +100,13 @@ namespace WorldPackets ObjectGuid TargetGUID; int32 SpellID = 0; int32 Health = 0; + int32 OriginalHeal = 0; int32 OverHeal = 0; int32 Absorbed = 0; bool Crit = false; Optional<float> CritRollMade; Optional<float> CritRollNeeded; - Optional<Spells::SandboxScalingData> SandboxScaling; + Optional<Spells::ContentTuningParams> ContentTuning; }; class SpellPeriodicAuraLog final : public CombatLogServerPacket @@ -120,13 +122,14 @@ namespace WorldPackets { int32 Effect = 0; int32 Amount = 0; + int32 OriginalDamage = 0; int32 OverHealOrKill = 0; int32 SchoolMaskOrPower = 0; int32 AbsorbedOrAmplitude = 0; int32 Resisted = 0; bool Crit = false; Optional<PeriodicalAuraLogEffectDebugInfo> DebugInfo; - Optional<Spells::SandboxScalingData> SandboxScaling; + Optional<Spells::ContentTuningParams> ContentTuning; }; SpellPeriodicAuraLog() : CombatLogServerPacket(SMSG_SPELL_PERIODIC_AURA_LOG, 16 + 16 + 4 + 4 + 1) { } @@ -267,6 +270,7 @@ namespace WorldPackets ObjectGuid Defender; int32 SpellID = 0; int32 TotalDamage = 0; + int32 OriginalDamage = 0; int32 OverKill = 0; int32 SchoolMask = 0; int32 LogAbsorbed = 0; @@ -308,6 +312,7 @@ namespace WorldPackets ObjectGuid AttackerGUID; ObjectGuid VictimGUID; int32 Damage = 0; + int32 OriginalDamage = 0; int32 OverDamage = -1; // (damage - health) or -1 if unit is still alive Optional<SubDamage> SubDmg; uint8 VictimState = 0; @@ -317,7 +322,7 @@ namespace WorldPackets int32 RageGained = 0; UnkAttackerState UnkState; float Unk = 0.0f; - Spells::SandboxScalingData SandboxScaling; + Spells::ContentTuningParams ContentTuning; }; } } diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp index e2f18ace45e..b1e22a3746f 100644 --- a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp +++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp @@ -27,6 +27,7 @@ void WorldPackets::Spells::SpellCastLogData::Initialize(Unit const* unit) Health = unit->GetHealth(); AttackPower = unit->GetTotalAttackPowerValue(unit->getClass() == CLASS_HUNTER ? RANGED_ATTACK : BASE_ATTACK); SpellPower = unit->SpellBaseDamageBonusDone(SPELL_SCHOOL_MASK_SPELL); + Armor = unit->GetArmor(); PowerData.emplace_back(int32(unit->GetPowerType()), unit->GetPower(unit->GetPowerType()), int32(0)); } @@ -35,6 +36,7 @@ void WorldPackets::Spells::SpellCastLogData::Initialize(Spell const* spell) Health = spell->GetCaster()->GetHealth(); AttackPower = spell->GetCaster()->GetTotalAttackPowerValue(spell->GetCaster()->getClass() == CLASS_HUNTER ? RANGED_ATTACK : BASE_ATTACK); SpellPower = spell->GetCaster()->SpellBaseDamageBonusDone(SPELL_SCHOOL_MASK_SPELL); + Armor = spell->GetCaster()->GetArmor(); Powers primaryPowerType = spell->GetCaster()->GetPowerType(); bool primaryPowerAdded = false; for (SpellPowerCost const& cost : spell->GetPowerCost()) @@ -53,22 +55,22 @@ namespace WorldPackets namespace Spells { template<class T, class U> - bool SandboxScalingData::GenerateDataForUnits(T* /*attacker*/, U* /*target*/) + bool ContentTuningParams::GenerateDataForUnits(T* /*attacker*/, U* /*target*/) { return false; } template<> - bool SandboxScalingData::GenerateDataForUnits<Creature, Player>(Creature* attacker, Player* target) + bool ContentTuningParams::GenerateDataForUnits<Creature, Player>(Creature* attacker, Player* target) { CreatureTemplate const* creatureTemplate = attacker->GetCreatureTemplate(); Type = TYPE_CREATURE_TO_PLAYER_DAMAGE; - PlayerLevelDelta = target->GetInt32Value(PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA); + PlayerLevelDelta = target->GetInt32Value(ACTIVE_PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA); PlayerItemLevel = target->GetAverageItemLevel(); + ScalingHealthItemLevelCurveID = target->GetUInt32Value(UNIT_FIELD_SCALING_HEALTH_ITEM_LEVEL_CURVE_ID); TargetLevel = target->getLevel(); Expansion = creatureTemplate->RequiredExpansion; - Class = creatureTemplate->unit_class; TargetMinScalingLevel = uint8(creatureTemplate->levelScaling->MinLevel); TargetMaxScalingLevel = uint8(creatureTemplate->levelScaling->MaxLevel); TargetScalingLevelDelta = int8(attacker->GetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA)); @@ -76,16 +78,16 @@ namespace WorldPackets } template<> - bool SandboxScalingData::GenerateDataForUnits<Player, Creature>(Player* attacker, Creature* target) + bool ContentTuningParams::GenerateDataForUnits<Player, Creature>(Player* attacker, Creature* target) { CreatureTemplate const* creatureTemplate = target->GetCreatureTemplate(); Type = TYPE_PLAYER_TO_CREATURE_DAMAGE; - PlayerLevelDelta = attacker->GetInt32Value(PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA); + PlayerLevelDelta = attacker->GetInt32Value(ACTIVE_PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA); PlayerItemLevel = attacker->GetAverageItemLevel(); + ScalingHealthItemLevelCurveID = target->GetUInt32Value(UNIT_FIELD_SCALING_HEALTH_ITEM_LEVEL_CURVE_ID); TargetLevel = target->getLevel(); Expansion = creatureTemplate->RequiredExpansion; - Class = creatureTemplate->unit_class; TargetMinScalingLevel = uint8(creatureTemplate->levelScaling->MinLevel); TargetMaxScalingLevel = uint8(creatureTemplate->levelScaling->MaxLevel); TargetScalingLevelDelta = int8(target->GetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA)); @@ -93,7 +95,7 @@ namespace WorldPackets } template<> - bool SandboxScalingData::GenerateDataForUnits<Creature, Creature>(Creature* attacker, Creature* target) + bool ContentTuningParams::GenerateDataForUnits<Creature, Creature>(Creature* attacker, Creature* target) { Creature* accessor = target->HasScalableLevels() ? target : attacker; CreatureTemplate const* creatureTemplate = accessor->GetCreatureTemplate(); @@ -103,7 +105,6 @@ namespace WorldPackets PlayerItemLevel = 0; TargetLevel = target->getLevel(); Expansion = creatureTemplate->RequiredExpansion; - Class = creatureTemplate->unit_class; TargetMinScalingLevel = uint8(creatureTemplate->levelScaling->MinLevel); TargetMaxScalingLevel = uint8(creatureTemplate->levelScaling->MaxLevel); TargetScalingLevelDelta = int8(accessor->GetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA)); @@ -111,7 +112,7 @@ namespace WorldPackets } template<> - bool SandboxScalingData::GenerateDataForUnits<Unit, Unit>(Unit* attacker, Unit* target) + bool ContentTuningParams::GenerateDataForUnits<Unit, Unit>(Unit* attacker, Unit* target) { if (Player* playerAttacker = attacker->ToPlayer()) { @@ -152,6 +153,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellCastLogData data << int64(spellCastLogData.Health); data << int32(spellCastLogData.AttackPower); data << int32(spellCastLogData.SpellPower); + data << int32(spellCastLogData.Armor); data.WriteBits(spellCastLogData.PowerData.size(), 9); data.FlushBits(); @@ -165,16 +167,18 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellCastLogData return data; } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SandboxScalingData const& sandboxScalingData) +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::ContentTuningParams const& contentTuningParams) { - data.WriteBits(sandboxScalingData.Type, 4); - data << int16(sandboxScalingData.PlayerLevelDelta); - data << uint16(sandboxScalingData.PlayerItemLevel); - data << uint8(sandboxScalingData.TargetLevel); - data << uint8(sandboxScalingData.Expansion); - data << uint8(sandboxScalingData.Class); - data << uint8(sandboxScalingData.TargetMinScalingLevel); - data << uint8(sandboxScalingData.TargetMaxScalingLevel); - data << int8(sandboxScalingData.TargetScalingLevelDelta); + data << int16(contentTuningParams.PlayerLevelDelta); + data << uint16(contentTuningParams.PlayerItemLevel); + data << uint16(contentTuningParams.ScalingHealthItemLevelCurveID); + data << uint8(contentTuningParams.TargetLevel); + data << uint8(contentTuningParams.Expansion); + data << uint8(contentTuningParams.TargetMinScalingLevel); + data << uint8(contentTuningParams.TargetMaxScalingLevel); + data << int8(contentTuningParams.TargetScalingLevelDelta); + data.WriteBits(contentTuningParams.Type, 4); + data.WriteBit(contentTuningParams.ScalesWithItemLevel); + data.FlushBits(); return data; } diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.h b/src/server/game/Server/Packets/CombatLogPacketsCommon.h index 172f94e7031..b30c5fefe34 100644 --- a/src/server/game/Server/Packets/CombatLogPacketsCommon.h +++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.h @@ -41,31 +41,34 @@ namespace WorldPackets int64 Health = 0; int32 AttackPower = 0; int32 SpellPower = 0; + int32 Armor = 0; std::vector<SpellLogPowerData> PowerData; void Initialize(Unit const* unit); void Initialize(Spell const* spell); }; - struct SandboxScalingData + struct ContentTuningParams { - enum SandboxScalingDataType : uint32 + enum ContentTuningType : uint32 { - TYPE_PLAYER_TO_PLAYER = 1, // NYI - TYPE_CREATURE_TO_PLAYER_DAMAGE = 2, - TYPE_PLAYER_TO_CREATURE_DAMAGE = 3, + TYPE_PLAYER_TO_PLAYER = 7, // NYI + TYPE_PLAYER_TO_PLAYER_HEALING = 8, + TYPE_CREATURE_TO_PLAYER_DAMAGE = 1, + TYPE_PLAYER_TO_CREATURE_DAMAGE = 2, TYPE_CREATURE_TO_CREATURE_DAMAGE = 4 }; uint32 Type = 0; int16 PlayerLevelDelta = 0; uint16 PlayerItemLevel = 0; + uint16 ScalingHealthItemLevelCurveID = 0; uint8 TargetLevel = 0; uint8 Expansion = 0; - uint8 Class = 0; uint8 TargetMinScalingLevel = 0; uint8 TargetMaxScalingLevel = 0; int8 TargetScalingLevelDelta = 0; + bool ScalesWithItemLevel = false; template<class T, class U> bool GenerateDataForUnits(T* attacker, U* target); @@ -126,6 +129,6 @@ namespace WorldPackets } ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellCastLogData const& spellCastLogData); -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SandboxScalingData const& sandboxScalingData); +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::ContentTuningParams const& contentTuningParams); #endif // CombatLogPacketsCommon_h__ diff --git a/src/server/game/Server/Packets/CombatPackets.cpp b/src/server/game/Server/Packets/CombatPackets.cpp index 5048595314c..63fc4ac1ed1 100644 --- a/src/server/game/Server/Packets/CombatPackets.cpp +++ b/src/server/game/Server/Packets/CombatPackets.cpp @@ -96,7 +96,7 @@ WorldPacket const* WorldPackets::Combat::AIReaction::Write() WorldPacket const* WorldPackets::Combat::AttackSwingError::Write() { - _worldPacket.WriteBits(Reason, 2); + _worldPacket.WriteBits(Reason, 3); _worldPacket.FlushBits(); return &_worldPacket; } @@ -107,8 +107,8 @@ WorldPacket const* WorldPackets::Combat::PowerUpdate::Write() _worldPacket << uint32(Powers.size()); for (PowerUpdatePower const& power : Powers) { - _worldPacket << power.Power; - _worldPacket << power.PowerType; + _worldPacket << int32(power.Power); + _worldPacket << uint8(power.PowerType); } return &_worldPacket; diff --git a/src/server/game/Server/Packets/CombatPackets.h b/src/server/game/Server/Packets/CombatPackets.h index 446d9f5453b..313d573eae1 100644 --- a/src/server/game/Server/Packets/CombatPackets.h +++ b/src/server/game/Server/Packets/CombatPackets.h @@ -41,9 +41,9 @@ namespace WorldPackets public: enum AttackSwingErr : uint8 { - CantAttack = 0, + NotInRange = 0, BadFacing = 1, - NotInRange = 2, + CantAttack = 2, DeadTarget = 3 }; diff --git a/src/server/game/Server/Packets/DuelPackets.cpp b/src/server/game/Server/Packets/DuelPackets.cpp index f76ccecaa89..ccee13b731a 100644 --- a/src/server/game/Server/Packets/DuelPackets.cpp +++ b/src/server/game/Server/Packets/DuelPackets.cpp @@ -59,6 +59,7 @@ void WorldPackets::Duel::DuelResponse::Read() { _worldPacket >> ArbiterGUID; Accepted = _worldPacket.ReadBit(); + Forfeited = _worldPacket.ReadBit(); } WorldPacket const* WorldPackets::Duel::DuelWinner::Write() diff --git a/src/server/game/Server/Packets/DuelPackets.h b/src/server/game/Server/Packets/DuelPackets.h index b45a8b42ba7..efa2701741a 100644 --- a/src/server/game/Server/Packets/DuelPackets.h +++ b/src/server/game/Server/Packets/DuelPackets.h @@ -103,6 +103,7 @@ namespace WorldPackets ObjectGuid ArbiterGUID; bool Accepted = false; + bool Forfeited = false; }; class DuelWinner final : public ServerPacket diff --git a/src/server/game/Server/Packets/EquipmentSetPackets.h b/src/server/game/Server/Packets/EquipmentSetPackets.h index 1dd7040ec32..5c17fdc3cae 100644 --- a/src/server/game/Server/Packets/EquipmentSetPackets.h +++ b/src/server/game/Server/Packets/EquipmentSetPackets.h @@ -28,7 +28,7 @@ namespace WorldPackets class EquipmentSetID final : public ServerPacket { public: - EquipmentSetID() : ServerPacket(SMSG_EQUIPMENT_SET_ID, 8 + 4) { } + EquipmentSetID() : ServerPacket(SMSG_EQUIPMENT_SET_ID, 8 + 4 + 4) { } WorldPacket const* Write() override; @@ -89,7 +89,7 @@ namespace WorldPackets class UseEquipmentSetResult final : public ServerPacket { public: - UseEquipmentSetResult() : ServerPacket(SMSG_USE_EQUIPMENT_SET_RESULT, 1) { } + UseEquipmentSetResult() : ServerPacket(SMSG_USE_EQUIPMENT_SET_RESULT, 8 + 1) { } WorldPacket const* Write() override; diff --git a/src/server/game/Server/Packets/GarrisonPackets.h b/src/server/game/Server/Packets/GarrisonPackets.h index a7bd016909c..bf83f006b1e 100644 --- a/src/server/game/Server/Packets/GarrisonPackets.h +++ b/src/server/game/Server/Packets/GarrisonPackets.h @@ -249,7 +249,7 @@ namespace WorldPackets class GarrisonLearnBlueprintResult final : public ServerPacket { public: - GarrisonLearnBlueprintResult() : ServerPacket(SMSG_GARRISON_LEARN_BLUEPRINT_RESULT, 4 + 4) { } + GarrisonLearnBlueprintResult() : ServerPacket(SMSG_GARRISON_LEARN_BLUEPRINT_RESULT, 4 + 4 + 4) { } WorldPacket const* Write() override; diff --git a/src/server/game/Server/Packets/GuildFinderPackets.cpp b/src/server/game/Server/Packets/GuildFinderPackets.cpp index ac8bcfea9df..2ce269fbdcb 100644 --- a/src/server/game/Server/Packets/GuildFinderPackets.cpp +++ b/src/server/game/Server/Packets/GuildFinderPackets.cpp @@ -108,7 +108,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::GuildFinder::GuildPostDat data << int32(post.Availability); data << int32(post.ClassRoles); data << int32(post.LevelRange); - data << uint32(post.SecondsRemaining); + data << int32(post.SecondsRemaining); data.WriteString(post.Comment); return data; } diff --git a/src/server/game/Server/Packets/GuildFinderPackets.h b/src/server/game/Server/Packets/GuildFinderPackets.h index 1fe3183156a..94084934fc1 100644 --- a/src/server/game/Server/Packets/GuildFinderPackets.h +++ b/src/server/game/Server/Packets/GuildFinderPackets.h @@ -157,7 +157,7 @@ namespace WorldPackets int32 Availability = 0; int32 ClassRoles = 0; int32 LevelRange = 0; - time_t SecondsRemaining = time_t(0); + int32 SecondsRemaining = 0; std::string Comment; }; diff --git a/src/server/game/Server/Packets/GuildPackets.cpp b/src/server/game/Server/Packets/GuildPackets.cpp index 777891b3cef..2a3739f2470 100644 --- a/src/server/game/Server/Packets/GuildPackets.cpp +++ b/src/server/game/Server/Packets/GuildPackets.cpp @@ -63,9 +63,9 @@ WorldPacket const* WorldPackets::Guild::QueryGuildInfoResponse::Write() WorldPacket const* WorldPackets::Guild::GuildRoster::Write() { - _worldPacket << NumAccounts; + _worldPacket << int32(NumAccounts); _worldPacket.AppendPackedTime(CreateDate); - _worldPacket << GuildFlags; + _worldPacket << int32(GuildFlags); _worldPacket << uint32(MemberData.size()); _worldPacket.WriteBits(WelcomeText.length(), 10); _worldPacket.WriteBits(InfoText.length(), 11); @@ -98,8 +98,8 @@ void WorldPackets::Guild::GuildUpdateMotdText::Read() WorldPacket const* WorldPackets::Guild::GuildCommandResult::Write() { - _worldPacket << Result; - _worldPacket << Command; + _worldPacket << int32(Result); + _worldPacket << int32(Command); _worldPacket.WriteBits(Name.length(), 8); _worldPacket.FlushBits(); @@ -127,17 +127,17 @@ WorldPacket const* WorldPackets::Guild::GuildInvite::Write() _worldPacket.WriteBits(OldGuildName.length(), 7); _worldPacket.FlushBits(); - _worldPacket << InviterVirtualRealmAddress; - _worldPacket << GuildVirtualRealmAddress; + _worldPacket << uint32(InviterVirtualRealmAddress); + _worldPacket << uint32(GuildVirtualRealmAddress); _worldPacket << GuildGUID; - _worldPacket << OldGuildVirtualRealmAddress; + _worldPacket << uint32(OldGuildVirtualRealmAddress); _worldPacket << OldGuildGUID; - _worldPacket << EmblemStyle; - _worldPacket << EmblemColor; - _worldPacket << BorderStyle; - _worldPacket << BorderColor; - _worldPacket << Background; - _worldPacket << AchievementPoints; + _worldPacket << uint32(EmblemStyle); + _worldPacket << uint32(EmblemColor); + _worldPacket << uint32(BorderStyle); + _worldPacket << uint32(BorderColor); + _worldPacket << uint32(Background); + _worldPacket << int32(AchievementPoints); _worldPacket.WriteString(InviterName); _worldPacket.WriteString(GuildName); @@ -148,9 +148,9 @@ WorldPacket const* WorldPackets::Guild::GuildInvite::Write() ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRosterProfessionData const& rosterProfessionData) { - data << rosterProfessionData.DbID; - data << rosterProfessionData.Rank; - data << rosterProfessionData.Step; + data << int32(rosterProfessionData.DbID); + data << int32(rosterProfessionData.Rank); + data << int32(rosterProfessionData.Step); return data; } @@ -158,20 +158,20 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRosterProfess ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRosterMemberData const& rosterMemberData) { data << rosterMemberData.Guid; - data << rosterMemberData.RankID; - data << rosterMemberData.AreaID; - data << rosterMemberData.PersonalAchievementPoints; - data << rosterMemberData.GuildReputation; - data << rosterMemberData.LastSave; + data << int32(rosterMemberData.RankID); + data << int32(rosterMemberData.AreaID); + data << int32(rosterMemberData.PersonalAchievementPoints); + data << int32(rosterMemberData.GuildReputation); + data << float(rosterMemberData.LastSave); for (uint8 i = 0; i < 2; i++) data << rosterMemberData.Profession[i]; - data << rosterMemberData.VirtualRealmAddress; - data << rosterMemberData.Status; - data << rosterMemberData.Level; - data << rosterMemberData.ClassID; - data << rosterMemberData.Gender; + data << uint32(rosterMemberData.VirtualRealmAddress); + data << uint8(rosterMemberData.Status); + data << uint8(rosterMemberData.Level); + data << uint8(rosterMemberData.ClassID); + data << uint8(rosterMemberData.Gender); data.WriteBits(rosterMemberData.Name.length(), 6); data.WriteBits(rosterMemberData.Note.length(), 8); @@ -190,7 +190,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRosterMemberD WorldPacket const* WorldPackets::Guild::GuildEventPresenceChange::Write() { _worldPacket << Guid; - _worldPacket << VirtualRealmAddress; + _worldPacket << uint32(VirtualRealmAddress); _worldPacket.WriteBits(Name.length(), 6); _worldPacket.WriteBit(LoggedOn); @@ -215,7 +215,7 @@ WorldPacket const* WorldPackets::Guild::GuildEventMotd::Write() WorldPacket const* WorldPackets::Guild::GuildEventPlayerJoined::Write() { _worldPacket << Guid; - _worldPacket << VirtualRealmAddress; + _worldPacket << uint32(VirtualRealmAddress); _worldPacket.WriteBits(Name.length(), 6); _worldPacket.FlushBits(); @@ -249,9 +249,9 @@ WorldPacket const* WorldPackets::Guild::GuildEventLogQueryResults::Write() { _worldPacket << entry.PlayerGUID; _worldPacket << entry.OtherGUID; - _worldPacket << entry.TransactionType; - _worldPacket << entry.RankID; - _worldPacket << entry.TransactionDate; + _worldPacket << uint8(entry.TransactionType); + _worldPacket << uint8(entry.RankID); + _worldPacket << uint32(entry.TransactionDate); } return &_worldPacket; @@ -269,12 +269,12 @@ WorldPacket const* WorldPackets::Guild::GuildEventPlayerLeft::Write() _worldPacket.FlushBits(); _worldPacket << RemoverGUID; - _worldPacket << RemoverVirtualRealmAddress; + _worldPacket << uint32(RemoverVirtualRealmAddress); _worldPacket.WriteString(RemoverName); } _worldPacket << LeaverGUID; - _worldPacket << LeaverVirtualRealmAddress; + _worldPacket << uint32(LeaverVirtualRealmAddress); _worldPacket.WriteString(LeaverName); return &_worldPacket; @@ -282,16 +282,16 @@ WorldPacket const* WorldPackets::Guild::GuildEventPlayerLeft::Write() WorldPacket const* WorldPackets::Guild::GuildPermissionsQueryResults::Write() { - _worldPacket << RankID; - _worldPacket << WithdrawGoldLimit; - _worldPacket << Flags; - _worldPacket << NumTabs; + _worldPacket << uint32(RankID); + _worldPacket << int32(WithdrawGoldLimit); + _worldPacket << int32(Flags); + _worldPacket << int32(NumTabs); _worldPacket << uint32(Tab.size()); for (GuildRankTabPermissions const& tab : Tab) { - _worldPacket << tab.Flags; - _worldPacket << tab.WithdrawItemLimit; + _worldPacket << int32(tab.Flags); + _worldPacket << int32(tab.WithdrawItemLimit); } return &_worldPacket; @@ -325,9 +325,9 @@ WorldPacket const* WorldPackets::Guild::GuildEventNewLeader::Write() _worldPacket.FlushBits(); _worldPacket << OldLeaderGUID; - _worldPacket << OldLeaderVirtualRealmAddress; + _worldPacket << uint32(OldLeaderVirtualRealmAddress); _worldPacket << NewLeaderGUID; - _worldPacket << NewLeaderVirtualRealmAddress; + _worldPacket << uint32(NewLeaderVirtualRealmAddress); _worldPacket.WriteString(OldLeaderName); _worldPacket.WriteString(NewLeaderName); @@ -337,7 +337,7 @@ WorldPacket const* WorldPackets::Guild::GuildEventNewLeader::Write() WorldPacket const* WorldPackets::Guild::GuildEventTabModified::Write() { - _worldPacket << Tab; + _worldPacket << int32(Tab); _worldPacket.WriteBits(Name.length(), 7); _worldPacket.WriteBits(Icon.length(), 9); @@ -358,15 +358,15 @@ WorldPacket const* WorldPackets::Guild::GuildEventTabTextChanged::Write() ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRankData const& rankData) { - data << rankData.RankID; - data << rankData.RankOrder; - data << rankData.Flags; - data << rankData.WithdrawGoldLimit; + data << uint32(rankData.RankID); + data << uint32(rankData.RankOrder); + data << uint32(rankData.Flags); + data << uint32(rankData.WithdrawGoldLimit); for (uint8 i = 0; i < GUILD_BANK_MAX_TABS; i++) { - data << rankData.TabFlags[i]; - data << rankData.TabWithdrawItemLimit[i]; + data << uint32(rankData.TabFlags[i]); + data << uint32(rankData.TabWithdrawItemLimit[i]); } data.WriteBits(rankData.RankName.length(), 7); @@ -416,7 +416,7 @@ WorldPacket const* WorldPackets::Guild::GuildSendRankChange::Write() { _worldPacket << Officer; _worldPacket << Other; - _worldPacket << RankID; + _worldPacket << uint32(RankID); _worldPacket.WriteBit(Promote); _worldPacket.FlushBits(); @@ -499,25 +499,25 @@ WorldPacket const* WorldPackets::Guild::GuildPartyState::Write() _worldPacket.WriteBit(InGuildParty); _worldPacket.FlushBits(); - _worldPacket << NumMembers; - _worldPacket << NumRequired; - _worldPacket << GuildXPEarnedMult; + _worldPacket << int32(NumMembers); + _worldPacket << int32(NumRequired); + _worldPacket << float(GuildXPEarnedMult); return &_worldPacket; } ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRewardItem const& rewardItem) { - data << rewardItem.ItemID; - data << rewardItem.Unk4; + data << uint32(rewardItem.ItemID); + data << uint32(rewardItem.Unk4); data << uint32(rewardItem.AchievementsRequired.size()); data << uint64(rewardItem.RaceMask); - data << rewardItem.MinGuildLevel; - data << rewardItem.MinGuildRep; - data << rewardItem.Cost; + data << int32(rewardItem.MinGuildLevel); + data << int32(rewardItem.MinGuildRep); + data << uint64(rewardItem.Cost); - for (uint8 i = 0; i < rewardItem.AchievementsRequired.size(); i++) - data << rewardItem.AchievementsRequired[i]; + for (std::size_t i = 0; i < rewardItem.AchievementsRequired.size(); i++) + data << uint32(rewardItem.AchievementsRequired[i]); return data; } @@ -529,7 +529,7 @@ void WorldPackets::Guild::RequestGuildRewardsList::Read() WorldPacket const* WorldPackets::Guild::GuildRewardList::Write() { - _worldPacket << Version; + _worldPacket << int32(Version); _worldPacket << uint32(RewardItems.size()); for (GuildRewardItem const& item : RewardItems) @@ -592,9 +592,9 @@ void WorldPackets::Guild::GuildBankWithdrawMoney::Read() WorldPacket const* WorldPackets::Guild::GuildBankQueryResults::Write() { - _worldPacket << Money; - _worldPacket << Tab; - _worldPacket << WithdrawalsRemaining; + _worldPacket << uint64(Money); + _worldPacket << int32(Tab); + _worldPacket << int32(WithdrawalsRemaining); _worldPacket << uint32(TabInfo.size()); _worldPacket << uint32(ItemInfo.size()); _worldPacket.WriteBit(FullUpdate); @@ -602,7 +602,7 @@ WorldPacket const* WorldPackets::Guild::GuildBankQueryResults::Write() for (GuildBankTabInfo const& tab : TabInfo) { - _worldPacket << tab.TabIndex; + _worldPacket << int32(tab.TabIndex); _worldPacket.WriteBits(tab.Name.length(), 7); _worldPacket.WriteBits(tab.Icon.length(), 9); _worldPacket.FlushBits(); @@ -613,12 +613,12 @@ WorldPacket const* WorldPackets::Guild::GuildBankQueryResults::Write() for (GuildBankItemInfo const& item : ItemInfo) { - _worldPacket << item.Slot; - _worldPacket << item.Count; - _worldPacket << item.EnchantmentID; - _worldPacket << item.Charges; - _worldPacket << item.OnUseEnchantmentID; - _worldPacket << item.Flags; + _worldPacket << int32(item.Slot); + _worldPacket << int32(item.Count); + _worldPacket << int32(item.EnchantmentID); + _worldPacket << int32(item.Charges); + _worldPacket << int32(item.OnUseEnchantmentID); + _worldPacket << int32(item.Flags); _worldPacket << item.Item; _worldPacket.WriteBits(item.SocketEnchant.size(), 2); _worldPacket.WriteBit(item.Locked); @@ -658,7 +658,7 @@ void WorldPackets::Guild::GuildBankLogQuery::Read() WorldPacket const* WorldPackets::Guild::GuildBankLogQueryResults::Write() { - _worldPacket << Tab; + _worldPacket << int32(Tab); _worldPacket << uint32(Entry.size()); _worldPacket.WriteBit(WeeklyBonusMoney.is_initialized()); _worldPacket.FlushBits(); @@ -666,8 +666,8 @@ WorldPacket const* WorldPackets::Guild::GuildBankLogQueryResults::Write() for (GuildBankLogEntry const& logEntry : Entry) { _worldPacket << logEntry.PlayerGUID; - _worldPacket << logEntry.TimeOffset; - _worldPacket << logEntry.EntryType; + _worldPacket << uint32(logEntry.TimeOffset); + _worldPacket << int8(logEntry.EntryType); _worldPacket.WriteBit(logEntry.Money.is_initialized()); _worldPacket.WriteBit(logEntry.ItemID.is_initialized()); @@ -676,20 +676,20 @@ WorldPacket const* WorldPackets::Guild::GuildBankLogQueryResults::Write() _worldPacket.FlushBits(); if (logEntry.Money.is_initialized()) - _worldPacket << *logEntry.Money; + _worldPacket << uint64(*logEntry.Money); if (logEntry.ItemID.is_initialized()) - _worldPacket << *logEntry.ItemID; + _worldPacket << int32(*logEntry.ItemID); if (logEntry.Count.is_initialized()) - _worldPacket << *logEntry.Count; + _worldPacket << int32(*logEntry.Count); if (logEntry.OtherTab.is_initialized()) - _worldPacket << *logEntry.OtherTab; + _worldPacket << int8(*logEntry.OtherTab); } if (WeeklyBonusMoney) - _worldPacket << *WeeklyBonusMoney; + _worldPacket << uint64(*WeeklyBonusMoney); return &_worldPacket; } @@ -701,7 +701,7 @@ void WorldPackets::Guild::GuildBankTextQuery::Read() WorldPacket const* WorldPackets::Guild::GuildBankTextQueryResult::Write() { - _worldPacket << Tab; + _worldPacket << int32(Tab); _worldPacket.WriteBits(Text.length(), 14); _worldPacket.FlushBits(); @@ -724,13 +724,13 @@ void WorldPackets::Guild::GuildQueryNews::Read() ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildNewsEvent const& newsEvent) { - data << newsEvent.Id; + data << int32(newsEvent.Id); data.AppendPackedTime(newsEvent.CompletedDate); - data << newsEvent.Type; - data << newsEvent.Flags; + data << int32(newsEvent.Type); + data << int32(newsEvent.Flags); - for (uint8 i = 0; i < 2; i++) - data << newsEvent.Data[i]; + for (std::size_t i = 0; i < newsEvent.Data.size(); ++i) + data << int32(newsEvent.Data[i]); data << newsEvent.MemberGuid; data << uint32(newsEvent.MemberList.size()); diff --git a/src/server/game/Server/Packets/GuildPackets.h b/src/server/game/Server/Packets/GuildPackets.h index 350ff772000..844dba91f5c 100644 --- a/src/server/game/Server/Packets/GuildPackets.h +++ b/src/server/game/Server/Packets/GuildPackets.h @@ -432,11 +432,11 @@ namespace WorldPackets int32 RankID = 0; int32 RankOrder = 0; - int32 WithdrawGoldLimit = 0; + uint32 WithdrawGoldLimit = 0; uint32 Flags = 0; uint32 OldFlags = 0; - int32 TabFlags[GUILD_BANK_MAX_TABS]; - int32 TabWithdrawItemLimit[GUILD_BANK_MAX_TABS]; + uint32 TabFlags[GUILD_BANK_MAX_TABS]; + uint32 TabWithdrawItemLimit[GUILD_BANK_MAX_TABS]; std::string RankName; }; @@ -687,7 +687,7 @@ namespace WorldPackets WorldPacket const* Write() override; std::vector<GuildRewardItem> RewardItems; - uint32 Version = 0; + int32 Version = 0; }; class GuildBankActivate final : public ClientPacket @@ -813,10 +813,11 @@ namespace WorldPackets bool FullUpdate = false; }; + // TODO: research new guild bank opcodes class GuildBankSwapItems final : public ClientPacket { public: - GuildBankSwapItems(WorldPacket&& packet) : ClientPacket(CMSG_GUILD_BANK_SWAP_ITEMS, std::move(packet)) { } + GuildBankSwapItems(WorldPacket&& packet) : ClientPacket(std::move(packet)) { } void Read() override; @@ -917,9 +918,9 @@ namespace WorldPackets uint32 CompletedDate = 0; int32 Type = 0; int32 Flags = 0; - int32 Data[2]; + std::array<int32, 2> Data; ObjectGuid MemberGuid; - GuidList MemberList; + std::vector<ObjectGuid> MemberList; Optional<Item::ItemInstance> Item; }; diff --git a/src/server/game/Server/Packets/InspectPackets.cpp b/src/server/game/Server/Packets/InspectPackets.cpp index df9b540e164..04fc01ad669 100644 --- a/src/server/game/Server/Packets/InspectPackets.cpp +++ b/src/server/game/Server/Packets/InspectPackets.cpp @@ -35,6 +35,10 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::InspectItemData { data << itemData.CreatorGUID; data << uint8(itemData.Index); + data << uint32(itemData.AzeritePowers.size()); + if (!itemData.AzeritePowers.empty()) + data.append(itemData.AzeritePowers.data(), itemData.AzeritePowers.size()); + data << itemData.Item; data.WriteBit(itemData.Usable); data.WriteBits(itemData.Enchants.size(), 4); @@ -76,10 +80,11 @@ WorldPackets::Inspect::InspectItemData::InspectItemData(::Item const* item, uint { if (gemData.ItemId) { - WorldPackets::Item::ItemGemData gem; + Gems.emplace_back(); + + WorldPackets::Item::ItemGemData& gem = Gems.back(); gem.Slot = i; gem.Item.Initialize(&gemData); - Gems.push_back(gem); } ++i; } @@ -103,6 +108,7 @@ WorldPacket const* WorldPackets::Inspect::InspectResult::Write() _worldPacket.append(PvpTalents.data(), PvpTalents.size()); _worldPacket.WriteBit(GuildData.is_initialized()); + _worldPacket.WriteBit(AzeriteLevel.is_initialized()); _worldPacket.FlushBits(); for (size_t i = 0; i < Items.size(); ++i) @@ -111,6 +117,9 @@ WorldPacket const* WorldPackets::Inspect::InspectResult::Write() if (GuildData) _worldPacket << *GuildData; + if (AzeriteLevel) + _worldPacket << int32(*AzeriteLevel); + return &_worldPacket; } @@ -138,6 +147,7 @@ void WorldPackets::Inspect::InspectPVPRequest::Read() ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::PVPBracketData const& bracket) { + data << uint8(bracket.Bracket); data << int32(bracket.Rating); data << int32(bracket.Rank); data << int32(bracket.WeeklyPlayed); @@ -146,7 +156,9 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::PVPBracketData c data << int32(bracket.SeasonWon); data << int32(bracket.WeeklyBestRating); data << int32(bracket.Unk710); - data << uint8(bracket.Bracket); + data << int32(bracket.Unk801_1); + data.WriteBit(bracket.Unk801_2); + data.FlushBits(); return data; } diff --git a/src/server/game/Server/Packets/InspectPackets.h b/src/server/game/Server/Packets/InspectPackets.h index 7bf6b0baa2a..c6437f182f7 100644 --- a/src/server/game/Server/Packets/InspectPackets.h +++ b/src/server/game/Server/Packets/InspectPackets.h @@ -56,6 +56,7 @@ namespace WorldPackets bool Usable = false; std::vector<InspectEnchantData> Enchants; std::vector<Item::ItemGemData> Gems; + std::vector<int32> AzeritePowers; }; struct InspectGuildData @@ -68,7 +69,10 @@ namespace WorldPackets class InspectResult final : public ServerPacket { public: - InspectResult() : ServerPacket(SMSG_INSPECT_RESULT, 45) { } + InspectResult() : ServerPacket(SMSG_INSPECT_RESULT, 45) + { + PvpTalents.fill(0); + } WorldPacket const* Write() override; @@ -76,11 +80,12 @@ namespace WorldPackets std::vector<InspectItemData> Items; std::vector<uint16> Glyphs; std::vector<uint16> Talents; - std::vector<uint16> PvpTalents; + std::array<uint16, MAX_PVP_TALENT_SLOTS> PvpTalents; int32 ClassID = CLASS_NONE; int32 GenderID = GENDER_NONE; Optional<InspectGuildData> GuildData; int32 SpecializationID = 0; + Optional<int32> AzeriteLevel; }; class RequestHonorStats final : public ClientPacket @@ -128,7 +133,9 @@ namespace WorldPackets int32 SeasonWon = 0; int32 WeeklyBestRating = 0; int32 Unk710 = 0; + int32 Unk801_1 = 0; uint8 Bracket = 0; + bool Unk801_2 = false; }; class InspectPVPResponse final : public ServerPacket diff --git a/src/server/game/Server/Packets/InstancePackets.cpp b/src/server/game/Server/Packets/InstancePackets.cpp index 0a6e29e6838..258aa24bd1f 100644 --- a/src/server/game/Server/Packets/InstancePackets.cpp +++ b/src/server/game/Server/Packets/InstancePackets.cpp @@ -31,23 +31,13 @@ WorldPacket const* WorldPackets::Instance::UpdateInstanceOwnership::Write() return &_worldPacket; } -WorldPacket const* WorldPackets::Instance::InstanceInfo::Write() -{ - _worldPacket << int32(LockList.size()); - - for (InstanceLockInfos const& lockInfos : LockList) - _worldPacket << lockInfos; - - return &_worldPacket; -} - -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Instance::InstanceLockInfos const& lockInfos) +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Instance::InstanceLock const& lockInfos) { - data << lockInfos.MapID; - data << lockInfos.DifficultyID; - data << lockInfos.InstanceID; - data << lockInfos.TimeRemaining; - data << lockInfos.CompletedMask; + data << uint32(lockInfos.MapID); + data << uint32(lockInfos.DifficultyID); + data << uint64(lockInfos.InstanceID); + data << uint32(lockInfos.TimeRemaining); + data << uint32(lockInfos.CompletedMask); data.WriteBit(lockInfos.Locked); data.WriteBit(lockInfos.Extended); @@ -57,6 +47,16 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Instance::InstanceLockInf return data; } +WorldPacket const* WorldPackets::Instance::InstanceInfo::Write() +{ + _worldPacket << int32(LockList.size()); + + for (InstanceLock const& instanceLock : LockList) + _worldPacket << instanceLock; + + return &_worldPacket; +} + WorldPacket const* WorldPackets::Instance::InstanceReset::Write() { _worldPacket << uint32(MapID); diff --git a/src/server/game/Server/Packets/InstancePackets.h b/src/server/game/Server/Packets/InstancePackets.h index f13e046906e..0869a137926 100644 --- a/src/server/game/Server/Packets/InstancePackets.h +++ b/src/server/game/Server/Packets/InstancePackets.h @@ -47,7 +47,7 @@ namespace WorldPackets // but it has been deperecated in favor of simply checking group leader, being inside an instance or using dungeon finder }; - struct InstanceLockInfos + struct InstanceLock { uint64 InstanceID = 0u; uint32 MapID = 0u; @@ -66,7 +66,7 @@ namespace WorldPackets WorldPacket const* Write() override; - std::vector<InstanceLockInfos> LockList; + std::vector<InstanceLock> LockList; }; class ResetInstances final : public ClientPacket @@ -90,7 +90,7 @@ namespace WorldPackets class InstanceResetFailed final : public ServerPacket { public: - InstanceResetFailed() : ServerPacket(SMSG_INSTANCE_RESET_FAILED, 4 + 4) { } + InstanceResetFailed() : ServerPacket(SMSG_INSTANCE_RESET_FAILED, 4 + 1) { } WorldPacket const* Write() override; @@ -248,6 +248,4 @@ namespace WorldPackets } } -ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Instance::InstanceLockInfos const& lockInfos); - #endif // InstancePackets_h__ diff --git a/src/server/game/Server/Packets/ItemPackets.cpp b/src/server/game/Server/Packets/ItemPackets.cpp index 87599873de5..55f4274eefc 100644 --- a/src/server/game/Server/Packets/ItemPackets.cpp +++ b/src/server/game/Server/Packets/ItemPackets.cpp @@ -280,7 +280,7 @@ WorldPacket const* WorldPackets::Item::ReadItemResultFailed::Write() { _worldPacket << Item; _worldPacket << uint32(Delay); - _worldPacket.WriteBits(Subcode, 3); + _worldPacket.WriteBits(Subcode, 2); _worldPacket.FlushBits(); diff --git a/src/server/game/Server/Packets/LFGPackets.cpp b/src/server/game/Server/Packets/LFGPackets.cpp index 5b8d66afd6a..1ec2dec7804 100644 --- a/src/server/game/Server/Packets/LFGPackets.cpp +++ b/src/server/game/Server/Packets/LFGPackets.cpp @@ -311,10 +311,15 @@ WorldPacket const* WorldPackets::LFG::LFGQueueStatus::Write() ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::LFG::LFGPlayerRewards const& lfgPlayerRewards) { - data << int32(lfgPlayerRewards.RewardItem); - data << uint32(lfgPlayerRewards.RewardItemQuantity); - data << int32(lfgPlayerRewards.BonusCurrency); - data.WriteBit(lfgPlayerRewards.IsCurrency); + data.WriteBit(lfgPlayerRewards.RewardItem.is_initialized()); + data.WriteBit(lfgPlayerRewards.RewardCurrency.is_initialized()); + if (lfgPlayerRewards.RewardItem) + data << *lfgPlayerRewards.RewardItem; + + data << uint32(lfgPlayerRewards.Quantity); + data << int32(lfgPlayerRewards.BonusQuantity); + if (lfgPlayerRewards.RewardCurrency) + data << int32(*lfgPlayerRewards.RewardCurrency); return data; } diff --git a/src/server/game/Server/Packets/LFGPackets.h b/src/server/game/Server/Packets/LFGPackets.h index 9e1c513aece..2b31074094d 100644 --- a/src/server/game/Server/Packets/LFGPackets.h +++ b/src/server/game/Server/Packets/LFGPackets.h @@ -20,6 +20,7 @@ #include "Packet.h" #include "PacketUtilities.h" +#include "ItemPacketsCommon.h" #include "LFGPacketsCommon.h" #include "Optional.h" @@ -325,13 +326,24 @@ namespace WorldPackets struct LFGPlayerRewards { LFGPlayerRewards() { } - LFGPlayerRewards(int32 rewardItem, uint32 rewardItemQuantity, int32 bonusCurrency, bool isCurrency) - : RewardItem(rewardItem), RewardItemQuantity(rewardItemQuantity), BonusCurrency(bonusCurrency), IsCurrency(isCurrency) { } - - int32 RewardItem = 0; - uint32 RewardItemQuantity = 0; - int32 BonusCurrency = 0; - bool IsCurrency = false; + LFGPlayerRewards(int32 id, uint32 quantity, int32 bonusQuantity, bool isCurrency) + : Quantity(quantity), BonusQuantity(bonusQuantity) + { + if (!isCurrency) + { + RewardItem = boost::in_place(); + RewardItem->ItemID = id; + } + else + { + RewardCurrency = id; + } + } + + Optional<Item::ItemInstance> RewardItem; + Optional<int32> RewardCurrency; + uint32 Quantity = 0; + int32 BonusQuantity = 0; }; class LFGPlayerReward final : public ServerPacket diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp index a03f1ff35fc..9f98092d091 100644 --- a/src/server/game/Server/Packets/MiscPackets.cpp +++ b/src/server/game/Server/Packets/MiscPackets.cpp @@ -346,7 +346,8 @@ WorldPacket const* WorldPackets::Misc::LevelUpInfo::Write() for (int32 stat : StatDelta) _worldPacket << stat; - _worldPacket << int32(Cp); + _worldPacket << int32(NumNewTalents); + _worldPacket << int32(NumNewPvpTalentSlots); return &_worldPacket; } @@ -404,11 +405,11 @@ WorldPacket const* WorldPackets::Misc::PhaseShiftChange::Write() _worldPacket << uint32(PreloadMapIDs.size() * 2); // size in bytes for (uint16 preloadMapId : PreloadMapIDs) - _worldPacket << uint16(preloadMapId); // Inactive terrain swap map id + _worldPacket << uint16(preloadMapId); // Inactive terrain swap map id - _worldPacket << uint32(UiWorldMapAreaIDSwaps.size() * 2); // size in bytes - for (uint16 uiWorldMapAreaIDSwap : UiWorldMapAreaIDSwaps) - _worldPacket << uint16(uiWorldMapAreaIDSwap); // UI map id, WorldMapArea.db2, controls map display + _worldPacket << uint32(UiMapPhaseIDs.size() * 2); // size in bytes + for (uint16 uiMapPhaseId : UiMapPhaseIDs) + _worldPacket << uint16(uiMapPhaseId); // phase id, controls only map display (visible on all maps) return &_worldPacket; } diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index 26affbaf934..df9c99e063b 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -258,7 +258,7 @@ namespace WorldPackets void Read() override; - int32 DifficultyID = 0; + uint32 DifficultyID = 0; }; class SetRaidDifficulty final : public ClientPacket @@ -480,7 +480,8 @@ namespace WorldPackets int32 HealthDelta = 0; std::array<int32, 6> PowerDelta = { }; std::array<int32, MAX_STATS> StatDelta = { }; - int32 Cp = 0; + int32 NumNewTalents = 0; + int32 NumNewPvpTalentSlots = 0; }; class PlayMusic final : public ServerPacket @@ -551,7 +552,7 @@ namespace WorldPackets ObjectGuid Client; PhaseShiftData Phaseshift; std::vector<uint16> PreloadMapIDs; - std::vector<uint16> UiWorldMapAreaIDSwaps; + std::vector<uint16> UiMapPhaseIDs; std::vector<uint16> VisibleMapIDs; }; @@ -878,14 +879,6 @@ namespace WorldPackets bool IsFavorite = false; }; - class PvpPrestigeRankUp final : public ClientPacket - { - public: - PvpPrestigeRankUp(WorldPacket&& packet) : ClientPacket(CMSG_PVP_PRESTIGE_RANK_UP, std::move(packet)) { } - - void Read() override { } - }; - class CloseInteraction final : public ClientPacket { public: diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp index 38a7f8f68fd..3dd719f46b0 100644 --- a/src/server/game/Server/Packets/MovementPackets.cpp +++ b/src/server/game/Server/Packets/MovementPackets.cpp @@ -213,6 +213,16 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MonsterSplineSp data << uint32(spellEffectExtraData.SpellVisualID); data << uint32(spellEffectExtraData.ProgressCurveID); data << uint32(spellEffectExtraData.ParabolicCurveID); + data << float(spellEffectExtraData.JumpGravity); + + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MonsterSplineJumpExtraData const& jumpExtraData) +{ + data << float(jumpExtraData.JumpGravity); + data << uint32(jumpExtraData.StartTime); + data << uint32(jumpExtraData.Duration); return data; } @@ -224,8 +234,7 @@ ByteBuffer& WorldPackets::operator<<(ByteBuffer& data, Movement::MovementSpline data << uint32(movementSpline.TierTransStartTime); data << int32(movementSpline.Elapsed); data << uint32(movementSpline.MoveTime); - data << float(movementSpline.JumpGravity); - data << uint32(movementSpline.SpecialTime); + data << uint32(movementSpline.FadeObjectTime); data << uint8(movementSpline.Mode); data << uint8(movementSpline.VehicleExitVoluntary); data << movementSpline.TransportGUID; @@ -235,6 +244,7 @@ ByteBuffer& WorldPackets::operator<<(ByteBuffer& data, Movement::MovementSpline data.WriteBits(movementSpline.PackedDeltas.size(), 16); data.WriteBit(movementSpline.SplineFilter.is_initialized()); data.WriteBit(movementSpline.SpellEffectExtraData.is_initialized()); + data.WriteBit(movementSpline.JumpExtraData.is_initialized()); data.FlushBits(); if (movementSpline.SplineFilter) @@ -262,6 +272,9 @@ ByteBuffer& WorldPackets::operator<<(ByteBuffer& data, Movement::MovementSpline if (movementSpline.SpellEffectExtraData) data << *movementSpline.SpellEffectExtraData; + if (movementSpline.JumpExtraData) + data << *movementSpline.JumpExtraData; + return data; } @@ -300,12 +313,12 @@ void WorldPackets::Movement::CommonMovement::WriteCreateObjectSplineDataBlock(:: data << float(1.0f); // DurationModifier data << float(1.0f); // NextDurationModifier data.WriteBits(moveSpline.facing.type, 2); // Face - bool HasJumpGravity = data.WriteBit(moveSpline.splineflags.parabolic || moveSpline.splineflags.animation); // HasJumpGravity - bool HasSpecialTime = data.WriteBit(moveSpline.splineflags.parabolic && moveSpline.effect_start_time < moveSpline.Duration()); // HasSpecialTime + bool hasFadeObjectTime = data.WriteBit(moveSpline.splineflags.fadeObject && moveSpline.effect_start_time < moveSpline.Duration()); data.WriteBits(moveSpline.getPath().size(), 16); data.WriteBits(uint8(moveSpline.spline.mode()), 2); // Mode data.WriteBit(0); // HasSplineFilter data.WriteBit(moveSpline.spell_effect_extra.is_initialized()); // HasSpellEffectExtraData + data.WriteBit(moveSpline.splineflags.parabolic); // HasJumpExtraData data.FlushBits(); //if (HasSplineFilterKey) @@ -341,11 +354,8 @@ void WorldPackets::Movement::CommonMovement::WriteCreateObjectSplineDataBlock(:: break; } - if (HasJumpGravity) - data << float(moveSpline.vertical_acceleration); // JumpGravity - - if (HasSpecialTime) - data << uint32(moveSpline.effect_start_time); // SpecialTime + if (hasFadeObjectTime) + data << uint32(moveSpline.effect_start_time); // FadeObjectTime data.append(moveSpline.getPath().data(), moveSpline.getPath().size()); @@ -355,6 +365,14 @@ void WorldPackets::Movement::CommonMovement::WriteCreateObjectSplineDataBlock(:: data << uint32(moveSpline.spell_effect_extra->SpellVisualId); data << uint32(moveSpline.spell_effect_extra->ProgressCurveId); data << uint32(moveSpline.spell_effect_extra->ParabolicCurveId); + data << float(moveSpline.vertical_acceleration); + } + + if (moveSpline.splineflags.parabolic) + { + data << float(moveSpline.vertical_acceleration); + data << uint32(moveSpline.effect_start_time); + data << uint32(0); // Duration (override) } } } @@ -388,12 +406,13 @@ void WorldPackets::Movement::MonsterMove::InitializeSplineData(::Movement::MoveS if (splineFlags.parabolic) { - movementSpline.JumpGravity = moveSpline.vertical_acceleration; - movementSpline.SpecialTime = moveSpline.effect_start_time; + movementSpline.JumpExtraData = boost::in_place(); + movementSpline.JumpExtraData->JumpGravity = moveSpline.vertical_acceleration; + movementSpline.JumpExtraData->StartTime = moveSpline.effect_start_time; } if (splineFlags.fadeObject) - movementSpline.SpecialTime = moveSpline.effect_start_time; + movementSpline.FadeObjectTime = moveSpline.effect_start_time; if (moveSpline.spell_effect_extra) { @@ -402,6 +421,7 @@ void WorldPackets::Movement::MonsterMove::InitializeSplineData(::Movement::MoveS movementSpline.SpellEffectExtraData->SpellVisualID = moveSpline.spell_effect_extra->SpellVisualId; movementSpline.SpellEffectExtraData->ProgressCurveID = moveSpline.spell_effect_extra->ProgressCurveId; movementSpline.SpellEffectExtraData->ParabolicCurveID = moveSpline.spell_effect_extra->ParabolicCurveId; + movementSpline.SpellEffectExtraData->JumpGravity = moveSpline.vertical_acceleration; } ::Movement::Spline<int32> const& spline = moveSpline.spline; diff --git a/src/server/game/Server/Packets/MovementPackets.h b/src/server/game/Server/Packets/MovementPackets.h index aaa5f770535..e50a8cf6a71 100644 --- a/src/server/game/Server/Packets/MovementPackets.h +++ b/src/server/game/Server/Packets/MovementPackets.h @@ -75,6 +75,14 @@ namespace WorldPackets uint32 SpellVisualID = 0; uint32 ProgressCurveID = 0; uint32 ParabolicCurveID = 0; + float JumpGravity = 0.0f; + }; + + struct MonsterSplineJumpExtraData + { + float JumpGravity = 0.0f; + uint32 StartTime = 0; + uint32 Duration = 0; }; struct MovementSpline @@ -85,8 +93,7 @@ namespace WorldPackets uint32 TierTransStartTime = 0; int32 Elapsed = 0; uint32 MoveTime = 0; - float JumpGravity = 0.0f; - uint32 SpecialTime = 0; + uint32 FadeObjectTime = 0; std::vector<TaggedPosition<Position::XYZ>> Points; // Spline path uint8 Mode = 0; // Spline mode - actually always 0 in this packet - Catmullrom mode appears only in SMSG_UPDATE_OBJECT. In this packet it is determined by flags uint8 VehicleExitVoluntary = 0; @@ -95,6 +102,7 @@ namespace WorldPackets std::vector<TaggedPosition<Position::PackedXYZ>> PackedDeltas; Optional<MonsterSplineFilter> SplineFilter; Optional<MonsterSplineSpellEffectExtraData> SpellEffectExtraData; + Optional<MonsterSplineJumpExtraData> JumpExtraData; float FaceDirection = 0.0f; ObjectGuid FaceGUID; TaggedPosition<Position::XYZ> FaceSpot; diff --git a/src/server/game/Server/Packets/NPCPackets.cpp b/src/server/game/Server/Packets/NPCPackets.cpp index 2b7f9ab7d18..749b4b9a330 100644 --- a/src/server/game/Server/Packets/NPCPackets.cpp +++ b/src/server/game/Server/Packets/NPCPackets.cpp @@ -96,19 +96,19 @@ WorldPacket const* WorldPackets::NPC::VendorInventory::Write() WorldPacket const* WorldPackets::NPC::TrainerList::Write() { _worldPacket << TrainerGUID; - _worldPacket << TrainerType; - _worldPacket << TrainerID; + _worldPacket << uint32(TrainerType); + _worldPacket << uint32(TrainerID); - _worldPacket << int32(Spells.size()); + _worldPacket << uint32(Spells.size()); for (TrainerListSpell const& spell : Spells) { - _worldPacket << spell.SpellID; - _worldPacket << spell.MoneyCost; - _worldPacket << spell.ReqSkillLine; - _worldPacket << spell.ReqSkillRank; + _worldPacket << int32(spell.SpellID); + _worldPacket << uint32(spell.MoneyCost); + _worldPacket << uint32(spell.ReqSkillLine); + _worldPacket << uint32(spell.ReqSkillRank); _worldPacket.append(spell.ReqAbility.data(), spell.ReqAbility.size()); - _worldPacket << spell.Usable; - _worldPacket << spell.ReqLevel; + _worldPacket << uint8(spell.Usable); + _worldPacket << uint8(spell.ReqLevel); } _worldPacket.WriteBits(Greeting.length(), 11); @@ -144,11 +144,13 @@ WorldPacket const* WorldPackets::NPC::PlayerTabardVendorActivate::Write() WorldPacket const* WorldPackets::NPC::GossipPOI::Write() { - _worldPacket.WriteBits(Flags, 14); - _worldPacket.WriteBits(Name.length(), 6); + _worldPacket << int32(ID); _worldPacket << Pos; _worldPacket << int32(Icon); _worldPacket << int32(Importance); + _worldPacket.WriteBits(Flags, 14); + _worldPacket.WriteBits(Name.length(), 6); + _worldPacket.FlushBits(); _worldPacket.WriteString(Name); return &_worldPacket; diff --git a/src/server/game/Server/Packets/NPCPackets.h b/src/server/game/Server/Packets/NPCPackets.h index a094f25dc22..8148e3aff60 100644 --- a/src/server/game/Server/Packets/NPCPackets.h +++ b/src/server/game/Server/Packets/NPCPackets.h @@ -131,9 +131,9 @@ namespace WorldPackets struct TrainerListSpell { int32 SpellID = 0; - int32 MoneyCost = 0; - int32 ReqSkillLine = 0; - int32 ReqSkillRank = 0; + uint32 MoneyCost = 0; + uint32 ReqSkillLine = 0; + uint32 ReqSkillRank = 0; std::array<int32, 3> ReqAbility = { }; uint8 Usable = 0; uint8 ReqLevel = 0; @@ -180,6 +180,7 @@ namespace WorldPackets WorldPacket const* Write() override; + int32 ID = 0; uint32 Flags = 0; TaggedPosition<Position::XY> Pos; int32 Icon = 0; diff --git a/src/server/game/Server/Packets/PacketUtilities.h b/src/server/game/Server/Packets/PacketUtilities.h index f7913b9c51d..99b214aab36 100644 --- a/src/server/game/Server/Packets/PacketUtilities.h +++ b/src/server/game/Server/Packets/PacketUtilities.h @@ -42,6 +42,8 @@ namespace WorldPackets typedef typename storage_type::value_type value_type; typedef typename storage_type::size_type size_type; + typedef typename storage_type::pointer pointer; + typedef typename storage_type::const_pointer const_pointer; typedef typename storage_type::reference reference; typedef typename storage_type::const_reference const_reference; typedef typename storage_type::iterator iterator; @@ -55,6 +57,9 @@ namespace WorldPackets iterator end() { return _storage.end(); } const_iterator end() const { return _storage.end(); } + pointer data() { return _storage.data(); } + const_pointer data() const { return _storage.data(); } + size_type size() const { return _storage.size(); } bool empty() const { return _storage.empty(); } diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp index 939f0a65db1..9251addde38 100644 --- a/src/server/game/Server/Packets/PartyPackets.cpp +++ b/src/server/game/Server/Packets/PartyPackets.cpp @@ -33,7 +33,7 @@ WorldPacket const* WorldPackets::Party::PartyCommandResult::Write() _worldPacket.WriteBits(Command, 4); _worldPacket.WriteBits(Result, 6); - _worldPacket << ResultData; + _worldPacket << uint32(ResultData); _worldPacket << ResultGUID; _worldPacket.WriteString(Name); @@ -78,12 +78,12 @@ WorldPacket const* WorldPackets::Party::PartyInvite::Write() _worldPacket << InviterBNetAccountId; _worldPacket << uint16(Unk1); _worldPacket << uint32(ProposedRoles); - _worldPacket << int32(LfgSlots.size()); - _worldPacket << LfgCompletedMask; + _worldPacket << uint32(LfgSlots.size()); + _worldPacket << uint32(LfgCompletedMask); _worldPacket.WriteString(InviterName); - for (int32 LfgSlot : LfgSlots) + for (uint32 LfgSlot : LfgSlots) _worldPacket << LfgSlot; return &_worldPacket; @@ -212,7 +212,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::PartyMemberStats c data << int16(memberStats.PositionY); data << int16(memberStats.PositionZ); data << int32(memberStats.VehicleSeat); - data << int32(memberStats.Auras.size()); + data << uint32(memberStats.Auras.size()); data << memberStats.Phases; for (WorldPackets::Party::PartyMemberAuraStates const& aura : memberStats.Auras) @@ -318,15 +318,13 @@ WorldPacket const* WorldPackets::Party::SendRaidTargetUpdateSingle::Write() WorldPacket const* WorldPackets::Party::SendRaidTargetUpdateAll::Write() { - _worldPacket << PartyIndex; - - _worldPacket << int32(TargetIcons.size()); + _worldPacket << uint8(PartyIndex); + _worldPacket << uint32(TargetIcons.size()); - std::map<uint8, ObjectGuid>::const_iterator itr; - for (itr = TargetIcons.begin(); itr != TargetIcons.end(); itr++) + for (auto itr = TargetIcons.begin(); itr != TargetIcons.end(); ++itr) { _worldPacket << itr->second; - _worldPacket << itr->first; + _worldPacket << uint8(itr->first); } return &_worldPacket; @@ -420,7 +418,9 @@ WorldPacket const* WorldPackets::Party::GroupNewLeader::Write() ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::PartyPlayerInfo const& playerInfo) { data.WriteBits(playerInfo.Name.size(), 6); + data.WriteBits(playerInfo.VoiceStateID.size(), 6); data.WriteBit(playerInfo.FromSocialQueue); + data.WriteBit(playerInfo.VoiceChatSilenced); data << playerInfo.GUID; data << uint8(playerInfo.Status); data << uint8(playerInfo.Subgroup); @@ -428,6 +428,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Party::PartyPlayerInfo co data << uint8(playerInfo.RolesAssigned); data << uint8(playerInfo.Class); data.WriteString(playerInfo.Name); + data.WriteString(playerInfo.VoiceStateID); return data; } @@ -524,8 +525,8 @@ void WorldPackets::Party::ClearRaidMarker::Read() WorldPacket const* WorldPackets::Party::RaidMarkersChanged::Write() { - _worldPacket << PartyIndex; - _worldPacket << ActiveMarkers; + _worldPacket << uint8(PartyIndex); + _worldPacket << uint32(ActiveMarkers); _worldPacket.WriteBits(RaidMarkers.size(), 4); _worldPacket.FlushBits(); diff --git a/src/server/game/Server/Packets/PartyPackets.h b/src/server/game/Server/Packets/PartyPackets.h index f62e61d0990..d0b689ffb04 100644 --- a/src/server/game/Server/Packets/PartyPackets.h +++ b/src/server/game/Server/Packets/PartyPackets.h @@ -48,8 +48,8 @@ namespace WorldPackets void Read() override; - int8 PartyIndex = 0; - int32 ProposedRoles = 0; + uint8 PartyIndex = 0; + uint32 ProposedRoles = 0; std::string TargetName; std::string TargetRealm; ObjectGuid TargetGUID; @@ -85,9 +85,9 @@ namespace WorldPackets std::string InviterRealmNameNormalized; // Lfg - int32 ProposedRoles = 0; - int32 LfgCompletedMask = 0; - std::vector<int32> LfgSlots; + uint32 ProposedRoles = 0; + uint32 LfgCompletedMask = 0; + std::vector<uint32> LfgSlots; }; class PartyInviteResponse final : public ClientPacket @@ -97,9 +97,9 @@ namespace WorldPackets void Read() override; - int8 PartyIndex = 0; + uint8 PartyIndex = 0; bool Accept = false; - Optional<int32> RolesDesired; + Optional<uint32> RolesDesired; }; class PartyUninvite final : public ClientPacket @@ -109,7 +109,7 @@ namespace WorldPackets void Read() override; - int8 PartyIndex = 0; + uint8 PartyIndex = 0; ObjectGuid TargetGUID; std::string Reason; }; @@ -327,7 +327,7 @@ namespace WorldPackets WorldPacket const* Write() override; - int8 PartyIndex = 0; + uint8 PartyIndex = 0; std::map<uint8, ObjectGuid> TargetIcons; }; @@ -359,7 +359,7 @@ namespace WorldPackets void Read() override; ObjectGuid Target; - int8 PartyIndex = 0; + uint8 PartyIndex = 0; bool Apply = false; }; @@ -405,7 +405,7 @@ namespace WorldPackets void Read() override; - int8 PartyIndex = 0; + uint8 PartyIndex = 0; bool IsReady = false; }; @@ -486,13 +486,14 @@ namespace WorldPackets { ObjectGuid GUID; std::string Name; + std::string VoiceStateID; // same as bgs.protocol.club.v1.MemberVoiceState.id uint8 Class = 0; - uint8 Status = 0u; uint8 Subgroup = 0u; uint8 Flags = 0u; uint8 RolesAssigned = 0u; bool FromSocialQueue = false; + bool VoiceChatSilenced = false; }; struct PartyLFGInfo @@ -554,7 +555,7 @@ namespace WorldPackets void Read() override; - int8 PartyIndex = 0; + uint8 PartyIndex = 0; bool EveryoneIsAssistant = false; }; @@ -599,7 +600,7 @@ namespace WorldPackets WorldPacket const* Write() override; - int8 PartyIndex = 0; + uint8 PartyIndex = 0; uint32 ActiveMarkers = 0u; std::vector<RaidMarker*> RaidMarkers; diff --git a/src/server/game/Server/Packets/PetPackets.cpp b/src/server/game/Server/Packets/PetPackets.cpp index 06182856bb4..d62ce6840cb 100644 --- a/src/server/game/Server/Packets/PetPackets.cpp +++ b/src/server/game/Server/Packets/PetPackets.cpp @@ -65,9 +65,8 @@ WorldPacket const* WorldPackets::Pet::PetStableList::Write() _worldPacket << int32(pet.CreatureID); _worldPacket << int32(pet.DisplayID); _worldPacket << int32(pet.ExperienceLevel); - _worldPacket << int32(pet.PetFlags); - - _worldPacket << int8(pet.PetName.length()); + _worldPacket << uint8(pet.PetFlags); + _worldPacket.WriteBits(pet.PetName.length(), 8); _worldPacket.WriteString(pet.PetName); } @@ -92,21 +91,18 @@ WorldPacket const* WorldPackets::Pet::PetUnlearnedSpells::Write() WorldPacket const* WorldPackets::Pet::PetNameInvalid::Write() { + _worldPacket << uint8(Result); _worldPacket << RenameData.PetGUID; _worldPacket << int32(RenameData.PetNumber); _worldPacket << uint8(RenameData.NewName.length()); _worldPacket.WriteBit(RenameData.DeclinedNames.is_initialized()); - _worldPacket.FlushBits(); if (RenameData.DeclinedNames) { for (int32 i = 0; i < MAX_DECLINED_NAME_CASES; i++) - { _worldPacket.WriteBits(RenameData.DeclinedNames->name[i].length(), 7); - _worldPacket.FlushBits(); - } for (int32 i = 0; i < MAX_DECLINED_NAME_CASES; i++) _worldPacket << RenameData.DeclinedNames->name[i]; @@ -121,8 +117,7 @@ void WorldPackets::Pet::PetRename::Read() _worldPacket >> RenameData.PetGUID; _worldPacket >> RenameData.PetNumber; - int8 nameLen = 0; - _worldPacket >> nameLen; + uint8 nameLen = _worldPacket.ReadBits(8); if (_worldPacket.ReadBit()) { diff --git a/src/server/game/Server/Packets/PetPackets.h b/src/server/game/Server/Packets/PetPackets.h index 965dc0b60c4..3f57f0360c9 100644 --- a/src/server/game/Server/Packets/PetPackets.h +++ b/src/server/game/Server/Packets/PetPackets.h @@ -125,7 +125,7 @@ namespace WorldPackets uint32 CreatureID = 0; uint32 DisplayID = 0; uint32 ExperienceLevel = 0; - uint32 PetFlags = 0; + uint8 PetFlags = 0; std::string PetName; }; diff --git a/src/server/game/Server/Packets/PetitionPackets.cpp b/src/server/game/Server/Packets/PetitionPackets.cpp index 132494aed46..06823e15204 100644 --- a/src/server/game/Server/Packets/PetitionPackets.cpp +++ b/src/server/game/Server/Packets/PetitionPackets.cpp @@ -25,32 +25,31 @@ void WorldPackets::Petition::QueryPetition::Read() ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Petition::PetitionInfo const& petitionInfo) { - data << petitionInfo.PetitionID; + data << int32(petitionInfo.PetitionID); data << petitionInfo.Petitioner; - - data << petitionInfo.MinSignatures; - data << petitionInfo.MaxSignatures; - data << petitionInfo.DeadLine; - data << petitionInfo.IssueDate; - data << petitionInfo.AllowedGuildID; - data << petitionInfo.AllowedClasses; - data << petitionInfo.AllowedRaces; - data << petitionInfo.AllowedGender; - data << petitionInfo.AllowedMinLevel; - data << petitionInfo.AllowedMaxLevel; - data << petitionInfo.NumChoices; - data << petitionInfo.StaticType; - data << petitionInfo.Muid; + data << int32(petitionInfo.MinSignatures); + data << int32(petitionInfo.MaxSignatures); + data << int32(petitionInfo.DeadLine); + data << int32(petitionInfo.IssueDate); + data << int32(petitionInfo.AllowedGuildID); + data << int32(petitionInfo.AllowedClasses); + data << int32(petitionInfo.AllowedRaces); + data << int16(petitionInfo.AllowedGender); + data << int32(petitionInfo.AllowedMinLevel); + data << int32(petitionInfo.AllowedMaxLevel); + data << int32(petitionInfo.NumChoices); + data << int32(petitionInfo.StaticType); + data << uint32(petitionInfo.Muid); data.WriteBits(petitionInfo.Title.length(), 7); data.WriteBits(petitionInfo.BodyText.length(), 12); - for (uint8 i = 0; i < 10; i++) + for (std::size_t i = 0; i < petitionInfo.Choicetext.size(); ++i) data.WriteBits(petitionInfo.Choicetext[i].length(), 6); data.FlushBits(); - for (uint8 i = 0; i < 10; i++) + for (std::size_t i = 0; i < petitionInfo.Choicetext.size(); ++i) data.WriteString(petitionInfo.Choicetext[i]); data.WriteString(petitionInfo.Title); @@ -61,7 +60,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Petition::PetitionInfo co WorldPacket const* WorldPackets::Petition::QueryPetitionResponse::Write() { - _worldPacket << PetitionID; + _worldPacket << uint32(PetitionID); _worldPacket.WriteBit(Allow); _worldPacket.FlushBits(); @@ -102,13 +101,13 @@ WorldPacket const* WorldPackets::Petition::ServerPetitionShowSignatures::Write() _worldPacket << Item; _worldPacket << Owner; _worldPacket << OwnerAccountID; - _worldPacket << PetitionID; + _worldPacket << int32(PetitionID); _worldPacket << uint32(Signatures.size()); - for (PetitionSignature signature : Signatures) + for (PetitionSignature const& signature : Signatures) { _worldPacket << signature.Signer; - _worldPacket << signature.Choice; + _worldPacket << int32(signature.Choice); } return &_worldPacket; diff --git a/src/server/game/Server/Packets/PetitionPackets.h b/src/server/game/Server/Packets/PetitionPackets.h index a5b4e8dca6f..c378c053d84 100644 --- a/src/server/game/Server/Packets/PetitionPackets.h +++ b/src/server/game/Server/Packets/PetitionPackets.h @@ -56,7 +56,7 @@ namespace WorldPackets int32 NumChoices = 0; int32 StaticType = 0; uint32 Muid = 0; - std::string Choicetext[10]; + std::array<std::string, 10> Choicetext; }; class QueryPetitionResponse final : public ServerPacket diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp index c640394be93..f941c895722 100644 --- a/src/server/game/Server/Packets/QueryPackets.cpp +++ b/src/server/game/Server/Packets/QueryPackets.cpp @@ -29,7 +29,7 @@ void WorldPackets::Query::QueryCreature::Read() WorldPacket const* WorldPackets::Query::QueryCreatureResponse::Write() { - _worldPacket << CreatureID; + _worldPacket << uint32(CreatureID); _worldPacket.WriteBit(Allow); _worldPacket.FlushBits(); @@ -61,7 +61,16 @@ WorldPacket const* WorldPackets::Query::QueryCreatureResponse::Write() _worldPacket << int32(Stats.CreatureFamily); _worldPacket << int32(Stats.Classification); _worldPacket.append(Stats.ProxyCreatureID.data(), Stats.ProxyCreatureID.size()); - _worldPacket.append(Stats.CreatureDisplayID.data(), Stats.CreatureDisplayID.size()); + _worldPacket << uint32(Stats.Display.CreatureDisplay.size()); + _worldPacket << float(Stats.Display.TotalProbability); + + for (CreatureXDisplay const& display : Stats.Display.CreatureDisplay) + { + _worldPacket << uint32(display.CreatureDisplayID); + _worldPacket << float(display.Scale); + _worldPacket << float(display.Probability); + } + _worldPacket << float(Stats.HpMulti); _worldPacket << float(Stats.EnergyMulti); _worldPacket << uint32(Stats.QuestItems.size()); @@ -69,6 +78,7 @@ WorldPacket const* WorldPackets::Query::QueryCreatureResponse::Write() _worldPacket << int32(Stats.HealthScalingExpansion); _worldPacket << int32(Stats.RequiredExpansion); _worldPacket << int32(Stats.VignetteID); + _worldPacket << int32(Stats.Class); if (!Stats.Title.empty()) _worldPacket << Stats.Title; @@ -79,8 +89,8 @@ WorldPacket const* WorldPackets::Query::QueryCreatureResponse::Write() if (!Stats.CursorName.empty()) _worldPacket << Stats.CursorName; - for (int32 questItem : Stats.QuestItems) - _worldPacket << questItem; + if (!Stats.QuestItems.empty()) + _worldPacket.append(Stats.QuestItems.data(), Stats.QuestItems.size()); } return &_worldPacket; @@ -162,6 +172,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Query::PlayerGuidLookupDa data << lookupData.AccountID; data << lookupData.BnetAccountID; data << lookupData.GuidActual; + data << uint64(lookupData.GuildClubMemberID); data << uint32(lookupData.VirtualRealmAddress); data << uint8(lookupData.Race); data << uint8(lookupData.Sex); @@ -174,7 +185,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Query::PlayerGuidLookupDa WorldPacket const* WorldPackets::Query::QueryPlayerNameResponse::Write() { - _worldPacket << Result; + _worldPacket << uint8(Result); _worldPacket << Player; if (Result == RESPONSE_SUCCESS) @@ -206,7 +217,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Query::QueryPageTextRespo WorldPacket const* WorldPackets::Query::QueryPageTextResponse::Write() { - _worldPacket << PageTextID; + _worldPacket << uint32(PageTextID); _worldPacket.WriteBit(Allow); _worldPacket.FlushBits(); @@ -229,7 +240,7 @@ void WorldPackets::Query::QueryNPCText::Read() WorldPacket const* WorldPackets::Query::QueryNPCTextResponse::Write() { - _worldPacket << TextID; + _worldPacket << uint32(TextID); _worldPacket.WriteBit(Allow); _worldPacket.FlushBits(); @@ -238,10 +249,8 @@ WorldPacket const* WorldPackets::Query::QueryNPCTextResponse::Write() if (Allow) { - for (uint32 i = 0; i < MAX_NPC_TEXT_OPTIONS; ++i) - _worldPacket << Probabilities[i]; - for (uint32 i = 0; i < MAX_NPC_TEXT_OPTIONS; ++i) - _worldPacket << BroadcastTextID[i]; + _worldPacket.append(Probabilities.data(), Probabilities.size()); + _worldPacket.append(BroadcastTextID.data(), BroadcastTextID.size()); } return &_worldPacket; @@ -276,8 +285,8 @@ WorldPacket const* WorldPackets::Query::QueryGameObjectResponse::Write() statsData << float(Stats.Size); statsData << uint8(Stats.QuestItems.size()); - for (int32 questItem : Stats.QuestItems) - statsData << int32(questItem); + if (!Stats.QuestItems.empty()) + statsData.append(Stats.QuestItems.data(), Stats.QuestItems.size()); statsData << int32(Stats.RequiredLevel); } @@ -334,7 +343,7 @@ void WorldPackets::Query::QuestPOIQuery::Read() { _worldPacket >> MissingQuestCount; - for (uint8 i = 0; i < 50; ++i) + for (std::size_t i = 0; i < MissingQuestPOIs.size(); ++i) _worldPacket >> MissingQuestPOIs[i]; } @@ -356,13 +365,12 @@ WorldPacket const* WorldPackets::Query::QuestPOIQueryResponse::Write() _worldPacket << int32(questPOIBlobData.QuestObjectiveID); _worldPacket << int32(questPOIBlobData.QuestObjectID); _worldPacket << int32(questPOIBlobData.MapID); - _worldPacket << int32(questPOIBlobData.WorldMapAreaID); - _worldPacket << int32(questPOIBlobData.Floor); + _worldPacket << int32(questPOIBlobData.UiMapID); _worldPacket << int32(questPOIBlobData.Priority); _worldPacket << int32(questPOIBlobData.Flags); _worldPacket << int32(questPOIBlobData.WorldEffectID); _worldPacket << int32(questPOIBlobData.PlayerConditionID); - _worldPacket << int32(questPOIBlobData.UnkWoD1); + _worldPacket << int32(questPOIBlobData.SpawnTrackingID); _worldPacket << int32(questPOIBlobData.QuestPOIBlobPointStats.size()); for (QuestPOIBlobPoint const& questPOIBlobPoint : questPOIBlobData.QuestPOIBlobPointStats) @@ -381,13 +389,9 @@ WorldPacket const* WorldPackets::Query::QuestPOIQueryResponse::Write() void WorldPackets::Query::QueryQuestCompletionNPCs::Read() { - uint32 questCount = 0; - - _worldPacket >> questCount; - QuestCompletionNPCs.resize(questCount); - - for (int32& QuestID : QuestCompletionNPCs) - _worldPacket >> QuestID; + QuestCompletionNPCs.resize(_worldPacket.read<uint32>()); + if (!QuestCompletionNPCs.empty()) + _worldPacket.read(QuestCompletionNPCs.data(), QuestCompletionNPCs.size()); } WorldPacket const* WorldPackets::Query::QuestCompletionNPCResponse::Write() @@ -396,10 +400,9 @@ WorldPacket const* WorldPackets::Query::QuestCompletionNPCResponse::Write() for (auto& quest : QuestCompletionNPCs) { _worldPacket << int32(quest.QuestID); - _worldPacket << uint32(quest.NPCs.size()); - for (int32 const& npc : quest.NPCs) - _worldPacket << int32(npc); + if (!quest.NPCs.empty()) + _worldPacket.append(quest.NPCs.data(), quest.NPCs.size()); } return &_worldPacket; @@ -453,6 +456,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Query::ItemTextCache cons WorldPacket const* WorldPackets::Query::QueryItemTextResponse::Write() { _worldPacket.WriteBit(Valid); + _worldPacket.FlushBits(); _worldPacket << Item; _worldPacket << Id; diff --git a/src/server/game/Server/Packets/QueryPackets.h b/src/server/game/Server/Packets/QueryPackets.h index 7639f165dae..dfdf3d437a0 100644 --- a/src/server/game/Server/Packets/QueryPackets.h +++ b/src/server/game/Server/Packets/QueryPackets.h @@ -23,6 +23,7 @@ #include "NPCHandler.h" #include "ObjectGuid.h" #include "Position.h" +#include "QuestDef.h" #include "SharedDefines.h" #include "UnitDefines.h" #include <array> @@ -43,13 +44,25 @@ namespace WorldPackets uint32 CreatureID = 0; }; + struct CreatureXDisplay + { + uint32 CreatureDisplayID = 0; + float Scale = 1.0f; + float Probability = 1.0f; + }; + + struct CreatureDisplayStats + { + float TotalProbability = 0.0f; + std::vector<CreatureXDisplay> CreatureDisplay; + }; + struct CreatureStats { CreatureStats() { Flags.fill(0); ProxyCreatureID.fill(0); - CreatureDisplayID.fill(0); } std::string Title; @@ -58,6 +71,7 @@ namespace WorldPackets int32 CreatureType = 0; int32 CreatureFamily = 0; int32 Classification = 0; + CreatureDisplayStats Display; float HpMulti = 0.0f; float EnergyMulti = 0.0f; bool Leader = false; @@ -66,9 +80,9 @@ namespace WorldPackets int32 HealthScalingExpansion = 0; uint32 RequiredExpansion = 0; uint32 VignetteID = 0; + int32 Class = 0; std::array<uint32, 2> Flags; std::array<uint32, 2> ProxyCreatureID; - std::array<uint32, 4> CreatureDisplayID; std::array<std::string, 4> Name; std::array<std::string, 4> NameAlt; }; @@ -110,6 +124,7 @@ namespace WorldPackets ObjectGuid BnetAccountID; ObjectGuid GuidActual; std::string Name; + uint64 GuildClubMemberID = 0; // same as bgs.protocol.club.v1.MemberId.unique_id uint32 VirtualRealmAddress = 0; uint8 Race = RACE_NONE; uint8 Sex = GENDER_NONE; @@ -182,8 +197,8 @@ namespace WorldPackets uint32 TextID = 0; bool Allow = false; - float Probabilities[MAX_NPC_TEXT_OPTIONS]; - uint32 BroadcastTextID[MAX_NPC_TEXT_OPTIONS]; + std::array<float, MAX_NPC_TEXT_OPTIONS> Probabilities; + std::array<uint32, MAX_NPC_TEXT_OPTIONS> BroadcastTextID; }; class QueryGameObject final : public ClientPacket @@ -297,7 +312,7 @@ namespace WorldPackets void Read() override; int32 MissingQuestCount = 0; - int32 MissingQuestPOIs[50]; + std::array<int32, 100> MissingQuestPOIs; }; struct QuestPOIBlobPoint @@ -313,13 +328,12 @@ namespace WorldPackets int32 QuestObjectiveID = 0; int32 QuestObjectID = 0; int32 MapID = 0; - int32 WorldMapAreaID = 0; - int32 Floor = 0; + int32 UiMapID = 0; int32 Priority = 0; int32 Flags = 0; int32 WorldEffectID = 0; int32 PlayerConditionID = 0; - int32 UnkWoD1 = 0; + int32 SpawnTrackingID = 0; std::vector<QuestPOIBlobPoint> QuestPOIBlobPointStats; bool AlwaysAllowMergingBlobs = false; }; @@ -347,7 +361,7 @@ namespace WorldPackets void Read() override; - std::vector<int32> QuestCompletionNPCs; + Array<int32, 100> QuestCompletionNPCs; }; struct QuestCompletionNPC diff --git a/src/server/game/Server/Packets/QuestPackets.cpp b/src/server/game/Server/Packets/QuestPackets.cpp index 20a6539ae1d..0468e170d7c 100644 --- a/src/server/game/Server/Packets/QuestPackets.cpp +++ b/src/server/game/Server/Packets/QuestPackets.cpp @@ -65,6 +65,7 @@ WorldPacket const* WorldPackets::Quest::QueryQuestInfoResponse::Write() _worldPacket << int32(Info.QuestID); _worldPacket << int32(Info.QuestType); _worldPacket << int32(Info.QuestLevel); + _worldPacket << int32(Info.QuestScalingFactionGroup); _worldPacket << int32(Info.QuestMaxScalingLevel); _worldPacket << int32(Info.QuestPackageID); _worldPacket << int32(Info.QuestMinLevel); @@ -88,6 +89,7 @@ WorldPacket const* WorldPackets::Quest::QueryQuestInfoResponse::Write() _worldPacket << int32(Info.StartItem); _worldPacket << uint32(Info.Flags); _worldPacket << uint32(Info.FlagsEx); + _worldPacket << uint32(Info.FlagsEx2); for (uint32 i = 0; i < QUEST_REWARD_ITEM_COUNT; ++i) { @@ -115,6 +117,7 @@ WorldPacket const* WorldPackets::Quest::QueryQuestInfoResponse::Write() _worldPacket << int32(Info.RewardNumSkillUps); _worldPacket << int32(Info.PortraitGiver); + _worldPacket << int32(Info.PortraitGiverMount); _worldPacket << int32(Info.PortraitTurnIn); for (uint32 i = 0; i < QUEST_REWARD_REPUTATIONS_COUNT; ++i) @@ -141,7 +144,7 @@ WorldPacket const* WorldPackets::Quest::QueryQuestInfoResponse::Write() _worldPacket << uint32(Info.Objectives.size()); _worldPacket << uint64(Info.AllowableRaces); - _worldPacket << int32(Info.QuestRewardID); + _worldPacket << int32(Info.TreasurePickerID); _worldPacket << int32(Info.Expansion); _worldPacket.WriteBits(Info.LogTitle.size(), 9); @@ -222,13 +225,6 @@ WorldPacket const* WorldPackets::Quest::QuestUpdateAddPvPCredit::Write() ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Quest::QuestRewards const& questRewards) { data << int32(questRewards.ChoiceItemCount); - - for (uint32 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i) - { - data << int32(questRewards.ChoiceItems[i].ItemID); - data << int32(questRewards.ChoiceItems[i].Quantity); - } - data << int32(questRewards.ItemCount); for (uint32 i = 0; i < QUEST_REWARD_ITEM_COUNT; ++i) @@ -266,7 +262,13 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Quest::QuestRewards const data << int32(questRewards.SkillLineID); data << int32(questRewards.NumSkillUps); - data << int32(questRewards.RewardID); + data << int32(questRewards.TreasurePickerID); + + for (uint32 i = 0; i < QUEST_REWARD_CHOICES_COUNT; ++i) + { + data << questRewards.ChoiceItems[i].Item; + data << int32(questRewards.ChoiceItems[i].Quantity); + } data.WriteBit(questRewards.IsBoostSpell); data.FlushBits(); @@ -302,6 +304,7 @@ WorldPacket const* WorldPackets::Quest::QuestGiverOfferRewardMessage::Write() _worldPacket << QuestData; // WorldPackets::Quest::QuestGiverOfferReward _worldPacket << int32(QuestPackageID); _worldPacket << int32(PortraitGiver); + _worldPacket << int32(PortraitGiverMount); _worldPacket << int32(PortraitTurnIn); _worldPacket.WriteBits(QuestTitle.size(), 9); @@ -360,6 +363,7 @@ WorldPacket const* WorldPackets::Quest::QuestGiverQuestDetails::Write() _worldPacket << int32(QuestID); _worldPacket << int32(QuestPackageID); _worldPacket << int32(PortraitGiver); + _worldPacket << int32(PortraitGiverMount); _worldPacket << int32(PortraitTurnIn); _worldPacket << uint32(QuestFlags[0]); // Flags _worldPacket << uint32(QuestFlags[1]); // FlagsEx @@ -643,6 +647,9 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Quest::PlayerChoiceRespon { data << int32(playerChoiceResponse.ResponseID); data << int32(playerChoiceResponse.ChoiceArtFileID); + data << int32(playerChoiceResponse.Flags); + data << uint32(playerChoiceResponse.WidgetSetID); + data << uint8(playerChoiceResponse.GroupID); data.WriteBits(playerChoiceResponse.Answer.length(), 9); data.WriteBits(playerChoiceResponse.Header.length(), 9); @@ -670,6 +677,7 @@ WorldPacket const* WorldPackets::Quest::DisplayPlayerChoice::Write() _worldPacket.WriteBits(Question.length(), 8); _worldPacket.WriteBit(CloseChoiceFrame); _worldPacket.WriteBit(HideWarboardHeader); + _worldPacket.WriteBit(KeepOpenAfterChoice); _worldPacket.FlushBits(); for (PlayerChoiceResponse const& response : Responses) diff --git a/src/server/game/Server/Packets/QuestPackets.h b/src/server/game/Server/Packets/QuestPackets.h index 1dd40e1ccc2..1315a57949c 100644 --- a/src/server/game/Server/Packets/QuestPackets.h +++ b/src/server/game/Server/Packets/QuestPackets.h @@ -109,6 +109,7 @@ namespace WorldPackets int32 QuestID = 0; int32 QuestType = 0; // Accepted values: 0, 1 or 2. 0 == IsAutoComplete() (skip objectives/details) int32 QuestLevel = 0; // may be -1, static data, in other cases must be used dynamic level: Player::GetQuestLevel (0 is not known, but assuming this is no longer valid for quest intended for client) + int32 QuestScalingFactionGroup = 0; int32 QuestMaxScalingLevel = 255; int32 QuestPackageID = 0; int32 QuestMinLevel = 0; @@ -132,6 +133,7 @@ namespace WorldPackets int32 StartItem = 0; uint32 Flags = 0; uint32 FlagsEx = 0; + uint32 FlagsEx2 = 0; int32 POIContinent = 0; float POIx = 0.0f; float POIy = 0.0f; @@ -146,6 +148,7 @@ namespace WorldPackets int32 RewardSkillLineID = 0; // reward skill id int32 RewardNumSkillUps = 0; // reward skill points int32 PortraitGiver = 0; // quest giver entry ? + int32 PortraitGiverMount = 0; int32 PortraitTurnIn = 0; // quest turn in entry ? std::string PortraitGiverText; std::string PortraitGiverName; @@ -157,7 +160,7 @@ namespace WorldPackets int32 CompleteSoundKitID = 0; int32 AreaGroupID = 0; int32 TimeAllowed = 0; - int32 QuestRewardID = 0; + int32 TreasurePickerID = 0; int32 Expansion = 0; std::vector<QuestObjective> Objectives; int32 RewardItems[QUEST_REWARD_ITEM_COUNT] = { }; @@ -225,7 +228,7 @@ namespace WorldPackets struct QuestChoiceItem { - int32 ItemID = 0; + Item::ItemInstance Item; int32 Quantity = 0; }; @@ -244,7 +247,7 @@ namespace WorldPackets int32 SpellCompletionID = 0; int32 SkillLineID = 0; int32 NumSkillUps = 0; - int32 RewardID = 0; + int32 TreasurePickerID = 0; QuestChoiceItem ChoiceItems[QUEST_REWARD_CHOICES_COUNT]; int32 ItemID[QUEST_REWARD_ITEM_COUNT] = { }; int32 ItemQty[QUEST_REWARD_ITEM_COUNT] = { }; @@ -285,6 +288,7 @@ namespace WorldPackets int32 PortraitTurnIn = 0; int32 PortraitGiver = 0; + int32 PortraitGiverMount = 0; std::string QuestTitle; std::string RewardText; std::string PortraitGiverText; @@ -365,6 +369,7 @@ namespace WorldPackets std::vector<int32> LearnSpells; int32 PortraitTurnIn = 0; int32 PortraitGiver = 0; + int32 PortraitGiverMount = 0; int32 QuestStartItemID = 0; std::string PortraitGiverText; std::string PortraitGiverName; @@ -663,6 +668,9 @@ namespace WorldPackets { int32 ResponseID = 0; int32 ChoiceArtFileID = 0; + int32 Flags = 0; + uint32 WidgetSetID = 0; + uint8 GroupID = 0; std::string Answer; std::string Header; std::string Description; @@ -684,6 +692,7 @@ namespace WorldPackets std::vector<PlayerChoiceResponse> Responses; bool CloseChoiceFrame = false; bool HideWarboardHeader = false; + bool KeepOpenAfterChoice = false; }; class ChoiceResponse final : public ClientPacket diff --git a/src/server/game/Server/Packets/ReputationPackets.cpp b/src/server/game/Server/Packets/ReputationPackets.cpp index 314dac85c5e..5e4eb54a918 100644 --- a/src/server/game/Server/Packets/ReputationPackets.cpp +++ b/src/server/game/Server/Packets/ReputationPackets.cpp @@ -46,8 +46,6 @@ WorldPacket const* WorldPackets::Reputation::SetForcedReactions::Write() for (ForcedReaction const& reaction : Reactions) _worldPacket << reaction; - _worldPacket.FlushBits(); - return &_worldPacket; } diff --git a/src/server/game/Server/Packets/ReputationPackets.h b/src/server/game/Server/Packets/ReputationPackets.h index 0156d504491..2046e169ab5 100644 --- a/src/server/game/Server/Packets/ReputationPackets.h +++ b/src/server/game/Server/Packets/ReputationPackets.h @@ -30,7 +30,7 @@ namespace WorldPackets class InitializeFactions final : public ServerPacket { public: - InitializeFactions() : ServerPacket(SMSG_INITIALIZE_FACTIONS, 1312) + InitializeFactions() : ServerPacket(SMSG_INITIALIZE_FACTIONS, FactionCount * (4 + 1) + FactionCount / 8) { FactionStandings.fill(0); FactionHasBonus.fill(false); diff --git a/src/server/game/Server/Packets/ScenarioPackets.cpp b/src/server/game/Server/Packets/ScenarioPackets.cpp index 38a667980a1..73f5120ee8d 100644 --- a/src/server/game/Server/Packets/ScenarioPackets.cpp +++ b/src/server/game/Server/Packets/ScenarioPackets.cpp @@ -109,8 +109,7 @@ WorldPacket const* WorldPackets::Scenario::ScenarioPOIs::Write() { _worldPacket << int32(scenarioPOI.BlobIndex); _worldPacket << int32(scenarioPOI.MapID); - _worldPacket << int32(scenarioPOI.WorldMapAreaID); - _worldPacket << int32(scenarioPOI.Floor); + _worldPacket << int32(scenarioPOI.UiMapID); _worldPacket << int32(scenarioPOI.Priority); _worldPacket << int32(scenarioPOI.Flags); _worldPacket << int32(scenarioPOI.WorldEffectID); diff --git a/src/server/game/Server/Packets/ScenarioPackets.h b/src/server/game/Server/Packets/ScenarioPackets.h index c9e1004d51a..71bcbd12d65 100644 --- a/src/server/game/Server/Packets/ScenarioPackets.h +++ b/src/server/game/Server/Packets/ScenarioPackets.h @@ -22,7 +22,7 @@ #include "PacketUtilities.h" #include "AchievementPackets.h" -#define MAX_ALLOWED_SCENARIO_POI_QUERY_SIZE 40 +#define MAX_ALLOWED_SCENARIO_POI_QUERY_SIZE 42 struct ScenarioPOI; diff --git a/src/server/game/Server/Packets/SpellPackets.cpp b/src/server/game/Server/Packets/SpellPackets.cpp index ec6d57f2748..7b3117156fc 100644 --- a/src/server/game/Server/Packets/SpellPackets.cpp +++ b/src/server/game/Server/Packets/SpellPackets.cpp @@ -33,6 +33,7 @@ void WorldPackets::Spells::PetCancelAura::Read() void WorldPackets::Spells::CancelChannelling::Read() { _worldPacket >> ChannelSpell; + _worldPacket >> Reason; } WorldPacket const* WorldPackets::Spells::CategoryCooldown::Write() @@ -99,16 +100,17 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::AuraDataInfo cons data << uint32(auraData.ActiveFlags); data << uint16(auraData.CastLevel); data << uint8(auraData.Applications); + data << int32(auraData.ContentTuningID); data.WriteBit(auraData.CastUnit.is_initialized()); data.WriteBit(auraData.Duration.is_initialized()); data.WriteBit(auraData.Remaining.is_initialized()); data.WriteBit(auraData.TimeMod.is_initialized()); data.WriteBits(auraData.Points.size(), 6); data.WriteBits(auraData.EstimatedPoints.size(), 6); - data.WriteBit(auraData.SandboxScaling.is_initialized()); + data.WriteBit(auraData.ContentTuning.is_initialized()); - if (auraData.SandboxScaling) - data << *auraData.SandboxScaling; + if (auraData.ContentTuning) + data << *auraData.ContentTuning; if (auraData.CastUnit) data << *auraData.CastUnit; @@ -211,7 +213,7 @@ ByteBuffer& operator>>(ByteBuffer& buffer, WorldPackets::Spells::SpellCastReques buffer >> request.SpellID; buffer >> request.SpellXSpellVisualID; buffer >> request.MissileTrajectory; - buffer >> request.Charmer; + buffer >> request.CraftingNPC; request.SendCastFlags = buffer.ReadBits(5); bool hasMoveUpdate = buffer.ReadBit(); request.Weight.resize(buffer.ReadBits(2)); @@ -366,13 +368,13 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Spells::SpellCastData con data << int32(spellCastData.SpellID); data << uint32(spellCastData.SpellXSpellVisualID); data << uint32(spellCastData.CastFlags); + data << uint32(spellCastData.CastFlagsEx); data << uint32(spellCastData.CastTime); data << spellCastData.MissileTrajectory; data << int32(spellCastData.Ammo.DisplayID); data << uint8(spellCastData.DestLocSpellCastIndex); data << spellCastData.Immunities; data << spellCastData.Predict; - data.WriteBits(spellCastData.CastFlagsEx, 23); data.WriteBits(spellCastData.HitTargets.size(), 16); data.WriteBits(spellCastData.MissTargets.size(), 16); data.WriteBits(spellCastData.MissStatus.size(), 16); @@ -716,6 +718,7 @@ WorldPacket const* WorldPackets::Spells::PlayOrphanSpellVisual::Write() _worldPacket << int32(SpellVisualID); _worldPacket << float(TravelSpeed); _worldPacket << float(UnkZero); + _worldPacket << float(Unk801); _worldPacket.WriteBit(SpeedAsTime); _worldPacket.FlushBits(); @@ -726,12 +729,14 @@ WorldPacket const* WorldPackets::Spells::PlaySpellVisual::Write() { _worldPacket << Source; _worldPacket << Target; + _worldPacket << Unk801_1; _worldPacket << TargetPosition; - _worldPacket << SpellVisualID; - _worldPacket << TravelSpeed; - _worldPacket << MissReason; - _worldPacket << ReflectStatus; - _worldPacket << Orientation; + _worldPacket << uint32(SpellVisualID); + _worldPacket << float(TravelSpeed); + _worldPacket << uint16(MissReason); + _worldPacket << uint16(ReflectStatus); + _worldPacket << float(Orientation); + _worldPacket << float(Unk801_2); _worldPacket.WriteBit(SpeedAsTime); _worldPacket.FlushBits(); diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h index b1230459627..1df8e8772c0 100644 --- a/src/server/game/Server/Packets/SpellPackets.h +++ b/src/server/game/Server/Packets/SpellPackets.h @@ -57,6 +57,8 @@ namespace WorldPackets void Read() override; int32 ChannelSpell = 0; + int32 Reason = 0; // 40 = /run SpellStopCasting(), 16 = movement/AURA_INTERRUPT_FLAG_MOVE, 41 = turning/AURA_INTERRUPT_FLAG_TURNING + // does not match SpellCastResult enum }; class CancelGrowthAura final : public ClientPacket @@ -177,7 +179,8 @@ namespace WorldPackets uint32 ActiveFlags = 0; uint16 CastLevel = 1; uint8 Applications = 1; - Optional<SandboxScalingData> SandboxScaling; + int32 ContentTuningID = 0; + Optional<ContentTuningParams> ContentTuning; Optional<ObjectGuid> CastUnit; Optional<int32> Duration; Optional<int32> Remaining; @@ -245,7 +248,7 @@ namespace WorldPackets MissileTrajectoryRequest MissileTrajectory; Optional<MovementInfo> MoveUpdate; std::vector<SpellWeight> Weight; - ObjectGuid Charmer; + ObjectGuid CraftingNPC; int32 Misc[2] = { }; }; @@ -613,7 +616,7 @@ namespace WorldPackets class SetSpellCharges final : public ServerPacket { public: - SetSpellCharges() : ServerPacket(SMSG_SET_SPELL_CHARGES, 1 + 4 + 4) { } + SetSpellCharges() : ServerPacket(SMSG_SET_SPELL_CHARGES, 4 + 4 + 1 + 4 + 1) { } WorldPacket const* Write() override; @@ -697,6 +700,7 @@ namespace WorldPackets bool SpeedAsTime = false; float TravelSpeed = 0.0f; float UnkZero = 0.0f; // Always zero + float Unk801 = 0.0f; TaggedPosition<Position::XYZ> SourceRotation; // Vector of rotations, Orientation is z TaggedPosition<Position::XYZ> TargetLocation; // Exclusive with Target }; @@ -710,6 +714,7 @@ namespace WorldPackets ObjectGuid Source; ObjectGuid Target; // Exclusive with TargetPosition + ObjectGuid Unk801_1; uint16 MissReason = 0; uint32 SpellVisualID = 0; bool SpeedAsTime = false; @@ -717,6 +722,7 @@ namespace WorldPackets float TravelSpeed = 0.0f; TaggedPosition<Position::XYZ> TargetPosition; // Exclusive with Target float Orientation = 0.0f; + float Unk801_2 = 0.0f; }; class PlaySpellVisualKit final : public ServerPacket diff --git a/src/server/game/Server/Packets/SystemPackets.cpp b/src/server/game/Server/Packets/SystemPackets.cpp index da674178456..853e35fce5c 100644 --- a/src/server/game/Server/Packets/SystemPackets.cpp +++ b/src/server/game/Server/Packets/SystemPackets.cpp @@ -37,6 +37,8 @@ WorldPacket const* WorldPackets::System::FeatureSystemStatus::Write() _worldPacket << uint32(BpayStoreProductDeliveryDelay); + _worldPacket << uint32(ClubsPresenceUpdateTimer); + _worldPacket.WriteBit(VoiceEnabled); _worldPacket.WriteBit(EuropaTicketSystemStatus.is_initialized()); _worldPacket.WriteBit(ScrollOfResurrectionEnabled); @@ -49,16 +51,22 @@ WorldPacket const* WorldPackets::System::FeatureSystemStatus::Write() _worldPacket.WriteBit(RecruitAFriendSendingEnabled); _worldPacket.WriteBit(CharUndeleteEnabled); _worldPacket.WriteBit(RestrictedAccount); + _worldPacket.WriteBit(CommerceSystemEnabled); _worldPacket.WriteBit(TutorialsEnabled); _worldPacket.WriteBit(NPETutorialsEnabled); _worldPacket.WriteBit(TwitterEnabled); - _worldPacket.WriteBit(CommerceSystemEnabled); _worldPacket.WriteBit(Unk67); _worldPacket.WriteBit(WillKickFromWorld); _worldPacket.WriteBit(KioskModeEnabled); _worldPacket.WriteBit(CompetitiveModeEnabled); _worldPacket.WriteBit(RaceClassExpansionLevels.is_initialized()); _worldPacket.WriteBit(TokenBalanceEnabled); + _worldPacket.WriteBit(WarModeFeatureEnabled); + _worldPacket.WriteBit(ClubsEnabled); + _worldPacket.WriteBit(ClubsBattleNetClubTypeAllowed); + _worldPacket.WriteBit(ClubsCharacterClubTypeAllowed); + _worldPacket.WriteBit(VoiceChatDisabledByParentalControl); + _worldPacket.WriteBit(VoiceChatMutedByParentalControl); _worldPacket.FlushBits(); @@ -102,6 +110,12 @@ WorldPacket const* WorldPackets::System::FeatureSystemStatus::Write() _worldPacket.append(RaceClassExpansionLevels->data(), RaceClassExpansionLevels->size()); } + { + _worldPacket.WriteBit(VoiceChatManagerSettings.Enabled); + _worldPacket << VoiceChatManagerSettings.BnetAccountGuid; + _worldPacket << VoiceChatManagerSettings.GuildGuid; + } + if (EuropaTicketSystemStatus) { _worldPacket.WriteBit(EuropaTicketSystemStatus->TicketsEnabled); @@ -141,7 +155,12 @@ WorldPacket const* WorldPackets::System::FeatureSystemStatusGlueScreen::Write() _worldPacket << int32(TokenPollTimeSeconds); _worldPacket << int32(TokenRedeemIndex); _worldPacket << int64(TokenBalanceAmount); + _worldPacket << int32(MaxCharactersPerRealm); _worldPacket << uint32(BpayStoreProductDeliveryDelay); + _worldPacket << int32(ActiveCharacterUpgradeBoostType); + _worldPacket << int32(ActiveClassTrialBoostType); + _worldPacket << int32(MinimumExpansionLevel); + _worldPacket << int32(MaximumExpansionLevel); return &_worldPacket; } diff --git a/src/server/game/Server/Packets/SystemPackets.h b/src/server/game/Server/Packets/SystemPackets.h index 74d40bf4e05..4d0812e7e67 100644 --- a/src/server/game/Server/Packets/SystemPackets.h +++ b/src/server/game/Server/Packets/SystemPackets.h @@ -80,6 +80,13 @@ namespace WorldPackets float ThrottleDfBestPriority = 0.0f; }; + struct VoiceChatProxySettings + { + bool Enabled = false; + ObjectGuid BnetAccountGuid; + ObjectGuid GuildGuid; + }; + FeatureSystemStatus() : ServerPacket(SMSG_FEATURE_SYSTEM_STATUS, 48) { } WorldPacket const* Write() override; @@ -103,6 +110,7 @@ namespace WorldPackets uint32 TokenRedeemIndex = 0; int64 TokenBalanceAmount = 0; uint32 BpayStoreProductDeliveryDelay = 0; + uint32 ClubsPresenceUpdateTimer = 0; bool ItemRestorationButtonEnabled = false; bool CharUndeleteEnabled = false; ///< Implemented bool BpayStoreDisabledByParentalControls = false; @@ -110,16 +118,22 @@ namespace WorldPackets bool CommerceSystemEnabled = false; bool Unk67 = false; bool WillKickFromWorld = false; - bool RestrictedAccount = false; bool TutorialsEnabled = false; bool NPETutorialsEnabled = false; bool KioskModeEnabled = false; bool CompetitiveModeEnabled = false; bool TokenBalanceEnabled = false; + bool WarModeFeatureEnabled = false; + bool ClubsEnabled = false; + bool ClubsBattleNetClubTypeAllowed = false; + bool ClubsCharacterClubTypeAllowed = false; + bool VoiceChatDisabledByParentalControl = false; + bool VoiceChatMutedByParentalControl = false; Optional<std::vector<uint8>> RaceClassExpansionLevels; SocialQueueConfig QuickJoinConfig; + VoiceChatProxySettings VoiceChatManagerSettings; }; class FeatureSystemStatusGlueScreen final : public ServerPacket @@ -147,7 +161,12 @@ namespace WorldPackets int32 TokenPollTimeSeconds = 0; // NYI int32 TokenRedeemIndex = 0; // NYI int64 TokenBalanceAmount = 0; // NYI + int32 MaxCharactersPerRealm = 0; uint32 BpayStoreProductDeliveryDelay = 0; // NYI + int32 ActiveCharacterUpgradeBoostType = 0; // NYI + int32 ActiveClassTrialBoostType = 0; // NYI + int32 MinimumExpansionLevel = 0; + int32 MaximumExpansionLevel = 0; }; class MOTD final : public ServerPacket diff --git a/src/server/game/Server/Packets/TalentPackets.cpp b/src/server/game/Server/Packets/TalentPackets.cpp index c5cbb0769a5..3344ef292fc 100644 --- a/src/server/game/Server/Packets/TalentPackets.cpp +++ b/src/server/game/Server/Packets/TalentPackets.cpp @@ -17,6 +17,20 @@ #include "TalentPackets.h" +ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Talent::PvPTalent& pvpTalent) +{ + data >> pvpTalent.PvPTalentID; + data >> pvpTalent.Slot; + return data; +} + +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Talent::PvPTalent const& pvpTalent) +{ + data << uint16(pvpTalent.PvPTalentID); + data << uint8(pvpTalent.Slot); + return data; +} + WorldPacket const* WorldPackets::Talent::UpdateTalentData::Write() { _worldPacket << uint8(Info.ActiveGroup); @@ -27,13 +41,13 @@ WorldPacket const* WorldPackets::Talent::UpdateTalentData::Write() { _worldPacket << uint32(talentGroupInfo.SpecID); _worldPacket << uint32(talentGroupInfo.TalentIDs.size()); - _worldPacket << uint32(talentGroupInfo.PvPTalentIDs.size()); + _worldPacket << uint32(talentGroupInfo.PvPTalents.size()); - for (uint16 talentID : talentGroupInfo.TalentIDs) - _worldPacket << uint16(talentID); + for (uint16 talent : talentGroupInfo.TalentIDs) + _worldPacket << uint16(talent); - for (uint16 talentID : talentGroupInfo.PvPTalentIDs) - _worldPacket << uint16(talentID); + for (PvPTalent talent : talentGroupInfo.PvPTalents) + _worldPacket << talent; } return &_worldPacket; @@ -92,7 +106,7 @@ WorldPacket const* WorldPackets::Talent::ActiveGlyphs::Write() void WorldPackets::Talent::LearnPvpTalents::Read() { - Talents.resize(_worldPacket.ReadBits(6)); + Talents.resize(_worldPacket.read<uint32>()); for (uint32 i = 0; i < Talents.size(); ++i) _worldPacket >> Talents[i]; } @@ -102,8 +116,8 @@ WorldPacket const* WorldPackets::Talent::LearnPvpTalentsFailed::Write() _worldPacket.WriteBits(Reason, 4); _worldPacket << int32(SpellID); _worldPacket << uint32(Talents.size()); - if (!Talents.empty()) - _worldPacket.append(Talents.data(), Talents.size()); + for (PvPTalent pvpTalent : Talents) + _worldPacket << pvpTalent; return &_worldPacket; } diff --git a/src/server/game/Server/Packets/TalentPackets.h b/src/server/game/Server/Packets/TalentPackets.h index 920f724095e..6cbc8aca057 100644 --- a/src/server/game/Server/Packets/TalentPackets.h +++ b/src/server/game/Server/Packets/TalentPackets.h @@ -27,11 +27,17 @@ namespace WorldPackets { namespace Talent { + struct PvPTalent + { + uint16 PvPTalentID = 0; + uint8 Slot = 0; + }; + struct TalentGroupInfo { uint32 SpecID = 0; std::vector<uint16> TalentIDs; - std::vector<uint16> PvPTalentIDs; + std::vector<PvPTalent> PvPTalents; }; struct TalentInfoUpdate @@ -121,19 +127,19 @@ namespace WorldPackets void Read() override; - Array<uint16, 6> Talents; + Array<PvPTalent, 4> Talents; }; class LearnPvpTalentsFailed final : public ServerPacket { public: - LearnPvpTalentsFailed() : ServerPacket(SMSG_LEARN_PVP_TALENTS_FAILED, 1 + 4 + 4 + 2 * MAX_PVP_TALENT_TIERS) { } + LearnPvpTalentsFailed() : ServerPacket(SMSG_LEARN_PVP_TALENTS_FAILED, 1 + 4 + 4 + (2 + 1) * MAX_PVP_TALENT_SLOTS) { } WorldPacket const* Write() override; uint32 Reason = 0; int32 SpellID = 0; - std::vector<uint16> Talents; + std::vector<PvPTalent> Talents; }; } } diff --git a/src/server/game/Server/Packets/TaxiPackets.cpp b/src/server/game/Server/Packets/TaxiPackets.cpp index 9e8e552f363..a39e37425f7 100644 --- a/src/server/game/Server/Packets/TaxiPackets.cpp +++ b/src/server/game/Server/Packets/TaxiPackets.cpp @@ -36,8 +36,8 @@ WorldPacket const* WorldPackets::Taxi::ShowTaxiNodes::Write() _worldPacket.WriteBit(WindowInfo.is_initialized()); _worldPacket.FlushBits(); - _worldPacket << uint32(CanLandNodes->size()); - _worldPacket << uint32(CanUseNodes->size()); + _worldPacket << uint32(CanLandNodes.size()); + _worldPacket << uint32(CanUseNodes.size()); if (WindowInfo.is_initialized()) { @@ -45,8 +45,8 @@ WorldPacket const* WorldPackets::Taxi::ShowTaxiNodes::Write() _worldPacket << uint32(WindowInfo->CurrentNode); } - _worldPacket.append(CanLandNodes->data(), CanLandNodes->size()); - _worldPacket.append(CanUseNodes->data(), CanUseNodes->size()); + _worldPacket.append(CanLandNodes.data(), CanLandNodes.size()); + _worldPacket.append(CanUseNodes.data(), CanUseNodes.size()); return &_worldPacket; } diff --git a/src/server/game/Server/Packets/TaxiPackets.h b/src/server/game/Server/Packets/TaxiPackets.h index 098ed293fbb..dbf730a8bd9 100644 --- a/src/server/game/Server/Packets/TaxiPackets.h +++ b/src/server/game/Server/Packets/TaxiPackets.h @@ -62,8 +62,8 @@ namespace WorldPackets WorldPacket const* Write() override; Optional<ShowTaxiNodesWindowInfo> WindowInfo; - TaxiMask const* CanLandNodes = nullptr; // Nodes known by player - TaxiMask const* CanUseNodes = nullptr; // Nodes available for use - this can temporarily disable a known node + TaxiMask CanLandNodes; // Nodes known by player + TaxiMask CanUseNodes; // Nodes available for use - this can temporarily disable a known node }; class EnableTaxiNode final : public ClientPacket @@ -110,7 +110,7 @@ namespace WorldPackets class ActivateTaxiReply final : public ServerPacket { public: - ActivateTaxiReply() : ServerPacket(SMSG_ACTIVATE_TAXI_REPLY, 4) { } + ActivateTaxiReply() : ServerPacket(SMSG_ACTIVATE_TAXI_REPLY, 1) { } WorldPacket const* Write() override; diff --git a/src/server/game/Server/Packets/TicketPackets.cpp b/src/server/game/Server/Packets/TicketPackets.cpp index cafb723c062..fe74550c77f 100644 --- a/src/server/game/Server/Packets/TicketPackets.cpp +++ b/src/server/game/Server/Packets/TicketPackets.cpp @@ -201,9 +201,17 @@ void WorldPackets::Ticket::SupportTicketSubmitComplaint::Read() bool hasGuildInfo = _worldPacket.ReadBit(); bool hasLFGListSearchResult = _worldPacket.ReadBit(); bool hasLFGListApplicant = _worldPacket.ReadBit(); + bool hasClubMessage = _worldPacket.ReadBit(); _worldPacket.ResetBitPos(); + if (hasClubMessage) + { + CommunityMessage = boost::in_place(); + CommunityMessage->IsPlayerUsingVoice = _worldPacket.ReadBit(); + _worldPacket.ResetBitPos(); + } + if (hasMailInfo) _worldPacket >> MailInfo; diff --git a/src/server/game/Server/Packets/TicketPackets.h b/src/server/game/Server/Packets/TicketPackets.h index 6e25f3da4a9..5e7fc20f2eb 100644 --- a/src/server/game/Server/Packets/TicketPackets.h +++ b/src/server/game/Server/Packets/TicketPackets.h @@ -178,6 +178,11 @@ namespace WorldPackets std::string Comment; }; + struct SupportTicketCommunityMessage + { + bool IsPlayerUsingVoice = false; + }; + SupportTicketSubmitComplaint(WorldPacket&& packet) : ClientPacket(CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT, std::move(packet)) { } void Read() override; @@ -193,7 +198,7 @@ namespace WorldPackets Optional<SupportTicketGuildInfo> GuildInfo; Optional<SupportTicketLFGListSearchResult> LFGListSearchResult; Optional<SupportTicketLFGListApplicant> LFGListApplicant; - + Optional<SupportTicketCommunityMessage> CommunityMessage; }; class Complaint final : public ClientPacket diff --git a/src/server/game/Server/Packets/TotemPackets.cpp b/src/server/game/Server/Packets/TotemPackets.cpp index 1bd8f1c915e..a7b042ca19a 100644 --- a/src/server/game/Server/Packets/TotemPackets.cpp +++ b/src/server/game/Server/Packets/TotemPackets.cpp @@ -25,7 +25,7 @@ void WorldPackets::Totem::TotemDestroyed::Read() WorldPacket const* WorldPackets::Totem::TotemCreated::Write() { - _worldPacket << Slot; + _worldPacket << uint8(Slot); _worldPacket << Totem; _worldPacket << int32(Duration); _worldPacket << int32(SpellID); diff --git a/src/server/game/Server/Packets/TotemPackets.h b/src/server/game/Server/Packets/TotemPackets.h index b438109825c..232b26f1cbb 100644 --- a/src/server/game/Server/Packets/TotemPackets.h +++ b/src/server/game/Server/Packets/TotemPackets.h @@ -46,7 +46,7 @@ namespace WorldPackets ObjectGuid Totem; int32 SpellID = 0; int32 Duration = 0; - int8 Slot = 0; + uint8 Slot = 0; float TimeMod = 1.0f; bool CannotDismiss = false; }; diff --git a/src/server/game/Server/Packets/TransmogrificationPackets.cpp b/src/server/game/Server/Packets/TransmogrificationPackets.cpp index 7d50891bc3e..da2c3972b12 100644 --- a/src/server/game/Server/Packets/TransmogrificationPackets.cpp +++ b/src/server/game/Server/Packets/TransmogrificationPackets.cpp @@ -41,8 +41,8 @@ WorldPacket const* WorldPackets::Transmogrification::TransmogCollectionUpdate::W _worldPacket.WriteBit(IsFullUpdate); _worldPacket.WriteBit(IsSetFavorite); _worldPacket << uint32(FavoriteAppearances.size()); - for (uint32 itemModifiedAppearanceId : FavoriteAppearances) - _worldPacket << uint32(itemModifiedAppearanceId); + if (!FavoriteAppearances.empty()) + _worldPacket.append(FavoriteAppearances.data(), FavoriteAppearances.size()); return &_worldPacket; } diff --git a/src/server/game/Server/Packets/WhoPackets.cpp b/src/server/game/Server/Packets/WhoPackets.cpp index afc6c3bdd28..9cfbc04e488 100644 --- a/src/server/game/Server/Packets/WhoPackets.cpp +++ b/src/server/game/Server/Packets/WhoPackets.cpp @@ -117,8 +117,8 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Who::WhoResponse const& r data.WriteBits(response.Entries.size(), 6); data.FlushBits(); - for (size_t i = 0; i < response.Entries.size(); ++i) - data << response.Entries[i]; + for (WorldPackets::Who::WhoEntry const& whoEntry : response.Entries) + data << whoEntry; return data; } diff --git a/src/server/game/Server/Packets/WorldStatePackets.cpp b/src/server/game/Server/Packets/WorldStatePackets.cpp index 0c202978de8..8129e2e8af0 100644 --- a/src/server/game/Server/Packets/WorldStatePackets.cpp +++ b/src/server/game/Server/Packets/WorldStatePackets.cpp @@ -24,14 +24,14 @@ WorldPacket const* WorldPackets::WorldState::InitWorldStates::Write() { _worldPacket.reserve(16 + Worldstates.size() * 8); - _worldPacket << uint32(MapID); - _worldPacket << uint32(AreaID); - _worldPacket << uint32(SubareaID); + _worldPacket << int32(MapID); + _worldPacket << int32(AreaID); + _worldPacket << int32(SubareaID); _worldPacket << uint32(Worldstates.size()); for (WorldStateInfo const& wsi : Worldstates) { - _worldPacket << uint32(wsi.VariableID); + _worldPacket << int32(wsi.VariableID); _worldPacket << int32(wsi.Value); } diff --git a/src/server/game/Server/Packets/WorldStatePackets.h b/src/server/game/Server/Packets/WorldStatePackets.h index ba7aa8fe282..766725fcf66 100644 --- a/src/server/game/Server/Packets/WorldStatePackets.h +++ b/src/server/game/Server/Packets/WorldStatePackets.h @@ -29,10 +29,10 @@ namespace WorldPackets public: struct WorldStateInfo { - WorldStateInfo(uint32 variableID, int32 value) + WorldStateInfo(int32 variableID, int32 value) : VariableID(variableID), Value(value) { } - uint32 VariableID; + int32 VariableID; int32 Value; }; @@ -40,9 +40,9 @@ namespace WorldPackets WorldPacket const* Write() override; - uint32 AreaID = 0; ///< ZoneId - uint32 SubareaID = 0; ///< AreaId - uint32 MapID = 0; ///< MapId + int32 AreaID = 0; ///< ZoneId + int32 SubareaID = 0; ///< AreaId + int32 MapID = 0; ///< MapId std::vector<WorldStateInfo> Worldstates; }; diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 448b277aa16..2f75b82ec74 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -156,14 +156,12 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_ADD_TOY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAddToy); DEFINE_HANDLER(CMSG_ADVENTURE_JOURNAL_OPEN_QUEST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ADVENTURE_JOURNAL_START_QUEST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_ADVENTURE_MAP_POI_QUERY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ALTER_APPEARANCE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAlterAppearance); DEFINE_HANDLER(CMSG_AREA_SPIRIT_HEALER_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAreaSpiritHealerQueryOpcode); DEFINE_HANDLER(CMSG_AREA_SPIRIT_HEALER_QUEUE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAreaSpiritHealerQueueOpcode); DEFINE_HANDLER(CMSG_AREA_TRIGGER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAreaTriggerOpcode); DEFINE_HANDLER(CMSG_ARTIFACT_ADD_POWER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleArtifactAddPower); - DEFINE_HANDLER(CMSG_ARTIFACT_ADD_RELIC_TALENT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_ARTIFACT_ATTUNE_PREVIEW_RELIC, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_ARTIFACT_ATTUNE_SOCKETED_RELIC, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ARTIFACT_SET_APPEARANCE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleArtifactSetAppearance); DEFINE_HANDLER(CMSG_ATTACK_STOP, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleAttackStopOpcode); DEFINE_HANDLER(CMSG_ATTACK_SWING, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleAttackSwingOpcode); @@ -185,6 +183,8 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_AUTO_EQUIP_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoEquipItemOpcode); DEFINE_HANDLER(CMSG_AUTO_EQUIP_ITEM_SLOT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoEquipItemSlotOpcode); DEFINE_HANDLER(CMSG_AUTO_STORE_BAG_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleAutoStoreBagItemOpcode); + DEFINE_HANDLER(CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_AZERITE_EMPOWERED_ITEM_VIEWED, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BANKER_ACTIVATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBankerActivateOpcode); DEFINE_HANDLER(CMSG_BATTLEFIELD_LEAVE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlefieldLeaveOpcode); DEFINE_HANDLER(CMSG_BATTLEFIELD_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlefieldListOpcode); @@ -198,10 +198,12 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_BATTLENET_REQUEST, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlenetRequest); DEFINE_HANDLER(CMSG_BATTLENET_REQUEST_REALM_LIST_TICKET, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlenetRequestRealmListTicket); DEFINE_HANDLER(CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLE_PAY_GET_PRODUCT_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLE_PAY_GET_PURCHASE_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_BATTLE_PAY_OPEN_CHECKOUT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLE_PAY_QUERY_CLASS_TRIAL_BOOST_RESULT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLE_PAY_REQUEST_CHARACTER_BOOST_UNREVOKE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLE_PAY_REQUEST_CURRENT_VAS_TRANSFER_QUEUES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); @@ -211,6 +213,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_BATTLE_PAY_START_VAS_PURCHASE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLE_PAY_TRIAL_BOOST_CHARACTER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLE_PAY_VALIDATE_BNET_VAS_TRANSFER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_BATTLE_PAY_VAS_PURCHASE_COMPLETE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLE_PET_CLEAR_FANFARE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BATTLE_PET_DELETE_PET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlePetDeletePet); DEFINE_HANDLER(CMSG_BATTLE_PET_DELETE_PET_CHEAT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); @@ -230,6 +233,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_BLACK_MARKET_BID_ON_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBlackMarketBidOnItem); DEFINE_HANDLER(CMSG_BLACK_MARKET_OPEN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBlackMarketOpen); DEFINE_HANDLER(CMSG_BLACK_MARKET_REQUEST_ITEMS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBlackMarketRequestItems); + DEFINE_HANDLER(CMSG_BONUS_ROLL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_BUG_REPORT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBugReportOpcode); DEFINE_HANDLER(CMSG_BUSY_TRADE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBusyTradeOpcode); DEFINE_HANDLER(CMSG_BUY_BACK_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBuybackItem); @@ -240,6 +244,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_BUY_WOW_TOKEN_START, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CAGE_BATTLE_PET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCageBattlePet); DEFINE_HANDLER(CMSG_CALENDAR_ADD_EVENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarAddEvent); + DEFINE_HANDLER(CMSG_CALENDAR_COMMUNITY_FILTER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarCommunityFilter); DEFINE_HANDLER(CMSG_CALENDAR_COMPLAIN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarComplain); DEFINE_HANDLER(CMSG_CALENDAR_COPY_EVENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarCopyEvent); DEFINE_HANDLER(CMSG_CALENDAR_EVENT_INVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarEventInvite); @@ -250,7 +255,6 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_CALENDAR_GET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarGetCalendar); DEFINE_HANDLER(CMSG_CALENDAR_GET_EVENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarGetEvent); DEFINE_HANDLER(CMSG_CALENDAR_GET_NUM_PENDING, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarGetNumPending); - DEFINE_HANDLER(CMSG_CALENDAR_GUILD_FILTER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarGuildFilter); DEFINE_HANDLER(CMSG_CALENDAR_REMOVE_EVENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarRemoveEvent); DEFINE_HANDLER(CMSG_CALENDAR_REMOVE_INVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarEventRemoveInvite); DEFINE_HANDLER(CMSG_CALENDAR_UPDATE_EVENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCalendarUpdateEvent); @@ -271,19 +275,15 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_CHALLENGE_MODE_REQUEST_LEADERS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CHALLENGE_MODE_REQUEST_MAP_STATS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CHANGE_BAG_SLOT_FLAG, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_CHANGE_BANK_BAG_SLOT_FLAG, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CHANGE_MONUMENT_APPEARANCE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CHANGE_SUB_GROUP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChangeSubGroupOpcode); DEFINE_HANDLER(CMSG_CHARACTER_RENAME_REQUEST, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCharRenameOpcode); DEFINE_HANDLER(CMSG_CHAR_CUSTOMIZE, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCharCustomizeOpcode); DEFINE_HANDLER(CMSG_CHAR_DELETE, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCharDeleteOpcode); DEFINE_HANDLER(CMSG_CHAR_RACE_OR_FACTION_CHANGE, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCharRaceOrFactionChangeOpcode); - DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_CHANNEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatAddonMessageChannelOpcode); - DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_GUILD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatAddonMessageOpcode); - DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_INSTANCE_CHAT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatAddonMessageOpcode); - DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_OFFICER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatAddonMessageOpcode); - DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_PARTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatAddonMessageOpcode); - DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_RAID, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatAddonMessageOpcode); - DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_WHISPER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatAddonMessageWhisperOpcode); + DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatAddonMessageOpcode); + DEFINE_HANDLER(CMSG_CHAT_ADDON_MESSAGE_TARGETED, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChatAddonMessageTargetedOpcode); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_ANNOUNCEMENTS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_BAN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_DECLINE_INVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelCommand); @@ -291,16 +291,13 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_CHAT_CHANNEL_INVITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_KICK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelCommand); - DEFINE_HANDLER(CMSG_CHAT_CHANNEL_MODERATE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_MODERATOR, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); - DEFINE_HANDLER(CMSG_CHAT_CHANNEL_MUTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_OWNER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_PASSWORD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPassword); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_SET_OWNER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_SILENCE_ALL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_UNBAN, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_UNMODERATOR, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); - DEFINE_HANDLER(CMSG_CHAT_CHANNEL_UNMUTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); DEFINE_HANDLER(CMSG_CHAT_CHANNEL_UNSILENCE_ALL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleChannelPlayerCommand); DEFINE_HANDLER(CMSG_CHAT_JOIN_CHANNEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleJoinChannel); DEFINE_HANDLER(CMSG_CHAT_LEAVE_CHANNEL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleLeaveChannel); @@ -328,6 +325,8 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_CLEAR_TRADE_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleClearTradeItemOpcode); DEFINE_HANDLER(CMSG_CLIENT_PORT_GRAVEYARD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePortGraveyard); DEFINE_HANDLER(CMSG_CLOSE_INTERACTION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCloseInteraction); + DEFINE_HANDLER(CMSG_CLOSE_QUEST_CHOICE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_CLUB_INVITE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_COLLECTION_ITEM_SET_FAVORITE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleCollectionItemSetFavorite); DEFINE_HANDLER(CMSG_COMMENTATOR_ENABLE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_COMMENTATOR_ENTER_INSTANCE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); @@ -380,6 +379,8 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_ENUM_CHARACTERS, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCharEnumOpcode); DEFINE_HANDLER(CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleCharUndeleteEnumOpcode); DEFINE_HANDLER(CMSG_FAR_SIGHT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleFarSightOpcode); + DEFINE_HANDLER(CMSG_GAME_EVENT_DEBUG_DISABLE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_GAME_EVENT_DEBUG_ENABLE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GAME_OBJ_REPORT_USE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGameobjectReportUse); DEFINE_HANDLER(CMSG_GAME_OBJ_USE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGameObjectUseOpcode); DEFINE_HANDLER(CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); @@ -407,6 +408,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_GARRISON_START_MISSION, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GARRISON_SWAP_BUILDINGS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GENERATE_RANDOM_CHARACTER_NAME, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleRandomizeCharNameOpcode); + DEFINE_HANDLER(CMSG_GET_ACCOUNT_CHARACTER_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GET_CHALLENGE_MODE_REWARDS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_GET_GARRISON_INFO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGetGarrisonInfo); DEFINE_HANDLER(CMSG_GET_ITEM_PURCHASE_DATA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGetItemPurchaseData); @@ -431,7 +433,6 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_GUILD_BANK_QUERY_TAB, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankQueryTab); DEFINE_HANDLER(CMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankMoneyWithdrawn); DEFINE_HANDLER(CMSG_GUILD_BANK_SET_TAB_TEXT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankSetTabText); - DEFINE_HANDLER(CMSG_GUILD_BANK_SWAP_ITEMS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankSwapItems); DEFINE_HANDLER(CMSG_GUILD_BANK_TEXT_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankTextQuery); DEFINE_HANDLER(CMSG_GUILD_BANK_UPDATE_TAB, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankUpdateTab); DEFINE_HANDLER(CMSG_GUILD_BANK_WITHDRAW_MONEY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildBankWithdrawMoney); @@ -473,6 +474,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_INSPECT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleInspectOpcode); DEFINE_HANDLER(CMSG_INSPECT_PVP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleInspectPVP); DEFINE_HANDLER(CMSG_INSTANCE_LOCK_RESPONSE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleInstanceLockResponse); + DEFINE_HANDLER(CMSG_ISLAND_QUEUE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_ITEM_PURCHASE_REFUND, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleItemRefund); DEFINE_HANDLER(CMSG_ITEM_TEXT_QUERY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleItemTextQuery); DEFINE_HANDLER(CMSG_JOIN_PET_BATTLE_QUEUE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); @@ -544,6 +546,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_MOVE_FEATHER_FALL_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage); DEFINE_HANDLER(CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck); DEFINE_HANDLER(CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck); + DEFINE_HANDLER(CMSG_MOVE_FORCE_MOVEMENT_FORCE_SPEED_CHANGE_ACK, STATUS_UNHANDLED, PROCESS_THREADSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck); DEFINE_HANDLER(CMSG_MOVE_FORCE_ROOT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementAckMessage); DEFINE_HANDLER(CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleForceSpeedChangeAck); @@ -634,8 +637,8 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_PROTOCOL_MISMATCH, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_PUSH_QUEST_TO_PARTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePushQuestToParty); DEFINE_HANDLER(CMSG_PVP_LOG_DATA, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePVPLogDataOpcode); - DEFINE_HANDLER(CMSG_PVP_PRESTIGE_RANK_UP, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePvpPrestigeRankUp); DEFINE_HANDLER(CMSG_QUERY_BATTLE_PET_NAME, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_QUERY_COMMUNITY_NAME, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQueryCorpseLocation); DEFINE_HANDLER(CMSG_QUERY_CORPSE_TRANSPORT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQueryCorpseTransport); DEFINE_HANDLER(CMSG_QUERY_COUNTDOWN_TIMER, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); @@ -652,10 +655,10 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_QUERY_PLAYER_NAME, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleNameQueryOpcode); DEFINE_HANDLER(CMSG_QUERY_QUEST_COMPLETION_NPCS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQueryQuestCompletionNPCs); DEFINE_HANDLER(CMSG_QUERY_QUEST_INFO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestQueryOpcode); - DEFINE_HANDLER(CMSG_QUERY_QUEST_REWARDS, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_QUERY_REALM_NAME, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQueryRealmName); DEFINE_HANDLER(CMSG_QUERY_SCENARIO_POI, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQueryScenarioPOI); DEFINE_HANDLER(CMSG_QUERY_TIME, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQueryTimeOpcode); + DEFINE_HANDLER(CMSG_QUERY_TREASURE_PICKER, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_QUERY_VOID_STORAGE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleVoidStorageQuery); DEFINE_HANDLER(CMSG_QUEST_CONFIRM_ACCEPT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestConfirmAccept); DEFINE_HANDLER(CMSG_QUEST_GIVER_ACCEPT_QUEST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestgiverAcceptQuestOpcode); @@ -696,6 +699,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_REQUEST_BATTLEFIELD_STATUS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestBattlefieldStatusOpcode); DEFINE_HANDLER(CMSG_REQUEST_CATEGORY_COOLDOWNS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleRequestCategoryCooldowns); DEFINE_HANDLER(CMSG_REQUEST_CEMETERY_LIST, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleRequestCemeteryList); + DEFINE_HANDLER(CMSG_REQUEST_CHALLENGE_MODE_AFFIXES, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REQUEST_CONSUMPTION_CONVERSION_INFO, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_REQUEST_CROWD_CONTROL_SPELL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); @@ -748,7 +752,6 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_SET_ASSISTANT_LEADER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetAssistantLeaderOpcode); DEFINE_HANDLER(CMSG_SET_BACKPACK_AUTOSORT_DISABLED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_BANK_AUTOSORT_DISABLED, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); - DEFINE_HANDLER(CMSG_SET_BANK_BAG_SLOT_FLAG, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_CONTACT_NOTES, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetContactNotesOpcode); DEFINE_HANDLER(CMSG_SET_CURRENCY_FLAGS, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_DIFFICULTY_ID, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); @@ -757,6 +760,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_SET_FACTION_AT_WAR, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetFactionAtWar); DEFINE_HANDLER(CMSG_SET_FACTION_INACTIVE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetFactionInactiveOpcode); DEFINE_HANDLER(CMSG_SET_FACTION_NOT_AT_WAR, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetFactionNotAtWar); + DEFINE_HANDLER(CMSG_SET_GAME_EVENT_DEBUG_VIEW_STATE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_LFG_BONUS_FACTION_ID, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_LOOT_METHOD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetLootMethodOpcode); @@ -779,6 +783,7 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_SET_TRADE_GOLD, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetTradeGoldOpcode); DEFINE_HANDLER(CMSG_SET_TRADE_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetTradeItemOpcode); DEFINE_HANDLER(CMSG_SET_USING_PARTY_GARRISON, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_SET_WAR_MODE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SET_WATCHED_FACTION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetWatchedFactionOpcode); DEFINE_HANDLER(CMSG_SHOW_TRADE_SKILL, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_SIGN_PETITION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSignPetition); @@ -850,6 +855,8 @@ void OpcodeTable::Initialize() DEFINE_HANDLER(CMSG_USE_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUseItemOpcode); DEFINE_HANDLER(CMSG_USE_TOY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleUseToy); DEFINE_HANDLER(CMSG_VIOLENCE_LEVEL, STATUS_AUTHED, PROCESS_INPLACE, &WorldSession::HandleViolenceLevel); + DEFINE_HANDLER(CMSG_VOICE_CHAT_JOIN_CHANNEL, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); + DEFINE_HANDLER(CMSG_VOICE_CHAT_LOGIN, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::Handle_NULL); DEFINE_HANDLER(CMSG_VOID_STORAGE_TRANSFER, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleVoidStorageTransfer); DEFINE_HANDLER(CMSG_WARDEN_DATA, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleWardenData); DEFINE_HANDLER(CMSG_WHO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleWhoOpcode); @@ -878,6 +885,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADD_LOSS_OF_CONTROL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADD_RUNE_POWER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADJUST_SPLINE_DURATION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ADVENTURE_MAP_POI_QUERY_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AE_LOOT_TARGETS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AE_LOOT_TARGET_ACK, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AI_REACTION, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -890,12 +898,11 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_DENIED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_NO_CORPSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_RE_PATH, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_RE_SHAPE, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_AREA_TRIGGER_RE_SHAPE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARENA_CROWD_CONTROL_SPELLS, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARENA_ERROR, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARTIFACT_FORGE_OPENED, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARTIFACT_KNOWLEDGE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARTIFACT_RESPEC_CONFIRM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARTIFACT_TRAITS_REFUNDED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ARTIFACT_XP_GAIN, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -920,6 +927,8 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUTH_CHALLENGE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AUTH_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_AVAILABLE_HOTFIXES, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_AZERITE_EMPOWERED_ITEM_RESPEC_OPEN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_AZERITE_XP_GAIN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BAN_REASON, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BARBER_SHOP_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLEFIELD_LIST, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -942,6 +951,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLENET_REALM_LIST_TICKET, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLENET_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLENET_SET_SESSION_STATE, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLENET_UPDATE_SESSION_KEY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_ACK_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_CONFIRM_PURCHASE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -952,6 +962,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_MOUNT_DELIVERED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_OPEN_CHECKOUT_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_PURCHASE_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -991,11 +1002,13 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BLACK_MARKET_WON, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BONUS_ROLL_EMPTY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_BONUS_ROLL_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BOSS_KILL_CREDIT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BREAK_TARGET, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_BROADCAST_ACHIEVEMENT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BUY_FAILED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_BUY_SUCCEEDED, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_CACHE_INFO, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CACHE_INFO, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CACHE_VERSION, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CALENDAR_CLEAR_PENDING_ACTION, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CALENDAR_COMMAND_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1027,10 +1040,11 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAN_DUEL_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CAST_FAILED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CATEGORY_COOLDOWN, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_AFFIXES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_ALL_MAP_STATS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_COMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_MAP_STATS_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_NEW_PLAYER_RECORD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_NEW_PLAYER_SEASON_RECORD, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_REWARDS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CHALLENGE_MODE_RESET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1085,6 +1099,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_CONNECT_TO, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CONQUEST_FORMULA_CONSTANTS, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CONSOLE_WRITE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_CONTRIBUTION_COLLECTOR_STATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CONTACT_LIST, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_CONTROL_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_COOLDOWN_CHEAT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1121,6 +1136,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_DUEL_COMPLETE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DUEL_COUNTDOWN, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DUEL_IN_BOUNDS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_DUEL_OPPONENT_SELECTED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DUEL_OUT_OF_BOUNDS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DUEL_REQUESTED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_DUEL_WINNER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1148,9 +1164,11 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCE_ANIM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCE_OBJECT_RELINK, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_FRIEND_STATUS, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_EVENT_DEBUG_INITIALIZE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_CUSTOM_ANIM, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_DESPAWN, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_MULTI_TRANSITION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_RESET_STATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1170,6 +1188,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_COMPLETE_MISSION_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_CREATE_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_DELETE_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_FOLLOWER_CATEGORIES, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_FOLLOWER_CHANGED_ABILITIES, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_FOLLOWER_CHANGED_DURABILITY, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GARRISON_FOLLOWER_CHANGED_ITEM_LEVEL, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); @@ -1218,6 +1237,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_COMPLETE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_MESSAGE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_POI, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GOSSIP_TEXT_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_ACTION_THROTTLED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_DECLINE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GROUP_DESTROYED, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1306,6 +1326,9 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVALIDATE_PLAYER, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVALID_PROMOTION_CODE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_INVENTORY_CHANGE_FAILURE, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ISLAND_AZERITE_XP_GAIN, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ISLAND_COMPLETED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_ISLAND_OPEN_QUEUE_NPC, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_IS_QUEST_COMPLETE_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_ITEM_COOLDOWN, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1349,6 +1372,8 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_LF_GUILD_COMMAND_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LF_GUILD_POST, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LF_GUILD_RECRUITS, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_LIGHTNING_STORM_END, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_LIGHTNING_STORM_START, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LIVE_REGION_CHARACTER_COPY_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1362,6 +1387,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOGOUT_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOG_XP_GAIN, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_ALL_PASSED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_LEGACY_RULES_IN_EFFECT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_LIST, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_MONEY_NOTIFY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_LOOT_RELEASE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1412,6 +1438,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_HOVERING, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_LAND_WALK, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_MOVEMENT_FORCE_SPEED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_NORMAL_FALL, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_PITCH_RATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_RUN_BACK_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1462,6 +1489,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_FLIGHT_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_KNOCK_BACK, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_MOVEMENT_FORCE_SPEED, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_PITCH_RATE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_REMOVE_MOVEMENT_FORCE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UPDATE_RUN_BACK_SPEED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1493,7 +1521,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_INVITE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_KILL_LOG, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_MEMBER_STATE, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_MEMBER_STATE_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_MEMBER_STATE_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PARTY_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PAUSE_MIRROR_TIMER, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PENDING_RAID_LOCK, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1552,7 +1580,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAY_TIME_WARNING, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PONG, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_POWER_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_PRESTIGE_AND_HONOR_INVOLUNTARILY_CHANGED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PRE_RESSURECT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PRINT_NOTIFICATION, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PROC_RESIST, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1563,6 +1590,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_OPTIONS_ENABLED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_PVP_SEASON, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_BATTLE_PET_NAME_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_COMMUNITY_NAME_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_CREATURE_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_GAME_OBJECT_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_GARRISON_CREATURE_NAME_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1574,8 +1602,8 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_PET_NAME_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_PLAYER_NAME_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_QUEST_INFO_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_QUEST_REWARD_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_TIME_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUERY_TREASURE_PICKER_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_COMPLETION_NPC_RESPONSE, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_CONFIRM_ACCEPT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_QUEST_FORCE_REMOVED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1629,7 +1657,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_REQUEST_PVP_BRAWL_INFO_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_REQUEST_PVP_REWARDS_RESPONSE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESEARCH_COMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESET_AREA_TRIGGER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESET_COMPRESSION_CONTEXT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESET_FAILED_NOTIFY, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_RESET_RANGED_COMBAT_TIMER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1668,7 +1695,6 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_SPELL_CHARGES, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_SPELL_HISTORY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SEND_UNLEARN_SPELLS, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_SERVER_FIRST_ACHIEVEMENT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SERVER_FIRST_ACHIEVEMENTS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SERVER_TIME, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SETUP_CURRENCY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1809,6 +1835,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_WAIT_QUEUE_FINISH, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WAIT_QUEUE_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WARDEN_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_WARFRONT_COMPLETED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WEATHER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WEEKLY_SPELL_USAGE, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index c39cd5ca314..9164e453ad7 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -46,38 +46,36 @@ enum OpcodeMisc : uint16 enum OpcodeClient : uint16 { CMSG_ACCEPT_GUILD_INVITE = 0x35FC, - CMSG_ACCEPT_LEVEL_GRANT = 0x34FD, + CMSG_ACCEPT_LEVEL_GRANT = 0x34FA, CMSG_ACCEPT_TRADE = 0x315A, CMSG_ACCEPT_WARGAME_INVITE = 0x35E0, - CMSG_ACTIVATE_TAXI = 0x34AE, + CMSG_ACTIVATE_TAXI = 0x34AB, CMSG_ADDON_LIST = 0x35D8, CMSG_ADD_BATTLENET_FRIEND = 0x365A, - CMSG_ADD_FRIEND = 0x36CF, - CMSG_ADD_IGNORE = 0x36D3, - CMSG_ADD_TOY = 0x328B, - CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x31F9, - CMSG_ADVENTURE_JOURNAL_START_QUEST = 0x332E, - CMSG_ALTER_APPEARANCE = 0x34F9, - CMSG_AREA_SPIRIT_HEALER_QUERY = 0x34B3, - CMSG_AREA_SPIRIT_HEALER_QUEUE = 0x34B4, - CMSG_AREA_TRIGGER = 0x31CD, - CMSG_ARTIFACT_ADD_POWER = 0x31A5, - CMSG_ARTIFACT_ADD_RELIC_TALENT = 0x31A8, - CMSG_ARTIFACT_ATTUNE_PREVIEW_RELIC = 0x31A9, - CMSG_ARTIFACT_ATTUNE_SOCKETED_RELIC = 0x31AA, - CMSG_ARTIFACT_SET_APPEARANCE = 0x31A7, - CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x3200, - CMSG_ATTACK_STOP = 0x324D, - CMSG_ATTACK_SWING = 0x324C, - CMSG_AUCTION_HELLO_REQUEST = 0x34CF, - CMSG_AUCTION_LIST_BIDDER_ITEMS = 0x34D5, - CMSG_AUCTION_LIST_ITEMS = 0x34D2, - CMSG_AUCTION_LIST_OWNER_ITEMS = 0x34D4, - CMSG_AUCTION_LIST_PENDING_SALES = 0x34D7, - CMSG_AUCTION_PLACE_BID = 0x34D6, - CMSG_AUCTION_REMOVE_ITEM = 0x34D1, - CMSG_AUCTION_REPLICATE_ITEMS = 0x34D3, - CMSG_AUCTION_SELL_ITEM = 0x34D0, + CMSG_ADD_FRIEND = 0x36D0, + CMSG_ADD_IGNORE = 0x36D4, + CMSG_ADD_TOY = 0x3298, + CMSG_ADVENTURE_JOURNAL_OPEN_QUEST = 0x3201, + CMSG_ADVENTURE_JOURNAL_START_QUEST = 0x333D, + CMSG_ADVENTURE_MAP_POI_QUERY = 0x3244, + CMSG_ALTER_APPEARANCE = 0x34F6, + CMSG_AREA_SPIRIT_HEALER_QUERY = 0x34B0, + CMSG_AREA_SPIRIT_HEALER_QUEUE = 0x34B1, + CMSG_AREA_TRIGGER = 0x31D5, + CMSG_ARTIFACT_ADD_POWER = 0x31A9, + CMSG_ARTIFACT_SET_APPEARANCE = 0x31AB, + CMSG_ASSIGN_EQUIPMENT_SET_SPEC = 0x3209, + CMSG_ATTACK_STOP = 0x3256, + CMSG_ATTACK_SWING = 0x3255, + CMSG_AUCTION_HELLO_REQUEST = 0x34CB, + CMSG_AUCTION_LIST_BIDDER_ITEMS = 0x34D1, + CMSG_AUCTION_LIST_ITEMS = 0x34CE, + CMSG_AUCTION_LIST_OWNER_ITEMS = 0x34D0, + CMSG_AUCTION_LIST_PENDING_SALES = 0x34D3, + CMSG_AUCTION_PLACE_BID = 0x34D2, + CMSG_AUCTION_REMOVE_ITEM = 0x34CD, + CMSG_AUCTION_REPLICATE_ITEMS = 0x34CF, + CMSG_AUCTION_SELL_ITEM = 0x34CC, CMSG_AUTH_CONTINUED_SESSION = 0x3766, CMSG_AUTH_SESSION = 0x3765, CMSG_AUTOBANK_ITEM = 0x3996, @@ -87,32 +85,37 @@ enum OpcodeClient : uint16 CMSG_AUTO_EQUIP_ITEM = 0x399A, CMSG_AUTO_EQUIP_ITEM_SLOT = 0x399F, CMSG_AUTO_STORE_BAG_ITEM = 0x399B, - CMSG_BANKER_ACTIVATE = 0x34B6, - CMSG_BATTLEFIELD_LEAVE = 0x3171, - CMSG_BATTLEFIELD_LIST = 0x317D, - CMSG_BATTLEFIELD_PORT = 0x3529, - CMSG_BATTLEMASTER_HELLO = 0x32A1, - CMSG_BATTLEMASTER_JOIN = 0x3524, - CMSG_BATTLEMASTER_JOIN_ARENA = 0x3525, - CMSG_BATTLEMASTER_JOIN_BRAWL = 0x3527, - CMSG_BATTLEMASTER_JOIN_SKIRMISH = 0x3526, - CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x36D2, - CMSG_BATTLENET_REQUEST = 0x36F6, - CMSG_BATTLENET_REQUEST_REALM_LIST_TICKET = 0x36F7, - CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x36CA, - CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x36C9, - CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x36C0, - CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x36BA, - CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x36BB, - CMSG_BATTLE_PAY_QUERY_CLASS_TRIAL_BOOST_RESULT = 0x36C3, - CMSG_BATTLE_PAY_REQUEST_CHARACTER_BOOST_UNREVOKE = 0x36C1, - CMSG_BATTLE_PAY_REQUEST_CURRENT_VAS_TRANSFER_QUEUES = 0x3708, - CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x3707, - CMSG_BATTLE_PAY_REQUEST_VAS_CHARACTER_QUEUE_TIME = 0x3709, - CMSG_BATTLE_PAY_START_PURCHASE = 0x36F2, - CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36F3, - CMSG_BATTLE_PAY_TRIAL_BOOST_CHARACTER = 0x36C2, - CMSG_BATTLE_PAY_VALIDATE_BNET_VAS_TRANSFER = 0x370A, + CMSG_AZERITE_EMPOWERED_ITEM_SELECT_POWER = 0x335B, + CMSG_AZERITE_EMPOWERED_ITEM_VIEWED = 0x3347, + CMSG_BANKER_ACTIVATE = 0x34B3, + CMSG_BATTLEFIELD_LEAVE = 0x3172, + CMSG_BATTLEFIELD_LIST = 0x317E, + CMSG_BATTLEFIELD_PORT = 0x3527, + CMSG_BATTLEMASTER_HELLO = 0x32B0, + CMSG_BATTLEMASTER_JOIN = 0x3522, + CMSG_BATTLEMASTER_JOIN_ARENA = 0x3523, + CMSG_BATTLEMASTER_JOIN_BRAWL = 0x3525, + CMSG_BATTLEMASTER_JOIN_SKIRMISH = 0x3524, + CMSG_BATTLENET_CHALLENGE_RESPONSE = 0x36D3, + CMSG_BATTLENET_REQUEST = 0x36F7, + CMSG_BATTLENET_REQUEST_REALM_LIST_TICKET = 0x36FB, + CMSG_BATTLE_PAY_ACK_FAILED_RESPONSE = 0x36CB, + CMSG_BATTLE_PAY_CANCEL_OPEN_CHECKOUT = 0x3716, + CMSG_BATTLE_PAY_CONFIRM_PURCHASE_RESPONSE = 0x36CA, + CMSG_BATTLE_PAY_DISTRIBUTION_ASSIGN_TO_TARGET = 0x36C1, + CMSG_BATTLE_PAY_GET_PRODUCT_LIST = 0x36BB, + CMSG_BATTLE_PAY_GET_PURCHASE_LIST = 0x36BC, + CMSG_BATTLE_PAY_OPEN_CHECKOUT = 0x370F, + CMSG_BATTLE_PAY_QUERY_CLASS_TRIAL_BOOST_RESULT = 0x36C4, + CMSG_BATTLE_PAY_REQUEST_CHARACTER_BOOST_UNREVOKE = 0x36C2, + CMSG_BATTLE_PAY_REQUEST_CURRENT_VAS_TRANSFER_QUEUES = 0x370C, + CMSG_BATTLE_PAY_REQUEST_PRICE_INFO = 0x370B, + CMSG_BATTLE_PAY_REQUEST_VAS_CHARACTER_QUEUE_TIME = 0x370D, + CMSG_BATTLE_PAY_START_PURCHASE = 0x36F3, + CMSG_BATTLE_PAY_START_VAS_PURCHASE = 0x36F4, + CMSG_BATTLE_PAY_TRIAL_BOOST_CHARACTER = 0x36C3, + CMSG_BATTLE_PAY_VALIDATE_BNET_VAS_TRANSFER = 0x370E, + CMSG_BATTLE_PAY_VAS_PURCHASE_COMPLETE = 0x36F2, CMSG_BATTLE_PET_CLEAR_FANFARE = 0x312C, CMSG_BATTLE_PET_DELETE_PET = 0x3624, CMSG_BATTLE_PET_DELETE_PET_CHEAT = 0x3625, @@ -122,23 +125,25 @@ enum OpcodeClient : uint16 CMSG_BATTLE_PET_SET_BATTLE_SLOT = 0x362B, CMSG_BATTLE_PET_SET_FLAGS = 0x362F, CMSG_BATTLE_PET_SUMMON = 0x3628, - CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY = 0x31D7, - CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x31D6, + CMSG_BATTLE_PET_UPDATE_DISPLAY_NOTIFY = 0x31DF, + CMSG_BATTLE_PET_UPDATE_NOTIFY = 0x31DE, CMSG_BEGIN_TRADE = 0x3157, - CMSG_BINDER_ACTIVATE = 0x34B5, - CMSG_BLACK_MARKET_BID_ON_ITEM = 0x3531, - CMSG_BLACK_MARKET_OPEN = 0x352F, - CMSG_BLACK_MARKET_REQUEST_ITEMS = 0x3530, + CMSG_BINDER_ACTIVATE = 0x34B2, + CMSG_BLACK_MARKET_BID_ON_ITEM = 0x352F, + CMSG_BLACK_MARKET_OPEN = 0x352D, + CMSG_BLACK_MARKET_REQUEST_ITEMS = 0x352E, + CMSG_BONUS_ROLL = 0x335C, CMSG_BUG_REPORT = 0x3686, CMSG_BUSY_TRADE = 0x3158, - CMSG_BUY_BACK_ITEM = 0x34A7, - CMSG_BUY_BANK_SLOT = 0x34B7, - CMSG_BUY_ITEM = 0x34A6, - CMSG_BUY_REAGENT_BANK = 0x34B8, - CMSG_BUY_WOW_TOKEN_CONFIRM = 0x36EB, - CMSG_BUY_WOW_TOKEN_START = 0x36EA, - CMSG_CAGE_BATTLE_PET = 0x31E8, + CMSG_BUY_BACK_ITEM = 0x34A4, + CMSG_BUY_BANK_SLOT = 0x34B4, + CMSG_BUY_ITEM = 0x34A3, + CMSG_BUY_REAGENT_BANK = 0x34B5, + CMSG_BUY_WOW_TOKEN_CONFIRM = 0x36EC, + CMSG_BUY_WOW_TOKEN_START = 0x36EB, + CMSG_CAGE_BATTLE_PET = 0x31F0, CMSG_CALENDAR_ADD_EVENT = 0x367D, + CMSG_CALENDAR_COMMUNITY_FILTER = 0x3671, CMSG_CALENDAR_COMPLAIN = 0x3679, CMSG_CALENDAR_COPY_EVENT = 0x3678, CMSG_CALENDAR_EVENT_INVITE = 0x3672, @@ -149,84 +154,78 @@ enum OpcodeClient : uint16 CMSG_CALENDAR_GET = 0x366F, CMSG_CALENDAR_GET_EVENT = 0x3670, CMSG_CALENDAR_GET_NUM_PENDING = 0x367A, - CMSG_CALENDAR_GUILD_FILTER = 0x3671, CMSG_CALENDAR_REMOVE_EVENT = 0x3677, CMSG_CALENDAR_REMOVE_INVITE = 0x3673, CMSG_CALENDAR_UPDATE_EVENT = 0x367E, - CMSG_CANCEL_AURA = 0x31AC, - CMSG_CANCEL_AUTO_REPEAT_SPELL = 0x34EB, - CMSG_CANCEL_CAST = 0x3291, - CMSG_CANCEL_CHANNELLING = 0x325C, - CMSG_CANCEL_GROWTH_AURA = 0x3261, - CMSG_CANCEL_MASTER_LOOT_ROLL = 0x3208, - CMSG_CANCEL_MOD_SPEED_NO_CONTROL_AURAS = 0x31AB, - CMSG_CANCEL_MOUNT_AURA = 0x3272, - CMSG_CANCEL_QUEUED_SPELL = 0x317E, - CMSG_CANCEL_TEMP_ENCHANTMENT = 0x34F6, + CMSG_CANCEL_AURA = 0x31AD, + CMSG_CANCEL_AUTO_REPEAT_SPELL = 0x34E8, + CMSG_CANCEL_CAST = 0x329E, + CMSG_CANCEL_CHANNELLING = 0x326A, + CMSG_CANCEL_GROWTH_AURA = 0x326F, + CMSG_CANCEL_MASTER_LOOT_ROLL = 0x3211, + CMSG_CANCEL_MOD_SPEED_NO_CONTROL_AURAS = 0x31AC, + CMSG_CANCEL_MOUNT_AURA = 0x3280, + CMSG_CANCEL_QUEUED_SPELL = 0x317F, + CMSG_CANCEL_TEMP_ENCHANTMENT = 0x34F3, CMSG_CANCEL_TRADE = 0x315C, CMSG_CAN_DUEL = 0x3662, - CMSG_CAN_REDEEM_WOW_TOKEN_FOR_BALANCE = 0x3706, - CMSG_CAST_SPELL = 0x328E, + CMSG_CAN_REDEEM_WOW_TOKEN_FOR_BALANCE = 0x370A, + CMSG_CAST_SPELL = 0x329B, CMSG_CHALLENGE_MODE_REQUEST_LEADERS = 0x308F, CMSG_CHALLENGE_MODE_REQUEST_MAP_STATS = 0x308E, - CMSG_CHANGE_BAG_SLOT_FLAG = 0x3312, - CMSG_CHANGE_MONUMENT_APPEARANCE = 0x32F4, + CMSG_CHANGE_BAG_SLOT_FLAG = 0x3321, + CMSG_CHANGE_BANK_BAG_SLOT_FLAG = 0x3322, + CMSG_CHANGE_MONUMENT_APPEARANCE = 0x3303, CMSG_CHANGE_SUB_GROUP = 0x364C, - CMSG_CHARACTER_RENAME_REQUEST = 0x36BE, - CMSG_CHAR_CUSTOMIZE = 0x368E, - CMSG_CHAR_DELETE = 0x369B, - CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3694, - CMSG_CHAT_ADDON_MESSAGE_CHANNEL = 0x37D0, - CMSG_CHAT_ADDON_MESSAGE_GUILD = 0x37D4, - CMSG_CHAT_ADDON_MESSAGE_INSTANCE_CHAT = 0x37F3, - CMSG_CHAT_ADDON_MESSAGE_OFFICER = 0x37D6, - CMSG_CHAT_ADDON_MESSAGE_PARTY = 0x37EF, - CMSG_CHAT_ADDON_MESSAGE_RAID = 0x37F1, - CMSG_CHAT_ADDON_MESSAGE_WHISPER = 0x37D2, - CMSG_CHAT_CHANNEL_ANNOUNCEMENTS = 0x37E7, - CMSG_CHAT_CHANNEL_BAN = 0x37E5, - CMSG_CHAT_CHANNEL_DECLINE_INVITE = 0x37EA, - CMSG_CHAT_CHANNEL_DISPLAY_LIST = 0x37DA, - CMSG_CHAT_CHANNEL_INVITE = 0x37E3, - CMSG_CHAT_CHANNEL_KICK = 0x37E4, - CMSG_CHAT_CHANNEL_LIST = 0x37D9, - CMSG_CHAT_CHANNEL_MODERATE = 0x37DE, - CMSG_CHAT_CHANNEL_MODERATOR = 0x37DF, - CMSG_CHAT_CHANNEL_MUTE = 0x37E1, - CMSG_CHAT_CHANNEL_OWNER = 0x37DD, - CMSG_CHAT_CHANNEL_PASSWORD = 0x37DB, - CMSG_CHAT_CHANNEL_SET_OWNER = 0x37DC, - CMSG_CHAT_CHANNEL_SILENCE_ALL = 0x37E8, - CMSG_CHAT_CHANNEL_UNBAN = 0x37E6, - CMSG_CHAT_CHANNEL_UNMODERATOR = 0x37E0, - CMSG_CHAT_CHANNEL_UNMUTE = 0x37E2, - CMSG_CHAT_CHANNEL_UNSILENCE_ALL = 0x37E9, + CMSG_CHARACTER_RENAME_REQUEST = 0x36BF, + CMSG_CHAR_CUSTOMIZE = 0x368F, + CMSG_CHAR_DELETE = 0x369C, + CMSG_CHAR_RACE_OR_FACTION_CHANGE = 0x3695, + CMSG_CHAT_ADDON_MESSAGE = 0x37EE, + CMSG_CHAT_ADDON_MESSAGE_TARGETED = 0x37EF, + CMSG_CHAT_CHANNEL_ANNOUNCEMENTS = 0x37E3, + CMSG_CHAT_CHANNEL_BAN = 0x37E1, + CMSG_CHAT_CHANNEL_DECLINE_INVITE = 0x37E6, + CMSG_CHAT_CHANNEL_DISPLAY_LIST = 0x37D6, + CMSG_CHAT_CHANNEL_INVITE = 0x37DF, + CMSG_CHAT_CHANNEL_KICK = 0x37E0, + CMSG_CHAT_CHANNEL_LIST = 0x37D5, + CMSG_CHAT_CHANNEL_MODERATOR = 0x37DB, + CMSG_CHAT_CHANNEL_OWNER = 0x37D9, + CMSG_CHAT_CHANNEL_PASSWORD = 0x37D7, + CMSG_CHAT_CHANNEL_SET_OWNER = 0x37D8, + CMSG_CHAT_CHANNEL_SILENCE_ALL = 0x37E4, + CMSG_CHAT_CHANNEL_UNBAN = 0x37E2, + CMSG_CHAT_CHANNEL_UNMODERATOR = 0x37DC, + CMSG_CHAT_CHANNEL_UNSILENCE_ALL = 0x37E5, CMSG_CHAT_JOIN_CHANNEL = 0x37C8, CMSG_CHAT_LEAVE_CHANNEL = 0x37C9, - CMSG_CHAT_MESSAGE_AFK = 0x37D7, + CMSG_CHAT_MESSAGE_AFK = 0x37D3, CMSG_CHAT_MESSAGE_CHANNEL = 0x37CF, - CMSG_CHAT_MESSAGE_DND = 0x37D8, - CMSG_CHAT_MESSAGE_EMOTE = 0x37EC, - CMSG_CHAT_MESSAGE_GUILD = 0x37D3, - CMSG_CHAT_MESSAGE_INSTANCE_CHAT = 0x37F2, - CMSG_CHAT_MESSAGE_OFFICER = 0x37D5, - CMSG_CHAT_MESSAGE_PARTY = 0x37EE, - CMSG_CHAT_MESSAGE_RAID = 0x37F0, - CMSG_CHAT_MESSAGE_RAID_WARNING = 0x37F4, - CMSG_CHAT_MESSAGE_SAY = 0x37EB, - CMSG_CHAT_MESSAGE_WHISPER = 0x37D1, - CMSG_CHAT_MESSAGE_YELL = 0x37ED, + CMSG_CHAT_MESSAGE_DND = 0x37D4, + CMSG_CHAT_MESSAGE_EMOTE = 0x37E8, + CMSG_CHAT_MESSAGE_GUILD = 0x37D1, + CMSG_CHAT_MESSAGE_INSTANCE_CHAT = 0x37EC, + CMSG_CHAT_MESSAGE_OFFICER = 0x37D2, + CMSG_CHAT_MESSAGE_PARTY = 0x37EA, + CMSG_CHAT_MESSAGE_RAID = 0x37EB, + CMSG_CHAT_MESSAGE_RAID_WARNING = 0x37ED, + CMSG_CHAT_MESSAGE_SAY = 0x37E7, + CMSG_CHAT_MESSAGE_WHISPER = 0x37D0, + CMSG_CHAT_MESSAGE_YELL = 0x37E9, CMSG_CHAT_REGISTER_ADDON_PREFIXES = 0x37CD, CMSG_CHAT_REPORT_FILTERED = 0x37CC, CMSG_CHAT_REPORT_IGNORED = 0x37CB, CMSG_CHAT_UNREGISTER_ALL_ADDON_PREFIXES = 0x37CE, - CMSG_CHECK_RAF_EMAIL_ENABLED = 0x36CB, - CMSG_CHECK_WOW_TOKEN_VETERAN_ELIGIBILITY = 0x36E9, - CMSG_CHOICE_RESPONSE = 0x3293, - CMSG_CLEAR_RAID_MARKER = 0x31A1, + CMSG_CHECK_RAF_EMAIL_ENABLED = 0x36CC, + CMSG_CHECK_WOW_TOKEN_VETERAN_ELIGIBILITY = 0x36EA, + CMSG_CHOICE_RESPONSE = 0x32A0, + CMSG_CLEAR_RAID_MARKER = 0x31A5, CMSG_CLEAR_TRADE_ITEM = 0x315E, - CMSG_CLIENT_PORT_GRAVEYARD = 0x352B, - CMSG_CLOSE_INTERACTION = 0x3496, + CMSG_CLIENT_PORT_GRAVEYARD = 0x3529, + CMSG_CLOSE_INTERACTION = 0x3493, + CMSG_CLOSE_QUEST_CHOICE = 0x32A1, + CMSG_CLUB_INVITE = 0x36FA, CMSG_COLLECTION_ITEM_SET_FAVORITE = 0x3632, CMSG_COMMENTATOR_ENABLE = 0x35F0, CMSG_COMMENTATOR_ENTER_INSTANCE = 0x35F4, @@ -236,26 +235,26 @@ enum OpcodeClient : uint16 CMSG_COMMENTATOR_GET_PLAYER_INFO = 0x35F2, CMSG_COMMENTATOR_START_WARGAME = 0x35EF, CMSG_COMPLAINT = 0x366C, - CMSG_COMPLETE_CINEMATIC = 0x3549, - CMSG_COMPLETE_MOVIE = 0x34E1, - CMSG_CONFIRM_ARTIFACT_RESPEC = 0x31A6, - CMSG_CONFIRM_RESPEC_WIPE = 0x3202, + CMSG_COMPLETE_CINEMATIC = 0x3547, + CMSG_COMPLETE_MOVIE = 0x34DE, + CMSG_CONFIRM_ARTIFACT_RESPEC = 0x31AA, + CMSG_CONFIRM_RESPEC_WIPE = 0x320B, CMSG_CONNECT_TO_FAILED = 0x35D4, - CMSG_CONTRIBUTION_CONTRIBUTE = 0x3558, - CMSG_CONTRIBUTION_GET_STATE = 0x3559, - CMSG_CONVERSATION_LINE_STARTED = 0x354A, - CMSG_CONVERT_CONSUMPTION_TIME = 0x36F9, + CMSG_CONTRIBUTION_CONTRIBUTE = 0x3557, + CMSG_CONTRIBUTION_GET_STATE = 0x3558, + CMSG_CONVERSATION_LINE_STARTED = 0x3548, + CMSG_CONVERT_CONSUMPTION_TIME = 0x36FD, CMSG_CONVERT_RAID = 0x364E, CMSG_CREATE_CHARACTER = 0x3643, - CMSG_CREATE_SHIPMENT = 0x32E0, + CMSG_CREATE_SHIPMENT = 0x32EF, CMSG_DB_QUERY_BULK = 0x35E4, - CMSG_DECLINE_GUILD_INVITES = 0x3522, - CMSG_DECLINE_PETITION = 0x3538, - CMSG_DELETE_EQUIPMENT_SET = 0x3510, - CMSG_DEL_FRIEND = 0x36D0, - CMSG_DEL_IGNORE = 0x36D4, - CMSG_DEPOSIT_REAGENT_BANK = 0x331B, - CMSG_DESTROY_ITEM = 0x3285, + CMSG_DECLINE_GUILD_INVITES = 0x3520, + CMSG_DECLINE_PETITION = 0x3536, + CMSG_DELETE_EQUIPMENT_SET = 0x350D, + CMSG_DEL_FRIEND = 0x36D1, + CMSG_DEL_IGNORE = 0x36D5, + CMSG_DEPOSIT_REAGENT_BANK = 0x332A, + CMSG_DESTROY_ITEM = 0x3292, CMSG_DF_BOOT_PLAYER_VOTE = 0x3615, CMSG_DF_GET_JOIN_STATUS = 0x3613, CMSG_DF_GET_SYSTEM_INFO = 0x3612, @@ -266,74 +265,76 @@ enum OpcodeClient : uint16 CMSG_DF_SET_ROLES = 0x3614, CMSG_DF_TELEPORT = 0x3616, CMSG_DISCARDED_TIME_SYNC_ACKS = 0x3A3C, - CMSG_DISMISS_CRITTER = 0x34FF, - CMSG_DO_MASTER_LOOT_ROLL = 0x3207, + CMSG_DISMISS_CRITTER = 0x34FC, + CMSG_DO_MASTER_LOOT_ROLL = 0x3210, CMSG_DO_READY_CHECK = 0x3633, - CMSG_DUEL_RESPONSE = 0x34E6, - CMSG_EJECT_PASSENGER = 0x3230, - CMSG_EMOTE = 0x3545, + CMSG_DUEL_RESPONSE = 0x34E3, + CMSG_EJECT_PASSENGER = 0x3239, + CMSG_EMOTE = 0x3543, CMSG_ENABLE_ENCRYPTION_ACK = 0x3767, CMSG_ENABLE_NAGLE = 0x376B, - CMSG_ENABLE_TAXI_NODE = 0x34AC, - CMSG_ENGINE_SURVEY = 0x36E3, + CMSG_ENABLE_TAXI_NODE = 0x34A9, + CMSG_ENGINE_SURVEY = 0x36E4, CMSG_ENUM_CHARACTERS = 0x35E8, - CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36DD, - CMSG_FAR_SIGHT = 0x34EC, - CMSG_GAME_OBJ_REPORT_USE = 0x34F3, - CMSG_GAME_OBJ_USE = 0x34F2, - CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x32CB, - CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x32BC, - CMSG_GARRISON_CHECK_UPGRADEABLE = 0x330E, - CMSG_GARRISON_COMPLETE_MISSION = 0x3301, - CMSG_GARRISON_GENERATE_RECRUITS = 0x32CE, - CMSG_GARRISON_GET_BUILDING_LANDMARKS = 0x32DC, - CMSG_GARRISON_GET_MISSION_REWARD = 0x3334, - CMSG_GARRISON_MISSION_BONUS_ROLL = 0x3303, - CMSG_GARRISON_PURCHASE_BUILDING = 0x32B8, - CMSG_GARRISON_RECRUIT_FOLLOWER = 0x32D0, - CMSG_GARRISON_REMOVE_FOLLOWER = 0x32F8, - CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x32CC, - CMSG_GARRISON_RENAME_FOLLOWER = 0x32CD, - CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x32B7, - CMSG_GARRISON_REQUEST_CLASS_SPEC_CATEGORY_INFO = 0x32D5, - CMSG_GARRISON_REQUEST_LANDING_PAGE_SHIPMENT_INFO = 0x32DF, - CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x32DE, - CMSG_GARRISON_RESEARCH_TALENT = 0x32D1, - CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x32B9, - CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x32C9, - CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x32C5, - CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x32CF, - CMSG_GARRISON_START_MISSION = 0x3300, - CMSG_GARRISON_SWAP_BUILDINGS = 0x32BD, + CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT = 0x36DE, + CMSG_FAR_SIGHT = 0x34E9, + CMSG_GAME_EVENT_DEBUG_DISABLE = 0x31B0, + CMSG_GAME_EVENT_DEBUG_ENABLE = 0x31AF, + CMSG_GAME_OBJ_REPORT_USE = 0x34F0, + CMSG_GAME_OBJ_USE = 0x34EF, + CMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING = 0x32DA, + CMSG_GARRISON_CANCEL_CONSTRUCTION = 0x32CB, + CMSG_GARRISON_CHECK_UPGRADEABLE = 0x331D, + CMSG_GARRISON_COMPLETE_MISSION = 0x3310, + CMSG_GARRISON_GENERATE_RECRUITS = 0x32DD, + CMSG_GARRISON_GET_BUILDING_LANDMARKS = 0x32EB, + CMSG_GARRISON_GET_MISSION_REWARD = 0x3341, + CMSG_GARRISON_MISSION_BONUS_ROLL = 0x3312, + CMSG_GARRISON_PURCHASE_BUILDING = 0x32C7, + CMSG_GARRISON_RECRUIT_FOLLOWER = 0x32DF, + CMSG_GARRISON_REMOVE_FOLLOWER = 0x3307, + CMSG_GARRISON_REMOVE_FOLLOWER_FROM_BUILDING = 0x32DB, + CMSG_GARRISON_RENAME_FOLLOWER = 0x32DC, + CMSG_GARRISON_REQUEST_BLUEPRINT_AND_SPECIALIZATION_DATA = 0x32C6, + CMSG_GARRISON_REQUEST_CLASS_SPEC_CATEGORY_INFO = 0x32E4, + CMSG_GARRISON_REQUEST_LANDING_PAGE_SHIPMENT_INFO = 0x32EE, + CMSG_GARRISON_REQUEST_SHIPMENT_INFO = 0x32ED, + CMSG_GARRISON_RESEARCH_TALENT = 0x32E0, + CMSG_GARRISON_SET_BUILDING_ACTIVE = 0x32C8, + CMSG_GARRISON_SET_FOLLOWER_FAVORITE = 0x32D8, + CMSG_GARRISON_SET_FOLLOWER_INACTIVE = 0x32D4, + CMSG_GARRISON_SET_RECRUITMENT_PREFERENCES = 0x32DE, + CMSG_GARRISON_START_MISSION = 0x330F, + CMSG_GARRISON_SWAP_BUILDINGS = 0x32CC, CMSG_GENERATE_RANDOM_CHARACTER_NAME = 0x35E7, + CMSG_GET_ACCOUNT_CHARACTER_LIST = 0x36B7, CMSG_GET_CHALLENGE_MODE_REWARDS = 0x3683, - CMSG_GET_GARRISON_INFO = 0x32B2, - CMSG_GET_ITEM_PURCHASE_DATA = 0x3533, - CMSG_GET_MIRROR_IMAGE_DATA = 0x3289, + CMSG_GET_GARRISON_INFO = 0x32C1, + CMSG_GET_ITEM_PURCHASE_DATA = 0x3531, + CMSG_GET_MIRROR_IMAGE_DATA = 0x3296, CMSG_GET_PVP_OPTIONS_ENABLED = 0x35EE, - CMSG_GET_REMAINING_GAME_TIME = 0x36EC, - CMSG_GET_TROPHY_LIST = 0x32F1, - CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36DF, - CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x3692, - CMSG_GM_TICKET_GET_CASE_STATUS = 0x3691, - CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x3690, - CMSG_GOSSIP_SELECT_OPTION = 0x3497, - CMSG_GRANT_LEVEL = 0x34FB, + CMSG_GET_REMAINING_GAME_TIME = 0x36ED, + CMSG_GET_TROPHY_LIST = 0x3300, + CMSG_GET_UNDELETE_CHARACTER_COOLDOWN_STATUS = 0x36E0, + CMSG_GM_TICKET_ACKNOWLEDGE_SURVEY = 0x3693, + CMSG_GM_TICKET_GET_CASE_STATUS = 0x3692, + CMSG_GM_TICKET_GET_SYSTEM_STATUS = 0x3691, + CMSG_GOSSIP_SELECT_OPTION = 0x3494, + CMSG_GRANT_LEVEL = 0x34F8, CMSG_GUILD_ADD_BATTLENET_FRIEND = 0x308D, CMSG_GUILD_ADD_RANK = 0x3064, CMSG_GUILD_ASSIGN_MEMBER_RANK = 0x305F, CMSG_GUILD_AUTO_DECLINE_INVITATION = 0x3061, - CMSG_GUILD_BANK_ACTIVATE = 0x34B9, - CMSG_GUILD_BANK_BUY_TAB = 0x34C8, - CMSG_GUILD_BANK_DEPOSIT_MONEY = 0x34CA, + CMSG_GUILD_BANK_ACTIVATE = 0x34B6, + CMSG_GUILD_BANK_BUY_TAB = 0x34C4, + CMSG_GUILD_BANK_DEPOSIT_MONEY = 0x34C6, CMSG_GUILD_BANK_LOG_QUERY = 0x3082, - CMSG_GUILD_BANK_QUERY_TAB = 0x34C7, + CMSG_GUILD_BANK_QUERY_TAB = 0x34C3, CMSG_GUILD_BANK_REMAINING_WITHDRAW_MONEY_QUERY = 0x3083, CMSG_GUILD_BANK_SET_TAB_TEXT = 0x3086, - CMSG_GUILD_BANK_SWAP_ITEMS = 0x34BA, CMSG_GUILD_BANK_TEXT_QUERY = 0x3087, - CMSG_GUILD_BANK_UPDATE_TAB = 0x34C9, - CMSG_GUILD_BANK_WITHDRAW_MONEY = 0x34CB, + CMSG_GUILD_BANK_UPDATE_TAB = 0x34C5, + CMSG_GUILD_BANK_WITHDRAW_MONEY = 0x34C7, CMSG_GUILD_CHALLENGE_UPDATE_REQUEST = 0x307B, CMSG_GUILD_CHANGE_NAME_REQUEST = 0x307E, CMSG_GUILD_DECLINE_INVITATION = 0x3060, @@ -358,40 +359,41 @@ enum OpcodeClient : uint16 CMSG_GUILD_REPLACE_GUILD_MASTER = 0x3088, CMSG_GUILD_SET_ACHIEVEMENT_TRACKING = 0x306F, CMSG_GUILD_SET_FOCUSED_ACHIEVEMENT = 0x3070, - CMSG_GUILD_SET_GUILD_MASTER = 0x36C5, + CMSG_GUILD_SET_GUILD_MASTER = 0x36C6, CMSG_GUILD_SET_MEMBER_NOTE = 0x3072, CMSG_GUILD_SET_RANK_PERMISSIONS = 0x3067, CMSG_GUILD_SHIFT_RANK = 0x3066, CMSG_GUILD_UPDATE_INFO_TEXT = 0x3075, CMSG_GUILD_UPDATE_MOTD_TEXT = 0x3074, - CMSG_HEARTH_AND_RESURRECT = 0x350C, + CMSG_HEARTH_AND_RESURRECT = 0x3509, CMSG_HOTFIX_REQUEST = 0x35E5, CMSG_IGNORE_TRADE = 0x3159, CMSG_INITIATE_ROLE_POLL = 0x35DA, CMSG_INITIATE_TRADE = 0x3156, - CMSG_INSPECT = 0x352D, - CMSG_INSPECT_PVP = 0x36A1, - CMSG_INSTANCE_LOCK_RESPONSE = 0x3511, - CMSG_ITEM_PURCHASE_REFUND = 0x3534, - CMSG_ITEM_TEXT_QUERY = 0x330F, - CMSG_JOIN_PET_BATTLE_QUEUE = 0x31D4, - CMSG_JOIN_RATED_BATTLEGROUND = 0x3176, + CMSG_INSPECT = 0x352B, + CMSG_INSPECT_PVP = 0x36A2, + CMSG_INSTANCE_LOCK_RESPONSE = 0x350E, + CMSG_ISLAND_QUEUE = 0x3387, + CMSG_ITEM_PURCHASE_REFUND = 0x3532, + CMSG_ITEM_TEXT_QUERY = 0x331E, + CMSG_JOIN_PET_BATTLE_QUEUE = 0x31DC, + CMSG_JOIN_RATED_BATTLEGROUND = 0x3177, CMSG_KEEP_ALIVE = 0x367F, - CMSG_KEYBOUND_OVERRIDE = 0x3219, - CMSG_LEARN_PVP_TALENTS = 0x3557, - CMSG_LEARN_TALENTS = 0x3556, + CMSG_KEYBOUND_OVERRIDE = 0x3222, + CMSG_LEARN_PVP_TALENTS = 0x3556, + CMSG_LEARN_TALENTS = 0x3554, CMSG_LEAVE_GROUP = 0x3649, - CMSG_LEAVE_PET_BATTLE_QUEUE = 0x31D5, + CMSG_LEAVE_PET_BATTLE_QUEUE = 0x31DD, CMSG_LFG_LIST_APPLY_TO_GROUP = 0x360C, CMSG_LFG_LIST_CANCEL_APPLICATION = 0x360D, CMSG_LFG_LIST_DECLINE_APPLICANT = 0x360E, CMSG_LFG_LIST_GET_STATUS = 0x360A, CMSG_LFG_LIST_INVITE_APPLICANT = 0x360F, CMSG_LFG_LIST_INVITE_RESPONSE = 0x3610, - CMSG_LFG_LIST_JOIN = 0x3345, + CMSG_LFG_LIST_JOIN = 0x3359, CMSG_LFG_LIST_LEAVE = 0x3609, CMSG_LFG_LIST_SEARCH = 0x360B, - CMSG_LFG_LIST_UPDATE_REQUEST = 0x3346, + CMSG_LFG_LIST_UPDATE_REQUEST = 0x335A, CMSG_LF_GUILD_ADD_RECRUIT = 0x361B, CMSG_LF_GUILD_BROWSE = 0x361D, CMSG_LF_GUILD_DECLINE_RECRUIT = 0x3078, @@ -400,37 +402,38 @@ enum OpcodeClient : uint16 CMSG_LF_GUILD_GET_RECRUITS = 0x3077, CMSG_LF_GUILD_REMOVE_RECRUIT = 0x307A, CMSG_LF_GUILD_SET_GUILD_POST = 0x361C, - CMSG_LIST_INVENTORY = 0x34A4, - CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x36B9, - CMSG_LIVE_REGION_CHARACTER_COPY = 0x36B8, - CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x36B7, + CMSG_LIST_INVENTORY = 0x34A1, + CMSG_LIVE_REGION_ACCOUNT_RESTORE = 0x36BA, + CMSG_LIVE_REGION_CHARACTER_COPY = 0x36B9, + CMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST = 0x36B8, CMSG_LOADING_SCREEN_NOTIFY = 0x35F8, - CMSG_LOAD_SELECTED_TROPHY = 0x32F2, - CMSG_LOGOUT_CANCEL = 0x34DC, - CMSG_LOGOUT_INSTANT = 0x34DD, - CMSG_LOGOUT_REQUEST = 0x34DB, + CMSG_LOAD_SELECTED_TROPHY = 0x3301, + CMSG_LOGOUT_CANCEL = 0x34D9, + CMSG_LOGOUT_INSTANT = 0x34DA, + CMSG_LOGOUT_REQUEST = 0x34D7, CMSG_LOG_DISCONNECT = 0x3769, CMSG_LOG_STREAMING_ERROR = 0x376D, - CMSG_LOOT_ITEM = 0x3205, - CMSG_LOOT_MONEY = 0x3204, - CMSG_LOOT_RELEASE = 0x3209, - CMSG_LOOT_ROLL = 0x320A, - CMSG_LOOT_UNIT = 0x3203, - CMSG_LOW_LEVEL_RAID1 = 0x369F, - CMSG_LOW_LEVEL_RAID2 = 0x3518, - CMSG_MAIL_CREATE_TEXT_ITEM = 0x353F, - CMSG_MAIL_DELETE = 0x321B, - CMSG_MAIL_GET_LIST = 0x353A, - CMSG_MAIL_MARK_AS_READ = 0x353E, + CMSG_LOOT_ITEM = 0x320E, + CMSG_LOOT_MONEY = 0x320D, + CMSG_LOOT_RELEASE = 0x3212, + CMSG_LOOT_ROLL = 0x3213, + CMSG_LOOT_UNIT = 0x320C, + CMSG_LOW_LEVEL_RAID1 = 0x36A0, + CMSG_LOW_LEVEL_RAID2 = 0x3515, + CMSG_MAIL_CREATE_TEXT_ITEM = 0x353D, + CMSG_MAIL_DELETE = 0x3224, + CMSG_MAIL_GET_LIST = 0x3538, + CMSG_MAIL_MARK_AS_READ = 0x353C, CMSG_MAIL_RETURN_TO_SENDER = 0x3655, - CMSG_MAIL_TAKE_ITEM = 0x353C, - CMSG_MAIL_TAKE_MONEY = 0x353B, - CMSG_MASTER_LOOT_ITEM = 0x3206, + CMSG_MAIL_TAKE_ITEM = 0x353A, + CMSG_MAIL_TAKE_MONEY = 0x3539, + CMSG_MAKE_CONTITIONAL_APPEARANCE_PERMANENT = 0x3227, + CMSG_MASTER_LOOT_ITEM = 0x320F, CMSG_MINIMAP_PING = 0x364B, - CMSG_MISSILE_TRAJECTORY_COLLISION = 0x3189, + CMSG_MISSILE_TRAJECTORY_COLLISION = 0x318A, CMSG_MOUNT_CLEAR_FANFARE = 0x312D, CMSG_MOUNT_SET_FAVORITE = 0x3631, - CMSG_MOUNT_SPECIAL_ANIM = 0x3273, + CMSG_MOUNT_SPECIAL_ANIM = 0x3281, CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK = 0x3A12, CMSG_MOVE_CHANGE_TRANSPORT = 0x3A2C, CMSG_MOVE_CHANGE_VEHICLE_SEATS = 0x3A31, @@ -443,6 +446,7 @@ enum OpcodeClient : uint16 CMSG_MOVE_FEATHER_FALL_ACK = 0x3A19, CMSG_MOVE_FORCE_FLIGHT_BACK_SPEED_CHANGE_ACK = 0x3A2B, CMSG_MOVE_FORCE_FLIGHT_SPEED_CHANGE_ACK = 0x3A2A, + CMSG_MOVE_FORCE_MOVEMENT_FORCE_SPEED_CHANGE_ACK = 0x3A3D, CMSG_MOVE_FORCE_PITCH_RATE_CHANGE_ACK = 0x3A2F, CMSG_MOVE_FORCE_ROOT_ACK = 0x3A0B, CMSG_MOVE_FORCE_RUN_BACK_SPEED_CHANGE_ACK = 0x3A09, @@ -492,264 +496,268 @@ enum OpcodeClient : uint16 CMSG_MOVE_TIME_SKIPPED = 0x3A18, CMSG_MOVE_TOGGLE_COLLISION_CHEAT = 0x3A05, CMSG_MOVE_WATER_WALK_ACK = 0x3A1A, - CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x31CA, - CMSG_NEXT_CINEMATIC_CAMERA = 0x3548, - CMSG_OBJECT_UPDATE_FAILED = 0x317F, - CMSG_OBJECT_UPDATE_RESCUED = 0x3180, - CMSG_OFFER_PETITION = 0x36AF, - CMSG_OPENING_CINEMATIC = 0x3547, - CMSG_OPEN_ITEM = 0x3310, - CMSG_OPEN_MISSION_NPC = 0x32D7, - CMSG_OPEN_SHIPMENT_NPC = 0x32DD, - CMSG_OPEN_TRADESKILL_NPC = 0x32E8, - CMSG_OPT_OUT_OF_LOOT = 0x34FA, + CMSG_NEUTRAL_PLAYER_SELECT_FACTION = 0x31D2, + CMSG_NEXT_CINEMATIC_CAMERA = 0x3546, + CMSG_OBJECT_UPDATE_FAILED = 0x3180, + CMSG_OBJECT_UPDATE_RESCUED = 0x3181, + CMSG_OFFER_PETITION = 0x36B0, + CMSG_OPENING_CINEMATIC = 0x3545, + CMSG_OPEN_ITEM = 0x331F, + CMSG_OPEN_MISSION_NPC = 0x32E6, + CMSG_OPEN_SHIPMENT_NPC = 0x32EC, + CMSG_OPEN_TRADESKILL_NPC = 0x32F7, + CMSG_OPT_OUT_OF_LOOT = 0x34F7, CMSG_PARTY_INVITE = 0x3602, CMSG_PARTY_INVITE_RESPONSE = 0x3603, CMSG_PARTY_UNINVITE = 0x3647, - CMSG_PETITION_BUY = 0x34CD, - CMSG_PETITION_RENAME_GUILD = 0x36C6, - CMSG_PETITION_SHOW_LIST = 0x34CC, - CMSG_PETITION_SHOW_SIGNATURES = 0x34CE, - CMSG_PET_ABANDON = 0x3490, - CMSG_PET_ACTION = 0x348E, - CMSG_PET_BATTLE_FINAL_NOTIFY = 0x31D9, + CMSG_PETITION_BUY = 0x34C9, + CMSG_PETITION_RENAME_GUILD = 0x36C7, + CMSG_PETITION_SHOW_LIST = 0x34C8, + CMSG_PETITION_SHOW_SIGNATURES = 0x34CA, + CMSG_PET_ABANDON = 0x348D, + CMSG_PET_ACTION = 0x348B, + CMSG_PET_BATTLE_FINAL_NOTIFY = 0x31E1, CMSG_PET_BATTLE_INPUT = 0x3640, - CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x321A, - CMSG_PET_BATTLE_QUIT_NOTIFY = 0x31D8, + CMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH_RESULT = 0x3223, + CMSG_PET_BATTLE_QUIT_NOTIFY = 0x31E0, CMSG_PET_BATTLE_REPLACE_FRONT_PET = 0x3641, - CMSG_PET_BATTLE_REQUEST_PVP = 0x31D2, - CMSG_PET_BATTLE_REQUEST_UPDATE = 0x31D3, - CMSG_PET_BATTLE_REQUEST_WILD = 0x31D0, - CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x31DA, - CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x31D1, - CMSG_PET_CANCEL_AURA = 0x3491, - CMSG_PET_CAST_SPELL = 0x328D, + CMSG_PET_BATTLE_REQUEST_PVP = 0x31DA, + CMSG_PET_BATTLE_REQUEST_UPDATE = 0x31DB, + CMSG_PET_BATTLE_REQUEST_WILD = 0x31D8, + CMSG_PET_BATTLE_SCRIPT_ERROR_NOTIFY = 0x31E2, + CMSG_PET_BATTLE_WILD_LOCATION_FAIL = 0x31D9, + CMSG_PET_CANCEL_AURA = 0x348E, + CMSG_PET_CAST_SPELL = 0x329A, CMSG_PET_RENAME = 0x3685, - CMSG_PET_SET_ACTION = 0x348D, - CMSG_PET_SPELL_AUTOCAST = 0x3492, - CMSG_PET_STOP_ATTACK = 0x348F, + CMSG_PET_SET_ACTION = 0x348A, + CMSG_PET_SPELL_AUTOCAST = 0x348F, + CMSG_PET_STOP_ATTACK = 0x348C, CMSG_PING = 0x3768, CMSG_PLAYER_LOGIN = 0x35EA, CMSG_PROTOCOL_MISMATCH = 0x376E, - CMSG_PUSH_QUEST_TO_PARTY = 0x34A2, - CMSG_PVP_LOG_DATA = 0x317A, - CMSG_PVP_PRESTIGE_RANK_UP = 0x3332, - CMSG_QUERY_BATTLE_PET_NAME = 0x3268, + CMSG_PUSH_QUEST_TO_PARTY = 0x349F, + CMSG_PVP_LOG_DATA = 0x317B, + CMSG_QUERY_BATTLE_PET_NAME = 0x3276, + CMSG_QUERY_COMMUNITY_NAME = 0x368C, CMSG_QUERY_CORPSE_LOCATION_FROM_CLIENT = 0x3660, CMSG_QUERY_CORPSE_TRANSPORT = 0x3661, - CMSG_QUERY_COUNTDOWN_TIMER = 0x31A4, - CMSG_QUERY_CREATURE = 0x3262, - CMSG_QUERY_GAME_OBJECT = 0x3263, - CMSG_QUERY_GARRISON_CREATURE_NAME = 0x3269, - CMSG_QUERY_GUILD_INFO = 0x368D, - CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x3506, - CMSG_QUERY_NEXT_MAIL_TIME = 0x353D, - CMSG_QUERY_NPC_TEXT = 0x3264, - CMSG_QUERY_PAGE_TEXT = 0x3266, - CMSG_QUERY_PETITION = 0x326A, - CMSG_QUERY_PET_NAME = 0x3267, + CMSG_QUERY_COUNTDOWN_TIMER = 0x31A8, + CMSG_QUERY_CREATURE = 0x3270, + CMSG_QUERY_GAME_OBJECT = 0x3271, + CMSG_QUERY_GARRISON_CREATURE_NAME = 0x3277, + CMSG_QUERY_GUILD_INFO = 0x368E, + CMSG_QUERY_INSPECT_ACHIEVEMENTS = 0x3503, + CMSG_QUERY_NEXT_MAIL_TIME = 0x353B, + CMSG_QUERY_NPC_TEXT = 0x3272, + CMSG_QUERY_PAGE_TEXT = 0x3274, + CMSG_QUERY_PETITION = 0x3278, + CMSG_QUERY_PET_NAME = 0x3275, CMSG_QUERY_PLAYER_NAME = 0x368B, - CMSG_QUERY_QUEST_COMPLETION_NPCS = 0x3173, - CMSG_QUERY_QUEST_INFO = 0x3265, - CMSG_QUERY_QUEST_REWARDS = 0x3336, - CMSG_QUERY_REALM_NAME = 0x368C, + CMSG_QUERY_QUEST_COMPLETION_NPCS = 0x3174, + CMSG_QUERY_QUEST_INFO = 0x3273, + CMSG_QUERY_REALM_NAME = 0x368D, CMSG_QUERY_SCENARIO_POI = 0x3656, - CMSG_QUERY_TIME = 0x34DA, - CMSG_QUERY_VOID_STORAGE = 0x319D, - CMSG_QUEST_CONFIRM_ACCEPT = 0x34A1, - CMSG_QUEST_GIVER_ACCEPT_QUEST = 0x349B, - CMSG_QUEST_GIVER_CHOOSE_REWARD = 0x349D, - CMSG_QUEST_GIVER_COMPLETE_QUEST = 0x349C, - CMSG_QUEST_GIVER_HELLO = 0x3499, - CMSG_QUEST_GIVER_QUERY_QUEST = 0x349A, - CMSG_QUEST_GIVER_REQUEST_REWARD = 0x349E, - CMSG_QUEST_GIVER_STATUS_MULTIPLE_QUERY = 0x34A0, - CMSG_QUEST_GIVER_STATUS_QUERY = 0x349F, - CMSG_QUEST_LOG_REMOVE_QUEST = 0x3532, - CMSG_QUEST_POI_QUERY = 0x36B0, - CMSG_QUEST_PUSH_RESULT = 0x34A3, + CMSG_QUERY_TIME = 0x34D6, + CMSG_QUERY_TREASURE_PICKER = 0x3343, + CMSG_QUERY_VOID_STORAGE = 0x31A1, + CMSG_QUEST_CONFIRM_ACCEPT = 0x349E, + CMSG_QUEST_GIVER_ACCEPT_QUEST = 0x3498, + CMSG_QUEST_GIVER_CHOOSE_REWARD = 0x349A, + CMSG_QUEST_GIVER_COMPLETE_QUEST = 0x3499, + CMSG_QUEST_GIVER_HELLO = 0x3496, + CMSG_QUEST_GIVER_QUERY_QUEST = 0x3497, + CMSG_QUEST_GIVER_REQUEST_REWARD = 0x349B, + CMSG_QUEST_GIVER_STATUS_MULTIPLE_QUERY = 0x349D, + CMSG_QUEST_GIVER_STATUS_QUERY = 0x349C, + CMSG_QUEST_LOG_REMOVE_QUEST = 0x3530, + CMSG_QUEST_POI_QUERY = 0x36B1, + CMSG_QUEST_PUSH_RESULT = 0x34A0, CMSG_QUEUED_MESSAGES_END = 0x376C, - CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x3705, - CMSG_QUICK_JOIN_REQUEST_INVITE = 0x3704, - CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x3703, - CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x3702, - CMSG_RAID_OR_BATTLEGROUND_ENGINE_SURVEY = 0x36E4, + CMSG_QUICK_JOIN_AUTO_ACCEPT_REQUESTS = 0x3709, + CMSG_QUICK_JOIN_REQUEST_INVITE = 0x3708, + CMSG_QUICK_JOIN_RESPOND_TO_INVITE = 0x3707, + CMSG_QUICK_JOIN_SIGNAL_TOAST_DISPLAYED = 0x3706, + CMSG_RAID_OR_BATTLEGROUND_ENGINE_SURVEY = 0x36E5, CMSG_RANDOM_ROLL = 0x3654, CMSG_READY_CHECK_RESPONSE = 0x3634, - CMSG_READ_ITEM = 0x3311, - CMSG_RECLAIM_CORPSE = 0x34DF, - CMSG_RECRUIT_A_FRIEND = 0x36CC, - CMSG_REDEEM_WOW_TOKEN_CONFIRM = 0x36EE, - CMSG_REDEEM_WOW_TOKEN_START = 0x36ED, - CMSG_REMOVE_NEW_ITEM = 0x3339, + CMSG_READ_ITEM = 0x3320, + CMSG_RECLAIM_CORPSE = 0x34DC, + CMSG_RECRUIT_A_FRIEND = 0x36CD, + CMSG_REDEEM_WOW_TOKEN_CONFIRM = 0x36EF, + CMSG_REDEEM_WOW_TOKEN_START = 0x36EE, + CMSG_REMOVE_NEW_ITEM = 0x3346, CMSG_REORDER_CHARACTERS = 0x35E9, - CMSG_REPAIR_ITEM = 0x34F0, - CMSG_REPLACE_TROPHY = 0x32F3, - CMSG_REPOP_REQUEST = 0x352A, - CMSG_REPORT_CLIENT_VARIABLES = 0x36FF, - CMSG_REPORT_ENABLED_ADDONS = 0x36FE, - CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x3700, - CMSG_REPORT_PVP_PLAYER_AFK = 0x34F8, - CMSG_REQUEST_ACCOUNT_DATA = 0x3695, - CMSG_REQUEST_AREA_POI_UPDATE = 0x3338, + CMSG_REPAIR_ITEM = 0x34ED, + CMSG_REPLACE_TROPHY = 0x3302, + CMSG_REPOP_REQUEST = 0x3528, + CMSG_REPORT_CLIENT_VARIABLES = 0x3703, + CMSG_REPORT_ENABLED_ADDONS = 0x3702, + CMSG_REPORT_KEYBINDING_EXECUTION_COUNTS = 0x3704, + CMSG_REPORT_PVP_PLAYER_AFK = 0x34F5, + CMSG_REQUEST_ACCOUNT_DATA = 0x3696, + CMSG_REQUEST_AREA_POI_UPDATE = 0x3345, CMSG_REQUEST_BATTLEFIELD_STATUS = 0x35DC, - CMSG_REQUEST_CATEGORY_COOLDOWNS = 0x317C, - CMSG_REQUEST_CEMETERY_LIST = 0x3174, - CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS = 0x32A4, - CMSG_REQUEST_CONSUMPTION_CONVERSION_INFO = 0x36F8, - CMSG_REQUEST_CROWD_CONTROL_SPELL = 0x352E, - CMSG_REQUEST_FORCED_REACTIONS = 0x31FE, - CMSG_REQUEST_GUILD_PARTY_STATE = 0x31A3, - CMSG_REQUEST_GUILD_REWARDS_LIST = 0x31A2, - CMSG_REQUEST_HONOR_STATS = 0x3179, - CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x3295, + CMSG_REQUEST_CATEGORY_COOLDOWNS = 0x317D, + CMSG_REQUEST_CEMETERY_LIST = 0x3175, + CMSG_REQUEST_CHALLENGE_MODE_AFFIXES = 0x3205, + CMSG_REQUEST_CONQUEST_FORMULA_CONSTANTS = 0x32B3, + CMSG_REQUEST_CONSUMPTION_CONVERSION_INFO = 0x36FC, + CMSG_REQUEST_CROWD_CONTROL_SPELL = 0x352C, + CMSG_REQUEST_FORCED_REACTIONS = 0x3207, + CMSG_REQUEST_GUILD_PARTY_STATE = 0x31A7, + CMSG_REQUEST_GUILD_REWARDS_LIST = 0x31A6, + CMSG_REQUEST_HONOR_STATS = 0x317A, + CMSG_REQUEST_LFG_LIST_BLACKLIST = 0x32A3, CMSG_REQUEST_PARTY_JOIN_UPDATES = 0x35F7, CMSG_REQUEST_PARTY_MEMBER_STATS = 0x3653, - CMSG_REQUEST_PET_INFO = 0x3493, - CMSG_REQUEST_PLAYED_TIME = 0x326D, - CMSG_REQUEST_PVP_BRAWL_INFO = 0x3191, - CMSG_REQUEST_PVP_REWARDS = 0x3190, - CMSG_REQUEST_RAID_INFO = 0x36C7, + CMSG_REQUEST_PET_INFO = 0x3490, + CMSG_REQUEST_PLAYED_TIME = 0x327B, + CMSG_REQUEST_PVP_BRAWL_INFO = 0x3195, + CMSG_REQUEST_PVP_REWARDS = 0x3194, + CMSG_REQUEST_RAID_INFO = 0x36C8, CMSG_REQUEST_RATED_BATTLEFIELD_INFO = 0x35E3, CMSG_REQUEST_RESEARCH_HISTORY = 0x3167, - CMSG_REQUEST_STABLED_PETS = 0x3494, - CMSG_REQUEST_VEHICLE_EXIT = 0x322B, - CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x322D, - CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x322C, - CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x322E, - CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3337, - CMSG_REQUEST_WOW_TOKEN_MARKET_PRICE = 0x36E6, - CMSG_RESET_CHALLENGE_MODE = 0x31FB, - CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x31FC, + CMSG_REQUEST_STABLED_PETS = 0x3491, + CMSG_REQUEST_VEHICLE_EXIT = 0x3234, + CMSG_REQUEST_VEHICLE_NEXT_SEAT = 0x3236, + CMSG_REQUEST_VEHICLE_PREV_SEAT = 0x3235, + CMSG_REQUEST_VEHICLE_SWITCH_SEAT = 0x3237, + CMSG_REQUEST_WORLD_QUEST_UPDATE = 0x3344, + CMSG_REQUEST_WOW_TOKEN_MARKET_PRICE = 0x36E7, + CMSG_RESET_CHALLENGE_MODE = 0x3203, + CMSG_RESET_CHALLENGE_MODE_CHEAT = 0x3204, CMSG_RESET_INSTANCES = 0x3668, CMSG_RESURRECT_RESPONSE = 0x3684, - CMSG_REVERT_MONUMENT_APPEARANCE = 0x32F5, - CMSG_RIDE_VEHICLE_INTERACT = 0x322F, - CMSG_SAVE_CUF_PROFILES = 0x318A, - CMSG_SAVE_EQUIPMENT_SET = 0x350F, - CMSG_SAVE_GUILD_EMBLEM = 0x3299, - CMSG_SCENE_PLAYBACK_CANCELED = 0x3216, - CMSG_SCENE_PLAYBACK_COMPLETE = 0x3215, - CMSG_SCENE_TRIGGER_EVENT = 0x3217, - CMSG_SELF_RES = 0x3535, - CMSG_SELL_ITEM = 0x34A5, - CMSG_SELL_WOW_TOKEN_CONFIRM = 0x36E8, - CMSG_SELL_WOW_TOKEN_START = 0x36E7, - CMSG_SEND_CONTACT_LIST = 0x36CE, + CMSG_REVERT_MONUMENT_APPEARANCE = 0x3304, + CMSG_RIDE_VEHICLE_INTERACT = 0x3238, + CMSG_SAVE_CUF_PROFILES = 0x318B, + CMSG_SAVE_EQUIPMENT_SET = 0x350C, + CMSG_SAVE_GUILD_EMBLEM = 0x32A7, + CMSG_SCENE_PLAYBACK_CANCELED = 0x321F, + CMSG_SCENE_PLAYBACK_COMPLETE = 0x321E, + CMSG_SCENE_TRIGGER_EVENT = 0x3220, + CMSG_SELF_RES = 0x3533, + CMSG_SELL_ITEM = 0x34A2, + CMSG_SELL_WOW_TOKEN_CONFIRM = 0x36E9, + CMSG_SELL_WOW_TOKEN_START = 0x36E8, + CMSG_SEND_CONTACT_LIST = 0x36CF, CMSG_SEND_MAIL = 0x35FA, CMSG_SEND_SOR_REQUEST_VIA_ADDRESS = 0x3620, - CMSG_SEND_TEXT_EMOTE = 0x348A, - CMSG_SET_ACHIEVEMENTS_HIDDEN = 0x321C, - CMSG_SET_ACTION_BAR_TOGGLES = 0x3536, + CMSG_SEND_TEXT_EMOTE = 0x3488, + CMSG_SET_ACHIEVEMENTS_HIDDEN = 0x3225, + CMSG_SET_ACTION_BAR_TOGGLES = 0x3534, CMSG_SET_ACTION_BUTTON = 0x3635, CMSG_SET_ACTIVE_MOVER = 0x3A37, - CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32A5, + CMSG_SET_ADVANCED_COMBAT_LOGGING = 0x32B4, CMSG_SET_ASSISTANT_LEADER = 0x364F, - CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x3314, - CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3315, - CMSG_SET_BANK_BAG_SLOT_FLAG = 0x3313, - CMSG_SET_CONTACT_NOTES = 0x36D1, + CMSG_SET_BACKPACK_AUTOSORT_DISABLED = 0x3323, + CMSG_SET_BANK_AUTOSORT_DISABLED = 0x3324, + CMSG_SET_CONTACT_NOTES = 0x36D2, CMSG_SET_CURRENCY_FLAGS = 0x3169, - CMSG_SET_DIFFICULTY_ID = 0x3218, + CMSG_SET_DIFFICULTY_ID = 0x3221, CMSG_SET_DUNGEON_DIFFICULTY = 0x3682, CMSG_SET_EVERYONE_IS_ASSISTANT = 0x3617, - CMSG_SET_FACTION_AT_WAR = 0x34E2, - CMSG_SET_FACTION_INACTIVE = 0x34E4, - CMSG_SET_FACTION_NOT_AT_WAR = 0x34E3, - CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x3317, - CMSG_SET_LFG_BONUS_FACTION_ID = 0x3294, + CMSG_SET_FACTION_AT_WAR = 0x34DF, + CMSG_SET_FACTION_INACTIVE = 0x34E1, + CMSG_SET_FACTION_NOT_AT_WAR = 0x34E0, + CMSG_SET_GAME_EVENT_DEBUG_VIEW_STATE = 0x31B8, + CMSG_SET_INSERT_ITEMS_LEFT_TO_RIGHT = 0x3326, + CMSG_SET_LFG_BONUS_FACTION_ID = 0x32A2, CMSG_SET_LOOT_METHOD = 0x3648, - CMSG_SET_LOOT_SPECIALIZATION = 0x3543, + CMSG_SET_LOOT_SPECIALIZATION = 0x3541, CMSG_SET_PARTY_ASSIGNMENT = 0x3651, CMSG_SET_PARTY_LEADER = 0x364A, CMSG_SET_PET_SLOT = 0x3168, CMSG_SET_PLAYER_DECLINED_NAMES = 0x368A, - CMSG_SET_PREFERRED_CEMETERY = 0x3175, - CMSG_SET_PVP = 0x329D, - CMSG_SET_RAID_DIFFICULTY = 0x36DB, + CMSG_SET_PREFERRED_CEMETERY = 0x3176, + CMSG_SET_PVP = 0x32AB, + CMSG_SET_RAID_DIFFICULTY = 0x36DC, CMSG_SET_ROLE = 0x35D9, CMSG_SET_SAVED_INSTANCE_EXTEND = 0x3688, - CMSG_SET_SELECTION = 0x352C, - CMSG_SET_SHEATHED = 0x348B, - CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3316, - CMSG_SET_TAXI_BENCHMARK_MODE = 0x34F7, - CMSG_SET_TITLE = 0x3271, + CMSG_SET_SELECTION = 0x352A, + CMSG_SET_SHEATHED = 0x3489, + CMSG_SET_SORT_BAGS_RIGHT_TO_LEFT = 0x3325, + CMSG_SET_TAXI_BENCHMARK_MODE = 0x34F4, + CMSG_SET_TITLE = 0x327F, CMSG_SET_TRADE_CURRENCY = 0x3160, CMSG_SET_TRADE_GOLD = 0x315F, CMSG_SET_TRADE_ITEM = 0x315D, - CMSG_SET_USING_PARTY_GARRISON = 0x32D9, - CMSG_SET_WATCHED_FACTION = 0x34E5, - CMSG_SHOW_TRADE_SKILL = 0x36BF, - CMSG_SIGN_PETITION = 0x3537, + CMSG_SET_USING_PARTY_GARRISON = 0x32E8, + CMSG_SET_WAR_MODE = 0x32AC, + CMSG_SET_WATCHED_FACTION = 0x34E2, + CMSG_SHOW_TRADE_SKILL = 0x36C0, + CMSG_SIGN_PETITION = 0x3535, CMSG_SILENCE_PARTY_TALKER = 0x3652, - CMSG_SOCKET_GEMS = 0x34EF, - CMSG_SORT_BAGS = 0x3318, - CMSG_SORT_BANK_BAGS = 0x3319, - CMSG_SORT_REAGENT_BANK_BAGS = 0x331A, - CMSG_SPELL_CLICK = 0x3498, - CMSG_SPIRIT_HEALER_ACTIVATE = 0x34B2, + CMSG_SOCKET_GEMS = 0x34EC, + CMSG_SORT_BAGS = 0x3327, + CMSG_SORT_BANK_BAGS = 0x3328, + CMSG_SORT_REAGENT_BANK_BAGS = 0x3329, + CMSG_SPELL_CLICK = 0x3495, + CMSG_SPIRIT_HEALER_ACTIVATE = 0x34AF, CMSG_SPLIT_ITEM = 0x399E, - CMSG_STAND_STATE_CHANGE = 0x3188, - CMSG_START_CHALLENGE_MODE = 0x354E, + CMSG_STAND_STATE_CHANGE = 0x3189, + CMSG_START_CHALLENGE_MODE = 0x354C, CMSG_START_SPECTATOR_WAR_GAME = 0x35DF, CMSG_START_WAR_GAME = 0x35DE, CMSG_SUMMON_RESPONSE = 0x366A, CMSG_SUPPORT_TICKET_SUBMIT_BUG = 0x3645, CMSG_SUPPORT_TICKET_SUBMIT_COMPLAINT = 0x3644, CMSG_SUPPORT_TICKET_SUBMIT_SUGGESTION = 0x3646, - CMSG_SURRENDER_ARENA = 0x3172, + CMSG_SURRENDER_ARENA = 0x3173, CMSG_SUSPEND_COMMS_ACK = 0x3764, CMSG_SUSPEND_TOKEN_RESPONSE = 0x376A, CMSG_SWAP_INV_ITEM = 0x399D, CMSG_SWAP_ITEM = 0x399C, CMSG_SWAP_SUB_GROUPS = 0x364D, - CMSG_SWAP_VOID_ITEM = 0x319F, - CMSG_TABARD_VENDOR_ACTIVATE = 0x329A, - CMSG_TALK_TO_GOSSIP = 0x3495, - CMSG_TAXI_NODE_STATUS_QUERY = 0x34AB, - CMSG_TAXI_QUERY_AVAILABLE_NODES = 0x34AD, - CMSG_TAXI_REQUEST_EARLY_LANDING = 0x34AF, + CMSG_SWAP_VOID_ITEM = 0x31A3, + CMSG_TABARD_VENDOR_ACTIVATE = 0x32A8, + CMSG_TALK_TO_GOSSIP = 0x3492, + CMSG_TAXI_NODE_STATUS_QUERY = 0x34A8, + CMSG_TAXI_QUERY_AVAILABLE_NODES = 0x34AA, + CMSG_TAXI_REQUEST_EARLY_LANDING = 0x34AC, CMSG_TIME_ADJUSTMENT_RESPONSE = 0x3A3B, CMSG_TIME_SYNC_RESPONSE = 0x3A38, CMSG_TIME_SYNC_RESPONSE_DROPPED = 0x3A3A, CMSG_TIME_SYNC_RESPONSE_FAILED = 0x3A39, CMSG_TOGGLE_DIFFICULTY = 0x3657, - CMSG_TOGGLE_PVP = 0x329C, - CMSG_TOTEM_DESTROYED = 0x34FE, - CMSG_TRADE_SKILL_SET_FAVORITE = 0x3335, - CMSG_TRAINER_BUY_SPELL = 0x34B1, - CMSG_TRAINER_LIST = 0x34B0, - CMSG_TRANSMOGRIFY_ITEMS = 0x3192, - CMSG_TURN_IN_PETITION = 0x3539, - CMSG_TUTORIAL = 0x36DC, + CMSG_TOGGLE_PVP = 0x32AA, + CMSG_TOTEM_DESTROYED = 0x34FB, + CMSG_TRADE_SKILL_SET_FAVORITE = 0x3342, + CMSG_TRAINER_BUY_SPELL = 0x34AE, + CMSG_TRAINER_LIST = 0x34AD, + CMSG_TRANSMOGRIFY_ITEMS = 0x3196, + CMSG_TURN_IN_PETITION = 0x3537, + CMSG_TUTORIAL = 0x36DD, CMSG_TWITTER_CHECK_STATUS = 0x312A, CMSG_TWITTER_CONNECT = 0x3127, CMSG_TWITTER_DISCONNECT = 0x312B, - CMSG_TWITTER_POST = 0x331C, - CMSG_UI_TIME_REQUEST = 0x369A, + CMSG_TWITTER_POST = 0x332B, + CMSG_UI_TIME_REQUEST = 0x369B, CMSG_UNACCEPT_TRADE = 0x315B, - CMSG_UNDELETE_CHARACTER = 0x36DE, - CMSG_UNLEARN_SKILL = 0x34E9, - CMSG_UNLEARN_SPECIALIZATION = 0x31A0, - CMSG_UNLOCK_VOID_STORAGE = 0x319C, - CMSG_UPDATE_ACCOUNT_DATA = 0x3696, - CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x3290, + CMSG_UNDELETE_CHARACTER = 0x36DF, + CMSG_UNLEARN_SKILL = 0x34E6, + CMSG_UNLEARN_SPECIALIZATION = 0x31A4, + CMSG_UNLOCK_VOID_STORAGE = 0x31A0, + CMSG_UPDATE_ACCOUNT_DATA = 0x3697, + CMSG_UPDATE_AREA_TRIGGER_VISUAL = 0x329D, CMSG_UPDATE_CLIENT_SETTINGS = 0x3664, CMSG_UPDATE_MISSILE_TRAJECTORY = 0x3A3E, CMSG_UPDATE_RAID_TARGET = 0x3650, - CMSG_UPDATE_SPELL_VISUAL = 0x328F, - CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36F4, - CMSG_UPDATE_WOW_TOKEN_AUCTIONABLE_LIST = 0x36EF, - CMSG_UPDATE_WOW_TOKEN_COUNT = 0x36E5, - CMSG_UPGRADE_GARRISON = 0x32AD, - CMSG_UPGRADE_ITEM = 0x321D, - CMSG_USED_FOLLOW = 0x3185, - CMSG_USE_CRITTER_ITEM = 0x3235, + CMSG_UPDATE_SPELL_VISUAL = 0x329C, + CMSG_UPDATE_VAS_PURCHASE_STATES = 0x36F5, + CMSG_UPDATE_WOW_TOKEN_AUCTIONABLE_LIST = 0x36F0, + CMSG_UPDATE_WOW_TOKEN_COUNT = 0x36E6, + CMSG_UPGRADE_GARRISON = 0x32BC, + CMSG_UPGRADE_ITEM = 0x3226, + CMSG_USED_FOLLOW = 0x3186, + CMSG_USE_CRITTER_ITEM = 0x323E, CMSG_USE_EQUIPMENT_SET = 0x3995, - CMSG_USE_ITEM = 0x328A, - CMSG_USE_TOY = 0x328C, - CMSG_VIOLENCE_LEVEL = 0x3183, - CMSG_VOID_STORAGE_TRANSFER = 0x319E, + CMSG_USE_ITEM = 0x3297, + CMSG_USE_TOY = 0x3299, + CMSG_VIOLENCE_LEVEL = 0x3184, + CMSG_VOICE_CHAT_JOIN_CHANNEL = 0x3712, + CMSG_VOICE_CHAT_LOGIN = 0x3711, + CMSG_VOID_STORAGE_TRANSFER = 0x31A2, CMSG_WARDEN_DATA = 0x35EC, CMSG_WHO = 0x3681, CMSG_WHO_IS = 0x3680, @@ -764,63 +772,65 @@ enum OpcodeClient : uint16 enum OpcodeServer : uint16 { SMSG_ABORT_NEW_WORLD = 0x25AD, - SMSG_ACCOUNT_CRITERIA_UPDATE = 0x2652, - SMSG_ACCOUNT_DATA_TIMES = 0x2749, + SMSG_ACCOUNT_CRITERIA_UPDATE = 0x2654, + SMSG_ACCOUNT_DATA_TIMES = 0x2752, SMSG_ACCOUNT_MOUNT_UPDATE = 0x25C3, SMSG_ACCOUNT_TOYS_UPDATE = 0x25C4, - SMSG_ACHIEVEMENT_DELETED = 0x271E, - SMSG_ACHIEVEMENT_EARNED = 0x2660, - SMSG_ACTIVATE_TAXI_REPLY = 0x26A6, + SMSG_ACHIEVEMENT_DELETED = 0x2727, + SMSG_ACHIEVEMENT_EARNED = 0x2662, + SMSG_ACTIVATE_TAXI_REPLY = 0x26AB, SMSG_ACTIVE_GLYPHS = 0x2C53, - SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x265A, + SMSG_ADD_BATTLENET_FRIEND_RESPONSE = 0x265C, SMSG_ADD_ITEM_PASSIVE = 0x25BF, - SMSG_ADD_LOSS_OF_CONTROL = 0x2696, - SMSG_ADD_RUNE_POWER = 0x26E2, + SMSG_ADD_LOSS_OF_CONTROL = 0x269B, + SMSG_ADD_RUNE_POWER = 0x26EA, SMSG_ADJUST_SPLINE_DURATION = 0x25E8, - SMSG_AE_LOOT_TARGETS = 0x262C, - SMSG_AE_LOOT_TARGET_ACK = 0x262D, - SMSG_AI_REACTION = 0x26DF, + SMSG_ADVENTURE_MAP_POI_QUERY_RESPONSE = 0x2845, + SMSG_AE_LOOT_TARGETS = 0x262E, + SMSG_AE_LOOT_TARGET_ACK = 0x262F, + SMSG_AI_REACTION = 0x26E7, SMSG_ALL_ACCOUNT_CRITERIA = 0x2570, SMSG_ALL_ACHIEVEMENT_DATA = 0x256F, SMSG_ALL_GUILD_ACHIEVEMENTS = 0x29B8, SMSG_ARCHAEOLOGY_SURVERY_CAST = 0x2586, - SMSG_AREA_POI_UPDATE = 0x2848, - SMSG_AREA_SPIRIT_HEALER_TIME = 0x2782, - SMSG_AREA_TRIGGER_DENIED = 0x269D, - SMSG_AREA_TRIGGER_NO_CORPSE = 0x2755, - SMSG_AREA_TRIGGER_RE_PATH = 0x263F, - SMSG_AREA_TRIGGER_RE_SHAPE = 0x263C, - SMSG_ARENA_CROWD_CONTROL_SPELLS = 0x264E, - SMSG_ARENA_ERROR = 0x2711, - SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2665, - SMSG_ARTIFACT_FORGE_OPENED = 0x27E2, - SMSG_ARTIFACT_KNOWLEDGE = 0x27EA, - SMSG_ARTIFACT_RESPEC_CONFIRM = 0x27E5, - SMSG_ARTIFACT_TRAITS_REFUNDED = 0x27E6, - SMSG_ARTIFACT_XP_GAIN = 0x282D, - SMSG_ATTACKER_STATE_UPDATE = 0x27CF, - SMSG_ATTACK_START = 0x266D, - SMSG_ATTACK_STOP = 0x266E, - SMSG_ATTACK_SWING_ERROR = 0x2733, - SMSG_ATTACK_SWING_LANDED_LOG = 0x2734, - SMSG_AUCTION_CLOSED_NOTIFICATION = 0x2728, - SMSG_AUCTION_COMMAND_RESULT = 0x2725, - SMSG_AUCTION_HELLO_RESPONSE = 0x2723, - SMSG_AUCTION_LIST_BIDDER_ITEMS_RESULT = 0x272C, - SMSG_AUCTION_LIST_ITEMS_RESULT = 0x272A, - SMSG_AUCTION_LIST_OWNER_ITEMS_RESULT = 0x272B, - SMSG_AUCTION_LIST_PENDING_SALES_RESULT = 0x272D, - SMSG_AUCTION_OUTBID_NOTIFICATION = 0x2727, - SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x2729, - SMSG_AUCTION_REPLICATE_RESPONSE = 0x2724, - SMSG_AUCTION_WON_NOTIFICATION = 0x2726, + SMSG_AREA_POI_UPDATE = 0x2852, + SMSG_AREA_SPIRIT_HEALER_TIME = 0x278A, + SMSG_AREA_TRIGGER_DENIED = 0x26A2, + SMSG_AREA_TRIGGER_NO_CORPSE = 0x275E, + SMSG_AREA_TRIGGER_RE_PATH = 0x263E, + SMSG_AREA_TRIGGER_RE_SHAPE = 0x2642, + SMSG_ARENA_CROWD_CONTROL_SPELLS = 0x2650, + SMSG_ARENA_ERROR = 0x271A, + SMSG_ARENA_PREP_OPPONENT_SPECIALIZATIONS = 0x2667, + SMSG_ARTIFACT_FORGE_OPENED = 0x27EE, + SMSG_ARTIFACT_RESPEC_CONFIRM = 0x27F1, + SMSG_ARTIFACT_TRAITS_REFUNDED = 0x27F2, + SMSG_ARTIFACT_XP_GAIN = 0x2835, + SMSG_ATTACKER_STATE_UPDATE = 0x27DB, + SMSG_ATTACK_START = 0x266F, + SMSG_ATTACK_STOP = 0x2670, + SMSG_ATTACK_SWING_ERROR = 0x273C, + SMSG_ATTACK_SWING_LANDED_LOG = 0x273D, + SMSG_AUCTION_CLOSED_NOTIFICATION = 0x2731, + SMSG_AUCTION_COMMAND_RESULT = 0x272E, + SMSG_AUCTION_HELLO_RESPONSE = 0x272C, + SMSG_AUCTION_LIST_BIDDER_ITEMS_RESULT = 0x2735, + SMSG_AUCTION_LIST_ITEMS_RESULT = 0x2733, + SMSG_AUCTION_LIST_OWNER_ITEMS_RESULT = 0x2734, + SMSG_AUCTION_LIST_PENDING_SALES_RESULT = 0x2736, + SMSG_AUCTION_OUTBID_NOTIFICATION = 0x2730, + SMSG_AUCTION_OWNER_BID_NOTIFICATION = 0x2732, + SMSG_AUCTION_REPLICATE_RESPONSE = 0x272D, + SMSG_AUCTION_WON_NOTIFICATION = 0x272F, SMSG_AURA_POINTS_DEPLETED = 0x2C23, SMSG_AURA_UPDATE = 0x2C22, SMSG_AUTH_CHALLENGE = 0x3048, SMSG_AUTH_RESPONSE = 0x256C, SMSG_AVAILABLE_HOTFIXES = 0x25A1, - SMSG_BAN_REASON = 0x26B2, - SMSG_BARBER_SHOP_RESULT = 0x26E8, + SMSG_AZERITE_EMPOWERED_ITEM_RESPEC_OPEN = 0x283F, + SMSG_AZERITE_XP_GAIN = 0x2878, + SMSG_BAN_REASON = 0x26B7, + SMSG_BARBER_SHOP_RESULT = 0x26F0, SMSG_BATTLEFIELD_LIST = 0x2594, SMSG_BATTLEFIELD_PORT_DENIED = 0x259A, SMSG_BATTLEFIELD_STATUS_ACTIVE = 0x2590, @@ -830,125 +840,130 @@ enum OpcodeServer : uint16 SMSG_BATTLEFIELD_STATUS_QUEUED = 0x2591, SMSG_BATTLEFIELD_STATUS_WAIT_FOR_GROUPS = 0x25A5, SMSG_BATTLEGROUND_INFO_THROTTLED = 0x259B, - SMSG_BATTLEGROUND_INIT = 0x27A0, + SMSG_BATTLEGROUND_INIT = 0x27A9, SMSG_BATTLEGROUND_PLAYER_JOINED = 0x2598, SMSG_BATTLEGROUND_PLAYER_LEFT = 0x2599, SMSG_BATTLEGROUND_PLAYER_POSITIONS = 0x2595, - SMSG_BATTLEGROUND_POINTS = 0x279F, - SMSG_BATTLENET_CHALLENGE_ABORT = 0x27CE, - SMSG_BATTLENET_CHALLENGE_START = 0x27CD, - SMSG_BATTLENET_NOTIFICATION = 0x2843, - SMSG_BATTLENET_REALM_LIST_TICKET = 0x2845, - SMSG_BATTLENET_RESPONSE = 0x2842, - SMSG_BATTLENET_SET_SESSION_STATE = 0x2844, - SMSG_BATTLE_PAY_ACK_FAILED = 0x27C6, - SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x27BB, - SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x27C5, - SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x27B9, - SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x27B8, - SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x27B7, - SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x27B5, - SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x27B3, - SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x27B4, - SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x27BA, - SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x27C4, - SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x27C2, - SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x27C1, - SMSG_BATTLE_PAY_SUBSCRIPTION_CHANGED = 0x2864, - SMSG_BATTLE_PAY_VAS_BNET_TRANSFER_VALIDATION_RESULT = 0x285B, - SMSG_BATTLE_PAY_VAS_BOOST_CONSUMED = 0x27B6, - SMSG_BATTLE_PAY_VAS_CHARACTER_LIST = 0x2830, - SMSG_BATTLE_PAY_VAS_CHARACTER_QUEUE_STATUS = 0x2859, - SMSG_BATTLE_PAY_VAS_PURCHASE_COMPLETE = 0x2833, - SMSG_BATTLE_PAY_VAS_PURCHASE_LIST = 0x2834, - SMSG_BATTLE_PAY_VAS_PURCHASE_STARTED = 0x2832, - SMSG_BATTLE_PAY_VAS_REALM_LIST = 0x2831, - SMSG_BATTLE_PAY_VAS_TRANSFER_QUEUE_STATUS = 0x2858, - SMSG_BATTLE_PETS_HEALED = 0x2609, - SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x26A0, - SMSG_BATTLE_PET_DELETED = 0x2606, - SMSG_BATTLE_PET_ERROR = 0x2655, - SMSG_BATTLE_PET_JOURNAL = 0x2605, - SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x2603, - SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x2604, - SMSG_BATTLE_PET_LICENSE_CHANGED = 0x260A, - SMSG_BATTLE_PET_MAX_COUNT_CHANGED = 0x2601, - SMSG_BATTLE_PET_RESTORED = 0x2608, - SMSG_BATTLE_PET_REVOKED = 0x2607, - SMSG_BATTLE_PET_TRAP_LEVEL = 0x2600, - SMSG_BATTLE_PET_UPDATES = 0x25FF, - SMSG_BINDER_CONFIRM = 0x2739, + SMSG_BATTLEGROUND_POINTS = 0x27A8, + SMSG_BATTLENET_CHALLENGE_ABORT = 0x27DA, + SMSG_BATTLENET_CHALLENGE_START = 0x27D9, + SMSG_BATTLENET_NOTIFICATION = 0x284D, + SMSG_BATTLENET_REALM_LIST_TICKET = 0x284F, + SMSG_BATTLENET_RESPONSE = 0x284C, + SMSG_BATTLENET_SET_SESSION_STATE = 0x284E, + SMSG_BATTLENET_UPDATE_SESSION_KEY = 0x2872, + SMSG_BATTLE_PAY_ACK_FAILED = 0x27D2, + SMSG_BATTLE_PAY_BATTLE_PET_DELIVERED = 0x27C7, + SMSG_BATTLE_PAY_CONFIRM_PURCHASE = 0x27D1, + SMSG_BATTLE_PAY_DELIVERY_ENDED = 0x27C5, + SMSG_BATTLE_PAY_DELIVERY_STARTED = 0x27C4, + SMSG_BATTLE_PAY_DISTRIBUTION_UPDATE = 0x27C3, + SMSG_BATTLE_PAY_GET_DISTRIBUTION_LIST_RESPONSE = 0x27C1, + SMSG_BATTLE_PAY_GET_PRODUCT_LIST_RESPONSE = 0x27BF, + SMSG_BATTLE_PAY_GET_PURCHASE_LIST_RESPONSE = 0x27C0, + SMSG_BATTLE_PAY_MOUNT_DELIVERED = 0x27C6, + SMSG_BATTLE_PAY_OPEN_CHECKOUT_RESULT = 0x286B, + SMSG_BATTLE_PAY_PURCHASE_UPDATE = 0x27D0, + SMSG_BATTLE_PAY_START_DISTRIBUTION_ASSIGN_TO_TARGET_RESPONSE = 0x27CE, + SMSG_BATTLE_PAY_START_PURCHASE_RESPONSE = 0x27CD, + SMSG_BATTLE_PAY_SUBSCRIPTION_CHANGED = 0x2874, + SMSG_BATTLE_PAY_VAS_BNET_TRANSFER_VALIDATION_RESULT = 0x2869, + SMSG_BATTLE_PAY_VAS_BOOST_CONSUMED = 0x27C2, + SMSG_BATTLE_PAY_VAS_CHARACTER_LIST = 0x2838, + SMSG_BATTLE_PAY_VAS_CHARACTER_QUEUE_STATUS = 0x2864, + SMSG_BATTLE_PAY_VAS_PURCHASE_COMPLETE = 0x283B, + SMSG_BATTLE_PAY_VAS_PURCHASE_LIST = 0x283C, + SMSG_BATTLE_PAY_VAS_PURCHASE_STARTED = 0x283A, + SMSG_BATTLE_PAY_VAS_REALM_LIST = 0x2839, + SMSG_BATTLE_PAY_VAS_TRANSFER_QUEUE_STATUS = 0x2863, + SMSG_BATTLE_PETS_HEALED = 0x260A, + SMSG_BATTLE_PET_CAGE_DATE_ERROR = 0x26A5, + SMSG_BATTLE_PET_DELETED = 0x2607, + SMSG_BATTLE_PET_ERROR = 0x2657, + SMSG_BATTLE_PET_JOURNAL = 0x2606, + SMSG_BATTLE_PET_JOURNAL_LOCK_ACQUIRED = 0x2604, + SMSG_BATTLE_PET_JOURNAL_LOCK_DENIED = 0x2605, + SMSG_BATTLE_PET_LICENSE_CHANGED = 0x260B, + SMSG_BATTLE_PET_MAX_COUNT_CHANGED = 0x2602, + SMSG_BATTLE_PET_RESTORED = 0x2609, + SMSG_BATTLE_PET_REVOKED = 0x2608, + SMSG_BATTLE_PET_TRAP_LEVEL = 0x2601, + SMSG_BATTLE_PET_UPDATES = 0x2600, + SMSG_BINDER_CONFIRM = 0x2742, SMSG_BIND_POINT_UPDATE = 0x257C, - SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x2644, - SMSG_BLACK_MARKET_OPEN_RESULT = 0x2642, - SMSG_BLACK_MARKET_OUTBID = 0x2645, - SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x2643, - SMSG_BLACK_MARKET_WON = 0x2646, - SMSG_BONUS_ROLL_EMPTY = 0x2662, - SMSG_BOSS_KILL_CREDIT = 0x27C0, - SMSG_BREAK_TARGET = 0x266C, - SMSG_BUY_FAILED = 0x26F1, - SMSG_BUY_SUCCEEDED = 0x26F0, - SMSG_CACHE_INFO = 0x2743, - SMSG_CACHE_VERSION = 0x2742, - SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x26C6, - SMSG_CALENDAR_COMMAND_RESULT = 0x26C7, - SMSG_CALENDAR_EVENT_INITIAL_INVITES = 0x26B6, - SMSG_CALENDAR_EVENT_INVITE = 0x26B7, - SMSG_CALENDAR_EVENT_INVITE_ALERT = 0x26B8, - SMSG_CALENDAR_EVENT_INVITE_MODERATOR_STATUS = 0x26BB, - SMSG_CALENDAR_EVENT_INVITE_NOTES = 0x26C0, - SMSG_CALENDAR_EVENT_INVITE_NOTES_ALERT = 0x26C1, - SMSG_CALENDAR_EVENT_INVITE_REMOVED = 0x26BC, - SMSG_CALENDAR_EVENT_INVITE_REMOVED_ALERT = 0x26BD, - SMSG_CALENDAR_EVENT_INVITE_STATUS = 0x26B9, - SMSG_CALENDAR_EVENT_INVITE_STATUS_ALERT = 0x26BA, - SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x26BE, - SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x26BF, - SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x26C2, - SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x26C3, - SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x26C4, - SMSG_CALENDAR_SEND_CALENDAR = 0x26B4, - SMSG_CALENDAR_SEND_EVENT = 0x26B5, - SMSG_CALENDAR_SEND_NUM_PENDING = 0x26C5, - SMSG_CAMERA_EFFECT = 0x2767, - SMSG_CANCEL_AUTO_REPEAT = 0x2712, - SMSG_CANCEL_COMBAT = 0x2731, + SMSG_BLACK_MARKET_BID_ON_ITEM_RESULT = 0x2646, + SMSG_BLACK_MARKET_OPEN_RESULT = 0x2644, + SMSG_BLACK_MARKET_OUTBID = 0x2647, + SMSG_BLACK_MARKET_REQUEST_ITEMS_RESULT = 0x2645, + SMSG_BLACK_MARKET_WON = 0x2648, + SMSG_BONUS_ROLL_EMPTY = 0x2664, + SMSG_BONUS_ROLL_FAILED = 0x287B, + SMSG_BOSS_KILL_CREDIT = 0x27CC, + SMSG_BREAK_TARGET = 0x266E, + SMSG_BROADCAST_ACHIEVEMENT = 0x2BBC, + SMSG_BUY_FAILED = 0x26F9, + SMSG_BUY_SUCCEEDED = 0x26F8, + SMSG_CACHE_INFO = 0x274C, + SMSG_CACHE_VERSION = 0x274B, + SMSG_CALENDAR_CLEAR_PENDING_ACTION = 0x26CB, + SMSG_CALENDAR_COMMAND_RESULT = 0x26CC, + SMSG_CALENDAR_EVENT_INITIAL_INVITES = 0x26BB, + SMSG_CALENDAR_EVENT_INVITE = 0x26BC, + SMSG_CALENDAR_EVENT_INVITE_ALERT = 0x26C0, + SMSG_CALENDAR_EVENT_INVITE_MODERATOR_STATUS = 0x26BF, + SMSG_CALENDAR_EVENT_INVITE_NOTES = 0x26C5, + SMSG_CALENDAR_EVENT_INVITE_NOTES_ALERT = 0x26C6, + SMSG_CALENDAR_EVENT_INVITE_REMOVED = 0x26BD, + SMSG_CALENDAR_EVENT_INVITE_REMOVED_ALERT = 0x26C2, + SMSG_CALENDAR_EVENT_INVITE_STATUS = 0x26BE, + SMSG_CALENDAR_EVENT_INVITE_STATUS_ALERT = 0x26C1, + SMSG_CALENDAR_EVENT_REMOVED_ALERT = 0x26C3, + SMSG_CALENDAR_EVENT_UPDATED_ALERT = 0x26C4, + SMSG_CALENDAR_RAID_LOCKOUT_ADDED = 0x26C7, + SMSG_CALENDAR_RAID_LOCKOUT_REMOVED = 0x26C8, + SMSG_CALENDAR_RAID_LOCKOUT_UPDATED = 0x26C9, + SMSG_CALENDAR_SEND_CALENDAR = 0x26B9, + SMSG_CALENDAR_SEND_EVENT = 0x26BA, + SMSG_CALENDAR_SEND_NUM_PENDING = 0x26CA, + SMSG_CAMERA_EFFECT = 0x276F, + SMSG_CANCEL_AUTO_REPEAT = 0x271B, + SMSG_CANCEL_COMBAT = 0x273A, SMSG_CANCEL_ORPHAN_SPELL_VISUAL = 0x2C46, - SMSG_CANCEL_SCENE = 0x2654, + SMSG_CANCEL_SCENE = 0x2656, SMSG_CANCEL_SPELL_VISUAL = 0x2C44, SMSG_CANCEL_SPELL_VISUAL_KIT = 0x2C48, - SMSG_CAN_DUEL_RESULT = 0x2676, + SMSG_CAN_DUEL_RESULT = 0x2679, SMSG_CAST_FAILED = 0x2C56, SMSG_CATEGORY_COOLDOWN = 0x2C16, - SMSG_CHALLENGE_MODE_ALL_MAP_STATS = 0x2622, - SMSG_CHALLENGE_MODE_COMPLETE = 0x2620, - SMSG_CHALLENGE_MODE_MAP_STATS_UPDATE = 0x2623, - SMSG_CHALLENGE_MODE_NEW_PLAYER_RECORD = 0x2625, - SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x2624, - SMSG_CHALLENGE_MODE_RESET = 0x261F, - SMSG_CHALLENGE_MODE_REWARDS = 0x2621, - SMSG_CHALLENGE_MODE_START = 0x261D, - SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x261E, - SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT = 0x2735, + SMSG_CHALLENGE_MODE_AFFIXES = 0x2624, + SMSG_CHALLENGE_MODE_ALL_MAP_STATS = 0x2623, + SMSG_CHALLENGE_MODE_COMPLETE = 0x2621, + SMSG_CHALLENGE_MODE_NEW_PLAYER_RECORD = 0x2626, + SMSG_CHALLENGE_MODE_NEW_PLAYER_SEASON_RECORD = 0x2627, + SMSG_CHALLENGE_MODE_REQUEST_LEADERS_RESULT = 0x2625, + SMSG_CHALLENGE_MODE_RESET = 0x2620, + SMSG_CHALLENGE_MODE_REWARDS = 0x2622, + SMSG_CHALLENGE_MODE_START = 0x261E, + SMSG_CHALLENGE_MODE_UPDATE_DEATH_COUNT = 0x261F, + SMSG_CHANGE_PLAYER_DIFFICULTY_RESULT = 0x273E, SMSG_CHANNEL_LIST = 0x2BC3, SMSG_CHANNEL_NOTIFY = 0x2BC0, SMSG_CHANNEL_NOTIFY_JOINED = 0x2BC1, SMSG_CHANNEL_NOTIFY_LEFT = 0x2BC2, - SMSG_CHARACTER_CLASS_TRIAL_CREATE = 0x2804, - SMSG_CHARACTER_INVENTORY_OVERFLOW_WARNING = 0x2863, - SMSG_CHARACTER_ITEM_FIXUP = 0x2854, - SMSG_CHARACTER_LOGIN_FAILED = 0x2744, - SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x27CC, - SMSG_CHARACTER_RENAME_RESULT = 0x27A5, - SMSG_CHARACTER_UPGRADE_COMPLETE = 0x2803, - SMSG_CHARACTER_UPGRADE_QUEUED = 0x2802, - SMSG_CHARACTER_UPGRADE_SPELL_TIER_SET = 0x25F4, - SMSG_CHARACTER_UPGRADE_STARTED = 0x2801, - SMSG_CHARACTER_UPGRADE_UNREVOKE_RESULT = 0x2805, - SMSG_CHAR_CUSTOMIZE = 0x2719, - SMSG_CHAR_CUSTOMIZE_FAILED = 0x2718, - SMSG_CHAR_FACTION_CHANGE_RESULT = 0x27EE, + SMSG_CHARACTER_CLASS_TRIAL_CREATE = 0x280C, + SMSG_CHARACTER_INVENTORY_OVERFLOW_WARNING = 0x2873, + SMSG_CHARACTER_ITEM_FIXUP = 0x285F, + SMSG_CHARACTER_LOGIN_FAILED = 0x274D, + SMSG_CHARACTER_OBJECT_TEST_RESPONSE = 0x27D8, + SMSG_CHARACTER_RENAME_RESULT = 0x27B1, + SMSG_CHARACTER_UPGRADE_COMPLETE = 0x280B, + SMSG_CHARACTER_UPGRADE_QUEUED = 0x280A, + SMSG_CHARACTER_UPGRADE_SPELL_TIER_SET = 0x25F5, + SMSG_CHARACTER_UPGRADE_STARTED = 0x2809, + SMSG_CHARACTER_UPGRADE_UNREVOKE_RESULT = 0x280D, + SMSG_CHAR_CUSTOMIZE = 0x2722, + SMSG_CHAR_CUSTOMIZE_FAILED = 0x2721, + SMSG_CHAR_FACTION_CHANGE_RESULT = 0x27F6, SMSG_CHAT = 0x2BAD, SMSG_CHAT_AUTO_RESPONDED = 0x2BB8, SMSG_CHAT_DOWN = 0x2BBD, @@ -964,97 +979,101 @@ enum OpcodeServer : uint16 SMSG_CHECK_WARGAME_ENTRY = 0x259E, SMSG_CLEAR_ALL_SPELL_CHARGES = 0x2C27, SMSG_CLEAR_BOSS_EMOTES = 0x25CD, - SMSG_CLEAR_COOLDOWN = 0x26E4, + SMSG_CLEAR_COOLDOWN = 0x26EC, SMSG_CLEAR_COOLDOWNS = 0x2C26, - SMSG_CLEAR_LOSS_OF_CONTROL = 0x2698, + SMSG_CLEAR_LOSS_OF_CONTROL = 0x269D, SMSG_CLEAR_SPELL_CHARGES = 0x2C28, - SMSG_CLEAR_TARGET = 0x26DB, - SMSG_COIN_REMOVED = 0x262B, - SMSG_COMBAT_EVENT_FAILED = 0x266F, - SMSG_COMMENTATOR_MAP_INFO = 0x2746, - SMSG_COMMENTATOR_PLAYER_INFO = 0x2747, - SMSG_COMMENTATOR_STATE_CHANGED = 0x2745, - SMSG_COMPLAINT_RESULT = 0x26D3, - SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x27DE, + SMSG_CLEAR_TARGET = 0x26E3, + SMSG_COIN_REMOVED = 0x262D, + SMSG_COMBAT_EVENT_FAILED = 0x2671, + SMSG_COMMENTATOR_MAP_INFO = 0x274F, + SMSG_COMMENTATOR_PLAYER_INFO = 0x2750, + SMSG_COMMENTATOR_STATE_CHANGED = 0x274E, + SMSG_COMPLAINT_RESULT = 0x26DA, + SMSG_COMPLETE_SHIPMENT_RESPONSE = 0x27EA, SMSG_CONNECT_TO = 0x304D, - SMSG_CONQUEST_FORMULA_CONSTANTS = 0x27C7, - SMSG_CONSOLE_WRITE = 0x2651, - SMSG_CONSUMPTION_CONVERSION_INFO_RESPONSE = 0x2849, - SMSG_CONSUMPTION_CONVERSION_RESULT = 0x284A, - SMSG_CONTACT_LIST = 0x27CA, - SMSG_CONTROL_UPDATE = 0x2664, - SMSG_COOLDOWN_CHEAT = 0x277B, - SMSG_COOLDOWN_EVENT = 0x26E3, - SMSG_CORPSE_LOCATION = 0x266B, - SMSG_CORPSE_RECLAIM_DELAY = 0x278E, - SMSG_CORPSE_TRANSPORT_QUERY = 0x2751, - SMSG_CREATE_CHAR = 0x273E, - SMSG_CREATE_SHIPMENT_RESPONSE = 0x27DD, - SMSG_CRITERIA_DELETED = 0x271D, - SMSG_CRITERIA_UPDATE = 0x2717, - SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26EC, + SMSG_CONQUEST_FORMULA_CONSTANTS = 0x27D3, + SMSG_CONSOLE_WRITE = 0x2653, + SMSG_CONSUMPTION_CONVERSION_INFO_RESPONSE = 0x2853, + SMSG_CONSUMPTION_CONVERSION_RESULT = 0x2854, + SMSG_CONTACT_LIST = 0x27D6, + SMSG_CONTRIBUTION_COLLECTOR_STATE = 0x286A, + SMSG_CONTROL_UPDATE = 0x2666, + SMSG_COOLDOWN_CHEAT = 0x2783, + SMSG_COOLDOWN_EVENT = 0x26EB, + SMSG_CORPSE_LOCATION = 0x266D, + SMSG_CORPSE_RECLAIM_DELAY = 0x2796, + SMSG_CORPSE_TRANSPORT_QUERY = 0x275A, + SMSG_CREATE_CHAR = 0x2747, + SMSG_CREATE_SHIPMENT_RESPONSE = 0x27E9, + SMSG_CRITERIA_DELETED = 0x2726, + SMSG_CRITERIA_UPDATE = 0x2720, + SMSG_CROSSED_INEBRIATION_THRESHOLD = 0x26F4, SMSG_CUSTOM_LOAD_SCREEN = 0x25E3, SMSG_DAILY_QUESTS_RESET = 0x2A80, - SMSG_DAMAGE_CALC_LOG = 0x280C, + SMSG_DAMAGE_CALC_LOG = 0x2814, SMSG_DB_REPLY = 0x25A0, - SMSG_DEATH_RELEASE_LOC = 0x2705, + SMSG_DEATH_RELEASE_LOC = 0x270E, SMSG_DEFENSE_MESSAGE = 0x2BB6, - SMSG_DELETE_CHAR = 0x273F, - SMSG_DESTROY_ARENA_UNIT = 0x2784, - SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x2732, + SMSG_DELETE_CHAR = 0x2748, + SMSG_DESTROY_ARENA_UNIT = 0x278C, + SMSG_DESTRUCTIBLE_BUILDING_DAMAGE = 0x273B, SMSG_DIFFERENT_INSTANCE_FROM_PARTY = 0x258A, SMSG_DISENCHANT_CREDIT = 0x25BC, - SMSG_DISMOUNT = 0x26DA, + SMSG_DISMOUNT = 0x26E2, SMSG_DISMOUNT_RESULT = 0x257B, SMSG_DISPEL_FAILED = 0x2C30, SMSG_DISPLAY_GAME_ERROR = 0x25B5, - SMSG_DISPLAY_PLAYER_CHOICE = 0x26A1, - SMSG_DISPLAY_PROMOTION = 0x2668, + SMSG_DISPLAY_PLAYER_CHOICE = 0x26A6, + SMSG_DISPLAY_PROMOTION = 0x266A, SMSG_DISPLAY_QUEST_POPUP = 0x2A9D, - SMSG_DISPLAY_TOAST = 0x2638, - SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25F6, + SMSG_DISPLAY_TOAST = 0x263A, + SMSG_DONT_AUTO_PUSH_SPELLS_TO_ACTION_BAR = 0x25F7, SMSG_DROP_NEW_CONNECTION = 0x304C, - SMSG_DUEL_COMPLETE = 0x2674, - SMSG_DUEL_COUNTDOWN = 0x2673, - SMSG_DUEL_IN_BOUNDS = 0x2672, - SMSG_DUEL_OUT_OF_BOUNDS = 0x2671, - SMSG_DUEL_REQUESTED = 0x2670, - SMSG_DUEL_WINNER = 0x2675, - SMSG_DURABILITY_DAMAGE_DEATH = 0x278A, - SMSG_EMOTE = 0x280D, - SMSG_ENABLE_BARBER_SHOP = 0x26E7, + SMSG_DUEL_COMPLETE = 0x2677, + SMSG_DUEL_COUNTDOWN = 0x2676, + SMSG_DUEL_IN_BOUNDS = 0x2675, + SMSG_DUEL_OPPONENT_SELECTED = 0x2673, + SMSG_DUEL_OUT_OF_BOUNDS = 0x2674, + SMSG_DUEL_REQUESTED = 0x2672, + SMSG_DUEL_WINNER = 0x2678, + SMSG_DURABILITY_DAMAGE_DEATH = 0x2792, + SMSG_EMOTE = 0x2815, + SMSG_ENABLE_BARBER_SHOP = 0x26EF, SMSG_ENABLE_ENCRYPTION = 0x3049, - SMSG_ENCHANTMENT_LOG = 0x2752, - SMSG_ENCOUNTER_END = 0x27BF, - SMSG_ENCOUNTER_START = 0x27BE, + SMSG_ENCHANTMENT_LOG = 0x275B, + SMSG_ENCOUNTER_END = 0x27CB, + SMSG_ENCOUNTER_START = 0x27CA, SMSG_ENUM_CHARACTERS_RESULT = 0x2582, SMSG_ENVIRONMENTAL_DAMAGE_LOG = 0x2C21, - SMSG_EQUIPMENT_SET_ID = 0x26DC, + SMSG_EQUIPMENT_SET_ID = 0x26E4, SMSG_EXPECTED_SPAM_RECORDS = 0x2BB1, - SMSG_EXPLORATION_EXPERIENCE = 0x27A2, - SMSG_FACTION_BONUS_INFO = 0x2766, + SMSG_EXPLORATION_EXPERIENCE = 0x27AE, + SMSG_FACTION_BONUS_INFO = 0x276E, SMSG_FAILED_PLAYER_CONDITION = 0x25E2, SMSG_FEATURE_SYSTEM_STATUS = 0x25D1, SMSG_FEATURE_SYSTEM_STATUS_GLUE_SCREEN = 0x25D2, - SMSG_FEIGN_DEATH_RESISTED = 0x2787, - SMSG_FISH_ESCAPED = 0x26F9, - SMSG_FISH_NOT_HOOKED = 0x26F8, + SMSG_FEIGN_DEATH_RESISTED = 0x278F, + SMSG_FISH_ESCAPED = 0x2701, + SMSG_FISH_NOT_HOOKED = 0x2700, SMSG_FLIGHT_SPLINE_SYNC = 0x2DF7, - SMSG_FORCED_DEATH_UPDATE = 0x2706, - SMSG_FORCE_ANIM = 0x2794, - SMSG_FORCE_OBJECT_RELINK = 0x2667, - SMSG_FRIEND_STATUS = 0x27CB, + SMSG_FORCED_DEATH_UPDATE = 0x270F, + SMSG_FORCE_ANIM = 0x279D, + SMSG_FORCE_OBJECT_RELINK = 0x2669, + SMSG_FRIEND_STATUS = 0x27D7, + SMSG_GAME_EVENT_DEBUG_INITIALIZE = 0x267F, SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT = 0x25D6, SMSG_GAME_OBJECT_CUSTOM_ANIM = 0x25D7, SMSG_GAME_OBJECT_DESPAWN = 0x25D8, + SMSG_GAME_OBJECT_MULTI_TRANSITION = 0x2879, SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL = 0x2C4B, SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL_KIT = 0x2C4A, - SMSG_GAME_OBJECT_RESET_STATE = 0x275D, - SMSG_GAME_OBJECT_SET_STATE = 0x2841, - SMSG_GAME_OBJECT_UI_ACTION = 0x275A, - SMSG_GAME_SPEED_SET = 0x26AA, - SMSG_GAME_TIME_SET = 0x274B, - SMSG_GAME_TIME_UPDATE = 0x274A, + SMSG_GAME_OBJECT_RESET_STATE = 0x2765, + SMSG_GAME_OBJECT_SET_STATE = 0x284B, + SMSG_GAME_OBJECT_UI_ACTION = 0x2762, + SMSG_GAME_SPEED_SET = 0x26AF, + SMSG_GAME_TIME_SET = 0x2754, + SMSG_GAME_TIME_UPDATE = 0x2753, SMSG_GARRISON_ADD_FOLLOWER_RESULT = 0x2902, SMSG_GARRISON_ADD_MISSION_RESULT = 0x2906, SMSG_GARRISON_ASSIGN_FOLLOWER_TO_BUILDING_RESULT = 0x2918, @@ -1063,16 +1082,17 @@ enum OpcodeServer : uint16 SMSG_GARRISON_BUILDING_REMOVED = 0x28F4, SMSG_GARRISON_BUILDING_SET_ACTIVE_SPECIALIZATION_RESULT = 0x28F6, SMSG_GARRISON_CLEAR_ALL_FOLLOWERS_EXHAUSTION = 0x2916, - SMSG_GARRISON_COMPLETE_MISSION_RESULT = 0x2909, + SMSG_GARRISON_COMPLETE_MISSION_RESULT = 0x2908, SMSG_GARRISON_CREATE_RESULT = 0x28FC, SMSG_GARRISON_DELETE_RESULT = 0x2920, + SMSG_GARRISON_FOLLOWER_CATEGORIES = 0x2901, SMSG_GARRISON_FOLLOWER_CHANGED_ABILITIES = 0x2914, SMSG_GARRISON_FOLLOWER_CHANGED_DURABILITY = 0x2904, SMSG_GARRISON_FOLLOWER_CHANGED_ITEM_LEVEL = 0x2913, SMSG_GARRISON_FOLLOWER_CHANGED_STATUS = 0x2915, SMSG_GARRISON_FOLLOWER_CHANGED_XP = 0x2912, SMSG_GARRISON_IS_UPGRADEABLE_RESULT = 0x2929, - SMSG_GARRISON_LANDING_PAGE_SHIPMENT_INFO = 0x27E0, + SMSG_GARRISON_LANDING_PAGE_SHIPMENT_INFO = 0x27EC, SMSG_GARRISON_LEARN_BLUEPRINT_RESULT = 0x28F7, SMSG_GARRISON_LEARN_SPECIALIZATION_RESULT = 0x28F5, SMSG_GARRISON_LIST_FOLLOWERS_CHEAT_RESULT = 0x2905, @@ -1102,26 +1122,27 @@ enum OpcodeServer : uint16 SMSG_GARRISON_UNLEARN_BLUEPRINT_RESULT = 0x28F8, SMSG_GARRISON_UPGRADE_RESULT = 0x28FD, SMSG_GENERATE_RANDOM_CHARACTER_NAME_RESULT = 0x2583, - SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x27A3, + SMSG_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x27AF, SMSG_GET_DISPLAYED_TROPHY_LIST_RESPONSE = 0x2928, SMSG_GET_GARRISON_INFO_RESULT = 0x28F0, - SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x27DF, - SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x27DB, - SMSG_GET_TROPHY_LIST_RESPONSE = 0x2808, - SMSG_GM_PLAYER_INFO = 0x277A, - SMSG_GM_REQUEST_PLAYER_INFO = 0x25ED, - SMSG_GM_TICKET_CASE_STATUS = 0x26CC, - SMSG_GM_TICKET_SYSTEM_STATUS = 0x26CB, - SMSG_GOD_MODE = 0x2738, + SMSG_GET_SHIPMENTS_OF_TYPE_RESPONSE = 0x27EB, + SMSG_GET_SHIPMENT_INFO_RESPONSE = 0x27E7, + SMSG_GET_TROPHY_LIST_RESPONSE = 0x2810, + SMSG_GM_PLAYER_INFO = 0x2782, + SMSG_GM_REQUEST_PLAYER_INFO = 0x25EE, + SMSG_GM_TICKET_CASE_STATUS = 0x26D1, + SMSG_GM_TICKET_SYSTEM_STATUS = 0x26D0, + SMSG_GOD_MODE = 0x2741, SMSG_GOSSIP_COMPLETE = 0x2A96, SMSG_GOSSIP_MESSAGE = 0x2A97, - SMSG_GOSSIP_POI = 0x27D8, + SMSG_GOSSIP_POI = 0x27E4, + SMSG_GOSSIP_TEXT_UPDATE = 0x2A98, SMSG_GROUP_ACTION_THROTTLED = 0x259C, - SMSG_GROUP_DECLINE = 0x27D3, - SMSG_GROUP_DESTROYED = 0x27D5, - SMSG_GROUP_INVITE_CONFIRMATION = 0x2855, - SMSG_GROUP_NEW_LEADER = 0x2649, - SMSG_GROUP_UNINVITE = 0x27D4, + SMSG_GROUP_DECLINE = 0x27DF, + SMSG_GROUP_DESTROYED = 0x27E1, + SMSG_GROUP_INVITE_CONFIRMATION = 0x2860, + SMSG_GROUP_NEW_LEADER = 0x264B, + SMSG_GROUP_UNINVITE = 0x27E0, SMSG_GUILD_ACHIEVEMENT_DELETED = 0x29C5, SMSG_GUILD_ACHIEVEMENT_EARNED = 0x29C4, SMSG_GUILD_ACHIEVEMENT_MEMBERS = 0x29C7, @@ -1174,53 +1195,56 @@ enum OpcodeServer : uint16 SMSG_GUILD_ROSTER = 0x29BB, SMSG_GUILD_ROSTER_UPDATE = 0x29BC, SMSG_GUILD_SEND_RANK_CHANGE = 0x29B9, - SMSG_HEALTH_UPDATE = 0x26FC, - SMSG_HIGHEST_THREAT_UPDATE = 0x270C, + SMSG_HEALTH_UPDATE = 0x2704, + SMSG_HIGHEST_THREAT_UPDATE = 0x2715, SMSG_HOTFIX_MESSAGE = 0x25A2, SMSG_HOTFIX_RESPONSE = 0x25A3, - SMSG_INITIALIZE_FACTIONS = 0x2765, + SMSG_INITIALIZE_FACTIONS = 0x276D, SMSG_INITIAL_SETUP = 0x257F, - SMSG_INIT_WORLD_STATES = 0x278B, + SMSG_INIT_WORLD_STATES = 0x2793, SMSG_INSPECT_HONOR_STATS = 0x25B2, - SMSG_INSPECT_PVP = 0x2761, - SMSG_INSPECT_RESULT = 0x264D, - SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27F4, - SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27F3, - SMSG_INSTANCE_ENCOUNTER_END = 0x27FC, - SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x27F2, - SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x27FE, - SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x27FD, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27F7, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27F6, - SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x27FB, - SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x27FF, - SMSG_INSTANCE_ENCOUNTER_SET_ALLOWING_RELEASE = 0x27FA, - SMSG_INSTANCE_ENCOUNTER_SET_SUPPRESSING_RELEASE = 0x27F9, - SMSG_INSTANCE_ENCOUNTER_START = 0x27F8, - SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27F5, - SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x2736, - SMSG_INSTANCE_INFO = 0x2650, - SMSG_INSTANCE_RESET = 0x26AF, - SMSG_INSTANCE_RESET_FAILED = 0x26B0, - SMSG_INSTANCE_SAVE_CREATED = 0x27BD, - SMSG_INVALIDATE_PAGE_TEXT = 0x2701, - SMSG_INVALIDATE_PLAYER = 0x26D2, - SMSG_INVALID_PROMOTION_CODE = 0x2795, - SMSG_INVENTORY_CHANGE_FAILURE = 0x2763, + SMSG_INSPECT_PVP = 0x2769, + SMSG_INSPECT_RESULT = 0x264F, + SMSG_INSTANCE_ENCOUNTER_CHANGE_PRIORITY = 0x27FC, + SMSG_INSTANCE_ENCOUNTER_DISENGAGE_UNIT = 0x27FB, + SMSG_INSTANCE_ENCOUNTER_END = 0x2804, + SMSG_INSTANCE_ENCOUNTER_ENGAGE_UNIT = 0x27FA, + SMSG_INSTANCE_ENCOUNTER_GAIN_COMBAT_RESURRECTION_CHARGE = 0x2806, + SMSG_INSTANCE_ENCOUNTER_IN_COMBAT_RESURRECTION = 0x2805, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_COMPLETE = 0x27FF, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_START = 0x27FE, + SMSG_INSTANCE_ENCOUNTER_OBJECTIVE_UPDATE = 0x2803, + SMSG_INSTANCE_ENCOUNTER_PHASE_SHIFT_CHANGED = 0x2807, + SMSG_INSTANCE_ENCOUNTER_SET_ALLOWING_RELEASE = 0x2802, + SMSG_INSTANCE_ENCOUNTER_SET_SUPPRESSING_RELEASE = 0x2801, + SMSG_INSTANCE_ENCOUNTER_START = 0x2800, + SMSG_INSTANCE_ENCOUNTER_TIMER_START = 0x27FD, + SMSG_INSTANCE_GROUP_SIZE_CHANGED = 0x273F, + SMSG_INSTANCE_INFO = 0x2652, + SMSG_INSTANCE_RESET = 0x26B4, + SMSG_INSTANCE_RESET_FAILED = 0x26B5, + SMSG_INSTANCE_SAVE_CREATED = 0x27C9, + SMSG_INVALIDATE_PAGE_TEXT = 0x270A, + SMSG_INVALIDATE_PLAYER = 0x26D9, + SMSG_INVALID_PROMOTION_CODE = 0x279E, + SMSG_INVENTORY_CHANGE_FAILURE = 0x276B, + SMSG_ISLAND_AZERITE_XP_GAIN = 0x27AB, + SMSG_ISLAND_COMPLETED = 0x27AC, + SMSG_ISLAND_OPEN_QUEUE_NPC = 0x2840, SMSG_IS_QUEST_COMPLETE_RESPONSE = 0x2A83, - SMSG_ITEM_CHANGED = 0x2720, - SMSG_ITEM_COOLDOWN = 0x280B, - SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x2797, + SMSG_ITEM_CHANGED = 0x2729, + SMSG_ITEM_COOLDOWN = 0x2813, + SMSG_ITEM_ENCHANT_TIME_UPDATE = 0x27A0, SMSG_ITEM_EXPIRE_PURCHASE_REFUND = 0x25B1, SMSG_ITEM_PURCHASE_REFUND_RESULT = 0x25AF, - SMSG_ITEM_PUSH_RESULT = 0x2637, - SMSG_ITEM_TIME_UPDATE = 0x2796, - SMSG_KICK_REASON = 0x282F, + SMSG_ITEM_PUSH_RESULT = 0x2639, + SMSG_ITEM_TIME_UPDATE = 0x279F, + SMSG_KICK_REASON = 0x2837, SMSG_LEARNED_SPELLS = 0x2C4D, SMSG_LEARN_PVP_TALENTS_FAILED = 0x25EA, SMSG_LEARN_TALENTS_FAILED = 0x25E9, SMSG_LEVEL_UPDATE = 0x2587, - SMSG_LEVEL_UP_INFO = 0x271F, + SMSG_LEVEL_UP_INFO = 0x2728, SMSG_LFG_BOOT_PLAYER = 0x2A35, SMSG_LFG_DISABLED = 0x2A33, SMSG_LFG_INSTANCE_SHUTDOWN_COUNTDOWN = 0x2A25, @@ -1249,44 +1273,47 @@ enum OpcodeServer : uint16 SMSG_LF_GUILD_COMMAND_RESULT = 0x29D0, SMSG_LF_GUILD_POST = 0x29CD, SMSG_LF_GUILD_RECRUITS = 0x29CF, - SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x27B1, - SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x27AF, - SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x27A4, + SMSG_LIGHTNING_STORM_END = 0x26D6, + SMSG_LIGHTNING_STORM_START = 0x26D5, + SMSG_LIVE_REGION_ACCOUNT_RESTORE_RESULT = 0x27BD, + SMSG_LIVE_REGION_CHARACTER_COPY_RESULT = 0x27BB, + SMSG_LIVE_REGION_GET_ACCOUNT_CHARACTER_LIST_RESULT = 0x27B0, SMSG_LOAD_CUF_PROFILES = 0x25CE, - SMSG_LOAD_EQUIPMENT_SET = 0x274D, - SMSG_LOAD_SELECTED_TROPHY_RESULT = 0x2809, - SMSG_LOGIN_SET_TIME_SPEED = 0x274C, + SMSG_LOAD_EQUIPMENT_SET = 0x2756, + SMSG_LOAD_SELECTED_TROPHY_RESULT = 0x2811, + SMSG_LOGIN_SET_TIME_SPEED = 0x2755, SMSG_LOGIN_VERIFY_WORLD = 0x25AC, - SMSG_LOGOUT_CANCEL_ACK = 0x26AE, - SMSG_LOGOUT_COMPLETE = 0x26AD, - SMSG_LOGOUT_RESPONSE = 0x26AC, - SMSG_LOG_XP_GAIN = 0x271B, - SMSG_LOOT_ALL_PASSED = 0x2635, - SMSG_LOOT_LIST = 0x2783, - SMSG_LOOT_MONEY_NOTIFY = 0x2630, - SMSG_LOOT_RELEASE = 0x262F, - SMSG_LOOT_RELEASE_ALL = 0x262E, - SMSG_LOOT_REMOVED = 0x2629, - SMSG_LOOT_RESPONSE = 0x2628, - SMSG_LOOT_ROLL = 0x2632, - SMSG_LOOT_ROLLS_COMPLETE = 0x2634, - SMSG_LOOT_ROLL_WON = 0x2636, - SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x2695, - SMSG_MAIL_COMMAND_RESULT = 0x2658, - SMSG_MAIL_LIST_RESULT = 0x2798, - SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x2799, - SMSG_MAP_OBJECTIVES_INIT = 0x27A1, + SMSG_LOGOUT_CANCEL_ACK = 0x26B3, + SMSG_LOGOUT_COMPLETE = 0x26B2, + SMSG_LOGOUT_RESPONSE = 0x26B1, + SMSG_LOG_XP_GAIN = 0x2724, + SMSG_LOOT_ALL_PASSED = 0x2637, + SMSG_LOOT_LEGACY_RULES_IN_EFFECT = 0x287A, + SMSG_LOOT_LIST = 0x278B, + SMSG_LOOT_MONEY_NOTIFY = 0x2632, + SMSG_LOOT_RELEASE = 0x2631, + SMSG_LOOT_RELEASE_ALL = 0x2630, + SMSG_LOOT_REMOVED = 0x262B, + SMSG_LOOT_RESPONSE = 0x262A, + SMSG_LOOT_ROLL = 0x2634, + SMSG_LOOT_ROLLS_COMPLETE = 0x2636, + SMSG_LOOT_ROLL_WON = 0x2638, + SMSG_LOSS_OF_CONTROL_AURA_UPDATE = 0x269A, + SMSG_MAIL_COMMAND_RESULT = 0x265A, + SMSG_MAIL_LIST_RESULT = 0x27A1, + SMSG_MAIL_QUERY_NEXT_TIME_RESULT = 0x27A2, + SMSG_MAP_OBJECTIVES_INIT = 0x27AA, SMSG_MAP_OBJ_EVENTS = 0x25D9, - SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x2633, + SMSG_MASTER_LOOT_CANDIDATE_LIST = 0x2635, SMSG_MESSAGE_BOX = 0x2575, - SMSG_MINIMAP_PING = 0x26F7, + SMSG_MINIMAP_PING = 0x26FF, SMSG_MIRROR_IMAGE_COMPONENTED_DATA = 0x2C14, SMSG_MIRROR_IMAGE_CREATURE_DATA = 0x2C13, SMSG_MISSILE_CANCEL = 0x25DA, - SMSG_MODIFY_CHARGE_RECOVERY_SPEED = 0x27A8, - SMSG_MODIFY_COOLDOWN = 0x27A6, - SMSG_MODIFY_COOLDOWN_RECOVERY_SPEED = 0x27A7, - SMSG_MODIFY_PARTY_RANGE = 0x2786, + SMSG_MODIFY_CHARGE_RECOVERY_SPEED = 0x27B4, + SMSG_MODIFY_COOLDOWN = 0x27B2, + SMSG_MODIFY_COOLDOWN_RECOVERY_SPEED = 0x27B3, + SMSG_MODIFY_PARTY_RANGE = 0x278E, SMSG_MOTD = 0x2BAF, SMSG_MOUNT_RESULT = 0x257A, SMSG_MOVE_APPLY_MOVEMENT_FORCE = 0x2DE1, @@ -1312,6 +1339,7 @@ enum OpcodeServer : uint16 SMSG_MOVE_SET_HOVERING = 0x2DCF, SMSG_MOVE_SET_IGNORE_MOVEMENT_FORCES = 0x2DD7, SMSG_MOVE_SET_LAND_WALK = 0x2DCC, + SMSG_MOVE_SET_MOVEMENT_FORCE_SPEED = 0x2DB4, SMSG_MOVE_SET_NORMAL_FALL = 0x2DCE, SMSG_MOVE_SET_PITCH_RATE = 0x2DC6, SMSG_MOVE_SET_RUN_BACK_SPEED = 0x2DBF, @@ -1362,6 +1390,7 @@ enum OpcodeServer : uint16 SMSG_MOVE_UPDATE_FLIGHT_BACK_SPEED = 0x2DAA, SMSG_MOVE_UPDATE_FLIGHT_SPEED = 0x2DA9, SMSG_MOVE_UPDATE_KNOCK_BACK = 0x2DB0, + SMSG_MOVE_UPDATE_MOVEMENT_FORCE_SPEED = 0x2DB1, SMSG_MOVE_UPDATE_PITCH_RATE = 0x2DAC, SMSG_MOVE_UPDATE_REMOVE_MOVEMENT_FORCE = 0x2DB3, SMSG_MOVE_UPDATE_RUN_BACK_SPEED = 0x2DA5, @@ -1371,111 +1400,111 @@ enum OpcodeServer : uint16 SMSG_MOVE_UPDATE_TELEPORT = 0x2DAF, SMSG_MOVE_UPDATE_TURN_RATE = 0x2DAB, SMSG_MOVE_UPDATE_WALK_SPEED = 0x2DA6, - SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25F1, - SMSG_NEW_TAXI_PATH = 0x26A7, + SMSG_NEUTRAL_PLAYER_FACTION_SELECT_RESULT = 0x25F2, + SMSG_NEW_TAXI_PATH = 0x26AC, SMSG_NEW_WORLD = 0x25AB, SMSG_NOTIFY_DEST_LOC_SPELL_CAST = 0x2C43, - SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26D1, + SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION = 0x26D8, SMSG_NOTIFY_MONEY = 0x25AE, - SMSG_NOTIFY_RECEIVED_MAIL = 0x2659, - SMSG_OFFER_PETITION_ERROR = 0x26E0, - SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x271C, + SMSG_NOTIFY_RECEIVED_MAIL = 0x265B, + SMSG_OFFER_PETITION_ERROR = 0x26E8, + SMSG_ON_CANCEL_EXPECTED_RIDE_VEHICLE_AURA = 0x2725, SMSG_ON_MONSTER_MOVE = 0x2DA2, - SMSG_OPEN_ALLIED_RACE_DETAILS_GIVER = 0x2837, - SMSG_OPEN_CONTAINER = 0x2764, + SMSG_OPEN_ALLIED_RACE_DETAILS_GIVER = 0x2841, + SMSG_OPEN_CONTAINER = 0x276C, SMSG_OPEN_LFG_DUNGEON_FINDER = 0x2A31, - SMSG_OPEN_SHIPMENT_NPC_FROM_GOSSIP = 0x27DA, - SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x27DC, - SMSG_OPEN_TRANSMOGRIFIER = 0x2836, - SMSG_OVERRIDE_LIGHT = 0x26E6, - SMSG_PAGE_TEXT = 0x2759, - SMSG_PARTY_COMMAND_RESULT = 0x27D7, + SMSG_OPEN_SHIPMENT_NPC_FROM_GOSSIP = 0x27E6, + SMSG_OPEN_SHIPMENT_NPC_RESULT = 0x27E8, + SMSG_OPEN_TRANSMOGRIFIER = 0x283E, + SMSG_OVERRIDE_LIGHT = 0x26EE, + SMSG_PAGE_TEXT = 0x2761, + SMSG_PARTY_COMMAND_RESULT = 0x27E3, SMSG_PARTY_INVITE = 0x25CF, - SMSG_PARTY_KILL_LOG = 0x279D, - SMSG_PARTY_MEMBER_STATE = 0x279B, - SMSG_PARTY_MEMBER_STATE_UPDATE = 0x279A, - SMSG_PARTY_UPDATE = 0x260B, - SMSG_PAUSE_MIRROR_TIMER = 0x274F, - SMSG_PENDING_RAID_LOCK = 0x2730, + SMSG_PARTY_KILL_LOG = 0x27A6, + SMSG_PARTY_MEMBER_STATE = 0x27A4, + SMSG_PARTY_MEMBER_STATE_UPDATE = 0x27A3, + SMSG_PARTY_UPDATE = 0x260C, + SMSG_PAUSE_MIRROR_TIMER = 0x2758, + SMSG_PENDING_RAID_LOCK = 0x2739, SMSG_PETITION_ALREADY_SIGNED = 0x25B8, SMSG_PETITION_RENAME_GUILD_RESPONSE = 0x29F7, - SMSG_PETITION_SHOW_LIST = 0x26E9, - SMSG_PETITION_SHOW_SIGNATURES = 0x26EA, - SMSG_PETITION_SIGN_RESULTS = 0x278F, - SMSG_PET_ACTION_FEEDBACK = 0x278D, - SMSG_PET_ACTION_SOUND = 0x26C9, + SMSG_PETITION_SHOW_LIST = 0x26F1, + SMSG_PETITION_SHOW_SIGNATURES = 0x26F2, + SMSG_PETITION_SIGN_RESULTS = 0x2798, + SMSG_PET_ACTION_FEEDBACK = 0x2795, + SMSG_PET_ACTION_SOUND = 0x26CE, SMSG_PET_ADDED = 0x25A8, - SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x2618, - SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x269C, - SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x2611, - SMSG_PET_BATTLE_FINAL_ROUND = 0x2616, - SMSG_PET_BATTLE_FINISHED = 0x2617, - SMSG_PET_BATTLE_FIRST_ROUND = 0x2613, - SMSG_PET_BATTLE_INITIAL_UPDATE = 0x2612, - SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x2619, - SMSG_PET_BATTLE_PVP_CHALLENGE = 0x2610, - SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x2656, - SMSG_PET_BATTLE_QUEUE_STATUS = 0x2657, - SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x2615, - SMSG_PET_BATTLE_REQUEST_FAILED = 0x260F, - SMSG_PET_BATTLE_ROUND_RESULT = 0x2614, - SMSG_PET_BATTLE_SLOT_UPDATES = 0x2602, + SMSG_PET_BATTLE_CHAT_RESTRICTED = 0x2619, + SMSG_PET_BATTLE_DEBUG_QUEUE_DUMP_RESPONSE = 0x26A1, + SMSG_PET_BATTLE_FINALIZE_LOCATION = 0x2612, + SMSG_PET_BATTLE_FINAL_ROUND = 0x2617, + SMSG_PET_BATTLE_FINISHED = 0x2618, + SMSG_PET_BATTLE_FIRST_ROUND = 0x2614, + SMSG_PET_BATTLE_INITIAL_UPDATE = 0x2613, + SMSG_PET_BATTLE_MAX_GAME_LENGTH_WARNING = 0x261A, + SMSG_PET_BATTLE_PVP_CHALLENGE = 0x2611, + SMSG_PET_BATTLE_QUEUE_PROPOSE_MATCH = 0x2658, + SMSG_PET_BATTLE_QUEUE_STATUS = 0x2659, + SMSG_PET_BATTLE_REPLACEMENTS_MADE = 0x2616, + SMSG_PET_BATTLE_REQUEST_FAILED = 0x2610, + SMSG_PET_BATTLE_ROUND_RESULT = 0x2615, + SMSG_PET_BATTLE_SLOT_UPDATES = 0x2603, SMSG_PET_CAST_FAILED = 0x2C57, SMSG_PET_CLEAR_SPELLS = 0x2C24, - SMSG_PET_DISMISS_SOUND = 0x26CA, - SMSG_PET_GOD_MODE = 0x26A4, - SMSG_PET_GUIDS = 0x2741, + SMSG_PET_DISMISS_SOUND = 0x26CF, + SMSG_PET_GOD_MODE = 0x26A9, + SMSG_PET_GUIDS = 0x274A, SMSG_PET_LEARNED_SPELLS = 0x2C4F, SMSG_PET_MODE = 0x2589, - SMSG_PET_NAME_INVALID = 0x26EE, + SMSG_PET_NAME_INVALID = 0x26F6, SMSG_PET_SLOT_UPDATED = 0x2588, SMSG_PET_SPELLS_MESSAGE = 0x2C25, SMSG_PET_STABLE_LIST = 0x25A9, SMSG_PET_STABLE_RESULT = 0x25AA, - SMSG_PET_TAME_FAILURE = 0x26DD, + SMSG_PET_TAME_FAILURE = 0x26E5, SMSG_PET_UNLEARNED_SPELLS = 0x2C50, SMSG_PHASE_SHIFT_CHANGE = 0x2577, - SMSG_PLAYED_TIME = 0x2708, + SMSG_PLAYED_TIME = 0x2711, SMSG_PLAYER_BOUND = 0x257D, SMSG_PLAYER_SAVE_GUILD_EMBLEM = 0x29F6, - SMSG_PLAYER_SKINNED = 0x2788, - SMSG_PLAYER_TABARD_VENDOR_ACTIVATE = 0x279C, - SMSG_PLAY_MUSIC = 0x27AB, - SMSG_PLAY_OBJECT_SOUND = 0x27AC, - SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x2772, + SMSG_PLAYER_SKINNED = 0x2790, + SMSG_PLAYER_TABARD_VENDOR_ACTIVATE = 0x27A5, + SMSG_PLAY_MUSIC = 0x27B7, + SMSG_PLAY_OBJECT_SOUND = 0x27B8, + SMSG_PLAY_ONE_SHOT_ANIM_KIT = 0x277A, SMSG_PLAY_ORPHAN_SPELL_VISUAL = 0x2C47, - SMSG_PLAY_SCENE = 0x2653, - SMSG_PLAY_SOUND = 0x27AA, - SMSG_PLAY_SPEAKERBOT_SOUND = 0x27AD, + SMSG_PLAY_SCENE = 0x2655, + SMSG_PLAY_SOUND = 0x27B6, + SMSG_PLAY_SPEAKERBOT_SOUND = 0x27B9, SMSG_PLAY_SPELL_VISUAL = 0x2C45, SMSG_PLAY_SPELL_VISUAL_KIT = 0x2C49, - SMSG_PLAY_TIME_WARNING = 0x273A, + SMSG_PLAY_TIME_WARNING = 0x2743, SMSG_PONG = 0x304E, - SMSG_POWER_UPDATE = 0x26FD, - SMSG_PRESTIGE_AND_HONOR_INVOLUNTARILY_CHANGED = 0x2758, - SMSG_PRE_RESSURECT = 0x27A9, + SMSG_POWER_UPDATE = 0x2705, + SMSG_PRE_RESSURECT = 0x27B5, SMSG_PRINT_NOTIFICATION = 0x25E1, - SMSG_PROC_RESIST = 0x279E, - SMSG_PROPOSE_LEVEL_GRANT = 0x2710, + SMSG_PROC_RESIST = 0x27A7, + SMSG_PROPOSE_LEVEL_GRANT = 0x2719, SMSG_PUSH_SPELL_TO_ACTION_BAR = 0x2C51, - SMSG_PVP_CREDIT = 0x2716, + SMSG_PVP_CREDIT = 0x271F, SMSG_PVP_LOG_DATA = 0x25B3, SMSG_PVP_OPTIONS_ENABLED = 0x25B6, SMSG_PVP_SEASON = 0x25D3, - SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x2703, - SMSG_QUERY_CREATURE_RESPONSE = 0x26FA, - SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x26FB, + SMSG_QUERY_BATTLE_PET_NAME_RESPONSE = 0x270C, + SMSG_QUERY_COMMUNITY_NAME_RESPONSE = 0x2708, + SMSG_QUERY_CREATURE_RESPONSE = 0x2702, + SMSG_QUERY_GAME_OBJECT_RESPONSE = 0x2703, SMSG_QUERY_GARRISON_CREATURE_NAME_RESPONSE = 0x292B, SMSG_QUERY_GUILD_INFO_RESPONSE = 0x29E5, - SMSG_QUERY_ITEM_TEXT_RESPONSE = 0x280A, - SMSG_QUERY_NPC_TEXT_RESPONSE = 0x26FE, - SMSG_QUERY_PAGE_TEXT_RESPONSE = 0x2700, - SMSG_QUERY_PETITION_RESPONSE = 0x2704, - SMSG_QUERY_PET_NAME_RESPONSE = 0x2702, - SMSG_QUERY_PLAYER_NAME_RESPONSE = 0x26FF, + SMSG_QUERY_ITEM_TEXT_RESPONSE = 0x2812, + SMSG_QUERY_NPC_TEXT_RESPONSE = 0x2706, + SMSG_QUERY_PAGE_TEXT_RESPONSE = 0x2709, + SMSG_QUERY_PETITION_RESPONSE = 0x270D, + SMSG_QUERY_PET_NAME_RESPONSE = 0x270B, + SMSG_QUERY_PLAYER_NAME_RESPONSE = 0x2707, SMSG_QUERY_QUEST_INFO_RESPONSE = 0x2A95, - SMSG_QUERY_QUEST_REWARD_RESPONSE = 0x2846, - SMSG_QUERY_TIME_RESPONSE = 0x271A, + SMSG_QUERY_TIME_RESPONSE = 0x2723, + SMSG_QUERY_TREASURE_PICKER_RESPONSE = 0x2850, SMSG_QUEST_COMPLETION_NPC_RESPONSE = 0x2A81, SMSG_QUEST_CONFIRM_ACCEPT = 0x2A8E, SMSG_QUEST_FORCE_REMOVED = 0x2A9B, @@ -1485,7 +1514,7 @@ enum OpcodeServer : uint16 SMSG_QUEST_GIVER_QUEST_DETAILS = 0x2A91, SMSG_QUEST_GIVER_QUEST_FAILED = 0x2A85, SMSG_QUEST_GIVER_QUEST_LIST_MESSAGE = 0x2A99, - SMSG_QUEST_GIVER_QUEST_TURN_IN_FAILURE = 0x2852, + SMSG_QUEST_GIVER_QUEST_TURN_IN_FAILURE = 0x285D, SMSG_QUEST_GIVER_REQUEST_ITEMS = 0x2A92, SMSG_QUEST_GIVER_STATUS = 0x2A9A, SMSG_QUEST_GIVER_STATUS_MULTIPLE = 0x2A90, @@ -1501,117 +1530,115 @@ enum OpcodeServer : uint16 SMSG_QUEST_UPDATE_COMPLETE_BY_SPELL = 0x2A87, SMSG_QUEST_UPDATE_FAILED = 0x2A89, SMSG_QUEST_UPDATE_FAILED_TIMER = 0x2A8A, - SMSG_RAF_EMAIL_ENABLED_RESPONSE = 0x27C8, - SMSG_RAID_DIFFICULTY_SET = 0x27EF, - SMSG_RAID_GROUP_ONLY = 0x27F1, + SMSG_RAF_EMAIL_ENABLED_RESPONSE = 0x27D4, + SMSG_RAID_DIFFICULTY_SET = 0x27F7, + SMSG_RAID_GROUP_ONLY = 0x27F9, SMSG_RAID_INSTANCE_MESSAGE = 0x2BB4, SMSG_RAID_MARKERS_CHANGED = 0x25B9, - SMSG_RANDOM_ROLL = 0x264C, + SMSG_RANDOM_ROLL = 0x264E, SMSG_RATED_BATTLEFIELD_INFO = 0x25A6, - SMSG_READY_CHECK_COMPLETED = 0x260E, - SMSG_READY_CHECK_RESPONSE = 0x260D, - SMSG_READY_CHECK_STARTED = 0x260C, - SMSG_READ_ITEM_RESULT_FAILED = 0x27EB, - SMSG_READ_ITEM_RESULT_OK = 0x27E1, - SMSG_REALM_LOOKUP_INFORMATION = 0x2810, - SMSG_REALM_QUERY_RESPONSE = 0x26E5, - SMSG_RECRUIT_A_FRIEND_RESPONSE = 0x27C9, - SMSG_REFER_A_FRIEND_EXPIRED = 0x2762, - SMSG_REFER_A_FRIEND_FAILURE = 0x26EB, - SMSG_REFRESH_COMPONENT = 0x2678, + SMSG_READY_CHECK_COMPLETED = 0x260F, + SMSG_READY_CHECK_RESPONSE = 0x260E, + SMSG_READY_CHECK_STARTED = 0x260D, + SMSG_READ_ITEM_RESULT_FAILED = 0x27F3, + SMSG_READ_ITEM_RESULT_OK = 0x27ED, + SMSG_REALM_LOOKUP_INFORMATION = 0x2818, + SMSG_REALM_QUERY_RESPONSE = 0x26ED, + SMSG_RECRUIT_A_FRIEND_RESPONSE = 0x27D5, + SMSG_REFER_A_FRIEND_EXPIRED = 0x276A, + SMSG_REFER_A_FRIEND_FAILURE = 0x26F3, + SMSG_REFRESH_COMPONENT = 0x267B, SMSG_REFRESH_SPELL_HISTORY = 0x2C2C, SMSG_REMOVE_ITEM_PASSIVE = 0x25C0, - SMSG_REMOVE_LOSS_OF_CONTROL = 0x2697, - SMSG_REPLACE_TROPHY_RESPONSE = 0x2807, - SMSG_REPORT_PVP_PLAYER_AFK_RESULT = 0x26D9, - SMSG_REQUEST_ADDON_LIST = 0x265F, + SMSG_REMOVE_LOSS_OF_CONTROL = 0x269C, + SMSG_REPLACE_TROPHY_RESPONSE = 0x280F, + SMSG_REPORT_PVP_PLAYER_AFK_RESULT = 0x26E1, + SMSG_REQUEST_ADDON_LIST = 0x2661, SMSG_REQUEST_CEMETERY_LIST_RESPONSE = 0x259D, SMSG_REQUEST_PVP_BRAWL_INFO_RESPONSE = 0x25D5, SMSG_REQUEST_PVP_REWARDS_RESPONSE = 0x25D4, SMSG_RESEARCH_COMPLETE = 0x2585, - SMSG_RESET_AREA_TRIGGER = 0x2640, SMSG_RESET_COMPRESSION_CONTEXT = 0x304F, - SMSG_RESET_FAILED_NOTIFY = 0x26E1, - SMSG_RESET_RANGED_COMBAT_TIMER = 0x2713, + SMSG_RESET_FAILED_NOTIFY = 0x26E9, + SMSG_RESET_RANGED_COMBAT_TIMER = 0x271C, SMSG_RESET_WEEKLY_CURRENCY = 0x2574, - SMSG_RESPEC_WIPE_CONFIRM = 0x2626, + SMSG_RESPEC_WIPE_CONFIRM = 0x2628, SMSG_RESPOND_INSPECT_ACHIEVEMENTS = 0x2571, SMSG_RESUME_CAST_BAR = 0x2C3E, SMSG_RESUME_COMMS = 0x304B, SMSG_RESUME_TOKEN = 0x25BE, SMSG_RESURRECT_REQUEST = 0x257E, - SMSG_RESYNC_RUNES = 0x273D, + SMSG_RESYNC_RUNES = 0x2746, SMSG_ROLE_CHANGED_INFORM = 0x258C, SMSG_ROLE_CHOSEN = 0x2A39, SMSG_ROLE_POLL_INFORM = 0x258D, SMSG_RUNE_REGEN_DEBUG = 0x25C8, - SMSG_SCENARIO_BOOT = 0x27EC, - SMSG_SCENARIO_COMPLETED = 0x282C, - SMSG_SCENARIO_POIS = 0x264F, - SMSG_SCENARIO_PROGRESS_UPDATE = 0x2648, - SMSG_SCENARIO_SET_SHOULD_SHOW_CRITERIA = 0x283A, - SMSG_SCENARIO_SPELL_UPDATE = 0x2839, - SMSG_SCENARIO_STATE = 0x2647, - SMSG_SCENE_OBJECT_EVENT = 0x25F7, - SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25FC, - SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25FD, - SMSG_SCENE_OBJECT_PET_BATTLE_FIRST_ROUND = 0x25F9, - SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x25F8, - SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x25FB, - SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25FA, + SMSG_SCENARIO_BOOT = 0x27F4, + SMSG_SCENARIO_COMPLETED = 0x2834, + SMSG_SCENARIO_POIS = 0x2651, + SMSG_SCENARIO_PROGRESS_UPDATE = 0x264A, + SMSG_SCENARIO_SET_SHOULD_SHOW_CRITERIA = 0x2844, + SMSG_SCENARIO_SPELL_UPDATE = 0x2843, + SMSG_SCENARIO_STATE = 0x2649, + SMSG_SCENE_OBJECT_EVENT = 0x25F8, + SMSG_SCENE_OBJECT_PET_BATTLE_FINAL_ROUND = 0x25FD, + SMSG_SCENE_OBJECT_PET_BATTLE_FINISHED = 0x25FE, + SMSG_SCENE_OBJECT_PET_BATTLE_FIRST_ROUND = 0x25FA, + SMSG_SCENE_OBJECT_PET_BATTLE_INITIAL_UPDATE = 0x25F9, + SMSG_SCENE_OBJECT_PET_BATTLE_REPLACEMENTS_MADE = 0x25FC, + SMSG_SCENE_OBJECT_PET_BATTLE_ROUND_RESULT = 0x25FB, SMSG_SCRIPT_CAST = 0x2C55, - SMSG_SELL_RESPONSE = 0x26EF, + SMSG_SELL_RESPONSE = 0x26F7, SMSG_SEND_ITEM_PASSIVES = 0x25C1, SMSG_SEND_KNOWN_SPELLS = 0x2C2A, - SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x264A, - SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x264B, + SMSG_SEND_RAID_TARGET_UPDATE_ALL = 0x264C, + SMSG_SEND_RAID_TARGET_UPDATE_SINGLE = 0x264D, SMSG_SEND_SPELL_CHARGES = 0x2C2D, SMSG_SEND_SPELL_HISTORY = 0x2C2B, SMSG_SEND_UNLEARN_SPELLS = 0x2C2E, - SMSG_SERVER_FIRST_ACHIEVEMENT = 0x2BBC, - SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x266A, - SMSG_SERVER_TIME = 0x26AB, + SMSG_SERVER_FIRST_ACHIEVEMENTS = 0x266C, + SMSG_SERVER_TIME = 0x26B0, SMSG_SETUP_CURRENCY = 0x2572, SMSG_SETUP_RESEARCH_HISTORY = 0x2584, - SMSG_SET_AI_ANIM_KIT = 0x2771, - SMSG_SET_ALL_TASK_PROGRESS = 0x27D1, - SMSG_SET_ANIM_TIER = 0x2775, + SMSG_SET_AI_ANIM_KIT = 0x2779, + SMSG_SET_ALL_TASK_PROGRESS = 0x27DD, + SMSG_SET_ANIM_TIER = 0x277D, SMSG_SET_CURRENCY = 0x2573, SMSG_SET_DF_FAST_LAUNCH_RESULT = 0x2A2E, - SMSG_SET_DUNGEON_DIFFICULTY = 0x26CD, - SMSG_SET_FACTION_AT_WAR = 0x273C, - SMSG_SET_FACTION_NOT_VISIBLE = 0x276C, - SMSG_SET_FACTION_STANDING = 0x276D, - SMSG_SET_FACTION_VISIBLE = 0x276B, + SMSG_SET_DUNGEON_DIFFICULTY = 0x26D2, + SMSG_SET_FACTION_AT_WAR = 0x2745, + SMSG_SET_FACTION_NOT_VISIBLE = 0x2774, + SMSG_SET_FACTION_STANDING = 0x2775, + SMSG_SET_FACTION_VISIBLE = 0x2773, SMSG_SET_FLAT_SPELL_MODIFIER = 0x2C36, - SMSG_SET_FORCED_REACTIONS = 0x275C, + SMSG_SET_FORCED_REACTIONS = 0x2764, SMSG_SET_ITEM_PURCHASE_DATA = 0x25B0, - SMSG_SET_LOOT_METHOD_FAILED = 0x2816, + SMSG_SET_LOOT_METHOD_FAILED = 0x281E, SMSG_SET_MAX_WEEKLY_QUANTITY = 0x25B7, - SMSG_SET_MELEE_ANIM_KIT = 0x2774, - SMSG_SET_MOVEMENT_ANIM_KIT = 0x2773, + SMSG_SET_MELEE_ANIM_KIT = 0x277C, + SMSG_SET_MOVEMENT_ANIM_KIT = 0x277B, SMSG_SET_PCT_SPELL_MODIFIER = 0x2C37, - SMSG_SET_PET_SPECIALIZATION = 0x2641, - SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x2707, + SMSG_SET_PET_SPECIALIZATION = 0x2643, + SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x2710, SMSG_SET_PLAY_HOVER_ANIM = 0x25CC, - SMSG_SET_PROFICIENCY = 0x2776, + SMSG_SET_PROFICIENCY = 0x277E, SMSG_SET_SPELL_CHARGES = 0x2C29, - SMSG_SET_TASK_COMPLETE = 0x27D2, - SMSG_SET_TIME_ZONE_INFORMATION = 0x269F, - SMSG_SET_VEHICLE_REC_ID = 0x272F, - SMSG_SHOW_ADVENTURE_MAP = 0x2835, - SMSG_SHOW_BANK = 0x26A8, - SMSG_SHOW_MAILBOX = 0x27ED, - SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25F0, - SMSG_SHOW_TAXI_NODES = 0x26F6, - SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x27B2, - SMSG_SOCKET_GEMS = 0x2768, - SMSG_SOCKET_GEMS_FAILURE = 0x2769, - SMSG_SORT_BAGS_RESULT = 0x2824, - SMSG_SOR_START_EXPERIENCE_INCOMPLETE = 0x25F2, - SMSG_SPECIALIZATION_CHANGED = 0x25EC, - SMSG_SPECIAL_MOUNT_ANIM = 0x26C8, - SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x2757, + SMSG_SET_TASK_COMPLETE = 0x27DE, + SMSG_SET_TIME_ZONE_INFORMATION = 0x26A4, + SMSG_SET_VEHICLE_REC_ID = 0x2738, + SMSG_SHOW_ADVENTURE_MAP = 0x283D, + SMSG_SHOW_BANK = 0x26AD, + SMSG_SHOW_MAILBOX = 0x27F5, + SMSG_SHOW_NEUTRAL_PLAYER_FACTION_SELECT_UI = 0x25F1, + SMSG_SHOW_TAXI_NODES = 0x26FE, + SMSG_SHOW_TRADE_SKILL_RESPONSE = 0x27BE, + SMSG_SOCKET_GEMS = 0x2770, + SMSG_SOCKET_GEMS_FAILURE = 0x2771, + SMSG_SORT_BAGS_RESULT = 0x282C, + SMSG_SOR_START_EXPERIENCE_INCOMPLETE = 0x25F3, + SMSG_SPECIALIZATION_CHANGED = 0x25ED, + SMSG_SPECIAL_MOUNT_ANIM = 0x26CD, + SMSG_SPEC_INVOLUNTARILY_CHANGED = 0x2760, SMSG_SPELL_ABSORB_LOG = 0x2C1F, SMSG_SPELL_CATEGORY_COOLDOWN = 0x2C17, SMSG_SPELL_CHANNEL_START = 0x2C34, @@ -1636,73 +1663,73 @@ enum OpcodeServer : uint16 SMSG_SPELL_PERIODIC_AURA_LOG = 0x2C1B, SMSG_SPELL_PREPARE = 0x2C38, SMSG_SPELL_START = 0x2C3A, - SMSG_SPIRIT_HEALER_CONFIRM = 0x2754, - SMSG_STAND_STATE_UPDATE = 0x275B, - SMSG_START_ELAPSED_TIMER = 0x261A, - SMSG_START_ELAPSED_TIMERS = 0x261C, - SMSG_START_LOOT_ROLL = 0x2631, - SMSG_START_MIRROR_TIMER = 0x274E, + SMSG_SPIRIT_HEALER_CONFIRM = 0x275D, + SMSG_STAND_STATE_UPDATE = 0x2763, + SMSG_START_ELAPSED_TIMER = 0x261B, + SMSG_START_ELAPSED_TIMERS = 0x261D, + SMSG_START_LOOT_ROLL = 0x2633, + SMSG_START_MIRROR_TIMER = 0x2757, SMSG_START_TIMER = 0x25BB, - SMSG_STOP_ELAPSED_TIMER = 0x261B, - SMSG_STOP_MIRROR_TIMER = 0x2750, - SMSG_STOP_SPEAKERBOT_SOUND = 0x27AE, + SMSG_STOP_ELAPSED_TIMER = 0x261C, + SMSG_STOP_MIRROR_TIMER = 0x2759, + SMSG_STOP_SPEAKERBOT_SOUND = 0x27BA, SMSG_STREAMING_MOVIES = 0x25BA, - SMSG_SUMMON_CANCEL = 0x26D8, + SMSG_SUMMON_CANCEL = 0x26E0, SMSG_SUMMON_RAID_MEMBER_VALIDATE_FAILED = 0x258E, - SMSG_SUMMON_REQUEST = 0x2760, + SMSG_SUMMON_REQUEST = 0x2768, SMSG_SUPERCEDED_SPELLS = 0x2C4C, SMSG_SUSPEND_COMMS = 0x304A, SMSG_SUSPEND_TOKEN = 0x25BD, - SMSG_TALENTS_INVOLUNTARILY_RESET = 0x2756, - SMSG_TAXI_NODE_STATUS = 0x26A5, - SMSG_TEXT_EMOTE = 0x26A3, - SMSG_THREAT_CLEAR = 0x270F, - SMSG_THREAT_REMOVE = 0x270E, - SMSG_THREAT_UPDATE = 0x270D, + SMSG_TALENTS_INVOLUNTARILY_RESET = 0x275F, + SMSG_TAXI_NODE_STATUS = 0x26AA, + SMSG_TEXT_EMOTE = 0x26A8, + SMSG_THREAT_CLEAR = 0x2718, + SMSG_THREAT_REMOVE = 0x2717, + SMSG_THREAT_UPDATE = 0x2716, SMSG_TIME_ADJUSTMENT = 0x2DA1, SMSG_TIME_SYNC_REQUEST = 0x2DA0, - SMSG_TITLE_EARNED = 0x270A, - SMSG_TITLE_LOST = 0x270B, - SMSG_TOTEM_CREATED = 0x26F2, - SMSG_TOTEM_MOVED = 0x26F3, + SMSG_TITLE_EARNED = 0x2713, + SMSG_TITLE_LOST = 0x2714, + SMSG_TOTEM_CREATED = 0x26FA, + SMSG_TOTEM_MOVED = 0x26FB, SMSG_TRADE_STATUS = 0x2581, SMSG_TRADE_UPDATED = 0x2580, - SMSG_TRAINER_BUY_FAILED = 0x2715, - SMSG_TRAINER_LIST = 0x2714, - SMSG_TRANSFER_ABORTED = 0x2740, + SMSG_TRAINER_BUY_FAILED = 0x271E, + SMSG_TRAINER_LIST = 0x271D, + SMSG_TRANSFER_ABORTED = 0x2749, SMSG_TRANSFER_PENDING = 0x25E5, SMSG_TRANSMOG_COLLECTION_UPDATE = 0x25C6, SMSG_TRANSMOG_SET_COLLECTION_UPDATE = 0x25C7, - SMSG_TRIGGER_CINEMATIC = 0x280E, - SMSG_TRIGGER_MOVIE = 0x26F4, - SMSG_TURN_IN_PETITION_RESULT = 0x2791, - SMSG_TUTORIAL_FLAGS = 0x2800, - SMSG_TUTORIAL_HIGHLIGHT_SPELL = 0x2840, - SMSG_TUTORIAL_UNHIGHLIGHT_SPELL = 0x283F, + SMSG_TRIGGER_CINEMATIC = 0x2816, + SMSG_TRIGGER_MOVIE = 0x26FC, + SMSG_TURN_IN_PETITION_RESULT = 0x279A, + SMSG_TUTORIAL_FLAGS = 0x2808, + SMSG_TUTORIAL_HIGHLIGHT_SPELL = 0x284A, + SMSG_TUTORIAL_UNHIGHLIGHT_SPELL = 0x2849, SMSG_TWITTER_STATUS = 0x2FFD, - SMSG_UI_TIME = 0x2753, - SMSG_UNDELETE_CHARACTER_RESPONSE = 0x2811, - SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x2812, + SMSG_UI_TIME = 0x275C, + SMSG_UNDELETE_CHARACTER_RESPONSE = 0x2819, + SMSG_UNDELETE_COOLDOWN_STATUS_RESPONSE = 0x281A, SMSG_UNLEARNED_SPELLS = 0x2C4E, - SMSG_UPDATE_ACCOUNT_DATA = 0x2748, - SMSG_UPDATE_ACTION_BUTTONS = 0x25F5, - SMSG_UPDATE_CELESTIAL_BODY = 0x285E, - SMSG_UPDATE_CHARACTER_FLAGS = 0x2806, - SMSG_UPDATE_EXPANSION_LEVEL = 0x2663, - SMSG_UPDATE_GAME_TIME_STATE = 0x2865, - SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26D0, - SMSG_UPDATE_LAST_INSTANCE = 0x26B1, - SMSG_UPDATE_OBJECT = 0x280F, - SMSG_UPDATE_TALENT_DATA = 0x25EB, - SMSG_UPDATE_TASK_PROGRESS = 0x27D0, + SMSG_UPDATE_ACCOUNT_DATA = 0x2751, + SMSG_UPDATE_ACTION_BUTTONS = 0x25F6, + SMSG_UPDATE_CELESTIAL_BODY = 0x286E, + SMSG_UPDATE_CHARACTER_FLAGS = 0x280E, + SMSG_UPDATE_EXPANSION_LEVEL = 0x2665, + SMSG_UPDATE_GAME_TIME_STATE = 0x2875, + SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x26D7, + SMSG_UPDATE_LAST_INSTANCE = 0x26B6, + SMSG_UPDATE_OBJECT = 0x2817, + SMSG_UPDATE_TALENT_DATA = 0x25EC, + SMSG_UPDATE_TASK_PROGRESS = 0x27DC, SMSG_UPDATE_WEEKLY_SPELL_USAGE = 0x2C19, - SMSG_UPDATE_WORLD_STATE = 0x278C, + SMSG_UPDATE_WORLD_STATE = 0x2794, SMSG_USERLIST_ADD = 0x2BB9, SMSG_USERLIST_REMOVE = 0x2BBA, SMSG_USERLIST_UPDATE = 0x2BBB, - SMSG_USE_EQUIPMENT_SET_RESULT = 0x2792, + SMSG_USE_EQUIPMENT_SET_RESULT = 0x279B, SMSG_VENDOR_INVENTORY = 0x25CA, - SMSG_VIGNETTE_UPDATE = 0x27B0, + SMSG_VIGNETTE_UPDATE = 0x27BC, SMSG_VOID_ITEM_SWAP_RESPONSE = 0x25DF, SMSG_VOID_STORAGE_CONTENTS = 0x25DC, SMSG_VOID_STORAGE_FAILED = 0x25DB, @@ -1711,30 +1738,31 @@ enum OpcodeServer : uint16 SMSG_WAIT_QUEUE_FINISH = 0x256E, SMSG_WAIT_QUEUE_UPDATE = 0x256D, SMSG_WARDEN_DATA = 0x2576, + SMSG_WARFRONT_COMPLETED = 0x27AD, SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT = 0x25B4, - SMSG_WEATHER = 0x26CF, + SMSG_WEATHER = 0x26D4, SMSG_WEEKLY_SPELL_USAGE = 0x2C18, SMSG_WHO = 0x2BAE, - SMSG_WHO_IS = 0x26CE, - SMSG_WORLD_QUEST_UPDATE = 0x2847, + SMSG_WHO_IS = 0x26D3, + SMSG_WORLD_QUEST_UPDATE = 0x2851, SMSG_WORLD_SERVER_INFO = 0x25C2, - SMSG_WORLD_TEXT = 0x282E, - SMSG_WOW_TOKEN_AUCTION_SOLD = 0x281C, - SMSG_WOW_TOKEN_BUY_REQUEST_CONFIRMATION = 0x281E, - SMSG_WOW_TOKEN_BUY_RESULT_CONFIRMATION = 0x281F, - SMSG_WOW_TOKEN_CAN_REDEEM_FOR_BALANCE_RESULT = 0x2856, - SMSG_WOW_TOKEN_CAN_VETERAN_BUY_RESULT = 0x281D, - SMSG_WOW_TOKEN_DISTRIBUTION_GLUE_UPDATE = 0x2817, - SMSG_WOW_TOKEN_DISTRIBUTION_UPDATE = 0x2818, - SMSG_WOW_TOKEN_MARKET_PRICE_RESPONSE = 0x2819, - SMSG_WOW_TOKEN_REDEEM_GAME_TIME_UPDATED = 0x2820, - SMSG_WOW_TOKEN_REDEEM_REQUEST_CONFIRMATION = 0x2821, - SMSG_WOW_TOKEN_REDEEM_RESULT = 0x2822, - SMSG_WOW_TOKEN_SELL_REQUEST_CONFIRMATION = 0x281A, - SMSG_WOW_TOKEN_SELL_RESULT_CONFIRMATION = 0x281B, - SMSG_WOW_TOKEN_UPDATE_AUCTIONABLE_LIST_RESPONSE = 0x2823, + SMSG_WORLD_TEXT = 0x2836, + SMSG_WOW_TOKEN_AUCTION_SOLD = 0x2824, + SMSG_WOW_TOKEN_BUY_REQUEST_CONFIRMATION = 0x2826, + SMSG_WOW_TOKEN_BUY_RESULT_CONFIRMATION = 0x2827, + SMSG_WOW_TOKEN_CAN_REDEEM_FOR_BALANCE_RESULT = 0x2861, + SMSG_WOW_TOKEN_CAN_VETERAN_BUY_RESULT = 0x2825, + SMSG_WOW_TOKEN_DISTRIBUTION_GLUE_UPDATE = 0x281F, + SMSG_WOW_TOKEN_DISTRIBUTION_UPDATE = 0x2820, + SMSG_WOW_TOKEN_MARKET_PRICE_RESPONSE = 0x2821, + SMSG_WOW_TOKEN_REDEEM_GAME_TIME_UPDATED = 0x2828, + SMSG_WOW_TOKEN_REDEEM_REQUEST_CONFIRMATION = 0x2829, + SMSG_WOW_TOKEN_REDEEM_RESULT = 0x282A, + SMSG_WOW_TOKEN_SELL_REQUEST_CONFIRMATION = 0x2822, + SMSG_WOW_TOKEN_SELL_RESULT_CONFIRMATION = 0x2823, + SMSG_WOW_TOKEN_UPDATE_AUCTIONABLE_LIST_RESPONSE = 0x282B, SMSG_XP_GAIN_ABORTED = 0x25E0, - SMSG_XP_GAIN_ENABLED = 0x27F0, + SMSG_XP_GAIN_ENABLED = 0x27F8, SMSG_ZONE_UNDER_ATTACK = 0x2BB5, // Opcodes that are not generated automatically diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index acadaf0d64a..b7994e19bf6 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -572,9 +572,9 @@ void WorldSession::LogoutPlayer(bool save) for (int j = BUYBACK_SLOT_START; j < BUYBACK_SLOT_END; ++j) { eslot = j - BUYBACK_SLOT_START; - _player->SetGuidValue(PLAYER_FIELD_INV_SLOT_HEAD + (j * 4), ObjectGuid::Empty); - _player->SetUInt32Value(PLAYER_FIELD_BUYBACK_PRICE_1 + eslot, 0); - _player->SetUInt32Value(PLAYER_FIELD_BUYBACK_TIMESTAMP_1 + eslot, 0); + _player->SetGuidValue(ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD + (j * 4), ObjectGuid::Empty); + _player->SetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_PRICE + eslot, 0); + _player->SetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP + eslot, 0); } _player->SaveToDB(); } @@ -1228,11 +1228,8 @@ uint32 WorldSession::DosProtection::GetMaxPacketCounterAllowed(uint16 opcode) co case CMSG_QUEST_GIVER_STATUS_MULTIPLE_QUERY: // 0 2.5 case CMSG_BEGIN_TRADE: // 0 2.5 case CMSG_INITIATE_TRADE: // 0 3 - case CMSG_CHAT_ADDON_MESSAGE_GUILD: // 0 3.5 - case CMSG_CHAT_ADDON_MESSAGE_OFFICER: // 0 3.5 - case CMSG_CHAT_ADDON_MESSAGE_PARTY: // 0 3.5 - case CMSG_CHAT_ADDON_MESSAGE_RAID: // 0 3.5 - case CMSG_CHAT_ADDON_MESSAGE_WHISPER: // 0 3.5 + case CMSG_CHAT_ADDON_MESSAGE: // 0 3.5 + case CMSG_CHAT_ADDON_MESSAGE_TARGETED: // 0 3.5 case CMSG_CHAT_MESSAGE_AFK: // 0 3.5 case CMSG_CHAT_MESSAGE_CHANNEL: // 0 3.5 case CMSG_CHAT_MESSAGE_DND: // 0 3.5 diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index bba6b5ce039..ecf3dcf5819 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -178,7 +178,7 @@ namespace WorldPackets class CalendarGetCalendar; class CalendarGetEvent; class CalendarGetNumPending; - class CalendarGuildFilter; + class CalendarCommunityFilter; class CalendarRemoveEvent; class CalendarRemoveInvite; class CalendarUpdateEvent; @@ -243,8 +243,7 @@ namespace WorldPackets class ChatMessageWhisper; class ChatMessageChannel; class ChatAddonMessage; - class ChatAddonMessageWhisper; - class ChatAddonMessageChannel; + class ChatAddonMessageTargeted; class ChatMessageAFK; class ChatMessageDND; class ChatMessageEmote; @@ -466,7 +465,6 @@ namespace WorldPackets class MountSpecial; class SetTaxiBenchmarkMode; class MountSetFavorite; - class PvpPrestigeRankUp; class CloseInteraction; } @@ -1129,7 +1127,7 @@ class TC_GAME_API WorldSession void HandleUndeleteCooldownStatusCallback(PreparedQueryResult result); void HandleCharUndeleteOpcode(WorldPackets::Character::UndeleteCharacter& undeleteInfo); - void SendCharCreate(ResponseCodes result); + void SendCharCreate(ResponseCodes result, ObjectGuid const& guid = ObjectGuid::Empty); void SendCharDelete(ResponseCodes result); void SendCharRename(ResponseCodes result, WorldPackets::Character::CharacterRenameInfo const* renameInfo); void SendCharCustomize(ResponseCodes result, WorldPackets::Character::CharCustomizeInfo const* customizeInfo); @@ -1454,8 +1452,7 @@ class TC_GAME_API WorldSession void HandleChatMessageChannelOpcode(WorldPackets::Chat::ChatMessageChannel& chatMessageChannel); void HandleChatMessage(ChatMsg type, uint32 lang, std::string msg, std::string target = ""); void HandleChatAddonMessageOpcode(WorldPackets::Chat::ChatAddonMessage& chatAddonMessage); - void HandleChatAddonMessageWhisperOpcode(WorldPackets::Chat::ChatAddonMessageWhisper& chatAddonMessageWhisper); - void HandleChatAddonMessageChannelOpcode(WorldPackets::Chat::ChatAddonMessageChannel& chatAddonMessageChannel); + void HandleChatAddonMessageTargetedOpcode(WorldPackets::Chat::ChatAddonMessageTargeted& chatAddonMessageTargeted); void HandleChatAddonMessage(ChatMsg type, std::string prefix, std::string text, std::string target = ""); void HandleChatMessageAFKOpcode(WorldPackets::Chat::ChatMessageAFK& chatMessageAFK); void HandleChatMessageDNDOpcode(WorldPackets::Chat::ChatMessageDND& chatMessageDND); @@ -1608,7 +1605,7 @@ class TC_GAME_API WorldSession // Calendar void HandleCalendarGetCalendar(WorldPackets::Calendar::CalendarGetCalendar& calendarGetCalendar); void HandleCalendarGetEvent(WorldPackets::Calendar::CalendarGetEvent& calendarGetEvent); - void HandleCalendarGuildFilter(WorldPackets::Calendar::CalendarGuildFilter& calendarGuildFilter); + void HandleCalendarCommunityFilter(WorldPackets::Calendar::CalendarCommunityFilter& calendarCommunityFilter); void HandleCalendarAddEvent(WorldPackets::Calendar::CalendarAddEvent& calendarAddEvent); void HandleCalendarUpdateEvent(WorldPackets::Calendar::CalendarUpdateEvent& calendarUpdateEvent); void HandleCalendarRemoveEvent(WorldPackets::Calendar::CalendarRemoveEvent& calendarRemoveEvent); @@ -1717,9 +1714,6 @@ class TC_GAME_API WorldSession // Scenario void HandleQueryScenarioPOI(WorldPackets::Scenario::QueryScenarioPOI& queryScenarioPOI); - // Honor - void HandlePvpPrestigeRankUp(WorldPackets::Misc::PvpPrestigeRankUp& /*pvpPrestigeRankUp*/); - union ConnectToKey { struct diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index 974fb7879dc..dd4a75865ac 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -70,8 +70,7 @@ uint8 const WorldSocket::AuthCheckSeed[16] = { 0xC5, 0xC6, 0x98, 0x95, 0x76, 0x3 uint8 const WorldSocket::SessionKeySeed[16] = { 0x58, 0xCB, 0xCF, 0x40, 0xFE, 0x2E, 0xCE, 0xA6, 0x5A, 0x90, 0xB8, 0x01, 0x68, 0x6C, 0x28, 0x0B }; uint8 const WorldSocket::ContinuedSessionSeed[16] = { 0x16, 0xAD, 0x0C, 0xD4, 0x46, 0xF9, 0x4F, 0xB2, 0xEF, 0x7D, 0xEA, 0x2A, 0x17, 0x66, 0x4D, 0x2F }; -uint8 const ClientTypeSeed_Win[16] = { 0x79, 0x7E, 0xCC, 0x19, 0x66, 0x2D, 0xCB, 0xD5, 0x09, 0x0A, 0x44, 0x81, 0x17, 0x3F, 0x1D, 0x26 }; -uint8 const ClientTypeSeed_Wn64[16] = { 0x6E, 0x21, 0x2D, 0xEF, 0x6A, 0x01, 0x24, 0xA3, 0xD9, 0xAD, 0x07, 0xF5, 0xE3, 0x22, 0xF7, 0xAE }; +uint8 const ClientTypeSeed_Wn64[16] = { 0xDD, 0x62, 0x65, 0x17, 0xCC, 0x6D, 0x31, 0x93, 0x2B, 0x47, 0x99, 0x34, 0xCC, 0xDC, 0x0A, 0xBF }; uint8 const ClientTypeSeed_Mc64[16] = { 0x34, 0x1C, 0xFE, 0xFE, 0x3D, 0x72, 0xAC, 0xA9, 0xA4, 0x40, 0x7D, 0xC5, 0x35, 0xDE, 0xD6, 0x6A }; WorldSocket::WorldSocket(tcp::socket&& socket) : Socket(std::move(socket)), @@ -670,9 +669,7 @@ void WorldSocket::HandleAuthSessionCallback(std::shared_ptr<WorldPackets::Auth:: SHA256Hash digestKeyHash; digestKeyHash.UpdateData(account.Game.KeyData.data(), account.Game.KeyData.size()); - if (account.Game.OS == "Win") - digestKeyHash.UpdateData(ClientTypeSeed_Win, 16); - else if (account.Game.OS == "Wn64") + if (account.Game.OS == "Wn64") digestKeyHash.UpdateData(ClientTypeSeed_Wn64, 16); else if (account.Game.OS == "Mc64") digestKeyHash.UpdateData(ClientTypeSeed_Mc64, 16); diff --git a/src/server/game/Services/WorldserverService.h b/src/server/game/Services/WorldserverService.h index 04c5aa0fcaf..4ff6d23ec16 100644 --- a/src/server/game/Services/WorldserverService.h +++ b/src/server/game/Services/WorldserverService.h @@ -22,12 +22,15 @@ #include "account_service.pb.h" #include "authentication_service.pb.h" #include "challenge_service.pb.h" -#include "channel_service.pb.h" +#include "club_membership_listener.pb.h" +#include "club_membership_service.pb.h" #include "connection_service.pb.h" #include "friends_service.pb.h" #include "game_utilities_service.pb.h" +#include "presence_listener.pb.h" #include "presence_service.pb.h" #include "report_service.pb.h" +#include "api/client/v2/report_service.pb.h" #include "resource_service.pb.h" #include "user_manager_service.pb.h" diff --git a/src/server/game/Services/WorldserverServiceDispatcher.cpp b/src/server/game/Services/WorldserverServiceDispatcher.cpp index 41848acfbc1..49e760176dc 100644 --- a/src/server/game/Services/WorldserverServiceDispatcher.cpp +++ b/src/server/game/Services/WorldserverServiceDispatcher.cpp @@ -22,13 +22,13 @@ Battlenet::WorldserverServiceDispatcher::WorldserverServiceDispatcher() { AddService<WorldserverService<account::v1::AccountService>>(); AddService<WorldserverService<authentication::v1::AuthenticationService>>(); - AddService<WorldserverService<challenge::v1::ChallengeService>>(); - AddService<WorldserverService<channel::v1::ChannelService>>(); + AddService<WorldserverService<club::v1::membership::ClubMembershipService>>(); AddService<WorldserverService<connection::v1::ConnectionService>>(); AddService<WorldserverService<friends::v1::FriendsService>>(); AddService<GameUtilitiesService>(); AddService<WorldserverService<presence::v1::PresenceService>>(); AddService<WorldserverService<report::v1::ReportService>>(); + AddService<WorldserverService<report::v2::ReportService>>(); AddService<WorldserverService<resources::v1::ResourcesService>>(); AddService<WorldserverService<user_manager::v1::UserManagerService>>(); } diff --git a/src/server/game/Services/WorldserverServiceDispatcher.h b/src/server/game/Services/WorldserverServiceDispatcher.h index 9cdb2c27639..3aec2011fbe 100644 --- a/src/server/game/Services/WorldserverServiceDispatcher.h +++ b/src/server/game/Services/WorldserverServiceDispatcher.h @@ -25,12 +25,15 @@ #include "account_service.pb.h" #include "authentication_service.pb.h" #include "challenge_service.pb.h" -#include "channel_service.pb.h" +#include "club_membership_listener.pb.h" +#include "club_membership_service.pb.h" #include "connection_service.pb.h" #include "friends_service.pb.h" #include "game_utilities_service.pb.h" +#include "presence_listener.pb.h" #include "presence_service.pb.h" #include "report_service.pb.h" +#include "api/client/v2/report_service.pb.h" #include "resource_service.pb.h" #include "user_manager_service.pb.h" diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h index c988199638e..75860abe402 100644 --- a/src/server/game/Spells/Auras/SpellAuraDefines.h +++ b/src/server/game/Spells/Auras/SpellAuraDefines.h @@ -562,7 +562,9 @@ enum AuraType : uint32 SPELL_AURA_489 = 489, SPELL_AURA_490 = 490, SPELL_AURA_491 = 491, - TOTAL_AURAS = 492 + SPELL_AURA_492 = 492, + SPELL_AURA_493 = 493, // 1 spell, 267116 - Animal Companion (modifies Call Pet) + TOTAL_AURAS }; enum AuraObjectType diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index b639fe12d75..3ed8cc430de 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -563,7 +563,7 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS]= AuraEffect::AuraEffect(Aura* base, uint32 effIndex, int32 *baseAmount, Unit* caster) : m_base(base), m_spellInfo(base->GetSpellInfo()), _effectInfo(base->GetSpellEffectInfo(effIndex)), -m_baseAmount(baseAmount ? *baseAmount : base->GetSpellEffectInfo(effIndex)->BasePoints), +m_baseAmount(baseAmount ? *baseAmount : _effectInfo->CalcBaseValue(caster, base->GetType() == UNIT_AURA_TYPE ? base->GetOwner()->ToUnit() : nullptr, base->GetCastItemLevel())), m_damage(0), m_critChance(0.0f), m_donePct(1.0f), m_spellmod(NULL), m_periodicTimer(0), m_tickNumber(0), m_effIndex(effIndex), m_canBeRecalculated(true), m_isPeriodic(false) @@ -609,7 +609,7 @@ int32 AuraEffect::CalculateAmount(Unit* caster) if (!m_spellInfo->HasAttribute(SPELL_ATTR8_MASTERY_SPECIALIZATION) || G3D::fuzzyEq(GetSpellEffectInfo()->BonusCoefficient, 0.0f)) amount = GetSpellEffectInfo()->CalcValue(caster, &m_baseAmount, GetBase()->GetOwner()->ToUnit(), nullptr, GetBase()->GetCastItemLevel()); else if (caster && caster->GetTypeId() == TYPEID_PLAYER) - amount = int32(caster->GetFloatValue(PLAYER_MASTERY) * GetSpellEffectInfo()->BonusCoefficient); + amount = int32(caster->GetFloatValue(ACTIVE_PLAYER_FIELD_MASTERY) * GetSpellEffectInfo()->BonusCoefficient); // check item enchant aura cast if (!amount && caster) @@ -1483,7 +1483,7 @@ void AuraEffect::HandleModInvisibility(AuraApplication const* aurApp, uint8 mode { // apply glow vision if (target->GetTypeId() == TYPEID_PLAYER) - target->SetByteFlag(PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_AURA_VISION, PLAYER_FIELD_BYTE2_INVISIBILITY_GLOW); + target->SetByteFlag(ACTIVE_PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_AURA_VISION, PLAYER_FIELD_BYTE2_INVISIBILITY_GLOW); target->m_invisibility.AddFlag(type); target->m_invisibility.AddValue(type, GetAmount()); @@ -1495,7 +1495,7 @@ void AuraEffect::HandleModInvisibility(AuraApplication const* aurApp, uint8 mode // if not have different invisibility auras. // remove glow vision if (target->GetTypeId() == TYPEID_PLAYER) - target->RemoveByteFlag(PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_AURA_VISION, PLAYER_FIELD_BYTE2_INVISIBILITY_GLOW); + target->RemoveByteFlag(ACTIVE_PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_AURA_VISION, PLAYER_FIELD_BYTE2_INVISIBILITY_GLOW); target->m_invisibility.DelFlag(type); } @@ -1567,7 +1567,7 @@ void AuraEffect::HandleModStealth(AuraApplication const* aurApp, uint8 mode, boo target->SetStandFlags(UNIT_STAND_FLAGS_CREEP); if (target->GetTypeId() == TYPEID_PLAYER) - target->SetByteFlag(PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_AURA_VISION, PLAYER_FIELD_BYTE2_STEALTH); + target->SetByteFlag(ACTIVE_PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_AURA_VISION, PLAYER_FIELD_BYTE2_STEALTH); } else { @@ -1579,7 +1579,7 @@ void AuraEffect::HandleModStealth(AuraApplication const* aurApp, uint8 mode, boo target->RemoveStandFlags(UNIT_STAND_FLAGS_CREEP); if (target->GetTypeId() == TYPEID_PLAYER) - target->RemoveByteFlag(PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_AURA_VISION, PLAYER_FIELD_BYTE2_STEALTH); + target->RemoveByteFlag(ACTIVE_PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_AURA_VISION, PLAYER_FIELD_BYTE2_STEALTH); } } @@ -2011,7 +2011,7 @@ void AuraEffect::HandleAuraTransform(AuraApplication const* aurApp, uint8 mode, uint32 model_id = 0; // choose a model, based on trigger flag - if (uint32 modelid = sObjectMgr->ChooseDisplayId(ci)) + if (uint32 modelid = ObjectMgr::ChooseDisplayId(ci)->CreatureDisplayID) model_id = modelid; target->SetDisplayId(model_id); @@ -2052,10 +2052,10 @@ void AuraEffect::HandleAuraTransform(AuraApplication const* aurApp, uint8 mode, uint32 cr_id = target->GetAuraEffectsByType(SPELL_AURA_MOUNTED).front()->GetMiscValue(); if (CreatureTemplate const* ci = sObjectMgr->GetCreatureTemplate(cr_id)) { - uint32 displayID = ObjectMgr::ChooseDisplayId(ci); - sObjectMgr->GetCreatureModelRandomGender(&displayID); + CreatureModel model = *ObjectMgr::ChooseDisplayId(ci); + sObjectMgr->GetCreatureModelRandomGender(&model, ci); - target->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, displayID); + target->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, model.CreatureDisplayID); } } } @@ -2400,9 +2400,9 @@ void AuraEffect::HandleAuraTrackCreatures(AuraApplication const* aurApp, uint8 m return; if (apply) - target->SetFlag(PLAYER_TRACK_CREATURES, uint32(1) << (GetMiscValue() - 1)); + target->SetFlag(ACTIVE_PLAYER_FIELD_TRACK_CREATURES, uint32(1) << (GetMiscValue() - 1)); else - target->RemoveFlag(PLAYER_TRACK_CREATURES, uint32(1) << (GetMiscValue() - 1)); + target->RemoveFlag(ACTIVE_PLAYER_FIELD_TRACK_CREATURES, uint32(1) << (GetMiscValue() - 1)); } void AuraEffect::HandleAuraTrackResources(AuraApplication const* aurApp, uint8 mode, bool apply) const @@ -2416,9 +2416,9 @@ void AuraEffect::HandleAuraTrackResources(AuraApplication const* aurApp, uint8 m return; if (apply) - target->SetFlag(PLAYER_TRACK_RESOURCES, uint32(1) << (GetMiscValue() - 1)); + target->SetFlag(ACTIVE_PLAYER_FIELD_TRACK_RESOURCES, uint32(1) << (GetMiscValue() - 1)); else - target->RemoveFlag(PLAYER_TRACK_RESOURCES, uint32(1) << (GetMiscValue() - 1)); + target->RemoveFlag(ACTIVE_PLAYER_FIELD_TRACK_RESOURCES, uint32(1) << (GetMiscValue() - 1)); } void AuraEffect::HandleAuraTrackStealthed(AuraApplication const* aurApp, uint8 mode, bool apply) const @@ -2437,7 +2437,7 @@ void AuraEffect::HandleAuraTrackStealthed(AuraApplication const* aurApp, uint8 m if (target->HasAuraType(GetAuraType())) return; } - target->ApplyModFlag(PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_TRACK_STEALTHED, apply); + target->ApplyModFlag(ACTIVE_PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_TRACK_STEALTHED, apply); } void AuraEffect::HandleAuraModStalked(AuraApplication const* aurApp, uint8 mode, bool apply) const @@ -2553,8 +2553,9 @@ void AuraEffect::HandleAuraMounted(AuraApplication const* aurApp, uint8 mode, bo if (!displayId) { - displayId = ObjectMgr::ChooseDisplayId(creatureInfo); - sObjectMgr->GetCreatureModelRandomGender(&displayId); + CreatureModel model = *ObjectMgr::ChooseDisplayId(creatureInfo); + sObjectMgr->GetCreatureModelRandomGender(&model, creatureInfo); + displayId = model.CreatureDisplayID; } //some spell has one aura of mount and one of vehicle @@ -3202,14 +3203,8 @@ void AuraEffect::HandleAuraModResistance(AuraApplication const* aurApp, uint8 mo Unit* target = aurApp->GetTarget(); for (int8 x = SPELL_SCHOOL_NORMAL; x < MAX_SPELL_SCHOOL; x++) - { if (GetMiscValue() & int32(1<<x)) - { target->HandleStatModifier(UnitMods(UNIT_MOD_RESISTANCE_START + x), TOTAL_VALUE, float(GetAmount()), apply); - if (target->GetTypeId() == TYPEID_PLAYER || target->IsPet()) - target->ApplyResistanceBuffModsMod(SpellSchools(x), GetAmount() > 0, (float)GetAmount(), apply); - } - } } void AuraEffect::HandleAuraModBaseResistancePCT(AuraApplication const* aurApp, uint8 mode, bool apply) const @@ -3251,20 +3246,9 @@ void AuraEffect::HandleModResistancePercent(AuraApplication const* aurApp, uint8 if (GetMiscValue() & int32(1<<i)) { if (spellGroupVal) - { target->HandleStatModifier(UnitMods(UNIT_MOD_RESISTANCE_START + i), TOTAL_PCT, (float)spellGroupVal, !apply); - if (target->GetTypeId() == TYPEID_PLAYER || target->IsPet()) - { - target->ApplyResistanceBuffModsPercentMod(SpellSchools(i), true, (float)spellGroupVal, !apply); - target->ApplyResistanceBuffModsPercentMod(SpellSchools(i), false, (float)spellGroupVal, !apply); - } - } + target->HandleStatModifier(UnitMods(UNIT_MOD_RESISTANCE_START + i), TOTAL_PCT, float(GetAmount()), apply); - if (target->GetTypeId() == TYPEID_PLAYER || target->IsPet()) - { - target->ApplyResistanceBuffModsPercentMod(SpellSchools(i), true, (float)GetAmount(), apply); - target->ApplyResistanceBuffModsPercentMod(SpellSchools(i), false, (float)GetAmount(), apply); - } } } } @@ -3302,11 +3286,11 @@ void AuraEffect::HandleModTargetResistance(AuraApplication const* aurApp, uint8 // show armor penetration if (target->GetTypeId() == TYPEID_PLAYER && (GetMiscValue() & SPELL_SCHOOL_MASK_NORMAL)) - target->ApplyModInt32Value(PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE, GetAmount(), apply); + target->ApplyModInt32Value(ACTIVE_PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE, GetAmount(), apply); // show as spell penetration only full spell penetration bonuses (all resistances except armor and holy if (target->GetTypeId() == TYPEID_PLAYER && (GetMiscValue() & SPELL_SCHOOL_MASK_SPELL) == SPELL_SCHOOL_MASK_SPELL) - target->ApplyModInt32Value(PLAYER_FIELD_MOD_TARGET_RESISTANCE, GetAmount(), apply); + target->ApplyModInt32Value(ACTIVE_PLAYER_FIELD_MOD_TARGET_RESISTANCE, GetAmount(), apply); } /********************************/ @@ -3582,7 +3566,7 @@ void AuraEffect::HandleOverrideSpellPowerByAttackPower(AuraApplication const* au if (!target) return; - target->ApplyModSignedFloatValue(PLAYER_FIELD_OVERRIDE_SPELL_POWER_BY_AP_PCT, float(m_amount), apply); + target->ApplyModSignedFloatValue(ACTIVE_PLAYER_FIELD_OVERRIDE_SPELL_POWER_BY_AP_PCT, float(m_amount), apply); target->UpdateSpellDamageAndHealingBonus(); } @@ -3595,7 +3579,7 @@ void AuraEffect::HandleOverrideAttackPowerBySpellPower(AuraApplication const* au if (!target) return; - target->ApplyModSignedFloatValue(PLAYER_FIELD_OVERRIDE_AP_BY_SPELL_POWER_PERCENT, float(m_amount), apply); + target->ApplyModSignedFloatValue(ACTIVE_PLAYER_FIELD_OVERRIDE_AP_BY_SPELL_POWER_PERCENT, float(m_amount), apply); target->UpdateAttackPowerAndDamage(); target->UpdateAttackPowerAndDamage(true); } @@ -3607,7 +3591,7 @@ void AuraEffect::HandleModVersatilityByPct(AuraApplication const* aurApp, uint8 if (Player* target = aurApp->GetTarget()->ToPlayer()) { - target->SetStatFloatValue(PLAYER_VERSATILITY_BONUS, target->GetTotalAuraModifier(SPELL_AURA_MOD_VERSATILITY)); + target->SetStatFloatValue(ACTIVE_PLAYER_FIELD_VERSATILITY_BONUS, target->GetTotalAuraModifier(SPELL_AURA_MOD_VERSATILITY)); target->UpdateHealingDonePercentMod(); target->UpdateVersatilityDamageDone(); } @@ -4210,7 +4194,7 @@ void AuraEffect::HandleModDamageDone(AuraApplication const* aurApp, uint8 mode, // This information for client side use only if (target->GetTypeId() == TYPEID_PLAYER) { - uint16 baseField = GetAmount() >= 0 ? PLAYER_FIELD_MOD_DAMAGE_DONE_POS : PLAYER_FIELD_MOD_DAMAGE_DONE_NEG; + uint16 baseField = GetAmount() >= 0 ? ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS : ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG; for (uint16 i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i) if (GetMiscValue() & (1 << i)) target->ApplyModInt32Value(baseField + i, GetAmount(), apply); @@ -4251,9 +4235,9 @@ void AuraEffect::HandleModDamagePercentDone(AuraApplication const* aurApp, uint8 if (GetMiscValue() & (1 << i)) { if (spellGroupVal) - target->ApplyPercentModFloatValue(PLAYER_FIELD_MOD_DAMAGE_DONE_PCT + i, float(spellGroupVal), !apply); + target->ApplyPercentModFloatValue(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT + i, float(spellGroupVal), !apply); - target->ApplyPercentModFloatValue(PLAYER_FIELD_MOD_DAMAGE_DONE_PCT + i, float(GetAmount()), apply); + target->ApplyPercentModFloatValue(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT + i, float(GetAmount()), apply); } } } @@ -4341,10 +4325,10 @@ void AuraEffect::HandleNoReagentUseAura(AuraApplication const* aurApp, uint8 mod if (SpellEffectInfo const* effect = (*i)->GetSpellEffectInfo()) mask |= effect->SpellClassMask; - target->SetUInt32Value(PLAYER_NO_REAGENT_COST_1 , mask[0]); - target->SetUInt32Value(PLAYER_NO_REAGENT_COST_1+1, mask[1]); - target->SetUInt32Value(PLAYER_NO_REAGENT_COST_1+2, mask[2]); - target->SetUInt32Value(PLAYER_NO_REAGENT_COST_1+3, mask[3]); + target->SetUInt32Value(ACTIVE_PLAYER_FIELD_NO_REAGENT_COST , mask[0]); + target->SetUInt32Value(ACTIVE_PLAYER_FIELD_NO_REAGENT_COST+1, mask[1]); + target->SetUInt32Value(ACTIVE_PLAYER_FIELD_NO_REAGENT_COST+2, mask[2]); + target->SetUInt32Value(ACTIVE_PLAYER_FIELD_NO_REAGENT_COST+3, mask[3]); } void AuraEffect::HandleAuraRetainComboPoints(AuraApplication const* aurApp, uint8 mode, bool apply) const @@ -4953,7 +4937,7 @@ void AuraEffect::HandleAuraOverrideSpells(AuraApplication const* aurApp, uint8 m if (apply) { - target->SetUInt16Value(PLAYER_FIELD_BYTES3, PLAYER_BYTES_3_OVERRIDE_SPELLS_UINT16_OFFSET, overrideId); + target->SetUInt16Value(ACTIVE_PLAYER_FIELD_BYTES3, PLAYER_BYTES_3_OVERRIDE_SPELLS_UINT16_OFFSET, overrideId); if (OverrideSpellDataEntry const* overrideSpells = sOverrideSpellDataStore.LookupEntry(overrideId)) for (uint8 i = 0; i < MAX_OVERRIDE_SPELL; ++i) if (uint32 spellId = overrideSpells->Spells[i]) @@ -4961,7 +4945,7 @@ void AuraEffect::HandleAuraOverrideSpells(AuraApplication const* aurApp, uint8 m } else { - target->SetUInt16Value(PLAYER_FIELD_BYTES3, PLAYER_BYTES_3_OVERRIDE_SPELLS_UINT16_OFFSET, 0); + target->SetUInt16Value(ACTIVE_PLAYER_FIELD_BYTES3, PLAYER_BYTES_3_OVERRIDE_SPELLS_UINT16_OFFSET, 0); if (OverrideSpellDataEntry const* overrideSpells = sOverrideSpellDataStore.LookupEntry(overrideId)) for (uint8 i = 0; i < MAX_OVERRIDE_SPELL; ++i) if (uint32 spellId = overrideSpells->Spells[i]) @@ -5005,9 +4989,9 @@ void AuraEffect::HandlePreventResurrection(AuraApplication const* aurApp, uint8 return; if (apply) - aurApp->GetTarget()->RemoveFlag(PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_RELEASE_TIMER); + aurApp->GetTarget()->RemoveFlag(ACTIVE_PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_RELEASE_TIMER); else if (!aurApp->GetTarget()->GetMap()->Instanceable()) - aurApp->GetTarget()->SetFlag(PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_RELEASE_TIMER); + aurApp->GetTarget()->SetFlag(ACTIVE_PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_RELEASE_TIMER); } void AuraEffect::HandleMastery(AuraApplication const* aurApp, uint8 mode, bool /*apply*/) const @@ -5584,7 +5568,7 @@ void AuraEffect::HandlePeriodicDamageAurasTick(Unit* target, Unit* caster) const if (overkill < 0) overkill = 0; - SpellPeriodicAuraLogInfo pInfo(this, damage, overkill, absorb, resist, 0.0f, crit); + SpellPeriodicAuraLogInfo pInfo(this, damage, dmg, overkill, absorb, resist, 0.0f, crit); caster->DealDamage(target, damage, &cleanDamage, DOT, GetSpellInfo()->GetSchoolMask(), GetSpellInfo(), true); @@ -5674,6 +5658,7 @@ void AuraEffect::HandlePeriodicHealthLeechAuraTick(Unit* target, Unit* caster) c // SendSpellNonMeleeDamageLog expects non-absorbed/non-resisted damage SpellNonMeleeDamage log(caster, target, GetId(), GetBase()->GetSpellXSpellVisualId(), GetSpellInfo()->GetSchoolMask(), GetBase()->GetCastGUID()); log.damage = damage; + log.originalDamage = dmg; log.absorb = absorb; log.resist = resist; log.periodicLog = true; @@ -5822,7 +5807,7 @@ void AuraEffect::HandlePeriodicHealAurasTick(Unit* target, Unit* caster) const caster->CalcHealAbsorb(healInfo); caster->DealHeal(healInfo); - SpellPeriodicAuraLogInfo pInfo(this, heal, heal - healInfo.GetEffectiveHeal(), healInfo.GetAbsorb(), 0, 0.0f, crit); + SpellPeriodicAuraLogInfo pInfo(this, heal, damage, heal - healInfo.GetEffectiveHeal(), healInfo.GetAbsorb(), 0, 0.0f, crit); target->SendPeriodicAuraLog(&pInfo); target->getHostileRefManager().threatAssist(caster, float(healInfo.GetEffectiveHeal()) * 0.5f, GetSpellInfo()); @@ -5866,7 +5851,7 @@ void AuraEffect::HandlePeriodicManaLeechAuraTick(Unit* target, Unit* caster) con float gainMultiplier = GetSpellEffectInfo()->CalcValueMultiplier(caster); - SpellPeriodicAuraLogInfo pInfo(this, drainedAmount, 0, 0, 0, gainMultiplier, false); + SpellPeriodicAuraLogInfo pInfo(this, drainedAmount, drainAmount, 0, 0, 0, gainMultiplier, false); int32 gainAmount = int32(drainedAmount * gainMultiplier); int32 gainedAmount = 0; @@ -5920,7 +5905,7 @@ void AuraEffect::HandleObsModPowerAuraTick(Unit* target, Unit* caster) const TC_LOG_DEBUG("spells.periodic", "PeriodicTick: %s energize %s for %u dmg inflicted by %u", GetCasterGUID().ToString().c_str(), target->GetGUID().ToString().c_str(), amount, GetId()); - SpellPeriodicAuraLogInfo pInfo(this, amount, 0, 0, 0, 0.0f, false); + SpellPeriodicAuraLogInfo pInfo(this, amount, amount, 0, 0, 0, 0.0f, false); int32 gain = target->ModifyPower(powerType, amount); if (caster) @@ -5948,7 +5933,7 @@ void AuraEffect::HandlePeriodicEnergizeAuraTick(Unit* target, Unit* caster) cons // ignore negative values (can be result apply spellmods to aura damage int32 amount = std::max(m_amount, 0); - SpellPeriodicAuraLogInfo pInfo(this, amount, 0, 0, 0, 0.0f, false); + SpellPeriodicAuraLogInfo pInfo(this, amount, amount, 0, 0, 0, 0.0f, false); TC_LOG_DEBUG("spells.periodic", "PeriodicTick: %s energize %s for %u dmg inflicted by %u", GetCasterGUID().ToString().c_str(), target->GetGUID().ToString().c_str(), amount, GetId()); @@ -6156,9 +6141,9 @@ void AuraEffect::HandleAllowUsingGameobjectsWhileMounted(AuraApplication const* return; if (apply) - aurApp->GetTarget()->SetFlag(PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_CAN_USE_OBJECTS_MOUNTED); + aurApp->GetTarget()->SetFlag(ACTIVE_PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_CAN_USE_OBJECTS_MOUNTED); else if (!aurApp->GetTarget()->HasAuraType(SPELL_AURA_ALLOW_USING_GAMEOBJECTS_WHILE_MOUNTED)) - aurApp->GetTarget()->RemoveFlag(PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_CAN_USE_OBJECTS_MOUNTED); + aurApp->GetTarget()->RemoveFlag(ACTIVE_PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_CAN_USE_OBJECTS_MOUNTED); } void AuraEffect::HandlePlayScene(AuraApplication const* aurApp, uint8 mode, bool apply) const diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 8cc2a1b7f6d..d9b428c0598 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -491,7 +491,7 @@ void SpellCastTargets::OutDebug() const TC_LOG_DEBUG("spells", "pitch: %f", m_pitch); } -SpellValue::SpellValue(Difficulty diff, SpellInfo const* proto) +SpellValue::SpellValue(Difficulty diff, SpellInfo const* proto, Unit const* caster) { // todo 6.x SpellEffectInfoVector effects = proto->GetEffectsForDifficulty(diff); @@ -499,8 +499,9 @@ SpellValue::SpellValue(Difficulty diff, SpellInfo const* proto) memset(EffectBasePoints, 0, sizeof(EffectBasePoints)); for (SpellEffectInfo const* effect : effects) if (effect) - EffectBasePoints[effect->EffectIndex] = effect->BasePoints; + EffectBasePoints[effect->EffectIndex] = effect->CalcBaseValue(caster, nullptr, -1); + CustomBasePointsMask = 0; MaxAffectedTargets = proto->MaxAffectedTargets; RadiusMod = 1.0f; AuraStackAmount = 1; @@ -521,7 +522,7 @@ protected: Spell::Spell(Unit* caster, SpellInfo const* info, TriggerCastFlags triggerFlags, ObjectGuid originalCasterGUID, bool skipCheck) : m_spellInfo(info), m_caster((info->HasAttribute(SPELL_ATTR6_CAST_BY_CHARMER) && caster->GetCharmerOrOwner()) ? caster->GetCharmerOrOwner() : caster), -m_spellValue(new SpellValue(caster->GetMap()->GetDifficultyID(), m_spellInfo)) +m_spellValue(new SpellValue(caster->GetMap()->GetDifficultyID(), m_spellInfo, caster)) { _effects = info->GetEffectsForDifficulty(caster->GetMap()->GetDifficultyID()); @@ -537,7 +538,6 @@ m_spellValue(new SpellValue(caster->GetMap()->GetDifficultyID(), m_spellInfo)) m_delayAtDamageCount = 0; m_applyMultiplierMask = 0; - m_auraScaleMask = 0; memset(m_damageMultipliers, 0, sizeof(m_damageMultipliers)); // Get data for type of attack @@ -791,31 +791,6 @@ void Spell::SelectSpellTargets() } } } - else if (m_auraScaleMask) - { - bool checkLvl = !m_UniqueTargetInfo.empty(); - for (std::vector<TargetInfo>::iterator ihit = m_UniqueTargetInfo.begin(); ihit != m_UniqueTargetInfo.end();) - { - // remove targets which did not pass min level check - if (m_auraScaleMask && ihit->effectMask == m_auraScaleMask) - { - // Do not check for selfcast - if (!ihit->scaleAura && ihit->targetGUID != m_caster->GetGUID()) - { - ihit = m_UniqueTargetInfo.erase(ihit); - continue; - } - } - - ++ihit; - } - - if (checkLvl && m_UniqueTargetInfo.empty()) - { - SendCastResult(SPELL_FAILED_LOWLEVEL); - finish(false); - } - } } if (m_targets.HasDst()) @@ -1489,6 +1464,9 @@ void Spell::SelectImplicitCasterObjectTargets(SpellEffIndex effIndex, SpellImpli if (m_caster->GetTypeId() == TYPEID_UNIT && m_caster->IsVehicle()) target = m_caster->GetVehicleKit()->GetPassenger(targetType.GetTarget() - TARGET_UNIT_PASSENGER_0); break; + case TARGET_UNIT_OWN_CRITTER: + target = ObjectAccessor::GetCreatureOrPetOrVehicle(*m_caster, m_caster->GetCritterGUID()); + break; default: break; } @@ -2128,13 +2106,6 @@ void Spell::AddUnitTarget(Unit* target, uint32 effectMask, bool checkIfValid /*= if (targetGUID == ihit->targetGUID) // Found in list { ihit->effectMask |= effectMask; // Immune effects removed from mask - ihit->scaleAura = false; - if (m_auraScaleMask && ihit->effectMask == m_auraScaleMask && m_caster != target) - { - SpellInfo const* auraSpell = m_spellInfo->GetFirstRankSpell(); - if (uint32(target->GetLevelForTarget(m_caster) + 10) >= auraSpell->SpellLevel) - ihit->scaleAura = true; - } return; } } @@ -2149,13 +2120,6 @@ void Spell::AddUnitTarget(Unit* target, uint32 effectMask, bool checkIfValid /*= targetInfo.alive = target->IsAlive(); targetInfo.damage = 0; targetInfo.crit = false; - targetInfo.scaleAura = false; - if (m_auraScaleMask && targetInfo.effectMask == m_auraScaleMask && m_caster != target) - { - SpellInfo const* auraSpell = m_spellInfo->GetFirstRankSpell(); - if (uint32(target->GetLevelForTarget(m_caster) + 10) >= auraSpell->SpellLevel) - targetInfo.scaleAura = true; - } // Calculate hit result if (m_originalCaster) @@ -2398,7 +2362,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target) if (unit->IsPvP() && m_caster->GetTypeId() == TYPEID_PLAYER) enablePvP = true; // Decide on PvP flagging now, but act on it later. - SpellMissInfo missInfo2 = DoSpellHitOnUnit(spellHitTarget, mask, target->scaleAura); + SpellMissInfo missInfo2 = DoSpellHitOnUnit(spellHitTarget, mask); if (missInfo2 != SPELL_MISS_NONE) { @@ -2591,7 +2555,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target) } } -SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleAura) +SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask) { if (!unit || !effectMask) return SPELL_MISS_EVADE; @@ -2676,34 +2640,19 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA if (aura_effmask) { - // Select rank for aura with level requirements only in specific cases - // Unit has to be target only of aura effect, both caster and target have to be players, target has to be other than unit target - SpellInfo const* aurSpellInfo = m_spellInfo; - int32 basePoints[MAX_SPELL_EFFECTS]; - if (scaleAura) - { - aurSpellInfo = m_spellInfo->GetAuraRankForLevel(unitTarget->getLevel()); - ASSERT(aurSpellInfo); - for (SpellEffectInfo const* effect : aurSpellInfo->GetEffectsForDifficulty(0)) - { - basePoints[effect->EffectIndex] = effect->BasePoints; - if (SpellEffectInfo const* myEffect = GetEffect(effect->EffectIndex)) - { - if (myEffect->Effect != effect->Effect) - { - aurSpellInfo = m_spellInfo; - break; - } - } - } - } - if (m_originalCaster) { + int32 basePoints[MAX_SPELL_EFFECTS]; + for (SpellEffectInfo const* auraSpellEffect : GetEffects()) + if (auraSpellEffect) + basePoints[auraSpellEffect->EffectIndex] = (m_spellValue->CustomBasePointsMask & (1 << auraSpellEffect->EffectIndex)) ? + m_spellValue->EffectBasePoints[auraSpellEffect->EffectIndex] : + auraSpellEffect->CalcBaseValue(m_originalCaster, unit, m_castItemLevel); + bool refresh = false; bool const resetPeriodicTimer = !(_triggeredCastFlags & TRIGGERED_DONT_RESET_PERIODIC_TIMER); - m_spellAura = Aura::TryRefreshStackOrCreate(aurSpellInfo, m_castId, effectMask, unit, - m_originalCaster, (aurSpellInfo == m_spellInfo) ? m_spellValue->EffectBasePoints : basePoints, + m_spellAura = Aura::TryRefreshStackOrCreate(m_spellInfo, m_castId, effectMask, unit, + m_originalCaster, basePoints, m_CastItem, ObjectGuid::Empty, &refresh, resetPeriodicTimer, ObjectGuid::Empty, m_castItemLevel); if (m_spellAura) { @@ -2718,7 +2667,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA // Now Reduce spell duration using data received at spell hit int32 duration = m_spellAura->GetMaxDuration(); - float diminishMod = unit->ApplyDiminishingToDuration(aurSpellInfo, duration, m_originalCaster, diminishLevel); + float diminishMod = unit->ApplyDiminishingToDuration(m_spellInfo, duration, m_originalCaster, diminishLevel); // unit is immune to aura if it was diminished to 0 duration if (diminishMod == 0.0f) @@ -2739,13 +2688,13 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleA if (AuraApplication* aurApp = m_spellAura->GetApplicationOfTarget(m_originalCaster->GetGUID())) positive = aurApp->IsPositive(); - duration = m_originalCaster->ModSpellDuration(aurSpellInfo, unit, duration, positive, effectMask); + duration = m_originalCaster->ModSpellDuration(m_spellInfo, unit, duration, positive, effectMask); if (duration > 0) { // Haste modifies duration of channeled spells if (m_spellInfo->IsChanneled()) - m_originalCaster->ModSpellDurationTime(aurSpellInfo, duration, this); + m_originalCaster->ModSpellDurationTime(m_spellInfo, duration, this); else if (m_spellInfo->HasAttribute(SPELL_ATTR5_HASTE_AFFECT_DURATION)) { int32 origDuration = duration; @@ -2953,27 +2902,6 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggered InitExplicitTargets(*targets); - // Fill aura scaling information - if (m_caster->IsControlledByPlayer() && !m_spellInfo->IsPassive() && m_spellInfo->SpellLevel && !m_spellInfo->IsChanneled() && !(_triggeredCastFlags & TRIGGERED_IGNORE_AURA_SCALING)) - { - for (SpellEffectInfo const* effect : GetEffects()) - { - if (effect && effect->Effect == SPELL_EFFECT_APPLY_AURA) - { - // Change aura with ranks only if basepoints are taken from spellInfo and aura is positive - if (m_spellInfo->IsPositiveEffect(effect->EffectIndex)) - { - m_auraScaleMask |= (1 << effect->EffectIndex); - if (m_spellValue->EffectBasePoints[effect->EffectIndex] != effect->BasePoints) - { - m_auraScaleMask = 0; - break; - } - } - } - } - } - m_spellState = SPELL_STATE_PREPARING; if (triggeredByAura) @@ -6045,7 +5973,8 @@ SpellCastResult Spell::CheckArenaAndRatedBattlegroundCastRules() int32 Spell::CalculateDamage(uint8 i, Unit const* target, float* var /*= nullptr*/) const { - return m_caster->CalculateSpellDamage(target, m_spellInfo, i, &m_spellValue->EffectBasePoints[i], var, m_castItemLevel); + bool needRecalculateBasePoints = !(m_spellValue->CustomBasePointsMask & (1 << i)); + return m_caster->CalculateSpellDamage(target, m_spellInfo, i, needRecalculateBasePoints ? nullptr : &m_spellValue->EffectBasePoints[i], var, m_castItemLevel); } bool Spell::CanAutoCast(Unit* target) @@ -7295,7 +7224,7 @@ SpellCastResult Spell::CanOpenLock(uint32 effIndex, uint32 lockId, SkillType& sk skillId = SkillByLockType(LockType(lockInfo->Index[j])); - if (skillId != SKILL_NONE || lockInfo->Index[j] == LOCKTYPE_PICKLOCK) + if (skillId != SKILL_NONE || lockInfo->Index[j] == LOCKTYPE_LOCKPICKING) { reqSkillValue = lockInfo->Skill[j]; @@ -7303,7 +7232,7 @@ SpellCastResult Spell::CanOpenLock(uint32 effIndex, uint32 lockId, SkillType& sk skillValue = 0; if (!m_CastItem && m_caster->GetTypeId() == TYPEID_PLAYER) skillValue = m_caster->ToPlayer()->GetSkillValue(skillId); - else if (lockInfo->Index[j] == LOCKTYPE_PICKLOCK) + else if (lockInfo->Index[j] == LOCKTYPE_LOCKPICKING) skillValue = m_caster->getLevel() * 5; // skill bonus provided by casting spell (mostly item spells) @@ -7330,8 +7259,8 @@ void Spell::SetSpellValue(SpellValueMod mod, int32 value) { if (mod < SPELLVALUE_BASE_POINT_END) { - if (SpellEffectInfo const* effect = GetEffect(mod)) - m_spellValue->EffectBasePoints[mod] = effect->CalcBaseValue(value); + m_spellValue->EffectBasePoints[mod] = value; + m_spellValue->CustomBasePointsMask |= 1 << mod; return; } diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index 45b012a82e6..c0a9dff527b 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -296,8 +296,9 @@ class TC_GAME_API SpellCastTargets struct SpellValue { - explicit SpellValue(Difficulty diff, SpellInfo const* proto); + explicit SpellValue(Difficulty diff, SpellInfo const* proto, Unit const* caster); int32 EffectBasePoints[MAX_SPELL_EFFECTS]; + uint32 CustomBasePointsMask; uint32 MaxAffectedTargets; float RadiusMod; uint8 AuraStackAmount; @@ -788,7 +789,6 @@ class TC_GAME_API Spell bool processed; bool alive; bool crit; - bool scaleAura; }; std::vector<TargetInfo> m_UniqueTargetInfo; uint32 m_channelTargetEffectMask; // Mask req. alive targets @@ -817,7 +817,7 @@ class TC_GAME_API Spell void AddDestTarget(SpellDestination const& dest, uint32 effIndex); void DoAllEffectOnTarget(TargetInfo* target); - SpellMissInfo DoSpellHitOnUnit(Unit* unit, uint32 effectMask, bool scaleAura); + SpellMissInfo DoSpellHitOnUnit(Unit* unit, uint32 effectMask); void DoTriggersOnSpellHit(Unit* unit, uint32 effMask); void DoAllEffectOnTarget(GOTargetInfo* target); void DoAllEffectOnTarget(ItemTargetInfo* target); @@ -884,7 +884,6 @@ class TC_GAME_API Spell SpellInfo const* m_triggeredByAuraSpell; bool m_skipCheck; - uint32 m_auraScaleMask; std::unique_ptr<PathGenerator> m_preGeneratedPath; std::vector<SpellLogEffectPowerDrainParams> _powerDrainTargets[MAX_SPELL_EFFECTS]; diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index b6f009b971e..34743342da6 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -410,7 +410,8 @@ void Spell::EffectEnvironmentalDMG(SpellEffIndex /*effIndex*/) m_caster->CalcAbsorbResist(damageInfo); SpellNonMeleeDamage log(m_caster, unitTarget, m_spellInfo->Id, m_SpellVisual, m_spellInfo->GetSchoolMask(), m_castId); - log.damage = damage; + log.damage = damageInfo.GetDamage(); + log.originalDamage = damage; log.absorb = damageInfo.GetAbsorb(); log.resist = damageInfo.GetResist(); @@ -2365,7 +2366,7 @@ void Spell::EffectLearnSkill(SpellEffIndex /*effIndex*/) if (unitTarget->GetTypeId() != TYPEID_PLAYER) return; - if (damage < 0) + if (damage < 1) return; uint32 skillid = effectInfo->MiscValue; @@ -2378,7 +2379,7 @@ void Spell::EffectLearnSkill(SpellEffIndex /*effIndex*/) return; uint16 skillval = unitTarget->ToPlayer()->GetPureSkillValue(skillid); - unitTarget->ToPlayer()->SetSkill(skillid, effectInfo->CalcValue(), std::max<uint16>(skillval, 1), tier->Value[damage - 1]); + unitTarget->ToPlayer()->SetSkill(skillid, damage, std::max<uint16>(skillval, 1), tier->Value[damage - 1]); } void Spell::EffectPlayMovie(SpellEffIndex /*effIndex*/) @@ -4182,12 +4183,41 @@ void Spell::EffectSkinning(SpellEffIndex /*effIndex*/) creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); creature->SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); - int32 reqValue = targetLevel < 10 ? 0 : targetLevel < 20 ? (targetLevel-10)*10 : targetLevel*5; + if (skill == SKILL_SKINNING) + { + int32 reqValue; + if (targetLevel <= 10) + reqValue = 1; + else if (targetLevel < 20) + reqValue = (targetLevel - 10) * 10; + else if (targetLevel <= 73) + reqValue = targetLevel * 5; + else if (targetLevel < 80) + reqValue = targetLevel * 10 - 365; + else if (targetLevel <= 84) + reqValue = targetLevel * 5 + 35; + else if (targetLevel <= 87) + reqValue = targetLevel * 15 - 805; + else if (targetLevel <= 92) + reqValue = (targetLevel - 62) * 20; + else if (targetLevel <= 104) + reqValue = targetLevel * 5 + 175; + else if (targetLevel <= 107) + reqValue = targetLevel * 15 - 905; + else if (targetLevel <= 112) + reqValue = (targetLevel - 72) * 20; + else if (targetLevel <= 122) + reqValue = (targetLevel - 32) * 10; + else + reqValue = 900; - int32 skillValue = m_caster->ToPlayer()->GetPureSkillValue(skill); + // TODO: Specialize skillid for each expansion + // new db field? + // tied to one of existing expansion fields in creature_template? - // Double chances for elites - m_caster->ToPlayer()->UpdateGatherSkill(skill, skillValue, reqValue, creature->isElite() ? 2 : 1); + // Double chances for elites + m_caster->ToPlayer()->UpdateGatherSkill(skill, damage, reqValue, creature->isElite() ? 2 : 1); + } } void Spell::EffectCharge(SpellEffIndex /*effIndex*/) diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index d1dfa32f7cb..d1ae93cd318 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -368,6 +368,7 @@ SpellImplicitTargetInfo::StaticData SpellImplicitTargetInfo::_data[TOTAL_SPELL_ {TARGET_OBJECT_TYPE_NONE, TARGET_REFERENCE_TYPE_NONE, TARGET_SELECT_CATEGORY_NYI, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, // 147 {TARGET_OBJECT_TYPE_NONE, TARGET_REFERENCE_TYPE_NONE, TARGET_SELECT_CATEGORY_NYI, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, // 148 {TARGET_OBJECT_TYPE_DEST, TARGET_REFERENCE_TYPE_CASTER, TARGET_SELECT_CATEGORY_DEFAULT, TARGET_CHECK_DEFAULT, TARGET_DIR_RANDOM}, // 149 + {TARGET_OBJECT_TYPE_UNIT, TARGET_REFERENCE_TYPE_CASTER, TARGET_SELECT_CATEGORY_DEFAULT, TARGET_CHECK_DEFAULT, TARGET_DIR_NONE}, // 150 }; SpellEffectInfo::SpellEffectInfo(SpellInfo const* spellInfo, uint8 effIndex, SpellEffectEntry const* _effect) @@ -377,7 +378,6 @@ SpellEffectInfo::SpellEffectInfo(SpellInfo const* spellInfo, uint8 effIndex, Spe Effect = _effect ? _effect->Effect : 0; ApplyAuraName = _effect ? _effect->EffectAura : 0; ApplyAuraPeriod = _effect ? _effect->EffectAuraPeriod : 0; - DieSides = _effect ? _effect->EffectDieSides : 0; RealPointsPerLevel = _effect ? _effect->EffectRealPointsPerLevel : 0.0f; BasePoints = _effect ? _effect->EffectBasePoints : 0; PointsPerResource = _effect ? _effect->EffectPointsPerResource : 0.0f; @@ -461,12 +461,59 @@ bool SpellEffectInfo::IsUnitOwnedAuraEffect() const int32 SpellEffectInfo::CalcValue(Unit const* caster /*= nullptr*/, int32 const* bp /*= nullptr*/, Unit const* target /*= nullptr*/, float* variance /*= nullptr*/, int32 itemLevel /*= -1*/) const { float basePointsPerLevel = RealPointsPerLevel; - int32 basePoints = bp ? *bp : BasePoints; + // TODO: this needs to be a float, not rounded + int32 basePoints = CalcBaseValue(caster, target, itemLevel); + float value = bp ? *bp : basePoints; float comboDamage = PointsPerResource; + if (Scaling.Variance) + { + float delta = fabs(Scaling.Variance * 0.5f); + float valueVariance = frand(-delta, delta); + value += basePoints * valueVariance; + + if (variance) + *variance = valueVariance; + } + // base amount modification based on spell lvl vs caster lvl if (Scaling.Coefficient != 0.0f) { + if (Scaling.ResourceCoefficient) + comboDamage = Scaling.ResourceCoefficient * value; + } + else + { + if (GetScalingExpectedStat() == ExpectedStatType::None) + { + int32 level = caster ? int32(caster->getLevel()) : 0; + if (level > int32(_spellInfo->MaxLevel) && _spellInfo->MaxLevel > 0) + level = int32(_spellInfo->MaxLevel); + level -= int32(_spellInfo->BaseLevel); + if (level < 0) + level = 0; + value += level * basePointsPerLevel; + } + } + + // random damage + if (caster) + { + // bonus amount from combo points + if (caster->m_playerMovingMe && comboDamage) + if (uint32 comboPoints = caster->m_playerMovingMe->GetComboPoints()) + value += comboDamage * comboPoints; + + value = caster->ApplyEffectModifiers(_spellInfo, EffectIndex, value); + } + + return int32(round(value)); +} + +int32 SpellEffectInfo::CalcBaseValue(Unit const* caster, Unit const* target, int32 itemLevel) const +{ + if (Scaling.Coefficient != 0.0f) + { uint32 level = _spellInfo->SpellLevel; if (target && _spellInfo->IsPositiveEffect(EffectIndex) && (Effect == SPELL_EFFECT_APPLY_AURA)) level = target->getLevel(); @@ -488,148 +535,56 @@ int32 SpellEffectInfo::CalcValue(Unit const* caster /*= nullptr*/, int32 const* if (!_spellInfo->Scaling.Class) return 0; - if (!_spellInfo->Scaling.ScalesFromItemLevel) + uint32 effectiveItemLevel = itemLevel != -1 ? uint32(itemLevel) : 1u; + if (_spellInfo->Scaling.ScalesFromItemLevel || _spellInfo->HasAttribute(SPELL_ATTR11_SCALES_WITH_ITEM_LEVEL)) { - if (!_spellInfo->HasAttribute(SPELL_ATTR11_SCALES_WITH_ITEM_LEVEL)) - value = GetSpellScalingColumnForClass(sSpellScalingGameTable.GetRow(level), _spellInfo->Scaling.Class); - else + if (_spellInfo->Scaling.ScalesFromItemLevel) + effectiveItemLevel = _spellInfo->Scaling.ScalesFromItemLevel; + + if (_spellInfo->Scaling.Class == -8) { - uint32 effectiveItemLevel = itemLevel != -1 ? uint32(itemLevel) : 1u; - value = GetRandomPropertyPoints(effectiveItemLevel, ITEM_QUALITY_RARE, INVTYPE_CHEST, 0); - if (IsAura() && ApplyAuraName == SPELL_AURA_MOD_RATING) - if (GtCombatRatingsMultByILvl const* ratingMult = sCombatRatingsMultByILvlGameTable.GetRow(effectiveItemLevel)) - value *= ratingMult->ArmorMultiplier; + RandPropPointsEntry const* randPropPoints = sRandPropPointsStore.LookupEntry(effectiveItemLevel); + if (!randPropPoints) + randPropPoints = sRandPropPointsStore.AssertEntry(sRandPropPointsStore.GetNumRows() - 1); + + value = randPropPoints->DamageReplaceStat; } + else + value = GetRandomPropertyPoints(effectiveItemLevel, ITEM_QUALITY_RARE, INVTYPE_CHEST, 0); } else - value = GetRandomPropertyPoints(_spellInfo->Scaling.ScalesFromItemLevel, ITEM_QUALITY_RARE, INVTYPE_CHEST, 0); + value = GetSpellScalingColumnForClass(sSpellScalingGameTable.GetRow(level), _spellInfo->Scaling.Class); + + if (_spellInfo->Scaling.Class == -7) + { + // todo: get inventorytype here + if (GtCombatRatingsMultByILvl const* ratingMult = sCombatRatingsMultByILvlGameTable.GetRow(effectiveItemLevel)) + value *= ratingMult->ArmorMultiplier; + } } value *= Scaling.Coefficient; if (value != 0.0f && value < 1.0f) value = 1.0f; - if (Scaling.Variance) - { - float delta = fabs(Scaling.Variance * 0.5f); - float valueVariance = frand(-delta, delta); - value += value * valueVariance; - - if (variance) - *variance = valueVariance; - } - - basePoints = int32(round(value)); - - if (Scaling.ResourceCoefficient) - comboDamage = Scaling.ResourceCoefficient * value; + return int32(round(value)); } else { - if (caster) - { - int32 level = int32(caster->getLevel()); - if (level > int32(_spellInfo->MaxLevel) && _spellInfo->MaxLevel > 0) - level = int32(_spellInfo->MaxLevel); - else if (level < int32(_spellInfo->BaseLevel)) - level = int32(_spellInfo->BaseLevel); - level -= int32(_spellInfo->SpellLevel); - basePoints += int32(level * basePointsPerLevel); - } - - // roll in a range <1;EffectDieSides> as of patch 3.3.3 - int32 randomPoints = int32(DieSides); - switch (randomPoints) + float value = BasePoints; + ExpectedStatType stat = GetScalingExpectedStat(); + if (stat != ExpectedStatType::None) { - case 0: break; - case 1: basePoints += 1; break; // range 1..1 - default: - { - // range can have positive (1..rand) and negative (rand..1) values, so order its for irand - int32 randvalue = (randomPoints >= 1) - ? irand(1, randomPoints) - : irand(randomPoints, 1); + if (_spellInfo->HasAttribute(SPELL_ATTR0_LEVEL_DAMAGE_CALCULATION)) + stat = ExpectedStatType::CreatureAutoAttackDps; - basePoints += randvalue; - break; - } + // TODO - add expansion and content tuning id args? + int32 level = caster ? int32(caster->getLevel()) : 1; + value = sDB2Manager.EvaluateExpectedStat(stat, level, -2, 0, CLASS_NONE) * BasePoints / 100.0f; } - } - float value = float(basePoints); - - // random damage - if (caster) - { - // bonus amount from combo points - if (caster->m_playerMovingMe && comboDamage) - if (uint32 comboPoints = caster->m_playerMovingMe->GetComboPoints()) - value += comboDamage * comboPoints; - - value = caster->ApplyEffectModifiers(_spellInfo, EffectIndex, value); - - // amount multiplication based on caster's level - if (!caster->IsControlledByPlayer() && - _spellInfo->SpellLevel && _spellInfo->SpellLevel != caster->getLevel() && - !basePointsPerLevel && (_spellInfo->HasAttribute(SPELL_ATTR0_LEVEL_DAMAGE_CALCULATION))) - { - bool canEffectScale = false; - switch (Effect) - { - case SPELL_EFFECT_SCHOOL_DAMAGE: - case SPELL_EFFECT_DUMMY: - case SPELL_EFFECT_POWER_DRAIN: - case SPELL_EFFECT_HEALTH_LEECH: - case SPELL_EFFECT_HEAL: - case SPELL_EFFECT_WEAPON_DAMAGE: - case SPELL_EFFECT_POWER_BURN: - case SPELL_EFFECT_SCRIPT_EFFECT: - case SPELL_EFFECT_NORMALIZED_WEAPON_DMG: - case SPELL_EFFECT_FORCE_CAST_WITH_VALUE: - case SPELL_EFFECT_TRIGGER_SPELL_WITH_VALUE: - case SPELL_EFFECT_TRIGGER_MISSILE_SPELL_WITH_VALUE: - canEffectScale = true; - break; - default: - break; - } - - switch (ApplyAuraName) - { - case SPELL_AURA_PERIODIC_DAMAGE: - case SPELL_AURA_DUMMY: - case SPELL_AURA_PERIODIC_HEAL: - case SPELL_AURA_DAMAGE_SHIELD: - case SPELL_AURA_PROC_TRIGGER_DAMAGE: - case SPELL_AURA_PERIODIC_LEECH: - case SPELL_AURA_PERIODIC_MANA_LEECH: - case SPELL_AURA_SCHOOL_ABSORB: - case SPELL_AURA_PERIODIC_TRIGGER_SPELL_WITH_VALUE: - canEffectScale = true; - break; - default: - break; - } - - if (canEffectScale) - { - GtNpcManaCostScalerEntry const* spellScaler = sNpcManaCostScalerGameTable.GetRow(_spellInfo->SpellLevel); - GtNpcManaCostScalerEntry const* casterScaler = sNpcManaCostScalerGameTable.GetRow(caster->getLevel()); - if (spellScaler && casterScaler) - value *= casterScaler->Scaler / spellScaler->Scaler; - } - } + return int32(round(value)); } - - return int32(value); -} - -int32 SpellEffectInfo::CalcBaseValue(int32 value) const -{ - if (DieSides == 0) - return value; - else - return value - 1; } float SpellEffectInfo::CalcValueMultiplier(Unit* caster, Spell* spell) const @@ -723,6 +678,94 @@ SpellTargetObjectTypes SpellEffectInfo::GetUsedTargetObjectType() const return _data[Effect].UsedTargetObjectType; } +ExpectedStatType SpellEffectInfo::GetScalingExpectedStat() const +{ + switch (Effect) + { + case SPELL_EFFECT_SCHOOL_DAMAGE: + case SPELL_EFFECT_ENVIRONMENTAL_DAMAGE: + case SPELL_EFFECT_HEALTH_LEECH: + case SPELL_EFFECT_WEAPON_DAMAGE_NOSCHOOL: + case SPELL_EFFECT_WEAPON_DAMAGE: + return ExpectedStatType::CreatureSpellDamage; + case SPELL_EFFECT_HEAL: + case SPELL_EFFECT_HEAL_MECHANICAL: + return ExpectedStatType::PlayerHealth; + case SPELL_EFFECT_ENERGIZE: + case SPELL_EFFECT_POWER_BURN: + if (!MiscValue) + return ExpectedStatType::PlayerMana; + return ExpectedStatType::None; + case SPELL_EFFECT_POWER_DRAIN: + return ExpectedStatType::PlayerMana; + case SPELL_EFFECT_APPLY_AURA: + case SPELL_EFFECT_PERSISTENT_AREA_AURA: + case SPELL_EFFECT_APPLY_AREA_AURA_PARTY: + case SPELL_EFFECT_APPLY_AREA_AURA_RAID: + case SPELL_EFFECT_APPLY_AREA_AURA_PET: + case SPELL_EFFECT_APPLY_AREA_AURA_FRIEND: + case SPELL_EFFECT_APPLY_AREA_AURA_ENEMY: + case SPELL_EFFECT_APPLY_AREA_AURA_OWNER: + case SPELL_EFFECT_APPLY_AURA_ON_PET: + case SPELL_EFFECT_202: + switch (ApplyAuraName) + { + case SPELL_AURA_PERIODIC_DAMAGE: + case SPELL_AURA_MOD_DAMAGE_DONE: + case SPELL_AURA_DAMAGE_SHIELD: + case SPELL_AURA_PROC_TRIGGER_DAMAGE: + case SPELL_AURA_PERIODIC_LEECH: + case SPELL_AURA_MOD_DAMAGE_DONE_CREATURE: + case SPELL_AURA_PERIODIC_HEALTH_FUNNEL: + case SPELL_AURA_MOD_MELEE_ATTACK_POWER_VERSUS: + case SPELL_AURA_MOD_RANGED_ATTACK_POWER_VERSUS: + case SPELL_AURA_MOD_FLAT_SPELL_DAMAGE_VERSUS: + return ExpectedStatType::CreatureSpellDamage; + case SPELL_AURA_PERIODIC_HEAL: + case SPELL_AURA_MOD_DAMAGE_TAKEN: + case SPELL_AURA_MOD_INCREASE_HEALTH: + case SPELL_AURA_SCHOOL_ABSORB: + case SPELL_AURA_MOD_REGEN: + case SPELL_AURA_MANA_SHIELD: + case SPELL_AURA_MOD_HEALING: + case SPELL_AURA_MOD_HEALING_DONE: + case SPELL_AURA_MOD_HEALTH_REGEN_IN_COMBAT: + case SPELL_AURA_MOD_MAX_HEALTH: + case SPELL_AURA_MOD_INCREASE_HEALTH_2: + case SPELL_AURA_SCHOOL_HEAL_ABSORB: + return ExpectedStatType::PlayerHealth; + case SPELL_AURA_PERIODIC_MANA_LEECH: + return ExpectedStatType::PlayerMana; + case SPELL_AURA_MOD_STAT: + case SPELL_AURA_MOD_ATTACK_POWER: + case SPELL_AURA_MOD_RANGED_ATTACK_POWER: + return ExpectedStatType::PlayerPrimaryStat; + case SPELL_AURA_MOD_RATING: + return ExpectedStatType::PlayerSecondaryStat; + case SPELL_AURA_MOD_RESISTANCE: + case SPELL_AURA_MOD_BASE_RESISTANCE: + case SPELL_AURA_MOD_TARGET_RESISTANCE: + case SPELL_AURA_MOD_BONUS_ARMOR: + return ExpectedStatType::ArmorConstant; + case SPELL_AURA_PERIODIC_ENERGIZE: + case SPELL_AURA_MOD_INCREASE_ENERGY: + case SPELL_AURA_MOD_POWER_COST_SCHOOL: + case SPELL_AURA_MOD_POWER_REGEN: + case SPELL_AURA_POWER_BURN: + case SPELL_AURA_MOD_MAX_POWER: + if (!MiscValue) + return ExpectedStatType::PlayerMana; + return ExpectedStatType::None; + default: + break; + } + default: + break; + } + + return ExpectedStatType::None; +} + SpellEffectInfo::StaticData SpellEffectInfo::_data[TOTAL_SPELL_EFFECTS] = { // implicit target type used target object type @@ -982,6 +1025,12 @@ SpellEffectInfo::StaticData SpellEffectInfo::_data[TOTAL_SPELL_EFFECTS] = {EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 253 SPELL_EFFECT_GIVE_HONOR {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 254 SPELL_EFFECT_254 {EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_UNIT}, // 255 SPELL_EFFECT_LEARN_TRANSMOG_SET + {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 256 SPELL_EFFECT_256 + {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 257 SPELL_EFFECT_257 + {EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_ITEM}, // 258 SPELL_EFFECT_MODIFY_KEYSTONE + {EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_ITEM}, // 259 SPELL_EFFECT_RESPEC_AZERITE_EMPOWERED_ITEM + {EFFECT_IMPLICIT_TARGET_NONE, TARGET_OBJECT_TYPE_NONE}, // 260 SPELL_EFFECT_SUMMON_STABLED_PET + {EFFECT_IMPLICIT_TARGET_EXPLICIT, TARGET_OBJECT_TYPE_ITEM}, // 261 SPELL_EFFECT_SCRAP_ITEM }; SpellInfo::SpellInfo(SpellInfoLoadHelper const& data, SpellEffectEntryMap const& effectsMap, SpellVisualMap&& visuals) @@ -1042,7 +1091,7 @@ SpellInfo::SpellInfo(SpellInfoLoadHelper const& data, SpellEffectEntryMap const& // SpellAuraOptionsEntry SpellAuraOptionsEntry const* _options = data.AuraOptions; SpellProcsPerMinuteEntry const* _ppm = _options ? sSpellProcsPerMinuteStore.LookupEntry(_options->SpellProcsPerMinuteID) : nullptr; - ProcFlags = _options ? _options->ProcTypeMask : 0; + ProcFlags = _options ? _options->ProcTypeMask[0] : 0; ProcChance = _options ? _options->ProcChance : 0; ProcCharges = _options ? _options->ProcCharges : 0; ProcCooldown = _options ? _options->ProcCategoryRecovery : 0; @@ -1832,10 +1881,31 @@ SpellCastResult SpellInfo::CheckLocation(uint32 map_id, uint32 zone_id, uint32 a // continent limitation (virtual continent) if (HasAttribute(SPELL_ATTR4_CAST_ONLY_IN_OUTLAND)) { - uint32 v_map = sDB2Manager.GetVirtualMapForMapAndZone(map_id, zone_id); - MapEntry const* mapEntry = sMapStore.LookupEntry(v_map); - if (!mapEntry || mapEntry->ExpansionID < 1 || !mapEntry->IsContinent()) + uint32 mountFlags = 0; + if (player && player->HasAuraType(SPELL_AURA_MOUNT_RESTRICTIONS)) + { + for (AuraEffect const* auraEffect : player->GetAuraEffectsByType(SPELL_AURA_MOUNT_RESTRICTIONS)) + mountFlags |= auraEffect->GetMiscValue(); + } + else if (AreaTableEntry const* areaTable = sAreaTableStore.LookupEntry(area_id)) + mountFlags = areaTable->MountFlags; + + if (!(mountFlags & AREA_MOUNT_FLAG_FLYING_ALLOWED)) return SPELL_FAILED_INCORRECT_AREA; + + if (player) + { + uint32 mapToCheck = map_id; + if (MapEntry const* mapEntry = sMapStore.LookupEntry(map_id)) + mapToCheck = mapEntry->CosmeticParentMapID; + + if ((mapToCheck == 1116 || mapToCheck == 1464) && !player->HasSpell(191645)) // Draenor Pathfinder + return SPELL_FAILED_INCORRECT_AREA; + else if (mapToCheck == 1220 && !player->HasSpell(233368)) // Broken Isles Pathfinder + return SPELL_FAILED_INCORRECT_AREA; + else if ((mapToCheck == 1642 || mapToCheck == 1643) && !player->HasSpell(278833)) // Battle for Azeroth Pathfinder + return SPELL_FAILED_INCORRECT_AREA; + } } // raid instance limitation @@ -3851,9 +3921,9 @@ inline float CalcPPMCritMod(SpellProcsPerMinuteModEntry const* mod, Unit* caster if (caster->GetTypeId() != TYPEID_PLAYER) return 0.0f; - float crit = caster->GetFloatValue(PLAYER_CRIT_PERCENTAGE); - float rangedCrit = caster->GetFloatValue(PLAYER_RANGED_CRIT_PERCENTAGE); - float spellCrit = caster->GetFloatValue(PLAYER_SPELL_CRIT_PERCENTAGE1); + float crit = caster->GetFloatValue(ACTIVE_PLAYER_FIELD_CRIT_PERCENTAGE); + float rangedCrit = caster->GetFloatValue(ACTIVE_PLAYER_FIELD_RANGED_CRIT_PERCENTAGE); + float spellCrit = caster->GetFloatValue(ACTIVE_PLAYER_FIELD_SPELL_CRIT_PERCENTAGE1); switch (mod->Param) { diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h index 2eb285b48ae..65aef5dca41 100644 --- a/src/server/game/Spells/SpellInfo.h +++ b/src/server/game/Spells/SpellInfo.h @@ -323,7 +323,6 @@ public: uint32 Effect; uint32 ApplyAuraName; uint32 ApplyAuraPeriod; - int32 DieSides; float RealPointsPerLevel; int32 BasePoints; float PointsPerResource; @@ -352,7 +351,7 @@ public: float ResourceCoefficient; } Scaling; - SpellEffectInfo() : _spellInfo(NULL), EffectIndex(0), Effect(0), ApplyAuraName(0), ApplyAuraPeriod(0), DieSides(0), + SpellEffectInfo() : _spellInfo(NULL), EffectIndex(0), Effect(0), ApplyAuraName(0), ApplyAuraPeriod(0), RealPointsPerLevel(0), BasePoints(0), PointsPerResource(0), Amplitude(0), ChainAmplitude(0), BonusCoefficient(0), MiscValue(0), MiscValueB(0), Mechanic(MECHANIC_NONE), PositionFacing(0), RadiusEntry(NULL), ChainTargets(0), ItemType(0), TriggerSpell(0), BonusCoefficientFromAP(0.0f), ImplicitTargetConditions(NULL) { } @@ -369,7 +368,7 @@ public: bool IsUnitOwnedAuraEffect() const; int32 CalcValue(Unit const* caster = nullptr, int32 const* basePoints = nullptr, Unit const* target = nullptr, float* variance = nullptr, int32 itemLevel = -1) const; - int32 CalcBaseValue(int32 value) const; + int32 CalcBaseValue(Unit const* caster, Unit const* target, int32 itemLevel) const; float CalcValueMultiplier(Unit* caster, Spell* spell = NULL) const; float CalcDamageMultiplier(Unit* caster, Spell* spell = NULL) const; @@ -382,6 +381,7 @@ public: SpellEffectImplicitTargetTypes GetImplicitTargetType() const; SpellTargetObjectTypes GetUsedTargetObjectType() const; + ExpectedStatType GetScalingExpectedStat() const; ImmunityInfo const* GetImmunityInfo() const { return &_immunityInfo; } diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 2532069e6c2..2bb498cf9af 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -2068,7 +2068,7 @@ void SpellMgr::LoadSpellAreas() spellArea.questEndStatus = fields[4].GetUInt32(); spellArea.questEnd = fields[5].GetUInt32(); spellArea.auraSpell = fields[6].GetInt32(); - spellArea.raceMask = fields[7].GetUInt32(); + spellArea.raceMask = fields[7].GetUInt64(); spellArea.gender = Gender(fields[8].GetUInt8()); spellArea.flags = fields[9].GetUInt8(); @@ -2189,7 +2189,7 @@ void SpellMgr::LoadSpellAreas() if (spellArea.raceMask && (spellArea.raceMask & RACEMASK_ALL_PLAYABLE) == 0) { - TC_LOG_ERROR("sql.sql", "The spell %u listed in `spell_area` has wrong race mask (%u) requirement.", spell, spellArea.raceMask); + TC_LOG_ERROR("sql.sql", "The spell %u listed in `spell_area` has wrong race mask (" UI64FMTD ") requirement.", spell, spellArea.raceMask); continue; } @@ -2236,7 +2236,7 @@ void SpellMgr::LoadSpellInfoStore() uint32 oldMSTime = getMSTime(); UnloadSpellInfoStore(); - mSpellInfoMap.resize(sSpellStore.GetNumRows(), NULL); + mSpellInfoMap.resize(sSpellNameStore.GetNumRows(), NULL); std::unordered_map<uint32, SpellInfoLoadHelper> loadData; std::unordered_map<int32, SpellEffectEntryMap> effectsBySpell; @@ -2313,11 +2313,11 @@ void SpellMgr::LoadSpellInfoStore() for (SpellXSpellVisualEntry const* visual : sSpellXSpellVisualStore) visualsBySpell[visual->SpellID][visual->DifficultyID].push_back(visual); - for (uint32 i = 0; i < sSpellStore.GetNumRows(); ++i) + for (uint32 i = 0; i < sSpellNameStore.GetNumRows(); ++i) { - if (SpellEntry const* spellEntry = sSpellStore.LookupEntry(i)) + if (SpellNameEntry const* spellNameEntry = sSpellNameStore.LookupEntry(i)) { - loadData[i].Entry = spellEntry; + loadData[i].Entry = spellNameEntry; mSpellInfoMap[i] = new SpellInfo(loadData[i], effectsBySpell[i], std::move(visualsBySpell[i])); } } diff --git a/src/server/game/Spells/SpellMgr.h b/src/server/game/Spells/SpellMgr.h index 1034f6b4333..690edb8f508 100644 --- a/src/server/game/Spells/SpellMgr.h +++ b/src/server/game/Spells/SpellMgr.h @@ -37,7 +37,6 @@ class Player; class Unit; class ProcEventInfo; struct SkillLineAbilityEntry; -struct SpellEntry; struct SpellAuraOptionsEntry; struct SpellAuraRestrictionsEntry; struct SpellCastingRequirementsEntry; @@ -48,6 +47,7 @@ struct SpellEquippedItemsEntry; struct SpellInterruptsEntry; struct SpellLevelsEntry; struct SpellMiscEntry; +struct SpellNameEntry; struct SpellReagentsEntry; struct SpellScalingEntry; struct SpellShapeshiftEntry; @@ -464,7 +464,7 @@ struct TC_GAME_API SpellArea uint32 questStart; // quest start (quest must be active or rewarded for spell apply) uint32 questEnd; // quest end (quest must not be rewarded for spell apply) int32 auraSpell; // spell aura must be applied for spell apply)if possitive) and it must not be applied in other case - uint32 raceMask; // can be applied only to races + uint64 raceMask; // can be applied only to races Gender gender; // can be applied only to gender uint32 questStartStatus; // QuestStatus that quest_start must have in order to keep the spell uint32 questEndStatus; // QuestStatus that the quest_end must have in order to keep the spell (if the quest_end's status is different than this, the spell will be dropped) @@ -561,7 +561,7 @@ bool IsWeaponSkill(uint32 skill); inline bool IsProfessionSkill(uint32 skill) { - return IsPrimaryProfessionSkill(skill) || skill == SKILL_FISHING || skill == SKILL_COOKING || skill == SKILL_FIRST_AID; + return IsPrimaryProfessionSkill(skill) || skill == SKILL_FISHING || skill == SKILL_COOKING; } inline bool IsProfessionOrRidingSkill(uint32 skill) @@ -575,7 +575,7 @@ TC_GAME_API extern PetFamilySpellsStore sPetFamilySpells struct SpellInfoLoadHelper { - SpellEntry const* Entry = nullptr; + SpellNameEntry const* Entry = nullptr; SpellAuraOptionsEntry const* AuraOptions = nullptr; SpellAuraRestrictionsEntry const* AuraRestrictions = nullptr; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 4484e3c1f87..cde18f19ffe 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -145,6 +145,7 @@ World::World() memset(rate_values, 0, sizeof(rate_values)); memset(m_int_configs, 0, sizeof(m_int_configs)); + memset(m_int64_configs, 0, sizeof(m_int64_configs)); memset(m_bool_configs, 0, sizeof(m_bool_configs)); memset(m_float_configs, 0, sizeof(m_float_configs)); } @@ -805,7 +806,7 @@ void World::LoadConfigSettings(bool reload) m_int_configs[CONFIG_CHARTER_COST_ARENA_5v5] = sConfigMgr->GetIntDefault("ArenaTeam.CharterCost.5v5", 2000000); m_int_configs[CONFIG_CHARACTER_CREATING_DISABLED] = sConfigMgr->GetIntDefault("CharacterCreating.Disabled", 0); - m_int_configs[CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK] = sConfigMgr->GetIntDefault("CharacterCreating.Disabled.RaceMask", 0); + m_int64_configs[CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK] = sConfigMgr->GetInt64Default("CharacterCreating.Disabled.RaceMask", 0); m_int_configs[CONFIG_CHARACTER_CREATING_DISABLED_CLASSMASK] = sConfigMgr->GetIntDefault("CharacterCreating.Disabled.ClassMask", 0); m_int_configs[CONFIG_CHARACTERS_PER_REALM] = sConfigMgr->GetIntDefault("CharactersPerRealm", MAX_CHARACTERS_PER_REALM); @@ -956,13 +957,6 @@ void World::LoadConfigSettings(bool reload) } m_int_configs[CONFIG_CURRENCY_MAX_JUSTICE_POINTS] *= 100; //precision mod - m_int_configs[CONFIG_CURRENCY_START_ARTIFACT_KNOWLEDGE] = sConfigMgr->GetIntDefault("Currency.StartArtifactKnowledge", 55); - if (int32(m_int_configs[CONFIG_CURRENCY_START_ARTIFACT_KNOWLEDGE]) < 0) - { - TC_LOG_ERROR("server.loading", "Currency.StartArtifactKnowledge (%i) must be >= 0, set to default 0.", m_int_configs[CONFIG_CURRENCY_START_ARTIFACT_KNOWLEDGE]); - m_int_configs[CONFIG_CURRENCY_START_ARTIFACT_KNOWLEDGE] = 0; - } - m_int_configs[CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL] = sConfigMgr->GetIntDefault("RecruitAFriend.MaxLevel", 85); if (m_int_configs[CONFIG_MAX_RECRUIT_A_FRIEND_BONUS_PLAYER_LEVEL] > m_int_configs[CONFIG_MAX_PLAYER_LEVEL]) { @@ -1573,6 +1567,8 @@ void World::SetInitialWorldSettings() TC_LOG_INFO("server.loading", "Initialize data stores..."); ///- Load DB2s sDB2Manager.LoadStores(m_dataPath, m_defaultDbcLocale); + TC_LOG_INFO("misc", "Loading hotfix blobs..."); + sDB2Manager.LoadHotfixBlob(); TC_LOG_INFO("misc", "Loading hotfix info..."); sDB2Manager.LoadHotfixData(); ///- Close hotfix database - it is only used during DB2 loading diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index 0959309b641..1d0d01f4b1f 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -238,7 +238,6 @@ enum WorldIntConfigs CONFIG_MIN_CHARTER_NAME, CONFIG_MIN_PET_NAME, CONFIG_CHARACTER_CREATING_DISABLED, - CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK, CONFIG_CHARACTER_CREATING_DISABLED_CLASSMASK, CONFIG_CHARACTERS_PER_ACCOUNT, CONFIG_CHARACTERS_PER_REALM, @@ -254,7 +253,6 @@ enum WorldIntConfigs CONFIG_CURRENCY_START_APEXIS_CRYSTALS, CONFIG_CURRENCY_MAX_APEXIS_CRYSTALS, CONFIG_CURRENCY_START_JUSTICE_POINTS, - CONFIG_CURRENCY_START_ARTIFACT_KNOWLEDGE, CONFIG_CURRENCY_MAX_JUSTICE_POINTS, CONFIG_CURRENCY_RESET_HOUR, CONFIG_CURRENCY_RESET_DAY, @@ -407,6 +405,12 @@ enum WorldIntConfigs INT_CONFIG_VALUE_COUNT }; +enum WorldInt64Configs +{ + CONFIG_CHARACTER_CREATING_DISABLED_RACEMASK, + INT64_CONFIT_VALUE_COUNT +}; + /// Server rates enum Rates { @@ -744,6 +748,11 @@ class TC_GAME_API World return index < INT_CONFIG_VALUE_COUNT ? m_int_configs[index] : 0; } + uint64 GetUInt64Config(WorldInt64Configs index) const + { + return index < INT64_CONFIT_VALUE_COUNT ? m_int64_configs[index] : 0; + } + void setWorldState(uint32 index, uint32 value); uint32 getWorldState(uint32 index) const; void LoadWorldStates(); @@ -858,6 +867,7 @@ class TC_GAME_API World float rate_values[MAX_RATES]; uint32 m_int_configs[INT_CONFIG_VALUE_COUNT]; + uint64 m_int64_configs[INT64_CONFIT_VALUE_COUNT]; bool m_bool_configs[BOOL_CONFIG_VALUE_COUNT]; float m_float_configs[FLOAT_CONFIG_VALUE_COUNT]; typedef std::map<uint32, uint32> WorldStatesMap; |
