diff options
Diffstat (limited to 'src')
363 files changed, 10401 insertions, 12572 deletions
diff --git a/src/server/database/Database/Implementation/CharacterDatabase.cpp b/src/server/database/Database/Implementation/CharacterDatabase.cpp index 621a86e0bed..cebd59b2a6d 100644 --- a/src/server/database/Database/Implementation/CharacterDatabase.cpp +++ b/src/server/database/Database/Implementation/CharacterDatabase.cpp @@ -631,8 +631,8 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_DEL_CHAR_FISHINGSTEPS, "DELETE FROM character_fishingsteps WHERE guid = ?", CONNECTION_ASYNC); // Void Storage - PrepareStatement(CHAR_SEL_CHAR_VOID_STORAGE, "SELECT itemId, itemEntry, slot, creatorGuid, randomPropertyType, randomProperty, suffixFactor, upgradeId, fixedScalingLevel, artifactKnowledgeLevel, context, bonusListIDs FROM character_void_storage WHERE playerGuid = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_REP_CHAR_VOID_STORAGE_ITEM, "REPLACE INTO character_void_storage (itemId, playerGuid, itemEntry, slot, creatorGuid, randomPropertyType, randomProperty, suffixFactor, upgradeId, fixedScalingLevel, artifactKnowledgeLevel, context, bonusListIDs) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); + PrepareStatement(CHAR_SEL_CHAR_VOID_STORAGE, "SELECT itemId, itemEntry, slot, creatorGuid, randomPropertyType, randomProperty, upgradeId, fixedScalingLevel, artifactKnowledgeLevel, context, bonusListIDs FROM character_void_storage WHERE playerGuid = ?", CONNECTION_ASYNC); + PrepareStatement(CHAR_REP_CHAR_VOID_STORAGE_ITEM, "REPLACE INTO character_void_storage (itemId, playerGuid, itemEntry, slot, creatorGuid, randomPropertyType, randomProperty, upgradeId, fixedScalingLevel, artifactKnowledgeLevel, context, bonusListIDs) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_VOID_STORAGE_ITEM_BY_CHAR_GUID, "DELETE FROM character_void_storage WHERE playerGuid = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_CHAR_VOID_STORAGE_ITEM_BY_SLOT, "DELETE FROM character_void_storage WHERE slot = ? AND playerGuid = ?", CONNECTION_ASYNC); @@ -649,10 +649,10 @@ void CharacterDatabaseConnection::DoPrepareStatements() PrepareStatement(CHAR_DEL_GUILD_FINDER_GUILD_SETTINGS, "DELETE FROM guild_finder_guild_settings WHERE guildId = ?", CONNECTION_ASYNC); // Items that hold loot or money - PrepareStatement(CHAR_SEL_ITEMCONTAINER_ITEMS, "SELECT item_id, item_count, follow_rules, ffa, blocked, counted, under_threshold, needs_quest, rnd_type, rnd_prop, rnd_suffix, context, bonus_list_ids FROM item_loot_items WHERE container_id = ?", CONNECTION_SYNCH); + PrepareStatement(CHAR_SEL_ITEMCONTAINER_ITEMS, "SELECT item_id, item_count, follow_rules, ffa, blocked, counted, under_threshold, needs_quest, rnd_type, rnd_prop, context, bonus_list_ids FROM item_loot_items WHERE container_id = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_DEL_ITEMCONTAINER_ITEMS, "DELETE FROM item_loot_items WHERE container_id = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_DEL_ITEMCONTAINER_ITEM, "DELETE FROM item_loot_items WHERE container_id = ? AND item_id = ?", CONNECTION_ASYNC); - PrepareStatement(CHAR_INS_ITEMCONTAINER_ITEMS, "INSERT INTO item_loot_items (container_id, item_id, item_count, follow_rules, ffa, blocked, counted, under_threshold, needs_quest, rnd_type, rnd_prop, rnd_suffix, context, bonus_list_ids) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); + PrepareStatement(CHAR_INS_ITEMCONTAINER_ITEMS, "INSERT INTO item_loot_items (container_id, item_id, item_count, follow_rules, ffa, blocked, counted, under_threshold, needs_quest, rnd_type, rnd_prop, context, bonus_list_ids) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", CONNECTION_ASYNC); PrepareStatement(CHAR_SEL_ITEMCONTAINER_MONEY, "SELECT money FROM item_loot_money WHERE container_id = ?", CONNECTION_SYNCH); PrepareStatement(CHAR_DEL_ITEMCONTAINER_MONEY, "DELETE FROM item_loot_money WHERE container_id = ?", CONNECTION_ASYNC); PrepareStatement(CHAR_INS_ITEMCONTAINER_MONEY, "INSERT INTO item_loot_money (container_id, money) VALUES (?, ?)", CONNECTION_ASYNC); diff --git a/src/server/game/AI/CoreAI/PassiveAI.cpp b/src/server/game/AI/CoreAI/PassiveAI.cpp index 7b61e3129ca..137eb2cce3b 100644 --- a/src/server/game/AI/CoreAI/PassiveAI.cpp +++ b/src/server/game/AI/CoreAI/PassiveAI.cpp @@ -48,14 +48,14 @@ void PossessedAI::UpdateAI(uint32 /*diff*/) void PossessedAI::JustDied(Unit* /*u*/) { // We died while possessed, disable our loot - me->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); + me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE); } void PossessedAI::KilledUnit(Unit* victim) { // We killed a creature, disable victim's loot if (victim->GetTypeId() == TYPEID_UNIT) - victim->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); + me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE); } void PossessedAI::OnCharmed(bool /*apply*/) diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp index cfa5d2592d1..e138148fb41 100644 --- a/src/server/game/AI/CreatureAI.cpp +++ b/src/server/game/AI/CreatureAI.cpp @@ -354,9 +354,9 @@ int32 CreatureAI::VisualizeBoundary(uint32 duration, Unit* owner, bool fill) con if (TempSummon* point = owner->SummonCreature(BOUNDARY_VISUALIZE_CREATURE, Position(startPosition.GetPositionX() + front.first*BOUNDARY_VISUALIZE_STEP_SIZE, startPosition.GetPositionY() + front.second*BOUNDARY_VISUALIZE_STEP_SIZE, spawnZ), TEMPSUMMON_TIMED_DESPAWN, duration * IN_MILLISECONDS)) { point->SetObjectScale(BOUNDARY_VISUALIZE_CREATURE_SCALE); - point->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_STUNNED | UNIT_FLAG_IMMUNE_TO_NPC); + point->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_STUNNED | UNIT_FLAG_IMMUNE_TO_NPC)); if (!hasOutOfBoundsNeighbor) - point->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + point->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); } Q.pop(); } diff --git a/src/server/game/AI/CreatureAISelector.cpp b/src/server/game/AI/CreatureAISelector.cpp index 92518247b0b..4c73ca178a0 100644 --- a/src/server/game/AI/CreatureAISelector.cpp +++ b/src/server/game/AI/CreatureAISelector.cpp @@ -52,7 +52,7 @@ namespace FactorySelector ai_factory = sCreatureAIRegistry->GetRegistryItem("VehicleAI"); else if (creature->HasUnitTypeMask(UNIT_MASK_CONTROLABLE_GUARDIAN) && ((Guardian*)creature)->GetOwner()->GetTypeId() == TYPEID_PLAYER) ai_factory = sCreatureAIRegistry->GetRegistryItem("PetAI"); - else if (creature->HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK)) + else if (creature->HasNpcFlag(UNIT_NPC_FLAG_SPELLCLICK)) ai_factory = sCreatureAIRegistry->GetRegistryItem("NullCreatureAI"); else if (creature->IsGuard()) ai_factory = sCreatureAIRegistry->GetRegistryItem("GuardAI"); diff --git a/src/server/game/AI/PlayerAI/PlayerAI.cpp b/src/server/game/AI/PlayerAI/PlayerAI.cpp index b3cc0ae6979..1d01829fa38 100644 --- a/src/server/game/AI/PlayerAI/PlayerAI.cpp +++ b/src/server/game/AI/PlayerAI/PlayerAI.cpp @@ -392,7 +392,7 @@ enum Spells }; PlayerAI::PlayerAI(Player* player) : UnitAI(player), me(player), - _selfSpec(player->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID)), + _selfSpec(player->GetPrimarySpecialization()), _isSelfHealer(PlayerAI::IsPlayerHealer(player)), _isSelfRangedAttacker(PlayerAI::IsPlayerRangedAttacker(player)) { @@ -407,7 +407,7 @@ Creature* PlayerAI::GetCharmer() const uint16 PlayerAI::GetSpec(Player const* who /*= nullptr*/) const { - return (!who || who == me) ? _selfSpec : who->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID); + return (!who || who == me) ? _selfSpec : who->GetPrimarySpecialization(); } bool PlayerAI::IsPlayerHealer(Player const* who) @@ -427,15 +427,15 @@ bool PlayerAI::IsPlayerHealer(Player const* who) default: return false; case CLASS_PALADIN: - return who->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == TALENT_SPEC_PALADIN_HOLY; + return who->GetPrimarySpecialization() == TALENT_SPEC_PALADIN_HOLY; case CLASS_PRIEST: - return who->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == TALENT_SPEC_PRIEST_DISCIPLINE || who->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == TALENT_SPEC_PRIEST_HOLY; + return who->GetPrimarySpecialization() == TALENT_SPEC_PRIEST_DISCIPLINE || who->GetPrimarySpecialization() == TALENT_SPEC_PRIEST_HOLY; case CLASS_SHAMAN: - return who->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == TALENT_SPEC_SHAMAN_RESTORATION; + return who->GetPrimarySpecialization() == TALENT_SPEC_SHAMAN_RESTORATION; case CLASS_MONK: - return who->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == TALENT_SPEC_MONK_MISTWEAVER; + return who->GetPrimarySpecialization() == TALENT_SPEC_MONK_MISTWEAVER; case CLASS_DRUID: - return who->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == TALENT_SPEC_DRUID_RESTORATION; + return who->GetPrimarySpecialization() == TALENT_SPEC_DRUID_RESTORATION; } } @@ -465,11 +465,11 @@ bool PlayerAI::IsPlayerRangedAttacker(Player const* who) return false; } case CLASS_PRIEST: - return who->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == TALENT_SPEC_PRIEST_SHADOW; + return who->GetPrimarySpecialization() == TALENT_SPEC_PRIEST_SHADOW; case CLASS_SHAMAN: - return who->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == TALENT_SPEC_SHAMAN_ELEMENTAL; + return who->GetPrimarySpecialization() == TALENT_SPEC_SHAMAN_ELEMENTAL; case CLASS_DRUID: - return who->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == TALENT_SPEC_DRUID_BALANCE; + return who->GetPrimarySpecialization() == TALENT_SPEC_DRUID_BALANCE; } } diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index 9aaa1827d95..1f02b7d284b 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -222,7 +222,7 @@ SpellInfo const* ScriptedAI::SelectSpell(Unit* target, uint32 school, uint32 mec return nullptr; //Silenced so we can't cast - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SILENCED)) + if (me->HasUnitFlag(UNIT_FLAG_SILENCED)) return nullptr; //Using the extended script system we first create a list of viable spells diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp index 1eb60c23961..0128a8d55a1 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp @@ -174,7 +174,7 @@ void npc_escortAI::EnterEvadeMode(EvadeReason /*why*/) { me->GetMotionMaster()->MoveTargetedHome(); if (HasImmuneToNPCFlags) - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC); + me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC); Reset(); } } @@ -497,11 +497,12 @@ void npc_escortAI::Start(bool isActiveAttacker /* = true*/, bool run /* = false } //disable npcflags - me->SetUInt64Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC)) + me->SetNpcFlags(UNIT_NPC_FLAG_NONE); + me->SetNpcFlags2(UNIT_NPC_FLAG_2_NONE); + if (me->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC)) { HasImmuneToNPCFlags = true; - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC); } TC_LOG_DEBUG("scripts", "EscortAI started. ActiveAttacker = %d, Run = %d, PlayerGUID = %s", uint32(m_bIsActiveAttacker), uint32(m_bIsRunning), m_uiPlayerGUID.ToString().c_str()); diff --git a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp index ef2916b9ea3..07294655449 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp @@ -315,7 +315,8 @@ void FollowerAI::StartFollow(Player* player, uint32 factionForFollower, const Qu TC_LOG_DEBUG("scripts", "FollowerAI start with WAYPOINT_MOTION_TYPE, set to MoveIdle."); } - me->SetUInt64Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); + me->SetNpcFlags(UNIT_NPC_FLAG_NONE); + me->SetNpcFlags2(UNIT_NPC_FLAG_2_NONE); AddFollowState(STATE_FOLLOW_INPROGRESS); diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 57bd1da5d83..acd2f794bca 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -126,8 +126,8 @@ void SmartAI::StartPath(bool run, uint32 path, bool repeat, Unit* invoker) if (invoker && invoker->GetTypeId() == TYPEID_PLAYER) { - mEscortNPCFlags = me->GetUInt32Value(UNIT_NPC_FLAGS); - me->SetFlag(UNIT_NPC_FLAGS, 0); + mEscortNPCFlags = me->m_unitData->NpcFlags[0]; + me->SetNpcFlags(UNIT_NPC_FLAG_NONE); } GetScript()->ProcessEventsFor(SMART_EVENT_WAYPOINT_START, nullptr, mCurrentWPID, GetScript()->GetPathId()); @@ -222,7 +222,7 @@ void SmartAI::EndPath(bool fail) if (mEscortNPCFlags) { - me->SetFlag(UNIT_NPC_FLAGS, mEscortNPCFlags); + me->SetNpcFlags(NPCFlags(mEscortNPCFlags)); mEscortNPCFlags = 0; } @@ -645,7 +645,7 @@ void SmartAI::JustSummoned(Creature* creature) void SmartAI::AttackStart(Unit* who) { // dont allow charmed npcs to act on their own - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED)) + if (me->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED)) { if (who && mCanAutoAttack) me->Attack(who, true); diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index b7ffba57f6a..a43d592d745 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -809,7 +809,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { if (IsUnit(*itr)) { - (*itr)->ToUnit()->SetUInt32Value(UNIT_NPC_EMOTESTATE, e.action.emote.emote); + (*itr)->ToUnit()->SetEmoteState(Emote(e.action.emote.emote)); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SET_EMOTE_STATE. %s set emotestate to %u", (*itr)->GetGUID().ToString().c_str(), e.action.emote.emote); } @@ -830,13 +830,13 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { if (!e.action.unitFlag.type) { - (*itr)->ToUnit()->SetFlag(UNIT_FIELD_FLAGS, e.action.unitFlag.flag); + (*itr)->ToUnit()->AddUnitFlag(UnitFlags(e.action.unitFlag.flag)); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SET_UNIT_FLAG. %s added flag %u to UNIT_FIELD_FLAGS", (*itr)->GetGUID().ToString().c_str(), e.action.unitFlag.flag); } else { - (*itr)->ToUnit()->SetFlag(UNIT_FIELD_FLAGS_2, e.action.unitFlag.flag); + (*itr)->ToUnit()->AddUnitFlag2(UnitFlags2(e.action.unitFlag.flag)); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_SET_UNIT_FLAG. %s added flag %u to UNIT_FIELD_FLAGS_2", (*itr)->GetGUID().ToString().c_str(), e.action.unitFlag.flag); } @@ -858,13 +858,13 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { if (!e.action.unitFlag.type) { - (*itr)->ToUnit()->RemoveFlag(UNIT_FIELD_FLAGS, e.action.unitFlag.flag); + (*itr)->ToUnit()->RemoveUnitFlag(UnitFlags(e.action.unitFlag.flag)); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_REMOVE_UNIT_FLAG. %s removed flag %u to UNIT_FIELD_FLAGS", (*itr)->GetGUID().ToString().c_str(), e.action.unitFlag.flag); } else { - (*itr)->ToUnit()->RemoveFlag(UNIT_FIELD_FLAGS_2, e.action.unitFlag.flag); + (*itr)->ToUnit()->RemoveUnitFlag2(UnitFlags2(e.action.unitFlag.flag)); TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_REMOVE_UNIT_FLAG. %s removed flag %u to UNIT_FIELD_FLAGS_2", (*itr)->GetGUID().ToString().c_str(), e.action.unitFlag.flag); } @@ -1922,7 +1922,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) if (IsCreature(*itr)) - (*itr)->ToUnit()->SetUInt64Value(UNIT_NPC_FLAGS, e.action.unitFlag.flag); + (*itr)->ToUnit()->SetNpcFlags(NPCFlags(e.action.unitFlag.flag)); delete targets; break; @@ -1935,7 +1935,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) if (IsCreature(*itr)) - (*itr)->ToUnit()->SetFlag64(UNIT_NPC_FLAGS, e.action.unitFlag.flag); + (*itr)->ToUnit()->AddNpcFlag(NPCFlags(e.action.unitFlag.flag)); delete targets; break; @@ -1948,7 +1948,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) if (IsCreature(*itr)) - (*itr)->ToUnit()->RemoveFlag64(UNIT_NPC_FLAGS, e.action.unitFlag.flag); + (*itr)->ToUnit()->RemoveNpcFlag(NPCFlags(e.action.unitFlag.flag)); delete targets; break; @@ -2132,7 +2132,25 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u break; for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) if (IsUnit(*itr)) - (*itr)->ToUnit()->SetByteFlag(UNIT_FIELD_BYTES_1, e.action.setunitByte.type, e.action.setunitByte.byte1); + { + switch (e.action.setunitByte.type) + { + case 0: + (*itr)->ToUnit()->SetStandState(UnitStandStateType(e.action.setunitByte.byte1)); + break; + case 1: + // pet talent points + break; + case 2: + (*itr)->ToUnit()->AddVisFlags(UnitVisFlags(e.action.setunitByte.byte1)); + break; + case 3: + // this is totally wrong to maintain compatibility with existing scripts + // TODO: fix with animtier overhaul + (*itr)->ToUnit()->SetAnimTier(UnitBytes1_Flags(*(*itr)->ToUnit()->m_unitData->AnimTier | e.action.setunitByte.byte1), false); + break; + } + } delete targets; break; @@ -2145,7 +2163,23 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) if (IsUnit(*itr)) - (*itr)->ToUnit()->RemoveByteFlag(UNIT_FIELD_BYTES_1, e.action.delunitByte.type, e.action.delunitByte.byte1); + { + switch (e.action.setunitByte.type) + { + case 0: + (*itr)->ToUnit()->SetStandState(UNIT_STAND_STATE_STAND); + break; + case 1: + // pet talent points + break; + case 2: + (*itr)->ToUnit()->RemoveVisFlags(UnitVisFlags(e.action.setunitByte.byte1)); + break; + case 3: + (*itr)->ToUnit()->SetAnimTier(UnitBytes1_Flags(*(*itr)->ToUnit()->m_unitData->AnimTier & ~e.action.setunitByte.byte1), false); + break; + } + } delete targets; break; @@ -2183,8 +2217,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u break; for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) - if (IsUnit(*itr)) - (*itr)->ToUnit()->SetUInt32Value(OBJECT_DYNAMIC_FLAGS, e.action.unitFlag.flag); + (*itr)->SetDynamicFlags(e.action.unitFlag.flag); delete targets; break; @@ -2196,8 +2229,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u break; for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) - if (IsUnit(*itr)) - (*itr)->ToUnit()->SetFlag(OBJECT_DYNAMIC_FLAGS, e.action.unitFlag.flag); + (*itr)->AddDynamicFlag(e.action.unitFlag.flag); delete targets; break; @@ -2209,8 +2241,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u break; for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) - if (IsUnit(*itr)) - (*itr)->ToUnit()->RemoveFlag(OBJECT_DYNAMIC_FLAGS, e.action.unitFlag.flag); + (*itr)->RemoveDynamicFlag(e.action.unitFlag.flag); delete targets; break; @@ -2389,7 +2420,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) if (IsGameObject(*itr)) - (*itr)->ToGameObject()->SetUInt32Value(GAMEOBJECT_FLAGS, e.action.goFlag.flag); + (*itr)->ToGameObject()->SetFlags(GameObjectFlags(e.action.goFlag.flag)); delete targets; break; @@ -2402,7 +2433,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) if (IsGameObject(*itr)) - (*itr)->ToGameObject()->SetFlag(GAMEOBJECT_FLAGS, e.action.goFlag.flag); + (*itr)->ToGameObject()->AddFlag(GameObjectFlags(e.action.goFlag.flag)); delete targets; break; @@ -2415,7 +2446,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) if (IsGameObject(*itr)) - (*itr)->ToGameObject()->RemoveFlag(GAMEOBJECT_FLAGS, e.action.goFlag.flag); + (*itr)->ToGameObject()->RemoveFlag(GameObjectFlags(e.action.goFlag.flag)); delete targets; break; diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index f000d4b2476..167bf745555 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -212,13 +212,13 @@ enum RBACPermissions RBAC_PERM_COMMAND_DEBUG_BG = 304, RBAC_PERM_COMMAND_DEBUG_ENTERVEHICLE = 305, RBAC_PERM_COMMAND_DEBUG_GETITEMSTATE = 306, - RBAC_PERM_COMMAND_DEBUG_GETITEMVALUE = 307, - RBAC_PERM_COMMAND_DEBUG_GETVALUE = 308, + RBAC_PERM_COMMAND_DEBUG_GETITEMVALUE = 307, // DEPRECATED: DON'T REUSE + RBAC_PERM_COMMAND_DEBUG_GETVALUE = 308, // DEPRECATED: DON'T REUSE RBAC_PERM_COMMAND_DEBUG_HOSTIL = 309, RBAC_PERM_COMMAND_DEBUG_ITEMEXPIRE = 310, RBAC_PERM_COMMAND_DEBUG_LOOTRECIPIENT = 311, RBAC_PERM_COMMAND_DEBUG_LOS = 312, - RBAC_PERM_COMMAND_DEBUG_MOD32VALUE = 313, + RBAC_PERM_COMMAND_DEBUG_MOD32VALUE = 313, // DEPRECATED: DON'T REUSE RBAC_PERM_COMMAND_DEBUG_MOVEFLAGS = 314, RBAC_PERM_COMMAND_DEBUG_PLAY = 315, RBAC_PERM_COMMAND_DEBUG_PLAY_CINEMATIC = 316, @@ -237,13 +237,13 @@ enum RBACPermissions RBAC_PERM_COMMAND_DEBUG_SEND_SETPHASESHIFT = 329, RBAC_PERM_COMMAND_DEBUG_SEND_SPELLFAIL = 330, RBAC_PERM_COMMAND_DEBUG_SETAURASTATE = 331, - RBAC_PERM_COMMAND_DEBUG_SETBIT = 332, - RBAC_PERM_COMMAND_DEBUG_SETITEMVALUE = 333, - RBAC_PERM_COMMAND_DEBUG_SETVALUE = 334, + RBAC_PERM_COMMAND_DEBUG_SETBIT = 332, // DEPRECATED: DON'T REUSE + RBAC_PERM_COMMAND_DEBUG_SETITEMVALUE = 333, // DEPRECATED: DON'T REUSE + RBAC_PERM_COMMAND_DEBUG_SETVALUE = 334, // DEPRECATED: DON'T REUSE RBAC_PERM_COMMAND_DEBUG_SETVID = 335, RBAC_PERM_COMMAND_DEBUG_SPAWNVEHICLE = 336, RBAC_PERM_COMMAND_DEBUG_THREAT = 337, - RBAC_PERM_COMMAND_DEBUG_UPDATE = 338, + RBAC_PERM_COMMAND_DEBUG_UPDATE = 338, // DEPRECATED: DON'T REUSE RBAC_PERM_COMMAND_DEBUG_UWS = 339, RBAC_PERM_COMMAND_WPGPS = 340, RBAC_PERM_COMMAND_DESERTER = 341, @@ -451,7 +451,7 @@ enum RBACPermissions RBAC_PERM_COMMAND_DEMORPH = 543, RBAC_PERM_COMMAND_MODIFY = 544, RBAC_PERM_COMMAND_MODIFY_ARENAPOINTS = 545, - RBAC_PERM_COMMAND_MODIFY_BIT = 546, + RBAC_PERM_COMMAND_MODIFY_BIT = 546, // DEPRECATED: DON'T REUSE RBAC_PERM_COMMAND_MODIFY_DRUNK = 547, RBAC_PERM_COMMAND_MODIFY_ENERGY = 548, RBAC_PERM_COMMAND_MODIFY_FACTION = 549, diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 7b2b726a574..d266f72491a 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -502,7 +502,7 @@ void PlayerAchievementMgr::CompletedAchievement(AchievementEntry const* achievem //! Since no common attributes were found, (not even in titleRewardFlags field) //! we explicitly check by ID. Maybe in the future we could move the achievement_reward //! condition fields to the condition system. - if (uint32 titleId = reward->TitleId[achievement->ID == 1793 ? _owner->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER) : (_owner->GetTeam() == ALLIANCE ? 0 : 1)]) + if (uint32 titleId = reward->TitleId[achievement->ID == 1793 ? _owner->m_playerData->NativeSex : (_owner->GetTeam() == ALLIANCE ? 0 : 1)]) if (CharTitlesEntry const* titleEntry = sCharTitlesStore.LookupEntry(titleId)) _owner->SetTitle(titleEntry); diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp index 4422703aef0..e7944aa8e14 100644 --- a/src/server/game/Achievements/CriteriaHandler.cpp +++ b/src/server/game/Achievements/CriteriaHandler.cpp @@ -657,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(ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS), referencePlayer); + SetCriteriaProgress(criteria, referencePlayer->m_activePlayerData->LifetimeHonorableKills, referencePlayer); break; case CRITERIA_TYPE_HIGHEST_GOLD_VALUE_OWNED: SetCriteriaProgress(criteria, referencePlayer->GetMoney(), referencePlayer, PROGRESS_HIGHEST); @@ -1445,12 +1445,12 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis if (area->AreaBit < 0) continue; - uint16 playerIndexOffset = uint16(uint32(area->AreaBit) / 32); + uint16 playerIndexOffset = uint16(uint32(area->AreaBit) / 64); if (playerIndexOffset >= PLAYER_EXPLORED_ZONES_SIZE) continue; - uint32 mask = 1 << (uint32(area->AreaBit) % 32); - if (referencePlayer->GetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + playerIndexOffset) & mask) + uint64 mask = uint64(1) << (area->AreaBit % 64); + if (referencePlayer->m_activePlayerData->ExploredZones[playerIndexOffset] & mask) { matchFound = true; break; diff --git a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp index 6368980db42..f6d0de1a64f 100644 --- a/src/server/game/AuctionHouse/AuctionHouseMgr.cpp +++ b/src/server/game/AuctionHouse/AuctionHouseMgr.cpp @@ -718,41 +718,7 @@ void AuctionHouseObject::BuildListAuctionItems(WorldPackets::AuctionHouse::Aucti if (name.empty()) continue; - // DO NOT use GetItemEnchantMod(proto->RandomProperty) as it may return a result - // that matches the search but it may not equal item->GetItemRandomPropertyId() - // used in BuildAuctionInfo() which then causes wrong items to be listed - int32 propRefID = item->GetItemRandomPropertyId(); - - if (propRefID) - { - // Append the suffix to the name (ie: of the Monkey) if one exists - // These are found in ItemRandomSuffix.dbc and ItemRandomProperties.dbc - // even though the DBC names seem misleading - - const char* suffix = nullptr; - - if (propRefID < 0) - { - const ItemRandomSuffixEntry* itemRandSuffix = sItemRandomSuffixStore.LookupEntry(-propRefID); - if (itemRandSuffix) - suffix = itemRandSuffix->Name->Str[player->GetSession()->GetSessionDbcLocale()]; - } - else - { - const ItemRandomPropertiesEntry* itemRandProp = sItemRandomPropertiesStore.LookupEntry(propRefID); - if (itemRandProp) - suffix = itemRandProp->Name->Str[player->GetSession()->GetSessionDbcLocale()]; - } - - // dbc local name - if (suffix) - { - // Append the suffix (ie: of the Monkey) to the name using localization - // or default enUS if localization is invalid - name += ' '; - name += suffix; - } - } + // TODO: Generate name using ItemNameDescription // Perform the search (with or without suffix) if (!Utf8FitTo(name, searchedname)) @@ -852,9 +818,9 @@ void AuctionEntry::BuildAuctionInfo(std::vector<WorldPackets::AuctionHouse::Auct } uint8 i = 0; - for (ItemDynamicFieldGems const& gemData : item->GetGems()) + for (UF::SocketedGem const& gemData : item->m_itemData->Gems) { - if (gemData.ItemId) + if (gemData.ItemID) { WorldPackets::Item::ItemGemData gem; gem.Slot = i; diff --git a/src/server/game/BattlePets/BattlePetMgr.cpp b/src/server/game/BattlePets/BattlePetMgr.cpp index 27b97e0eca6..02ac7c2ffe1 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(ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID, guid); + _owner->GetPlayer()->SetSummonedBattlePetGUID(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(ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID) == pet->GetGuidValue(UNIT_FIELD_BATTLE_PET_COMPANION_GUID)) + if (pet && *ownerPlayer->m_activePlayerData->SummonedBattlePetGUID == pet->GetBattlePetCompanionGUID()) { pet->DespawnOrUnsummon(); - ownerPlayer->SetGuidValue(ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID, ObjectGuid::Empty); + ownerPlayer->SetSummonedBattlePetGUID(ObjectGuid::Empty); } } diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp index 39aced653c8..0bd37951c5a 100644 --- a/src/server/game/Battlefield/Battlefield.cpp +++ b/src/server/game/Battlefield/Battlefield.cpp @@ -493,7 +493,7 @@ void Battlefield::HideNpc(Creature* creature) { creature->CombatStop(); creature->SetReactState(REACT_PASSIVE); - creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + creature->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); creature->DisappearAndDie(); creature->SetVisible(false); } @@ -501,14 +501,14 @@ void Battlefield::HideNpc(Creature* creature) void Battlefield::ShowNpc(Creature* creature, bool aggressive) { creature->SetVisible(true); - creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + creature->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); if (!creature->IsAlive()) creature->Respawn(true); if (aggressive) creature->SetReactState(REACT_AGGRESSIVE); else { - creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + creature->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); creature->SetReactState(REACT_PASSIVE); } } diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp index c5c46a15377..3d87b2aa66e 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp @@ -567,7 +567,7 @@ void BattlefieldWG::OnBattleStart() // Update faction of relic, only attacker can click on relic->SetFaction(WintergraspFaction[GetAttackerTeam()]); // Set in use (not allow to click on before last door is broken) - relic->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE | GO_FLAG_NOT_SELECTABLE); + relic->AddFlag(GameObjectFlags(GO_FLAG_IN_USE | GO_FLAG_NOT_SELECTABLE)); m_titansRelicGUID = relic->GetGUID(); } else @@ -1476,7 +1476,7 @@ void BfWGGameObjectBuilding::Destroyed() go->SetGoState(GO_STATE_ACTIVE); _wg->SetRelicInteractible(true); if (_wg->GetRelic()) - _wg->GetRelic()->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE | GO_FLAG_NOT_SELECTABLE); + _wg->GetRelic()->RemoveFlag(GameObjectFlags(GO_FLAG_IN_USE | GO_FLAG_NOT_SELECTABLE)); else TC_LOG_ERROR("bg.battlefield.wg", "Titan Relic not found."); break; diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index eaa973abec7..20613f3f840 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -491,7 +491,7 @@ inline void Battleground::_ProcessJoin(uint32 diff) player->SendDirectMessage(battlefieldStatus.Write()); // Correctly display EnemyUnitFrame - player->SetByteValue(PLAYER_BYTES_4, PLAYER_BYTES_4_OFFSET_ARENA_FACTION, player->GetBGTeam()); + player->SetArenaFaction(player->GetBGTeam()); player->RemoveAurasDueToSpell(SPELL_ARENA_PREPARATION); player->ResetAllPowers(); @@ -1034,7 +1034,7 @@ void Battleground::TeleportPlayerToExploitLocation(Player* player) void Battleground::AddPlayer(Player* player) { // remove afk from player - if (player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_AFK)) + if (player->isAFK()) player->ToggleAFK(); // score struct must be created in inherited class @@ -1044,7 +1044,7 @@ void Battleground::AddPlayer(Player* player) BattlegroundPlayer bp; bp.OfflineRemoveTime = 0; bp.Team = team; - bp.ActiveSpec = player->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID); + bp.ActiveSpec = player->GetPrimarySpecialization(); // Add to list/maps m_Players[player->GetGUID()] = bp; @@ -1288,7 +1288,7 @@ void Battleground::BuildPvPLogDataPacket(WorldPackets::Battleground::PVPLogData& if (Player* player = ObjectAccessor::GetPlayer(GetBgMap(), playerData.PlayerGUID)) { playerData.IsInWorld = true; - playerData.PrimaryTalentTree = player->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID); + playerData.PrimaryTalentTree = player->GetPrimarySpecialization(); playerData.Sex = player->getGender(); playerData.Race = player->getRace(); playerData.Class = player->getClass(); @@ -1618,9 +1618,6 @@ bool Battleground::AddSpiritGuide(uint32 type, float x, float y, float z, float // casting visual effect creature->SetChannelSpellId(SPELL_SPIRIT_HEAL_CHANNEL); creature->SetChannelSpellXSpellVisualId(VISUAL_SPIRIT_HEAL_CHANNEL); - // correct cast speed - creature->SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f); - creature->SetFloatValue(UNIT_MOD_CAST_HASTE, 1.0f); //creature->CastSpell(creature, SPELL_SPIRIT_HEAL_CHANNEL, true); return true; } @@ -1736,7 +1733,7 @@ void Battleground::HandleKillPlayer(Player* victim, Player* killer) if (!isArena()) { // To be able to remove insignia -- ONLY IN Battlegrounds - victim->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); + victim->AddUnitFlag(UNIT_FLAG_SKINNABLE); RewardXPAtKill(killer, victim); } } diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp index 4ec9c553bb1..3d343d2364c 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundIC.cpp @@ -137,9 +137,9 @@ void BattlegroundIC::PostUpdateImpl(uint32 diff) { if (siege->IsAlive()) { - if (siege->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_CANNOT_SWIM|UNIT_FLAG_IMMUNE_TO_PC)) + if (siege->HasUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_CANNOT_SWIM | UNIT_FLAG_IMMUNE_TO_PC))) // following sniffs the vehicle always has UNIT_FLAG_CANNOT_SWIM - siege->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_IMMUNE_TO_PC); + siege->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC)); else siege->SetHealth(siege->GetMaxHealth()); } @@ -182,7 +182,7 @@ void BattlegroundIC::PostUpdateImpl(uint32 diff) DelObject(nodePoint[i].gameobject_type); AddObject(nodePoint[i].gameobject_type, nodePoint[i].gameobject_entry, cords[0], cords[1], cords[2], cords[3], 0, 0, 0, 0, RESPAWN_ONE_DAY); - GetBGObject(nodePoint[i].gameobject_type)->SetUInt32Value(GAMEOBJECT_FACTION, nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_Factions[1] : BG_IC_Factions[0]); + GetBGObject(nodePoint[i].gameobject_type)->SetFaction(nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_Factions[1] : BG_IC_Factions[0]); UpdateNodeWorldState(&nodePoint[i]); HandleCapturedNodes(&nodePoint[i], false); @@ -234,7 +234,7 @@ void BattlegroundIC::StartingEventOpenDoors() DoorOpen(BG_IC_GO_DOODAD_VR_PORTCULLIS01_2); for (uint8 i = 0; i < MAX_FORTRESS_TELEPORTERS_SPAWNS; ++i) - GetBGObject(BG_IC_Teleporters[i].type)->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + GetBGObject(BG_IC_Teleporters[i].type)->RemoveFlag(GO_FLAG_NOT_SELECTABLE); for (uint8 i = 0; i < MAX_FORTRESS_TELEPORTER_EFFECTS_SPAWNS; ++i) GetBGObject(BG_IC_TeleporterEffects[i].type)->SetGoState(GO_STATE_ACTIVE); @@ -485,7 +485,7 @@ void BattlegroundIC::EventPlayerClickedOnFlag(Player* player, GameObject* target EndBattleground(0); } - GetBGObject(nodePoint[i].gameobject_type)->SetUInt32Value(GAMEOBJECT_FACTION, nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_Factions[1] : BG_IC_Factions[0]); + GetBGObject(nodePoint[i].gameobject_type)->SetFaction(nodePoint[i].faction == TEAM_ALLIANCE ? BG_IC_Factions[1] : BG_IC_Factions[0]); UpdateNodeWorldState(&nodePoint[i]); // we dont need iterating if we are here @@ -575,7 +575,7 @@ void BattlegroundIC::HandleContestedNodes(ICNodePoint* node) for (Creature* cannon : cannons) { cannon->GetVehicleKit()->RemoveAllPassengers(); - cannon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + cannon->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); } } else if (node->nodeType == NODE_TYPE_WORKSHOP) @@ -607,7 +607,7 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* node, bool recapture) gunshipHorde->GetCreatureListWithEntryInGrid(cannons, NPC_HORDE_GUNSHIP_CANNON, 150.0f); for (Creature* cannon : cannons) - cannon->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + cannon->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); for (uint8 u = 0; u < MAX_HANGAR_TELEPORTERS_SPAWNS; ++u) { @@ -762,7 +762,7 @@ void BattlegroundIC::HandleCapturedNodes(ICNodePoint* node, bool recapture) if (Creature* siegeEngine = GetBGCreature(siegeType)) { - siegeEngine->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_CANNOT_SWIM|UNIT_FLAG_IMMUNE_TO_PC); + siegeEngine->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_CANNOT_SWIM | UNIT_FLAG_IMMUNE_TO_PC)); siegeEngine->setFaction(BG_IC_Factions[(node->faction == TEAM_ALLIANCE ? 0 : 1)]); } } @@ -801,12 +801,12 @@ void BattlegroundIC::DestroyGate(Player* player, GameObject* go) if (player->GetTeamId() == TEAM_ALLIANCE) { DoorOpen(BG_IC_GO_HORDE_KEEP_PORTCULLIS); - GetBGObject(BG_IC_GO_HORDE_BANNER)->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + GetBGObject(BG_IC_GO_HORDE_BANNER)->RemoveFlag(GO_FLAG_NOT_SELECTABLE); } else { DoorOpen(BG_IC_GO_DOODAD_PORTCULLISACTIVE02); - GetBGObject(BG_IC_GO_ALLIANCE_BANNER)->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + GetBGObject(BG_IC_GO_ALLIANCE_BANNER)->RemoveFlag(GO_FLAG_NOT_SELECTABLE); } uint32 textId; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp index 9b14fa92c3f..36ddedb1f32 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundSA.cpp @@ -674,9 +674,9 @@ void BattlegroundSA::DemolisherStartState(bool start) if (Creature* dem = GetBGCreature(i)) { if (start) - dem->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + dem->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); else - dem->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + dem->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); } } } @@ -758,9 +758,9 @@ void BattlegroundSA::UpdateObjectInteractionFlags(uint32 objectId) if (GameObject* go = GetBGObject(objectId)) { if (CanInteractWithObject(objectId)) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); else - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->AddFlag(GO_FLAG_NOT_SELECTABLE); } } diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 912d273b136..adcd5f0543a 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -2494,7 +2494,7 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio if (condition->Gender >= 0 && player->getGender() != condition->Gender) return false; - if (condition->NativeGender >= 0 && player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER) != condition->NativeGender) + if (condition->NativeGender >= 0 && player->m_playerData->NativeSex != condition->NativeGender) return false; if (condition->PowerType != -1 && condition->PowerTypeComp) @@ -2506,7 +2506,7 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio if (condition->ChrSpecializationIndex >= 0 || condition->ChrSpecializationRole >= 0) { - if (ChrSpecializationEntry const* spec = sChrSpecializationStore.LookupEntry(player->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID))) + if (ChrSpecializationEntry const* spec = sChrSpecializationStore.LookupEntry(player->GetPrimarySpecialization())) { if (condition->ChrSpecializationIndex >= 0 && spec->OrderIndex != condition->ChrSpecializationIndex) return false; @@ -2590,10 +2590,10 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio } } - if (condition->PvpMedal && !((1 << (condition->PvpMedal - 1)) & player->GetUInt32Value(ACTIVE_PLAYER_FIELD_PVP_MEDALS))) + if (condition->PvpMedal && !((1 << (condition->PvpMedal - 1)) & *player->m_activePlayerData->PvpMedals)) return false; - if (condition->LifetimeMaxPVPRank && player->GetByteValue(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_LIFETIME_MAX_PVP_RANK) != condition->LifetimeMaxPVPRank) + if (condition->LifetimeMaxPVPRank && player->m_activePlayerData->LifetimeMaxRank != 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(ACTIVE_PLAYER_FIELD_QUEST_COMPLETED + ((questBit - 1) >> 5)) & (1 << ((questBit - 1) & 31))) != 0; + results[i] = (player->m_activePlayerData->QuestCompleted[((questBit - 1) >> 6)] & (UI64LIT(1) << ((questBit - 1) & 63))) != 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(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + area->AreaBit / 32) & (1 << (uint32(area->AreaBit) % 32)))) + if (area->AreaBit != -1 && !(player->m_activePlayerData->ExploredZones[area->AreaBit / 64] & (UI64LIT(1) << (uint32(area->AreaBit) % 64)))) return false; } } @@ -2839,16 +2839,16 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio } } - if (condition->MinAvgItemLevel && int32(std::floor(player->GetFloatValue(PLAYER_FIELD_AVG_ITEM_LEVEL))) < condition->MinAvgItemLevel) + if (condition->MinAvgItemLevel && int32(std::floor(player->m_playerData->AvgItemLevel[0])) < condition->MinAvgItemLevel) return false; - if (condition->MaxAvgItemLevel && int32(std::floor(player->GetFloatValue(PLAYER_FIELD_AVG_ITEM_LEVEL))) > condition->MaxAvgItemLevel) + if (condition->MaxAvgItemLevel && int32(std::floor(player->m_playerData->AvgItemLevel[0])) > condition->MaxAvgItemLevel) return false; - if (condition->MinAvgEquippedItemLevel && uint32(std::floor(player->GetFloatValue(PLAYER_FIELD_AVG_ITEM_LEVEL + 1))) < condition->MinAvgEquippedItemLevel) + if (condition->MinAvgEquippedItemLevel && uint32(std::floor(player->m_playerData->AvgItemLevel[1])) < condition->MinAvgEquippedItemLevel) return false; - if (condition->MaxAvgEquippedItemLevel && uint32(std::floor(player->GetFloatValue(PLAYER_FIELD_AVG_ITEM_LEVEL + 1))) > condition->MaxAvgEquippedItemLevel) + if (condition->MaxAvgEquippedItemLevel && uint32(std::floor(player->m_playerData->AvgItemLevel[1])) > condition->MaxAvgEquippedItemLevel) return false; if (condition->ModifierTreeID && !player->ModifierTreeSatisfied(condition->ModifierTreeID)) diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp index 74e53d79887..09ff125f3a6 100644 --- a/src/server/game/DataStores/DB2Stores.cpp +++ b/src/server/game/DataStores/DB2Stores.cpp @@ -394,6 +394,7 @@ namespace 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<SkillLineEntry const*>> _skillLinesByParentSkillLine; std::unordered_map<uint32, std::vector<SkillLineAbilityEntry const*>> _skillLineAbilitiesBySkillupSkill; SkillRaceClassInfoContainer _skillRaceClassInfoBySkill; SpecializationSpellsContainer _specializationSpellsBySpec; @@ -1026,6 +1027,10 @@ void DB2Manager::LoadStores(std::string const& dataPath, uint32 defaultLocale) for (RulesetItemUpgradeEntry const* rulesetItemUpgrade : sRulesetItemUpgradeStore) _rulesetItemUpgrade[rulesetItemUpgrade->ItemID] = rulesetItemUpgrade->ItemUpgradeID; + for (SkillLineEntry const* skill : sSkillLineStore) + if (skill->ParentSkillLineID) + _skillLinesByParentSkillLine[skill->ParentSkillLineID].push_back(skill); + for (SkillLineAbilityEntry const* skillLineAbility : sSkillLineAbilityStore) _skillLineAbilitiesBySkillupSkill[skillLineAbility->SkillupSkillLineID ? skillLineAbility->SkillupSkillLineID : skillLineAbility->SkillLine].push_back(skillLineAbility); @@ -2329,6 +2334,11 @@ uint32 DB2Manager::GetRulesetItemUpgrade(uint32 itemId) const return 0; } +std::vector<SkillLineEntry const*> const* DB2Manager::GetSkillLinesForParentSkill(uint32 parentSkillId) const +{ + return Trinity::Containers::MapGetValuePtr(_skillLinesByParentSkillLine, parentSkillId); +} + std::vector<SkillLineAbilityEntry const*> const* DB2Manager::GetSkillLineAbilitiesBySkill(uint32 skillId) const { return Trinity::Containers::MapGetValuePtr(_skillLineAbilitiesBySkillupSkill, skillId); diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h index 2960d4fb185..158ecb9de15 100644 --- a/src/server/game/DataStores/DB2Stores.h +++ b/src/server/game/DataStores/DB2Stores.h @@ -328,6 +328,7 @@ public: 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<SkillLineEntry const*> const* GetSkillLinesForParentSkill(uint32 parentSkillId) 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; diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp index 64ac5d0694e..1632fce9e6d 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp @@ -48,9 +48,6 @@ AreaTrigger::AreaTrigger() : WorldObject(false), MapObject(), _aurEff(nullptr), m_updateFlag.Stationary = true; m_updateFlag.AreaTrigger = true; - - m_valuesCount = AREATRIGGER_END; - _dynamicValuesCount = AREATRIGGER_DYNAMIC_END; } AreaTrigger::~AreaTrigger() @@ -114,19 +111,33 @@ bool AreaTrigger::Create(uint32 spellMiscId, Unit* caster, Unit* target, SpellIn SetObjectScale(1.0f); - SetGuidValue(AREATRIGGER_CASTER, caster->GetGUID()); - SetGuidValue(AREATRIGGER_CREATING_EFFECT_GUID, castId); + auto areaTriggerData = m_values.ModifyValue(&AreaTrigger::m_areaTriggerData); + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::Caster), caster->GetGUID()); + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::CreatingEffectGUID), castId); - SetUInt32Value(AREATRIGGER_SPELLID, spell->Id); - SetUInt32Value(AREATRIGGER_SPELL_FOR_VISUALS, spell->Id); - SetUInt32Value(AREATRIGGER_SPELL_X_SPELL_VISUAL_ID, spellXSpellVisualId); - SetUInt32Value(AREATRIGGER_TIME_TO_TARGET_SCALE, GetMiscTemplate()->TimeToTargetScale != 0 ? GetMiscTemplate()->TimeToTargetScale : GetUInt32Value(AREATRIGGER_DURATION)); - SetFloatValue(AREATRIGGER_BOUNDS_RADIUS_2D, GetTemplate()->MaxSearchRadius); - SetUInt32Value(AREATRIGGER_DECAL_PROPERTIES_ID, GetMiscTemplate()->DecalPropertiesId); + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::SpellID), spell->Id); + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::SpellForVisuals), spell->Id); + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::SpellXSpellVisualID), spellXSpellVisualId); + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::TimeToTargetScale), GetMiscTemplate()->TimeToTargetScale != 0 ? GetMiscTemplate()->TimeToTargetScale : *m_areaTriggerData->Duration); + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::BoundsRadius2D), GetTemplate()->MaxSearchRadius); + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::DecalPropertiesID), GetMiscTemplate()->DecalPropertiesId); - for (uint8 scaleCurveIndex = 0; scaleCurveIndex < MAX_AREATRIGGER_SCALE; ++scaleCurveIndex) - if (GetMiscTemplate()->ExtraScale.Data.Raw[scaleCurveIndex]) - SetUInt32Value(AREATRIGGER_EXTRA_SCALE_CURVE + scaleCurveIndex, GetMiscTemplate()->ExtraScale.Data.Raw[scaleCurveIndex]); + if (GetMiscTemplate()->ExtraScale.Data.Structured.StartTimeOffset) + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ExtraScaleCurve).ModifyValue(&UF::ScaleCurve::StartTimeOffset), GetMiscTemplate()->ExtraScale.Data.Structured.StartTimeOffset); + if (GetMiscTemplate()->ExtraScale.Data.Structured.Points[0] || GetMiscTemplate()->ExtraScale.Data.Structured.Points[1]) + { + Position point(GetMiscTemplate()->ExtraScale.Data.Structured.Points[0], GetMiscTemplate()->ExtraScale.Data.Structured.Points[1]); + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ExtraScaleCurve).ModifyValue(&UF::ScaleCurve::Points, 0), point); + } + if (GetMiscTemplate()->ExtraScale.Data.Structured.Points[2] || GetMiscTemplate()->ExtraScale.Data.Structured.Points[3]) + { + Position point(GetMiscTemplate()->ExtraScale.Data.Structured.Points[2], GetMiscTemplate()->ExtraScale.Data.Structured.Points[3]); + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ExtraScaleCurve).ModifyValue(&UF::ScaleCurve::Points, 1), point); + } + if (GetMiscTemplate()->ExtraScale.Data.Raw[5]) + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ExtraScaleCurve).ModifyValue(&UF::ScaleCurve::ParameterCurve), GetMiscTemplate()->ExtraScale.Data.Raw[5]); + if (GetMiscTemplate()->ExtraScale.Data.Structured.OverrideActive) + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ExtraScaleCurve).ModifyValue(&UF::ScaleCurve::OverrideActive), GetMiscTemplate()->ExtraScale.Data.Structured.OverrideActive); PhasingHandler::InheritPhaseShift(this, caster); @@ -137,7 +148,7 @@ bool AreaTrigger::Create(uint32 spellMiscId, Unit* caster, Unit* target, SpellIn UpdateShape(); - uint32 timeToTarget = GetMiscTemplate()->TimeToTarget != 0 ? GetMiscTemplate()->TimeToTarget : GetUInt32Value(AREATRIGGER_DURATION); + uint32 timeToTarget = GetMiscTemplate()->TimeToTarget != 0 ? GetMiscTemplate()->TimeToTarget : *m_areaTriggerData->Duration; if (GetTemplate()->HasFlag(AREATRIGGER_FLAG_HAS_CIRCULAR_MOVEMENT)) { @@ -248,7 +259,7 @@ void AreaTrigger::SetDuration(int32 newDuration) _totalDuration = newDuration; // negative duration (permanent areatrigger) sent as 0 - SetUInt32Value(AREATRIGGER_DURATION, std::max(newDuration, 0)); + SetUpdateFieldValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::Duration), std::max(newDuration, 0)); } void AreaTrigger::_UpdateDuration(int32 newDuration) @@ -256,7 +267,8 @@ void AreaTrigger::_UpdateDuration(int32 newDuration) _duration = newDuration; // should be sent in object create packets only - m_uint32Values[AREATRIGGER_DURATION] = _duration; + SetUpdateFieldValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::Duration), _duration); + const_cast<UF::AreaTriggerData&>(*m_areaTriggerData).ClearChanged(&UF::AreaTriggerData::Duration); } float AreaTrigger::GetProgress() const @@ -632,7 +644,8 @@ void AreaTrigger::InitSplines(std::vector<G3D::Vector3> splinePoints, uint32 tim _spline->initLengths(); // should be sent in object create packets only - m_uint32Values[AREATRIGGER_TIME_TO_TARGET] = timeToTarget; + SetUpdateFieldValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::TimeToTarget), timeToTarget); + const_cast<UF::AreaTriggerData&>(*m_areaTriggerData).ClearChanged(&UF::AreaTriggerData::TimeToTarget); if (IsInWorld()) { @@ -668,7 +681,8 @@ void AreaTrigger::InitCircularMovement(AreaTriggerCircularMovementInfo const& cm ASSERT(cmi.Center.is_initialized() || cmi.PathTarget.is_initialized()); // should be sent in object create packets only - m_uint32Values[AREATRIGGER_TIME_TO_TARGET] = timeToTarget; + SetUpdateFieldValue(m_values.ModifyValue(&AreaTrigger::m_areaTriggerData).ModifyValue(&UF::AreaTriggerData::TimeToTarget), timeToTarget); + const_cast<UF::AreaTriggerData&>(*m_areaTriggerData).ClearChanged(&UF::AreaTriggerData::TimeToTarget); _circularMovementInfo = cmi; @@ -849,3 +863,36 @@ void AreaTrigger::AI_Destroy() { _ai.reset(); } + +void AreaTrigger::BuildValuesCreate(ByteBuffer* data, Player const* target) const +{ + UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); + std::size_t sizePos = data->wpos(); + *data << uint32(0); + *data << uint8(flags); + m_objectData->WriteCreate(*data, flags, this, target); + m_areaTriggerData->WriteCreate(*data, flags, this, target); + data->put<uint32>(sizePos, data->wpos() - sizePos - 4); +} + +void AreaTrigger::BuildValuesUpdate(ByteBuffer* data, Player const* target) const +{ + UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); + std::size_t sizePos = data->wpos(); + *data << uint32(0); + *data << uint32(m_values.GetChangedObjectTypeMask()); + + if (m_values.HasChanged(TYPEID_OBJECT)) + m_objectData->WriteUpdate(*data, flags, this, target); + + if (m_values.HasChanged(TYPEID_AREATRIGGER)) + m_areaTriggerData->WriteUpdate(*data, flags, this, target); + + data->put<uint32>(sizePos, data->wpos() - sizePos - 4); +} + +void AreaTrigger::ClearUpdateMask(bool remove) +{ + m_values.ClearChangesMask(&AreaTrigger::m_areaTriggerData); + Object::ClearUpdateMask(remove); +} diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.h b/src/server/game/Entities/AreaTrigger/AreaTrigger.h index ceb22ebd74a..732e0c4eb35 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.h +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.h @@ -44,6 +44,10 @@ class TC_GAME_API AreaTrigger : public WorldObject, public GridObject<AreaTrigge AreaTrigger(); ~AreaTrigger(); + void BuildValuesCreate(ByteBuffer* data, Player const* target) const override; + void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override; + void ClearUpdateMask(bool remove) override; + void AddToWorld() override; void RemoveFromWorld() override; @@ -60,11 +64,11 @@ class TC_GAME_API AreaTrigger : public WorldObject, public GridObject<AreaTrigge void Update(uint32 diff) override; void Remove(); bool IsRemoved() const { return _isRemoved; } - uint32 GetSpellId() const { return GetUInt32Value(AREATRIGGER_SPELLID); } + uint32 GetSpellId() const { return m_areaTriggerData->SpellID; } AuraEffect const* GetAuraEffect() const { return _aurEff; } uint32 GetTimeSinceCreated() const { return _timeSinceCreated; } - uint32 GetTimeToTarget() const { return GetUInt32Value(AREATRIGGER_TIME_TO_TARGET); } - uint32 GetTimeToTargetScale() const { return GetUInt32Value(AREATRIGGER_TIME_TO_TARGET_SCALE); } + uint32 GetTimeToTarget() const { return m_areaTriggerData->TimeToTarget; } + uint32 GetTimeToTargetScale() const { return m_areaTriggerData->TimeToTargetScale; } int32 GetDuration() const { return _duration; } int32 GetTotalDuration() const { return _totalDuration; } void SetDuration(int32 newDuration); @@ -76,7 +80,7 @@ class TC_GAME_API AreaTrigger : public WorldObject, public GridObject<AreaTrigge AreaTriggerTemplate const* GetTemplate() const; uint32 GetScriptId() const; - ObjectGuid const& GetCasterGuid() const { return GetGuidValue(AREATRIGGER_CASTER); } + ObjectGuid const& GetCasterGuid() const { return m_areaTriggerData->Caster; } Unit* GetCaster() const; Unit* GetTarget() const; @@ -94,6 +98,8 @@ class TC_GAME_API AreaTrigger : public WorldObject, public GridObject<AreaTrigge void UpdateShape(); + UF::UpdateField<UF::AreaTriggerData, 0, TYPEID_AREATRIGGER> m_areaTriggerData; + protected: void _UpdateDuration(int32 newDuration); float GetProgress() const; diff --git a/src/server/game/Entities/Conversation/Conversation.cpp b/src/server/game/Entities/Conversation/Conversation.cpp index 1f898fb1700..e1996a4c9e6 100644 --- a/src/server/game/Entities/Conversation/Conversation.cpp +++ b/src/server/game/Entities/Conversation/Conversation.cpp @@ -32,9 +32,6 @@ Conversation::Conversation() : WorldObject(false), _duration(0), _textureKitId(0 m_updateFlag.Stationary = true; m_updateFlag.Conversation = true; - - m_valuesCount = CONVERSATION_END; - _dynamicValuesCount = CONVERSATION_DYNAMIC_END; } Conversation::~Conversation() @@ -122,7 +119,7 @@ bool Conversation::Create(ObjectGuid::LowType lowGuid, uint32 conversationEntry, SetEntry(conversationEntry); SetObjectScale(1.0f); - SetUInt32Value(CONVERSATION_LAST_LINE_END_TIME, conversationTemplate->LastLineEndTime); + SetUpdateFieldValue(m_values.ModifyValue(&Conversation::m_conversationData).ModifyValue(&UF::ConversationData::LastLineEndTime), conversationTemplate->LastLineEndTime); _duration = conversationTemplate->LastLineEndTime; _textureKitId = conversationTemplate->TextureKitId; @@ -130,11 +127,10 @@ bool Conversation::Create(ObjectGuid::LowType lowGuid, uint32 conversationEntry, { if (ConversationActorTemplate const* actor = conversationTemplate->Actors[actorIndex]) { - ConversationDynamicFieldActor actorField; - actorField.ActorTemplate.CreatureId = actor->CreatureId; - actorField.ActorTemplate.CreatureModelId = actor->CreatureModelId; - actorField.Type = ConversationDynamicFieldActor::ActorType::CreatureActor; - SetDynamicStructuredValue(CONVERSATION_DYNAMIC_FIELD_ACTORS, actorIndex, &actorField); + UF::ConversationActor& actorField = AddDynamicUpdateFieldValue(m_values.ModifyValue(&Conversation::m_conversationData).ModifyValue(&UF::ConversationData::Actors)); + actorField.CreatureID = actor->CreatureId; + actorField.CreatureDisplayInfoID = actor->CreatureModelId; + actorField.Type = AsUnderlyingType(ActorType::CreatureActor); } } @@ -152,19 +148,28 @@ bool Conversation::Create(ObjectGuid::LowType lowGuid, uint32 conversationEntry, } std::set<uint16> actorIndices; + std::vector<UF::ConversationLine> lines; for (ConversationLineTemplate const* line : conversationTemplate->Lines) { actorIndices.insert(line->ActorIdx); - AddDynamicStructuredValue(CONVERSATION_DYNAMIC_FIELD_LINES, line); + lines.emplace_back(); + UF::ConversationLine& lineField = lines.back(); + lineField.ConversationLineID = line->Id; + lineField.StartTime = line->StartTime; + lineField.UiCameraID = line->UiCameraID; + lineField.ActorIndex = line->ActorIdx; + lineField.Flags = line->Flags; } + SetUpdateFieldValue(m_values.ModifyValue(&Conversation::m_conversationData).ModifyValue(&UF::ConversationData::Lines), std::move(lines)); + sScriptMgr->OnConversationCreate(this, creator); // All actors need to be set for (uint16 actorIndex : actorIndices) { - ConversationDynamicFieldActor const* actor = GetDynamicStructuredValue<ConversationDynamicFieldActor>(CONVERSATION_DYNAMIC_FIELD_ACTORS, actorIndex); - if (!actor || actor->IsEmpty()) + UF::ConversationActor const* actor = actorIndex < m_conversationData->Actors.size() ? &m_conversationData->Actors[actorIndex] : nullptr; + if (!actor || (!actor->CreatureID && actor->ActorGUID.IsEmpty())) { TC_LOG_ERROR("entities.conversation", "Failed to create conversation (Id: %u) due to missing actor (Idx: %u).", conversationEntry, actorIndex); return false; @@ -179,10 +184,9 @@ bool Conversation::Create(ObjectGuid::LowType lowGuid, uint32 conversationEntry, void Conversation::AddActor(ObjectGuid const& actorGuid, uint16 actorIdx) { - ConversationDynamicFieldActor actorField; - actorField.ActorGuid = actorGuid; - actorField.Type = ConversationDynamicFieldActor::ActorType::WorldObjectActor; - SetDynamicStructuredValue(CONVERSATION_DYNAMIC_FIELD_ACTORS, actorIdx, &actorField); + auto actorField = m_values.ModifyValue(&Conversation::m_conversationData).ModifyValue(&UF::ConversationData::Actors, actorIdx); + SetUpdateFieldValue(actorField.ModifyValue(&UF::ConversationActor::ActorGUID), actorGuid); + SetUpdateFieldValue(actorField.ModifyValue(&UF::ConversationActor::Type), AsUnderlyingType(ActorType::WorldObjectActor)); } void Conversation::AddParticipant(ObjectGuid const& participantGuid) @@ -194,3 +198,36 @@ uint32 Conversation::GetScriptId() const { return sConversationDataStore->GetConversationTemplate(GetEntry())->ScriptId; } + +void Conversation::BuildValuesCreate(ByteBuffer* data, Player const* target) const +{ + UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); + std::size_t sizePos = data->wpos(); + *data << uint32(0); + *data << uint8(flags); + m_objectData->WriteCreate(*data, flags, this, target); + m_conversationData->WriteCreate(*data, flags, this, target); + data->put<uint32>(sizePos, data->wpos() - sizePos - 4); +} + +void Conversation::BuildValuesUpdate(ByteBuffer* data, Player const* target) const +{ + UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); + std::size_t sizePos = data->wpos(); + *data << uint32(0); + *data << uint32(m_values.GetChangedObjectTypeMask()); + + if (m_values.HasChanged(TYPEID_OBJECT)) + m_objectData->WriteUpdate(*data, flags, this, target); + + if (m_values.HasChanged(TYPEID_CONVERSATION)) + m_conversationData->WriteUpdate(*data, flags, this, target); + + data->put<uint32>(sizePos, data->wpos() - sizePos - 4); +} + +void Conversation::ClearUpdateMask(bool remove) +{ + m_values.ClearChangesMask(&Conversation::m_conversationData); + Object::ClearUpdateMask(remove); +} diff --git a/src/server/game/Entities/Conversation/Conversation.h b/src/server/game/Entities/Conversation/Conversation.h index e91fa236e9c..868a344b47d 100644 --- a/src/server/game/Entities/Conversation/Conversation.h +++ b/src/server/game/Entities/Conversation/Conversation.h @@ -25,44 +25,13 @@ class Unit; class SpellInfo; -#pragma pack(push, 1) -struct ConversationDynamicFieldActor +namespace UF { - ConversationDynamicFieldActor() : Type(0), Padding(0) + inline bool operator==(ConversationLine const& left, ConversationLine const& right) { - memset(Raw.Data, 0, sizeof(Raw.Data)); + return left.ConversationLineID == right.ConversationLineID; } - - bool IsEmpty() const - { - return ActorGuid.IsEmpty(); // this one is good enough - } - - enum ActorType - { - WorldObjectActor = 0, - CreatureActor = 1 - }; - - union - { - ObjectGuid ActorGuid; - struct - { - uint32 CreatureId; - uint32 CreatureModelId; - } ActorTemplate; - - struct - { - uint32 Data[4]; - } Raw; - }; - - uint32 Type; - uint32 Padding; -}; -#pragma pack(pop) +} class TC_GAME_API Conversation : public WorldObject, public GridObject<Conversation> { @@ -70,6 +39,10 @@ class TC_GAME_API Conversation : public WorldObject, public GridObject<Conversat Conversation(); ~Conversation(); + void BuildValuesCreate(ByteBuffer* data, Player const* target) const override; + void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override; + void ClearUpdateMask(bool remove) override; + void AddToWorld() override; void RemoveFromWorld() override; @@ -95,6 +68,14 @@ class TC_GAME_API Conversation : public WorldObject, public GridObject<Conversat uint32 GetScriptId() const; + UF::UpdateField<UF::ConversationData, 0, TYPEID_CONVERSATION> m_conversationData; + + enum class ActorType + { + WorldObjectActor = 0, + CreatureActor = 1 + }; + private: Position _stationaryPosition; ObjectGuid _creatorGuid; diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp index 9a2d7750f8a..2934d3cda98 100644 --- a/src/server/game/Entities/Corpse/Corpse.cpp +++ b/src/server/game/Entities/Corpse/Corpse.cpp @@ -35,9 +35,6 @@ Corpse::Corpse(CorpseType type) : WorldObject(type != CORPSE_BONES), m_type(type m_updateFlag.Stationary = true; - m_valuesCount = CORPSE_END; - _dynamicValuesCount = CORPSE_DYNAMIC_END; - m_time = time(NULL); lootForBody = false; @@ -86,7 +83,7 @@ bool Corpse::Create(ObjectGuid::LowType guidlow, Player* owner) Object::_Create(ObjectGuid::Create<HighGuid::Corpse>(owner->GetMapId(), 0, guidlow)); SetObjectScale(1.0f); - SetGuidValue(CORPSE_FIELD_OWNER, owner->GetGUID()); + SetOwnerGUID(owner->GetGUID()); _cellCoord = Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()); @@ -101,6 +98,13 @@ void Corpse::SaveToDB() SQLTransaction trans = CharacterDatabase.BeginTransaction(); DeleteFromDB(trans); + std::ostringstream items; + for (uint16 index = 0; index < EQUIPMENT_SLOT_END; ++index) + items << m_corpseData->Items[index] << ' '; + + uint32 bytes1 = (uint32(*m_corpseData->RaceID) << 8) | (uint32(*m_corpseData->Sex) << 16) | (uint32(*m_corpseData->SkinID) << 24); + uint32 bytes2 = (uint32(*m_corpseData->FaceID)) | (uint32(*m_corpseData->HairStyleID) << 8) | (uint32(*m_corpseData->HairColorID) << 16) | (uint32(*m_corpseData->FacialHairStyleID) << 24); + uint16 index = 0; PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CORPSE); stmt->setUInt64(index++, GetOwnerGUID().GetCounter()); // guid @@ -109,12 +113,12 @@ void Corpse::SaveToDB() stmt->setFloat (index++, GetPositionZ()); // posZ stmt->setFloat (index++, GetOrientation()); // orientation stmt->setUInt16(index++, GetMapId()); // mapId - stmt->setUInt32(index++, GetUInt32Value(CORPSE_FIELD_DISPLAY_ID)); // displayId - stmt->setString(index++, _ConcatFields(CORPSE_FIELD_ITEM, EQUIPMENT_SLOT_END)); // itemCache - stmt->setUInt32(index++, GetUInt32Value(CORPSE_FIELD_BYTES_1)); // bytes1 - stmt->setUInt32(index++, GetUInt32Value(CORPSE_FIELD_BYTES_2)); // bytes2 - stmt->setUInt8 (index++, GetUInt32Value(CORPSE_FIELD_FLAGS)); // flags - stmt->setUInt8 (index++, GetUInt32Value(CORPSE_FIELD_DYNAMIC_FLAGS)); // dynFlags + stmt->setUInt32(index++, m_corpseData->DisplayID); // displayId + stmt->setString(index++, items.str()); // itemCache + stmt->setUInt32(index++, bytes1); // bytes1 + stmt->setUInt32(index++, bytes2); // bytes2 + stmt->setUInt8 (index++, m_corpseData->Flags); // flags + stmt->setUInt8 (index++, m_corpseData->DynamicFlags); // dynFlags stmt->setUInt32(index++, uint32(m_time)); // time stmt->setUInt8 (index++, GetType()); // corpseType stmt->setUInt32(index++, GetInstanceId()); // instanceId @@ -162,15 +166,25 @@ bool Corpse::LoadCorpseFromDB(ObjectGuid::LowType guid, Field* fields) Object::_Create(ObjectGuid::Create<HighGuid::Corpse>(mapId, 0, guid)); SetObjectScale(1.0f); - SetUInt32Value(CORPSE_FIELD_DISPLAY_ID, fields[5].GetUInt32()); - _LoadIntoDataField(fields[6].GetString(), CORPSE_FIELD_ITEM, EQUIPMENT_SLOT_END); - SetUInt32Value(CORPSE_FIELD_BYTES_1, fields[7].GetUInt32()); - SetUInt32Value(CORPSE_FIELD_BYTES_2, fields[8].GetUInt32()); - SetUInt32Value(CORPSE_FIELD_FLAGS, fields[9].GetUInt8()); - SetUInt32Value(CORPSE_FIELD_DYNAMIC_FLAGS, fields[10].GetUInt8()); - SetGuidValue(CORPSE_FIELD_OWNER, ObjectGuid::Create<HighGuid::Player>(fields[14].GetUInt64())); - if (CharacterInfo const* characterInfo = sWorld->GetCharacterInfo(GetGuidValue(CORPSE_FIELD_OWNER))) - SetUInt32Value(CORPSE_FIELD_FACTIONTEMPLATE, sChrRacesStore.AssertEntry(characterInfo->Race)->FactionID); + SetDisplayId(fields[5].GetUInt32()); + Tokenizer items(fields[6].GetString(), ' ', EQUIPMENT_SLOT_END); + if (items.size() == EQUIPMENT_SLOT_END) + for (uint32 index = 0; index < EQUIPMENT_SLOT_END; ++index) + SetItem(index, atoul(items[index])); + + uint32 bytes1 = fields[7].GetUInt32(); + uint32 bytes2 = fields[8].GetUInt32(); + SetRace((bytes1 >> 8) & 0xFF); + SetSex((bytes1 >> 16) & 0xFF); + SetSkin((bytes1 >> 24) & 0xFF); + SetFace(bytes2 & 0xFF); + SetHairStyle((bytes2 >> 8) & 0xFF); + SetHairColor((bytes2 >> 16) & 0xFF); + SetFacialHairStyle((bytes2 >> 24) & 0xFF); + SetFlags(fields[9].GetUInt8()); + SetCorpseDynamicFlags(CorpseDynFlags(fields[10].GetUInt8())); + SetOwnerGUID(ObjectGuid::Create<HighGuid::Player>(fields[14].GetUInt64())); + SetFactionTemplate(sChrRacesStore.AssertEntry(m_corpseData->RaceID)->FactionID); m_time = time_t(fields[11].GetUInt32()); @@ -203,3 +217,36 @@ bool Corpse::IsExpired(time_t t) const else return m_time < t - 3 * DAY; } + +void Corpse::BuildValuesCreate(ByteBuffer* data, Player const* target) const +{ + UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); + std::size_t sizePos = data->wpos(); + *data << uint32(0); + *data << uint8(flags); + m_objectData->WriteCreate(*data, flags, this, target); + m_corpseData->WriteCreate(*data, flags, this, target); + data->put<uint32>(sizePos, data->wpos() - sizePos - 4); +} + +void Corpse::BuildValuesUpdate(ByteBuffer* data, Player const* target) const +{ + UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); + std::size_t sizePos = data->wpos(); + *data << uint32(0); + *data << uint32(m_values.GetChangedObjectTypeMask()); + + if (m_values.HasChanged(TYPEID_OBJECT)) + m_objectData->WriteUpdate(*data, flags, this, target); + + if (m_values.HasChanged(TYPEID_CORPSE)) + m_corpseData->WriteUpdate(*data, flags, this, target); + + data->put<uint32>(sizePos, data->wpos() - sizePos - 4); +} + +void Corpse::ClearUpdateMask(bool remove) +{ + m_values.ClearChangesMask(&Corpse::m_corpseData); + Object::ClearUpdateMask(remove); +} diff --git a/src/server/game/Entities/Corpse/Corpse.h b/src/server/game/Entities/Corpse/Corpse.h index 58bfab0b555..8abaeae48a3 100644 --- a/src/server/game/Entities/Corpse/Corpse.h +++ b/src/server/game/Entities/Corpse/Corpse.h @@ -53,6 +53,10 @@ class TC_GAME_API Corpse : public WorldObject, public GridObject<Corpse> explicit Corpse(CorpseType type = CORPSE_BONES); ~Corpse(); + void BuildValuesCreate(ByteBuffer* data, Player const* target) const override; + void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override; + void ClearUpdateMask(bool remove) override; + void AddToWorld() override; void RemoveFromWorld() override; @@ -65,7 +69,25 @@ class TC_GAME_API Corpse : public WorldObject, public GridObject<Corpse> void DeleteFromDB(SQLTransaction& trans); static void DeleteFromDB(ObjectGuid const& ownerGuid, SQLTransaction& trans); - ObjectGuid GetOwnerGUID() const { return GetGuidValue(CORPSE_FIELD_OWNER); } + void AddCorpseDynamicFlag(CorpseDynFlags dynamicFlags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::DynamicFlags), dynamicFlags); } + void RemoveCorpseDynamicFlag(CorpseDynFlags dynamicFlags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::DynamicFlags), dynamicFlags); } + void SetCorpseDynamicFlags(CorpseDynFlags dynamicFlags) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::DynamicFlags), dynamicFlags); } + ObjectGuid GetOwnerGUID() const { return m_corpseData->Owner; } + void SetOwnerGUID(ObjectGuid owner) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::Owner), owner); } + void SetPartyGUID(ObjectGuid partyGuid) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::PartyGUID), partyGuid); } + void SetGuildGUID(ObjectGuid guildGuid) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::GuildGUID), guildGuid); } + void SetDisplayId(uint32 displayId) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::DisplayID), displayId); } + void SetRace(uint8 race) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::RaceID), race); } + void SetSex(uint8 sex) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::Sex), sex); } + void SetSkin(uint8 skin) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::SkinID), skin); } + void SetFace(uint8 face) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::FaceID), face); } + void SetHairStyle(uint8 hairStyle) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::HairStyleID), hairStyle); } + void SetHairColor(uint8 hairColor) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::HairColorID), hairColor); } + void SetFacialHairStyle(uint8 facialHairStyle) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::FacialHairStyleID), facialHairStyle); } + void SetFlags(uint32 flags) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::Flags), flags); } + void SetFactionTemplate(int32 factionTemplate) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::FactionTemplate), factionTemplate); } + void SetItem(uint32 slot, uint32 item) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::Items, slot), item); } + void SetCustomDisplayOption(uint32 slot, uint8 customDisplayOption) { SetUpdateFieldValue(m_values.ModifyValue(&Corpse::m_corpseData).ModifyValue(&UF::CorpseData::CustomDisplayOption, slot), customDisplayOption); } time_t const& GetGhostTime() const { return m_time; } void ResetGhostTime() { m_time = time(NULL); } @@ -80,6 +102,8 @@ class TC_GAME_API Corpse : public WorldObject, public GridObject<Corpse> bool IsExpired(time_t t) const; + UF::UpdateField<UF::CorpseData, 0, TYPEID_CORPSE> m_corpseData; + private: CorpseType m_type; time_t m_time; diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 55e93719dc1..937ca3a50e4 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -181,8 +181,6 @@ m_AlreadySearchedAssistance(false), m_regenHealth(true), m_cannotReachTarget(fal m_originalEntry(0), m_homePosition(), m_transportHomePosition(), m_creatureInfo(nullptr), m_creatureData(nullptr), m_waypointID(0), m_path_id(0), m_formation(nullptr), m_focusSpell(nullptr), m_focusDelay(0), m_shouldReacquireTarget(false), m_suppressedOrientation(0.0f) { m_regenTimer = CREATURE_REGEN_INTERVAL; - m_valuesCount = UNIT_END; - _dynamicValuesCount = UNIT_DYNAMIC_END; for (uint8 i = 0; i < MAX_CREATURE_SPELLS; ++i) m_spells[i] = 0; @@ -340,10 +338,10 @@ bool Creature::InitEntry(uint32 entry, CreatureData const* data /*= nullptr*/) m_creatureInfo = cinfo; // map mode related always // equal to player Race field, but creature does not have race - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_RACE, 0); + SetRace(0); // known valid are: CLASS_WARRIOR, CLASS_PALADIN, CLASS_ROGUE, CLASS_MAGE - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, uint8(cinfo->unit_class)); + SetClass(uint8(cinfo->unit_class)); // Cancel load if no model defined if (!(cinfo->GetFirstValidModel())) @@ -362,7 +360,7 @@ bool Creature::InitEntry(uint32 entry, CreatureData const* data /*= nullptr*/) SetDisplayId(model.CreatureDisplayID, model.DisplayScale); SetNativeDisplayId(model.CreatureDisplayID, model.DisplayScale); - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, minfo->gender); + SetGender(minfo->gender); // Load creature equipment if (!data || data->equipmentId == 0) @@ -375,12 +373,12 @@ bool Creature::InitEntry(uint32 entry, CreatureData const* data /*= nullptr*/) SetName(normalInfo->Name); // at normal entry always - SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f); - SetFloatValue(UNIT_MOD_CAST_HASTE, 1.0f); - SetFloatValue(UNIT_FIELD_MOD_HASTE, 1.0f); - SetFloatValue(UNIT_FIELD_MOD_RANGED_HASTE, 1.0f); - SetFloatValue(UNIT_FIELD_MOD_HASTE_REGEN, 1.0f); - SetFloatValue(UNIT_FIELD_MOD_TIME_RATE, 1.0f); + SetModCastingSpeed(1.0f); + SetModSpellHaste(1.0f); + SetModHaste(1.0f); + SetModRangedHaste(1.0f); + SetModHasteRegen(1.0f); + SetModTimeRate(1.0f); SetSpeedRate(MOVE_WALK, cinfo->speed_walk); SetSpeedRate(MOVE_RUN, cinfo->speed_run); @@ -390,7 +388,7 @@ bool Creature::InitEntry(uint32 entry, CreatureData const* data /*= nullptr*/) // Will set UNIT_FIELD_BOUNDINGRADIUS, UNIT_FIELD_COMBATREACH and UNIT_FIELD_DISPLAYSCALE SetObjectScale(cinfo->scale); - SetFloatValue(UNIT_FIELD_HOVERHEIGHT, cinfo->HoverHeight); + SetHoverHeight(cinfo->HoverHeight); // checked at loading m_defaultMovementType = MovementGeneratorType(cinfo->MovementType); @@ -423,19 +421,20 @@ bool Creature::UpdateEntry(uint32 entry, CreatureData const* data /*= nullptr*/, ObjectMgr::ChooseCreatureFlags(cInfo, npcFlags, unitFlags, unitFlags2, unitFlags3, dynamicFlags, data); if (cInfo->flags_extra & CREATURE_FLAG_EXTRA_WORLDEVENT) - SetUInt64Value(UNIT_NPC_FLAGS, npcFlags | sGameEventMgr->GetNPCFlag(this)); - else - SetUInt64Value(UNIT_NPC_FLAGS, npcFlags); + npcFlags |= sGameEventMgr->GetNPCFlag(this); + + SetNpcFlags(NPCFlags(npcFlags & 0xFFFFFFFF)); + SetNpcFlags2(NPCFlags2(npcFlags >> 32)); - SetUInt32Value(UNIT_FIELD_FLAGS, unitFlags); - SetUInt32Value(UNIT_FIELD_FLAGS_2, unitFlags2); - SetUInt32Value(UNIT_FIELD_FLAGS_3, unitFlags3); + SetUnitFlags(UnitFlags(unitFlags)); + SetUnitFlags2(UnitFlags2(unitFlags2)); + SetUnitFlags3(UnitFlags3(unitFlags3)); - SetUInt32Value(OBJECT_DYNAMIC_FLAGS, dynamicFlags); + SetDynamicFlags(dynamicFlags); - SetUInt32Value(UNIT_FIELD_STATE_ANIM_ID, sAnimationDataStore.GetNumRows()); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::StateAnimID), sAnimationDataStore.GetNumRows()); - RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); + RemoveUnitFlag(UNIT_FLAG_IN_COMBAT); SetBaseAttackTime(BASE_ATTACK, cInfo->BaseAttackTime); SetBaseAttackTime(OFF_ATTACK, cInfo->BaseAttackTime); @@ -478,7 +477,7 @@ bool Creature::UpdateEntry(uint32 entry, CreatureData const* data /*= nullptr*/, // trigger creature is always not selectable and can not be attacked if (IsTrigger()) - SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); InitializeReactState(); @@ -566,7 +565,7 @@ void Creature::Update(uint32 diff) else if (m_corpseRemoveTime <= time(NULL)) { RemoveCorpse(false); - TC_LOG_DEBUG("entities.unit", "Removing corpse... %u ", GetUInt32Value(OBJECT_FIELD_ENTRY)); + TC_LOG_DEBUG("entities.unit", "Removing corpse... %u ", GetEntry()); } break; } @@ -681,7 +680,7 @@ void Creature::Update(uint32 diff) if (!IsInEvadeMode() && (!bInCombat || IsPolymorphed() || CanNotReachTarget())) // regenerate health if not in combat or if polymorphed RegenerateHealth(); - if (HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_REGENERATE_POWER)) + if (HasUnitFlag2(UNIT_FLAG2_REGENERATE_POWER)) { if (GetPowerType() == POWER_ENERGY) Regenerate(POWER_ENERGY); @@ -920,7 +919,7 @@ bool Creature::Create(ObjectGuid::LowType guidlow, Map* map, uint32 entry, float //! Need to be called after LoadCreaturesAddon - MOVEMENTFLAG_HOVER is set there if (HasUnitMovementFlag(MOVEMENTFLAG_HOVER)) { - z += GetFloatValue(UNIT_FIELD_HOVERHEIGHT); + z += m_unitData->HoverHeight; //! Relocate again with updated Z coord Relocate(x, y, z, ang); @@ -932,7 +931,7 @@ bool Creature::Create(ObjectGuid::LowType guidlow, Map* map, uint32 entry, float { SetDisplayId(display.CreatureDisplayID, display.DisplayScale); SetNativeDisplayId(display.CreatureDisplayID, display.DisplayScale); - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, minfo->gender); + SetGender(minfo->gender); } LastUsedScriptID = GetScriptId(); @@ -1066,7 +1065,7 @@ void Creature::SetLootRecipient(Unit* unit) { m_lootRecipient.Clear(); m_lootRecipientGroup.Clear(); - RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE | UNIT_DYNFLAG_TAPPED); + RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE | UNIT_DYNFLAG_TAPPED); return; } @@ -1081,7 +1080,7 @@ void Creature::SetLootRecipient(Unit* unit) if (Group* group = player->GetGroup()) m_lootRecipientGroup = group->GetGUID(); - SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_TAPPED); + AddDynamicFlag(UNIT_DYNFLAG_TAPPED); } // return true if this creature is tapped by the player or by a member of his group. @@ -1121,11 +1120,11 @@ void Creature::SaveToDB(uint32 mapid, std::vector<Difficulty> const& spawnDiffic CreatureData& data = sObjectMgr->NewOrExistCreatureData(m_spawnId); uint32 displayId = GetNativeDisplayId(); - uint64 npcflag = GetUInt64Value(UNIT_NPC_FLAGS); - uint32 unitFlags = GetUInt32Value(UNIT_FIELD_FLAGS); - uint32 unitFlags2 = GetUInt32Value(UNIT_FIELD_FLAGS_2); - uint32 unitFlags3 = GetUInt32Value(UNIT_FIELD_FLAGS_3); - uint32 dynamicflags = GetUInt32Value(OBJECT_DYNAMIC_FLAGS); + uint64 npcflag = (uint64(m_unitData->NpcFlags[1]) << 32) | m_unitData->NpcFlags[0]; + uint32 unitFlags = m_unitData->Flags; + uint32 unitFlags2 = m_unitData->Flags2; + uint32 unitFlags3 = m_unitData->Flags3; + uint32 dynamicflags = m_objectData->DynamicFlags; // check if it's a custom model and if not, use 0 for displayId CreatureTemplate const* cinfo = GetCreatureTemplate(); @@ -1240,14 +1239,14 @@ void Creature::SelectLevel() if (HasScalableLevels()) { - SetUInt32Value(UNIT_FIELD_SCALING_LEVEL_MIN, cInfo->levelScaling->MinLevel); - SetUInt32Value(UNIT_FIELD_SCALING_LEVEL_MAX, cInfo->levelScaling->MaxLevel); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ScalingLevelMin), cInfo->levelScaling->MinLevel); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ScalingLevelMax), cInfo->levelScaling->MaxLevel); int8 mindelta = std::min(cInfo->levelScaling->DeltaLevelMax, cInfo->levelScaling->DeltaLevelMin); int8 maxdelta = std::max(cInfo->levelScaling->DeltaLevelMax, cInfo->levelScaling->DeltaLevelMin); int8 delta = mindelta == maxdelta ? mindelta : irand(mindelta, maxdelta); - SetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA, delta); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ScalingLevelDelta), delta); } UpdateLevelDependantStats(); @@ -1632,9 +1631,9 @@ bool Creature::CanStartAttack(Unit const* who, bool force) const return false; // This set of checks is should be done only for creatures - if ((HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC) && who->GetTypeId() != TYPEID_PLAYER) // flag is valid only for non player characters - || (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC) && who->GetTypeId() == TYPEID_PLAYER) // immune to PC and target is a player, return false - || (who->GetOwner() && who->GetOwner()->GetTypeId() == TYPEID_PLAYER && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC))) // player pets are immune to pc as well + if ((HasUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC) && who->GetTypeId() != TYPEID_PLAYER) // flag is valid only for non player characters + || (HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC) && who->GetTypeId() == TYPEID_PLAYER) // immune to PC and target is a player, return false + || (who->GetOwner() && who->GetOwner()->GetTypeId() == TYPEID_PLAYER && HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC))) // player pets are immune to pc as well return false; // Do not attack non-combat pets @@ -1749,9 +1748,10 @@ void Creature::setDeathState(DeathState s) DoNotReacquireTarget(); // cancel delayed re-target SetTarget(ObjectGuid::Empty); // drop target - dead mobs shouldn't ever target things - SetUInt64Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); + SetNpcFlags(UNIT_NPC_FLAG_NONE); + SetNpcFlags2(UNIT_NPC_FLAG_2_NONE); - SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0); // if creature is mounted on a virtual mount, remove it at death + SetMountDisplayId(0); // if creature is mounted on a virtual mount, remove it at death setActive(false); @@ -1795,16 +1795,17 @@ void Creature::setDeathState(DeathState s) ObjectMgr::ChooseCreatureFlags(cInfo, npcFlags, unitFlags, unitFlags2, unitFlags3, dynamicFlags, creatureData); if (cInfo->flags_extra & CREATURE_FLAG_EXTRA_WORLDEVENT) - SetUInt64Value(UNIT_NPC_FLAGS, npcFlags | sGameEventMgr->GetNPCFlag(this)); - else - SetUInt64Value(UNIT_NPC_FLAGS, npcFlags); + npcFlags |= sGameEventMgr->GetNPCFlag(this); + + SetNpcFlags(NPCFlags(npcFlags & 0xFFFFFFFF)); + SetNpcFlags2(NPCFlags2(npcFlags >> 32)); - SetUInt32Value(UNIT_FIELD_FLAGS, unitFlags); - SetUInt32Value(UNIT_FIELD_FLAGS_2, unitFlags2); - SetUInt32Value(UNIT_FIELD_FLAGS_3, unitFlags3); - SetUInt32Value(OBJECT_DYNAMIC_FLAGS, dynamicFlags); + SetUnitFlags(UnitFlags(unitFlags)); + SetUnitFlags2(UnitFlags2(unitFlags2)); + SetUnitFlags3(UnitFlags3(unitFlags3)); + SetDynamicFlags(dynamicFlags); - RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); + RemoveUnitFlag(UNIT_FLAG_IN_COMBAT); SetMeleeDamageSchool(SpellSchools(cInfo->dmgschool)); } @@ -1852,7 +1853,7 @@ void Creature::Respawn(bool force) { SetDisplayId(display.CreatureDisplayID, display.DisplayScale); SetNativeDisplayId(display.CreatureDisplayID, display.DisplayScale); - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, minfo->gender); + SetGender(minfo->gender); } GetMotionMaster()->InitDefault(); @@ -2020,9 +2021,9 @@ SpellInfo const* Creature::reachWithSpellAttack(Unit* victim) float dist = GetDistance(victim); if (dist > range || dist < minrange) continue; - if (spellInfo->PreventionType & SPELL_PREVENTION_TYPE_SILENCE && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SILENCED)) + if (spellInfo->PreventionType & SPELL_PREVENTION_TYPE_SILENCE && HasUnitFlag(UNIT_FLAG_SILENCED)) continue; - if (spellInfo->PreventionType & SPELL_PREVENTION_TYPE_PACIFY && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED)) + if (spellInfo->PreventionType & SPELL_PREVENTION_TYPE_PACIFY && HasUnitFlag(UNIT_FLAG_PACIFIED)) continue; return spellInfo; } @@ -2070,9 +2071,9 @@ SpellInfo const* Creature::reachWithSpellCure(Unit* victim) // continue; if (dist > range || dist < minrange) continue; - if (spellInfo->PreventionType & SPELL_PREVENTION_TYPE_SILENCE && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SILENCED)) + if (spellInfo->PreventionType & SPELL_PREVENTION_TYPE_SILENCE && HasUnitFlag(UNIT_FLAG_SILENCED)) continue; - if (spellInfo->PreventionType & SPELL_PREVENTION_TYPE_PACIFY && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED)) + if (spellInfo->PreventionType & SPELL_PREVENTION_TYPE_PACIFY && HasUnitFlag(UNIT_FLAG_PACIFIED)) continue; return spellInfo; } @@ -2188,7 +2189,7 @@ bool Creature::CanAssistTo(const Unit* u, const Unit* enemy, bool checkfaction / if (IsCivilian()) return false; - if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC)) + if (HasUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC))) return false; // skip fighting creature @@ -2233,7 +2234,7 @@ bool Creature::_IsTargetAcceptable(const Unit* target) const if (target->HasUnitState(UNIT_STATE_DIED)) { // guards can detect fake death - if (IsGuard() && target->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH)) + if (IsGuard() && target->HasUnitFlag2(UNIT_FLAG2_FEIGN_DEATH)) return true; else return false; @@ -2323,18 +2324,16 @@ bool Creature::LoadCreaturesAddon() // 2 StandFlags // 3 StandMiscFlags - SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_STAND_STATE, uint8(cainfo->bytes1 & 0xFF)); - //SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_PET_TALENTS, uint8((cainfo->bytes1 >> 8) & 0xFF)); - SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_PET_TALENTS, 0); - SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_VIS_FLAG, uint8((cainfo->bytes1 >> 16) & 0xFF)); - SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, uint8((cainfo->bytes1 >> 24) & 0xFF)); + SetStandState(UnitStandStateType(cainfo->bytes1 & 0xFF)); + SetVisFlags(UnitVisFlags((cainfo->bytes1 >> 16) & 0xFF)); + SetAnimTier(UnitBytes1_Flags((cainfo->bytes1 >> 24) & 0xFF), false); //! Suspected correlation between UNIT_FIELD_BYTES_1, offset 3, value 0x2: //! If no inhabittype_fly (if no MovementFlag_DisableGravity or MovementFlag_CanFly flag found in sniffs) //! Check using InhabitType as movement flags are assigned dynamically //! basing on whether the creature is in air or not //! Set MovementFlag_Hover. Otherwise do nothing. - if (GetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER) & UNIT_BYTE1_FLAG_HOVER && !(GetCreatureTemplate()->InhabitType & INHABIT_AIR)) + if (m_unitData->AnimTier & UNIT_BYTE1_FLAG_HOVER && !(GetCreatureTemplate()->InhabitType & INHABIT_AIR)) AddUnitMovementFlag(MOVEMENTFLAG_HOVER); } @@ -2345,16 +2344,14 @@ bool Creature::LoadCreaturesAddon() // 2 PetFlags Pet only, so always 0 for default creature // 3 ShapeshiftForm Must be determined/set by shapeshift spell/aura - SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_SHEATH_STATE, uint8(cainfo->bytes2 & 0xFF)); - //SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, uint8((cainfo->bytes2 >> 8) & 0xFF)); - //SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PET_FLAGS, uint8((cainfo->bytes2 >> 16) & 0xFF)); - SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PET_FLAGS, 0); - //SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_SHAPESHIFT_FORM, uint8((cainfo->bytes2 >> 24) & 0xFF)); - SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_SHAPESHIFT_FORM, 0); + SetSheath(SheathState(cainfo->bytes2 & 0xFF)); + SetPvpFlags(UNIT_BYTE2_FLAG_NONE); + SetPetFlags(UNIT_PET_FLAG_NONE); + SetShapeshiftForm(FORM_NONE); } if (cainfo->emote != 0) - SetUInt32Value(UNIT_NPC_EMOTESTATE, cainfo->emote); + SetEmoteState(Emote(cainfo->emote)); SetAIAnimKitId(cainfo->aiAnimKit); SetMovementAnimKitId(cainfo->movementAnimKit); @@ -2487,7 +2484,7 @@ void Creature::AllLootRemovedFromCorpse() { if (loot.loot_type != LOOT_SKINNING && !IsPet() && GetCreatureTemplate()->SkinLootId && hasLootRecipient()) if (LootTemplates_Skinning.HaveLootFor(GetCreatureTemplate()->SkinLootId)) - SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); + AddUnitFlag(UNIT_FLAG_SKINNABLE); time_t now = time(NULL); // Do not reset corpse remove time if corpse is already removed @@ -2578,12 +2575,12 @@ uint8 Creature::GetLevelForTarget(WorldObject const* target) const // between UNIT_FIELD_SCALING_LEVEL_MIN and UNIT_FIELD_SCALING_LEVEL_MAX if (HasScalableLevels()) { - uint8 targetLevelWithDelta = unitTarget->getLevel() + GetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA); + uint8 targetLevelWithDelta = unitTarget->getLevel() + m_unitData->ScalingLevelDelta; if (target->IsPlayer()) - targetLevelWithDelta += target->GetUInt32Value(ACTIVE_PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA); + targetLevelWithDelta += target->ToPlayer()->m_activePlayerData->ScalingPlayerLevelDelta; - return RoundToInterval<uint8>(targetLevelWithDelta, GetUInt32Value(UNIT_FIELD_SCALING_LEVEL_MIN), GetUInt32Value(UNIT_FIELD_SCALING_LEVEL_MAX)); + return RoundToInterval<uint8>(targetLevelWithDelta, m_unitData->ScalingLevelMin, m_unitData->ScalingLevelMax); } } @@ -2854,8 +2851,8 @@ void Creature::SetObjectScale(float scale) if (CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelInfo(GetDisplayId())) { - SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, (IsPet() ? 1.0f : minfo->bounding_radius) * scale); - SetFloatValue(UNIT_FIELD_COMBATREACH, (IsPet() ? DEFAULT_COMBAT_REACH : minfo->combat_reach) * scale); + SetBoundingRadius((IsPet() ? 1.0f : minfo->bounding_radius) * scale); + SetCombatReach((IsPet() ? DEFAULT_COMBAT_REACH : minfo->combat_reach) * scale); } } @@ -2865,8 +2862,8 @@ void Creature::SetDisplayId(uint32 modelId, float displayScale /*= 1.f*/) if (CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelInfo(modelId)) { - SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, (IsPet() ? 1.0f : minfo->bounding_radius) * GetObjectScale()); - SetFloatValue(UNIT_FIELD_COMBATREACH, (IsPet() ? DEFAULT_COMBAT_REACH : minfo->combat_reach) * GetObjectScale()); + SetBoundingRadius((IsPet() ? 1.0f : minfo->bounding_radius) * GetObjectScale()); + SetCombatReach((IsPet() ? DEFAULT_COMBAT_REACH : minfo->combat_reach) * GetObjectScale()); } } @@ -2881,7 +2878,7 @@ void Creature::SetTarget(ObjectGuid const& guid) if (IsFocusing(nullptr, true)) m_suppressedTarget = guid; else - SetGuidValue(UNIT_FIELD_TARGET, guid); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Target), guid); } void Creature::FocusTarget(Spell const* focusSpell, WorldObject const* target) @@ -2900,7 +2897,7 @@ void Creature::FocusTarget(Spell const* focusSpell, WorldObject const* target) // store pre-cast values for target and orientation (used to later restore) if (!IsFocusing(nullptr, true)) { // only overwrite these fields if we aren't transitioning from one spell focus to another - m_suppressedTarget = GetGuidValue(UNIT_FIELD_TARGET); + m_suppressedTarget = GetTarget(); m_suppressedOrientation = GetOrientation(); } @@ -2908,9 +2905,9 @@ void Creature::FocusTarget(Spell const* focusSpell, WorldObject const* target) // set target, then force send update packet to players if it changed to provide appropriate facing ObjectGuid newTarget = target ? target->GetGUID() : ObjectGuid::Empty; - if (GetGuidValue(UNIT_FIELD_TARGET) != newTarget) + if (GetTarget() != newTarget) { - SetGuidValue(UNIT_FIELD_TARGET, newTarget); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Target), newTarget); if ( // here we determine if the (relatively expensive) forced update is worth it, or whether we can afford to wait until the scheduled update tick ( // only require instant update for spells that actually have a visual @@ -2980,7 +2977,7 @@ void Creature::ReleaseFocus(Spell const* focusSpell, bool withDelay) if (IsPet()) // player pets do not use delay system { - SetGuidValue(UNIT_FIELD_TARGET, m_suppressedTarget); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Target), m_suppressedTarget); if (!m_suppressedTarget.IsEmpty()) { if (WorldObject const* objTarget = ObjectAccessor::GetWorldObject(*this, m_suppressedTarget)) diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.cpp b/src/server/game/Entities/DynamicObject/DynamicObject.cpp index 2ba13daf39b..5947680d131 100644 --- a/src/server/game/Entities/DynamicObject/DynamicObject.cpp +++ b/src/server/game/Entities/DynamicObject/DynamicObject.cpp @@ -33,15 +33,12 @@ #include "World.h" DynamicObject::DynamicObject(bool isWorldObject) : WorldObject(isWorldObject), - _aura(NULL), _removedAura(NULL), _caster(NULL), _duration(0), _spellXSpellVisualId(0), _isViewpoint(false) + _aura(NULL), _removedAura(NULL), _caster(NULL), _duration(0), _isViewpoint(false) { m_objectType |= TYPEMASK_DYNAMICOBJECT; m_objectTypeId = TYPEID_DYNAMICOBJECT; m_updateFlag.Stationary = true; - - m_valuesCount = DYNAMICOBJECT_END; - _dynamicValuesCount = DYNAMICOBJECT_DYNAMIC_END; } DynamicObject::~DynamicObject() @@ -87,7 +84,6 @@ void DynamicObject::RemoveFromWorld() bool DynamicObject::CreateDynamicObject(ObjectGuid::LowType guidlow, Unit* caster, SpellInfo const* spell, Position const& pos, float radius, DynamicObjectType type, uint32 spellXSpellVisualId) { - _spellXSpellVisualId = spellXSpellVisualId; SetMap(caster->GetMap()); Relocate(pos); if (!IsPositionValid()) @@ -101,12 +97,13 @@ bool DynamicObject::CreateDynamicObject(ObjectGuid::LowType guidlow, Unit* caste SetEntry(spell->Id); SetObjectScale(1.0f); - SetGuidValue(DYNAMICOBJECT_CASTER, caster->GetGUID()); - SetUInt32Value(DYNAMICOBJECT_TYPE, type); - SetUInt32Value(DYNAMICOBJECT_SPELL_X_SPELL_VISUAL_ID, spellXSpellVisualId); - SetUInt32Value(DYNAMICOBJECT_SPELLID, spell->Id); - SetFloatValue(DYNAMICOBJECT_RADIUS, radius); - SetUInt32Value(DYNAMICOBJECT_CASTTIME, getMSTime()); + auto dynamicObjectData = m_values.ModifyValue(&DynamicObject::m_dynamicObjectData); + SetUpdateFieldValue(dynamicObjectData.ModifyValue(&UF::DynamicObjectData::Caster), caster->GetGUID()); + SetUpdateFieldValue(dynamicObjectData.ModifyValue(&UF::DynamicObjectData::Type), type); + SetUpdateFieldValue(dynamicObjectData.ModifyValue(&UF::DynamicObjectData::SpellXSpellVisualID), spellXSpellVisualId); + SetUpdateFieldValue(dynamicObjectData.ModifyValue(&UF::DynamicObjectData::SpellID), spell->Id); + SetUpdateFieldValue(dynamicObjectData.ModifyValue(&UF::DynamicObjectData::Radius), radius); + SetUpdateFieldValue(dynamicObjectData.ModifyValue(&UF::DynamicObjectData::CastTime), getMSTime()); if (IsWorldObject()) setActive(true); //must before add to map to be put in world container @@ -248,3 +245,36 @@ SpellInfo const* DynamicObject::GetSpellInfo() const { return sSpellMgr->GetSpellInfo(GetSpellId()); } + +void DynamicObject::BuildValuesCreate(ByteBuffer* data, Player const* target) const +{ + UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); + std::size_t sizePos = data->wpos(); + *data << uint32(0); + *data << uint8(flags); + m_objectData->WriteCreate(*data, flags, this, target); + m_dynamicObjectData->WriteCreate(*data, flags, this, target); + data->put<uint32>(sizePos, data->wpos() - sizePos - 4); +} + +void DynamicObject::BuildValuesUpdate(ByteBuffer* data, Player const* target) const +{ + UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); + std::size_t sizePos = data->wpos(); + *data << uint32(0); + *data << uint32(m_values.GetChangedObjectTypeMask()); + + if (m_values.HasChanged(TYPEID_OBJECT)) + m_objectData->WriteUpdate(*data, flags, this, target); + + if (m_values.HasChanged(TYPEID_DYNAMICOBJECT)) + m_dynamicObjectData->WriteUpdate(*data, flags, this, target); + + data->put<uint32>(sizePos, data->wpos() - sizePos - 4); +} + +void DynamicObject::ClearUpdateMask(bool remove) +{ + m_values.ClearChangesMask(&DynamicObject::m_dynamicObjectData); + Object::ClearUpdateMask(remove); +} diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.h b/src/server/game/Entities/DynamicObject/DynamicObject.h index 31ab2c0fa8b..269b414272c 100644 --- a/src/server/game/Entities/DynamicObject/DynamicObject.h +++ b/src/server/game/Entities/DynamicObject/DynamicObject.h @@ -39,6 +39,10 @@ class TC_GAME_API DynamicObject : public WorldObject, public GridObject<DynamicO DynamicObject(bool isWorldObject); ~DynamicObject(); + void BuildValuesCreate(ByteBuffer* data, Player const* target) const override; + void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override; + void ClearUpdateMask(bool remove) override; + void AddToWorld() override; void RemoveFromWorld() override; @@ -55,17 +59,18 @@ class TC_GAME_API DynamicObject : public WorldObject, public GridObject<DynamicO Unit* GetCaster() const { return _caster; } void BindToCaster(); void UnbindFromCaster(); - uint32 GetSpellId() const { return GetUInt32Value(DYNAMICOBJECT_SPELLID); } + uint32 GetSpellId() const { return m_dynamicObjectData->SpellID; } SpellInfo const* GetSpellInfo() const; - ObjectGuid GetCasterGUID() const { return GetGuidValue(DYNAMICOBJECT_CASTER); } - float GetRadius() const { return GetFloatValue(DYNAMICOBJECT_RADIUS); } + ObjectGuid GetCasterGUID() const { return m_dynamicObjectData->Caster; } + float GetRadius() const { return m_dynamicObjectData->Radius; } + + UF::UpdateField<UF::DynamicObjectData, 0, TYPEID_DYNAMICOBJECT> m_dynamicObjectData; protected: Aura* _aura; Aura* _removedAura; Unit* _caster; int32 _duration; // for non-aura dynobjects - uint32 _spellXSpellVisualId; bool _isViewpoint; }; #endif diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 7f07e5f2930..7a9f826e885 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -40,7 +40,6 @@ #include "ScriptMgr.h" #include "SpellMgr.h" #include "Transport.h" -#include "UpdateFieldFlags.h" #include "World.h" #include <G3D/Quat.h> @@ -64,8 +63,6 @@ GameObject::GameObject() : WorldObject(false), MapObject(), m_updateFlag.Stationary = true; m_updateFlag.Rotation = true; - m_valuesCount = GAMEOBJECT_END; - _dynamicValuesCount = GAMEOBJECT_DYNAMIC_END; m_respawnTime = 0; m_respawnDelayTime = 300; m_lootState = GO_NOT_READY; @@ -128,8 +125,7 @@ void GameObject::CleanupsBeforeDelete(bool finalCleanup) { WorldObject::CleanupsBeforeDelete(finalCleanup); - if (m_uint32Values) // field array can be not exist if GameOBject not loaded - RemoveFromOwner(); + RemoveFromOwner(); } void GameObject::RemoveFromOwner() @@ -267,8 +263,8 @@ bool GameObject::Create(uint32 entry, Map* map, Position const& pos, QuaternionD if (m_goTemplateAddon) { - SetUInt32Value(GAMEOBJECT_FACTION, m_goTemplateAddon->faction); - SetUInt32Value(GAMEOBJECT_FLAGS, m_goTemplateAddon->flags); + SetFaction(m_goTemplateAddon->faction); + SetFlags(GameObjectFlags(m_goTemplateAddon->flags)); if (m_goTemplateAddon->WorldEffectID) { @@ -286,14 +282,14 @@ bool GameObject::Create(uint32 entry, Map* map, Position const& pos, QuaternionD m_model = CreateModel(); if (m_model && m_model->isMapObject()) - SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_MAP_OBJECT); + AddFlag(GO_FLAG_MAP_OBJECT); // GAMEOBJECT_BYTES_1, index at 0, 1, 2 and 3 SetGoType(GameobjectTypes(goInfo->type)); m_prevGoState = goState; SetGoState(goState); SetGoArtKit(artKit); - SetUInt32Value(GAMEOBJECT_STATE_ANIM_ID, sAnimationDataStore.GetNumRows()); + SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::SpawnTrackingStateAnimID), sAnimationDataStore.GetNumRows()); switch (goInfo->type) { @@ -302,12 +298,17 @@ bool GameObject::Create(uint32 entry, Map* map, Position const& pos, QuaternionD m_goValue.FishingHole.MaxOpens = urand(GetGOInfo()->fishingHole.minRestock, GetGOInfo()->fishingHole.maxRestock); break; case GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING: + { // TODO: Get the values somehow, no longer in gameobject_template m_goValue.Building.Health = 20000/*goinfo->destructibleBuilding.intactNumHits + goinfo->destructibleBuilding.damagedNumHits*/; m_goValue.Building.MaxHealth = m_goValue.Building.Health; SetGoAnimProgress(255); - SetUInt32Value(GAMEOBJECT_PARENTROTATION, m_goInfo->destructibleBuilding.DestructibleModelRec); + // yes, even after the updatefield rewrite this garbage hack is still in client + QuaternionData reinterpretId; + memcpy(&reinterpretId.x, &m_goInfo->destructibleBuilding.DestructibleModelRec, sizeof(float)); + SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::ParentRotation), reinterpretId); break; + } case GAMEOBJECT_TYPE_TRANSPORT: { m_goValue.Transport.AnimationInfo = sTransportMgr->GetTransportAnimInfo(goInfo->entry); @@ -344,7 +345,7 @@ bool GameObject::Create(uint32 entry, Map* map, Position const& pos, QuaternionD break; } case GAMEOBJECT_TYPE_FISHINGNODE: - SetUInt32Value(GAMEOBJECT_LEVEL, 1); + SetLevel(1); SetGoAnimProgress(255); break; case GAMEOBJECT_TYPE_TRAP: @@ -361,10 +362,11 @@ bool GameObject::Create(uint32 entry, Map* map, Position const& pos, QuaternionD } break; case GAMEOBJECT_TYPE_PHASEABLE_MO: - SetByteValue(GAMEOBJECT_FLAGS, 1, m_goInfo->phaseableMO.AreaNameSet & 0xF); + RemoveFlag(GameObjectFlags(0xF00)); + AddFlag(GameObjectFlags((m_goInfo->phaseableMO.AreaNameSet & 0xF) << 8)); break; case GAMEOBJECT_TYPE_CAPTURE_POINT: - SetUInt32Value(GAMEOBJECT_SPELL_VISUAL_ID, m_goInfo->capturePoint.SpellVisual1); + SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::SpellVisualID), m_goInfo->capturePoint.SpellVisual1); break; default: SetGoAnimProgress(animProgress); @@ -511,8 +513,8 @@ void GameObject::Update(uint32 diff) uint32 visualStateAfter = (m_goValue.Transport.StateUpdateTimer / 20000) & 1; if (visualStateBefore != visualStateAfter) { - ForceValuesUpdateAtIndex(GAMEOBJECT_LEVEL); - ForceValuesUpdateAtIndex(GAMEOBJECT_BYTES_1); + ForceUpdateFieldChange(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::Level)); + ForceUpdateFieldChange(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::State)); } } } @@ -528,7 +530,7 @@ void GameObject::Update(uint32 diff) if (caster && caster->GetTypeId() == TYPEID_PLAYER) { SetGoState(GO_STATE_ACTIVE); - SetUInt32Value(GAMEOBJECT_FLAGS, GO_FLAG_NODESPAWN); + SetFlags(GO_FLAG_NODESPAWN); UpdateData udata(caster->GetMapId()); WorldPacket packet; @@ -700,7 +702,7 @@ void GameObject::Update(uint32 diff) case GAMEOBJECT_TYPE_GOOBER: if (m_cooldownTime < time(NULL)) { - RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE); + RemoveFlag(GO_FLAG_IN_USE); SetLootState(GO_JUST_DEACTIVATED); m_cooldownTime = 0; @@ -806,7 +808,7 @@ void GameObject::Update(uint32 diff) SendGameObjectDespawn(); //reset flags if (GameObjectTemplateAddon const* addon = GetTemplateAddon()) - SetUInt32Value(GAMEOBJECT_FLAGS, addon->flags); + SetFlags(GameObjectFlags(addon->flags)); } if (!m_respawnDelayTime) @@ -859,7 +861,7 @@ void GameObject::Delete() SetGoState(GO_STATE_READY); if (GameObjectTemplateAddon const* addon = GetTemplateAddon()) - SetUInt32Value(GAMEOBJECT_FLAGS, addon->flags); + SetFlags(GameObjectFlags(addon->flags)); uint32 poolid = GetSpawnId() ? sPoolMgr->IsPartOfAPool<GameObject>(GetSpawnId()) : 0; if (poolid) @@ -1021,7 +1023,7 @@ bool GameObject::LoadGameObjectFromDB(ObjectGuid::LowType spawnId, Map* map, boo if (!GetGOInfo()->GetDespawnPossibility() && !GetGOInfo()->IsDespawnAtAction()) { - SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NODESPAWN); + AddFlag(GO_FLAG_NODESPAWN); m_respawnDelayTime = 0; m_respawnTime = 0; } @@ -1145,7 +1147,7 @@ bool GameObject::IsNeverVisibleFor(WorldObject const* seer) const if (GetGoType() == GAMEOBJECT_TYPE_SPELL_FOCUS && GetGOInfo()->spellFocus.serverOnly == 1) return true; - if (!GetUInt32Value(GAMEOBJECT_DISPLAYID)) + if (!GetDisplayId()) return true; return false; @@ -1206,7 +1208,7 @@ void GameObject::Respawn() } } -bool GameObject::ActivateToQuest(Player* target) const +bool GameObject::ActivateToQuest(Player const* target) const { if (target->HasQuestForGO(GetEntry())) return true; @@ -1219,7 +1221,7 @@ bool GameObject::ActivateToQuest(Player* target) const case GAMEOBJECT_TYPE_QUESTGIVER: { GameObject* go = const_cast<GameObject*>(this); - QuestGiverStatus questStatus = target->GetQuestDialogStatus(go); + QuestGiverStatus questStatus = const_cast<Player*>(target)->GetQuestDialogStatus(go); if (questStatus > DIALOG_STATUS_UNAVAILABLE) return true; break; @@ -1282,7 +1284,7 @@ void GameObject::ResetDoorOrButton() if (m_lootState == GO_READY || m_lootState == GO_JUST_DEACTIVATED) return; - RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE); + RemoveFlag(GO_FLAG_IN_USE); SetGoState(m_prevGoState); SetLootState(GO_JUST_DEACTIVATED); @@ -1305,7 +1307,7 @@ void GameObject::UseDoorOrButton(uint32 time_to_restore, bool alternative /* = f void GameObject::SetGoArtKit(uint8 kit) { - SetByteValue(GAMEOBJECT_BYTES_1, 2, kit); + SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::ArtKit), kit); GameObjectData* data = const_cast<GameObjectData*>(sObjectMgr->GetGOData(m_spawnId)); if (data) data->artKit = kit; @@ -1329,9 +1331,9 @@ void GameObject::SetGoArtKit(uint8 artkit, GameObject* go, ObjectGuid::LowType l void GameObject::SwitchDoorOrButton(bool activate, bool alternative /* = false */) { if (activate) - SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE); + AddFlag(GO_FLAG_IN_USE); else - RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE); + RemoveFlag(GO_FLAG_IN_USE); if (GetGoState() == GO_STATE_READY) //if closed -> open SetGoState(alternative ? GO_STATE_ACTIVE_ALTERNATIVE : GO_STATE_ACTIVE); @@ -1526,7 +1528,7 @@ void GameObject::Use(Unit* user) if (uint32 trapEntry = info->goober.linkedTrap) TriggeringLinkedGameObject(trapEntry, user); - SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE); + AddFlag(GO_FLAG_IN_USE); SetLootState(GO_ACTIVATED, user); // this appear to be ok, however others exist in addition to this that should have custom (ex: 190510, 188692, 187389) @@ -2016,15 +2018,15 @@ void GameObject::CastSpell(Unit* target, uint32 spellId, TriggerCastFlags trigge return; // remove immunity flags, to allow spell to target anything - trigger->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC); + trigger->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC)); if (Unit* owner = GetOwner()) { trigger->setFaction(owner->getFaction()); - if (owner->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE)) - trigger->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); + if (owner->HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE)) + trigger->AddUnitFlag(UNIT_FLAG_PVP_ATTACKABLE); // copy pvp state flags from owner - trigger->SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, owner->GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG)); + trigger->SetPvpFlags(owner->GetPvpFlags()); // needed for GO casts for proper target validation checks trigger->SetOwnerGUID(owner->GetGUID()); trigger->CastSpell(target ? target : trigger, spellInfo, triggered, nullptr, nullptr, owner->GetGUID()); @@ -2138,10 +2140,7 @@ void GameObject::SetWorldRotation(float qx, float qy, float qz, float qw) void GameObject::SetParentRotation(QuaternionData const& rotation) { - SetFloatValue(GAMEOBJECT_PARENTROTATION + 0, rotation.x); - SetFloatValue(GAMEOBJECT_PARENTROTATION + 1, rotation.y); - SetFloatValue(GAMEOBJECT_PARENTROTATION + 2, rotation.z); - SetFloatValue(GAMEOBJECT_PARENTROTATION + 3, rotation.w); + SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::ParentRotation), rotation); } void GameObject::SetWorldRotationAngles(float z_rot, float y_rot, float x_rot) @@ -2207,7 +2206,7 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player* switch (state) { case GO_DESTRUCTIBLE_INTACT: - RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED | GO_FLAG_DESTROYED); + RemoveFlag(GameObjectFlags(GO_FLAG_DAMAGED | GO_FLAG_DESTROYED)); SetDisplayId(m_goInfo->displayId); if (setHealth) { @@ -2221,8 +2220,8 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player* EventInform(m_goInfo->destructibleBuilding.DamagedEvent, eventInvoker); sScriptMgr->OnGameObjectDamaged(this, eventInvoker); - RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED); - SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED); + RemoveFlag(GO_FLAG_DESTROYED); + AddFlag(GO_FLAG_DAMAGED); uint32 modelId = m_goInfo->displayId; if (DestructibleModelDataEntry const* modelData = sDestructibleModelDataStore.LookupEntry(m_goInfo->destructibleBuilding.DestructibleModelRec)) @@ -2249,8 +2248,8 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player* if (Battleground* bg = eventInvoker->GetBattleground()) bg->DestroyGate(eventInvoker, this); - RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED); - SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED); + RemoveFlag(GO_FLAG_DAMAGED); + AddFlag(GO_FLAG_DESTROYED); uint32 modelId = m_goInfo->displayId; if (DestructibleModelDataEntry const* modelData = sDestructibleModelDataStore.LookupEntry(m_goInfo->destructibleBuilding.DestructibleModelRec)) @@ -2269,7 +2268,7 @@ void GameObject::SetDestructibleState(GameObjectDestructibleState state, Player* case GO_DESTRUCTIBLE_REBUILDING: { EventInform(m_goInfo->destructibleBuilding.RebuildingEvent, eventInvoker); - RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED | GO_FLAG_DESTROYED); + RemoveFlag(GameObjectFlags(GO_FLAG_DAMAGED | GO_FLAG_DESTROYED)); uint32 modelId = m_goInfo->displayId; if (DestructibleModelDataEntry const* modelData = sDestructibleModelDataStore.LookupEntry(m_goInfo->destructibleBuilding.DestructibleModelRec)) @@ -2316,7 +2315,7 @@ void GameObject::SetLootState(LootState state, Unit* unit) void GameObject::SetGoState(GOState state) { - SetByteValue(GAMEOBJECT_BYTES_1, 0, state); + SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::State), state); sScriptMgr->OnGameObjectStateChanged(this, state); if (m_model && !IsTransport()) { @@ -2367,7 +2366,7 @@ void GameObject::SetTransportState(GOState state, uint32 stopFrame /*= 0*/) void GameObject::SetDisplayId(uint32 displayid) { - SetUInt32Value(GAMEOBJECT_DISPLAYID, displayid); + SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::DisplayID), displayid); UpdateModel(); } @@ -2396,7 +2395,7 @@ uint8 GameObject::GetNameSetId() const case GAMEOBJECT_TYPE_GARRISON_BUILDING: case GAMEOBJECT_TYPE_GARRISON_PLOT: case GAMEOBJECT_TYPE_PHASEABLE_MO: - return GetByteValue(GAMEOBJECT_FLAGS, 1) & 0xF; + return ((*m_gameObjectData->Flags) >> 8) & 0xF; default: break; } @@ -2427,7 +2426,10 @@ void GameObject::UpdateModel() if (m_model) GetMap()->InsertGameObjectModel(*m_model); - ApplyModFlag(GAMEOBJECT_FLAGS, GO_FLAG_MAP_OBJECT, m_model && m_model->isMapObject()); + if (m_model && m_model->isMapObject()) + AddFlag(GO_FLAG_MAP_OBJECT); + else + RemoveFlag(GO_FLAG_MAP_OBJECT); } Player* GameObject::GetLootRecipient() const @@ -2493,106 +2495,37 @@ GameObject* GameObject::GetLinkedTrap() return ObjectAccessor::GetGameObject(*this, m_linkedTrap); } -void GameObject::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) const +void GameObject::BuildValuesCreate(ByteBuffer* data, Player const* target) const { - if (!target) - return; - - bool isStoppableTransport = GetGoType() == GAMEOBJECT_TYPE_TRANSPORT && !m_goValue.Transport.StopFrames->empty(); - bool forcedFlags = GetGoType() == GAMEOBJECT_TYPE_CHEST && GetGOInfo()->chest.usegrouplootrules && HasLootRecipient(); - bool targetIsGM = target->IsGameMaster(); + UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); + std::size_t sizePos = data->wpos(); + *data << uint32(0); + *data << uint8(flags); + m_objectData->WriteCreate(*data, flags, this, target); + m_gameObjectData->WriteCreate(*data, flags, this, target); + data->put<uint32>(sizePos, data->wpos() - sizePos - 4); +} - std::size_t blockCount = UpdateMask::GetBlockCount(m_valuesCount); +void GameObject::BuildValuesUpdate(ByteBuffer* data, Player const* target) const +{ + UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); + std::size_t sizePos = data->wpos(); + *data << uint32(0); + *data << uint32(m_values.GetChangedObjectTypeMask()); - uint32* flags = GameObjectUpdateFieldFlags; - uint32 visibleFlag = UF_FLAG_PUBLIC; - if (GetOwnerGUID() == target->GetGUID()) - visibleFlag |= UF_FLAG_OWNER; + if (m_values.HasChanged(TYPEID_OBJECT)) + m_objectData->WriteUpdate(*data, flags, this, target); - *data << uint8(blockCount); - std::size_t maskPos = data->wpos(); - data->resize(data->size() + blockCount * sizeof(UpdateMask::BlockType)); + if (m_values.HasChanged(TYPEID_GAMEOBJECT)) + m_gameObjectData->WriteUpdate(*data, flags, this, target); - for (uint16 index = 0; index < m_valuesCount; ++index) - { - if (_fieldNotifyFlags & flags[index] || - ((updateType == UPDATETYPE_VALUES ? _changesMask[index] : m_uint32Values[index]) && (flags[index] & visibleFlag)) || - (index == GAMEOBJECT_FLAGS && forcedFlags)) - { - UpdateMask::SetUpdateBit(data->contents() + maskPos, index); - - if (index == OBJECT_DYNAMIC_FLAGS) - { - uint16 dynFlags = 0; - int16 pathProgress = -1; - switch (GetGoType()) - { - case GAMEOBJECT_TYPE_QUESTGIVER: - if (ActivateToQuest(target)) - dynFlags |= GO_DYNFLAG_LO_ACTIVATE; - break; - case GAMEOBJECT_TYPE_CHEST: - case GAMEOBJECT_TYPE_GOOBER: - if (ActivateToQuest(target)) - dynFlags |= GO_DYNFLAG_LO_ACTIVATE | GO_DYNFLAG_LO_SPARKLE; - else if (targetIsGM) - dynFlags |= GO_DYNFLAG_LO_ACTIVATE; - break; - case GAMEOBJECT_TYPE_GENERIC: - if (ActivateToQuest(target)) - dynFlags |= GO_DYNFLAG_LO_SPARKLE; - break; - case GAMEOBJECT_TYPE_TRANSPORT: - case GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT: - { - if (uint32 transportPeriod = GetTransportPeriod()) - { - float timer = float(m_goValue.Transport.PathProgress % transportPeriod); - pathProgress = int16(timer / float(transportPeriod) * 65535.0f); - } - break; - } - default: - break; - } - - *data << uint16(dynFlags); - *data << int16(pathProgress); - } - else if (index == GAMEOBJECT_FLAGS) - { - uint32 goFlags = m_uint32Values[GAMEOBJECT_FLAGS]; - if (GetGoType() == GAMEOBJECT_TYPE_CHEST) - if (GetGOInfo()->chest.usegrouplootrules && !IsLootAllowedFor(target)) - goFlags |= GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE; - - *data << goFlags; - } - else if (index == GAMEOBJECT_LEVEL) - { - if (isStoppableTransport) - *data << uint32(m_goValue.Transport.PathProgress); - else - *data << m_uint32Values[index]; - } - else if (index == GAMEOBJECT_BYTES_1) - { - uint32 bytes1 = m_uint32Values[index]; - if (isStoppableTransport && GetGoState() == GO_STATE_TRANSPORT_ACTIVE) - { - if ((m_goValue.Transport.StateUpdateTimer / 20000) & 1) - { - bytes1 &= 0xFFFFFF00; - bytes1 |= GO_STATE_TRANSPORT_STOPPED; - } - } + data->put<uint32>(sizePos, data->wpos() - sizePos - 4); +} - *data << bytes1; - } - else - *data << m_uint32Values[index]; // other cases - } - } +void GameObject::ClearUpdateMask(bool remove) +{ + m_values.ClearChangesMask(&GameObject::m_gameObjectData); + Object::ClearUpdateMask(remove); } void GameObject::GetRespawnPosition(float &x, float &y, float &z, float* ori /* = nullptr*/) const diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index fc53bf4d03e..a22b637f07f 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -85,7 +85,9 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject> explicit GameObject(); ~GameObject(); - void BuildValuesUpdate(uint8 updatetype, ByteBuffer* data, Player* target) const override; + void BuildValuesCreate(ByteBuffer* data, Player const* target) const override; + void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override; + void ClearUpdateMask(bool remove) override; void AddToWorld() override; void RemoveFromWorld() override; @@ -134,9 +136,9 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject> ABORT(); } m_spawnedByDefault = false; // all object with owner is despawned after delay - SetGuidValue(GAMEOBJECT_FIELD_CREATED_BY, owner); + SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::CreatedBy), owner); } - ObjectGuid GetOwnerGUID() const { return GetGuidValue(GAMEOBJECT_FIELD_CREATED_BY); } + ObjectGuid GetOwnerGUID() const { return m_gameObjectData->CreatedBy; } Unit* GetOwner() const; void SetSpellId(uint32 id) @@ -176,16 +178,21 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject> void SendGameObjectDespawn(); void getFishLoot(Loot* loot, Player* loot_owner); void getFishLootJunk(Loot* loot, Player* loot_owner); - GameobjectTypes GetGoType() const { return GameobjectTypes(GetByteValue(GAMEOBJECT_BYTES_1, 1)); } - void SetGoType(GameobjectTypes type) { SetByteValue(GAMEOBJECT_BYTES_1, 1, type); } - GOState GetGoState() const { return GOState(GetByteValue(GAMEOBJECT_BYTES_1, 0)); } + bool HasFlag(GameObjectFlags flags) const { return (*m_gameObjectData->Flags & flags) != 0; } + void AddFlag(GameObjectFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::Flags), flags); } + void RemoveFlag(GameObjectFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::Flags), flags); } + void SetFlags(GameObjectFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::Flags), flags); } + void SetLevel(uint32 level) { SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::Level), level); } + GameobjectTypes GetGoType() const { return GameobjectTypes(*m_gameObjectData->TypeID); } + void SetGoType(GameobjectTypes type) { SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::TypeID), type); } + GOState GetGoState() const { return GOState(*m_gameObjectData->State); } void SetGoState(GOState state); virtual uint32 GetTransportPeriod() const; void SetTransportState(GOState state, uint32 stopFrame = 0); - uint8 GetGoArtKit() const { return GetByteValue(GAMEOBJECT_BYTES_1, 2); } + uint8 GetGoArtKit() const { return m_gameObjectData->ArtKit; } void SetGoArtKit(uint8 artkit); - uint8 GetGoAnimProgress() const { return GetByteValue(GAMEOBJECT_BYTES_1, 3); } - void SetGoAnimProgress(uint8 animprogress) { SetByteValue(GAMEOBJECT_BYTES_1, 3, animprogress); } + uint8 GetGoAnimProgress() const { return m_gameObjectData->PercentHealth; } + void SetGoAnimProgress(uint8 animprogress) { SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::PercentHealth), animprogress); } static void SetGoArtKit(uint8 artkit, GameObject* go, ObjectGuid::LowType lowguid = UI64LIT(0)); void EnableCollision(bool enable); @@ -233,7 +240,7 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject> bool hasQuest(uint32 quest_id) const override; bool hasInvolvedQuest(uint32 quest_id) const override; - bool ActivateToQuest(Player* target) const; + bool ActivateToQuest(Player const* target) const; void UseDoorOrButton(uint32 time_to_restore = 0, bool alternative = false, Unit* user = NULL); // 0 = use `gameobject`.`spawntimesecs` void ResetDoorOrButton(); @@ -258,9 +265,9 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject> void SetDestructibleState(GameObjectDestructibleState state, Player* eventInvoker = NULL, bool setHealth = false); GameObjectDestructibleState GetDestructibleState() const { - if (HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED)) + if ((*m_gameObjectData->Flags & GO_FLAG_DESTROYED)) return GO_DESTRUCTIBLE_DESTROYED; - if (HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_DAMAGED)) + if ((*m_gameObjectData->Flags & GO_FLAG_DAMAGED)) return GO_DESTRUCTIBLE_DAMAGED; return GO_DESTRUCTIBLE_INTACT; } @@ -272,11 +279,11 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject> std::string GetAIName() const; void SetDisplayId(uint32 displayid); - uint32 GetDisplayId() const { return GetUInt32Value(GAMEOBJECT_DISPLAYID); } + uint32 GetDisplayId() const { return m_gameObjectData->DisplayID; } uint8 GetNameSetId() const; - uint32 GetFaction() const { return GetUInt32Value(GAMEOBJECT_FACTION); } - void SetFaction(uint32 faction) { SetUInt32Value(GAMEOBJECT_FACTION, faction); } + uint32 GetFaction() const { return m_gameObjectData->FactionTemplate; } + void SetFaction(uint32 faction) { SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::FactionTemplate), faction); } GameObjectModel* m_model; void GetRespawnPosition(float &x, float &y, float &z, float* ori = NULL) const; @@ -303,6 +310,8 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject> void AIM_Destroy(); bool AIM_Initialize(); + UF::UpdateField<UF::GameObjectData, 0, TYPEID_GAMEOBJECT> m_gameObjectData; + protected: GameObjectModel* CreateModel(); void UpdateModel(); // updates model in case displayId were changed diff --git a/src/server/game/Entities/GameObject/GameObjectData.h b/src/server/game/Entities/GameObject/GameObjectData.h index 5944f07654a..9f4ff342a53 100644 --- a/src/server/game/Entities/GameObject/GameObjectData.h +++ b/src/server/game/Entities/GameObject/GameObjectData.h @@ -20,6 +20,7 @@ #include "Common.h" #include "DBCEnums.h" +#include "QuaternionData.h" #include "SharedDefines.h" #include <string> #include <vector> @@ -925,17 +926,6 @@ struct GameObjectLocale std::vector<std::string> Unk1; }; -struct TC_GAME_API QuaternionData -{ - float x, y, z, w; - - QuaternionData() : x(0.0f), y(0.0f), z(0.0f), w(1.0f) {} - QuaternionData(float X, float Y, float Z, float W) : x(X), y(Y), z(Z), w(W) {} - - bool isUnit() const; - static QuaternionData fromEulerAnglesZYX(float Z, float Y, float X); -}; - // `gameobject_addon` table struct GameObjectAddon { diff --git a/src/server/game/Entities/GameObject/QuaternionData.h b/src/server/game/Entities/GameObject/QuaternionData.h new file mode 100644 index 00000000000..aecbac48d93 --- /dev/null +++ b/src/server/game/Entities/GameObject/QuaternionData.h @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2008-2019 TrinityCore <https://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef QuaternionData_h__ +#define QuaternionData_h__ + +#include "Define.h" + +struct TC_GAME_API QuaternionData +{ + float x, y, z, w; + + QuaternionData() : x(0.0f), y(0.0f), z(0.0f), w(1.0f) + { + } + QuaternionData(float X, float Y, float Z, float W) : x(X), y(Y), z(Z), w(W) + { + } + + bool isUnit() const; + static QuaternionData fromEulerAnglesZYX(float Z, float Y, float X); + + friend bool operator==(QuaternionData const& left, QuaternionData const& right) + { + return left.x == right.x && left.y == right.y && left.z == right.z && left.w == right.w; + } + + friend bool operator!=(QuaternionData const& left, QuaternionData const& right) + { + return !(left == right); + } +}; + +#endif // QuaternionData_h__ diff --git a/src/server/game/Entities/Item/Container/Bag.cpp b/src/server/game/Entities/Item/Container/Bag.cpp index 5e0beca0019..5d2df6b0466 100644 --- a/src/server/game/Entities/Item/Container/Bag.cpp +++ b/src/server/game/Entities/Item/Container/Bag.cpp @@ -30,9 +30,6 @@ Bag::Bag(): Item() m_objectType |= TYPEMASK_CONTAINER; m_objectTypeId = TYPEID_CONTAINER; - m_valuesCount = CONTAINER_END; - _dynamicValuesCount = CONTAINER_DYNAMIC_END; - memset(m_bagslot, 0, sizeof(Item*) * MAX_BAG_SIZE); } @@ -86,21 +83,21 @@ bool Bag::Create(ObjectGuid::LowType guidlow, uint32 itemid, Player const* owner if (owner) { - SetGuidValue(ITEM_FIELD_OWNER, owner->GetGUID()); - SetGuidValue(ITEM_FIELD_CONTAINED, owner->GetGUID()); + SetOwnerGUID(owner->GetGUID()); + SetContainedIn(owner->GetGUID()); } - SetUInt32Value(ITEM_FIELD_MAXDURABILITY, itemProto->MaxDurability); - SetUInt32Value(ITEM_FIELD_DURABILITY, itemProto->MaxDurability); - SetUInt32Value(ITEM_FIELD_STACK_COUNT, 1); + SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::MaxDurability), itemProto->MaxDurability); + SetDurability(itemProto->MaxDurability); + SetCount(1); // Setting the number of Slots the Container has - SetUInt32Value(CONTAINER_FIELD_NUM_SLOTS, itemProto->GetContainerSlots()); + SetBagSize(itemProto->GetContainerSlots()); // Cleaning 20 slots for (uint8 i = 0; i < MAX_BAG_SIZE; ++i) { - SetGuidValue(CONTAINER_FIELD_SLOT_1 + (i * 4), ObjectGuid::Empty); + SetSlot(i, ObjectGuid::Empty); m_bagslot[i] = NULL; } @@ -118,11 +115,11 @@ bool Bag::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid owner_guid, Field* fie return false; ItemTemplate const* itemProto = GetTemplate(); // checked in Item::LoadFromDB - SetUInt32Value(CONTAINER_FIELD_NUM_SLOTS, itemProto->GetContainerSlots()); + SetBagSize(itemProto->GetContainerSlots()); // cleanup bag content related item value fields (its will be filled correctly from `character_inventory`) for (uint8 i = 0; i < MAX_BAG_SIZE; ++i) { - SetGuidValue(CONTAINER_FIELD_SLOT_1 + (i * 4), ObjectGuid::Empty); + SetSlot(i, ObjectGuid::Empty); delete m_bagslot[i]; m_bagslot[i] = NULL; } @@ -157,7 +154,7 @@ void Bag::RemoveItem(uint8 slot, bool /*update*/) m_bagslot[slot]->SetContainer(NULL); m_bagslot[slot] = NULL; - SetGuidValue(CONTAINER_FIELD_SLOT_1 + (slot * 4), ObjectGuid::Empty); + SetSlot(slot, ObjectGuid::Empty); } void Bag::StoreItem(uint8 slot, Item* pItem, bool /*update*/) @@ -167,9 +164,9 @@ void Bag::StoreItem(uint8 slot, Item* pItem, bool /*update*/) if (pItem && pItem->GetGUID() != this->GetGUID()) { m_bagslot[slot] = pItem; - SetGuidValue(CONTAINER_FIELD_SLOT_1 + (slot * 4), pItem->GetGUID()); - pItem->SetGuidValue(ITEM_FIELD_CONTAINED, GetGUID()); - pItem->SetGuidValue(ITEM_FIELD_OWNER, GetOwnerGUID()); + SetSlot(slot, pItem->GetGUID()); + pItem->SetContainedIn(GetGUID()); + pItem->SetOwnerGUID(GetOwnerGUID()); pItem->SetContainer(this); pItem->SetSlot(slot); } @@ -184,6 +181,43 @@ void Bag::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) cons m_bagslot[i]->BuildCreateUpdateBlockForPlayer(data, target); } +void Bag::BuildValuesCreate(ByteBuffer* data, Player const* target) const +{ + UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); + std::size_t sizePos = data->wpos(); + *data << uint32(0); + *data << uint8(flags); + m_objectData->WriteCreate(*data, flags, this, target); + m_itemData->WriteCreate(*data, flags, this, target); + m_containerData->WriteCreate(*data, flags, this, target); + data->put<uint32>(sizePos, data->wpos() - sizePos - 4); +} + +void Bag::BuildValuesUpdate(ByteBuffer* data, Player const* target) const +{ + UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); + std::size_t sizePos = data->wpos(); + *data << uint32(0); + *data << uint32(m_values.GetChangedObjectTypeMask()); + + if (m_values.HasChanged(TYPEID_OBJECT)) + m_objectData->WriteUpdate(*data, flags, this, target); + + if (m_values.HasChanged(TYPEID_ITEM)) + m_itemData->WriteUpdate(*data, flags, this, target); + + if (m_values.HasChanged(TYPEID_CONTAINER)) + m_containerData->WriteUpdate(*data, flags, this, target); + + data->put<uint32>(sizePos, data->wpos() - sizePos - 4); +} + +void Bag::ClearUpdateMask(bool remove) +{ + m_values.ClearChangesMask(&Bag::m_containerData); + Item::ClearUpdateMask(remove); +} + // If the bag is empty returns true bool Bag::IsEmpty() const { diff --git a/src/server/game/Entities/Item/Container/Bag.h b/src/server/game/Entities/Item/Container/Bag.h index 3f0e9407da3..ffe5942fb0c 100644 --- a/src/server/game/Entities/Item/Container/Bag.h +++ b/src/server/game/Entities/Item/Container/Bag.h @@ -47,7 +47,7 @@ class TC_GAME_API Bag : public Item uint8 GetSlotByItemGUID(ObjectGuid guid) const; bool IsEmpty() const; uint32 GetFreeSlots() const; - uint32 GetBagSize() const { return GetUInt32Value(CONTAINER_FIELD_NUM_SLOTS); } + uint32 GetBagSize() const { return m_containerData->NumSlots; } // DB operations // overwrite virtual Item::SaveToDB @@ -58,8 +58,15 @@ class TC_GAME_API Bag : public Item void DeleteFromDB(SQLTransaction& trans) override; void BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) const override; + void BuildValuesCreate(ByteBuffer* data, Player const* target) const override; + void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override; + void ClearUpdateMask(bool remove) override; + + UF::UpdateField<UF::ContainerData, 0, TYPEID_CONTAINER> m_containerData; protected: + void SetBagSize(uint32 numSlots) { SetUpdateFieldValue(m_values.ModifyValue(&Bag::m_containerData).ModifyValue(&UF::ContainerData::NumSlots), numSlots); } + void SetSlot(uint32 slot, ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Bag::m_containerData).ModifyValue(&UF::ContainerData::Slots, slot), guid); } // Bag Storage space Item* m_bagslot[MAX_BAG_SIZE]; diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index af16870c6d5..019264836fc 100644 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -22,6 +22,7 @@ #include "CollectionMgr.h" #include "Common.h" #include "ConditionMgr.h" +#include "Containers.h" #include "DatabaseEnv.h" #include "DB2Stores.h" #include "GameTables.h" @@ -110,7 +111,7 @@ void AddItemsSetItem(Player* player, Item* item) eff->SetBonuses.insert(itemSetSpell); // spell cast only if fit form requirement, in other case will cast at form change - if (!itemSetSpell->ChrSpecID || itemSetSpell->ChrSpecID == player->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID)) + if (!itemSetSpell->ChrSpecID || itemSetSpell->ChrSpecID == player->GetPrimarySpecialization()) player->ApplyEquipSpell(spellInfo, NULL, true); } } @@ -275,8 +276,6 @@ Item::Item() m_objectType |= TYPEMASK_ITEM; m_objectTypeId = TYPEID_ITEM; - m_valuesCount = ITEM_END; - _dynamicValuesCount = ITEM_DYNAMIC_END; m_slot = 0; uState = ITEM_NEW; uQueuePos = -1; @@ -301,7 +300,7 @@ bool Item::Create(ObjectGuid::LowType guidlow, uint32 itemId, Player const* owne if (owner) { SetOwnerGUID(owner->GetGUID()); - SetGuidValue(ITEM_FIELD_CONTAINED, owner->GetGUID()); + SetContainedIn(owner->GetGUID()); } ItemTemplate const* itemProto = sObjectMgr->GetItemTemplate(itemId); @@ -309,16 +308,16 @@ bool Item::Create(ObjectGuid::LowType guidlow, uint32 itemId, Player const* owne return false; _bonusData.Initialize(itemProto); - SetUInt32Value(ITEM_FIELD_STACK_COUNT, 1); - SetUInt32Value(ITEM_FIELD_MAXDURABILITY, itemProto->MaxDurability); - SetUInt32Value(ITEM_FIELD_DURABILITY, itemProto->MaxDurability); + SetCount(1); + SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::MaxDurability), itemProto->MaxDurability); + SetDurability(itemProto->MaxDurability); for (std::size_t i = 0; i < itemProto->Effects.size(); ++i) if (i < 5) SetSpellCharges(i, itemProto->Effects[i]->Charges); - SetUInt32Value(ITEM_FIELD_DURATION, itemProto->GetDuration()); - SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, 0); + SetExpiration(itemProto->GetDuration()); + SetCreatePlayedTime(0); if (itemProto->GetArtifactID()) { @@ -357,19 +356,20 @@ bool Item::IsNotEmptyBag() const void Item::UpdateDuration(Player* owner, uint32 diff) { - if (!GetUInt32Value(ITEM_FIELD_DURATION)) + uint32 duration = m_itemData->Expiration; + if (!duration) return; - TC_LOG_DEBUG("entities.player.items", "Item::UpdateDuration Item (Entry: %u Duration %u Diff %u)", GetEntry(), GetUInt32Value(ITEM_FIELD_DURATION), diff); + TC_LOG_DEBUG("entities.player.items", "Item::UpdateDuration Item (Entry: %u Duration %u Diff %u)", GetEntry(), duration, diff); - if (GetUInt32Value(ITEM_FIELD_DURATION) <= diff) + if (duration <= diff) { sScriptMgr->OnItemExpire(owner, GetTemplate()); owner->DestroyItem(GetBagSlot(), GetSlot(), true); return; } - SetUInt32Value(ITEM_FIELD_DURATION, GetUInt32Value(ITEM_FIELD_DURATION) - diff); + SetExpiration(duration - diff); SetState(ITEM_CHANGED, owner); // save new time in database } @@ -388,10 +388,10 @@ void Item::SaveToDB(SQLTransaction& trans) PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(uState == ITEM_NEW ? CHAR_REP_ITEM_INSTANCE : CHAR_UPD_ITEM_INSTANCE); stmt->setUInt32( index, GetEntry()); stmt->setUInt64(++index, GetOwnerGUID().GetCounter()); - stmt->setUInt64(++index, GetGuidValue(ITEM_FIELD_CREATOR).GetCounter()); - stmt->setUInt64(++index, GetGuidValue(ITEM_FIELD_GIFTCREATOR).GetCounter()); + stmt->setUInt64(++index, GetCreator().GetCounter()); + stmt->setUInt64(++index, GetGiftCreator().GetCounter()); stmt->setUInt32(++index, GetCount()); - stmt->setUInt32(++index, GetUInt32Value(ITEM_FIELD_DURATION)); + stmt->setUInt32(++index, m_itemData->Expiration); std::ostringstream ssSpells; if (ItemTemplate const* itemProto = sObjectMgr->GetItemTemplate(GetEntry())) @@ -399,7 +399,7 @@ void Item::SaveToDB(SQLTransaction& trans) ssSpells << GetSpellCharges(i) << ' '; stmt->setString(++index, ssSpells.str()); - stmt->setUInt32(++index, GetUInt32Value(ITEM_FIELD_FLAGS)); + stmt->setUInt32(++index, m_itemData->DynamicFlags); std::ostringstream ssEnchants; for (uint8 i = 0; i < MAX_ENCHANTMENT_SLOT; ++i) @@ -412,18 +412,18 @@ void Item::SaveToDB(SQLTransaction& trans) stmt->setUInt8(++index, uint8(GetItemRandomEnchantmentId().Type)); stmt->setUInt32(++index, GetItemRandomEnchantmentId().Id); - stmt->setUInt16(++index, GetUInt32Value(ITEM_FIELD_DURABILITY)); - stmt->setUInt32(++index, GetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME)); + stmt->setUInt16(++index, m_itemData->Durability); + stmt->setUInt32(++index, m_itemData->CreatePlayedTime); stmt->setString(++index, m_text); stmt->setUInt32(++index, GetModifier(ITEM_MODIFIER_UPGRADE_ID)); stmt->setUInt32(++index, GetModifier(ITEM_MODIFIER_BATTLE_PET_SPECIES_ID)); stmt->setUInt32(++index, GetModifier(ITEM_MODIFIER_BATTLE_PET_BREED_DATA)); stmt->setUInt32(++index, GetModifier(ITEM_MODIFIER_BATTLE_PET_LEVEL)); stmt->setUInt32(++index, GetModifier(ITEM_MODIFIER_BATTLE_PET_DISPLAY_ID)); - stmt->setUInt8(++index, uint8(GetUInt32Value(ITEM_FIELD_CONTEXT))); + stmt->setUInt8(++index, uint8(m_itemData->Context)); std::ostringstream bonusListIDs; - for (uint32 bonusListID : GetDynamicValues(ITEM_DYNAMIC_FIELD_BONUSLIST_IDS)) + for (int32 bonusListID : *m_itemData->BonusListIDs) bonusListIDs << bonusListID << ' '; stmt->setString(++index, bonusListIDs.str()); @@ -431,7 +431,7 @@ void Item::SaveToDB(SQLTransaction& trans) trans->Append(stmt); - if ((uState == ITEM_CHANGED) && HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_WRAPPED)) + if ((uState == ITEM_CHANGED) && HasItemFlag(ITEM_FIELD_FLAG_WRAPPED)) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_GIFT_OWNER); stmt->setUInt64(0, GetOwnerGUID().GetCounter()); @@ -443,17 +443,17 @@ void Item::SaveToDB(SQLTransaction& trans) stmt->setUInt64(0, GetGUID().GetCounter()); trans->Append(stmt); - if (GetGems().size()) + if (m_itemData->Gems.size()) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ITEM_INSTANCE_GEMS); stmt->setUInt64(0, GetGUID().GetCounter()); uint32 i = 0; uint32 const gemFields = 4; - for (ItemDynamicFieldGems const& gemData : GetGems()) + for (UF::SocketedGem const& gemData : m_itemData->Gems) { - if (gemData.ItemId) + if (gemData.ItemID) { - stmt->setUInt32(1 + i * gemFields, gemData.ItemId); + stmt->setUInt32(1 + i * gemFields, gemData.ItemID); std::ostringstream gemBonusListIDs; for (uint16 bonusListID : gemData.BonusListIDs) if (bonusListID) @@ -529,16 +529,16 @@ void Item::SaveToDB(SQLTransaction& trans) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ITEM_INSTANCE_ARTIFACT); stmt->setUInt64(0, GetGUID().GetCounter()); - stmt->setUInt64(1, GetUInt64Value(ITEM_FIELD_ARTIFACT_XP)); + stmt->setUInt64(1, m_itemData->ArtifactXP); stmt->setUInt32(2, GetModifier(ITEM_MODIFIER_ARTIFACT_APPEARANCE_ID)); stmt->setUInt32(3, GetModifier(ITEM_MODIFIER_ARTIFACT_TIER)); trans->Append(stmt); - for (ItemDynamicFieldArtifactPowers const& artifactPower : GetArtifactPowers()) + for (UF::ArtifactPower const& artifactPower : m_itemData->ArtifactPowers) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_ITEM_INSTANCE_ARTIFACT_POWERS); stmt->setUInt64(0, GetGUID().GetCounter()); - stmt->setUInt32(1, artifactPower.ArtifactPowerId); + stmt->setUInt32(1, artifactPower.ArtifactPowerID); stmt->setUInt8(2, artifactPower.PurchasedRank); trans->Append(stmt); } @@ -591,7 +591,7 @@ void Item::SaveToDB(SQLTransaction& trans) stmt->setUInt64(0, GetGUID().GetCounter()); trans->Append(stmt); - if (HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_WRAPPED)) + if (HasItemFlag(ITEM_FIELD_FLAG_WRAPPED)) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GIFT); stmt->setUInt64(0, GetGUID().GetCounter()); @@ -656,20 +656,20 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fie if (uint64 creator = fields[2].GetUInt64()) { if (!(itemFlags & ITEM_FIELD_FLAG_CHILD)) - SetGuidValue(ITEM_FIELD_CREATOR, ObjectGuid::Create<HighGuid::Player>(creator)); + SetCreator(ObjectGuid::Create<HighGuid::Player>(creator)); else - SetGuidValue(ITEM_FIELD_CREATOR, ObjectGuid::Create<HighGuid::Item>(creator)); + SetCreator(ObjectGuid::Create<HighGuid::Item>(creator)); } if (uint64 giftCreator = fields[3].GetUInt64()) - SetGuidValue(ITEM_FIELD_GIFTCREATOR, ObjectGuid::Create<HighGuid::Player>(giftCreator)); + SetGiftCreator(ObjectGuid::Create<HighGuid::Player>(giftCreator)); SetCount(fields[4].GetUInt32()); uint32 duration = fields[5].GetUInt32(); - SetUInt32Value(ITEM_FIELD_DURATION, duration); + SetExpiration(duration); // update duration if need, and remove if not need if ((proto->GetDuration() == 0) != (duration == 0)) { - SetUInt32Value(ITEM_FIELD_DURATION, proto->GetDuration()); + SetExpiration(proto->GetDuration()); need_save = true; } @@ -678,19 +678,19 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fie for (uint8 i = 0; i < proto->Effects.size(); ++i) SetSpellCharges(i, atoi(tokens[i])); - SetUInt32Value(ITEM_FIELD_FLAGS, itemFlags); + SetItemFlags(ItemFieldFlags(itemFlags)); uint32 durability = fields[11].GetUInt16(); - SetUInt32Value(ITEM_FIELD_DURABILITY, durability); + SetDurability(durability); // update max durability (and durability) if need - SetUInt32Value(ITEM_FIELD_MAXDURABILITY, proto->MaxDurability); + SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::MaxDurability), proto->MaxDurability); if (durability > proto->MaxDurability) { - SetUInt32Value(ITEM_FIELD_DURABILITY, proto->MaxDurability); + SetDurability(proto->MaxDurability); need_save = true; } - SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, fields[12].GetUInt32()); + SetCreatePlayedTime(fields[12].GetUInt32()); SetText(fields[13].GetString()); uint32 upgradeId = fields[14].GetUInt32(); @@ -714,14 +714,14 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fie SetModifier(ITEM_MODIFIER_BATTLE_PET_LEVEL, fields[17].GetUInt16()); SetModifier(ITEM_MODIFIER_BATTLE_PET_DISPLAY_ID, fields[18].GetUInt32()); - SetUInt32Value(ITEM_FIELD_CONTEXT, fields[19].GetUInt8()); + SetContext(fields[19].GetUInt8()); - Tokenizer bonusListIDs(fields[20].GetString(), ' '); - for (char const* token : bonusListIDs) - { - uint32 bonusListID = atoul(token); - AddBonuses(bonusListID); - } + Tokenizer bonusListString(fields[20].GetString(), ' '); + std::vector<int32> bonusListIDs; + bonusListIDs.reserve(bonusListString.size()); + for (char const* token : bonusListString) + bonusListIDs.push_back(atoi(token)); + SetBonuses(std::move(bonusListIDs)); SetModifier(ITEM_MODIFIER_TRANSMOG_APPEARANCE_ALL_SPECS, fields[21].GetUInt32()); SetModifier(ITEM_MODIFIER_TRANSMOG_APPEARANCE_SPEC_1, fields[22].GetUInt32()); @@ -756,22 +756,24 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fie SetModifier(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL, fields[44].GetUInt32()); // Enchants must be loaded after all other bonus/scaling data - _LoadIntoDataField(fields[8].GetString(), ITEM_FIELD_ENCHANTMENT, MAX_ENCHANTMENT_SLOT * MAX_ENCHANTMENT_OFFSET); - m_randomEnchantment.Type = ItemRandomEnchantmentType(fields[9].GetUInt8()); - m_randomEnchantment.Id = fields[10].GetUInt32(); - if (m_randomEnchantment.Type == ItemRandomEnchantmentType::Property) - SetUInt32Value(ITEM_FIELD_RANDOM_PROPERTIES_ID, m_randomEnchantment.Id); - else if (m_randomEnchantment.Type == ItemRandomEnchantmentType::Suffix) + Tokenizer enchantmentTokens(fields[8].GetString(), ' '); + if (enchantmentTokens.size() == MAX_ENCHANTMENT_SLOT * MAX_ENCHANTMENT_OFFSET) { - SetInt32Value(ITEM_FIELD_RANDOM_PROPERTIES_ID, -int32(m_randomEnchantment.Id)); - // recalculate suffix factor - UpdateItemSuffixFactor(); + for (uint32 i = 0; i < MAX_ENCHANTMENT_SLOT; ++i) + { + auto enchantmentField = m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Enchantment, i); + SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::ID), atoul(enchantmentTokens[i * MAX_ENCHANTMENT_OFFSET + 0])); + SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::Duration), atoul(enchantmentTokens[i * MAX_ENCHANTMENT_OFFSET + 1])); + SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::Charges), atoi(enchantmentTokens[i * MAX_ENCHANTMENT_OFFSET + 2])); + } } + m_randomEnchantment.Type = ItemRandomEnchantmentType(fields[9].GetUInt8()); + m_randomEnchantment.Id = fields[10].GetUInt32(); // Remove bind flag for items vs BIND_NONE set if (IsSoulBound() && GetBonding() == BIND_NONE) { - ApplyModFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_SOULBOUND, false); + RemoveItemFlag(ITEM_FIELD_FLAG_SOULBOUND); need_save = true; } @@ -779,9 +781,9 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fie { uint8 index = 0; PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ITEM_INSTANCE_ON_LOAD); - stmt->setUInt32(index++, GetUInt32Value(ITEM_FIELD_DURATION)); - stmt->setUInt32(index++, GetUInt32Value(ITEM_FIELD_FLAGS)); - stmt->setUInt32(index++, GetUInt32Value(ITEM_FIELD_DURABILITY)); + stmt->setUInt32(index++, m_itemData->Expiration); + stmt->setUInt32(index++, m_itemData->DynamicFlags); + stmt->setUInt32(index++, m_itemData->Durability); stmt->setUInt32(index++, GetModifier(ITEM_MODIFIER_UPGRADE_ID)); stmt->setUInt64(index++, guid); CharacterDatabase.Execute(stmt); @@ -790,12 +792,12 @@ bool Item::LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fie return true; } -void Item::LoadArtifactData(Player* owner, uint64 xp, uint32 artifactAppearanceId, uint32 artifactTier, std::vector<ItemDynamicFieldArtifactPowers>& powers) +void Item::LoadArtifactData(Player* owner, uint64 xp, uint32 artifactAppearanceId, uint32 artifactTier, std::vector<ArtifactPowerLoadInfo>& powers) { for (uint8 i = 0; i <= artifactTier; ++i) InitArtifactPowers(GetTemplate()->GetArtifactID(), i); - SetUInt64Value(ITEM_FIELD_ARTIFACT_XP, xp); + SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ArtifactXP), xp); SetModifier(ITEM_MODIFIER_ARTIFACT_APPEARANCE_ID, artifactAppearanceId); SetModifier(ITEM_MODIFIER_ARTIFACT_TIER, artifactTier); @@ -803,7 +805,7 @@ void Item::LoadArtifactData(Player* owner, uint64 xp, uint32 artifactAppearanceI SetAppearanceModId(artifactAppearance->ItemAppearanceModifierID); uint8 totalPurchasedRanks = 0; - for (ItemDynamicFieldArtifactPowers& power : powers) + for (ArtifactPowerLoadInfo& power : powers) { power.CurrentRankWithBonus += power.PurchasedRank; totalPurchasedRanks += power.PurchasedRank; @@ -844,17 +846,16 @@ void Item::LoadArtifactData(Player* owner, uint64 xp, uint32 artifactAppearanceI } } - SetArtifactPower(&power); + SetArtifactPower(power.ArtifactPowerId, power.PurchasedRank, power.CurrentRankWithBonus); } - for (ItemDynamicFieldArtifactPowers& power : powers) + for (ArtifactPowerLoadInfo& power : powers) { ArtifactPowerEntry const* scaledArtifactPowerEntry = sArtifactPowerStore.AssertEntry(power.ArtifactPowerId); if (!(scaledArtifactPowerEntry->Flags & ARTIFACT_POWER_FLAG_SCALES_WITH_NUM_POWERS)) continue; - power.CurrentRankWithBonus = totalPurchasedRanks + 1; - SetArtifactPower(&power); + SetArtifactPower(power.ArtifactPowerId, power.PurchasedRank, totalPurchasedRanks + 1); } CheckArtifactRelicSlotUnlock(owner ? owner : GetOwner()); @@ -929,32 +930,6 @@ void Item::SetItemRandomProperties(ItemRandomEnchantmentId const& randomPropId) switch (randomPropId.Type) { - case ItemRandomEnchantmentType::Property: - if (ItemRandomPropertiesEntry const* item_rand = sItemRandomPropertiesStore.LookupEntry(randomPropId.Id)) - { - if (GetUInt32Value(ITEM_FIELD_RANDOM_PROPERTIES_ID) != randomPropId.Id) - { - SetUInt32Value(ITEM_FIELD_RANDOM_PROPERTIES_ID, randomPropId.Id); - SetState(ITEM_CHANGED, GetOwner()); - } - for (uint32 i = PROP_ENCHANTMENT_SLOT_0; i <= PROP_ENCHANTMENT_SLOT_4; ++i) - SetEnchantment(EnchantmentSlot(i), item_rand->Enchantment[i - PROP_ENCHANTMENT_SLOT_0], 0, 0); - } - break; - case ItemRandomEnchantmentType::Suffix: - if (ItemRandomSuffixEntry const* item_rand = sItemRandomSuffixStore.LookupEntry(randomPropId.Id)) - { - if (GetInt32Value(ITEM_FIELD_RANDOM_PROPERTIES_ID) != -int32(randomPropId.Id) || !GetItemSuffixFactor()) - { - SetInt32Value(ITEM_FIELD_RANDOM_PROPERTIES_ID, -int32(randomPropId.Id)); - UpdateItemSuffixFactor(); - SetState(ITEM_CHANGED, GetOwner()); - } - - for (uint32 i = PROP_ENCHANTMENT_SLOT_0; i <= PROP_ENCHANTMENT_SLOT_4; ++i) - SetEnchantment(EnchantmentSlot(i), item_rand->Enchantment[i - PROP_ENCHANTMENT_SLOT_0], 0, 0); - } - break; case ItemRandomEnchantmentType::BonusList: AddBonuses(randomPropId.Id); break; @@ -963,22 +938,6 @@ void Item::SetItemRandomProperties(ItemRandomEnchantmentId const& randomPropId) } } -void Item::UpdateItemSuffixFactor() -{ - if (!GetTemplate()->GetRandomSuffix()) - return; - - uint32 suffixFactor = 0; - if (Player* owner = GetOwner()) - suffixFactor = GetRandomPropertyPoints(GetItemLevel(owner), GetQuality(), GetTemplate()->GetInventoryType(), GetTemplate()->GetSubClass()); - else - suffixFactor = GenerateEnchSuffixFactor(GetEntry()); - - if (GetItemSuffixFactor() == suffixFactor) - return; - SetUInt32Value(ITEM_FIELD_PROPERTY_SEED, suffixFactor); -} - void Item::SetState(ItemUpdateState state, Player* forplayer) { if (uState == ITEM_NEW && state == ITEM_REMOVED) @@ -1067,7 +1026,7 @@ bool Item::CanBeTraded(bool mail, bool trade) const if (m_lootGenerated) return false; - if ((!mail || !IsBoundAccountWide()) && (IsSoulBound() && (!HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_BOP_TRADEABLE) || !trade))) + if ((!mail || !IsBoundAccountWide()) && (IsSoulBound() && (!HasItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE) || !trade))) return false; if (IsBag() && (Player::IsBagPos(GetPos()) || !ToBag()->IsEmpty())) @@ -1089,7 +1048,7 @@ bool Item::CanBeTraded(bool mail, bool trade) const void Item::SetCount(uint32 value) { - SetUInt32Value(ITEM_FIELD_STACK_COUNT, value); + SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::StackCount), value); if (Player* player = GetOwner()) { @@ -1215,9 +1174,10 @@ void Item::SetEnchantment(EnchantmentSlot slot, uint32 id, uint32 duration, uint ApplyArtifactPowerEnchantmentBonuses(slot, GetEnchantmentId(slot), false, owner); ApplyArtifactPowerEnchantmentBonuses(slot, id, true, owner); - SetUInt32Value(ITEM_FIELD_ENCHANTMENT + slot * MAX_ENCHANTMENT_OFFSET + ENCHANTMENT_ID_OFFSET, id); - SetUInt32Value(ITEM_FIELD_ENCHANTMENT + slot * MAX_ENCHANTMENT_OFFSET + ENCHANTMENT_DURATION_OFFSET, duration); - SetUInt32Value(ITEM_FIELD_ENCHANTMENT + slot * MAX_ENCHANTMENT_OFFSET + ENCHANTMENT_CHARGES_OFFSET, charges); + auto enchantmentField = m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Enchantment, slot); + SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::ID), id); + SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::Duration), duration); + SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::Charges), charges); SetState(ITEM_CHANGED, owner); } @@ -1226,7 +1186,7 @@ void Item::SetEnchantmentDuration(EnchantmentSlot slot, uint32 duration, Player* if (GetEnchantmentDuration(slot) == duration) return; - SetUInt32Value(ITEM_FIELD_ENCHANTMENT + slot * MAX_ENCHANTMENT_OFFSET + ENCHANTMENT_DURATION_OFFSET, duration); + SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Enchantment, slot).ModifyValue(&UF::ItemEnchantment::Duration), duration); SetState(ITEM_CHANGED, owner); // Cannot use GetOwner() here, has to be passed as an argument to avoid freeze due to hashtable locking } @@ -1236,7 +1196,7 @@ void Item::SetEnchantmentCharges(EnchantmentSlot slot, uint32 charges) if (GetEnchantmentCharges(slot) == charges) return; - SetUInt32Value(ITEM_FIELD_ENCHANTMENT + slot*MAX_ENCHANTMENT_OFFSET + ENCHANTMENT_CHARGES_OFFSET, charges); + SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Enchantment, slot).ModifyValue(&UF::ItemEnchantment::Charges), charges); SetState(ITEM_CHANGED, GetOwner()); } @@ -1245,20 +1205,18 @@ void Item::ClearEnchantment(EnchantmentSlot slot) if (!GetEnchantmentId(slot)) return; - for (uint8 x = 0; x < MAX_ITEM_ENCHANTMENT_EFFECTS; ++x) - SetUInt32Value(ITEM_FIELD_ENCHANTMENT + slot*MAX_ENCHANTMENT_OFFSET + x, 0); + auto enchantmentField = m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Enchantment, slot); + SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::ID), 0); + SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::Duration), 0); + SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::Charges), 0); + SetUpdateFieldValue(enchantmentField.ModifyValue(&UF::ItemEnchantment::Inactive), 0); SetState(ITEM_CHANGED, GetOwner()); } -DynamicFieldStructuredView<ItemDynamicFieldGems> Item::GetGems() const -{ - return GetDynamicStructuredValues<ItemDynamicFieldGems>(ITEM_DYNAMIC_FIELD_GEMS); -} - -ItemDynamicFieldGems const* Item::GetGem(uint16 slot) const +UF::SocketedGem const* Item::GetGem(uint16 slot) const { ASSERT(slot < MAX_GEM_SOCKETS); - return GetDynamicStructuredValue<ItemDynamicFieldGems>(ITEM_DYNAMIC_FIELD_GEMS, slot); + return slot < m_itemData->Gems.size() ? &m_itemData->Gems[slot] : nullptr; } void Item::SetGem(uint16 slot, ItemDynamicFieldGems const* gem, uint32 gemScalingLevel) @@ -1315,13 +1273,17 @@ void Item::SetGem(uint16 slot, ItemDynamicFieldGems const* gem, uint32 gemScalin } } - SetDynamicStructuredValue(ITEM_DYNAMIC_FIELD_GEMS, slot, gem); + auto gemField = m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Gems, slot); + SetUpdateFieldValue(gemField.ModifyValue(&UF::SocketedGem::ItemID), gem->ItemId); + SetUpdateFieldValue(gemField.ModifyValue(&UF::SocketedGem::Context), gem->Context); + for (uint32 i = 0; i < 16; ++i) + SetUpdateFieldValue(gemField.ModifyValue(&UF::SocketedGem::BonusListIDs, i), gem->BonusListIDs[i]); } bool Item::GemsFitSockets() const { uint32 gemSlot = 0; - for (ItemDynamicFieldGems const& gemData : GetGems()) + for (UF::SocketedGem const& gemData : m_itemData->Gems) { SocketColor color = GetTemplate()->GetSocketColor(gemSlot); if (!color) // no socket slot @@ -1329,7 +1291,7 @@ bool Item::GemsFitSockets() const uint32 GemColor = 0; - ItemTemplate const* gemProto = sObjectMgr->GetItemTemplate(gemData.ItemId); + ItemTemplate const* gemProto = sObjectMgr->GetItemTemplate(gemData.ItemID); if (gemProto) { GemPropertiesEntry const* gemProperty = sGemPropertiesStore.LookupEntry(gemProto->GetGemProperties()); @@ -1345,17 +1307,17 @@ bool Item::GemsFitSockets() const uint8 Item::GetGemCountWithID(uint32 GemID) const { - return uint8(std::count_if(GetGems().begin(), GetGems().end(), [GemID](ItemDynamicFieldGems const& gemData) + return uint8(std::count_if(m_itemData->Gems.begin(), m_itemData->Gems.end(), [GemID](UF::SocketedGem const& gemData) { - return gemData.ItemId == GemID; + return gemData.ItemID == int32(GemID); })); } uint8 Item::GetGemCountWithLimitCategory(uint32 limitCategory) const { - return uint8(std::count_if(GetGems().begin(), GetGems().end(), [limitCategory](ItemDynamicFieldGems const& gemData) + return uint8(std::count_if(m_itemData->Gems.begin(), m_itemData->Gems.end(), [limitCategory](UF::SocketedGem const& gemData) { - ItemTemplate const* gemProto = sObjectMgr->GetItemTemplate(gemData.ItemId); + ItemTemplate const* gemProto = sObjectMgr->GetItemTemplate(gemData.ItemID); if (!gemProto) return false; @@ -1381,7 +1343,7 @@ void Item::SendUpdateSockets() // time. void Item::SendTimeUpdate(Player* owner) { - uint32 duration = GetUInt32Value(ITEM_FIELD_DURATION); + uint32 duration = m_itemData->Expiration; if (!duration) return; @@ -1424,10 +1386,10 @@ Item* Item::CloneItem(uint32 count, Player const* player /*= nullptr*/) const if (!newItem) return nullptr; - newItem->SetGuidValue(ITEM_FIELD_CREATOR, GetGuidValue(ITEM_FIELD_CREATOR)); - newItem->SetGuidValue(ITEM_FIELD_GIFTCREATOR, GetGuidValue(ITEM_FIELD_GIFTCREATOR)); - newItem->SetUInt32Value(ITEM_FIELD_FLAGS, GetUInt32Value(ITEM_FIELD_FLAGS) & ~(ITEM_FIELD_FLAG_REFUNDABLE | ITEM_FIELD_FLAG_BOP_TRADEABLE)); - newItem->SetUInt32Value(ITEM_FIELD_DURATION, GetUInt32Value(ITEM_FIELD_DURATION)); + newItem->SetCreator(GetCreator()); + newItem->SetGiftCreator(GetGiftCreator()); + newItem->SetItemFlags(ItemFieldFlags(*m_itemData->DynamicFlags & ~(ITEM_FIELD_FLAG_REFUNDABLE | ITEM_FIELD_FLAG_BOP_TRADEABLE))); + newItem->SetExpiration(m_itemData->Expiration); // player CAN be NULL in which case we must not update random properties because that accesses player's item update queue if (player) newItem->SetItemRandomProperties(GetItemRandomEnchantmentId()); @@ -1444,7 +1406,7 @@ bool Item::IsBindedNotWith(Player const* player) const if (GetOwnerGUID() == player->GetGUID()) return false; - if (HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_BOP_TRADEABLE)) + if (HasItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE)) if (allowedGUIDs.find(player->GetGUID()) != allowedGUIDs.end()) return false; @@ -1462,76 +1424,61 @@ void Item::BuildUpdate(UpdateDataMapType& data_map) ClearUpdateMask(false); } -void Item::BuildDynamicValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) const +UF::UpdateFieldFlag Item::GetUpdateFieldFlagsFor(Player const* target) const { - if (!target) - return; + if (target->GetGUID() == GetOwnerGUID()) + return UF::UpdateFieldFlag::Owner; - std::size_t blockCount = UpdateMask::GetBlockCount(_dynamicValuesCount); + return UF::UpdateFieldFlag::None; +} - uint32* flags = nullptr; - uint32 visibleFlag = GetDynamicUpdateFieldData(target, flags); +void Item::BuildValuesCreate(ByteBuffer* data, Player const* target) const +{ + UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); + std::size_t sizePos = data->wpos(); + *data << uint32(0); + *data << uint8(flags); + m_objectData->WriteCreate(*data, flags, this, target); + m_itemData->WriteCreate(*data, flags, this, target); + data->put<uint32>(sizePos, data->wpos() - sizePos - 4); +} - *data << uint8(blockCount); - std::size_t maskPos = data->wpos(); - data->resize(data->size() + blockCount * sizeof(UpdateMask::BlockType)); +void Item::BuildValuesUpdate(ByteBuffer* data, Player const* target) const +{ + UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); + std::size_t sizePos = data->wpos(); + *data << uint32(0); + *data << uint32(m_values.GetChangedObjectTypeMask()); - using DynamicFieldChangeTypeUT = std::underlying_type<UpdateMask::DynamicFieldChangeType>::type; + if (m_values.HasChanged(TYPEID_OBJECT)) + m_objectData->WriteUpdate(*data, flags, this, target); - for (uint16 index = 0; index < _dynamicValuesCount; ++index) - { - std::vector<uint32> const& values = _dynamicValues[index]; - if (_fieldNotifyFlags & flags[index] || - ((updateType == UPDATETYPE_VALUES ? _dynamicChangesMask[index] != UpdateMask::UNCHANGED : !values.empty()) && (flags[index] & visibleFlag))) - { - UpdateMask::SetUpdateBit(data->contents() + maskPos, index); + if (m_values.HasChanged(TYPEID_ITEM)) + m_itemData->WriteUpdate(*data, flags, this, target); - std::size_t arrayBlockCount = UpdateMask::GetBlockCount(values.size()); - *data << DynamicFieldChangeTypeUT(UpdateMask::EncodeDynamicFieldChangeType(arrayBlockCount, _dynamicChangesMask[index], updateType)); - if (updateType == UPDATETYPE_VALUES && _dynamicChangesMask[index] == UpdateMask::VALUE_AND_SIZE_CHANGED) - *data << uint32(values.size()); + data->put<uint32>(sizePos, data->wpos() - sizePos - 4); +} - std::size_t arrayMaskPos = data->wpos(); - data->resize(data->size() + arrayBlockCount * sizeof(UpdateMask::BlockType)); - if (index != ITEM_DYNAMIC_FIELD_MODIFIERS) - { - for (std::size_t v = 0; v < values.size(); ++v) - { - if (updateType != UPDATETYPE_VALUES || _dynamicChangesArrayMask[index][v]) - { - UpdateMask::SetUpdateBit(data->contents() + arrayMaskPos, v); - *data << uint32(values[v]); - } - } - } - else - { - uint32 m = 0; +void Item::BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const +{ + UpdateMask<NUM_CLIENT_OBJECT_TYPES> valuesMask; + valuesMask.Set(TYPEID_ITEM); - // work around stupid item modifier field requirements - push back values mask by sizeof(m) bytes if size was not appended yet - if (updateType == UPDATETYPE_VALUES && _dynamicChangesMask[index] != UpdateMask::VALUE_AND_SIZE_CHANGED && _changesMask[ITEM_FIELD_MODIFIERS_MASK]) - { - data->put(arrayMaskPos - sizeof(DynamicFieldChangeTypeUT), data->read<uint16>(arrayMaskPos - sizeof(DynamicFieldChangeTypeUT)) | UpdateMask::VALUE_AND_SIZE_CHANGED); - *data << m; - arrayMaskPos += sizeof(m); - } + std::size_t sizePos = data->wpos(); + *data << uint32(0); + *data << uint32(valuesMask.GetBlock(0)); - // in case of ITEM_DYNAMIC_FIELD_MODIFIERS it is ITEM_FIELD_MODIFIERS_MASK that controls index of each value, not updatemask - // so we just have to write this starting from 0 index - for (std::size_t v = 0; v < values.size(); ++v) - { - if (values[v]) - { - UpdateMask::SetUpdateBit(data->contents() + arrayMaskPos, m++); - *data << uint32(values[v]); - } - } + UF::ItemData::Mask mask; + m_itemData->AppendAllowedFieldsMaskForFlag(mask, flags); + m_itemData->WriteUpdate(*data, mask, flags, this, target); - if (updateType == UPDATETYPE_VALUES && _changesMask[ITEM_FIELD_MODIFIERS_MASK]) - data->put(arrayMaskPos - sizeof(m), m); - } - } - } + data->put<uint32>(sizePos, data->wpos() - sizePos - 4); +} + +void Item::ClearUpdateMask(bool remove) +{ + m_values.ClearChangesMask(&Item::m_itemData); + Object::ClearUpdateMask(remove); } void Item::AddToObjectUpdate() @@ -1577,14 +1524,14 @@ void Item::DeleteRefundDataFromDB(SQLTransaction* trans) void Item::SetNotRefundable(Player* owner, bool changestate /*= true*/, SQLTransaction* trans /*= nullptr*/, bool addToCollection /*= true*/) { - if (!HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE)) + if (!HasItemFlag(ITEM_FIELD_FLAG_REFUNDABLE)) return; WorldPackets::Item::ItemExpirePurchaseRefund itemExpirePurchaseRefund; itemExpirePurchaseRefund.ItemGUID = GetGUID(); owner->SendDirectMessage(itemExpirePurchaseRefund.Write()); - RemoveFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE); + RemoveItemFlag(ITEM_FIELD_FLAG_REFUNDABLE); // Following is not applicable in the trading procedure if (changestate) SetState(ITEM_CHANGED, owner); @@ -1606,7 +1553,7 @@ void Item::UpdatePlayedTime(Player* owner) based on the time elapsed since the last update hereof. */ // Get current played time - uint32 current_playtime = GetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME); + uint32 current_playtime = m_itemData->CreatePlayedTime; // Calculate time elapsed since last played time update time_t curtime = time(NULL); uint32 elapsed = uint32(curtime - m_lastPlayedTimeUpdate); @@ -1616,7 +1563,7 @@ void Item::UpdatePlayedTime(Player* owner) { // No? Proceed. // Update the data field - SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, new_playtime); + SetCreatePlayedTime(new_playtime); // Flag as changed to get saved to DB SetState(ITEM_CHANGED, owner); // Speaks for itself @@ -1631,7 +1578,7 @@ uint32 Item::GetPlayedTime() { time_t curtime = time(NULL); uint32 elapsed = uint32(curtime - m_lastPlayedTimeUpdate); - return GetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME) + elapsed; + return *m_itemData->CreatePlayedTime + elapsed; } bool Item::IsRefundExpired() @@ -1641,13 +1588,13 @@ bool Item::IsRefundExpired() void Item::SetSoulboundTradeable(GuidSet const& allowedLooters) { - SetFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_BOP_TRADEABLE); + AddItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE); allowedGUIDs = allowedLooters; } void Item::ClearSoulboundTradeable(Player* currentOwner) { - RemoveFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_BOP_TRADEABLE); + RemoveItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE); if (allowedGUIDs.empty()) return; @@ -1662,7 +1609,7 @@ void Item::ClearSoulboundTradeable(Player* currentOwner) bool Item::CheckSoulboundTradeExpire() { // called from owner's update - GetOwner() MUST be valid - if (GetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME) + 2*HOUR < GetOwner()->GetTotalPlayedTime()) + if (m_itemData->CreatePlayedTime + 2*HOUR < GetOwner()->GetTotalPlayedTime()) { ClearSoulboundTradeable(GetOwner()); return true; // remove from tradeable list @@ -1695,9 +1642,6 @@ bool Item::IsValidTransmogrificationTarget() const bool Item::HasStats() const { - if (GetItemRandomPropertyId() != 0) - return true; - ItemTemplate const* proto = GetTemplate(); Player const* owner = GetOwner(); for (uint8 i = 0; i < MAX_ITEM_PROTO_STATS; ++i) @@ -2056,7 +2000,7 @@ void Item::ItemContainerSaveLootToDB() stmt_items = CharacterDatabase.GetPreparedStatement(CHAR_INS_ITEMCONTAINER_ITEMS); - // container_id, item_id, item_count, follow_rules, ffa, blocked, counted, under_threshold, needs_quest, rnd_type, rnd_prop, rnd_suffix, context, bonus_list_ids + // container_id, item_id, item_count, follow_rules, ffa, blocked, counted, under_threshold, needs_quest, rnd_type, rnd_prop, context, bonus_list_ids stmt_items->setUInt64(0, loot.containerID.GetCounter()); stmt_items->setUInt32(1, _li->itemid); stmt_items->setUInt32(2, _li->count); @@ -2068,12 +2012,11 @@ void Item::ItemContainerSaveLootToDB() stmt_items->setBool(8, _li->needs_quest); stmt_items->setUInt8(9, uint8(_li->randomPropertyId.Type)); stmt_items->setUInt32(10, _li->randomPropertyId.Id); - stmt_items->setUInt32(11, _li->randomSuffix); - stmt_items->setUInt8(12, _li->context); + stmt_items->setUInt8(11, _li->context); std::ostringstream bonusListIDs; for (int32 bonusListID : _li->BonusListIDs) bonusListIDs << bonusListID << ' '; - stmt_items->setString(13, bonusListIDs.str()); + stmt_items->setString(12, bonusListIDs.str()); trans->Append(stmt_items); } } @@ -2121,7 +2064,7 @@ bool Item::ItemContainerLoadLootFromDB() // Fill in the rest of the LootItem from the DB Field* fields = item_result->Fetch(); - // item_id, itm_count, follow_rules, ffa, blocked, counted, under_threshold, needs_quest, rnd_type, rnd_prop, rnd_suffix, context, bonus_list_ids + // item_id, itm_count, follow_rules, ffa, blocked, counted, under_threshold, needs_quest, rnd_type, rnd_prop, context, bonus_list_ids loot_item.itemid = fields[0].GetUInt32(); loot_item.count = fields[1].GetUInt32(); loot_item.follow_loot_rules = fields[2].GetBool(); @@ -2132,9 +2075,8 @@ bool Item::ItemContainerLoadLootFromDB() loot_item.is_underthreshold = fields[6].GetBool(); loot_item.needs_quest = fields[7].GetBool(); loot_item.randomPropertyId = { ItemRandomEnchantmentType(fields[8].GetUInt8()), fields[9].GetUInt32() }; - loot_item.randomSuffix = fields[10].GetUInt32(); - loot_item.context = fields[11].GetUInt8(); - Tokenizer bonusLists(fields[12].GetString(), ' '); + loot_item.context = fields[10].GetUInt8(); + Tokenizer bonusLists(fields[11].GetString(), ' '); std::transform(bonusLists.begin(), bonusLists.end(), std::back_inserter(loot_item.BonusListIDs), [](char const* token) { return int32(strtol(token, NULL, 10)); @@ -2198,9 +2140,9 @@ void Item::ItemContainerDeleteLootMoneyAndLootItemsFromDB() uint32 Item::GetItemLevel(Player const* owner) const { - uint32 minItemLevel = owner->GetUInt32Value(UNIT_FIELD_MIN_ITEM_LEVEL); - uint32 minItemLevelCutoff = owner->GetUInt32Value(UNIT_FIELD_MIN_ITEM_LEVEL_CUTOFF); - uint32 maxItemLevel = GetTemplate()->GetFlags3() & ITEM_FLAG3_IGNORE_ITEM_LEVEL_CAP_IN_PVP ? 0 : owner->GetUInt32Value(UNIT_FIELD_MAXITEMLEVEL); + uint32 minItemLevel = owner->m_unitData->MinItemLevel; + uint32 minItemLevelCutoff = owner->m_unitData->MinItemLevelCutoff; + uint32 maxItemLevel = GetTemplate()->GetFlags3() & ITEM_FLAG3_IGNORE_ITEM_LEVEL_CAP_IN_PVP ? 0 : owner->m_unitData->MaxItemLevel; bool pvpBonus = owner->IsUsingPvpItemLevels(); return Item::GetItemLevel(GetTemplate(), _bonusData, owner->getLevel(), GetModifier(ITEM_MODIFIER_SCALING_STAT_DISTRIBUTION_FIXED_LEVEL), GetModifier(ITEM_MODIFIER_UPGRADE_ID), minItemLevel, minItemLevelCutoff, maxItemLevel, pvpBonus); @@ -2313,7 +2255,7 @@ ItemDisenchantLootEntry const* Item::GetDisenchantLoot(ItemTemplate const* itemT uint32 Item::GetDisplayId(Player const* owner) const { ItemModifier transmogModifier = ITEM_MODIFIER_TRANSMOG_APPEARANCE_ALL_SPECS; - if (HasFlag(ITEM_FIELD_MODIFIERS_MASK, AppearanceModifierMaskSpecSpecific)) + if (*m_itemData->ModifiersMask & AppearanceModifierMaskSpecSpecific) transmogModifier = AppearanceModifierSlotBySpec[owner->GetActiveTalentGroup()]; if (ItemModifiedAppearanceEntry const* transmog = sItemModifiedAppearanceStore.LookupEntry(GetModifier(transmogModifier))) @@ -2330,19 +2272,48 @@ ItemModifiedAppearanceEntry const* Item::GetItemModifiedAppearance() const uint32 Item::GetModifier(ItemModifier modifier) const { - return GetDynamicValue(ITEM_DYNAMIC_FIELD_MODIFIERS, modifier); + if (!(*m_itemData->ModifiersMask & (1 << modifier))) + return 0; + + uint32 valueIndex = 0; + uint32 mask = m_itemData->ModifiersMask; + for (uint32 i = 0; i < modifier; ++i) + if (mask & (1 << i)) + ++valueIndex; + + return m_itemData->Modifiers[valueIndex]; } void Item::SetModifier(ItemModifier modifier, uint32 value) { - ApplyModFlag(ITEM_FIELD_MODIFIERS_MASK, 1 << modifier, value != 0); - SetDynamicValue(ITEM_DYNAMIC_FIELD_MODIFIERS, modifier, value); + uint32 valueIndex = 0; + uint32 mask = m_itemData->ModifiersMask; + for (uint32 i = 0; i < modifier; ++i) + if (mask & (1 << i)) + ++valueIndex; + + if (value) + { + if (mask & (1 << modifier)) + return; + + SetUpdateFieldFlagValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ModifiersMask), 1 << modifier); + InsertDynamicUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Modifiers), valueIndex) = value; + } + else + { + if (!(mask & (1 << modifier))) + return; + + RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ModifiersMask), 1 << modifier); + RemoveDynamicUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Modifiers), valueIndex); + } } uint32 Item::GetVisibleEntry(Player const* owner) const { ItemModifier transmogModifier = ITEM_MODIFIER_TRANSMOG_APPEARANCE_ALL_SPECS; - if (HasFlag(ITEM_FIELD_MODIFIERS_MASK, AppearanceModifierMaskSpecSpecific)) + if (*m_itemData->ModifiersMask & AppearanceModifierMaskSpecSpecific) transmogModifier = AppearanceModifierSlotBySpec[owner->GetActiveTalentGroup()]; if (ItemModifiedAppearanceEntry const* transmog = sItemModifiedAppearanceStore.LookupEntry(GetModifier(transmogModifier))) @@ -2354,7 +2325,7 @@ uint32 Item::GetVisibleEntry(Player const* owner) const uint16 Item::GetVisibleAppearanceModId(Player const* owner) const { ItemModifier transmogModifier = ITEM_MODIFIER_TRANSMOG_APPEARANCE_ALL_SPECS; - if (HasFlag(ITEM_FIELD_MODIFIERS_MASK, AppearanceModifierMaskSpecSpecific)) + if (*m_itemData->ModifiersMask & AppearanceModifierMaskSpecSpecific) transmogModifier = AppearanceModifierSlotBySpec[owner->GetActiveTalentGroup()]; if (ItemModifiedAppearanceEntry const* transmog = sItemModifiedAppearanceStore.LookupEntry(GetModifier(transmogModifier))) @@ -2366,7 +2337,7 @@ uint16 Item::GetVisibleAppearanceModId(Player const* owner) const uint32 Item::GetVisibleEnchantmentId(Player const* owner) const { ItemModifier illusionModifier = ITEM_MODIFIER_ENCHANT_ILLUSION_ALL_SPECS; - if (HasFlag(ITEM_FIELD_MODIFIERS_MASK, IllusionModifierMaskSpecSpecific)) + if (*m_itemData->ModifiersMask & IllusionModifierMaskSpecSpecific) illusionModifier = IllusionModifierSlotBySpec[owner->GetActiveTalentGroup()]; if (uint32 enchantIllusion = GetModifier(illusionModifier)) @@ -2385,48 +2356,72 @@ uint16 Item::GetVisibleItemVisual(Player const* owner) const void Item::AddBonuses(uint32 bonusListID) { - if (HasDynamicValue(ITEM_DYNAMIC_FIELD_BONUSLIST_IDS, bonusListID)) + if (std::find(m_itemData->BonusListIDs->begin(), m_itemData->BonusListIDs->end(), bonusListID) != m_itemData->BonusListIDs->end()) return; if (DB2Manager::ItemBonusList const* bonuses = sDB2Manager.GetItemBonusList(bonusListID)) { - AddDynamicValue(ITEM_DYNAMIC_FIELD_BONUSLIST_IDS, bonusListID); + std::vector<int32> bonusListIDs = m_itemData->BonusListIDs; + bonusListIDs.push_back(bonusListID); + SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::BonusListIDs), std::move(bonusListIDs)); for (ItemBonusEntry const* bonus : *bonuses) _bonusData.AddBonus(bonus->Type, bonus->Value); - SetUInt32Value(ITEM_FIELD_APPEARANCE_MOD_ID, _bonusData.AppearanceModID); + SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ItemAppearanceModID), _bonusData.AppearanceModID); } } -DynamicFieldStructuredView<ItemDynamicFieldArtifactPowers> Item::GetArtifactPowers() const +void Item::SetBonuses(std::vector<int32> bonusListIDs) +{ + SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::BonusListIDs), std::move(bonusListIDs)); + + for (int32 bonusListID : *m_itemData->BonusListIDs) + if (DB2Manager::ItemBonusList const* bonuses = sDB2Manager.GetItemBonusList(bonusListID)) + for (ItemBonusEntry const* bonus : *bonuses) + _bonusData.AddBonus(bonus->Type, bonus->Value); + + SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ItemAppearanceModID), _bonusData.AppearanceModID); +} + +void Item::ClearBonuses() { - return GetDynamicStructuredValues<ItemDynamicFieldArtifactPowers>(ITEM_DYNAMIC_FIELD_ARTIFACT_POWERS); + SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::BonusListIDs), std::vector<int32>()); + _bonusData.Initialize(GetTemplate()); + SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ItemAppearanceModID), _bonusData.AppearanceModID); } -ItemDynamicFieldArtifactPowers const* Item::GetArtifactPower(uint32 artifactPowerId) const +UF::ArtifactPower const* Item::GetArtifactPower(uint32 artifactPowerId) const { auto indexItr = m_artifactPowerIdToIndex.find(artifactPowerId); if (indexItr != m_artifactPowerIdToIndex.end()) - return GetDynamicStructuredValue<ItemDynamicFieldArtifactPowers>(ITEM_DYNAMIC_FIELD_ARTIFACT_POWERS, indexItr->second); + return &m_itemData->ArtifactPowers[indexItr->second]; return nullptr; } -void Item::SetArtifactPower(ItemDynamicFieldArtifactPowers const* artifactPower, bool createIfMissing /*= false*/) +void Item::AddArtifactPower(ArtifactPowerLoadInfo const* artifactPower) +{ + uint16 index = uint16(m_artifactPowerIdToIndex.size()); + m_artifactPowerIdToIndex[artifactPower->ArtifactPowerId] = index; + + UF::ArtifactPower& powerField = AddDynamicUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ArtifactPowers)); + powerField.ArtifactPowerID = artifactPower->ArtifactPowerId; + powerField.PurchasedRank = artifactPower->PurchasedRank; + powerField.CurrentRankWithBonus = artifactPower->CurrentRankWithBonus; +} + +void Item::SetArtifactPower(uint16 artifactPowerId, uint8 purchasedRank, uint8 currentRankWithBonus) { - auto indexItr = m_artifactPowerIdToIndex.find(artifactPower->ArtifactPowerId); - uint16 index; + auto indexItr = m_artifactPowerIdToIndex.find(artifactPowerId); if (indexItr != m_artifactPowerIdToIndex.end()) - index = indexItr->second; - else { - if (!createIfMissing) - return; + SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData) + .ModifyValue(&UF::ItemData::ArtifactPowers, indexItr->second) + .ModifyValue(&UF::ArtifactPower::PurchasedRank), purchasedRank); - index = uint16(m_artifactPowerIdToIndex.size()); - m_artifactPowerIdToIndex[artifactPower->ArtifactPowerId] = index; + SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData) + .ModifyValue(&UF::ItemData::ArtifactPowers, indexItr->second) + .ModifyValue(&UF::ArtifactPower::CurrentRankWithBonus), currentRankWithBonus); } - - SetDynamicStructuredValue(ITEM_DYNAMIC_FIELD_ARTIFACT_POWERS, index, artifactPower); } void Item::InitArtifactPowers(uint8 artifactId, uint8 artifactTier) @@ -2439,19 +2434,19 @@ void Item::InitArtifactPowers(uint8 artifactId, uint8 artifactTier) if (m_artifactPowerIdToIndex.find(artifactPower->ID) != m_artifactPowerIdToIndex.end()) continue; - ItemDynamicFieldArtifactPowers powerData; + ArtifactPowerLoadInfo powerData; memset(&powerData, 0, sizeof(powerData)); powerData.ArtifactPowerId = artifactPower->ID; powerData.PurchasedRank = 0; powerData.CurrentRankWithBonus = (artifactPower->Flags & ARTIFACT_POWER_FLAG_FIRST) == ARTIFACT_POWER_FLAG_FIRST ? 1 : 0; - SetArtifactPower(&powerData, true); + AddArtifactPower(&powerData); } } uint32 Item::GetTotalPurchasedArtifactPowers() const { uint32 purchasedRanks = 0; - for (ItemDynamicFieldArtifactPowers const& power : GetArtifactPowers()) + for (UF::ArtifactPower const& power : m_itemData->ArtifactPowers) purchasedRanks += power.PurchasedRank; return purchasedRanks; @@ -2466,40 +2461,52 @@ void Item::ApplyArtifactPowerEnchantmentBonuses(EnchantmentSlot slot, uint32 enc switch (enchant->Effect[i]) { case ITEM_ENCHANTMENT_TYPE_ARTIFACT_POWER_BONUS_RANK_BY_TYPE: - for (ItemDynamicFieldArtifactPowers const& artifactPower : GetArtifactPowers()) + for (uint32 artifactPowerIndex = 0; artifactPowerIndex < m_itemData->ArtifactPowers.size(); ++artifactPowerIndex) { - if (uint32(sArtifactPowerStore.AssertEntry(artifactPower.ArtifactPowerId)->Label) == enchant->EffectArg[i]) + UF::ArtifactPower const& artifactPower = m_itemData->ArtifactPowers[artifactPowerIndex]; + if (uint32(sArtifactPowerStore.AssertEntry(artifactPower.ArtifactPowerID)->Label) == enchant->EffectArg[i]) { - ItemDynamicFieldArtifactPowers newPower = artifactPower; + uint8 newRank = artifactPower.CurrentRankWithBonus; if (apply) - newPower.CurrentRankWithBonus += enchant->EffectPointsMin[i]; + newRank += enchant->EffectPointsMin[i]; else - newPower.CurrentRankWithBonus -= enchant->EffectPointsMin[i]; + newRank -= enchant->EffectPointsMin[i]; - if (IsEquipped()) - if (ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower.ArtifactPowerId, newPower.CurrentRankWithBonus ? newPower.CurrentRankWithBonus - 1 : 0)) - owner->ApplyArtifactPowerRank(this, artifactPowerRank, newPower.CurrentRankWithBonus != 0); + SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData) + .ModifyValue(&UF::ItemData::ArtifactPowers, artifactPowerIndex) + .ModifyValue(&UF::ArtifactPower::CurrentRankWithBonus), newRank); - SetArtifactPower(&newPower); + if (IsEquipped()) + if (ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower.ArtifactPowerID, newRank ? newRank - 1 : 0)) + owner->ApplyArtifactPowerRank(this, artifactPowerRank, newRank != 0); } } break; case ITEM_ENCHANTMENT_TYPE_ARTIFACT_POWER_BONUS_RANK_BY_ID: - if (ItemDynamicFieldArtifactPowers const* artifactPower = GetArtifactPower(enchant->EffectArg[i])) + { + auto indexItr = m_artifactPowerIdToIndex.find(enchant->EffectArg[i]); + uint16 index; + if (indexItr != m_artifactPowerIdToIndex.end()) + index = indexItr->second; + + if (uint16 const* artifactPowerIndex = Trinity::Containers::MapGetValuePtr(m_artifactPowerIdToIndex, enchant->EffectArg[i])) { - ItemDynamicFieldArtifactPowers newPower = *artifactPower; + uint8 newRank = m_itemData->ArtifactPowers[*artifactPowerIndex].CurrentRankWithBonus; if (apply) - newPower.CurrentRankWithBonus += enchant->EffectPointsMin[i]; + newRank += enchant->EffectPointsMin[i]; else - newPower.CurrentRankWithBonus -= enchant->EffectPointsMin[i]; + newRank -= enchant->EffectPointsMin[i]; - if (IsEquipped()) - if (ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower->ArtifactPowerId, newPower.CurrentRankWithBonus ? newPower.CurrentRankWithBonus - 1 : 0)) - owner->ApplyArtifactPowerRank(this, artifactPowerRank, newPower.CurrentRankWithBonus != 0); + SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData) + .ModifyValue(&UF::ItemData::ArtifactPowers, *artifactPowerIndex) + .ModifyValue(&UF::ArtifactPower::CurrentRankWithBonus), newRank); - SetArtifactPower(&newPower); + if (IsEquipped()) + if (ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(m_itemData->ArtifactPowers[*artifactPowerIndex].ArtifactPowerID, newRank ? newRank - 1 : 0)) + owner->ApplyArtifactPowerRank(this, artifactPowerRank, newRank != 0); } break; + } case ITEM_ENCHANTMENT_TYPE_ARTIFACT_POWER_BONUS_RANK_PICKER: if (slot >= SOCK_ENCHANTMENT_SLOT && slot <= SOCK_ENCHANTMENT_SLOT_3 && _bonusData.GemRelicType[slot - SOCK_ENCHANTMENT_SLOT] != -1) { @@ -2508,21 +2515,24 @@ void Item::ApplyArtifactPowerEnchantmentBonuses(EnchantmentSlot slot, uint32 enc PlayerConditionEntry const* playerCondition = sPlayerConditionStore.LookupEntry(artifactPowerPicker->PlayerConditionID); if (!playerCondition || sConditionMgr->IsPlayerMeetingCondition(owner, playerCondition)) { - for (ItemDynamicFieldArtifactPowers const& artifactPower : GetArtifactPowers()) + for (uint32 artifactPowerIndex = 0; artifactPowerIndex < m_itemData->ArtifactPowers.size(); ++artifactPowerIndex) { - if (sArtifactPowerStore.AssertEntry(artifactPower.ArtifactPowerId)->Label == _bonusData.GemRelicType[slot - SOCK_ENCHANTMENT_SLOT]) + UF::ArtifactPower const& artifactPower = m_itemData->ArtifactPowers[artifactPowerIndex]; + if (sArtifactPowerStore.AssertEntry(artifactPower.ArtifactPowerID)->Label == _bonusData.GemRelicType[slot - SOCK_ENCHANTMENT_SLOT]) { - ItemDynamicFieldArtifactPowers newPower = artifactPower; + uint8 newRank = artifactPower.CurrentRankWithBonus; if (apply) - newPower.CurrentRankWithBonus += enchant->EffectPointsMin[i]; + newRank += enchant->EffectPointsMin[i]; else - newPower.CurrentRankWithBonus -= enchant->EffectPointsMin[i]; + newRank -= enchant->EffectPointsMin[i]; - if (IsEquipped()) - if (ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower.ArtifactPowerId, newPower.CurrentRankWithBonus ? newPower.CurrentRankWithBonus - 1 : 0)) - owner->ApplyArtifactPowerRank(this, artifactPowerRank, newPower.CurrentRankWithBonus != 0); + SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData) + .ModifyValue(&UF::ItemData::ArtifactPowers, artifactPowerIndex) + .ModifyValue(&UF::ArtifactPower::CurrentRankWithBonus), newRank); - SetArtifactPower(&newPower); + if (IsEquipped()) + if (ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower.ArtifactPowerID, newRank ? newRank - 1 : 0)) + owner->ApplyArtifactPowerRank(this, artifactPowerRank, newRank != 0); } } } @@ -2566,7 +2576,7 @@ void Item::GiveArtifactXp(uint64 amount, Item* sourceItem, uint32 artifactCatego amount = 5 * (amount / 5); } - SetUInt64Value(ITEM_FIELD_ARTIFACT_XP, GetUInt64Value(ITEM_FIELD_ARTIFACT_XP) + amount); + SetArtifactXP(m_itemData->ArtifactXP + amount); WorldPackets::Artifact::ArtifactXpGain artifactXpGain; artifactXpGain.ArtifactGUID = GetGUID(); diff --git a/src/server/game/Entities/Item/Item.h b/src/server/game/Entities/Item/Item.h index 39d4c7fe166..16184639970 100644 --- a/src/server/game/Entities/Item/Item.h +++ b/src/server/game/Entities/Item/Item.h @@ -108,15 +108,14 @@ private: } _state; }; -#pragma pack(push, 1) -struct ItemDynamicFieldArtifactPowers +struct ArtifactPowerLoadInfo { uint32 ArtifactPowerId; uint8 PurchasedRank; uint8 CurrentRankWithBonus; - uint16 Padding; }; +#pragma pack(push, 1) struct ItemDynamicFieldGems { uint32 ItemId; @@ -141,23 +140,43 @@ class TC_GAME_API Item : public Object ItemTemplate const* GetTemplate() const; BonusData const* GetBonus() const { return &_bonusData; } - ObjectGuid GetOwnerGUID() const { return GetGuidValue(ITEM_FIELD_OWNER); } - void SetOwnerGUID(ObjectGuid guid) { SetGuidValue(ITEM_FIELD_OWNER, guid); } + ObjectGuid GetOwnerGUID() const { return m_itemData->Owner; } + void SetOwnerGUID(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Owner), guid); } + ObjectGuid GetContainedIn() const { return m_itemData->ContainedIn; } + void SetContainedIn(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ContainedIn), guid); } + ObjectGuid GetCreator() const { return m_itemData->Creator; } + void SetCreator(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Creator), guid); } + ObjectGuid GetGiftCreator() const { return m_itemData->GiftCreator; } + void SetGiftCreator(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::GiftCreator), guid); } Player* GetOwner() const; + void SetExpiration(uint32 expiration) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Expiration), expiration); } + ItemBondingType GetBonding() const { return _bonusData.Bonding; } - void SetBinding(bool val) { ApplyModFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_SOULBOUND, val); } - bool IsSoulBound() const { return HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_SOULBOUND); } + void SetBinding(bool val) + { + if (val) + AddItemFlag(ITEM_FIELD_FLAG_SOULBOUND); + else + RemoveItemFlag(ITEM_FIELD_FLAG_SOULBOUND); + } + bool HasItemFlag(ItemFieldFlags flag) const { return (*m_itemData->DynamicFlags & flag) != 0; } + void AddItemFlag(ItemFieldFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::DynamicFlags), flags); } + void RemoveItemFlag(ItemFieldFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::DynamicFlags), flags); } + void SetItemFlags(ItemFieldFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::DynamicFlags), flags); } + bool IsSoulBound() const { return HasItemFlag(ITEM_FIELD_FLAG_SOULBOUND); } bool IsBoundAccountWide() const { return (GetTemplate()->GetFlags() & ITEM_FLAG_IS_BOUND_TO_ACCOUNT) != 0; } bool IsBattlenetAccountBound() const { return (GetTemplate()->GetFlags2() & ITEM_FLAG2_BNET_ACCOUNT_TRADE_OK) != 0; } bool IsBindedNotWith(Player const* player) const; bool IsBoundByEnchant() const; virtual void SaveToDB(SQLTransaction& trans); virtual bool LoadFromDB(ObjectGuid::LowType guid, ObjectGuid ownerGuid, Field* fields, uint32 entry); - void LoadArtifactData(Player* owner, uint64 xp, uint32 artifactAppearanceId, uint32 artifactTier, std::vector<ItemDynamicFieldArtifactPowers>& powers); // must be called after LoadFromDB to have gems (relics) initialized + void LoadArtifactData(Player* owner, uint64 xp, uint32 artifactAppearanceId, uint32 artifactTier, std::vector<ArtifactPowerLoadInfo>& powers); // must be called after LoadFromDB to have gems (relics) initialized void CheckArtifactRelicSlotUnlock(Player const* owner); void AddBonuses(uint32 bonusListID); + void SetBonuses(std::vector<int32> bonusListIDs); + void ClearBonuses(); static void DeleteFromDB(SQLTransaction& trans, ObjectGuid::LowType itemGuid); virtual void DeleteFromDB(SQLTransaction& trans); @@ -178,11 +197,12 @@ class TC_GAME_API Item : public Object Bag* ToBag() { if (IsBag()) return reinterpret_cast<Bag*>(this); else return NULL; } const Bag* ToBag() const { if (IsBag()) return reinterpret_cast<const Bag*>(this); else return NULL; } - bool IsLocked() const { return !HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_UNLOCKED); } + bool IsLocked() const { return !HasItemFlag(ITEM_FIELD_FLAG_UNLOCKED); } bool IsBag() const { return GetTemplate()->GetInventoryType() == INVTYPE_BAG; } bool IsCurrencyToken() const { return GetTemplate()->IsCurrencyToken(); } bool IsNotEmptyBag() const; - bool IsBroken() const { return GetUInt32Value(ITEM_FIELD_MAXDURABILITY) > 0 && GetUInt32Value(ITEM_FIELD_DURABILITY) == 0; } + bool IsBroken() const { return *m_itemData->MaxDurability > 0 && *m_itemData->Durability == 0; } + void SetDurability(uint32 durability) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Durability), durability); } bool CanBeTraded(bool mail = false, bool trade = false) const; void SetInTrade(bool b = true) { mb_in_trade = b; } bool IsInTrade() const { return mb_in_trade; } @@ -194,7 +214,7 @@ class TC_GAME_API Item : public Object bool IsLimitedToAnotherMapOrZone(uint32 cur_mapId, uint32 cur_zoneId) const; bool GemsFitSockets() const; - uint32 GetCount() const { return GetUInt32Value(ITEM_FIELD_STACK_COUNT); } + uint32 GetCount() const { return m_itemData->StackCount; } void SetCount(uint32 value); uint32 GetMaxStackCount() const { return GetTemplate()->GetMaxStackSize(); } uint8 GetGemCountWithID(uint32 GemID) const; @@ -214,20 +234,16 @@ class TC_GAME_API Item : public Object uint32 GetSkill(); // RandomPropertyId (signed but stored as unsigned) - int32 GetItemRandomPropertyId() const { return GetInt32Value(ITEM_FIELD_RANDOM_PROPERTIES_ID); } - uint32 GetItemSuffixFactor() const { return GetUInt32Value(ITEM_FIELD_PROPERTY_SEED); } void SetItemRandomProperties(ItemRandomEnchantmentId const& randomPropId); - void UpdateItemSuffixFactor(); ItemRandomEnchantmentId GetItemRandomEnchantmentId() const { return m_randomEnchantment; } void SetEnchantment(EnchantmentSlot slot, uint32 id, uint32 duration, uint32 charges, ObjectGuid caster = ObjectGuid::Empty); void SetEnchantmentDuration(EnchantmentSlot slot, uint32 duration, Player* owner); void SetEnchantmentCharges(EnchantmentSlot slot, uint32 charges); void ClearEnchantment(EnchantmentSlot slot); - uint32 GetEnchantmentId(EnchantmentSlot slot) const { return GetUInt32Value(ITEM_FIELD_ENCHANTMENT + slot*MAX_ENCHANTMENT_OFFSET + ENCHANTMENT_ID_OFFSET);} - uint32 GetEnchantmentDuration(EnchantmentSlot slot) const { return GetUInt32Value(ITEM_FIELD_ENCHANTMENT + slot*MAX_ENCHANTMENT_OFFSET + ENCHANTMENT_DURATION_OFFSET);} - uint32 GetEnchantmentCharges(EnchantmentSlot slot) const { return GetUInt32Value(ITEM_FIELD_ENCHANTMENT + slot*MAX_ENCHANTMENT_OFFSET + ENCHANTMENT_CHARGES_OFFSET);} - DynamicFieldStructuredView<ItemDynamicFieldGems> GetGems() const; - ItemDynamicFieldGems const* GetGem(uint16 slot) const; + uint32 GetEnchantmentId(EnchantmentSlot slot) const { return m_itemData->Enchantment[slot].ID; } + uint32 GetEnchantmentDuration(EnchantmentSlot slot) const { return m_itemData->Enchantment[slot].Duration; } + uint32 GetEnchantmentCharges(EnchantmentSlot slot) const { return m_itemData->Enchantment[slot].Charges; } + UF::SocketedGem const* GetGem(uint16 slot) const; void SetGem(uint16 slot, ItemDynamicFieldGems const* gem, uint32 gemScalingLevel); std::string const& GetText() const { return m_text; } @@ -237,10 +253,11 @@ class TC_GAME_API Item : public Object void SendTimeUpdate(Player* owner); void UpdateDuration(Player* owner, uint32 diff); + void SetCreatePlayedTime(uint32 createPlayedTime) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::CreatePlayedTime), createPlayedTime); } // spell charges (signed but stored as unsigned) - int32 GetSpellCharges(uint8 index/*0..5*/ = 0) const { return GetInt32Value(ITEM_FIELD_SPELL_CHARGES + index); } - void SetSpellCharges(uint8 index/*0..5*/, int32 value) { SetInt32Value(ITEM_FIELD_SPELL_CHARGES + index, value); } + int32 GetSpellCharges(uint8 index/*0..5*/ = 0) const { return m_itemData->SpellCharges[index]; } + void SetSpellCharges(uint8 index/*0..5*/, int32 value) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::SpellCharges, index), value); } Loot loot; bool m_lootGenerated; @@ -270,8 +287,8 @@ class TC_GAME_API Item : public Object int32 GetItemStatType(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_STATS); return _bonusData.ItemStatType[index]; } int32 GetItemStatValue(uint32 index, Player const* owner) const; SocketColor GetSocketColor(uint32 index) const { ASSERT(index < MAX_ITEM_PROTO_SOCKETS); return SocketColor(_bonusData.SocketColor[index]); } - uint32 GetAppearanceModId() const { return GetUInt32Value(ITEM_FIELD_APPEARANCE_MOD_ID); } - void SetAppearanceModId(uint32 appearanceModId) { SetUInt32Value(ITEM_FIELD_APPEARANCE_MOD_ID, appearanceModId); } + uint32 GetAppearanceModId() const { return m_itemData->ItemAppearanceModID; } + void SetAppearanceModId(uint32 appearanceModId) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ItemAppearanceModID), appearanceModId); } uint32 GetArmor(Player const* owner) const { return GetTemplate()->GetArmor(GetItemLevel(owner)); } void GetDamage(Player const* owner, float& minDamage, float& maxDamage) const { GetTemplate()->GetDamage(GetItemLevel(owner), minDamage, maxDamage); } uint32 GetDisplayId(Player const* owner) const; @@ -302,7 +319,11 @@ class TC_GAME_API Item : public Object bool CheckSoulboundTradeExpire(); void BuildUpdate(UpdateDataMapType&) override; - void BuildDynamicValuesUpdate(uint8 updatetype, ByteBuffer* data, Player* target) const override; + UF::UpdateFieldFlag GetUpdateFieldFlagsFor(Player const* target) const override; + void BuildValuesCreate(ByteBuffer* data, Player const* target) const override; + void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override; + void BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override; + void ClearUpdateMask(bool remove) override; void AddToObjectUpdate() override; void RemoveFromObjectUpdate() override; @@ -322,23 +343,31 @@ class TC_GAME_API Item : public Object uint32 GetVisibleEnchantmentId(Player const* owner) const; uint16 GetVisibleItemVisual(Player const* owner) const; - uint32 GetModifier(ItemModifier modifier) const; void SetModifier(ItemModifier modifier, uint32 value); ObjectGuid GetChildItem() const { return m_childItem; } void SetChildItem(ObjectGuid childItem) { m_childItem = childItem; } - DynamicFieldStructuredView<ItemDynamicFieldArtifactPowers> GetArtifactPowers() const; - ItemDynamicFieldArtifactPowers const* GetArtifactPower(uint32 artifactPowerId) const; - void SetArtifactPower(ItemDynamicFieldArtifactPowers const* artifactPower, bool createIfMissing = false); + UF::ArtifactPower const* GetArtifactPower(uint32 artifactPowerId) const; + void AddArtifactPower(ArtifactPowerLoadInfo const* artifactPower); + void SetArtifactPower(uint16 artifactPowerId, uint8 purchasedRank, uint8 currentRankWithBonus); void InitArtifactPowers(uint8 artifactId, uint8 artifactTier); uint32 GetTotalPurchasedArtifactPowers() const; void ApplyArtifactPowerEnchantmentBonuses(EnchantmentSlot slot, uint32 enchantId, bool apply, Player* owner); void CopyArtifactDataFromParent(Item* parent); + void SetArtifactXP(uint64 xp) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::ArtifactXP), xp); } void GiveArtifactXp(uint64 amount, Item* sourceItem, uint32 artifactCategoryId); + + void SetContext(int32 context) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Context), context); } + + void SetPetitionId(uint32 petitionId) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Enchantment, 0).ModifyValue(&UF::ItemEnchantment::ID), petitionId); } + void SetPetitionNumSignatures(uint32 signatures) { SetUpdateFieldValue(m_values.ModifyValue(&Item::m_itemData).ModifyValue(&UF::ItemData::Enchantment, 0).ModifyValue(&UF::ItemEnchantment::Duration), signatures); } + + UF::UpdateField<UF::ItemData, 0, TYPEID_ITEM> m_itemData; + protected: BonusData _bonusData; diff --git a/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp b/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp index f0ff4af5b64..7e75ab991d5 100644 --- a/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp +++ b/src/server/game/Entities/Item/ItemEnchantmentMgr.cpp @@ -186,18 +186,6 @@ ItemRandomEnchantmentId GenerateItemRandomPropertyId(uint32 item_id) return GetItemEnchantMod(itemProto->GetRandomSuffix(), ItemRandomEnchantmentType::Suffix); } -uint32 GenerateEnchSuffixFactor(uint32 item_id) -{ - ItemTemplate const* itemProto = sObjectMgr->GetItemTemplate(item_id); - - if (!itemProto) - return 0; - if (!itemProto->GetRandomSuffix()) - return 0; - - return GetRandomPropertyPoints(itemProto->GetBaseItemLevel(), itemProto->GetQuality(), itemProto->GetInventoryType(), itemProto->GetSubClass()); -} - TC_GAME_API uint32 GetRandomPropertyPoints(uint32 itemLevel, uint32 quality, uint32 inventoryType, uint32 subClass) { uint32 propIndex; diff --git a/src/server/game/Entities/Item/ItemEnchantmentMgr.h b/src/server/game/Entities/Item/ItemEnchantmentMgr.h index 90fdeec6f83..91e208cbeb7 100644 --- a/src/server/game/Entities/Item/ItemEnchantmentMgr.h +++ b/src/server/game/Entities/Item/ItemEnchantmentMgr.h @@ -39,7 +39,6 @@ struct ItemRandomEnchantmentId TC_GAME_API void LoadRandomEnchantmentsTable(); TC_GAME_API ItemRandomEnchantmentId GenerateItemRandomPropertyId(uint32 item_id); -TC_GAME_API uint32 GenerateEnchSuffixFactor(uint32 item_id); TC_GAME_API uint32 GetRandomPropertyPoints(uint32 itemLevel, uint32 quality, uint32 inventoryType, uint32 subclass); #endif diff --git a/src/server/game/Entities/Item/ItemTemplate.cpp b/src/server/game/Entities/Item/ItemTemplate.cpp index 69560dc6e8b..3207cdbb146 100644 --- a/src/server/game/Entities/Item/ItemTemplate.cpp +++ b/src/server/game/Entities/Item/ItemTemplate.cpp @@ -241,9 +241,9 @@ bool ItemTemplate::IsUsableByLootSpecialization(Player const* player, bool alway if (GetFlags() & ITEM_FLAG_IS_BOUND_TO_ACCOUNT && alwaysAllowBoundToAccount) return true; - uint32 spec = player->GetUInt32Value(ACTIVE_PLAYER_FIELD_LOOT_SPEC_ID); + uint32 spec = player->GetLootSpecId(); if (!spec) - spec = player->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID); + spec = player->GetPrimarySpecialization(); if (!spec) spec = player->GetDefaultSpecId(); diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index ca25867df39..1b65a041fdc 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -43,7 +43,6 @@ #include "Transport.h" #include "Unit.h" #include "UpdateData.h" -#include "UpdateFieldFlags.h" #include "Util.h" #include "VMapFactory.h" #include "Vehicle.h" @@ -61,19 +60,12 @@ constexpr float VisibilityDistances[AsUnderlyingType(VisibilityDistanceType::Max MAX_VISIBILITY_DISTANCE }; -Object::Object() +Object::Object() : m_values(this) { m_objectTypeId = TYPEID_OBJECT; m_objectType = TYPEMASK_OBJECT; m_updateFlag.Clear(); - m_uint32Values = nullptr; - _dynamicValues = nullptr; - _dynamicChangesArrayMask = nullptr; - m_valuesCount = 0; - _dynamicValuesCount = 0; - _fieldNotifyFlags = UF_FLAG_DYNAMIC; - m_inWorld = false; m_objectUpdated = false; } @@ -108,46 +100,12 @@ Object::~Object() TC_LOG_FATAL("misc", "Object::~Object %s deleted but still in update list!!", GetGUID().ToString().c_str()); ABORT(); } - - delete[] m_uint32Values; - m_uint32Values = nullptr; - - delete[] _dynamicValues; - _dynamicValues = nullptr; - - delete[] _dynamicChangesArrayMask; - _dynamicChangesArrayMask = nullptr; -} - -void Object::_InitValues() -{ - m_uint32Values = new uint32[m_valuesCount]; - memset(m_uint32Values, 0, m_valuesCount * sizeof(uint32)); - - _changesMask.resize(m_valuesCount); - _dynamicChangesMask.resize(_dynamicValuesCount); - if (_dynamicValuesCount) - { - _dynamicValues = new std::vector<uint32>[_dynamicValuesCount]; - _dynamicChangesArrayMask = new std::vector<uint8>[_dynamicValuesCount]; - } - - m_objectUpdated = false; } void Object::_Create(ObjectGuid const& guid) { - if (!m_uint32Values) _InitValues(); - - SetGuidValue(OBJECT_FIELD_GUID, guid); -} - -std::string Object::_ConcatFields(uint16 startIndex, uint16 size) const -{ - std::ostringstream ss; - for (uint16 index = 0; index < size; ++index) - ss << GetUInt32Value(index + startIndex) << ' '; - return ss.str(); + m_objectUpdated = false; + m_guid = guid; } void Object::AddToWorld() @@ -155,8 +113,6 @@ void Object::AddToWorld() if (m_inWorld) return; - ASSERT(m_uint32Values); - m_inWorld = true; // synchronize values mirror with values array (changes will send in updatecreate opcode any way @@ -259,11 +215,9 @@ void Object::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) c buf << uint8(updateType); buf << GetGUID(); buf << uint8(objectType); - buf << uint32(objectTypeMask); BuildMovementUpdate(&buf, flags); - BuildValuesUpdate(updateType, &buf, target); - BuildDynamicValuesUpdate(updateType, &buf, target); + BuildValuesCreate(&buf, target); data->AddUpdateBlock(buf); } @@ -281,15 +235,26 @@ void Object::SendUpdateToPlayer(Player* player) player->SendDirectMessage(&packet); } -void Object::BuildValuesUpdateBlockForPlayer(UpdateData* data, Player* target) const +void Object::BuildValuesUpdateBlockForPlayer(UpdateData* data, Player const* target) const +{ + ByteBuffer buf(500); + + buf << uint8(UPDATETYPE_VALUES); + buf << GetGUID(); + + BuildValuesUpdate(&buf, target); + + data->AddUpdateBlock(buf); +} + +void Object::BuildValuesUpdateBlockForPlayerWithFlag(UpdateData* data, UF::UpdateFieldFlag flags, Player const* target) const { ByteBuffer buf(500); buf << uint8(UPDATETYPE_VALUES); buf << GetGUID(); - BuildValuesUpdate(UPDATETYPE_VALUES, &buf, target); - BuildDynamicValuesUpdate(UPDATETYPE_VALUES, &buf, target); + BuildValuesUpdateWithFlag(&buf, flags, target); data->AddUpdateBlock(buf); } @@ -310,50 +275,6 @@ void Object::DestroyForPlayer(Player* target) const target->SendDirectMessage(&packet); } -int32 Object::GetInt32Value(uint16 index) const -{ - ASSERT(index < m_valuesCount || PrintIndexError(index, false)); - return m_int32Values[index]; -} - -uint32 Object::GetUInt32Value(uint16 index) const -{ - ASSERT(index < m_valuesCount || PrintIndexError(index, false)); - return m_uint32Values[index]; -} - -uint64 Object::GetUInt64Value(uint16 index) const -{ - ASSERT(index + 1 < m_valuesCount || PrintIndexError(index, false)); - return *((uint64*)&(m_uint32Values[index])); -} - -float Object::GetFloatValue(uint16 index) const -{ - ASSERT(index < m_valuesCount || PrintIndexError(index, false)); - return m_floatValues[index]; -} - -uint8 Object::GetByteValue(uint16 index, uint8 offset) const -{ - ASSERT(index < m_valuesCount || PrintIndexError(index, false)); - ASSERT(offset < 4); - return *(((uint8*)&m_uint32Values[index])+offset); -} - -uint16 Object::GetUInt16Value(uint16 index, uint8 offset) const -{ - ASSERT(index < m_valuesCount || PrintIndexError(index, false)); - ASSERT(offset < 2); - return *(((uint16*)&m_uint32Values[index])+offset); -} - -ObjectGuid const& Object::GetGuidValue(uint16 index) const -{ - ASSERT(index + 1 < m_valuesCount || PrintIndexError(index, false)); - return *((ObjectGuid*)&(m_uint32Values[index])); -} - void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags) const { std::vector<uint32> const* PauseTimes = nullptr; @@ -829,75 +750,18 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags) const } } -void Object::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) const +UF::UpdateFieldFlag Object::GetUpdateFieldFlagsFor(Player const* /*target*/) const { - if (!target) - return; - - std::size_t blockCount = UpdateMask::GetBlockCount(m_valuesCount); - - uint32* flags = NULL; - uint32 visibleFlag = GetUpdateFieldData(target, flags); - ASSERT(flags); - - *data << uint8(blockCount); - std::size_t maskPos = data->wpos(); - data->resize(data->size() + blockCount * sizeof(UpdateMask::BlockType)); - - for (uint16 index = 0; index < m_valuesCount; ++index) - { - if (_fieldNotifyFlags & flags[index] || - ((updateType == UPDATETYPE_VALUES ? _changesMask[index] : m_uint32Values[index]) && (flags[index] & visibleFlag))) - { - UpdateMask::SetUpdateBit(data->contents() + maskPos, index); - *data << m_uint32Values[index]; - } - } + return UF::UpdateFieldFlag::None; } -void Object::BuildDynamicValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) const +void Object::BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag /*flags*/, Player const* /*target*/) const { - if (!target) - return; - - 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); - - *data << uint8(blockCount); - std::size_t maskPos = data->wpos(); - data->resize(data->size() + blockCount * sizeof(UpdateMask::BlockType)); - - for (uint16 index = 0; index < valueCount; ++index) - { - std::vector<uint32> const& values = _dynamicValues[index]; - if (_fieldNotifyFlags & flags[index] || - ((updateType == UPDATETYPE_VALUES ? _dynamicChangesMask[index] != UpdateMask::UNCHANGED : !values.empty()) && (flags[index] & visibleFlag))) - { - UpdateMask::SetUpdateBit(data->contents() + maskPos, index); - - std::size_t arrayBlockCount = UpdateMask::GetBlockCount(values.size()); - *data << uint16(UpdateMask::EncodeDynamicFieldChangeType(arrayBlockCount, _dynamicChangesMask[index], updateType)); - if (_dynamicChangesMask[index] == UpdateMask::VALUE_AND_SIZE_CHANGED && updateType == UPDATETYPE_VALUES) - *data << uint32(values.size()); + std::size_t sizePos = data->wpos(); + *data << uint32(0); + *data << uint32(0); - std::size_t arrayMaskPos = data->wpos(); - data->resize(data->size() + arrayBlockCount * sizeof(UpdateMask::BlockType)); - for (std::size_t v = 0; v < values.size(); ++v) - { - if (updateType != UPDATETYPE_VALUES || _dynamicChangesArrayMask[index][v]) - { - UpdateMask::SetUpdateBit(data->contents() + arrayMaskPos, v); - *data << uint32(values[v]); - } - } - } - } + data->put<uint32>(sizePos, data->wpos() - sizePos - 4); } void Object::AddToObjectUpdateIfNeeded() @@ -911,10 +775,7 @@ void Object::AddToObjectUpdateIfNeeded() void Object::ClearUpdateMask(bool remove) { - memset(_changesMask.data(), 0, _changesMask.size()); - _dynamicChangesMask.assign(_dynamicChangesMask.size(), UpdateMask::UNCHANGED); - for (uint32 i = 0; i < _dynamicValuesCount; ++i) - memset(_dynamicChangesArrayMask[i].data(), 0, _dynamicChangesArrayMask[i].size()); + m_values.ClearChangesMask(&Object::m_objectData); if (m_objectUpdated) { @@ -938,599 +799,6 @@ void Object::BuildFieldsUpdate(Player* player, UpdateDataMapType& data_map) cons BuildValuesUpdateBlockForPlayer(&iter->second, iter->first); } -uint32 Object::GetUpdateFieldData(Player const* target, uint32*& flags) const -{ - uint32 visibleFlag = UF_FLAG_PUBLIC; - - if (target == this) - visibleFlag |= UF_FLAG_PRIVATE; - - switch (GetTypeId()) - { - case TYPEID_ITEM: - case TYPEID_CONTAINER: - 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; - case TYPEID_UNIT: - case TYPEID_PLAYER: - { - Player* plr = ToUnit()->GetCharmerOrOwnerPlayerOrPlayerItself(); - flags = UnitUpdateFieldFlags; - if (ToUnit()->GetOwnerGUID() == target->GetGUID()) - visibleFlag |= UF_FLAG_OWNER; - - if (HasFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_SPECIALINFO)) - if (ToUnit()->HasAuraTypeWithCaster(SPELL_AURA_EMPATHY, target->GetGUID())) - visibleFlag |= UF_FLAG_SPECIAL_INFO; - - if (plr && plr->IsInSameRaidWith(target)) - visibleFlag |= UF_FLAG_PARTY_MEMBER; - break; - } - case TYPEID_GAMEOBJECT: - flags = GameObjectUpdateFieldFlags; - if (ToGameObject()->GetOwnerGUID() == target->GetGUID()) - visibleFlag |= UF_FLAG_OWNER; - break; - case TYPEID_DYNAMICOBJECT: - flags = DynamicObjectUpdateFieldFlags; - if (ToDynObject()->GetCasterGUID() == target->GetGUID()) - visibleFlag |= UF_FLAG_OWNER; - break; - case TYPEID_CORPSE: - flags = CorpseUpdateFieldFlags; - if (ToCorpse()->GetOwnerGUID() == target->GetGUID()) - visibleFlag |= UF_FLAG_OWNER; - break; - case TYPEID_AREATRIGGER: - flags = AreaTriggerUpdateFieldFlags; - break; - case TYPEID_SCENEOBJECT: - flags = SceneObjectUpdateFieldFlags; - break; - case TYPEID_CONVERSATION: - flags = ConversationUpdateFieldFlags; - break; - case TYPEID_OBJECT: - case TYPEID_ACTIVE_PLAYER: - ABORT(); - break; - } - - return visibleFlag; -} - -uint32 Object::GetDynamicUpdateFieldData(Player const* target, uint32*& flags) const -{ - uint32 visibleFlag = UF_FLAG_PUBLIC; - - if (target == this) - visibleFlag |= UF_FLAG_PRIVATE; - - switch (GetTypeId()) - { - 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; - break; - case TYPEID_UNIT: - case TYPEID_PLAYER: - { - Player* plr = ToUnit()->GetCharmerOrOwnerPlayerOrPlayerItself(); - flags = UnitDynamicUpdateFieldFlags; - if (ToUnit()->GetOwnerGUID() == target->GetGUID()) - visibleFlag |= UF_FLAG_OWNER; - - if (HasFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_SPECIALINFO)) - if (ToUnit()->HasAuraTypeWithCaster(SPELL_AURA_EMPATHY, target->GetGUID())) - visibleFlag |= UF_FLAG_SPECIAL_INFO; - - if (plr && plr->IsInSameRaidWith(target)) - visibleFlag |= UF_FLAG_PARTY_MEMBER; - break; - } - case TYPEID_GAMEOBJECT: - flags = GameObjectDynamicUpdateFieldFlags; - break; - case TYPEID_CONVERSATION: - flags = ConversationDynamicUpdateFieldFlags; - - if (ToConversation()->GetCreatorGuid() == target->GetGUID()) - visibleFlag |= UF_FLAG_0x100; - break; - default: - flags = nullptr; - break; - } - - return visibleFlag; -} - -void Object::_LoadIntoDataField(std::string const& data, uint32 startOffset, uint32 count) -{ - if (data.empty()) - return; - - Tokenizer tokens(data, ' ', count); - - if (tokens.size() != count) - return; - - for (uint32 index = 0; index < count; ++index) - { - m_uint32Values[startOffset + index] = atoul(tokens[index]); - _changesMask[startOffset + index] = 1; - } -} - -void Object::SetInt32Value(uint16 index, int32 value) -{ - ASSERT(index < m_valuesCount || PrintIndexError(index, true)); - - if (m_int32Values[index] != value) - { - m_int32Values[index] = value; - _changesMask[index] = 1; - - AddToObjectUpdateIfNeeded(); - } -} - -void Object::SetUInt32Value(uint16 index, uint32 value) -{ - ASSERT(index < m_valuesCount || PrintIndexError(index, true)); - - if (m_uint32Values[index] != value) - { - m_uint32Values[index] = value; - _changesMask[index] = 1; - - AddToObjectUpdateIfNeeded(); - } -} - -void Object::UpdateUInt32Value(uint16 index, uint32 value) -{ - ASSERT(index < m_valuesCount || PrintIndexError(index, true)); - - m_uint32Values[index] = value; - _changesMask[index] = 1; -} - -void Object::SetUInt64Value(uint16 index, uint64 value) -{ - ASSERT(index + 1 < m_valuesCount || PrintIndexError(index, true)); - if (*((uint64*)&(m_uint32Values[index])) != value) - { - m_uint32Values[index] = PAIR64_LOPART(value); - m_uint32Values[index + 1] = PAIR64_HIPART(value); - _changesMask[index] = 1; - _changesMask[index + 1] = 1; - - AddToObjectUpdateIfNeeded(); - } -} - -bool Object::AddGuidValue(uint16 index, ObjectGuid const& value) -{ - ASSERT(index + 3 < m_valuesCount || PrintIndexError(index, true)); - if (!value.IsEmpty() && ((ObjectGuid*)&(m_uint32Values[index]))->IsEmpty()) - { - *((ObjectGuid*)&(m_uint32Values[index])) = value; - _changesMask[index] = 1; - _changesMask[index + 1] = 1; - _changesMask[index + 2] = 1; - _changesMask[index + 3] = 1; - - AddToObjectUpdateIfNeeded(); - return true; - } - - return false; -} - -bool Object::RemoveGuidValue(uint16 index, ObjectGuid const& value) -{ - ASSERT(index + 3 < m_valuesCount || PrintIndexError(index, true)); - if (!value.IsEmpty() && *((ObjectGuid*)&(m_uint32Values[index])) == value) - { - ((ObjectGuid*)&(m_uint32Values[index]))->Clear(); - _changesMask[index] = 1; - _changesMask[index + 1] = 1; - _changesMask[index + 2] = 1; - _changesMask[index + 3] = 1; - - AddToObjectUpdateIfNeeded(); - return true; - } - - return false; -} - -void Object::SetFloatValue(uint16 index, float value) -{ - ASSERT(index < m_valuesCount || PrintIndexError(index, true)); - - if (m_floatValues[index] != value) - { - m_floatValues[index] = value; - _changesMask[index] = 1; - - AddToObjectUpdateIfNeeded(); - } -} - -void Object::SetByteValue(uint16 index, uint8 offset, uint8 value) -{ - ASSERT(index < m_valuesCount || PrintIndexError(index, true)); - - if (offset > 3) - { - TC_LOG_ERROR("misc", "Object::SetByteValue: wrong offset %u", offset); - return; - } - - if (uint8(m_uint32Values[index] >> (offset * 8)) != value) - { - m_uint32Values[index] &= ~uint32(uint32(0xFF) << (offset * 8)); - m_uint32Values[index] |= uint32(uint32(value) << (offset * 8)); - _changesMask[index] = 1; - - AddToObjectUpdateIfNeeded(); - } -} - -void Object::SetUInt16Value(uint16 index, uint8 offset, uint16 value) -{ - ASSERT(index < m_valuesCount || PrintIndexError(index, true)); - - if (offset > 1) - { - TC_LOG_ERROR("misc", "Object::SetUInt16Value: wrong offset %u", offset); - return; - } - - if (uint16(m_uint32Values[index] >> (offset * 16)) != value) - { - m_uint32Values[index] &= ~uint32(uint32(0xFFFF) << (offset * 16)); - m_uint32Values[index] |= uint32(uint32(value) << (offset * 16)); - _changesMask[index] = 1; - - AddToObjectUpdateIfNeeded(); - } -} - -void Object::SetGuidValue(uint16 index, ObjectGuid const& value) -{ - ASSERT(index + 3 < m_valuesCount || PrintIndexError(index, true)); - if (*((ObjectGuid*)&(m_uint32Values[index])) != value) - { - *((ObjectGuid*)&(m_uint32Values[index])) = value; - _changesMask[index] = 1; - _changesMask[index + 1] = 1; - _changesMask[index + 2] = 1; - _changesMask[index + 3] = 1; - - AddToObjectUpdateIfNeeded(); - } -} - -void Object::SetStatFloatValue(uint16 index, float value) -{ - if (value < 0) - value = 0.0f; - - SetFloatValue(index, value); -} - -void Object::SetStatInt32Value(uint16 index, int32 value) -{ - if (value < 0) - value = 0; - - SetUInt32Value(index, uint32(value)); -} - -void Object::ApplyModUInt32Value(uint16 index, int32 val, bool apply) -{ - int32 cur = GetUInt32Value(index); - cur += (apply ? val : -val); - if (cur < 0) - cur = 0; - SetUInt32Value(index, cur); -} - -void Object::ApplyModInt32Value(uint16 index, int32 val, bool apply) -{ - int32 cur = GetInt32Value(index); - cur += (apply ? val : -val); - SetInt32Value(index, cur); -} - -void Object::ApplyModUInt16Value(uint16 index, uint8 offset, int16 val, bool apply) -{ - int16 cur = GetUInt16Value(index, offset); - cur += (apply ? val : -val); - if (cur < 0) - cur = 0; - SetUInt16Value(index, offset, cur); -} - -void Object::ApplyModSignedFloatValue(uint16 index, float val, bool apply) -{ - float cur = GetFloatValue(index); - cur += (apply ? val : -val); - SetFloatValue(index, cur); -} - -void Object::ApplyPercentModFloatValue(uint16 index, float val, bool apply) -{ - float value = GetFloatValue(index); - ApplyPercentModFloatVar(value, val, apply); - SetFloatValue(index, value); -} - -void Object::ApplyModPositiveFloatValue(uint16 index, float val, bool apply) -{ - float cur = GetFloatValue(index); - cur += (apply ? val : -val); - if (cur < 0) - cur = 0; - SetFloatValue(index, cur); -} - -void Object::SetFlag(uint16 index, uint32 newFlag) -{ - ASSERT(index < m_valuesCount || PrintIndexError(index, true)); - uint32 oldval = m_uint32Values[index]; - uint32 newval = oldval | newFlag; - - if (oldval != newval) - { - m_uint32Values[index] = newval; - _changesMask[index] = 1; - - AddToObjectUpdateIfNeeded(); - } -} - -void Object::RemoveFlag(uint16 index, uint32 oldFlag) -{ - ASSERT(index < m_valuesCount || PrintIndexError(index, true)); - ASSERT(m_uint32Values); - - uint32 oldval = m_uint32Values[index]; - uint32 newval = oldval & ~oldFlag; - - if (oldval != newval) - { - m_uint32Values[index] = newval; - _changesMask[index] = 1; - - AddToObjectUpdateIfNeeded(); - } -} - -void Object::ToggleFlag(uint16 index, uint32 flag) -{ - if (HasFlag(index, flag)) - RemoveFlag(index, flag); - else - SetFlag(index, flag); -} - -bool Object::HasFlag(uint16 index, uint32 flag) const -{ - if (index >= m_valuesCount && !PrintIndexError(index, false)) - return false; - - return (m_uint32Values[index] & flag) != 0; -} - -void Object::ApplyModFlag(uint16 index, uint32 flag, bool apply) -{ - if (apply) SetFlag(index, flag); else RemoveFlag(index, flag); -} - -void Object::SetByteFlag(uint16 index, uint8 offset, uint8 newFlag) -{ - ASSERT(index < m_valuesCount || PrintIndexError(index, true)); - - if (offset > 3) - { - TC_LOG_ERROR("misc", "Object::SetByteFlag: wrong offset %u", offset); - return; - } - - if (!(uint8(m_uint32Values[index] >> (offset * 8)) & newFlag)) - { - m_uint32Values[index] |= uint32(uint32(newFlag) << (offset * 8)); - _changesMask[index] = 1; - - AddToObjectUpdateIfNeeded(); - } -} - -void Object::RemoveByteFlag(uint16 index, uint8 offset, uint8 oldFlag) -{ - ASSERT(index < m_valuesCount || PrintIndexError(index, true)); - - if (offset > 3) - { - TC_LOG_ERROR("misc", "Object::RemoveByteFlag: wrong offset %u", offset); - return; - } - - if (uint8(m_uint32Values[index] >> (offset * 8)) & oldFlag) - { - m_uint32Values[index] &= ~uint32(uint32(oldFlag) << (offset * 8)); - _changesMask[index] = 1; - - AddToObjectUpdateIfNeeded(); - } -} - -void Object::ToggleByteFlag(uint16 index, uint8 offset, uint8 flag) -{ - if (HasByteFlag(index, offset, flag)) - RemoveByteFlag(index, offset, flag); - else - SetByteFlag(index, offset, flag); -} - -bool Object::HasByteFlag(uint16 index, uint8 offset, uint8 flag) const -{ - ASSERT(index < m_valuesCount || PrintIndexError(index, false)); - ASSERT(offset < 4); - return (((uint8*)&m_uint32Values[index])[offset] & flag) != 0; -} - -void Object::SetFlag64(uint16 index, uint64 newFlag) -{ - uint64 oldval = GetUInt64Value(index); - uint64 newval = oldval | newFlag; - SetUInt64Value(index, newval); -} - -void Object::RemoveFlag64(uint16 index, uint64 oldFlag) -{ - uint64 oldval = GetUInt64Value(index); - uint64 newval = oldval & ~oldFlag; - SetUInt64Value(index, newval); -} - -void Object::ToggleFlag64(uint16 index, uint64 flag) -{ - if (HasFlag64(index, flag)) - RemoveFlag64(index, flag); - else - SetFlag64(index, flag); -} - -bool Object::HasFlag64(uint16 index, uint64 flag) const -{ - ASSERT(index < m_valuesCount || PrintIndexError(index, false)); - return (GetUInt64Value(index) & flag) != 0; -} - -void Object::ApplyModFlag64(uint16 index, uint64 flag, bool apply) -{ - if (apply) SetFlag64(index, flag); else RemoveFlag64(index, flag); -} - -std::vector<uint32> const& Object::GetDynamicValues(uint16 index) const -{ - ASSERT(index < _dynamicValuesCount || PrintIndexError(index, false)); - return _dynamicValues[index]; -} - -uint32 Object::GetDynamicValue(uint16 index, uint16 offset) const -{ - ASSERT(index < _dynamicValuesCount || PrintIndexError(index, false)); - if (offset >= _dynamicValues[index].size()) - return 0; - return _dynamicValues[index][offset]; -} - -bool Object::HasDynamicValue(uint16 index, uint32 value) -{ - ASSERT(index < _dynamicValuesCount || PrintIndexError(index, false)); - std::vector<uint32>& values = _dynamicValues[index]; - for (std::size_t i = 0; i < values.size(); ++i) - if (values[i] == value) - return true; - - return false; -} - -void Object::AddDynamicValue(uint16 index, uint32 value) -{ - ASSERT(index < _dynamicValuesCount || PrintIndexError(index, false)); - SetDynamicValue(index, _dynamicValues[index].size(), value); -} - -void Object::RemoveDynamicValue(uint16 index, uint32 value) -{ - ASSERT(index < _dynamicValuesCount || PrintIndexError(index, false)); - - // TODO: Research if this is blizzlike to just set value to 0 - std::vector<uint32>& values = _dynamicValues[index]; - for (std::size_t i = 0; i < values.size(); ++i) - { - if (values[i] == value) - { - values[i] = 0; - _dynamicChangesMask[index] = UpdateMask::VALUE_CHANGED; - _dynamicChangesArrayMask[index][i] = 1; - - AddToObjectUpdateIfNeeded(); - } - } -} - -void Object::ClearDynamicValue(uint16 index) -{ - ASSERT(index < _dynamicValuesCount || PrintIndexError(index, false)); - - if (!_dynamicValues[index].empty()) - { - _dynamicValues[index].clear(); - _dynamicChangesMask[index] = UpdateMask::VALUE_AND_SIZE_CHANGED; - _dynamicChangesArrayMask[index].clear(); - - AddToObjectUpdateIfNeeded(); - } -} - -void Object::SetDynamicValue(uint16 index, uint16 offset, uint32 value) -{ - ASSERT(index < _dynamicValuesCount || PrintIndexError(index, false)); - - UpdateMask::DynamicFieldChangeType changeType = UpdateMask::VALUE_CHANGED; - std::vector<uint32>& values = _dynamicValues[index]; - if (values.size() <= offset) - { - values.resize(offset + 1); - changeType = UpdateMask::VALUE_AND_SIZE_CHANGED; - } - - if (_dynamicChangesArrayMask[index].size() <= offset) - _dynamicChangesArrayMask[index].resize((offset / 32 + 1) * 32); - - if (values[offset] != value || changeType == UpdateMask::VALUE_AND_SIZE_CHANGED) - { - values[offset] = value; - _dynamicChangesMask[index] = changeType; - _dynamicChangesArrayMask[index][offset] = 1; - - AddToObjectUpdateIfNeeded(); - } -} - -bool Object::PrintIndexError(uint32 index, bool set) const -{ - TC_LOG_ERROR("misc", "Attempt %s non-existed value field: %u (count: %u) for object typeid: %u type mask: %u", (set ? "set value to" : "get value from"), index, m_valuesCount, GetTypeId(), m_objectType); - - // ASSERT must fail after function call - return false; -} - void MovementInfo::OutDebug() { TC_LOG_DEBUG("misc", "MOVEMENT INFO"); @@ -2332,12 +1600,6 @@ bool WorldObject::CanDetectStealthOf(WorldObject const* obj, bool checkAlert) co return true; } -void Object::ForceValuesUpdateAtIndex(uint32 i) -{ - _changesMask[i] = 1; - AddToObjectUpdateIfNeeded(); -} - void WorldObject::SendMessageToSet(WorldPacket const* data, bool self) const { if (IsInWorld()) @@ -2388,8 +1650,6 @@ void WorldObject::ResetMap() void WorldObject::AddObjectToRemoveList() { - ASSERT(m_uint32Values); - Map* map = FindMap(); if (!map) { @@ -2480,7 +1740,7 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert if (summoner) PhasingHandler::InheritPhaseShift(summon, summoner); - summon->SetUInt32Value(UNIT_CREATED_BY_SPELL, spellId); + summon->SetCreatedBySpell(spellId); summon->SetHomePosition(pos); @@ -2783,7 +2043,10 @@ void WorldObject::GetContactPoint(const WorldObject* obj, float &x, float &y, fl float WorldObject::GetObjectSize() const { - return (m_valuesCount > UNIT_FIELD_COMBATREACH) ? m_floatValues[UNIT_FIELD_COMBATREACH] : DEFAULT_WORLD_OBJECT_SIZE; + if (Unit const* thisUnit = ToUnit()) + return thisUnit->m_unitData->CombatReach; + + return DEFAULT_WORLD_OBJECT_SIZE; } void WorldObject::MovePosition(Position &pos, float dist, float angle) @@ -3030,7 +2293,7 @@ struct WorldObjectChangeAccumulator { //Caster may be NULL if DynObj is in removelist if (Player* caster = ObjectAccessor::FindPlayer(guid)) - if (caster->GetGuidValue(ACTIVE_PLAYER_FIELD_FARSIGHT) == source->GetGUID()) + if (*caster->m_activePlayerData->FarsightObject == source->GetGUID()) BuildPacket(caster); } } diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 211cb5e221c..00258002f17 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -43,6 +43,7 @@ class DynamicObject; class GameObject; class InstanceScript; class Map; +class Object; class Player; class Scenario; class TempSummon; @@ -83,63 +84,38 @@ struct CreateObjectBits } }; -namespace UpdateMask +namespace UF { - typedef uint32 BlockType; - - enum DynamicFieldChangeType : uint16 - { - UNCHANGED = 0, - VALUE_CHANGED = 0x7FFF, - VALUE_AND_SIZE_CHANGED = 0x8000 - }; - - inline std::size_t GetBlockCount(std::size_t bitCount) - { - using BitsPerBlock = std::integral_constant<std::size_t, sizeof(BlockType) * 8>; - return (bitCount + BitsPerBlock::value - 1) / BitsPerBlock::value; - } - - inline std::size_t EncodeDynamicFieldChangeType(std::size_t blockCount, DynamicFieldChangeType changeType, uint8 updateType) + template<typename T> + inline bool SetUpdateFieldValue(UpdateFieldSetter<T>& setter, typename UpdateFieldSetter<T>::ValueType&& value) { - return blockCount | ((changeType & VALUE_AND_SIZE_CHANGED) * ((3 - updateType /*this part evaluates to 0 if update type is not VALUES*/) / 3)); + return setter.SetValue(std::move(value)); } template<typename T> - inline void SetUpdateBit(T* data, std::size_t bitIndex) + inline typename DynamicUpdateFieldSetter<T>::NewValueType AddDynamicUpdateFieldValue(DynamicUpdateFieldSetter<T>& setter) { - static_assert(std::is_integral<T>::value && std::is_unsigned<T>::value, "Type used for SetUpdateBit data arg is not an unsigned integer"); - using BitsPerBlock = std::integral_constant<std::size_t, sizeof(T) * 8>; - data[bitIndex / BitsPerBlock::value] |= T(1) << (bitIndex % BitsPerBlock::value); + return setter.AddValue(); } -} -// Helper class used to iterate object dynamic fields while interpreting them as a structure instead of raw int array -template<class T> -class DynamicFieldStructuredView -{ -public: - explicit DynamicFieldStructuredView(std::vector<uint32> const& data) : _data(data) { } - - T const* begin() const + template<typename T> + inline typename DynamicUpdateFieldSetter<T>::NewValueType InsertDynamicUpdateFieldValue(DynamicUpdateFieldSetter<T>& setter, uint32 index) { - return reinterpret_cast<T const*>(_data.data()); + return setter.InsertValue(index); } - T const* end() const + template<typename T> + inline void RemoveDynamicUpdateFieldValue(DynamicUpdateFieldSetter<T>& setter, uint32 index) { - return reinterpret_cast<T const*>(_data.data() + _data.size()); + setter.RemoveValue(index); } - std::size_t size() const + template<typename T> + inline void ClearDynamicUpdateFieldValues(DynamicUpdateFieldSetter<T>& setter) { - using BlockCount = std::integral_constant<uint16, sizeof(T) / sizeof(uint32)>; - return _data.size() / BlockCount::value; + setter.Clear(); } - -private: - std::vector<uint32> const& _data; -}; +} class TC_GAME_API Object { @@ -151,12 +127,18 @@ class TC_GAME_API Object virtual void AddToWorld(); virtual void RemoveFromWorld(); - ObjectGuid const& GetGUID() const { return GetGuidValue(OBJECT_FIELD_GUID); } - uint32 GetEntry() const { return GetUInt32Value(OBJECT_FIELD_ENTRY); } - void SetEntry(uint32 entry) { SetUInt32Value(OBJECT_FIELD_ENTRY, entry); } + ObjectGuid const& GetGUID() const { return m_guid; } + uint32 GetEntry() const { return m_objectData->EntryID; } + void SetEntry(uint32 entry) { SetUpdateFieldValue(m_values.ModifyValue(&Object::m_objectData).ModifyValue(&UF::ObjectData::EntryID), entry); } + + float GetObjectScale() const { return m_objectData->Scale; } + virtual void SetObjectScale(float scale) { SetUpdateFieldValue(m_values.ModifyValue(&Object::m_objectData).ModifyValue(&UF::ObjectData::Scale), scale); } - float GetObjectScale() const { return GetFloatValue(OBJECT_FIELD_SCALE_X); } - virtual void SetObjectScale(float scale) { SetFloatValue(OBJECT_FIELD_SCALE_X, scale); } + uint32 GetDynamicFlags() const { return m_objectData->DynamicFlags; } + bool HasDynamicFlag(uint32 flag) const { return (*m_objectData->DynamicFlags & flag) != 0; } + void AddDynamicFlag(uint32 flag) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Object::m_objectData).ModifyValue(&UF::ObjectData::DynamicFlags), flag); } + void RemoveDynamicFlag(uint32 flag) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Object::m_objectData).ModifyValue(&UF::ObjectData::DynamicFlags), flag); } + void SetDynamicFlags(uint32 flag) { SetUpdateFieldValue(m_values.ModifyValue(&Object::m_objectData).ModifyValue(&UF::ObjectData::DynamicFlags), flag); } TypeID GetTypeId() const { return m_objectTypeId; } bool isType(uint16 mask) const { return (mask & m_objectType) != 0; } @@ -164,126 +146,19 @@ class TC_GAME_API Object virtual void BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) const; void SendUpdateToPlayer(Player* player); - void BuildValuesUpdateBlockForPlayer(UpdateData* data, Player* target) const; + void BuildValuesUpdateBlockForPlayer(UpdateData* data, Player const* target) const; + void BuildValuesUpdateBlockForPlayerWithFlag(UpdateData* data, UF::UpdateFieldFlag flags, Player const* target) const; void BuildOutOfRangeUpdateBlock(UpdateData* data) const; virtual void DestroyForPlayer(Player* target) const; - int32 GetInt32Value(uint16 index) const; - uint32 GetUInt32Value(uint16 index) const; - uint64 GetUInt64Value(uint16 index) const; - float GetFloatValue(uint16 index) const; - uint8 GetByteValue(uint16 index, uint8 offset) const; - uint16 GetUInt16Value(uint16 index, uint8 offset) const; - ObjectGuid const& GetGuidValue(uint16 index) const; - - void SetInt32Value(uint16 index, int32 value); - void SetUInt32Value(uint16 index, uint32 value); - void UpdateUInt32Value(uint16 index, uint32 value); - void SetUInt64Value(uint16 index, uint64 value); - void SetFloatValue(uint16 index, float value); - void SetByteValue(uint16 index, uint8 offset, uint8 value); - void SetUInt16Value(uint16 index, uint8 offset, uint16 value); - void SetGuidValue(uint16 index, ObjectGuid const& value); - void SetStatFloatValue(uint16 index, float value); - void SetStatInt32Value(uint16 index, int32 value); - - bool AddGuidValue(uint16 index, ObjectGuid const& value); - bool RemoveGuidValue(uint16 index, ObjectGuid const& value); - - void ApplyModUInt32Value(uint16 index, int32 val, bool apply); - void ApplyModInt32Value(uint16 index, int32 val, bool apply); - void ApplyModUInt16Value(uint16 index, uint8 offset, int16 val, bool apply); - void ApplyModPositiveFloatValue(uint16 index, float val, bool apply); - void ApplyModSignedFloatValue(uint16 index, float val, bool apply); - void ApplyPercentModFloatValue(uint16 index, float val, bool apply); - - void SetFlag(uint16 index, uint32 newFlag); - void RemoveFlag(uint16 index, uint32 oldFlag); - void ToggleFlag(uint16 index, uint32 flag); - bool HasFlag(uint16 index, uint32 flag) const; - void ApplyModFlag(uint16 index, uint32 flag, bool apply); - - void SetByteFlag(uint16 index, uint8 offset, uint8 newFlag); - void RemoveByteFlag(uint16 index, uint8 offset, uint8 newFlag); - void ToggleByteFlag(uint16 index, uint8 offset, uint8 flag); - bool HasByteFlag(uint16 index, uint8 offset, uint8 flag) const; - - void SetFlag64(uint16 index, uint64 newFlag); - void RemoveFlag64(uint16 index, uint64 oldFlag); - void ToggleFlag64(uint16 index, uint64 flag); - bool HasFlag64(uint16 index, uint64 flag) const; - void ApplyModFlag64(uint16 index, uint64 flag, bool apply); - - std::vector<uint32> const& GetDynamicValues(uint16 index) const; - uint32 GetDynamicValue(uint16 index, uint16 offset) const; - bool HasDynamicValue(uint16 index, uint32 value); - void AddDynamicValue(uint16 index, uint32 value); - void RemoveDynamicValue(uint16 index, uint32 value); - void ClearDynamicValue(uint16 index); - void SetDynamicValue(uint16 index, uint16 offset, uint32 value); - - template<class T> - DynamicFieldStructuredView<T> GetDynamicStructuredValues(uint16 index) const - { - static_assert(std::is_standard_layout<T>::value && std::is_trivially_destructible<T>::value, "T used for Object::SetDynamicStructuredValue<T> is not a trivially destructible standard layout type"); - using BlockCount = std::integral_constant<uint16, sizeof(T) / sizeof(uint32)>; - ASSERT(index < _dynamicValuesCount || PrintIndexError(index, false)); - std::vector<uint32> const& values = _dynamicValues[index]; - ASSERT((values.size() % BlockCount::value) == 0, "Dynamic field value count must exactly fit into structure"); - return DynamicFieldStructuredView<T>(values); - } - - template<class T> - T const* GetDynamicStructuredValue(uint16 index, uint16 offset) const - { - static_assert(std::is_standard_layout<T>::value && std::is_trivially_destructible<T>::value, "T used for Object::SetDynamicStructuredValue<T> is not a trivially destructible standard layout type"); - using BlockCount = std::integral_constant<uint16, sizeof(T) / sizeof(uint32)>; - ASSERT(index < _dynamicValuesCount || PrintIndexError(index, false)); - std::vector<uint32> const& values = _dynamicValues[index]; - ASSERT((values.size() % BlockCount::value) == 0, "Dynamic field value count must exactly fit into structure"); - if (offset * BlockCount::value >= values.size()) - return nullptr; - return reinterpret_cast<T const*>(&values[offset * BlockCount::value]); - } - - template<class T> - void SetDynamicStructuredValue(uint16 index, uint16 offset, T const* value) - { - static_assert(std::is_standard_layout<T>::value && std::is_trivially_destructible<T>::value, "T used for Object::SetDynamicStructuredValue<T> is not a trivially destructible standard layout type"); - using BlockCount = std::integral_constant<uint16, sizeof(T) / sizeof(uint32)>; - SetDynamicValue(index, (offset + 1) * BlockCount::value - 1, 0); // reserve space - for (uint16 i = 0; i < BlockCount::value; ++i) - SetDynamicValue(index, offset * BlockCount::value + i, *(reinterpret_cast<uint32 const*>(value) + i)); - } - - template<class T> - void AddDynamicStructuredValue(uint16 index, T const* value) - { - static_assert(std::is_standard_layout<T>::value && std::is_trivially_destructible<T>::value, "T used for Object::SetDynamicStructuredValue<T> is not a trivially destructible standard layout type"); - using BlockCount = std::integral_constant<uint16, sizeof(T) / sizeof(uint32)>; - std::vector<uint32> const& values = _dynamicValues[index]; - uint16 offset = uint16(values.size() / BlockCount::value); - SetDynamicValue(index, (offset + 1) * BlockCount::value - 1, 0); // reserve space - for (uint16 i = 0; i < BlockCount::value; ++i) - SetDynamicValue(index, offset * BlockCount::value + i, *(reinterpret_cast<uint32 const*>(value) + i)); - } - - void ClearUpdateMask(bool remove); - - uint16 GetValuesCount() const { return m_valuesCount; } + virtual void ClearUpdateMask(bool remove); virtual bool hasQuest(uint32 /* quest_id */) const { return false; } virtual bool hasInvolvedQuest(uint32 /* quest_id */) const { return false; } virtual void BuildUpdate(UpdateDataMapType&) { } void BuildFieldsUpdate(Player*, UpdateDataMapType &) const; - void SetFieldNotifyFlag(uint16 flag) { _fieldNotifyFlags |= flag; } - void RemoveFieldNotifyFlag(uint16 flag) { _fieldNotifyFlags &= uint16(~flag); } - - // FG: some hacky helpers - void ForceValuesUpdateAtIndex(uint32); - inline bool IsPlayer() const { return GetTypeId() == TYPEID_PLAYER; } Player* ToPlayer() { if (IsPlayer()) return reinterpret_cast<Player*>(this); else return nullptr; } Player const* ToPlayer() const { if (IsPlayer()) return reinterpret_cast<Player const*>(this); else return nullptr; } @@ -316,43 +191,117 @@ class TC_GAME_API Object Conversation* ToConversation() { if (GetTypeId() == TYPEID_CONVERSATION) return reinterpret_cast<Conversation*>(this); else return nullptr; } Conversation const* ToConversation() const { if (GetTypeId() == TYPEID_CONVERSATION) return reinterpret_cast<Conversation const*>(this); else return nullptr; } + UF::UpdateFieldHolder m_values; + UF::UpdateField<UF::ObjectData, 0, TYPEID_OBJECT> m_objectData; + + template<typename T> + void ForceUpdateFieldChange(UF::UpdateFieldSetter<T> const& /*setter*/) + { + AddToObjectUpdateIfNeeded(); + } + protected: Object(); - void _InitValues(); void _Create(ObjectGuid const& guid); - std::string _ConcatFields(uint16 startIndex, uint16 size) const; - void _LoadIntoDataField(std::string const& data, uint32 startOffset, uint32 count); - uint32 GetUpdateFieldData(Player const* target, uint32*& flags) const; - uint32 GetDynamicUpdateFieldData(Player const* target, uint32*& flags) const; + template<typename T> + void SetUpdateFieldValue(UF::UpdateFieldSetter<T> setter, typename UF::UpdateFieldSetter<T>::ValueType value) + { + if (UF::SetUpdateFieldValue(setter, std::move(value))) + AddToObjectUpdateIfNeeded(); + } - 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; + template<typename T> + void SetUpdateFieldFlagValue(UF::UpdateFieldSetter<T> setter, typename UF::UpdateFieldSetter<T>::ValueType flag) + { + static_assert(std::is_integral<T>::value, "SetUpdateFieldFlagValue must be used with integral types"); + SetUpdateFieldValue(setter, setter.GetValue() | flag); + } - uint16 m_objectType; + template<typename T> + void RemoveUpdateFieldFlagValue(UF::UpdateFieldSetter<T> setter, typename UF::UpdateFieldSetter<T>::ValueType flag) + { + static_assert(std::is_integral<T>::value, "RemoveUpdateFieldFlagValue must be used with integral types"); + SetUpdateFieldValue(setter, setter.GetValue() & ~flag); + } - TypeID m_objectTypeId; - CreateObjectBits m_updateFlag; + template<typename T> + typename UF::DynamicUpdateFieldSetter<T>::NewValueType AddDynamicUpdateFieldValue(UF::DynamicUpdateFieldSetter<T> setter) + { + AddToObjectUpdateIfNeeded(); + return UF::AddDynamicUpdateFieldValue(setter); + } - union + template<typename T> + typename UF::DynamicUpdateFieldSetter<T>::NewValueType InsertDynamicUpdateFieldValue(UF::DynamicUpdateFieldSetter<T> setter, uint32 index) { - int32 *m_int32Values; - uint32 *m_uint32Values; - float *m_floatValues; - }; + AddToObjectUpdateIfNeeded(); + return UF::InsertDynamicUpdateFieldValue(setter, index); + } - std::vector<uint32>* _dynamicValues; + template<typename T> + void RemoveDynamicUpdateFieldValue(UF::DynamicUpdateFieldSetter<T> setter, uint32 index) + { + AddToObjectUpdateIfNeeded(); + UF::RemoveDynamicUpdateFieldValue(setter, index); + } - std::vector<uint8> _changesMask; - std::vector<UpdateMask::DynamicFieldChangeType> _dynamicChangesMask; - std::vector<uint8>* _dynamicChangesArrayMask; + template<typename T> + void ClearDynamicUpdateFieldValues(UF::DynamicUpdateFieldSetter<T> setter) + { + AddToObjectUpdateIfNeeded(); + UF::ClearDynamicUpdateFieldValues(setter); + } - uint16 m_valuesCount; - uint16 _dynamicValuesCount; + // stat system helpers + template<typename T> + void SetUpdateFieldStatValue(UF::UpdateFieldSetter<T> setter, typename UF::UpdateFieldSetter<T>::ValueType value) + { + static_assert(std::is_arithmetic<T>::value, "SetUpdateFieldStatValue must be used with arithmetic types"); + SetUpdateFieldValue(setter, std::max(value, T(0))); + } + + template<typename T> + void ApplyModUpdateFieldValue(UF::UpdateFieldSetter<T> setter, typename UF::UpdateFieldSetter<T>::ValueType mod, bool apply) + { + static_assert(std::is_arithmetic<T>::value, "SetUpdateFieldStatValue must be used with arithmetic types"); + + T value = setter.GetValue(); + if (apply) + value += mod; + else + value -= mod; + + SetUpdateFieldValue(setter, value); + } + + template<typename T> + void ApplyPercentModUpdateFieldValue(UF::UpdateFieldSetter<T> setter, float percent, bool apply) + { + static_assert(std::is_arithmetic<T>::value, "SetUpdateFieldStatValue must be used with arithmetic types"); + + T value = setter.GetValue(); - uint16 _fieldNotifyFlags; + // don't want to include Util.h here + //ApplyPercentModFloatVar(value, percent, apply); + if (percent == -100.0f) + percent = -99.99f; + value *= (apply ? (100.0f + percent) / 100.0f : 100.0f / (100.0f + percent)); + + SetUpdateFieldValue(setter, value); + } + + void BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags) const; + virtual UF::UpdateFieldFlag GetUpdateFieldFlagsFor(Player const* target) const; + virtual void BuildValuesCreate(ByteBuffer* data, Player const* target) const = 0; + virtual void BuildValuesUpdate(ByteBuffer* data, Player const* target) const = 0; + virtual void BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const; + + uint16 m_objectType; + + TypeID m_objectTypeId; + CreateObjectBits m_updateFlag; virtual void AddToObjectUpdate() = 0; virtual void RemoveFromObjectUpdate() = 0; @@ -361,10 +310,9 @@ class TC_GAME_API Object bool m_objectUpdated; private: + ObjectGuid m_guid; bool m_inWorld; - // for output helpfull error messages from asserts - bool PrintIndexError(uint32 index, bool set) const; Object(Object const& right) = delete; Object& operator=(Object const& right) = delete; }; diff --git a/src/server/game/Entities/Object/Position.cpp b/src/server/game/Entities/Object/Position.cpp index 0ec1e401254..dd79adc9792 100644 --- a/src/server/game/Entities/Object/Position.cpp +++ b/src/server/game/Entities/Object/Position.cpp @@ -23,7 +23,7 @@ #include <G3D/g3dmath.h> #include <sstream> -bool Position::operator==(Position const &a) +bool Position::operator==(Position const &a) const { return (G3D::fuzzyEq(a.m_positionX, m_positionX) && G3D::fuzzyEq(a.m_positionY, m_positionY) && diff --git a/src/server/game/Entities/Object/Position.h b/src/server/game/Entities/Object/Position.h index a5d9651d541..b2f8e312766 100644 --- a/src/server/game/Entities/Object/Position.h +++ b/src/server/game/Entities/Object/Position.h @@ -60,9 +60,9 @@ private: float m_orientation; public: - bool operator==(Position const &a); + bool operator==(Position const &a) const; - inline bool operator!=(Position const &a) + inline bool operator!=(Position const &a) const { return !(operator==(a)); } @@ -284,6 +284,9 @@ struct TaggedPosition operator Position() const { return Pos; } + friend bool operator==(TaggedPosition const& left, TaggedPosition const& right) { return left.Pos == right.Pos; } + friend bool operator!=(TaggedPosition const& left, TaggedPosition const& right) { return left.Pos != right.Pos; } + friend ByteBuffer& operator<<(ByteBuffer& buf, TaggedPosition const& tagged) { return buf << Position::ConstStreamer<Tag>(tagged.Pos); } friend ByteBuffer& operator>>(ByteBuffer& buf, TaggedPosition& tagged) { return buf >> Position::Streamer<Tag>(tagged.Pos); } diff --git a/src/server/game/Entities/Object/Updates/UpdateField.cpp b/src/server/game/Entities/Object/Updates/UpdateField.cpp new file mode 100644 index 00000000000..3ebd711e4fa --- /dev/null +++ b/src/server/game/Entities/Object/Updates/UpdateField.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2008-2019 TrinityCore <https://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "UpdateField.h" +#include "ByteBuffer.h" + +void UF::WriteDynamicFieldUpdateMask(std::size_t size, std::vector<uint32> const& updateMask, ByteBuffer& data) +{ + data.WriteBits(size, 32); + if (size > 32) + { + if (data.HasUnfinishedBitPack()) + for (std::size_t block = 0; block < size / 32; ++block) + data.WriteBits(updateMask[block], 32); + else + for (std::size_t block = 0; block < size / 32; ++block) + data << uint32(updateMask[block]); + } + + if (size % 32) + data.WriteBits(updateMask.back(), size % 32); +} diff --git a/src/server/game/Entities/Object/Updates/UpdateField.h b/src/server/game/Entities/Object/Updates/UpdateField.h new file mode 100644 index 00000000000..99a0cce9d8d --- /dev/null +++ b/src/server/game/Entities/Object/Updates/UpdateField.h @@ -0,0 +1,612 @@ +/* + * Copyright (C) 2008-2019 TrinityCore <https://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef UpdateField_h__ +#define UpdateField_h__ + +#include "ObjectGuid.h" +#include "UpdateMask.h" +#include <vector> + +class ByteBuffer; +class Object; + +namespace UF +{ + enum class UpdateFieldFlag : uint8 + { + None = 0, + Owner = 0x01, + PartyMember = 0x02, + UnitAll = 0x04, + Empath = 0x08 + }; + + template<typename T, uint32 BlockBit, uint32 Bit> + class UpdateField; + + template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit> + class UpdateFieldArray; + + template<typename T, uint32 BlockBit, uint32 Bit> + class DynamicUpdateField; + + template<typename T, bool PublicSet> + struct MutableFieldReference; + + struct IsUpdateFieldStructureTag + { + }; + struct HasChangesMaskTag + { + }; + + template<typename T> + struct UpdateFieldSetter + { + using ValueType = T; + + template<typename F> + friend bool SetUpdateFieldValue(UpdateFieldSetter<F>& setter, typename UpdateFieldSetter<F>::ValueType&& value); + + UpdateFieldSetter(T& value) : _value(value) + { + } + + T GetValue() const + { + return _value; + } + + private: + bool SetValue(T value) + { + if (_value != value) + { + _value = std::move(value); + return true; + } + return false; + } + + T& _value; + }; + + // Same as UpdateFieldSetter but with public setter, used to set member fields for values added to dynamic fields + template<typename T> + struct UpdateFieldPublicSetter + { + using ValueType = T; + + UpdateFieldPublicSetter(T& value) : _value(value) + { + } + + T GetValue() const + { + return _value; + } + + void SetValue(T value) + { + _value = std::move(value); + } + + private: + T& _value; + }; + + template<typename T> + struct DynamicUpdateFieldSetter + { + using ValueType = T; + using NewValueType = std::conditional_t<std::is_base_of<HasChangesMaskTag, T>::value, MutableFieldReference<T, true>, T&>; + + template<typename F> + friend typename DynamicUpdateFieldSetter<F>::NewValueType AddDynamicUpdateFieldValue(DynamicUpdateFieldSetter<F>& setter); + + template<typename F> + friend typename DynamicUpdateFieldSetter<F>::NewValueType InsertDynamicUpdateFieldValue(DynamicUpdateFieldSetter<F>& setter, uint32 index); + + template<typename F> + friend void RemoveDynamicUpdateFieldValue(DynamicUpdateFieldSetter<F>& setter, uint32 index); + + template<typename F> + friend void ClearDynamicUpdateFieldValues(DynamicUpdateFieldSetter<F>& setter); + + DynamicUpdateFieldSetter(std::vector<T>& values, std::vector<uint32>& updateMask) : _values(values), _updateMask(updateMask) + { + } + + private: + NewValueType AddValue() + { + MarkChanged(_values.size()); + _values.emplace_back(); + T& value = _values.back(); + MarkNewValue(value, std::is_base_of<HasChangesMaskTag, T>{}); + return { value }; + } + + NewValueType InsertValue(uint32 index) + { + _values.emplace(_values.begin() + index); + for (uint32 i = index; i < _values.size(); ++i) + { + MarkChanged(i); + // also mark all fields of value as changed + MarkNewValue(_values[i], std::is_base_of<HasChangesMaskTag, T>{}); + } + return { _values[index] }; + } + + void RemoveValue(uint32 index) + { + // remove by shifting entire container - client might rely on values being sorted for certain fields + _values.erase(_values.begin() + index); + for (uint32 i = index; i < _values.size(); ++i) + { + MarkChanged(i); + // also mark all fields of value as changed + MarkNewValue(_values[i], std::is_base_of<HasChangesMaskTag, T>{}); + } + if (_values.size() % 32) + _updateMask[UpdateMaskHelpers::GetBlockIndex(_values.size())] &= ~UpdateMaskHelpers::GetBlockFlag(_values.size()); + else + _updateMask.pop_back(); + } + + void Clear() + { + _values.clear(); + _updateMask.clear(); + } + + void MarkChanged(uint32 index) + { + uint32 block = UpdateMaskHelpers::GetBlockIndex(index); + if (block >= _updateMask.size()) + _updateMask.resize(block + 1); + + _updateMask[block] |= UpdateMaskHelpers::GetBlockFlag(index); + } + + void MarkNewValue(T&, std::false_type) + { + } + + void MarkNewValue(T& value, std::true_type) + { + value._changesMask.SetAll(); + } + + std::vector<T>& _values; + std::vector<uint32>& _updateMask; + }; + + template<typename T, bool PublicSet> + struct MutableFieldReference + { + MutableFieldReference(T& value) : _value(value) + { + } + + template<typename V, uint32 BlockBit, uint32 Bit, typename U = T> + std::enable_if_t<std::is_base_of<HasChangesMaskTag, U>::value, + std::conditional_t<std::is_base_of<IsUpdateFieldStructureTag, V>::value, + MutableFieldReference<V, PublicSet>, + std::conditional_t<PublicSet, UpdateFieldPublicSetter<V>, UpdateFieldSetter<V>>>> + ModifyValue(UpdateField<V, BlockBit, Bit>(T:: * field)) + { + _value._changesMask.Set(BlockBit); + _value._changesMask.Set(Bit); + return { (_value.*field)._value }; + } + + template<typename V, std::size_t Size, uint32 Bit, uint32 FirstElementBit, typename U = T> + std::enable_if_t<std::is_base_of<HasChangesMaskTag, U>::value, + std::conditional_t<std::is_base_of<IsUpdateFieldStructureTag, V>::value, + MutableFieldReference<V, PublicSet>, + std::conditional_t<PublicSet, UpdateFieldPublicSetter<V>, UpdateFieldSetter<V>>>> + ModifyValue(UpdateFieldArray<V, Size, Bit, FirstElementBit>(T:: * field), uint32 index) + { + _value._changesMask.Set(Bit); + _value._changesMask.Set(FirstElementBit + index); + return { (_value.*field)._values[index] }; + } + + template<typename V, uint32 BlockBit, uint32 Bit, typename U = T> + std::enable_if_t<std::is_base_of<HasChangesMaskTag, U>::value, DynamicUpdateFieldSetter<V>> + ModifyValue(DynamicUpdateField<V, BlockBit, Bit>(T::* field)) + { + _value._changesMask.Set(BlockBit); + _value._changesMask.Set(Bit); + return { (_value.*field)._values, (_value.*field)._updateMask }; + } + + template<typename V, uint32 BlockBit, uint32 Bit, typename U = T> + std::enable_if_t<std::is_base_of<HasChangesMaskTag, U>::value, + std::conditional_t<std::is_base_of<IsUpdateFieldStructureTag, V>::value, + MutableFieldReference<V, PublicSet>, + std::conditional_t<PublicSet, UpdateFieldPublicSetter<V>, UpdateFieldSetter<V>>>> + ModifyValue(DynamicUpdateField<V, BlockBit, Bit>(T:: * field), uint32 index) + { + if (index >= (_value.*field).size()) + { + // fill with zeros until reaching desired slot + (_value.*field)._values.resize(index + 1); + (_value.*field)._updateMask.resize(((_value.*field)._values.size() + 31) / 32); + } + + _value._changesMask.Set(BlockBit); + _value._changesMask.Set(Bit); + (_value.*field).MarkChanged(index); + return { (_value.*field)._values[index] }; + } + + template<typename V, typename U = T> + std::enable_if_t<!std::is_base_of<HasChangesMaskTag, U>::value && !std::is_array<V>::value, + std::conditional_t<PublicSet, UpdateFieldPublicSetter<V>, UpdateFieldSetter<V>>> + ModifyValue(V(T::* field)) + { + return { _value.*field }; + } + + template<typename V, std::size_t Size, typename U = T> + std::enable_if_t<!std::is_base_of<HasChangesMaskTag, U>::value, + std::conditional_t<PublicSet, UpdateFieldPublicSetter<V>, UpdateFieldSetter<V>>> + ModifyValue(V(T::* field)[Size], uint32 index) + { + return { (_value.*field)[index] }; + } + + private: + T& _value; + }; + + template<std::size_t Bits> + class HasChangesMask : public HasChangesMaskTag + { + template<typename T> + friend struct DynamicUpdateFieldSetter; + + template<typename T, bool PublicSet> + friend struct MutableFieldReference; + + template<typename T, uint32 BlockBit, uint32 Bit> + friend class UpdateField; + + template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit> + friend class UpdateFieldArray; + + template<typename T, uint32 BlockBit, uint32 Bit> + friend class DynamicUpdateField; + + public: + using Base = HasChangesMask<Bits>; + using Mask = UpdateMask<Bits>; + + template<typename Derived, typename T, uint32 BlockBit, uint32 Bit> + MutableFieldReference<T, false> ModifyValue(UpdateField<T, BlockBit, Bit>(Derived::* field)) + { + _changesMask.Set(BlockBit); + _changesMask.Set(Bit); + return { (static_cast<Derived*>(this)->*field)._value }; + } + + template<typename Derived, typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit> + MutableFieldReference<T, false> ModifyValue(UpdateFieldArray<T, Size, Bit, FirstElementBit>(Derived::* field), uint32 index) + { + _changesMask.Set(Bit); + _changesMask.Set(FirstElementBit + index); + return { (static_cast<Derived*>(this)->*field)._values[index] }; + } + + template<typename Derived, typename T, uint32 BlockBit, uint32 Bit> + MutableFieldReference<T, false> ModifyValue(DynamicUpdateField<T, BlockBit, Bit>(Derived::* field)) + { + _changesMask.Set(BlockBit); + _changesMask.Set(Bit); + return { (static_cast<Derived*>(this)->*field)._values }; + } + + template<typename Derived, typename T, uint32 BlockBit, uint32 Bit> + MutableFieldReference<T, false> ModifyValue(DynamicUpdateField<T, BlockBit, Bit>(Derived::* field), uint32 index) + { + DynamicUpdateField<T, BlockBit, Bit>& uf = (static_cast<Derived*>(this)->*field); + if (index >= uf.size()) + { + // fill with zeros until reaching desired slot + uf._values.resize(index + 1); + uf._updateMask.resize((uf._values.size() + 31) / 32); + } + + _changesMask.Set(BlockBit); + _changesMask.Set(Bit); + (static_cast<Derived*>(this)->*field).MarkChanged(index); + return { uf._values[index] }; + } + + template<typename Derived, typename T, uint32 BlockBit, uint32 Bit> + void ClearChanged(UpdateField<T, BlockBit, Bit>(Derived::*)) + { + _changesMask.Reset(Bit); + } + + template<typename Derived, typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit> + void ClearChanged(UpdateFieldArray<T, Size, Bit, FirstElementBit>(Derived::*), uint32 index) + { + _changesMask.Reset(Bit); + _changesMask.Reset(FirstElementBit + index); + } + + template<typename Derived, typename T, uint32 BlockBit, uint32 Bit> + void ClearChanged(DynamicUpdateField<T, BlockBit, Bit>(Derived::* field), uint32 index) + { + _changesMask.Reset(Bit); + (static_cast<Derived*>(this)->*field).ClearChanged(index); + } + + protected: + template<typename T, uint32 BlockBit, uint32 Bit> + void ClearChangesMask(UpdateField<T, BlockBit, Bit>& field) + { + ClearChangesMask(field, std::is_base_of<HasChangesMaskTag, T>{}); + } + + template<typename T, uint32 BlockBit, uint32 Bit> + void ClearChangesMask(UpdateField<T, BlockBit, Bit>& field, std::false_type) { } + + template<typename T, uint32 BlockBit, uint32 Bit> + void ClearChangesMask(UpdateField<T, BlockBit, Bit>& field, std::true_type) + { + field._value.ClearChangesMask(); + } + + template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit> + void ClearChangesMask(UpdateFieldArray<T, Size, Bit, FirstElementBit>& field) + { + ClearChangesMask(field, std::is_base_of<HasChangesMaskTag, T>{}); + } + + template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit> + void ClearChangesMask(UpdateFieldArray<T, Size, Bit, FirstElementBit>& field, std::false_type) { } + + template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit> + void ClearChangesMask(UpdateFieldArray<T, Size, Bit, FirstElementBit>& field, std::true_type) + { + for (uint32 i = 0; i < Size; ++i) + field._values[i].ClearChangesMask(); + } + + template<typename T, uint32 BlockBit, uint32 Bit> + void ClearChangesMask(DynamicUpdateField<T, BlockBit, Bit>& field) + { + ClearChangesMask(field, std::is_base_of<HasChangesMaskTag, T>{}); + field.ClearChangesMask(); + } + + template<typename T, uint32 BlockBit, uint32 Bit> + void ClearChangesMask(DynamicUpdateField<T, BlockBit, Bit>& field, std::false_type) { } + + template<typename T, uint32 BlockBit, uint32 Bit> + void ClearChangesMask(DynamicUpdateField<T, BlockBit, Bit>& field, std::true_type) + { + for (uint32 i = 0; i < field._values.size(); ++i) + field._values[i].ClearChangesMask(); + } + + UpdateMask<Bits> _changesMask; + }; + + class UpdateFieldHolder + { + public: + explicit UpdateFieldHolder(Object* owner) : _owner(owner) + { + } + + template<typename Derived, typename T, uint32 BlockBit, uint32 Bit> + MutableFieldReference<T, false> ModifyValue(UpdateField<T, BlockBit, Bit>(Derived::* field)) + { + _changesMask.Set(Bit); + return { (static_cast<Derived*>(_owner)->*field)._value }; + } + + template<typename Derived, typename T, uint32 BlockBit, uint32 Bit> + void ClearChangesMask(UpdateField<T, BlockBit, Bit>(Derived::* field)) + { + _changesMask.Reset(Bit); + (static_cast<Derived*>(_owner)->*field)._value.ClearChangesMask(); + } + + uint32 GetChangedObjectTypeMask() const + { + return _changesMask.GetBlock(0); + } + + bool HasChanged(uint32 index) const + { + return _changesMask[index]; + } + + private: + UpdateMask<NUM_CLIENT_OBJECT_TYPES> _changesMask; + Object* _owner; + }; + + template<typename T, uint32 BlockBit, uint32 Bit> + class UpdateField + { + template<typename F, bool PublicSet> + friend struct MutableFieldReference; + + template<std::size_t Bits> + friend class HasChangesMask; + + friend class UpdateFieldHolder; + + public: + using ValueType = T; + + operator T const& () const + { + return _value; + } + T const* operator->() const + { + return &_value; + } + T const& operator*() const + { + return _value; + } + + private: + T _value = {}; + }; + + template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit> + class UpdateFieldArray + { + template<typename F, bool PublicSet> + friend struct MutableFieldReference; + + template<std::size_t Bits> + friend class HasChangesMask; + + public: + using ValueType = T; + + T const* begin() const + { + return std::begin(_values); + } + + T const* end() const + { + return std::end(_values); + } + + T const& operator[](uint32 index) const + { + return _values[index]; + } + + private: + T _values[Size] = {}; + }; + + void WriteDynamicFieldUpdateMask(std::size_t size, std::vector<uint32> const& updateMask, ByteBuffer& data); + + template<typename T, uint32 BlockBit, uint32 Bit> + class DynamicUpdateField + { + template<typename F, bool PublicSet> + friend struct MutableFieldReference; + + template<std::size_t Bits> + friend class HasChangesMask; + + public: + using ValueType = T; + + typename std::vector<T>::const_iterator begin() const + { + return _values.begin(); + } + + typename std::vector<T>::const_iterator end() const + { + return _values.end(); + } + + std::size_t size() const + { + return _values.size(); + } + + T const& operator[](uint32 index) const + { + return _values[index]; + } + + int32 FindIndex(T const& value) const + { + auto itr = std::find(_values.begin(), _values.end(), value); + if (itr != _values.end()) + return int32(std::distance(_values.begin(), itr)); + + return -1; + } + + template<typename Pred> + int32 FindIndexIf(Pred pred) const + { + auto itr = std::find_if(_values.begin(), _values.end(), pred); + if (itr != _values.end()) + return int32(std::distance(_values.begin(), itr)); + + return -1; + } + + bool HasChanged(uint32 index) const + { + return (_updateMask[index / 32] & (1 << (index % 32))) != 0; + } + + void WriteUpdateMask(ByteBuffer& data) const + { + WriteDynamicFieldUpdateMask(_values.size(), _updateMask, data); + } + + private: + void MarkChanged(uint32 index) + { + uint32 block = UpdateMaskHelpers::GetBlockIndex(index); + if (block >= _updateMask.size()) + _updateMask.emplace_back(0); + + _updateMask[block] |= UpdateMaskHelpers::GetBlockFlag(index); + } + + void ClearChanged(uint32 index) + { + uint32 block = UpdateMaskHelpers::GetBlockIndex(index); + if (block >= _updateMask.size()) + _updateMask.emplace_back(0); + + _updateMask[block] &= ~UpdateMaskHelpers::GetBlockFlag(index); + } + + void ClearChangesMask() + { + std::fill(_updateMask.begin(), _updateMask.end(), 0); + } + + std::vector<T> _values; + std::vector<uint32> _updateMask; + }; + + template<typename T> + struct ViewerDependentValueTag + { + using ValueType = T; + }; +} + +#endif // UpdateField_h__ diff --git a/src/server/game/Entities/Object/Updates/UpdateFieldFlags.cpp b/src/server/game/Entities/Object/Updates/UpdateFieldFlags.cpp deleted file mode 100644 index 7b3d1fb2972..00000000000 --- a/src/server/game/Entities/Object/Updates/UpdateFieldFlags.cpp +++ /dev/null @@ -1,6525 +0,0 @@ -/* - * Copyright (C) 2008-2019 TrinityCore <https://www.trinitycore.org/> - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "UpdateFieldFlags.h" - -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_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, // CONTAINER_FIELD_SLOT_1 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+1 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+2 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+3 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+4 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+5 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+6 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+7 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+8 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+9 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+10 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+11 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+12 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+13 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+14 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+15 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+16 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+17 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+18 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+19 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+20 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+21 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+22 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+23 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+24 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+25 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+26 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+27 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+28 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+29 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+30 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+31 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+32 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+33 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+34 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+35 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+36 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+37 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+38 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+39 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+40 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+41 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+42 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+43 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+44 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+45 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+46 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+47 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+48 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+49 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+50 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+51 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+52 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+53 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+54 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+55 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+56 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+57 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+58 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+59 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+60 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+61 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+62 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+63 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+64 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+65 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+66 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+67 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+68 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+69 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+70 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+71 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+72 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+73 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+74 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+75 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+76 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+77 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+78 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+79 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+80 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+81 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+82 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+83 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+84 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+85 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+86 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+87 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+88 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+89 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+90 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+91 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+92 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+93 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+94 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+95 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+96 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+97 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+98 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+99 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+100 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+101 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+102 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+103 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+104 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+105 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+106 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+107 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+108 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+109 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+110 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+111 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+112 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+113 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+114 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+115 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+116 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+117 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+118 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+119 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+120 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+121 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+122 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+123 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+124 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+125 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+126 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+127 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+128 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+129 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+130 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+131 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+132 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+133 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+134 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+135 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+136 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+137 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+138 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+139 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+140 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+141 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+142 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_SLOT_1+143 - UF_FLAG_PUBLIC, // CONTAINER_FIELD_NUM_SLOTS -}; - -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 -}; - -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_DYNAMIC, // OBJECT_FIELD_ENTRY - UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // OBJECT_DYNAMIC_FLAGS - UF_FLAG_PUBLIC, // OBJECT_FIELD_SCALE_X - UF_FLAG_PUBLIC, // UNIT_FIELD_CHARM - UF_FLAG_PUBLIC, // UNIT_FIELD_CHARM+1 - UF_FLAG_PUBLIC, // UNIT_FIELD_CHARM+2 - UF_FLAG_PUBLIC, // UNIT_FIELD_CHARM+3 - UF_FLAG_PUBLIC, // UNIT_FIELD_SUMMON - UF_FLAG_PUBLIC, // UNIT_FIELD_SUMMON+1 - UF_FLAG_PUBLIC, // UNIT_FIELD_SUMMON+2 - UF_FLAG_PUBLIC, // UNIT_FIELD_SUMMON+3 - UF_FLAG_PRIVATE, // UNIT_FIELD_CRITTER - UF_FLAG_PRIVATE, // UNIT_FIELD_CRITTER+1 - UF_FLAG_PRIVATE, // UNIT_FIELD_CRITTER+2 - UF_FLAG_PRIVATE, // UNIT_FIELD_CRITTER+3 - UF_FLAG_PUBLIC, // UNIT_FIELD_CHARMEDBY - UF_FLAG_PUBLIC, // UNIT_FIELD_CHARMEDBY+1 - UF_FLAG_PUBLIC, // UNIT_FIELD_CHARMEDBY+2 - UF_FLAG_PUBLIC, // UNIT_FIELD_CHARMEDBY+3 - UF_FLAG_PUBLIC, // UNIT_FIELD_SUMMONEDBY - UF_FLAG_PUBLIC, // UNIT_FIELD_SUMMONEDBY+1 - UF_FLAG_PUBLIC, // UNIT_FIELD_SUMMONEDBY+2 - UF_FLAG_PUBLIC, // UNIT_FIELD_SUMMONEDBY+3 - UF_FLAG_PUBLIC, // UNIT_FIELD_CREATEDBY - UF_FLAG_PUBLIC, // UNIT_FIELD_CREATEDBY+1 - UF_FLAG_PUBLIC, // UNIT_FIELD_CREATEDBY+2 - UF_FLAG_PUBLIC, // UNIT_FIELD_CREATEDBY+3 - UF_FLAG_PUBLIC, // UNIT_FIELD_DEMON_CREATOR - 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 - UF_FLAG_PUBLIC, // UNIT_FIELD_TARGET+3 - UF_FLAG_PUBLIC, // UNIT_FIELD_BATTLE_PET_COMPANION_GUID - UF_FLAG_PUBLIC, // UNIT_FIELD_BATTLE_PET_COMPANION_GUID+1 - UF_FLAG_PUBLIC, // UNIT_FIELD_BATTLE_PET_COMPANION_GUID+2 - UF_FLAG_PUBLIC, // UNIT_FIELD_BATTLE_PET_COMPANION_GUID+3 - UF_FLAG_PUBLIC, // UNIT_FIELD_BATTLE_PET_DB_ID - UF_FLAG_PUBLIC, // UNIT_FIELD_BATTLE_PET_DB_ID+1 - UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_FIELD_CHANNEL_DATA - UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_FIELD_CHANNEL_DATA+1 - UF_FLAG_PUBLIC, // UNIT_FIELD_SUMMONED_BY_HOME_REALM - UF_FLAG_PUBLIC, // UNIT_FIELD_BYTES_0 - UF_FLAG_PUBLIC, // UNIT_FIELD_DISPLAY_POWER - UF_FLAG_PUBLIC, // UNIT_FIELD_OVERRIDE_DISPLAY_POWER_ID - UF_FLAG_PUBLIC, // UNIT_FIELD_HEALTH - UF_FLAG_PUBLIC, // UNIT_FIELD_HEALTH+1 - UF_FLAG_PUBLIC | UF_FLAG_URGENT_SELF_ONLY, // UNIT_FIELD_POWER - UF_FLAG_PUBLIC | UF_FLAG_URGENT_SELF_ONLY, // UNIT_FIELD_POWER+1 - UF_FLAG_PUBLIC | UF_FLAG_URGENT_SELF_ONLY, // UNIT_FIELD_POWER+2 - UF_FLAG_PUBLIC | UF_FLAG_URGENT_SELF_ONLY, // UNIT_FIELD_POWER+3 - UF_FLAG_PUBLIC | UF_FLAG_URGENT_SELF_ONLY, // UNIT_FIELD_POWER+4 - UF_FLAG_PUBLIC | UF_FLAG_URGENT_SELF_ONLY, // UNIT_FIELD_POWER+5 - UF_FLAG_PUBLIC, // UNIT_FIELD_MAXHEALTH - UF_FLAG_PUBLIC, // UNIT_FIELD_MAXHEALTH+1 - UF_FLAG_PUBLIC, // UNIT_FIELD_MAXPOWER - UF_FLAG_PUBLIC, // UNIT_FIELD_MAXPOWER+1 - UF_FLAG_PUBLIC, // UNIT_FIELD_MAXPOWER+2 - UF_FLAG_PUBLIC, // UNIT_FIELD_MAXPOWER+3 - UF_FLAG_PUBLIC, // UNIT_FIELD_MAXPOWER+4 - UF_FLAG_PUBLIC, // UNIT_FIELD_MAXPOWER+5 - UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNIT_ALL, // UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER - UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNIT_ALL, // UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER+1 - UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNIT_ALL, // UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER+2 - UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNIT_ALL, // UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER+3 - UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNIT_ALL, // UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER+4 - UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNIT_ALL, // UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER+5 - UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNIT_ALL, // UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER - UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNIT_ALL, // UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER+1 - UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNIT_ALL, // UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER+2 - UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNIT_ALL, // UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER+3 - UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_UNIT_ALL, // UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER+4 - 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_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 - UF_FLAG_PUBLIC, // UNIT_VIRTUAL_ITEM_SLOT_ID+2 - UF_FLAG_PUBLIC, // UNIT_VIRTUAL_ITEM_SLOT_ID+3 - UF_FLAG_PUBLIC, // UNIT_VIRTUAL_ITEM_SLOT_ID+4 - UF_FLAG_PUBLIC, // UNIT_VIRTUAL_ITEM_SLOT_ID+5 - UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_FIELD_FLAGS - UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_FIELD_FLAGS_2 - UF_FLAG_PUBLIC | UF_FLAG_URGENT, // UNIT_FIELD_FLAGS_3 - UF_FLAG_PUBLIC, // UNIT_FIELD_AURASTATE - UF_FLAG_PUBLIC, // UNIT_FIELD_BASEATTACKTIME - UF_FLAG_PUBLIC, // UNIT_FIELD_BASEATTACKTIME+1 - UF_FLAG_PRIVATE, // UNIT_FIELD_RANGEDATTACKTIME - 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 - UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_MINOFFHANDDAMAGE - UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_MAXOFFHANDDAMAGE - UF_FLAG_PUBLIC, // UNIT_FIELD_BYTES_1 - UF_FLAG_PUBLIC, // UNIT_FIELD_PETNUMBER - UF_FLAG_PUBLIC, // UNIT_FIELD_PET_NAME_TIMESTAMP - UF_FLAG_OWNER, // UNIT_FIELD_PETEXPERIENCE - UF_FLAG_OWNER, // UNIT_FIELD_PETNEXTLEVELEXP - UF_FLAG_PUBLIC, // UNIT_MOD_CAST_SPEED - UF_FLAG_PUBLIC, // UNIT_MOD_CAST_HASTE - UF_FLAG_PUBLIC, // UNIT_FIELD_MOD_HASTE - UF_FLAG_PUBLIC, // UNIT_FIELD_MOD_RANGED_HASTE - UF_FLAG_PUBLIC, // UNIT_FIELD_MOD_HASTE_REGEN - UF_FLAG_PUBLIC, // UNIT_FIELD_MOD_TIME_RATE - UF_FLAG_PUBLIC, // UNIT_CREATED_BY_SPELL - UF_FLAG_PUBLIC | UF_FLAG_DYNAMIC, // UNIT_NPC_FLAGS - UF_FLAG_PUBLIC | UF_FLAG_DYNAMIC, // UNIT_NPC_FLAGS+1 - UF_FLAG_PUBLIC, // UNIT_NPC_EMOTESTATE - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_STAT - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_STAT+1 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_STAT+2 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_STAT+3 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POSSTAT - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POSSTAT+1 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POSSTAT+2 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POSSTAT+3 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_NEGSTAT - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_NEGSTAT+1 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_NEGSTAT+2 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_NEGSTAT+3 - UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_RESISTANCES - UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_RESISTANCES+1 - UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_RESISTANCES+2 - UF_FLAG_PRIVATE | UF_FLAG_OWNER | UF_FLAG_SPECIAL_INFO, // UNIT_FIELD_RESISTANCES+3 - 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_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 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_ATTACK_POWER - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_ATTACK_POWER_MOD_POS - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_ATTACK_POWER_MOD_NEG - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_ATTACK_POWER_MULTIPLIER - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_RANGED_ATTACK_POWER - 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 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MODIFIER+1 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MODIFIER+2 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MODIFIER+3 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MODIFIER+4 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MODIFIER+5 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MODIFIER+6 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MULTIPLIER - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MULTIPLIER+1 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MULTIPLIER+2 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MULTIPLIER+3 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MULTIPLIER+4 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MULTIPLIER+5 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_POWER_COST_MULTIPLIER+6 - UF_FLAG_PRIVATE | UF_FLAG_OWNER, // UNIT_FIELD_MAXHEALTHMODIFIER - UF_FLAG_PUBLIC, // UNIT_FIELD_HOVERHEIGHT - UF_FLAG_PUBLIC, // UNIT_FIELD_MIN_ITEM_LEVEL_CUTOFF - UF_FLAG_PUBLIC, // UNIT_FIELD_MIN_ITEM_LEVEL - UF_FLAG_PUBLIC, // UNIT_FIELD_MAXITEMLEVEL - UF_FLAG_PUBLIC, // UNIT_FIELD_WILD_BATTLEPET_LEVEL - UF_FLAG_PUBLIC, // UNIT_FIELD_BATTLEPET_COMPANION_NAME_TIMESTAMP - UF_FLAG_PUBLIC, // UNIT_FIELD_INTERACT_SPELLID - UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // UNIT_FIELD_STATE_SPELL_VISUAL_ID - UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // UNIT_FIELD_STATE_ANIM_ID - UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // UNIT_FIELD_STATE_ANIM_KIT_ID - UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // UNIT_FIELD_STATE_WORLD_EFFECT_ID - UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // UNIT_FIELD_STATE_WORLD_EFFECT_ID+1 - UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // UNIT_FIELD_STATE_WORLD_EFFECT_ID+2 - UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // UNIT_FIELD_STATE_WORLD_EFFECT_ID+3 - UF_FLAG_PUBLIC, // UNIT_FIELD_SCALE_DURATION - 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_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 - UF_FLAG_PUBLIC, // PLAYER_DUEL_ARBITER+3 - UF_FLAG_PUBLIC, // PLAYER_WOW_ACCOUNT - UF_FLAG_PUBLIC, // PLAYER_WOW_ACCOUNT+1 - UF_FLAG_PUBLIC, // PLAYER_WOW_ACCOUNT+2 - UF_FLAG_PUBLIC, // PLAYER_WOW_ACCOUNT+3 - UF_FLAG_PUBLIC, // PLAYER_LOOT_TARGET_GUID - UF_FLAG_PUBLIC, // PLAYER_LOOT_TARGET_GUID+1 - UF_FLAG_PUBLIC, // PLAYER_LOOT_TARGET_GUID+2 - UF_FLAG_PUBLIC, // PLAYER_LOOT_TARGET_GUID+3 - UF_FLAG_PUBLIC, // PLAYER_FLAGS - UF_FLAG_PUBLIC, // PLAYER_FLAGS_EX - UF_FLAG_PUBLIC, // PLAYER_GUILDRANK - UF_FLAG_PUBLIC, // PLAYER_GUILDDELETE_DATE - UF_FLAG_PUBLIC, // PLAYER_GUILDLEVEL - UF_FLAG_PUBLIC, // PLAYER_BYTES - UF_FLAG_PUBLIC, // PLAYER_BYTES_2 - UF_FLAG_PUBLIC, // PLAYER_BYTES_3 - UF_FLAG_PUBLIC, // PLAYER_BYTES_4 - UF_FLAG_PUBLIC, // PLAYER_DUEL_TEAM - UF_FLAG_PUBLIC, // PLAYER_GUILD_TIMESTAMP - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+1 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+2 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+3 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+4 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+5 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+6 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+7 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+8 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+9 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+10 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+11 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+12 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+13 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+14 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+15 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+16 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+17 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+18 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+19 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+20 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+21 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+22 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+23 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+24 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+25 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+26 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+27 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+28 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+29 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+30 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+31 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+32 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+33 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+34 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+35 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+36 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+37 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+38 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+39 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+40 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+41 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+42 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+43 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+44 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+45 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+46 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+47 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+48 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+49 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+50 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+51 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+52 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+53 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+54 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+55 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+56 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+57 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+58 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+59 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+60 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+61 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+62 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+63 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+64 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+65 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+66 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+67 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+68 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+69 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+70 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+71 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+72 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+73 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+74 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+75 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+76 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+77 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+78 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+79 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+80 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+81 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+82 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+83 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+84 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+85 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+86 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+87 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+88 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+89 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+90 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+91 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+92 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+93 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+94 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+95 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+96 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+97 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+98 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+99 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+100 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+101 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+102 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+103 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+104 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+105 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+106 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+107 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+108 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+109 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+110 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+111 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+112 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+113 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+114 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+115 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+116 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+117 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+118 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+119 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+120 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+121 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+122 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+123 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+124 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+125 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+126 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+127 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+128 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+129 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+130 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+131 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+132 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+133 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+134 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+135 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+136 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+137 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+138 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+139 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+140 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+141 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+142 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+143 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+144 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+145 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+146 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+147 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+148 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+149 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+150 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+151 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+152 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+153 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+154 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+155 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+156 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+157 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+158 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+159 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+160 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+161 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+162 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+163 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+164 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+165 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+166 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+167 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+168 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+169 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+170 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+171 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+172 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+173 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+174 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+175 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+176 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+177 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+178 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+179 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+180 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+181 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+182 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+183 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+184 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+185 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+186 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+187 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+188 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+189 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+190 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+191 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+192 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+193 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+194 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+195 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+196 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+197 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+198 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+199 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+200 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+201 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+202 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+203 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+204 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+205 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+206 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+207 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+208 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+209 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+210 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+211 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+212 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+213 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+214 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+215 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+216 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+217 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+218 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+219 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+220 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+221 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+222 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+223 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+224 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+225 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+226 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+227 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+228 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+229 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+230 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+231 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+232 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+233 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+234 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+235 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+236 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+237 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+238 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+239 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+240 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+241 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+242 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+243 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+244 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+245 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+246 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+247 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+248 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+249 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+250 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+251 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+252 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+253 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+254 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+255 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+256 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+257 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+258 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+259 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+260 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+261 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+262 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+263 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+264 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+265 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+266 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+267 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+268 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+269 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+270 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+271 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+272 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+273 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+274 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+275 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+276 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+277 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+278 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+279 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+280 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+281 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+282 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+283 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+284 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+285 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+286 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+287 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+288 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+289 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+290 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+291 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+292 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+293 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+294 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+295 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+296 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+297 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+298 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+299 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+300 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+301 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+302 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+303 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+304 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+305 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+306 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+307 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+308 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+309 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+310 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+311 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+312 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+313 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+314 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+315 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+316 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+317 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+318 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+319 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+320 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+321 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+322 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+323 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+324 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+325 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+326 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+327 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+328 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+329 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+330 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+331 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+332 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+333 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+334 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+335 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+336 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+337 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+338 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+339 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+340 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+341 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+342 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+343 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+344 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+345 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+346 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+347 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+348 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+349 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+350 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+351 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+352 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+353 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+354 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+355 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+356 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+357 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+358 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+359 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+360 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+361 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+362 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+363 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+364 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+365 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+366 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+367 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+368 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+369 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+370 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+371 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+372 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+373 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+374 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+375 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+376 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+377 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+378 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+379 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+380 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+381 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+382 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+383 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+384 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+385 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+386 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+387 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+388 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+389 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+390 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+391 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+392 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+393 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+394 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+395 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+396 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+397 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+398 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+399 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+400 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+401 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+402 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+403 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+404 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+405 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+406 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+407 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+408 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+409 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+410 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+411 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+412 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+413 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+414 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+415 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+416 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+417 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+418 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+419 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+420 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+421 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+422 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+423 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+424 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+425 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+426 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+427 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+428 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+429 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+430 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+431 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+432 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+433 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+434 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+435 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+436 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+437 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+438 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+439 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+440 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+441 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+442 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+443 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+444 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+445 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+446 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+447 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+448 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+449 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+450 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+451 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+452 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+453 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+454 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+455 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+456 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+457 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+458 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+459 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+460 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+461 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+462 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+463 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+464 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+465 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+466 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+467 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+468 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+469 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+470 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+471 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+472 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+473 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+474 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+475 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+476 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+477 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+478 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+479 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+480 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+481 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+482 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+483 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+484 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+485 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+486 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+487 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+488 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+489 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+490 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+491 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+492 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+493 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+494 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+495 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+496 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+497 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+498 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+499 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+500 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+501 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+502 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+503 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+504 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+505 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+506 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+507 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+508 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+509 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+510 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+511 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+512 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+513 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+514 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+515 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+516 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+517 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+518 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+519 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+520 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+521 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+522 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+523 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+524 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+525 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+526 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+527 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+528 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+529 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+530 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+531 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+532 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+533 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+534 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+535 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+536 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+537 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+538 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+539 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+540 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+541 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+542 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+543 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+544 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+545 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+546 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+547 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+548 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+549 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+550 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+551 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+552 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+553 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+554 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+555 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+556 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+557 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+558 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+559 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+560 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+561 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+562 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+563 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+564 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+565 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+566 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+567 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+568 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+569 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+570 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+571 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+572 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+573 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+574 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+575 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+576 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+577 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+578 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+579 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+580 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+581 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+582 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+583 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+584 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+585 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+586 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+587 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+588 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+589 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+590 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+591 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+592 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+593 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+594 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+595 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+596 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+597 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+598 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+599 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+600 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+601 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+602 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+603 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+604 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+605 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+606 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+607 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+608 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+609 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+610 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+611 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+612 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+613 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+614 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+615 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+616 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+617 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+618 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+619 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+620 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+621 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+622 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+623 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+624 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+625 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+626 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+627 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+628 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+629 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+630 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+631 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+632 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+633 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+634 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+635 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+636 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+637 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+638 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+639 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+640 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+641 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+642 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+643 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+644 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+645 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+646 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+647 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+648 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+649 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+650 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+651 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+652 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+653 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+654 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+655 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+656 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+657 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+658 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+659 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+660 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+661 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+662 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+663 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+664 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+665 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+666 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+667 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+668 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+669 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+670 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+671 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+672 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+673 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+674 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+675 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+676 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+677 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+678 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+679 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+680 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+681 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+682 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+683 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+684 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+685 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+686 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+687 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+688 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+689 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+690 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+691 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+692 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+693 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+694 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+695 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+696 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+697 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+698 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+699 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+700 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+701 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+702 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+703 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+704 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+705 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+706 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+707 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+708 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+709 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+710 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+711 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+712 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+713 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+714 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+715 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+716 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+717 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+718 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+719 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+720 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+721 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+722 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+723 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+724 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+725 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+726 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+727 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+728 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+729 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+730 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+731 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+732 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+733 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+734 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+735 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+736 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+737 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+738 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+739 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+740 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+741 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+742 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+743 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+744 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+745 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+746 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+747 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+748 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+749 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+750 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+751 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+752 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+753 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+754 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+755 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+756 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+757 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+758 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+759 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+760 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+761 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+762 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+763 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+764 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+765 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+766 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+767 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+768 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+769 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+770 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+771 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+772 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+773 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+774 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+775 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+776 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+777 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+778 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+779 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+780 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+781 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+782 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+783 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+784 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+785 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+786 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+787 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+788 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+789 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+790 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+791 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+792 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+793 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+794 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+795 - UF_FLAG_PARTY_MEMBER, // PLAYER_QUEST_LOG+796 - 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 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+3 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+4 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+5 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+6 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+7 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+8 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+9 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+10 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+11 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+12 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+13 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+14 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+15 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+16 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+17 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+18 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+19 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+20 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+21 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+22 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+23 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+24 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+25 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+26 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+27 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+28 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+29 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+30 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+31 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+32 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+33 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+34 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+35 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+36 - UF_FLAG_PUBLIC, // PLAYER_VISIBLE_ITEM+37 - UF_FLAG_PUBLIC, // PLAYER_CHOSEN_TITLE - UF_FLAG_PUBLIC, // PLAYER_FAKE_INEBRIATION - UF_FLAG_PUBLIC, // PLAYER_FIELD_VIRTUAL_PLAYER_REALM - UF_FLAG_PUBLIC, // PLAYER_FIELD_CURRENT_SPEC_ID - UF_FLAG_PUBLIC, // PLAYER_FIELD_TAXI_MOUNT_ANIM_KIT_ID - UF_FLAG_PUBLIC, // PLAYER_FIELD_AVG_ITEM_LEVEL - UF_FLAG_PUBLIC, // PLAYER_FIELD_AVG_ITEM_LEVEL+1 - 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_HONOR_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[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_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] = -{ - 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, // GAMEOBJECT_FIELD_CREATED_BY - 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 - UF_FLAG_PUBLIC, // GAMEOBJECT_PARENTROTATION+1 - UF_FLAG_PUBLIC, // GAMEOBJECT_PARENTROTATION+2 - UF_FLAG_PUBLIC, // GAMEOBJECT_PARENTROTATION+3 - UF_FLAG_PUBLIC, // GAMEOBJECT_FACTION - UF_FLAG_PUBLIC, // GAMEOBJECT_LEVEL - UF_FLAG_PUBLIC | UF_FLAG_URGENT, // GAMEOBJECT_BYTES_1 - UF_FLAG_PUBLIC | UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // GAMEOBJECT_SPELL_VISUAL_ID - UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // GAMEOBJECT_STATE_SPELL_VISUAL_ID - UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // GAMEOBJECT_STATE_ANIM_ID - UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // GAMEOBJECT_STATE_ANIM_KIT_ID - UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // GAMEOBJECT_STATE_WORLD_EFFECT_ID - 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] = -{ - UF_FLAG_PUBLIC, // GAMEOBJECT_DYNAMIC_ENABLE_DOODAD_SETS -}; - -uint32 DynamicObjectUpdateFieldFlags[DYNAMICOBJECT_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, // DYNAMICOBJECT_CASTER - UF_FLAG_PUBLIC, // DYNAMICOBJECT_CASTER+1 - UF_FLAG_PUBLIC, // DYNAMICOBJECT_CASTER+2 - UF_FLAG_PUBLIC, // DYNAMICOBJECT_CASTER+3 - UF_FLAG_PUBLIC, // DYNAMICOBJECT_TYPE - UF_FLAG_PUBLIC, // DYNAMICOBJECT_SPELL_X_SPELL_VISUAL_ID - UF_FLAG_PUBLIC, // DYNAMICOBJECT_SPELLID - UF_FLAG_PUBLIC, // DYNAMICOBJECT_RADIUS - UF_FLAG_PUBLIC, // DYNAMICOBJECT_CASTTIME -}; - -uint32 CorpseUpdateFieldFlags[CORPSE_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, // CORPSE_FIELD_OWNER - UF_FLAG_PUBLIC, // CORPSE_FIELD_OWNER+1 - UF_FLAG_PUBLIC, // CORPSE_FIELD_OWNER+2 - UF_FLAG_PUBLIC, // CORPSE_FIELD_OWNER+3 - UF_FLAG_PUBLIC, // CORPSE_FIELD_PARTY - 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 - UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+2 - UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+3 - UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+4 - UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+5 - UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+6 - UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+7 - UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+8 - UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+9 - UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+10 - UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+11 - UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+12 - UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+13 - UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+14 - UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+15 - UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+16 - UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+17 - UF_FLAG_PUBLIC, // CORPSE_FIELD_ITEM+18 - UF_FLAG_PUBLIC, // CORPSE_FIELD_BYTES_1 - UF_FLAG_PUBLIC, // CORPSE_FIELD_BYTES_2 - UF_FLAG_PUBLIC, // CORPSE_FIELD_FLAGS - UF_FLAG_DYNAMIC, // CORPSE_FIELD_DYNAMIC_FLAGS - UF_FLAG_PUBLIC, // CORPSE_FIELD_FACTIONTEMPLATE - UF_FLAG_PUBLIC, // CORPSE_FIELD_CUSTOM_DISPLAY_OPTION -}; - -uint32 AreaTriggerUpdateFieldFlags[AREATRIGGER_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 | UF_FLAG_URGENT, // AREATRIGGER_OVERRIDE_SCALE_CURVE - UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_OVERRIDE_SCALE_CURVE+1 - UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_OVERRIDE_SCALE_CURVE+2 - UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_OVERRIDE_SCALE_CURVE+3 - UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_OVERRIDE_SCALE_CURVE+4 - UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_OVERRIDE_SCALE_CURVE+5 - UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_OVERRIDE_SCALE_CURVE+6 - UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_EXTRA_SCALE_CURVE - UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_EXTRA_SCALE_CURVE+1 - UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_EXTRA_SCALE_CURVE+2 - UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_EXTRA_SCALE_CURVE+3 - UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_EXTRA_SCALE_CURVE+4 - UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_EXTRA_SCALE_CURVE+5 - UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_EXTRA_SCALE_CURVE+6 - UF_FLAG_PUBLIC, // AREATRIGGER_CASTER - UF_FLAG_PUBLIC, // AREATRIGGER_CASTER+1 - UF_FLAG_PUBLIC, // AREATRIGGER_CASTER+2 - UF_FLAG_PUBLIC, // AREATRIGGER_CASTER+3 - UF_FLAG_PUBLIC, // AREATRIGGER_DURATION - UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_TIME_TO_TARGET - UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_TIME_TO_TARGET_SCALE - UF_FLAG_PUBLIC | UF_FLAG_URGENT, // AREATRIGGER_TIME_TO_TARGET_EXTRA_SCALE - UF_FLAG_PUBLIC, // AREATRIGGER_SPELLID - UF_FLAG_PUBLIC, // AREATRIGGER_SPELL_FOR_VISUALS - UF_FLAG_PUBLIC, // AREATRIGGER_SPELL_X_SPELL_VISUAL_ID - UF_FLAG_DYNAMIC | UF_FLAG_URGENT, // AREATRIGGER_BOUNDS_RADIUS_2D - UF_FLAG_PUBLIC, // AREATRIGGER_DECAL_PROPERTIES_ID - UF_FLAG_PUBLIC, // AREATRIGGER_CREATING_EFFECT_GUID - UF_FLAG_PUBLIC, // AREATRIGGER_CREATING_EFFECT_GUID+1 - UF_FLAG_PUBLIC, // AREATRIGGER_CREATING_EFFECT_GUID+2 - UF_FLAG_PUBLIC, // AREATRIGGER_CREATING_EFFECT_GUID+3 -}; - -uint32 SceneObjectUpdateFieldFlags[SCENEOBJECT_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, // SCENEOBJECT_FIELD_SCRIPT_PACKAGE_ID - UF_FLAG_PUBLIC, // SCENEOBJECT_FIELD_RND_SEED_VAL - UF_FLAG_PUBLIC, // SCENEOBJECT_FIELD_CREATEDBY - UF_FLAG_PUBLIC, // SCENEOBJECT_FIELD_CREATEDBY+1 - UF_FLAG_PUBLIC, // SCENEOBJECT_FIELD_CREATEDBY+2 - UF_FLAG_PUBLIC, // SCENEOBJECT_FIELD_CREATEDBY+3 - UF_FLAG_PUBLIC, // SCENEOBJECT_FIELD_SCENE_TYPE -}; - -uint32 ConversationUpdateFieldFlags[CONVERSATION_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_DYNAMIC, // CONVERSATION_LAST_LINE_END_TIME -}; - -uint32 ConversationDynamicUpdateFieldFlags[CONVERSATION_DYNAMIC_END] = -{ - UF_FLAG_PUBLIC, // CONVERSATION_DYNAMIC_FIELD_ACTORS - UF_FLAG_0x100, // CONVERSATION_DYNAMIC_FIELD_LINES -}; diff --git a/src/server/game/Entities/Object/Updates/UpdateFieldFlags.h b/src/server/game/Entities/Object/Updates/UpdateFieldFlags.h deleted file mode 100644 index 17475bd093d..00000000000 --- a/src/server/game/Entities/Object/Updates/UpdateFieldFlags.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (C) 2008-2019 TrinityCore <https://www.trinitycore.org/> - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef _UPDATEFIELDFLAGS_H -#define _UPDATEFIELDFLAGS_H - -#include "UpdateFields.h" -#include "Define.h" - -enum UpdatefieldFlags -{ - UF_FLAG_NONE = 0x000, - UF_FLAG_PUBLIC = 0x001, - UF_FLAG_PRIVATE = 0x002, - UF_FLAG_OWNER = 0x004, - UF_FLAG_ITEM_OWNER = 0x008, - UF_FLAG_SPECIAL_INFO = 0x010, - UF_FLAG_PARTY_MEMBER = 0x020, - UF_FLAG_UNIT_ALL = 0x040, - UF_FLAG_DYNAMIC = 0x080, - UF_FLAG_0x100 = 0x100, - UF_FLAG_URGENT = 0x200, - UF_FLAG_URGENT_SELF_ONLY = 0x400 -}; - -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[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]; -TC_GAME_API extern uint32 CorpseUpdateFieldFlags[CORPSE_END]; -TC_GAME_API extern uint32 AreaTriggerUpdateFieldFlags[AREATRIGGER_END]; -TC_GAME_API extern uint32 SceneObjectUpdateFieldFlags[SCENEOBJECT_END]; -TC_GAME_API extern uint32 ConversationUpdateFieldFlags[CONVERSATION_END]; -TC_GAME_API extern uint32 ConversationDynamicUpdateFieldFlags[CONVERSATION_DYNAMIC_END]; - -#endif // _UPDATEFIELDFLAGS_H diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp new file mode 100644 index 00000000000..010ef856bd7 --- /dev/null +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -0,0 +1,3968 @@ +/* + * Copyright (C) 2008-2019 TrinityCore <https://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "UpdateFields.h" +#include "ByteBuffer.h" +#include "Player.h" +#include "ViewerDependentValues.h" + +#if TRINITY_COMPILER == TRINITY_COMPILER_GNU +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" +#else +#pragma warning(push) +#pragma warning(disable: 4100) +#endif + +namespace UF +{ +void ObjectData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const +{ + data << int32(EntryID); + data << uint32(ViewerDependentValue<DynamicFlagsTag>::GetValue(DynamicFlags, owner, receiver)); + data << float(Scale); +} + +void ObjectData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const +{ + UpdateMask<4> const& changesMask = _changesMask; + data.WriteBits(changesMask.GetBlock(0), 4); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << int32(EntryID); + } + if (changesMask[2]) + { + data << uint32(ViewerDependentValue<DynamicFlagsTag>::GetValue(DynamicFlags, owner, receiver)); + } + if (changesMask[3]) + { + data << float(Scale); + } + } +} + +void ObjectData::ClearChangesMask() +{ + Base::ClearChangesMask(EntryID); + Base::ClearChangesMask(DynamicFlags); + Base::ClearChangesMask(Scale); + _changesMask.ResetAll(); +} + +void ItemEnchantment::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +{ + data << int32(ID); + data << uint32(Duration); + data << int16(Charges); + data << uint16(Inactive); +} + +void ItemEnchantment::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +{ + UpdateMask<5> const& changesMask = _changesMask; + data.WriteBits(changesMask.GetBlock(0), 5); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << int32(ID); + } + if (changesMask[2]) + { + data << uint32(Duration); + } + if (changesMask[3]) + { + data << int16(Charges); + } + if (changesMask[4]) + { + data << uint16(Inactive); + } + } +} + +void ItemEnchantment::ClearChangesMask() +{ + Base::ClearChangesMask(ID); + Base::ClearChangesMask(Duration); + Base::ClearChangesMask(Charges); + Base::ClearChangesMask(Inactive); + _changesMask.ResetAll(); +} + +void ArtifactPower::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +{ + data << int16(ArtifactPowerID); + data << uint8(PurchasedRank); + data << uint8(CurrentRankWithBonus); +} + +void ArtifactPower::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +{ + data.FlushBits(); + data << int16(ArtifactPowerID); + data << uint8(PurchasedRank); + data << uint8(CurrentRankWithBonus); +} + +void SocketedGem::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +{ + data << int32(ItemID); + for (std::size_t i = 0; i < 16; ++i) + { + data << uint16(BonusListIDs[i]); + } + data << uint8(Context); +} + +void SocketedGem::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +{ + UpdateMask<20> const& changesMask = _changesMask; + data.WriteBits(changesMask.GetBlocksMask(0), 1); + if (changesMask.GetBlock(0)) + data.WriteBits(changesMask.GetBlock(0), 32); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << int32(ItemID); + } + if (changesMask[2]) + { + data << uint8(Context); + } + } + if (changesMask[3]) + { + for (std::size_t i = 0; i < 16; ++i) + { + if (changesMask[4 + i]) + { + data << uint16(BonusListIDs[i]); + } + } + } +} + +void SocketedGem::ClearChangesMask() +{ + Base::ClearChangesMask(ItemID); + Base::ClearChangesMask(Context); + Base::ClearChangesMask(BonusListIDs); + _changesMask.ResetAll(); +} + +void ItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +{ + data << uint32(BonusListIDs->size()); + for (std::size_t i = 0; i < BonusListIDs->size(); ++i) + { + data << int32((*BonusListIDs)[i]); + } + data << Owner; + data << ContainedIn; + data << Creator; + data << GiftCreator; + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) + { + data << uint32(StackCount); + data << uint32(Expiration); + for (std::size_t i = 0; i < 5; ++i) + { + data << int32(SpellCharges[i]); + } + } + data << uint32(DynamicFlags); + for (std::size_t i = 0; i < 13; ++i) + { + Enchantment[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + } + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) + { + data << uint32(Durability); + data << uint32(MaxDurability); + } + data << uint32(CreatePlayedTime); + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) + { + data << uint32(ModifiersMask); + } + data << int32(Context); + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) + { + data << uint64(ArtifactXP); + data << uint8(ItemAppearanceModID); + } + data << uint32(Modifiers.size()); + data << uint32(ArtifactPowers.size()); + data << uint32(Gems.size()); + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) + { + data << uint32(Field_130); + } + for (std::size_t i = 0; i < Modifiers.size(); ++i) + { + data << int32(Modifiers[i]); + } + for (std::size_t i = 0; i < ArtifactPowers.size(); ++i) + { + ArtifactPowers[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + } + for (std::size_t i = 0; i < Gems.size(); ++i) + { + Gems[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + } +} + +void ItemData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +{ + UpdateMask<40> allowedMaskForTarget({ 0xFC0149FFu, 0x000000FFu }); + AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); + WriteUpdate(data, _changesMask & allowedMaskForTarget, fieldVisibilityFlags, owner, receiver); +} + +void ItemData::AppendAllowedFieldsMaskForFlag(UpdateMask<40>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const +{ + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) + allowedMaskForTarget |= { 0x03FEB600u, 0x00000000u }; +} + +void ItemData::WriteUpdate(ByteBuffer& data, UpdateMask<40> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +{ + data.WriteBits(changesMask.GetBlocksMask(0), 2); + for (std::size_t i = 0; i < 2; ++i) + if (changesMask.GetBlock(i)) + data.WriteBits(changesMask.GetBlock(i), 32); + + if (changesMask[0]) + { + if (changesMask[1]) + { + data.WriteBits(BonusListIDs->size(), 32); + for (std::size_t i = 0; i < BonusListIDs->size(); ++i) + { + data << int32((*BonusListIDs)[i]); + } + } + } + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[2]) + { + Modifiers.WriteUpdateMask(data); + } + if (changesMask[3]) + { + ArtifactPowers.WriteUpdateMask(data); + } + if (changesMask[4]) + { + Gems.WriteUpdateMask(data); + } + } + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[2]) + { + for (std::size_t i = 0; i < Modifiers.size(); ++i) + { + if (Modifiers.HasChanged(i)) + { + data << int32(Modifiers[i]); + } + } + } + if (changesMask[3]) + { + for (std::size_t i = 0; i < ArtifactPowers.size(); ++i) + { + if (ArtifactPowers.HasChanged(i)) + { + ArtifactPowers[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + } + } + } + if (changesMask[4]) + { + for (std::size_t i = 0; i < Gems.size(); ++i) + { + if (Gems.HasChanged(i)) + { + Gems[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + } + } + } + if (changesMask[5]) + { + data << Owner; + } + if (changesMask[6]) + { + data << ContainedIn; + } + if (changesMask[7]) + { + data << Creator; + } + if (changesMask[8]) + { + data << GiftCreator; + } + if (changesMask[9]) + { + data << uint32(StackCount); + } + if (changesMask[10]) + { + data << uint32(Expiration); + } + if (changesMask[11]) + { + data << uint32(DynamicFlags); + } + if (changesMask[12]) + { + data << uint32(Durability); + } + if (changesMask[13]) + { + data << uint32(MaxDurability); + } + if (changesMask[14]) + { + data << uint32(CreatePlayedTime); + } + if (changesMask[15]) + { + data << uint32(ModifiersMask); + } + if (changesMask[16]) + { + data << int32(Context); + } + if (changesMask[17]) + { + data << uint64(ArtifactXP); + } + if (changesMask[18]) + { + data << uint8(ItemAppearanceModID); + } + if (changesMask[19]) + { + data << uint32(Field_130); + } + } + if (changesMask[20]) + { + for (std::size_t i = 0; i < 5; ++i) + { + if (changesMask[21 + i]) + { + data << int32(SpellCharges[i]); + } + } + } + if (changesMask[26]) + { + for (std::size_t i = 0; i < 13; ++i) + { + if (changesMask[27 + i]) + { + Enchantment[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + } + } + } +} + +void ItemData::ClearChangesMask() +{ + Base::ClearChangesMask(BonusListIDs); + Base::ClearChangesMask(Modifiers); + Base::ClearChangesMask(ArtifactPowers); + Base::ClearChangesMask(Gems); + Base::ClearChangesMask(Owner); + Base::ClearChangesMask(ContainedIn); + Base::ClearChangesMask(Creator); + Base::ClearChangesMask(GiftCreator); + Base::ClearChangesMask(StackCount); + Base::ClearChangesMask(Expiration); + Base::ClearChangesMask(DynamicFlags); + Base::ClearChangesMask(Durability); + Base::ClearChangesMask(MaxDurability); + Base::ClearChangesMask(CreatePlayedTime); + Base::ClearChangesMask(ModifiersMask); + Base::ClearChangesMask(Context); + Base::ClearChangesMask(ArtifactXP); + Base::ClearChangesMask(ItemAppearanceModID); + Base::ClearChangesMask(Field_130); + Base::ClearChangesMask(SpellCharges); + Base::ClearChangesMask(Enchantment); + _changesMask.ResetAll(); +} + +void ContainerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const +{ + for (std::size_t i = 0; i < 36; ++i) + { + data << Slots[i]; + } + data << uint32(NumSlots); +} + +void ContainerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const +{ + UpdateMask<39> const& changesMask = _changesMask; + data.WriteBits(changesMask.GetBlocksMask(0), 2); + for (std::size_t i = 0; i < 2; ++i) + if (changesMask.GetBlock(i)) + data.WriteBits(changesMask.GetBlock(i), 32); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << uint32(NumSlots); + } + } + if (changesMask[2]) + { + for (std::size_t i = 0; i < 36; ++i) + { + if (changesMask[3 + i]) + { + data << Slots[i]; + } + } + } +} + +void ContainerData::ClearChangesMask() +{ + Base::ClearChangesMask(NumSlots); + Base::ClearChangesMask(Slots); + _changesMask.ResetAll(); +} + +void AzeriteEmpoweredItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +{ + for (std::size_t i = 0; i < 5; ++i) + { + data << int32(Selections[i]); + } +} + +void AzeriteEmpoweredItemData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +{ + UpdateMask<6> const& changesMask = _changesMask; + data.WriteBits(changesMask.GetBlocksMask(0), 1); + if (changesMask.GetBlock(0)) + data.WriteBits(changesMask.GetBlock(0), 32); + + data.FlushBits(); + if (changesMask[0]) + { + for (std::size_t i = 0; i < 5; ++i) + { + if (changesMask[1 + i]) + { + data << int32(Selections[i]); + } + } + } +} + +void AzeriteEmpoweredItemData::ClearChangesMask() +{ + Base::ClearChangesMask(Selections); + _changesMask.ResetAll(); +} + +void AzeriteItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +{ + data << uint64(Xp); + data << uint32(Level); + data << uint32(AuraLevel); + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) + { + data << uint32(KnowledgeLevel); + data << uint32(DEBUGknowledgeWeek); + } +} + +void AzeriteItemData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +{ + UpdateMask<6> allowedMaskForTarget({ 0x0000000Fu }); + AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); + WriteUpdate(data, _changesMask & allowedMaskForTarget, fieldVisibilityFlags, owner, receiver); +} + +void AzeriteItemData::AppendAllowedFieldsMaskForFlag(UpdateMask<6>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const +{ + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) + allowedMaskForTarget |= { 0x00000030u }; +} + +void AzeriteItemData::WriteUpdate(ByteBuffer& data, UpdateMask<6> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +{ + data.WriteBits(changesMask.GetBlock(0), 6); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << uint64(Xp); + } + if (changesMask[2]) + { + data << uint32(Level); + } + if (changesMask[3]) + { + data << uint32(AuraLevel); + } + if (changesMask[4]) + { + data << uint32(KnowledgeLevel); + } + if (changesMask[5]) + { + data << uint32(DEBUGknowledgeWeek); + } + } +} + +void AzeriteItemData::ClearChangesMask() +{ + Base::ClearChangesMask(Xp); + Base::ClearChangesMask(Level); + Base::ClearChangesMask(AuraLevel); + Base::ClearChangesMask(KnowledgeLevel); + Base::ClearChangesMask(DEBUGknowledgeWeek); + _changesMask.ResetAll(); +} + +void UnitChannel::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const +{ + data << int32(SpellID); + data << int32(SpellXSpellVisualID); +} + +void UnitChannel::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const +{ + data.FlushBits(); + data << int32(SpellID); + data << int32(SpellXSpellVisualID); +} + +void VisibleItem::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const +{ + data << int32(ItemID); + data << uint16(ItemAppearanceModID); + data << uint16(ItemVisual); +} + +void VisibleItem::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const +{ + UpdateMask<4> const& changesMask = _changesMask; + data.WriteBits(changesMask.GetBlock(0), 4); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << int32(ItemID); + } + if (changesMask[2]) + { + data << uint16(ItemAppearanceModID); + } + if (changesMask[3]) + { + data << uint16(ItemVisual); + } + } +} + +void VisibleItem::ClearChangesMask() +{ + Base::ClearChangesMask(ItemID); + Base::ClearChangesMask(ItemAppearanceModID); + Base::ClearChangesMask(ItemVisual); + _changesMask.ResetAll(); +} + +void PassiveSpellHistory::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const +{ + data << int32(SpellID); + data << int32(AuraSpellID); +} + +void PassiveSpellHistory::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const +{ + data.FlushBits(); + data << int32(SpellID); + data << int32(AuraSpellID); +} + +void UnitData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const +{ + data << int32(ViewerDependentValue<DisplayIDTag>::GetValue(DisplayID, owner, receiver)); + for (std::size_t i = 0; i < 2; ++i) + { + data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(NpcFlags[i], i, owner, receiver)); + } + data << uint32(StateSpellVisualID); + data << uint32(StateAnimID); + data << uint32(StateAnimKitID); + data << uint32(StateWorldEffectIDs->size()); + data << uint32(StateWorldEffectsQuestObjectiveID); + for (std::size_t i = 0; i < StateWorldEffectIDs->size(); ++i) + { + data << uint32((*StateWorldEffectIDs)[i]); + } + data << Charm; + data << Summon; + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) + { + data << Critter; + } + data << CharmedBy; + data << SummonedBy; + data << CreatedBy; + data << DemonCreator; + data << LookAtControllerTarget; + data << Target; + data << BattlePetCompanionGUID; + data << uint64(BattlePetDBID); + ChannelData->WriteCreate(data, fieldVisibilityFlags, owner, receiver); + data << uint32(SummonedByHomeRealm); + data << uint8(Race); + data << uint8(ClassId); + data << uint8(PlayerClassId); + data << uint8(Sex); + data << uint8(DisplayPower); + data << uint32(OverrideDisplayPowerID); + data << int64(Health); + for (std::size_t i = 0; i < 6; ++i) + { + data << int32(Power[i]); + data << int32(MaxPower[i]); + } + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner) || fieldVisibilityFlags.HasFlag(UpdateFieldFlag::UnitAll)) + { + for (std::size_t i = 0; i < 6; ++i) + { + data << float(PowerRegenFlatModifier[i]); + data << float(PowerRegenInterruptedFlatModifier[i]); + } + } + data << int64(MaxHealth); + data << int32(Level); + data << int32(EffectiveLevel); + data << int32(ContentTuningID); + data << int32(ScalingLevelMin); + data << int32(ScalingLevelMax); + data << int32(ScalingLevelDelta); + data << int32(ScalingFactionGroup); + data << int32(ScalingHealthItemLevelCurveID); + data << int32(ScalingDamageItemLevelCurveID); + data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(FactionTemplate, owner, receiver)); + for (std::size_t i = 0; i < 3; ++i) + { + VirtualItems[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + } + data << uint32(ViewerDependentValue<FlagsTag>::GetValue(Flags, owner, receiver)); + data << uint32(Flags2); + data << uint32(Flags3); + data << uint32(ViewerDependentValue<AuraStateTag>::GetValue(AuraState, owner, receiver)); + for (std::size_t i = 0; i < 2; ++i) + { + data << uint32(AttackRoundBaseTime[i]); + } + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) + { + data << uint32(RangedAttackRoundBaseTime); + } + data << float(BoundingRadius); + data << float(CombatReach); + data << float(DisplayScale); + data << int32(NativeDisplayID); + data << float(NativeXDisplayScale); + data << int32(MountDisplayID); + data << int32(CosmeticMountDisplayID); + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner) || fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath)) + { + data << float(MinDamage); + data << float(MaxDamage); + data << float(MinOffHandDamage); + data << float(MaxOffHandDamage); + } + data << uint8(StandState); + data << uint8(PetTalentPoints); + data << uint8(VisFlags); + data << uint8(AnimTier); + data << uint32(PetNumber); + data << uint32(PetNameTimestamp); + data << uint32(PetExperience); + data << uint32(PetNextLevelExperience); + data << float(ModCastingSpeed); + data << float(ModSpellHaste); + data << float(ModHaste); + data << float(ModRangedHaste); + data << float(ModHasteRegen); + data << float(ModTimeRate); + data << int32(CreatedBySpell); + data << int32(EmoteState); + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) + { + for (std::size_t i = 0; i < 4; ++i) + { + data << int32(Stats[i]); + data << int32(StatPosBuff[i]); + data << int32(StatNegBuff[i]); + } + } + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner) || fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath)) + { + for (std::size_t i = 0; i < 7; ++i) + { + data << int32(Resistances[i]); + } + } + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) + { + for (std::size_t i = 0; i < 7; ++i) + { + data << int32(BonusResistanceMods[i]); + data << int32(PowerCostModifier[i]); + data << float(PowerCostMultiplier[i]); + } + } + data << int32(BaseMana); + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) + { + data << int32(BaseHealth); + } + data << uint8(SheatheState); + data << uint8(ViewerDependentValue<PvpFlagsTag>::GetValue(PvpFlags, owner, receiver)); + data << uint8(PetFlags); + data << uint8(ShapeshiftForm); + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) + { + data << int32(AttackPower); + data << int32(AttackPowerModPos); + data << int32(AttackPowerModNeg); + data << float(AttackPowerMultiplier); + data << int32(RangedAttackPower); + data << int32(RangedAttackPowerModPos); + data << int32(RangedAttackPowerModNeg); + data << float(RangedAttackPowerMultiplier); + data << int32(MainHandWeaponAttackPower); + data << int32(OffHandWeaponAttackPower); + data << int32(RangedWeaponAttackPower); + data << int32(SetAttackSpeedAura); + data << float(Lifesteal); + data << float(MinRangedDamage); + data << float(MaxRangedDamage); + data << float(ManaCostModifierModifier); + data << float(MaxHealthModifier); + } + data << float(HoverHeight); + data << int32(MinItemLevelCutoff); + data << int32(MinItemLevel); + data << int32(MaxItemLevel); + data << int32(AzeriteItemLevel); + data << int32(WildBattlePetLevel); + data << uint32(BattlePetCompanionNameTimestamp); + data << int32(InteractSpellID); + data << int32(ScaleDuration); + data << int32(SpellOverrideNameID); + data << int32(LooksLikeMountID); + data << int32(LooksLikeCreatureID); + data << int32(LookAtControllerID); + data << int32(TaxiNodesID); + data << GuildGUID; + data << uint32(PassiveSpells.size()); + data << uint32(WorldEffects.size()); + data << uint32(ChannelObjects.size()); + for (std::size_t i = 0; i < PassiveSpells.size(); ++i) + { + PassiveSpells[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + } + for (std::size_t i = 0; i < WorldEffects.size(); ++i) + { + data << int32(WorldEffects[i]); + } + for (std::size_t i = 0; i < ChannelObjects.size(); ++i) + { + data << ChannelObjects[i]; + } +} + +void UnitData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const +{ + UpdateMask<191> allowedMaskForTarget({ 0xFFFFEFFFu, 0xFC3FBFFFu, 0x0001EFFFu, 0xFFDFFFF9u, 0x001FC003u, 0x00000000u }); + AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); + WriteUpdate(data, _changesMask & allowedMaskForTarget, fieldVisibilityFlags, owner, receiver); +} + +void UnitData::AppendAllowedFieldsMaskForFlag(UpdateMask<191>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const +{ + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) + allowedMaskForTarget |= { 0x00001000u, 0x03C04000u, 0xFFFE1000u, 0x00200006u, 0xFFE03FFCu, 0x7FFFFFFFu }; + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::UnitAll)) + allowedMaskForTarget |= { 0x00000000u, 0x00000000u, 0x00000000u, 0x00200000u, 0x00003FFCu, 0x00000000u }; + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath)) + allowedMaskForTarget |= { 0x00000000u, 0x03C00000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x000003FCu }; +} + +void UnitData::WriteUpdate(ByteBuffer& data, UpdateMask<191> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const +{ + data.WriteBits(changesMask.GetBlocksMask(0), 6); + for (std::size_t i = 0; i < 6; ++i) + if (changesMask.GetBlock(i)) + data.WriteBits(changesMask.GetBlock(i), 32); + + if (changesMask[0]) + { + if (changesMask[1]) + { + data.WriteBits(StateWorldEffectIDs->size(), 32); + for (std::size_t i = 0; i < StateWorldEffectIDs->size(); ++i) + { + data << uint32((*StateWorldEffectIDs)[i]); + } + } + } + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[2]) + { + PassiveSpells.WriteUpdateMask(data); + } + if (changesMask[3]) + { + WorldEffects.WriteUpdateMask(data); + } + if (changesMask[4]) + { + ChannelObjects.WriteUpdateMask(data); + } + } + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[2]) + { + for (std::size_t i = 0; i < PassiveSpells.size(); ++i) + { + if (PassiveSpells.HasChanged(i)) + { + PassiveSpells[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + } + } + } + if (changesMask[3]) + { + for (std::size_t i = 0; i < WorldEffects.size(); ++i) + { + if (WorldEffects.HasChanged(i)) + { + data << int32(WorldEffects[i]); + } + } + } + if (changesMask[4]) + { + for (std::size_t i = 0; i < ChannelObjects.size(); ++i) + { + if (ChannelObjects.HasChanged(i)) + { + data << ChannelObjects[i]; + } + } + } + if (changesMask[5]) + { + data << int32(ViewerDependentValue<DisplayIDTag>::GetValue(DisplayID, owner, receiver)); + } + if (changesMask[6]) + { + data << uint32(StateSpellVisualID); + } + if (changesMask[7]) + { + data << uint32(StateAnimID); + } + if (changesMask[8]) + { + data << uint32(StateAnimKitID); + } + if (changesMask[9]) + { + data << uint32(StateWorldEffectsQuestObjectiveID); + } + if (changesMask[10]) + { + data << Charm; + } + if (changesMask[11]) + { + data << Summon; + } + if (changesMask[12]) + { + data << Critter; + } + if (changesMask[13]) + { + data << CharmedBy; + } + if (changesMask[14]) + { + data << SummonedBy; + } + if (changesMask[15]) + { + data << CreatedBy; + } + if (changesMask[16]) + { + data << DemonCreator; + } + if (changesMask[17]) + { + data << LookAtControllerTarget; + } + if (changesMask[18]) + { + data << Target; + } + if (changesMask[19]) + { + data << BattlePetCompanionGUID; + } + if (changesMask[20]) + { + data << uint64(BattlePetDBID); + } + if (changesMask[21]) + { + ChannelData->WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + } + if (changesMask[22]) + { + data << uint32(SummonedByHomeRealm); + } + if (changesMask[23]) + { + data << uint8(Race); + } + if (changesMask[24]) + { + data << uint8(ClassId); + } + if (changesMask[25]) + { + data << uint8(PlayerClassId); + } + if (changesMask[26]) + { + data << uint8(Sex); + } + if (changesMask[27]) + { + data << uint8(DisplayPower); + } + if (changesMask[28]) + { + data << uint32(OverrideDisplayPowerID); + } + if (changesMask[29]) + { + data << int64(Health); + } + if (changesMask[30]) + { + data << int64(MaxHealth); + } + if (changesMask[31]) + { + data << int32(Level); + } + } + if (changesMask[32]) + { + if (changesMask[33]) + { + data << int32(EffectiveLevel); + } + if (changesMask[34]) + { + data << int32(ContentTuningID); + } + if (changesMask[35]) + { + data << int32(ScalingLevelMin); + } + if (changesMask[36]) + { + data << int32(ScalingLevelMax); + } + if (changesMask[37]) + { + data << int32(ScalingLevelDelta); + } + if (changesMask[38]) + { + data << int32(ScalingFactionGroup); + } + if (changesMask[39]) + { + data << int32(ScalingHealthItemLevelCurveID); + } + if (changesMask[40]) + { + data << int32(ScalingDamageItemLevelCurveID); + } + if (changesMask[41]) + { + data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(FactionTemplate, owner, receiver)); + } + if (changesMask[42]) + { + data << uint32(ViewerDependentValue<FlagsTag>::GetValue(Flags, owner, receiver)); + } + if (changesMask[43]) + { + data << uint32(Flags2); + } + if (changesMask[44]) + { + data << uint32(Flags3); + } + if (changesMask[45]) + { + data << uint32(ViewerDependentValue<AuraStateTag>::GetValue(AuraState, owner, receiver)); + } + if (changesMask[46]) + { + data << uint32(RangedAttackRoundBaseTime); + } + if (changesMask[47]) + { + data << float(BoundingRadius); + } + if (changesMask[48]) + { + data << float(CombatReach); + } + if (changesMask[49]) + { + data << float(DisplayScale); + } + if (changesMask[50]) + { + data << int32(NativeDisplayID); + } + if (changesMask[51]) + { + data << float(NativeXDisplayScale); + } + if (changesMask[52]) + { + data << int32(MountDisplayID); + } + if (changesMask[53]) + { + data << int32(CosmeticMountDisplayID); + } + if (changesMask[54]) + { + data << float(MinDamage); + } + if (changesMask[55]) + { + data << float(MaxDamage); + } + if (changesMask[56]) + { + data << float(MinOffHandDamage); + } + if (changesMask[57]) + { + data << float(MaxOffHandDamage); + } + if (changesMask[58]) + { + data << uint8(StandState); + } + if (changesMask[59]) + { + data << uint8(PetTalentPoints); + } + if (changesMask[60]) + { + data << uint8(VisFlags); + } + if (changesMask[61]) + { + data << uint8(AnimTier); + } + if (changesMask[62]) + { + data << uint32(PetNumber); + } + if (changesMask[63]) + { + data << uint32(PetNameTimestamp); + } + } + if (changesMask[64]) + { + if (changesMask[65]) + { + data << uint32(PetExperience); + } + if (changesMask[66]) + { + data << uint32(PetNextLevelExperience); + } + if (changesMask[67]) + { + data << float(ModCastingSpeed); + } + if (changesMask[68]) + { + data << float(ModSpellHaste); + } + if (changesMask[69]) + { + data << float(ModHaste); + } + if (changesMask[70]) + { + data << float(ModRangedHaste); + } + if (changesMask[71]) + { + data << float(ModHasteRegen); + } + if (changesMask[72]) + { + data << float(ModTimeRate); + } + if (changesMask[73]) + { + data << int32(CreatedBySpell); + } + if (changesMask[74]) + { + data << int32(EmoteState); + } + if (changesMask[75]) + { + data << int32(BaseMana); + } + if (changesMask[76]) + { + data << int32(BaseHealth); + } + if (changesMask[77]) + { + data << uint8(SheatheState); + } + if (changesMask[78]) + { + data << uint8(ViewerDependentValue<PvpFlagsTag>::GetValue(PvpFlags, owner, receiver)); + } + if (changesMask[79]) + { + data << uint8(PetFlags); + } + if (changesMask[80]) + { + data << uint8(ShapeshiftForm); + } + if (changesMask[81]) + { + data << int32(AttackPower); + } + if (changesMask[82]) + { + data << int32(AttackPowerModPos); + } + if (changesMask[83]) + { + data << int32(AttackPowerModNeg); + } + if (changesMask[84]) + { + data << float(AttackPowerMultiplier); + } + if (changesMask[85]) + { + data << int32(RangedAttackPower); + } + if (changesMask[86]) + { + data << int32(RangedAttackPowerModPos); + } + if (changesMask[87]) + { + data << int32(RangedAttackPowerModNeg); + } + if (changesMask[88]) + { + data << float(RangedAttackPowerMultiplier); + } + if (changesMask[89]) + { + data << int32(MainHandWeaponAttackPower); + } + if (changesMask[90]) + { + data << int32(OffHandWeaponAttackPower); + } + if (changesMask[91]) + { + data << int32(RangedWeaponAttackPower); + } + if (changesMask[92]) + { + data << int32(SetAttackSpeedAura); + } + if (changesMask[93]) + { + data << float(Lifesteal); + } + if (changesMask[94]) + { + data << float(MinRangedDamage); + } + if (changesMask[95]) + { + data << float(MaxRangedDamage); + } + } + if (changesMask[96]) + { + if (changesMask[97]) + { + data << float(ManaCostModifierModifier); + } + if (changesMask[98]) + { + data << float(MaxHealthModifier); + } + if (changesMask[99]) + { + data << float(HoverHeight); + } + if (changesMask[100]) + { + data << int32(MinItemLevelCutoff); + } + if (changesMask[101]) + { + data << int32(MinItemLevel); + } + if (changesMask[102]) + { + data << int32(MaxItemLevel); + } + if (changesMask[103]) + { + data << int32(AzeriteItemLevel); + } + if (changesMask[104]) + { + data << int32(WildBattlePetLevel); + } + if (changesMask[105]) + { + data << uint32(BattlePetCompanionNameTimestamp); + } + if (changesMask[106]) + { + data << int32(InteractSpellID); + } + if (changesMask[107]) + { + data << int32(ScaleDuration); + } + if (changesMask[108]) + { + data << int32(SpellOverrideNameID); + } + if (changesMask[109]) + { + data << int32(LooksLikeMountID); + } + if (changesMask[110]) + { + data << int32(LooksLikeCreatureID); + } + if (changesMask[111]) + { + data << int32(LookAtControllerID); + } + if (changesMask[112]) + { + data << int32(TaxiNodesID); + } + if (changesMask[113]) + { + data << GuildGUID; + } + } + if (changesMask[114]) + { + for (std::size_t i = 0; i < 2; ++i) + { + if (changesMask[115 + i]) + { + data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(NpcFlags[i], i, owner, receiver)); + } + } + } + if (changesMask[117]) + { + for (std::size_t i = 0; i < 6; ++i) + { + if (changesMask[118 + i]) + { + data << int32(Power[i]); + } + if (changesMask[124 + i]) + { + data << int32(MaxPower[i]); + } + if (changesMask[130 + i]) + { + data << float(PowerRegenFlatModifier[i]); + } + if (changesMask[136 + i]) + { + data << float(PowerRegenInterruptedFlatModifier[i]); + } + } + } + if (changesMask[142]) + { + for (std::size_t i = 0; i < 3; ++i) + { + if (changesMask[143 + i]) + { + VirtualItems[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + } + } + } + if (changesMask[146]) + { + for (std::size_t i = 0; i < 2; ++i) + { + if (changesMask[147 + i]) + { + data << uint32(AttackRoundBaseTime[i]); + } + } + } + if (changesMask[149]) + { + for (std::size_t i = 0; i < 4; ++i) + { + if (changesMask[150 + i]) + { + data << int32(Stats[i]); + } + if (changesMask[154 + i]) + { + data << int32(StatPosBuff[i]); + } + if (changesMask[158 + i]) + { + data << int32(StatNegBuff[i]); + } + } + } + if (changesMask[162]) + { + for (std::size_t i = 0; i < 7; ++i) + { + if (changesMask[163 + i]) + { + data << int32(Resistances[i]); + } + if (changesMask[170 + i]) + { + data << int32(BonusResistanceMods[i]); + } + if (changesMask[177 + i]) + { + data << int32(PowerCostModifier[i]); + } + if (changesMask[184 + i]) + { + data << float(PowerCostMultiplier[i]); + } + } + } +} + +void UnitData::ClearChangesMask() +{ + Base::ClearChangesMask(StateWorldEffectIDs); + Base::ClearChangesMask(PassiveSpells); + Base::ClearChangesMask(WorldEffects); + Base::ClearChangesMask(ChannelObjects); + Base::ClearChangesMask(DisplayID); + Base::ClearChangesMask(StateSpellVisualID); + Base::ClearChangesMask(StateAnimID); + Base::ClearChangesMask(StateAnimKitID); + Base::ClearChangesMask(StateWorldEffectsQuestObjectiveID); + Base::ClearChangesMask(Charm); + Base::ClearChangesMask(Summon); + Base::ClearChangesMask(Critter); + Base::ClearChangesMask(CharmedBy); + Base::ClearChangesMask(SummonedBy); + Base::ClearChangesMask(CreatedBy); + Base::ClearChangesMask(DemonCreator); + Base::ClearChangesMask(LookAtControllerTarget); + Base::ClearChangesMask(Target); + Base::ClearChangesMask(BattlePetCompanionGUID); + Base::ClearChangesMask(BattlePetDBID); + Base::ClearChangesMask(ChannelData); + Base::ClearChangesMask(SummonedByHomeRealm); + Base::ClearChangesMask(Race); + Base::ClearChangesMask(ClassId); + Base::ClearChangesMask(PlayerClassId); + Base::ClearChangesMask(Sex); + Base::ClearChangesMask(DisplayPower); + Base::ClearChangesMask(OverrideDisplayPowerID); + Base::ClearChangesMask(Health); + Base::ClearChangesMask(MaxHealth); + Base::ClearChangesMask(Level); + Base::ClearChangesMask(EffectiveLevel); + Base::ClearChangesMask(ContentTuningID); + Base::ClearChangesMask(ScalingLevelMin); + Base::ClearChangesMask(ScalingLevelMax); + Base::ClearChangesMask(ScalingLevelDelta); + Base::ClearChangesMask(ScalingFactionGroup); + Base::ClearChangesMask(ScalingHealthItemLevelCurveID); + Base::ClearChangesMask(ScalingDamageItemLevelCurveID); + Base::ClearChangesMask(FactionTemplate); + Base::ClearChangesMask(Flags); + Base::ClearChangesMask(Flags2); + Base::ClearChangesMask(Flags3); + Base::ClearChangesMask(AuraState); + Base::ClearChangesMask(RangedAttackRoundBaseTime); + Base::ClearChangesMask(BoundingRadius); + Base::ClearChangesMask(CombatReach); + Base::ClearChangesMask(DisplayScale); + Base::ClearChangesMask(NativeDisplayID); + Base::ClearChangesMask(NativeXDisplayScale); + Base::ClearChangesMask(MountDisplayID); + Base::ClearChangesMask(CosmeticMountDisplayID); + Base::ClearChangesMask(MinDamage); + Base::ClearChangesMask(MaxDamage); + Base::ClearChangesMask(MinOffHandDamage); + Base::ClearChangesMask(MaxOffHandDamage); + Base::ClearChangesMask(StandState); + Base::ClearChangesMask(PetTalentPoints); + Base::ClearChangesMask(VisFlags); + Base::ClearChangesMask(AnimTier); + Base::ClearChangesMask(PetNumber); + Base::ClearChangesMask(PetNameTimestamp); + Base::ClearChangesMask(PetExperience); + Base::ClearChangesMask(PetNextLevelExperience); + Base::ClearChangesMask(ModCastingSpeed); + Base::ClearChangesMask(ModSpellHaste); + Base::ClearChangesMask(ModHaste); + Base::ClearChangesMask(ModRangedHaste); + Base::ClearChangesMask(ModHasteRegen); + Base::ClearChangesMask(ModTimeRate); + Base::ClearChangesMask(CreatedBySpell); + Base::ClearChangesMask(EmoteState); + Base::ClearChangesMask(BaseMana); + Base::ClearChangesMask(BaseHealth); + Base::ClearChangesMask(SheatheState); + Base::ClearChangesMask(PvpFlags); + Base::ClearChangesMask(PetFlags); + Base::ClearChangesMask(ShapeshiftForm); + Base::ClearChangesMask(AttackPower); + Base::ClearChangesMask(AttackPowerModPos); + Base::ClearChangesMask(AttackPowerModNeg); + Base::ClearChangesMask(AttackPowerMultiplier); + Base::ClearChangesMask(RangedAttackPower); + Base::ClearChangesMask(RangedAttackPowerModPos); + Base::ClearChangesMask(RangedAttackPowerModNeg); + Base::ClearChangesMask(RangedAttackPowerMultiplier); + Base::ClearChangesMask(MainHandWeaponAttackPower); + Base::ClearChangesMask(OffHandWeaponAttackPower); + Base::ClearChangesMask(RangedWeaponAttackPower); + Base::ClearChangesMask(SetAttackSpeedAura); + Base::ClearChangesMask(Lifesteal); + Base::ClearChangesMask(MinRangedDamage); + Base::ClearChangesMask(MaxRangedDamage); + Base::ClearChangesMask(ManaCostModifierModifier); + Base::ClearChangesMask(MaxHealthModifier); + Base::ClearChangesMask(HoverHeight); + Base::ClearChangesMask(MinItemLevelCutoff); + Base::ClearChangesMask(MinItemLevel); + Base::ClearChangesMask(MaxItemLevel); + Base::ClearChangesMask(AzeriteItemLevel); + Base::ClearChangesMask(WildBattlePetLevel); + Base::ClearChangesMask(BattlePetCompanionNameTimestamp); + Base::ClearChangesMask(InteractSpellID); + Base::ClearChangesMask(ScaleDuration); + Base::ClearChangesMask(SpellOverrideNameID); + Base::ClearChangesMask(LooksLikeMountID); + Base::ClearChangesMask(LooksLikeCreatureID); + Base::ClearChangesMask(LookAtControllerID); + Base::ClearChangesMask(TaxiNodesID); + Base::ClearChangesMask(GuildGUID); + Base::ClearChangesMask(NpcFlags); + Base::ClearChangesMask(Power); + Base::ClearChangesMask(MaxPower); + Base::ClearChangesMask(PowerRegenFlatModifier); + Base::ClearChangesMask(PowerRegenInterruptedFlatModifier); + Base::ClearChangesMask(VirtualItems); + Base::ClearChangesMask(AttackRoundBaseTime); + Base::ClearChangesMask(Stats); + Base::ClearChangesMask(StatPosBuff); + Base::ClearChangesMask(StatNegBuff); + Base::ClearChangesMask(Resistances); + Base::ClearChangesMask(BonusResistanceMods); + Base::ClearChangesMask(PowerCostModifier); + Base::ClearChangesMask(PowerCostMultiplier); + _changesMask.ResetAll(); +} + +void QuestLog::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + data << int32(QuestID); + data << uint32(StateFlags); + data << uint32(EndTime); + data << uint32(AcceptTime); + for (std::size_t i = 0; i < 24; ++i) + { + data << int16(ObjectiveProgress[i]); + } +} + +void QuestLog::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + UpdateMask<30> const& changesMask = _changesMask; + data.WriteBits(changesMask.GetBlocksMask(0), 1); + if (changesMask.GetBlock(0)) + data.WriteBits(changesMask.GetBlock(0), 32); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << int32(QuestID); + } + if (changesMask[2]) + { + data << uint32(StateFlags); + } + if (changesMask[3]) + { + data << uint32(EndTime); + } + if (changesMask[4]) + { + data << uint32(AcceptTime); + } + } + if (changesMask[5]) + { + for (std::size_t i = 0; i < 24; ++i) + { + if (changesMask[6 + i]) + { + data << int16(ObjectiveProgress[i]); + } + } + } +} + +void QuestLog::ClearChangesMask() +{ + Base::ClearChangesMask(QuestID); + Base::ClearChangesMask(StateFlags); + Base::ClearChangesMask(EndTime); + Base::ClearChangesMask(AcceptTime); + Base::ClearChangesMask(ObjectiveProgress); + _changesMask.ResetAll(); +} + +void ArenaCooldown::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + data << int32(SpellID); + data << int32(Charges); + data << uint32(Flags); + data << uint32(StartTime); + data << uint32(EndTime); + data << uint32(NextChargeTime); + data << uint8(MaxCharges); +} + +void ArenaCooldown::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + UpdateMask<8> const& changesMask = _changesMask; + data.WriteBits(changesMask.GetBlock(0), 8); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << int32(SpellID); + } + if (changesMask[2]) + { + data << int32(Charges); + } + if (changesMask[3]) + { + data << uint32(Flags); + } + if (changesMask[4]) + { + data << uint32(StartTime); + } + if (changesMask[5]) + { + data << uint32(EndTime); + } + if (changesMask[6]) + { + data << uint32(NextChargeTime); + } + if (changesMask[7]) + { + data << uint8(MaxCharges); + } + } +} + +void ArenaCooldown::ClearChangesMask() +{ + Base::ClearChangesMask(SpellID); + Base::ClearChangesMask(Charges); + Base::ClearChangesMask(Flags); + Base::ClearChangesMask(StartTime); + Base::ClearChangesMask(EndTime); + Base::ClearChangesMask(NextChargeTime); + Base::ClearChangesMask(MaxCharges); + _changesMask.ResetAll(); +} + +void PlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + data << DuelArbiter; + data << WowAccount; + data << LootTargetGUID; + data << uint32(PlayerFlags); + data << uint32(PlayerFlagsEx); + data << uint32(GuildRankID); + data << uint32(GuildDeleteDate); + data << int32(GuildLevel); + data << uint8(SkinID); + data << uint8(FaceID); + data << uint8(HairStyleID); + data << uint8(HairColorID); + for (std::size_t i = 0; i < 3; ++i) + { + data << uint8(CustomDisplayOption[i]); + } + data << uint8(FacialHairStyleID); + data << uint8(PartyType); + data << uint8(NativeSex); + data << uint8(Inebriation); + data << uint8(PvpTitle); + data << uint8(ArenaFaction); + data << uint32(DuelTeam); + data << int32(GuildTimeStamp); + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember)) + { + for (std::size_t i = 0; i < 100; ++i) + { + QuestLog[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + } + } + for (std::size_t i = 0; i < 19; ++i) + { + VisibleItems[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + } + data << int32(PlayerTitle); + data << int32(FakeInebriation); + data << uint32(VirtualPlayerRealm); + data << uint32(CurrentSpecID); + data << int32(TaxiMountAnimKitID); + for (std::size_t i = 0; i < 4; ++i) + { + data << float(AvgItemLevel[i]); + } + data << uint8(CurrentBattlePetBreedQuality); + data << int32(HonorLevel); + data << uint32(ArenaCooldowns.size()); + data << int32(Field_B0); + data << int32(Field_B4); + for (std::size_t i = 0; i < ArenaCooldowns.size(); ++i) + { + ArenaCooldowns[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + } +} + +void PlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + UpdateMask<161> allowedMaskForTarget({ 0xFFFFFFFFu, 0x00000007u, 0x00000000u, 0x00000000u, 0xFFFFFF00u, 0x00000001u }); + AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); + WriteUpdate(data, _changesMask & allowedMaskForTarget, fieldVisibilityFlags, owner, receiver); +} + +void PlayerData::AppendAllowedFieldsMaskForFlag(UpdateMask<161>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const +{ + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember)) + allowedMaskForTarget |= { 0x00000000u, 0xFFFFFFF8u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x000000FFu, 0x00000000u }; +} + +void PlayerData::WriteUpdate(ByteBuffer& data, UpdateMask<161> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + data.WriteBits(changesMask.GetBlocksMask(0), 6); + for (std::size_t i = 0; i < 6; ++i) + if (changesMask.GetBlock(i)) + data.WriteBits(changesMask.GetBlock(i), 32); + + if (changesMask[0]) + { + if (changesMask[1]) + { + ArenaCooldowns.WriteUpdateMask(data); + } + } + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + for (std::size_t i = 0; i < ArenaCooldowns.size(); ++i) + { + if (ArenaCooldowns.HasChanged(i)) + { + ArenaCooldowns[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + } + } + } + if (changesMask[2]) + { + data << DuelArbiter; + } + if (changesMask[3]) + { + data << WowAccount; + } + if (changesMask[4]) + { + data << LootTargetGUID; + } + if (changesMask[5]) + { + data << uint32(PlayerFlags); + } + if (changesMask[6]) + { + data << uint32(PlayerFlagsEx); + } + if (changesMask[7]) + { + data << uint32(GuildRankID); + } + if (changesMask[8]) + { + data << uint32(GuildDeleteDate); + } + if (changesMask[9]) + { + data << int32(GuildLevel); + } + if (changesMask[10]) + { + data << uint8(SkinID); + } + if (changesMask[11]) + { + data << uint8(FaceID); + } + if (changesMask[12]) + { + data << uint8(HairStyleID); + } + if (changesMask[13]) + { + data << uint8(HairColorID); + } + if (changesMask[14]) + { + data << uint8(FacialHairStyleID); + } + if (changesMask[15]) + { + data << uint8(PartyType); + } + if (changesMask[16]) + { + data << uint8(NativeSex); + } + if (changesMask[17]) + { + data << uint8(Inebriation); + } + if (changesMask[18]) + { + data << uint8(PvpTitle); + } + if (changesMask[19]) + { + data << uint8(ArenaFaction); + } + if (changesMask[20]) + { + data << uint32(DuelTeam); + } + if (changesMask[21]) + { + data << int32(GuildTimeStamp); + } + if (changesMask[22]) + { + data << int32(PlayerTitle); + } + if (changesMask[23]) + { + data << int32(FakeInebriation); + } + if (changesMask[24]) + { + data << uint32(VirtualPlayerRealm); + } + if (changesMask[25]) + { + data << uint32(CurrentSpecID); + } + if (changesMask[26]) + { + data << int32(TaxiMountAnimKitID); + } + if (changesMask[27]) + { + data << uint8(CurrentBattlePetBreedQuality); + } + if (changesMask[28]) + { + data << int32(HonorLevel); + } + if (changesMask[29]) + { + data << int32(Field_B0); + } + if (changesMask[30]) + { + data << int32(Field_B4); + } + } + if (changesMask[31]) + { + for (std::size_t i = 0; i < 3; ++i) + { + if (changesMask[32 + i]) + { + data << uint8(CustomDisplayOption[i]); + } + } + } + if (changesMask[35]) + { + for (std::size_t i = 0; i < 100; ++i) + { + if (changesMask[36 + i]) + { + QuestLog[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + } + } + } + if (changesMask[136]) + { + for (std::size_t i = 0; i < 19; ++i) + { + if (changesMask[137 + i]) + { + VisibleItems[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + } + } + } + if (changesMask[156]) + { + for (std::size_t i = 0; i < 4; ++i) + { + if (changesMask[157 + i]) + { + data << float(AvgItemLevel[i]); + } + } + } +} + +void PlayerData::ClearChangesMask() +{ + Base::ClearChangesMask(ArenaCooldowns); + Base::ClearChangesMask(DuelArbiter); + Base::ClearChangesMask(WowAccount); + Base::ClearChangesMask(LootTargetGUID); + Base::ClearChangesMask(PlayerFlags); + Base::ClearChangesMask(PlayerFlagsEx); + Base::ClearChangesMask(GuildRankID); + Base::ClearChangesMask(GuildDeleteDate); + Base::ClearChangesMask(GuildLevel); + Base::ClearChangesMask(SkinID); + Base::ClearChangesMask(FaceID); + Base::ClearChangesMask(HairStyleID); + Base::ClearChangesMask(HairColorID); + Base::ClearChangesMask(FacialHairStyleID); + Base::ClearChangesMask(PartyType); + Base::ClearChangesMask(NativeSex); + Base::ClearChangesMask(Inebriation); + Base::ClearChangesMask(PvpTitle); + Base::ClearChangesMask(ArenaFaction); + Base::ClearChangesMask(DuelTeam); + Base::ClearChangesMask(GuildTimeStamp); + Base::ClearChangesMask(PlayerTitle); + Base::ClearChangesMask(FakeInebriation); + Base::ClearChangesMask(VirtualPlayerRealm); + Base::ClearChangesMask(CurrentSpecID); + Base::ClearChangesMask(TaxiMountAnimKitID); + Base::ClearChangesMask(CurrentBattlePetBreedQuality); + Base::ClearChangesMask(HonorLevel); + Base::ClearChangesMask(Field_B0); + Base::ClearChangesMask(Field_B4); + Base::ClearChangesMask(CustomDisplayOption); + Base::ClearChangesMask(QuestLog); + Base::ClearChangesMask(VisibleItems); + Base::ClearChangesMask(AvgItemLevel); + _changesMask.ResetAll(); +} + +void SkillInfo::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + for (std::size_t i = 0; i < 256; ++i) + { + data << uint16(SkillLineID[i]); + data << uint16(SkillStep[i]); + data << uint16(SkillRank[i]); + data << uint16(SkillStartingRank[i]); + data << uint16(SkillMaxRank[i]); + data << int16(SkillTempBonus[i]); + data << uint16(SkillPermBonus[i]); + } +} + +void SkillInfo::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + UpdateMask<1793> const& changesMask = _changesMask; + for (std::size_t i = 0; i < 1; ++i) + data << uint32(changesMask.GetBlocksMask(i)); + data.WriteBits(changesMask.GetBlocksMask(1), 25); + for (std::size_t i = 0; i < 57; ++i) + if (changesMask.GetBlock(i)) + data.WriteBits(changesMask.GetBlock(i), 32); + + data.FlushBits(); + if (changesMask[0]) + { + for (std::size_t i = 0; i < 256; ++i) + { + if (changesMask[1 + i]) + { + data << uint16(SkillLineID[i]); + } + if (changesMask[257 + i]) + { + data << uint16(SkillStep[i]); + } + if (changesMask[513 + i]) + { + data << uint16(SkillRank[i]); + } + if (changesMask[769 + i]) + { + data << uint16(SkillStartingRank[i]); + } + if (changesMask[1025 + i]) + { + data << uint16(SkillMaxRank[i]); + } + if (changesMask[1281 + i]) + { + data << int16(SkillTempBonus[i]); + } + if (changesMask[1537 + i]) + { + data << uint16(SkillPermBonus[i]); + } + } + } +} + +void SkillInfo::ClearChangesMask() +{ + Base::ClearChangesMask(SkillLineID); + Base::ClearChangesMask(SkillStep); + Base::ClearChangesMask(SkillRank); + Base::ClearChangesMask(SkillStartingRank); + Base::ClearChangesMask(SkillMaxRank); + Base::ClearChangesMask(SkillTempBonus); + Base::ClearChangesMask(SkillPermBonus); + _changesMask.ResetAll(); +} + +void RestInfo::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + data << uint32(Threshold); + data << uint8(StateID); +} + +void RestInfo::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + UpdateMask<3> const& changesMask = _changesMask; + data.WriteBits(changesMask.GetBlock(0), 3); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << uint32(Threshold); + } + if (changesMask[2]) + { + data << uint8(StateID); + } + } +} + +void RestInfo::ClearChangesMask() +{ + Base::ClearChangesMask(Threshold); + Base::ClearChangesMask(StateID); + _changesMask.ResetAll(); +} + +void PVPInfo::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + data << uint32(Field_0); + data << uint32(Field_4); + data << uint32(Field_8); + data << uint32(Field_C); + data << uint32(Rating); + data << uint32(Field_14); + data << uint32(Field_18); + data << uint32(PvpTierID); + data.WriteBits(Field_20, 1); + data.FlushBits(); +} + +void PVPInfo::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + UpdateMask<10> const& changesMask = _changesMask; + data.WriteBits(changesMask.GetBlock(0), 10); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << uint32(Field_0); + } + if (changesMask[2]) + { + data << uint32(Field_4); + } + if (changesMask[3]) + { + data << uint32(Field_8); + } + if (changesMask[4]) + { + data << uint32(Field_C); + } + if (changesMask[5]) + { + data << uint32(Rating); + } + if (changesMask[6]) + { + data << uint32(Field_14); + } + if (changesMask[7]) + { + data << uint32(Field_18); + } + if (changesMask[8]) + { + data << uint32(PvpTierID); + } + if (changesMask[9]) + { + data.WriteBits(Field_20, 1); + } + } + data.FlushBits(); +} + +void PVPInfo::ClearChangesMask() +{ + Base::ClearChangesMask(Field_0); + Base::ClearChangesMask(Field_4); + Base::ClearChangesMask(Field_8); + Base::ClearChangesMask(Field_C); + Base::ClearChangesMask(Rating); + Base::ClearChangesMask(Field_14); + Base::ClearChangesMask(Field_18); + Base::ClearChangesMask(PvpTierID); + Base::ClearChangesMask(Field_20); + _changesMask.ResetAll(); +} + +void CharacterRestriction::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + data << int32(Field_0); + data << int32(Field_4); + data << int32(Field_8); + data.WriteBits(Type, 5); + data.FlushBits(); +} + +void CharacterRestriction::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + data.FlushBits(); + data << int32(Field_0); + data << int32(Field_4); + data << int32(Field_8); + data.WriteBits(Type, 5); + data.FlushBits(); +} + +void SpellPctModByLabel::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + data << int32(ModIndex); + data << float(ModifierValue); + data << int32(LabelID); +} + +void SpellPctModByLabel::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + data.FlushBits(); + data << int32(ModIndex); + data << float(ModifierValue); + data << int32(LabelID); +} + +void SpellFlatModByLabel::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + data << int32(ModIndex); + data << int32(ModifierValue); + data << int32(LabelID); +} + +void SpellFlatModByLabel::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + data.FlushBits(); + data << int32(ModIndex); + data << int32(ModifierValue); + data << int32(LabelID); +} + +void Research::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + data << int16(ResearchProjectID); +} + +void Research::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + data.FlushBits(); + data << int16(ResearchProjectID); +} + +void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + for (std::size_t i = 0; i < 195; ++i) + { + data << InvSlots[i]; + } + data << FarsightObject; + data << SummonedBattlePetGUID; + data << uint32(KnownTitles.size()); + data << uint64(Coinage); + data << int32(XP); + data << int32(NextLevelXP); + data << int32(TrialXP); + Skill->WriteCreate(data, fieldVisibilityFlags, owner, receiver); + data << int32(CharacterPoints); + data << int32(MaxTalentTiers); + data << int32(TrackCreatureMask); + for (std::size_t i = 0; i < 2; ++i) + { + data << uint32(TrackResourceMask[i]); + } + data << float(MainhandExpertise); + data << float(OffhandExpertise); + data << float(RangedExpertise); + data << float(CombatRatingExpertise); + data << float(BlockPercentage); + data << float(DodgePercentage); + data << float(DodgePercentageFromAttribute); + data << float(ParryPercentage); + data << float(ParryPercentageFromAttribute); + data << float(CritPercentage); + data << float(RangedCritPercentage); + data << float(OffhandCritPercentage); + data << float(SpellCritPercentage); + data << int32(ShieldBlock); + data << float(ShieldBlockCritPercentage); + data << float(Mastery); + data << float(Speed); + data << float(Avoidance); + data << float(Sturdiness); + data << int32(Versatility); + data << float(VersatilityBonus); + data << float(PvpPowerDamage); + data << float(PvpPowerHealing); + for (std::size_t i = 0; i < 160; ++i) + { + data << uint64(ExploredZones[i]); + } + for (std::size_t i = 0; i < 2; ++i) + { + RestInfo[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + } + for (std::size_t i = 0; i < 7; ++i) + { + data << int32(ModDamageDonePos[i]); + data << int32(ModDamageDoneNeg[i]); + data << float(ModDamageDonePercent[i]); + } + data << int32(ModHealingDonePos); + data << float(ModHealingPercent); + data << float(ModHealingDonePercent); + data << float(ModPeriodicHealingDonePercent); + for (std::size_t i = 0; i < 3; ++i) + { + data << float(WeaponDmgMultipliers[i]); + data << float(WeaponAtkSpeedMultipliers[i]); + } + data << float(ModSpellPowerPercent); + data << float(ModResiliencePercent); + data << float(OverrideSpellPowerByAPPercent); + data << float(OverrideAPBySpellPowerPercent); + data << int32(ModTargetResistance); + data << int32(ModTargetPhysicalResistance); + data << int32(LocalFlags); + data << uint8(GrantableLevels); + data << uint8(MultiActionBars); + data << uint8(LifetimeMaxRank); + data << uint8(NumRespecs); + data << uint32(PvpMedals); + for (std::size_t i = 0; i < 12; ++i) + { + data << uint32(BuybackPrice[i]); + data << uint32(BuybackTimestamp[i]); + } + data << uint16(TodayHonorableKills); + data << uint16(YesterdayHonorableKills); + data << uint32(LifetimeHonorableKills); + data << int32(WatchedFactionIndex); + for (std::size_t i = 0; i < 32; ++i) + { + data << int32(CombatRatings[i]); + } + data << int32(MaxLevel); + data << int32(ScalingPlayerLevelDelta); + data << int32(MaxCreatureScalingLevel); + for (std::size_t i = 0; i < 4; ++i) + { + data << uint32(NoReagentCostMask[i]); + } + data << int32(PetSpellPower); + for (std::size_t i = 0; i < 2; ++i) + { + data << int32(ProfessionSkillLine[i]); + } + data << float(UiHitModifier); + data << float(UiSpellHitModifier); + data << int32(HomeRealmTimeOffset); + data << float(ModPetHaste); + data << uint8(LocalRegenFlags); + data << uint8(AuraVision); + data << uint8(NumBackpackSlots); + data << int32(OverrideSpellsID); + data << int32(LfgBonusFactionID); + data << uint16(LootSpecID); + data << uint32(OverrideZonePVPType); + for (std::size_t i = 0; i < 4; ++i) + { + data << uint32(BagSlotFlags[i]); + } + for (std::size_t i = 0; i < 7; ++i) + { + data << uint32(BankBagSlotFlags[i]); + } + for (std::size_t i = 0; i < 875; ++i) + { + data << uint64(QuestCompleted[i]); + } + data << int32(Honor); + data << int32(HonorNextLevel); + data << int32(PvpRewardAchieved); + data << int32(PvpTierMaxFromWins); + data << int32(PvpLastWeeksRewardAchieved); + data << int32(PvpLastWeeksTierMaxFromWins); + data << int32(PvpLastWeeksRewardClaimed); + data << uint8(NumBankSlots); + data << uint32(ResearchSites.size()); + data << uint32(ResearchSiteProgress.size()); + data << uint32(DailyQuestsCompleted.size()); + data << uint32(AvailableQuestLineXQuestIDs.size()); + data << uint32(Heirlooms.size()); + data << uint32(HeirloomFlags.size()); + data << uint32(Toys.size()); + data << uint32(ToyFlags.size()); + data << uint32(Transmog.size()); + data << uint32(ConditionalTransmog.size()); + data << uint32(SelfResSpells.size()); + data << uint32(CharacterRestrictions.size()); + data << uint32(SpellPctModByLabel.size()); + data << uint32(SpellFlatModByLabel.size()); + for (std::size_t i = 0; i < 1; ++i) + { + data << uint32(Research[i].size()); + for (std::size_t j = 0; j < Research[i].size(); ++j) + { + Research[i][j].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + } + } + for (std::size_t i = 0; i < KnownTitles.size(); ++i) + { + data << uint64(KnownTitles[i]); + } + for (std::size_t i = 0; i < ResearchSites.size(); ++i) + { + data << uint16(ResearchSites[i]); + } + for (std::size_t i = 0; i < ResearchSiteProgress.size(); ++i) + { + data << uint32(ResearchSiteProgress[i]); + } + for (std::size_t i = 0; i < DailyQuestsCompleted.size(); ++i) + { + data << int32(DailyQuestsCompleted[i]); + } + for (std::size_t i = 0; i < AvailableQuestLineXQuestIDs.size(); ++i) + { + data << int32(AvailableQuestLineXQuestIDs[i]); + } + for (std::size_t i = 0; i < Heirlooms.size(); ++i) + { + data << int32(Heirlooms[i]); + } + for (std::size_t i = 0; i < HeirloomFlags.size(); ++i) + { + data << uint32(HeirloomFlags[i]); + } + for (std::size_t i = 0; i < Toys.size(); ++i) + { + data << int32(Toys[i]); + } + for (std::size_t i = 0; i < ToyFlags.size(); ++i) + { + data << uint32(ToyFlags[i]); + } + for (std::size_t i = 0; i < Transmog.size(); ++i) + { + data << uint32(Transmog[i]); + } + for (std::size_t i = 0; i < ConditionalTransmog.size(); ++i) + { + data << int32(ConditionalTransmog[i]); + } + for (std::size_t i = 0; i < SelfResSpells.size(); ++i) + { + data << int32(SelfResSpells[i]); + } + for (std::size_t i = 0; i < SpellPctModByLabel.size(); ++i) + { + SpellPctModByLabel[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + } + for (std::size_t i = 0; i < SpellFlatModByLabel.size(); ++i) + { + SpellFlatModByLabel[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + } + data.WriteBit(BackpackAutoSortDisabled); + data.WriteBit(BankAutoSortDisabled); + data.WriteBit(SortBagsRightToLeft); + data.WriteBit(InsertItemsLeftToRight); + for (std::size_t i = 0; i < CharacterRestrictions.size(); ++i) + { + CharacterRestrictions[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + } + for (std::size_t i = 0; i < 6; ++i) + { + PvpInfo[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + } + data.FlushBits(); +} + +void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +{ + UpdateMask<1455> const& changesMask = _changesMask; + for (std::size_t i = 0; i < 1; ++i) + data << uint32(changesMask.GetBlocksMask(i)); + data.WriteBits(changesMask.GetBlocksMask(1), 14); + for (std::size_t i = 0; i < 46; ++i) + if (changesMask.GetBlock(i)) + data.WriteBits(changesMask.GetBlock(i), 32); + + if (changesMask[0]) + { + if (changesMask[1]) + { + data.WriteBit(BackpackAutoSortDisabled); + } + if (changesMask[2]) + { + data.WriteBit(BankAutoSortDisabled); + } + if (changesMask[3]) + { + data.WriteBit(SortBagsRightToLeft); + } + if (changesMask[4]) + { + data.WriteBit(InsertItemsLeftToRight); + } + if (changesMask[5]) + { + KnownTitles.WriteUpdateMask(data); + } + if (changesMask[6]) + { + ResearchSites.WriteUpdateMask(data); + } + if (changesMask[7]) + { + ResearchSiteProgress.WriteUpdateMask(data); + } + if (changesMask[8]) + { + DailyQuestsCompleted.WriteUpdateMask(data); + } + if (changesMask[9]) + { + AvailableQuestLineXQuestIDs.WriteUpdateMask(data); + } + if (changesMask[10]) + { + Heirlooms.WriteUpdateMask(data); + } + if (changesMask[11]) + { + HeirloomFlags.WriteUpdateMask(data); + } + if (changesMask[12]) + { + Toys.WriteUpdateMask(data); + } + if (changesMask[13]) + { + ToyFlags.WriteUpdateMask(data); + } + if (changesMask[14]) + { + Transmog.WriteUpdateMask(data); + } + if (changesMask[15]) + { + ConditionalTransmog.WriteUpdateMask(data); + } + if (changesMask[16]) + { + SelfResSpells.WriteUpdateMask(data); + } + if (changesMask[17]) + { + SpellPctModByLabel.WriteUpdateMask(data); + } + if (changesMask[18]) + { + SpellFlatModByLabel.WriteUpdateMask(data); + } + if (changesMask[19]) + { + CharacterRestrictions.WriteUpdateMask(data); + } + } + if (changesMask[20]) + { + for (std::size_t i = 0; i < 1; ++i) + { + if (changesMask[21 + i]) + { + Research[i].WriteUpdateMask(data); + } + } + } + data.FlushBits(); + if (changesMask[20]) + { + for (std::size_t i = 0; i < 1; ++i) + { + if (changesMask[21 + i]) + { + for (std::size_t j = 0; j < Research[i].size(); ++j) + { + if (Research[i].HasChanged(j)) + { + Research[i][j].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + } + } + } + } + } + if (changesMask[0]) + { + if (changesMask[5]) + { + for (std::size_t i = 0; i < KnownTitles.size(); ++i) + { + if (KnownTitles.HasChanged(i)) + { + data << uint64(KnownTitles[i]); + } + } + } + if (changesMask[6]) + { + for (std::size_t i = 0; i < ResearchSites.size(); ++i) + { + if (ResearchSites.HasChanged(i)) + { + data << uint16(ResearchSites[i]); + } + } + } + if (changesMask[7]) + { + for (std::size_t i = 0; i < ResearchSiteProgress.size(); ++i) + { + if (ResearchSiteProgress.HasChanged(i)) + { + data << uint32(ResearchSiteProgress[i]); + } + } + } + if (changesMask[8]) + { + for (std::size_t i = 0; i < DailyQuestsCompleted.size(); ++i) + { + if (DailyQuestsCompleted.HasChanged(i)) + { + data << int32(DailyQuestsCompleted[i]); + } + } + } + if (changesMask[9]) + { + for (std::size_t i = 0; i < AvailableQuestLineXQuestIDs.size(); ++i) + { + if (AvailableQuestLineXQuestIDs.HasChanged(i)) + { + data << int32(AvailableQuestLineXQuestIDs[i]); + } + } + } + if (changesMask[10]) + { + for (std::size_t i = 0; i < Heirlooms.size(); ++i) + { + if (Heirlooms.HasChanged(i)) + { + data << int32(Heirlooms[i]); + } + } + } + if (changesMask[11]) + { + for (std::size_t i = 0; i < HeirloomFlags.size(); ++i) + { + if (HeirloomFlags.HasChanged(i)) + { + data << uint32(HeirloomFlags[i]); + } + } + } + if (changesMask[12]) + { + for (std::size_t i = 0; i < Toys.size(); ++i) + { + if (Toys.HasChanged(i)) + { + data << int32(Toys[i]); + } + } + } + if (changesMask[13]) + { + for (std::size_t i = 0; i < ToyFlags.size(); ++i) + { + if (ToyFlags.HasChanged(i)) + { + data << uint32(ToyFlags[i]); + } + } + } + if (changesMask[14]) + { + for (std::size_t i = 0; i < Transmog.size(); ++i) + { + if (Transmog.HasChanged(i)) + { + data << uint32(Transmog[i]); + } + } + } + if (changesMask[15]) + { + for (std::size_t i = 0; i < ConditionalTransmog.size(); ++i) + { + if (ConditionalTransmog.HasChanged(i)) + { + data << int32(ConditionalTransmog[i]); + } + } + } + if (changesMask[16]) + { + for (std::size_t i = 0; i < SelfResSpells.size(); ++i) + { + if (SelfResSpells.HasChanged(i)) + { + data << int32(SelfResSpells[i]); + } + } + } + if (changesMask[17]) + { + for (std::size_t i = 0; i < SpellPctModByLabel.size(); ++i) + { + if (SpellPctModByLabel.HasChanged(i)) + { + SpellPctModByLabel[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + } + } + } + if (changesMask[18]) + { + for (std::size_t i = 0; i < SpellFlatModByLabel.size(); ++i) + { + if (SpellFlatModByLabel.HasChanged(i)) + { + SpellFlatModByLabel[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + } + } + } + if (changesMask[19]) + { + for (std::size_t i = 0; i < CharacterRestrictions.size(); ++i) + { + if (CharacterRestrictions.HasChanged(i)) + { + CharacterRestrictions[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + } + } + } + if (changesMask[22]) + { + data << FarsightObject; + } + if (changesMask[23]) + { + data << SummonedBattlePetGUID; + } + if (changesMask[24]) + { + data << uint64(Coinage); + } + if (changesMask[25]) + { + data << int32(XP); + } + if (changesMask[26]) + { + data << int32(NextLevelXP); + } + if (changesMask[27]) + { + data << int32(TrialXP); + } + if (changesMask[28]) + { + Skill->WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + } + if (changesMask[29]) + { + data << int32(CharacterPoints); + } + if (changesMask[30]) + { + data << int32(MaxTalentTiers); + } + if (changesMask[31]) + { + data << int32(TrackCreatureMask); + } + if (changesMask[32]) + { + data << float(MainhandExpertise); + } + if (changesMask[33]) + { + data << float(OffhandExpertise); + } + } + if (changesMask[34]) + { + if (changesMask[35]) + { + data << float(RangedExpertise); + } + if (changesMask[36]) + { + data << float(CombatRatingExpertise); + } + if (changesMask[37]) + { + data << float(BlockPercentage); + } + if (changesMask[38]) + { + data << float(DodgePercentage); + } + if (changesMask[39]) + { + data << float(DodgePercentageFromAttribute); + } + if (changesMask[40]) + { + data << float(ParryPercentage); + } + if (changesMask[41]) + { + data << float(ParryPercentageFromAttribute); + } + if (changesMask[42]) + { + data << float(CritPercentage); + } + if (changesMask[43]) + { + data << float(RangedCritPercentage); + } + if (changesMask[44]) + { + data << float(OffhandCritPercentage); + } + if (changesMask[45]) + { + data << float(SpellCritPercentage); + } + if (changesMask[46]) + { + data << int32(ShieldBlock); + } + if (changesMask[47]) + { + data << float(ShieldBlockCritPercentage); + } + if (changesMask[48]) + { + data << float(Mastery); + } + if (changesMask[49]) + { + data << float(Speed); + } + if (changesMask[50]) + { + data << float(Avoidance); + } + if (changesMask[51]) + { + data << float(Sturdiness); + } + if (changesMask[52]) + { + data << int32(Versatility); + } + if (changesMask[53]) + { + data << float(VersatilityBonus); + } + if (changesMask[54]) + { + data << float(PvpPowerDamage); + } + if (changesMask[55]) + { + data << float(PvpPowerHealing); + } + if (changesMask[56]) + { + data << int32(ModHealingDonePos); + } + if (changesMask[57]) + { + data << float(ModHealingPercent); + } + if (changesMask[58]) + { + data << float(ModHealingDonePercent); + } + if (changesMask[59]) + { + data << float(ModPeriodicHealingDonePercent); + } + if (changesMask[60]) + { + data << float(ModSpellPowerPercent); + } + if (changesMask[61]) + { + data << float(ModResiliencePercent); + } + if (changesMask[62]) + { + data << float(OverrideSpellPowerByAPPercent); + } + if (changesMask[63]) + { + data << float(OverrideAPBySpellPowerPercent); + } + if (changesMask[64]) + { + data << int32(ModTargetResistance); + } + if (changesMask[65]) + { + data << int32(ModTargetPhysicalResistance); + } + } + if (changesMask[66]) + { + if (changesMask[67]) + { + data << int32(LocalFlags); + } + if (changesMask[68]) + { + data << uint8(GrantableLevels); + } + if (changesMask[69]) + { + data << uint8(MultiActionBars); + } + if (changesMask[70]) + { + data << uint8(LifetimeMaxRank); + } + if (changesMask[71]) + { + data << uint8(NumRespecs); + } + if (changesMask[72]) + { + data << uint32(PvpMedals); + } + if (changesMask[73]) + { + data << uint16(TodayHonorableKills); + } + if (changesMask[74]) + { + data << uint16(YesterdayHonorableKills); + } + if (changesMask[75]) + { + data << uint32(LifetimeHonorableKills); + } + if (changesMask[76]) + { + data << int32(WatchedFactionIndex); + } + if (changesMask[77]) + { + data << int32(MaxLevel); + } + if (changesMask[78]) + { + data << int32(ScalingPlayerLevelDelta); + } + if (changesMask[79]) + { + data << int32(MaxCreatureScalingLevel); + } + if (changesMask[80]) + { + data << int32(PetSpellPower); + } + if (changesMask[81]) + { + data << float(UiHitModifier); + } + if (changesMask[82]) + { + data << float(UiSpellHitModifier); + } + if (changesMask[83]) + { + data << int32(HomeRealmTimeOffset); + } + if (changesMask[84]) + { + data << float(ModPetHaste); + } + if (changesMask[85]) + { + data << uint8(LocalRegenFlags); + } + if (changesMask[86]) + { + data << uint8(AuraVision); + } + if (changesMask[87]) + { + data << uint8(NumBackpackSlots); + } + if (changesMask[88]) + { + data << int32(OverrideSpellsID); + } + if (changesMask[89]) + { + data << int32(LfgBonusFactionID); + } + if (changesMask[90]) + { + data << uint16(LootSpecID); + } + if (changesMask[91]) + { + data << uint32(OverrideZonePVPType); + } + if (changesMask[92]) + { + data << int32(Honor); + } + if (changesMask[93]) + { + data << int32(HonorNextLevel); + } + if (changesMask[94]) + { + data << int32(PvpRewardAchieved); + } + if (changesMask[95]) + { + data << int32(PvpTierMaxFromWins); + } + if (changesMask[96]) + { + data << int32(PvpLastWeeksRewardAchieved); + } + if (changesMask[97]) + { + data << int32(PvpLastWeeksTierMaxFromWins); + } + } + if (changesMask[98]) + { + if (changesMask[99]) + { + data << int32(PvpLastWeeksRewardClaimed); + } + if (changesMask[100]) + { + data << uint8(NumBankSlots); + } + } + if (changesMask[101]) + { + for (std::size_t i = 0; i < 195; ++i) + { + if (changesMask[102 + i]) + { + data << InvSlots[i]; + } + } + } + if (changesMask[297]) + { + for (std::size_t i = 0; i < 2; ++i) + { + if (changesMask[298 + i]) + { + data << uint32(TrackResourceMask[i]); + } + } + } + if (changesMask[300]) + { + for (std::size_t i = 0; i < 160; ++i) + { + if (changesMask[301 + i]) + { + data << uint64(ExploredZones[i]); + } + } + } + if (changesMask[461]) + { + for (std::size_t i = 0; i < 2; ++i) + { + if (changesMask[462 + i]) + { + RestInfo[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + } + } + } + if (changesMask[464]) + { + for (std::size_t i = 0; i < 7; ++i) + { + if (changesMask[465 + i]) + { + data << int32(ModDamageDonePos[i]); + } + if (changesMask[472 + i]) + { + data << int32(ModDamageDoneNeg[i]); + } + if (changesMask[479 + i]) + { + data << float(ModDamageDonePercent[i]); + } + } + } + if (changesMask[486]) + { + for (std::size_t i = 0; i < 3; ++i) + { + if (changesMask[487 + i]) + { + data << float(WeaponDmgMultipliers[i]); + } + if (changesMask[490 + i]) + { + data << float(WeaponAtkSpeedMultipliers[i]); + } + } + } + if (changesMask[493]) + { + for (std::size_t i = 0; i < 12; ++i) + { + if (changesMask[494 + i]) + { + data << uint32(BuybackPrice[i]); + } + if (changesMask[506 + i]) + { + data << uint32(BuybackTimestamp[i]); + } + } + } + if (changesMask[518]) + { + for (std::size_t i = 0; i < 32; ++i) + { + if (changesMask[519 + i]) + { + data << int32(CombatRatings[i]); + } + } + } + if (changesMask[558]) + { + for (std::size_t i = 0; i < 4; ++i) + { + if (changesMask[559 + i]) + { + data << uint32(NoReagentCostMask[i]); + } + } + } + if (changesMask[563]) + { + for (std::size_t i = 0; i < 2; ++i) + { + if (changesMask[564 + i]) + { + data << int32(ProfessionSkillLine[i]); + } + } + } + if (changesMask[566]) + { + for (std::size_t i = 0; i < 4; ++i) + { + if (changesMask[567 + i]) + { + data << uint32(BagSlotFlags[i]); + } + } + } + if (changesMask[571]) + { + for (std::size_t i = 0; i < 7; ++i) + { + if (changesMask[572 + i]) + { + data << uint32(BankBagSlotFlags[i]); + } + } + } + if (changesMask[579]) + { + for (std::size_t i = 0; i < 875; ++i) + { + if (changesMask[580 + i]) + { + data << uint64(QuestCompleted[i]); + } + } + } + if (changesMask[551]) + { + for (std::size_t i = 0; i < 6; ++i) + { + if (changesMask[552 + i]) + { + PvpInfo[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + } + } + } + data.FlushBits(); +} + +void ActivePlayerData::ClearChangesMask() +{ + Base::ClearChangesMask(BackpackAutoSortDisabled); + Base::ClearChangesMask(BankAutoSortDisabled); + Base::ClearChangesMask(SortBagsRightToLeft); + Base::ClearChangesMask(InsertItemsLeftToRight); + Base::ClearChangesMask(Research); + Base::ClearChangesMask(KnownTitles); + Base::ClearChangesMask(ResearchSites); + Base::ClearChangesMask(ResearchSiteProgress); + Base::ClearChangesMask(DailyQuestsCompleted); + Base::ClearChangesMask(AvailableQuestLineXQuestIDs); + Base::ClearChangesMask(Heirlooms); + Base::ClearChangesMask(HeirloomFlags); + Base::ClearChangesMask(Toys); + Base::ClearChangesMask(ToyFlags); + Base::ClearChangesMask(Transmog); + Base::ClearChangesMask(ConditionalTransmog); + Base::ClearChangesMask(SelfResSpells); + Base::ClearChangesMask(SpellPctModByLabel); + Base::ClearChangesMask(SpellFlatModByLabel); + Base::ClearChangesMask(CharacterRestrictions); + Base::ClearChangesMask(FarsightObject); + Base::ClearChangesMask(SummonedBattlePetGUID); + Base::ClearChangesMask(Coinage); + Base::ClearChangesMask(XP); + Base::ClearChangesMask(NextLevelXP); + Base::ClearChangesMask(TrialXP); + Base::ClearChangesMask(Skill); + Base::ClearChangesMask(CharacterPoints); + Base::ClearChangesMask(MaxTalentTiers); + Base::ClearChangesMask(TrackCreatureMask); + Base::ClearChangesMask(MainhandExpertise); + Base::ClearChangesMask(OffhandExpertise); + Base::ClearChangesMask(RangedExpertise); + Base::ClearChangesMask(CombatRatingExpertise); + Base::ClearChangesMask(BlockPercentage); + Base::ClearChangesMask(DodgePercentage); + Base::ClearChangesMask(DodgePercentageFromAttribute); + Base::ClearChangesMask(ParryPercentage); + Base::ClearChangesMask(ParryPercentageFromAttribute); + Base::ClearChangesMask(CritPercentage); + Base::ClearChangesMask(RangedCritPercentage); + Base::ClearChangesMask(OffhandCritPercentage); + Base::ClearChangesMask(SpellCritPercentage); + Base::ClearChangesMask(ShieldBlock); + Base::ClearChangesMask(ShieldBlockCritPercentage); + Base::ClearChangesMask(Mastery); + Base::ClearChangesMask(Speed); + Base::ClearChangesMask(Avoidance); + Base::ClearChangesMask(Sturdiness); + Base::ClearChangesMask(Versatility); + Base::ClearChangesMask(VersatilityBonus); + Base::ClearChangesMask(PvpPowerDamage); + Base::ClearChangesMask(PvpPowerHealing); + Base::ClearChangesMask(ModHealingDonePos); + Base::ClearChangesMask(ModHealingPercent); + Base::ClearChangesMask(ModHealingDonePercent); + Base::ClearChangesMask(ModPeriodicHealingDonePercent); + Base::ClearChangesMask(ModSpellPowerPercent); + Base::ClearChangesMask(ModResiliencePercent); + Base::ClearChangesMask(OverrideSpellPowerByAPPercent); + Base::ClearChangesMask(OverrideAPBySpellPowerPercent); + Base::ClearChangesMask(ModTargetResistance); + Base::ClearChangesMask(ModTargetPhysicalResistance); + Base::ClearChangesMask(LocalFlags); + Base::ClearChangesMask(GrantableLevels); + Base::ClearChangesMask(MultiActionBars); + Base::ClearChangesMask(LifetimeMaxRank); + Base::ClearChangesMask(NumRespecs); + Base::ClearChangesMask(PvpMedals); + Base::ClearChangesMask(TodayHonorableKills); + Base::ClearChangesMask(YesterdayHonorableKills); + Base::ClearChangesMask(LifetimeHonorableKills); + Base::ClearChangesMask(WatchedFactionIndex); + Base::ClearChangesMask(MaxLevel); + Base::ClearChangesMask(ScalingPlayerLevelDelta); + Base::ClearChangesMask(MaxCreatureScalingLevel); + Base::ClearChangesMask(PetSpellPower); + Base::ClearChangesMask(UiHitModifier); + Base::ClearChangesMask(UiSpellHitModifier); + Base::ClearChangesMask(HomeRealmTimeOffset); + Base::ClearChangesMask(ModPetHaste); + Base::ClearChangesMask(LocalRegenFlags); + Base::ClearChangesMask(AuraVision); + Base::ClearChangesMask(NumBackpackSlots); + Base::ClearChangesMask(OverrideSpellsID); + Base::ClearChangesMask(LfgBonusFactionID); + Base::ClearChangesMask(LootSpecID); + Base::ClearChangesMask(OverrideZonePVPType); + Base::ClearChangesMask(Honor); + Base::ClearChangesMask(HonorNextLevel); + Base::ClearChangesMask(PvpRewardAchieved); + Base::ClearChangesMask(PvpTierMaxFromWins); + Base::ClearChangesMask(PvpLastWeeksRewardAchieved); + Base::ClearChangesMask(PvpLastWeeksTierMaxFromWins); + Base::ClearChangesMask(PvpLastWeeksRewardClaimed); + Base::ClearChangesMask(NumBankSlots); + Base::ClearChangesMask(InvSlots); + Base::ClearChangesMask(TrackResourceMask); + Base::ClearChangesMask(ExploredZones); + Base::ClearChangesMask(RestInfo); + Base::ClearChangesMask(ModDamageDonePos); + Base::ClearChangesMask(ModDamageDoneNeg); + Base::ClearChangesMask(ModDamageDonePercent); + Base::ClearChangesMask(WeaponDmgMultipliers); + Base::ClearChangesMask(WeaponAtkSpeedMultipliers); + Base::ClearChangesMask(BuybackPrice); + Base::ClearChangesMask(BuybackTimestamp); + Base::ClearChangesMask(CombatRatings); + Base::ClearChangesMask(PvpInfo); + Base::ClearChangesMask(NoReagentCostMask); + Base::ClearChangesMask(ProfessionSkillLine); + Base::ClearChangesMask(BagSlotFlags); + Base::ClearChangesMask(BankBagSlotFlags); + Base::ClearChangesMask(QuestCompleted); + _changesMask.ResetAll(); +} + +void GameObjectData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const +{ + data << int32(DisplayID); + data << uint32(SpellVisualID); + data << uint32(StateSpellVisualID); + data << uint32(SpawnTrackingStateAnimID); + data << uint32(SpawnTrackingStateAnimKitID); + data << uint32(StateWorldEffectIDs->size()); + data << uint32(StateWorldEffectsQuestObjectiveID); + for (std::size_t i = 0; i < StateWorldEffectIDs->size(); ++i) + { + data << uint32((*StateWorldEffectIDs)[i]); + } + data << CreatedBy; + data << GuildGUID; + data << uint32(ViewerDependentValue<FlagsTag>::GetValue(Flags, owner, receiver)); + data << float(ParentRotation->x); + data << float(ParentRotation->y); + data << float(ParentRotation->z); + data << float(ParentRotation->w); + data << int32(FactionTemplate); + data << int32(ViewerDependentValue<LevelTag>::GetValue(Level, owner, receiver)); + data << int8(ViewerDependentValue<StateTag>::GetValue(State, owner, receiver)); + data << int8(TypeID); + data << uint8(ArtKit); + data << uint8(PercentHealth); + data << uint32(EnableDoodadSets.size()); + data << uint32(CustomParam); + for (std::size_t i = 0; i < EnableDoodadSets.size(); ++i) + { + data << int32(EnableDoodadSets[i]); + } +} + +void GameObjectData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const +{ + UpdateMask<20> const& changesMask = _changesMask; + data.WriteBits(changesMask.GetBlock(0), 20); + + if (changesMask[0]) + { + if (changesMask[1]) + { + data.WriteBits(StateWorldEffectIDs->size(), 32); + for (std::size_t i = 0; i < StateWorldEffectIDs->size(); ++i) + { + data << uint32((*StateWorldEffectIDs)[i]); + } + } + } + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[2]) + { + EnableDoodadSets.WriteUpdateMask(data); + } + } + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[2]) + { + for (std::size_t i = 0; i < EnableDoodadSets.size(); ++i) + { + if (EnableDoodadSets.HasChanged(i)) + { + data << int32(EnableDoodadSets[i]); + } + } + } + if (changesMask[3]) + { + data << int32(DisplayID); + } + if (changesMask[4]) + { + data << uint32(SpellVisualID); + } + if (changesMask[5]) + { + data << uint32(StateSpellVisualID); + } + if (changesMask[6]) + { + data << uint32(SpawnTrackingStateAnimID); + } + if (changesMask[7]) + { + data << uint32(SpawnTrackingStateAnimKitID); + } + if (changesMask[8]) + { + data << uint32(StateWorldEffectsQuestObjectiveID); + } + if (changesMask[9]) + { + data << CreatedBy; + } + if (changesMask[10]) + { + data << GuildGUID; + } + if (changesMask[11]) + { + data << uint32(ViewerDependentValue<FlagsTag>::GetValue(Flags, owner, receiver)); + } + if (changesMask[12]) + { + data << float(ParentRotation->x); + data << float(ParentRotation->y); + data << float(ParentRotation->z); + data << float(ParentRotation->w); + } + if (changesMask[13]) + { + data << int32(FactionTemplate); + } + if (changesMask[14]) + { + data << int32(ViewerDependentValue<LevelTag>::GetValue(Level, owner, receiver)); + } + if (changesMask[15]) + { + data << int8(ViewerDependentValue<StateTag>::GetValue(State, owner, receiver)); + } + if (changesMask[16]) + { + data << int8(TypeID); + } + if (changesMask[17]) + { + data << uint8(ArtKit); + } + if (changesMask[18]) + { + data << uint8(PercentHealth); + } + if (changesMask[19]) + { + data << uint32(CustomParam); + } + } +} + +void GameObjectData::ClearChangesMask() +{ + Base::ClearChangesMask(StateWorldEffectIDs); + Base::ClearChangesMask(EnableDoodadSets); + Base::ClearChangesMask(DisplayID); + Base::ClearChangesMask(SpellVisualID); + Base::ClearChangesMask(StateSpellVisualID); + Base::ClearChangesMask(SpawnTrackingStateAnimID); + Base::ClearChangesMask(SpawnTrackingStateAnimKitID); + Base::ClearChangesMask(StateWorldEffectsQuestObjectiveID); + Base::ClearChangesMask(CreatedBy); + Base::ClearChangesMask(GuildGUID); + Base::ClearChangesMask(Flags); + Base::ClearChangesMask(ParentRotation); + Base::ClearChangesMask(FactionTemplate); + Base::ClearChangesMask(Level); + Base::ClearChangesMask(State); + Base::ClearChangesMask(TypeID); + Base::ClearChangesMask(ArtKit); + Base::ClearChangesMask(PercentHealth); + Base::ClearChangesMask(CustomParam); + _changesMask.ResetAll(); +} + +void DynamicObjectData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, DynamicObject const* owner, Player const* receiver) const +{ + data << Caster; + data << int32(SpellXSpellVisualID); + data << int32(SpellID); + data << float(Radius); + data << uint32(CastTime); + data << uint8(Type); +} + +void DynamicObjectData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, DynamicObject const* owner, Player const* receiver) const +{ + UpdateMask<7> const& changesMask = _changesMask; + data.WriteBits(changesMask.GetBlock(0), 7); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << Caster; + } + if (changesMask[2]) + { + data << int32(SpellXSpellVisualID); + } + if (changesMask[3]) + { + data << int32(SpellID); + } + if (changesMask[4]) + { + data << float(Radius); + } + if (changesMask[5]) + { + data << uint32(CastTime); + } + if (changesMask[6]) + { + data << uint8(Type); + } + } +} + +void DynamicObjectData::ClearChangesMask() +{ + Base::ClearChangesMask(Caster); + Base::ClearChangesMask(SpellXSpellVisualID); + Base::ClearChangesMask(SpellID); + Base::ClearChangesMask(Radius); + Base::ClearChangesMask(CastTime); + Base::ClearChangesMask(Type); + _changesMask.ResetAll(); +} + +void CorpseData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const +{ + data << uint32(DynamicFlags); + data << Owner; + data << PartyGUID; + data << GuildGUID; + data << uint32(DisplayID); + for (std::size_t i = 0; i < 19; ++i) + { + data << uint32(Items[i]); + } + data << uint8(Unused); + data << uint8(RaceID); + data << uint8(Sex); + data << uint8(SkinID); + data << uint8(FaceID); + data << uint8(HairStyleID); + data << uint8(HairColorID); + data << uint8(FacialHairStyleID); + data << uint32(Flags); + data << int32(FactionTemplate); + for (std::size_t i = 0; i < 3; ++i) + { + data << uint8(CustomDisplayOption[i]); + } +} + +void CorpseData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const +{ + UpdateMask<40> const& changesMask = _changesMask; + data.WriteBits(changesMask.GetBlocksMask(0), 2); + for (std::size_t i = 0; i < 2; ++i) + if (changesMask.GetBlock(i)) + data.WriteBits(changesMask.GetBlock(i), 32); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << uint32(DynamicFlags); + } + if (changesMask[2]) + { + data << Owner; + } + if (changesMask[3]) + { + data << PartyGUID; + } + if (changesMask[4]) + { + data << GuildGUID; + } + if (changesMask[5]) + { + data << uint32(DisplayID); + } + if (changesMask[6]) + { + data << uint8(Unused); + } + if (changesMask[7]) + { + data << uint8(RaceID); + } + if (changesMask[8]) + { + data << uint8(Sex); + } + if (changesMask[9]) + { + data << uint8(SkinID); + } + if (changesMask[10]) + { + data << uint8(FaceID); + } + if (changesMask[11]) + { + data << uint8(HairStyleID); + } + if (changesMask[12]) + { + data << uint8(HairColorID); + } + if (changesMask[13]) + { + data << uint8(FacialHairStyleID); + } + if (changesMask[14]) + { + data << uint32(Flags); + } + if (changesMask[15]) + { + data << int32(FactionTemplate); + } + } + if (changesMask[16]) + { + for (std::size_t i = 0; i < 19; ++i) + { + if (changesMask[17 + i]) + { + data << uint32(Items[i]); + } + } + } + if (changesMask[36]) + { + for (std::size_t i = 0; i < 3; ++i) + { + if (changesMask[37 + i]) + { + data << uint8(CustomDisplayOption[i]); + } + } + } +} + +void CorpseData::ClearChangesMask() +{ + Base::ClearChangesMask(DynamicFlags); + Base::ClearChangesMask(Owner); + Base::ClearChangesMask(PartyGUID); + Base::ClearChangesMask(GuildGUID); + Base::ClearChangesMask(DisplayID); + Base::ClearChangesMask(Unused); + Base::ClearChangesMask(RaceID); + Base::ClearChangesMask(Sex); + Base::ClearChangesMask(SkinID); + Base::ClearChangesMask(FaceID); + Base::ClearChangesMask(HairStyleID); + Base::ClearChangesMask(HairColorID); + Base::ClearChangesMask(FacialHairStyleID); + Base::ClearChangesMask(Flags); + Base::ClearChangesMask(FactionTemplate); + Base::ClearChangesMask(Items); + Base::ClearChangesMask(CustomDisplayOption); + _changesMask.ResetAll(); +} + +void ScaleCurve::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const +{ + data << uint32(StartTimeOffset); + for (std::size_t i = 0; i < 2; ++i) + { + data << Points[i]; + } + data << uint32(ParameterCurve); + data.WriteBit(OverrideActive); + data.FlushBits(); +} + +void ScaleCurve::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const +{ + data.WriteBit(OverrideActive); + data.FlushBits(); + data << uint32(StartTimeOffset); + data << uint32(ParameterCurve); + for (std::size_t i = 0; i < 2; ++i) + { + data << Points[i]; + } + data.FlushBits(); +} + +void AreaTriggerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const +{ + OverrideScaleCurve->WriteCreate(data, fieldVisibilityFlags, owner, receiver); + data << Caster; + data << uint32(Duration); + data << uint32(TimeToTarget); + data << uint32(TimeToTargetScale); + data << uint32(TimeToTargetExtraScale); + data << int32(SpellID); + data << int32(SpellForVisuals); + data << int32(SpellXSpellVisualID); + data << float(BoundsRadius2D); + data << uint32(DecalPropertiesID); + data << CreatingEffectGUID; + ExtraScaleCurve->WriteCreate(data, fieldVisibilityFlags, owner, receiver); +} + +void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const +{ + UpdateMask<14> const& changesMask = _changesMask; + data.WriteBits(changesMask.GetBlock(0), 14); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + OverrideScaleCurve->WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + } + if (changesMask[3]) + { + data << Caster; + } + if (changesMask[4]) + { + data << uint32(Duration); + } + if (changesMask[5]) + { + data << uint32(TimeToTarget); + } + if (changesMask[6]) + { + data << uint32(TimeToTargetScale); + } + if (changesMask[7]) + { + data << uint32(TimeToTargetExtraScale); + } + if (changesMask[8]) + { + data << int32(SpellID); + } + if (changesMask[9]) + { + data << int32(SpellForVisuals); + } + if (changesMask[10]) + { + data << int32(SpellXSpellVisualID); + } + if (changesMask[11]) + { + data << float(BoundsRadius2D); + } + if (changesMask[12]) + { + data << uint32(DecalPropertiesID); + } + if (changesMask[13]) + { + data << CreatingEffectGUID; + } + if (changesMask[2]) + { + ExtraScaleCurve->WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + } + } +} + +void AreaTriggerData::ClearChangesMask() +{ + Base::ClearChangesMask(OverrideScaleCurve); + Base::ClearChangesMask(ExtraScaleCurve); + Base::ClearChangesMask(Caster); + Base::ClearChangesMask(Duration); + Base::ClearChangesMask(TimeToTarget); + Base::ClearChangesMask(TimeToTargetScale); + Base::ClearChangesMask(TimeToTargetExtraScale); + Base::ClearChangesMask(SpellID); + Base::ClearChangesMask(SpellForVisuals); + Base::ClearChangesMask(SpellXSpellVisualID); + Base::ClearChangesMask(BoundsRadius2D); + Base::ClearChangesMask(DecalPropertiesID); + Base::ClearChangesMask(CreatingEffectGUID); + _changesMask.ResetAll(); +} + +void SceneObjectData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const +{ + data << int32(ScriptPackageID); + data << uint32(RndSeedVal); + data << CreatedBy; + data << uint32(SceneType); +} + +void SceneObjectData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const +{ + UpdateMask<5> const& changesMask = _changesMask; + data.WriteBits(changesMask.GetBlock(0), 5); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << int32(ScriptPackageID); + } + if (changesMask[2]) + { + data << uint32(RndSeedVal); + } + if (changesMask[3]) + { + data << CreatedBy; + } + if (changesMask[4]) + { + data << uint32(SceneType); + } + } +} + +void SceneObjectData::ClearChangesMask() +{ + Base::ClearChangesMask(ScriptPackageID); + Base::ClearChangesMask(RndSeedVal); + Base::ClearChangesMask(CreatedBy); + Base::ClearChangesMask(SceneType); + _changesMask.ResetAll(); +} + +void ConversationLine::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const +{ + data << int32(ConversationLineID); + data << uint32(StartTime); + data << int32(UiCameraID); + data << uint8(ActorIndex); + data << uint8(Flags); +} + +void ConversationLine::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const +{ + data.FlushBits(); + data << int32(ConversationLineID); + data << uint32(StartTime); + data << int32(UiCameraID); + data << uint8(ActorIndex); + data << uint8(Flags); +} + +void ConversationActor::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const +{ + data << uint32(CreatureID); + data << uint32(CreatureDisplayInfoID); + data << ActorGUID; + data << int32(Field_18); + data.WriteBits(Type, 1); + data.FlushBits(); +} + +void ConversationActor::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const +{ + data.FlushBits(); + data << uint32(CreatureID); + data << uint32(CreatureDisplayInfoID); + data << ActorGUID; + data << int32(Field_18); + data.WriteBits(Type, 1); + data.FlushBits(); +} + +void ConversationData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const +{ + data << uint32(Lines->size()); + for (std::size_t i = 0; i < Lines->size(); ++i) + { + (*Lines)[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + } + data << int32(LastLineEndTime); + data << uint32(Actors.size()); + for (std::size_t i = 0; i < Actors.size(); ++i) + { + Actors[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + } +} + +void ConversationData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const +{ + UpdateMask<4> const& changesMask = _changesMask; + data.WriteBits(changesMask.GetBlock(0), 4); + + if (changesMask[0]) + { + if (changesMask[1]) + { + data.WriteBits(Lines->size(), 32); + for (std::size_t i = 0; i < Lines->size(); ++i) + { + (*Lines)[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + } + } + } + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[2]) + { + Actors.WriteUpdateMask(data); + } + } + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[2]) + { + for (std::size_t i = 0; i < Actors.size(); ++i) + { + if (Actors.HasChanged(i)) + { + Actors[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + } + } + } + if (changesMask[3]) + { + data << int32(LastLineEndTime); + } + } +} + +void ConversationData::ClearChangesMask() +{ + Base::ClearChangesMask(Lines); + Base::ClearChangesMask(Actors); + Base::ClearChangesMask(LastLineEndTime); + _changesMask.ResetAll(); +} + +} + +#if TRINITY_COMPILER == TRINITY_COMPILER_GNU +#pragma GCC diagnostic pop +#else +#pragma warning(pop) +#endif diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index a13c5b8533d..2a120d0a729 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -1,6 +1,5 @@ /* * Copyright (C) 2008-2019 TrinityCore <https://www.trinitycore.org/> - * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -16,469 +15,732 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -#ifndef _UPDATEFIELDS_H -#define _UPDATEFIELDS_H +#ifndef UpdateFields_h__ +#define UpdateFields_h__ -// Auto generated for version 8, 0, 1, 27980 +#include "EnumClassFlag.h" +#include "ObjectGuid.h" +#include "Position.h" +#include "QuaternionData.h" +#include "UpdateField.h" +#include "UpdateMask.h" -enum ObjectFields +class AreaTrigger; +class Bag; +class ByteBuffer; +class Conversation; +class Corpse; +class DynamicObject; +class GameObject; +class Item; +class Object; +class Player; +class Unit; + +namespace UF +{ +struct ObjectData : public IsUpdateFieldStructureTag, public HasChangesMask<4> +{ + UpdateField<int32, 0, 1> EntryID; + UpdateField<uint32, 0, 2> DynamicFlags; + struct DynamicFlagsTag : ViewerDependentValueTag<uint32> {}; + UpdateField<float, 0, 3> Scale; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct ItemEnchantment : public IsUpdateFieldStructureTag, public HasChangesMask<5> +{ + UpdateField<int32, 0, 1> ID; + UpdateField<uint32, 0, 2> Duration; + UpdateField<int16, 0, 3> Charges; + UpdateField<uint16, 0, 4> Inactive; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct ArtifactPower : public IsUpdateFieldStructureTag +{ + int16 ArtifactPowerID; + uint8 PurchasedRank; + uint8 CurrentRankWithBonus; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; +}; + +struct SocketedGem : public IsUpdateFieldStructureTag, public HasChangesMask<20> { - OBJECT_FIELD_GUID = 0x000, // Size: 4, Flags: PUBLIC - 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, + UpdateField<int32, 0, 1> ItemID; + UpdateField<uint8, 0, 2> Context; + UpdateFieldArray<uint16, 16, 3, 4> BonusListIDs; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; + void ClearChangesMask(); }; -enum ObjectDynamicFields +struct ItemData : public IsUpdateFieldStructureTag, public HasChangesMask<40> { - OBJECT_DYNAMIC_END = 0x000, + UpdateField<std::vector<int32>, 0, 1> BonusListIDs; + DynamicUpdateField<int32, 0, 2> Modifiers; + DynamicUpdateField<ArtifactPower, 0, 3> ArtifactPowers; + DynamicUpdateField<SocketedGem, 0, 4> Gems; + UpdateField<ObjectGuid, 0, 5> Owner; + UpdateField<ObjectGuid, 0, 6> ContainedIn; + UpdateField<ObjectGuid, 0, 7> Creator; + UpdateField<ObjectGuid, 0, 8> GiftCreator; + UpdateField<uint32, 0, 9> StackCount; + UpdateField<uint32, 0, 10> Expiration; + UpdateField<uint32, 0, 11> DynamicFlags; + UpdateField<uint32, 0, 12> Durability; + UpdateField<uint32, 0, 13> MaxDurability; + UpdateField<uint32, 0, 14> CreatePlayedTime; + UpdateField<uint32, 0, 15> ModifiersMask; + UpdateField<int32, 0, 16> Context; + UpdateField<uint64, 0, 17> ArtifactXP; + UpdateField<uint8, 0, 18> ItemAppearanceModID; + UpdateField<uint32, 0, 19> Field_130; + UpdateFieldArray<int32, 5, 20, 21> SpellCharges; + UpdateFieldArray<ItemEnchantment, 13, 26, 27> Enchantment; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; + void AppendAllowedFieldsMaskForFlag(UpdateMask<40>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const; + void WriteUpdate(ByteBuffer& data, UpdateMask<40> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; + void ClearChangesMask(); }; -enum ItemFields +struct ContainerData : public IsUpdateFieldStructureTag, public HasChangesMask<39> { - ITEM_FIELD_OWNER = OBJECT_END + 0x000, // Size: 4, Flags: PUBLIC - ITEM_FIELD_CONTAINED = OBJECT_END + 0x004, // Size: 4, Flags: PUBLIC - ITEM_FIELD_CREATOR = OBJECT_END + 0x008, // Size: 4, Flags: PUBLIC - ITEM_FIELD_GIFTCREATOR = OBJECT_END + 0x00C, // Size: 4, Flags: PUBLIC - ITEM_FIELD_STACK_COUNT = OBJECT_END + 0x010, // Size: 1, Flags: OWNER - ITEM_FIELD_DURATION = OBJECT_END + 0x011, // Size: 1, Flags: OWNER - ITEM_FIELD_SPELL_CHARGES = OBJECT_END + 0x012, // Size: 5, Flags: OWNER - ITEM_FIELD_FLAGS = OBJECT_END + 0x017, // Size: 1, Flags: PUBLIC - ITEM_FIELD_ENCHANTMENT = OBJECT_END + 0x018, // Size: 39, Flags: PUBLIC - ITEM_FIELD_PROPERTY_SEED = OBJECT_END + 0x03F, // Size: 1, Flags: PUBLIC - ITEM_FIELD_RANDOM_PROPERTIES_ID = OBJECT_END + 0x040, // Size: 1, Flags: PUBLIC - ITEM_FIELD_DURABILITY = OBJECT_END + 0x041, // Size: 1, Flags: OWNER - ITEM_FIELD_MAXDURABILITY = OBJECT_END + 0x042, // Size: 1, Flags: OWNER - ITEM_FIELD_CREATE_PLAYED_TIME = OBJECT_END + 0x043, // Size: 1, Flags: PUBLIC - ITEM_FIELD_MODIFIERS_MASK = OBJECT_END + 0x044, // Size: 1, Flags: OWNER - ITEM_FIELD_CONTEXT = OBJECT_END + 0x045, // Size: 1, Flags: PUBLIC - ITEM_FIELD_ARTIFACT_XP = OBJECT_END + 0x046, // Size: 2, Flags: OWNER - ITEM_FIELD_APPEARANCE_MOD_ID = OBJECT_END + 0x048, // Size: 1, Flags: OWNER - ITEM_END = OBJECT_END + 0x049, -}; - -enum ItemDynamicFields -{ - ITEM_DYNAMIC_FIELD_MODIFIERS = OBJECT_DYNAMIC_END + 0x000, // Flags: OWNER - 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_END = OBJECT_DYNAMIC_END + 0x004, -}; - -enum ContainerFields -{ - CONTAINER_FIELD_SLOT_1 = ITEM_END + 0x000, // Size: 144, Flags: PUBLIC - CONTAINER_FIELD_NUM_SLOTS = ITEM_END + 0x090, // Size: 1, Flags: PUBLIC - CONTAINER_END = ITEM_END + 0x091, -}; - -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 - UNIT_FIELD_SUMMON = OBJECT_END + 0x004, // Size: 4, Flags: PUBLIC - UNIT_FIELD_CRITTER = OBJECT_END + 0x008, // Size: 4, Flags: PRIVATE - UNIT_FIELD_CHARMEDBY = OBJECT_END + 0x00C, // Size: 4, Flags: PUBLIC - 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_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 -{ - UNIT_DYNAMIC_FIELD_PASSIVE_SPELLS = OBJECT_DYNAMIC_END + 0x000, // Flags: PUBLIC, URGENT - UNIT_DYNAMIC_FIELD_WORLD_EFFECTS = OBJECT_DYNAMIC_END + 0x001, // Flags: PUBLIC, URGENT - UNIT_DYNAMIC_FIELD_CHANNEL_OBJECTS = OBJECT_DYNAMIC_END + 0x002, // Flags: PUBLIC, URGENT - UNIT_DYNAMIC_END = OBJECT_DYNAMIC_END + 0x003, -}; - -enum PlayerFields -{ - PLAYER_DUEL_ARBITER = UNIT_END + 0x000, // Size: 4, Flags: PUBLIC - PLAYER_WOW_ACCOUNT = UNIT_END + 0x004, // Size: 4, Flags: PUBLIC - PLAYER_LOOT_TARGET_GUID = UNIT_END + 0x008, // Size: 4, Flags: PUBLIC - PLAYER_FLAGS = UNIT_END + 0x00C, // Size: 1, Flags: PUBLIC - PLAYER_FLAGS_EX = UNIT_END + 0x00D, // Size: 1, Flags: PUBLIC - PLAYER_GUILDRANK = UNIT_END + 0x00E, // Size: 1, Flags: PUBLIC - PLAYER_GUILDDELETE_DATE = UNIT_END + 0x00F, // Size: 1, Flags: PUBLIC - PLAYER_GUILDLEVEL = UNIT_END + 0x010, // Size: 1, Flags: PUBLIC - PLAYER_BYTES = UNIT_END + 0x011, // Size: 1, Flags: PUBLIC - PLAYER_BYTES_2 = UNIT_END + 0x012, // Size: 1, Flags: PUBLIC - PLAYER_BYTES_3 = UNIT_END + 0x013, // Size: 1, Flags: PUBLIC - 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: 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_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_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 -{ - GAMEOBJECT_DYNAMIC_ENABLE_DOODAD_SETS = OBJECT_DYNAMIC_END + 0x000, // Flags: PUBLIC - GAMEOBJECT_DYNAMIC_END = OBJECT_DYNAMIC_END + 0x001, -}; - -enum DynamicObjectFields -{ - DYNAMICOBJECT_CASTER = OBJECT_END + 0x000, // Size: 4, Flags: PUBLIC - DYNAMICOBJECT_TYPE = OBJECT_END + 0x004, // Size: 1, Flags: PUBLIC - DYNAMICOBJECT_SPELL_X_SPELL_VISUAL_ID = OBJECT_END + 0x005, // Size: 1, Flags: PUBLIC - DYNAMICOBJECT_SPELLID = OBJECT_END + 0x006, // Size: 1, Flags: PUBLIC - DYNAMICOBJECT_RADIUS = OBJECT_END + 0x007, // Size: 1, Flags: PUBLIC - DYNAMICOBJECT_CASTTIME = OBJECT_END + 0x008, // Size: 1, Flags: PUBLIC - DYNAMICOBJECT_END = OBJECT_END + 0x009, -}; - -enum DynamicObjectDynamicFields -{ - DYNAMICOBJECT_DYNAMIC_END = OBJECT_DYNAMIC_END + 0x000, -}; - -enum CorpseFields -{ - CORPSE_FIELD_OWNER = OBJECT_END + 0x000, // Size: 4, Flags: PUBLIC - CORPSE_FIELD_PARTY = OBJECT_END + 0x004, // Size: 4, Flags: PUBLIC - 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, + UpdateField<uint32, 0, 1> NumSlots; + UpdateFieldArray<ObjectGuid, 36, 2, 3> Slots; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Bag const* owner, Player const* receiver) const; + void ClearChangesMask(); }; -enum CorpseDynamicFields +struct AzeriteEmpoweredItemData : public IsUpdateFieldStructureTag, public HasChangesMask<6> { - CORPSE_DYNAMIC_END = OBJECT_DYNAMIC_END + 0x000, + UpdateFieldArray<int32, 5, 0, 1> Selections; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; + void ClearChangesMask(); }; -enum AreaTriggerFields +struct AzeriteItemData : public IsUpdateFieldStructureTag, public HasChangesMask<6> { - AREATRIGGER_OVERRIDE_SCALE_CURVE = OBJECT_END + 0x000, // Size: 7, Flags: PUBLIC, URGENT - AREATRIGGER_EXTRA_SCALE_CURVE = OBJECT_END + 0x007, // Size: 7, Flags: PUBLIC, URGENT - AREATRIGGER_CASTER = OBJECT_END + 0x00E, // Size: 4, Flags: PUBLIC - AREATRIGGER_DURATION = OBJECT_END + 0x012, // Size: 1, Flags: PUBLIC - AREATRIGGER_TIME_TO_TARGET = OBJECT_END + 0x013, // Size: 1, Flags: PUBLIC, URGENT - AREATRIGGER_TIME_TO_TARGET_SCALE = OBJECT_END + 0x014, // Size: 1, Flags: PUBLIC, URGENT - AREATRIGGER_TIME_TO_TARGET_EXTRA_SCALE = OBJECT_END + 0x015, // Size: 1, Flags: PUBLIC, URGENT - AREATRIGGER_SPELLID = OBJECT_END + 0x016, // Size: 1, Flags: PUBLIC - AREATRIGGER_SPELL_FOR_VISUALS = OBJECT_END + 0x017, // Size: 1, Flags: PUBLIC - AREATRIGGER_SPELL_X_SPELL_VISUAL_ID = OBJECT_END + 0x018, // Size: 1, Flags: PUBLIC - AREATRIGGER_BOUNDS_RADIUS_2D = OBJECT_END + 0x019, // Size: 1, Flags: DYNAMIC, URGENT - AREATRIGGER_DECAL_PROPERTIES_ID = OBJECT_END + 0x01A, // Size: 1, Flags: PUBLIC - AREATRIGGER_CREATING_EFFECT_GUID = OBJECT_END + 0x01B, // Size: 4, Flags: PUBLIC - AREATRIGGER_END = OBJECT_END + 0x01F, + UpdateField<uint64, 0, 1> Xp; + UpdateField<uint32, 0, 2> Level; + UpdateField<uint32, 0, 3> AuraLevel; + UpdateField<uint32, 0, 4> KnowledgeLevel; + UpdateField<uint32, 0, 5> DEBUGknowledgeWeek; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; + void AppendAllowedFieldsMaskForFlag(UpdateMask<6>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const; + void WriteUpdate(ByteBuffer& data, UpdateMask<6> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; + void ClearChangesMask(); }; -enum AreaTriggerDynamicFields +struct UnitChannel : public IsUpdateFieldStructureTag { - AREATRIGGER_DYNAMIC_END = OBJECT_DYNAMIC_END + 0x000, + int32 SpellID; + int32 SpellXSpellVisualID; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; }; -enum SceneObjectFields +struct VisibleItem : public IsUpdateFieldStructureTag, public HasChangesMask<4> { - SCENEOBJECT_FIELD_SCRIPT_PACKAGE_ID = OBJECT_END + 0x000, // Size: 1, Flags: PUBLIC - SCENEOBJECT_FIELD_RND_SEED_VAL = OBJECT_END + 0x001, // Size: 1, Flags: PUBLIC - SCENEOBJECT_FIELD_CREATEDBY = OBJECT_END + 0x002, // Size: 4, Flags: PUBLIC - SCENEOBJECT_FIELD_SCENE_TYPE = OBJECT_END + 0x006, // Size: 1, Flags: PUBLIC - SCENEOBJECT_END = OBJECT_END + 0x007, + UpdateField<int32, 0, 1> ItemID; + UpdateField<uint16, 0, 2> ItemAppearanceModID; + UpdateField<uint16, 0, 3> ItemVisual; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; + void ClearChangesMask(); }; -enum SceneObjectDynamicFields +struct PassiveSpellHistory : public IsUpdateFieldStructureTag { - SCENEOBJECT_DYNAMIC_END = OBJECT_DYNAMIC_END + 0x000, + int32 SpellID; + int32 AuraSpellID; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; }; -enum ConversationFields +struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<191> { - CONVERSATION_LAST_LINE_END_TIME = OBJECT_END + 0x000, // Size: 1, Flags: DYNAMIC - CONVERSATION_END = OBJECT_END + 0x001, + UpdateField<std::vector<uint32>, 0, 1> StateWorldEffectIDs; + DynamicUpdateField<PassiveSpellHistory, 0, 2> PassiveSpells; + DynamicUpdateField<int32, 0, 3> WorldEffects; + DynamicUpdateField<ObjectGuid, 0, 4> ChannelObjects; + UpdateField<int32, 0, 5> DisplayID; + struct DisplayIDTag : ViewerDependentValueTag<int32> {}; + UpdateField<uint32, 0, 6> StateSpellVisualID; + UpdateField<uint32, 0, 7> StateAnimID; + UpdateField<uint32, 0, 8> StateAnimKitID; + UpdateField<uint32, 0, 9> StateWorldEffectsQuestObjectiveID; + UpdateField<ObjectGuid, 0, 10> Charm; + UpdateField<ObjectGuid, 0, 11> Summon; + UpdateField<ObjectGuid, 0, 12> Critter; + UpdateField<ObjectGuid, 0, 13> CharmedBy; + UpdateField<ObjectGuid, 0, 14> SummonedBy; + UpdateField<ObjectGuid, 0, 15> CreatedBy; + UpdateField<ObjectGuid, 0, 16> DemonCreator; + UpdateField<ObjectGuid, 0, 17> LookAtControllerTarget; + UpdateField<ObjectGuid, 0, 18> Target; + UpdateField<ObjectGuid, 0, 19> BattlePetCompanionGUID; + UpdateField<uint64, 0, 20> BattlePetDBID; + UpdateField<UnitChannel, 0, 21> ChannelData; + UpdateField<uint32, 0, 22> SummonedByHomeRealm; + UpdateField<uint8, 0, 23> Race; + UpdateField<uint8, 0, 24> ClassId; + UpdateField<uint8, 0, 25> PlayerClassId; + UpdateField<uint8, 0, 26> Sex; + UpdateField<uint8, 0, 27> DisplayPower; + UpdateField<uint32, 0, 28> OverrideDisplayPowerID; + UpdateField<int64, 0, 29> Health; + UpdateField<int64, 0, 30> MaxHealth; + UpdateField<int32, 0, 31> Level; + UpdateField<int32, 32, 33> EffectiveLevel; + UpdateField<int32, 32, 34> ContentTuningID; + UpdateField<int32, 32, 35> ScalingLevelMin; + UpdateField<int32, 32, 36> ScalingLevelMax; + UpdateField<int32, 32, 37> ScalingLevelDelta; + UpdateField<int32, 32, 38> ScalingFactionGroup; + UpdateField<int32, 32, 39> ScalingHealthItemLevelCurveID; + UpdateField<int32, 32, 40> ScalingDamageItemLevelCurveID; + UpdateField<int32, 32, 41> FactionTemplate; + struct FactionTemplateTag : ViewerDependentValueTag<int32> {}; + UpdateField<uint32, 32, 42> Flags; + struct FlagsTag : ViewerDependentValueTag<uint32> {}; + UpdateField<uint32, 32, 43> Flags2; + UpdateField<uint32, 32, 44> Flags3; + UpdateField<uint32, 32, 45> AuraState; + struct AuraStateTag : ViewerDependentValueTag<uint32> {}; + UpdateField<uint32, 32, 46> RangedAttackRoundBaseTime; + UpdateField<float, 32, 47> BoundingRadius; + UpdateField<float, 32, 48> CombatReach; + UpdateField<float, 32, 49> DisplayScale; + UpdateField<int32, 32, 50> NativeDisplayID; + UpdateField<float, 32, 51> NativeXDisplayScale; + UpdateField<int32, 32, 52> MountDisplayID; + UpdateField<int32, 32, 53> CosmeticMountDisplayID; + UpdateField<float, 32, 54> MinDamage; + UpdateField<float, 32, 55> MaxDamage; + UpdateField<float, 32, 56> MinOffHandDamage; + UpdateField<float, 32, 57> MaxOffHandDamage; + UpdateField<uint8, 32, 58> StandState; + UpdateField<uint8, 32, 59> PetTalentPoints; + UpdateField<uint8, 32, 60> VisFlags; + UpdateField<uint8, 32, 61> AnimTier; + UpdateField<uint32, 32, 62> PetNumber; + UpdateField<uint32, 32, 63> PetNameTimestamp; + UpdateField<uint32, 64, 65> PetExperience; + UpdateField<uint32, 64, 66> PetNextLevelExperience; + UpdateField<float, 64, 67> ModCastingSpeed; + UpdateField<float, 64, 68> ModSpellHaste; + UpdateField<float, 64, 69> ModHaste; + UpdateField<float, 64, 70> ModRangedHaste; + UpdateField<float, 64, 71> ModHasteRegen; + UpdateField<float, 64, 72> ModTimeRate; + UpdateField<int32, 64, 73> CreatedBySpell; + UpdateField<int32, 64, 74> EmoteState; + UpdateField<int32, 64, 75> BaseMana; + UpdateField<int32, 64, 76> BaseHealth; + UpdateField<uint8, 64, 77> SheatheState; + UpdateField<uint8, 64, 78> PvpFlags; + struct PvpFlagsTag : ViewerDependentValueTag<uint8> {}; + UpdateField<uint8, 64, 79> PetFlags; + UpdateField<uint8, 64, 80> ShapeshiftForm; + UpdateField<int32, 64, 81> AttackPower; + UpdateField<int32, 64, 82> AttackPowerModPos; + UpdateField<int32, 64, 83> AttackPowerModNeg; + UpdateField<float, 64, 84> AttackPowerMultiplier; + UpdateField<int32, 64, 85> RangedAttackPower; + UpdateField<int32, 64, 86> RangedAttackPowerModPos; + UpdateField<int32, 64, 87> RangedAttackPowerModNeg; + UpdateField<float, 64, 88> RangedAttackPowerMultiplier; + UpdateField<int32, 64, 89> MainHandWeaponAttackPower; + UpdateField<int32, 64, 90> OffHandWeaponAttackPower; + UpdateField<int32, 64, 91> RangedWeaponAttackPower; + UpdateField<int32, 64, 92> SetAttackSpeedAura; + UpdateField<float, 64, 93> Lifesteal; + UpdateField<float, 64, 94> MinRangedDamage; + UpdateField<float, 64, 95> MaxRangedDamage; + UpdateField<float, 96, 97> ManaCostModifierModifier; + UpdateField<float, 96, 98> MaxHealthModifier; + UpdateField<float, 96, 99> HoverHeight; + UpdateField<int32, 96, 100> MinItemLevelCutoff; + UpdateField<int32, 96, 101> MinItemLevel; + UpdateField<int32, 96, 102> MaxItemLevel; + UpdateField<int32, 96, 103> AzeriteItemLevel; + UpdateField<int32, 96, 104> WildBattlePetLevel; + UpdateField<uint32, 96, 105> BattlePetCompanionNameTimestamp; + UpdateField<int32, 96, 106> InteractSpellID; + UpdateField<int32, 96, 107> ScaleDuration; + UpdateField<int32, 96, 108> SpellOverrideNameID; + UpdateField<int32, 96, 109> LooksLikeMountID; + UpdateField<int32, 96, 110> LooksLikeCreatureID; + UpdateField<int32, 96, 111> LookAtControllerID; + UpdateField<int32, 96, 112> TaxiNodesID; + UpdateField<ObjectGuid, 96, 113> GuildGUID; + UpdateFieldArray<uint32, 2, 114, 115> NpcFlags; + struct NpcFlagsTag : ViewerDependentValueTag<uint32> {}; + UpdateFieldArray<int32, 6, 117, 118> Power; + UpdateFieldArray<int32, 6, 117, 124> MaxPower; + UpdateFieldArray<float, 6, 117, 130> PowerRegenFlatModifier; + UpdateFieldArray<float, 6, 117, 136> PowerRegenInterruptedFlatModifier; + UpdateFieldArray<VisibleItem, 3, 142, 143> VirtualItems; + UpdateFieldArray<uint32, 2, 146, 147> AttackRoundBaseTime; + UpdateFieldArray<int32, 4, 149, 150> Stats; + UpdateFieldArray<int32, 4, 149, 154> StatPosBuff; + UpdateFieldArray<int32, 4, 149, 158> StatNegBuff; + UpdateFieldArray<int32, 7, 162, 163> Resistances; + UpdateFieldArray<int32, 7, 162, 170> BonusResistanceMods; + UpdateFieldArray<int32, 7, 162, 177> PowerCostModifier; + UpdateFieldArray<float, 7, 162, 184> PowerCostMultiplier; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; + void AppendAllowedFieldsMaskForFlag(UpdateMask<191>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const; + void WriteUpdate(ByteBuffer& data, UpdateMask<191> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; + void ClearChangesMask(); }; -enum ConversationDynamicFields +struct QuestLog : public IsUpdateFieldStructureTag, public HasChangesMask<30> { - CONVERSATION_DYNAMIC_FIELD_ACTORS = OBJECT_DYNAMIC_END + 0x000, // Flags: PUBLIC - CONVERSATION_DYNAMIC_FIELD_LINES = OBJECT_DYNAMIC_END + 0x001, // Flags: 0x100 - CONVERSATION_DYNAMIC_END = OBJECT_DYNAMIC_END + 0x002, + UpdateField<int32, 0, 1> QuestID; + UpdateField<uint32, 0, 2> StateFlags; + UpdateField<uint32, 0, 3> EndTime; + UpdateField<uint32, 0, 4> AcceptTime; + UpdateFieldArray<int16, 24, 5, 6> ObjectiveProgress; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void ClearChangesMask(); }; -#endif // _UPDATEFIELDS_H +struct ArenaCooldown : public IsUpdateFieldStructureTag, public HasChangesMask<8> +{ + UpdateField<int32, 0, 1> SpellID; + UpdateField<int32, 0, 2> Charges; + UpdateField<uint32, 0, 3> Flags; + UpdateField<uint32, 0, 4> StartTime; + UpdateField<uint32, 0, 5> EndTime; + UpdateField<uint32, 0, 6> NextChargeTime; + UpdateField<uint8, 0, 7> MaxCharges; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<161> +{ + DynamicUpdateField<ArenaCooldown, 0, 1> ArenaCooldowns; + UpdateField<ObjectGuid, 0, 2> DuelArbiter; + UpdateField<ObjectGuid, 0, 3> WowAccount; + UpdateField<ObjectGuid, 0, 4> LootTargetGUID; + UpdateField<uint32, 0, 5> PlayerFlags; + UpdateField<uint32, 0, 6> PlayerFlagsEx; + UpdateField<uint32, 0, 7> GuildRankID; + UpdateField<uint32, 0, 8> GuildDeleteDate; + UpdateField<int32, 0, 9> GuildLevel; + UpdateField<uint8, 0, 10> SkinID; + UpdateField<uint8, 0, 11> FaceID; + UpdateField<uint8, 0, 12> HairStyleID; + UpdateField<uint8, 0, 13> HairColorID; + UpdateField<uint8, 0, 14> FacialHairStyleID; + UpdateField<uint8, 0, 15> PartyType; + UpdateField<uint8, 0, 16> NativeSex; + UpdateField<uint8, 0, 17> Inebriation; + UpdateField<uint8, 0, 18> PvpTitle; + UpdateField<uint8, 0, 19> ArenaFaction; + UpdateField<uint32, 0, 20> DuelTeam; + UpdateField<int32, 0, 21> GuildTimeStamp; + UpdateField<int32, 0, 22> PlayerTitle; + UpdateField<int32, 0, 23> FakeInebriation; + UpdateField<uint32, 0, 24> VirtualPlayerRealm; + UpdateField<uint32, 0, 25> CurrentSpecID; + UpdateField<int32, 0, 26> TaxiMountAnimKitID; + UpdateField<uint8, 0, 27> CurrentBattlePetBreedQuality; + UpdateField<int32, 0, 28> HonorLevel; + UpdateField<int32, 0, 29> Field_B0; + UpdateField<int32, 0, 30> Field_B4; + UpdateFieldArray<uint8, 3, 31, 32> CustomDisplayOption; + UpdateFieldArray<QuestLog, 100, 35, 36> QuestLog; + UpdateFieldArray<VisibleItem, 19, 136, 137> VisibleItems; + UpdateFieldArray<float, 4, 156, 157> AvgItemLevel; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void AppendAllowedFieldsMaskForFlag(UpdateMask<161>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const; + void WriteUpdate(ByteBuffer& data, UpdateMask<161> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct SkillInfo : public IsUpdateFieldStructureTag, public HasChangesMask<1793> +{ + UpdateFieldArray<uint16, 256, 0, 1> SkillLineID; + UpdateFieldArray<uint16, 256, 0, 257> SkillStep; + UpdateFieldArray<uint16, 256, 0, 513> SkillRank; + UpdateFieldArray<uint16, 256, 0, 769> SkillStartingRank; + UpdateFieldArray<uint16, 256, 0, 1025> SkillMaxRank; + UpdateFieldArray<int16, 256, 0, 1281> SkillTempBonus; + UpdateFieldArray<uint16, 256, 0, 1537> SkillPermBonus; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct RestInfo : public IsUpdateFieldStructureTag, public HasChangesMask<3> +{ + UpdateField<uint32, 0, 1> Threshold; + UpdateField<uint8, 0, 2> StateID; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct PVPInfo : public IsUpdateFieldStructureTag, public HasChangesMask<10> +{ + UpdateField<uint32, 0, 1> Field_0; + UpdateField<uint32, 0, 2> Field_4; + UpdateField<uint32, 0, 3> Field_8; + UpdateField<uint32, 0, 4> Field_C; + UpdateField<uint32, 0, 5> Rating; + UpdateField<uint32, 0, 6> Field_14; + UpdateField<uint32, 0, 7> Field_18; + UpdateField<uint32, 0, 8> PvpTierID; + UpdateField<uint32, 0, 9> Field_20; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct CharacterRestriction : public IsUpdateFieldStructureTag +{ + int32 Field_0; + int32 Field_4; + int32 Field_8; + uint32 Type; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; +}; + +struct SpellPctModByLabel : public IsUpdateFieldStructureTag +{ + int32 ModIndex; + float ModifierValue; + int32 LabelID; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; +}; + +struct SpellFlatModByLabel : public IsUpdateFieldStructureTag +{ + int32 ModIndex; + int32 ModifierValue; + int32 LabelID; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; +}; + +struct Research : public IsUpdateFieldStructureTag +{ + int16 ResearchProjectID; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; +}; + +struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1455> +{ + UpdateField<bool, 0, 1> BackpackAutoSortDisabled; + UpdateField<bool, 0, 2> BankAutoSortDisabled; + UpdateField<bool, 0, 3> SortBagsRightToLeft; + UpdateField<bool, 0, 4> InsertItemsLeftToRight; + UpdateFieldArray<DynamicUpdateField<Research, -1, -1>, 1, 20, 21> Research; + DynamicUpdateField<uint64, 0, 5> KnownTitles; + DynamicUpdateField<uint16, 0, 6> ResearchSites; + DynamicUpdateField<uint32, 0, 7> ResearchSiteProgress; + DynamicUpdateField<int32, 0, 8> DailyQuestsCompleted; + DynamicUpdateField<int32, 0, 9> AvailableQuestLineXQuestIDs; + DynamicUpdateField<int32, 0, 10> Heirlooms; + DynamicUpdateField<uint32, 0, 11> HeirloomFlags; + DynamicUpdateField<int32, 0, 12> Toys; + DynamicUpdateField<uint32, 0, 13> ToyFlags; + DynamicUpdateField<uint32, 0, 14> Transmog; + DynamicUpdateField<int32, 0, 15> ConditionalTransmog; + DynamicUpdateField<int32, 0, 16> SelfResSpells; + DynamicUpdateField<SpellPctModByLabel, 0, 17> SpellPctModByLabel; + DynamicUpdateField<SpellFlatModByLabel, 0, 18> SpellFlatModByLabel; + DynamicUpdateField<CharacterRestriction, 0, 19> CharacterRestrictions; + UpdateField<ObjectGuid, 0, 22> FarsightObject; + UpdateField<ObjectGuid, 0, 23> SummonedBattlePetGUID; + UpdateField<uint64, 0, 24> Coinage; + UpdateField<int32, 0, 25> XP; + UpdateField<int32, 0, 26> NextLevelXP; + UpdateField<int32, 0, 27> TrialXP; + UpdateField<SkillInfo, 0, 28> Skill; + UpdateField<int32, 0, 29> CharacterPoints; + UpdateField<int32, 0, 30> MaxTalentTiers; + UpdateField<int32, 0, 31> TrackCreatureMask; + UpdateField<float, 0, 32> MainhandExpertise; + UpdateField<float, 0, 33> OffhandExpertise; + UpdateField<float, 34, 35> RangedExpertise; + UpdateField<float, 34, 36> CombatRatingExpertise; + UpdateField<float, 34, 37> BlockPercentage; + UpdateField<float, 34, 38> DodgePercentage; + UpdateField<float, 34, 39> DodgePercentageFromAttribute; + UpdateField<float, 34, 40> ParryPercentage; + UpdateField<float, 34, 41> ParryPercentageFromAttribute; + UpdateField<float, 34, 42> CritPercentage; + UpdateField<float, 34, 43> RangedCritPercentage; + UpdateField<float, 34, 44> OffhandCritPercentage; + UpdateField<float, 34, 45> SpellCritPercentage; + UpdateField<int32, 34, 46> ShieldBlock; + UpdateField<float, 34, 47> ShieldBlockCritPercentage; + UpdateField<float, 34, 48> Mastery; + UpdateField<float, 34, 49> Speed; + UpdateField<float, 34, 50> Avoidance; + UpdateField<float, 34, 51> Sturdiness; + UpdateField<int32, 34, 52> Versatility; + UpdateField<float, 34, 53> VersatilityBonus; + UpdateField<float, 34, 54> PvpPowerDamage; + UpdateField<float, 34, 55> PvpPowerHealing; + UpdateField<int32, 34, 56> ModHealingDonePos; + UpdateField<float, 34, 57> ModHealingPercent; + UpdateField<float, 34, 58> ModHealingDonePercent; + UpdateField<float, 34, 59> ModPeriodicHealingDonePercent; + UpdateField<float, 34, 60> ModSpellPowerPercent; + UpdateField<float, 34, 61> ModResiliencePercent; + UpdateField<float, 34, 62> OverrideSpellPowerByAPPercent; + UpdateField<float, 34, 63> OverrideAPBySpellPowerPercent; + UpdateField<int32, 34, 64> ModTargetResistance; + UpdateField<int32, 34, 65> ModTargetPhysicalResistance; + UpdateField<int32, 66, 67> LocalFlags; + UpdateField<uint8, 66, 68> GrantableLevels; + UpdateField<uint8, 66, 69> MultiActionBars; + UpdateField<uint8, 66, 70> LifetimeMaxRank; + UpdateField<uint8, 66, 71> NumRespecs; + UpdateField<uint32, 66, 72> PvpMedals; + UpdateField<uint16, 66, 73> TodayHonorableKills; + UpdateField<uint16, 66, 74> YesterdayHonorableKills; + UpdateField<uint32, 66, 75> LifetimeHonorableKills; + UpdateField<int32, 66, 76> WatchedFactionIndex; + UpdateField<int32, 66, 77> MaxLevel; + UpdateField<int32, 66, 78> ScalingPlayerLevelDelta; + UpdateField<int32, 66, 79> MaxCreatureScalingLevel; + UpdateField<int32, 66, 80> PetSpellPower; + UpdateField<float, 66, 81> UiHitModifier; + UpdateField<float, 66, 82> UiSpellHitModifier; + UpdateField<int32, 66, 83> HomeRealmTimeOffset; + UpdateField<float, 66, 84> ModPetHaste; + UpdateField<uint8, 66, 85> LocalRegenFlags; + UpdateField<uint8, 66, 86> AuraVision; + UpdateField<uint8, 66, 87> NumBackpackSlots; + UpdateField<int32, 66, 88> OverrideSpellsID; + UpdateField<int32, 66, 89> LfgBonusFactionID; + UpdateField<uint16, 66, 90> LootSpecID; + UpdateField<uint32, 66, 91> OverrideZonePVPType; + UpdateField<int32, 66, 92> Honor; + UpdateField<int32, 66, 93> HonorNextLevel; + UpdateField<int32, 66, 94> PvpRewardAchieved; + UpdateField<int32, 66, 95> PvpTierMaxFromWins; + UpdateField<int32, 66, 96> PvpLastWeeksRewardAchieved; + UpdateField<int32, 66, 97> PvpLastWeeksTierMaxFromWins; + UpdateField<int32, 98, 99> PvpLastWeeksRewardClaimed; + UpdateField<uint8, 98, 100> NumBankSlots; + UpdateFieldArray<ObjectGuid, 195, 101, 102> InvSlots; + UpdateFieldArray<uint32, 2, 297, 298> TrackResourceMask; + UpdateFieldArray<uint64, 160, 300, 301> ExploredZones; + UpdateFieldArray<RestInfo, 2, 461, 462> RestInfo; + UpdateFieldArray<int32, 7, 464, 465> ModDamageDonePos; + UpdateFieldArray<int32, 7, 464, 472> ModDamageDoneNeg; + UpdateFieldArray<float, 7, 464, 479> ModDamageDonePercent; + UpdateFieldArray<float, 3, 486, 487> WeaponDmgMultipliers; + UpdateFieldArray<float, 3, 486, 490> WeaponAtkSpeedMultipliers; + UpdateFieldArray<uint32, 12, 493, 494> BuybackPrice; + UpdateFieldArray<uint32, 12, 493, 506> BuybackTimestamp; + UpdateFieldArray<int32, 32, 518, 519> CombatRatings; + UpdateFieldArray<PVPInfo, 6, 551, 552> PvpInfo; + UpdateFieldArray<uint32, 4, 558, 559> NoReagentCostMask; + UpdateFieldArray<int32, 2, 563, 564> ProfessionSkillLine; + UpdateFieldArray<uint32, 4, 566, 567> BagSlotFlags; + UpdateFieldArray<uint32, 7, 571, 572> BankBagSlotFlags; + UpdateFieldArray<uint64, 875, 579, 580> QuestCompleted; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct GameObjectData : public IsUpdateFieldStructureTag, public HasChangesMask<20> +{ + UpdateField<std::vector<uint32>, 0, 1> StateWorldEffectIDs; + DynamicUpdateField<int32, 0, 2> EnableDoodadSets; + UpdateField<int32, 0, 3> DisplayID; + UpdateField<uint32, 0, 4> SpellVisualID; + UpdateField<uint32, 0, 5> StateSpellVisualID; + UpdateField<uint32, 0, 6> SpawnTrackingStateAnimID; + UpdateField<uint32, 0, 7> SpawnTrackingStateAnimKitID; + UpdateField<uint32, 0, 8> StateWorldEffectsQuestObjectiveID; + UpdateField<ObjectGuid, 0, 9> CreatedBy; + UpdateField<ObjectGuid, 0, 10> GuildGUID; + UpdateField<uint32, 0, 11> Flags; + struct FlagsTag : ViewerDependentValueTag<uint32> {}; + UpdateField<QuaternionData, 0, 12> ParentRotation; + UpdateField<int32, 0, 13> FactionTemplate; + UpdateField<int32, 0, 14> Level; + struct LevelTag : ViewerDependentValueTag<int32> {}; + UpdateField<int8, 0, 15> State; + struct StateTag : ViewerDependentValueTag<int8> {}; + UpdateField<int8, 0, 16> TypeID; + UpdateField<uint8, 0, 17> ArtKit; + UpdateField<uint8, 0, 18> PercentHealth; + UpdateField<uint32, 0, 19> CustomParam; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct DynamicObjectData : public IsUpdateFieldStructureTag, public HasChangesMask<7> +{ + UpdateField<ObjectGuid, 0, 1> Caster; + UpdateField<int32, 0, 2> SpellXSpellVisualID; + UpdateField<int32, 0, 3> SpellID; + UpdateField<float, 0, 4> Radius; + UpdateField<uint32, 0, 5> CastTime; + UpdateField<uint8, 0, 6> Type; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, DynamicObject const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, DynamicObject const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct CorpseData : public IsUpdateFieldStructureTag, public HasChangesMask<40> +{ + UpdateField<uint32, 0, 1> DynamicFlags; + UpdateField<ObjectGuid, 0, 2> Owner; + UpdateField<ObjectGuid, 0, 3> PartyGUID; + UpdateField<ObjectGuid, 0, 4> GuildGUID; + UpdateField<uint32, 0, 5> DisplayID; + UpdateField<uint8, 0, 6> Unused; + UpdateField<uint8, 0, 7> RaceID; + UpdateField<uint8, 0, 8> Sex; + UpdateField<uint8, 0, 9> SkinID; + UpdateField<uint8, 0, 10> FaceID; + UpdateField<uint8, 0, 11> HairStyleID; + UpdateField<uint8, 0, 12> HairColorID; + UpdateField<uint8, 0, 13> FacialHairStyleID; + UpdateField<uint32, 0, 14> Flags; + UpdateField<int32, 0, 15> FactionTemplate; + UpdateFieldArray<uint32, 19, 16, 17> Items; + UpdateFieldArray<uint8, 3, 36, 37> CustomDisplayOption; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct ScaleCurve : public IsUpdateFieldStructureTag +{ + bool OverrideActive; + uint32 StartTimeOffset; + uint32 ParameterCurve; + TaggedPosition<Position::XY> Points[2]; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const; +}; + +struct AreaTriggerData : public IsUpdateFieldStructureTag, public HasChangesMask<14> +{ + UpdateField<ScaleCurve, 0, 1> OverrideScaleCurve; + UpdateField<ScaleCurve, 0, 2> ExtraScaleCurve; + UpdateField<ObjectGuid, 0, 3> Caster; + UpdateField<uint32, 0, 4> Duration; + UpdateField<uint32, 0, 5> TimeToTarget; + UpdateField<uint32, 0, 6> TimeToTargetScale; + UpdateField<uint32, 0, 7> TimeToTargetExtraScale; + UpdateField<int32, 0, 8> SpellID; + UpdateField<int32, 0, 9> SpellForVisuals; + UpdateField<int32, 0, 10> SpellXSpellVisualID; + UpdateField<float, 0, 11> BoundsRadius2D; + UpdateField<uint32, 0, 12> DecalPropertiesID; + UpdateField<ObjectGuid, 0, 13> CreatingEffectGUID; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct SceneObjectData : public IsUpdateFieldStructureTag, public HasChangesMask<5> +{ + UpdateField<int32, 0, 1> ScriptPackageID; + UpdateField<uint32, 0, 2> RndSeedVal; + UpdateField<ObjectGuid, 0, 3> CreatedBy; + UpdateField<uint32, 0, 4> SceneType; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct ConversationLine : public IsUpdateFieldStructureTag +{ + int32 ConversationLineID; + uint32 StartTime; + int32 UiCameraID; + uint8 ActorIndex; + uint8 Flags; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const; +}; + +struct ConversationActor : public IsUpdateFieldStructureTag +{ + uint32 CreatureID; + uint32 CreatureDisplayInfoID; + ObjectGuid ActorGUID; + int32 Field_18; + uint32 Type; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const; +}; + +struct ConversationData : public IsUpdateFieldStructureTag, public HasChangesMask<4> +{ + UpdateField<std::vector<ConversationLine>, 0, 1> Lines; + DynamicUpdateField<ConversationActor, 0, 2> Actors; + UpdateField<int32, 0, 3> LastLineEndTime; + + void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +} + +#endif // UpdateFields_h__ diff --git a/src/server/game/Entities/Object/Updates/UpdateMask.h b/src/server/game/Entities/Object/Updates/UpdateMask.h new file mode 100644 index 00000000000..8c903528ae8 --- /dev/null +++ b/src/server/game/Entities/Object/Updates/UpdateMask.h @@ -0,0 +1,154 @@ +/* + * Copyright (C) 2008-2019 TrinityCore <https://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef UpdateMask_h__ +#define UpdateMask_h__ + +#include "Define.h" + +namespace UpdateMaskHelpers +{ + inline constexpr uint32 GetBlockIndex(uint32 bit) { return bit / 32; } + inline constexpr uint32 GetBlockFlag(uint32 bit) { return 1 << (bit % 32); } +} + +template<uint32 Bits> +class UpdateMask +{ +public: + static constexpr uint32 BlockCount = (Bits + 31) / 32; + static constexpr uint32 BlocksMaskCount = (BlockCount + 31) / 32; + + UpdateMask() + { + std::fill(std::begin(_blocksMask), std::end(_blocksMask), 0); + std::fill(std::begin(_blocks), std::end(_blocks), 0); + } + + UpdateMask(std::initializer_list<uint32> init) + { + InitFromBlocks(init.begin(), init.size()); + } + + uint32 GetBlocksMask(uint32 index) const + { + return _blocksMask[index]; + } + + uint32 GetBlock(uint32 index) const + { + return _blocks[index]; + } + + bool operator[](uint32 index) const + { + return (_blocks[index / 32] & (1 << (index % 32))) != 0; + } + + void Reset(uint32 index) + { + std::size_t blockIndex = UpdateMaskHelpers::GetBlockIndex(index); + if (!(_blocks[blockIndex] &= ~UpdateMaskHelpers::GetBlockFlag(index))) + _blocksMask[UpdateMaskHelpers::GetBlockIndex(blockIndex)] &= ~UpdateMaskHelpers::GetBlockFlag(blockIndex); + } + + void ResetAll() + { + std::fill(std::begin(_blocksMask), std::end(_blocksMask), 0); + std::fill(std::begin(_blocks), std::end(_blocks), 0); + } + + void Set(uint32 index) + { + std::size_t blockIndex = UpdateMaskHelpers::GetBlockIndex(index); + _blocks[blockIndex] |= UpdateMaskHelpers::GetBlockFlag(index); + _blocksMask[UpdateMaskHelpers::GetBlockIndex(blockIndex)] |= UpdateMaskHelpers::GetBlockFlag(blockIndex); + } + + void SetAll() + { + std::fill(std::begin(_blocksMask), std::end(_blocksMask), 0xFFFFFFFF); + if (BlocksMaskCount % 32) + { + constexpr uint32 unused = 32 - (BlocksMaskCount % 32); + _blocksMask[BlocksMaskCount - 1] &= (0xFFFFFFFF >> unused); + } + std::fill(std::begin(_blocks), std::end(_blocks), 0xFFFFFFFF); + if (BlockCount % 32) + { + constexpr uint32 unused = 32 - (BlockCount % 32); + _blocks[BlockCount - 1] &= (0xFFFFFFFF >> unused); + } + } + + UpdateMask& operator&=(UpdateMask const& right) + { + for (uint32 i = 0; i < BlocksMaskCount; ++i) + _blocksMask[i] &= right._blocksMask[i]; + + for (uint32 i = 0; i < BlockCount; ++i) + _blocks[i] &= right._blocks[i]; + + return *this; + } + + UpdateMask& operator|=(UpdateMask const& right) + { + for (std::size_t i = 0; i < BlocksMaskCount; ++i) + _blocksMask[i] |= right._blocksMask[i]; + + for (std::size_t i = 0; i < BlockCount; ++i) + _blocks[i] |= right._blocks[i]; + + return *this; + } + +private: + void InitFromBlocks(uint32 const* input, uint32 size) + { + std::fill(std::begin(_blocksMask), std::end(_blocksMask), 0); + + uint32 block = 0; + for (; block < size; ++block) + if ((_blocks[block] = input[block]) != 0) + _blocksMask[UpdateMaskHelpers::GetBlockIndex(block)] |= UpdateMaskHelpers::GetBlockFlag(block); + + for (; block < BlockCount; ++block) + _blocks[block] = 0; + } + + uint32 _blocksMask[BlocksMaskCount]; + uint32 _blocks[BlockCount]; +}; + +template<uint32 Bits> +UpdateMask<Bits> operator&(UpdateMask<Bits> const& left, UpdateMask<Bits> const& right) +{ + UpdateMask<Bits> result = left; + result &= right; + return result; +} + +template<uint32 Bits> +UpdateMask<Bits> operator|(UpdateMask<Bits> const& left, UpdateMask<Bits> const& right) +{ + UpdateMask<Bits> result = left; + result |= right; + return result; +} + +#endif // UpdateMask_h__ diff --git a/src/server/game/Entities/Object/Updates/ViewerDependentValues.h b/src/server/game/Entities/Object/Updates/ViewerDependentValues.h new file mode 100644 index 00000000000..81c1fdbabc0 --- /dev/null +++ b/src/server/game/Entities/Object/Updates/ViewerDependentValues.h @@ -0,0 +1,269 @@ +/* + * Copyright (C) 2008-2019 TrinityCore <https://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef ViewerDependentValues_h__ +#define ViewerDependentValues_h__ + +#include "Creature.h" +#include "GameObject.h" +#include "Map.h" +#include "ObjectMgr.h" +#include "Player.h" +#include "SpellInfo.h" +#include "SpellMgr.h" +#include "World.h" + +namespace UF +{ +template<typename Tag> +class ViewerDependentValue +{ +}; + +template<> +class ViewerDependentValue<UF::ObjectData::DynamicFlagsTag> +{ +public: + using ValueType = UF::ObjectData::DynamicFlagsTag::ValueType; + + static ValueType GetValue(ValueType dynamicFlags, Object const* object, Player const* receiver) + { + if (Unit const* unit = object->ToUnit()) + { + dynamicFlags &= ~UNIT_DYNFLAG_TAPPED; + + if (Creature const* creature = object->ToCreature()) + { + if (creature->hasLootRecipient() && !creature->isTappedBy(receiver)) + dynamicFlags |= UNIT_DYNFLAG_TAPPED; + + if (!receiver->isAllowedToLoot(creature)) + dynamicFlags &= ~UNIT_DYNFLAG_LOOTABLE; + } + + // unit UNIT_DYNFLAG_TRACK_UNIT should only be sent to caster of SPELL_AURA_MOD_STALKED auras + if (dynamicFlags & UNIT_DYNFLAG_TRACK_UNIT) + if (!unit->HasAuraTypeWithCaster(SPELL_AURA_MOD_STALKED, receiver->GetGUID())) + dynamicFlags &= ~UNIT_DYNFLAG_TRACK_UNIT; + } + else if (GameObject const* gameObject = object->ToGameObject()) + { + uint16 dynFlags = 0; + uint16 pathProgress = 0xFFFF; + switch (gameObject->GetGoType()) + { + case GAMEOBJECT_TYPE_QUESTGIVER: + if (gameObject->ActivateToQuest(receiver)) + dynFlags |= GO_DYNFLAG_LO_ACTIVATE; + break; + case GAMEOBJECT_TYPE_CHEST: + case GAMEOBJECT_TYPE_GOOBER: + if (gameObject->ActivateToQuest(receiver)) + dynFlags |= GO_DYNFLAG_LO_ACTIVATE | GO_DYNFLAG_LO_SPARKLE; + else if (receiver->IsGameMaster()) + dynFlags |= GO_DYNFLAG_LO_ACTIVATE; + break; + case GAMEOBJECT_TYPE_GENERIC: + if (gameObject->ActivateToQuest(receiver)) + dynFlags |= GO_DYNFLAG_LO_SPARKLE; + break; + case GAMEOBJECT_TYPE_TRANSPORT: + case GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT: + { + if (uint32 transportPeriod = gameObject->GetTransportPeriod()) + { + float timer = float(gameObject->GetGOValue()->Transport.PathProgress % transportPeriod); + pathProgress = uint16(timer / float(transportPeriod) * 65535.0f); + } + break; + } + default: + break; + } + + dynamicFlags = (pathProgress << 16) | dynFlags; + } + + return dynamicFlags; + } +}; + +template<> +class ViewerDependentValue<UF::UnitData::DisplayIDTag> +{ +public: + using ValueType = UF::UnitData::DisplayIDTag::ValueType; + + static ValueType GetValue(ValueType displayId, Unit const* unit, Player const* receiver) + { + if (unit->IsCreature()) + { + CreatureTemplate const* cinfo = unit->ToCreature()->GetCreatureTemplate(); + + // this also applies for transform auras + if (SpellInfo const* transform = sSpellMgr->GetSpellInfo(unit->getTransForm())) + for (SpellEffectInfo const* effect : transform->GetEffectsForDifficulty(unit->GetMap()->GetDifficultyID())) + if (effect && effect->IsAura(SPELL_AURA_TRANSFORM)) + if (CreatureTemplate const* transformInfo = sObjectMgr->GetCreatureTemplate(effect->MiscValue)) + { + cinfo = transformInfo; + break; + } + + if (cinfo->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER) + if (receiver->IsGameMaster()) + displayId = cinfo->GetFirstVisibleModel()->CreatureDisplayID; + } + + return displayId; + } +}; + +template<> +class ViewerDependentValue<UF::UnitData::FactionTemplateTag> +{ +public: + using ValueType = UF::UnitData::FactionTemplateTag::ValueType; + + static ValueType GetValue(ValueType factionTemplate, Unit const* unit, Player const* receiver) + { + if (unit->IsControlledByPlayer() && receiver != unit && sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP) && unit->IsInRaidWith(receiver)) + { + FactionTemplateEntry const* ft1 = unit->GetFactionTemplateEntry(); + FactionTemplateEntry const* ft2 = receiver->GetFactionTemplateEntry(); + if (ft1 && ft2 && !ft1->IsFriendlyTo(ft2)) + // pretend that all other HOSTILE players have own faction, to allow follow, heal, rezz (trade wont work) + factionTemplate = receiver->getFaction(); + } + + return factionTemplate; + } +}; + +template<> +class ViewerDependentValue<UF::UnitData::FlagsTag> +{ +public: + using ValueType = UF::UnitData::FlagsTag::ValueType; + + static ValueType GetValue(ValueType flags, Unit const* /*unit*/, Player const* receiver) + { + // Gamemasters should be always able to select units - remove not selectable flag + if (receiver->IsGameMaster()) + flags &= ~UNIT_FLAG_NOT_SELECTABLE; + + return flags; + } +}; + +template<> +class ViewerDependentValue<UF::UnitData::AuraStateTag> +{ +public: + using ValueType = UF::UnitData::AuraStateTag::ValueType; + + static ValueType GetValue(ValueType /*auraState*/, Unit const* unit, Player const* receiver) + { + // Check per caster aura states to not enable using a spell in client if specified aura is not by target + return unit->BuildAuraStateUpdateForTarget(receiver); + } +}; + +template<> +class ViewerDependentValue<UF::UnitData::PvpFlagsTag> +{ +public: + using ValueType = UF::UnitData::PvpFlagsTag::ValueType; + + static ValueType GetValue(ValueType pvpFlags, Unit const* unit, Player const* receiver) + { + if (unit->IsControlledByPlayer() && receiver != unit && sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP) && unit->IsInRaidWith(receiver)) + { + FactionTemplateEntry const* ft1 = unit->GetFactionTemplateEntry(); + FactionTemplateEntry const* ft2 = receiver->GetFactionTemplateEntry(); + if (ft1 && ft2 && !ft1->IsFriendlyTo(ft2)) + // Allow targeting opposite faction in party when enabled in config + pvpFlags &= UNIT_BYTE2_FLAG_SANCTUARY; + } + + return pvpFlags; + } +}; + +template<> +class ViewerDependentValue<UF::UnitData::NpcFlagsTag> +{ +public: + using ValueType = UF::UnitData::NpcFlagsTag::ValueType; + + static ValueType GetValue(ValueType npcFlag, uint32 i, Unit const* unit, Player const* receiver) + { + if (i == 0 && unit->IsCreature() && !receiver->CanSeeSpellClickOn(unit->ToCreature())) + npcFlag &= ~UNIT_NPC_FLAG_SPELLCLICK; + + return npcFlag; + } +}; + +template<> +class ViewerDependentValue<UF::GameObjectData::FlagsTag> +{ +public: + using ValueType = UF::GameObjectData::FlagsTag::ValueType; + + static ValueType GetValue(ValueType flags, GameObject const* gameObject, Player const* receiver) + { + if (gameObject->GetGoType() == GAMEOBJECT_TYPE_CHEST) + if (gameObject->GetGOInfo()->chest.usegrouplootrules && !gameObject->IsLootAllowedFor(receiver)) + flags |= GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE; + + return flags; + } +}; + +template<> +class ViewerDependentValue<UF::GameObjectData::LevelTag> +{ +public: + using ValueType = UF::GameObjectData::LevelTag::ValueType; + + static ValueType GetValue(ValueType level, GameObject const* gameObject, Player const* /*receiver*/) + { + bool isStoppableTransport = gameObject->GetGoType() == GAMEOBJECT_TYPE_TRANSPORT && !gameObject->GetGOValue()->Transport.StopFrames->empty(); + return isStoppableTransport ? gameObject->GetGOValue()->Transport.PathProgress : level; + } +}; + +template<> +class ViewerDependentValue<UF::GameObjectData::StateTag> +{ +public: + using ValueType = UF::GameObjectData::StateTag::ValueType; + + static ValueType GetValue(ValueType state, GameObject const* gameObject, Player const* /*receiver*/) + { + bool isStoppableTransport = gameObject->GetGoType() == GAMEOBJECT_TYPE_TRANSPORT && !gameObject->GetGOValue()->Transport.StopFrames->empty(); + if (isStoppableTransport && gameObject->GetGoState() == GO_STATE_TRANSPORT_ACTIVE) + if ((gameObject->GetGOValue()->Transport.StateUpdateTimer / 20000) & 1) + state = GO_STATE_TRANSPORT_STOPPED; + + return state; + } +}; +} + +#endif // ViewerDependentValues_h__ diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index 0d320da9659..b45e1e14e34 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -187,7 +187,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c setPetType(petType); setFaction(owner->getFaction()); - SetUInt32Value(UNIT_CREATED_BY_SPELL, summonSpellId); + SetCreatedBySpell(summonSpellId); if (IsCritter()) { @@ -211,22 +211,23 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c SetDisplayId(fields[3].GetUInt32()); SetNativeDisplayId(fields[3].GetUInt32()); uint32 petlevel = fields[4].GetUInt16(); - SetUInt64Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); + SetNpcFlags(UNIT_NPC_FLAG_NONE); + SetNpcFlags2(UNIT_NPC_FLAG_2_NONE); SetName(fields[8].GetString()); switch (getPetType()) { case SUMMON_PET: petlevel = owner->getLevel(); - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, CLASS_MAGE); - SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); // this enables popup window (pet dismiss, cancel) + SetClass(CLASS_MAGE); + SetUnitFlags(UNIT_FLAG_PVP_ATTACKABLE); // this enables popup window (pet dismiss, cancel) break; case HUNTER_PET: - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, CLASS_WARRIOR); - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, GENDER_NONE); + SetClass(CLASS_WARRIOR); + SetGender(GENDER_NONE); SetSheath(SHEATH_STATE_MELEE); - SetByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PET_FLAGS, fields[9].GetBool() ? UNIT_CAN_BE_ABANDONED : UNIT_CAN_BE_RENAMED | UNIT_CAN_BE_ABANDONED); - SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); // this enables popup window (pet abandon, cancel) + SetPetFlags(fields[9].GetBool() ? UNIT_PET_FLAG_CAN_BE_ABANDONED : UnitPetFlag(UNIT_PET_FLAG_CAN_BE_RENAMED | UNIT_PET_FLAG_CAN_BE_ABANDONED)); + SetUnitFlags(UNIT_FLAG_PVP_ATTACKABLE); // this enables popup window (pet abandon, cancel) break; default: if (!IsPetGhoul()) @@ -234,11 +235,11 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c break; } - SetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP, uint32(time(NULL))); // cast can't be helped here + SetPetNameTimestamp(uint32(time(NULL))); SetCreatorGUID(owner->GetGUID()); InitStatsForLevel(petlevel); - SetUInt32Value(UNIT_FIELD_PETEXPERIENCE, fields[5].GetUInt32()); + SetPetExperience(fields[5].GetUInt32()); SynchronizeLevelWithOwner(); @@ -459,18 +460,18 @@ void Pet::SavePetToDB(PetSaveMode mode) stmt->setUInt64(2, ownerLowGUID); stmt->setUInt32(3, GetNativeDisplayId()); stmt->setUInt8(4, getLevel()); - stmt->setUInt32(5, GetUInt32Value(UNIT_FIELD_PETEXPERIENCE)); + stmt->setUInt32(5, m_unitData->PetExperience); stmt->setUInt8(6, GetReactState()); stmt->setInt16(7, mode); stmt->setString(8, m_name); - stmt->setUInt8(9, HasByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PET_FLAGS, UNIT_CAN_BE_RENAMED) ? 0 : 1); + stmt->setUInt8(9, HasPetFlag(UNIT_PET_FLAG_CAN_BE_RENAMED) ? 0 : 1); stmt->setUInt32(10, curhealth); stmt->setUInt32(11, curmana); stmt->setString(12, GenerateActionBarData()); stmt->setUInt32(13, time(NULL)); - stmt->setUInt32(14, GetUInt32Value(UNIT_CREATED_BY_SPELL)); + stmt->setUInt32(14, m_unitData->CreatedBySpell); stmt->setUInt8(15, getPetType()); stmt->setUInt16(16, m_petSpecialization); trans->Append(stmt); @@ -528,8 +529,8 @@ void Pet::setDeathState(DeathState s) // overwrite virtual if (getPetType() == HUNTER_PET) { // pet corpse non lootable and non skinnable - SetUInt32Value(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_NONE); - RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); + SetDynamicFlags(UNIT_DYNFLAG_NONE); + RemoveUnitFlag(UNIT_FLAG_SKINNABLE); //SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); } @@ -691,8 +692,8 @@ void Pet::GivePetXP(uint32 xp) if (petlevel >= maxlevel) return; - uint32 nextLvlXP = GetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP); - uint32 curXP = GetUInt32Value(UNIT_FIELD_PETEXPERIENCE); + uint32 nextLvlXP = m_unitData->PetNextLevelExperience; + uint32 curXP = m_unitData->PetExperience; uint32 newXP = curXP + xp; // Check how much XP the pet should receive, and hand off have any left from previous levelups @@ -704,10 +705,10 @@ void Pet::GivePetXP(uint32 xp) GivePetLevel(petlevel); - nextLvlXP = GetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP); + nextLvlXP = m_unitData->PetNextLevelExperience; } // Not affected by special conditions - give it new XP - SetUInt32Value(UNIT_FIELD_PETEXPERIENCE, petlevel < maxlevel ? newXP : 0); + SetPetExperience(petlevel < maxlevel ? newXP : 0); } void Pet::GivePetLevel(uint8 level) @@ -717,8 +718,8 @@ void Pet::GivePetLevel(uint8 level) if (getPetType() == HUNTER_PET) { - SetUInt32Value(UNIT_FIELD_PETEXPERIENCE, 0); - SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, uint32(sObjectMgr->GetXPForLevel(level)*PET_XP_FACTOR)); + SetPetExperience(0); + SetPetNextLevelExperience(uint32(sObjectMgr->GetXPForLevel(level)*PET_XP_FACTOR)); } InitStatsForLevel(level); @@ -777,18 +778,19 @@ bool Pet::CreateBaseAtTamed(CreatureTemplate const* cinfo, Map* map) if (!Create(map->GenerateLowGuid<HighGuid::Pet>(), map, cinfo->Entry)) return false; - SetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP, 0); - SetUInt32Value(UNIT_FIELD_PETEXPERIENCE, 0); - SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, uint32(sObjectMgr->GetXPForLevel(getLevel()+1)*PET_XP_FACTOR)); - SetUInt64Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); + SetPetNameTimestamp(0); + SetPetExperience(0); + SetPetNextLevelExperience(uint32(sObjectMgr->GetXPForLevel(getLevel() + 1) * PET_XP_FACTOR)); + SetNpcFlags(UNIT_NPC_FLAG_NONE); + SetNpcFlags2(UNIT_NPC_FLAG_2_NONE); if (cinfo->type == CREATURE_TYPE_BEAST) { - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, CLASS_WARRIOR); - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, GENDER_NONE); - SetUInt32Value(UNIT_FIELD_DISPLAY_POWER, POWER_FOCUS); + SetClass(CLASS_WARRIOR); + SetGender(GENDER_NONE); + SetPowerType(POWER_FOCUS); SetSheath(SHEATH_STATE_MELEE); - SetByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PET_FLAGS, UNIT_CAN_BE_RENAMED | UNIT_CAN_BE_ABANDONED); + SetPetFlags(UnitPetFlag(UNIT_PET_FLAG_CAN_BE_RENAMED | UNIT_PET_FLAG_CAN_BE_ABANDONED)); } return true; @@ -834,9 +836,6 @@ bool Guardian::InitStatsForLevel(uint8 petlevel) SetBaseAttackTime(OFF_ATTACK, BASE_ATTACK_TIME); SetBaseAttackTime(RANGED_ATTACK, BASE_ATTACK_TIME); - SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f); - SetFloatValue(UNIT_MOD_CAST_HASTE, 1.0f); - //scale CreatureFamilyEntry const* cFamily = sCreatureFamilyStore.LookupEntry(cinfo->family); if (cFamily && cFamily->MinScale > 0.0f && petType == HUNTER_PET) @@ -901,8 +900,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(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 fire = GetOwner()->ToPlayer()->m_activePlayerData->ModDamageDonePos[SPELL_SCHOOL_FIRE]; + int32 shadow = GetOwner()->ToPlayer()->m_activePlayerData->ModDamageDonePos[SPELL_SCHOOL_SHADOW]; int32 val = (fire > shadow) ? fire : shadow; if (val < 0) val = 0; @@ -917,7 +916,7 @@ bool Guardian::InitStatsForLevel(uint8 petlevel) } case HUNTER_PET: { - SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, uint32(sObjectMgr->GetXPForLevel(petlevel)*PET_XP_FACTOR)); + ToPet()->SetPetNextLevelExperience(uint32(sObjectMgr->GetXPForLevel(petlevel)*PET_XP_FACTOR)); //these formula may not be correct; however, it is designed to be close to what it should be //this makes dps 0.5 of pets level SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, float(petlevel - (petlevel / 4))); @@ -1670,7 +1669,7 @@ bool Pet::Create(ObjectGuid::LowType guidlow, Map* map, uint32 Entry) return false; // Force regen flag for player pets, just like we do for players themselves - SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_REGENERATE_POWER); + AddUnitFlag2(UNIT_FLAG2_REGENERATE_POWER); SetSheath(SHEATH_STATE_MELEE); return true; diff --git a/src/server/game/Entities/Pet/Pet.h b/src/server/game/Entities/Pet/Pet.h index 9aa18c2cf0e..a618a26362c 100644 --- a/src/server/game/Entities/Pet/Pet.h +++ b/src/server/game/Entities/Pet/Pet.h @@ -85,6 +85,8 @@ class TC_GAME_API Pet : public Guardian void GivePetXP(uint32 xp); void GivePetLevel(uint8 level); + void SetPetExperience(uint32 xp) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PetExperience), xp); } + void SetPetNextLevelExperience(uint32 xp) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PetNextLevelExperience), xp); } void SynchronizeLevelWithOwner(); bool HaveInDiet(ItemTemplate const* item) const; uint32 GetCurrentFoodBenefitLevel(uint32 itemlevel) const; diff --git a/src/server/game/Entities/Player/CollectionMgr.cpp b/src/server/game/Entities/Player/CollectionMgr.cpp index 8ec7d65551b..f043797c09a 100644 --- a/src/server/game/Entities/Player/CollectionMgr.cpp +++ b/src/server/game/Entities/Player/CollectionMgr.cpp @@ -96,14 +96,14 @@ CollectionMgr::~CollectionMgr() void CollectionMgr::LoadToys() { for (auto const& t : _toys) - _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_TOYS, t.first); + _owner->GetPlayer()->AddToy(t.first, t.second.AsUnderlyingType()); } bool CollectionMgr::AddToy(uint32 itemId, bool isFavourite, bool hasFanfare) { if (UpdateAccountToys(itemId, isFavourite, hasFanfare)) { - _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_TOYS, itemId); + _owner->GetPlayer()->AddToy(itemId, GetToyFlags(isFavourite, hasFanfare).AsUnderlyingType()); return true; } @@ -119,7 +119,7 @@ void CollectionMgr::LoadAccountToys(PreparedQueryResult result) { Field* fields = result->Fetch(); uint32 itemId = fields[0].GetUInt32(); - _toys[itemId] = GetToyFlags(fields[1].GetBool(), fields[2].GetBool()); + _toys.emplace(itemId, GetToyFlags(fields[1].GetBool(), fields[2].GetBool())); } while (result->NextRow()); } @@ -229,19 +229,13 @@ uint32 CollectionMgr::GetHeirloomBonus(uint32 itemId) const void CollectionMgr::LoadHeirlooms() { for (auto const& item : _heirlooms) - { - _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOMS, item.first); - _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOM_FLAGS, item.second.flags); - } + _owner->GetPlayer()->AddHeirloom(item.first, item.second.flags); } void CollectionMgr::AddHeirloom(uint32 itemId, uint32 flags) { if (UpdateAccountHeirlooms(itemId, flags)) - { - _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOMS, itemId); - _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOM_FLAGS, flags); - } + _owner->GetPlayer()->AddHeirloom(itemId, flags); } void CollectionMgr::UpgradeHeirloom(uint32 itemId, int32 castItem) @@ -281,10 +275,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(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOMS); - uint16 offset = uint16(std::find(fields.begin(), fields.end(), itemId) - fields.begin()); + auto const& heirlooms = player->m_activePlayerData->Heirlooms; + uint32 offset = uint32(std::distance(heirlooms.begin(), std::find(heirlooms.begin(), heirlooms.end(), itemId))); - player->SetDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOM_FLAGS, offset, flags); + player->SetHeirloomFlags(offset, flags); itr->second.flags = flags; itr->second.bonusId = bonusId; } @@ -321,11 +315,11 @@ void CollectionMgr::CheckHeirloomUpgrades(Item* item) if (newItemId) { - 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()); + auto const& heirlooms = player->m_activePlayerData->Heirlooms; + uint32 offset = uint32(std::distance(heirlooms.begin(), std::find(heirlooms.begin(), heirlooms.end(), itr->first))); - player->SetDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOMS, offset, newItemId); - player->SetDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_HEIRLOOM_FLAGS, offset, 0); + player->SetHeirloom(offset, newItemId); + player->SetHeirloomFlags(offset, 0); _heirlooms.erase(itr); _heirlooms[newItemId] = 0; @@ -333,13 +327,18 @@ void CollectionMgr::CheckHeirloomUpgrades(Item* item) return; } - std::vector<uint32> const& fields = item->GetDynamicValues(ITEM_DYNAMIC_FIELD_BONUSLIST_IDS); + auto const& bonusListIDs = item->m_itemData->BonusListIDs; - for (uint32 bonusId : fields) + for (uint32 bonusId : *bonusListIDs) + { if (bonusId != itr->second.bonusId) - item->ClearDynamicValue(ITEM_DYNAMIC_FIELD_BONUSLIST_IDS); + { + item->ClearBonuses(); + break; + } + } - if (std::find(fields.begin(), fields.end(), itr->second.bonusId) == fields.end()) + if (std::find(bonusListIDs->begin(), bonusListIDs->end(), itr->second.bonusId) == bonusListIDs->end()) item->AddBonuses(itr->second.bonusId); } } @@ -484,13 +483,14 @@ private: void CollectionMgr::LoadItemAppearances() { - boost::to_block_range(*_appearances, DynamicBitsetBlockOutputIterator([this](uint32 blockValue) + Player* owner = _owner->GetPlayer(); + boost::to_block_range(*_appearances, DynamicBitsetBlockOutputIterator([owner](uint32 blockValue) { - _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_TRANSMOG, blockValue); + owner->AddTransmogBlock(blockValue); })); for (auto itr = _temporaryAppearances.begin(); itr != _temporaryAppearances.end(); ++itr) - _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG, itr->first); + owner->AddConditionalTransmog(itr->first); } void CollectionMgr::LoadAccountItemAppearances(PreparedQueryResult knownAppearances, PreparedQueryResult favoriteAppearances) @@ -611,7 +611,7 @@ void CollectionMgr::AddItemAppearance(Item* item) if (!CanAddAppearance(itemModifiedAppearance)) return; - if (item->GetUInt32Value(ITEM_FIELD_FLAGS) & (ITEM_FIELD_FLAG_BOP_TRADEABLE | ITEM_FIELD_FLAG_REFUNDABLE)) + if (item->HasItemFlag(ItemFieldFlags(ITEM_FIELD_FLAG_BOP_TRADEABLE | ITEM_FIELD_FLAG_REFUNDABLE))) { AddTemporaryAppearance(item->GetGUID(), itemModifiedAppearance); return; @@ -758,24 +758,24 @@ bool CollectionMgr::CanAddAppearance(ItemModifiedAppearanceEntry const* itemModi void CollectionMgr::AddItemAppearance(ItemModifiedAppearanceEntry const* itemModifiedAppearance) { + Player* owner = _owner->GetPlayer(); if (_appearances->size() <= itemModifiedAppearance->ID) { std::size_t numBlocks = _appearances->num_blocks(); _appearances->resize(itemModifiedAppearance->ID + 1); numBlocks = _appearances->num_blocks() - numBlocks; while (numBlocks--) - _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_TRANSMOG, 0); + owner->AddTransmogBlock(0); } _appearances->set(itemModifiedAppearance->ID); uint32 blockIndex = itemModifiedAppearance->ID / 32; uint32 bitIndex = itemModifiedAppearance->ID % 32; - uint32 currentMask = _owner->GetPlayer()->GetDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_TRANSMOG, blockIndex); - _owner->GetPlayer()->SetDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_TRANSMOG, blockIndex, currentMask | (1 << bitIndex)); + owner->AddTransmogFlag(blockIndex, 1 << bitIndex); auto temporaryAppearance = _temporaryAppearances.find(itemModifiedAppearance->ID); if (temporaryAppearance != _temporaryAppearances.end()) { - _owner->GetPlayer()->RemoveDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG, itemModifiedAppearance->ID); + owner->RemoveConditionalTransmog(itemModifiedAppearance->ID); _temporaryAppearances.erase(temporaryAppearance); } @@ -796,7 +796,7 @@ void CollectionMgr::AddTemporaryAppearance(ObjectGuid const& itemGuid, ItemModif { std::unordered_set<ObjectGuid>& itemsWithAppearance = _temporaryAppearances[itemModifiedAppearance->ID]; if (itemsWithAppearance.empty()) - _owner->GetPlayer()->AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG, itemModifiedAppearance->ID); + _owner->GetPlayer()->AddConditionalTransmog(itemModifiedAppearance->ID); itemsWithAppearance.insert(itemGuid); } @@ -814,7 +814,7 @@ void CollectionMgr::RemoveTemporaryAppearance(Item* item) itr->second.erase(item->GetGUID()); if (itr->second.empty()) { - _owner->GetPlayer()->RemoveDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG, itemModifiedAppearance->ID); + _owner->GetPlayer()->RemoveConditionalTransmog(itemModifiedAppearance->ID); _temporaryAppearances.erase(itr); } } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 3e92e1f2a5c..f8ae831faa9 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -110,7 +110,6 @@ #include "TransmogrificationPackets.h" #include "Transport.h" #include "UpdateData.h" -#include "UpdateFieldFlags.h" #include "Util.h" #include "Vehicle.h" #include "VehiclePackets.h" @@ -140,9 +139,6 @@ Player::Player(WorldSession* session) : Unit(true), m_sceneMgr(this) m_objectType |= TYPEMASK_PLAYER; m_objectTypeId = TYPEID_PLAYER; - m_valuesCount = ACTIVE_PLAYER_END; - _dynamicValuesCount = ACTIVE_PLAYER_DYNAMIC_END; - m_session = session; m_ingametime = 0; @@ -236,7 +232,7 @@ Player::Player(WorldSession* session) : Unit(true), m_sceneMgr(this) m_titanGripPenaltySpellId = 0; m_temporaryUnsummonedPetNumber = 0; - //cache for UNIT_CREATED_BY_SPELL to allow + //cache for CreatedBySpell to allow //returning reagents for temporarily removed pets //when dying/logging out m_oldpetspell = 0; @@ -455,47 +451,34 @@ bool Player::Create(ObjectGuid::LowType guidlow, WorldPackets::Character::Charac return false; } - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_RACE, createInfo->Race); - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, createInfo->Class); - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, createInfo->Sex); - SetUInt32Value(UNIT_FIELD_DISPLAY_POWER, powertype); + SetRace(createInfo->Race); + SetClass(createInfo->Class); + SetGender(createInfo->Sex); + SetPowerType(Powers(powertype)); InitDisplayIds(); if (sWorld->getIntConfig(CONFIG_GAME_TYPE) == REALM_TYPE_PVP || sWorld->getIntConfig(CONFIG_GAME_TYPE) == REALM_TYPE_RPPVP) { - SetByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_PVP); - SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); + AddPvpFlag(UNIT_BYTE2_FLAG_PVP); + AddUnitFlag(UNIT_FLAG_PVP_ATTACKABLE); } - SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_REGENERATE_POWER); - SetFloatValue(UNIT_FIELD_HOVERHEIGHT, 1.0f); // default for players in 3.0.3 + AddUnitFlag2(UNIT_FLAG2_REGENERATE_POWER); + SetHoverHeight(1.0f); // default for players in 3.0.3 - SetInt32Value(ACTIVE_PLAYER_FIELD_WATCHED_FACTION_INDEX, uint32(-1)); // -1 is default value + SetWatchedFactionIndex(-1); - SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID, createInfo->Skin); - SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID, createInfo->Face); - SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID, createInfo->HairStyle); - SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID, createInfo->HairColor); - SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE, createInfo->FacialHairStyle); + SetSkinId(createInfo->Skin); + SetFaceId(createInfo->Face); + SetHairStyleId(createInfo->HairStyle); + SetHairColorId(createInfo->HairColor); + SetFacialHairStyleId(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(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); + SetCustomDisplayOption(i, createInfo->CustomDisplay[i]); + SetRestState(REST_TYPE_XP, (GetSession()->IsARecruiter() || GetSession()->GetRecruiterId() != 0) ? REST_STATE_RAF_LINKED : REST_STATE_NOT_RAF_LINKED); + SetRestState(REST_TYPE_HONOR, REST_STATE_NOT_RAF_LINKED); + SetNativeSex(createInfo->Sex); SetInventorySlotCount(INVENTORY_DEFAULT_SIZE); - 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(ACTIVE_PLAYER_FIELD_KNOWN_TITLES + i, 0); // 0=disabled - SetUInt32Value(PLAYER_CHOSEN_TITLE, 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); if (getClass() == CLASS_DEATH_KNIGHT) @@ -524,19 +507,19 @@ bool Player::Create(ObjectGuid::LowType guidlow, WorldPackets::Character::Charac start_level = gm_level; } - SetUInt32Value(UNIT_FIELD_LEVEL, start_level); + SetLevel(start_level); InitRunes(); - SetUInt64Value(ACTIVE_PLAYER_FIELD_COINAGE, sWorld->getIntConfig(CONFIG_START_PLAYER_MONEY)); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::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)); // start with every map explored if (sWorld->getBoolConfig(CONFIG_START_ALL_EXPLORED)) { - for (uint16 i=0; i<PLAYER_EXPLORED_ZONES_SIZE; i++) - SetFlag(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES+i, 0xFFFFFFFF); + for (uint16 i = 0; i < PLAYER_EXPLORED_ZONES_SIZE; ++i) + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ExploredZones, i), UI64LIT(0xFFFFFFFFFFFFFFFF)); } //Reputations if "StartAllReputation" is enabled, -- @todo Fix this in a better way @@ -919,7 +902,7 @@ void Player::HandleDrowning(uint32 time_diff) uint32 damage = GetMaxHealth() / 5 + urand(0, getLevel()-1); EnvironmentalDamage(DAMAGE_EXHAUSTED, damage); } - else if (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST)) // Teleport ghost to graveyard + else if (HasPlayerFlag(PLAYER_FLAGS_GHOST)) // Teleport ghost to graveyard RepopAtGraveyard(); } else if (!(m_MirrorTimerFlagsLast & UNDERWARER_INDARKWATER)) @@ -1012,7 +995,7 @@ void Player::SetDrunkValue(uint8 newDrunkValue, uint32 itemId /*= 0*/) m_invisibilityDetect.DelFlag(INVISIBILITY_DRUNK); uint32 newDrunkenState = Player::GetDrunkenstateByValue(newDrunkValue); - SetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_INEBRIATION, newDrunkValue); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::Inebriation), newDrunkValue); UpdateObjectVisibility(); if (!isSobering) @@ -1211,7 +1194,7 @@ void Player::Update(uint32 p_time) } } - if (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING)) + if (HasPlayerFlag(PLAYER_FLAGS_RESTING)) _restMgr->Update(now); if (m_weaponChangeTimer > 0) @@ -1404,12 +1387,15 @@ void Player::setDeathState(DeathState s) if (IsAlive() && !oldIsAlive) //clear aura case after resurrection by another way (spells will be applied before next death) - ClearDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS); + ClearSelfResSpell(); } void Player::ToggleAFK() { - ToggleFlag(PLAYER_FLAGS, PLAYER_FLAGS_AFK); + if (isAFK()) + RemovePlayerFlag(PLAYER_FLAGS_AFK); + else + AddPlayerFlag(PLAYER_FLAGS_AFK); // afk player not allowed in battleground if (!IsGameMaster() && isAFK() && InBattleground() && !InArena()) @@ -1418,7 +1404,10 @@ void Player::ToggleAFK() void Player::ToggleDND() { - ToggleFlag(PLAYER_FLAGS, PLAYER_FLAGS_DND); + if (isDND()) + RemovePlayerFlag(PLAYER_FLAGS_DND); + else + AddPlayerFlag(PLAYER_FLAGS_DND); } uint8 Player::GetChatFlags() const @@ -1431,7 +1420,7 @@ uint8 Player::GetChatFlags() const tag |= CHAT_FLAG_DND; if (isAFK()) tag |= CHAT_FLAG_AFK; - if (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_DEVELOPER)) + if (HasPlayerFlag(PLAYER_FLAGS_DEVELOPER)) tag |= CHAT_FLAG_DEV; return tag; @@ -1499,7 +1488,7 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati // The player was ported to another map and loses the duel immediately. // We have to perform this check before the teleport, otherwise the // ObjectAccessor won't find the flag. - if (duel && GetMapId() != mapid && GetMap()->GetGameObject(GetGuidValue(PLAYER_DUEL_ARBITER))) + if (duel && GetMapId() != mapid && GetMap()->GetGameObject(m_playerData->DuelArbiter)) DuelComplete(DUEL_FLED); if (GetMapId() == mapid) @@ -1769,22 +1758,19 @@ void Player::RemoveFromWorld() for (ItemMap::iterator iter = mMitems.begin(); iter != mMitems.end(); ++iter) iter->second->RemoveFromWorld(); - if (m_uint32Values) + if (WorldObject* viewpoint = GetViewpoint()) { - if (WorldObject* viewpoint = GetViewpoint()) - { - TC_LOG_ERROR("entities.player", "Player::RemoveFromWorld: Player '%s' (%s) has viewpoint (Entry:%u, Type: %u) when removed from world", - GetName().c_str(), GetGUID().ToString().c_str(), viewpoint->GetEntry(), viewpoint->GetTypeId()); - SetViewpoint(viewpoint, false); - } + TC_LOG_ERROR("entities.player", "Player::RemoveFromWorld: Player '%s' (%s) has viewpoint (Entry:%u, Type: %u) when removed from world", + GetName().c_str(), GetGUID().ToString().c_str(), viewpoint->GetEntry(), viewpoint->GetTypeId()); + SetViewpoint(viewpoint, false); } } void Player::SetObjectScale(float scale) { Unit::SetObjectScale(scale); - SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, scale * DEFAULT_WORLD_OBJECT_SIZE); - SetFloatValue(UNIT_FIELD_COMBATREACH, scale * DEFAULT_COMBAT_REACH); + SetBoundingRadius(scale * DEFAULT_WORLD_OBJECT_SIZE); + SetCombatReach(scale * DEFAULT_COMBAT_REACH); if (IsInWorld()) SendMovementSetCollisionHeight(scale * GetCollisionHeight(IsMounted())); } @@ -1858,7 +1844,7 @@ void Player::Regenerate(Powers power) int32 curValue = GetPower(power); - // TODO: updating haste should update UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER for certain power types + // TODO: updating haste should update UnitData::PowerRegenFlatModifier for certain power types PowerTypeEntry const* powerType = sDB2Manager.GetPowerTypeEntry(power); if (!powerType) return; @@ -1869,10 +1855,10 @@ void Player::Regenerate(Powers power) if (powerType->RegenInterruptTimeMS && GetMSTimeDiffToNow(m_combatExitTime) < uint32(powerType->RegenInterruptTimeMS)) return; - addvalue = (powerType->RegenPeace + GetFloatValue(UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER + powerIndex)) * 0.001f * m_regenTimer; + addvalue = (powerType->RegenPeace + m_unitData->PowerRegenFlatModifier[powerIndex]) * 0.001f * m_regenTimer; } else - addvalue = (powerType->RegenCombat + GetFloatValue(UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER + powerIndex)) * 0.001f * m_regenTimer; + addvalue = (powerType->RegenCombat + m_unitData->PowerRegenInterruptedFlatModifier[powerIndex]) * 0.001f * m_regenTimer; static Rates const RatesForPower[MAX_POWERS] = { @@ -1973,7 +1959,11 @@ void Player::Regenerate(Powers power) if (m_regenTimerCount >= 2000) SetPower(power, curValue); else - UpdateUInt32Value(UNIT_FIELD_POWER + powerIndex, curValue); + { + // throttle packet sending + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Power, powerIndex), curValue); + const_cast<UF::UnitData&>(*m_unitData).ClearChanged(&UF::UnitData::Power, powerIndex); + } } void Player::RegenerateHealth() @@ -2054,7 +2044,7 @@ bool Player::CanInteractWithQuestGiver(Object* questGiver) const switch (questGiver->GetTypeId()) { case TYPEID_UNIT: - return GetNPCIfCanInteractWith(questGiver->GetGUID(), UNIT_NPC_FLAG_QUESTGIVER) != nullptr; + return GetNPCIfCanInteractWith(questGiver->GetGUID(), UNIT_NPC_FLAG_QUESTGIVER, UNIT_NPC_FLAG_2_NONE) != nullptr; case TYPEID_GAMEOBJECT: return GetGameObjectIfCanInteractWith(questGiver->GetGUID(), GAMEOBJECT_TYPE_QUESTGIVER) != nullptr; case TYPEID_PLAYER: @@ -2067,7 +2057,7 @@ bool Player::CanInteractWithQuestGiver(Object* questGiver) const return false; } -Creature* Player::GetNPCIfCanInteractWith(ObjectGuid const& guid, uint64 npcflagmask) const +Creature* Player::GetNPCIfCanInteractWith(ObjectGuid const& guid, NPCFlags npcFlags, NPCFlags2 npcFlags2) const { // unit checks if (!guid) @@ -2093,7 +2083,17 @@ Creature* Player::GetNPCIfCanInteractWith(ObjectGuid const& guid, uint64 npcflag return nullptr; // appropriate npc type - if (npcflagmask && !creature->HasFlag64(UNIT_NPC_FLAGS, npcflagmask)) + auto hasNpcFlags = [&]() + { + if (!npcFlags && !npcFlags2) + return true; + if (creature->HasNpcFlag(npcFlags)) + return true; + if (creature->HasNpcFlag2(npcFlags2)) + return true; + return false; + }; + if (!hasNpcFlags()) return nullptr; // not allow interaction under control, but allow with own pets @@ -2201,8 +2201,8 @@ void Player::SetGameMaster(bool on) { m_ExtraFlags |= PLAYER_EXTRA_GM_ON; setFaction(35); - SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_GM); - SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_ALLOW_CHEAT_SPELLS); + AddPlayerFlag(PLAYER_FLAGS_GM); + AddUnitFlag2(UNIT_FLAG2_ALLOW_CHEAT_SPELLS); if (Pet* pet = GetPet()) { @@ -2210,7 +2210,7 @@ void Player::SetGameMaster(bool on) pet->getHostileRefManager().setOnlineOfflineState(false); } - RemoveByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_FFA_PVP); + RemovePvpFlag(UNIT_BYTE2_FLAG_FFA_PVP); ResetContestedPvP(); getHostileRefManager().setOnlineOfflineState(false); @@ -2225,8 +2225,8 @@ void Player::SetGameMaster(bool on) m_ExtraFlags &= ~ PLAYER_EXTRA_GM_ON; setFactionForRace(getRace()); - RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_GM); - RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_ALLOW_CHEAT_SPELLS); + RemovePlayerFlag(PLAYER_FLAGS_GM); + RemoveUnitFlag2(UNIT_FLAG2_ALLOW_CHEAT_SPELLS); if (Pet* pet = GetPet()) { @@ -2236,7 +2236,7 @@ void Player::SetGameMaster(bool on) // restore FFA PvP Server state if (sWorld->IsFFAPvPRealm()) - SetByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_FFA_PVP); + AddPvpFlag(UNIT_BYTE2_FLAG_FFA_PVP); // restore FFA PvP area state, remove not allowed for GM mounts UpdateArea(m_areaUpdateId); @@ -2331,15 +2331,15 @@ void Player::RemoveFromGroup(Group* group, ObjectGuid guid, RemoveMethod method void Player::SetXP(uint32 xp) { - SetUInt32Value(ACTIVE_PLAYER_FIELD_XP, xp); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::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(ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP) / 2)) + if (getLevel() < MAX_LEVEL && xp < uint32(*m_activePlayerData->NextLevelXP / 2)) playerLevelDelta = -1; - SetInt32Value(ACTIVE_PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA, playerLevelDelta); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ScalingPlayerLevelDelta), playerLevelDelta); } void Player::GiveXP(uint32 xp, Unit* victim, float group_rate) @@ -2350,7 +2350,7 @@ void Player::GiveXP(uint32 xp, Unit* victim, float group_rate) if (!IsAlive() && !GetBattlegroundId()) return; - if (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_NO_XP_GAIN)) + if (HasPlayerFlag(PLAYER_FLAGS_NO_XP_GAIN)) return; if (victim && victim->GetTypeId() == TYPEID_UNIT && !victim->ToCreature()->hasLootRecipient()) @@ -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(ACTIVE_PLAYER_FIELD_XP); - uint32 nextLvlXP = GetUInt32Value(ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP); + uint32 curXP = m_activePlayerData->XP; + uint32 nextLvlXP = m_activePlayerData->NextLevelXP; 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(ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP); + nextLvlXP = m_activePlayerData->NextLevelXP; } SetXP(newXP); @@ -2438,7 +2438,7 @@ void Player::GiveLevel(uint8 level) GetSession()->SendPacket(packet.Write()); - SetUInt32Value(ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP, sObjectMgr->GetXPForLevel(level)); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::NextLevelXP), sObjectMgr->GetXPForLevel(level)); //update level, max level of skills m_Played_time[PLAYED_TIME_LEVEL] = 0; // Level Played Time reset @@ -2502,8 +2502,7 @@ void Player::GiveLevel(uint8 level) { ++m_grantableLevels; - 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); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::GrantableLevels), 1); } } } @@ -2518,7 +2517,7 @@ void Player::InitTalentForLevel() if (level < MIN_SPECIALIZATION_LEVEL) ResetTalentSpecialization(); - uint32 talentTiers = DB2Manager::GetNumTalentsAtLevel(level, Classes(getClass())); + int32 talentTiers = DB2Manager::GetNumTalentsAtLevel(level, Classes(getClass())); if (level < 15) { // Remove all talent points @@ -2527,13 +2526,13 @@ void Player::InitTalentForLevel() else { if (!GetSession()->HasPermission(rbac::RBAC_PERM_SKIP_CHECK_MORE_TALENTS_THAN_ALLOWED)) - for (uint32 t = talentTiers; t < MAX_TALENT_TIERS; ++t) + for (int32 t = talentTiers; t < MAX_TALENT_TIERS; ++t) for (uint32 c = 0; c < MAX_TALENT_COLUMNS; ++c) for (TalentEntry const* talent : sDB2Manager.GetTalentsByPosition(getClass(), t, c)) RemoveTalent(talent); } - SetUInt32Value(ACTIVE_PLAYER_FIELD_MAX_TALENT_TIERS, talentTiers); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::MaxTalentTiers), talentTiers); if (!GetSession()->PlayerLoading()) SendTalentsInfoData(); // update at client @@ -2550,21 +2549,21 @@ void Player::InitStatsForLevel(bool reapplyMods) PlayerLevelInfo info; sObjectMgr->GetPlayerLevelInfo(getRace(), getClass(), getLevel(), &info); - SetUInt32Value(ACTIVE_PLAYER_FIELD_MAX_LEVEL, sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL)); - SetUInt32Value(ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP, sObjectMgr->GetXPForLevel(getLevel())); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::MaxLevel), sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL)); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::NextLevelXP), sObjectMgr->GetXPForLevel(getLevel())); // reset before any aura state sources (health set/aura apply) - SetUInt32Value(UNIT_FIELD_AURASTATE, 0); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::AuraState), 0); UpdateSkillsForLevel(); // set default cast time multiplier - SetFloatValue(UNIT_MOD_CAST_SPEED, 1.0f); - SetFloatValue(UNIT_MOD_CAST_HASTE, 1.0f); - SetFloatValue(UNIT_FIELD_MOD_HASTE, 1.0f); - SetFloatValue(UNIT_FIELD_MOD_RANGED_HASTE, 1.0f); - SetFloatValue(UNIT_FIELD_MOD_HASTE_REGEN, 1.0f); - SetFloatValue(UNIT_FIELD_MOD_TIME_RATE, 1.0f); + SetModCastingSpeed(1.0f); + SetModSpellHaste(1.0f); + SetModHaste(1.0f); + SetModRangedHaste(1.0f); + SetModHasteRegen(1.0f); + SetModTimeRate(1.0f); // reset size before reapply auras SetObjectScale(1.0f); @@ -2587,61 +2586,61 @@ void Player::InitStatsForLevel(bool reapplyMods) //reset rating fields values for (uint16 index = 0; index < MAX_COMBAT_RATING; ++index) - SetUInt32Value(ACTIVE_PLAYER_FIELD_COMBAT_RATING + index, 0); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::CombatRatings, index), 0); - 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); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModHealingDonePos), 0); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModHealingPercent), 1.0f); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModHealingDonePercent), 1.0f); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModPeriodicHealingDonePercent), 1.0f); for (uint8 i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i) { - 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); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModDamageDoneNeg, i), 0); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModDamageDonePos, i), 0); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModDamageDonePercent, i), 1.0f); } - SetFloatValue(ACTIVE_PLAYER_FIELD_MOD_SPELL_POWER_PCT, 1.0f); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModSpellPowerPercent), 1.0f); //reset attack power, damage and attack speed fields for (uint8 i = BASE_ATTACK; i < MAX_ATTACK; ++i) - SetFloatValue(UNIT_FIELD_BASEATTACKTIME + i, float(BASE_ATTACK_TIME)); - - SetFloatValue(UNIT_FIELD_MINDAMAGE, 0.0f); - SetFloatValue(UNIT_FIELD_MAXDAMAGE, 0.0f); - SetFloatValue(UNIT_FIELD_MINOFFHANDDAMAGE, 0.0f); - SetFloatValue(UNIT_FIELD_MAXOFFHANDDAMAGE, 0.0f); - SetFloatValue(UNIT_FIELD_MINRANGEDDAMAGE, 0.0f); - SetFloatValue(UNIT_FIELD_MAXRANGEDDAMAGE, 0.0f); + SetBaseAttackTime(WeaponAttackType(i), BASE_ATTACK_TIME); + + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MinDamage), 0.0f); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MaxDamage), 0.0f); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MinOffHandDamage), 0.0f); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MaxOffHandDamage), 0.0f); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MinRangedDamage), 0.0f); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MaxRangedDamage), 0.0f); for (uint16 i = 0; i < 3; ++i) { - SetFloatValue(ACTIVE_PLAYER_FIELD_WEAPON_DMG_MULTIPLIERS + i, 1.0f); - SetFloatValue(ACTIVE_PLAYER_FIELD_WEAPON_ATK_SPEED_MULTIPLIERS + i, 1.0f); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::WeaponDmgMultipliers, i), 1.0f); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::WeaponAtkSpeedMultipliers, i), 1.0f); } - SetInt32Value(UNIT_FIELD_ATTACK_POWER, 0); - SetFloatValue(UNIT_FIELD_ATTACK_POWER_MULTIPLIER, 0.0f); - SetInt32Value(UNIT_FIELD_RANGED_ATTACK_POWER, 0); - SetFloatValue(UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER, 0.0f); + SetAttackPower(0); + SetAttackPowerMultiplier(0.0f); + SetRangedAttackPower(0); + SetRangedAttackPowerMultiplier(0.0f); // Base crit values (will be recalculated in UpdateAllStats() at loading and in _ApplyAllStatBonuses() at reset - 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); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::CritPercentage), 0.0f); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::OffhandCritPercentage), 0.0f); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::RangedCritPercentage), 0.0f); // Init spell schools (will be recalculated in UpdateAllStats() at loading and in _ApplyAllStatBonuses() at reset - SetFloatValue(ACTIVE_PLAYER_FIELD_SPELL_CRIT_PERCENTAGE1, 0.0f); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::SpellCritPercentage), 0.0f); - SetFloatValue(ACTIVE_PLAYER_FIELD_PARRY_PERCENTAGE, 0.0f); - SetFloatValue(ACTIVE_PLAYER_FIELD_BLOCK_PERCENTAGE, 0.0f); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ParryPercentage), 0.0f); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BlockPercentage), 0.0f); // Static 30% damage blocked - SetUInt32Value(ACTIVE_PLAYER_FIELD_SHIELD_BLOCK, 30); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ShieldBlock), 30); // Dodge percentage - SetFloatValue(ACTIVE_PLAYER_FIELD_DODGE_PERCENTAGE, 0.0f); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::DodgePercentage), 0.0f); // set armor (resistance 0) to original value (create_agility*2) - SetArmor(int32(m_createStats[STAT_AGILITY]*2), 0); + 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) @@ -2650,16 +2649,17 @@ void Player::InitStatsForLevel(bool reapplyMods) SetBonusResistanceMod(SpellSchools(i), 0); } - SetUInt32Value(ACTIVE_PLAYER_FIELD_MOD_TARGET_RESISTANCE, 0); - SetUInt32Value(ACTIVE_PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE, 0); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModTargetResistance), 0); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModTargetPhysicalResistance), 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); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerCostModifier, i), 0); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerCostMultiplier, i), 0.0f); } + // Reset no reagent cost field - for (uint8 i = 0; i < 4; ++i) - SetUInt32Value(ACTIVE_PLAYER_FIELD_NO_REAGENT_COST + i, 0); + SetNoRegentCostMask(flag128()); + // Init data for form but skip reapply item mods for form InitDataForForm(reapplyMods); @@ -2670,30 +2670,29 @@ void Player::InitStatsForLevel(bool reapplyMods) SetMaxHealth(0); // stamina bonus will applied later // cleanup mounted state (it will set correctly at aura loading if player saved at mount. - SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0); + SetMountDisplayId(0); // cleanup unit flags (will be re-applied if need at aura load). - RemoveFlag(UNIT_FIELD_FLAGS, + RemoveUnitFlag(UnitFlags( UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_REMOVE_CLIENT_CONTROL | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_LOOTING | UNIT_FLAG_PET_IN_COMBAT | UNIT_FLAG_SILENCED | UNIT_FLAG_PACIFIED | UNIT_FLAG_STUNNED | UNIT_FLAG_IN_COMBAT | UNIT_FLAG_DISARMED | UNIT_FLAG_CONFUSED | UNIT_FLAG_FLEEING | UNIT_FLAG_NOT_SELECTABLE | - UNIT_FLAG_SKINNABLE | UNIT_FLAG_MOUNT | UNIT_FLAG_TAXI_FLIGHT ); - SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); // must be set + UNIT_FLAG_SKINNABLE | UNIT_FLAG_MOUNT | UNIT_FLAG_TAXI_FLIGHT )); + AddUnitFlag(UNIT_FLAG_PVP_ATTACKABLE); // must be set - SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_REGENERATE_POWER);// must be set + AddUnitFlag2(UNIT_FLAG2_REGENERATE_POWER);// must be set // cleanup player flags (will be re-applied if need at aura load), to avoid have ghost flag without ghost aura, for example. - RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_AFK | PLAYER_FLAGS_DND | PLAYER_FLAGS_GM | PLAYER_FLAGS_GHOST | PLAYER_ALLOW_ONLY_ABILITY); + RemovePlayerFlag(PlayerFlags(PLAYER_FLAGS_AFK | PLAYER_FLAGS_DND | PLAYER_FLAGS_GM | PLAYER_FLAGS_GHOST | PLAYER_ALLOW_ONLY_ABILITY)); - RemoveStandFlags(UNIT_STAND_FLAGS_ALL); // one form stealth modified bytes - RemoveByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_FFA_PVP | UNIT_BYTE2_FLAG_SANCTUARY); + RemoveVisFlags(UNIT_VIS_FLAGS_ALL); // one form stealth modified bytes + RemovePvpFlag(UnitPVPStateFlags(UNIT_BYTE2_FLAG_FFA_PVP | UNIT_BYTE2_FLAG_SANCTUARY)); // restore if need some important flags - 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); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::LocalRegenFlags), 0); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::AuraVision), 0); if (reapplyMods) // reapply stats values only on .reset stats (level) command _ApplyAllStatBonuses(); @@ -3237,7 +3236,7 @@ bool Player::IsNeedCastPassiveSpellAtLearn(SpellInfo const* spellInfo) const bool Player::IsCurrentSpecMasterySpell(SpellInfo const* spellInfo) const { - if (ChrSpecializationEntry const* chrSpec = sChrSpecializationStore.LookupEntry(GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID))) + if (ChrSpecializationEntry const* chrSpec = sChrSpecializationStore.LookupEntry(GetPrimarySpecialization())) return spellInfo->Id == uint32(chrSpec->MasterySpellID[0]) || spellInfo->Id == uint32(chrSpec->MasterySpellID[1]); return false; @@ -3634,6 +3633,73 @@ void Player::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) c Unit::BuildCreateUpdateBlockForPlayer(data, target); } +UF::UpdateFieldFlag Player::GetUpdateFieldFlagsFor(Player const* target) const +{ + EnumClassFlag<UF::UpdateFieldFlag> flags = Unit::GetUpdateFieldFlagsFor(target); + if (IsInSameRaidWith(target)) + flags |= UF::UpdateFieldFlag::PartyMember; + + return flags; +} + +void Player::BuildValuesCreate(ByteBuffer* data, Player const* target) const +{ + UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); + std::size_t sizePos = data->wpos(); + *data << uint32(0); + *data << uint8(flags); + m_objectData->WriteCreate(*data, flags, this, target); + m_unitData->WriteCreate(*data, flags, this, target); + m_playerData->WriteCreate(*data, flags, this, target); + if (target == this) + m_activePlayerData->WriteCreate(*data, flags, this, target); + + data->put<uint32>(sizePos, data->wpos() - sizePos - 4); +} + +void Player::BuildValuesUpdate(ByteBuffer* data, Player const* target) const +{ + UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); + std::size_t sizePos = data->wpos(); + *data << uint32(0); + *data << uint32(m_values.GetChangedObjectTypeMask() & ~(uint32(target != this) << TYPEID_ACTIVE_PLAYER)); + + if (m_values.HasChanged(TYPEID_OBJECT)) + m_objectData->WriteUpdate(*data, flags, this, target); + + if (m_values.HasChanged(TYPEID_UNIT)) + m_unitData->WriteUpdate(*data, flags, this, target); + + if (m_values.HasChanged(TYPEID_PLAYER)) + m_playerData->WriteUpdate(*data, flags, this, target); + + if (target == this && m_values.HasChanged(TYPEID_ACTIVE_PLAYER)) + m_activePlayerData->WriteUpdate(*data, flags, this, target); + + data->put<uint32>(sizePos, data->wpos() - sizePos - 4); +} + +void Player::BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const +{ + UpdateMask<NUM_CLIENT_OBJECT_TYPES> valuesMask; + valuesMask.Set(TYPEID_UNIT); + valuesMask.Set(TYPEID_PLAYER); + + std::size_t sizePos = data->wpos(); + *data << uint32(0); + *data << uint32(valuesMask.GetBlock(0)); + + UF::UnitData::Mask mask; + m_unitData->AppendAllowedFieldsMaskForFlag(mask, flags); + m_unitData->WriteUpdate(*data, mask, flags, this, target); + + UF::PlayerData::Mask mask2; + m_playerData->AppendAllowedFieldsMaskForFlag(mask2, flags); + m_playerData->WriteUpdate(*data, mask2, flags, this, target); + + data->put<uint32>(sizePos, data->wpos() - sizePos - 4); +} + void Player::DestroyForPlayer(Player* target) const { Unit::DestroyForPlayer(target); @@ -3674,6 +3740,13 @@ void Player::DestroyForPlayer(Player* target) const } } +void Player::ClearUpdateMask(bool remove) +{ + m_values.ClearChangesMask(&Player::m_playerData); + m_values.ClearChangesMask(&Player::m_activePlayerData); + Unit::ClearUpdateMask(remove); +} + bool Player::HasSpell(uint32 spell) const { PlayerSpellMap::const_iterator itr = m_spells.find(spell); @@ -4196,7 +4269,7 @@ void Player::BuildPlayerRepop() SetRooted(false); // BG - remove insignia related - RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); + RemoveUnitFlag(UNIT_FLAG_SKINNABLE); int32 corpseReclaimDelay = CalculateCorpseReclaimDelay(); @@ -4209,7 +4282,7 @@ void Player::BuildPlayerRepop() StopMirrorTimers(); //disable timers(bars) // set and clear other - SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND); + SetAnimTier(UNIT_BYTE1_FLAG_ALWAYS_STAND, false); } void Player::ResurrectPlayer(float restore_percent, bool applySickness) @@ -4221,15 +4294,15 @@ void Player::ResurrectPlayer(float restore_percent, bool applySickness) // speed change, land walk // remove death flag + set aura - SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, 0); - RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_IS_OUT_OF_BOUNDS); + SetAnimTier(UNIT_BYTE1_FLAG_NONE, false); + RemovePlayerFlag(PLAYER_FLAGS_IS_OUT_OF_BOUNDS); // This must be called always even on Players with race != RACE_NIGHTELF in case of faction change RemoveAurasDueToSpell(20584); // RACE_NIGHTELF speed bonuses RemoveAurasDueToSpell(8326); // SPELL_AURA_GHOST if (GetSession()->IsARecruiter() || (GetSession()->GetRecruiterId() != 0)) - SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_REFER_A_FRIEND); + AddDynamicFlag(UNIT_DYNFLAG_REFER_A_FRIEND); setDeathState(ALIVE); @@ -4309,8 +4382,11 @@ void Player::KillPlayer() setDeathState(CORPSE); //SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_IN_PVP); - SetUInt32Value(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_NONE); - ApplyModFlag(ACTIVE_PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_RELEASE_TIMER, !sMapStore.LookupEntry(GetMapId())->Instanceable() && !HasAuraType(SPELL_AURA_PREVENT_RESURRECTION)); + SetDynamicFlags(UNIT_DYNFLAG_NONE); + if (!sMapStore.LookupEntry(GetMapId())->Instanceable() && !HasAuraType(SPELL_AURA_PREVENT_RESURRECTION)) + AddPlayerLocalFlag(PLAYER_LOCAL_FLAG_RELEASE_TIMER); + else + RemovePlayerLocalFlag(PLAYER_LOCAL_FLAG_RELEASE_TIMER); // 6 minutes until repop at graveyard m_deathTimer = 6 * MINUTE * IN_MILLISECONDS; @@ -4342,8 +4418,6 @@ Corpse* Player::CreateCorpse() // prevent the existence of 2 corpses for one player SpawnCorpseBones(); - uint32 _cfb1, _cfb2; - Corpse* corpse = new Corpse((m_ExtraFlags & PLAYER_EXTRA_PVP_DEATH) ? CORPSE_RESURRECTABLE_PVP : CORPSE_RESURRECTABLE_PVE); SetPvPDeath(false); @@ -4355,29 +4429,24 @@ Corpse* Player::CreateCorpse() _corpseLocation.WorldRelocate(*this); - uint8 skin = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID); - uint8 face = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID); - uint8 hairstyle = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID); - uint8 haircolor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID); - uint8 facialhair = GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE); - - _cfb1 = ((0x00) | (getRace() << 8) | (GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER) << 16) | (skin << 24)); - _cfb2 = ((face) | (hairstyle << 8) | (haircolor << 16) | (facialhair << 24)); - - corpse->SetUInt32Value(CORPSE_FIELD_BYTES_1, _cfb1); - corpse->SetUInt32Value(CORPSE_FIELD_BYTES_2, _cfb2); - uint32 flags = 0; - if (HasByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_PVP)) + if (*m_unitData->PvpFlags & UNIT_BYTE2_FLAG_PVP) flags |= CORPSE_FLAG_PVP; if (InBattleground() && !InArena()) flags |= CORPSE_FLAG_SKINNABLE; // to be able to remove insignia - if (HasByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_FFA_PVP)) + if (*m_unitData->PvpFlags & UNIT_BYTE2_FLAG_FFA_PVP) flags |= CORPSE_FLAG_FFA_PVP; - corpse->SetUInt32Value(CORPSE_FIELD_FLAGS, flags); - corpse->SetUInt32Value(CORPSE_FIELD_DISPLAY_ID, GetNativeDisplayId()); - corpse->SetUInt32Value(CORPSE_FIELD_FACTIONTEMPLATE, sChrRacesStore.AssertEntry(getRace())->FactionID); + corpse->SetRace(getRace()); + corpse->SetSex(m_playerData->NativeSex); + corpse->SetSkin(m_playerData->SkinID); + corpse->SetFace(m_playerData->FaceID); + corpse->SetHairStyle(m_playerData->HairStyleID); + corpse->SetHairColor(m_playerData->HairColorID); + corpse->SetFacialHairStyle(m_playerData->FacialHairStyleID); + corpse->SetFlags(flags); + corpse->SetDisplayId(GetNativeDisplayId()); + corpse->SetFactionTemplate(sChrRacesStore.AssertEntry(getRace())->FactionID); for (uint8 i = 0; i < EQUIPMENT_SLOT_END; i++) { @@ -4390,7 +4459,7 @@ Corpse* Player::CreateCorpse() else itemInventoryType = m_items[i]->GetTemplate()->GetInventoryType(); - corpse->SetUInt32Value(CORPSE_FIELD_ITEM + i, itemDisplayId | (itemInventoryType << 24)); + corpse->SetItem(i, itemDisplayId | (itemInventoryType << 24)); } } @@ -4446,7 +4515,7 @@ void Player::DurabilityLoss(Item* item, double percent) if (!item) return; - uint32 pMaxDurability = item ->GetUInt32Value(ITEM_FIELD_MAXDURABILITY); + uint32 pMaxDurability = item->m_itemData->MaxDurability; if (!pMaxDurability) return; @@ -4490,8 +4559,8 @@ void Player::DurabilityPointsLoss(Item* item, int32 points) if (HasAuraType(SPELL_AURA_PREVENT_DURABILITY_LOSS)) return; - int32 pMaxDurability = item->GetUInt32Value(ITEM_FIELD_MAXDURABILITY); - int32 pOldDurability = item->GetUInt32Value(ITEM_FIELD_DURABILITY); + int32 pMaxDurability = item->m_itemData->MaxDurability; + int32 pOldDurability = item->m_itemData->Durability; int32 pNewDurability = pOldDurability - points; if (pNewDurability < 0) @@ -4505,7 +4574,7 @@ void Player::DurabilityPointsLoss(Item* item, int32 points) if (pNewDurability == 0 && pOldDurability > 0 && item->IsEquipped()) _ApplyItemMods(item, item->GetSlot(), false); - item->SetUInt32Value(ITEM_FIELD_DURABILITY, pNewDurability); + item->SetDurability(pNewDurability); // modify item stats _after_ restore durability to pass _ApplyItemMods internal check if (pNewDurability > 0 && pOldDurability == 0 && item->IsEquipped()) @@ -4549,11 +4618,11 @@ uint32 Player::DurabilityRepair(uint16 pos, bool cost, float discountMod, bool g if (!item) return TotalCost; - uint32 maxDurability = item->GetUInt32Value(ITEM_FIELD_MAXDURABILITY); + uint32 maxDurability = item->m_itemData->MaxDurability; if (!maxDurability) return TotalCost; - uint32 curDurability = item->GetUInt32Value(ITEM_FIELD_DURABILITY); + uint32 curDurability = item->m_itemData->Durability; if (cost) { @@ -4621,7 +4690,7 @@ uint32 Player::DurabilityRepair(uint16 pos, bool cost, float discountMod, bool g } } - item->SetUInt32Value(ITEM_FIELD_DURABILITY, maxDurability); + item->SetDurability(maxDurability); item->SetState(ITEM_CHANGED, this); // reapply mods for total broken and repaired item if equipped @@ -4676,7 +4745,7 @@ void Player::RepopAtGraveyard() else if (GetPositionZ() < GetMap()->GetMinHeight(GetPositionX(), GetPositionY())) TeleportTo(m_homebindMapId, m_homebindX, m_homebindY, m_homebindZ, GetOrientation()); - RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_IS_OUT_OF_BOUNDS); + RemovePlayerFlag(PLAYER_FLAGS_IS_OUT_OF_BOUNDS); } bool Player::CanJoinConstantChannelInZone(ChatChannelsEntry const* channel, AreaTableEntry const* zone) const @@ -5005,7 +5074,7 @@ float Player::GetRatingMultiplier(CombatRating cr) const float Player::GetRatingBonusValue(CombatRating cr) const { - float baseResult = float(GetUInt32Value(ACTIVE_PLAYER_FIELD_COMBAT_RATING + cr)) * GetRatingMultiplier(cr); + float baseResult = float(m_activePlayerData->CombatRatings[cr]) * GetRatingMultiplier(cr); if (cr != CR_RESILIENCE_PLAYER_DAMAGE) return baseResult; return float(1.0f - pow(0.99f, baseResult)) * 100.0f; @@ -5017,9 +5086,9 @@ float Player::GetExpertiseDodgeOrParryReduction(WeaponAttackType attType) const switch (attType) { case BASE_ATTACK: - return baseExpertise + GetUInt32Value(ACTIVE_PLAYER_FIELD_EXPERTISE) / 4.0f; + return baseExpertise + m_activePlayerData->MainhandExpertise / 4.0f; case OFF_ATTACK: - return baseExpertise + GetUInt32Value(ACTIVE_PLAYER_FIELD_OFFHAND_EXPERTISE) / 4.0f; + return baseExpertise + m_activePlayerData->OffhandExpertise / 4.0f; default: break; } @@ -5050,8 +5119,8 @@ void Player::UpdateRating(CombatRating cr) if (amount < 0) amount = 0; - uint32 oldRating = GetUInt32Value(ACTIVE_PLAYER_FIELD_COMBAT_RATING + cr); - SetUInt32Value(ACTIVE_PLAYER_FIELD_COMBAT_RATING + cr, uint32(amount)); + uint32 oldRating = m_activePlayerData->CombatRatings[cr]; + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::CombatRatings, cr), amount); bool affectStats = CanModifyStats(); @@ -5340,11 +5409,8 @@ bool Player::UpdateSkillPro(uint16 skillId, int32 chance, uint32 step) 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(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset); - uint16 max = GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset); + uint16 value = m_activePlayerData->Skill->SkillRank[itr->second.pos]; + uint16 max = m_activePlayerData->Skill->SkillMaxRank[itr->second.pos]; if (!max || !value || value >= max) return false; @@ -5360,7 +5426,7 @@ bool Player::UpdateSkillPro(uint16 skillId, int32 chance, uint32 step) if (new_value > max) new_value = max; - SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, new_value); + SetSkillRank(itr->second.pos, new_value); if (itr->second.uState != SKILL_NEW) itr->second.uState = SKILL_CHANGED; @@ -5383,15 +5449,13 @@ bool Player::UpdateSkillPro(uint16 skillId, int32 chance, uint32 step) void Player::ModifySkillBonus(uint32 skillid, int32 val, bool talent) { SkillStatusMap::const_iterator itr = mSkillStatus.find(skillid); - if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED) + if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED || !m_activePlayerData->Skill->SkillRank[itr->second.pos]) return; - 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); - - SetUInt16Value(field, offset, bonus + val); + if (talent) + SetSkillPermBonus(itr->second.pos, m_activePlayerData->Skill->SkillPermBonus[itr->second.pos] + val); + else + SetSkillTempBonus(itr->second.pos, m_activePlayerData->Skill->SkillTempBonus[itr->second.pos] + val); } void Player::UpdateSkillsForLevel() @@ -5400,7 +5464,7 @@ void Player::UpdateSkillsForLevel() for (SkillStatusMap::iterator itr = mSkillStatus.begin(); itr != mSkillStatus.end(); ++itr) { - if (itr->second.uState == SKILL_DELETED) + if (itr->second.uState == SKILL_DELETED || !m_activePlayerData->Skill->SkillRank[itr->second.pos]) continue; uint32 pskill = itr->first; @@ -5408,20 +5472,17 @@ void Player::UpdateSkillsForLevel() if (!rcEntry) continue; - uint16 field = itr->second.pos / 2; - uint8 offset = itr->second.pos & 1; // itr->second.pos % 2 - if (GetSkillRangeType(rcEntry) == SKILL_RANGE_LEVEL) { if (!IsWeaponSkill(rcEntry->SkillID)) { - uint16 max = GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset); + uint16 max = m_activePlayerData->Skill->SkillMaxRank[itr->second.pos]; /// update only level dependent max skill values if (max != 1) { - 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); + SetSkillRank(itr->second.pos, maxSkill); + SetSkillMaxRank(itr->second.pos, maxSkill); if (itr->second.uState != SKILL_NEW) itr->second.uState = SKILL_CHANGED; } @@ -5429,7 +5490,7 @@ void Player::UpdateSkillsForLevel() } // Update level dependent skillline spells - LearnSkillRewardedSpells(rcEntry->SkillID, GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset)); + LearnSkillRewardedSpells(rcEntry->SkillID, m_activePlayerData->Skill->SkillRank[itr->second.pos]); } } @@ -5437,7 +5498,7 @@ void Player::UpdateSkillsToMaxSkillsForLevel() { for (SkillStatusMap::iterator itr = mSkillStatus.begin(); itr != mSkillStatus.end(); ++itr) { - if (itr->second.uState == SKILL_DELETED) + if (itr->second.uState == SKILL_DELETED || !m_activePlayerData->Skill->SkillRank[itr->second.pos]) continue; uint32 pskill = itr->first; @@ -5451,14 +5512,11 @@ void Player::UpdateSkillsToMaxSkillsForLevel() if (IsWeaponSkill(rcEntry->SkillID)) continue; - uint16 field = itr->second.pos / 2; - uint8 offset = itr->second.pos & 1; // itr->second.pos % 2 - - uint16 max = GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset); + uint16 max = m_activePlayerData->Skill->SkillMaxRank[itr->second.pos]; if (max > 1) { - SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset, max); + SetSkillRank(itr->second.pos, max); if (itr->second.uState != SKILL_NEW) itr->second.uState = SKILL_CHANGED; @@ -5466,6 +5524,22 @@ void Player::UpdateSkillsToMaxSkillsForLevel() } } +void Player::InitializeSkillFields() +{ + uint32 i = 0; + for (SkillLineEntry const* skillLine : sSkillLineStore) + { + if (SkillRaceClassInfoEntry const* rcEntry = sDB2Manager.GetSkillRaceClassInfo(skillLine->ID, getRace(), getClass())) + { + SetSkillLineId(i, skillLine->ID); + SetSkillStartingRank(i, 1); + mSkillStatus.insert(SkillStatusMap::value_type(skillLine->ID, SkillStatusData(i, SKILL_UNCHANGED))); + if (++i >= PLAYER_MAX_SKILLS) + break; + } + } +} + // This functions sets a skill line value (and adds if doesn't exist yet) // To "remove" a skill line, set it's values to zero void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal) @@ -5479,9 +5553,7 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal) //has skill if (itr != mSkillStatus.end() && itr->second.uState != SKILL_DELETED) { - uint16 field = itr->second.pos / 2; - uint8 offset = itr->second.pos & 1; // itr->second.pos % 2 - currVal = GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset); + currVal = m_activePlayerData->Skill->SkillRank[itr->second.pos]; if (newVal) { // if skill value is going down, update enchantments before setting the new value @@ -5489,10 +5561,10 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal) UpdateSkillEnchantments(id, currVal, newVal); // update step - SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_STEP_OFFSET + field, offset, step); + SetSkillStep(itr->second.pos, step); // update value - 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); + SetSkillRank(itr->second.pos, newVal); + SetSkillMaxRank(itr->second.pos, maxVal); if (itr->second.uState != SKILL_NEW) itr->second.uState = SKILL_CHANGED; @@ -5510,44 +5582,39 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal) //remove enchantments needing this skill UpdateSkillEnchantments(id, currVal, 0); // clear skill fields - 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); + SetSkillStep(itr->second.pos, 0); + SetSkillRank(itr->second.pos, 0); + SetSkillStartingRank(itr->second.pos, 1); + SetSkillMaxRank(itr->second.pos, 0); + SetSkillTempBonus(itr->second.pos, 0); + SetSkillPermBonus(itr->second.pos, 0); // mark as deleted or simply remove from map if not saved yet if (itr->second.uState != SKILL_NEW) itr->second.uState = SKILL_DELETED; - else - mSkillStatus.erase(itr); // remove all spells that related to this skill 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) + if (std::vector<SkillLineEntry const*> const* childSkillLines = sDB2Manager.GetSkillLinesForParentSkill(id)) + for (SkillLineEntry const* childSkillLine : *childSkillLines) SetSkill(childSkillLine->ID, 0, 0, 0); // Clear profession lines - 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); + if (m_activePlayerData->ProfessionSkillLine[0] == id) + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ProfessionSkillLine, 0), 0); + else if (m_activePlayerData->ProfessionSkillLine[1] == id) + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ProfessionSkillLine, 1), 0); } } - else if (newVal) //add + else //add { currVal = 0; for (uint32 i = 0; i < PLAYER_MAX_SKILLS; ++i) { - uint16 field = i / 2; - uint8 offset = i & 1; // i % 2 - - if (!GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_ID_OFFSET + field, offset)) + if (!m_activePlayerData->Skill->SkillLineID[i]) { SkillLineEntry const* skillEntry = sSkillLineStore.LookupEntry(id); if (!skillEntry) @@ -5557,35 +5624,48 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal) return; } - if (skillEntry->ParentSkillLineID && skillEntry->ParentTierIndex > 0) + if (skillEntry->ParentSkillLineID) { - if (SkillRaceClassInfoEntry const* rcEntry = sDB2Manager.GetSkillRaceClassInfo(skillEntry->ParentSkillLineID, getRace(), getClass())) + if (skillEntry->ParentTierIndex > 0) { - if (SkillTiersEntry const* tier = sObjectMgr->GetSkillTier(rcEntry->SkillTierID)) + if (SkillRaceClassInfoEntry const* rcEntry = sDB2Manager.GetSkillRaceClassInfo(skillEntry->ParentSkillLineID, getRace(), getClass())) { - uint16 skillval = GetPureSkillValue(skillEntry->ParentSkillLineID); - SetSkill(skillEntry->ParentSkillLineID, skillEntry->ParentTierIndex, std::max<uint16>(skillval, 1), tier->Value[skillEntry->ParentTierIndex - 1]); + 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]); + } } } + } + else + { + // also learn missing child skills at 0 value + if (std::vector<SkillLineEntry const*> const* childSkillLines = sDB2Manager.GetSkillLinesForParentSkill(id)) + for (SkillLineEntry const* childSkillLine : *childSkillLines) + if (!HasSkill(childSkillLine->ID)) + SetSkill(childSkillLine->ID, 0, 0, 0); if (skillEntry->CategoryID == SKILL_CATEGORY_PROFESSION) { int32 freeProfessionSlot = FindProfessionSlotFor(id); if (freeProfessionSlot != -1) - SetUInt32Value(ACTIVE_PLAYER_FIELD_PROFESSION_SKILL_LINE + freeProfessionSlot, id); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ProfessionSkillLine, freeProfessionSlot), id); } } - SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_ID_OFFSET + field, offset, id); + SetSkillLineId(i, 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); + SetSkillStep(i, step); + SetSkillRank(i, newVal); + SetSkillStartingRank(i, 1); + SetSkillMaxRank(i, maxVal); - UpdateSkillEnchantments(id, currVal, newVal); - UpdateCriteria(CRITERIA_TYPE_REACH_SKILL_LEVEL, id); - UpdateCriteria(CRITERIA_TYPE_LEARN_SKILL_LEVEL, id); + // apply skill bonuses + SetSkillTempBonus(i, 0); + SetSkillPermBonus(i, 0); + UpdateSkillEnchantments(id, currVal, newVal); // insert new entry or update if not deleted old entry yet if (itr != mSkillStatus.end()) { @@ -5595,27 +5675,30 @@ void Player::SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal) else mSkillStatus.insert(SkillStatusMap::value_type(id, SkillStatusData(i, SKILL_NEW))); - // apply skill bonuses - 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) - if ((*j)->GetMiscValue() == int32(id)) - (*j)->HandleEffect(this, AURA_EFFECT_HANDLE_SKILL, true); - AuraEffectList const& mModSkill2 = GetAuraEffectsByType(SPELL_AURA_MOD_SKILL_2); - for (AuraEffectList::const_iterator j = mModSkill2.begin(); j != mModSkill2.end(); ++j) - if ((*j)->GetMiscValue() == int32(id)) - (*j)->HandleEffect(this, AURA_EFFECT_HANDLE_SKILL, true); - - // permanent bonuses - AuraEffectList const& mModSkillTalent = GetAuraEffectsByType(SPELL_AURA_MOD_SKILL_TALENT); - for (AuraEffectList::const_iterator j = mModSkillTalent.begin(); j != mModSkillTalent.end(); ++j) - if ((*j)->GetMiscValue() == int32(id)) - (*j)->HandleEffect(this, AURA_EFFECT_HANDLE_SKILL, true); - - // Learn all spells for skill - LearnSkillRewardedSpells(id, newVal); + if (newVal) + { + UpdateCriteria(CRITERIA_TYPE_REACH_SKILL_LEVEL, id); + UpdateCriteria(CRITERIA_TYPE_LEARN_SKILL_LEVEL, id); + + // temporary bonuses + AuraEffectList const& mModSkill = GetAuraEffectsByType(SPELL_AURA_MOD_SKILL); + for (AuraEffectList::const_iterator j = mModSkill.begin(); j != mModSkill.end(); ++j) + if ((*j)->GetMiscValue() == int32(id)) + (*j)->HandleEffect(this, AURA_EFFECT_HANDLE_SKILL, true); + AuraEffectList const& mModSkill2 = GetAuraEffectsByType(SPELL_AURA_MOD_SKILL_2); + for (AuraEffectList::const_iterator j = mModSkill2.begin(); j != mModSkill2.end(); ++j) + if ((*j)->GetMiscValue() == int32(id)) + (*j)->HandleEffect(this, AURA_EFFECT_HANDLE_SKILL, true); + + // permanent bonuses + AuraEffectList const& mModSkillTalent = GetAuraEffectsByType(SPELL_AURA_MOD_SKILL_TALENT); + for (AuraEffectList::const_iterator j = mModSkillTalent.begin(); j != mModSkillTalent.end(); ++j) + if ((*j)->GetMiscValue() == int32(id)) + (*j)->HandleEffect(this, AURA_EFFECT_HANDLE_SKILL, true); + + // Learn all spells for skill + LearnSkillRewardedSpells(id, newVal); + } return; } } @@ -5628,7 +5711,7 @@ bool Player::HasSkill(uint32 skill) const return false; SkillStatusMap::const_iterator itr = mSkillStatus.find(skill); - return (itr != mSkillStatus.end() && itr->second.uState != SKILL_DELETED); + return (itr != mSkillStatus.end() && itr->second.uState != SKILL_DELETED && m_activePlayerData->Skill->SkillRank[itr->second.pos]); } uint16 Player::GetSkillStep(uint16 skill) const @@ -5637,10 +5720,10 @@ uint16 Player::GetSkillStep(uint16 skill) const return 0; SkillStatusMap::const_iterator itr = mSkillStatus.find(skill); - if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED) + if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED || !m_activePlayerData->Skill->SkillRank[itr->second.pos]) return 0; - return GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_STEP_OFFSET + itr->second.pos / 2, itr->second.pos & 1); + return m_activePlayerData->Skill->SkillStep[itr->second.pos]; } uint16 Player::GetSkillValue(uint32 skill) const @@ -5649,15 +5732,12 @@ uint16 Player::GetSkillValue(uint32 skill) const return 0; SkillStatusMap::const_iterator itr = mSkillStatus.find(skill); - if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED) + if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED || !m_activePlayerData->Skill->SkillRank[itr->second.pos]) return 0; - uint16 field = itr->second.pos / 2; - uint8 offset = itr->second.pos & 1; - - 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)); + int32 result = int32(m_activePlayerData->Skill->SkillRank[itr->second.pos]); + result += int32(m_activePlayerData->Skill->SkillTempBonus[itr->second.pos]); + result += int32(m_activePlayerData->Skill->SkillPermBonus[itr->second.pos]); return result < 0 ? 0 : result; } @@ -5667,15 +5747,12 @@ uint16 Player::GetMaxSkillValue(uint32 skill) const return 0; SkillStatusMap::const_iterator itr = mSkillStatus.find(skill); - if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED) + if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED || !m_activePlayerData->Skill->SkillRank[itr->second.pos]) return 0; - uint16 field = itr->second.pos / 2; - uint8 offset = itr->second.pos & 1; - - 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)); + int32 result = int32(m_activePlayerData->Skill->SkillMaxRank[itr->second.pos]); + result += int32(m_activePlayerData->Skill->SkillTempBonus[itr->second.pos]); + result += int32(m_activePlayerData->Skill->SkillPermBonus[itr->second.pos]); return result < 0 ? 0 : result; } @@ -5685,13 +5762,10 @@ uint16 Player::GetPureMaxSkillValue(uint32 skill) const return 0; SkillStatusMap::const_iterator itr = mSkillStatus.find(skill); - if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED) + if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED || !m_activePlayerData->Skill->SkillRank[itr->second.pos]) return 0; - uint16 field = itr->second.pos / 2; - uint8 offset = itr->second.pos & 1; - - return GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_MAX_RANK_OFFSET + field, offset); + return m_activePlayerData->Skill->SkillMaxRank[itr->second.pos]; } uint16 Player::GetBaseSkillValue(uint32 skill) const @@ -5700,14 +5774,11 @@ uint16 Player::GetBaseSkillValue(uint32 skill) const return 0; SkillStatusMap::const_iterator itr = mSkillStatus.find(skill); - if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED) + if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED || !m_activePlayerData->Skill->SkillRank[itr->second.pos]) return 0; - uint16 field = itr->second.pos / 2; - uint8 offset = itr->second.pos & 1; - - 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)); + int32 result = int32(m_activePlayerData->Skill->SkillRank[itr->second.pos]); + result += int32(m_activePlayerData->Skill->SkillPermBonus[itr->second.pos]); return result < 0 ? 0 : result; } @@ -5717,13 +5788,10 @@ uint16 Player::GetPureSkillValue(uint32 skill) const return 0; SkillStatusMap::const_iterator itr = mSkillStatus.find(skill); - if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED) + if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED || !m_activePlayerData->Skill->SkillRank[itr->second.pos]) return 0; - uint16 field = itr->second.pos / 2; - uint8 offset = itr->second.pos & 1; - - return GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_RANK_OFFSET + field, offset); + return m_activePlayerData->Skill->SkillRank[itr->second.pos]; } int16 Player::GetSkillPermBonusValue(uint32 skill) const @@ -5732,13 +5800,10 @@ int16 Player::GetSkillPermBonusValue(uint32 skill) const return 0; SkillStatusMap::const_iterator itr = mSkillStatus.find(skill); - if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED) + if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED || !m_activePlayerData->Skill->SkillRank[itr->second.pos]) return 0; - uint16 field = itr->second.pos / 2; - uint8 offset = itr->second.pos & 1; - - return GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_PERM_BONUS_OFFSET + field, offset); + return m_activePlayerData->Skill->SkillPermBonus[itr->second.pos]; } int16 Player::GetSkillTempBonusValue(uint32 skill) const @@ -5747,13 +5812,10 @@ int16 Player::GetSkillTempBonusValue(uint32 skill) const return 0; SkillStatusMap::const_iterator itr = mSkillStatus.find(skill); - if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED) + if (itr == mSkillStatus.end() || itr->second.uState == SKILL_DELETED || !m_activePlayerData->Skill->SkillRank[itr->second.pos]) return 0; - uint16 field = itr->second.pos / 2; - uint8 offset = itr->second.pos & 1; - - return GetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_TEMP_BONUS_OFFSET + field, offset); + return m_activePlayerData->Skill->SkillTempBonus[itr->second.pos]; } void Player::SendActionButtons(uint32 state) const @@ -5977,7 +6039,7 @@ void Player::CheckAreaExploreAndOutdoor() return; } - uint32 offset = areaEntry->AreaBit / 32; + uint32 offset = areaEntry->AreaBit / 64; if (offset >= PLAYER_EXPLORED_ZONES_SIZE) { @@ -5986,12 +6048,12 @@ void Player::CheckAreaExploreAndOutdoor() return; } - uint32 val = (uint32)(1 << (areaEntry->AreaBit % 32)); - uint32 currFields = GetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + offset); + uint64 val = UI64LIT(1) << (areaEntry->AreaBit % 64); + uint64 currFields = m_activePlayerData->ExploredZones[offset]; if (!(currFields & val)) { - SetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + offset, (uint32)(currFields | val)); + SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ExploredZones, offset), val); UpdateCriteria(CRITERIA_TYPE_EXPLORE_AREA); @@ -6266,15 +6328,15 @@ void Player::UpdateHonorFields() if (m_lastHonorUpdateTime >= yesterday) { // this is the first update today, reset today's contribution - 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); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::YesterdayHonorableKills), m_activePlayerData->TodayHonorableKills); } else { // no honor/kills yesterday or today, reset - SetUInt32Value(ACTIVE_PLAYER_FIELD_KILLS, 0); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::YesterdayHonorableKills), 0); } + + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TodayHonorableKills), 0); } m_lastHonorUpdateTime = now; @@ -6339,7 +6401,8 @@ bool Player::RewardHonor(Unit* victim, uint32 groupsize, int32 honor, bool pvpto // [15..28] Horde honor titles and player name // [29..38] Other title and player name // [39+] Nothing - uint32 victim_title = victim->GetUInt32Value(PLAYER_CHOSEN_TITLE); + // this is all wrong, should be going off PvpTitle, not PlayerTitle + uint32 victim_title = plrVictim->m_playerData->PlayerTitle; // Get Killer titles, CharTitlesEntry::bit_index // Ranks: // title[1..14] -> rank[5..18] @@ -6357,9 +6420,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(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS, 1, true); + ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TodayHonorableKills), 1, true); // and those in a lifetime - ApplyModUInt32Value(ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS, 1, true); + ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::LifetimeHonorableKills), 1, true); UpdateCriteria(CRITERIA_TYPE_EARN_HONORABLE_KILL); UpdateCriteria(CRITERIA_TYPE_HK_CLASS, victim->getClass()); UpdateCriteria(CRITERIA_TYPE_HK_RACE, victim->getRace()); @@ -6437,9 +6500,16 @@ bool Player::RewardHonor(Unit* victim, uint32 groupsize, int32 honor, bool pvpto return true; } +void Player::ResetHonorStats() +{ + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TodayHonorableKills), 0); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::YesterdayHonorableKills), 0); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::LifetimeHonorableKills), 0); +} + void Player::_InitHonorLevelOnLoadFromDB(uint32 honor, uint32 honorLevel) { - SetUInt32Value(PLAYER_FIELD_HONOR_LEVEL, honorLevel); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::HonorLevel), honorLevel); UpdateHonorNextLevel(); AddHonorXP(honor); @@ -6471,8 +6541,8 @@ void Player::RewardPlayerWithRewardPack(RewardPackEntry const* rewardPackEntry) void Player::AddHonorXP(uint32 xp) { - uint32 currentHonorXP = GetUInt32Value(ACTIVE_PLAYER_FIELD_HONOR); - uint32 nextHonorLevelXP = GetUInt32Value(ACTIVE_PLAYER_FIELD_HONOR_NEXT_LEVEL); + uint32 currentHonorXP = m_activePlayerData->Honor; + uint32 nextHonorLevelXP = m_activePlayerData->HonorNextLevel; uint32 newHonorXP = currentHonorXP + xp; uint32 honorLevel = GetHonorLevel(); @@ -6487,10 +6557,10 @@ void Player::AddHonorXP(uint32 xp) SetHonorLevel(honorLevel + 1); honorLevel = GetHonorLevel(); - nextHonorLevelXP = GetUInt32Value(ACTIVE_PLAYER_FIELD_HONOR_NEXT_LEVEL); + nextHonorLevelXP = m_activePlayerData->HonorNextLevel; } - SetUInt32Value(ACTIVE_PLAYER_FIELD_HONOR, IsMaxHonorLevel() ? 0 : newHonorXP); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Honor), IsMaxHonorLevel() ? 0 : newHonorXP); } void Player::SetHonorLevel(uint8 level) @@ -6499,7 +6569,7 @@ void Player::SetHonorLevel(uint8 level) if (level == oldHonorLevel) return; - SetUInt32Value(PLAYER_FIELD_HONOR_LEVEL, level); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::HonorLevel), level); UpdateHonorNextLevel(); UpdateCriteria(CRITERIA_TYPE_HONOR_LEVEL_REACHED); @@ -6510,7 +6580,7 @@ void Player::UpdateHonorNextLevel() // 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); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::HonorNextLevel), 8800); } void Player::_LoadCurrency(PreparedQueryResult result) @@ -6852,11 +6922,15 @@ uint32 Player::GetCurrencyTotalCap(CurrencyTypesEntry const* currency) const void Player::SetInGuild(ObjectGuid::LowType guildId) { if (guildId) - SetGuidValue(UNIT_FIELD_GUILD_GUID, ObjectGuid::Create<HighGuid::Guild>(guildId)); + { + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::GuildGUID), ObjectGuid::Create<HighGuid::Guild>(guildId)); + AddPlayerFlag(PLAYER_FLAGS_GUILD_LEVEL_ENABLED); + } else - SetGuidValue(UNIT_FIELD_GUILD_GUID, ObjectGuid::Empty); - - ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_GUILD_LEVEL_ENABLED, guildId != 0); + { + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::GuildGUID), ObjectGuid::Empty); + RemovePlayerFlag(PLAYER_FLAGS_GUILD_LEVEL_ENABLED); + } } ObjectGuid::LowType Player::GetGuildIdFromDB(ObjectGuid guid) @@ -6879,9 +6953,8 @@ uint8 Player::GetRankFromDB(ObjectGuid guid) return 0; } -void Player::SetArenaTeamInfoField(uint8 slot, ArenaTeamInfoType type, uint32 value) +void Player::SetArenaTeamInfoField(uint8 /*slot*/, ArenaTeamInfoType /*type*/, uint32 /*value*/) { - SetUInt32Value(ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO + (slot * ARENA_TEAM_END) + type, value); } void Player::SetInArenaTeam(uint32 ArenaTeamId, uint8 slot, uint8 type) @@ -6987,13 +7060,13 @@ void Player::UpdateArea(uint32 newArea) pvpInfo.IsInNoPvPArea = false; if (area && area->IsSanctuary()) // in sanctuary { - SetByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_SANCTUARY); + AddPvpFlag(UNIT_BYTE2_FLAG_SANCTUARY); pvpInfo.IsInNoPvPArea = true; if (!duel) CombatStopWithPets(); } else - RemoveByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_SANCTUARY); + RemovePvpFlag(UNIT_BYTE2_FLAG_SANCTUARY); uint32 const areaRestFlag = (GetTeam() == ALLIANCE) ? AREA_FLAG_REST_ZONE_ALLIANCE : AREA_FLAG_REST_ZONE_HORDE; if (area && area->Flags[0] & areaRestFlag) @@ -7093,7 +7166,7 @@ void Player::CheckDuelDistance(time_t currTime) if (!duel) return; - ObjectGuid duelFlagGUID = GetGuidValue(PLAYER_DUEL_ARBITER); + ObjectGuid duelFlagGUID = m_playerData->DuelArbiter; GameObject* obj = GetMap()->GetGameObject(duelFlagGUID); if (!obj) return; @@ -7206,7 +7279,7 @@ void Player::DuelComplete(DuelCompleteType type) duel->opponent->CastSpell(duel->opponent, 52852, true); //Remove Duel Flag object - GameObject* obj = GetMap()->GetGameObject(GetGuidValue(PLAYER_DUEL_ARBITER)); + GameObject* obj = GetMap()->GetGameObject(m_playerData->DuelArbiter); if (obj) duel->initiator->RemoveGameObject(obj, true); @@ -7236,10 +7309,10 @@ void Player::DuelComplete(DuelCompleteType type) duel->opponent->ClearComboPoints(); //cleanups - SetGuidValue(PLAYER_DUEL_ARBITER, ObjectGuid::Empty); - SetUInt32Value(PLAYER_DUEL_TEAM, 0); - duel->opponent->SetGuidValue(PLAYER_DUEL_ARBITER, ObjectGuid::Empty); - duel->opponent->SetUInt32Value(PLAYER_DUEL_TEAM, 0); + SetDuelArbiter(ObjectGuid::Empty); + SetDuelTeam(0); + duel->opponent->SetDuelArbiter(ObjectGuid::Empty); + duel->opponent->SetDuelTeam(0); delete duel->opponent->duel; duel->opponent->duel = nullptr; @@ -7695,7 +7768,7 @@ void Player::ApplyItemEquipSpell(Item* item, bool apply, bool formChange /*= fal && sDB2Manager.GetHeirloomByItemId(item->GetEntry())) continue; - if (effectData->ChrSpecializationID && effectData->ChrSpecializationID != GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID)) + if (effectData->ChrSpecializationID && effectData->ChrSpecializationID != GetPrimarySpecialization()) continue; ApplyEquipSpell(spellproto, item, apply, formChange); @@ -7766,7 +7839,7 @@ void Player::UpdateItemSetAuras(bool formChange /*= false*/) { SpellInfo const* spellInfo = sSpellMgr->AssertSpellInfo(itemSetSpell->SpellID); - if (itemSetSpell->ChrSpecID && itemSetSpell->ChrSpecID != GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID)) + if (itemSetSpell->ChrSpecID && itemSetSpell->ChrSpecID != GetPrimarySpecialization()) ApplyEquipSpell(spellInfo, nullptr, false, false); // item set aura is not for current spec else { @@ -7779,16 +7852,16 @@ void Player::UpdateItemSetAuras(bool formChange /*= false*/) void Player::ApplyArtifactPowers(Item* item, bool apply) { - for (ItemDynamicFieldArtifactPowers const& artifactPower : item->GetArtifactPowers()) + for (UF::ArtifactPower const& artifactPower : item->m_itemData->ArtifactPowers) { uint8 rank = artifactPower.CurrentRankWithBonus; if (!rank) continue; - if (sArtifactPowerStore.AssertEntry(artifactPower.ArtifactPowerId)->Flags & ARTIFACT_POWER_FLAG_SCALES_WITH_NUM_POWERS) + if (sArtifactPowerStore.AssertEntry(artifactPower.ArtifactPowerID)->Flags & ARTIFACT_POWER_FLAG_SCALES_WITH_NUM_POWERS) rank = 1; - ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower.ArtifactPowerId, rank - 1); + ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower.ArtifactPowerID, rank - 1); if (!artifactPowerRank) continue; @@ -8255,7 +8328,7 @@ void Player::RemovedInsignia(Player* looterPlr) return; // Now we must make bones lootable, and send player loot - bones->SetFlag(CORPSE_FIELD_DYNAMIC_FLAGS, CORPSE_DYNFLAG_LOOTABLE); + bones->AddCorpseDynamicFlag(CORPSE_DYNFLAG_LOOTABLE); // We store the level of our player in the gold field // We retrieve this information at Player::SendLoot() @@ -8615,7 +8688,7 @@ void Player::SendLoot(ObjectGuid guid, LootType loot_type, bool aeLooting/* = fa SendLootError(loot->GetGUID(), guid, LOOT_ERROR_DIDNT_KILL); if (loot_type == LOOT_CORPSE && !guid.IsItem()) - SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_LOOTING); + AddUnitFlag(UNIT_FLAG_LOOTING); } void Player::SendLootError(ObjectGuid const& lootObj, ObjectGuid const& owner, LootError error) const @@ -9924,7 +9997,7 @@ void Player::SetInventorySlotCount(uint8 slots) } } - SetByteValue(ACTIVE_PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_NUM_BACKPACK_SLOTS, slots); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::NumBackpackSlots), slots); } bool Player::HasItemCount(uint32 item, uint32 count, bool inBankAlso) const @@ -10239,10 +10312,10 @@ InventoryResult Player::CanStoreItem_InSpecificSlot(uint8 bag, uint8 slot, ItemP if (pSrcItem->IsNotEmptyBag() && !IsBagPos(uint16(bag) << 8 | slot)) return EQUIP_ERR_DESTROY_NONEMPTY_BAG; - if (pSrcItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_CHILD) && !IsEquipmentPos(bag, slot) && !IsChildEquipmentPos(bag, slot)) + if (pSrcItem->HasItemFlag(ITEM_FIELD_FLAG_CHILD) && !IsEquipmentPos(bag, slot) && !IsChildEquipmentPos(bag, slot)) return EQUIP_ERR_WRONG_BAG_TYPE_3; - if (!pSrcItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_CHILD) && IsChildEquipmentPos(bag, slot)) + if (!pSrcItem->HasItemFlag(ITEM_FIELD_FLAG_CHILD) && IsChildEquipmentPos(bag, slot)) return EQUIP_ERR_WRONG_BAG_TYPE_3; } @@ -10315,7 +10388,7 @@ InventoryResult Player::CanStoreItem_InBag(uint8 bag, ItemPosCountVec &dest, Ite if (pSrcItem->IsNotEmptyBag()) return EQUIP_ERR_DESTROY_NONEMPTY_BAG; - if (pSrcItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_CHILD)) + if (pSrcItem->HasItemFlag(ITEM_FIELD_FLAG_CHILD)) return EQUIP_ERR_WRONG_BAG_TYPE_3; } @@ -10584,7 +10657,7 @@ InventoryResult Player::CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &des // search free slot in bag for place to if (bag == INVENTORY_SLOT_BAG_0) // inventory { - if (pItem && pItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_CHILD)) + if (pItem && pItem->HasItemFlag(ITEM_FIELD_FLAG_CHILD)) { res = CanStoreItem_InInventorySlots(CHILD_EQUIPMENT_SLOT_START, CHILD_EQUIPMENT_SLOT_END, dest, pProto, count, false, pItem, bag, slot); if (res != EQUIP_ERR_OK) @@ -10604,7 +10677,7 @@ InventoryResult Player::CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &des return EQUIP_ERR_ITEM_MAX_COUNT; } } - else if (pProto->IsCraftingReagent() && HasFlag(PLAYER_FLAGS_EX, PLAYER_FLAGS_EX_REAGENT_BANK_UNLOCKED)) + else if (pProto->IsCraftingReagent() && HasPlayerFlagEx(PLAYER_FLAGS_EX_REAGENT_BANK_UNLOCKED)) { res = CanStoreItem_InInventorySlots(REAGENT_SLOT_START, REAGENT_SLOT_END, dest, pProto, count, false, pItem, bag, slot); if (res != EQUIP_ERR_OK) @@ -10789,7 +10862,7 @@ InventoryResult Player::CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &des if (pItem && pItem->IsNotEmptyBag()) return EQUIP_ERR_BAG_IN_BAG; - if (pItem && pItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_CHILD)) + if (pItem && pItem->HasItemFlag(ITEM_FIELD_FLAG_CHILD)) { res = CanStoreItem_InInventorySlots(CHILD_EQUIPMENT_SLOT_START, CHILD_EQUIPMENT_SLOT_END, dest, pProto, count, false, pItem, bag, slot); if (res != EQUIP_ERR_OK) @@ -10809,7 +10882,7 @@ InventoryResult Player::CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &des return EQUIP_ERR_ITEM_MAX_COUNT; } } - else if (pProto->IsCraftingReagent() && HasFlag(PLAYER_FLAGS_EX, PLAYER_FLAGS_EX_REAGENT_BANK_UNLOCKED)) + else if (pProto->IsCraftingReagent() && HasPlayerFlagEx(PLAYER_FLAGS_EX_REAGENT_BANK_UNLOCKED)) { res = CanStoreItem_InInventorySlots(REAGENT_SLOT_START, REAGENT_SLOT_END, dest, pProto, count, false, pItem, bag, slot); if (res != EQUIP_ERR_OK) @@ -11614,7 +11687,7 @@ InventoryResult Player::CanUseItem(ItemTemplate const* proto) const return EQUIP_ERR_INTERNAL_BAG_ERROR; if (ArtifactEntry const* artifact = sArtifactStore.LookupEntry(proto->GetArtifactID())) - if (artifact->ChrSpecializationID != GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID)) + if (artifact->ChrSpecializationID != GetPrimarySpecialization()) return EQUIP_ERR_CANT_USE_ITEM; return EQUIP_ERR_OK; @@ -11703,14 +11776,13 @@ Item* Player::StoreNewItem(ItemPosCountVec const& pos, uint32 itemId, bool updat UpdateCriteria(CRITERIA_TYPE_RECEIVE_EPIC_ITEM, itemId, count); UpdateCriteria(CRITERIA_TYPE_OWN_ITEM, itemId, 1); - item->SetFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_NEW_ITEM); + item->AddItemFlag(ITEM_FIELD_FLAG_NEW_ITEM); if (uint32 upgradeID = sDB2Manager.GetRulesetItemUpgrade(itemId)) item->SetModifier(ITEM_MODIFIER_UPGRADE_ID, upgradeID); - item->SetUInt32Value(ITEM_FIELD_CONTEXT, context); - for (int32 bonusListID : bonusListIDs) - item->AddBonuses(bonusListID); + item->SetContext(context); + item->SetBonuses(bonusListIDs); item = StoreItem(pos, item, update); @@ -11720,7 +11792,7 @@ Item* Player::StoreNewItem(ItemPosCountVec const& pos, uint32 itemId, bool updat if (allowedLooters.size() > 1 && item->GetTemplate()->GetMaxStackSize() == 1 && item->IsSoulBound()) { item->SetSoulboundTradeable(allowedLooters); - item->SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, GetTotalPlayedTime()); + item->SetCreatePlayedTime(GetTotalPlayedTime()); AddTradeableItem(item); // save data @@ -11747,8 +11819,8 @@ Item* Player::StoreNewItem(ItemPosCountVec const& pos, uint32 itemId, bool updat CanStoreItem_InInventorySlots(CHILD_EQUIPMENT_SLOT_START, CHILD_EQUIPMENT_SLOT_END, childDest, childTemplate, count, false, nullptr, NULL_BAG, NULL_SLOT); if (Item* childItem = StoreNewItem(childDest, childTemplate->GetId(), update, {}, {}, context, {}, addToCollection)) { - childItem->SetGuidValue(ITEM_FIELD_CREATOR, item->GetGUID()); - childItem->SetFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_CHILD); + childItem->SetCreator(item->GetGUID()); + childItem->AddItemFlag(ITEM_FIELD_FLAG_CHILD); item->SetChildItem(childItem->GetGUID()); } } @@ -11818,8 +11890,8 @@ Item* Player::_StoreItem(uint16 pos, Item* pItem, uint32 count, bool clone, bool if (!pBag) { m_items[slot] = pItem; - SetGuidValue(ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), pItem->GetGUID()); - pItem->SetGuidValue(ITEM_FIELD_CONTAINED, GetGUID()); + SetInvSlot(slot, pItem->GetGUID()); + pItem->SetContainedIn(GetGUID()); pItem->SetOwnerGUID(GetGUID()); pItem->SetSlot(slot); @@ -12135,16 +12207,18 @@ void Player::QuickEquipItem(uint16 pos, Item* pItem) void Player::SetVisibleItemSlot(uint8 slot, Item* pItem) { + auto itemField = m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::VisibleItems, slot); if (pItem) { - SetUInt32Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENTRY_OFFSET + (slot * 2), pItem->GetVisibleEntry(this)); - SetUInt16Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENCHANTMENT_OFFSET + (slot * 2), 0, pItem->GetVisibleAppearanceModId(this)); - SetUInt16Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENCHANTMENT_OFFSET + (slot * 2), 1, pItem->GetVisibleItemVisual(this)); + SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemID), pItem->GetVisibleEntry(this)); + SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemAppearanceModID), pItem->GetVisibleAppearanceModId(this)); + SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemVisual), pItem->GetVisibleItemVisual(this)); } else { - SetUInt32Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENTRY_OFFSET + (slot * 2), 0); - SetUInt32Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENCHANTMENT_OFFSET + (slot * 2), 0); + SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemID), 0); + SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemAppearanceModID), 0); + SetUpdateFieldValue(itemField.ModifyValue(&UF::VisibleItem::ItemVisual), 0); } } @@ -12165,8 +12239,8 @@ void Player::VisualizeItem(uint8 slot, Item* pItem) GetName().c_str(), GetGUID().ToString().c_str(), slot, pItem->GetEntry()); m_items[slot] = pItem; - SetGuidValue(ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), pItem->GetGUID()); - pItem->SetGuidValue(ITEM_FIELD_CONTAINED, GetGUID()); + SetInvSlot(slot, pItem->GetGUID()); + pItem->SetContainedIn(GetGUID()); pItem->SetOwnerGUID(GetGUID()); pItem->SetSlot(slot); pItem->SetContainer(nullptr); @@ -12216,20 +12290,7 @@ void Player::RemoveItem(uint8 bag, uint8 slot, bool update) { // remove held enchantments, update expertise if (slot == EQUIPMENT_SLOT_MAINHAND) - { - if (pItem->GetItemSuffixFactor()) - { - pItem->ClearEnchantment(PROP_ENCHANTMENT_SLOT_3); - pItem->ClearEnchantment(PROP_ENCHANTMENT_SLOT_4); - } - else - { - pItem->ClearEnchantment(PROP_ENCHANTMENT_SLOT_0); - pItem->ClearEnchantment(PROP_ENCHANTMENT_SLOT_1); - } - UpdateExpertise(BASE_ATTACK); - } else if (slot == EQUIPMENT_SLOT_OFFHAND) UpdateExpertise(OFF_ATTACK); // update armor penetration - passive auras may need it @@ -12245,7 +12306,7 @@ void Player::RemoveItem(uint8 bag, uint8 slot, bool update) } m_items[slot] = nullptr; - SetGuidValue(ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), ObjectGuid::Empty); + SetInvSlot(slot, ObjectGuid::Empty); if (slot < EQUIPMENT_SLOT_END) { @@ -12257,7 +12318,7 @@ void Player::RemoveItem(uint8 bag, uint8 slot, bool update) else if (Bag* pBag = GetBagByPos(bag)) pBag->RemoveItem(slot, update); - pItem->SetGuidValue(ITEM_FIELD_CONTAINED, ObjectGuid::Empty); + pItem->SetContainedIn(ObjectGuid::Empty); // pItem->SetUInt64Value(ITEM_FIELD_OWNER, 0); not clear owner at remove (it will be set at store). This used in mail and auction code pItem->SetSlot(NULL_SLOT); if (IsInWorld() && update) @@ -12306,7 +12367,7 @@ void Player::MoveItemToInventory(ItemPosCountVec const& dest, Item* pItem, bool // in case trade we already have item in other player inventory pLastItem->SetState(in_characterInventoryDB ? ITEM_CHANGED : ITEM_NEW, this); - if (pLastItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_BOP_TRADEABLE)) + if (pLastItem->HasItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE)) AddTradeableItem(pLastItem); } } @@ -12324,7 +12385,7 @@ void Player::DestroyItem(uint8 bag, uint8 slot, bool update) for (uint8 i = 0; i < MAX_BAG_SIZE; ++i) DestroyItem(slot, i, update); - if (pItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_WRAPPED)) + if (pItem->HasItemFlag(ITEM_FIELD_FLAG_WRAPPED)) { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_GIFT); @@ -12347,7 +12408,7 @@ void Player::DestroyItem(uint8 bag, uint8 slot, bool update) if (bag == INVENTORY_SLOT_BAG_0) { - SetGuidValue(ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), ObjectGuid::Empty); + SetInvSlot(slot, ObjectGuid::Empty); // equipment and equipped bags can have applied bonuses if (slot < INVENTORY_SLOT_BAG_END) @@ -12400,7 +12461,7 @@ void Player::DestroyItem(uint8 bag, uint8 slot, bool update) } //pItem->SetOwnerGUID(0); - pItem->SetGuidValue(ITEM_FIELD_CONTAINED, ObjectGuid::Empty); + pItem->SetContainedIn(ObjectGuid::Empty); pItem->SetSlot(NULL_SLOT); pItem->SetState(ITEM_REMOVED, this); } @@ -12936,9 +12997,9 @@ void Player::SwapItem(uint16 src, uint16 dst) if (!pSrcItem) return; - if (pSrcItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_CHILD)) + if (pSrcItem->HasItemFlag(ITEM_FIELD_FLAG_CHILD)) { - if (Item* parentItem = GetItemByGuid(pSrcItem->GetGuidValue(ITEM_FIELD_CREATOR))) + if (Item* parentItem = GetItemByGuid(pSrcItem->m_itemData->Creator)) { if (IsEquipmentPos(src)) { @@ -12949,9 +13010,9 @@ void Player::SwapItem(uint16 src, uint16 dst) } } } - else if (pDstItem && pDstItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_CHILD)) + else if (pDstItem && pDstItem->HasItemFlag(ITEM_FIELD_FLAG_CHILD)) { - if (Item* parentItem = GetItemByGuid(pDstItem->GetGuidValue(ITEM_FIELD_CREATOR))) + if (Item* parentItem = GetItemByGuid(pDstItem->m_itemData->Creator)) { if (IsEquipmentPos(dst)) { @@ -13316,10 +13377,10 @@ void Player::AddItemToBuyBackSlot(Item* pItem) // if current back slot non-empty search oldest or free if (m_items[slot]) { - uint32 oldest_time = GetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP); + uint32 oldest_time = m_activePlayerData->BuybackTimestamp[0]; uint32 oldest_slot = BUYBACK_SLOT_START; - for (uint32 i = BUYBACK_SLOT_START+1; i < BUYBACK_SLOT_END; ++i) + for (uint32 i = BUYBACK_SLOT_START + 1; i < BUYBACK_SLOT_END; ++i) { // found empty if (!m_items[i]) @@ -13328,7 +13389,7 @@ void Player::AddItemToBuyBackSlot(Item* pItem) break; } - uint32 i_time = GetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP + i - BUYBACK_SLOT_START); + uint32 i_time = m_activePlayerData->BuybackTimestamp[i - BUYBACK_SLOT_START]; if (oldest_time > i_time) { @@ -13350,13 +13411,13 @@ void Player::AddItemToBuyBackSlot(Item* pItem) uint32 etime = uint32(base - m_logintime + (30 * 3600)); uint32 eslot = slot - BUYBACK_SLOT_START; - SetGuidValue(ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), pItem->GetGUID()); + SetInvSlot(slot, pItem->GetGUID()); if (ItemTemplate const* proto = pItem->GetTemplate()) - SetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_PRICE + eslot, proto->GetSellPrice() * pItem->GetCount()); + SetBuybackPrice(eslot, proto->GetSellPrice() * pItem->GetCount()); else - SetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_PRICE + eslot, 0); + SetBuybackPrice(eslot, 0); - SetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_TIMESTAMP + eslot, (uint32)etime); + SetBuybackTimestamp(eslot, (uint32)etime); // move to next (for non filled list is move most optimized choice) if (m_currentBuybackSlot < BUYBACK_SLOT_END - 1) @@ -13390,9 +13451,9 @@ void Player::RemoveItemFromBuyBackSlot(uint32 slot, bool del) m_items[slot] = nullptr; uint32 eslot = slot - BUYBACK_SLOT_START; - 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); + SetInvSlot(slot, ObjectGuid::Empty); + SetBuybackPrice(eslot, 0); + SetBuybackTimestamp(eslot, 0); // if current backslot is filled set to now free slot if (m_items[m_currentBuybackSlot]) @@ -13467,7 +13528,7 @@ void Player::SendSellError(SellResult msg, Creature* creature, ObjectGuid guid) bool Player::IsUseEquipedWeapon(bool mainhand) const { // disarm applied only to mainhand weapon - return !IsInFeralForm() && (!mainhand || !HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISARMED)); + return !IsInFeralForm() && (!mainhand || !HasUnitFlag(UNIT_FLAG_DISARMED)); } void Player::SetCanTitanGrip(bool value, uint32 penaltySpellId /*= 0*/) @@ -13751,8 +13812,8 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool } // Cogwheel gems dont have requirement data set in SpellItemEnchantment.dbc, but they do have it in Item-sparse.db2 - if (ItemDynamicFieldGems const* gem = item->GetGem(uint16(slot - SOCK_ENCHANTMENT_SLOT))) - if (ItemTemplate const* gemTemplate = sObjectMgr->GetItemTemplate(gem->ItemId)) + if (UF::SocketedGem const* gem = item->GetGem(uint16(slot - SOCK_ENCHANTMENT_SLOT))) + if (ItemTemplate const* gemTemplate = sObjectMgr->GetItemTemplate(gem->ItemID)) if (gemTemplate->GetRequiredSkill() && GetSkillValue(gemTemplate->GetRequiredSkill()) < gemTemplate->GetRequiredSkillRank()) return; } @@ -13787,31 +13848,7 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool if (enchant_spell_id) { if (apply) - { - int32 basepoints = 0; - // Random Property Exist - try found basepoints for spell (basepoints depends from item suffix factor) - if (item->GetItemRandomPropertyId() < 0) - { - ItemRandomSuffixEntry const* item_rand = sItemRandomSuffixStore.LookupEntry(abs(item->GetItemRandomPropertyId())); - if (item_rand) - { - // Search enchant_amount - for (int k = 0; k < MAX_ITEM_RANDOM_PROPERTIES; ++k) - { - if (item_rand->Enchantment[k] == enchant_id) - { - basepoints = int32((item_rand->AllocationPct[k] * item->GetItemSuffixFactor()) / 10000); - break; - } - } - } - } - // Cast custom spell vs all equal basepoints got from enchant_amount - if (basepoints) - CastCustomSpell(this, enchant_spell_id, &basepoints, &basepoints, &basepoints, true, item); - else - CastSpell(this, enchant_spell_id, true, item); - } + CastSpell(this, enchant_spell_id, true, item); else RemoveAurasDueToItemSpell(enchant_spell_id, item->GetGUID()); } @@ -13820,7 +13857,7 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool if (pEnchant->ScalingClass) { int32 scalingClass = pEnchant->ScalingClass; - if ((GetUInt32Value(UNIT_FIELD_MIN_ITEM_LEVEL) || GetUInt32Value(UNIT_FIELD_MAXITEMLEVEL)) && pEnchant->ScalingClassRestricted) + if ((*m_unitData->MinItemLevel || *m_unitData->MaxItemLevel) && pEnchant->ScalingClassRestricted) scalingClass = pEnchant->ScalingClassRestricted; uint8 minLevel = pEnchant->Flags & 0x20 ? 1 : 60; @@ -13835,23 +13872,7 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool if (GtSpellScalingEntry const* spellScaling = sSpellScalingGameTable.GetRow(scalingLevel)) enchant_amount = uint32(pEnchant->EffectScalingPoints[s] * GetSpellScalingColumnForClass(spellScaling, scalingClass)); } - - if (!enchant_amount) - { - ItemRandomSuffixEntry const* item_rand = sItemRandomSuffixStore.LookupEntry(abs(item->GetItemRandomPropertyId())); - if (item_rand) - { - for (int k = 0; k < MAX_ITEM_RANDOM_PROPERTIES; ++k) - { - if (item_rand->Enchantment[k] == enchant_id) - { - enchant_amount = uint32((item_rand->AllocationPct[k] * item->GetItemSuffixFactor()) / 10000); - break; - } - } - } - } - + enchant_amount = std::max(enchant_amount, 1u); HandleStatModifier(UnitMods(UNIT_MOD_RESISTANCE_START + enchant_spell_id), TOTAL_VALUE, float(enchant_amount), apply); break; case ITEM_ENCHANTMENT_TYPE_STAT: @@ -13859,7 +13880,7 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool if (pEnchant->ScalingClass) { int32 scalingClass = pEnchant->ScalingClass; - if ((GetUInt32Value(UNIT_FIELD_MIN_ITEM_LEVEL) || GetUInt32Value(UNIT_FIELD_MAXITEMLEVEL)) && pEnchant->ScalingClassRestricted) + if ((*m_unitData->MinItemLevel || *m_unitData->MaxItemLevel) && pEnchant->ScalingClassRestricted) scalingClass = pEnchant->ScalingClassRestricted; uint8 minLevel = pEnchant->Flags & 0x20 ? 1 : 60; @@ -13875,21 +13896,7 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool enchant_amount = uint32(pEnchant->EffectScalingPoints[s] * GetSpellScalingColumnForClass(spellScaling, scalingClass)); } - if (!enchant_amount) - { - ItemRandomSuffixEntry const* item_rand_suffix = sItemRandomSuffixStore.LookupEntry(abs(item->GetItemRandomPropertyId())); - if (item_rand_suffix) - { - for (int k = 0; k < MAX_ITEM_RANDOM_PROPERTIES; ++k) - { - if (item_rand_suffix->Enchantment[k] == enchant_id) - { - enchant_amount = uint32((item_rand_suffix->AllocationPct[k] * item->GetItemSuffixFactor()) / 10000); - break; - } - } - } - } + enchant_amount = std::max(enchant_amount, 1u); TC_LOG_DEBUG("entities.player.items", "Adding %u to stat nb %u", enchant_amount, enchant_spell_id); switch (enchant_spell_id) @@ -14119,7 +14126,7 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool // visualize enchantment at player and equipped items if (slot == PERM_ENCHANTMENT_SLOT) - SetUInt16Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENCHANTMENT_OFFSET + (item->GetSlot() * 2), 1, item->GetVisibleItemVisual(this)); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::VisibleItems, item->GetSlot()).ModifyValue(&UF::VisibleItem::ItemVisual), item->GetVisibleItemVisual(this)); if (apply_dur) { @@ -14253,7 +14260,7 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool if (source->GetTypeId() == TYPEID_UNIT) { - npcflags = source->GetUInt64Value(UNIT_NPC_FLAGS); + npcflags = (uint64(source->ToUnit()->m_unitData->NpcFlags[1]) << 32) | source->ToUnit()->m_unitData->NpcFlags[0]; if (showQuests && npcflags & UNIT_NPC_FLAG_QUESTGIVER) PrepareQuestMenu(source->GetGUID()); } @@ -14705,7 +14712,7 @@ void Player::SendPreparedQuest(WorldObject* source) return; } - if (source->GetTypeId() != TYPEID_UNIT || source->GetUInt64Value(UNIT_NPC_FLAGS) & UNIT_NPC_FLAG_GOSSIP) + if (source->GetTypeId() != TYPEID_UNIT || source->ToUnit()->HasNpcFlag(UNIT_NPC_FLAG_GOSSIP)) { if (quest->IsAutoAccept() && CanAddQuest(quest, true) && CanTakeQuest(quest, true)) AddQuestAndCheckCompletion(quest, source); @@ -16006,12 +16013,7 @@ bool Player::SatisfyQuestDay(Quest const* qInfo, bool /*msg*/) const return true; } - std::vector<uint32> const& dailies = GetDynamicValues(ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS); - for (uint32 dailyQuestId : dailies) - if (dailyQuestId == qInfo->GetQuestId()) - return false; - - return true; + return m_activePlayerData->DailyQuestsCompleted.FindIndex(qInfo->GetQuestId()) == -1; } bool Player::SatisfyQuestWeek(Quest const* qInfo, bool /*msg*/) @@ -16379,33 +16381,34 @@ uint16 Player::FindQuestSlot(uint32 quest_id) const uint32 Player::GetQuestSlotQuestId(uint16 slot) const { - return GetUInt32Value(PLAYER_QUEST_LOG + slot * MAX_QUEST_OFFSET + QUEST_ID_OFFSET); + return m_playerData->QuestLog[slot].QuestID; } uint32 Player::GetQuestSlotState(uint16 slot) const { - return GetUInt32Value(PLAYER_QUEST_LOG + slot * MAX_QUEST_OFFSET + QUEST_STATE_OFFSET); + return m_playerData->QuestLog[slot].StateFlags; } uint16 Player::GetQuestSlotCounter(uint16 slot, uint8 counter) const { if (counter < MAX_QUEST_COUNTS) - return GetUInt16Value(PLAYER_QUEST_LOG + slot * MAX_QUEST_OFFSET + QUEST_COUNTS_OFFSET + counter / 2, counter % 2); + return m_playerData->QuestLog[slot].ObjectiveProgress[counter]; return 0; } uint32 Player::GetQuestSlotTime(uint16 slot) const { - return GetUInt32Value(PLAYER_QUEST_LOG + slot * MAX_QUEST_OFFSET + QUEST_TIME_OFFSET); + return m_playerData->QuestLog[slot].EndTime; } void Player::SetQuestSlot(uint16 slot, uint32 quest_id, uint32 timer /*= 0*/) { - SetUInt32Value(PLAYER_QUEST_LOG + slot * MAX_QUEST_OFFSET + QUEST_ID_OFFSET, quest_id); - SetUInt32Value(PLAYER_QUEST_LOG + slot * MAX_QUEST_OFFSET + QUEST_STATE_OFFSET, 0); - for (uint32 i = 0; i < MAX_QUEST_COUNTS / 2; ++i) - SetUInt32Value(PLAYER_QUEST_LOG + slot * MAX_QUEST_OFFSET + QUEST_COUNTS_OFFSET + i, 0); - SetUInt32Value(PLAYER_QUEST_LOG + slot * MAX_QUEST_OFFSET + QUEST_TIME_OFFSET, timer); + auto questLogField = m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::QuestLog, slot); + SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::QuestID), quest_id); + SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::StateFlags), 0); + for (uint32 i = 0; i < MAX_QUEST_COUNTS; ++i) + SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::ObjectiveProgress, i), 0); + SetUpdateFieldValue(questLogField.ModifyValue(&UF::QuestLog::EndTime), timer); } void Player::SetQuestSlotCounter(uint16 slot, uint8 counter, uint16 count) @@ -16413,22 +16416,30 @@ void Player::SetQuestSlotCounter(uint16 slot, uint8 counter, uint16 count) if (counter >= MAX_QUEST_COUNTS) return; - SetUInt16Value(PLAYER_QUEST_LOG + slot * MAX_QUEST_OFFSET + QUEST_COUNTS_OFFSET + counter / 2, counter % 2, count); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData) + .ModifyValue(&UF::PlayerData::QuestLog, slot) + .ModifyValue(&UF::QuestLog::ObjectiveProgress, counter), count); } void Player::SetQuestSlotState(uint16 slot, uint32 state) { - SetFlag(PLAYER_QUEST_LOG + slot * MAX_QUEST_OFFSET + QUEST_STATE_OFFSET, state); + SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_playerData) + .ModifyValue(&UF::PlayerData::QuestLog, slot) + .ModifyValue(&UF::QuestLog::StateFlags), state); } void Player::RemoveQuestSlotState(uint16 slot, uint32 state) { - RemoveFlag(PLAYER_QUEST_LOG + slot * MAX_QUEST_OFFSET + QUEST_STATE_OFFSET, state); + RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_playerData) + .ModifyValue(&UF::PlayerData::QuestLog, slot) + .ModifyValue(&UF::QuestLog::StateFlags), state); } void Player::SetQuestSlotTimer(uint16 slot, uint32 timer) { - SetUInt32Value(PLAYER_QUEST_LOG + slot * MAX_QUEST_OFFSET + QUEST_TIME_OFFSET, timer); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData) + .ModifyValue(&UF::PlayerData::QuestLog, slot) + .ModifyValue(&UF::QuestLog::EndTime), timer); } void Player::SetQuestCompletedBit(uint32 questBit, bool completed) @@ -16436,11 +16447,15 @@ void Player::SetQuestCompletedBit(uint32 questBit, bool completed) if (!questBit) return; - uint32 fieldOffset = (questBit - 1) >> 5; + uint32 fieldOffset = (questBit - 1) >> 6; if (fieldOffset >= QUESTS_COMPLETED_BITS_SIZE) return; - ApplyModFlag(ACTIVE_PLAYER_FIELD_QUEST_COMPLETED + ((questBit - 1) >> 5), 1 << ((questBit - 1) & 31), completed); + uint64 flag = UI64LIT(1) << ((questBit - 1) & 63); + if (completed) + SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::QuestCompleted, fieldOffset), flag); + else + RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::QuestCompleted, fieldOffset), flag); } void Player::AreaExploredOrEventHappens(uint32 questId) @@ -17289,7 +17304,7 @@ void Player::SendQuestGiverStatusMultiple() Creature* questgiver = ObjectAccessor::GetCreatureOrPetOrVehicle(*this, *itr); if (!questgiver || questgiver->IsHostileTo(this)) continue; - if (!questgiver->HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER)) + if (!questgiver->HasNpcFlag(UNIT_NPC_FLAG_QUESTGIVER)) continue; response.QuestGiver.emplace_back(questgiver->GetGUID(), GetQuestDialogStatus(questgiver)); @@ -17344,8 +17359,6 @@ void Player::_LoadDeclinedNames(PreparedQueryResult result) void Player::_LoadArenaTeamInfo(PreparedQueryResult result) { // arenateamid, played_week, played_season, personal_rating - memset((void*)&m_uint32Values[ACTIVE_PLAYER_FIELD_ARENA_TEAM_INFO], 0, sizeof(uint32) * MAX_ARENA_SLOT * ARENA_TEAM_END); - uint16 personalRatingCache[] = {0, 0, 0}; if (result) @@ -17606,8 +17619,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) } // overwrite possible wrong/corrupted guid - SetGuidValue(OBJECT_FIELD_GUID, guid); - SetGuidValue(PLAYER_WOW_ACCOUNT, GetSession()->GetAccountGUID()); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::WowAccount), GetSession()->GetAccountGUID()); uint8 gender = fields[5].GetUInt8(); if (!IsValidGender(gender)) @@ -17616,9 +17628,9 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) return false; } - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_RACE, fields[3].GetUInt8()); - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, fields[4].GetUInt8()); - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, gender); + SetRace(fields[3].GetUInt8()); + SetClass(fields[4].GetUInt8()); + SetGender(gender); // check if race/class combination is valid PlayerInfo const* info = sObjectMgr->GetPlayerInfo(getRace(), getClass()); @@ -17628,14 +17640,25 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) return false; } - SetUInt32Value(UNIT_FIELD_LEVEL, fields[6].GetUInt8()); + SetLevel(fields[6].GetUInt8()); SetXP(fields[7].GetUInt32()); - _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); + Tokenizer exploredZones(fields[66].GetString(), ' '); + if (exploredZones.size() == PLAYER_EXPLORED_ZONES_SIZE * 2) + for (std::size_t i = 0; i < exploredZones.size(); ++i) + SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ExploredZones, i / 2), + (uint64(atoul(exploredZones[i])) << (32 * (i % 2)))); + + Tokenizer knownTitles(fields[67].GetString(), ' '); + if (!(knownTitles.size() % 2)) + { + for (std::size_t i = 0; i < knownTitles.size(); ++i) + SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::KnownTitles, i / 2), + (uint64(atoul(knownTitles[i])) << (32 * (i % 2)))); + } SetObjectScale(1.0f); - SetFloatValue(UNIT_FIELD_HOVERHEIGHT, 1.0f); + SetHoverHeight(1.0f); // load achievements before anything else to prevent multiple gains for the same achievement/criteria on every loading (as loading does call UpdateCriteria) m_achievementMgr->LoadFromDB(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_ACHIEVEMENTS), holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_CRITERIA_PROGRESS)); @@ -17651,30 +17674,30 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) customDisplay[1] = fields[15].GetUInt8(); customDisplay[2] = fields[16].GetUInt8(); - SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID, fields[9].GetUInt8()); - SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID, fields[10].GetUInt8()); - SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID, fields[11].GetUInt8()); - SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID, fields[12].GetUInt8()); - SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE, fields[13].GetUInt8()); + SetSkinId(fields[9].GetUInt8()); + SetFaceId(fields[10].GetUInt8()); + SetHairStyleId(fields[11].GetUInt8()); + SetHairColorId(fields[12].GetUInt8()); + SetFacialHairStyleId(fields[13].GetUInt8()); for (uint32 i = 0; i < PLAYER_CUSTOM_DISPLAY_SIZE; ++i) - SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_CUSTOM_DISPLAY_OPTION + i, customDisplay[i]); + SetCustomDisplayOption(i, customDisplay[i]); SetInventorySlotCount(fields[17].GetUInt8()); SetBankBagSlotCount(fields[18].GetUInt8()); - SetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER, gender); - 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(ACTIVE_PLAYER_FIELD_WATCHED_FACTION_INDEX, fields[54].GetUInt32()); + SetNativeSex(gender); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::Inebriation), fields[55].GetUInt8()); + SetPlayerFlags(PlayerFlags(fields[20].GetUInt32())); + SetPlayerFlagsEx(PlayerFlagsEx(fields[21].GetUInt32())); + SetWatchedFactionIndex(fields[54].GetUInt32()); if (!ValidateAppearance( fields[3].GetUInt8(), // race fields[4].GetUInt8(), // class gender, - GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID), - GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID), - GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID), - GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE), - GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID), + m_playerData->HairStyleID, + m_playerData->HairColorID, + m_playerData->FaceID, + m_playerData->FacialHairStyleID, + m_playerData->SkinID, customDisplay)) { TC_LOG_ERROR("entities.player", "Player::LoadFromDB: Player (%s) has wrong Appearance values (Hair/Skin/Color), can't load.", guid.ToString().c_str()); @@ -17682,7 +17705,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(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES, fields[68].GetUInt8()); + SetMultiActionBars(fields[68].GetUInt8()); m_fishingSteps = fields[72].GetUInt8(); @@ -17691,7 +17714,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(ACTIVE_PLAYER_FIELD_INV_SLOT_HEAD + (slot * 4), ObjectGuid::Empty); + SetInvSlot(slot, ObjectGuid::Empty); SetVisibleItemSlot(slot, nullptr); delete m_items[slot]; @@ -17709,6 +17732,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) if (!_LoadHomeBind(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_HOME_BIND))) return false; + InitializeSkillFields(); InitPrimaryProfessions(); // to max set before any spell loaded // init saved position, and fix it later if problematic @@ -17729,28 +17753,10 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) _LoadGroup(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_GROUP)); - _LoadArenaTeamInfo(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_ARENA_INFO)); - - // check arena teams integrity - for (uint32 arena_slot = 0; arena_slot < MAX_ARENA_SLOT; ++arena_slot) - { - uint32 arena_team_id = GetArenaTeamId(arena_slot); - if (!arena_team_id) - continue; - - if (ArenaTeam* at = sArenaTeamMgr->GetArenaTeamById(arena_team_id)) - if (at->IsMember(GetGUID())) - continue; - - // arena team not exist or not member, cleanup fields - for (int j = 0; j < 6; ++j) - SetArenaTeamInfoField(arena_slot, ArenaTeamInfoType(j), 0); - } - _LoadCurrency(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_CURRENCY)); - 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()); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::LifetimeHonorableKills), fields[50].GetUInt32()); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TodayHonorableKills), fields[51].GetUInt16()); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::YesterdayHonorableKills), fields[52].GetUInt16()); _LoadBoundInstances(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_BOUND_INSTANCES)); _LoadInstanceTimeRestrictions(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_INSTANCE_LOCK_TIMES)); @@ -18075,27 +18081,11 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) if (m_deathExpireTime > now + MAX_DEATH_COUNT * DEATH_EXPIRE_STEP) m_deathExpireTime = now + MAX_DEATH_COUNT * DEATH_EXPIRE_STEP - 1; - // clear charm/summon related fields - SetOwnerGUID(ObjectGuid::Empty); - SetGuidValue(UNIT_FIELD_CHARMEDBY, ObjectGuid::Empty); - SetGuidValue(UNIT_FIELD_CHARM, ObjectGuid::Empty); - SetGuidValue(UNIT_FIELD_SUMMON, 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(ACTIVE_PLAYER_FIELD_TRACK_CREATURES, 0); - SetUInt32Value(ACTIVE_PLAYER_FIELD_TRACK_RESOURCES, 0); + RemoveUnitFlag2(UNIT_FLAG2_FORCE_MOVEMENT); // make sure the unit is considered out of combat for proper loading ClearInCombat(); - // make sure the unit is considered not in duel for proper loading - SetGuidValue(PLAYER_DUEL_ARBITER, ObjectGuid::Empty); - SetUInt32Value(PLAYER_DUEL_TEAM, 0); - // reset stats before loading any modifiers InitStatsForLevel(); InitTaxiNodesForLevel(); @@ -18119,9 +18109,6 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) if (chrSpec->ClassID == getClass()) SetLootSpecId(lootSpecId); - if (ChrSpecializationEntry const* spec = sDB2Manager.GetChrSpecializationByIndex(getClass(), GetActiveTalentGroup())) - SetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID, spec->ID); - UpdateDisplayPower(); _LoadTalents(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_TALENTS)); _LoadPvpTalents(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_PVP_TALENTS)); @@ -18137,7 +18124,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) _LoadAuras(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_AURAS), holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_AURA_EFFECTS), time_diff); _LoadGlyphAuras(); // add ghost flag (must be after aura load: PLAYER_FLAGS_GHOST set in aura) - if (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST)) + if (HasPlayerFlag(PLAYER_FLAGS_GHOST)) m_deathState = DEAD; // after spell load, learn rewarded spell if need also @@ -18181,7 +18168,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) if (curTitle && !HasTitle(curTitle)) curTitle = 0; - SetUInt32Value(PLAYER_CHOSEN_TITLE, curTitle); + SetChosenTitle(curTitle); // has to be called after last Relocate() in Player::LoadFromDB SetFallInformation(0, GetPositionZ()); @@ -18208,7 +18195,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) if (GetPowerIndex(Powers(i)) != MAX_POWERS) { uint32 savedPower = fields[56 + loadedPowers].GetUInt32(); - uint32 maxPower = GetUInt32Value(UNIT_FIELD_MAXPOWER + loadedPowers); + uint32 maxPower = m_unitData->MaxPower[loadedPowers]; SetPower(Powers(i), (savedPower > maxPower) ? maxPower : savedPower); if (++loadedPowers >= MAX_POWERS_PER_CLASS) break; @@ -18216,7 +18203,7 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) } for (; loadedPowers < MAX_POWERS_PER_CLASS; ++loadedPowers) - SetUInt32Value(UNIT_FIELD_POWER + loadedPowers, 0); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Power, loadedPowers), 0); SetPower(POWER_LUNAR_POWER, 0); // Init rune recharge @@ -18286,10 +18273,10 @@ bool Player::LoadFromDB(ObjectGuid guid, SQLQueryHolder *holder) // RaF stuff. m_grantableLevels = fields[69].GetUInt8(); if (GetSession()->IsARecruiter() || (GetSession()->GetRecruiterId() != 0)) - SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_REFER_A_FRIEND); + AddDynamicFlag(UNIT_DYNFLAG_REFER_A_FRIEND); if (m_grantableLevels > 0) - SetByteValue(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_RAF_GRANTABLE_LEVEL, 0x01); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::GrantableLevels), 1); _LoadDeclinedNames(holder->GetPreparedResult(PLAYER_LOGIN_QUERY_LOAD_DECLINED_NAMES)); @@ -18362,7 +18349,7 @@ void Player::_LoadCUFProfiles(PreparedQueryResult result) while (result->NextRow()); } -bool Player::isAllowedToLoot(const Creature* creature) +bool Player::isAllowedToLoot(const Creature* creature) const { if (!creature->isDead() || !creature->IsDamageEnoughForLootingAndReward()) return false; @@ -18379,7 +18366,7 @@ bool Player::isAllowedToLoot(const Creature* creature) if (loot->loot_type == LOOT_SKINNING) return creature->GetSkinner() == GetGUID(); - Group* thisGroup = GetGroup(); + Group const* thisGroup = GetGroup(); if (!thisGroup) return this == creature->GetLootRecipient(); else if (thisGroup != creature->GetLootRecipientGroup()) @@ -18549,7 +18536,10 @@ 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(ACTIVE_PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_RELEASE_TIMER, !sMapStore.LookupEntry(_corpseLocation.GetMapId())->Instanceable()); + if (!sMapStore.AssertEntry(_corpseLocation.GetMapId())->Instanceable()) + AddPlayerLocalFlag(PLAYER_LOCAL_FLAG_RELEASE_TIMER); + else + RemovePlayerLocalFlag(PLAYER_LOCAL_FLAG_RELEASE_TIMER); } else ResurrectPlayer(0.5f); @@ -18590,7 +18580,7 @@ void Player::_LoadInventory(PreparedQueryResult result, PreparedQueryResult arti // 0 1 2 3 4 5 // SELECT a.itemGuid, a.xp, a.artifactAppearanceId, a.artifactTierId, ap.artifactPowerId, ap.purchasedRank FROM item_instance_artifact_powers ap LEFT JOIN item_instance_artifact a ON ap.itemGuid = a.itemGuid INNER JOIN character_inventory ci ON ci.item = ap.guid WHERE ci.guid = ? - std::unordered_map<ObjectGuid, std::tuple<uint64, uint32, uint32, std::vector<ItemDynamicFieldArtifactPowers>>> artifactData; + std::unordered_map<ObjectGuid, std::tuple<uint64, uint32, uint32, std::vector<ArtifactPowerLoadInfo>>> artifactData; if (artifactsResult) { do @@ -18600,7 +18590,7 @@ void Player::_LoadInventory(PreparedQueryResult result, PreparedQueryResult arti std::get<0>(artifactDataEntry) = fields[1].GetUInt64(); std::get<1>(artifactDataEntry) = fields[2].GetUInt32(); std::get<2>(artifactDataEntry) = fields[3].GetUInt32(); - ItemDynamicFieldArtifactPowers artifactPowerData; + ArtifactPowerLoadInfo artifactPowerData; artifactPowerData.ArtifactPowerId = fields[4].GetUInt32(); artifactPowerData.PurchasedRank = fields[5].GetUInt8(); if (ArtifactPowerEntry const* artifactPower = sArtifactPowerStore.LookupEntry(artifactPowerData.ArtifactPowerId)) @@ -18648,9 +18638,9 @@ void Player::_LoadInventory(PreparedQueryResult result, PreparedQueryResult arti GetSession()->GetCollectionMgr()->AddItemAppearance(item); InventoryResult err = EQUIP_ERR_OK; - if (item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_CHILD)) + if (item->HasItemFlag(ITEM_FIELD_FLAG_CHILD)) { - if (Item* parent = GetItemByGuid(item->GetGuidValue(ITEM_FIELD_CREATOR))) + if (Item* parent = GetItemByGuid(item->GetCreator())) { parent->SetChildItem(item->GetGUID()); item->CopyArtifactDataFromParent(parent); @@ -18769,7 +18759,7 @@ void Player::_LoadVoidStorage(PreparedQueryResult result) do { - // SELECT itemId, itemEntry, slot, creatorGuid, randomProperty, suffixFactor, upgradeId, fixedScalingLevel, artifactKnowledgeLevel, context, bonusListIDs FROM character_void_storage WHERE playerGuid = ? + // SELECT itemId, itemEntry, slot, creatorGuid, randomPropertyType, randomProperty, upgradeId, fixedScalingLevel, artifactKnowledgeLevel, context, bonusListIDs FROM character_void_storage WHERE playerGuid = ? Field* fields = result->Fetch(); uint64 itemId = fields[0].GetUInt64(); @@ -18777,13 +18767,12 @@ void Player::_LoadVoidStorage(PreparedQueryResult result) uint8 slot = fields[2].GetUInt8(); ObjectGuid creatorGuid = fields[3].GetUInt64() ? ObjectGuid::Create<HighGuid::Player>(fields[3].GetUInt64()) : ObjectGuid::Empty; ItemRandomEnchantmentId randomProperty(ItemRandomEnchantmentType(fields[4].GetUInt8()), fields[5].GetUInt32()); - uint32 suffixFactor = fields[6].GetUInt32(); - uint32 upgradeId = fields[7].GetUInt32(); - uint32 fixedScalingLevel = fields[8].GetUInt32(); - uint32 artifactKnowledgeLevel = fields[9].GetUInt32(); - uint8 context = fields[10].GetUInt8(); - std::vector<uint32> bonusListIDs; - Tokenizer bonusListIdTokens(fields[11].GetString(), ' '); + uint32 upgradeId = fields[6].GetUInt32(); + uint32 fixedScalingLevel = fields[7].GetUInt32(); + uint32 artifactKnowledgeLevel = fields[8].GetUInt32(); + uint8 context = fields[9].GetUInt8(); + std::vector<int32> bonusListIDs; + Tokenizer bonusListIdTokens(fields[10].GetString(), ' '); for (char const* token : bonusListIdTokens) bonusListIDs.push_back(atoul(token)); @@ -18808,7 +18797,7 @@ void Player::_LoadVoidStorage(PreparedQueryResult result) continue; } - _voidStorageItems[slot] = new VoidStorageItem(itemId, itemEntry, creatorGuid, randomProperty, suffixFactor, upgradeId, fixedScalingLevel, artifactKnowledgeLevel, + _voidStorageItems[slot] = new VoidStorageItem(itemId, itemEntry, creatorGuid, randomProperty, upgradeId, fixedScalingLevel, artifactKnowledgeLevel, context, bonusListIDs); WorldPackets::Item::ItemInstance voidInstance; @@ -18848,7 +18837,7 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F GetGUID().ToString().c_str(), GetName().c_str(), timeDiff, item->GetGUID().ToString().c_str(), item->GetEntry()); remove = true; } - else if (item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE)) + else if (item->HasItemFlag(ITEM_FIELD_FLAG_REFUNDABLE)) { if (item->GetPlayedTime() > (2 * HOUR)) { @@ -18859,7 +18848,7 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F stmt->setUInt64(0, item->GetGUID().GetCounter()); trans->Append(stmt); - item->RemoveFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE); + item->RemoveItemFlag(ITEM_FIELD_FLAG_REFUNDABLE); } else { @@ -18877,11 +18866,11 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F { TC_LOG_DEBUG("entities.player.loading", "Player::_LoadInventory: player (%s, name: '%s') has item (%s, entry: %u) with refundable flags, but without data in item_refund_instance. Removing flag.", GetGUID().ToString().c_str(), GetName().c_str(), item->GetGUID().ToString().c_str(), item->GetEntry()); - item->RemoveFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE); + item->RemoveItemFlag(ITEM_FIELD_FLAG_REFUNDABLE); } } } - else if (item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_BOP_TRADEABLE)) + else if (item->HasItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE)) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_ITEM_BOP_TRADE); stmt->setUInt64(0, item->GetGUID().GetCounter()); @@ -18905,7 +18894,7 @@ Item* Player::_LoadItem(SQLTransaction& trans, uint32 zoneId, uint32 timeDiff, F { TC_LOG_DEBUG("entities.player.loading", "Player::_LoadInventory: player (%s, name: '%s') has item (%s, entry: %u) with ITEM_FIELD_FLAG_BOP_TRADEABLE flag, but without data in item_soulbound_trade_data. Removing flag.", GetGUID().ToString().c_str(), GetName().c_str(), item->GetGUID().ToString().c_str(), item->GetEntry()); - item->RemoveFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_BOP_TRADEABLE); + item->RemoveItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE); } } else if (proto->GetHolidayID()) @@ -19274,7 +19263,7 @@ void Player::_LoadDailyQuestStatus(PreparedQueryResult result) if (!quest) continue; - AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS, quest_id); + AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::DailyQuestsCompleted)) = quest_id; if (uint32 questBit = sDB2Manager.GetQuestUniqueBitFlag(quest_id)) SetQuestCompletedBit(questBit, true); @@ -19389,7 +19378,7 @@ void Player::_LoadGroup(PreparedQueryResult result) if (Group* group = sGroupMgr->GetGroupByDbStoreId((*result)[0].GetUInt32())) { if (group->IsLeader(GetGUID())) - SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_GROUP_LEADER); + AddPlayerFlag(PLAYER_FLAGS_GROUP_LEADER); uint8 subgroup = group->GetMemberGroup(GetGUID()); SetGroup(group, subgroup); @@ -19403,7 +19392,7 @@ void Player::_LoadGroup(PreparedQueryResult result) } if (!GetGroup() || !GetGroup()->IsLeader(GetGUID())) - RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_GROUP_LEADER); + RemovePlayerFlag(PLAYER_FLAGS_GROUP_LEADER); } void Player::_LoadBoundInstances(PreparedQueryResult result) @@ -19950,22 +19939,22 @@ void Player::SaveToDB(bool create /*=false*/) stmt->setString(index++, GetName()); stmt->setUInt8(index++, getRace()); 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++, m_playerData->NativeSex); // save gender from PLAYER_BYTES_3, UNIT_BYTES_0 changes with every transform effect stmt->setUInt8(index++, getLevel()); - stmt->setUInt32(index++, GetUInt32Value(ACTIVE_PLAYER_FIELD_XP)); + stmt->setUInt32(index++, m_activePlayerData->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)); - stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID)); - stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID)); - stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE)); + stmt->setUInt8(index++, m_playerData->SkinID); + stmt->setUInt8(index++, m_playerData->FaceID); + stmt->setUInt8(index++, m_playerData->HairStyleID); + stmt->setUInt8(index++, m_playerData->HairColorID); + stmt->setUInt8(index++, m_playerData->FacialHairStyleID); for (uint32 i = 0; i < PLAYER_CUSTOM_DISPLAY_SIZE; ++i) - stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_CUSTOM_DISPLAY_OPTION + i)); + stmt->setUInt8(index++, m_playerData->CustomDisplayOption[i]); stmt->setUInt8(index++, GetInventorySlotCount()); stmt->setUInt8(index++, GetBankBagSlotCount()); - 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->setUInt8(index++, m_activePlayerData->RestInfo[REST_TYPE_XP].StateID); + stmt->setUInt32(index++, m_playerData->PlayerFlags); + stmt->setUInt32(index++, m_playerData->PlayerFlagsEx); stmt->setUInt16(index++, (uint16)GetMapId()); stmt->setUInt32(index++, (uint32)GetInstanceId()); stmt->setUInt8(index++, uint8(GetDungeonDifficultyID())); @@ -19992,7 +19981,7 @@ void Player::SaveToDB(bool create /*=false*/) stmt->setUInt32(index++, m_Played_time[PLAYED_TIME_LEVEL]); stmt->setFloat(index++, finiteAlways(_restMgr->GetRestBonus(REST_TYPE_XP))); stmt->setUInt32(index++, uint32(time(nullptr))); - stmt->setUInt8(index++, (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) ? 1 : 0)); + stmt->setUInt8(index++, (HasPlayerFlag(PLAYER_FLAGS_RESTING) ? 1 : 0)); //save, far from tavern/city //save, but in tavern/city stmt->setUInt32(index++, GetTalentResetCost()); @@ -20008,11 +19997,11 @@ void Player::SaveToDB(bool create /*=false*/) ss << m_taxi.SaveTaxiDestinationsToString(); stmt->setString(index++, ss.str()); - 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(ACTIVE_PLAYER_FIELD_WATCHED_FACTION_INDEX)); + stmt->setUInt32(index++, m_activePlayerData->LifetimeHonorableKills); + stmt->setUInt16(index++, m_activePlayerData->TodayHonorableKills); + stmt->setUInt16(index++, m_activePlayerData->YesterdayHonorableKills); + stmt->setUInt32(index++, m_playerData->PlayerTitle); + stmt->setUInt32(index++, m_activePlayerData->WatchedFactionIndex); stmt->setUInt8(index++, GetDrunkValue()); stmt->setUInt32(index++, GetHealth()); @@ -20021,7 +20010,7 @@ void Player::SaveToDB(bool create /*=false*/) { if (GetPowerIndex(Powers(i)) != MAX_POWERS) { - stmt->setUInt32(index++, GetUInt32Value(UNIT_FIELD_POWER + storedPowers)); + stmt->setUInt32(index++, m_unitData->Power[storedPowers]); if (++storedPowers >= MAX_POWERS_PER_CLASS) break; } @@ -20038,7 +20027,10 @@ void Player::SaveToDB(bool create /*=false*/) ss.str(""); for (uint32 i = 0; i < PLAYER_EXPLORED_ZONES_SIZE; ++i) - ss << GetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + i) << ' '; + { + ss << uint32(m_activePlayerData->ExploredZones[i] & 0xFFFFFFFF) << ' '; + ss << uint32((m_activePlayerData->ExploredZones[i] >> 32) & 0xFFFFFFFF) << ' '; + } stmt->setString(index++, ss.str()); ss.str(""); @@ -20062,11 +20054,14 @@ void Player::SaveToDB(bool create /*=false*/) stmt->setString(index++, ss.str()); ss.str(""); - for (uint32 i = 0; i < KNOWN_TITLES_SIZE * 2; ++i) - ss << GetUInt32Value(ACTIVE_PLAYER_FIELD_KNOWN_TITLES + i) << ' '; + for (uint32 i = 0; i < m_activePlayerData->KnownTitles.size(); ++i) + { + ss << uint32(m_activePlayerData->KnownTitles[i] & 0xFFFFFFFF) << ' '; + ss << uint32((m_activePlayerData->KnownTitles[i] >> 32) & 0xFFFFFFFF) << ' '; + } stmt->setString(index++, ss.str()); - stmt->setUInt8(index++, GetByteValue(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES)); + stmt->setUInt8(index++, m_activePlayerData->MultiActionBars); stmt->setUInt32(index++, m_grantableLevels); stmt->setUInt32(index++, sRealmList->GetMinorMajorBugfixVersionForBuild(realm.Build)); } @@ -20077,22 +20072,22 @@ void Player::SaveToDB(bool create /*=false*/) stmt->setString(index++, GetName()); stmt->setUInt8(index++, getRace()); 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++, m_playerData->NativeSex); // save gender from PLAYER_BYTES_3, UNIT_BYTES_0 changes with every transform effect stmt->setUInt8(index++, getLevel()); - stmt->setUInt32(index++, GetUInt32Value(ACTIVE_PLAYER_FIELD_XP)); + stmt->setUInt32(index++, m_activePlayerData->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)); - stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID)); - stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID)); - stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE)); + stmt->setUInt8(index++, m_playerData->SkinID); + stmt->setUInt8(index++, m_playerData->FaceID); + stmt->setUInt8(index++, m_playerData->HairStyleID); + stmt->setUInt8(index++, m_playerData->HairColorID); + stmt->setUInt8(index++, m_playerData->FacialHairStyleID); for (uint32 i = 0; i < PLAYER_CUSTOM_DISPLAY_SIZE; ++i) - stmt->setUInt8(index++, GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_CUSTOM_DISPLAY_OPTION + i)); + stmt->setUInt8(index++, m_playerData->CustomDisplayOption[i]); stmt->setUInt8(index++, GetInventorySlotCount()); stmt->setUInt8(index++, GetBankBagSlotCount()); - 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->setUInt8(index++, m_activePlayerData->RestInfo[REST_TYPE_XP].StateID); + stmt->setUInt32(index++, m_playerData->PlayerFlags); + stmt->setUInt32(index++, m_playerData->PlayerFlagsEx); if (!IsBeingTeleported()) { @@ -20136,7 +20131,7 @@ void Player::SaveToDB(bool create /*=false*/) stmt->setUInt32(index++, m_Played_time[PLAYED_TIME_LEVEL]); stmt->setFloat(index++, finiteAlways(_restMgr->GetRestBonus(REST_TYPE_XP))); stmt->setUInt32(index++, uint32(time(nullptr))); - stmt->setUInt8(index++, (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) ? 1 : 0)); + stmt->setUInt8(index++, (HasPlayerFlag(PLAYER_FLAGS_RESTING) ? 1 : 0)); //save, far from tavern/city //save, but in tavern/city stmt->setUInt32(index++, GetTalentResetCost()); @@ -20152,11 +20147,11 @@ void Player::SaveToDB(bool create /*=false*/) ss << m_taxi.SaveTaxiDestinationsToString(); stmt->setString(index++, ss.str()); - 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(ACTIVE_PLAYER_FIELD_WATCHED_FACTION_INDEX)); + stmt->setUInt32(index++, m_activePlayerData->LifetimeHonorableKills); + stmt->setUInt16(index++, m_activePlayerData->TodayHonorableKills); + stmt->setUInt16(index++, m_activePlayerData->YesterdayHonorableKills); + stmt->setUInt32(index++, m_playerData->PlayerTitle); + stmt->setUInt32(index++, m_activePlayerData->WatchedFactionIndex); stmt->setUInt8(index++, GetDrunkValue()); stmt->setUInt32(index++, GetHealth()); @@ -20165,7 +20160,7 @@ void Player::SaveToDB(bool create /*=false*/) { if (GetPowerIndex(Powers(i)) != MAX_POWERS) { - stmt->setUInt32(index++, GetUInt32Value(UNIT_FIELD_POWER + storedPowers)); + stmt->setUInt32(index++, m_unitData->Power[storedPowers]); if (++storedPowers >= MAX_POWERS_PER_CLASS) break; } @@ -20182,7 +20177,10 @@ void Player::SaveToDB(bool create /*=false*/) ss.str(""); for (uint32 i = 0; i < PLAYER_EXPLORED_ZONES_SIZE; ++i) - ss << GetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + i) << ' '; + { + ss << uint32(m_activePlayerData->ExploredZones[i] & 0xFFFFFFFF) << ' '; + ss << uint32((m_activePlayerData->ExploredZones[i] >> 32) & 0xFFFFFFFF) << ' '; + } stmt->setString(index++, ss.str()); ss.str(""); @@ -20206,17 +20204,20 @@ void Player::SaveToDB(bool create /*=false*/) stmt->setString(index++, ss.str()); ss.str(""); - for (uint32 i = 0; i < KNOWN_TITLES_SIZE*2; ++i) - ss << GetUInt32Value(ACTIVE_PLAYER_FIELD_KNOWN_TITLES + i) << ' '; + for (uint32 i = 0; i < m_activePlayerData->KnownTitles.size(); ++i) + { + ss << uint32(m_activePlayerData->KnownTitles[i] & 0xFFFFFFFF) << ' '; + ss << uint32((m_activePlayerData->KnownTitles[i] >> 32) & 0xFFFFFFFF) << ' '; + } stmt->setString(index++, ss.str()); - stmt->setUInt8(index++, GetByteValue(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES)); + stmt->setUInt8(index++, m_activePlayerData->MultiActionBars); stmt->setUInt32(index++, m_grantableLevels); stmt->setUInt8(index++, IsInWorld() && !GetSession()->PlayerLogout() ? 1 : 0); - stmt->setUInt32(index++, GetUInt32Value(ACTIVE_PLAYER_FIELD_HONOR)); + stmt->setUInt32(index++, m_activePlayerData->Honor); stmt->setUInt32(index++, GetHonorLevel()); - stmt->setUInt8(index++, uint8(GetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + REST_STATE_HONOR))); + stmt->setUInt8(index++, m_activePlayerData->RestInfo[REST_TYPE_HONOR].StateID); stmt->setFloat(index++, finiteAlways(_restMgr->GetRestBonus(REST_TYPE_HONOR))); stmt->setUInt32(index++, realm.Build); @@ -20557,7 +20558,7 @@ void Player::_SaveVoidStorage(SQLTransaction& trans) } else { - // REPLACE INTO character_void_storage (itemId, playerGuid, itemEntry, slot, creatorGuid, randomProperty, suffixFactor, upgradeId, fixedScalingLevel, artifactKnowledgeLevel, bonusListIDs) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + // REPLACE INTO character_void_storage (itemId, playerGuid, itemEntry, slot, creatorGuid, randomPropertyType, randomProperty, upgradeId, fixedScalingLevel, artifactKnowledgeLevel, bonusListIDs) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) stmt = CharacterDatabase.GetPreparedStatement(CHAR_REP_CHAR_VOID_STORAGE_ITEM); stmt->setUInt64(0, _voidStorageItems[i]->ItemId); stmt->setUInt64(1, GetGUID().GetCounter()); @@ -20566,15 +20567,14 @@ void Player::_SaveVoidStorage(SQLTransaction& trans) stmt->setUInt64(4, _voidStorageItems[i]->CreatorGuid.GetCounter()); stmt->setUInt8(5, uint8(_voidStorageItems[i]->ItemRandomPropertyId.Type)); stmt->setUInt32(6, _voidStorageItems[i]->ItemRandomPropertyId.Id); - stmt->setUInt32(7, _voidStorageItems[i]->ItemSuffixFactor); - stmt->setUInt32(8, _voidStorageItems[i]->ItemUpgradeId); - stmt->setUInt32(9, _voidStorageItems[i]->FixedScalingLevel); - stmt->setUInt32(10, _voidStorageItems[i]->ArtifactKnowledgeLevel); - stmt->setUInt8(11, _voidStorageItems[i]->Context); + stmt->setUInt32(7, _voidStorageItems[i]->ItemUpgradeId); + stmt->setUInt32(8, _voidStorageItems[i]->FixedScalingLevel); + stmt->setUInt32(9, _voidStorageItems[i]->ArtifactKnowledgeLevel); + stmt->setUInt8(10, _voidStorageItems[i]->Context); std::ostringstream bonusListIDs; for (int32 bonusListID : _voidStorageItems[i]->BonusListIDs) bonusListIDs << bonusListID << ' '; - stmt->setString(12, bonusListIDs.str()); + stmt->setString(11, bonusListIDs.str()); } trans->Append(stmt); @@ -20787,8 +20787,7 @@ void Player::_SaveDailyQuestStatus(SQLTransaction& trans) stmt->setUInt64(0, GetGUID().GetCounter()); trans->Append(stmt); - std::vector<uint32> const& dailies = GetDynamicValues(ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS); - for (uint32 questId : dailies) + for (int32 questId : m_activePlayerData->DailyQuestsCompleted) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_INS_CHARACTER_QUESTSTATUS_DAILY); stmt->setUInt64(0, GetGUID().GetCounter()); @@ -20897,22 +20896,8 @@ void Player::_SaveSkills(SQLTransaction& trans) continue; } - if (itr->second.uState == SKILL_DELETED) - { - stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_SKILL_BY_SKILL); - stmt->setUInt64(0, GetGUID().GetCounter()); - stmt->setUInt32(1, itr->first); - trans->Append(stmt); - - mSkillStatus.erase(itr++); - continue; - } - - uint16 field = itr->second.pos / 2; - uint8 offset = itr->second.pos & 1; - - 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); + uint16 value = m_activePlayerData->Skill->SkillRank[itr->second.pos]; + uint16 max = m_activePlayerData->Skill->SkillMaxRank[itr->second.pos]; switch (itr->second.uState) { @@ -20932,6 +20917,12 @@ void Player::_SaveSkills(SQLTransaction& trans) stmt->setUInt16(3, uint16(itr->first)); trans->Append(stmt); break; + case SKILL_DELETED: + stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHAR_SKILL_BY_SKILL); + stmt->setUInt64(0, GetGUID().GetCounter()); + stmt->setUInt16(1, uint16(itr->first)); + trans->Append(stmt); + break; default: break; } @@ -21008,16 +20999,16 @@ void Player::_SaveStats(SQLTransaction& trans) const for (int i = 0; i < MAX_SPELL_SCHOOL; ++i) 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->setFloat(index++, m_activePlayerData->BlockPercentage); + stmt->setFloat(index++, m_activePlayerData->DodgePercentage); + stmt->setFloat(index++, m_activePlayerData->ParryPercentage); + stmt->setFloat(index++, m_activePlayerData->CritPercentage); + stmt->setFloat(index++, m_activePlayerData->RangedCritPercentage); + stmt->setFloat(index++, m_activePlayerData->SpellCritPercentage); + stmt->setUInt32(index++, m_unitData->AttackPower); + stmt->setUInt32(index++, m_unitData->RangedAttackPower); stmt->setUInt32(index++, GetBaseSpellPowerBonus()); - stmt->setUInt32(index, GetUInt32Value(ACTIVE_PLAYER_FIELD_COMBAT_RATING + CR_RESILIENCE_PLAYER_DAMAGE)); + stmt->setUInt32(index, m_activePlayerData->CombatRatings[CR_RESILIENCE_PLAYER_DAMAGE]); trans->Append(stmt); } @@ -21031,13 +21022,13 @@ 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(ACTIVE_PLAYER_FIELD_BLOCK_PERCENTAGE)); + TC_LOG_DEBUG("entities.unit", "Armor is: \t\t%u\t\tBlock is: \t\t%f", GetArmor(), *m_activePlayerData->BlockPercentage); 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)); + TC_LOG_DEBUG("entities.unit", "MIN_DAMAGE is: \t\t%f\tMAX_DAMAGE is: \t\t%f", *m_unitData->MinDamage, *m_unitData->MaxDamage); + TC_LOG_DEBUG("entities.unit", "MIN_OFFHAND_DAMAGE is: \t%f\tMAX_OFFHAND_DAMAGE is: \t%f", *m_unitData->MinOffHandDamage, *m_unitData->MaxOffHandDamage); + TC_LOG_DEBUG("entities.unit", "MIN_RANGED_DAMAGE is: \t%f\tMAX_RANGED_DAMAGE is: \t%f", *m_unitData->MinRangedDamage, *m_unitData->MaxRangedDamage); TC_LOG_DEBUG("entities.unit", "ATTACK_TIME is: \t%u\t\tRANGE_ATTACK_TIME is: \t%u", GetBaseAttackTime(BASE_ATTACK), GetBaseAttackTime(RANGED_ATTACK)); } @@ -21279,7 +21270,7 @@ void Player::UpdateContestedPvP(uint32 diff) void Player::ResetContestedPvP() { ClearUnitState(UNIT_STATE_ATTACK_PLAYER); - RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_CONTESTED_PVP); + RemovePlayerFlag(PLAYER_FLAGS_CONTESTED_PVP); m_contestedPvPTimer = 0; } @@ -21301,8 +21292,8 @@ void Player::UpdateDuelFlag(time_t currTime) sScriptMgr->OnPlayerDuelStart(this, duel->opponent); - SetUInt32Value(PLAYER_DUEL_TEAM, 1); - duel->opponent->SetUInt32Value(PLAYER_DUEL_TEAM, 2); + SetDuelTeam(1); + duel->opponent->SetDuelTeam(2); duel->startTimer = 0; duel->startTime = currTime; @@ -21351,7 +21342,7 @@ void Player::RemovePet(Pet* pet, PetSaveMode mode, bool returnreagent) if (returnreagent && (pet || m_temporaryUnsummonedPetNumber) && !InBattleground()) { //returning of reagents only for players, so best done here - uint32 spellId = pet ? pet->GetUInt32Value(UNIT_CREATED_BY_SPELL) : m_oldpetspell; + uint32 spellId = pet ? *pet->m_unitData->CreatedBySpell : m_oldpetspell; SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId); if (spellInfo) @@ -22068,7 +22059,7 @@ bool Player::ActivateTaxiPathTo(std::vector<uint32> const& nodes, Creature* npc return false; } - if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_REMOVE_CLIENT_CONTROL)) + if (HasUnitFlag(UNIT_FLAG_REMOVE_CLIENT_CONTROL)) return false; // taximaster case @@ -22257,7 +22248,7 @@ void Player::CleanupAfterTaxiFlight() { m_taxi.ClearTaxiDestinations(); // not destinations, clear source node Dismount(); - RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_REMOVE_CLIENT_CONTROL | UNIT_FLAG_TAXI_FLIGHT); + RemoveUnitFlag(UnitFlags(UNIT_FLAG_REMOVE_CLIENT_CONTROL | UNIT_FLAG_TAXI_FLIGHT)); getHostileRefManager().setOnlineOfflineState(true); } @@ -22344,7 +22335,7 @@ void Player::InitDisplayIds() return; } - uint8 gender = GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER); + uint8 gender = m_playerData->NativeSex; switch (gender) { case GENDER_FEMALE: @@ -22359,7 +22350,7 @@ void Player::InitDisplayIds() 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()); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::StateAnimID), 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) @@ -22419,7 +22410,7 @@ inline bool Player::_StoreOrEquipNewItem(uint32 vendorslot, uint32 item, uint8 c if (pProto->GetFlags() & ITEM_FLAG_ITEM_PURCHASE_RECORD && crItem->ExtendedCost && pProto->GetMaxStackSize() == 1) { - it->SetFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE); + it->AddItemFlag(ITEM_FIELD_FLAG_REFUNDABLE); it->SetRefundRecipient(GetGUID()); it->SetPaidMoney(price); it->SetPaidExtendedCost(crItem->ExtendedCost); @@ -22447,7 +22438,7 @@ bool Player::BuyCurrencyFromVendorSlot(ObjectGuid vendorGuid, uint32 vendorSlot, return false; } - Creature* creature = GetNPCIfCanInteractWith(vendorGuid, UNIT_NPC_FLAG_VENDOR); + Creature* creature = GetNPCIfCanInteractWith(vendorGuid, UNIT_NPC_FLAG_VENDOR, UNIT_NPC_FLAG_2_NONE); if (!creature) { TC_LOG_DEBUG("network", "Player::BuyCurrencyFromVendorSlot: Vendor (%s) not found or player '%s' (%s) can't interact with him.", @@ -22615,7 +22606,7 @@ bool Player::BuyItemFromVendorSlot(ObjectGuid vendorguid, uint32 vendorslot, uin if (!IsGameMaster() && ((pProto->GetFlags2() & ITEM_FLAG2_FACTION_HORDE && GetTeam() == ALLIANCE) || (pProto->GetFlags2() & ITEM_FLAG2_FACTION_ALLIANCE && GetTeam() == HORDE))) return false; - Creature* creature = GetNPCIfCanInteractWith(vendorguid, UNIT_NPC_FLAG_VENDOR); + Creature* creature = GetNPCIfCanInteractWith(vendorguid, UNIT_NPC_FLAG_VENDOR, UNIT_NPC_FLAG_2_NONE); if (!creature) { TC_LOG_DEBUG("network", "Player::BuyItemFromVendorSlot: Vendor (%s) not found or player '%s' (%s) can't interact with him.", @@ -22874,16 +22865,16 @@ void Player::UpdatePvPState(bool onlyFFA) { if (!IsFFAPvP()) { - SetByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_FFA_PVP); + AddPvpFlag(UNIT_BYTE2_FLAG_FFA_PVP); for (ControlList::iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr) - (*itr)->SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_FFA_PVP); + (*itr)->AddPvpFlag(UNIT_BYTE2_FLAG_FFA_PVP); } } else if (IsFFAPvP()) { - RemoveByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_FFA_PVP); + RemovePvpFlag(UNIT_BYTE2_FLAG_FFA_PVP); for (ControlList::iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr) - (*itr)->RemoveByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_FFA_PVP); + (*itr)->RemovePvpFlag(UNIT_BYTE2_FLAG_FFA_PVP); } if (onlyFFA) @@ -22896,7 +22887,7 @@ void Player::UpdatePvPState(bool onlyFFA) } else // in friendly area { - if (IsPvP() && !HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP) && !pvpInfo.EndTimer) + if (IsPvP() && !HasPlayerFlag(PLAYER_FLAGS_IN_PVP) && !pvpInfo.EndTimer) pvpInfo.EndTimer = time(nullptr); // start toggle-off } } @@ -22977,9 +22968,9 @@ bool Player::EnchantmentFitsRequirements(uint32 enchantmentcondition, int8 slot) Item* pItem2 = GetItemByPos(INVENTORY_SLOT_BAG_0, i); if (pItem2 && !pItem2->IsBroken()) { - for (ItemDynamicFieldGems const& gemData : pItem2->GetGems()) + for (UF::SocketedGem const& gemData : pItem2->m_itemData->Gems) { - ItemTemplate const* gemProto = sObjectMgr->GetItemTemplate(gemData.ItemId); + ItemTemplate const* gemProto = sObjectMgr->GetItemTemplate(gemData.ItemID); if (!gemProto) continue; @@ -23149,7 +23140,7 @@ void Player::SetBattlegroundEntryPoint() void Player::SetBGTeam(uint32 team) { m_bgData.bgTeam = team; - SetByteValue(PLAYER_BYTES_4, PLAYER_BYTES_4_OFFSET_ARENA_FACTION, uint8(team == ALLIANCE ? 1 : 0)); + SetArenaFaction(uint8(team == ALLIANCE ? 1 : 0)); } uint32 Player::GetBGTeam() const @@ -23271,7 +23262,7 @@ bool Player::CanAlwaysSee(WorldObject const* obj) const if (m_unitMovedByMe == obj) return true; - ObjectGuid guid = GetGuidValue(ACTIVE_PLAYER_FIELD_FARSIGHT); + ObjectGuid guid = m_activePlayerData->FarsightObject; if (!guid.IsEmpty()) if (obj->GetGUID() == guid) return true; @@ -23405,12 +23396,12 @@ void Player::UpdateTriggerVisibility() { Creature* creature = GetMap()->GetCreature(*itr); // Update fields of triggers, transformed units or unselectable units (values dependent on GM state) - if (!creature || (!creature->IsTrigger() && !creature->HasAuraType(SPELL_AURA_TRANSFORM) && !creature->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))) + if (!creature || (!creature->IsTrigger() && !creature->HasAuraType(SPELL_AURA_TRANSFORM) && !creature->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE))) continue; - creature->SetFieldNotifyFlag(UF_FLAG_PUBLIC); + creature->ForceUpdateFieldChange(creature->m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::DisplayID)); + creature->ForceUpdateFieldChange(creature->m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Flags)); creature->BuildValuesUpdateBlockForPlayer(&udata, this); - creature->RemoveFieldNotifyFlag(UF_FLAG_PUBLIC); } else if (itr->IsAnyTypeGameObject()) { @@ -23418,9 +23409,8 @@ void Player::UpdateTriggerVisibility() if (!go) continue; - go->SetFieldNotifyFlag(UF_FLAG_PUBLIC); + go->ForceUpdateFieldChange(go->m_values.ModifyValue(&Object::m_objectData).ModifyValue(&UF::ObjectData::DynamicFlags)); go->BuildValuesUpdateBlockForPlayer(&udata, this); - go->RemoveFieldNotifyFlag(UF_FLAG_PUBLIC); } } @@ -23543,7 +23533,7 @@ bool Player::HasEnoughMoney(int64 amount) const void Player::SetMoney(uint64 value) { - SetUInt64Value(ACTIVE_PLAYER_FIELD_COINAGE, value); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Coinage), value); MoneyChanged(value); UpdateCriteria(CRITERIA_TYPE_HIGHEST_GOLD_VALUE_OWNED); } @@ -24164,33 +24154,11 @@ int32 Player::FindProfessionSlotFor(uint32 skillId) const 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; - } + int32 const* professionsBegin = m_activePlayerData->ProfessionSkillLine.begin(); + int32 const* professionsEnd = m_activePlayerData->ProfessionSkillLine.end(); // if there is no same profession, find any free slot - auto freeSlot = std::find(professionsBegin, professionsEnd, 0u); + auto freeSlot = std::find(professionsBegin, professionsEnd, 0); return freeSlot != professionsEnd ? std::distance(professionsBegin, freeSlot) : -1; } @@ -24222,7 +24190,7 @@ void Player::SetDailyQuestStatus(uint32 quest_id) { if (!qQuest->IsDFQuest()) { - AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS, quest_id); + AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::DailyQuestsCompleted)) = quest_id; m_lastDailyQuestTime = time(nullptr); // last daily quest time m_DailyQuestChanged = true; } @@ -24237,21 +24205,7 @@ void Player::SetDailyQuestStatus(uint32 quest_id) bool Player::IsDailyQuestDone(uint32 quest_id) { - bool found = false; - if (sObjectMgr->GetQuestTemplate(quest_id)) - { - std::vector<uint32> const& dailies = GetDynamicValues(ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS); - for (uint32 dailyQuestId : dailies) - { - if (dailyQuestId == quest_id) - { - found = true; - break; - } - } - } - - return found; + return m_activePlayerData->DailyQuestsCompleted.FindIndex(quest_id) >= 0; } void Player::SetWeeklyQuestStatus(uint32 quest_id) @@ -24278,15 +24232,15 @@ void Player::SetMonthlyQuestStatus(uint32 quest_id) void Player::DailyReset() { - for (uint32 questId : GetDynamicValues(ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS)) + for (int32 questId : m_activePlayerData->DailyQuestsCompleted) if (uint32 questBit = sDB2Manager.GetQuestUniqueBitFlag(questId)) SetQuestCompletedBit(questBit, false); WorldPackets::Quest::DailyQuestsReset dailyQuestsReset; - dailyQuestsReset.Count = int32(GetDynamicValues(ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS).size()); + dailyQuestsReset.Count = int32(m_activePlayerData->DailyQuestsCompleted.size()); SendDirectMessage(dailyQuestsReset.Write()); - ClearDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_DAILY_QUESTS); + ClearDynamicUpdateFieldValues(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::DailyQuestsCompleted)); m_DFQuests.clear(); // Dungeon Finder Quests. @@ -24586,7 +24540,7 @@ void Player::UpdateForQuestWorldObjects() continue; // check if this unit requires quest specific flags - if (!obj->HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK)) + if (!obj->HasNpcFlag(UNIT_NPC_FLAG_SPELLCLICK)) continue; SpellClickInfoMapBounds clickPair = sObjectMgr->GetSpellClickInfoMapBounds(obj->GetEntry()); @@ -24687,7 +24641,7 @@ void Player::RemoveItemDurations(Item* item) void Player::AddItemDurations(Item* item) { - if (item->GetUInt32Value(ITEM_FIELD_DURATION)) + if (*item->m_itemData->Expiration) { m_itemDuration.push_back(item); item->SendTimeUpdate(this); @@ -24796,16 +24750,16 @@ bool Player::CanNoReagentCast(SpellInfo const* spellInfo) const { // don't take reagents for spells with SPELL_ATTR5_NO_REAGENT_WHILE_PREP if (spellInfo->HasAttribute(SPELL_ATTR5_NO_REAGENT_WHILE_PREP) && - HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREPARATION)) + HasUnitFlag(UNIT_FLAG_PREPARATION)) return true; // Check no reagent use mask flag128 noReagentMask; - 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) + noReagentMask[0] = m_activePlayerData->NoReagentCostMask[0]; + noReagentMask[1] = m_activePlayerData->NoReagentCostMask[1]; + noReagentMask[2] = m_activePlayerData->NoReagentCostMask[2]; + noReagentMask[3] = m_activePlayerData->NoReagentCostMask[3]; + if (spellInfo->SpellFamilyFlags & noReagentMask) return true; return false; @@ -24845,7 +24799,7 @@ void Player::RemoveItemDependentAurasAndCasts(Item* pItem) void Player::InitializeSelfResurrectionSpells() { - ClearDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS); + ClearSelfResSpell(); uint32 spells[3] = { }; @@ -24866,7 +24820,7 @@ void Player::InitializeSelfResurrectionSpells() for (uint32 selfResSpell : spells) if (selfResSpell) - AddDynamicValue(ACTIVE_PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS, selfResSpell); + AddSelfResSpell(selfResSpell); } // Used in triggers for check "Only to targets that grant experience or honor" req @@ -25298,10 +25252,10 @@ void Player::SetOriginalGroup(Group* group, int8 subgroup) void Player::SetPartyType(GroupCategory category, uint8 type) { ASSERT(category < MAX_GROUP_CATEGORY); - uint8 value = GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_PARTY_TYPE); + uint8 value = m_playerData->PartyType; value &= ~uint8(uint8(0xFF) << (category * 4)); value |= uint8(uint8(type) << (category * 4)); - SetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_PARTY_TYPE, value); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PartyType), value); } void Player::ResetGroupUpdateSequenceIfNeeded(Group const* group) @@ -25439,12 +25393,14 @@ 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(ACTIVE_PLAYER_FIELD_FARSIGHT, target->GetGUID())) + if (ObjectGuid::Empty != m_activePlayerData->FarsightObject) { TC_LOG_FATAL("entities.player", "Player::CreateViewpoint: Player '%s' (%s) cannot add new viewpoint!", GetName().c_str(), GetGUID().ToString().c_str()); return; } + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::FarsightObject), target->GetGUID()); + // farsight dynobj or puppet may be very far away UpdateVisibilityOf(target); @@ -25456,12 +25412,14 @@ void Player::SetViewpoint(WorldObject* target, bool apply) { TC_LOG_DEBUG("maps", "Player::CreateViewpoint: Player %s removed seer", GetName().c_str()); - if (!RemoveGuidValue(ACTIVE_PLAYER_FIELD_FARSIGHT, target->GetGUID())) + if (target->GetGUID() != m_activePlayerData->FarsightObject) { TC_LOG_FATAL("entities.player", "Player::CreateViewpoint: Player '%s' (%s) cannot remove current viewpoint!", GetName().c_str(), GetGUID().ToString().c_str()); return; } + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::FarsightObject), ObjectGuid::Empty); + if (target->isType(TYPEMASK_UNIT) && target != GetVehicleBase()) static_cast<Unit*>(target)->RemovePlayerFromVision(this); @@ -25475,7 +25433,7 @@ void Player::SetViewpoint(WorldObject* target, bool apply) WorldObject* Player::GetViewpoint() const { - ObjectGuid guid = GetGuidValue(ACTIVE_PLAYER_FIELD_FARSIGHT); + ObjectGuid guid = m_activePlayerData->FarsightObject; if (!guid.IsEmpty()) return static_cast<WorldObject*>(ObjectAccessor::GetObjectByTypeMask(*this, guid, TYPEMASK_SEER)); return nullptr; @@ -25487,7 +25445,7 @@ bool Player::CanUseBattlegroundObject(GameObject* gameobject) const if (gameobject) { FactionTemplateEntry const* playerFaction = GetFactionTemplateEntry(); - FactionTemplateEntry const* faction = sFactionTemplateStore.LookupEntry(gameobject->GetUInt32Value(GAMEOBJECT_FACTION)); + FactionTemplateEntry const* faction = sFactionTemplateStore.LookupEntry(gameobject->GetFaction()); if (playerFaction && faction && !playerFaction->IsFriendlyTo(faction)) return false; @@ -25509,14 +25467,14 @@ bool Player::CanCaptureTowerPoint() const uint32 Player::GetBarberShopCost(BarberShopStyleEntry const* newHairStyle, uint8 newHairColor, BarberShopStyleEntry const* newFacialHair, BarberShopStyleEntry const* newSkin, BarberShopStyleEntry const* newFace, std::array<BarberShopStyleEntry const*, PLAYER_CUSTOM_DISPLAY_SIZE> const& newCustomDisplay) const { - uint8 hairstyle = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID); - uint8 haircolor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID); - uint8 facialhair = GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE); - uint8 skincolor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID); - uint8 face = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID); + uint8 hairstyle = m_playerData->HairStyleID; + uint8 haircolor = m_playerData->HairColorID; + uint8 facialhair = m_playerData->FacialHairStyleID; + uint8 skincolor = m_playerData->SkinID; + uint8 face = m_playerData->FaceID; std::array<uint8, PLAYER_CUSTOM_DISPLAY_SIZE> customDisplay; for (uint32 i = 0; i < PLAYER_CUSTOM_DISPLAY_SIZE; ++i) - customDisplay[i] = GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_CUSTOM_DISPLAY_OPTION + i); + customDisplay[i] = m_playerData->CustomDisplayOption[i]; if ((hairstyle == newHairStyle->Data) && (haircolor == newHairColor) && @@ -25572,12 +25530,12 @@ bool Player::isTotalImmune() const bool Player::HasTitle(uint32 bitIndex) const { - if (bitIndex > MAX_TITLE_INDEX) + uint32 fieldIndexOffset = bitIndex / 64; + if (fieldIndexOffset >= m_activePlayerData->KnownTitles.size()) return false; - uint32 fieldIndexOffset = bitIndex / 32; - uint32 flag = 1 << (bitIndex % 32); - return HasFlag(ACTIVE_PLAYER_FIELD_KNOWN_TITLES + fieldIndexOffset, flag); + uint64 flag = UI64LIT(1) << (bitIndex % 64); + return (m_activePlayerData->KnownTitles[fieldIndexOffset] & flag) != 0; } bool Player::HasTitle(CharTitlesEntry const* title) const @@ -25587,22 +25545,22 @@ bool Player::HasTitle(CharTitlesEntry const* title) const void Player::SetTitle(CharTitlesEntry const* title, bool lost) { - uint32 fieldIndexOffset = title->MaskID / 32; - uint32 flag = 1 << (title->MaskID % 32); + uint32 fieldIndexOffset = title->MaskID / 64; + uint64 flag = UI64LIT(1) << (title->MaskID % 64); if (lost) { - if (!HasFlag(ACTIVE_PLAYER_FIELD_KNOWN_TITLES + fieldIndexOffset, flag)) + if (!HasTitle(title)) return; - RemoveFlag(ACTIVE_PLAYER_FIELD_KNOWN_TITLES + fieldIndexOffset, flag); + RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::KnownTitles, fieldIndexOffset), flag); } else { - if (HasFlag(ACTIVE_PLAYER_FIELD_KNOWN_TITLES + fieldIndexOffset, flag)) + if (HasTitle(title)) return; - SetFlag(ACTIVE_PLAYER_FIELD_KNOWN_TITLES + fieldIndexOffset, flag); + SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::KnownTitles, fieldIndexOffset), flag); } WorldPackets::Character::TitleEarned packet(lost ? SMSG_TITLE_LOST : SMSG_TITLE_EARNED); @@ -25693,8 +25651,8 @@ void Player::InitRunes() for (uint8 i = 0; i < MAX_RUNES; ++i) SetRuneCooldown(i, 0); // reset cooldowns - SetStatFloatValue(UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER + runeIndex, 0.0f); - SetStatFloatValue(UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER + runeIndex, 0.0f); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerRegenFlatModifier, runeIndex), 0.0f); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerRegenInterruptedFlatModifier, runeIndex), 0.0f); } void Player::AutoStoreLoot(uint8 bag, uint8 slot, uint32 loot_id, LootStore const& store, bool broadcast) @@ -25839,6 +25797,13 @@ void Player::_LoadSkills(PreparedQueryResult result) { do { + if (mSkillStatus.size() >= PLAYER_MAX_SKILLS) // client limit + { + TC_LOG_ERROR("entities.player", "Player::_LoadSkills: Player '%s' (%s) has more than %u skills.", + GetName().c_str(), GetGUID().ToString().c_str(), PLAYER_MAX_SKILLS); + break; + } + Field* fields = result->Fetch(); uint16 skill = fields[0].GetUInt16(); uint16 value = fields[1].GetUInt16(); @@ -25869,29 +25834,13 @@ void Player::_LoadSkills(PreparedQueryResult result) break; } - if (value == 0) - { - TC_LOG_ERROR("entities.player", "Player::_LoadSkills: Player '%s' (%s) has skill %u with value 0, deleted.", - GetName().c_str(), GetGUID().ToString().c_str(), skill); - - PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CHARACTER_SKILL); + auto skillItr = mSkillStatus.find(skill); + if (skillItr == mSkillStatus.end()) + skillItr = mSkillStatus.insert(SkillStatusMap::value_type(skill, SkillStatusData(mSkillStatus.size(), SKILL_UNCHANGED))).first; - stmt->setUInt64(0, GetGUID().GetCounter()); - stmt->setUInt16(1, skill); - - CharacterDatabase.Execute(stmt); - - continue; - } - - uint16 field = count / 2; - uint8 offset = count & 1; - - SetUInt16Value(ACTIVE_PLAYER_FIELD_SKILL_LINEID + SKILL_ID_OFFSET + field, offset, skill); uint16 step = 0; - SkillLineEntry const* skillLine = sSkillLineStore.LookupEntry(rcEntry->SkillID); - if (skillLine) + if (SkillLineEntry const* skillLine = sSkillLineStore.LookupEntry(rcEntry->SkillID)) { if (skillLine->CategoryID == SKILL_CATEGORY_SECONDARY) step = max / 75; @@ -25900,55 +25849,48 @@ void Player::_LoadSkills(PreparedQueryResult result) { step = max / 75; - if (skillLine->ParentSkillLineID && skillLine->ParentTierIndex) + if (!skillLine->ParentSkillLineID) { int32 professionSlot = FindProfessionSlotFor(skill); if (professionSlot != -1) - SetUInt32Value(ACTIVE_PLAYER_FIELD_PROFESSION_SKILL_LINE + professionSlot, skill); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ProfessionSkillLine, professionSlot), skill); } } } - 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); + SetSkillLineId(skillItr->second.pos, skill); + SetSkillStep(skillItr->second.pos, step); + SetSkillRank(skillItr->second.pos, value); + SetSkillStartingRank(skillItr->second.pos, 1); + SetSkillMaxRank(skillItr->second.pos, max); + SetSkillTempBonus(skillItr->second.pos, 0); + SetSkillPermBonus(skillItr->second.pos, 0); - mSkillStatus.insert(SkillStatusMap::value_type(skill, SkillStatusData(count, SKILL_UNCHANGED))); loadedSkillValues[skill] = value; - - ++count; - - if (count >= PLAYER_MAX_SKILLS) // client limit - { - TC_LOG_ERROR("entities.player", "Player::_LoadSkills: Player '%s' (%s) has more than %u skills.", - GetName().c_str(), GetGUID().ToString().c_str(), PLAYER_MAX_SKILLS); - break; - } } while (result->NextRow()); } // Learn skill rewarded spells after all skills have been loaded to prevent learning a skill from them before its loaded with proper value from DB for (auto& skill : loadedSkillValues) + { LearnSkillRewardedSpells(skill.first, skill.second); + if (std::vector<SkillLineEntry const*> const* childSkillLines = sDB2Manager.GetSkillLinesForParentSkill(skill.first)) + { + for (auto childItr = childSkillLines->begin(); childItr != childSkillLines->end() && mSkillStatus.size() < PLAYER_MAX_SKILLS; ++childItr) + { + if (mSkillStatus.find((*childItr)->ID) == mSkillStatus.end()) + { + SetSkillLineId(count, (*childItr)->ID); + SetSkillStartingRank(count, 1); + mSkillStatus.insert(SkillStatusMap::value_type((*childItr)->ID, SkillStatusData(count, SKILL_UNCHANGED))); + } + } + } + } if (HasSkill(SKILL_FIST_WEAPONS)) SetSkill(SKILL_FIST_WEAPONS, 0, GetSkillValue(SKILL_UNARMED), GetMaxSkillValueForLevel()); - - for (; count < PLAYER_MAX_SKILLS; ++count) - { - uint16 field = count / 2; - uint8 offset = count & 1; - - 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); - } } InventoryResult Player::CanEquipUniqueItem(Item* pItem, uint8 eslot, uint32 limit_count) const @@ -25960,9 +25902,9 @@ InventoryResult Player::CanEquipUniqueItem(Item* pItem, uint8 eslot, uint32 limi return res; // check unique-equipped on gems - for (ItemDynamicFieldGems const& gemData : pItem->GetGems()) + for (UF::SocketedGem const& gemData : pItem->m_itemData->Gems) { - ItemTemplate const* pGem = sObjectMgr->GetItemTemplate(gemData.ItemId); + ItemTemplate const* pGem = sObjectMgr->GetItemTemplate(gemData.ItemID); if (!pGem) continue; @@ -26139,14 +26081,14 @@ TalentLearnResult Player::LearnTalent(uint32 talentId, int32* spellOnCooldown) if (isDead()) return TALENT_FAILED_CANT_DO_THAT_RIGHT_NOW; - if (!GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID)) + if (!GetPrimarySpecialization()) return TALENT_FAILED_NO_PRIMARY_TREE_SELECTED; TalentEntry const* talentInfo = sTalentStore.LookupEntry(talentId); if (!talentInfo) return TALENT_FAILED_UNKNOWN; - if (talentInfo->SpecID && talentInfo->SpecID != GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID)) + if (talentInfo->SpecID && talentInfo->SpecID != GetPrimarySpecialization()) return TALENT_FAILED_UNKNOWN; // prevent learn talent for different class (cheating) @@ -26154,7 +26096,7 @@ TalentLearnResult Player::LearnTalent(uint32 talentId, int32* spellOnCooldown) return TALENT_FAILED_UNKNOWN; // check if we have enough talent points - if (talentInfo->TierID >= GetUInt32Value(ACTIVE_PLAYER_FIELD_MAX_TALENT_TIERS)) + if (talentInfo->TierID >= m_activePlayerData->MaxTalentTiers) return TALENT_FAILED_UNKNOWN; // TODO: prevent changing talents that are on cooldown @@ -26170,7 +26112,7 @@ TalentLearnResult Player::LearnTalent(uint32 talentId, int32* spellOnCooldown) { if (!talent->SpecID) bestSlotMatch = talent; - else if (talent->SpecID == GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID)) + else if (talent->SpecID == GetPrimarySpecialization()) { bestSlotMatch = talent; break; @@ -26188,7 +26130,7 @@ TalentLearnResult Player::LearnTalent(uint32 talentId, int32* spellOnCooldown) if (!HasTalent(talent->ID, GetActiveTalentGroup())) continue; - if (!HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) && !HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_ALLOW_CHANGING_TALENTS)) + if (!HasPlayerFlag(PLAYER_FLAGS_RESTING) && !HasUnitFlag2(UNIT_FLAG2_ALLOW_CHANGING_TALENTS)) return TALENT_FAILED_REST_AREA; if (GetSpellHistory()->HasCooldown(talent->SpellID)) @@ -26238,7 +26180,6 @@ void Player::ResetTalentSpecialization() ChrSpecializationEntry const* defaultSpec = ASSERT_NOTNULL(sDB2Manager.GetDefaultChrSpecializationForClass(getClass())); SetPrimarySpecialization(defaultSpec->ID); SetActiveTalentGroup(defaultSpec->OrderIndex); - SetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID, defaultSpec->ID); LearnSpecializationSpells(); @@ -26261,7 +26202,7 @@ TalentLearnResult Player::LearnPvpTalent(uint32 talentID, uint8 slot, int32* spe if (!talentInfo) return TALENT_FAILED_UNKNOWN; - if (talentInfo->SpecID != GetInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID)) + if (talentInfo->SpecID != int32(GetPrimarySpecialization())) return TALENT_FAILED_UNKNOWN; if (talentInfo->LevelRequired > getLevel()) @@ -26280,7 +26221,7 @@ TalentLearnResult Player::LearnPvpTalent(uint32 talentID, uint8 slot, int32* spe 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)) + if (!HasPlayerFlag(PLAYER_FLAGS_RESTING) && !HasUnitFlag2(UNIT_FLAG2_ALLOW_CHANGING_TALENTS)) return TALENT_FAILED_REST_AREA; if (GetSpellHistory()->HasCooldown(talent->SpellID)) @@ -26455,7 +26396,7 @@ void Player::UnsummonPetTemporaryIfAny() if (!m_temporaryUnsummonedPetNumber && pet->isControlled() && !pet->isTemporarySummoned()) { m_temporaryUnsummonedPetNumber = pet->GetCharmInfo()->GetPetNumber(); - m_oldpetspell = pet->GetUInt32Value(UNIT_CREATED_BY_SPELL); + m_oldpetspell = pet->m_unitData->CreatedBySpell; } RemovePet(pet, PET_SAVE_AS_CURRENT); @@ -26487,7 +26428,7 @@ bool Player::IsPetNeedBeTemporaryUnsummoned() const bool Player::CanSeeSpellClickOn(Creature const* c) const { - if (!c->HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK)) + if (!c->HasNpcFlag(UNIT_NPC_FLAG_SPELLCLICK)) return false; SpellClickInfoMapBounds clickPair = sObjectMgr->GetSpellClickInfoMapBounds(c->GetEntry()); @@ -27009,9 +26950,7 @@ void Player::ActivateTalentGroup(ChrSpecializationEntry const* spec) RemoveAurasDueToSpell(sGlyphPropertiesStore.AssertEntry(glyphId)->SpellID); SetActiveTalentGroup(spec->OrderIndex); - SetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID, spec->ID); - if (!GetPrimarySpecialization()) - SetPrimarySpecialization(spec->ID); + SetPrimarySpecialization(spec->ID); for (uint32 talentId = 0; talentId < sTalentStore.GetNumRows(); ++talentId) { @@ -27155,7 +27094,7 @@ void Player::SendRefundInfo(Item* item) // This function call unsets ITEM_FIELD_FLAG_REFUNDABLE if played time is over 2 hours. item->UpdatePlayedTime(this); - if (!item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE)) + if (!item->HasItemFlag(ITEM_FIELD_FLAG_REFUNDABLE)) { TC_LOG_DEBUG("entities.player.items", "Item refund: item not refundable!"); return; @@ -27251,7 +27190,7 @@ void Player::SendItemRefundResult(Item* item, ItemExtendedCostEntry const* iece, void Player::RefundItem(Item* item) { - if (!item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE)) + if (!item->HasItemFlag(ITEM_FIELD_FLAG_REFUNDABLE)) { TC_LOG_DEBUG("entities.player.items", "Item refund: item not refundable!"); return; @@ -27558,8 +27497,8 @@ void Player::SendMovementSetCollisionHeight(float height) setCollisionHeight.SequenceIndex = m_movementCounter++; setCollisionHeight.Height = height; setCollisionHeight.Scale = GetObjectScale(); - setCollisionHeight.MountDisplayID = GetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID); - setCollisionHeight.ScaleDuration = GetUInt32Value(UNIT_FIELD_SCALE_DURATION); + setCollisionHeight.MountDisplayID = GetMountDisplayId(); + setCollisionHeight.ScaleDuration = m_unitData->ScaleDuration; setCollisionHeight.Reason = WorldPackets::Movement::UPDATE_COLLISION_HEIGHT_MOUNT; SendDirectMessage(setCollisionHeight.Write()); @@ -27685,7 +27624,7 @@ float Player::GetCollisionHeight(bool mounted) const { if (mounted) { - CreatureDisplayInfoEntry const* mountDisplayInfo = sCreatureDisplayInfoStore.LookupEntry(GetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID)); + CreatureDisplayInfoEntry const* mountDisplayInfo = sCreatureDisplayInfoStore.LookupEntry(GetMountDisplayId()); if (!mountDisplayInfo) return GetCollisionHeight(false); @@ -27789,10 +27728,10 @@ Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetTy PhasingHandler::InheritPhaseShift(pet, this); pet->SetCreatorGUID(GetGUID()); - pet->SetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE, getFaction()); + pet->setFaction(getFaction()); - pet->SetUInt64Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); - pet->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); + pet->SetNpcFlags(UNIT_NPC_FLAG_NONE); + pet->SetNpcFlags2(UNIT_NPC_FLAG_2_NONE); pet->InitStatsForLevel(getLevel()); SetMinion(pet, true); @@ -27802,12 +27741,12 @@ Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetTy case SUMMON_PET: // this enables pet details window (Shift+P) pet->GetCharmInfo()->SetPetNumber(pet_number, true); - pet->SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, CLASS_MAGE); - pet->SetUInt32Value(UNIT_FIELD_PETEXPERIENCE, 0); - pet->SetUInt32Value(UNIT_FIELD_PETNEXTLEVELEXP, 1000); + pet->SetClass(CLASS_MAGE); + pet->SetPetExperience(0); + pet->SetPetNextLevelExperience(1000); pet->SetFullHealth(); pet->SetFullPower(POWER_MANA); - pet->SetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP, uint32(time(nullptr))); // cast can't be helped in this case + pet->SetPetNameTimestamp(uint32(time(nullptr))); break; default: break; @@ -27836,7 +27775,7 @@ Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetTy bool Player::CanUseMastery() const { - if (ChrSpecializationEntry const* chrSpec = sChrSpecializationStore.LookupEntry(GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID))) + if (ChrSpecializationEntry const* chrSpec = sChrSpecializationStore.LookupEntry(GetPrimarySpecialization())) return HasSpell(chrSpec->MasterySpellID[0]) || HasSpell(chrSpec->MasterySpellID[1]); return false; @@ -28028,7 +27967,7 @@ void Player::RemoveOverrideSpell(uint32 overridenSpellId, uint32 newSpellId) void Player::LearnSpecializationSpells() { - if (std::vector<SpecializationSpellsEntry const*> const* specSpells = sDB2Manager.GetSpecializationSpells(GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID))) + if (std::vector<SpecializationSpellsEntry const*> const* specSpells = sDB2Manager.GetSpecializationSpells(GetPrimarySpecialization())) { for (size_t j = 0; j < specSpells->size(); ++j) { diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index c9bc2b7d020..922ecf09ee3 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -90,6 +90,8 @@ enum InventoryType : uint8; enum ItemClass : uint8; enum LootError : uint8; enum LootType : uint8; +enum PlayerRestState : uint8; +enum RestTypes : uint8; namespace WorldPackets { @@ -120,7 +122,7 @@ enum SkillFieldOffset : uint16 SKILL_PERM_BONUS_OFFSET = SKILL_TEMP_BONUS_OFFSET + CalculateSkillFieldArraySize<uint16>() }; -#define PLAYER_EXPLORED_ZONES_SIZE 320 +#define PLAYER_EXPLORED_ZONES_SIZE 160 // Note: SPELLMOD_* values is aura types in fact enum SpellModType : uint8 @@ -449,61 +451,6 @@ enum PlayerLocalFlags PLAYER_LOCAL_FLAG_ACCOUNT_SECURED = 0x00001000, // Script_IsAccountSecured }; -enum PlayerBytesOffsets -{ - PLAYER_BYTES_OFFSET_SKIN_ID = 0, - PLAYER_BYTES_OFFSET_FACE_ID = 1, - PLAYER_BYTES_OFFSET_HAIR_STYLE_ID = 2, - PLAYER_BYTES_OFFSET_HAIR_COLOR_ID = 3 -}; - -enum PlayerBytes2Offsets -{ - PLAYER_BYTES_2_OFFSET_CUSTOM_DISPLAY_OPTION = 0, // 3 bytes - PLAYER_BYTES_2_OFFSET_FACIAL_STYLE = 3 -}; - -enum PlayerBytes3Offsets -{ - PLAYER_BYTES_3_OFFSET_PARTY_TYPE = 0, - PLAYER_BYTES_3_OFFSET_BANK_BAG_SLOTS = 1, - PLAYER_BYTES_3_OFFSET_GENDER = 2, - PLAYER_BYTES_3_OFFSET_INEBRIATION = 3 -}; - -enum PlayerBytes4Offsets -{ - PLAYER_BYTES_4_OFFSET_PVP_TITLE = 0, - PLAYER_BYTES_4_OFFSET_ARENA_FACTION = 1 -}; - -enum PlayerFieldBytesOffsets -{ - PLAYER_FIELD_BYTES_OFFSET_RAF_GRANTABLE_LEVEL = 0, - PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES = 1, - PLAYER_FIELD_BYTES_OFFSET_LIFETIME_MAX_PVP_RANK = 2, - PLAYER_FIELD_BYTES_OFFSET_NUM_RESPECS = 3 -}; - -enum PlayerFieldBytes2Offsets -{ - PLAYER_FIELD_BYTES_2_OFFSET_IGNORE_POWER_REGEN_PREDICTION_MASK = 0, - PLAYER_FIELD_BYTES_2_OFFSET_AURA_VISION = 1, - PLAYER_FIELD_BYTES_2_OFFSET_NUM_BACKPACK_SLOTS = 2 -}; - -enum PlayerFieldBytes3Offsets -{ - PLAYER_FIELD_BYTES_3_OFFSET_OVERRIDE_SPELLS_ID = 0 // uint16! -}; - -static_assert((PLAYER_FIELD_BYTES_3_OFFSET_OVERRIDE_SPELLS_ID & 1) == 0, "PLAYER_FIELD_BYTES_3_OFFSET_OVERRIDE_SPELLS_ID must be aligned to 2 byte boundary"); - -#define PLAYER_BYTES_3_OVERRIDE_SPELLS_UINT16_OFFSET (PLAYER_FIELD_BYTES_3_OFFSET_OVERRIDE_SPELLS_ID / 2) - -#define KNOWN_TITLES_SIZE 6 -#define MAX_TITLE_INDEX (KNOWN_TITLES_SIZE * 64) // 4 uint64 fields - // used in PLAYER_FIELD_BYTES2 values enum PlayerFieldByte2Flags { @@ -512,12 +459,6 @@ enum PlayerFieldByte2Flags PLAYER_FIELD_BYTE2_INVISIBILITY_GLOW = 0x40 }; -enum PlayerFieldKillsOffsets -{ - PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS = 0, - PLAYER_FIELD_KILLS_OFFSET_YESTERDAY_KILLS = 1 -}; - enum MirrorTimerType { FATIGUE_TIMER = 0, @@ -958,23 +899,22 @@ struct BGData struct VoidStorageItem { - VoidStorageItem() : ItemId(0), ItemEntry(0), ItemRandomPropertyId(), ItemSuffixFactor(0), ItemUpgradeId(0), FixedScalingLevel(0), ArtifactKnowledgeLevel(0) { } - VoidStorageItem(uint64 id, uint32 entry, ObjectGuid const& creator, ItemRandomEnchantmentId randomPropertyId, uint32 suffixFactor, - uint32 upgradeId, uint32 fixedScalingLevel, uint32 artifactKnowledgeLevel, uint8 context, std::vector<uint32> const& bonuses) + VoidStorageItem() : ItemId(0), ItemEntry(0), ItemRandomPropertyId(), ItemUpgradeId(0), FixedScalingLevel(0), ArtifactKnowledgeLevel(0), Context(0) { } + VoidStorageItem(uint64 id, uint32 entry, ObjectGuid const& creator, ItemRandomEnchantmentId randomPropertyId, + uint32 upgradeId, uint32 fixedScalingLevel, uint32 artifactKnowledgeLevel, uint8 context, std::vector<int32> const& bonuses) : ItemId(id), ItemEntry(entry), CreatorGuid(creator), ItemRandomPropertyId(randomPropertyId), - ItemSuffixFactor(suffixFactor), ItemUpgradeId(upgradeId), FixedScalingLevel(fixedScalingLevel), ArtifactKnowledgeLevel(artifactKnowledgeLevel), Context(context) + ItemUpgradeId(upgradeId), FixedScalingLevel(fixedScalingLevel), ArtifactKnowledgeLevel(artifactKnowledgeLevel), Context(context) { BonusListIDs.insert(BonusListIDs.end(), bonuses.begin(), bonuses.end()); } - VoidStorageItem(VoidStorageItem&& vsi) : ItemId(vsi.ItemId), ItemEntry(vsi.ItemEntry), CreatorGuid(vsi.CreatorGuid), ItemRandomPropertyId(vsi.ItemRandomPropertyId), - ItemSuffixFactor(vsi.ItemSuffixFactor), ItemUpgradeId(vsi.ItemUpgradeId), FixedScalingLevel(vsi.FixedScalingLevel), + VoidStorageItem(VoidStorageItem&& vsi) noexcept : ItemId(vsi.ItemId), ItemEntry(vsi.ItemEntry), CreatorGuid(vsi.CreatorGuid), ItemRandomPropertyId(vsi.ItemRandomPropertyId), + ItemUpgradeId(vsi.ItemUpgradeId), FixedScalingLevel(vsi.FixedScalingLevel), ArtifactKnowledgeLevel(vsi.ArtifactKnowledgeLevel), Context(vsi.Context), BonusListIDs(std::move(vsi.BonusListIDs)) { } uint64 ItemId; uint32 ItemEntry; ObjectGuid CreatorGuid; ItemRandomEnchantmentId ItemRandomPropertyId; - uint32 ItemSuffixFactor; uint32 ItemUpgradeId; uint32 FixedScalingLevel; uint32 ArtifactKnowledgeLevel; @@ -1012,8 +952,10 @@ enum TalentLearnResult struct TC_GAME_API SpecializationInfo { - SpecializationInfo() : ResetTalentsCost(0), ResetTalentsTime(0), PrimarySpecialization(0), ActiveGroup(0) + SpecializationInfo() : PvpTalents(), ResetTalentsCost(0), ResetTalentsTime(0), ActiveGroup(0) { + for (PlayerPvpTalentMap& pvpTalents : PvpTalents) + pvpTalents.fill(0); } PlayerTalentMap Talents[MAX_SPECIALIZATIONS]; @@ -1021,7 +963,6 @@ struct TC_GAME_API SpecializationInfo std::vector<uint32> Glyphs[MAX_SPECIALIZATIONS]; uint32 ResetTalentsCost; time_t ResetTalentsTime; - uint32 PrimarySpecialization; uint8 ActiveGroup; private: @@ -1080,14 +1021,14 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void SendInstanceResetWarning(uint32 mapid, Difficulty difficulty, uint32 time, bool welcome) const; bool CanInteractWithQuestGiver(Object* questGiver) const; - Creature* GetNPCIfCanInteractWith(ObjectGuid const& guid, uint64 npcflagmask) const; + Creature* GetNPCIfCanInteractWith(ObjectGuid const& guid, NPCFlags npcFlags, NPCFlags2 npcFlags2) const; GameObject* GetGameObjectIfCanInteractWith(ObjectGuid const& guid) const; GameObject* GetGameObjectIfCanInteractWith(ObjectGuid const& guid, GameobjectTypes type) const; void ToggleAFK(); void ToggleDND(); - bool isAFK() const { return HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_AFK); } - bool isDND() const { return HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_DND); } + bool isAFK() const { return HasPlayerFlag(PLAYER_FLAGS_AFK); } + bool isDND() const { return HasPlayerFlag(PLAYER_FLAGS_DND); } uint8 GetChatFlags() const; std::string autoReplyMsg; @@ -1184,13 +1125,18 @@ 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(ACTIVE_PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_NUM_BACKPACK_SLOTS); } + uint8 GetInventorySlotCount() const { return m_activePlayerData->NumBackpackSlots; } 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); } + uint8 GetBankBagSlotCount() const { return m_activePlayerData->NumBankSlots; } + void SetBankBagSlotCount(uint8 count) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::NumBankSlots), count); } bool HasItemCount(uint32 item, uint32 count = 1, bool inBankAlso = false) const; bool HasItemFitToSpellRequirements(SpellInfo const* spellInfo, Item const* ignoreItem = nullptr) const; bool CanNoReagentCast(SpellInfo const* spellInfo) const; + void SetNoRegentCostMask(flag128 mask) + { + for (uint8 i = 0; i < 4; ++i) + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::NoReagentCostMask, i), mask[i]); + } bool HasItemOrGemWithIdEquipped(uint32 item, uint32 count, uint8 except_slot = NULL_SLOT) const; bool HasItemWithLimitCategoryEquipped(uint32 limitCategory, uint32 count, uint8 except_slot = NULL_SLOT) const; bool HasGemWithLimitCategoryEquipped(uint32 limitCategory, uint32 count, uint8 except_slot = NULL_SLOT) const; @@ -1261,6 +1207,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> */ void ModifyCurrency(uint32 id, int32 count, bool printLog = true, bool ignoreMultipliers = false); + void SetInvSlot(uint32 slot, ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::InvSlots, slot), guid); } + void ApplyEquipCooldown(Item* pItem); void QuickEquipItem(uint16 pos, Item* pItem); void VisualizeItem(uint8 slot, Item* pItem); @@ -1280,6 +1228,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void SplitItem(uint16 src, uint16 dst, uint32 count); void SwapItem(uint16 src, uint16 dst); void AddItemToBuyBackSlot(Item* pItem); + void SetBuybackPrice(uint32 slot, uint32 price) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BuybackPrice, slot), price); } + void SetBuybackTimestamp(uint32 slot, uint32 timestamp) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BuybackTimestamp, slot), timestamp); } Item* GetItemFromBuyBackSlot(uint32 slot); void RemoveItemFromBuyBackSlot(uint32 slot, bool del); void SendEquipError(InventoryResult msg, Item* item1 = nullptr, Item* item2 = nullptr, uint32 itemId = 0) const; @@ -1521,7 +1471,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(ACTIVE_PLAYER_FIELD_COINAGE); } + uint64 GetMoney() const { return m_activePlayerData->Coinage; } bool ModifyMoney(int64 amount, bool sendError = true); bool HasEnoughMoney(uint64 amount) const { return (GetMoney() >= amount); } bool HasEnoughMoney(int64 amount) const; @@ -1537,7 +1487,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> Player* GetSelectedPlayer() const; void SetTarget(ObjectGuid const& /*guid*/) override { } /// Used for serverside target changes, does not apply to players - void SetSelection(ObjectGuid const& guid) { SetGuidValue(UNIT_FIELD_TARGET, guid); } + void SetSelection(ObjectGuid const& guid) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Target), guid); } uint32 GetComboPoints() const { return uint32(GetPower(POWER_COMBO_POINTS)); } void AddComboPoints(int8 count, Spell* spell = nullptr); @@ -1602,6 +1552,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void LearnSpellHighestRank(uint32 spellid); void AddTemporarySpell(uint32 spellId); void RemoveTemporarySpell(uint32 spellId); + void SetOverrideSpellsId(int32 overrideSpellsId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::OverrideSpellsID), overrideSpellsId); } void AddOverrideSpell(uint32 overridenSpellId, uint32 newSpellId); void RemoveOverrideSpell(uint32 overridenSpellId, uint32 newSpellId); void LearnSpecializationSpells(); @@ -1613,16 +1564,16 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> std::string GetGuildName() const; // Loot Spec - void SetLootSpecId(uint32 id) { SetUInt32Value(ACTIVE_PLAYER_FIELD_LOOT_SPEC_ID, id); } - uint32 GetLootSpecId() const { return GetUInt32Value(ACTIVE_PLAYER_FIELD_LOOT_SPEC_ID); } + void SetLootSpecId(uint32 id) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::LootSpecID), id); } + uint32 GetLootSpecId() const { return m_activePlayerData->LootSpecID; } // Talents uint32 GetTalentResetCost() const { return _specializationInfo.ResetTalentsCost; } void SetTalentResetCost(uint32 cost) { _specializationInfo.ResetTalentsCost = cost; } time_t GetTalentResetTime() const { return _specializationInfo.ResetTalentsTime; } void SetTalentResetTime(time_t time_) { _specializationInfo.ResetTalentsTime = time_; } - uint32 GetPrimarySpecialization() const { return _specializationInfo.PrimarySpecialization; } - void SetPrimarySpecialization(uint32 spec) { _specializationInfo.PrimarySpecialization = spec; } + uint32 GetPrimarySpecialization() const { return m_playerData->CurrentSpecID; } + void SetPrimarySpecialization(uint32 spec) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::CurrentSpecID), spec); } uint8 GetActiveTalentGroup() const { return _specializationInfo.ActiveGroup; } void SetActiveTalentGroup(uint8 group){ _specializationInfo.ActiveGroup = group; } uint32 GetDefaultSpecId() const; @@ -1660,8 +1611,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> std::vector<uint32>& GetGlyphs(uint8 spec) { return _specializationInfo.Glyphs[spec]; } ActionButtonList const& GetActionButtons() const { return m_actionButtons; } - uint32 GetFreePrimaryProfessionPoints() const { return GetUInt32Value(ACTIVE_PLAYER_FIELD_CHARACTER_POINTS); } - void SetFreePrimaryProfessions(uint16 profs) { SetUInt32Value(ACTIVE_PLAYER_FIELD_CHARACTER_POINTS, profs); } + uint32 GetFreePrimaryProfessionPoints() const { return m_activePlayerData->CharacterPoints; } + void SetFreePrimaryProfessions(uint16 profs) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::CharacterPoints), profs); } void InitPrimaryProfessions(); PlayerSpellMap const& GetSpellMap() const { return m_spells; } @@ -1710,6 +1661,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void SendInitialActionButtons() const { SendActionButtons(0); } void SendActionButtons(uint32 state) const; bool IsActionButtonDataValid(uint8 button, uint32 action, uint8 type) const; + void SetMultiActionBars(uint8 mask) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::MultiActionBars), mask); } PvPInfo pvpInfo; void UpdatePvPState(bool onlyFFA = false); @@ -1731,6 +1683,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void UpdateDuelFlag(time_t currTime); void CheckDuelDistance(time_t currTime); void DuelComplete(DuelCompleteType type); + void SetDuelArbiter(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::DuelArbiter), guid); } + void SetDuelTeam(uint32 duelTeam) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::DuelTeam), duelTeam); } bool IsGroupVisibleFor(Player const* p) const; bool IsInSameGroupWith(Player const* p) const; @@ -1741,12 +1695,12 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void SendUpdateToOutOfRangeGroupMembers(); void SetInGuild(ObjectGuid::LowType guildId); - void SetGuildRank(uint8 rankId) { SetUInt32Value(PLAYER_GUILDRANK, rankId); } - uint8 GetGuildRank() const { return uint8(GetUInt32Value(PLAYER_GUILDRANK)); } - void SetGuildLevel(uint32 level) { SetUInt32Value(PLAYER_GUILDLEVEL, level); } - uint32 GetGuildLevel() const { return GetUInt32Value(PLAYER_GUILDLEVEL); } + void SetGuildRank(uint8 rankId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::GuildRankID), rankId); } + uint8 GetGuildRank() const { return uint8(m_playerData->GuildRankID); } + void SetGuildLevel(uint32 level) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::GuildLevel), level); } + uint32 GetGuildLevel() const { return m_playerData->GuildLevel; } void SetGuildIdInvited(ObjectGuid::LowType GuildId) { m_GuildIdInvited = GuildId; } - ObjectGuid::LowType GetGuildId() const { return GetUInt64Value(UNIT_FIELD_GUILD_GUID); /* return only lower part */ } + ObjectGuid::LowType GetGuildId() const { return m_unitData->GuildGUID->GetCounter(); /* return only lower part */ } Guild* GetGuild(); Guild const* GetGuild() const; static ObjectGuid::LowType GetGuildIdFromDB(ObjectGuid guid); @@ -1759,11 +1713,11 @@ 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(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); } + uint32 GetArenaTeamId(uint8 /*slot*/) const { return 0; } + uint32 GetArenaPersonalRating(uint8 slot) const { return m_activePlayerData->PvpInfo[slot].Rating; } void SetArenaTeamIdInvited(uint32 ArenaTeamId) { m_ArenaTeamIdInvited = ArenaTeamId; } uint32 GetArenaTeamIdInvited() const { return m_ArenaTeamIdInvited; } - uint32 GetRBGPersonalRating() const { return 0; } + uint32 GetRBGPersonalRating() const { return m_activePlayerData->PvpInfo[3].Rating; } Difficulty GetDifficultyID(MapEntry const* mapEntry) const; Difficulty GetDungeonDifficultyID() const { return m_dungeonDifficulty; } @@ -1787,6 +1741,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> bool UpdateStats(Stats stat) override; bool UpdateAllStats() override; void ApplySpellPenetrationBonus(int32 amount, bool apply); + void ApplyModTargetResistance(int32 mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModTargetResistance), mod, apply); } + void ApplyModTargetPhysicalResistance(int32 mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModTargetPhysicalResistance), mod, apply); } void UpdateResistances(uint32 school) override; void UpdateArmor() override; void UpdateMaxHealth() override; @@ -1795,6 +1751,9 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void UpdateAttackPowerAndDamage(bool ranged = false) override; void ApplySpellPowerBonus(int32 amount, bool apply); void UpdateSpellDamageAndHealingBonus(); + void ApplyModDamageDonePos(SpellSchools school, int32 mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModDamageDonePos, school), mod, apply); } + void ApplyModDamageDoneNeg(SpellSchools school, int32 mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModDamageDoneNeg, school), mod, apply); } + void ApplyModDamageDonePercent(SpellSchools school, float pct, bool apply) { ApplyPercentModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModDamageDonePercent, school), pct, apply); } void ApplyRatingMod(CombatRating cr, int32 value, bool apply); void UpdateRating(CombatRating cr); void UpdateAllRatings(); @@ -1832,8 +1791,10 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void UpdateManaRegen(); void UpdateAllRunesRegen(); - ObjectGuid const& GetLootGUID() const { return GetGuidValue(PLAYER_LOOT_TARGET_GUID); } - void SetLootGUID(ObjectGuid const& guid) { SetGuidValue(PLAYER_LOOT_TARGET_GUID, guid); } + void SetPetSpellPower(uint32 spellPower) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::PetSpellPower), spellPower); } + + ObjectGuid const& GetLootGUID() const { return m_playerData->LootTargetGUID; } + void SetLootGUID(ObjectGuid const& guid) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::LootTargetGUID), guid); } ObjectGuid GetLootWorldObjectGUID(ObjectGuid const& lootObjectGuid) const; void RemoveAELootedObject(ObjectGuid const& lootObjectGuid); bool HasLootWorldObjectGUID(ObjectGuid const& lootWorldObjectGuid) const; @@ -1844,7 +1805,12 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> WorldSession* GetSession() const { return m_session; } void BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) const override; + UF::UpdateFieldFlag GetUpdateFieldFlagsFor(Player const* target) const override; + void BuildValuesCreate(ByteBuffer* data, Player const* target) const override; + void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override; + void BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override; void DestroyForPlayer(Player* target) const override; + void ClearUpdateMask(bool remove) override; // notifiers void SendAttackSwingCantAttack() const; @@ -1906,6 +1872,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> typedef std::list<Channel*> JoinedChannelsList; JoinedChannelsList const& GetJoinedChannels() const { return m_channels; } + void InitializeSkillFields(); void SetSkill(uint16 id, uint16 step, uint16 newVal, uint16 maxVal); uint16 GetMaxSkillValue(uint32 skill) const; // max + perm. bonus + temp bonus uint16 GetPureMaxSkillValue(uint32 skill) const; // max @@ -1918,6 +1885,13 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> bool HasSkill(uint32 skill) const; void LearnSkillRewardedSpells(uint32 skillId, uint32 skillValue); int32 FindProfessionSlotFor(uint32 skillId) const; + void SetSkillLineId(uint32 pos, uint16 skillLineId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Skill).ModifyValue(&UF::SkillInfo::SkillLineID, pos), skillLineId); } + void SetSkillStep(uint32 pos, uint16 step) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Skill).ModifyValue(&UF::SkillInfo::SkillStep, pos), step); }; + void SetSkillRank(uint32 pos, uint16 rank) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Skill).ModifyValue(&UF::SkillInfo::SkillRank, pos), rank); } + void SetSkillStartingRank(uint32 pos, uint16 starting) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Skill).ModifyValue(&UF::SkillInfo::SkillStartingRank, pos), starting); } + void SetSkillMaxRank(uint32 pos, uint16 max) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Skill).ModifyValue(&UF::SkillInfo::SkillMaxRank, pos), max); } + void SetSkillTempBonus(uint32 pos, uint16 bonus) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Skill).ModifyValue(&UF::SkillInfo::SkillTempBonus, pos), bonus); } + void SetSkillPermBonus(uint32 pos, uint16 bonus) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Skill).ModifyValue(&UF::SkillInfo::SkillPermBonus, pos), bonus); } WorldLocation& GetTeleportDest() { return m_teleport_dest; } bool IsBeingTeleported() const { return mSemaphoreTeleport_Near || mSemaphoreTeleport_Far; } @@ -1929,6 +1903,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void ProcessDelayedOperations(); void CheckAreaExploreAndOutdoor(void); + void AddExploredZones(uint32 pos, uint64 mask) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ExploredZones, pos), mask); } + void RemoveExploredZones(uint32 pos, uint64 mask) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ExploredZones, pos), mask); } static uint32 TeamForRace(uint8 race); static TeamId TeamIdForRace(uint8 race); @@ -1966,6 +1942,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> // TODO: Properly implement correncies as of Cataclysm void UpdateHonorFields(); bool RewardHonor(Unit* victim, uint32 groupsize, int32 honor = -1, bool pvptoken = false); + void ResetHonorStats(); uint32 GetMaxPersonalArenaRatingRequirement(uint32 minarenaslot) const; // duel health and mana reset methods @@ -1974,7 +1951,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void RestoreHealthAfterDuel() { SetHealth(healthBeforeDuel); } void RestoreManaAfterDuel() { SetPower(POWER_MANA, manaBeforeDuel); } - uint32 GetHonorLevel() const { return GetUInt32Value(PLAYER_FIELD_HONOR_LEVEL); } + uint32 GetHonorLevel() const { return m_playerData->HonorLevel; } void AddHonorXP(uint32 xp); void SetHonorLevel(uint8 honorLevel); bool IsMaxHonorLevel() const { return GetHonorLevel() == PLAYER_MAX_HONOR_LEVEL; } @@ -1986,7 +1963,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void RewardPlayerWithRewardPack(RewardPackEntry const* rewardPackEntry); void SetDrunkValue(uint8 newDrunkValue, uint32 itemId = 0); - uint8 GetDrunkValue() const { return GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_INEBRIATION); } + uint8 GetDrunkValue() const { return m_playerData->Inebriation; } static DrunkenState GetDrunkenstateByValue(uint8 value); uint32 GetDeathTimer() const { return m_deathTimer; } @@ -1995,7 +1972,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(ACTIVE_PLAYER_FIELD_SHIELD_BLOCK); } + uint32 GetBlockPercent() const override { return m_activePlayerData->ShieldBlock; } bool CanParry() const { return m_canParry; } void SetCanParry(bool value); bool CanBlock() const { return m_canBlock; } @@ -2284,7 +2261,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void SetMap(Map* map) override; void ResetMap() override; - bool isAllowedToLoot(const Creature* creature); + bool isAllowedToLoot(const Creature* creature) const; DeclinedName const* GetDeclinedNames() const { return m_declinedname; } uint8 GetRunesState() const; @@ -2308,6 +2285,8 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> bool HasTitle(uint32 bitIndex) const; bool HasTitle(CharTitlesEntry const* title) const; void SetTitle(CharTitlesEntry const* title, bool lost = false); + void SetChosenTitle(int32 title) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PlayerTitle), title); } + void SetKnownTitles(uint32 index, uint64 mask) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::KnownTitles, index), mask); } //bool isActiveObject() const { return true; } bool CanSeeSpellClickOn(Creature const* creature) const; @@ -2337,9 +2316,9 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> std::string GetCoordsMapAreaAndZoneString() const; // Void Storage - bool IsVoidStorageUnlocked() const { return HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_VOID_UNLOCKED); } - void UnlockVoidStorage() { SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_VOID_UNLOCKED); } - void LockVoidStorage() { RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_VOID_UNLOCKED); } + bool IsVoidStorageUnlocked() const { return HasPlayerFlag(PLAYER_FLAGS_VOID_UNLOCKED); } + void UnlockVoidStorage() { AddPlayerFlag(PLAYER_FLAGS_VOID_UNLOCKED); } + void LockVoidStorage() { RemovePlayerFlag(PLAYER_FLAGS_VOID_UNLOCKED); } uint8 GetNextVoidStorageFreeSlot() const; uint8 GetNumOfVoidStorageFreeSlots() const; uint8 AddVoidStorageItem(VoidStorageItem&& item); @@ -2359,11 +2338,107 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> SceneMgr& GetSceneMgr() { return m_sceneMgr; } RestMgr& GetRestMgr() const { return *_restMgr; } + void SetRestState(RestTypes type, PlayerRestState state) + { + SetUpdateFieldValue(m_values + .ModifyValue(&Player::m_activePlayerData) + .ModifyValue(&UF::ActivePlayerData::RestInfo, type) + .ModifyValue(&UF::RestInfo::StateID), state); + } + void SetRestThreshold(RestTypes type, uint32 threshold) + { + SetUpdateFieldValue(m_values + .ModifyValue(&Player::m_activePlayerData) + .ModifyValue(&UF::ActivePlayerData::RestInfo, type) + .ModifyValue(&UF::RestInfo::Threshold), threshold); + } void SendPlayerChoice(ObjectGuid sender, int32 choiceId); bool MeetPlayerCondition(uint32 conditionId) const; + bool HasPlayerFlag(PlayerFlags flags) const { return (*m_playerData->PlayerFlags & flags) != 0; } + void AddPlayerFlag(PlayerFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PlayerFlags), flags); } + void RemovePlayerFlag(PlayerFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PlayerFlags), flags); } + void SetPlayerFlags(PlayerFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PlayerFlags), flags); } + + bool HasPlayerFlagEx(PlayerFlagsEx flags) const { return (*m_playerData->PlayerFlagsEx & flags) != 0; } + void AddPlayerFlagEx(PlayerFlagsEx flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PlayerFlagsEx), flags); } + void RemovePlayerFlagEx(PlayerFlagsEx flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PlayerFlagsEx), flags); } + void SetPlayerFlagsEx(PlayerFlagsEx flags) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PlayerFlagsEx), flags); } + + void SetSkinId(uint8 skinId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::SkinID), skinId); } + void SetFaceId(uint8 faceId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::FaceID), faceId); } + void SetHairStyleId(uint8 hairStyleId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::HairStyleID), hairStyleId); } + void SetHairColorId(uint8 hairColorId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::HairColorID), hairColorId); } + void SetFacialHairStyleId(uint8 facialHairStyleId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::FacialHairStyleID), facialHairStyleId); } + void SetNativeSex(uint8 sex) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::NativeSex), sex); } + void SetPvpTitle(uint8 pvpTitle) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::PvpTitle), pvpTitle); } + void SetArenaFaction(uint8 arenaFaction) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::ArenaFaction), arenaFaction); } + void ApplyModFakeInebriation(int32 mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::FakeInebriation), mod, apply); } + void SetVirtualPlayerRealm(uint32 virtualRealmAddress) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::VirtualPlayerRealm), virtualRealmAddress); } + void SetCustomDisplayOption(uint32 slot, uint8 customDisplayOption) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::CustomDisplayOption, slot), customDisplayOption); } + + void AddHeirloom(int32 itemId, uint32 flags) + { + AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Heirlooms)) = itemId; + AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::HeirloomFlags)) = flags; + } + void SetHeirloom(uint32 slot, int32 itemId) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Heirlooms, slot), itemId); } + void SetHeirloomFlags(uint32 slot, uint32 flags) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::HeirloomFlags, slot), flags); } + + void AddToy(int32 itemId, uint32 flags) + { + AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Toys)) = itemId; + AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ToyFlags)) = flags; + } + + void AddTransmogBlock(uint32 blockValue) { AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Transmog)) = blockValue; } + void AddTransmogFlag(uint32 slot, uint32 flag) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Transmog, slot), flag); } + + void AddConditionalTransmog(uint32 itemModifiedAppearanceId) { AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ConditionalTransmog)) = itemModifiedAppearanceId; } + void RemoveConditionalTransmog(uint32 itemModifiedAppearanceId) + { + int32 index = m_activePlayerData->ConditionalTransmog.FindIndex(itemModifiedAppearanceId); + if (index >= 0) + RemoveDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ConditionalTransmog), uint32(index)); + } + void AddSelfResSpell(int32 spellId) { AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::SelfResSpells)) = spellId; } + void RemoveSelfResSpell(int32 spellId) + { + int32 index = m_activePlayerData->SelfResSpells.FindIndex(spellId); + if (index >= 0) + RemoveDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::SelfResSpells), uint32(index)); + } + void ClearSelfResSpell() { ClearDynamicUpdateFieldValues(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::SelfResSpells)); } + + void SetSummonedBattlePetGUID(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::SummonedBattlePetGUID), guid); } + + void AddTrackCreatureFlag(uint32 flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TrackCreatureMask), flags); } + void RemoveTrackCreatureFlag(uint32 flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TrackCreatureMask), flags); } + + void AddTrackResourceFlag(uint32 index, uint32 flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TrackResourceMask, index), flags); } + void RemoveTrackResourceFlag(uint32 index, uint32 flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TrackResourceMask, index), flags); } + + void SetVersatilityBonus(float value) { SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::VersatilityBonus), value); } + + void ApplyModOverrideSpellPowerByAPPercent(float mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::OverrideSpellPowerByAPPercent), mod, apply); } + + void ApplyModOverrideAPBySpellPowerPercent(float mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::OverrideAPBySpellPowerPercent), mod, apply); } + + bool HasPlayerLocalFlag(PlayerLocalFlags flags) const { return (*m_activePlayerData->LocalFlags & flags) != 0; } + void AddPlayerLocalFlag(PlayerLocalFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::LocalFlags), flags); } + void RemovePlayerLocalFlag(PlayerLocalFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::LocalFlags), flags); } + void SetPlayerLocalFlags(PlayerLocalFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::LocalFlags), flags); } + + void SetWatchedFactionIndex(int32 index) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::WatchedFactionIndex), index); } + + void AddAuraVision(PlayerFieldByte2Flags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::AuraVision), flags); } + void RemoveAuraVision(PlayerFieldByte2Flags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::AuraVision), flags); } + + UF::UpdateField<UF::PlayerData, 0, TYPEID_PLAYER> m_playerData; + UF::UpdateField<UF::ActivePlayerData, 0, TYPEID_ACTIVE_PLAYER> m_activePlayerData; + protected: // Gamemaster whisper whitelist GuidList WhisperList; diff --git a/src/server/game/Entities/Player/RestMgr.cpp b/src/server/game/Entities/Player/RestMgr.cpp index 32e5496c285..32ef7f7dfdf 100644 --- a/src/server/game/Entities/Player/RestMgr.cpp +++ b/src/server/game/Entities/Player/RestMgr.cpp @@ -32,7 +32,7 @@ void RestMgr::SetRestBonus(RestTypes restType, float restBonus) { uint8 rest_rested_offset; uint8 rest_state_offset; - uint16 next_level_xp_field; + int32 next_level_xp; bool affectedByRaF = false; switch (restType) @@ -44,7 +44,7 @@ void RestMgr::SetRestBonus(RestTypes restType, float restBonus) rest_rested_offset = REST_RESTED_XP; rest_state_offset = REST_STATE_XP; - next_level_xp_field = ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP; + next_level_xp = _player->m_activePlayerData->NextLevelXP; affectedByRaF = true; break; case REST_TYPE_HONOR: @@ -54,35 +54,39 @@ void RestMgr::SetRestBonus(RestTypes restType, float restBonus) rest_rested_offset = REST_RESTED_HONOR; rest_state_offset = REST_STATE_HONOR; - next_level_xp_field = ACTIVE_PLAYER_FIELD_HONOR_NEXT_LEVEL; + next_level_xp = _player->m_activePlayerData->HonorNextLevel; break; default: return; } + float rest_bonus_max = float(next_level_xp) * 1.5f / 2; + if (restBonus < 0) restBonus = 0; - float rest_bonus_max = float(_player->GetUInt32Value(next_level_xp_field)) * 1.5f / 2; - if (restBonus > rest_bonus_max) - _restBonus[restType] = rest_bonus_max; - else - _restBonus[restType] = restBonus; + restBonus = rest_bonus_max; + + _restBonus[restType] = restBonus; + + uint32 oldBonus = uint32(_restBonus[restType]); + if (oldBonus == uint32(restBonus)) + return; // update data for client if (affectedByRaF && _player->GetsRecruitAFriendBonus(true) && (_player->GetSession()->IsARecruiter() || _player->GetSession()->GetRecruiterId() != 0)) - _player->SetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + rest_state_offset, REST_STATE_RAF_LINKED); + _player->SetRestState(restType, REST_STATE_RAF_LINKED); else { if (_restBonus[restType] > 10) - _player->SetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + rest_state_offset, REST_STATE_RESTED); + _player->SetRestState(restType, REST_STATE_RESTED); else if (_restBonus[restType] <= 1) - _player->SetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + rest_state_offset, REST_STATE_NOT_RAF_LINKED); + _player->SetRestState(restType, REST_STATE_NOT_RAF_LINKED); } // RestTickUpdate - _player->SetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + rest_rested_offset, uint32(_restBonus[restType])); + _player->SetRestThreshold(restType, uint32(_restBonus[restType])); } void RestMgr::AddRestBonus(RestTypes restType, float restBonus) @@ -103,7 +107,7 @@ void RestMgr::SetRestFlag(RestFlag restFlag, uint32 triggerID) if (!oldRestMask && _restFlagMask) // only set flag/time on the first rest state { _restTime = time(nullptr); - _player->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING); + _player->AddPlayerFlag(PLAYER_FLAGS_RESTING); } if (triggerID) @@ -118,7 +122,7 @@ void RestMgr::RemoveRestFlag(RestFlag restFlag) if (oldRestMask && !_restFlagMask) // only remove flag/time on the last rest state remove { _restTime = 0; - _player->RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING); + _player->RemovePlayerFlag(PLAYER_FLAGS_RESTING); } } @@ -153,8 +157,8 @@ void RestMgr::Update(time_t now) void RestMgr::LoadRestBonus(RestTypes restType, PlayerRestState state, float restBonus) { _restBonus[restType] = restBonus; - _player->SetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + restType * 2, state); - _player->SetUInt32Value(ACTIVE_PLAYER_FIELD_REST_INFO + restType * 2 + 1, uint32(restBonus)); + _player->SetRestState(restType, state); + _player->SetRestThreshold(restType, uint32(restBonus)); } float RestMgr::CalcExtraPerSec(RestTypes restType, float bubble) const @@ -162,9 +166,9 @@ float RestMgr::CalcExtraPerSec(RestTypes restType, float bubble) const switch (restType) { case REST_TYPE_HONOR: - return float(_player->GetUInt32Value(ACTIVE_PLAYER_FIELD_HONOR_NEXT_LEVEL)) / 72000.0f * bubble; + return float(_player->m_activePlayerData->HonorNextLevel) / 72000.0f * bubble; case REST_TYPE_XP: - return float(_player->GetUInt32Value(ACTIVE_PLAYER_FIELD_NEXT_LEVEL_XP)) / 72000.0f * bubble; + return float(_player->m_activePlayerData->NextLevelXP) / 72000.0f * bubble; default: return 0.0f; } diff --git a/src/server/game/Entities/Totem/Totem.cpp b/src/server/game/Entities/Totem/Totem.cpp index 34dfabb65e9..2c17b7fbfb3 100644 --- a/src/server/game/Entities/Totem/Totem.cpp +++ b/src/server/game/Entities/Totem/Totem.cpp @@ -62,12 +62,12 @@ void Totem::InitStats(uint32 duration) data.Totem = GetGUID(); data.Slot = m_Properties->Slot - SUMMON_SLOT_TOTEM; data.Duration = duration; - data.SpellID = GetUInt32Value(UNIT_CREATED_BY_SPELL); + data.SpellID = m_unitData->CreatedBySpell; owner->SendDirectMessage(data.Write()); } // set display id depending on caster's race - if (uint32 totemDisplayId = sSpellMgr->GetModelForTotem(GetUInt32Value(UNIT_CREATED_BY_SPELL), owner->getRace())) + if (uint32 totemDisplayId = sSpellMgr->GetModelForTotem(m_unitData->CreatedBySpell, owner->getRace())) SetDisplayId(totemDisplayId); } @@ -121,7 +121,7 @@ void Totem::UnSummon(uint32 msTime) { owner->SendAutoRepeatCancel(this); - if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(GetUInt32Value(UNIT_CREATED_BY_SPELL))) + if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(m_unitData->CreatedBySpell)) GetSpellHistory()->SendCooldownEvent(spell, 0, nullptr, false); if (Group* group = owner->GetGroup()) diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index 13b02608c10..973082b2252 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -90,7 +90,7 @@ bool Transport::Create(ObjectGuid::LowType guidlow, uint32 entry, uint32 mapid, if (m_goTemplateAddon) { SetFaction(m_goTemplateAddon->faction); - SetUInt32Value(GAMEOBJECT_FLAGS, m_goTemplateAddon->flags); + SetFlags(GameObjectFlags(m_goTemplateAddon->flags)); } m_goValue.Transport.PathProgress = 0; @@ -472,7 +472,7 @@ TempSummon* Transport::SummonPassenger(uint32 entry, Position const& pos, TempSu PhasingHandler::InheritPhaseShift(summon, summoner ? static_cast<WorldObject*>(summoner) : static_cast<WorldObject*>(this)); - summon->SetUInt32Value(UNIT_CREATED_BY_SPELL, spellId); + summon->SetCreatedBySpell(spellId); summon->SetTransport(this); summon->m_movementInfo.transport.guid = GetGUID(); diff --git a/src/server/game/Entities/Transport/Transport.h b/src/server/game/Entities/Transport/Transport.h index 07ce2ad940c..92861655ebb 100644 --- a/src/server/game/Entities/Transport/Transport.h +++ b/src/server/game/Entities/Transport/Transport.h @@ -80,8 +80,8 @@ class TC_GAME_API Transport : public GameObject, public TransportBase TransportBase::CalculatePassengerOffset(x, y, z, o, GetPositionX(), GetPositionY(), GetPositionZ(), GetOrientation()); } - uint32 GetTransportPeriod() const override { return GetUInt32Value(GAMEOBJECT_LEVEL); } - void SetPeriod(uint32 period) { SetUInt32Value(GAMEOBJECT_LEVEL, period); } + uint32 GetTransportPeriod() const override { return m_gameObjectData->Level; } + void SetPeriod(uint32 period) { SetLevel(period); } uint32 GetTimer() const { return GetGOValue()->Transport.PathProgress; } KeyFrameVec const& GetKeyFrames() const { return _transportInfo->keyFrames; } diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index 998edbdbbee..c228b2a5a3c 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -74,16 +74,16 @@ void Unit::UpdateDamagePhysical(WeaponAttackType attType) { case BASE_ATTACK: default: - SetStatFloatValue(UNIT_FIELD_MINDAMAGE, minDamage); - SetStatFloatValue(UNIT_FIELD_MAXDAMAGE, maxDamage); + SetUpdateFieldStatValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MinDamage), minDamage); + SetUpdateFieldStatValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MaxDamage), maxDamage); break; case OFF_ATTACK: - SetStatFloatValue(UNIT_FIELD_MINOFFHANDDAMAGE, minDamage); - SetStatFloatValue(UNIT_FIELD_MAXOFFHANDDAMAGE, maxDamage); + SetUpdateFieldStatValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MinOffHandDamage), minDamage); + SetUpdateFieldStatValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MaxOffHandDamage), maxDamage); break; case RANGED_ATTACK: - SetStatFloatValue(UNIT_FIELD_MINRANGEDDAMAGE, minDamage); - SetStatFloatValue(UNIT_FIELD_MAXRANGEDDAMAGE, maxDamage); + SetUpdateFieldStatValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MinRangedDamage), minDamage); + SetUpdateFieldStatValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MaxRangedDamage), maxDamage); break; } } @@ -160,9 +160,9 @@ void Player::ApplySpellPowerBonus(int32 amount, bool apply) apply = _ModifyUInt32(apply, m_baseSpellPower, amount); // For speed just update for client - ApplyModUInt32Value(ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_POS, amount, apply); + ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModHealingDonePos), amount, apply); for (int i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i) - ApplyModUInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + i, amount, apply); + ApplyModDamageDonePos(SpellSchools(i), amount, apply); if (HasAuraType(SPELL_AURA_OVERRIDE_ATTACK_POWER_BY_SP_PCT)) { @@ -176,18 +176,20 @@ void Player::UpdateSpellDamageAndHealingBonus() // Magic damage modifiers implemented in Unit::SpellDamageBonusDone // This information for client side use only // Get healing bonus for all schools - SetStatInt32Value(ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_POS, SpellBaseHealingBonusDone(SPELL_SCHOOL_MASK_ALL)); + SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModHealingDonePos), 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(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + i, std::accumulate(modDamageAuras.begin(), modDamageAuras.end(), 0, [i](int32 negativeMod, AuraEffect const* aurEff) + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModDamageDoneNeg, 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(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + i, SpellBaseDamageBonusDone(SpellSchoolMask(1 << i)) - GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_NEG + i)); + SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModDamageDonePos, i), + SpellBaseDamageBonusDone(SpellSchoolMask(1 << i)) - m_activePlayerData->ModDamageDoneNeg[i]); } if (HasAuraType(SPELL_AURA_OVERRIDE_ATTACK_POWER_BY_SP_PCT)) @@ -231,7 +233,7 @@ bool Player::UpdateAllStats() void Player::ApplySpellPenetrationBonus(int32 amount, bool apply) { - ApplyModInt32Value(ACTIVE_PLAYER_FIELD_MOD_TARGET_RESISTANCE, -amount, apply); + ApplyModTargetResistance(-amount, apply); m_spellPenetrationItemMod += apply ? amount : -amount; } @@ -330,17 +332,6 @@ void Player::UpdateAttackPowerAndDamage(bool ranged) ChrClassesEntry const* entry = sChrClassesStore.AssertEntry(getClass()); UnitMods unitMod = ranged ? UNIT_MOD_ATTACK_POWER_RANGED : UNIT_MOD_ATTACK_POWER; - uint16 index = UNIT_FIELD_ATTACK_POWER; - uint16 index_mod = UNIT_FIELD_ATTACK_POWER_MOD_POS; - uint16 index_mult = UNIT_FIELD_ATTACK_POWER_MULTIPLIER; - - if (ranged) - { - index = UNIT_FIELD_RANGED_ATTACK_POWER; - index_mod = UNIT_FIELD_RANGED_ATTACK_POWER_MOD_POS; - index_mult = UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER; - } - if (!HasAuraType(SPELL_AURA_OVERRIDE_ATTACK_POWER_BY_SP_PCT)) { if (!ranged) @@ -360,11 +351,11 @@ void Player::UpdateAttackPowerAndDamage(bool ranged) } else { - int32 minSpellPower = GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_POS); + int32 minSpellPower = m_activePlayerData->ModHealingDonePos; for (int i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i) - minSpellPower = std::min(minSpellPower, GetInt32Value(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_POS + i)); + minSpellPower = std::min(minSpellPower, m_activePlayerData->ModDamageDonePos[i]); - val2 = CalculatePct(float(minSpellPower), GetFloatValue(ACTIVE_PLAYER_FIELD_OVERRIDE_AP_BY_SPELL_POWER_PERCENT)); + val2 = CalculatePct(float(minSpellPower), *m_activePlayerData->OverrideAPBySpellPowerPercent); } SetModifierValue(unitMod, BASE_VALUE, val2); @@ -382,9 +373,18 @@ void Player::UpdateAttackPowerAndDamage(bool ranged) attPowerMod += int32(GetArmor() / (*iter)->GetAmount()); } - SetInt32Value(index, (uint32)base_attPower); //UNIT_FIELD_(RANGED)_ATTACK_POWER field - SetInt32Value(index_mod, (uint32)attPowerMod); //UNIT_FIELD_(RANGED)_ATTACK_POWER_MOD_POS field - SetFloatValue(index_mult, attPowerMultiplier); //UNIT_FIELD_(RANGED)_ATTACK_POWER_MULTIPLIER field + if (ranged) + { + SetRangedAttackPower(int32(base_attPower)); + SetRangedAttackPowerModPos(int32(attPowerMod)); + SetRangedAttackPowerMultiplier(attPowerMultiplier); + } + else + { + SetAttackPower(int32(base_attPower)); + SetAttackPowerModPos(int32(attPowerMod)); + SetAttackPowerMultiplier(attPowerMultiplier); + } Pet* pet = GetPet(); //update pet's AP Guardian* guardian = GetGuardianPet(); @@ -485,47 +485,35 @@ void Player::UpdateBlockPercentage() if (sWorld->getBoolConfig(CONFIG_STATS_LIMITS_ENABLE)) value = value > sWorld->getFloatConfig(CONFIG_STATS_LIMITS_BLOCK) ? sWorld->getFloatConfig(CONFIG_STATS_LIMITS_BLOCK) : value; - - value = value < 0.0f ? 0.0f : value; } - SetStatFloatValue(ACTIVE_PLAYER_FIELD_BLOCK_PERCENTAGE, value); + SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::BlockPercentage), value); } void Player::UpdateCritPercentage(WeaponAttackType attType) { - BaseModGroup modGroup; - uint16 index; - CombatRating cr; + auto applyCritLimit = [](float value) + { + if (sWorld->getBoolConfig(CONFIG_STATS_LIMITS_ENABLE)) + value = value > sWorld->getFloatConfig(CONFIG_STATS_LIMITS_CRIT) ? sWorld->getFloatConfig(CONFIG_STATS_LIMITS_CRIT) : value; + return value; + }; switch (attType) { case OFF_ATTACK: - modGroup = OFFHAND_CRIT_PERCENTAGE; - index = ACTIVE_PLAYER_FIELD_OFFHAND_CRIT_PERCENTAGE; - cr = CR_CRIT_MELEE; + SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::OffhandCritPercentage), + applyCritLimit(GetTotalPercentageModValue(OFFHAND_CRIT_PERCENTAGE) + GetRatingBonusValue(CR_CRIT_MELEE))); break; case RANGED_ATTACK: - modGroup = RANGED_CRIT_PERCENTAGE; - index = ACTIVE_PLAYER_FIELD_RANGED_CRIT_PERCENTAGE; - cr = CR_CRIT_RANGED; + SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::RangedCritPercentage), + applyCritLimit(GetTotalPercentageModValue(RANGED_CRIT_PERCENTAGE) + GetRatingBonusValue(CR_CRIT_RANGED))); break; case BASE_ATTACK: default: - modGroup = CRIT_PERCENTAGE; - index = ACTIVE_PLAYER_FIELD_CRIT_PERCENTAGE; - cr = CR_CRIT_MELEE; + SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::CritPercentage), + applyCritLimit(GetTotalPercentageModValue(CRIT_PERCENTAGE) + GetRatingBonusValue(CR_CRIT_MELEE))); break; } - - float value = GetTotalPercentageModValue(modGroup) + GetRatingBonusValue(cr); - // Modify crit from weapon skill and maximized defense skill of same level victim difference - value += (int32(GetMaxSkillValueForLevel()) - int32(GetMaxSkillValueForLevel())) * 0.04f; - - if (sWorld->getBoolConfig(CONFIG_STATS_LIMITS_ENABLE)) - value = value > sWorld->getFloatConfig(CONFIG_STATS_LIMITS_CRIT) ? sWorld->getFloatConfig(CONFIG_STATS_LIMITS_CRIT) : value; - - value = value < 0.0f ? 0.0f : value; - SetStatFloatValue(index, value); } void Player::UpdateAllCritPercentages() @@ -545,15 +533,15 @@ void Player::UpdateMastery() { if (!CanUseMastery()) { - SetFloatValue(ACTIVE_PLAYER_FIELD_MASTERY, 0.0f); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Mastery), 0.0f); return; } float value = GetTotalAuraModifier(SPELL_AURA_MASTERY); value += GetRatingBonusValue(CR_MASTERY); - SetFloatValue(ACTIVE_PLAYER_FIELD_MASTERY, value); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Mastery), value); - ChrSpecializationEntry const* chrSpec = sChrSpecializationStore.LookupEntry(GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID)); + ChrSpecializationEntry const* chrSpec = sChrSpecializationStore.LookupEntry(GetPrimarySpecialization()); if (!chrSpec) return; @@ -578,8 +566,8 @@ void Player::UpdateMastery() void Player::UpdateVersatilityDamageDone() { - // No proof that CR_VERSATILITY_DAMAGE_DONE is allways = PLAYER_VERSATILITY - SetUInt32Value(ACTIVE_PLAYER_FIELD_VERSATILITY, GetUInt32Value(ACTIVE_PLAYER_FIELD_COMBAT_RATING + CR_VERSATILITY_DAMAGE_DONE)); + // No proof that CR_VERSATILITY_DAMAGE_DONE is allways = ActivePlayerData::Versatility + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::Versatility), m_activePlayerData->CombatRatings[CR_VERSATILITY_DAMAGE_DONE]); if (getClass() == CLASS_HUNTER) UpdateDamagePhysical(RANGED_ATTACK); @@ -596,7 +584,7 @@ void Player::UpdateHealingDonePercentMod() for (AuraEffect const* auraEffect : GetAuraEffectsByType(SPELL_AURA_MOD_HEALING_DONE_PERCENT)) AddPct(value, auraEffect->GetAmount()); - SetStatFloatValue(ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_PCT, value); + SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ModHealingDonePercent), value); } const float m_diminishing_k[MAX_CLASSES] = @@ -649,9 +637,8 @@ void Player::UpdateParryPercentage() if (sWorld->getBoolConfig(CONFIG_STATS_LIMITS_ENABLE)) value = value > sWorld->getFloatConfig(CONFIG_STATS_LIMITS_PARRY) ? sWorld->getFloatConfig(CONFIG_STATS_LIMITS_PARRY) : value; - value = value < 0.0f ? 0.0f : value; } - SetStatFloatValue(ACTIVE_PLAYER_FIELD_PARRY_PERCENTAGE, value); + SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ParryPercentage), value); } void Player::UpdateDodgePercentage() @@ -685,8 +672,7 @@ void Player::UpdateDodgePercentage() if (sWorld->getBoolConfig(CONFIG_STATS_LIMITS_ENABLE)) value = value > sWorld->getFloatConfig(CONFIG_STATS_LIMITS_DODGE) ? sWorld->getFloatConfig(CONFIG_STATS_LIMITS_DODGE) : value; - value = value < 0.0f ? 0.0f : value; - SetStatFloatValue(ACTIVE_PLAYER_FIELD_DODGE_PERCENTAGE, value); + SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::DodgePercentage), value); } void Player::UpdateSpellCritChance() @@ -700,13 +686,13 @@ void Player::UpdateSpellCritChance() crit += GetRatingBonusValue(CR_CRIT_SPELL); // Store crit value - SetFloatValue(ACTIVE_PLAYER_FIELD_SPELL_CRIT_PERCENTAGE1, crit); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::SpellCritPercentage), crit); } void Player::UpdateArmorPenetration(int32 amount) { // Store Rating Value - SetUInt32Value(ACTIVE_PLAYER_FIELD_COMBAT_RATING + CR_ARMOR_PENETRATION, amount); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::CombatRatings, CR_ARMOR_PENETRATION), amount); } void Player::UpdateMeleeHitChances() @@ -746,10 +732,10 @@ void Player::UpdateExpertise(WeaponAttackType attack) switch (attack) { case BASE_ATTACK: - SetUInt32Value(ACTIVE_PLAYER_FIELD_EXPERTISE, expertise); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::MainhandExpertise), expertise); break; case OFF_ATTACK: - SetUInt32Value(ACTIVE_PLAYER_FIELD_OFFHAND_EXPERTISE, expertise); + SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::OffhandExpertise), expertise); break; default: break; @@ -786,8 +772,8 @@ void Player::UpdateManaRegen() // Apply PCT bonus from SPELL_AURA_MOD_MANA_REGEN_PCT base_regen *= GetTotalAuraMultiplierByMiscValue(SPELL_AURA_MOD_MANA_REGEN_PCT, POWER_MANA); - SetStatFloatValue(UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER + manaIndex, base_regen); - SetStatFloatValue(UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER + manaIndex, base_regen); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerRegenFlatModifier, manaIndex), base_regen); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerRegenInterruptedFlatModifier, manaIndex), base_regen); } void Player::UpdateAllRunesRegen() @@ -802,8 +788,8 @@ void Player::UpdateAllRunesRegen() PowerTypeEntry const* runeEntry = sDB2Manager.GetPowerTypeEntry(POWER_RUNES); uint32 cooldown = GetRuneBaseCooldown(); - SetStatFloatValue(UNIT_FIELD_POWER_REGEN_FLAT_MODIFIER + runeIndex, float(1 * IN_MILLISECONDS) / float(cooldown) - runeEntry->RegenPeace); - SetStatFloatValue(UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER + runeIndex, float(1 * IN_MILLISECONDS) / float(cooldown) - runeEntry->RegenCombat); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerRegenFlatModifier, runeIndex), float(1 * IN_MILLISECONDS) / float(cooldown) - runeEntry->RegenPeace); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerRegenInterruptedFlatModifier, runeIndex), float(1 * IN_MILLISECONDS) / float(cooldown) - runeEntry->RegenCombat); } void Player::_ApplyAllStatBonuses() @@ -898,20 +884,19 @@ void Creature::UpdateAttackPowerAndDamage(bool ranged) { UnitMods unitMod = ranged ? UNIT_MOD_ATTACK_POWER_RANGED : UNIT_MOD_ATTACK_POWER; - uint16 index = UNIT_FIELD_ATTACK_POWER; - uint16 indexMulti = UNIT_FIELD_ATTACK_POWER_MULTIPLIER; + float baseAttackPower = GetModifierValue(unitMod, BASE_VALUE) * GetModifierValue(unitMod, BASE_PCT); + float attackPowerMultiplier = GetModifierValue(unitMod, TOTAL_PCT) - 1.0f; if (ranged) { - index = UNIT_FIELD_RANGED_ATTACK_POWER; - indexMulti = UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER; + SetRangedAttackPower(int32(baseAttackPower)); + SetRangedAttackPowerMultiplier(attackPowerMultiplier); + } + else + { + SetAttackPower(int32(baseAttackPower)); + SetAttackPowerMultiplier(attackPowerMultiplier); } - - float baseAttackPower = GetModifierValue(unitMod, BASE_VALUE) * GetModifierValue(unitMod, BASE_PCT); - float attackPowerMultiplier = GetModifierValue(unitMod, TOTAL_PCT) - 1.0f; - - SetInt32Value(index, uint32(baseAttackPower)); // UNIT_FIELD_(RANGED)_ATTACK_POWER - SetFloatValue(indexMulti, attackPowerMultiplier); // UNIT_FIELD_(RANGED)_ATTACK_POWER_MULTIPLIER // automatically update weapon damage after attack power modification if (ranged) @@ -1160,8 +1145,8 @@ void Guardian::UpdateAttackPowerAndDamage(bool ranged) else val = 2 * GetStat(STAT_STRENGTH) - 20.0f; - Unit* owner = GetOwner(); - if (owner && owner->GetTypeId() == TYPEID_PLAYER) + Player* owner = GetOwner() ? GetOwner()->ToPlayer() : nullptr; + if (owner) { if (IsHunterPet()) //hunter pets benefit from owner's attack power { @@ -1183,8 +1168,8 @@ void Guardian::UpdateAttackPowerAndDamage(bool ranged) //demons benefit from warlocks shadow or fire damage else if (IsPet()) { - 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 fire = owner->m_activePlayerData->ModDamageDonePos[SPELL_SCHOOL_FIRE] - owner->m_activePlayerData->ModDamageDoneNeg[SPELL_SCHOOL_FIRE]; + int32 shadow = owner->m_activePlayerData->ModDamageDonePos[SPELL_SCHOOL_SHADOW] - owner->m_activePlayerData->ModDamageDoneNeg[SPELL_SCHOOL_SHADOW]; int32 maximum = (fire > shadow) ? fire : shadow; if (maximum < 0) maximum = 0; @@ -1194,7 +1179,7 @@ void Guardian::UpdateAttackPowerAndDamage(bool ranged) //water elementals benefit from mage's frost damage else if (GetEntry() == ENTRY_WATER_ELEMENTAL) { - 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); + int32 frost = owner->m_activePlayerData->ModDamageDonePos[SPELL_SCHOOL_FROST] - owner->m_activePlayerData->ModDamageDoneNeg[SPELL_SCHOOL_FROST]; if (frost < 0) frost = 0; SetBonusDamage(int32(frost * 0.4f)); @@ -1207,10 +1192,8 @@ void Guardian::UpdateAttackPowerAndDamage(bool ranged) float base_attPower = GetModifierValue(unitMod, BASE_VALUE) * GetModifierValue(unitMod, BASE_PCT); float attPowerMultiplier = GetModifierValue(unitMod, TOTAL_PCT) - 1.0f; - //UNIT_FIELD_(RANGED)_ATTACK_POWER field - SetInt32Value(UNIT_FIELD_ATTACK_POWER, (int32)base_attPower); - //UNIT_FIELD_(RANGED)_ATTACK_POWER_MULTIPLIER field - SetFloatValue(UNIT_FIELD_ATTACK_POWER_MULTIPLIER, attPowerMultiplier); + SetAttackPower(int32(base_attPower)); + SetAttackPowerMultiplier(attPowerMultiplier); //automatically update weapon damage after attack power modification UpdateDamagePhysical(BASE_ATTACK); @@ -1222,19 +1205,19 @@ void Guardian::UpdateDamagePhysical(WeaponAttackType attType) return; float bonusDamage = 0.0f; - if (m_owner->GetTypeId() == TYPEID_PLAYER) + if (Player* playerOwner = m_owner->ToPlayer()) { //force of nature if (GetEntry() == ENTRY_TREANT) { - 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); + int32 spellDmg = playerOwner->m_activePlayerData->ModDamageDonePos[SPELL_SCHOOL_NATURE] - playerOwner->m_activePlayerData->ModDamageDoneNeg[SPELL_SCHOOL_NATURE]; if (spellDmg > 0) bonusDamage = spellDmg * 0.09f; } //greater fire elemental else if (GetEntry() == ENTRY_FIRE_ELEMENTAL) { - 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); + int32 spellDmg = playerOwner->m_activePlayerData->ModDamageDonePos[SPELL_SCHOOL_FIRE] - playerOwner->m_activePlayerData->ModDamageDoneNeg[SPELL_SCHOOL_FIRE]; if (spellDmg > 0) bonusDamage = spellDmg * 0.4f; } @@ -1255,13 +1238,13 @@ void Guardian::UpdateDamagePhysical(WeaponAttackType attType) float mindamage = ((base_value + weapon_mindamage) * base_pct + total_value) * total_pct; float maxdamage = ((base_value + weapon_maxdamage) * base_pct + total_value) * total_pct; - SetStatFloatValue(UNIT_FIELD_MINDAMAGE, mindamage); - SetStatFloatValue(UNIT_FIELD_MAXDAMAGE, maxdamage); + SetUpdateFieldStatValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MinDamage), mindamage); + SetUpdateFieldStatValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MaxDamage), maxdamage); } void Guardian::SetBonusDamage(int32 damage) { m_bonusSpellDamage = damage; - if (GetOwner()->GetTypeId() == TYPEID_PLAYER) - GetOwner()->SetUInt32Value(ACTIVE_PLAYER_FIELD_PET_SPELL_POWER, damage); + if (Player* playerOwner = GetOwner()->ToPlayer()) + playerOwner->SetPetSpellPower(damage); } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 7835d0e002a..f821acb2621 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -70,7 +70,6 @@ #include "TemporarySummon.h" #include "Totem.h" #include "Transport.h" -#include "UpdateFieldFlags.h" #include "Util.h" #include "Vehicle.h" #include "VehiclePackets.h" @@ -347,7 +346,11 @@ Unit::Unit(bool isWorldObject) : } for (uint8 i = 0; i < MAX_STATS; ++i) + { m_createStats[i] = 0.0f; + m_floatStatPosBuff[i] = 0.0f; + m_floatStatNegBuff[i] = 0.0f; + } m_attacking = nullptr; if (GetTypeId() == TYPEID_PLAYER) @@ -614,7 +617,7 @@ bool Unit::IsWithinBoundaryRadius(const Unit* obj) const if (!obj || !IsInMap(obj) || !IsInPhase(obj)) return false; - float objBoundaryRadius = std::max(obj->GetBoundaryRadius(), MIN_MELEE_REACH); + float objBoundaryRadius = std::max(obj->GetBoundingRadius(), MIN_MELEE_REACH); return IsInDist(obj, objBoundaryRadius); } @@ -1962,7 +1965,7 @@ void Unit::CalcHealAbsorb(HealInfo& healInfo) const void Unit::AttackerStateUpdate(Unit* victim, WeaponAttackType attType, bool extra) { - if (HasUnitState(UNIT_STATE_CANNOT_AUTOATTACK) || HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED)) + if (HasUnitState(UNIT_STATE_CANNOT_AUTOATTACK) || HasUnitFlag(UNIT_FLAG_PACIFIED)) return; if (!victim->IsAlive()) @@ -1977,7 +1980,7 @@ void Unit::AttackerStateUpdate(Unit* victim, WeaponAttackType attType, bool extr if (attType != BASE_ATTACK && attType != OFF_ATTACK) return; // ignore ranged case - if (GetTypeId() == TYPEID_UNIT && !HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED)) + if (GetTypeId() == TYPEID_UNIT && !HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED)) SetFacingToObject(victim); // update client side facing to face the target (prevents visual glitches when casting untargeted spells) // melee attack spell cast at main hand attack only - no normal melee dmg dealt @@ -2006,7 +2009,7 @@ void Unit::AttackerStateUpdate(Unit* victim, WeaponAttackType attType, bool extr void Unit::FakeAttackerStateUpdate(Unit* victim, WeaponAttackType attType /*= BASE_ATTACK*/) { - if (HasUnitState(UNIT_STATE_CANNOT_AUTOATTACK) || HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED)) + if (HasUnitState(UNIT_STATE_CANNOT_AUTOATTACK) || HasUnitFlag(UNIT_FLAG_PACIFIED)) return; if (!victim->IsAlive()) @@ -2021,7 +2024,7 @@ void Unit::FakeAttackerStateUpdate(Unit* victim, WeaponAttackType attType /*= BA if (attType != BASE_ATTACK && attType != OFF_ATTACK) return; // ignore ranged case - if (GetTypeId() == TYPEID_UNIT && !HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED)) + if (GetTypeId() == TYPEID_UNIT && !HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED)) SetFacingToObject(victim); // update client side facing to face the target (prevents visual glitches when casting untargeted spells) CalcDamageInfo damageInfo; @@ -2191,21 +2194,21 @@ uint32 Unit::CalculateDamage(WeaponAttackType attType, bool normalized, bool add switch (attType) { case RANGED_ATTACK: - minDamage = GetFloatValue(UNIT_FIELD_MINRANGEDDAMAGE); - maxDamage = GetFloatValue(UNIT_FIELD_MAXRANGEDDAMAGE); + minDamage = m_unitData->MinRangedDamage; + maxDamage = m_unitData->MaxRangedDamage; break; case BASE_ATTACK: - minDamage = GetFloatValue(UNIT_FIELD_MINDAMAGE); - maxDamage = GetFloatValue(UNIT_FIELD_MAXDAMAGE); + minDamage = m_unitData->MinDamage; + maxDamage = m_unitData->MaxRangedDamage; if (IsInFeralForm()) { - minDamage += GetFloatValue(UNIT_FIELD_MINOFFHANDDAMAGE); - maxDamage += GetFloatValue(UNIT_FIELD_MAXOFFHANDDAMAGE); + minDamage += m_unitData->MinOffHandDamage; + maxDamage += m_unitData->MaxOffHandDamage; } break; case OFF_ATTACK: - minDamage = GetFloatValue(UNIT_FIELD_MINOFFHANDDAMAGE); - maxDamage = GetFloatValue(UNIT_FIELD_MAXOFFHANDDAMAGE); + minDamage = m_unitData->MinOffHandDamage; + maxDamage = m_unitData->MaxOffHandDamage; break; default: break; @@ -2297,11 +2300,11 @@ bool Unit::CanUseAttackType(uint8 attacktype) const switch (attacktype) { case BASE_ATTACK: - return !HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISARMED); + return !HasUnitFlag(UNIT_FLAG_DISARMED); case OFF_ATTACK: - return !HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_DISARM_OFFHAND); + return !HasUnitFlag2(UNIT_FLAG2_DISARM_OFFHAND); case RANGED_ATTACK: - return !HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_DISARM_RANGED); + return !HasUnitFlag2(UNIT_FLAG2_DISARM_RANGED); default: return true; } @@ -2587,8 +2590,8 @@ 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(ACTIVE_PLAYER_FIELD_DODGE_PERCENTAGE); + if (Player const* playerVictim = victim->ToPlayer()) + chance = playerVictim->m_activePlayerData->DodgePercentage; else { if (!victim->IsTotem()) @@ -2632,7 +2635,7 @@ float Unit::GetUnitParryChance(WeaponAttackType attType, Unit const* victim) con tmpitem = playerVictim->GetWeaponForAttack(OFF_ATTACK, true); if (tmpitem) - chance = playerVictim->GetFloatValue(ACTIVE_PLAYER_FIELD_PARRY_PERCENTAGE); + chance = playerVictim->m_activePlayerData->ParryPercentage; } } else @@ -2681,7 +2684,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(ACTIVE_PLAYER_FIELD_BLOCK_PERCENTAGE); + chance = playerVictim->m_activePlayerData->BlockPercentage; } } else @@ -2703,18 +2706,18 @@ float Unit::GetUnitBlockChance(WeaponAttackType /*attType*/, Unit const* victim) float Unit::GetUnitCriticalChance(WeaponAttackType attackType, Unit const* victim) const { float chance = 0.0f; - if (GetTypeId() == TYPEID_PLAYER) + if (Player const* thisPlayer = ToPlayer()) { switch (attackType) { case BASE_ATTACK: - chance = GetFloatValue(ACTIVE_PLAYER_FIELD_CRIT_PERCENTAGE); + chance = thisPlayer->m_activePlayerData->CritPercentage; break; case OFF_ATTACK: - chance = GetFloatValue(ACTIVE_PLAYER_FIELD_OFFHAND_CRIT_PERCENTAGE); + chance = thisPlayer->m_activePlayerData->OffhandCritPercentage; break; case RANGED_ATTACK: - chance = GetFloatValue(ACTIVE_PLAYER_FIELD_RANGED_CRIT_PERCENTAGE); + chance = thisPlayer->m_activePlayerData->RangedCritPercentage; break; // Just for good manner default: @@ -4742,20 +4745,29 @@ int32 Unit::GetMaxNegativeAuraModifierByAffectMask(AuraType auratype, SpellInfo void Unit::InitStatBuffMods() { for (uint8 i = STAT_STRENGTH; i < MAX_STATS; ++i) - SetFloatValue(UNIT_FIELD_POSSTAT+i, 0); - for (uint8 i = STAT_STRENGTH; i < MAX_STATS; ++i) - SetFloatValue(UNIT_FIELD_NEGSTAT+i, 0); + { + m_floatStatPosBuff[i] = 0.0f; + m_floatStatNegBuff[i] = 0.0f; + UpdateStatBuffModForClient(Stats(i)); + } } void Unit::ApplyStatBuffMod(Stats stat, float val, bool apply) { - ApplyModSignedFloatValue((val > 0 ? UNIT_FIELD_POSSTAT+stat : UNIT_FIELD_NEGSTAT+stat), val, apply); + ApplyPercentModFloatVar((val > 0 ? m_floatStatPosBuff[stat] : m_floatStatNegBuff[stat]), val, apply); + UpdateStatBuffModForClient(stat); } void Unit::ApplyStatPercentBuffMod(Stats stat, float val, bool apply) { - ApplyPercentModFloatValue(UNIT_FIELD_POSSTAT+stat, val, apply); - ApplyPercentModFloatValue(UNIT_FIELD_NEGSTAT+stat, val, apply); + ApplyPercentModFloatVar(m_floatStatPosBuff[stat], val, apply); + ApplyPercentModFloatVar(m_floatStatNegBuff[stat], val, apply); +} + +void Unit::UpdateStatBuffModForClient(Stats stat) +{ + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::StatPosBuff, stat), int32(m_floatStatPosBuff[stat])); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::StatNegBuff, stat), int32(m_floatStatNegBuff[stat])); } void Unit::_RegisterDynObject(DynamicObject* dynObj) @@ -5141,12 +5153,12 @@ void Unit::SetPowerType(Powers new_powertype) if (GetPowerType() == new_powertype) return; - SetUInt32Value(UNIT_FIELD_DISPLAY_POWER, new_powertype); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::DisplayPower), new_powertype); - if (GetTypeId() == TYPEID_PLAYER) + if (Player* thisPlayer = ToPlayer()) { - if (ToPlayer()->GetGroup()) - ToPlayer()->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_POWER_TYPE); + if (thisPlayer->GetGroup()) + thisPlayer->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_POWER_TYPE); } /*else if (Pet* pet = ToCreature()->ToPet()) TODO 6.x { @@ -5273,9 +5285,9 @@ ReputationRank Unit::GetReactionTo(Unit const* target) const return *repRank; } - if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE)) + if (HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE)) { - if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE)) + if (target->HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE)) { if (selfPlayerOwner && targetPlayerOwner) { @@ -5302,7 +5314,7 @@ ReputationRank Unit::GetReactionTo(Unit const* target) const { if (FactionTemplateEntry const* targetFactionTemplateEntry = target->GetFactionTemplateEntry()) { - if (!selfPlayerOwner->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_IGNORE_REPUTATION)) + if (!selfPlayerOwner->HasUnitFlag2(UNIT_FLAG2_IGNORE_REPUTATION)) { if (FactionEntry const* targetFactionEntry = sFactionStore.LookupEntry(targetFactionTemplateEntry->Faction)) { @@ -5310,7 +5322,7 @@ ReputationRank Unit::GetReactionTo(Unit const* target) const { // check contested flags if (targetFactionTemplateEntry->Flags & FACTION_TEMPLATE_FLAG_CONTESTED_GUARD - && selfPlayerOwner->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_CONTESTED_PVP)) + && selfPlayerOwner->HasPlayerFlag(PLAYER_FLAGS_CONTESTED_PVP)) return REP_HOSTILE; // if faction has reputation, hostile state depends only from AtWar state @@ -5340,11 +5352,11 @@ ReputationRank Unit::GetFactionReactionTo(FactionTemplateEntry const* factionTem { // check contested flags if (factionTemplateEntry->Flags & FACTION_TEMPLATE_FLAG_CONTESTED_GUARD - && targetPlayerOwner->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_CONTESTED_PVP)) + && targetPlayerOwner->HasPlayerFlag(PLAYER_FLAGS_CONTESTED_PVP)) return REP_HOSTILE; if (ReputationRank const* repRank = targetPlayerOwner->GetReputationMgr().GetForcedRankIfAny(factionTemplateEntry)) return *repRank; - if (!target->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_IGNORE_REPUTATION)) + if (!target->HasUnitFlag2(UNIT_FLAG2_IGNORE_REPUTATION)) { if (FactionEntry const* factionEntry = sFactionStore.LookupEntry(factionTemplateEntry->Faction)) { @@ -5443,7 +5455,7 @@ bool Unit::Attack(Unit* victim, bool meleeAttack) if (GetTypeId() == TYPEID_PLAYER && IsMounted()) return false; - if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED)) + if (HasUnitFlag(UNIT_FLAG_PACIFIED)) return false; // nobody can attack GM in GM-mode @@ -5519,7 +5531,7 @@ bool Unit::Attack(Unit* victim, bool meleeAttack) ToCreature()->CallAssistance(); // Remove emote state - will be restored on creature reset - SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); + SetEmoteState(EMOTE_ONESHOT_NONE); } // delay offhand weapon attack to next attack time @@ -5629,11 +5641,12 @@ void Unit::RemoveAllAttackers() void Unit::ModifyAuraState(AuraStateType flag, bool apply) { + uint32 mask = 1 << (flag - 1); if (apply) { - if (!HasFlag(UNIT_FIELD_AURASTATE, 1<<(flag-1))) + if (!(*m_unitData->AuraState & mask)) { - SetFlag(UNIT_FIELD_AURASTATE, 1<<(flag-1)); + SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::AuraState), mask); if (GetTypeId() == TYPEID_PLAYER) { PlayerSpellMap const& sp_list = ToPlayer()->GetSpellMap(); @@ -5665,9 +5678,9 @@ void Unit::ModifyAuraState(AuraStateType flag, bool apply) } else { - if (HasFlag(UNIT_FIELD_AURASTATE, 1<<(flag-1))) + if (*m_unitData->AuraState & mask) { - RemoveFlag(UNIT_FIELD_AURASTATE, 1<<(flag-1)); + RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::AuraState), mask); Unit::AuraApplicationMap& tAuras = GetAppliedAuras(); for (Unit::AuraApplicationMap::iterator itr = tAuras.begin(); itr != tAuras.end();) @@ -5682,9 +5695,9 @@ void Unit::ModifyAuraState(AuraStateType flag, bool apply) } } -uint32 Unit::BuildAuraStateUpdateForTarget(Unit* target) const +uint32 Unit::BuildAuraStateUpdateForTarget(Unit const* target) const { - uint32 auraStates = GetUInt32Value(UNIT_FIELD_AURASTATE) &~(PER_CASTER_AURA_STATE_MASK); + uint32 auraStates = *m_unitData->AuraState & ~(PER_CASTER_AURA_STATE_MASK); for (AuraStateAurasMap::const_iterator itr = m_auraStateAuras.begin(); itr != m_auraStateAuras.end(); ++itr) if ((1 << (itr->first - 1)) & PER_CASTER_AURA_STATE_MASK) if (itr->second->GetBase()->GetCasterGUID() == target->GetGUID()) @@ -5715,7 +5728,7 @@ bool Unit::HasAuraState(AuraStateType flag, SpellInfo const* spellProto, Unit co } } - return HasFlag(UNIT_FIELD_AURASTATE, 1 << (flag - 1)); + return (*m_unitData->AuraState & (1 << (flag - 1))) != 0; } void Unit::SetOwnerGUID(ObjectGuid owner) @@ -5723,7 +5736,7 @@ void Unit::SetOwnerGUID(ObjectGuid owner) if (GetOwnerGUID() == owner) return; - SetGuidValue(UNIT_FIELD_SUMMONEDBY, owner); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::SummonedBy), owner); if (!owner) return; @@ -5732,15 +5745,11 @@ void Unit::SetOwnerGUID(ObjectGuid owner) if (!player || !player->HaveAtClient(this)) // if player cannot see this unit yet, he will receive needed data with create object return; - SetFieldNotifyFlag(UF_FLAG_OWNER); - UpdateData udata(GetMapId()); WorldPacket packet; - BuildValuesUpdateBlockForPlayer(&udata, player); + BuildValuesUpdateBlockForPlayerWithFlag(&udata, UF::UpdateFieldFlag::Owner, player); udata.BuildPacket(&packet); player->SendDirectMessage(&packet); - - RemoveFieldNotifyFlag(UF_FLAG_OWNER); } Unit* Unit::GetOwner() const @@ -5822,7 +5831,7 @@ Unit* Unit::GetCharm() const return pet; TC_LOG_ERROR("entities.unit", "Unit::GetCharm: Charmed creature %s not exist.", charm_guid.ToString().c_str()); - const_cast<Unit*>(this)->SetGuidValue(UNIT_FIELD_CHARM, ObjectGuid::Empty); + const_cast<Unit*>(this)->SetCharmGUID(ObjectGuid::Empty); } return NULL; @@ -5860,7 +5869,7 @@ void Unit::SetMinion(Minion *minion, bool apply) if (GetTypeId() == TYPEID_PLAYER) { minion->m_ControlledByPlayer = true; - minion->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); + minion->AddUnitFlag(UNIT_FLAG_PVP_ATTACKABLE); } // Can only have one pet. If a new one is summoned, dismiss the old one. @@ -5888,20 +5897,19 @@ void Unit::SetMinion(Minion *minion, bool apply) if (minion->HasUnitTypeMask(UNIT_MASK_CONTROLABLE_GUARDIAN)) { - if (AddGuidValue(UNIT_FIELD_SUMMON, minion->GetGUID())) - { - } + if (GetMinionGUID().IsEmpty()) + SetMinionGUID(minion->GetGUID()); } if (minion->m_Properties && minion->m_Properties->Title == SUMMON_TYPE_MINIPET) { SetCritterGUID(minion->GetGUID()); - if (GetTypeId() == TYPEID_PLAYER) - minion->SetGuidValue(UNIT_FIELD_BATTLE_PET_COMPANION_GUID, GetGuidValue(ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID)); + if (Player const* thisPlayer = ToPlayer()) + minion->SetBattlePetCompanionGUID(thisPlayer->m_activePlayerData->SummonedBattlePetGUID); } // PvP, FFAPvP - minion->SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG)); + minion->SetPvpFlags(GetPvpFlags()); // FIXME: hack, speed must be set only at follow if (GetTypeId() == TYPEID_PLAYER && minion->IsPet()) @@ -5909,7 +5917,7 @@ void Unit::SetMinion(Minion *minion, bool apply) minion->SetSpeedRate(UnitMoveType(i), m_speed_rate[i]); // Send infinity cooldown - client does that automatically but after relog cooldown needs to be set again - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(minion->GetUInt32Value(UNIT_CREATED_BY_SPELL)); + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(minion->m_unitData->CreatedBySpell); if (spellInfo && (spellInfo->IsCooldownStartedOnEvent())) GetSpellHistory()->StartCooldown(spellInfo, 0, nullptr, true); @@ -5946,15 +5954,16 @@ void Unit::SetMinion(Minion *minion, bool apply) } } - SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(minion->GetUInt32Value(UNIT_CREATED_BY_SPELL)); + SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(minion->m_unitData->CreatedBySpell); // Remove infinity cooldown if (spellInfo && (spellInfo->IsCooldownStartedOnEvent())) GetSpellHistory()->SendCooldownEvent(spellInfo); //if (minion->HasUnitTypeMask(UNIT_MASK_GUARDIAN)) { - if (RemoveGuidValue(UNIT_FIELD_SUMMON, minion->GetGUID())) + if (GetMinionGUID() == minion->GetGUID()) { + SetMinionGUID(ObjectGuid::Empty); // Check if there is another minion for (ControlList::iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr) { @@ -5975,16 +5984,14 @@ void Unit::SetMinion(Minion *minion, bool apply) if (!(*itr)->HasUnitTypeMask(UNIT_MASK_CONTROLABLE_GUARDIAN)) continue; - if (AddGuidValue(UNIT_FIELD_SUMMON, (*itr)->GetGUID())) + SetMinionGUID((*itr)->GetGUID()); + // show another pet bar if there is no charm bar + if (GetTypeId() == TYPEID_PLAYER && !GetCharmGUID()) { - // show another pet bar if there is no charm bar - if (GetTypeId() == TYPEID_PLAYER && !GetCharmGUID()) - { - if ((*itr)->IsPet()) - ToPlayer()->PetSpellInitialize(); - else - ToPlayer()->CharmSpellInitialize(); - } + if ((*itr)->IsPet()) + ToPlayer()->PetSpellInitialize(); + else + ToPlayer()->CharmSpellInitialize(); } break; } @@ -6022,20 +6029,24 @@ void Unit::SetCharm(Unit* charm, bool apply) { if (GetTypeId() == TYPEID_PLAYER) { - if (!AddGuidValue(UNIT_FIELD_CHARM, charm->GetGUID())) + if (GetCharmGUID().IsEmpty()) + SetCharmGUID(charm->GetGUID()); + else TC_LOG_FATAL("entities.unit", "Player %s is trying to charm unit %u, but it already has a charmed unit %s", GetName().c_str(), charm->GetEntry(), GetCharmGUID().ToString().c_str()); charm->m_ControlledByPlayer = true; /// @todo maybe we can use this flag to check if controlled by player - charm->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); + charm->AddUnitFlag(UNIT_FLAG_PVP_ATTACKABLE); } else charm->m_ControlledByPlayer = false; // PvP, FFAPvP - charm->SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG)); + charm->SetPvpFlags(GetPvpFlags()); - if (!charm->AddGuidValue(UNIT_FIELD_CHARMEDBY, GetGUID())) + if (charm->GetCharmGUID().IsEmpty()) + charm->SetCharmerGUID(GetGUID()); + else TC_LOG_FATAL("entities.unit", "Unit %u is being charmed, but it already has a charmer %s", charm->GetEntry(), charm->GetCharmerGUID().ToString().c_str()); _isWalkingBeforeCharm = charm->IsWalking(); @@ -6048,30 +6059,34 @@ void Unit::SetCharm(Unit* charm, bool apply) { if (GetTypeId() == TYPEID_PLAYER) { - if (!RemoveGuidValue(UNIT_FIELD_CHARM, charm->GetGUID())) + if (GetCharmGUID() == charm->GetGUID()) + SetCharmGUID(ObjectGuid::Empty); + else TC_LOG_FATAL("entities.unit", "Player %s is trying to uncharm unit %u, but it has another charmed unit %s", GetName().c_str(), charm->GetEntry(), GetCharmGUID().ToString().c_str()); } - if (!charm->RemoveGuidValue(UNIT_FIELD_CHARMEDBY, GetGUID())) + if (charm->GetCharmerGUID() == GetGUID()) + charm->SetCharmerGUID(ObjectGuid::Empty); + else TC_LOG_FATAL("entities.unit", "Unit %u is being uncharmed, but it has another charmer %s", charm->GetEntry(), charm->GetCharmerGUID().ToString().c_str()); if (charm->GetTypeId() == TYPEID_PLAYER) { charm->m_ControlledByPlayer = true; - charm->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); + charm->AddUnitFlag(UNIT_FLAG_PVP_ATTACKABLE); charm->ToPlayer()->UpdatePvPState(); } else if (Player* player = charm->GetCharmerOrOwnerPlayerOrPlayerItself()) { charm->m_ControlledByPlayer = true; - charm->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); - charm->SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, player->GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG)); + charm->AddUnitFlag(UNIT_FLAG_PVP_ATTACKABLE); + charm->SetPvpFlags(player->GetPvpFlags()); } else { charm->m_ControlledByPlayer = false; - charm->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); - charm->SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, 0); + charm->RemoveUnitFlag(UNIT_FLAG_PVP_ATTACKABLE); + charm->SetPvpFlags(UNIT_BYTE2_FLAG_NONE); } if (charm->IsWalking() != _isWalkingBeforeCharm) @@ -6134,7 +6149,7 @@ void Unit::DealHeal(HealInfo& healInfo) bool Unit::IsMagnet() const { // Grounding Totem - if (GetUInt32Value(UNIT_CREATED_BY_SPELL) == 8177) /// @todo: find a more generic solution + if (*m_unitData->CreatedBySpell == 8177) /// @todo: find a more generic solution return true; return false; @@ -6488,11 +6503,11 @@ float Unit::SpellDamagePctDone(Unit* victim, SpellInfo const* spellProto, Damage AddPct(DoneTotalMod, modOwner->GetRatingBonusValue(CR_VERSATILITY_DAMAGE_DONE) + modOwner->GetTotalAuraModifier(SPELL_AURA_MOD_VERSATILITY)); float maxModDamagePercentSchool = 0.0f; - if (GetTypeId() == TYPEID_PLAYER) + if (Player const* thisPlayer = ToPlayer()) { for (uint32 i = 0; i < MAX_SPELL_SCHOOL; ++i) if (spellProto->GetSchoolMask() & (1 << i)) - maxModDamagePercentSchool = std::max(maxModDamagePercentSchool, GetFloatValue(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT + i)); + maxModDamagePercentSchool = std::max(maxModDamagePercentSchool, thisPlayer->m_activePlayerData->ModDamageDonePercent[i]); } else maxModDamagePercentSchool = GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, spellProto->GetSchoolMask()); @@ -6630,9 +6645,9 @@ uint32 Unit::SpellDamageBonusTaken(Unit* caster, SpellInfo const* spellProto, ui int32 Unit::SpellBaseDamageBonusDone(SpellSchoolMask schoolMask) const { - if (GetTypeId() == TYPEID_PLAYER) + if (Player const* thisPlayer = ToPlayer()) { - float overrideSP = GetFloatValue(ACTIVE_PLAYER_FIELD_OVERRIDE_SPELL_POWER_BY_AP_PCT); + float overrideSP = thisPlayer->m_activePlayerData->OverrideSpellPowerByAPPercent; if (overrideSP > 0.0f) return int32(CalculatePct(GetTotalAttackPowerValue(BASE_ATTACK), overrideSP) + 0.5f); } @@ -6711,8 +6726,8 @@ float Unit::GetUnitSpellCriticalChance(Unit* victim, SpellInfo const* spellProto if (schoolMask & SPELL_SCHOOL_MASK_NORMAL) crit_chance = 0.0f; // For other schools - else if (GetTypeId() == TYPEID_PLAYER) - crit_chance = GetFloatValue(ACTIVE_PLAYER_FIELD_SPELL_CRIT_PERCENTAGE1); + else if (Player const* thisPlayer = ToPlayer()) + crit_chance = thisPlayer->m_activePlayerData->SpellCritPercentage; else crit_chance = (float)m_baseSpellCritChance; // taken @@ -6952,8 +6967,8 @@ float Unit::SpellHealingPctDone(Unit* /*victim*/, SpellInfo const* spellProto) c if (spellProto->SpellFamilyName == SPELLFAMILY_POTION) return 1.0f; - if (IsPlayer()) - return GetFloatValue(ACTIVE_PLAYER_FIELD_MOD_HEALING_DONE_PCT); + if (Player const* thisPlayer = ToPlayer()) + return thisPlayer->m_activePlayerData->ModHealingDonePercent; float DoneTotalMod = 1.0f; @@ -7050,9 +7065,9 @@ uint32 Unit::SpellHealingBonusTaken(Unit* caster, SpellInfo const* spellProto, u int32 Unit::SpellBaseHealingBonusDone(SpellSchoolMask schoolMask) const { - if (GetTypeId() == TYPEID_PLAYER) + if (Player const* thisPlayer = ToPlayer()) { - float overrideSP = GetFloatValue(ACTIVE_PLAYER_FIELD_OVERRIDE_SPELL_POWER_BY_AP_PCT); + float overrideSP = thisPlayer->m_activePlayerData->OverrideSpellPowerByAPPercent; if (overrideSP > 0.0f) return int32(CalculatePct(GetTotalAttackPowerValue(BASE_ATTACK), overrideSP) + 0.5f); } @@ -7320,11 +7335,11 @@ uint32 Unit::MeleeDamageBonusDone(Unit* victim, uint32 pdamage, WeaponAttackType if (!(spellProto->GetSchoolMask() & SPELL_SCHOOL_MASK_NORMAL)) { float maxModDamagePercentSchool = 0.0f; - if (GetTypeId() == TYPEID_PLAYER) + if (Player const* thisPlayer = ToPlayer()) { for (uint32 i = SPELL_SCHOOL_HOLY; i < MAX_SPELL_SCHOOL; ++i) if (spellProto->GetSchoolMask() & (1 << i)) - maxModDamagePercentSchool = std::max(maxModDamagePercentSchool, GetFloatValue(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT + i)); + maxModDamagePercentSchool = std::max(maxModDamagePercentSchool, thisPlayer->m_activePlayerData->ModDamageDonePercent[i]); } else maxModDamagePercentSchool = GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, spellProto->GetSchoolMask()); @@ -7495,9 +7510,9 @@ float Unit::GetPPMProcChance(uint32 WeaponSpeed, float PPM, SpellInfo const* spe void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry) { if (mount) - SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, mount); + SetMountDisplayId(mount); - SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_MOUNT); + AddUnitFlag(UNIT_FLAG_MOUNT); if (Player* player = ToPlayer()) { @@ -7520,7 +7535,7 @@ void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry) Battleground* bg = ToPlayer()->GetBattleground(); // don't unsummon pet in arena but SetFlag UNIT_FLAG_STUNNED to disable pet's interface if (bg && bg->isArena()) - pet->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); + pet->AddUnitFlag(UNIT_FLAG_STUNNED); else player->UnsummonPetTemporaryIfAny(); } @@ -7528,7 +7543,7 @@ void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry) // if we have charmed npc, stun him also (everywhere) if (Unit* charm = player->GetCharm()) if (charm->GetTypeId() == TYPEID_UNIT) - charm->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); + charm->AddUnitFlag(UNIT_FLAG_STUNNED); player->SendMovementSetCollisionHeight(player->GetCollisionHeight(true)); } @@ -7541,8 +7556,8 @@ void Unit::Dismount() if (!IsMounted()) return; - SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0); - RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_MOUNT); + SetMountDisplayId(0); + RemoveUnitFlag(UNIT_FLAG_MOUNT); if (Player* thisPlayer = ToPlayer()) thisPlayer->SendMovementSetCollisionHeight(thisPlayer->GetCollisionHeight(false)); @@ -7567,16 +7582,16 @@ void Unit::Dismount() { if (Pet* pPet = player->GetPet()) { - if (pPet->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED) && !pPet->HasUnitState(UNIT_STATE_STUNNED)) - pPet->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); + if (pPet->HasUnitFlag(UNIT_FLAG_STUNNED) && !pPet->HasUnitState(UNIT_STATE_STUNNED)) + pPet->RemoveUnitFlag(UNIT_FLAG_STUNNED); } else player->ResummonPetTemporaryUnSummonedIfAny(); // if we have charmed npc, remove stun also if (Unit* charm = player->GetCharm()) - if (charm->GetTypeId() == TYPEID_UNIT && charm->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED) && !charm->HasUnitState(UNIT_STATE_STUNNED)) - charm->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); + if (charm->GetTypeId() == TYPEID_UNIT && charm->HasUnitFlag(UNIT_FLAG_STUNNED) && !charm->HasUnitState(UNIT_STATE_STUNNED)) + charm->RemoveUnitFlag(UNIT_FLAG_STUNNED); } } @@ -7674,11 +7689,11 @@ MountCapabilityEntry const* Unit::GetMountCapability(uint32 mountType) const bool Unit::IsServiceProvider() const { - return HasFlag64(UNIT_NPC_FLAGS, + return HasNpcFlag(NPCFlags( UNIT_NPC_FLAG_VENDOR | UNIT_NPC_FLAG_TRAINER | UNIT_NPC_FLAG_FLIGHTMASTER | UNIT_NPC_FLAG_PETITIONER | UNIT_NPC_FLAG_BATTLEMASTER | UNIT_NPC_FLAG_BANKER | UNIT_NPC_FLAG_INNKEEPER | UNIT_NPC_FLAG_SPIRITHEALER | - UNIT_NPC_FLAG_SPIRITGUIDE | UNIT_NPC_FLAG_TABARDDESIGNER | UNIT_NPC_FLAG_AUCTIONEER); + UNIT_NPC_FLAG_SPIRITGUIDE | UNIT_NPC_FLAG_TABARDDESIGNER | UNIT_NPC_FLAG_AUCTIONEER)); } void Unit::SetInCombatWith(Unit* enemy) @@ -7752,7 +7767,7 @@ void Unit::SetInCombatState(bool PvP, Unit* enemy) if (IsInCombat() || HasUnitState(UNIT_STATE_EVADE)) return; - SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); + AddUnitFlag(UNIT_FLAG_IN_COMBAT); if (Creature* creature = ToCreature()) { @@ -7785,7 +7800,7 @@ void Unit::SetInCombatState(bool PvP, Unit* enemy) for (Unit::ControlList::iterator itr = m_Controlled.begin(); itr != m_Controlled.end(); ++itr) { (*itr)->SetInCombatState(PvP, enemy); - (*itr)->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PET_IN_COMBAT); + (*itr)->AddUnitFlag(UNIT_FLAG_PET_IN_COMBAT); } ProcSkillsAndAuras(enemy, PROC_FLAG_ENTER_COMBAT, PROC_FLAG_NONE, PROC_SPELL_TYPE_MASK_ALL, PROC_SPELL_PHASE_NONE, PROC_HIT_NONE, nullptr, nullptr, nullptr); @@ -7794,14 +7809,14 @@ void Unit::SetInCombatState(bool PvP, Unit* enemy) void Unit::ClearInCombat() { m_CombatTimer = 0; - RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); + RemoveUnitFlag(UNIT_FLAG_IN_COMBAT); // Player's state will be cleared in Player::UpdateContestedPvP if (Creature* creature = ToCreature()) { ClearUnitState(UNIT_STATE_ATTACK_PLAYER); - if (HasFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_TAPPED)) - SetUInt32Value(OBJECT_DYNAMIC_FLAGS, creature->GetCreatureTemplate()->dynamicflags); + if (HasDynamicFlag(UNIT_DYNFLAG_TAPPED)) + SetDynamicFlags(creature->GetCreatureTemplate()->dynamicflags); if (creature->IsPet() || creature->IsGuardian()) { @@ -7816,7 +7831,7 @@ void Unit::ClearInCombat() else ToPlayer()->OnCombatExit(); - RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PET_IN_COMBAT); + RemoveUnitFlag(UNIT_FLAG_PET_IN_COMBAT); RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_LEAVE_COMBAT); } @@ -7825,8 +7840,7 @@ bool Unit::isTargetableForAttack(bool checkFakeDeath) const if (!IsAlive()) return false; - if (HasFlag(UNIT_FIELD_FLAGS, - UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)) + if (HasUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE))) return false; if (GetTypeId() == TYPEID_PLAYER && ToPlayer()->IsGameMaster()) @@ -7881,29 +7895,29 @@ bool Unit::_IsValidAttackTarget(Unit const* target, SpellInfo const* bySpell, Wo // can't attack untargetable if ((!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_CAN_TARGET_UNTARGETABLE)) - && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE)) + && target->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE)) return false; if (Player const* playerAttacker = ToPlayer()) { - if (playerAttacker->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_UBER)) + if (playerAttacker->HasPlayerFlag(PLAYER_FLAGS_UBER)) return false; } // check flags - if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_TAXI_FLIGHT | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_UNK_16) - || (!HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC)) - || (!target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC))) + if (target->HasUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_TAXI_FLIGHT | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_UNK_16)) + || (!HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE) && target->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC)) + || (!target->HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE) && HasUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC))) return false; if ((!bySpell || !bySpell->HasAttribute(SPELL_ATTR8_ATTACK_IGNORE_IMMUNE_TO_PC_FLAG)) - && (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC)) + && (HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE) && target->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC)) // check if this is a world trigger cast - GOs are using world triggers to cast their spells, so we need to ignore their immunity flag here, this is a temp workaround, needs removal when go cast is implemented properly && GetEntry() != WORLD_TRIGGER) return false; // CvC case - can attack each other only when one of them is hostile - if (!HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) && !target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE)) + if (!HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE) && !target->HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE)) return GetReactionTo(target) <= REP_HOSTILE || target->GetReactionTo(this) <= REP_HOSTILE; // PvP, PvC, CvP case @@ -7912,8 +7926,8 @@ bool Unit::_IsValidAttackTarget(Unit const* target, SpellInfo const* bySpell, Wo || target->GetReactionTo(this) > REP_NEUTRAL) return false; - Player const* playerAffectingAttacker = HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) ? GetAffectingPlayer() : nullptr; - Player const* playerAffectingTarget = target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) ? target->GetAffectingPlayer() : nullptr; + Player const* playerAffectingAttacker = HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE) ? GetAffectingPlayer() : nullptr; + Player const* playerAffectingTarget = target->HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE) ? target->GetAffectingPlayer() : nullptr; // Not all neutral creatures can be attacked (even some unfriendly faction does not react aggresive to you, like Sporaggar) if ((playerAffectingAttacker && !playerAffectingTarget) || @@ -7944,8 +7958,8 @@ bool Unit::_IsValidAttackTarget(Unit const* target, SpellInfo const* bySpell, Wo // PvP case - can't attack when attacker or target are in sanctuary // however, 13850 client doesn't allow to attack when one of the unit's has sanctuary flag and is pvp - if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) && HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) - && ((target->GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG) & UNIT_BYTE2_FLAG_SANCTUARY) || (GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG) & UNIT_BYTE2_FLAG_SANCTUARY))) + if (target->HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE) && HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE) + && ((target->HasPvpFlag(UNIT_BYTE2_FLAG_SANCTUARY)) || (HasPvpFlag(UNIT_BYTE2_FLAG_SANCTUARY)))) return false; // additional checks - only PvP case @@ -7957,8 +7971,8 @@ bool Unit::_IsValidAttackTarget(Unit const* target, SpellInfo const* bySpell, Wo if (IsFFAPvP() && target->IsFFAPvP()) return true; - return HasByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_UNK1) - || target->HasByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_UNK1); + return HasPvpFlag(UNIT_BYTE2_FLAG_UNK1) + || target->HasPvpFlag(UNIT_BYTE2_FLAG_UNK1); } return true; } @@ -7997,19 +8011,19 @@ bool Unit::_IsValidAssistTarget(Unit const* target, SpellInfo const* bySpell) co // can't assist untargetable if ((!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_CAN_TARGET_UNTARGETABLE)) - && target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE)) + && target->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE)) return false; if (!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG)) { - if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE)) + if (HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE)) { - if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC)) + if (target->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC)) return false; } else { - if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC)) + if (target->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC)) return false; } } @@ -8024,10 +8038,10 @@ bool Unit::_IsValidAssistTarget(Unit const* target, SpellInfo const* bySpell) co if (GetTypeId() == TYPEID_PLAYER && IsCharmed() && GetCharmerGUID().IsCreature()) return true; // PvP case - else if (target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE)) + else if (target->HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE)) { Player const* targetPlayerOwner = target->GetAffectingPlayer(); - if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE)) + if (HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE)) { Player const* selfPlayerOwner = GetAffectingPlayer(); if (selfPlayerOwner && targetPlayerOwner) @@ -8038,20 +8052,20 @@ bool Unit::_IsValidAssistTarget(Unit const* target, SpellInfo const* bySpell) co return false; } // can't assist player in ffa_pvp zone from outside - if ((target->GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG) & UNIT_BYTE2_FLAG_FFA_PVP) - && !(GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG) & UNIT_BYTE2_FLAG_FFA_PVP)) + if (target->HasPvpFlag(UNIT_BYTE2_FLAG_FFA_PVP) + && !HasPvpFlag(UNIT_BYTE2_FLAG_FFA_PVP)) return false; // can't assist player out of sanctuary from sanctuary if has pvp enabled - if (target->GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG) & UNIT_BYTE2_FLAG_PVP) - if ((GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG) & UNIT_BYTE2_FLAG_SANCTUARY) && !(target->GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG) & UNIT_BYTE2_FLAG_SANCTUARY)) + if (target->HasPvpFlag(UNIT_BYTE2_FLAG_PVP)) + if (HasPvpFlag(UNIT_BYTE2_FLAG_SANCTUARY) && !target->HasPvpFlag(UNIT_BYTE2_FLAG_SANCTUARY)) return false; } } // PvC case - player can assist creature only if has specific type flags // !target->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) && - else if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) + else if (HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE) && (!bySpell || !bySpell->HasAttribute(SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG)) - && !((target->GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG) & UNIT_BYTE2_FLAG_PVP))) + && !target->HasPvpFlag(UNIT_BYTE2_FLAG_PVP)) { if (Creature const* creatureTarget = target->ToCreature()) return creatureTarget->GetCreatureTemplate()->type_flags & CREATURE_TYPE_FLAG_TREAT_AS_RAID_UNIT || creatureTarget->GetCreatureTemplate()->type_flags & CREATURE_TYPE_FLAG_CAN_ASSIST; @@ -8480,14 +8494,14 @@ void Unit::setDeathState(DeathState s) // do not why since in IncreaseMaxHealth currenthealth is checked SetHealth(0); SetPower(GetPowerType(), 0); - SetUInt32Value(UNIT_NPC_EMOTESTATE, 0); + SetEmoteState(EMOTE_ONESHOT_NONE); // players in instance don't have ZoneScript, but they have InstanceScript if (ZoneScript* zoneScript = GetZoneScript() ? GetZoneScript() : GetInstanceScript()) zoneScript->OnUnitDeath(this); } else if (s == JUST_RESPAWNED) - RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); // clear skinnable for creature and player (at battleground) + RemoveUnitFlag(UNIT_FLAG_SKINNABLE); // clear skinnable for creature and player (at battleground) } /*######################################## @@ -8888,7 +8902,7 @@ void Unit::ModSpellCastTime(SpellInfo const* spellInfo, int32 & castTime, Spell* if (!(spellInfo->HasAttribute(SPELL_ATTR0_ABILITY) || spellInfo->HasAttribute(SPELL_ATTR0_TRADESPELL) || spellInfo->HasAttribute(SPELL_ATTR3_NO_DONE_BONUS)) && ((GetTypeId() == TYPEID_PLAYER && spellInfo->SpellFamilyName) || GetTypeId() == TYPEID_UNIT)) - castTime = int32(float(castTime) * GetFloatValue(UNIT_MOD_CAST_SPEED)); + castTime = int32(float(castTime) * m_unitData->ModCastingSpeed); else if (spellInfo->HasAttribute(SPELL_ATTR0_REQ_AMMO) && !spellInfo->HasAttribute(SPELL_ATTR2_AUTOREPEAT_FLAG)) castTime = int32(float(castTime) * m_modAttackSpeedPct[RANGED_ATTACK]); else if (IsPartOfSkillLine(SKILL_COOKING, spellInfo->Id) && HasAura(67556)) // cooking with Chef Hat. @@ -8909,7 +8923,7 @@ void Unit::ModSpellDurationTime(SpellInfo const* spellInfo, int32 & duration, Sp if (!(spellInfo->HasAttribute(SPELL_ATTR0_ABILITY) || spellInfo->HasAttribute(SPELL_ATTR0_TRADESPELL) || spellInfo->HasAttribute(SPELL_ATTR3_NO_DONE_BONUS)) && ((GetTypeId() == TYPEID_PLAYER && spellInfo->SpellFamilyName) || GetTypeId() == TYPEID_UNIT)) - duration = int32(float(duration) * GetFloatValue(UNIT_MOD_CAST_SPEED)); + duration = int32(float(duration) * m_unitData->ModCastingSpeed); else if (spellInfo->HasAttribute(SPELL_ATTR0_REQ_AMMO) && !spellInfo->HasAttribute(SPELL_ATTR2_AUTOREPEAT_FLAG)) duration = int32(float(duration) * m_modAttackSpeedPct[RANGED_ATTACK]); } @@ -9093,7 +9107,7 @@ uint32 Unit::GetCreatureTypeMask() const void Unit::SetShapeshiftForm(ShapeshiftForm form) { - SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_SHAPESHIFT_FORM, form); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ShapeshiftForm), form); } bool Unit::IsInFeralForm() const @@ -9332,17 +9346,17 @@ float Unit::GetTotalAttackPowerValue(WeaponAttackType attType) const { if (attType == RANGED_ATTACK) { - int32 ap = GetInt32Value(UNIT_FIELD_RANGED_ATTACK_POWER); + int32 ap = m_unitData->RangedAttackPower; if (ap < 0) return 0.0f; - return ap * (1.0f + GetFloatValue(UNIT_FIELD_RANGED_ATTACK_POWER_MULTIPLIER)); + return ap * (1.0f + m_unitData->RangedAttackPowerMultiplier); } else { - int32 ap = GetInt32Value(UNIT_FIELD_ATTACK_POWER); + int32 ap = m_unitData->AttackPower; if (ap < 0) return 0.0f; - return ap * (1.0f + GetFloatValue(UNIT_FIELD_ATTACK_POWER_MULTIPLIER)); + return ap * (1.0f + m_unitData->AttackPowerMultiplier); } } @@ -9362,7 +9376,7 @@ bool Unit::CanFreeMove() const void Unit::SetLevel(uint8 lvl) { - SetUInt32Value(UNIT_FIELD_LEVEL, lvl); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Level), lvl); if (Player* player = ToPlayer()) { @@ -9387,7 +9401,7 @@ void Unit::SetHealth(uint64 val) val = maxHealth; } - SetUInt64Value(UNIT_FIELD_HEALTH, val); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Health), val); // group update if (Player* player = ToPlayer()) @@ -9408,7 +9422,7 @@ void Unit::SetMaxHealth(uint64 val) val = 1; uint64 health = GetHealth(); - SetUInt64Value(UNIT_FIELD_MAXHEALTH, val); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MaxHealth), val); // group update if (GetTypeId() == TYPEID_PLAYER) @@ -9432,7 +9446,7 @@ int32 Unit::GetPower(Powers power) const if (powerIndex == MAX_POWERS || powerIndex >= MAX_POWERS_PER_CLASS) return 0; - return GetUInt32Value(UNIT_FIELD_POWER + powerIndex); + return m_unitData->Power[powerIndex]; } int32 Unit::GetMaxPower(Powers power) const @@ -9441,7 +9455,7 @@ int32 Unit::GetMaxPower(Powers power) const if (powerIndex == MAX_POWERS || powerIndex >= MAX_POWERS_PER_CLASS) return 0; - return GetInt32Value(UNIT_FIELD_MAXPOWER + powerIndex); + return m_unitData->MaxPower[powerIndex]; } void Unit::SetPower(Powers power, int32 val) @@ -9454,7 +9468,7 @@ void Unit::SetPower(Powers power, int32 val) if (maxPower < val) val = maxPower; - SetInt32Value(UNIT_FIELD_POWER + powerIndex, val); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Power, powerIndex), val); if (IsInWorld()) { @@ -9485,7 +9499,7 @@ void Unit::SetMaxPower(Powers power, int32 val) return; int32 cur_power = GetPower(power); - SetInt32Value(UNIT_FIELD_MAXPOWER + powerIndex, val); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MaxPower, powerIndex), val); // group update if (GetTypeId() == TYPEID_PLAYER) @@ -9887,9 +9901,9 @@ void CharmInfo::SetPetNumber(uint32 petnumber, bool statwindow) { _petnumber = petnumber; if (statwindow) - _unit->SetUInt32Value(UNIT_FIELD_PETNUMBER, _petnumber); + _unit->SetPetNumberForClient(_petnumber); else - _unit->SetUInt32Value(UNIT_FIELD_PETNUMBER, 0); + _unit->SetPetNumberForClient(0); } void CharmInfo::LoadPetActionBar(const std::string& data) @@ -10306,7 +10320,7 @@ bool Unit::IsStandState() const void Unit::SetStandState(UnitStandStateType state, uint32 animKitID /* = 0*/) { - SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_STAND_STATE, uint8(state)); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::StandState), state); if (IsStandState()) RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_NOT_SEATED); @@ -10318,6 +10332,19 @@ void Unit::SetStandState(UnitStandStateType state, uint32 animKitID /* = 0*/) } } +void Unit::SetAnimTier(UnitBytes1_Flags animTier, bool notifyClient) +{ + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::AnimTier), animTier); + + if (notifyClient) + { + WorldPackets::Misc::SetAnimTier setAnimTier; + setAnimTier.Unit = GetGUID(); + setAnimTier.Tier = animTier; + SendMessageToSet(setAnimTier.Write(), true); + } +} + bool Unit::IsPolymorphed() const { uint32 transformId = getTransForm(); @@ -10333,12 +10360,12 @@ bool Unit::IsPolymorphed() const void Unit::SetDisplayId(uint32 modelId, float displayScale /*= 1.f*/) { - SetUInt32Value(UNIT_FIELD_DISPLAYID, modelId); - SetFloatValue(UNIT_FIELD_DISPLAY_SCALE, displayScale); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::DisplayID), modelId); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::DisplayScale), displayScale); // Set Gender by modelId if (CreatureModelInfo const* minfo = sObjectMgr->GetCreatureModelInfo(modelId)) - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, minfo->gender); + SetGender(minfo->gender); } void Unit::RestoreDisplayId(bool ignorePositiveAurasPreventingMounting /*= false*/) @@ -10479,7 +10506,18 @@ void Unit::SetBaseAttackTime(WeaponAttackType att, uint32 val) void Unit::UpdateAttackTimeField(WeaponAttackType att) { - SetUInt32Value(UNIT_FIELD_BASEATTACKTIME + att, uint32(m_baseAttackSpeed[att] * m_modAttackSpeedPct[att])); + switch (att) + { + case BASE_ATTACK: + case OFF_ATTACK: + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::AttackRoundBaseTime, att), uint32(m_baseAttackSpeed[att] * m_modAttackSpeedPct[att])); + break; + case RANGED_ATTACK: + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::RangedAttackRoundBaseTime), uint32(m_baseAttackSpeed[RANGED_ATTACK] * m_modAttackSpeedPct[RANGED_ATTACK])); + break; + default: + break;; + } } void Unit::ApplyAttackTimePercentMod(WeaponAttackType att, float val, bool apply) @@ -10490,18 +10528,18 @@ void Unit::ApplyAttackTimePercentMod(WeaponAttackType att, float val, bool apply ApplyPercentModFloatVar(m_modAttackSpeedPct[att], val, !apply); if (att == BASE_ATTACK) - ApplyPercentModFloatValue(UNIT_FIELD_MOD_HASTE, val, !apply); + ApplyPercentModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModHaste), val, !apply); else if (att == RANGED_ATTACK) - ApplyPercentModFloatValue(UNIT_FIELD_MOD_RANGED_HASTE, val, !apply); + ApplyPercentModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModRangedHaste), val, !apply); } else { ApplyPercentModFloatVar(m_modAttackSpeedPct[att], -val, apply); if (att == BASE_ATTACK) - ApplyPercentModFloatValue(UNIT_FIELD_MOD_HASTE, -val, apply); + ApplyPercentModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModHaste), -val, apply); else if (att == RANGED_ATTACK) - ApplyPercentModFloatValue(UNIT_FIELD_MOD_RANGED_HASTE, -val, apply); + ApplyPercentModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModRangedHaste), -val, apply); } UpdateAttackTimeField(att); @@ -10512,15 +10550,15 @@ void Unit::ApplyCastTimePercentMod(float val, bool apply) { if (val > 0) { - ApplyPercentModFloatValue(UNIT_MOD_CAST_SPEED, val, !apply); - ApplyPercentModFloatValue(UNIT_MOD_CAST_HASTE, val, !apply); - ApplyPercentModFloatValue(UNIT_FIELD_MOD_HASTE_REGEN, val, !apply); + ApplyPercentModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModCastingSpeed), val, !apply); + ApplyPercentModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModSpellHaste), val, !apply); + ApplyPercentModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModHasteRegen), val, !apply); } else { - ApplyPercentModFloatValue(UNIT_MOD_CAST_SPEED, -val, apply); - ApplyPercentModFloatValue(UNIT_MOD_CAST_HASTE, -val, apply); - ApplyPercentModFloatValue(UNIT_FIELD_MOD_HASTE_REGEN, -val, apply); + ApplyPercentModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModCastingSpeed), -val, apply); + ApplyPercentModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModSpellHaste), -val, apply); + ApplyPercentModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModHasteRegen), -val, apply); } } @@ -10717,7 +10755,7 @@ void Unit::SetContestedPvP(Player* attackedPlayer) if (!player->HasUnitState(UNIT_STATE_ATTACK_PLAYER)) { player->AddUnitState(UNIT_STATE_ATTACK_PLAYER); - player->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_CONTESTED_PVP); + player->AddPlayerFlag(PLAYER_FLAGS_CONTESTED_PVP); // call MoveInLineOfSight for nearby contested guards UpdateObjectVisibility(); } @@ -10793,10 +10831,10 @@ bool Unit::InitTamedPet(Pet* pet, uint8 level, uint32 spell_id) { pet->SetCreatorGUID(GetGUID()); pet->setFaction(getFaction()); - pet->SetUInt32Value(UNIT_CREATED_BY_SPELL, spell_id); + pet->SetCreatedBySpell(spell_id); if (GetTypeId() == TYPEID_PLAYER) - pet->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); + pet->AddUnitFlag(UNIT_FLAG_PVP_ATTACKABLE); if (!pet->InitStatsForLevel(level)) { @@ -11052,7 +11090,7 @@ void Unit::Kill(Unit* victim, bool durabilityLoss) // must be after setDeathState which resets dynamic flags if (!creature->loot.isLooted()) - creature->SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); + creature->AddDynamicFlag(UNIT_DYNFLAG_LOOTABLE); else creature->AllLootRemovedFromCorpse(); } @@ -11152,7 +11190,7 @@ float Unit::GetPositionZMinusOffset() const { float offset = 0.0f; if (HasUnitMovementFlag(MOVEMENTFLAG_HOVER)) - offset = GetFloatValue(UNIT_FIELD_HOVERHEIGHT); + offset = m_unitData->HoverHeight; return GetPositionZ() - offset; } @@ -11255,7 +11293,7 @@ void Unit::SetStunned(bool apply) if (apply) { SetTarget(ObjectGuid::Empty); - SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); + AddUnitFlag(UNIT_FLAG_STUNNED); StopMoving(); @@ -11274,7 +11312,7 @@ void Unit::SetStunned(bool apply) // don't remove UNIT_FLAG_STUNNED for pet when owner is mounted (disabled pet's interface) Unit* owner = GetCharmerOrOwner(); if (!owner || owner->GetTypeId() != TYPEID_PLAYER || !owner->ToPlayer()->IsMounted()) - RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); + RemoveUnitFlag(UNIT_FLAG_STUNNED); if (!HasUnitState(UNIT_STATE_ROOT)) // prevent moving if it also has root effect SetRooted(false); @@ -11497,14 +11535,14 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au switch (type) { case CHARM_TYPE_VEHICLE: - SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED); + AddUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED); playerCharmer->SetClientControl(this, true); playerCharmer->VehicleSpellInitialize(); break; case CHARM_TYPE_POSSESS: AddUnitState(UNIT_STATE_POSSESSED); - SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED); - charmer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_REMOVE_CLIENT_CONTROL); + AddUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED); + charmer->AddUnitFlag(UNIT_FLAG_REMOVE_CLIENT_CONTROL); playerCharmer->SetClientControl(this, true); playerCharmer->PossessSpellInitialize(); break; @@ -11515,14 +11553,14 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au if (cinfo && cinfo->type == CREATURE_TYPE_DEMON) { // to prevent client crash - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, (uint8)CLASS_MAGE); + SetClass(CLASS_MAGE); // just to enable stat window if (GetCharmInfo()) GetCharmInfo()->SetPetNumber(sObjectMgr->GeneratePetNumber(), true); // if charmed two demons the same session, the 2nd gets the 1st one's name - SetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP, uint32(time(NULL))); // cast can't be helped + SetPetNameTimestamp(uint32(time(NULL))); } } playerCharmer->CharmSpellInitialize(); @@ -11602,13 +11640,13 @@ void Unit::RemoveCharmedBy(Unit* charmer) case CHARM_TYPE_VEHICLE: playerCharmer->SetClientControl(this, false); playerCharmer->SetClientControl(charmer, true); - RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED); + RemoveUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED); break; case CHARM_TYPE_POSSESS: playerCharmer->SetClientControl(this, false); playerCharmer->SetClientControl(charmer, true); - charmer->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_REMOVE_CLIENT_CONTROL); - RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED); + charmer->RemoveUnitFlag(UNIT_FLAG_REMOVE_CLIENT_CONTROL); + RemoveUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED); ClearUnitState(UNIT_STATE_POSSESSED); break; case CHARM_TYPE_CHARM: @@ -11617,7 +11655,7 @@ void Unit::RemoveCharmedBy(Unit* charmer) CreatureTemplate const* cinfo = ToCreature()->GetCreatureTemplate(); if (cinfo && cinfo->type == CREATURE_TYPE_DEMON) { - SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS, uint8(cinfo->unit_class)); + SetClass(uint8(cinfo->unit_class)); if (GetCharmInfo()) GetCharmInfo()->SetPetNumber(0, true); else @@ -11703,7 +11741,7 @@ void Unit::RemoveVehicleKit(bool onRemoveFromWorld /*= false*/) m_updateFlag.Vehicle = false; m_unitTypeMask &= ~UNIT_MASK_VEHICLE; - RemoveFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK | UNIT_NPC_FLAG_PLAYER_VEHICLE); + RemoveNpcFlag(NPCFlags(UNIT_NPC_FLAG_SPELLCLICK | UNIT_NPC_FLAG_PLAYER_VEHICLE)); } bool Unit::IsOnVehicle(const Unit* vehicle) const @@ -11830,9 +11868,9 @@ bool Unit::IsContestedGuard() const void Unit::SetPvP(bool state) { if (state) - SetByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_PVP); + AddPvpFlag(UNIT_BYTE2_FLAG_PVP); else - RemoveByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_PVP); + RemovePvpFlag(UNIT_BYTE2_FLAG_PVP); } Aura* Unit::AddAura(uint32 spellId, Unit* target) @@ -12133,7 +12171,7 @@ uint32 Unit::GetCombatRatingDamageReduction(CombatRating cr, float rate, float c uint32 Unit::GetModelForForm(ShapeshiftForm form) const { - if (GetTypeId() == TYPEID_PLAYER) + if (Player const* thisPlayer = ToPlayer()) { if (Aura* artifactAura = GetAura(ARTIFACTS_ALL_WEAPONS_GENERAL_WEAPON_EQUIPPED_PASSIVE)) if (Item* artifact = ToPlayer()->GetItemByGuid(artifactAura->GetCastItemGUID())) @@ -12147,7 +12185,7 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form) const // Based on Hair color if (getRace() == RACE_NIGHTELF) { - uint8 hairColor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID); + uint8 hairColor = thisPlayer->m_playerData->HairColorID; if (HasAura(210333)) // Glyph of the Feral Chameleon hairColor = urand(0, 10); @@ -12170,7 +12208,7 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form) const } else if (getRace() == RACE_TROLL) { - uint8 hairColor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID); + uint8 hairColor = thisPlayer->m_playerData->HairColorID; if (HasAura(210333)) // Glyph of the Feral Chameleon hairColor = urand(0, 12); @@ -12196,7 +12234,7 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form) const else if (getRace() == RACE_WORGEN) { // Based on Skin color - uint8 skinColor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID); + uint8 skinColor = thisPlayer->m_playerData->SkinID; if (HasAura(210333)) // Glyph of the Feral Chameleon skinColor = urand(0, 9); @@ -12243,7 +12281,7 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form) const // Based on Skin color else if (getRace() == RACE_TAUREN) { - uint8 skinColor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID); + uint8 skinColor = thisPlayer->m_playerData->SkinID; if (HasAura(210333)) // Glyph of the Feral Chameleon skinColor = urand(0, 20); @@ -12307,7 +12345,7 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form) const // Based on Hair color if (getRace() == RACE_NIGHTELF) { - uint8 hairColor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID); + uint8 hairColor = thisPlayer->m_playerData->HairColorID; if (HasAura(107059)) // Glyph of the Ursol Chameleon hairColor = urand(0, 8); @@ -12329,7 +12367,7 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form) const } else if (getRace() == RACE_TROLL) { - uint8 hairColor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID); + uint8 hairColor = thisPlayer->m_playerData->HairColorID; if (HasAura(107059)) // Glyph of the Ursol Chameleon hairColor = urand(0, 14); @@ -12356,7 +12394,7 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form) const else if (getRace() == RACE_WORGEN) { // Based on Skin color - uint8 skinColor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID); + uint8 skinColor = thisPlayer->m_playerData->SkinID; if (HasAura(107059)) // Glyph of the Ursol Chameleon skinColor = urand(0, 8); @@ -12403,7 +12441,7 @@ uint32 Unit::GetModelForForm(ShapeshiftForm form) const // Based on Skin color else if (getRace() == RACE_TAUREN) { - uint8 skinColor = GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID); + uint8 skinColor = thisPlayer->m_playerData->SkinID; if (HasAura(107059)) // Glyph of the Ursol Chameleon skinColor = urand(0, 20); @@ -12822,13 +12860,13 @@ bool Unit::IsFalling() const bool Unit::CanSwim() const { // Mirror client behavior, if this method returns false then client will not use swimming animation and for players will apply gravity as if there was no water - if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CANNOT_SWIM)) + if (HasUnitFlag(UNIT_FLAG_CANNOT_SWIM)) return false; - if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE)) // is player + if (HasUnitFlag(UNIT_FLAG_PVP_ATTACKABLE)) // is player return true; - if (HasFlag(UNIT_FIELD_FLAGS_2, 0x1000000)) + if (HasUnitFlag2(UnitFlags2(0x1000000))) return false; - return HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PET_IN_COMBAT | UNIT_FLAG_RENAME | UNIT_FLAG_UNK_15); + return HasUnitFlag(UnitFlags(UNIT_FLAG_PET_IN_COMBAT | UNIT_FLAG_RENAME | UNIT_FLAG_UNK_15)); } void Unit::NearTeleportTo(Position const& pos, bool casting /*= false*/) @@ -13445,7 +13483,7 @@ bool Unit::SetHover(bool enable) if (enable == HasUnitMovementFlag(MOVEMENTFLAG_HOVER)) return false; - float hoverHeight = GetFloatValue(UNIT_FIELD_HOVERHEIGHT); + float hoverHeight = m_unitData->HoverHeight; if (enable) { @@ -13656,154 +13694,60 @@ bool Unit::IsSplineEnabled() const return movespline->Initialized() && !movespline->Finalized(); } -void Unit::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) const +UF::UpdateFieldFlag Unit::GetUpdateFieldFlagsFor(Player const* target) const { - if (!target) - return; + EnumClassFlag<UF::UpdateFieldFlag> flags = UF::UpdateFieldFlag::None; + if (target == this || GetOwnerGUID() == target->GetGUID()) + flags |= UF::UpdateFieldFlag::Owner; - uint32 valCount = m_valuesCount; - uint32* flags = UnitUpdateFieldFlags; - uint32 visibleFlag = UF_FLAG_PUBLIC; - - if (target == this) - visibleFlag |= UF_FLAG_PRIVATE; - else if (GetTypeId() == TYPEID_PLAYER) - valCount = PLAYER_END; - - std::size_t blockCount = UpdateMask::GetBlockCount(valCount); - - Player* plr = GetCharmerOrOwnerPlayerOrPlayerItself(); - if (GetOwnerGUID() == target->GetGUID()) - visibleFlag |= UF_FLAG_OWNER; - - if (HasFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_SPECIALINFO)) + if (HasDynamicFlag(UNIT_DYNFLAG_SPECIALINFO)) if (HasAuraTypeWithCaster(SPELL_AURA_EMPATHY, target->GetGUID())) - visibleFlag |= UF_FLAG_SPECIAL_INFO; - - if (plr && plr->IsInSameRaidWith(target)) - visibleFlag |= UF_FLAG_PARTY_MEMBER; - - Creature const* creature = ToCreature(); + flags |= UF::UpdateFieldFlag::Empath; - *data << uint8(blockCount); - std::size_t maskPos = data->wpos(); - data->resize(data->size() + blockCount * sizeof(UpdateMask::BlockType)); - - for (uint16 index = 0; index < valCount; ++index) - { - if (_fieldNotifyFlags & flags[index] || - ((flags[index] & visibleFlag) & UF_FLAG_SPECIAL_INFO) || - ((updateType == UPDATETYPE_VALUES ? _changesMask[index] : m_uint32Values[index]) && (flags[index] & visibleFlag)) || - (index == UNIT_FIELD_AURASTATE && HasFlag(UNIT_FIELD_AURASTATE, PER_CASTER_AURA_STATE_MASK))) - { - UpdateMask::SetUpdateBit(data->contents() + maskPos, index); + return flags; +} - if (index == UNIT_NPC_FLAGS) - { - uint32 appendValue = m_uint32Values[UNIT_NPC_FLAGS]; +void Unit::BuildValuesCreate(ByteBuffer* data, Player const* target) const +{ + UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); + std::size_t sizePos = data->wpos(); + *data << uint32(0); + *data << uint8(flags); + m_objectData->WriteCreate(*data, flags, this, target); + m_unitData->WriteCreate(*data, flags, this, target); + data->put<uint32>(sizePos, data->wpos() - sizePos - 4); +} - if (creature) - if (!target->CanSeeSpellClickOn(creature)) - appendValue &= ~UNIT_NPC_FLAG_SPELLCLICK; +void Unit::BuildValuesUpdate(ByteBuffer* data, Player const* target) const +{ + UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target); + std::size_t sizePos = data->wpos(); + *data << uint32(0); + *data << uint32(m_values.GetChangedObjectTypeMask()); - *data << uint32(appendValue); - } - else if (index == UNIT_FIELD_AURASTATE) - { - // Check per caster aura states to not enable using a spell in client if specified aura is not by target - *data << BuildAuraStateUpdateForTarget(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_POSSTAT && index < UNIT_FIELD_POSSTAT + MAX_STATS)) - { - *data << uint32(m_floatValues[index]); - } - // Gamemasters should be always able to select units - remove not selectable flag - else if (index == UNIT_FIELD_FLAGS) - { - uint32 appendValue = m_uint32Values[UNIT_FIELD_FLAGS]; - if (target->IsGameMaster()) - appendValue &= ~UNIT_FLAG_NOT_SELECTABLE; + if (m_values.HasChanged(TYPEID_OBJECT)) + m_objectData->WriteUpdate(*data, flags, this, target); - *data << uint32(appendValue); - } - // use modelid_a if not gm, _h if gm for CREATURE_FLAG_EXTRA_TRIGGER creatures - else if (index == UNIT_FIELD_DISPLAYID) - { - uint32 displayId = m_uint32Values[UNIT_FIELD_DISPLAYID]; - if (creature) - { - CreatureTemplate const* cinfo = creature->GetCreatureTemplate(); - - // this also applies for transform auras - if (SpellInfo const* transform = sSpellMgr->GetSpellInfo(getTransForm())) - for (SpellEffectInfo const* effect : transform->GetEffectsForDifficulty(GetMap()->GetDifficultyID())) - if (effect && effect->IsAura(SPELL_AURA_TRANSFORM)) - if (CreatureTemplate const* transformInfo = sObjectMgr->GetCreatureTemplate(effect->MiscValue)) - { - cinfo = transformInfo; - break; - } - - if (cinfo->flags_extra & CREATURE_FLAG_EXTRA_TRIGGER) - if (target->IsGameMaster()) - displayId = cinfo->GetFirstVisibleModel()->CreatureDisplayID; - } + if (m_values.HasChanged(TYPEID_UNIT)) + m_unitData->WriteUpdate(*data, flags, this, target); - *data << uint32(displayId); - } - // hide lootable animation for unallowed players - else if (index == OBJECT_DYNAMIC_FLAGS) - { - uint32 dynamicFlags = m_uint32Values[OBJECT_DYNAMIC_FLAGS] & ~UNIT_DYNFLAG_TAPPED; + data->put<uint32>(sizePos, data->wpos() - sizePos - 4); +} - if (creature) - { - if (creature->hasLootRecipient() && !creature->isTappedBy(target)) - dynamicFlags |= UNIT_DYNFLAG_TAPPED; +void Unit::BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const +{ + UpdateMask<NUM_CLIENT_OBJECT_TYPES> valuesMask; + valuesMask.Set(TYPEID_UNIT); - if (!target->isAllowedToLoot(creature)) - dynamicFlags &= ~UNIT_DYNFLAG_LOOTABLE; - } + std::size_t sizePos = data->wpos(); + *data << uint32(0); + *data << uint32(valuesMask.GetBlock(0)); - // unit UNIT_DYNFLAG_TRACK_UNIT should only be sent to caster of SPELL_AURA_MOD_STALKED auras - if (dynamicFlags & UNIT_DYNFLAG_TRACK_UNIT) - if (!HasAuraTypeWithCaster(SPELL_AURA_MOD_STALKED, target->GetGUID())) - dynamicFlags &= ~UNIT_DYNFLAG_TRACK_UNIT; + UF::UnitData::Mask mask; + m_unitData->AppendAllowedFieldsMaskForFlag(mask, flags); + m_unitData->WriteUpdate(*data, mask, flags, this, target); - *data << dynamicFlags; - } - // FG: pretend that OTHER players in own group are friendly ("blue") - else if (index == UNIT_FIELD_BYTES_2 || index == UNIT_FIELD_FACTIONTEMPLATE) - { - if (IsControlledByPlayer() && target != this && sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GROUP) && IsInRaidWith(target)) - { - FactionTemplateEntry const* ft1 = GetFactionTemplateEntry(); - FactionTemplateEntry const* ft2 = target->GetFactionTemplateEntry(); - if (ft1 && ft2 && !ft1->IsFriendlyTo(ft2)) - { - if (index == UNIT_FIELD_BYTES_2) - // Allow targetting opposite faction in party when enabled in config - *data << (m_uint32Values[UNIT_FIELD_BYTES_2] & ((UNIT_BYTE2_FLAG_SANCTUARY /*| UNIT_BYTE2_FLAG_AURAS | UNIT_BYTE2_FLAG_UNK5*/) << 8)); // this flag is at uint8 offset 1 !! - else - // pretend that all other HOSTILE players have own faction, to allow follow, heal, rezz (trade wont work) - *data << uint32(target->getFaction()); - } - else - *data << m_uint32Values[index]; - } - else - *data << m_uint32Values[index]; - } - else - { - // send in current format (float as float, uint32 as uint32) - *data << m_uint32Values[index]; - } - } - } + data->put<uint32>(sizePos, data->wpos() - sizePos - 4); } void Unit::DestroyForPlayer(Player* target) const @@ -13821,6 +13765,12 @@ void Unit::DestroyForPlayer(Player* target) const WorldObject::DestroyForPlayer(target); } +void Unit::ClearUpdateMask(bool remove) +{ + m_values.ClearChangesMask(&Unit::m_unitData); + Object::ClearUpdateMask(remove); +} + int32 Unit::GetHighestExclusiveSameEffectSpellGroupValue(AuraEffect const* aurEff, AuraType auraType, bool checkMiscValue /*= false*/, int32 miscValue /*= 0*/) const { int32 val = 0; @@ -13940,7 +13890,7 @@ uint32 Unit::GetVirtualItemId(uint32 slot) const if (slot >= MAX_EQUIPMENT_ITEMS) return 0; - return GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + slot * 2); + return m_unitData->VirtualItems[slot].ItemID; } uint16 Unit::GetVirtualItemAppearanceMod(uint32 slot) const @@ -13948,7 +13898,7 @@ uint16 Unit::GetVirtualItemAppearanceMod(uint32 slot) const if (slot >= MAX_EQUIPMENT_ITEMS) return 0; - return GetUInt16Value(UNIT_VIRTUAL_ITEM_SLOT_ID + slot * 2 + 1, 0); + return m_unitData->VirtualItems[slot].ItemAppearanceModID; } void Unit::SetVirtualItem(uint32 slot, uint32 itemId, uint16 appearanceModId /*= 0*/, uint16 itemVisual /*= 0*/) @@ -13956,9 +13906,10 @@ void Unit::SetVirtualItem(uint32 slot, uint32 itemId, uint16 appearanceModId /*= if (slot >= MAX_EQUIPMENT_ITEMS) return; - SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID + slot * 2, itemId); - SetUInt16Value(UNIT_VIRTUAL_ITEM_SLOT_ID + slot * 2 + 1, 0, appearanceModId); - SetUInt16Value(UNIT_VIRTUAL_ITEM_SLOT_ID + slot * 2 + 1, 1, itemVisual); + auto virtualItemField = m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::VirtualItems, slot); + SetUpdateFieldValue(virtualItemField.ModifyValue(&UF::VisibleItem::ItemID), itemId); + SetUpdateFieldValue(virtualItemField.ModifyValue(&UF::VisibleItem::ItemAppearanceModID), appearanceModId); + SetUpdateFieldValue(virtualItemField.ModifyValue(&UF::VisibleItem::ItemVisual), itemVisual); } void Unit::Talk(uint32 textId, ChatMsg msgType, float textRange, WorldObject const* target) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index cd32f1814f4..9f0e19ea0d8 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -981,8 +981,10 @@ class TC_GAME_API Unit : public WorldObject bool haveOffhandWeapon() const; bool CanDualWield() const { return m_canDualWield; } virtual void SetCanDualWield(bool value) { m_canDualWield = value; } - float GetCombatReach() const { return m_floatValues[UNIT_FIELD_COMBATREACH]; } - float GetBoundaryRadius() const { return m_floatValues[UNIT_FIELD_BOUNDINGRADIUS]; } + float GetCombatReach() const { return m_unitData->CombatReach; } + void SetCombatReach(float combatReach) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::CombatReach), combatReach); } + float GetBoundingRadius() const { return m_unitData->BoundingRadius; } + void SetBoundingRadius(float boundingRadius) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::BoundingRadius), boundingRadius); } bool IsWithinCombatRange(const Unit* obj, float dist2compare) const; bool IsWithinMeleeRange(Unit const* obj) const; float GetMeleeRange(Unit const* target) const; @@ -1029,17 +1031,20 @@ class TC_GAME_API Unit : public WorldObject bool IsTotem() const { return (m_unitTypeMask & UNIT_MASK_TOTEM) != 0; } bool IsVehicle() const { return (m_unitTypeMask & UNIT_MASK_VEHICLE) != 0; } - uint8 getLevel() const { return uint8(GetUInt32Value(UNIT_FIELD_LEVEL)); } + uint8 getLevel() const { return uint8(m_unitData->Level); } uint8 GetLevelForTarget(WorldObject const* /*target*/) const override { return getLevel(); } void SetLevel(uint8 lvl); - uint8 getRace() const { return GetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_RACE); } + uint8 getRace() const { return m_unitData->Race; } + void SetRace(uint8 race) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Race), race); } uint64 getRaceMask() const { return UI64LIT(1) << (getRace() - 1); } - uint8 getClass() const { return GetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_CLASS); } + uint8 getClass() const { return m_unitData->ClassId; } + void SetClass(uint8 classId) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ClassId), classId); } uint32 getClassMask() const { return 1 << (getClass()-1); } - uint8 getGender() const { return GetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER); } + uint8 getGender() const { return m_unitData->Sex; } + void SetGender(uint8 sex) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Sex), sex); } - float GetStat(Stats stat) const { return float(GetUInt32Value(UNIT_FIELD_STAT+stat)); } - void SetStat(Stats stat, int32 val) { SetStatInt32Value(UNIT_FIELD_STAT+stat, val); } + float GetStat(Stats stat) const { return float(m_unitData->Stats[stat]); } + void SetStat(Stats stat, int32 val) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Stats, stat), val); } uint32 GetArmor() const { return GetResistance(SPELL_SCHOOL_NORMAL) + GetBonusResistanceMod(SPELL_SCHOOL_NORMAL); } void SetArmor(int32 val, int32 bonusVal) { @@ -1047,14 +1052,14 @@ class TC_GAME_API Unit : public WorldObject SetBonusResistanceMod(SPELL_SCHOOL_NORMAL, bonusVal); } - 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(SpellSchools school) const { return m_unitData->Resistances[school]; } + int32 GetBonusResistanceMod(SpellSchools school) const { return m_unitData->BonusResistanceMods[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); } + void SetResistance(SpellSchools school, int32 val) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Resistances, school), val); } + void SetBonusResistanceMod(SpellSchools school, int32 val) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::BonusResistanceMods, school), val); } - uint64 GetHealth() const { return GetUInt64Value(UNIT_FIELD_HEALTH); } - uint64 GetMaxHealth() const { return GetUInt64Value(UNIT_FIELD_MAXHEALTH); } + uint64 GetHealth() const { return m_unitData->Health; } + uint64 GetMaxHealth() const { return m_unitData->MaxHealth; } bool IsFullHealth() const { return GetHealth() == GetMaxHealth(); } bool HealthBelowPct(int32 pct) const { return GetHealth() < CountPctFromMaxHealth(pct); } @@ -1075,8 +1080,9 @@ class TC_GAME_API Unit : public WorldObject virtual float GetDamageMultiplierForTarget(WorldObject const* /*target*/) const { return 1.0f; } virtual float GetArmorMultiplierForTarget(WorldObject const* /*target*/) const { return 1.0f; } - Powers GetPowerType() const { return Powers(GetUInt32Value(UNIT_FIELD_DISPLAY_POWER)); } + Powers GetPowerType() const { return Powers(*m_unitData->DisplayPower); } void SetPowerType(Powers power); + void SetOverrideDisplayPowerId(uint32 powerDisplayId) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::OverrideDisplayPowerID), powerDisplayId); } void UpdateDisplayPower(); int32 GetPower(Powers power) const; int32 GetMinPower(Powers power) const { return power == POWER_LUNAR_POWER ? -100 : 0; } @@ -1089,18 +1095,46 @@ class TC_GAME_API Unit : public WorldObject // returns the change in power int32 ModifyPower(Powers power, int32 val); + void ApplyModPowerCostModifier(SpellSchools school, int32 mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerCostModifier, school), mod, apply); } + void ApplyModPowerCostMultiplier(SpellSchools school, float pct, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PowerCostMultiplier, school), pct, apply); } + uint32 GetBaseAttackTime(WeaponAttackType att) const; void SetBaseAttackTime(WeaponAttackType att, uint32 val); void UpdateAttackTimeField(WeaponAttackType att); void ApplyAttackTimePercentMod(WeaponAttackType att, float val, bool apply); void ApplyCastTimePercentMod(float val, bool apply); - SheathState GetSheath() const { return SheathState(GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_SHEATH_STATE)); } - void SetSheath(SheathState sheathed) { SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_SHEATH_STATE, sheathed); } + void SetModCastingSpeed(float castingSpeed) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModCastingSpeed), castingSpeed); } + void SetModSpellHaste(float spellHaste) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModSpellHaste), spellHaste); } + void SetModHaste(float haste) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModHaste), haste); } + void SetModRangedHaste(float rangedHaste) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModRangedHaste), rangedHaste); } + void SetModHasteRegen(float hasteRegen) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModHasteRegen), hasteRegen); } + void SetModTimeRate(float timeRate) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ModTimeRate), timeRate); } + + bool HasUnitFlag(UnitFlags flags) const { return (*m_unitData->Flags & flags) != 0; } + void AddUnitFlag(UnitFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Flags), flags); } + void RemoveUnitFlag(UnitFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Flags), flags); } + void SetUnitFlags(UnitFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Flags), flags); } + bool HasUnitFlag2(UnitFlags2 flags) const { return (*m_unitData->Flags2 & flags) != 0; } + void AddUnitFlag2(UnitFlags2 flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Flags2), flags); } + void RemoveUnitFlag2(UnitFlags2 flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Flags2), flags); } + void SetUnitFlags2(UnitFlags2 flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Flags2), flags); } + bool HasUnitFlag3(UnitFlags3 flags) const { return (*m_unitData->Flags3 & flags) != 0; } + void AddUnitFlag3(UnitFlags3 flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Flags3), flags); } + void RemoveUnitFlag3(UnitFlags3 flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Flags3), flags); } + void SetUnitFlags3(UnitFlags3 flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Flags3), flags); } + + void SetCreatedBySpell(int32 spellId) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::CreatedBySpell), spellId); } + + Emote GetEmoteState() const { return Emote(*m_unitData->EmoteState); } + void SetEmoteState(Emote emote) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::EmoteState), emote); } + + SheathState GetSheath() const { return SheathState(*m_unitData->SheatheState); } + void SetSheath(SheathState sheathed) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::SheatheState), sheathed); } // faction template id - uint32 getFaction() const { return GetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE); } - void setFaction(uint32 faction) { SetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE, faction); } + uint32 getFaction() const { return m_unitData->FactionTemplate; } + void setFaction(uint32 faction) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::FactionTemplate), faction); } FactionTemplateEntry const* GetFactionTemplateEntry() const; ReputationRank GetReactionTo(Unit const* target) const; @@ -1114,23 +1148,38 @@ class TC_GAME_API Unit : public WorldObject bool IsInRaidWith(Unit const* unit) const; void GetPartyMembers(std::list<Unit*> &units); bool IsContestedGuard() const; - bool IsPvP() const { return HasByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_PVP); } - bool IsFFAPvP() const { return HasByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_FFA_PVP); } + UnitPVPStateFlags GetPvpFlags() const { return UnitPVPStateFlags(*m_unitData->PvpFlags); } + bool HasPvpFlag(UnitPVPStateFlags flags) const { return (*m_unitData->PvpFlags & flags) != 0; } + void AddPvpFlag(UnitPVPStateFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PvpFlags), flags); } + void RemovePvpFlag(UnitPVPStateFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PvpFlags), flags); } + void SetPvpFlags(UnitPVPStateFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PvpFlags), flags); } + bool IsPvP() const { return HasPvpFlag(UNIT_BYTE2_FLAG_PVP); } + bool IsFFAPvP() const { return HasPvpFlag(UNIT_BYTE2_FLAG_FFA_PVP); } virtual void SetPvP(bool state); + UnitPetFlag GetPetFlags() const { return UnitPetFlag(*m_unitData->PetFlags); } + bool HasPetFlag(UnitPetFlag flags) const { return (*m_unitData->PetFlags & flags) != 0; } + void AddPetFlag(UnitPetFlag flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PetFlags), flags); } + void RemovePetFlag(UnitPetFlag flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PetFlags), flags); } + void SetPetFlags(UnitPetFlag flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PetFlags), flags); } + uint32 GetCreatureType() const; uint32 GetCreatureTypeMask() const; - UnitStandStateType GetStandState() const { return UnitStandStateType(GetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_STAND_STATE)); } + UnitStandStateType GetStandState() const { return UnitStandStateType(*m_unitData->StandState); } bool IsSitState() const; bool IsStandState() const; void SetStandState(UnitStandStateType state, uint32 animKitID = 0); - void SetStandFlags(uint8 flags) { SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_VIS_FLAG, flags); } - void RemoveStandFlags(uint8 flags) { RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_VIS_FLAG, flags); } + void AddVisFlags(UnitVisFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::VisFlags), flags); } + void RemoveVisFlags(UnitVisFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::VisFlags), flags); } + void SetVisFlags(UnitVisFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::VisFlags), flags); } - bool IsMounted() const { return HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_MOUNT); } - uint32 GetMountID() const { return GetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID); } + void SetAnimTier(UnitBytes1_Flags animTier, bool notifyClient); + + bool IsMounted() const { return HasUnitFlag(UNIT_FLAG_MOUNT); } + uint32 GetMountDisplayId() const { return m_unitData->MountDisplayID; } + void SetMountDisplayId(uint32 mountDisplayId) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::MountDisplayID), mountDisplayId); } void Mount(uint32 mount, uint32 vehicleId = 0, uint32 creatureEntry = 0); void Dismount(); MountCapabilityEntry const* GetMountCapability(uint32 mountType) const; @@ -1199,27 +1248,35 @@ class TC_GAME_API Unit : public WorldObject MeleeHitOutcome RollMeleeOutcomeAgainst(Unit const* victim, WeaponAttackType attType) const; - bool IsVendor() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_VENDOR); } - bool IsTrainer() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_TRAINER); } - bool IsQuestGiver() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); } - bool IsGossip() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); } - bool IsTaxi() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_FLIGHTMASTER); } - bool IsGuildMaster() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_PETITIONER); } - bool IsBattleMaster() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_BATTLEMASTER); } - bool IsBanker() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_BANKER); } - bool IsInnkeeper() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_INNKEEPER); } - bool IsSpiritHealer() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPIRITHEALER); } - bool IsSpiritGuide() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPIRITGUIDE); } - bool IsTabardDesigner()const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_TABARDDESIGNER); } - bool IsAuctioner() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_AUCTIONEER); } - bool IsArmorer() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_REPAIR); } + bool HasNpcFlag(NPCFlags flags) const { return (m_unitData->NpcFlags[0] & flags) != 0; } + void AddNpcFlag(NPCFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 0), flags); } + void RemoveNpcFlag(NPCFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 0), flags); } + void SetNpcFlags(NPCFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 0), flags); } + bool HasNpcFlag2(NPCFlags2 flags) const { return (m_unitData->NpcFlags[1] & flags) != 0; } + void AddNpcFlag2(NPCFlags2 flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 1), flags); } + void RemoveNpcFlag2(NPCFlags2 flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 1), flags); } + void SetNpcFlags2(NPCFlags2 flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 1), flags); } + bool IsVendor() const { return HasNpcFlag(UNIT_NPC_FLAG_VENDOR); } + bool IsTrainer() const { return HasNpcFlag(UNIT_NPC_FLAG_TRAINER); } + bool IsQuestGiver() const { return HasNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); } + bool IsGossip() const { return HasNpcFlag(UNIT_NPC_FLAG_GOSSIP); } + bool IsTaxi() const { return HasNpcFlag(UNIT_NPC_FLAG_FLIGHTMASTER); } + bool IsGuildMaster() const { return HasNpcFlag(UNIT_NPC_FLAG_PETITIONER); } + bool IsBattleMaster() const { return HasNpcFlag(UNIT_NPC_FLAG_BATTLEMASTER); } + bool IsBanker() const { return HasNpcFlag(UNIT_NPC_FLAG_BANKER); } + bool IsInnkeeper() const { return HasNpcFlag(UNIT_NPC_FLAG_INNKEEPER); } + bool IsSpiritHealer() const { return HasNpcFlag(UNIT_NPC_FLAG_SPIRITHEALER); } + bool IsSpiritGuide() const { return HasNpcFlag(UNIT_NPC_FLAG_SPIRITGUIDE); } + bool IsTabardDesigner()const{ return HasNpcFlag(UNIT_NPC_FLAG_TABARDDESIGNER); } + bool IsAuctioner() const { return HasNpcFlag(UNIT_NPC_FLAG_AUCTIONEER); } + bool IsArmorer() const { return HasNpcFlag(UNIT_NPC_FLAG_REPAIR); } bool IsServiceProvider() const; - bool IsSpiritService() const { return HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPIRITHEALER | UNIT_NPC_FLAG_SPIRITGUIDE); } + bool IsSpiritService() const { return HasNpcFlag(NPCFlags(UNIT_NPC_FLAG_SPIRITHEALER | UNIT_NPC_FLAG_SPIRITGUIDE)); } bool IsCritter() const { return GetCreatureType() == CREATURE_TYPE_CRITTER; } bool IsInFlight() const { return HasUnitState(UNIT_STATE_IN_FLIGHT); } - bool IsInCombat() const { return HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); } + bool IsInCombat() const { return HasUnitFlag(UNIT_FLAG_IN_COMBAT); } bool IsInCombatWith(Unit const* who) const; void CombatStart(Unit* target, bool initialAggro = true); void SetInCombatState(bool PvP, Unit* enemy = NULL); @@ -1310,8 +1367,8 @@ class TC_GAME_API Unit : public WorldObject void MonsterMoveWithSpeed(float x, float y, float z, float speed, bool generatePath = false, bool forceDestination = false); - void SendSetPlayHoverAnim(bool enable); + void SetHoverHeight(float hoverHeight) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::HoverHeight), hoverHeight); } bool IsLevitating() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY); } bool IsWalking() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_WALKING); } @@ -1347,19 +1404,22 @@ class TC_GAME_API Unit : public WorldObject DeathState getDeathState() const { return m_deathState; } virtual void setDeathState(DeathState s); // overwrited in Creature/Player/Pet - ObjectGuid GetOwnerGUID() const { return GetGuidValue(UNIT_FIELD_SUMMONEDBY); } + ObjectGuid GetOwnerGUID() const { return m_unitData->SummonedBy; } void SetOwnerGUID(ObjectGuid owner); - ObjectGuid GetCreatorGUID() const { return GetGuidValue(UNIT_FIELD_CREATEDBY); } - void SetCreatorGUID(ObjectGuid creator) { SetGuidValue(UNIT_FIELD_CREATEDBY, creator); } - ObjectGuid GetMinionGUID() const { return GetGuidValue(UNIT_FIELD_SUMMON); } - void SetMinionGUID(ObjectGuid guid) { SetGuidValue(UNIT_FIELD_SUMMON, guid); } - ObjectGuid GetCharmerGUID() const { return GetGuidValue(UNIT_FIELD_CHARMEDBY); } - void SetCharmerGUID(ObjectGuid owner) { SetGuidValue(UNIT_FIELD_CHARMEDBY, owner); } - ObjectGuid GetCharmGUID() const { return GetGuidValue(UNIT_FIELD_CHARM); } - void SetPetGUID(ObjectGuid guid) { m_SummonSlot[SUMMON_SLOT_PET] = guid; } + ObjectGuid GetCreatorGUID() const { return m_unitData->CreatedBy; } + void SetCreatorGUID(ObjectGuid creator) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::CreatedBy), creator); } + ObjectGuid GetMinionGUID() const { return m_unitData->Summon; } + void SetMinionGUID(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Summon), guid); } + ObjectGuid GetCharmerGUID() const { return m_unitData->CharmedBy; } + void SetCharmerGUID(ObjectGuid owner) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::CharmedBy), owner); } + ObjectGuid GetCharmGUID() const { return m_unitData->Charm; } + void SetCharmGUID(ObjectGuid charm) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Charm), charm); } ObjectGuid GetPetGUID() const { return m_SummonSlot[SUMMON_SLOT_PET]; } - void SetCritterGUID(ObjectGuid guid) { SetGuidValue(UNIT_FIELD_CRITTER, guid); } - ObjectGuid GetCritterGUID() const { return GetGuidValue(UNIT_FIELD_CRITTER); } + void SetPetGUID(ObjectGuid guid) { m_SummonSlot[SUMMON_SLOT_PET] = guid; } + ObjectGuid GetCritterGUID() const { return m_unitData->Critter; } + void SetCritterGUID(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Critter), guid); } + ObjectGuid GetBattlePetCompanionGUID() const { return m_unitData->BattlePetCompanionGUID; } + void SetBattlePetCompanionGUID(ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::BattlePetCompanionGUID), guid); } bool IsControlledByPlayer() const { return m_ControlledByPlayer; } ObjectGuid GetCharmerOrOwnerGUID() const; @@ -1400,6 +1460,8 @@ class TC_GAME_API Unit : public WorldObject CharmInfo* GetCharmInfo() { return m_charmInfo; } CharmInfo* InitCharmInfo(); void DeleteCharmInfo(); + void SetPetNumberForClient(uint32 petNumber) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PetNumber), petNumber); } + void SetPetNameTimestamp(uint32 timestamp) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PetNameTimestamp), timestamp); } void UpdateCharmAI(); // returns the unit that this player IS CONTROLLING Unit* GetUnitBeingMoved() const; @@ -1549,22 +1611,36 @@ class TC_GAME_API Unit : public WorldObject void InitStatBuffMods(); void ApplyStatBuffMod(Stats stat, float val, bool apply); void ApplyStatPercentBuffMod(Stats stat, float val, bool apply); + void UpdateStatBuffModForClient(Stats stat); void SetCreateStat(Stats stat, float val) { m_createStats[stat] = val; } - void SetCreateHealth(uint32 val) { SetUInt32Value(UNIT_FIELD_BASE_HEALTH, val); } - uint32 GetCreateHealth() const { return GetUInt32Value(UNIT_FIELD_BASE_HEALTH); } - void SetCreateMana(uint32 val) { SetUInt32Value(UNIT_FIELD_BASE_MANA, val); } - uint32 GetCreateMana() const { return GetUInt32Value(UNIT_FIELD_BASE_MANA); } + void SetCreateHealth(uint32 val) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::BaseHealth), val); } + uint32 GetCreateHealth() const { return m_unitData->BaseHealth; } + void SetCreateMana(uint32 val) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::BaseMana), val); } + uint32 GetCreateMana() const { return m_unitData->BaseMana; } int32 GetCreatePowers(Powers power) const; - float GetPosStat(Stats stat) const { return GetFloatValue(UNIT_FIELD_POSSTAT+stat); } - float GetNegStat(Stats stat) const { return GetFloatValue(UNIT_FIELD_NEGSTAT+stat); } + float GetPosStat(Stats stat) const { return m_unitData->StatPosBuff[stat]; } + float GetNegStat(Stats stat) const { return m_unitData->StatNegBuff[stat]; } float GetCreateStat(Stats stat) const { return m_createStats[stat]; } - uint32 GetChannelSpellId() const { return GetUInt32Value(UNIT_FIELD_CHANNEL_DATA); } - void SetChannelSpellId(uint32 channelSpellId) { SetUInt32Value(UNIT_FIELD_CHANNEL_DATA, channelSpellId); } - uint32 GetChannelSpellXSpellVisualId() const { return GetUInt32Value(UNIT_FIELD_CHANNEL_DATA + 1); } - void SetChannelSpellXSpellVisualId(uint32 channelSpellXSpellVisualId) { SetUInt32Value(UNIT_FIELD_CHANNEL_DATA + 1, channelSpellXSpellVisualId); } - DynamicFieldStructuredView<ObjectGuid> GetChannelObjects() const { return GetDynamicStructuredValues<ObjectGuid>(UNIT_DYNAMIC_FIELD_CHANNEL_OBJECTS); } - void AddChannelObject(ObjectGuid guid) { AddDynamicStructuredValue(UNIT_DYNAMIC_FIELD_CHANNEL_OBJECTS, &guid); } + uint32 GetChannelSpellId() const { return m_unitData->ChannelData->SpellID; } + void SetChannelSpellId(uint32 channelSpellId) + { + SetUpdateFieldValue(m_values + .ModifyValue(&Unit::m_unitData) + .ModifyValue(&UF::UnitData::ChannelData) + .ModifyValue(&UF::UnitChannel::SpellID), channelSpellId); + } + uint32 GetChannelSpellXSpellVisualId() const { return m_unitData->ChannelData->SpellXSpellVisualID; } + void SetChannelSpellXSpellVisualId(uint32 channelSpellXSpellVisualId) + { + SetUpdateFieldValue(m_values + .ModifyValue(&Unit::m_unitData) + .ModifyValue(&UF::UnitData::ChannelData) + .ModifyValue(&UF::UnitChannel::SpellXSpellVisualID), channelSpellXSpellVisualId); + } + void AddChannelObject(ObjectGuid guid) { AddDynamicUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ChannelObjects)) = guid; } + void SetChannelObject(uint32 slot, ObjectGuid guid) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ChannelObjects, slot), guid); } + void ClearChannelObjects() { ClearDynamicUpdateFieldValues(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::ChannelObjects)); } void SetCurrentCastSpell(Spell* pSpell); void InterruptSpell(CurrentSpellTypes spellType, bool withDelayed = true, bool withInstant = true); @@ -1595,7 +1671,7 @@ class TC_GAME_API Unit : public WorldObject ObjectGuid m_SummonSlot[MAX_SUMMON_SLOT]; ObjectGuid m_ObjectSlot[MAX_GAMEOBJECT_SLOT]; - ShapeshiftForm GetShapeshiftForm() const { return ShapeshiftForm(GetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_SHAPESHIFT_FORM)); } + ShapeshiftForm GetShapeshiftForm() const { return ShapeshiftForm(*m_unitData->ShapeshiftForm); } void SetShapeshiftForm(ShapeshiftForm form); bool IsInFeralForm() const; @@ -1636,6 +1712,14 @@ class TC_GAME_API Unit : public WorldObject virtual void UpdateMaxPower(Powers power) = 0; virtual uint32 GetPowerIndex(Powers power) const = 0; virtual void UpdateAttackPowerAndDamage(bool ranged = false) = 0; + void SetAttackPower(int32 attackPower) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::AttackPower), attackPower); } + void SetAttackPowerModPos(int32 attackPowerMod) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::AttackPowerModPos), attackPowerMod); } + void SetAttackPowerModNeg(int32 attackPowerMod) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::AttackPowerModNeg), attackPowerMod); } + void SetAttackPowerMultiplier(float attackPowerMult) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::AttackPowerMultiplier), attackPowerMult); } + void SetRangedAttackPower(int32 attackPower) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::RangedAttackPower), attackPower); } + void SetRangedAttackPowerModPos(int32 attackPowerMod) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::RangedAttackPowerModPos), attackPowerMod); } + void SetRangedAttackPowerModNeg(int32 attackPowerMod) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::RangedAttackPowerModNeg), attackPowerMod); } + void SetRangedAttackPowerMultiplier(float attackPowerMult) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::RangedAttackPowerMultiplier), attackPowerMult); } virtual void UpdateDamagePhysical(WeaponAttackType attType); float GetTotalAttackPowerValue(WeaponAttackType attType) const; float GetWeaponDamageRange(WeaponAttackType attType, WeaponDamageRange type) const; @@ -1683,12 +1767,16 @@ class TC_GAME_API Unit : public WorldObject } void UpdateInterruptMask(); - uint32 GetDisplayId() const { return GetUInt32Value(UNIT_FIELD_DISPLAYID); } + uint32 GetDisplayId() const { return m_unitData->DisplayID; } 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); } + uint32 GetNativeDisplayId() const { return m_unitData->NativeDisplayID; } + float GetNativeDisplayScale() const { return m_unitData->NativeXDisplayScale; } void RestoreDisplayId(bool ignorePositiveAurasPreventingMounting = false); - void SetNativeDisplayId(uint32 displayId, float displayScale = 1.f) { SetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID, displayId); SetFloatValue(UNIT_FIELD_NATIVE_X_DISPLAY_SCALE, displayScale); } + void SetNativeDisplayId(uint32 displayId, float displayScale = 1.f) + { + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NativeDisplayID), displayId); + SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NativeXDisplayScale), displayScale); + } void setTransForm(uint32 spellid) { m_transform = spellid;} uint32 getTransForm() const { return m_transform;} @@ -1717,7 +1805,7 @@ class TC_GAME_API Unit : public WorldObject void RemoveAllAreaTriggers(); void ModifyAuraState(AuraStateType flag, bool apply); - uint32 BuildAuraStateUpdateForTarget(Unit* target) const; + uint32 BuildAuraStateUpdateForTarget(Unit const* target) const; bool HasAuraState(AuraStateType flag, SpellInfo const* spellProto = NULL, Unit const* Caster = NULL) const; void UnsummonAllTotems(); bool IsMagnet() const; @@ -1891,7 +1979,7 @@ class TC_GAME_API Unit : public WorldObject TempSummon* ToTempSummon() { if (IsSummon()) return reinterpret_cast<TempSummon*>(this); else return NULL; } TempSummon const* ToTempSummon() const { if (IsSummon()) return reinterpret_cast<TempSummon const*>(this); else return NULL; } - ObjectGuid GetTarget() const { return GetGuidValue(UNIT_FIELD_TARGET); } + ObjectGuid GetTarget() const { return m_unitData->Target; } virtual void SetTarget(ObjectGuid const& /*guid*/) = 0; // Movement info @@ -1920,11 +2008,17 @@ class TC_GAME_API Unit : public WorldObject uint16 GetVirtualItemAppearanceMod(uint32 slot) const; void SetVirtualItem(uint32 slot, uint32 itemId, uint16 appearanceModId = 0, uint16 itemVisual = 0); + UF::UpdateField<UF::UnitData, 0, TYPEID_UNIT> m_unitData; + protected: explicit Unit (bool isWorldObject); - void BuildValuesUpdate(uint8 updatetype, ByteBuffer* data, Player* target) const override; + UF::UpdateFieldFlag GetUpdateFieldFlagsFor(Player const* target) const override; + void BuildValuesCreate(ByteBuffer* data, Player const* target) const override; + void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override; + void BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override; void DestroyForPlayer(Player* target) const override; + void ClearUpdateMask(bool remove) override; UnitAI* i_AI, *i_disabledAI; @@ -1936,6 +2030,8 @@ class TC_GAME_API Unit : public WorldObject bool m_AutoRepeatFirstCast; float m_createStats[MAX_STATS]; + float m_floatStatPosBuff[MAX_STATS]; + float m_floatStatNegBuff[MAX_STATS]; AttackerSet m_attackers; Unit* m_attacking; diff --git a/src/server/game/Entities/Unit/UnitDefines.h b/src/server/game/Entities/Unit/UnitDefines.h index 320697e68af..363ffd7dc16 100644 --- a/src/server/game/Entities/Unit/UnitDefines.h +++ b/src/server/game/Entities/Unit/UnitDefines.h @@ -47,43 +47,20 @@ enum UnitStandStateType : uint8 }; // byte flag value (UNIT_FIELD_BYTES_1, 2) -enum UnitStandFlags : uint8 +enum UnitVisFlags : uint8 { - UNIT_STAND_FLAGS_UNK1 = 0x01, - UNIT_STAND_FLAGS_CREEP = 0x02, - UNIT_STAND_FLAGS_UNTRACKABLE = 0x04, - UNIT_STAND_FLAGS_UNK4 = 0x08, - UNIT_STAND_FLAGS_UNK5 = 0x10, - UNIT_STAND_FLAGS_ALL = 0xFF -}; - -enum UnitBytes0Offsets : uint8 -{ - UNIT_BYTES_0_OFFSET_RACE = 0, - UNIT_BYTES_0_OFFSET_CLASS = 1, - UNIT_BYTES_0_OFFSET_PLAYER_CLASS = 2, - UNIT_BYTES_0_OFFSET_GENDER = 3 -}; - -enum UnitBytes1Offsets : uint8 -{ - UNIT_BYTES_1_OFFSET_STAND_STATE = 0, - UNIT_BYTES_1_OFFSET_PET_TALENTS = 1, // unused - UNIT_BYTES_1_OFFSET_VIS_FLAG = 2, - UNIT_BYTES_1_OFFSET_ANIM_TIER = 3 -}; - -enum UnitBytes2Offsets : uint8 -{ - UNIT_BYTES_2_OFFSET_SHEATH_STATE = 0, - UNIT_BYTES_2_OFFSET_PVP_FLAG = 1, - UNIT_BYTES_2_OFFSET_PET_FLAGS = 2, - UNIT_BYTES_2_OFFSET_SHAPESHIFT_FORM = 3 + UNIT_VIS_FLAGS_UNK1 = 0x01, + UNIT_VIS_FLAGS_CREEP = 0x02, + UNIT_VIS_FLAGS_UNTRACKABLE = 0x04, + UNIT_VIS_FLAGS_UNK4 = 0x08, + UNIT_VIS_FLAGS_UNK5 = 0x10, + UNIT_VIS_FLAGS_ALL = 0xFF }; // byte flags value (UNIT_FIELD_BYTES_1, 3) enum UnitBytes1_Flags : uint8 { + UNIT_BYTE1_FLAG_NONE = 0x00, UNIT_BYTE1_FLAG_ALWAYS_STAND = 0x01, UNIT_BYTE1_FLAG_HOVER = 0x02, UNIT_BYTE1_FLAG_UNK_3 = 0x04, @@ -103,6 +80,7 @@ enum SheathState : uint8 // byte (1 from 0..3) of UNIT_FIELD_BYTES_2 enum UnitPVPStateFlags : uint8 { + UNIT_BYTE2_FLAG_NONE = 0x00, UNIT_BYTE2_FLAG_PVP = 0x01, UNIT_BYTE2_FLAG_UNK1 = 0x02, UNIT_BYTE2_FLAG_FFA_PVP = 0x04, @@ -114,10 +92,11 @@ enum UnitPVPStateFlags : uint8 }; // byte (2 from 0..3) of UNIT_FIELD_BYTES_2 -enum UnitRename : uint8 +enum UnitPetFlag : uint8 { - UNIT_CAN_BE_RENAMED = 0x01, - UNIT_CAN_BE_ABANDONED = 0x02 + UNIT_PET_FLAG_NONE = 0x0, + UNIT_PET_FLAG_CAN_BE_RENAMED = 0x01, + UNIT_PET_FLAG_CAN_BE_ABANDONED = 0x02 }; // high byte (3 from 0..3) of UNIT_FIELD_BYTES_2 @@ -238,49 +217,54 @@ enum UnitFlags3 : uint32 }; /// Non Player Character flags -enum NPCFlags : uint64 +enum NPCFlags : uint32 +{ + UNIT_NPC_FLAG_NONE = 0x00000000, + UNIT_NPC_FLAG_GOSSIP = 0x00000001, // 100% + UNIT_NPC_FLAG_QUESTGIVER = 0x00000002, // 100% + UNIT_NPC_FLAG_UNK1 = 0x00000004, + UNIT_NPC_FLAG_UNK2 = 0x00000008, + UNIT_NPC_FLAG_TRAINER = 0x00000010, // 100% + UNIT_NPC_FLAG_TRAINER_CLASS = 0x00000020, // 100% + UNIT_NPC_FLAG_TRAINER_PROFESSION = 0x00000040, // 100% + UNIT_NPC_FLAG_VENDOR = 0x00000080, // 100% + UNIT_NPC_FLAG_VENDOR_AMMO = 0x00000100, // 100%, general goods vendor + UNIT_NPC_FLAG_VENDOR_FOOD = 0x00000200, // 100% + UNIT_NPC_FLAG_VENDOR_POISON = 0x00000400, // guessed + UNIT_NPC_FLAG_VENDOR_REAGENT = 0x00000800, // 100% + UNIT_NPC_FLAG_REPAIR = 0x00001000, // 100% + UNIT_NPC_FLAG_FLIGHTMASTER = 0x00002000, // 100% + UNIT_NPC_FLAG_SPIRITHEALER = 0x00004000, // guessed + UNIT_NPC_FLAG_SPIRITGUIDE = 0x00008000, // guessed + UNIT_NPC_FLAG_INNKEEPER = 0x00010000, // 100% + UNIT_NPC_FLAG_BANKER = 0x00020000, // 100% + UNIT_NPC_FLAG_PETITIONER = 0x00040000, // 100% 0xC0000 = guild petitions, 0x40000 = arena team petitions + UNIT_NPC_FLAG_TABARDDESIGNER = 0x00080000, // 100% + UNIT_NPC_FLAG_BATTLEMASTER = 0x00100000, // 100% + UNIT_NPC_FLAG_AUCTIONEER = 0x00200000, // 100% + UNIT_NPC_FLAG_STABLEMASTER = 0x00400000, // 100% + UNIT_NPC_FLAG_GUILD_BANKER = 0x00800000, // + UNIT_NPC_FLAG_SPELLCLICK = 0x01000000, // + UNIT_NPC_FLAG_PLAYER_VEHICLE = 0x02000000, // players with mounts that have vehicle data should have it set + UNIT_NPC_FLAG_MAILBOX = 0x04000000, // mailbox + UNIT_NPC_FLAG_ARTIFACT_POWER_RESPEC = 0x08000000, // artifact powers reset + UNIT_NPC_FLAG_TRANSMOGRIFIER = 0x10000000, // transmogrification + UNIT_NPC_FLAG_VAULTKEEPER = 0x20000000, // void storage + UNIT_NPC_FLAG_WILD_BATTLE_PET = 0x40000000, // Pet that player can fight (Battle Pet) + UNIT_NPC_FLAG_BLACK_MARKET = 0x80000000 // black market +}; + +enum NPCFlags2 : uint32 { - UNIT_NPC_FLAG_NONE = 0x00000000000, - UNIT_NPC_FLAG_GOSSIP = 0x00000000001, // 100% - UNIT_NPC_FLAG_QUESTGIVER = 0x00000000002, // 100% - UNIT_NPC_FLAG_UNK1 = 0x00000000004, - UNIT_NPC_FLAG_UNK2 = 0x00000000008, - UNIT_NPC_FLAG_TRAINER = 0x00000000010, // 100% - UNIT_NPC_FLAG_TRAINER_CLASS = 0x00000000020, // 100% - UNIT_NPC_FLAG_TRAINER_PROFESSION = 0x00000000040, // 100% - UNIT_NPC_FLAG_VENDOR = 0x00000000080, // 100% - UNIT_NPC_FLAG_VENDOR_AMMO = 0x00000000100, // 100%, general goods vendor - UNIT_NPC_FLAG_VENDOR_FOOD = 0x00000000200, // 100% - UNIT_NPC_FLAG_VENDOR_POISON = 0x00000000400, // guessed - UNIT_NPC_FLAG_VENDOR_REAGENT = 0x00000000800, // 100% - UNIT_NPC_FLAG_REPAIR = 0x00000001000, // 100% - UNIT_NPC_FLAG_FLIGHTMASTER = 0x00000002000, // 100% - UNIT_NPC_FLAG_SPIRITHEALER = 0x00000004000, // guessed - UNIT_NPC_FLAG_SPIRITGUIDE = 0x00000008000, // guessed - UNIT_NPC_FLAG_INNKEEPER = 0x00000010000, // 100% - UNIT_NPC_FLAG_BANKER = 0x00000020000, // 100% - UNIT_NPC_FLAG_PETITIONER = 0x00000040000, // 100% 0xC0000 = guild petitions, 0x40000 = arena team petitions - UNIT_NPC_FLAG_TABARDDESIGNER = 0x00000080000, // 100% - UNIT_NPC_FLAG_BATTLEMASTER = 0x00000100000, // 100% - UNIT_NPC_FLAG_AUCTIONEER = 0x00000200000, // 100% - UNIT_NPC_FLAG_STABLEMASTER = 0x00000400000, // 100% - UNIT_NPC_FLAG_GUILD_BANKER = 0x00000800000, // - UNIT_NPC_FLAG_SPELLCLICK = 0x00001000000, // - UNIT_NPC_FLAG_PLAYER_VEHICLE = 0x00002000000, // players with mounts that have vehicle data should have it set - UNIT_NPC_FLAG_MAILBOX = 0x00004000000, // mailbox - UNIT_NPC_FLAG_ARTIFACT_POWER_RESPEC = 0x00008000000, // artifact powers reset - UNIT_NPC_FLAG_TRANSMOGRIFIER = 0x00010000000, // transmogrification - UNIT_NPC_FLAG_VAULTKEEPER = 0x00020000000, // void storage - UNIT_NPC_FLAG_WILD_BATTLE_PET = 0x00040000000, // Pet that player can fight (Battle Pet) - UNIT_NPC_FLAG_BLACK_MARKET = 0x00080000000, // black market - UNIT_NPC_FLAG_ITEM_UPGRADE_MASTER = 0x00100000000, - UNIT_NPC_FLAG_GARRISON_ARCHITECT = 0x00200000000, - UNIT_NPC_FLAG_STEERING = 0x00400000000, - UNIT_NPC_FLAG_SHIPMENT_CRAFTER = 0x01000000000, - UNIT_NPC_FLAG_GARRISON_MISSION_NPC = 0x02000000000, - UNIT_NPC_FLAG_TRADESKILL_NPC = 0x04000000000, - UNIT_NPC_FLAG_BLACK_MARKET_VIEW = 0x08000000000, - UNIT_NPC_FLAG_CONTRIBUTION_COLLECTOR = 0x40000000000, + UNIT_NPC_FLAG_2_NONE = 0x000, + UNIT_NPC_FLAG_2_ITEM_UPGRADE_MASTER = 0x001, + UNIT_NPC_FLAG_2_GARRISON_ARCHITECT = 0x002, + UNIT_NPC_FLAG_2_STEERING = 0x004, + UNIT_NPC_FLAG_2_SHIPMENT_CRAFTER = 0x010, + UNIT_NPC_FLAG_2_GARRISON_MISSION_NPC = 0x020, + UNIT_NPC_FLAG_2_TRADESKILL_NPC = 0x040, + UNIT_NPC_FLAG_2_BLACK_MARKET_VIEW = 0x080, + UNIT_NPC_FLAG_2_CONTRIBUTION_COLLECTOR = 0x400 }; enum MovementFlags : uint32 diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index 397a80b3eee..88c57e65e9a 100644 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -48,9 +48,9 @@ UsableSeatNum(0), _me(unit), _vehicleInfo(vehInfo), _creatureEntry(creatureEntry // Set or remove correct flags based on available seats. Will overwrite db data (if wrong). if (UsableSeatNum) - _me->SetFlag64(UNIT_NPC_FLAGS, (_me->GetTypeId() == TYPEID_PLAYER ? UNIT_NPC_FLAG_PLAYER_VEHICLE : UNIT_NPC_FLAG_SPELLCLICK)); + _me->AddNpcFlag((_me->GetTypeId() == TYPEID_PLAYER ? UNIT_NPC_FLAG_PLAYER_VEHICLE : UNIT_NPC_FLAG_SPELLCLICK)); else - _me->RemoveFlag64(UNIT_NPC_FLAGS, (_me->GetTypeId() == TYPEID_PLAYER ? UNIT_NPC_FLAG_PLAYER_VEHICLE : UNIT_NPC_FLAG_SPELLCLICK)); + _me->RemoveNpcFlag((_me->GetTypeId() == TYPEID_PLAYER ? UNIT_NPC_FLAG_PLAYER_VEHICLE : UNIT_NPC_FLAG_SPELLCLICK)); InitMovementInfoForBase(); } @@ -483,7 +483,7 @@ Vehicle* Vehicle::RemovePassenger(Unit* unit) unit->GetName().c_str(), _me->GetEntry(), _vehicleInfo->ID, _me->GetGUID().ToString().c_str(), (int32)seat->first); if (seat->second.SeatInfo->CanEnterOrExit() && ++UsableSeatNum) - _me->SetFlag64(UNIT_NPC_FLAGS, (_me->GetTypeId() == TYPEID_PLAYER ? UNIT_NPC_FLAG_PLAYER_VEHICLE : UNIT_NPC_FLAG_SPELLCLICK)); + _me->AddNpcFlag((_me->GetTypeId() == TYPEID_PLAYER ? UNIT_NPC_FLAG_PLAYER_VEHICLE : UNIT_NPC_FLAG_SPELLCLICK)); // Enable gravity for passenger when he did not have it active before entering the vehicle if (seat->second.SeatInfo->Flags & VEHICLE_SEAT_FLAG_DISABLE_GRAVITY && !seat->second.Passenger.IsGravityDisabled) @@ -491,7 +491,7 @@ Vehicle* Vehicle::RemovePassenger(Unit* unit) // Remove UNIT_FLAG_NOT_SELECTABLE if passenger did not have it before entering vehicle if (seat->second.SeatInfo->Flags & VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE && !seat->second.Passenger.IsUnselectable) - unit->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + unit->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); seat->second.Passenger.Reset(); @@ -768,7 +768,7 @@ bool VehicleJoinEvent::Execute(uint64, uint32) Passenger->SetVehicle(Target); Seat->second.Passenger.Guid = Passenger->GetGUID(); - Seat->second.Passenger.IsUnselectable = Passenger->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + Seat->second.Passenger.IsUnselectable = Passenger->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE); Seat->second.Passenger.IsGravityDisabled = Passenger->HasUnitMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY); if (Seat->second.SeatInfo->CanEnterOrExit()) { @@ -777,9 +777,9 @@ bool VehicleJoinEvent::Execute(uint64, uint32) if (!Target->UsableSeatNum) { if (Target->GetBase()->GetTypeId() == TYPEID_PLAYER) - Target->GetBase()->RemoveFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_PLAYER_VEHICLE); + Target->GetBase()->RemoveNpcFlag(UNIT_NPC_FLAG_PLAYER_VEHICLE); else - Target->GetBase()->RemoveFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); + Target->GetBase()->RemoveNpcFlag(UNIT_NPC_FLAG_SPELLCLICK); } } @@ -806,7 +806,7 @@ bool VehicleJoinEvent::Execute(uint64, uint32) Passenger->SetDisableGravity(true); if (Seat->second.SeatInfo->Flags & VEHICLE_SEAT_FLAG_PASSENGER_NOT_SELECTABLE) - Passenger->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + Passenger->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); Passenger->m_movementInfo.transport.pos.Relocate(veSeat->AttachmentOffset.X, veSeat->AttachmentOffset.Y, veSeat->AttachmentOffset.Z); Passenger->m_movementInfo.transport.time = 0; diff --git a/src/server/game/Events/GameEventMgr.cpp b/src/server/game/Events/GameEventMgr.cpp index 512b8045e55..2f3102f5e65 100644 --- a/src/server/game/Events/GameEventMgr.cpp +++ b/src/server/game/Events/GameEventMgr.cpp @@ -1160,11 +1160,12 @@ void GameEventMgr::UpdateEventNPCFlags(uint16 event_id) for (auto itr = creatureBounds.first; itr != creatureBounds.second; ++itr) { Creature* creature = itr->second; - uint32 npcflag = GetNPCFlag(creature); + uint64 npcflag = GetNPCFlag(creature); if (CreatureTemplate const* creatureTemplate = creature->GetCreatureTemplate()) npcflag |= creatureTemplate->npcflag; - creature->SetUInt64Value(UNIT_NPC_FLAGS, npcflag); + creature->SetNpcFlags(NPCFlags(npcflag & 0xFFFFFFFF)); + creature->SetNpcFlags2(NPCFlags2(npcflag >> 32)); // reset gossip options, since the flag change might have added / removed some //cr->ResetGossipOptions(); } diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 624b42737e1..dc9dd093b36 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -93,10 +93,10 @@ std::string GetScriptCommandName(ScriptCommands command) { case SCRIPT_COMMAND_TALK: res = "SCRIPT_COMMAND_TALK"; break; case SCRIPT_COMMAND_EMOTE: res = "SCRIPT_COMMAND_EMOTE"; break; - case SCRIPT_COMMAND_FIELD_SET: res = "SCRIPT_COMMAND_FIELD_SET"; break; + case SCRIPT_COMMAND_FIELD_SET_DEPRECATED: res = "SCRIPT_COMMAND_FIELD_SET_DEPRECATED"; break; case SCRIPT_COMMAND_MOVE_TO: res = "SCRIPT_COMMAND_MOVE_TO"; break; - case SCRIPT_COMMAND_FLAG_SET: res = "SCRIPT_COMMAND_FLAG_SET"; break; - case SCRIPT_COMMAND_FLAG_REMOVE: res = "SCRIPT_COMMAND_FLAG_REMOVE"; break; + case SCRIPT_COMMAND_FLAG_SET_DEPRECATED: res = "SCRIPT_COMMAND_FLAG_SET_DEPRECATED"; break; + case SCRIPT_COMMAND_FLAG_REMOVE_DEPRECATED: res = "SCRIPT_COMMAND_FLAG_REMOVE_DEPRECATED"; break; case SCRIPT_COMMAND_TELEPORT_TO: res = "SCRIPT_COMMAND_TELEPORT_TO"; break; case SCRIPT_COMMAND_QUEST_EXPLORED: res = "SCRIPT_COMMAND_QUEST_EXPLORED"; break; case SCRIPT_COMMAND_KILL_CREDIT: res = "SCRIPT_COMMAND_KILL_CREDIT"; break; @@ -5287,6 +5287,13 @@ void ObjectMgr::LoadScripts(ScriptsType type) } break; } + case SCRIPT_COMMAND_FIELD_SET_DEPRECATED: + case SCRIPT_COMMAND_FLAG_SET_DEPRECATED: + case SCRIPT_COMMAND_FLAG_REMOVE_DEPRECATED: + { + TC_LOG_ERROR("sql.sql", "Table `%s` uses deprecated direct updatefield modify command %s for script id %u", tableName.c_str(), GetScriptCommandName(tmp.command).c_str(), tmp.id); + continue; + } default: break; } diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index 0aa19c37287..667b8ea1da4 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -101,10 +101,10 @@ enum ScriptCommands { SCRIPT_COMMAND_TALK = 0, // source/target = Creature, target = any, datalong = talk type (0=say, 1=whisper, 2=yell, 3=emote text, 4=boss emote text), datalong2 & 1 = player talk (instead of creature), dataint = string_id SCRIPT_COMMAND_EMOTE = 1, // source/target = Creature, datalong = emote id, datalong2 = 0: set emote state; > 0: play emote state - SCRIPT_COMMAND_FIELD_SET = 2, // source/target = Creature, datalong = field id, datalog2 = value + SCRIPT_COMMAND_FIELD_SET_DEPRECATED = 2, SCRIPT_COMMAND_MOVE_TO = 3, // source/target = Creature, datalong2 = time to reach, x/y/z = destination - SCRIPT_COMMAND_FLAG_SET = 4, // source/target = Creature, datalong = field id, datalog2 = bitmask - SCRIPT_COMMAND_FLAG_REMOVE = 5, // source/target = Creature, datalong = field id, datalog2 = bitmask + SCRIPT_COMMAND_FLAG_SET_DEPRECATED = 4, + SCRIPT_COMMAND_FLAG_REMOVE_DEPRECATED= 5, SCRIPT_COMMAND_TELEPORT_TO = 6, // source/target = Creature/Player (see datalong2), datalong = map_id, datalong2 = 0: Player; 1: Creature, x/y/z = destination, o = orientation SCRIPT_COMMAND_QUEST_EXPLORED = 7, // target/source = Player, target/source = GO/Creature, datalong = quest id, datalong2 = distance or 0 SCRIPT_COMMAND_KILL_CREDIT = 8, // target/source = Player, datalong = creature entry, datalong2 = 0: personal credit, 1: group credit diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index c0b5d775642..ae0d99ecc85 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -40,13 +40,12 @@ #include "Random.h" #include "SpellAuras.h" #include "UpdateData.h" -#include "UpdateFieldFlags.h" #include "Util.h" #include "World.h" #include "WorldSession.h" Roll::Roll(LootItem const& li) : itemid(li.itemid), -itemRandomPropId(li.randomPropertyId), itemRandomSuffix(li.randomSuffix), itemCount(li.count), +itemRandomPropId(li.randomPropertyId), itemCount(li.count), totalPlayersRolling(0), totalNeed(0), totalGreed(0), totalPass(0), itemSlot(0), rollVoteMask(ROLL_ALL_TYPE_NO_DISENCHANT) { } @@ -112,7 +111,7 @@ bool Group::Create(Player* leader) m_guid = ObjectGuid::Create<HighGuid::Party>(sGroupMgr->GenerateGroupId()); m_leaderGuid = leaderGuid; m_leaderName = leader->GetName(); - leader->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_GROUP_LEADER); + leader->AddPlayerFlag(PLAYER_FLAGS_GROUP_LEADER); if (isBGGroup() || isBFGroup()) { @@ -488,8 +487,6 @@ bool Group::AddMember(Player* player) { // Broadcast new player group member fields to rest of the group - player->SetFieldNotifyFlag(UF_FLAG_PARTY_MEMBER); - UpdateData groupData(player->GetMapId()); WorldPacket groupDataPacket; @@ -502,17 +499,13 @@ bool Group::AddMember(Player* player) if (Player* existingMember = itr->GetSource()) { if (player->HaveAtClient(existingMember)) - { - existingMember->SetFieldNotifyFlag(UF_FLAG_PARTY_MEMBER); - existingMember->BuildValuesUpdateBlockForPlayer(&groupData, player); - existingMember->RemoveFieldNotifyFlag(UF_FLAG_PARTY_MEMBER); - } + existingMember->BuildValuesUpdateBlockForPlayerWithFlag(&groupData, UF::UpdateFieldFlag::PartyMember, player); if (existingMember->HaveAtClient(player)) { UpdateData newData(player->GetMapId()); WorldPacket newDataPacket; - player->BuildValuesUpdateBlockForPlayer(&newData, existingMember); + player->BuildValuesUpdateBlockForPlayerWithFlag(&newData, UF::UpdateFieldFlag::PartyMember, existingMember); if (newData.HasData()) { newData.BuildPacket(&newDataPacket); @@ -527,8 +520,6 @@ bool Group::AddMember(Player* player) groupData.BuildPacket(&groupDataPacket); player->SendDirectMessage(&groupDataPacket); } - - player->RemoveFieldNotifyFlag(UF_FLAG_PARTY_MEMBER); } if (m_maxEnchantingLevel < player->GetSkillValue(SKILL_ENCHANTING)) @@ -739,9 +730,9 @@ void Group::ChangeLeader(ObjectGuid newLeaderGuid, int8 partyIndex) } if (Player* oldLeader = ObjectAccessor::FindConnectedPlayer(m_leaderGuid)) - oldLeader->RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_GROUP_LEADER); + oldLeader->RemovePlayerFlag(PLAYER_FLAGS_GROUP_LEADER); - newLeader->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_GROUP_LEADER); + newLeader->AddPlayerFlag(PLAYER_FLAGS_GROUP_LEADER); m_leaderGuid = newLeader->GetGUID(); m_leaderName = newLeader->GetName(); ToggleGroupMemberFlag(slot, MEMBER_FLAG_ASSISTANT, false); @@ -2197,11 +2188,10 @@ void Group::BroadcastGroupUpdate(void) // -- not very efficient but safe for (member_citerator citr = m_memberSlots.begin(); citr != m_memberSlots.end(); ++citr) { - Player* pp = ObjectAccessor::FindPlayer(citr->guid); - if (pp) + if (Player * pp = ObjectAccessor::FindPlayer(citr->guid)) { - pp->ForceValuesUpdateAtIndex(UNIT_FIELD_BYTES_2); - pp->ForceValuesUpdateAtIndex(UNIT_FIELD_FACTIONTEMPLATE); + pp->ForceUpdateFieldChange(pp->m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::PvpFlags)); + pp->ForceUpdateFieldChange(pp->m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::FactionTemplate)); TC_LOG_DEBUG("misc", "-- Forced group value update for '%s'", pp->GetName().c_str()); } } diff --git a/src/server/game/Groups/Group.h b/src/server/game/Groups/Group.h index 0290fb8bea5..4b57b55c2ae 100644 --- a/src/server/game/Groups/Group.h +++ b/src/server/game/Groups/Group.h @@ -183,7 +183,6 @@ class Roll : public LootValidatorRef uint32 itemid; ItemRandomEnchantmentId itemRandomPropId; - uint32 itemRandomSuffix; uint8 itemCount; typedef std::map<ObjectGuid, RollVote> PlayerVote; PlayerVote playerVote; //vote position correspond with player position (in group) diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index 6de90abd781..426164a0718 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -480,7 +480,7 @@ bool Guild::BankTab::SetItem(SQLTransaction& trans, uint8 slotId, Item* item) stmt->setUInt64(3, item->GetGUID().GetCounter()); trans->Append(stmt); - item->SetGuidValue(ITEM_FIELD_CONTAINED, ObjectGuid::Empty); + item->SetContainedIn(ObjectGuid::Empty); item->SetOwnerGUID(ObjectGuid::Empty); item->FSetState(ITEM_NEW); item->SaveToDB(trans); // Not in inventory and can be saved standalone @@ -535,7 +535,7 @@ void Guild::Member::SetStats(Player* player) m_name = player->GetName(); m_level = player->getLevel(); m_class = player->getClass(); - _gender = player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER); + _gender = player->m_playerData->NativeSex; m_zoneId = player->GetZoneId(); m_accountId = player->GetSession()->GetAccountId(); m_achievementPoints = player->GetAchievementPoints(); @@ -3312,9 +3312,9 @@ void Guild::_SendBankContentUpdate(uint8 tabId, SlotIds slots) const if (tabItem) { uint8 i = 0; - for (ItemDynamicFieldGems const& gemData : tabItem->GetGems()) + for (UF::SocketedGem const& gemData : tabItem->m_itemData->Gems) { - if (gemData.ItemId) + if (gemData.ItemID) { WorldPackets::Item::ItemGemData gem; gem.Slot = i; @@ -3389,14 +3389,14 @@ void Guild::SendBankList(WorldSession* session, uint8 tabId, bool fullUpdate) co itemInfo.Item.ItemID = tabItem->GetEntry(); itemInfo.Count = int32(tabItem->GetCount()); itemInfo.Charges = int32(abs(tabItem->GetSpellCharges())); - itemInfo.EnchantmentID = int32(tabItem->GetItemRandomPropertyId()); // verify that... - itemInfo.OnUseEnchantmentID = 0/*int32(tabItem->GetItemSuffixFactor())*/; + itemInfo.EnchantmentID = int32(tabItem->GetEnchantmentId(PERM_ENCHANTMENT_SLOT)); + itemInfo.OnUseEnchantmentID = int32(tabItem->GetEnchantmentId(USE_ENCHANTMENT_SLOT)); itemInfo.Flags = 0; uint8 i = 0; - for (ItemDynamicFieldGems const& gemData : tabItem->GetGems()) + for (UF::SocketedGem const& gemData : tabItem->m_itemData->Gems) { - if (gemData.ItemId) + if (gemData.ItemID) { WorldPackets::Item::ItemGemData gem; gem.Slot = i; diff --git a/src/server/game/Handlers/ArtifactHandler.cpp b/src/server/game/Handlers/ArtifactHandler.cpp index d977c46dcd2..fd3571b1d58 100644 --- a/src/server/game/Handlers/ArtifactHandler.cpp +++ b/src/server/game/Handlers/ArtifactHandler.cpp @@ -41,17 +41,17 @@ void WorldSession::HandleArtifactAddPower(WorldPackets::Artifact::ArtifactAddPow if (GtArtifactLevelXPEntry const* cost = sArtifactLevelXPGameTable.GetRow(artifact->GetTotalPurchasedArtifactPowers() + 1)) xpCost = uint64(currentArtifactTier == MAX_ARTIFACT_TIER ? cost->XP2 : cost->XP); - if (xpCost > artifact->GetUInt64Value(ITEM_FIELD_ARTIFACT_XP)) + if (xpCost > artifact->m_itemData->ArtifactXP) return; if (artifactAddPower.PowerChoices.empty()) return; - ItemDynamicFieldArtifactPowers const* artifactPower = artifact->GetArtifactPower(artifactAddPower.PowerChoices[0].ArtifactPowerID); + UF::ArtifactPower const* artifactPower = artifact->GetArtifactPower(artifactAddPower.PowerChoices[0].ArtifactPowerID); if (!artifactPower) return; - ArtifactPowerEntry const* artifactPowerEntry = sArtifactPowerStore.LookupEntry(artifactPower->ArtifactPowerId); + ArtifactPowerEntry const* artifactPowerEntry = sArtifactPowerStore.LookupEntry(artifactPower->ArtifactPowerID); if (!artifactPowerEntry) return; @@ -73,7 +73,7 @@ void WorldSession::HandleArtifactAddPower(WorldPackets::Artifact::ArtifactAddPow if (!(artifactPowerEntry->Flags & ARTIFACT_POWER_FLAG_NO_LINK_REQUIRED)) { - if (std::unordered_set<uint32> const* artifactPowerLinks = sDB2Manager.GetArtifactPowerLinks(artifactPower->ArtifactPowerId)) + if (std::unordered_set<uint32> const* artifactPowerLinks = sDB2Manager.GetArtifactPowerLinks(artifactPower->ArtifactPowerID)) { bool hasAnyLink = false; for (uint32 artifactPowerLinkId : *artifactPowerLinks) @@ -82,7 +82,7 @@ void WorldSession::HandleArtifactAddPower(WorldPackets::Artifact::ArtifactAddPow if (!artifactPowerLink) continue; - ItemDynamicFieldArtifactPowers const* artifactPowerLinkLearned = artifact->GetArtifactPower(artifactPowerLinkId); + UF::ArtifactPower const* artifactPowerLinkLearned = artifact->GetArtifactPower(artifactPowerLinkId); if (!artifactPowerLinkLearned) continue; @@ -98,22 +98,19 @@ void WorldSession::HandleArtifactAddPower(WorldPackets::Artifact::ArtifactAddPow } } - ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower->ArtifactPowerId, artifactPower->CurrentRankWithBonus + 1 - 1); // need data for next rank, but -1 because of how db2 data is structured + ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower->ArtifactPowerID, artifactPower->CurrentRankWithBonus + 1 - 1); // need data for next rank, but -1 because of how db2 data is structured if (!artifactPowerRank) return; - ItemDynamicFieldArtifactPowers newPower = *artifactPower; - ++newPower.PurchasedRank; - ++newPower.CurrentRankWithBonus; - artifact->SetArtifactPower(&newPower); + artifact->SetArtifactPower(artifactPower->ArtifactPowerID, artifactPower->PurchasedRank + 1, artifactPower->CurrentRankWithBonus + 1); if (artifact->IsEquipped()) { _player->ApplyArtifactPowerRank(artifact, artifactPowerRank, true); - for (ItemDynamicFieldArtifactPowers const& power : artifact->GetArtifactPowers()) + for (UF::ArtifactPower const& power : artifact->m_itemData->ArtifactPowers) { - ArtifactPowerEntry const* scaledArtifactPowerEntry = sArtifactPowerStore.AssertEntry(power.ArtifactPowerId); + ArtifactPowerEntry const* scaledArtifactPowerEntry = sArtifactPowerStore.AssertEntry(power.ArtifactPowerID); if (!(scaledArtifactPowerEntry->Flags & ARTIFACT_POWER_FLAG_SCALES_WITH_NUM_POWERS)) continue; @@ -121,16 +118,14 @@ void WorldSession::HandleArtifactAddPower(WorldPackets::Artifact::ArtifactAddPow if (!scaledArtifactPowerRank) continue; - ItemDynamicFieldArtifactPowers newScaledPower = power; - ++newScaledPower.CurrentRankWithBonus; - artifact->SetArtifactPower(&newScaledPower); + artifact->SetArtifactPower(power.ArtifactPowerID, power.PurchasedRank, power.CurrentRankWithBonus + 1); _player->ApplyArtifactPowerRank(artifact, scaledArtifactPowerRank, false); _player->ApplyArtifactPowerRank(artifact, scaledArtifactPowerRank, true); } } - artifact->SetUInt64Value(ITEM_FIELD_ARTIFACT_XP, artifact->GetUInt64Value(ITEM_FIELD_ARTIFACT_XP) - xpCost); + artifact->SetArtifactXP(artifact->m_itemData->ArtifactXP - xpCost); artifact->SetState(ITEM_CHANGED, _player); uint32 totalPurchasedArtifactPower = artifact->GetTotalPurchasedArtifactPowers(); @@ -205,7 +200,7 @@ void WorldSession::HandleArtifactSetAppearance(WorldPackets::Artifact::ArtifactS void WorldSession::HandleConfirmArtifactRespec(WorldPackets::Artifact::ConfirmArtifactRespec& confirmArtifactRespec) { - if (!_player->GetNPCIfCanInteractWith(confirmArtifactRespec.NpcGUID, UNIT_NPC_FLAG_ARTIFACT_POWER_RESPEC)) + if (!_player->GetNPCIfCanInteractWith(confirmArtifactRespec.NpcGUID, UNIT_NPC_FLAG_ARTIFACT_POWER_RESPEC, UNIT_NPC_FLAG_2_NONE)) return; Item* artifact = _player->GetItemByGuid(confirmArtifactRespec.ArtifactGUID); @@ -216,33 +211,30 @@ void WorldSession::HandleConfirmArtifactRespec(WorldPackets::Artifact::ConfirmAr if (GtArtifactLevelXPEntry const* cost = sArtifactLevelXPGameTable.GetRow(artifact->GetTotalPurchasedArtifactPowers() + 1)) xpCost = uint64(artifact->GetModifier(ITEM_MODIFIER_ARTIFACT_TIER) == 1 ? cost->XP2 : cost->XP); - if (xpCost > artifact->GetUInt64Value(ITEM_FIELD_ARTIFACT_XP)) + if (xpCost > artifact->m_itemData->ArtifactXP) return; - uint64 newAmount = artifact->GetUInt64Value(ITEM_FIELD_ARTIFACT_XP) - xpCost; + uint64 newAmount = artifact->m_itemData->ArtifactXP - xpCost; for (uint32 i = 0; i <= artifact->GetTotalPurchasedArtifactPowers(); ++i) if (GtArtifactLevelXPEntry const* cost = sArtifactLevelXPGameTable.GetRow(i)) newAmount += uint64(artifact->GetModifier(ITEM_MODIFIER_ARTIFACT_TIER) == 1 ? cost->XP2 : cost->XP); - for (ItemDynamicFieldArtifactPowers const& artifactPower : artifact->GetArtifactPowers()) + for (UF::ArtifactPower const& artifactPower : artifact->m_itemData->ArtifactPowers) { uint8 oldPurchasedRank = artifactPower.PurchasedRank; if (!oldPurchasedRank) continue; - ItemDynamicFieldArtifactPowers newPower = artifactPower; - newPower.PurchasedRank -= oldPurchasedRank; - newPower.CurrentRankWithBonus -= oldPurchasedRank; - artifact->SetArtifactPower(&newPower); + artifact->SetArtifactPower(artifactPower.ArtifactPowerID, artifactPower.PurchasedRank - oldPurchasedRank, artifactPower.CurrentRankWithBonus - oldPurchasedRank); if (artifact->IsEquipped()) - if (ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower.ArtifactPowerId, 0)) + if (ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower.ArtifactPowerID, 0)) _player->ApplyArtifactPowerRank(artifact, artifactPowerRank, false); } - for (ItemDynamicFieldArtifactPowers const& power : artifact->GetArtifactPowers()) + for (UF::ArtifactPower const& power : artifact->m_itemData->ArtifactPowers) { - ArtifactPowerEntry const* scaledArtifactPowerEntry = sArtifactPowerStore.AssertEntry(power.ArtifactPowerId); + ArtifactPowerEntry const* scaledArtifactPowerEntry = sArtifactPowerStore.AssertEntry(power.ArtifactPowerID); if (!(scaledArtifactPowerEntry->Flags & ARTIFACT_POWER_FLAG_SCALES_WITH_NUM_POWERS)) continue; @@ -250,13 +242,11 @@ void WorldSession::HandleConfirmArtifactRespec(WorldPackets::Artifact::ConfirmAr if (!scaledArtifactPowerRank) continue; - ItemDynamicFieldArtifactPowers newScaledPower = power; - newScaledPower.CurrentRankWithBonus = 0; - artifact->SetArtifactPower(&newScaledPower); + artifact->SetArtifactPower(power.ArtifactPowerID, power.PurchasedRank, 0); _player->ApplyArtifactPowerRank(artifact, scaledArtifactPowerRank, false); } - artifact->SetUInt64Value(ITEM_FIELD_ARTIFACT_XP, newAmount); + artifact->SetArtifactXP(newAmount); artifact->SetState(ITEM_CHANGED, _player); } diff --git a/src/server/game/Handlers/AuctionHouseHandler.cpp b/src/server/game/Handlers/AuctionHouseHandler.cpp index 782d01d5af0..4a9ae8f74bc 100644 --- a/src/server/game/Handlers/AuctionHouseHandler.cpp +++ b/src/server/game/Handlers/AuctionHouseHandler.cpp @@ -36,7 +36,7 @@ //void called when player click on auctioneer npc void WorldSession::HandleAuctionHelloOpcode(WorldPackets::AuctionHouse::AuctionHelloRequest& packet) { - Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Guid, UNIT_NPC_FLAG_AUCTIONEER); + Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Guid, UNIT_NPC_FLAG_AUCTIONEER, UNIT_NPC_FLAG_2_NONE); if (!unit) { TC_LOG_DEBUG("network", "WORLD: HandleAuctionHelloOpcode - Unit (%s) not found or you can't interact with him.", packet.Guid.ToString().c_str()); @@ -130,7 +130,7 @@ void WorldSession::HandleAuctionSellItem(WorldPackets::AuctionHouse::AuctionSell } - Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER); + Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER, UNIT_NPC_FLAG_2_NONE); if (!creature) { TC_LOG_DEBUG("network", "WORLD: HandleAuctionSellItem - Unit (%s) not found or you can't interact with him.", packet.Auctioneer.ToString().c_str()); @@ -174,7 +174,7 @@ void WorldSession::HandleAuctionSellItem(WorldPackets::AuctionHouse::AuctionSell } if (sAuctionMgr->GetAItem(items[i]->GetGUID().GetCounter()) || !items[i]->CanBeTraded() || items[i]->IsNotEmptyBag() || - items[i]->GetTemplate()->GetFlags() & ITEM_FLAG_CONJURED || items[i]->GetUInt32Value(ITEM_FIELD_DURATION) || + items[i]->GetTemplate()->GetFlags() & ITEM_FLAG_CONJURED || *items[i]->m_itemData->Expiration || items[i]->GetCount() < packet.Items[i].UseCount) { SendAuctionCommandResult(NULL, AUCTION_SELL_ITEM, ERR_AUCTION_DATABASE_ERROR); @@ -368,7 +368,7 @@ void WorldSession::HandleAuctionPlaceBid(WorldPackets::AuctionHouse::AuctionPlac if (!packet.AuctionItemID || !packet.BidAmount) return; // check for cheaters - Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER); + Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER, UNIT_NPC_FLAG_2_NONE); if (!creature) { TC_LOG_DEBUG("network", "WORLD: HandleAuctionPlaceBid - %s not found or you can't interact with him.", packet.Auctioneer.ToString().c_str()); @@ -492,7 +492,7 @@ void WorldSession::HandleAuctionPlaceBid(WorldPackets::AuctionHouse::AuctionPlac //this void is called when auction_owner cancels his auction void WorldSession::HandleAuctionRemoveItem(WorldPackets::AuctionHouse::AuctionRemoveItem& packet) { - Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER); + Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER, UNIT_NPC_FLAG_2_NONE); if (!creature) { TC_LOG_DEBUG("network", "WORLD: HandleAuctionRemoveItem - %s not found or you can't interact with him.", packet.Auctioneer.ToString().c_str()); @@ -559,7 +559,7 @@ void WorldSession::HandleAuctionRemoveItem(WorldPackets::AuctionHouse::AuctionRe //called when player lists his bids void WorldSession::HandleAuctionListBidderItems(WorldPackets::AuctionHouse::AuctionListBidderItems& packet) { - Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER); + Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER, UNIT_NPC_FLAG_2_NONE); if (!creature) { TC_LOG_DEBUG("network", "WORLD: HandleAuctionListBidderItems - %s not found or you can't interact with him.", packet.Auctioneer.ToString().c_str()); @@ -583,7 +583,7 @@ void WorldSession::HandleAuctionListBidderItems(WorldPackets::AuctionHouse::Auct //this void sends player info about his auctions void WorldSession::HandleAuctionListOwnerItems(WorldPackets::AuctionHouse::AuctionListOwnerItems& packet) { - Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER); + Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER, UNIT_NPC_FLAG_2_NONE); if (!creature) { TC_LOG_DEBUG("network", "WORLD: HandleAuctionListOwnerItems - %s not found or you can't interact with him.", packet.Auctioneer.ToString().c_str()); @@ -606,7 +606,7 @@ void WorldSession::HandleAuctionListOwnerItems(WorldPackets::AuctionHouse::Aucti //this void is called when player clicks on search button void WorldSession::HandleAuctionListItems(WorldPackets::AuctionHouse::AuctionListItems& packet) { - Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER); + Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER, UNIT_NPC_FLAG_2_NONE); if (!creature) { TC_LOG_DEBUG("network", "WORLD: HandleAuctionListItems - %s not found or you can't interact with him.", packet.Auctioneer.ToString().c_str()); @@ -671,7 +671,7 @@ void WorldSession::HandleAuctionListPendingSales(WorldPackets::AuctionHouse::Auc void WorldSession::HandleReplicateItems(WorldPackets::AuctionHouse::AuctionReplicateItems& packet) { - Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER); + Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Auctioneer, UNIT_NPC_FLAG_AUCTIONEER, UNIT_NPC_FLAG_2_NONE); if (!creature) { TC_LOG_DEBUG("network", "WORLD: HandleReplicateItems - %s not found or you can't interact with him.", packet.Auctioneer.ToString().c_str()); diff --git a/src/server/game/Handlers/BankHandler.cpp b/src/server/game/Handlers/BankHandler.cpp index 0750149e266..df7ca850e22 100644 --- a/src/server/game/Handlers/BankHandler.cpp +++ b/src/server/game/Handlers/BankHandler.cpp @@ -60,7 +60,7 @@ void WorldSession::HandleAutoBankItemOpcode(WorldPackets::Bank::AutoBankItem& pa void WorldSession::HandleBankerActivateOpcode(WorldPackets::NPC::Hello& packet) { - Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_BANKER); + Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_BANKER, UNIT_NPC_FLAG_2_NONE); if (!unit) { TC_LOG_ERROR("network", "WORLD: HandleBankerActivateOpcode - %s not found or you can not interact with him.", packet.Unit.ToString().c_str()); diff --git a/src/server/game/Handlers/BattleGroundHandler.cpp b/src/server/game/Handlers/BattleGroundHandler.cpp index 5388940936e..b02e7c052c6 100644 --- a/src/server/game/Handlers/BattleGroundHandler.cpp +++ b/src/server/game/Handlers/BattleGroundHandler.cpp @@ -42,7 +42,7 @@ void WorldSession::HandleBattlemasterHelloOpcode(WorldPackets::NPC::Hello& hello) { - Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(hello.Unit, UNIT_NPC_FLAG_BATTLEMASTER); + Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(hello.Unit, UNIT_NPC_FLAG_BATTLEMASTER, UNIT_NPC_FLAG_2_NONE); if (!unit) return; diff --git a/src/server/game/Handlers/BattlePetHandler.cpp b/src/server/game/Handlers/BattlePetHandler.cpp index a2d867e80df..95bdffceaa0 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(ACTIVE_PLAYER_FIELD_SUMMONED_BATTLE_PET_ID) != battlePetSummon.PetGuid) + if (*_player->m_activePlayerData->SummonedBattlePetGUID != battlePetSummon.PetGuid) GetBattlePetMgr()->SummonPet(battlePetSummon.PetGuid); else GetBattlePetMgr()->DismissPet(); diff --git a/src/server/game/Handlers/BlackMarketHandler.cpp b/src/server/game/Handlers/BlackMarketHandler.cpp index a750125927f..608299a1c0e 100644 --- a/src/server/game/Handlers/BlackMarketHandler.cpp +++ b/src/server/game/Handlers/BlackMarketHandler.cpp @@ -27,7 +27,7 @@ void WorldSession::HandleBlackMarketOpen(WorldPackets::BlackMarket::BlackMarketOpen& blackMarketOpen) { - Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(blackMarketOpen.Guid, UNIT_NPC_FLAG_BLACK_MARKET | UNIT_NPC_FLAG_BLACK_MARKET_VIEW); + Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(blackMarketOpen.Guid, UNIT_NPC_FLAG_BLACK_MARKET, UNIT_NPC_FLAG_2_BLACK_MARKET_VIEW); if (!unit) { TC_LOG_DEBUG("network", "WORLD: HandleBlackMarketHello - Unit (GUID: %s) not found or you can't interact with him.", blackMarketOpen.Guid.ToString().c_str()); @@ -54,7 +54,7 @@ void WorldSession::HandleBlackMarketRequestItems(WorldPackets::BlackMarket::Blac if (!sBlackMarketMgr->IsEnabled()) return; - Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(blackMarketRequestItems.Guid, UNIT_NPC_FLAG_BLACK_MARKET | UNIT_NPC_FLAG_BLACK_MARKET_VIEW); + Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(blackMarketRequestItems.Guid, UNIT_NPC_FLAG_BLACK_MARKET, UNIT_NPC_FLAG_2_BLACK_MARKET_VIEW); if (!unit) { TC_LOG_DEBUG("network", "WORLD: HandleBlackMarketRequestItems - Unit (GUID: %s) not found or you can't interact with him.", blackMarketRequestItems.Guid.ToString().c_str()); @@ -72,7 +72,7 @@ void WorldSession::HandleBlackMarketBidOnItem(WorldPackets::BlackMarket::BlackMa return; Player* player = GetPlayer(); - Creature* unit = player->GetNPCIfCanInteractWith(blackMarketBidOnItem.Guid, UNIT_NPC_FLAG_BLACK_MARKET); + Creature* unit = player->GetNPCIfCanInteractWith(blackMarketBidOnItem.Guid, UNIT_NPC_FLAG_BLACK_MARKET, UNIT_NPC_FLAG_2_NONE); if (!unit) { TC_LOG_DEBUG("network", "WORLD: HandleBlackMarketBidOnItem - Unit (GUID: %s) not found or you can't interact with him.", blackMarketBidOnItem.Guid.ToString().c_str()); @@ -142,7 +142,6 @@ void WorldSession::SendBlackMarketWonNotification(BlackMarketEntry const* entry, packet.MarketID = entry->GetMarketId(); packet.Item.Initialize(item); - packet.RandomPropertiesID = item->GetItemRandomPropertyId(); SendPacket(packet.Write()); } diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 9ecb11140ce..6e9136a952f 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -738,7 +738,7 @@ void WorldSession::HandleCharCreateOpcode(WorldPackets::Character::CreateCharact 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); - sWorld->AddCharacterInfo(newChar.GetGUID(), GetAccountId(), newChar.GetName(), newChar.GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER), newChar.getRace(), newChar.getClass(), newChar.getLevel(), false); + sWorld->AddCharacterInfo(newChar.GetGUID(), GetAccountId(), newChar.GetName(), newChar.m_playerData->NativeSex, newChar.getRace(), newChar.getClass(), newChar.getLevel(), false); newChar.CleanupsBeforeDelete(); }; @@ -902,7 +902,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder) return; } - pCurrChar->SetUInt32Value(PLAYER_FIELD_VIRTUAL_PLAYER_REALM, GetVirtualRealmAddress()); + pCurrChar->SetVirtualPlayerRealm(GetVirtualRealmAddress()); SendTutorialsData(); @@ -1078,10 +1078,10 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder* holder) pCurrChar->LoadPet(); // Set FFA PvP for non GM in non-rest mode - if (sWorld->IsFFAPvPRealm() && !pCurrChar->IsGameMaster() && !pCurrChar->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING)) - pCurrChar->SetByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_FFA_PVP); + if (sWorld->IsFFAPvPRealm() && !pCurrChar->IsGameMaster() && !pCurrChar->HasPlayerFlag(PLAYER_FLAGS_RESTING)) + pCurrChar->AddPvpFlag(UNIT_BYTE2_FLAG_FFA_PVP); - if (pCurrChar->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_CONTESTED_PVP)) + if (pCurrChar->HasPlayerFlag(PLAYER_FLAGS_CONTESTED_PVP)) pCurrChar->SetContestedPvP(); // Apply at_login requests @@ -1225,7 +1225,7 @@ void WorldSession::HandleTutorialFlag(WorldPackets::Misc::TutorialSetFlag& packe void WorldSession::HandleSetWatchedFactionOpcode(WorldPackets::Character::SetWatchedFaction& packet) { - GetPlayer()->SetUInt32Value(ACTIVE_PLAYER_FIELD_WATCHED_FACTION_INDEX, packet.FactionIndex); + GetPlayer()->SetWatchedFactionIndex(packet.FactionIndex); } void WorldSession::HandleSetFactionInactiveOpcode(WorldPackets::Character::SetFactionInactive& packet) @@ -1389,19 +1389,19 @@ void WorldSession::HandleSetPlayerDeclinedNames(WorldPackets::Character::SetPlay void WorldSession::HandleAlterAppearance(WorldPackets::Character::AlterApperance& packet) { BarberShopStyleEntry const* bs_hair = sBarberShopStyleStore.LookupEntry(packet.NewHairStyle); - if (!bs_hair || bs_hair->Type != 0 || bs_hair->Race != _player->getRace() || bs_hair->Sex != _player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER)) + if (!bs_hair || bs_hair->Type != 0 || bs_hair->Race != _player->getRace() || bs_hair->Sex != _player->m_playerData->NativeSex) return; BarberShopStyleEntry const* bs_facialHair = sBarberShopStyleStore.LookupEntry(packet.NewFacialHair); - if (!bs_facialHair || bs_facialHair->Type != 2 || bs_facialHair->Race != _player->getRace() || bs_facialHair->Sex != _player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER)) + if (!bs_facialHair || bs_facialHair->Type != 2 || bs_facialHair->Race != _player->getRace() || bs_facialHair->Sex != _player->m_playerData->NativeSex) return; BarberShopStyleEntry const* bs_skinColor = sBarberShopStyleStore.LookupEntry(packet.NewSkinColor); - if (bs_skinColor && (bs_skinColor->Type != 3 || bs_skinColor->Race != _player->getRace() || bs_skinColor->Sex != _player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER))) + if (bs_skinColor && (bs_skinColor->Type != 3 || bs_skinColor->Race != _player->getRace() || bs_skinColor->Sex != _player->m_playerData->NativeSex)) return; BarberShopStyleEntry const* bs_face = sBarberShopStyleStore.LookupEntry(packet.NewFace); - if (bs_face && (bs_face->Type != 4 || bs_face->Race != _player->getRace() || bs_face->Sex != _player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER))) + if (bs_face && (bs_face->Type != 4 || bs_face->Race != _player->getRace() || bs_face->Sex != _player->m_playerData->NativeSex)) return; std::array<BarberShopStyleEntry const*, PLAYER_CUSTOM_DISPLAY_SIZE> customDisplayEntries; @@ -1409,19 +1409,19 @@ void WorldSession::HandleAlterAppearance(WorldPackets::Character::AlterApperance for (std::size_t i = 0; i < PLAYER_CUSTOM_DISPLAY_SIZE; ++i) { BarberShopStyleEntry const* bs_customDisplay = sBarberShopStyleStore.LookupEntry(packet.NewCustomDisplay[i]); - if (bs_customDisplay && (bs_customDisplay->Type != 5 + i || bs_customDisplay->Race != _player->getRace() || bs_customDisplay->Sex != _player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER))) + if (bs_customDisplay && (bs_customDisplay->Type != 5 + i || bs_customDisplay->Race != _player->getRace() || bs_customDisplay->Sex != _player->m_playerData->NativeSex)) return; customDisplayEntries[i] = bs_customDisplay; customDisplay[i] = bs_customDisplay ? bs_customDisplay->Data : 0; } - if (!Player::ValidateAppearance(_player->getRace(), _player->getClass(), _player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER), + if (!Player::ValidateAppearance(_player->getRace(), _player->getClass(), _player->m_playerData->NativeSex, bs_hair->Data, packet.NewHairColor, - bs_face ? bs_face->Data : _player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID), + bs_face ? bs_face->Data : _player->m_playerData->FaceID, bs_facialHair->Data, - bs_skinColor ? bs_skinColor->Data : _player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID), + bs_skinColor ? bs_skinColor->Data : _player->m_playerData->SkinID, customDisplay)) return; @@ -1454,16 +1454,16 @@ void WorldSession::HandleAlterAppearance(WorldPackets::Character::AlterApperance _player->ModifyMoney(-int64(cost)); // it isn't free _player->UpdateCriteria(CRITERIA_TYPE_GOLD_SPENT_AT_BARBER, cost); - _player->SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID, uint8(bs_hair->Data)); - _player->SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID, uint8(packet.NewHairColor)); - _player->SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE, uint8(bs_facialHair->Data)); + _player->SetHairStyleId(bs_hair->Data); + _player->SetHairColorId(packet.NewHairColor); + _player->SetFacialHairStyleId(bs_facialHair->Data); if (bs_skinColor) - _player->SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID, uint8(bs_skinColor->Data)); + _player->SetSkinId(bs_skinColor->Data); if (bs_face) - _player->SetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID, uint8(bs_face->Data)); + _player->SetFaceId(bs_face->Data); for (uint32 i = 0; i < PLAYER_CUSTOM_DISPLAY_SIZE; ++i) - _player->SetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_CUSTOM_DISPLAY_OPTION + i, customDisplay[i]); + _player->SetCustomDisplayOption(i, customDisplay[i]); _player->UpdateCriteria(CRITERIA_TYPE_VISIT_BARBER_SHOP, 1); @@ -2230,18 +2230,11 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(std::shared_ptr<WorldPa // Title conversion if (!knownTitlesStr.empty()) { - uint32 const ktcount = KNOWN_TITLES_SIZE * 2; - uint32 knownTitles[ktcount]; - Tokenizer tokens(knownTitlesStr, ' ', ktcount); + std::vector<uint32> knownTitles; + Tokenizer tokens(knownTitlesStr, ' '); - if (tokens.size() != ktcount) - { - SendCharFactionChange(CHAR_CREATE_ERROR, factionChangeInfo.get()); - return; - } - - for (uint32 index = 0; index < ktcount; ++index) - knownTitles[index] = atoul(tokens[index]); + for (uint32 index = 0; index < tokens.size(); ++index) + knownTitles.push_back(atoul(tokens[index])); for (std::map<uint32, uint32>::const_iterator it = sObjectMgr->FactionChangeTitles.begin(); it != sObjectMgr->FactionChangeTitles.end(); ++it) { @@ -2255,6 +2248,9 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(std::shared_ptr<WorldPa { uint32 maskID = htitleInfo->MaskID; uint32 index = maskID / 32; + if (index >= knownTitles.size()) + continue; + uint32 old_flag = 1 << (maskID % 32); uint32 new_flag = 1 << (atitleInfo->MaskID % 32); if (knownTitles[index] & old_flag) @@ -2268,6 +2264,9 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(std::shared_ptr<WorldPa { uint32 maskID = atitleInfo->MaskID; uint32 index = maskID / 32; + if (index >= knownTitles.size()) + continue; + uint32 old_flag = 1 << (maskID % 32); uint32 new_flag = 1 << (htitleInfo->MaskID % 32); if (knownTitles[index] & old_flag) @@ -2279,7 +2278,7 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(std::shared_ptr<WorldPa } std::ostringstream ss; - for (uint32 index = 0; index < ktcount; ++index) + for (uint32 index = 0; index < knownTitles.size(); ++index) ss << knownTitles[index] << ' '; stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_TITLES_FACTION_CHANGE); @@ -2343,7 +2342,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(ACTIVE_PLAYER_FIELD_XP)) + if (*_player->m_activePlayerData->XP) return; if (ChrClassesEntry const* classEntry = sChrClassesStore.LookupEntry(_player->getClass())) diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index bf71dc44379..34185d478d5 100644 --- a/src/server/game/Handlers/ChatHandler.cpp +++ b/src/server/game/Handlers/ChatHandler.cpp @@ -570,8 +570,7 @@ void WorldSession::HandleEmoteOpcode(WorldPackets::Chat::EmoteClient& /* packet sScriptMgr->OnPlayerClearEmote(GetPlayer()); - if (_player->GetUInt32Value(UNIT_NPC_EMOTESTATE)) - _player->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0); + _player->SetEmoteState(EMOTE_ONESHOT_NONE); } void WorldSession::HandleTextEmoteOpcode(WorldPackets::Chat::CTextEmote& packet) @@ -603,7 +602,7 @@ void WorldSession::HandleTextEmoteOpcode(WorldPackets::Chat::CTextEmote& packet) break; case EMOTE_STATE_DANCE: case EMOTE_STATE_READ: - _player->SetUInt32Value(UNIT_NPC_EMOTESTATE, emoteAnim); + _player->SetEmoteState(Emote(emoteAnim)); break; default: // Only allow text-emotes for "dead" entities (feign death included) diff --git a/src/server/game/Handlers/GarrisonHandler.cpp b/src/server/game/Handlers/GarrisonHandler.cpp index fe1d740fb4d..565a99a3b1e 100644 --- a/src/server/game/Handlers/GarrisonHandler.cpp +++ b/src/server/game/Handlers/GarrisonHandler.cpp @@ -28,7 +28,7 @@ void WorldSession::HandleGetGarrisonInfo(WorldPackets::Garrison::GetGarrisonInfo void WorldSession::HandleGarrisonPurchaseBuilding(WorldPackets::Garrison::GarrisonPurchaseBuilding& garrisonPurchaseBuilding) { - if (!_player->GetNPCIfCanInteractWith(garrisonPurchaseBuilding.NpcGUID, UNIT_NPC_FLAG_GARRISON_ARCHITECT)) + if (!_player->GetNPCIfCanInteractWith(garrisonPurchaseBuilding.NpcGUID, UNIT_NPC_FLAG_NONE, UNIT_NPC_FLAG_2_GARRISON_ARCHITECT)) return; if (Garrison* garrison = _player->GetGarrison()) @@ -37,7 +37,7 @@ void WorldSession::HandleGarrisonPurchaseBuilding(WorldPackets::Garrison::Garris void WorldSession::HandleGarrisonCancelConstruction(WorldPackets::Garrison::GarrisonCancelConstruction& garrisonCancelConstruction) { - if (!_player->GetNPCIfCanInteractWith(garrisonCancelConstruction.NpcGUID, UNIT_NPC_FLAG_GARRISON_ARCHITECT)) + if (!_player->GetNPCIfCanInteractWith(garrisonCancelConstruction.NpcGUID, UNIT_NPC_FLAG_NONE, UNIT_NPC_FLAG_2_GARRISON_ARCHITECT)) return; if (Garrison* garrison = _player->GetGarrison()) diff --git a/src/server/game/Handlers/GuildHandler.cpp b/src/server/game/Handlers/GuildHandler.cpp index 31221a9207d..929d98da7e6 100644 --- a/src/server/game/Handlers/GuildHandler.cpp +++ b/src/server/game/Handlers/GuildHandler.cpp @@ -186,7 +186,7 @@ void WorldSession::HandleSaveGuildEmblem(WorldPackets::Guild::SaveGuildEmblem& p , emblemInfo.GetColor(), emblemInfo.GetBorderStyle() , emblemInfo.GetBorderColor(), emblemInfo.GetBackgroundColor()); - if (GetPlayer()->GetNPCIfCanInteractWith(packet.Vendor, UNIT_NPC_FLAG_TABARDDESIGNER)) + if (GetPlayer()->GetNPCIfCanInteractWith(packet.Vendor, UNIT_NPC_FLAG_TABARDDESIGNER, UNIT_NPC_FLAG_2_NONE)) { // Remove fake death if (GetPlayer()->HasUnitState(UNIT_STATE_DIED)) @@ -376,7 +376,10 @@ void WorldSession::HandleGuildChallengeUpdateRequest(WorldPackets::Guild::GuildC void WorldSession::HandleDeclineGuildInvites(WorldPackets::Guild::DeclineGuildInvites& packet) { - GetPlayer()->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_AUTO_DECLINE_GUILD, packet.Allow); + if (packet.Allow) + GetPlayer()->AddPlayerFlag(PLAYER_FLAGS_AUTO_DECLINE_GUILD); + else + GetPlayer()->RemovePlayerFlag(PLAYER_FLAGS_AUTO_DECLINE_GUILD); } void WorldSession::HandleRequestGuildRewardsList(WorldPackets::Guild::RequestGuildRewardsList& /*packet*/) diff --git a/src/server/game/Handlers/HotfixHandler.cpp b/src/server/game/Handlers/HotfixHandler.cpp index b58b7bedbe1..eee0380e4d6 100644 --- a/src/server/game/Handlers/HotfixHandler.cpp +++ b/src/server/game/Handlers/HotfixHandler.cpp @@ -70,17 +70,19 @@ void WorldSession::HandleHotfixRequest(WorldPackets::Hotfix::HotfixRequest& hotf { for (auto const& tableRecord : *hotfixedRecords) { - DB2StorageBase const* storage = sDB2Manager.GetStorage(hotfixRecord.TableHash); + uint32 hotfixTableHash = tableRecord.first; + int32 hotfixRecordId = tableRecord.second;; + DB2StorageBase const* storage = sDB2Manager.GetStorage(hotfixTableHash); WorldPackets::Hotfix::HotfixResponse::HotfixData hotfixData; hotfixData.Record = hotfixRecord; - if (storage && storage->HasRecord(hotfixData.Record.RecordID)) + if (storage && storage->HasRecord(hotfixRecordId)) { std::size_t pos = hotfixQueryResponse.HotfixContent.size(); - storage->WriteRecord(hotfixData.Record.RecordID, GetSessionDbcLocale(), hotfixQueryResponse.HotfixContent); + storage->WriteRecord(hotfixRecordId, GetSessionDbcLocale(), hotfixQueryResponse.HotfixContent); hotfixData.Size = hotfixQueryResponse.HotfixContent.size() - pos; } - else if (std::vector<uint8> const* blobData = sDB2Manager.GetHotfixBlobData(hotfixData.Record.TableHash, hotfixData.Record.RecordID)) + else if (std::vector<uint8> const* blobData = sDB2Manager.GetHotfixBlobData(hotfixTableHash, hotfixRecordId)) { hotfixData.Size = blobData->size(); hotfixQueryResponse.HotfixContent.append(blobData->data(), blobData->size()); diff --git a/src/server/game/Handlers/InspectHandler.cpp b/src/server/game/Handlers/InspectHandler.cpp index 5641db4e5c2..99eef1b6e49 100644 --- a/src/server/game/Handlers/InspectHandler.cpp +++ b/src/server/game/Handlers/InspectHandler.cpp @@ -52,7 +52,7 @@ void WorldSession::HandleInspectOpcode(WorldPackets::Inspect::Inspect& inspect) } inspectResult.ClassID = player->getClass(); - inspectResult.GenderID = player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER); + inspectResult.GenderID = player->m_playerData->NativeSex; if (GetPlayer()->CanBeGameMaster() || sWorld->getIntConfig(CONFIG_TALENTS_INSPECTING) + (GetPlayer()->GetTeamId() == player->GetTeamId()) > 1) { @@ -77,12 +77,12 @@ void WorldSession::HandleInspectOpcode(WorldPackets::Inspect::Inspect& inspect) } inspectResult.InspecteeGUID = inspect.Target; - inspectResult.SpecializationID = player->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID); - inspectResult.LifetimeMaxRank = player->GetByteValue(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_LIFETIME_MAX_PVP_RANK); - inspectResult.TodayHK = player->GetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_TODAY_KILLS); - inspectResult.YesterdayHK = player->GetUInt16Value(ACTIVE_PLAYER_FIELD_KILLS, PLAYER_FIELD_KILLS_OFFSET_YESTERDAY_KILLS); - inspectResult.LifetimeHK = player->GetUInt32Value(ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS); - inspectResult.HonorLevel = player->GetUInt32Value(PLAYER_FIELD_HONOR_LEVEL); + inspectResult.SpecializationID = player->GetPrimarySpecialization(); + inspectResult.LifetimeMaxRank = player->m_activePlayerData->LifetimeMaxRank; + inspectResult.TodayHK = player->m_activePlayerData->TodayHonorableKills; + inspectResult.YesterdayHK = player->m_activePlayerData->YesterdayHonorableKills; + inspectResult.LifetimeHK = player->m_activePlayerData->LifetimeHonorableKills; + inspectResult.HonorLevel = player->m_playerData->HonorLevel; SendPacket(inspectResult.Write()); } diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index 8ba5dc93333..5eed12a2172 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -232,7 +232,7 @@ void WorldSession::HandleAutoEquipItemOpcode(WorldPackets::Item::AutoEquipItem& return; } - if (!dstItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_CHILD)) + if (!dstItem->HasItemFlag(ITEM_FIELD_FLAG_CHILD)) { // check dest->src move possibility ItemPosCountVec sSrc; @@ -289,7 +289,7 @@ void WorldSession::HandleAutoEquipItemOpcode(WorldPackets::Item::AutoEquipItem& } else { - if (Item* parentItem = _player->GetItemByGuid(dstItem->GetGuidValue(ITEM_FIELD_CREATOR))) + if (Item* parentItem = _player->GetItemByGuid(dstItem->GetCreator())) { if (Player::IsEquipmentPos(dest)) { @@ -390,7 +390,7 @@ void WorldSession::HandleSellItemOpcode(WorldPackets::Item::SellItem& packet) if (packet.ItemGUID.IsEmpty()) return; - Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.VendorGUID, UNIT_NPC_FLAG_VENDOR); + Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.VendorGUID, UNIT_NPC_FLAG_VENDOR, UNIT_NPC_FLAG_2_NONE); if (!creature) { TC_LOG_DEBUG("network", "WORLD: HandleSellItemOpcode - %s not found or you can not interact with him.", packet.VendorGUID.ToString().c_str()); @@ -429,7 +429,7 @@ void WorldSession::HandleSellItemOpcode(WorldPackets::Item::SellItem& packet) // prevent selling item for sellprice when the item is still refundable // this probably happens when right clicking a refundable item, the client sends both // CMSG_SELL_ITEM and CMSG_REFUND_ITEM (unverified) - if (pItem->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_REFUNDABLE)) + if (pItem->HasItemFlag(ITEM_FIELD_FLAG_REFUNDABLE)) return; // Therefore, no feedback to client // special case at auto sell (sell all) @@ -501,7 +501,7 @@ void WorldSession::HandleBuybackItem(WorldPackets::Item::BuyBackItem& packet) { TC_LOG_DEBUG("network", "WORLD: Received CMSG_BUYBACK_ITEM: Vendor %s, Slot: %u", packet.VendorGUID.ToString().c_str(), packet.Slot); - Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.VendorGUID, UNIT_NPC_FLAG_VENDOR); + Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.VendorGUID, UNIT_NPC_FLAG_VENDOR, UNIT_NPC_FLAG_2_NONE); if (!creature) { TC_LOG_DEBUG("network", "WORLD: HandleBuybackItem - Unit (%s) not found or you can not interact with him.", packet.VendorGUID.ToString().c_str()); @@ -516,7 +516,7 @@ void WorldSession::HandleBuybackItem(WorldPackets::Item::BuyBackItem& packet) Item* pItem = _player->GetItemFromBuyBackSlot(packet.Slot); if (pItem) { - uint32 price = _player->GetUInt32Value(ACTIVE_PLAYER_FIELD_BUYBACK_PRICE + packet.Slot - BUYBACK_SLOT_START); + uint32 price = _player->m_activePlayerData->BuybackPrice[packet.Slot - BUYBACK_SLOT_START]; if (!_player->HasEnoughMoney(uint64(price))) { _player->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, creature, pItem->GetEntry(), 0); @@ -586,7 +586,7 @@ void WorldSession::HandleListInventoryOpcode(WorldPackets::NPC::Hello& packet) void WorldSession::SendListInventory(ObjectGuid vendorGuid) { - Creature* vendor = GetPlayer()->GetNPCIfCanInteractWith(vendorGuid, UNIT_NPC_FLAG_VENDOR); + Creature* vendor = GetPlayer()->GetNPCIfCanInteractWith(vendorGuid, UNIT_NPC_FLAG_VENDOR, UNIT_NPC_FLAG_2_NONE); if (!vendor) { TC_LOG_DEBUG("network", "WORLD: SendListInventory - %s not found or you can not interact with him.", vendorGuid.ToString().c_str()); @@ -828,7 +828,7 @@ void WorldSession::HandleWrapItem(WorldPackets::Item::WrapItem& packet) return; } - if (!item->GetGuidValue(ITEM_FIELD_GIFTCREATOR).IsEmpty()) // HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_WRAPPED); + if (!item->GetGiftCreator().IsEmpty()) // HasFlag(ITEM_FIELD_FLAGS, ITEM_FLAGS_WRAPPED); { _player->SendEquipError(EQUIP_ERR_CANT_WRAP_WRAPPED, item, NULL); return; @@ -865,7 +865,7 @@ void WorldSession::HandleWrapItem(WorldPackets::Item::WrapItem& packet) stmt->setUInt64(0, item->GetOwnerGUID().GetCounter()); stmt->setUInt64(1, item->GetGUID().GetCounter()); stmt->setUInt32(2, item->GetEntry()); - stmt->setUInt32(3, item->GetUInt32Value(ITEM_FIELD_FLAGS)); + stmt->setUInt32(3, item->m_itemData->DynamicFlags); trans->Append(stmt); item->SetEntry(gift->GetEntry()); @@ -892,8 +892,8 @@ void WorldSession::HandleWrapItem(WorldPackets::Item::WrapItem& packet) break; } - item->SetGuidValue(ITEM_FIELD_GIFTCREATOR, _player->GetGUID()); - item->SetUInt32Value(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_WRAPPED); + item->SetGiftCreator(_player->GetGUID()); + item->SetItemFlags(ITEM_FIELD_FLAG_WRAPPED); item->SetState(ITEM_CHANGED, _player); if (item->GetState() == ITEM_NEW) // save new item, to have alway for `character_gifts` record in `item_instance` @@ -935,7 +935,7 @@ void WorldSession::HandleSocketGems(WorldPackets::Item::SocketGems& socketGems) memset(gemData, 0, sizeof(gemData)); GemPropertiesEntry const* gemProperties[MAX_GEM_SOCKETS]; memset(gemProperties, 0, sizeof(gemProperties)); - ItemDynamicFieldGems const* oldGemData[MAX_GEM_SOCKETS]; + UF::SocketedGem const* oldGemData[MAX_GEM_SOCKETS]; memset(oldGemData, 0, sizeof(oldGemData)); for (uint32 i = 0; i < MAX_GEM_SOCKETS; ++i) { @@ -943,9 +943,9 @@ void WorldSession::HandleSocketGems(WorldPackets::Item::SocketGems& socketGems) { gems[i] = gem; gemData[i].ItemId = gem->GetEntry(); - gemData[i].Context = gem->GetUInt32Value(ITEM_FIELD_CONTEXT); - for (std::size_t b = 0; b < gem->GetDynamicValues(ITEM_DYNAMIC_FIELD_BONUSLIST_IDS).size() && b < 16; ++b) - gemData[i].BonusListIDs[b] = gem->GetDynamicValue(ITEM_DYNAMIC_FIELD_BONUSLIST_IDS, b); + gemData[i].Context = gem->m_itemData->Context; + for (std::size_t b = 0; b < gem->m_itemData->BonusListIDs->size() && b < 16; ++b) + gemData[i].BonusListIDs[b] = (*gem->m_itemData->BonusListIDs)[b]; gemProperties[i] = sGemPropertiesStore.LookupEntry(gem->GetTemplate()->GetGemProperties()); } @@ -1010,7 +1010,7 @@ void WorldSession::HandleSocketGems(WorldPackets::Item::SocketGems& socketGems) } else if (oldGemData[j]) { - if (iGemProto->GetId() == oldGemData[j]->ItemId) + if (int32(iGemProto->GetId()) == oldGemData[j]->ItemID) { _player->SendEquipError(EQUIP_ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED, itemTarget, NULL); return; @@ -1037,7 +1037,7 @@ void WorldSession::HandleSocketGems(WorldPackets::Item::SocketGems& socketGems) else if (oldGemData[j]) { // existing gem - if (ItemTemplate const* jProto = sObjectMgr->GetItemTemplate(oldGemData[j]->ItemId)) + if (ItemTemplate const* jProto = sObjectMgr->GetItemTemplate(oldGemData[j]->ItemID)) if (iGemProto->GetItemLimitCategory() == jProto->GetItemLimitCategory()) ++limit_newcount; } @@ -1176,7 +1176,7 @@ bool WorldSession::CanUseBank(ObjectGuid bankerGUID) const if (!isUsingBankCommand) { - Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(bankerGUID, UNIT_NPC_FLAG_BANKER); + Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(bankerGUID, UNIT_NPC_FLAG_BANKER, UNIT_NPC_FLAG_2_NONE); if (!creature) return false; } @@ -1210,7 +1210,7 @@ void WorldSession::HandleUseCritterItem(WorldPackets::Item::UseCritterItem& useC void WorldSession::HandleUpgradeItem(WorldPackets::Item::UpgradeItem& upgradeItem) { WorldPackets::Item::ItemUpgradeResult itemUpgradeResult; - if (!_player->GetNPCIfCanInteractWith(upgradeItem.ItemMaster, UNIT_NPC_FLAG_ITEM_UPGRADE_MASTER)) + if (!_player->GetNPCIfCanInteractWith(upgradeItem.ItemMaster, UNIT_NPC_FLAG_NONE, UNIT_NPC_FLAG_2_ITEM_UPGRADE_MASTER)) { TC_LOG_DEBUG("network", "WORLD: HandleUpgradeItems - %s not found or player can't interact with it.", upgradeItem.ItemMaster.ToString().c_str()); itemUpgradeResult.Success = false; @@ -1299,9 +1299,9 @@ void WorldSession::HandleRemoveNewItem(WorldPackets::Item::RemoveNewItem& remove return; } - if (item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_NEW_ITEM)) + if (item->HasItemFlag(ITEM_FIELD_FLAG_NEW_ITEM)) { - item->RemoveFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_NEW_ITEM); + item->RemoveItemFlag(ITEM_FIELD_FLAG_NEW_ITEM); item->SetState(ITEM_CHANGED, _player); } } diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp index c9ac113c623..3bd6173ae53 100644 --- a/src/server/game/Handlers/LootHandler.cpp +++ b/src/server/game/Handlers/LootHandler.cpp @@ -314,7 +314,7 @@ void WorldSession::DoLootRelease(ObjectGuid lguid) player->SetLootGUID(ObjectGuid::Empty); player->SendLootRelease(lguid); - player->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_LOOTING); + player->RemoveUnitFlag(UNIT_FLAG_LOOTING); if (!player->IsInWorld()) return; @@ -370,7 +370,7 @@ void WorldSession::DoLootRelease(ObjectGuid lguid) if (loot->isLooted()) { loot->clear(); - corpse->RemoveFlag(CORPSE_FIELD_DYNAMIC_FLAGS, CORPSE_DYNFLAG_LOOTABLE); + corpse->RemoveCorpseDynamicFlag(CORPSE_DYNFLAG_LOOTABLE); } } else if (lguid.IsItem()) @@ -414,7 +414,7 @@ void WorldSession::DoLootRelease(ObjectGuid lguid) loot = &creature->loot; if (loot->isLooted()) { - creature->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); + creature->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE); // skip pickpocketing loot for speed, skinning timer reduction is no-op in fact if (!creature->IsAlive()) @@ -433,7 +433,7 @@ void WorldSession::DoLootRelease(ObjectGuid lguid) group->SendLooter(creature, NULL); } // force dynflag update to update looter and lootable info - creature->ForceValuesUpdateAtIndex(OBJECT_DYNAMIC_FLAGS); + creature->ForceUpdateFieldChange(creature->m_values.ModifyValue(&Object::m_objectData).ModifyValue(&UF::ObjectData::DynamicFlags)); } } diff --git a/src/server/game/Handlers/MailHandler.cpp b/src/server/game/Handlers/MailHandler.cpp index d65235b4d3e..d15ea033240 100644 --- a/src/server/game/Handlers/MailHandler.cpp +++ b/src/server/game/Handlers/MailHandler.cpp @@ -52,7 +52,7 @@ bool WorldSession::CanOpenMailBox(ObjectGuid guid) } else if (guid.IsAnyTypeCreature()) { - if (!_player->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_MAILBOX)) + if (!_player->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_MAILBOX, UNIT_NPC_FLAG_2_NONE)) return false; } else @@ -253,13 +253,13 @@ void WorldSession::HandleSendMail(WorldPackets::Mail::SendMail& packet) } } - if (item->GetTemplate()->GetFlags() & ITEM_FLAG_CONJURED || item->GetUInt32Value(ITEM_FIELD_DURATION)) + if (item->GetTemplate()->GetFlags() & ITEM_FLAG_CONJURED || *item->m_itemData->Expiration) { player->SendMailResult(0, MAIL_SEND, MAIL_ERR_EQUIP_ERROR, EQUIP_ERR_MAIL_BOUND_ITEM); return; } - if (packet.Info.Cod && item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_WRAPPED)) + if (packet.Info.Cod && item->HasItemFlag(ITEM_FIELD_FLAG_WRAPPED)) { player->SendMailResult(0, MAIL_SEND, MAIL_ERR_CANT_SEND_WRAPPED_COD); return; @@ -639,9 +639,9 @@ void WorldSession::HandleMailCreateTextItem(WorldPackets::Mail::MailCreateTextIt bodyItem->SetText(m->body); if (m->messageType == MAIL_NORMAL) - bodyItem->SetGuidValue(ITEM_FIELD_CREATOR, ObjectGuid::Create<HighGuid::Player>(m->sender)); + bodyItem->SetCreator(ObjectGuid::Create<HighGuid::Player>(m->sender)); - bodyItem->SetFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_READABLE); + bodyItem->AddItemFlag(ITEM_FIELD_FLAG_READABLE); ItemPosCountVec dest; uint8 msg = _player->CanStoreItem(NULL_BAG, NULL_SLOT, dest, bodyItem, false); diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 3f0cffb4785..bdd7482c03b 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -58,7 +58,7 @@ void WorldSession::HandleRepopRequest(WorldPackets::Misc::RepopRequest& /*packet*/) { - if (GetPlayer()->IsAlive() || GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST)) + if (GetPlayer()->IsAlive() || GetPlayer()->HasPlayerFlag(PLAYER_FLAGS_GHOST)) return; if (GetPlayer()->HasAuraType(SPELL_AURA_PREVENT_RESURRECTION)) @@ -257,11 +257,11 @@ void WorldSession::HandleLogoutRequestOpcode(WorldPackets::Character::LogoutRequ if (!GetPlayer()->GetLootGUID().IsEmpty()) GetPlayer()->SendLootReleaseAll(); - bool instantLogout = (GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING) && !GetPlayer()->IsInCombat()) || + bool instantLogout = (GetPlayer()->HasPlayerFlag(PLAYER_FLAGS_RESTING) && !GetPlayer()->IsInCombat()) || GetPlayer()->IsInFlight() || HasPermission(rbac::RBAC_PERM_INSTANT_LOGOUT); /// TODO: Possibly add RBAC permission to log out in combat - bool canLogoutInCombat = GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING); + bool canLogoutInCombat = GetPlayer()->HasPlayerFlag(PLAYER_FLAGS_RESTING); uint32 reason = 0; if (GetPlayer()->IsInCombat() && !canLogoutInCombat) @@ -295,7 +295,7 @@ void WorldSession::HandleLogoutRequestOpcode(WorldPackets::Character::LogoutRequ if (GetPlayer()->GetStandState() == UNIT_STAND_STATE_STAND) GetPlayer()->SetStandState(UNIT_STAND_STATE_SIT); GetPlayer()->SetRooted(true); - GetPlayer()->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); + GetPlayer()->AddUnitFlag(UNIT_FLAG_STUNNED); } SetLogoutStartTime(time(NULL)); @@ -321,49 +321,49 @@ void WorldSession::HandleLogoutCancelOpcode(WorldPackets::Character::LogoutCance GetPlayer()->SetStandState(UNIT_STAND_STATE_STAND); //! DISABLE_ROTATE - GetPlayer()->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); + GetPlayer()->RemoveUnitFlag(UNIT_FLAG_STUNNED); } } void WorldSession::HandleTogglePvP(WorldPackets::Misc::TogglePvP& /*packet*/) { - bool inPvP = GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP); - - GetPlayer()->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP, !inPvP); - GetPlayer()->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_PVP_TIMER, inPvP); - - if (GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP)) + if (GetPlayer()->HasPlayerFlag(PLAYER_FLAGS_IN_PVP)) { - if (!GetPlayer()->IsPvP() || GetPlayer()->pvpInfo.EndTimer) - GetPlayer()->UpdatePvP(true, true); + GetPlayer()->RemovePlayerFlag(PLAYER_FLAGS_IN_PVP); + GetPlayer()->AddPlayerFlag(PLAYER_FLAGS_PVP_TIMER); + if (!GetPlayer()->pvpInfo.IsHostile && GetPlayer()->IsPvP()) + GetPlayer()->pvpInfo.EndTimer = time(nullptr); // start toggle-off } else { - if (!GetPlayer()->pvpInfo.IsHostile && GetPlayer()->IsPvP()) - GetPlayer()->pvpInfo.EndTimer = time(nullptr); // start toggle-off + GetPlayer()->AddPlayerFlag(PLAYER_FLAGS_IN_PVP); + GetPlayer()->RemovePlayerFlag(PLAYER_FLAGS_PVP_TIMER); + if (!GetPlayer()->IsPvP() || GetPlayer()->pvpInfo.EndTimer) + GetPlayer()->UpdatePvP(true, true); } } void WorldSession::HandleSetPvP(WorldPackets::Misc::SetPvP& packet) { - GetPlayer()->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP, packet.EnablePVP); - GetPlayer()->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_PVP_TIMER, !packet.EnablePVP); - - if (GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP)) + if (!packet.EnablePVP) { - if (!GetPlayer()->IsPvP() || GetPlayer()->pvpInfo.EndTimer) - GetPlayer()->UpdatePvP(true, true); + GetPlayer()->RemovePlayerFlag(PLAYER_FLAGS_IN_PVP); + GetPlayer()->AddPlayerFlag(PLAYER_FLAGS_PVP_TIMER); + if (!GetPlayer()->pvpInfo.IsHostile && GetPlayer()->IsPvP()) + GetPlayer()->pvpInfo.EndTimer = time(nullptr); // start toggle-off } else { - if (!GetPlayer()->pvpInfo.IsHostile && GetPlayer()->IsPvP()) - GetPlayer()->pvpInfo.EndTimer = time(nullptr); // start set-off + GetPlayer()->AddPlayerFlag(PLAYER_FLAGS_IN_PVP); + GetPlayer()->RemovePlayerFlag(PLAYER_FLAGS_PVP_TIMER); + if (!GetPlayer()->IsPvP() || GetPlayer()->pvpInfo.EndTimer) + GetPlayer()->UpdatePvP(true, true); } } void WorldSession::HandlePortGraveyard(WorldPackets::Misc::PortGraveyard& /*packet*/) { - if (GetPlayer()->IsAlive() || !GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST)) + if (GetPlayer()->IsAlive() || !GetPlayer()->HasPlayerFlag(PLAYER_FLAGS_GHOST)) return; GetPlayer()->RepopAtGraveyard(); } @@ -419,7 +419,7 @@ void WorldSession::HandleReclaimCorpse(WorldPackets::Misc::ReclaimCorpse& /*pack return; // body not released yet - if (!_player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST)) + if (!_player->HasPlayerFlag(PLAYER_FLAGS_GHOST)) return; Corpse* corpse = _player->GetCorpse(); @@ -534,7 +534,7 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPackets::AreaTrigger::AreaTrigge player->GetRestMgr().SetRestFlag(REST_FLAG_IN_TAVERN, atEntry->ID); if (sWorld->IsFFAPvPRealm()) - player->RemoveByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_FFA_PVP); + player->RemovePvpFlag(UNIT_BYTE2_FLAG_FFA_PVP); return; } @@ -756,7 +756,7 @@ void WorldSession::HandleSetActionBarToggles(WorldPackets::Character::SetActionB return; } - GetPlayer()->SetByteValue(ACTIVE_PLAYER_FIELD_BYTES, PLAYER_FIELD_BYTES_OFFSET_ACTION_BAR_TOGGLES, packet.Mask); + GetPlayer()->SetMultiActionBars(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(ACTIVE_PLAYER_FIELD_FARSIGHT).ToString().c_str(), _player->GetGUID().ToString().c_str()); + TC_LOG_DEBUG("network", "Added FarSight %s to %s", _player->m_activePlayerData->FarsightObject->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(ACTIVE_PLAYER_FIELD_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->m_activePlayerData->FarsightObject->ToString().c_str()); } else { @@ -842,7 +842,7 @@ void WorldSession::HandleFarSightOpcode(WorldPackets::Misc::FarSight& packet) void WorldSession::HandleSetTitleOpcode(WorldPackets::Character::SetTitle& packet) { // -1 at none - if (packet.TitleID > 0 && packet.TitleID < MAX_TITLE_INDEX) + if (packet.TitleID > 0) { if (!GetPlayer()->HasTitle(packet.TitleID)) return; @@ -850,7 +850,7 @@ void WorldSession::HandleSetTitleOpcode(WorldPackets::Character::SetTitle& packe else packet.TitleID = 0; - GetPlayer()->SetUInt32Value(PLAYER_CHOSEN_TITLE, packet.TitleID); + GetPlayer()->SetChosenTitle(packet.TitleID); } void WorldSession::HandleTimeSyncResponse(WorldPackets::Misc::TimeSyncResponse& packet) @@ -1046,7 +1046,10 @@ void WorldSession::HandleSetRaidDifficultyOpcode(WorldPackets::Misc::SetRaidDiff void WorldSession::HandleSetTaxiBenchmark(WorldPackets::Misc::SetTaxiBenchmarkMode& packet) { - _player->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_TAXI_BENCHMARK, packet.Enable); + if (packet.Enable) + _player->AddPlayerFlag(PLAYER_FLAGS_TAXI_BENCHMARK); + else + _player->RemovePlayerFlag(PLAYER_FLAGS_TAXI_BENCHMARK); } void WorldSession::HandleGuildSetFocusedAchievement(WorldPackets::Achievement::GuildSetFocusedAchievement& setFocusedAchievement) diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 4ae255270ad..5850d71bae3 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -90,7 +90,7 @@ void WorldSession::HandleMoveWorldportAck() float z = loc.GetPositionZ(); if (GetPlayer()->HasUnitMovementFlag(MOVEMENTFLAG_HOVER)) - z += GetPlayer()->GetFloatValue(UNIT_FIELD_HOVERHEIGHT); + z += GetPlayer()->m_unitData->HoverHeight; GetPlayer()->Relocate(loc.GetPositionX(), loc.GetPositionY(), z, loc.GetOrientation()); @@ -211,7 +211,7 @@ void WorldSession::HandleMoveWorldportAck() GetPlayer()->CastSpell(GetPlayer(), 2479, true); // in friendly area - else if (GetPlayer()->IsPvP() && !GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP)) + else if (GetPlayer()->IsPvP() && !GetPlayer()->HasPlayerFlag(PLAYER_FLAGS_IN_PVP)) GetPlayer()->UpdatePvP(false, false); // resummon pet @@ -277,7 +277,7 @@ void WorldSession::HandleMoveTeleportAck(WorldPackets::Movement::MoveTeleportAck plMover->CastSpell(plMover, 2479, true); // in friendly area - else if (plMover->IsPvP() && !plMover->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP)) + else if (plMover->IsPvP() && !plMover->HasPlayerFlag(PLAYER_FLAGS_IN_PVP)) plMover->UpdatePvP(false, false); } @@ -321,8 +321,8 @@ void WorldSession::HandleMovementOpcode(OpcodeClient opcode, MovementInfo& movem } // stop some emotes at player move - if (plrMover && (plrMover->GetUInt32Value(UNIT_NPC_EMOTESTATE) != 0)) - plrMover->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); + if (plrMover && (plrMover->GetEmoteState() != 0)) + plrMover->SetEmoteState(EMOTE_ONESHOT_NONE); /* handle special cases */ if (!movementInfo.transport.guid.IsEmpty()) @@ -428,7 +428,7 @@ void WorldSession::HandleMovementOpcode(OpcodeClient opcode, MovementInfo& movem /// @todo discard movement packets after the player is rooted if (plrMover->IsAlive()) { - plrMover->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_IS_OUT_OF_BOUNDS); + plrMover->AddPlayerFlag(PLAYER_FLAGS_IS_OUT_OF_BOUNDS); plrMover->EnvironmentalDamage(DAMAGE_FALL_TO_VOID, GetPlayer()->GetMaxHealth()); // player can be alive if GM/etc // change the death state to CORPSE to prevent the death timer from @@ -439,7 +439,7 @@ void WorldSession::HandleMovementOpcode(OpcodeClient opcode, MovementInfo& movem } } else - plrMover->RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_IS_OUT_OF_BOUNDS); + plrMover->RemovePlayerFlag(PLAYER_FLAGS_IS_OUT_OF_BOUNDS); if (opcode == CMSG_MOVE_JUMP) { diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp index 977136f0615..ba17b382bb0 100644 --- a/src/server/game/Handlers/NPCHandler.cpp +++ b/src/server/game/Handlers/NPCHandler.cpp @@ -60,7 +60,7 @@ enum StableResultCode void WorldSession::HandleTabardVendorActivateOpcode(WorldPackets::NPC::Hello& packet) { - Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_TABARDDESIGNER); + Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_TABARDDESIGNER, UNIT_NPC_FLAG_2_NONE); if (!unit) { TC_LOG_DEBUG("network", "WORLD: HandleTabardVendorActivateOpcode - %s not found or you can not interact with him.", packet.Unit.ToString().c_str()); @@ -90,7 +90,7 @@ void WorldSession::SendShowMailBox(ObjectGuid guid) void WorldSession::HandleTrainerListOpcode(WorldPackets::NPC::Hello& packet) { - Creature* npc = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_TRAINER); + Creature* npc = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_TRAINER, UNIT_NPC_FLAG_2_NONE); if (!npc) { TC_LOG_DEBUG("network", "WorldSession::SendTrainerList - %s not found or you can not interact with him.", packet.Unit.ToString().c_str()); @@ -126,7 +126,7 @@ void WorldSession::HandleTrainerBuySpellOpcode(WorldPackets::NPC::TrainerBuySpel { TC_LOG_DEBUG("network", "WORLD: Received CMSG_TRAINER_BUY_SPELL %s, learn spell id is: %i", packet.TrainerGUID.ToString().c_str(), packet.SpellID); - Creature* npc = GetPlayer()->GetNPCIfCanInteractWith(packet.TrainerGUID, UNIT_NPC_FLAG_TRAINER); + Creature* npc = GetPlayer()->GetNPCIfCanInteractWith(packet.TrainerGUID, UNIT_NPC_FLAG_TRAINER, UNIT_NPC_FLAG_2_NONE); if (!npc) { TC_LOG_DEBUG("network", "WORLD: HandleTrainerBuySpellOpcode - %s not found or you can not interact with him.", packet.TrainerGUID.ToString().c_str()); @@ -152,7 +152,7 @@ void WorldSession::HandleTrainerBuySpellOpcode(WorldPackets::NPC::TrainerBuySpel void WorldSession::HandleGossipHelloOpcode(WorldPackets::NPC::Hello& packet) { - Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_GOSSIP); + Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_GOSSIP, UNIT_NPC_FLAG_2_NONE); if (!unit) { TC_LOG_DEBUG("network", "WORLD: HandleGossipHelloOpcode - %s not found or you can not interact with him.", packet.Unit.ToString().c_str()); @@ -205,7 +205,7 @@ void WorldSession::HandleGossipSelectOptionOpcode(WorldPackets::NPC::GossipSelec GameObject* go = nullptr; if (packet.GossipUnit.IsCreatureOrVehicle()) { - unit = GetPlayer()->GetNPCIfCanInteractWith(packet.GossipUnit, UNIT_NPC_FLAG_GOSSIP); + unit = GetPlayer()->GetNPCIfCanInteractWith(packet.GossipUnit, UNIT_NPC_FLAG_GOSSIP, UNIT_NPC_FLAG_2_NONE); if (!unit) { TC_LOG_DEBUG("network", "WORLD: HandleGossipSelectOptionOpcode - %s not found or you can't interact with him.", packet.GossipUnit.ToString().c_str()); @@ -278,7 +278,7 @@ void WorldSession::HandleGossipSelectOptionOpcode(WorldPackets::NPC::GossipSelec void WorldSession::HandleSpiritHealerActivate(WorldPackets::NPC::SpiritHealerActivate& packet) { - Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Healer, UNIT_NPC_FLAG_SPIRITHEALER); + Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Healer, UNIT_NPC_FLAG_SPIRITHEALER, UNIT_NPC_FLAG_2_NONE); if (!unit) { TC_LOG_DEBUG("network", "WORLD: HandleSpiritHealerActivateOpcode - %s not found or you can not interact with him.", packet.Healer.ToString().c_str()); @@ -329,7 +329,7 @@ void WorldSession::HandleBinderActivateOpcode(WorldPackets::NPC::Hello& packet) if (!GetPlayer()->IsInWorld() || !GetPlayer()->IsAlive()) return; - Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_INNKEEPER); + Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_INNKEEPER, UNIT_NPC_FLAG_2_NONE); if (!unit) { TC_LOG_DEBUG("network", "WORLD: HandleBinderActivateOpcode - %s not found or you can not interact with him.", packet.Unit.ToString().c_str()); @@ -729,7 +729,7 @@ void WorldSession::HandleRepairItemOpcode(WorldPackets::Item::RepairItem& packet TC_LOG_DEBUG("network", "WORLD: CMSG_REPAIR_ITEM: Npc %s, Item %s, UseGuildBank: %u", packet.NpcGUID.ToString().c_str(), packet.ItemGUID.ToString().c_str(), packet.UseGuildBank); - Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.NpcGUID, UNIT_NPC_FLAG_REPAIR); + Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(packet.NpcGUID, UNIT_NPC_FLAG_REPAIR, UNIT_NPC_FLAG_2_NONE); if (!unit) { TC_LOG_DEBUG("network", "WORLD: HandleRepairItemOpcode - %s not found or you can not interact with him.", packet.NpcGUID.ToString().c_str()); diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp index d03c811c241..18b69ac2d0b 100644 --- a/src/server/game/Handlers/PetHandler.cpp +++ b/src/server/game/Handlers/PetHandler.cpp @@ -416,7 +416,7 @@ void WorldSession::SendQueryPetNameResponse(ObjectGuid guid) if (Creature* unit = ObjectAccessor::GetCreatureOrPetOrVehicle(*_player, guid)) { response.Allow = true; - response.Timestamp = unit->GetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP); + response.Timestamp = unit->m_unitData->PetNameTimestamp; response.Name = unit->GetName(); if (Pet* pet = unit->ToPet()) @@ -446,7 +446,7 @@ bool WorldSession::CheckStableMaster(ObjectGuid guid) // stable master case else { - if (!GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_STABLEMASTER)) + if (!GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_STABLEMASTER, UNIT_NPC_FLAG_2_NONE)) { TC_LOG_DEBUG("entities.player", "Stablemaster %s not found or you can't interact with him.", guid.ToString().c_str()); return false; @@ -523,7 +523,7 @@ void WorldSession::HandlePetRename(WorldPackets::Pet::PetRename& packet) Pet* pet = ObjectAccessor::GetPet(*_player, petguid); // check it! if (!pet || !pet->IsPet() || ((Pet*)pet)->getPetType() != HUNTER_PET || - !pet->HasByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PET_FLAGS, UNIT_CAN_BE_RENAMED) || + !pet->HasPetFlag(UNIT_PET_FLAG_CAN_BE_RENAMED) || pet->GetOwnerGUID() != _player->GetGUID() || !pet->GetCharmInfo()) return; @@ -544,7 +544,7 @@ void WorldSession::HandlePetRename(WorldPackets::Pet::PetRename& packet) pet->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_NAME); - pet->RemoveByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PET_FLAGS, UNIT_CAN_BE_RENAMED); + pet->RemovePetFlag(UNIT_PET_FLAG_CAN_BE_RENAMED); if (declinedname) { @@ -584,7 +584,7 @@ void WorldSession::HandlePetRename(WorldPackets::Pet::PetRename& packet) CharacterDatabase.CommitTransaction(trans); - pet->SetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP, uint32(time(NULL))); // cast can't be helped + pet->SetPetNameTimestamp(uint32(time(NULL))); } void WorldSession::HandlePetAbandon(WorldPackets::Pet::PetAbandon& packet) diff --git a/src/server/game/Handlers/PetitionsHandler.cpp b/src/server/game/Handlers/PetitionsHandler.cpp index 95e6ef8e083..a4a4d2e7aae 100644 --- a/src/server/game/Handlers/PetitionsHandler.cpp +++ b/src/server/game/Handlers/PetitionsHandler.cpp @@ -40,7 +40,7 @@ void WorldSession::HandlePetitionBuy(WorldPackets::Petition::PetitionBuy& packet TC_LOG_DEBUG("network", "Petitioner %s tried sell petition: title %s", packet.Unit.ToString().c_str(), packet.Title.c_str()); // prevent cheating - Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_PETITIONER); + Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.Unit, UNIT_NPC_FLAG_PETITIONER, UNIT_NPC_FLAG_2_NONE); if (!creature) { TC_LOG_DEBUG("network", "WORLD: HandlePetitionBuyOpcode - %s not found or you can't interact with him.", packet.Unit.ToString().c_str()); @@ -96,9 +96,7 @@ void WorldSession::HandlePetitionBuy(WorldPackets::Petition::PetitionBuy& packet if (!charter) return; - charter->SetUInt32Value(ITEM_FIELD_ENCHANTMENT, charter->GetGUID().GetCounter()); - // ITEM_FIELD_ENCHANTMENT_1_1 is guild/arenateam id - // ITEM_FIELD_ENCHANTMENT_1_1+1 is current signatures count (showed on item) + charter->SetPetitionId(charter->GetGUID().GetCounter()); charter->SetState(ITEM_CHANGED, _player); _player->SendNewItem(charter, 1, true, false); @@ -284,7 +282,7 @@ void WorldSession::HandleSignPetition(WorldPackets::Petition::SignPetition& pack Field* fields = result->Fetch(); ObjectGuid ownerGuid = ObjectGuid::Create<HighGuid::Player>(fields[0].GetUInt64()); - //uint64 signs = fields[1].GetUInt64(); + uint64 signs = fields[1].GetUInt64(); if (ownerGuid == _player->GetGUID()) return; @@ -349,10 +347,11 @@ void WorldSession::HandleSignPetition(WorldPackets::Petition::SignPetition& pack // close at signer side SendPacket(signResult.Write()); - // update signs count on charter, required testing... - //Item* item = _player->GetItemByGuid(petitionguid)); - //if (item) - // item->SetUInt32Value(ITEM_FIELD_ENCHANTMENT_1_1+1, signs); + if (Item* item = _player->GetItemByGuid(packet.PetitionGUID)) + { + item->SetPetitionNumSignatures(signs); + item->SetState(ITEM_CHANGED, _player); + } // update for owner if online if (Player* owner = ObjectAccessor::FindConnectedPlayer(ownerGuid)) @@ -580,7 +579,7 @@ void WorldSession::HandlePetitionShowList(WorldPackets::Petition::PetitionShowLi void WorldSession::SendPetitionShowList(ObjectGuid guid) { - Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_PETITIONER); + Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_PETITIONER, UNIT_NPC_FLAG_2_NONE); if (!creature) { TC_LOG_DEBUG("network", "WORLD: HandlePetitionShowListOpcode - %s not found or you can't interact with him.", guid.ToString().c_str()); diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp index bf5d411d36e..873b34df76a 100644 --- a/src/server/game/Handlers/QuestHandler.cpp +++ b/src/server/game/Handlers/QuestHandler.cpp @@ -77,7 +77,7 @@ void WorldSession::HandleQuestgiverHelloOpcode(WorldPackets::Quest::QuestGiverHe { TC_LOG_DEBUG("network", "WORLD: Received CMSG_QUESTGIVER_HELLO %s", packet.QuestGiverGUID.ToString().c_str()); - Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.QuestGiverGUID, UNIT_NPC_FLAG_QUESTGIVER); + Creature* creature = GetPlayer()->GetNPCIfCanInteractWith(packet.QuestGiverGUID, UNIT_NPC_FLAG_QUESTGIVER, UNIT_NPC_FLAG_2_NONE); if (!creature) { TC_LOG_DEBUG("network", "WORLD: HandleQuestgiverHelloOpcode - %s not found or you can't interact with him.", diff --git a/src/server/game/Handlers/SkillHandler.cpp b/src/server/game/Handlers/SkillHandler.cpp index 8ae4c2228e8..796f2ef0779 100644 --- a/src/server/game/Handlers/SkillHandler.cpp +++ b/src/server/game/Handlers/SkillHandler.cpp @@ -77,7 +77,7 @@ void WorldSession::HandleLearnPvpTalentsOpcode(WorldPackets::Talent::LearnPvpTal void WorldSession::HandleConfirmRespecWipeOpcode(WorldPackets::Talent::ConfirmRespecWipe& confirmRespecWipe) { - Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(confirmRespecWipe.RespecMaster, UNIT_NPC_FLAG_TRAINER); + Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(confirmRespecWipe.RespecMaster, UNIT_NPC_FLAG_TRAINER, UNIT_NPC_FLAG_2_NONE); if (!unit) { TC_LOG_DEBUG("network", "WORLD: HandleConfirmRespecWipeOpcode - %s not found or you can't interact with him.", confirmRespecWipe.RespecMaster.ToString().c_str()); diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp index 75ef6181a4d..4ce38852b0e 100644 --- a/src/server/game/Handlers/SpellHandler.cpp +++ b/src/server/game/Handlers/SpellHandler.cpp @@ -154,7 +154,7 @@ void WorldSession::HandleOpenItemOpcode(WorldPackets::Spells::OpenItem& packet) } // Verify that the bag is an actual bag or wrapped item that can be used "normally" - if (!(proto->GetFlags() & ITEM_FLAG_HAS_LOOT) && !item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_WRAPPED)) + if (!(proto->GetFlags() & ITEM_FLAG_HAS_LOOT) && !item->HasItemFlag(ITEM_FIELD_FLAG_WRAPPED)) { player->SendEquipError(EQUIP_ERR_CLIENT_LOCKED_OUT, item, NULL); TC_LOG_ERROR("entities.player.cheat", "Possible hacking attempt: Player %s [%s] tried to open item [%s, entry: %u] which is not openable!", @@ -183,7 +183,7 @@ void WorldSession::HandleOpenItemOpcode(WorldPackets::Spells::OpenItem& packet) } } - if (item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_WRAPPED))// wrapped? + if (item->HasItemFlag(ITEM_FIELD_FLAG_WRAPPED))// wrapped? { PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHARACTER_GIFT_BY_ITEM); @@ -197,9 +197,9 @@ void WorldSession::HandleOpenItemOpcode(WorldPackets::Spells::OpenItem& packet) uint32 entry = fields[0].GetUInt32(); uint32 flags = fields[1].GetUInt32(); - item->SetGuidValue(ITEM_FIELD_GIFTCREATOR, ObjectGuid::Empty); + item->SetGiftCreator(ObjectGuid::Empty); item->SetEntry(entry); - item->SetUInt32Value(ITEM_FIELD_FLAGS, flags); + item->SetItemFlags(ItemFieldFlags(flags)); item->SetState(ITEM_CHANGED, player); } else @@ -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(ACTIVE_PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS); + auto const& selfResSpells = _player->m_activePlayerData->SelfResSpells; 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(ACTIVE_PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS, selfRes.SpellID); + _player->RemoveSelfResSpell(selfRes.SpellID); } void WorldSession::HandleSpellClick(WorldPackets::Spells::SpellClick& spellClick) @@ -520,13 +520,13 @@ void WorldSession::HandleMirrorImageDataRequest(WorldPackets::Spells::GetMirrorI Guild* guild = player->GetGuild(); - mirrorImageComponentedData.SkinColor = player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_SKIN_ID); - mirrorImageComponentedData.FaceVariation = player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_FACE_ID); - mirrorImageComponentedData.HairVariation = player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_STYLE_ID); - mirrorImageComponentedData.HairColor = player->GetByteValue(PLAYER_BYTES, PLAYER_BYTES_OFFSET_HAIR_COLOR_ID); - mirrorImageComponentedData.BeardVariation = player->GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_FACIAL_STYLE); + mirrorImageComponentedData.SkinColor = player->m_playerData->SkinID; + mirrorImageComponentedData.FaceVariation = player->m_playerData->FaceID; + mirrorImageComponentedData.HairVariation = player->m_playerData->HairStyleID; + mirrorImageComponentedData.HairColor = player->m_playerData->HairColorID; + mirrorImageComponentedData.BeardVariation = player->m_playerData->FacialHairStyleID; for (uint32 i = 0; i < PLAYER_CUSTOM_DISPLAY_SIZE; ++i) - mirrorImageComponentedData.CustomDisplay[i] = player->GetByteValue(PLAYER_BYTES_2, PLAYER_BYTES_2_OFFSET_CUSTOM_DISPLAY_OPTION + i); + mirrorImageComponentedData.CustomDisplay[i] = player->m_playerData->CustomDisplayOption[i]; mirrorImageComponentedData.GuildGUID = (guild ? guild->GetGUID() : ObjectGuid::Empty); mirrorImageComponentedData.ItemDisplayID.reserve(11); @@ -550,10 +550,7 @@ void WorldSession::HandleMirrorImageDataRequest(WorldPackets::Spells::GetMirrorI for (EquipmentSlots slot : itemSlots) { uint32 itemDisplayId; - if ((slot == EQUIPMENT_SLOT_HEAD && player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_HELM)) || - (slot == EQUIPMENT_SLOT_BACK && player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_HIDE_CLOAK))) - itemDisplayId = 0; - else if (Item const* item = player->GetItemByPos(INVENTORY_SLOT_BAG_0, slot)) + if (Item const* item = player->GetItemByPos(INVENTORY_SLOT_BAG_0, slot)) itemDisplayId = item->GetDisplayId(player); else itemDisplayId = 0; diff --git a/src/server/game/Handlers/TaxiHandler.cpp b/src/server/game/Handlers/TaxiHandler.cpp index 09c24ff7f49..2eb723f7e2b 100644 --- a/src/server/game/Handlers/TaxiHandler.cpp +++ b/src/server/game/Handlers/TaxiHandler.cpp @@ -32,7 +32,7 @@ void WorldSession::HandleEnableTaxiNodeOpcode(WorldPackets::Taxi::EnableTaxiNode& enableTaxiNode) { - if (Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(enableTaxiNode.Unit, UNIT_NPC_FLAG_FLIGHTMASTER)) + if (Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(enableTaxiNode.Unit, UNIT_NPC_FLAG_FLIGHTMASTER, UNIT_NPC_FLAG_2_NONE)) SendLearnNewTaxiNode(unit); } @@ -69,7 +69,7 @@ void WorldSession::SendTaxiStatus(ObjectGuid guid) void WorldSession::HandleTaxiQueryAvailableNodesOpcode(WorldPackets::Taxi::TaxiQueryAvailableNodes& taxiQueryAvailableNodes) { // cheating checks - Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(taxiQueryAvailableNodes.Unit, UNIT_NPC_FLAG_FLIGHTMASTER); + Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(taxiQueryAvailableNodes.Unit, UNIT_NPC_FLAG_FLIGHTMASTER, UNIT_NPC_FLAG_2_NONE); if (!unit) { TC_LOG_DEBUG("network", "WORLD: HandleTaxiQueryAvailableNodes - %s not found or you can't interact with him.", taxiQueryAvailableNodes.Unit.ToString().c_str()); @@ -168,7 +168,7 @@ void WorldSession::SendDiscoverNewTaxiNode(uint32 nodeid) void WorldSession::HandleActivateTaxiOpcode(WorldPackets::Taxi::ActivateTaxi& activateTaxi) { - Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(activateTaxi.Vendor, UNIT_NPC_FLAG_FLIGHTMASTER); + Creature* unit = GetPlayer()->GetNPCIfCanInteractWith(activateTaxi.Vendor, UNIT_NPC_FLAG_FLIGHTMASTER, UNIT_NPC_FLAG_2_NONE); if (!unit) { TC_LOG_DEBUG("network", "WORLD: HandleActivateTaxiOpcode - %s not found or you can't interact with it.", activateTaxi.Vendor.ToString().c_str()); diff --git a/src/server/game/Handlers/TradeHandler.cpp b/src/server/game/Handlers/TradeHandler.cpp index 9756ee2bc01..0b17b08f48e 100644 --- a/src/server/game/Handlers/TradeHandler.cpp +++ b/src/server/game/Handlers/TradeHandler.cpp @@ -67,23 +67,23 @@ void WorldSession::SendUpdateTrade(bool trader_data /*= true*/) tradeItem.Slot = i; tradeItem.Item.Initialize(item); tradeItem.StackCount = item->GetCount(); - tradeItem.GiftCreator = item->GetGuidValue(ITEM_FIELD_GIFTCREATOR); - if (!item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_WRAPPED)) + tradeItem.GiftCreator = item->GetGiftCreator(); + if (!item->HasItemFlag(ITEM_FIELD_FLAG_WRAPPED)) { tradeItem.Unwrapped = boost::in_place(); tradeItem.Unwrapped->EnchantID = item->GetEnchantmentId(PERM_ENCHANTMENT_SLOT); tradeItem.Unwrapped->OnUseEnchantmentID = item->GetEnchantmentId(USE_ENCHANTMENT_SLOT); - tradeItem.Unwrapped->Creator = item->GetGuidValue(ITEM_FIELD_CREATOR); + tradeItem.Unwrapped->Creator = item->GetCreator(); tradeItem.Unwrapped->Charges = item->GetSpellCharges(); - tradeItem.Unwrapped->Lock = item->GetTemplate()->GetLockID() && !item->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_UNLOCKED); - tradeItem.Unwrapped->MaxDurability = item->GetUInt32Value(ITEM_FIELD_MAXDURABILITY); - tradeItem.Unwrapped->Durability = item->GetUInt32Value(ITEM_FIELD_DURABILITY); + tradeItem.Unwrapped->Lock = item->GetTemplate()->GetLockID() && !item->HasItemFlag(ITEM_FIELD_FLAG_UNLOCKED); + tradeItem.Unwrapped->MaxDurability = item->m_itemData->MaxDurability; + tradeItem.Unwrapped->Durability = item->m_itemData->Durability; uint8 g = 0; - for (ItemDynamicFieldGems const& gemData : item->GetGems()) + for (UF::SocketedGem const& gemData : item->m_itemData->Gems) { - if (gemData.ItemId) + if (gemData.ItemID) { WorldPackets::Item::ItemGemData gem; gem.Slot = g; @@ -134,8 +134,8 @@ void WorldSession::moveItems(Item* myItems[], Item* hisItems[]) } // adjust time (depends on /played) - if (myItems[i]->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_BOP_TRADEABLE)) - myItems[i]->SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, trader->GetTotalPlayedTime()-(_player->GetTotalPlayedTime()-myItems[i]->GetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME))); + if (myItems[i]->HasItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE)) + myItems[i]->SetCreatePlayedTime(trader->GetTotalPlayedTime() - (_player->GetTotalPlayedTime() - myItems[i]->m_itemData->CreatePlayedTime)); // store trader->MoveItemToInventory(traderDst, myItems[i], true, true); } @@ -152,8 +152,8 @@ void WorldSession::moveItems(Item* myItems[], Item* hisItems[]) } // adjust time (depends on /played) - if (hisItems[i]->HasFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_BOP_TRADEABLE)) - hisItems[i]->SetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME, _player->GetTotalPlayedTime()-(trader->GetTotalPlayedTime()-hisItems[i]->GetUInt32Value(ITEM_FIELD_CREATE_PLAYED_TIME))); + if (hisItems[i]->HasItemFlag(ITEM_FIELD_FLAG_BOP_TRADEABLE)) + hisItems[i]->SetCreatePlayedTime(_player->GetTotalPlayedTime() - (trader->GetTotalPlayedTime() - hisItems[i]->m_itemData->CreatePlayedTime)); // store _player->MoveItemToInventory(playerDst, hisItems[i], true, true); } @@ -469,12 +469,12 @@ void WorldSession::HandleAcceptTradeOpcode(WorldPackets::Trade::AcceptTrade& acc { if (myItems[i]) { - myItems[i]->SetGuidValue(ITEM_FIELD_GIFTCREATOR, _player->GetGUID()); + myItems[i]->SetGiftCreator(_player->GetGUID()); _player->MoveItemFromInventory(myItems[i]->GetBagSlot(), myItems[i]->GetSlot(), true); } if (hisItems[i]) { - hisItems[i]->SetGuidValue(ITEM_FIELD_GIFTCREATOR, trader->GetGUID()); + hisItems[i]->SetGiftCreator(trader->GetGUID()); trader->MoveItemFromInventory(hisItems[i]->GetBagSlot(), hisItems[i]->GetSlot(), true); } } @@ -667,8 +667,8 @@ void WorldSession::HandleInitiateTradeOpcode(WorldPackets::Trade::InitiateTrade& } if ((pOther->GetTeam() != _player->GetTeam() || - pOther->HasFlag(PLAYER_FLAGS_EX, PLAYER_FLAGS_EX_MERCENARY_MODE) || - _player->HasFlag(PLAYER_FLAGS_EX, PLAYER_FLAGS_EX_MERCENARY_MODE)) && + pOther->HasPlayerFlagEx(PLAYER_FLAGS_EX_MERCENARY_MODE) || + _player->HasPlayerFlagEx(PLAYER_FLAGS_EX_MERCENARY_MODE)) && (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_TRADE) && !HasPermission(rbac::RBAC_PERM_ALLOW_TWO_SIDE_TRADE))) { diff --git a/src/server/game/Handlers/TransmogrificationHandler.cpp b/src/server/game/Handlers/TransmogrificationHandler.cpp index 11e15f6cd83..82c3fc708ef 100644 --- a/src/server/game/Handlers/TransmogrificationHandler.cpp +++ b/src/server/game/Handlers/TransmogrificationHandler.cpp @@ -28,7 +28,7 @@ void WorldSession::HandleTransmogrifyItems(WorldPackets::Transmogrification::Tra { Player* player = GetPlayer(); // Validate - if (!player->GetNPCIfCanInteractWith(transmogrifyItems.Npc, UNIT_NPC_FLAG_TRANSMOGRIFIER)) + if (!player->GetNPCIfCanInteractWith(transmogrifyItems.Npc, UNIT_NPC_FLAG_TRANSMOGRIFIER, UNIT_NPC_FLAG_2_NONE)) { TC_LOG_DEBUG("network", "WORLD: HandleTransmogrifyItems - %s not found or player can't interact with it.", transmogrifyItems.Npc.ToString().c_str()); return; diff --git a/src/server/game/Handlers/VoidStorageHandler.cpp b/src/server/game/Handlers/VoidStorageHandler.cpp index 8f8f94a27bb..bf4b222510c 100644 --- a/src/server/game/Handlers/VoidStorageHandler.cpp +++ b/src/server/game/Handlers/VoidStorageHandler.cpp @@ -33,7 +33,7 @@ void WorldSession::SendVoidStorageTransferResult(VoidTransferError result) void WorldSession::HandleVoidStorageUnlock(WorldPackets::VoidStorage::UnlockVoidStorage& unlockVoidStorage) { - Creature* unit = _player->GetNPCIfCanInteractWith(unlockVoidStorage.Npc, UNIT_NPC_FLAG_VAULTKEEPER); + Creature* unit = _player->GetNPCIfCanInteractWith(unlockVoidStorage.Npc, UNIT_NPC_FLAG_VAULTKEEPER, UNIT_NPC_FLAG_2_NONE); if (!unit) { TC_LOG_DEBUG("network", "WORLD: HandleVoidStorageUnlock - %s not found or player can't interact with it.", unlockVoidStorage.Npc.ToString().c_str()); @@ -52,7 +52,7 @@ void WorldSession::HandleVoidStorageUnlock(WorldPackets::VoidStorage::UnlockVoid void WorldSession::HandleVoidStorageQuery(WorldPackets::VoidStorage::QueryVoidStorage& queryVoidStorage) { - Creature* unit = _player->GetNPCIfCanInteractWith(queryVoidStorage.Npc, UNIT_NPC_FLAG_TRANSMOGRIFIER | UNIT_NPC_FLAG_VAULTKEEPER); + Creature* unit = _player->GetNPCIfCanInteractWith(queryVoidStorage.Npc, NPCFlags(UNIT_NPC_FLAG_TRANSMOGRIFIER | UNIT_NPC_FLAG_VAULTKEEPER), UNIT_NPC_FLAG_2_NONE); if (!unit) { TC_LOG_DEBUG("network", "WORLD: HandleVoidStorageQuery - %s not found or player can't interact with it.", queryVoidStorage.Npc.ToString().c_str()); @@ -95,7 +95,7 @@ void WorldSession::HandleVoidStorageQuery(WorldPackets::VoidStorage::QueryVoidSt void WorldSession::HandleVoidStorageTransfer(WorldPackets::VoidStorage::VoidStorageTransfer& voidStorageTransfer) { - Creature* unit = _player->GetNPCIfCanInteractWith(voidStorageTransfer.Npc, UNIT_NPC_FLAG_VAULTKEEPER); + Creature* unit = _player->GetNPCIfCanInteractWith(voidStorageTransfer.Npc, UNIT_NPC_FLAG_VAULTKEEPER, UNIT_NPC_FLAG_2_NONE); if (!unit) { TC_LOG_DEBUG("network", "WORLD: HandleVoidStorageTransfer - %s not found or player can't interact with it.", voidStorageTransfer.Npc.ToString().c_str()); @@ -154,14 +154,14 @@ void WorldSession::HandleVoidStorageTransfer(WorldPackets::VoidStorage::VoidStor continue; } - VoidStorageItem itemVS(sObjectMgr->GenerateVoidStorageItemId(), item->GetEntry(), item->GetGuidValue(ITEM_FIELD_CREATOR), - item->GetItemRandomEnchantmentId(), item->GetItemSuffixFactor(), item->GetModifier(ITEM_MODIFIER_UPGRADE_ID), + VoidStorageItem itemVS(sObjectMgr->GenerateVoidStorageItemId(), item->GetEntry(), item->GetCreator(), + item->GetItemRandomEnchantmentId(), item->GetModifier(ITEM_MODIFIER_UPGRADE_ID), item->GetModifier(ITEM_MODIFIER_SCALING_STAT_DISTRIBUTION_FIXED_LEVEL), item->GetModifier(ITEM_MODIFIER_ARTIFACT_KNOWLEDGE_LEVEL), - uint8(item->GetUInt32Value(ITEM_FIELD_CONTEXT)), item->GetDynamicValues(ITEM_DYNAMIC_FIELD_BONUSLIST_IDS)); + uint8(item->m_itemData->Context), item->m_itemData->BonusListIDs); WorldPackets::VoidStorage::VoidItem voidItem; voidItem.Guid = ObjectGuid::Create<HighGuid::Item>(itemVS.ItemId); - voidItem.Creator = item->GetGuidValue(ITEM_FIELD_CREATOR); + voidItem.Creator = item->GetCreator(); voidItem.Item.Initialize(&itemVS); voidItem.Slot = _player->AddVoidStorageItem(std::move(itemVS)); @@ -195,8 +195,7 @@ void WorldSession::HandleVoidStorageTransfer(WorldPackets::VoidStorage::VoidStor } Item* item = _player->StoreNewItem(dest, itemVS->ItemEntry, true, itemVS->ItemRandomPropertyId, GuidSet(), itemVS->Context, itemVS->BonusListIDs); - item->SetUInt32Value(ITEM_FIELD_PROPERTY_SEED, itemVS->ItemSuffixFactor); - item->SetGuidValue(ITEM_FIELD_CREATOR, itemVS->CreatorGuid); + item->SetCreator(itemVS->CreatorGuid); item->SetModifier(ITEM_MODIFIER_UPGRADE_ID, itemVS->ItemUpgradeId); item->SetBinding(true); GetCollectionMgr()->AddItemAppearance(item); @@ -213,7 +212,7 @@ void WorldSession::HandleVoidStorageTransfer(WorldPackets::VoidStorage::VoidStor void WorldSession::HandleVoidSwapItem(WorldPackets::VoidStorage::SwapVoidItem& swapVoidItem) { - Creature* unit = _player->GetNPCIfCanInteractWith(swapVoidItem.Npc, UNIT_NPC_FLAG_VAULTKEEPER); + Creature* unit = _player->GetNPCIfCanInteractWith(swapVoidItem.Npc, UNIT_NPC_FLAG_VAULTKEEPER, UNIT_NPC_FLAG_2_NONE); if (!unit) { TC_LOG_DEBUG("network", "WORLD: HandleVoidSwapItem - %s not found or player can't interact with it.", swapVoidItem.Npc.ToString().c_str()); diff --git a/src/server/game/Loot/Loot.cpp b/src/server/game/Loot/Loot.cpp index f856d8557f2..37d0c498b82 100644 --- a/src/server/game/Loot/Loot.cpp +++ b/src/server/game/Loot/Loot.cpp @@ -46,7 +46,6 @@ LootItem::LootItem(LootStoreItem const& li) needs_quest = li.needs_quest; - randomSuffix = GenerateEnchSuffixFactor(itemid); randomPropertyId = GenerateItemRandomPropertyId(itemid); upgradeId = sDB2Manager.GetRulesetItemUpgrade(itemid); context = 0; @@ -413,7 +412,7 @@ bool Loot::hasItemForAll() const } // return true if there is any FFA, quest or conditional item for the player. -bool Loot::hasItemFor(Player* player) const +bool Loot::hasItemFor(Player const* player) const { NotNormalLootItemMap const& lootPlayerQuestItems = GetPlayerQuestItems(); NotNormalLootItemMap::const_iterator q_itr = lootPlayerQuestItems.find(player->GetGUID()); diff --git a/src/server/game/Loot/Loot.h b/src/server/game/Loot/Loot.h index 4e1cf545462..dcd9978088f 100644 --- a/src/server/game/Loot/Loot.h +++ b/src/server/game/Loot/Loot.h @@ -133,7 +133,6 @@ enum LootSlotType struct TC_GAME_API LootItem { uint32 itemid; - uint32 randomSuffix; ItemRandomEnchantmentId randomPropertyId; int32 upgradeId; std::vector<int32> BonusListIDs; @@ -156,7 +155,7 @@ struct TC_GAME_API LootItem explicit LootItem(LootStoreItem const& li); // Empty constructor for creating an empty LootItem to be filled in with DB data - LootItem() : itemid(0), randomSuffix(0), randomPropertyId(), upgradeId(0), context(0), count(0), is_looted(false), is_blocked(false), + LootItem() : itemid(0), randomPropertyId(), upgradeId(0), context(0), count(0), is_looted(false), is_blocked(false), freeforall(false), is_underthreshold(false), is_counted(false), needs_quest(false), follow_loot_rules(false), canSave(true){ }; @@ -262,7 +261,7 @@ struct TC_GAME_API Loot LootItem* LootItemInSlot(uint32 lootslot, Player* player, NotNormalLootItem** qitem = NULL, NotNormalLootItem** ffaitem = NULL, NotNormalLootItem** conditem = NULL); uint32 GetMaxSlotInLootFor(Player* player) const; bool hasItemForAll() const; - bool hasItemFor(Player* player) const; + bool hasItemFor(Player const* player) const; bool hasOverThresholdItem() const; // Builds data for SMSG_LOOT_RESPONSE diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp index 81c94e4b7a2..00687a0a4d5 100644 --- a/src/server/game/Loot/LootMgr.cpp +++ b/src/server/game/Loot/LootMgr.cpp @@ -205,7 +205,7 @@ bool LootStore::HaveQuestLootFor(uint32 loot_id) const return itr->second->HasQuestDrop(m_LootTemplates); } -bool LootStore::HaveQuestLootForPlayer(uint32 loot_id, Player* player) const +bool LootStore::HaveQuestLootForPlayer(uint32 loot_id, Player const* player) const { LootTemplateMap::const_iterator tab = m_LootTemplates.find(loot_id); if (tab != m_LootTemplates.end()) diff --git a/src/server/game/Loot/LootMgr.h b/src/server/game/Loot/LootMgr.h index 7f5904cdb7a..570e40c78ad 100644 --- a/src/server/game/Loot/LootMgr.h +++ b/src/server/game/Loot/LootMgr.h @@ -80,7 +80,7 @@ class TC_GAME_API LootStore bool HaveLootFor(uint32 loot_id) const { return m_LootTemplates.find(loot_id) != m_LootTemplates.end(); } bool HaveQuestLootFor(uint32 loot_id) const; - bool HaveQuestLootForPlayer(uint32 loot_id, Player* player) const; + bool HaveQuestLootForPlayer(uint32 loot_id, Player const* player) const; LootTemplate const* GetLootFor(uint32 loot_id) const; void ResetConditions(); diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index be561822f5f..8d3e87e3c48 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -1052,9 +1052,9 @@ void Map::PlayerRelocation(Player* player, float x, float y, float z, float orie //! If hovering, always increase our server-side Z position //! Client automatically projects correct position based on Z coord sent in monster move - //! and UNIT_FIELD_HOVERHEIGHT sent in object updates + //! and HoverHeight sent in object updates if (player->HasUnitMovementFlag(MOVEMENTFLAG_HOVER)) - z += player->GetFloatValue(UNIT_FIELD_HOVERHEIGHT); + z += player->m_unitData->HoverHeight; player->Relocate(x, y, z, orientation); if (player->IsVehicle()) @@ -1087,9 +1087,9 @@ void Map::CreatureRelocation(Creature* creature, float x, float y, float z, floa //! If hovering, always increase our server-side Z position //! Client automatically projects correct position based on Z coord sent in monster move - //! and UNIT_FIELD_HOVERHEIGHT sent in object updates + //! and HoverHeight sent in object updates if (creature->HasUnitMovementFlag(MOVEMENTFLAG_HOVER)) - z += creature->GetFloatValue(UNIT_FIELD_HOVERHEIGHT); + z += creature->m_unitData->HoverHeight; // delay creature move for grid/cell to grid/cell moves if (old_cell.DiffCell(new_cell) || old_cell.DiffGrid(new_cell)) @@ -4217,14 +4217,29 @@ Corpse* Map::ConvertCorpseToBones(ObjectGuid const& ownerGuid, bool insignia /*= bones = new Corpse(); bones->Create(corpse->GetGUID().GetCounter(), this); - for (uint8 i = OBJECT_FIELD_GUID + 4; i < CORPSE_END; ++i) // don't overwrite guid - bones->SetUInt32Value(i, corpse->GetUInt32Value(i)); + bones->SetCorpseDynamicFlags(CorpseDynFlags(*corpse->m_corpseData->DynamicFlags)); + bones->SetOwnerGUID(corpse->m_corpseData->Owner); + bones->SetPartyGUID(corpse->m_corpseData->PartyGUID); + bones->SetGuildGUID(corpse->m_corpseData->GuildGUID); + bones->SetDisplayId(corpse->m_corpseData->DisplayID); + bones->SetRace(corpse->m_corpseData->RaceID); + bones->SetSex(corpse->m_corpseData->Sex); + bones->SetSkin(corpse->m_corpseData->SkinID); + bones->SetFace(corpse->m_corpseData->FaceID); + bones->SetHairStyle(corpse->m_corpseData->HairStyleID); + bones->SetHairColor(corpse->m_corpseData->HairColorID); + bones->SetFacialHairStyle(corpse->m_corpseData->FacialHairStyleID); + bones->SetFlags(corpse->m_corpseData->Flags | CORPSE_FLAG_BONES); + bones->SetFactionTemplate(corpse->m_corpseData->FactionTemplate); + for (uint32 i = 0; i < EQUIPMENT_SLOT_END; ++i) + bones->SetItem(i, corpse->m_corpseData->Items[i]); + + for (uint32 i = 0; i < PLAYER_CUSTOM_DISPLAY_SIZE; ++i) + bones->SetCustomDisplayOption(i, corpse->m_corpseData->CustomDisplayOption[i]); bones->SetCellCoord(corpse->GetCellCoord()); bones->Relocate(corpse->GetPositionX(), corpse->GetPositionY(), corpse->GetPositionZ(), corpse->GetOrientation()); - bones->SetUInt32Value(CORPSE_FIELD_FLAGS, corpse->GetUInt32Value(CORPSE_FIELD_FLAGS) | CORPSE_FLAG_BONES); - PhasingHandler::InheritPhaseShift(bones, corpse); AddCorpse(bones); diff --git a/src/server/game/Maps/MapScripts.cpp b/src/server/game/Maps/MapScripts.cpp index 155910870b4..6729b02dd4f 100644 --- a/src/server/game/Maps/MapScripts.cpp +++ b/src/server/game/Maps/MapScripts.cpp @@ -424,26 +424,12 @@ void Map::ScriptsProcess() if (Creature* cSource = _GetScriptCreatureSourceOrTarget(source, target, step.script)) { if (step.script->Emote.Flags & SF_EMOTE_USE_STATE) - cSource->SetUInt32Value(UNIT_NPC_EMOTESTATE, step.script->Emote.EmoteID); + cSource->SetEmoteState(Emote(step.script->Emote.EmoteID)); else cSource->HandleEmoteCommand(step.script->Emote.EmoteID); } break; - case SCRIPT_COMMAND_FIELD_SET: - // Source or target must be Creature. - if (Creature* cSource = _GetScriptCreatureSourceOrTarget(source, target, step.script)) - { - // Validate field number. - if (step.script->FieldSet.FieldID <= OBJECT_FIELD_ENTRY || step.script->FieldSet.FieldID >= cSource->GetValuesCount()) - TC_LOG_ERROR("scripts", "%s wrong field %u (max count: %u) in object (TypeId: %u, %s) specified, skipping.", - step.script->GetDebugInfo().c_str(), step.script->FieldSet.FieldID, - cSource->GetValuesCount(), cSource->GetTypeId(), cSource->GetGUID().ToString().c_str()); - else - cSource->SetUInt32Value(step.script->FieldSet.FieldID, step.script->FieldSet.FieldValue); - } - break; - case SCRIPT_COMMAND_MOVE_TO: // Source or target must be Creature. if (Creature* cSource = _GetScriptCreatureSourceOrTarget(source, target, step.script)) @@ -459,38 +445,6 @@ void Map::ScriptsProcess() } break; - case SCRIPT_COMMAND_FLAG_SET: - // Source or target must be Creature. - if (Creature* cSource = _GetScriptCreatureSourceOrTarget(source, target, step.script)) - { - // Validate field number. - if (step.script->FlagToggle.FieldID <= OBJECT_FIELD_ENTRY || step.script->FlagToggle.FieldID >= cSource->GetValuesCount()) - { - TC_LOG_ERROR("scripts", "%s wrong field %u (max count: %u) in object (TypeId: %u, Entry: %u, %s) specified, skipping.", - step.script->GetDebugInfo().c_str(), step.script->FlagToggle.FieldID, - cSource->GetValuesCount(), cSource->GetTypeId(), cSource->GetEntry(), cSource->GetGUID().ToString().c_str()); - } - else - cSource->SetFlag(step.script->FlagToggle.FieldID, step.script->FlagToggle.FieldValue); - } - break; - - case SCRIPT_COMMAND_FLAG_REMOVE: - // Source or target must be Creature. - if (Creature* cSource = _GetScriptCreatureSourceOrTarget(source, target, step.script)) - { - // Validate field number. - if (step.script->FlagToggle.FieldID <= OBJECT_FIELD_ENTRY || step.script->FlagToggle.FieldID >= cSource->GetValuesCount()) - { - TC_LOG_ERROR("scripts", "%s wrong field %u (max count: %u) in object (TypeId: %u, Entry: %u, %s) specified, skipping.", - step.script->GetDebugInfo().c_str(), step.script->FlagToggle.FieldID, - cSource->GetValuesCount(), cSource->GetTypeId(), cSource->GetEntry(), cSource->GetGUID().ToString().c_str()); - } - else - cSource->RemoveFlag(step.script->FlagToggle.FieldID, step.script->FlagToggle.FieldValue); - } - break; - case SCRIPT_COMMAND_TELEPORT_TO: if (step.script->TeleportTo.Flags & SF_TELEPORT_USE_CREATURE) { diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp index 0fc00a29208..7d7e9a2076a 100755 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp @@ -28,7 +28,7 @@ template<class T> void ConfusedMovementGenerator<T>::DoInitialize(T* unit) { unit->AddUnitState(UNIT_STATE_CONFUSED); - unit->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED); + unit->AddUnitFlag(UNIT_FLAG_CONFUSED); unit->GetPosition(i_x, i_y, i_z); if (!unit->IsAlive() || unit->IsStopped()) @@ -101,7 +101,7 @@ bool ConfusedMovementGenerator<T>::DoUpdate(T* unit, uint32 diff) template<> void ConfusedMovementGenerator<Player>::DoFinalize(Player* unit) { - unit->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED); + unit->RemoveUnitFlag(UNIT_FLAG_CONFUSED); unit->ClearUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_CONFUSED_MOVE); unit->StopMoving(); } @@ -109,7 +109,7 @@ void ConfusedMovementGenerator<Player>::DoFinalize(Player* unit) template<> void ConfusedMovementGenerator<Creature>::DoFinalize(Creature* unit) { - unit->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_CONFUSED); + unit->RemoveUnitFlag(UNIT_FLAG_CONFUSED); unit->ClearUnitState(UNIT_STATE_CONFUSED | UNIT_STATE_CONFUSED_MOVE); if (unit->GetVictim()) unit->SetTarget(unit->EnsureVictim()->GetGUID()); diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp index 61eedf3347b..5f88727a5ef 100644 --- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp @@ -124,7 +124,7 @@ void FleeingMovementGenerator<T>::DoInitialize(T* owner) if (!owner) return; - owner->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_FLEEING); + owner->AddUnitFlag(UNIT_FLAG_FLEEING); owner->AddUnitState(UNIT_STATE_FLEEING | UNIT_STATE_FLEEING_MOVE); _setTargetLocation(owner); } @@ -132,7 +132,7 @@ void FleeingMovementGenerator<T>::DoInitialize(T* owner) template<> void FleeingMovementGenerator<Player>::DoFinalize(Player* owner) { - owner->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_FLEEING); + owner->RemoveUnitFlag(UNIT_FLAG_FLEEING); owner->ClearUnitState(UNIT_STATE_FLEEING | UNIT_STATE_FLEEING_MOVE); owner->StopMoving(); } @@ -140,7 +140,7 @@ void FleeingMovementGenerator<Player>::DoFinalize(Player* owner) template<> void FleeingMovementGenerator<Creature>::DoFinalize(Creature* owner) { - owner->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_FLEEING); + owner->RemoveUnitFlag(UNIT_FLAG_FLEEING); owner->ClearUnitState(UNIT_STATE_FLEEING|UNIT_STATE_FLEEING_MOVE); if (owner->GetVictim()) owner->SetTarget(owner->EnsureVictim()->GetGUID()); @@ -184,7 +184,7 @@ template bool FleeingMovementGenerator<Creature>::DoUpdate(Creature*, uint32); void TimedFleeingMovementGenerator::Finalize(Unit* owner) { - owner->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_FLEEING); + owner->RemoveUnitFlag(UNIT_FLAG_FLEEING); owner->ClearUnitState(UNIT_STATE_FLEEING|UNIT_STATE_FLEEING_MOVE); if (Unit* victim = owner->GetVictim()) { diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp index f30e090fa30..fdbeeed3494 100755 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp @@ -395,7 +395,7 @@ void FlightPathMovementGenerator::DoFinalize(Player* player) player->ClearUnitState(UNIT_STATE_IN_FLIGHT); player->Dismount(); - player->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_REMOVE_CLIENT_CONTROL | UNIT_FLAG_TAXI_FLIGHT); + player->RemoveUnitFlag(UnitFlags(UNIT_FLAG_REMOVE_CLIENT_CONTROL | UNIT_FLAG_TAXI_FLIGHT)); if (player->m_taxi.empty()) { @@ -406,7 +406,7 @@ void FlightPathMovementGenerator::DoFinalize(Player* player) player->StopMoving(); } - player->RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_TAXI_BENCHMARK); + player->RemovePlayerFlag(PLAYER_FLAGS_TAXI_BENCHMARK); player->RestoreDisplayId(); } @@ -416,7 +416,7 @@ void FlightPathMovementGenerator::DoReset(Player* player) { player->getHostileRefManager().setOnlineOfflineState(false); player->AddUnitState(UNIT_STATE_IN_FLIGHT); - player->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_REMOVE_CLIENT_CONTROL | UNIT_FLAG_TAXI_FLIGHT); + player->AddUnitFlag(UnitFlags(UNIT_FLAG_REMOVE_CLIENT_CONTROL | UNIT_FLAG_TAXI_FLIGHT)); Movement::MoveSplineInit init(player); uint32 end = GetPathAtMapEnd(); diff --git a/src/server/game/Movement/Spline/MoveSplineFlag.h b/src/server/game/Movement/Spline/MoveSplineFlag.h index 8b10bbae202..0451b59c246 100644 --- a/src/server/game/Movement/Spline/MoveSplineFlag.h +++ b/src/server/game/Movement/Spline/MoveSplineFlag.h @@ -83,7 +83,7 @@ namespace Movement bool isSmooth() const { return (raw() & Catmullrom) != 0; } bool isLinear() const { return !isSmooth(); } - uint8 getAnimationId() const { return animId; } + uint8 getAnimTier() const { return animTier; } bool hasAllFlags(uint32 f) const { return (raw() & f) == f; } bool hasFlag(uint32 f) const { return (raw() & f) != 0; } uint32 operator & (uint32 f) const { return (raw() & f); } @@ -103,7 +103,7 @@ namespace Movement void EnableTransportEnter() { raw() = (raw() & ~TransportExit) | TransportEnter; } void EnableTransportExit() { raw() = (raw() & ~TransportEnter) | TransportExit; } - uint8 animId : 3; + uint8 animTier : 3; bool unknown0 : 1; bool fallingSlow : 1; bool done : 1; diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp index 1745ef24a39..33c6d199441 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.cpp +++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp @@ -187,7 +187,7 @@ namespace Movement args.walk = unit->HasUnitMovementFlag(MOVEMENTFLAG_WALKING); args.flags.flying = unit->HasUnitMovementFlag(MovementFlags(MOVEMENTFLAG_CAN_FLY | MOVEMENTFLAG_DISABLE_GRAVITY)); args.flags.smoothGroundPath = true; // enabled by default, CatmullRom mode or client config "pathSmoothing" will disable this - args.flags.steering = unit->HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_STEERING); + args.flags.steering = unit->HasNpcFlag2(UNIT_NPC_FLAG_2_STEERING); } MoveSplineInit::~MoveSplineInit() = default; diff --git a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp index fbc37cf5bf1..d81c340f8c0 100644 --- a/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp +++ b/src/server/game/Server/Packets/CombatLogPacketsCommon.cpp @@ -66,15 +66,15 @@ namespace WorldPackets CreatureTemplate const* creatureTemplate = attacker->GetCreatureTemplate(); Type = TYPE_CREATURE_TO_PLAYER_DAMAGE; - PlayerLevelDelta = target->GetInt32Value(ACTIVE_PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA); + PlayerLevelDelta = target->m_activePlayerData->ScalingPlayerLevelDelta; PlayerItemLevel = target->GetAverageItemLevel(); TargetItemLevel = 0; - ScalingHealthItemLevelCurveID = target->GetUInt32Value(UNIT_FIELD_SCALING_HEALTH_ITEM_LEVEL_CURVE_ID); + ScalingHealthItemLevelCurveID = target->m_unitData->ScalingHealthItemLevelCurveID; TargetLevel = target->getLevel(); Expansion = creatureTemplate->RequiredExpansion; TargetMinScalingLevel = uint8(creatureTemplate->levelScaling->MinLevel); TargetMaxScalingLevel = uint8(creatureTemplate->levelScaling->MaxLevel); - TargetScalingLevelDelta = int8(attacker->GetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA)); + TargetScalingLevelDelta = int8(attacker->m_unitData->ScalingLevelDelta); return true; } @@ -84,15 +84,15 @@ namespace WorldPackets CreatureTemplate const* creatureTemplate = target->GetCreatureTemplate(); Type = TYPE_PLAYER_TO_CREATURE_DAMAGE; - PlayerLevelDelta = attacker->GetInt32Value(ACTIVE_PLAYER_FIELD_SCALING_PLAYER_LEVEL_DELTA); + PlayerLevelDelta = attacker->m_activePlayerData->ScalingPlayerLevelDelta; PlayerItemLevel = attacker->GetAverageItemLevel(); TargetItemLevel = 0; - ScalingHealthItemLevelCurveID = target->GetUInt32Value(UNIT_FIELD_SCALING_HEALTH_ITEM_LEVEL_CURVE_ID); + ScalingHealthItemLevelCurveID = target->m_unitData->ScalingHealthItemLevelCurveID; TargetLevel = target->getLevel(); Expansion = creatureTemplate->RequiredExpansion; TargetMinScalingLevel = uint8(creatureTemplate->levelScaling->MinLevel); TargetMaxScalingLevel = uint8(creatureTemplate->levelScaling->MaxLevel); - TargetScalingLevelDelta = int8(target->GetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA)); + TargetScalingLevelDelta = int8(target->m_unitData->ScalingLevelDelta); return true; } @@ -109,7 +109,7 @@ namespace WorldPackets Expansion = creatureTemplate->RequiredExpansion; TargetMinScalingLevel = uint8(creatureTemplate->levelScaling->MinLevel); TargetMaxScalingLevel = uint8(creatureTemplate->levelScaling->MaxLevel); - TargetScalingLevelDelta = int8(accessor->GetInt32Value(UNIT_FIELD_SCALING_LEVEL_DELTA)); + TargetScalingLevelDelta = int8(accessor->m_unitData->ScalingLevelDelta); return true; } diff --git a/src/server/game/Server/Packets/InspectPackets.cpp b/src/server/game/Server/Packets/InspectPackets.cpp index 8a36270bec2..b4be28ae025 100644 --- a/src/server/game/Server/Packets/InspectPackets.cpp +++ b/src/server/game/Server/Packets/InspectPackets.cpp @@ -83,7 +83,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Inspect::PVPBracketData c WorldPackets::Inspect::InspectItemData::InspectItemData(::Item const* item, uint8 index) { - CreatorGUID = item->GetGuidValue(ITEM_FIELD_CREATOR); + CreatorGUID = item->GetCreator(); Item.Initialize(item); Index = index; @@ -94,9 +94,9 @@ WorldPackets::Inspect::InspectItemData::InspectItemData(::Item const* item, uint Enchants.emplace_back(enchId, i); uint8 i = 0; - for (ItemDynamicFieldGems const& gemData : item->GetGems()) + for (UF::SocketedGem const& gemData : item->m_itemData->Gems) { - if (gemData.ItemId) + if (gemData.ItemID) { Gems.emplace_back(); diff --git a/src/server/game/Server/Packets/ItemPacketsCommon.cpp b/src/server/game/Server/Packets/ItemPacketsCommon.cpp index 0803b3f044b..fbc907d7b81 100644 --- a/src/server/game/Server/Packets/ItemPacketsCommon.cpp +++ b/src/server/game/Server/Packets/ItemPacketsCommon.cpp @@ -33,15 +33,15 @@ bool WorldPackets::Item::ItemBonusInstanceData::operator==(ItemBonusInstanceData void WorldPackets::Item::ItemInstance::Initialize(::Item const* item) { ItemID = item->GetEntry(); - std::vector<uint32> const& bonusListIds = item->GetDynamicValues(ITEM_DYNAMIC_FIELD_BONUSLIST_IDS); + std::vector<int32> const& bonusListIds = item->m_itemData->BonusListIDs; if (!bonusListIds.empty()) { ItemBonus = boost::in_place(); ItemBonus->BonusListIDs.insert(ItemBonus->BonusListIDs.end(), bonusListIds.begin(), bonusListIds.end()); - ItemBonus->Context = item->GetUInt32Value(ITEM_FIELD_CONTEXT); + ItemBonus->Context = item->m_itemData->Context; } - if (uint32 mask = item->GetUInt32Value(ITEM_FIELD_MODIFIERS_MASK)) + if (uint32 mask = item->m_itemData->ModifiersMask) { Modifications = boost::in_place(); @@ -51,9 +51,9 @@ void WorldPackets::Item::ItemInstance::Initialize(::Item const* item) } } -void WorldPackets::Item::ItemInstance::Initialize(::ItemDynamicFieldGems const* gem) +void WorldPackets::Item::ItemInstance::Initialize(UF::SocketedGem const* gem) { - ItemID = gem->ItemId; + ItemID = gem->ItemID; ItemBonusInstanceData bonus; bonus.Context = gem->Context; diff --git a/src/server/game/Server/Packets/ItemPacketsCommon.h b/src/server/game/Server/Packets/ItemPacketsCommon.h index 1c01447630e..3f0d500c069 100644 --- a/src/server/game/Server/Packets/ItemPacketsCommon.h +++ b/src/server/game/Server/Packets/ItemPacketsCommon.h @@ -25,10 +25,14 @@ class ByteBuffer; class Item; -struct ItemDynamicFieldGems; struct LootItem; struct VoidStorageItem; +namespace UF +{ + struct SocketedGem; +} + namespace WorldPackets { namespace Item @@ -45,7 +49,7 @@ namespace WorldPackets struct ItemInstance { void Initialize(::Item const* item); - void Initialize(::ItemDynamicFieldGems const* gem); + void Initialize(UF::SocketedGem const* gem); void Initialize(::LootItem const& lootItem); void Initialize(::VoidStorageItem const* voidItem); diff --git a/src/server/game/Server/Packets/MailPackets.cpp b/src/server/game/Server/Packets/MailPackets.cpp index 294698728ff..0f5731ccc00 100644 --- a/src/server/game/Server/Packets/MailPackets.cpp +++ b/src/server/game/Server/Packets/MailPackets.cpp @@ -28,8 +28,8 @@ WorldPackets::Mail::MailAttachedItem::MailAttachedItem(::Item const* item, uint8 Item.Initialize(item); Count = item->GetCount(); Charges = item->GetSpellCharges(); - MaxDurability = item->GetUInt32Value(ITEM_FIELD_MAXDURABILITY); - Durability = item->GetUInt32Value(ITEM_FIELD_DURABILITY); + MaxDurability = item->m_itemData->MaxDurability; + Durability = item->m_itemData->Durability; Unlocked = !item->IsLocked(); for (uint8 j = 0; j < MAX_INSPECTED_ENCHANTMENT_SLOT; j++) @@ -42,9 +42,9 @@ WorldPackets::Mail::MailAttachedItem::MailAttachedItem(::Item const* item, uint8 } uint8 i = 0; - for (ItemDynamicFieldGems const& gemData : item->GetGems()) + for (UF::SocketedGem const& gemData : item->m_itemData->Gems) { - if (gemData.ItemId) + if (gemData.ItemID) { WorldPackets::Item::ItemGemData gem; gem.Slot = i; diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp index 4039bd9e7b6..b4a2552d49a 100644 --- a/src/server/game/Server/Packets/MiscPackets.cpp +++ b/src/server/game/Server/Packets/MiscPackets.cpp @@ -295,6 +295,15 @@ WorldPacket const* WorldPackets::Misc::StandStateUpdate::Write() return &_worldPacket; } +WorldPacket const* WorldPackets::Misc::SetAnimTier::Write() +{ + _worldPacket << Unit; + _worldPacket.WriteBits(Tier, 3); + _worldPacket.FlushBits(); + + return &_worldPacket; +} + WorldPacket const* WorldPackets::Misc::PlayerBound::Write() { _worldPacket << BinderID; diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index 1c88f229a8c..3c56360e4eb 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -420,6 +420,17 @@ namespace WorldPackets UnitStandStateType State = UnitStandStateType(0); }; + class SetAnimTier final : public ServerPacket + { + public: + SetAnimTier(): ServerPacket(SMSG_SET_ANIM_TIER, 16 + 1) { } + + WorldPacket const* Write() override; + + ObjectGuid Unit; + int32 Tier = 0; + }; + class StartMirrorTimer final : public ServerPacket { public: diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp index 8276fb8d819..c14d96e0964 100644 --- a/src/server/game/Server/Packets/MovementPackets.cpp +++ b/src/server/game/Server/Packets/MovementPackets.cpp @@ -398,7 +398,7 @@ void WorldPackets::Movement::MonsterMove::InitializeSplineData(::Movement::MoveS if (splineFlags.animation) { - movementSpline.AnimTier = splineFlags.getAnimationId(); + movementSpline.AnimTier = splineFlags.getAnimTier(); movementSpline.TierTransStartTime = moveSpline.effect_start_time; } diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp index 1cd4ab95dad..7704f36d07d 100644 --- a/src/server/game/Server/Packets/PartyPackets.cpp +++ b/src/server/game/Server/Packets/PartyPackets.cpp @@ -556,7 +556,7 @@ void WorldPackets::Party::PartyMemberState::Initialize(Player const* player) if (!player->IsAlive()) { - if (player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST)) + if (player->HasPlayerFlag(PLAYER_FLAGS_GHOST)) MemberStats.Status |= MEMBER_STATUS_GHOST; else MemberStats.Status |= MEMBER_STATUS_DEAD; @@ -593,9 +593,9 @@ void WorldPackets::Party::PartyMemberState::Initialize(Player const* player) MemberStats.PositionY = int16(player->GetPositionY()); MemberStats.PositionZ = int16(player->GetPositionZ()); - MemberStats.SpecID = player->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID); - MemberStats.PartyType[0] = player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_PARTY_TYPE) & 0xF; - MemberStats.PartyType[1] = player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_PARTY_TYPE) >> 4; + MemberStats.SpecID = player->GetPrimarySpecialization(); + MemberStats.PartyType[0] = player->m_playerData->PartyType & 0xF; + MemberStats.PartyType[1] = player->m_playerData->PartyType >> 4; MemberStats.WmoGroupID = 0; MemberStats.WmoDoodadPlacementID = 0; diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp index 8f651aeea7e..8c4ba6f1746 100644 --- a/src/server/game/Server/Packets/QueryPackets.cpp +++ b/src/server/game/Server/Packets/QueryPackets.cpp @@ -133,7 +133,7 @@ bool WorldPackets::Query::PlayerGuidLookupData::Initialize(ObjectGuid const& gui BnetAccountID = player->GetSession()->GetBattlenetAccountGUID(); Name = player->GetName(); Race = player->getRace(); - Sex = player->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER); + Sex = player->m_playerData->NativeSex; ClassID = player->getClass(); Level = player->getLevel(); diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 32cc88a0aee..6287fc3c67a 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1715,7 +1715,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_SETUP_RESEARCH_HISTORY, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_AI_ANIM_KIT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_ALL_TASK_PROGRESS, STATUS_UNHANDLED, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_ANIM_TIER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_ANIM_TIER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_CURRENCY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_DF_FAST_LAUNCH_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_DUNGEON_DIFFICULTY, STATUS_NEVER, CONNECTION_TYPE_REALM); @@ -1830,7 +1830,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_GAME_TIME_STATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_INSTANCE_OWNERSHIP, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_LAST_INSTANCE, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_OBJECT, XXXXXXXXXXXX, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_OBJECT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_TALENT_DATA, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_TASK_PROGRESS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_UPDATE_WEEKLY_SPELL_USAGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index 3525b9a427f..143c53f8a65 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(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->SetInvSlot(j, ObjectGuid::Empty); + _player->SetBuybackPrice(eslot, 0); + _player->SetBuybackTimestamp(eslot, 0); } _player->SaveToDB(); } diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp index 36608a4a075..3fa7c3e2cf1 100644 --- a/src/server/game/Server/WorldSocket.cpp +++ b/src/server/game/Server/WorldSocket.cpp @@ -71,7 +71,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_Wn64[16] = { 0xDD, 0x62, 0x65, 0x17, 0xCC, 0x6D, 0x31, 0x93, 0x2B, 0x47, 0x99, 0x34, 0xCC, 0xDC, 0x0A, 0xBF }; +uint8 const ClientTypeSeed_Wn64[16] = { 0xBB, 0x6D, 0x98, 0x66, 0xFE, 0x4A, 0x19, 0xA5, 0x68, 0x01, 0x51, 0x98, 0x78, 0x30, 0x03, 0xFC }; 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)), diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 9e21f697bf4..837e0aa61a7 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -611,47 +611,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(ACTIVE_PLAYER_FIELD_MASTERY) * GetSpellEffectInfo()->BonusCoefficient); - - // check item enchant aura cast - if (!amount && caster) - { - ObjectGuid itemGUID = GetBase()->GetCastItemGUID(); - if (!itemGUID.IsEmpty()) - { - if (Player* playerCaster = caster->ToPlayer()) - { - if (Item* castItem = playerCaster->GetItemByGuid(itemGUID)) - { - if (castItem->GetItemSuffixFactor()) - { - ItemRandomSuffixEntry const* item_rand_suffix = sItemRandomSuffixStore.LookupEntry(abs(castItem->GetItemRandomPropertyId())); - if (item_rand_suffix) - { - for (int k = 0; k < MAX_ITEM_RANDOM_PROPERTIES; k++) - { - SpellItemEnchantmentEntry const* pEnchant = sSpellItemEnchantmentStore.LookupEntry(item_rand_suffix->Enchantment[k]); - if (pEnchant) - { - for (int t = 0; t < MAX_ITEM_ENCHANTMENT_EFFECTS; t++) - { - if (pEnchant->EffectArg[t] == m_spellInfo->Id) - { - amount = uint32((item_rand_suffix->AllocationPct[k] * castItem->GetItemSuffixFactor()) / 10000); - break; - } - } - } - - if (amount) - break; - } - } - } - } - } - } - } + amount = int32(caster->ToPlayer()->m_activePlayerData->Mastery * GetSpellEffectInfo()->BonusCoefficient); // custom amount calculations go here switch (GetAuraType()) @@ -747,7 +707,7 @@ void AuraEffect::CalculatePeriodic(Unit* caster, bool resetPeriodicTimer /*= tru if (m_spellInfo->IsChanneled()) caster->ModSpellDurationTime(m_spellInfo, m_period); else if (m_spellInfo->HasAttribute(SPELL_ATTR5_HASTE_AFFECT_DURATION)) - m_period = int32(m_period * caster->GetFloatValue(UNIT_MOD_CAST_SPEED)); + m_period = int32(m_period * caster->m_unitData->ModCastingSpeed); } } @@ -1485,8 +1445,8 @@ void AuraEffect::HandleModInvisibility(AuraApplication const* aurApp, uint8 mode if (apply) { // apply glow vision - if (target->GetTypeId() == TYPEID_PLAYER) - target->SetByteFlag(ACTIVE_PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_AURA_VISION, PLAYER_FIELD_BYTE2_INVISIBILITY_GLOW); + if (Player* playerTarget = target->ToPlayer()) + playerTarget->AddAuraVision(PLAYER_FIELD_BYTE2_INVISIBILITY_GLOW); target->m_invisibility.AddFlag(type); target->m_invisibility.AddValue(type, GetAmount()); @@ -1497,8 +1457,8 @@ void AuraEffect::HandleModInvisibility(AuraApplication const* aurApp, uint8 mode { // if not have different invisibility auras. // remove glow vision - if (target->GetTypeId() == TYPEID_PLAYER) - target->RemoveByteFlag(ACTIVE_PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_AURA_VISION, PLAYER_FIELD_BYTE2_INVISIBILITY_GLOW); + if (Player * playerTarget = target->ToPlayer()) + playerTarget->RemoveAuraVision(PLAYER_FIELD_BYTE2_INVISIBILITY_GLOW); target->m_invisibility.DelFlag(type); } @@ -1568,9 +1528,9 @@ void AuraEffect::HandleModStealth(AuraApplication const* aurApp, uint8 mode, boo target->m_stealth.AddFlag(type); target->m_stealth.AddValue(type, GetAmount()); - target->SetStandFlags(UNIT_STAND_FLAGS_CREEP); - if (target->GetTypeId() == TYPEID_PLAYER) - target->SetByteFlag(ACTIVE_PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_AURA_VISION, PLAYER_FIELD_BYTE2_STEALTH); + target->AddVisFlags(UNIT_VIS_FLAGS_CREEP); + if (Player * playerTarget = target->ToPlayer()) + playerTarget->AddAuraVision(PLAYER_FIELD_BYTE2_STEALTH); } else { @@ -1580,9 +1540,9 @@ void AuraEffect::HandleModStealth(AuraApplication const* aurApp, uint8 mode, boo { target->m_stealth.DelFlag(type); - target->RemoveStandFlags(UNIT_STAND_FLAGS_CREEP); - if (target->GetTypeId() == TYPEID_PLAYER) - target->RemoveByteFlag(ACTIVE_PLAYER_FIELD_BYTES2, PLAYER_FIELD_BYTES_2_OFFSET_AURA_VISION, PLAYER_FIELD_BYTE2_STEALTH); + target->RemoveVisFlags(UNIT_VIS_FLAGS_CREEP); + if (Player * playerTarget = target->ToPlayer()) + playerTarget->RemoveAuraVision(PLAYER_FIELD_BYTE2_STEALTH); } } @@ -1646,14 +1606,14 @@ void AuraEffect::HandleAuraGhost(AuraApplication const* aurApp, uint8 mode, bool if (!(mode & AURA_EFFECT_HANDLE_SEND_FOR_CLIENT_MASK)) return; - Unit* target = aurApp->GetTarget(); + Player* target = aurApp->GetTarget()->ToPlayer(); - if (target->GetTypeId() != TYPEID_PLAYER) + if (!target) return; if (apply) { - target->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST); + target->AddPlayerFlag(PLAYER_FLAGS_GHOST); target->m_serverSideVisibility.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST); target->m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_GHOST); } @@ -1662,7 +1622,7 @@ void AuraEffect::HandleAuraGhost(AuraApplication const* aurApp, uint8 mode, bool if (target->HasAuraType(SPELL_AURA_GHOST)) return; - target->RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST); + target->RemovePlayerFlag(PLAYER_FLAGS_GHOST); target->m_serverSideVisibility.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_ALIVE); target->m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_ALIVE); } @@ -2020,8 +1980,8 @@ void AuraEffect::HandleAuraTransform(AuraApplication const* aurApp, uint8 mode, target->SetDisplayId(model_id); // Dragonmaw Illusion (set mount model also) - if (GetId() == 42016 && target->GetMountID() && !target->GetAuraEffectsByType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED).empty()) - target->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 16314); + if (GetId() == 42016 && target->GetMountDisplayId() && !target->GetAuraEffectsByType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED).empty()) + target->SetMountDisplayId(16314); } } } @@ -2048,7 +2008,7 @@ void AuraEffect::HandleAuraTransform(AuraApplication const* aurApp, uint8 mode, target->RestoreDisplayId(target->IsMounted()); // Dragonmaw Illusion (restore mount model) - if (GetId() == 42016 && target->GetMountID() == 16314) + if (GetId() == 42016 && target->GetMountDisplayId() == 16314) { if (!target->GetAuraEffectsByType(SPELL_AURA_MOUNTED).empty()) { @@ -2058,7 +2018,7 @@ void AuraEffect::HandleAuraTransform(AuraApplication const* aurApp, uint8 mode, CreatureModel model = *ObjectMgr::ChooseDisplayId(ci); sObjectMgr->GetCreatureModelRandomGender(&model, ci); - target->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, model.CreatureDisplayID); + target->SetMountDisplayId(model.CreatureDisplayID); } } } @@ -2093,12 +2053,12 @@ void AuraEffect::HandleAuraCloneCaster(AuraApplication const* aurApp, uint8 mode // What must be cloned? at least display and scale target->SetDisplayId(caster->GetDisplayId()); //target->SetObjectScale(caster->GetObjectScale()); // we need retail info about how scaling is handled (aura maybe?) - target->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_MIRROR_IMAGE); + target->AddUnitFlag2(UNIT_FLAG2_MIRROR_IMAGE); } else { target->SetDisplayId(target->GetNativeDisplayId()); - target->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_MIRROR_IMAGE); + target->RemoveUnitFlag2(UNIT_FLAG2_MIRROR_IMAGE); } } @@ -2151,9 +2111,9 @@ void AuraEffect::HandleFeignDeath(AuraApplication const* aurApp, uint8 mode, boo if (aurApp->GetRemoveMode()) return; - target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29); // blizz like 2.0.x - target->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH); // blizz like 2.0.x - target->SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD); // blizz like 2.0.x + target->AddUnitFlag(UNIT_FLAG_UNK_29); + target->AddUnitFlag2(UNIT_FLAG2_FEIGN_DEATH); + target->AddDynamicFlag(UNIT_DYNFLAG_DEAD); target->AddUnitState(UNIT_STATE_DIED); if (Creature* creature = target->ToCreature()) @@ -2166,9 +2126,9 @@ void AuraEffect::HandleFeignDeath(AuraApplication const* aurApp, uint8 mode, boo target->SendMessageToSet(&data, true); */ - target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29); // blizz like 2.0.x - target->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH); // blizz like 2.0.x - target->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD); // blizz like 2.0.x + target->RemoveUnitFlag(UNIT_FLAG_UNK_29); + target->RemoveUnitFlag2(UNIT_FLAG2_FEIGN_DEATH); + target->RemoveDynamicFlag(UNIT_DYNFLAG_DEAD); target->ClearUnitState(UNIT_STATE_DIED); if (Creature* creature = target->ToCreature()) @@ -2187,7 +2147,10 @@ void AuraEffect::HandleModUnattackable(AuraApplication const* aurApp, uint8 mode if (!apply && target->HasAuraType(SPELL_AURA_MOD_UNATTACKABLE)) return; - target->ApplyModFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE, apply); + if (apply) + target->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + else + target->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); // call functions which may have additional effects after chainging state of unit if (apply && (mode & AURA_EFFECT_HANDLE_REAL)) @@ -2210,25 +2173,34 @@ void AuraEffect::HandleAuraModDisarm(AuraApplication const* aurApp, uint8 mode, if (apply ? target->GetAuraEffectsByType(type).size() > 1 : target->HasAuraType(type)) return; - uint32 field, flag, slot; + void(*flagAddFn)(Unit* u) = nullptr; + void(*flagRemoveFn)(Unit* u) = nullptr; + + uint32 slot; WeaponAttackType attType; switch (type) { case SPELL_AURA_MOD_DISARM: - field = UNIT_FIELD_FLAGS; - flag = UNIT_FLAG_DISARMED; + if (apply) + flagAddFn = [](Unit* u) { u->AddUnitFlag(UNIT_FLAG_DISARMED); }; + else + flagRemoveFn = [](Unit* u) { u->RemoveUnitFlag(UNIT_FLAG_DISARMED); }; slot = EQUIPMENT_SLOT_MAINHAND; attType = BASE_ATTACK; break; case SPELL_AURA_MOD_DISARM_OFFHAND: - field = UNIT_FIELD_FLAGS_2; - flag = UNIT_FLAG2_DISARM_OFFHAND; + if (apply) + flagAddFn = [](Unit* u) { u->AddUnitFlag2(UNIT_FLAG2_DISARM_OFFHAND); }; + else + flagRemoveFn = [](Unit* u) { u->RemoveUnitFlag2(UNIT_FLAG2_DISARM_OFFHAND); }; slot = EQUIPMENT_SLOT_OFFHAND; attType = OFF_ATTACK; break; case SPELL_AURA_MOD_DISARM_RANGED: - field = UNIT_FIELD_FLAGS_2; - flag = UNIT_FLAG2_DISARM_RANGED; + if (apply) + flagAddFn = [](Unit* u) { u->AddUnitFlag2(UNIT_FLAG2_DISARM_RANGED); }; + else + flagRemoveFn = [](Unit* u) { u->RemoveUnitFlag2(UNIT_FLAG2_DISARM_RANGED); }; slot = EQUIPMENT_SLOT_MAINHAND; attType = RANGED_ATTACK; break; @@ -2237,8 +2209,8 @@ void AuraEffect::HandleAuraModDisarm(AuraApplication const* aurApp, uint8 mode, } // if disarm aura is to be removed, remove the flag first to reapply damage/aura mods - if (!apply) - target->RemoveFlag(field, flag); + if (flagRemoveFn) + flagRemoveFn(target); // Handle damage modification, shapeshifted druids are not affected if (target->GetTypeId() == TYPEID_PLAYER && !target->IsInFeralForm()) @@ -2255,8 +2227,8 @@ void AuraEffect::HandleAuraModDisarm(AuraApplication const* aurApp, uint8 mode, } // if disarm effects should be applied, wait to set flag until damage mods are unapplied - if (apply) - target->SetFlag(field, flag); + if (flagAddFn) + flagAddFn(target); if (target->GetTypeId() == TYPEID_UNIT && target->ToCreature()->GetCurrentEquipmentId()) target->UpdateDamagePhysical(attType); @@ -2271,7 +2243,7 @@ void AuraEffect::HandleAuraModSilence(AuraApplication const* aurApp, uint8 mode, if (apply) { - target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SILENCED); + target->AddUnitFlag(UNIT_FLAG_SILENCED); // call functions which may have additional effects after chainging state of unit // Stop cast only spells vs PreventionType & SPELL_PREVENTION_TYPE_SILENCE @@ -2287,7 +2259,7 @@ void AuraEffect::HandleAuraModSilence(AuraApplication const* aurApp, uint8 mode, if (target->HasAuraType(SPELL_AURA_MOD_SILENCE) || target->HasAuraType(SPELL_AURA_MOD_PACIFY_SILENCE)) return; - target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SILENCED); + target->RemoveUnitFlag(UNIT_FLAG_SILENCED); } } @@ -2300,7 +2272,7 @@ void AuraEffect::HandleAuraModPacify(AuraApplication const* aurApp, uint8 mode, if (apply) { - target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED); + target->AddUnitFlag(UNIT_FLAG_PACIFIED); target->AttackStop(); } else @@ -2308,7 +2280,7 @@ void AuraEffect::HandleAuraModPacify(AuraApplication const* aurApp, uint8 mode, // do not remove unit flag if there are more than this auraEffect of that kind on unit on unit if (target->HasAuraType(SPELL_AURA_MOD_PACIFY) || target->HasAuraType(SPELL_AURA_MOD_PACIFY_SILENCE)) return; - target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED); + target->RemoveUnitFlag(UNIT_FLAG_PACIFIED); } } @@ -2324,9 +2296,9 @@ void AuraEffect::HandleAuraModPacifyAndSilence(AuraApplication const* aurApp, ui if (m_spellInfo->Id == 45839) { if (apply) - target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + target->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); else - target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + target->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); } if (!(apply)) { @@ -2343,18 +2315,18 @@ void AuraEffect::HandleAuraAllowOnlyAbility(AuraApplication const* aurApp, uint8 if (!(mode & AURA_EFFECT_HANDLE_SEND_FOR_CLIENT_MASK)) return; - Unit* target = aurApp->GetTarget(); + Player* target = aurApp->GetTarget()->ToPlayer(); - if (target->GetTypeId() == TYPEID_PLAYER) + if (target) { if (apply) - target->SetFlag(PLAYER_FLAGS, PLAYER_ALLOW_ONLY_ABILITY); + target->AddPlayerFlag(PLAYER_ALLOW_ONLY_ABILITY); else { // do not remove unit flag if there are more than this auraEffect of that kind on unit on unit if (target->HasAuraType(SPELL_AURA_ALLOW_ONLY_ABILITY)) return; - target->RemoveFlag(PLAYER_FLAGS, PLAYER_ALLOW_ONLY_ABILITY); + target->RemovePlayerFlag(PLAYER_ALLOW_ONLY_ABILITY); } } } @@ -2368,7 +2340,7 @@ void AuraEffect::HandleAuraModNoActions(AuraApplication const* aurApp, uint8 mod if (apply) { - target->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_NO_ACTIONS); + target->AddUnitFlag2(UNIT_FLAG2_NO_ACTIONS); // call functions which may have additional effects after chainging state of unit // Stop cast only spells vs PreventionType & SPELL_PREVENTION_TYPE_SILENCE @@ -2384,7 +2356,7 @@ void AuraEffect::HandleAuraModNoActions(AuraApplication const* aurApp, uint8 mod if (target->HasAuraType(SPELL_AURA_MOD_NO_ACTIONS)) return; - target->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_NO_ACTIONS); + target->RemoveUnitFlag2(UNIT_FLAG2_NO_ACTIONS); } } @@ -2397,15 +2369,14 @@ void AuraEffect::HandleAuraTrackCreatures(AuraApplication const* aurApp, uint8 m if (!(mode & AURA_EFFECT_HANDLE_SEND_FOR_CLIENT_MASK)) return; - Unit* target = aurApp->GetTarget(); - - if (target->GetTypeId() != TYPEID_PLAYER) + Player* target = aurApp->GetTarget()->ToPlayer(); + if (!target) return; if (apply) - target->SetFlag(ACTIVE_PLAYER_FIELD_TRACK_CREATURES, uint32(1) << (GetMiscValue() - 1)); + target->AddTrackCreatureFlag(uint32(1) << (GetMiscValue() - 1)); else - target->RemoveFlag(ACTIVE_PLAYER_FIELD_TRACK_CREATURES, uint32(1) << (GetMiscValue() - 1)); + target->RemoveTrackCreatureFlag(uint32(1) << (GetMiscValue() - 1)); } void AuraEffect::HandleAuraTrackResources(AuraApplication const* aurApp, uint8 mode, bool apply) const @@ -2413,15 +2384,17 @@ void AuraEffect::HandleAuraTrackResources(AuraApplication const* aurApp, uint8 m if (!(mode & AURA_EFFECT_HANDLE_SEND_FOR_CLIENT_MASK)) return; - Unit* target = aurApp->GetTarget(); - - if (target->GetTypeId() != TYPEID_PLAYER) + Player* target = aurApp->GetTarget()->ToPlayer(); + if (!target) return; + uint32 bitIndex = GetMiscValue() - 1; + uint32 index = bitIndex / 32; + uint32 flag = 1 << (bitIndex % 32); if (apply) - target->SetFlag(ACTIVE_PLAYER_FIELD_TRACK_RESOURCES, uint32(1) << (GetMiscValue() - 1)); + target->AddTrackResourceFlag(index, flag); else - target->RemoveFlag(ACTIVE_PLAYER_FIELD_TRACK_RESOURCES, uint32(1) << (GetMiscValue() - 1)); + target->RemoveTrackResourceFlag(index, flag); } void AuraEffect::HandleAuraTrackStealthed(AuraApplication const* aurApp, uint8 mode, bool apply) const @@ -2429,9 +2402,8 @@ void AuraEffect::HandleAuraTrackStealthed(AuraApplication const* aurApp, uint8 m if (!(mode & AURA_EFFECT_HANDLE_SEND_FOR_CLIENT_MASK)) return; - Unit* target = aurApp->GetTarget(); - - if (target->GetTypeId() != TYPEID_PLAYER) + Player* target = aurApp->GetTarget()->ToPlayer(); + if (!target) return; if (!(apply)) @@ -2440,7 +2412,10 @@ void AuraEffect::HandleAuraTrackStealthed(AuraApplication const* aurApp, uint8 m if (target->HasAuraType(GetAuraType())) return; } - target->ApplyModFlag(ACTIVE_PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_TRACK_STEALTHED, apply); + if (apply) + target->AddPlayerLocalFlag(PLAYER_LOCAL_FLAG_TRACK_STEALTHED); + else + target->RemovePlayerLocalFlag(PLAYER_LOCAL_FLAG_TRACK_STEALTHED); } void AuraEffect::HandleAuraModStalked(AuraApplication const* aurApp, uint8 mode, bool apply) const @@ -2452,12 +2427,12 @@ void AuraEffect::HandleAuraModStalked(AuraApplication const* aurApp, uint8 mode, // used by spells: Hunter's Mark, Mind Vision, Syndicate Tracker (MURP) DND if (apply) - target->SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_TRACK_UNIT); + target->AddDynamicFlag(UNIT_DYNFLAG_TRACK_UNIT); else { // do not remove unit flag if there are more than this auraEffect of that kind on unit on unit if (!target->HasAuraType(GetAuraType())) - target->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_TRACK_UNIT); + target->RemoveDynamicFlag(UNIT_DYNFLAG_TRACK_UNIT); } // call functions which may have additional effects after chainging state of unit @@ -2472,13 +2447,13 @@ void AuraEffect::HandleAuraUntrackable(AuraApplication const* aurApp, uint8 mode Unit* target = aurApp->GetTarget(); if (apply) - target->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_VIS_FLAG, UNIT_STAND_FLAGS_UNTRACKABLE); + target->AddVisFlags(UNIT_VIS_FLAGS_UNTRACKABLE); else { // do not remove unit flag if there are more than this auraEffect of that kind on unit on unit if (target->HasAuraType(GetAuraType())) return; - target->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_VIS_FLAG, UNIT_STAND_FLAGS_UNTRACKABLE); + target->RemoveVisFlags(UNIT_VIS_FLAGS_UNTRACKABLE); } } @@ -2685,13 +2660,13 @@ void AuraEffect::HandleForceMoveForward(AuraApplication const* aurApp, uint8 mod Unit* target = aurApp->GetTarget(); if (apply) - target->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FORCE_MOVEMENT); + target->AddUnitFlag2(UNIT_FLAG2_FORCE_MOVEMENT); else { // do not remove unit flag if there are more than this auraEffect of that kind on unit on unit if (target->HasAuraType(GetAuraType())) return; - target->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FORCE_MOVEMENT); + target->RemoveUnitFlag2(UNIT_FLAG2_FORCE_MOVEMENT); } } @@ -3027,8 +3002,8 @@ void AuraEffect::HandleAuraModIncreaseFlightSpeed(AuraApplication const* aurApp, target->ApplySpellImmune(GetId(), IMMUNITY_MECHANIC, MECHANIC_POLYMORPH, apply); // Dragonmaw Illusion (overwrite mount model, mounted aura already applied) - if (apply && target->HasAuraEffect(42016, 0) && target->GetMountID()) - target->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 16314); + if (apply && target->HasAuraEffect(42016, 0) && target->GetMountDisplayId()) + target->SetMountDisplayId(16314); } } } @@ -3283,17 +3258,19 @@ void AuraEffect::HandleModTargetResistance(AuraApplication const* aurApp, uint8 if (!(mode & (AURA_EFFECT_HANDLE_CHANGE_AMOUNT_MASK | AURA_EFFECT_HANDLE_STAT))) return; - Unit* target = aurApp->GetTarget(); + Player* target = aurApp->GetTarget()->ToPlayer(); + if (!target) + return; // applied to damage as HandleNoImmediateEffect in Unit::CalcAbsorbResist and Unit::CalcArmorReducedDamage // show armor penetration if (target->GetTypeId() == TYPEID_PLAYER && (GetMiscValue() & SPELL_SCHOOL_MASK_NORMAL)) - target->ApplyModInt32Value(ACTIVE_PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE, GetAmount(), apply); + target->ApplyModTargetPhysicalResistance(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(ACTIVE_PLAYER_FIELD_MOD_TARGET_RESISTANCE, GetAmount(), apply); + target->ApplyModTargetResistance(GetAmount(), apply); } /********************************/ @@ -3569,7 +3546,7 @@ void AuraEffect::HandleOverrideSpellPowerByAttackPower(AuraApplication const* au if (!target) return; - target->ApplyModSignedFloatValue(ACTIVE_PLAYER_FIELD_OVERRIDE_SPELL_POWER_BY_AP_PCT, float(m_amount), apply); + target->ApplyModOverrideSpellPowerByAPPercent(float(m_amount), apply); target->UpdateSpellDamageAndHealingBonus(); } @@ -3582,7 +3559,7 @@ void AuraEffect::HandleOverrideAttackPowerBySpellPower(AuraApplication const* au if (!target) return; - target->ApplyModSignedFloatValue(ACTIVE_PLAYER_FIELD_OVERRIDE_AP_BY_SPELL_POWER_PERCENT, float(m_amount), apply); + target->ApplyModOverrideAPBySpellPowerPercent(float(m_amount), apply); target->UpdateAttackPowerAndDamage(); target->UpdateAttackPowerAndDamage(true); } @@ -3594,7 +3571,7 @@ void AuraEffect::HandleModVersatilityByPct(AuraApplication const* aurApp, uint8 if (Player* target = aurApp->GetTarget()->ToPlayer()) { - target->SetStatFloatValue(ACTIVE_PLAYER_FIELD_VERSATILITY_BONUS, target->GetTotalAuraModifier(SPELL_AURA_MOD_VERSATILITY)); + target->SetVersatilityBonus(target->GetTotalAuraModifier(SPELL_AURA_MOD_VERSATILITY)); target->UpdateHealingDonePercentMod(); target->UpdateVersatilityDamageDone(); } @@ -3809,10 +3786,10 @@ void AuraEffect::HandleAuraModOverridePowerDisplay(AuraApplication const* aurApp if (apply) { target->RemoveAurasByType(GetAuraType(), ObjectGuid::Empty, GetBase()); - target->SetUInt32Value(UNIT_FIELD_OVERRIDE_DISPLAY_POWER_ID, powerDisplay->ID); + target->SetOverrideDisplayPowerId(powerDisplay->ID); } else - target->SetUInt32Value(UNIT_FIELD_OVERRIDE_DISPLAY_POWER_ID, 0); + target->SetOverrideDisplayPowerId(0); } void AuraEffect::HandleAuraModMaxPowerPct(AuraApplication const* aurApp, uint8 mode, bool apply) const @@ -4195,14 +4172,18 @@ void AuraEffect::HandleModDamageDone(AuraApplication const* aurApp, uint8 mode, // Magic damage modifiers implemented in Unit::SpellBaseDamageBonusDone // This information for client side use only - if (target->GetTypeId() == TYPEID_PLAYER) + if (Player* playerTarget = target->ToPlayer()) { - 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); + { + if (GetAmount() >= 0) + playerTarget->ApplyModDamageDonePos(SpellSchools(i), GetAmount(), apply); + else + playerTarget->ApplyModDamageDoneNeg(SpellSchools(i), GetAmount(), apply); + } - if (Guardian* pet = target->ToPlayer()->GetGuardianPet()) + if (Guardian* pet = playerTarget->GetGuardianPet()) pet->UpdateAttackPowerAndDamage(); } } @@ -4231,16 +4212,16 @@ void AuraEffect::HandleModDamagePercentDone(AuraApplication const* aurApp, uint8 target->HandleStatModifier(UNIT_MOD_DAMAGE_RANGED, TOTAL_PCT, float(GetAmount()), apply); } - if (target->GetTypeId() == TYPEID_PLAYER) + if (Player* thisPlayer = target->ToPlayer()) { for (uint16 i = 0; i < MAX_SPELL_SCHOOL; ++i) { if (GetMiscValue() & (1 << i)) { if (spellGroupVal) - target->ApplyPercentModFloatValue(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT + i, float(spellGroupVal), !apply); + thisPlayer->ApplyModDamageDonePercent(SpellSchools(i), float(spellGroupVal), !apply); - target->ApplyPercentModFloatValue(ACTIVE_PLAYER_FIELD_MOD_DAMAGE_DONE_PCT + i, float(GetAmount()), apply); + thisPlayer->ApplyModDamageDonePercent(SpellSchools(i), float(GetAmount()), apply); } } } @@ -4279,7 +4260,7 @@ void AuraEffect::HandleModPowerCostPCT(AuraApplication const* aurApp, uint8 mode float amount = CalculatePct(1.0f, GetAmount()); for (int i = 0; i < MAX_SPELL_SCHOOL; ++i) if (GetMiscValue() & (1 << i)) - target->ApplyModSignedFloatValue(UNIT_FIELD_POWER_COST_MULTIPLIER + i, amount, apply); + target->ApplyModPowerCostMultiplier(SpellSchools(i), amount, apply); } void AuraEffect::HandleModPowerCost(AuraApplication const* aurApp, uint8 mode, bool apply) const @@ -4290,8 +4271,8 @@ void AuraEffect::HandleModPowerCost(AuraApplication const* aurApp, uint8 mode, b Unit* target = aurApp->GetTarget(); for (int i = 0; i < MAX_SPELL_SCHOOL; ++i) - if (GetMiscValue() & (1<<i)) - target->ApplyModInt32Value(UNIT_FIELD_POWER_COST_MODIFIER+i, GetAmount(), apply); + if (GetMiscValue() & (1 << i)) + target->ApplyModPowerCostModifier(SpellSchools(i), GetAmount(), apply); } void AuraEffect::HandleArenaPreparation(AuraApplication const* aurApp, uint8 mode, bool apply) const @@ -4302,13 +4283,13 @@ void AuraEffect::HandleArenaPreparation(AuraApplication const* aurApp, uint8 mod Unit* target = aurApp->GetTarget(); if (apply) - target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREPARATION); + target->AddUnitFlag(UNIT_FLAG_PREPARATION); else { // do not remove unit flag if there are more than this auraEffect of that kind on unit on unit if (target->HasAuraType(GetAuraType())) return; - target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PREPARATION); + target->RemoveUnitFlag(UNIT_FLAG_PREPARATION); } } @@ -4328,10 +4309,7 @@ void AuraEffect::HandleNoReagentUseAura(AuraApplication const* aurApp, uint8 mod if (SpellEffectInfo const* effect = (*i)->GetSpellEffectInfo()) mask |= effect->SpellClassMask; - 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]); + target->ToPlayer()->SetNoRegentCostMask(mask); } void AuraEffect::HandleAuraRetainComboPoints(AuraApplication const* aurApp, uint8 mode, bool apply) const @@ -4789,7 +4767,12 @@ void AuraEffect::HandleAuraEmpathy(AuraApplication const* aurApp, uint8 mode, bo } if (target->GetCreatureType() == CREATURE_TYPE_BEAST) - target->ApplyModUInt32Value(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_SPECIALINFO, apply); + { + if (apply) + target->AddDynamicFlag(UNIT_DYNFLAG_SPECIALINFO); + else + target->RemoveDynamicFlag(UNIT_DYNFLAG_SPECIALINFO); + } } void AuraEffect::HandleAuraModFaction(AuraApplication const* aurApp, uint8 mode, bool apply) const @@ -4803,13 +4786,13 @@ void AuraEffect::HandleAuraModFaction(AuraApplication const* aurApp, uint8 mode, { target->setFaction(GetMiscValue()); if (target->GetTypeId() == TYPEID_PLAYER) - target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); + target->RemoveUnitFlag(UNIT_FLAG_PVP_ATTACKABLE); } else { target->RestoreFaction(); if (target->GetTypeId() == TYPEID_PLAYER) - target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); + target->AddUnitFlag(UNIT_FLAG_PVP_ATTACKABLE); } } @@ -4821,13 +4804,13 @@ void AuraEffect::HandleComprehendLanguage(AuraApplication const* aurApp, uint8 m Unit* target = aurApp->GetTarget(); if (apply) - target->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_COMPREHEND_LANG); + target->AddUnitFlag2(UNIT_FLAG2_COMPREHEND_LANG); else { if (target->HasAuraType(GetAuraType())) return; - target->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_COMPREHEND_LANG); + target->RemoveUnitFlag2(UNIT_FLAG2_COMPREHEND_LANG); } } @@ -4897,11 +4880,8 @@ void AuraEffect::HandleAuraModFakeInebriation(AuraApplication const* aurApp, uin target->m_invisibilityDetect.AddFlag(INVISIBILITY_DRUNK); target->m_invisibilityDetect.AddValue(INVISIBILITY_DRUNK, GetAmount()); - if (target->GetTypeId() == TYPEID_PLAYER) - { - int32 oldval = target->ToPlayer()->GetInt32Value(PLAYER_FAKE_INEBRIATION); - target->ToPlayer()->SetInt32Value(PLAYER_FAKE_INEBRIATION, oldval + GetAmount()); - } + if (Player* playerTarget = target->ToPlayer()) + playerTarget->ApplyModFakeInebriation(GetAmount(), true); } else { @@ -4909,13 +4889,12 @@ void AuraEffect::HandleAuraModFakeInebriation(AuraApplication const* aurApp, uin target->m_invisibilityDetect.AddValue(INVISIBILITY_DRUNK, -GetAmount()); - if (target->GetTypeId() == TYPEID_PLAYER) + if (Player* playerTarget = target->ToPlayer()) { - int32 oldval = target->ToPlayer()->GetInt32Value(PLAYER_FAKE_INEBRIATION); - target->ToPlayer()->SetInt32Value(PLAYER_FAKE_INEBRIATION, oldval - GetAmount()); + playerTarget->ApplyModFakeInebriation(GetAmount(), false); if (removeDetect) - removeDetect = !target->ToPlayer()->GetDrunkValue(); + removeDetect = !playerTarget->GetDrunkValue(); } if (removeDetect) @@ -4940,7 +4919,7 @@ void AuraEffect::HandleAuraOverrideSpells(AuraApplication const* aurApp, uint8 m if (apply) { - target->SetUInt16Value(ACTIVE_PLAYER_FIELD_BYTES3, PLAYER_BYTES_3_OVERRIDE_SPELLS_UINT16_OFFSET, overrideId); + target->SetOverrideSpellsId(overrideId); if (OverrideSpellDataEntry const* overrideSpells = sOverrideSpellDataStore.LookupEntry(overrideId)) for (uint8 i = 0; i < MAX_OVERRIDE_SPELL; ++i) if (uint32 spellId = overrideSpells->Spells[i]) @@ -4948,7 +4927,7 @@ void AuraEffect::HandleAuraOverrideSpells(AuraApplication const* aurApp, uint8 m } else { - target->SetUInt16Value(ACTIVE_PLAYER_FIELD_BYTES3, PLAYER_BYTES_3_OVERRIDE_SPELLS_UINT16_OFFSET, 0); + target->SetOverrideSpellsId(0); if (OverrideSpellDataEntry const* overrideSpells = sOverrideSpellDataStore.LookupEntry(overrideId)) for (uint8 i = 0; i < MAX_OVERRIDE_SPELL; ++i) if (uint32 spellId = overrideSpells->Spells[i]) @@ -4988,13 +4967,14 @@ void AuraEffect::HandlePreventResurrection(AuraApplication const* aurApp, uint8 if (!(mode & AURA_EFFECT_HANDLE_REAL)) return; - if (aurApp->GetTarget()->GetTypeId() != TYPEID_PLAYER) + Player* target = aurApp->GetTarget()->ToPlayer(); + if (!target) return; if (apply) - aurApp->GetTarget()->RemoveFlag(ACTIVE_PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_RELEASE_TIMER); - else if (!aurApp->GetTarget()->GetMap()->Instanceable()) - aurApp->GetTarget()->SetFlag(ACTIVE_PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_RELEASE_TIMER); + target->RemovePlayerLocalFlag(PLAYER_LOCAL_FLAG_RELEASE_TIMER); + else if (!target->GetMap()->Instanceable()) + target->AddPlayerLocalFlag(PLAYER_LOCAL_FLAG_RELEASE_TIMER); } void AuraEffect::HandleMastery(AuraApplication const* aurApp, uint8 mode, bool /*apply*/) const @@ -5110,7 +5090,7 @@ void AuraEffect::HandlePeriodicDummyAuraTick(Unit* target, Unit* caster) const if (GetId() == 52179) // Astral Shift { // Periodic need for remove visual on stun/fear/silence lost - if (!(target->GetUInt32Value(UNIT_FIELD_FLAGS)&(UNIT_FLAG_STUNNED|UNIT_FLAG_FLEEING|UNIT_FLAG_SILENCED))) + if (!target->HasUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_FLEEING | UNIT_FLAG_SILENCED))) target->RemoveAurasDueToSpell(52179); break; } @@ -6140,13 +6120,14 @@ void AuraEffect::HandleAllowUsingGameobjectsWhileMounted(AuraApplication const* if (!(mode & AURA_EFFECT_HANDLE_REAL)) return; - if (aurApp->GetTarget()->GetTypeId() != TYPEID_PLAYER) + Player* target = aurApp->GetTarget()->ToPlayer(); + if (!target) return; if (apply) - 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(ACTIVE_PLAYER_FIELD_LOCAL_FLAGS, PLAYER_LOCAL_FLAG_CAN_USE_OBJECTS_MOUNTED); + target->AddPlayerLocalFlag(PLAYER_LOCAL_FLAG_CAN_USE_OBJECTS_MOUNTED); + else if (!target->HasAuraType(SPELL_AURA_ALLOW_USING_GAMEOBJECTS_WHILE_MOUNTED)) + target->RemovePlayerLocalFlag(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/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 003bf57239b..f2ec658f89f 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -801,7 +801,7 @@ void Aura::RefreshDuration(bool withMods) int32 duration = m_spellInfo->GetMaxDuration(); // Calculate duration of periodics affected by haste. if (caster->HasAuraTypeWithAffectMask(SPELL_AURA_PERIODIC_HASTE, m_spellInfo) || m_spellInfo->HasAttribute(SPELL_ATTR5_HASTE_AFFECT_DURATION)) - duration = int32(duration * caster->GetFloatValue(UNIT_MOD_CAST_SPEED)); + duration = int32(duration * caster->m_unitData->ModCastingSpeed); SetMaxDuration(duration); SetDuration(duration); diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index a72de085989..778d4d1be6b 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -941,7 +941,7 @@ void Spell::SelectImplicitChannelTargets(SpellEffIndex effIndex, SpellImplicitTa { case TARGET_UNIT_CHANNEL_TARGET: { - for (ObjectGuid const& channelTarget : m_originalCaster->GetChannelObjects()) + for (ObjectGuid const& channelTarget : m_originalCaster->m_unitData->ChannelObjects) { WorldObject* target = ObjectAccessor::GetUnit(*m_caster, channelTarget); CallScriptObjectTargetSelectHandlers(target, effIndex, targetType); @@ -959,7 +959,7 @@ void Spell::SelectImplicitChannelTargets(SpellEffIndex effIndex, SpellImplicitTa m_targets.SetDst(channeledSpell->m_targets); else { - DynamicFieldStructuredView<ObjectGuid> channelObjects = m_originalCaster->GetChannelObjects(); + auto const& channelObjects = m_originalCaster->m_unitData->ChannelObjects; WorldObject* target = channelObjects.size() > 0 ? ObjectAccessor::GetWorldObject(*m_caster, *channelObjects.begin()) : nullptr; if (target) { @@ -2590,7 +2590,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask) if (m_caster != unit) { // Recheck UNIT_FLAG_NON_ATTACKABLE for delayed spells - if (m_spellInfo->Speed > 0.0f && unit->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE) && unit->GetCharmerOrOwnerGUID() != m_caster->GetGUID()) + if (m_spellInfo->Speed > 0.0f && unit->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE) && unit->GetCharmerOrOwnerGUID() != m_caster->GetGUID()) return SPELL_MISS_EVADE; if (m_caster->_IsValidAttackTarget(unit, m_spellInfo)) @@ -2707,7 +2707,7 @@ SpellMissInfo Spell::DoSpellHitOnUnit(Unit* unit, uint32 effectMask) // if there is no periodic effect if (!duration) - duration = int32(origDuration * m_originalCaster->GetFloatValue(UNIT_MOD_CAST_SPEED)); + duration = int32(origDuration * m_originalCaster->m_unitData->ModCastingSpeed); } } @@ -2992,7 +2992,7 @@ void Spell::prepare(SpellCastTargets const* targets, AuraEffect const* triggered else m_casttime = m_spellInfo->CalcCastTime(m_caster->getLevel(), this); - if (m_caster->GetTypeId() == TYPEID_UNIT && !m_caster->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED)) // _UNIT actually means creature. for some reason. + if (m_caster->GetTypeId() == TYPEID_UNIT && !m_caster->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED)) // _UNIT actually means creature. for some reason. if (!(m_spellInfo->IsNextMeleeSwingSpell() || IsAutoRepeat() || (_triggeredCastFlags & TRIGGERED_IGNORE_SET_FACING))) { if (m_targets.GetObjectTarget() && m_caster != m_targets.GetObjectTarget()) @@ -3206,7 +3206,7 @@ void Spell::cast(bool skipCheck) // if the spell allows the creature to turn while casting, then adjust server-side orientation to face the target now // client-side orientation is handled by the client itself, as the cast target is targeted due to Creature::FocusTarget - if (m_caster->GetTypeId() == TYPEID_UNIT && !m_caster->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED)) + if (m_caster->GetTypeId() == TYPEID_UNIT && !m_caster->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED)) if (!m_spellInfo->HasAttribute(SPELL_ATTR5_DONT_TURN_DURING_CAST)) if (WorldObject* objTarget = m_targets.GetObjectTarget()) m_caster->SetInFront(objTarget); @@ -3661,7 +3661,7 @@ void Spell::finish(bool ok) if (Unit* charm = m_caster->GetCharm()) if (charm->GetTypeId() == TYPEID_UNIT && charm->ToCreature()->HasUnitTypeMask(UNIT_MASK_PUPPET) - && charm->GetUInt32Value(UNIT_CREATED_BY_SPELL) == m_spellInfo->Id) + && charm->m_unitData->CreatedBySpell == int32(m_spellInfo->Id)) ((Puppet*)charm)->UnSummon(); } @@ -3674,7 +3674,7 @@ void Spell::finish(bool ok) if (m_caster->GetTypeId() == TYPEID_UNIT && m_caster->IsSummon()) { // Unsummon statue - uint32 spell = m_caster->GetUInt32Value(UNIT_CREATED_BY_SPELL); + uint32 spell = m_caster->m_unitData->CreatedBySpell; SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spell); if (spellInfo && spellInfo->IconFileDataId == 134230) { @@ -4408,7 +4408,7 @@ void Spell::SendChannelUpdate(uint32 time) { if (time == 0) { - m_caster->ClearDynamicValue(UNIT_DYNAMIC_FIELD_CHANNEL_OBJECTS); + m_caster->ClearChannelObjects(); m_caster->SetChannelSpellId(0); m_caster->SetChannelSpellXSpellVisualId(0); } @@ -4803,7 +4803,7 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint if (m_caster->GetTypeId() == TYPEID_PLAYER) { //can cast triggered (by aura only?) spells while have this flag - if (!(_triggeredCastFlags & TRIGGERED_IGNORE_CASTER_AURASTATE) && m_caster->ToPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_ALLOW_ONLY_ABILITY)) + if (!(_triggeredCastFlags & TRIGGERED_IGNORE_CASTER_AURASTATE) && m_caster->ToPlayer()->HasPlayerFlag(PLAYER_ALLOW_ONLY_ABILITY)) return SPELL_FAILED_SPELL_IN_PROGRESS; // check if we are using a potion in combat for the 2nd+ time. Cooldown is added only after caster gets out of combat @@ -4820,7 +4820,7 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint } } - if (m_spellInfo->HasAttribute(SPELL_ATTR7_IS_CHEAT_SPELL) && !m_caster->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_ALLOW_CHEAT_SPELLS)) + if (m_spellInfo->HasAttribute(SPELL_ATTR7_IS_CHEAT_SPELL) && !m_caster->HasUnitFlag2(UNIT_FLAG2_ALLOW_CHEAT_SPELLS)) { m_customError = SPELL_CUSTOM_ERROR_GM_ONLY; return SPELL_FAILED_CUSTOM_ERROR; @@ -5217,10 +5217,10 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint if (std::vector<uint32> const* glyphRequiredSpecs = sDB2Manager.GetGlyphRequiredSpecs(glyphId)) { - if (!caster->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID)) + if (!caster->GetPrimarySpecialization()) return SPELL_FAILED_GLYPH_NO_SPEC; - if (std::find(glyphRequiredSpecs->begin(), glyphRequiredSpecs->end(), caster->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID)) == glyphRequiredSpecs->end()) + if (std::find(glyphRequiredSpecs->begin(), glyphRequiredSpecs->end(), caster->GetPrimarySpecialization()) == glyphRequiredSpecs->end()) return SPELL_FAILED_GLYPH_INVALID_SPEC; } @@ -5333,7 +5333,7 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint if (m_caster->GetTypeId() != TYPEID_PLAYER || !m_targets.GetUnitTarget() || m_targets.GetUnitTarget()->GetTypeId() != TYPEID_UNIT) return SPELL_FAILED_BAD_TARGETS; - if (!(m_targets.GetUnitTarget()->GetUInt32Value(UNIT_FIELD_FLAGS) & UNIT_FLAG_SKINNABLE)) + if (!m_targets.GetUnitTarget()->HasUnitFlag(UNIT_FLAG_SKINNABLE)) return SPELL_FAILED_TARGET_UNSKINNABLE; Creature* creature = m_targets.GetUnitTarget()->ToCreature(); @@ -5808,7 +5808,7 @@ SpellCastResult Spell::CheckCasterAuras(uint32* param1) const SpellCastResult result = SPELL_CAST_OK; // Get unit state - uint32 const unitflag = m_caster->GetUInt32Value(UNIT_FIELD_FLAGS); + uint32 const unitflag = m_caster->m_unitData->Flags; // this check should only be done when player does cast directly // (ie not when it's called from a script) Breaks for example PlayerAI when charmed @@ -5865,7 +5865,7 @@ SpellCastResult Spell::CheckCasterAuras(uint32* param1) const result = SPELL_FAILED_FLEEING; else if (unitflag & UNIT_FLAG_CONFUSED && !usableWhileConfused && !CheckSpellCancelsConfuse(param1)) result = SPELL_FAILED_CONFUSED; - else if (m_caster->HasFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_NO_ACTIONS) && m_spellInfo->PreventionType & SPELL_PREVENTION_TYPE_NO_ACTIONS) + else if (m_caster->HasUnitFlag2(UNIT_FLAG2_NO_ACTIONS) && m_spellInfo->PreventionType & SPELL_PREVENTION_TYPE_NO_ACTIONS) result = SPELL_FAILED_NO_ACTIONS; // Attr must make flag drop spell totally immune from all effects @@ -7608,13 +7608,13 @@ void Spell::TriggerGlobalCooldown() // Apply haste rating if (gcd > MIN_GCD && ((m_spellInfo->StartRecoveryCategory == 133 && !isMeleeOrRangedSpell) || m_caster->HasAuraTypeWithAffectMask(SPELL_AURA_MOD_GLOBAL_COOLDOWN_BY_HASTE, m_spellInfo))) { - gcd = int32(float(gcd) * m_caster->GetFloatValue(UNIT_MOD_CAST_HASTE)); + gcd = int32(float(gcd) * m_caster->m_unitData->ModSpellHaste); RoundToInterval<int32>(gcd, MIN_GCD, MAX_GCD); } if (gcd > MIN_GCD && m_caster->HasAuraTypeWithAffectMask(SPELL_AURA_MOD_GLOBAL_COOLDOWN_BY_HASTE_REGEN, m_spellInfo)) { - gcd = int32(float(gcd) * m_caster->GetFloatValue(UNIT_FIELD_MOD_HASTE_REGEN)); + gcd = int32(float(gcd) * m_caster->m_unitData->ModHasteRegen); RoundToInterval<int32>(gcd, MIN_GCD, MAX_GCD); } } diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 068e0ab18e1..df7f743a17f 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -1419,7 +1419,7 @@ void Spell::DoCreateItem(uint32 /*i*/, uint32 itemtype, uint8 context /*= 0*/, s // set the "Crafted by ..." property of the item if (pItem->GetTemplate()->GetClass() != ITEM_CLASS_CONSUMABLE && pItem->GetTemplate()->GetClass() != ITEM_CLASS_QUEST && newitemid != 6265 && newitemid != 6948) - pItem->SetGuidValue(ITEM_FIELD_CREATOR, player->GetGUID()); + pItem->SetCreator(player->GetGUID()); // send info to the client player->SendNewItem(pItem, num_to_add, true, bgType == 0); @@ -1799,7 +1799,7 @@ void Spell::EffectOpenLock(SpellEffIndex effIndex) SendLoot(guid, LOOT_SKINNING); else if (itemTarget) { - itemTarget->SetFlag(ITEM_FIELD_FLAGS, ITEM_FIELD_FLAG_UNLOCKED); + itemTarget->AddItemFlag(ITEM_FIELD_FLAG_UNLOCKED); itemTarget->SetState(ITEM_CHANGED, itemTarget->GetOwner()); } @@ -1858,9 +1858,9 @@ void Spell::EffectSummonChangeItem(SpellEffIndex /*effIndex*/) if (m_CastItem->GetEnchantmentId(EnchantmentSlot(j))) pNewItem->SetEnchantment(EnchantmentSlot(j), m_CastItem->GetEnchantmentId(EnchantmentSlot(j)), m_CastItem->GetEnchantmentDuration(EnchantmentSlot(j)), m_CastItem->GetEnchantmentCharges(EnchantmentSlot(j))); - if (m_CastItem->GetUInt32Value(ITEM_FIELD_DURABILITY) < m_CastItem->GetUInt32Value(ITEM_FIELD_MAXDURABILITY)) + if (*m_CastItem->m_itemData->Durability < *m_CastItem->m_itemData->MaxDurability) { - double lossPercent = 1 - m_CastItem->GetUInt32Value(ITEM_FIELD_DURABILITY) / double(m_CastItem->GetUInt32Value(ITEM_FIELD_MAXDURABILITY)); + double lossPercent = 1 - *m_CastItem->m_itemData->Durability / double(m_CastItem->m_itemData->MaxDurability); player->DurabilityLoss(pNewItem, lossPercent); } @@ -2062,9 +2062,10 @@ void Spell::EffectSummonType(SpellEffIndex effIndex) return; summon->SelectLevel(); // some summoned creaters have different from 1 DB data for level/hp - summon->SetUInt64Value(UNIT_NPC_FLAGS, summon->GetCreatureTemplate()->npcflag); + summon->SetNpcFlags(NPCFlags(summon->GetCreatureTemplate()->npcflag & 0xFFFFFFFF)); + summon->SetNpcFlags2(NPCFlags2(summon->GetCreatureTemplate()->npcflag >> 32)); - summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + summon->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); summon->AI()->EnterEvadeMode(); break; @@ -2092,7 +2093,7 @@ void Spell::EffectSummonType(SpellEffIndex effIndex) { summon->SetOwnerGUID(m_originalCaster->GetGUID()); summon->setFaction(m_originalCaster->getFaction()); - summon->SetUInt32Value(UNIT_CREATED_BY_SPELL, m_spellInfo->Id); + summon->SetCreatedBySpell(m_spellInfo->Id); } ExecuteLogEffectSummonObject(effIndex, summon); @@ -2654,13 +2655,13 @@ void Spell::EffectTameCreature(SpellEffIndex /*effIndex*/) uint8 level = (creatureTarget->GetLevelForTarget(m_caster) < (m_caster->GetLevelForTarget(creatureTarget) - 5)) ? (m_caster->GetLevelForTarget(creatureTarget) - 5) : creatureTarget->GetLevelForTarget(m_caster); // prepare visual effect for levelup - pet->SetUInt32Value(UNIT_FIELD_LEVEL, level - 1); + pet->SetLevel(level - 1); // add to world pet->GetMap()->AddToMap(pet->ToCreature()); // visual effect for levelup - pet->SetUInt32Value(UNIT_FIELD_LEVEL, level); + pet->SetLevel(level); // caster have pet now m_caster->SetMinion(pet, true); @@ -2744,7 +2745,7 @@ void Spell::EffectSummonPet(SpellEffIndex effIndex) pet->SetReactState(REACT_DEFENSIVE); } - pet->SetUInt32Value(UNIT_CREATED_BY_SPELL, m_spellInfo->Id); + pet->SetCreatedBySpell(m_spellInfo->Id); // generate new name for summon pet std::string new_name=sObjectMgr->GeneratePetName(petentry); @@ -3654,8 +3655,8 @@ void Spell::EffectDuel(SpellEffIndex effIndex) PhasingHandler::InheritPhaseShift(go, m_caster); - go->SetUInt32Value(GAMEOBJECT_FACTION, m_caster->getFaction()); - go->SetUInt32Value(GAMEOBJECT_LEVEL, m_caster->getLevel()+1); + go->SetFaction(m_caster->getFaction()); + go->SetLevel(m_caster->getLevel()+1); int32 duration = m_spellInfo->CalcDuration(m_caster); go->SetRespawnTime(duration > 0 ? duration/IN_MILLISECONDS : 0); go->SetSpellId(m_spellInfo->Id); @@ -3693,8 +3694,8 @@ void Spell::EffectDuel(SpellEffIndex effIndex) duel2->isMounted = (GetSpellInfo()->Id == 62875); // Mounted Duel target->duel = duel2; - caster->SetGuidValue(PLAYER_DUEL_ARBITER, go->GetGUID()); - target->SetGuidValue(PLAYER_DUEL_ARBITER, go->GetGUID()); + caster->SetDuelArbiter(go->GetGUID()); + target->SetDuelArbiter(go->GetGUID()); sScriptMgr->OnPlayerDuelRequest(target, caster); } @@ -3984,7 +3985,7 @@ void Spell::EffectSummonObject(SpellEffIndex effIndex) PhasingHandler::InheritPhaseShift(go, m_caster); - //go->SetUInt32Value(GAMEOBJECT_LEVEL, m_caster->getLevel()); + //go->SetLevel(m_caster->getLevel()); int32 duration = m_spellInfo->CalcDuration(m_caster); go->SetRespawnTime(duration > 0 ? duration/IN_MILLISECONDS : 0); go->SetSpellId(m_spellInfo->Id); @@ -4186,8 +4187,8 @@ void Spell::EffectSkinning(SpellEffIndex /*effIndex*/) uint32 skill = creature->GetCreatureTemplate()->GetRequiredLootSkill(); m_caster->ToPlayer()->SendLoot(creature->GetGUID(), LOOT_SKINNING); - creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); - creature->SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); + creature->RemoveUnitFlag(UNIT_FLAG_SKINNABLE); + creature->AddDynamicFlag(UNIT_DYNFLAG_LOOTABLE); if (skill == SKILL_SKINNING) { @@ -4509,8 +4510,8 @@ void Spell::EffectResurrectPet(SpellEffIndex /*effIndex*/) pet->Relocate(x, y, z, player->GetOrientation()); // This is needed so SaveStayPosition() will get the proper coords. } - pet->SetUInt32Value(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_NONE); - pet->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); + pet->SetDynamicFlags(UNIT_DYNFLAG_NONE); + pet->RemoveUnitFlag(UNIT_FLAG_SKINNABLE); pet->setDeathState(ALIVE); pet->ClearUnitState(uint32(UNIT_STATE_ALL_STATE)); pet->SetHealth(pet->CountPctFromMaxHealth(damage)); @@ -4546,7 +4547,7 @@ void Spell::EffectDestroyAllTotems(SpellEffIndex /*effIndex*/) Creature* totem = m_caster->GetMap()->GetCreature(m_caster->m_SummonSlot[slot]); if (totem && totem->IsTotem()) { - uint32 spell_id = totem->GetUInt32Value(UNIT_CREATED_BY_SPELL); + uint32 spell_id = totem->m_unitData->CreatedBySpell; SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spell_id); if (spellInfo) { @@ -4702,7 +4703,7 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex) go->SetFaction(m_caster->getFaction()); ObjectGuid bobberGuid = go->GetGUID(); // client requires fishing bobber guid in channel object slot 0 to be usable - m_caster->SetDynamicStructuredValue(UNIT_DYNAMIC_FIELD_CHANNEL_OBJECTS, 0, &bobberGuid); + m_caster->SetChannelObject(0, bobberGuid); m_caster->AddGameObject(go); // will removed at spell cancel // end time of range when possible catch fish (FISHING_BOBBER_READY_TIME..GetDuration(m_spellInfo)) @@ -4741,7 +4742,7 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex) go->SetOwnerGUID(m_caster->GetGUID()); - //go->SetUInt32Value(GAMEOBJECT_LEVEL, m_caster->getLevel()); + //go->SetLevel(m_caster->getLevel()); go->SetSpellId(m_spellInfo->Id); ExecuteLogEffectSummonObject(effIndex, go); @@ -4757,7 +4758,7 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex) PhasingHandler::InheritPhaseShift(linkedTrap, m_caster); linkedTrap->SetRespawnTime(duration > 0 ? duration / IN_MILLISECONDS : 0); - //linkedTrap->SetUInt32Value(GAMEOBJECT_LEVEL, m_caster->getLevel()); + //linkedTrap->SetLevel(m_caster->getLevel()); linkedTrap->SetSpellId(m_spellInfo->Id); linkedTrap->SetOwnerGUID(m_caster->GetGUID()); @@ -5146,7 +5147,7 @@ void Spell::EffectGameObjectDamage(SpellEffIndex /*effIndex*/) return; FactionTemplateEntry const* casterFaction = caster->GetFactionTemplateEntry(); - FactionTemplateEntry const* targetFaction = sFactionTemplateStore.LookupEntry(gameObjTarget->GetUInt32Value(GAMEOBJECT_FACTION)); + FactionTemplateEntry const* targetFaction = sFactionTemplateStore.LookupEntry(gameObjTarget->GetFaction()); // Do not allow to damage GO's of friendly factions (ie: Wintergrasp Walls/Ulduar Storm Beacons) if (!targetFaction || (casterFaction && targetFaction && !casterFaction->IsFriendlyTo(targetFaction))) gameObjTarget->ModifyHealth(-damage, caster, GetSpellInfo()->Id); @@ -5224,10 +5225,11 @@ void Spell::SummonGuardian(uint32 i, uint32 entry, SummonPropertiesEntry const* if (summon->GetEntry() == 27893) { - if (uint32 weapon = m_caster->GetUInt32Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENTRY_OFFSET + (EQUIPMENT_SLOT_MAINHAND * 2))) + UF::VisibleItem const& weapon = m_caster->ToPlayer()->m_playerData->VisibleItems[EQUIPMENT_SLOT_MAINHAND]; + if (weapon.ItemID) { summon->SetDisplayId(11686); // modelid2 - summon->SetVirtualItem(0, weapon); + summon->SetVirtualItem(0, weapon.ItemID, weapon.ItemAppearanceModID, weapon.ItemVisual); } else summon->SetDisplayId(1126); // modelid1 @@ -5248,7 +5250,7 @@ void Spell::EffectRenamePet(SpellEffIndex /*effIndex*/) !unitTarget->IsPet() || ((Pet*)unitTarget)->getPetType() != HUNTER_PET) return; - unitTarget->SetByteFlag(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PET_FLAGS, UNIT_CAN_BE_RENAMED); + unitTarget->AddPetFlag(UNIT_PET_FLAG_CAN_BE_RENAMED); } void Spell::EffectPlayMusic(SpellEffIndex /*effIndex*/) @@ -5645,7 +5647,7 @@ void Spell::EffectEnableBattlePets(SpellEffIndex /*effIndex*/) return; Player* plr = unitTarget->ToPlayer(); - plr->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_PET_BATTLES_UNLOCKED); + plr->AddPlayerFlag(PLAYER_FLAGS_PET_BATTLES_UNLOCKED); plr->GetSession()->GetBattlePetMgr()->UnlockSlot(0); } @@ -5671,7 +5673,7 @@ void Spell::EffectUncageBattlePet(SpellEffIndex /*effIndex*/) Player* plr = m_caster->ToPlayer(); // are we allowed to learn battle pets without it? - /*if (plr->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_PET_BATTLES_UNLOCKED)) + /*if (plr->HasPlayerFlag(PLAYER_FLAGS_PET_BATTLES_UNLOCKED)) return; // send some error*/ uint32 speciesId = m_CastItem->GetModifier(ITEM_MODIFIER_BATTLE_PET_SPECIES_ID); @@ -5738,7 +5740,7 @@ void Spell::EffectApplyEnchantIllusion(SpellEffIndex /*effIndex*/) itemTarget->SetState(ITEM_CHANGED, player); itemTarget->SetModifier(ITEM_MODIFIER_ENCHANT_ILLUSION_ALL_SPECS, effectInfo->MiscValue); if (itemTarget->IsEquipped()) - player->SetUInt16Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENCHANTMENT_OFFSET + (itemTarget->GetSlot() * 2), 1, itemTarget->GetVisibleItemVisual(player)); + player->SetVisibleItemSlot(itemTarget->GetSlot(), itemTarget); player->RemoveTradeableItem(itemTarget); itemTarget->ClearSoulboundTradeable(player); diff --git a/src/server/game/Spells/SpellHistory.cpp b/src/server/game/Spells/SpellHistory.cpp index 968cc447413..989223c8b22 100644 --- a/src/server/game/Spells/SpellHistory.cpp +++ b/src/server/game/Spells/SpellHistory.cpp @@ -415,7 +415,7 @@ void SpellHistory::StartCooldown(SpellInfo const* spellInfo, uint32 itemId, Spel // shoot spells used equipped item cooldown values already assigned in SetBaseAttackTime(RANGED_ATTACK) // prevent 0 cooldowns set by another way if (cooldown <= 0 && categoryCooldown <= 0 && (categoryId == 76 || (spellInfo->IsAutoRepeatRangedSpell() && spellInfo->Id != 75))) - cooldown = _owner->GetUInt32Value(UNIT_FIELD_RANGEDATTACKTIME); + cooldown = _owner->m_unitData->RangedAttackRoundBaseTime; // Now we have cooldown data (if found any), time to apply mods if (Player* modOwner = _owner->GetSpellModOwner()) @@ -429,14 +429,14 @@ void SpellHistory::StartCooldown(SpellInfo const* spellInfo, uint32 itemId, Spel if (_owner->HasAuraTypeWithAffectMask(SPELL_AURA_MOD_SPELL_COOLDOWN_BY_HASTE, spellInfo)) { - cooldown = int32(cooldown * _owner->GetFloatValue(UNIT_MOD_CAST_HASTE)); - categoryCooldown = int32(categoryCooldown * _owner->GetFloatValue(UNIT_MOD_CAST_HASTE)); + cooldown = int32(cooldown * _owner->m_unitData->ModSpellHaste); + categoryCooldown = int32(categoryCooldown * _owner->m_unitData->ModSpellHaste); } if (_owner->HasAuraTypeWithAffectMask(SPELL_AURA_MOD_COOLDOWN_BY_HASTE_REGEN, spellInfo)) { - cooldown = int32(cooldown * _owner->GetFloatValue(UNIT_FIELD_MOD_HASTE_REGEN)); - categoryCooldown = int32(categoryCooldown * _owner->GetFloatValue(UNIT_FIELD_MOD_HASTE_REGEN)); + cooldown = int32(cooldown * _owner->m_unitData->ModHasteRegen); + categoryCooldown = int32(categoryCooldown * _owner->m_unitData->ModHasteRegen); } if (int32 cooldownMod = _owner->GetTotalAuraModifier(SPELL_AURA_MOD_COOLDOWN)) @@ -830,10 +830,10 @@ int32 SpellHistory::GetChargeRecoveryTime(uint32 chargeCategoryId) const recoveryTimeF *= _owner->GetTotalAuraMultiplierByMiscValue(SPELL_AURA_CHARGE_RECOVERY_MULTIPLIER, chargeCategoryId); if (_owner->HasAuraType(SPELL_AURA_CHARGE_RECOVERY_AFFECTED_BY_HASTE)) - recoveryTimeF *= _owner->GetFloatValue(UNIT_MOD_CAST_HASTE); + recoveryTimeF *= _owner->m_unitData->ModSpellHaste; if (_owner->HasAuraType(SPELL_AURA_CHARGE_RECOVERY_AFFECTED_BY_HASTE_REGEN)) - recoveryTimeF *= _owner->GetFloatValue(UNIT_FIELD_MOD_HASTE_REGEN); + recoveryTimeF *= _owner->m_unitData->ModHasteRegen; return int32(std::floor(recoveryTimeF)); } diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 8cab2192fff..369fc1731df 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -3892,10 +3892,10 @@ std::vector<SpellPowerCost> SpellInfo::CalcPowerCost(Unit const* caster, SpellSc inline float CalcPPMHasteMod(SpellProcsPerMinuteModEntry const* mod, Unit* caster) { - float haste = caster->GetFloatValue(UNIT_FIELD_MOD_HASTE); - float rangedHaste = caster->GetFloatValue(UNIT_FIELD_MOD_RANGED_HASTE); - float spellHaste = caster->GetFloatValue(UNIT_MOD_CAST_HASTE); - float regenHaste = caster->GetFloatValue(UNIT_FIELD_MOD_HASTE_REGEN); + float haste = caster->m_unitData->ModHaste; + float rangedHaste = caster->m_unitData->ModRangedHaste; + float spellHaste = caster->m_unitData->ModSpellHaste; + float regenHaste = caster->m_unitData->ModHasteRegen; switch (mod->Param) { @@ -3918,12 +3918,13 @@ inline float CalcPPMHasteMod(SpellProcsPerMinuteModEntry const* mod, Unit* caste inline float CalcPPMCritMod(SpellProcsPerMinuteModEntry const* mod, Unit* caster) { - if (caster->GetTypeId() != TYPEID_PLAYER) + Player const* player = caster->ToPlayer(); + if (!player) return 0.0f; - 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); + float crit = player->m_activePlayerData->CritPercentage; + float rangedCrit = player->m_activePlayerData->RangedCritPercentage; + float spellCrit = player->m_activePlayerData->SpellCritPercentage; switch (mod->Param) { @@ -3984,7 +3985,7 @@ float SpellInfo::CalcProcPPM(Unit* caster, int32 itemLevel) const case SPELL_PPM_MOD_SPEC: { if (Player* plrCaster = caster->ToPlayer()) - if (plrCaster->GetInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == mod->Param) + if (plrCaster->GetPrimarySpecialization() == uint32(mod->Param)) ppm *= 1.0f + mod->Coeff; break; } diff --git a/src/server/scripts/Commands/cs_character.cpp b/src/server/scripts/Commands/cs_character.cpp index 2c9bde87d2c..9e3c199a638 100644 --- a/src/server/scripts/Commands/cs_character.cpp +++ b/src/server/scripts/Commands/cs_character.cpp @@ -235,7 +235,7 @@ public: { player->GiveLevel(newLevel); player->InitTalentForLevel(); - player->SetUInt32Value(ACTIVE_PLAYER_FIELD_XP, 0); + player->SetXP(0); if (handler->needReportToTarget(player)) { @@ -281,7 +281,7 @@ public: if (name.empty()) continue; - char const* activeStr = target->GetInt32Value(PLAYER_CHOSEN_TITLE) == titleInfo->MaskID + char const* activeStr = *target->m_playerData->PlayerTitle == titleInfo->MaskID ? handler->GetTrinityString(LANG_ACTIVE) : ""; diff --git a/src/server/scripts/Commands/cs_cheat.cpp b/src/server/scripts/Commands/cs_cheat.cpp index 2c67db493c6..ae41ca54537 100644 --- a/src/server/scripts/Commands/cs_cheat.cpp +++ b/src/server/scripts/Commands/cs_cheat.cpp @@ -276,9 +276,9 @@ public: for (uint16 i = 0; i < PLAYER_EXPLORED_ZONES_SIZE; ++i) { if (flag != 0) - handler->GetSession()->GetPlayer()->SetFlag(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + i, 0xFFFFFFFF); + handler->GetSession()->GetPlayer()->AddExploredZones(i, 0xFFFFFFFFFFFFFFFF); else - handler->GetSession()->GetPlayer()->SetFlag(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + i, 0); + handler->GetSession()->GetPlayer()->RemoveExploredZones(i, 0xFFFFFFFFFFFFFFFF); } return true; diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index 60cf7bda4e7..edd69688e0e 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -77,7 +77,6 @@ public: }; static std::vector<ChatCommand> debugCommandTable = { - { "setbit", rbac::RBAC_PERM_COMMAND_DEBUG_SETBIT, false, &HandleDebugSet32BitCommand, "" }, { "threat", rbac::RBAC_PERM_COMMAND_DEBUG_THREAT, false, &HandleDebugThreatListCommand, "" }, { "hostil", rbac::RBAC_PERM_COMMAND_DEBUG_HOSTIL, false, &HandleDebugHostileRefListCommand, "" }, { "anim", rbac::RBAC_PERM_COMMAND_DEBUG_ANIM, false, &HandleDebugAnimCommand, "" }, @@ -85,19 +84,13 @@ public: { "bg", rbac::RBAC_PERM_COMMAND_DEBUG_BG, true, &HandleDebugBattlegroundCommand, "" }, { "getitemstate", rbac::RBAC_PERM_COMMAND_DEBUG_GETITEMSTATE, false, &HandleDebugGetItemStateCommand, "" }, { "lootrecipient", rbac::RBAC_PERM_COMMAND_DEBUG_LOOTRECIPIENT, false, &HandleDebugGetLootRecipientCommand, "" }, - { "getvalue", rbac::RBAC_PERM_COMMAND_DEBUG_GETVALUE, false, &HandleDebugGetValueCommand, "" }, - { "getitemvalue", rbac::RBAC_PERM_COMMAND_DEBUG_GETITEMVALUE, false, &HandleDebugGetItemValueCommand, "" }, - { "Mod32Value", rbac::RBAC_PERM_COMMAND_DEBUG_MOD32VALUE, false, &HandleDebugMod32ValueCommand, "" }, { "play", rbac::RBAC_PERM_COMMAND_DEBUG_PLAY, false, nullptr, "", debugPlayCommandTable }, { "send", rbac::RBAC_PERM_COMMAND_DEBUG_SEND, false, nullptr, "", debugSendCommandTable }, { "setaurastate", rbac::RBAC_PERM_COMMAND_DEBUG_SETAURASTATE, false, &HandleDebugSetAuraStateCommand, "" }, - { "setitemvalue", rbac::RBAC_PERM_COMMAND_DEBUG_SETITEMVALUE, false, &HandleDebugSetItemValueCommand, "" }, - { "setvalue", rbac::RBAC_PERM_COMMAND_DEBUG_SETVALUE, false, &HandleDebugSetValueCommand, "" }, { "spawnvehicle", rbac::RBAC_PERM_COMMAND_DEBUG_SPAWNVEHICLE, false, &HandleDebugSpawnVehicleCommand, "" }, { "setvid", rbac::RBAC_PERM_COMMAND_DEBUG_SETVID, false, &HandleDebugSetVehicleIdCommand, "" }, { "entervehicle", rbac::RBAC_PERM_COMMAND_DEBUG_ENTERVEHICLE, false, &HandleDebugEnterVehicleCommand, "" }, { "uws", rbac::RBAC_PERM_COMMAND_DEBUG_UWS, false, &HandleDebugUpdateWorldStateCommand, "" }, - { "update", rbac::RBAC_PERM_COMMAND_DEBUG_UPDATE, false, &HandleDebugUpdateCommand, "" }, { "itemexpire", rbac::RBAC_PERM_COMMAND_DEBUG_ITEMEXPIRE, false, &HandleDebugItemExpireCommand, "" }, { "areatriggers", rbac::RBAC_PERM_COMMAND_DEBUG_AREATRIGGERS, false, &HandleDebugAreaTriggersCommand, "" }, { "los", rbac::RBAC_PERM_COMMAND_DEBUG_LOS, false, &HandleDebugLoSCommand, "" }, @@ -991,64 +984,6 @@ public: return true; } - static bool HandleDebugGetItemValueCommand(ChatHandler* handler, char const* args) - { - if (!*args) - return false; - - char* e = strtok((char*)args, " "); - char* f = strtok(NULL, " "); - - if (!e || !f) - return false; - - ObjectGuid::LowType guid = strtoull(e, nullptr, 10); - uint32 index = atoul(f); - - Item* i = handler->GetSession()->GetPlayer()->GetItemByGuid(ObjectGuid::Create<HighGuid::Item>(guid)); - - if (!i) - return false; - - if (index >= i->GetValuesCount()) - return false; - - uint32 value = i->GetUInt32Value(index); - - handler->PSendSysMessage("Item " UI64FMTD ": value at %u is %u", guid, index, value); - - return true; - } - - static bool HandleDebugSetItemValueCommand(ChatHandler* handler, char const* args) - { - if (!*args) - return false; - - char* e = strtok((char*)args, " "); - char* f = strtok(NULL, " "); - char* g = strtok(NULL, " "); - - if (!e || !f || !g) - return false; - - ObjectGuid::LowType guid = strtoull(e, nullptr, 10); - uint32 index = atoul(f); - uint32 value = atoul(g); - - Item* i = handler->GetSession()->GetPlayer()->GetItemByGuid(ObjectGuid::Create<HighGuid::Item>(guid)); - - if (!i) - return false; - - if (index >= i->GetValuesCount()) - return false; - - i->SetUInt32Value(index, value); - - return true; - } - static bool HandleDebugItemExpireCommand(ChatHandler* handler, char const* args) { if (!*args) @@ -1120,211 +1055,6 @@ public: return true; } - static bool HandleDebugSetValueCommand(ChatHandler* handler, char const* args) - { - if (!*args) - return false; - - char* x = strtok((char*)args, " "); - char* y = strtok(NULL, " "); - char* z = strtok(NULL, " "); - - if (!x || !y) - return false; - - WorldObject* target = handler->getSelectedObject(); - if (!target) - { - handler->SendSysMessage(LANG_SELECT_CHAR_OR_CREATURE); - handler->SetSentErrorMessage(true); - return false; - } - - ObjectGuid guid = target->GetGUID(); - - uint32 field = atoul(x); - if (field >= target->GetValuesCount()) - { - handler->PSendSysMessage(LANG_TOO_BIG_INDEX, field, guid.ToString().c_str(), target->GetValuesCount()); - return false; - } - - bool isInt32 = true; - if (z) - isInt32 = atoi(z) != 0; - - if (isInt32) - { - uint32 value = atoul(y); - target->SetUInt32Value(field, value); - handler->PSendSysMessage(LANG_SET_UINT_FIELD, guid.ToString().c_str(), field, value); - } - else - { - float value = (float)atof(y); - target->SetFloatValue(field, value); - handler->PSendSysMessage(LANG_SET_FLOAT_FIELD, guid.ToString().c_str(), field, value); - } - - return true; - } - - static bool HandleDebugGetValueCommand(ChatHandler* handler, char const* args) - { - if (!*args) - return false; - - char* x = strtok((char*)args, " "); - char* z = strtok(NULL, " "); - - if (!x) - return false; - - Unit* target = handler->getSelectedUnit(); - if (!target) - { - handler->SendSysMessage(LANG_SELECT_CHAR_OR_CREATURE); - handler->SetSentErrorMessage(true); - return false; - } - - ObjectGuid guid = target->GetGUID(); - - uint32 opcode = atoul(x); - if (opcode >= target->GetValuesCount()) - { - handler->PSendSysMessage(LANG_TOO_BIG_INDEX, opcode, guid.ToString().c_str(), target->GetValuesCount()); - return false; - } - - bool isInt32 = true; - if (z) - isInt32 = atoi(z) != 0; - - if (isInt32) - { - uint32 value = target->GetUInt32Value(opcode); - handler->PSendSysMessage(LANG_GET_UINT_FIELD, guid.ToString().c_str(), opcode, value); - } - else - { - float value = target->GetFloatValue(opcode); - handler->PSendSysMessage(LANG_GET_FLOAT_FIELD, guid.ToString().c_str(), opcode, value); - } - - return true; - } - - static bool HandleDebugMod32ValueCommand(ChatHandler* handler, char const* args) - { - if (!*args) - return false; - - char* x = strtok((char*)args, " "); - char* y = strtok(NULL, " "); - - if (!x || !y) - return false; - - uint32 opcode = atoul(x); - int value = atoi(y); - - if (opcode >= handler->GetSession()->GetPlayer()->GetValuesCount()) - { - handler->PSendSysMessage(LANG_TOO_BIG_INDEX, opcode, handler->GetSession()->GetPlayer()->GetGUID().ToString().c_str(), handler->GetSession()->GetPlayer()->GetValuesCount()); - return false; - } - - uint32 currentValue = handler->GetSession()->GetPlayer()->GetUInt32Value(opcode); - - currentValue += value; - handler->GetSession()->GetPlayer()->SetUInt32Value(opcode, currentValue); - - handler->PSendSysMessage(LANG_CHANGE_32BIT_FIELD, opcode, currentValue); - - return true; - } - - static bool HandleDebugUpdateCommand(ChatHandler* handler, char const* args) - { - if (!*args) - return false; - - uint32 updateIndex; - uint32 value; - - char* index = strtok((char*)args, " "); - - Unit* unit = handler->getSelectedUnit(); - if (!unit) - { - handler->SendSysMessage(LANG_SELECT_CHAR_OR_CREATURE); - handler->SetSentErrorMessage(true); - return false; - } - - if (!index) - return true; - - updateIndex = atoi(index); - //check updateIndex - if (unit->GetTypeId() == TYPEID_PLAYER) - { - if (updateIndex >= PLAYER_END) - return true; - } - else if (updateIndex >= UNIT_END) - return true; - - char* val = strtok(NULL, " "); - if (!val) - { - value = unit->GetUInt32Value(updateIndex); - - handler->PSendSysMessage(LANG_UPDATE, unit->GetGUID().ToString().c_str(), updateIndex, value); - return true; - } - - value = atoi(val); - - handler->PSendSysMessage(LANG_UPDATE_CHANGE, unit->GetGUID().ToString().c_str(), updateIndex, value); - - unit->SetUInt32Value(updateIndex, value); - - return true; - } - - static bool HandleDebugSet32BitCommand(ChatHandler* handler, char const* args) - { - if (!*args) - return false; - - WorldObject* target = handler->getSelectedObject(); - if (!target) - { - handler->SendSysMessage(LANG_SELECT_CHAR_OR_CREATURE); - handler->SetSentErrorMessage(true); - return false; - } - - char* x = strtok((char*)args, " "); - char* y = strtok(NULL, " "); - - if (!x || !y) - return false; - - uint32 opcode = atoul(x); - uint32 val = atoul(y); - if (val > 32) //uint32 = 32 bits - return false; - - uint32 value = val ? 1 << (val - 1) : 0; - target->SetUInt32Value(opcode, value); - - handler->PSendSysMessage(LANG_SET_32BIT_FIELD, opcode, value); - return true; - } - static bool HandleDebugMoveflagsCommand(ChatHandler* handler, char const* args) { Unit* target = handler->getSelectedUnit(); diff --git a/src/server/scripts/Commands/cs_gobject.cpp b/src/server/scripts/Commands/cs_gobject.cpp index b60b957cc17..3293c6cb9d7 100644 --- a/src/server/scripts/Commands/cs_gobject.cpp +++ b/src/server/scripts/Commands/cs_gobject.cpp @@ -674,16 +674,31 @@ public: int32 objectState = atoi(state); - if (objectType < 4) - object->SetByteValue(GAMEOBJECT_BYTES_1, uint8(objectType), uint8(objectState)); - else if (objectType == 4) - object->SendCustomAnim(objectState); - else if (objectType == 5) - { - if (objectState < 0 || objectState > GO_DESTRUCTIBLE_REBUILDING) - return false; - - object->SetDestructibleState(GameObjectDestructibleState(objectState)); + switch (objectType) + { + case 0: + object->SetGoState(GOState(objectState)); + break; + case 1: + object->SetGoType(GameobjectTypes(objectState)); + break; + case 2: + object->SetGoArtKit(objectState); + break; + case 3: + object->SetGoAnimProgress(objectState); + break; + case 4: + object->SendCustomAnim(objectState); + break; + case 5: + if (objectState < 0 || objectState > GO_DESTRUCTIBLE_REBUILDING) + return false; + + object->SetDestructibleState(GameObjectDestructibleState(objectState)); + break; + default: + break; } handler->PSendSysMessage("Set gobject type %d state %d", objectType, objectState); diff --git a/src/server/scripts/Commands/cs_lookup.cpp b/src/server/scripts/Commands/cs_lookup.cpp index 0f89fa23ded..c9a8a70127b 100644 --- a/src/server/scripts/Commands/cs_lookup.cpp +++ b/src/server/scripts/Commands/cs_lookup.cpp @@ -1174,7 +1174,7 @@ public: char const* knownStr = target && target->HasTitle(titleInfo) ? handler->GetTrinityString(LANG_KNOWN) : ""; - char const* activeStr = target && target->GetInt32Value(PLAYER_CHOSEN_TITLE) == titleInfo->MaskID + char const* activeStr = target && *target->m_playerData->PlayerTitle == titleInfo->MaskID ? handler->GetTrinityString(LANG_ACTIVE) : ""; diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 56b7071a8a8..3a87ac318a0 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -156,7 +156,7 @@ public: { if (!*args) { - if (handler->GetSession()->GetPlayer()->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_DEVELOPER)) + if (handler->GetSession()->GetPlayer()->HasPlayerFlag(PLAYER_FLAGS_DEVELOPER)) handler->GetSession()->SendNotification(LANG_DEV_ON); else handler->GetSession()->SendNotification(LANG_DEV_OFF); @@ -167,14 +167,14 @@ public: if (argstr == "on") { - handler->GetSession()->GetPlayer()->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_DEVELOPER); + handler->GetSession()->GetPlayer()->AddPlayerFlag(PLAYER_FLAGS_DEVELOPER); handler->GetSession()->SendNotification(LANG_DEV_ON); return true; } if (argstr == "off") { - handler->GetSession()->GetPlayer()->RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_DEVELOPER); + handler->GetSession()->GetPlayer()->RemovePlayerFlag(PLAYER_FLAGS_DEVELOPER); handler->GetSession()->SendNotification(LANG_DEV_OFF); return true; } @@ -1195,7 +1195,7 @@ public: return false; } - int32 offset = area->AreaBit / 32; + uint32 offset = area->AreaBit / 64; if (offset >= PLAYER_EXPLORED_ZONES_SIZE) { handler->SendSysMessage(LANG_BAD_VALUE); @@ -1203,9 +1203,8 @@ public: return false; } - uint32 val = uint32((1 << (area->AreaBit % 32))); - uint32 currFields = playerTarget->GetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + offset); - playerTarget->SetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + offset, uint32((currFields | val))); + uint64 val = UI64LIT(1) << (area->AreaBit % 64); + playerTarget->AddExploredZones(offset, val); handler->SendSysMessage(LANG_EXPLORE_AREA); return true; @@ -1239,7 +1238,7 @@ public: return false; } - int32 offset = area->AreaBit / 32; + uint32 offset = area->AreaBit / 64; if (offset >= PLAYER_EXPLORED_ZONES_SIZE) { handler->SendSysMessage(LANG_BAD_VALUE); @@ -1247,9 +1246,8 @@ public: return false; } - uint32 val = uint32((1 << (area->AreaBit % 32))); - uint32 currFields = playerTarget->GetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + offset); - playerTarget->SetUInt32Value(ACTIVE_PLAYER_FIELD_EXPLORED_ZONES + offset, uint32((currFields ^ val))); + uint64 val = UI64LIT(1) << (area->AreaBit % 64); + playerTarget->RemoveExploredZones(offset, val); handler->SendSysMessage(LANG_UNEXPLORE_AREA); return true; @@ -1712,7 +1710,7 @@ public: mapId = target->GetMapId(); areaId = target->GetAreaId(); alive = target->IsAlive() ? handler->GetTrinityString(LANG_YES) : handler->GetTrinityString(LANG_NO); - gender = target->GetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER); + gender = target->m_playerData->NativeSex; } // get additional information from DB else diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp index b444c806f2f..0b113206f48 100644 --- a/src/server/scripts/Commands/cs_modify.cpp +++ b/src/server/scripts/Commands/cs_modify.cpp @@ -54,7 +54,6 @@ public: }; static std::vector<ChatCommand> modifyCommandTable = { - { "bit", rbac::RBAC_PERM_COMMAND_MODIFY_BIT, false, &HandleModifyBitCommand, "" }, { "currency", rbac::RBAC_PERM_COMMAND_MODIFY_CURRENCY, false, &HandleModifyCurrencyCommand, "" }, { "drunk", rbac::RBAC_PERM_COMMAND_MODIFY_DRUNK, false, &HandleModifyDrunkCommand, "" }, { "energy", rbac::RBAC_PERM_COMMAND_MODIFY_ENERGY, false, &HandleModifyEnergyCommand, "" }, @@ -220,9 +219,10 @@ public: if (!pfactionid) { uint32 factionid = target->getFaction(); - uint32 flag = target->GetUInt32Value(UNIT_FIELD_FLAGS); - uint64 npcflag = target->GetUInt64Value(UNIT_NPC_FLAGS); - uint32 dyflag = target->GetUInt32Value(OBJECT_DYNAMIC_FLAGS); + uint32 flag = target->m_unitData->Flags; + uint64 npcflag; + memcpy(&npcflag, target->m_unitData->NpcFlags.begin(), sizeof(uint64)); + uint32 dyflag = target->m_objectData->DynamicFlags; handler->PSendSysMessage(LANG_CURRENT_FACTION, target->GetGUID().ToString().c_str(), factionid, flag, std::to_string(npcflag).c_str(), dyflag); return true; } @@ -232,7 +232,7 @@ public: char *pflag = strtok(NULL, " "); if (!pflag) - flag = target->GetUInt32Value(UNIT_FIELD_FLAGS); + flag = target->m_unitData->Flags; else flag = atoul(pflag); @@ -240,7 +240,7 @@ public: uint64 npcflag; if (!pnpcflag) - npcflag = target->GetUInt64Value(UNIT_NPC_FLAGS); + memcpy(&npcflag, target->m_unitData->NpcFlags.begin(), sizeof(uint64)); else npcflag = atoull(pnpcflag); @@ -248,7 +248,7 @@ public: uint32 dyflag; if (!pdyflag) - dyflag = target->GetUInt32Value(OBJECT_DYNAMIC_FLAGS); + dyflag = target->m_objectData->DynamicFlags; else dyflag = atoul(pdyflag); @@ -262,9 +262,10 @@ public: handler->PSendSysMessage(LANG_YOU_CHANGE_FACTION, target->GetGUID().ToString().c_str(), factionid, flag, std::to_string(npcflag).c_str(), dyflag); target->setFaction(factionid); - target->SetUInt32Value(UNIT_FIELD_FLAGS, flag); - target->SetUInt64Value(UNIT_NPC_FLAGS, npcflag); - target->SetUInt32Value(OBJECT_DYNAMIC_FLAGS, dyflag); + target->SetUnitFlags(UnitFlags(flag)); + target->SetNpcFlags(NPCFlags(npcflag & 0xFFFFFFFF)); + target->SetNpcFlags2(NPCFlags2(npcflag >> 32)); + target->SetDynamicFlags(dyflag); return true; } @@ -494,7 +495,7 @@ public: { NotifyModification(handler, target, LANG_YOU_CHANGE_SIZE, LANG_YOURS_SIZE_CHANGED, Scale); if (Creature* creatureTarget = target->ToCreature()) - creatureTarget->SetFloatValue(UNIT_FIELD_DISPLAY_SCALE, Scale); + creatureTarget->SetDisplayId(creatureTarget->GetDisplayId(), Scale); else target->SetObjectScale(Scale); return true; @@ -612,61 +613,6 @@ public: return true; } - //Edit Unit field - static bool HandleModifyBitCommand(ChatHandler* handler, const char* args) - { - if (!*args) - return false; - - Unit* target = handler->getSelectedUnit(); - if (!target) - { - handler->SendSysMessage(LANG_NO_CHAR_SELECTED); - handler->SetSentErrorMessage(true); - return false; - } - - // check online security - if (target->GetTypeId() == TYPEID_PLAYER && handler->HasLowerSecurity(target->ToPlayer(), ObjectGuid::Empty)) - return false; - - char* pField = strtok((char*)args, " "); - if (!pField) - return false; - - char* pBit = strtok(NULL, " "); - if (!pBit) - return false; - - uint16 field = atoi(pField); - uint32 bit = atoi(pBit); - - if (field < OBJECT_END || field >= target->GetValuesCount()) - { - handler->SendSysMessage(LANG_BAD_VALUE); - handler->SetSentErrorMessage(true); - return false; - } - if (bit < 1 || bit > 32) - { - handler->SendSysMessage(LANG_BAD_VALUE); - handler->SetSentErrorMessage(true); - return false; - } - - if (target->HasFlag(field, (1<<(bit-1)))) - { - target->RemoveFlag(field, (1<<(bit-1))); - handler->PSendSysMessage(LANG_REMOVE_BIT, bit, field); - } - else - { - target->SetFlag(field, (1<<(bit-1))); - handler->PSendSysMessage(LANG_SET_BIT, bit, field); - } - return true; - } - static bool HandleModifyHonorCommand(ChatHandler* handler, const char* args) { if (!*args) @@ -889,7 +835,7 @@ public: return false; uint32 anim_id = atoi((char*)args); - handler->GetSession()->GetPlayer()->SetUInt32Value(UNIT_NPC_EMOTESTATE, anim_id); + handler->GetSession()->GetPlayer()->SetEmoteState(Emote(anim_id)); return true; } @@ -939,8 +885,8 @@ public: } // Set gender - target->SetByteValue(UNIT_FIELD_BYTES_0, UNIT_BYTES_0_OFFSET_GENDER, gender); - target->SetByteValue(PLAYER_BYTES_3, PLAYER_BYTES_3_OFFSET_GENDER, gender); + target->SetGender(gender); + target->SetNativeSex(gender); // Change display ID target->InitDisplayIds(); diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index 49d7b18b393..129053e2f88 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -642,7 +642,10 @@ public: return false; } - creature->SetUInt64Value(UNIT_NPC_FLAGS, npcFlags); + uint32 raw[2]; + memcpy(raw, &npcFlags, sizeof(raw)); + creature->SetNpcFlags(NPCFlags(raw[0])); + creature->SetNpcFlags2(NPCFlags2(raw[1])); PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_NPCFLAG); @@ -723,7 +726,8 @@ public: CreatureTemplate const* cInfo = target->GetCreatureTemplate(); uint32 faction = target->getFaction(); - uint64 npcflags = target->GetUInt64Value(UNIT_NPC_FLAGS); + uint64 npcflags; + memcpy(&npcflags, target->m_unitData->NpcFlags.begin(), sizeof(npcflags)); uint32 mechanicImmuneMask = cInfo->MechanicImmuneMask; uint32 displayid = target->GetDisplayId(); uint32 nativeid = target->GetNativeDisplayId(); @@ -741,22 +745,22 @@ public: handler->PSendSysMessage(LANG_NPCINFO_HEALTH, target->GetCreateHealth(), std::to_string(target->GetMaxHealth()).c_str(), std::to_string(target->GetHealth()).c_str()); handler->PSendSysMessage(LANG_NPCINFO_INHABIT_TYPE, cInfo->InhabitType); - handler->PSendSysMessage(LANG_NPCINFO_UNIT_FIELD_FLAGS, target->GetUInt32Value(UNIT_FIELD_FLAGS)); + handler->PSendSysMessage(LANG_NPCINFO_UNIT_FIELD_FLAGS, *target->m_unitData->Flags); for (uint8 i = 0; i < MAX_UNIT_FLAGS; ++i) - if (target->GetUInt32Value(UNIT_FIELD_FLAGS) & unitFlags[i].Value) + if (target->HasUnitFlag(unitFlags[i].Value)) handler->PSendSysMessage("%s (0x%X)", unitFlags[i].Name, unitFlags[i].Value); - handler->PSendSysMessage(LANG_NPCINFO_UNIT_FIELD_FLAGS_2, target->GetUInt32Value(UNIT_FIELD_FLAGS_2)); + handler->PSendSysMessage(LANG_NPCINFO_UNIT_FIELD_FLAGS_2, *target->m_unitData->Flags2); for (uint8 i = 0; i < MAX_UNIT_FLAGS_2; ++i) - if (target->GetUInt32Value(UNIT_FIELD_FLAGS_2) & unitFlags2[i].Value) + if (target->HasUnitFlag2(unitFlags2[i].Value)) handler->PSendSysMessage("%s (0x%X)", unitFlags2[i].Name, unitFlags2[i].Value); - handler->PSendSysMessage(LANG_NPCINFO_UNIT_FIELD_FLAGS_3, target->GetUInt32Value(UNIT_FIELD_FLAGS_3)); + handler->PSendSysMessage(LANG_NPCINFO_UNIT_FIELD_FLAGS_3, *target->m_unitData->Flags3); for (uint8 i = 0; i < MAX_UNIT_FLAGS_3; ++i) - if (target->GetUInt32Value(UNIT_FIELD_FLAGS_3) & unitFlags3[i].Value) + if (target->HasUnitFlag3(unitFlags3[i].Value)) handler->PSendSysMessage("%s (0x%X)", unitFlags3[i].Name, unitFlags3[i].Value); - handler->PSendSysMessage(LANG_NPCINFO_DYNAMIC_FLAGS, target->GetUInt32Value(OBJECT_DYNAMIC_FLAGS)); + handler->PSendSysMessage(LANG_NPCINFO_DYNAMIC_FLAGS, target->GetDynamicFlags()); handler->PSendSysMessage(LANG_COMMAND_RAWPAWNTIMES, defRespawnDelayStr.c_str(), curRespawnDelayStr.c_str()); handler->PSendSysMessage(LANG_NPCINFO_LOOT, cInfo->lootid, cInfo->pickpocketLootId, cInfo->SkinLootId); handler->PSendSysMessage(LANG_NPCINFO_DUNGEON_ID, target->GetInstanceId()); @@ -923,7 +927,7 @@ public: return false; } - target->SetUInt32Value(UNIT_NPC_EMOTESTATE, emote); + target->SetEmoteState(Emote(emote)); return true; } @@ -1463,13 +1467,13 @@ public: uint8 level = (creatureTarget->getLevel() < (player->getLevel() - 5)) ? (player->getLevel() - 5) : creatureTarget->getLevel(); // prepare visual effect for levelup - pet->SetUInt32Value(UNIT_FIELD_LEVEL, level - 1); + pet->SetLevel(level - 1); // add to world pet->GetMap()->AddToMap(pet->ToCreature()); // visual effect for levelup - pet->SetUInt32Value(UNIT_FIELD_LEVEL, level); + pet->SetLevel(level); // caster have pet now player->SetMinion(pet, true); diff --git a/src/server/scripts/Commands/cs_pet.cpp b/src/server/scripts/Commands/cs_pet.cpp index 565998c4fac..37484bba405 100644 --- a/src/server/scripts/Commands/cs_pet.cpp +++ b/src/server/scripts/Commands/cs_pet.cpp @@ -102,8 +102,8 @@ public: creatureTarget->RemoveCorpse(); creatureTarget->SetHealth(0); // just for nice GM-mode view - pet->SetGuidValue(UNIT_FIELD_CREATEDBY, player->GetGUID()); - pet->SetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE, player->getFaction()); + pet->SetCreatorGUID(player->GetGUID()); + pet->setFaction(player->getFaction()); if (!pet->InitStatsForLevel(creatureTarget->getLevel())) { @@ -114,7 +114,7 @@ public: } // prepare visual effect for levelup - pet->SetUInt32Value(UNIT_FIELD_LEVEL, creatureTarget->getLevel()-1); + pet->SetLevel(creatureTarget->getLevel() - 1); pet->GetCharmInfo()->SetPetNumber(sObjectMgr->GeneratePetNumber(), true); // this enables pet details window (Shift+P) @@ -124,7 +124,7 @@ public: pet->GetMap()->AddToMap(pet->ToCreature()); // visual effect for levelup - pet->SetUInt32Value(UNIT_FIELD_LEVEL, creatureTarget->getLevel()); + pet->SetLevel(creatureTarget->getLevel()); player->SetMinion(pet, true); pet->SavePetToDB(PET_SAVE_AS_CURRENT); diff --git a/src/server/scripts/Commands/cs_reset.cpp b/src/server/scripts/Commands/cs_reset.cpp index 5162a186add..f8ae4589612 100644 --- a/src/server/scripts/Commands/cs_reset.cpp +++ b/src/server/scripts/Commands/cs_reset.cpp @@ -83,8 +83,7 @@ public: if (!handler->extractPlayerTarget((char*)args, &target)) return false; - target->SetUInt32Value(ACTIVE_PLAYER_FIELD_KILLS, 0); - target->SetUInt32Value(ACTIVE_PLAYER_FIELD_LIFETIME_HONORABLE_KILLS, 0); + target->ResetHonorStats(); target->UpdateCriteria(CRITERIA_TYPE_EARN_HONORABLE_KILL); return true; @@ -106,18 +105,18 @@ public: player->SetShapeshiftForm(FORM_NONE); player->setFactionForRace(player->getRace()); - player->SetUInt32Value(UNIT_FIELD_DISPLAY_POWER, powerType); + player->SetPowerType(Powers(powerType)); // reset only if player not in some form; if (player->GetShapeshiftForm() == FORM_NONE) player->InitDisplayIds(); - player->SetByteValue(UNIT_FIELD_BYTES_2, UNIT_BYTES_2_OFFSET_PVP_FLAG, UNIT_BYTE2_FLAG_PVP); + player->SetPvpFlags(UNIT_BYTE2_FLAG_PVP); - player->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); + player->SetUnitFlags(UNIT_FLAG_PVP_ATTACKABLE); //-1 is default value - player->SetUInt32Value(ACTIVE_PLAYER_FIELD_WATCHED_FACTION_INDEX, uint32(-1)); + player->SetWatchedFactionIndex(-1); return true; } @@ -143,7 +142,7 @@ public: target->InitStatsForLevel(true); target->InitTaxiNodesForLevel(); target->InitTalentForLevel(); - target->SetUInt32Value(ACTIVE_PLAYER_FIELD_XP, 0); + target->SetXP(0); target->_ApplyAllLevelScaleItemMods(true); diff --git a/src/server/scripts/Commands/cs_titles.cpp b/src/server/scripts/Commands/cs_titles.cpp index 1b315cc4bf1..197c31bd51c 100644 --- a/src/server/scripts/Commands/cs_titles.cpp +++ b/src/server/scripts/Commands/cs_titles.cpp @@ -93,7 +93,7 @@ public: std::string tNameLink = handler->GetNameLink(target); target->SetTitle(titleInfo); // to be sure that title now known - target->SetUInt32Value(PLAYER_CHOSEN_TITLE, titleInfo->MaskID); + target->SetChosenTitle(titleInfo->MaskID); handler->PSendSysMessage(LANG_TITLE_CURRENT_RES, id, (target->getGender() == GENDER_MALE ? titleInfo->Name : titleInfo->Name1)->Str[handler->GetSessionDbcLocale()], @@ -195,9 +195,9 @@ public: handler->PSendSysMessage(LANG_TITLE_REMOVE_RES, id, titleNameStr.c_str(), tNameLink.c_str()); - if (!target->HasTitle(target->GetInt32Value(PLAYER_CHOSEN_TITLE))) + if (!target->HasTitle(target->m_playerData->PlayerTitle)) { - target->SetUInt32Value(PLAYER_CHOSEN_TITLE, 0); + target->SetChosenTitle(0); handler->PSendSysMessage(LANG_CURRENT_TITLE_RESET, tNameLink.c_str()); } @@ -234,12 +234,12 @@ public: titles &= ~titles2; // remove non-existing titles - target->SetUInt64Value(ACTIVE_PLAYER_FIELD_KNOWN_TITLES, titles); + target->SetKnownTitles(0, titles); handler->SendSysMessage(LANG_DONE); - if (!target->HasTitle(target->GetInt32Value(PLAYER_CHOSEN_TITLE))) + if (!target->HasTitle(target->m_playerData->PlayerTitle)) { - target->SetUInt32Value(PLAYER_CHOSEN_TITLE, 0); + target->SetChosenTitle(0); handler->PSendSysMessage(LANG_CURRENT_TITLE_RESET, handler->GetNameLink(target).c_str()); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp index c932ad0d666..7f284220ecf 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp @@ -168,7 +168,7 @@ public: { Initialize(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); } /// @todo move them to center diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_coren_direbrew.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_coren_direbrew.cpp index 6bbbc6583e8..38699c2865a 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_coren_direbrew.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_coren_direbrew.cpp @@ -142,7 +142,7 @@ public: void Reset() override { _Reset(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); me->setFaction(COREN_DIREBREW_FACTION_FRIEND); events.SetPhase(PHASE_ALL); @@ -165,7 +165,7 @@ public: if (action == ACTION_START_FIGHT) { events.SetPhase(PHASE_ONE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); me->setFaction(COREN_DIREBREW_FACTION_HOSTILE); me->SetInCombatWithZone(); @@ -398,7 +398,7 @@ public: Talk(SAY_ANTAGONIST_2); break; case ACTION_ANTAGONIST_HOSTILE: - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); me->setFaction(COREN_DIREBREW_FACTION_HOSTILE); me->SetInCombatWithZone(); break; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp index 7e4e4d63893..eab17b1ea88 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_tomb_of_seven.cpp @@ -136,7 +136,7 @@ class boss_doomrel : public CreatureScript CloseGossipMenuFor(player); //start event here creature->setFaction(FACTION_HOSTILE); - creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + creature->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); creature->AI()->AttackStart(player); InstanceScript* instance = creature->GetInstanceScript(); if (instance) @@ -174,12 +174,12 @@ class boss_doomrel : public CreatureScript me->setFaction(FACTION_FRIEND); // was set before event start, so set again - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); if (_instance->GetData(DATA_GHOSTKILL) >= 7) - me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); + me->SetNpcFlags(UNIT_NPC_FLAG_NONE); else - me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->SetNpcFlags(UNIT_NPC_FLAG_GOSSIP); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp index f7544d47daa..cefcd51f333 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/instance_blackrock_depths.cpp @@ -356,7 +356,7 @@ public: if (Creature* boss = instance->GetCreature(TombBossGUIDs[TombEventCounter])) { boss->setFaction(FACTION_HOSTILE); - boss->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + boss->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); if (Unit* target = boss->SelectNearestTarget(500)) boss->AI()->AttackStart(target); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp index 3ad71bb5b6a..663f3ff84fb 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_pyroguard_emberseer.cpp @@ -82,7 +82,7 @@ public: void Reset() override { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE)); events.Reset(); // Apply auras on spawn and reset // DoCast(me, SPELL_FIRE_SHIELD_TRIGGER); // Need to find this in old DBC if possible @@ -160,7 +160,7 @@ public: me->CastSpell(me, SPELL_EMBERSEER_FULL_STRENGTH); Talk(EMOTE_FREE_OF_BONDS); Talk(YELL_FREE_OF_BONDS); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE)); events.ScheduleEvent(EVENT_ENTER_COMBAT, 2000); } } @@ -343,7 +343,7 @@ public: void Reset() override { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); if (Creature* Emberseer = me->FindNearestCreature(NPC_PYROGAURD_EMBERSEER, 30.0f, true)) Emberseer->AI()->SetData(1, 3); } @@ -357,7 +357,7 @@ public: { if (data == 1 && value == 1) { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); me->InterruptSpell(CURRENT_CHANNELED_SPELL); _events.CancelEvent(EVENT_ENCAGED_EMBERSEER); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp index c6929446e1b..42fb5170252 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp @@ -192,7 +192,7 @@ public: void IsSummonedBy(Unit* /*summoner*/) override { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); DoZoneInCombat(); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp index f00edd0a9a7..b6541ec6328 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp @@ -190,7 +190,7 @@ public: _Reset(); me->SetVisible(true); - me->SetUInt32Value(UNIT_NPC_FLAGS, 1); + me->SetNpcFlags(UNIT_NPC_FLAG_GOSSIP); me->setFaction(35); me->SetStandState(UNIT_STAND_STATE_SIT_HIGH_CHAIR); me->RemoveAura(SPELL_NEFARIANS_BARRIER); @@ -209,10 +209,10 @@ public: Talk(SAY_GAMESBEGIN_2); me->setFaction(103); - me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); + me->SetNpcFlags(UNIT_NPC_FLAG_NONE); DoCast(me, SPELL_NEFARIANS_BARRIER); me->SetStandState(UNIT_STAND_STATE_STAND); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); AttackStart(target); events.ScheduleEvent(EVENT_SHADOW_BOLT, urand(3000, 10000)); events.ScheduleEvent(EVENT_FEAR, urand(10000, 20000)); @@ -225,7 +225,7 @@ public: if (summon->GetEntry() != NPC_NEFARIAN) { summon->UpdateEntry(NPC_BONE_CONSTRUCT); - summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + summon->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); summon->SetReactState(REACT_PASSIVE); summon->SetStandState(UNIT_STAND_STATE_DEAD); } @@ -575,7 +575,7 @@ public: { (*itr)->Respawn(); (*itr)->SetInCombatWithZone(); - (*itr)->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + (*itr)->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); (*itr)->SetReactState(REACT_AGGRESSIVE); (*itr)->SetStandState(UNIT_STAND_STATE_STAND); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp index 89f3f7673bc..57dae09267c 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_vaelastrasz.cpp @@ -75,9 +75,9 @@ public: boss_vaelAI(Creature* creature) : BossAI(creature, DATA_VAELASTRAZ_THE_CORRUPT) { Initialize(); - creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + creature->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); creature->setFaction(35); - creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + creature->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); } void Initialize() @@ -114,7 +114,7 @@ public: void BeginSpeech(Unit* target) { PlayerGUID = target->GetGUID(); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); events.ScheduleEvent(EVENT_SPEECH_1, 1000); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp index 4a534dbe662..1607588cff2 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp @@ -166,7 +166,7 @@ class boss_majordomo : public CreatureScript { case EVENT_OUTRO_1: me->NearTeleportTo(RagnarosTelePos.GetPositionX(), RagnarosTelePos.GetPositionY(), RagnarosTelePos.GetPositionZ(), RagnarosTelePos.GetOrientation()); - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); break; case EVENT_OUTRO_2: instance->instance->SummonCreature(NPC_RAGNAROS, RagnarosSummonPos); @@ -185,7 +185,7 @@ class boss_majordomo : public CreatureScript { if (action == ACTION_START_RAGNAROS) { - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); Talk(SAY_SUMMON_MAJ); events.ScheduleEvent(EVENT_OUTRO_2, 8000); events.ScheduleEvent(EVENT_OUTRO_3, 24000); @@ -193,7 +193,7 @@ class boss_majordomo : public CreatureScript else if (action == ACTION_START_RAGNAROS_ALT) { me->setFaction(FACTION_FRIENDLY); - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); } } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp index 9522c40338c..515e1d26315 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp @@ -88,7 +88,7 @@ class boss_ragnaros : public CreatureScript Initialize(); _introState = 0; me->SetReactState(REACT_PASSIVE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); SetCombatMovement(false); } @@ -104,7 +104,7 @@ class boss_ragnaros : public CreatureScript { BossAI::Reset(); Initialize(); - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0); + me->SetEmoteState(EMOTE_ONESHOT_NONE); } void EnterCombat(Unit* victim) override @@ -162,7 +162,7 @@ class boss_ragnaros : public CreatureScript break; case EVENT_INTRO_5: me->SetReactState(REACT_AGGRESSIVE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC)); _introState = 2; break; default: @@ -177,8 +177,8 @@ class boss_ragnaros : public CreatureScript //Become unbanished again me->SetReactState(REACT_AGGRESSIVE); me->setFaction(14); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + me->SetEmoteState(EMOTE_ONESHOT_NONE); me->HandleEmoteCommand(EMOTE_ONESHOT_EMERGE); if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) AttackStart(target); @@ -255,8 +255,8 @@ class boss_ragnaros : public CreatureScript //Root self //DoCast(me, 23973); me->setFaction(35); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_SUBMERGED); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + me->SetEmoteState(EMOTE_STATE_SUBMERGED); me->HandleEmoteCommand(EMOTE_ONESHOT_SUBMERGE); instance->SetData(DATA_RAGNAROS_ADDS, 0); diff --git a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp index 67b8a6852ca..f249aa097f3 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp +++ b/src/server/scripts/EasternKingdoms/Deadmines/instance_deadmines.cpp @@ -178,7 +178,7 @@ class instance_deadmines : public InstanceMapScript void LeverStucked() { if (GameObject* pDoorLever = instance->GetGameObject(DoorLeverGUID)) - pDoorLever->SetUInt32Value(GAMEOBJECT_FLAGS, 4); + pDoorLever->AddFlag(GO_FLAG_INTERACT_COND); } void OnGameObjectCreate(GameObject* go) override diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp index 31f3aeebcbf..13133405643 100644 --- a/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp +++ b/src/server/scripts/EasternKingdoms/Gnomeregan/gnomeregan.cpp @@ -312,7 +312,7 @@ public: if (GameObject* go = me->SummonGameObject(183410, -533.140f, -105.322f, -156.016f, 0.f, QuaternionData(), 1)) { GoSummonList.push_back(go->GetGUID()); - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); //We can't use it! + go->AddFlag(GO_FLAG_NOT_SELECTABLE); //We can't use it! } Summon(3); break; @@ -327,7 +327,7 @@ public: if (GameObject* go = me->SummonGameObject(183410, -542.199f, -96.854f, -155.790f, 0.f, QuaternionData(), 1)) { GoSummonList.push_back(go->GetGUID()); - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->AddFlag(GO_FLAG_NOT_SELECTABLE); } break; case 5: @@ -341,7 +341,7 @@ public: if (GameObject* go = me->SummonGameObject(183410, -507.820f, -103.333f, -151.353f, 0.f, QuaternionData(), 1)) { GoSummonList.push_back(go->GetGUID()); - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); //We can't use it! + go->AddFlag(GO_FLAG_NOT_SELECTABLE); //We can't use it! Summon(5); } break; @@ -349,7 +349,7 @@ public: if (GameObject* go = me->SummonGameObject(183410, -511.829f, -86.249f, -151.431f, 0.f, QuaternionData(), 1)) { GoSummonList.push_back(go->GetGUID()); - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); //We can't use it! + go->AddFlag(GO_FLAG_NOT_SELECTABLE); //We can't use it! } break; case 8: diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp index 57e0d36b40d..1f6d1dc5336 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_prince_malchezaar.cpp @@ -159,8 +159,8 @@ public: { if (spell->Id == SPELL_INFERNAL_RELAY) { - me->SetDisplayId(me->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID)); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->SetDisplayId(me->GetNativeDisplayId()); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); HellfireTimer = 4000; CleanupTimer = 170000; } @@ -449,7 +449,7 @@ public: Creature* axe = me->SummonCreature(MALCHEZARS_AXE, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 1000); if (axe) { - axe->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + axe->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); axe->setFaction(me->getFaction()); axes[i] = axe->GetGUID(); if (target) diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp index 3bd9c7c9097..c469d8130da 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp @@ -344,7 +344,7 @@ public: PortalGUID[PortalsCount] = summoned->GetGUID(); ++PortalsCount; - if (summoned->GetUInt32Value(UNIT_CREATED_BY_SPELL) == SPELL_FIENDISH_PORTAL_1) + if (summoned->m_unitData->CreatedBySpell == SPELL_FIENDISH_PORTAL_1) { Talk(SAY_SUMMON); SummonedPortals = true; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp index e093d1007b2..8f933ec4859 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp @@ -183,7 +183,7 @@ public: void AttackStart(Unit* who) override { - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) + if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)) return; ScriptedAI::AttackStart(who); @@ -192,7 +192,7 @@ public: void MoveInLineOfSight(Unit* who) override { - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) + if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)) return; ScriptedAI::MoveInLineOfSight(who); @@ -204,7 +204,7 @@ public: { if (AggroTimer <= diff) { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); AggroTimer = 0; } else AggroTimer -= diff; } @@ -348,7 +348,7 @@ public: void AttackStart(Unit* who) override { - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) + if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)) return; ScriptedAI::AttackStart(who); @@ -357,7 +357,7 @@ public: void MoveInLineOfSight(Unit* who) override { - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) + if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)) return; ScriptedAI::MoveInLineOfSight(who); @@ -404,7 +404,7 @@ public: { if (AggroTimer <= diff) { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); AggroTimer = 0; } else AggroTimer -= diff; } @@ -482,7 +482,7 @@ public: void AttackStart(Unit* who) override { - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) + if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)) return; ScriptedAI::AttackStart(who); @@ -491,7 +491,7 @@ public: void MoveInLineOfSight(Unit* who) override { - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) + if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)) return; ScriptedAI::MoveInLineOfSight(who); @@ -515,7 +515,7 @@ public: { if (AggroTimer <= diff) { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); AggroTimer = 0; } else AggroTimer -= diff; } @@ -586,7 +586,7 @@ public: void MoveInLineOfSight(Unit* who) override { - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) + if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)) return; ScriptedAI::MoveInLineOfSight(who); @@ -594,7 +594,7 @@ public: void AttackStart(Unit* who) override { - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) + if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)) return; ScriptedAI::AttackStart(who); @@ -628,7 +628,7 @@ public: { if (AggroTimer <= diff) { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); AggroTimer = 0; } else AggroTimer -= diff; } @@ -684,7 +684,7 @@ public: // Anyway, I digress. // @todo This line below is obviously a hack. Duh. I'm just coming in here to hackfix the encounter to actually be completable. // It needs a rewrite. Badly. Please, take good care of it. - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NON_ATTACKABLE)); CycloneTimer = 30000; ChainLightningTimer = 10000; } @@ -1020,7 +1020,7 @@ void PretendToDie(Creature* creature) creature->InterruptNonMeleeSpells(true); creature->RemoveAllAuras(); creature->SetHealth(0); - creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + creature->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); creature->GetMotionMaster()->MovementExpired(false); creature->GetMotionMaster()->MoveIdle(); creature->SetStandState(UNIT_STAND_STATE_DEAD); @@ -1028,7 +1028,7 @@ void PretendToDie(Creature* creature) void Resurrect(Creature* target) { - target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + target->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); target->SetFullHealth(); target->SetStandState(UNIT_STAND_STATE_STAND); target->CastSpell(target, SPELL_RES_VISUAL, true); @@ -1116,7 +1116,7 @@ public: void AttackStart(Unit* who) override { - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) + if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)) return; ScriptedAI::AttackStart(who); @@ -1125,7 +1125,7 @@ public: void MoveInLineOfSight(Unit* who) override { - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) + if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)) return; ScriptedAI::MoveInLineOfSight(who); @@ -1253,12 +1253,12 @@ public: { if (Creature* Julianne = (ObjectAccessor::GetCreature((*me), JulianneGUID))) { - Julianne->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + Julianne->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); Julianne->GetMotionMaster()->Clear(); Julianne->setDeathState(JUST_DIED); Julianne->CombatStop(true); Julianne->DeleteThreatList(); - Julianne->SetUInt32Value(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); + Julianne->SetDynamicFlags(UNIT_DYNFLAG_LOOTABLE); } return; } @@ -1294,7 +1294,7 @@ public: void MoveInLineOfSight(Unit* who) override { - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) + if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)) return; ScriptedAI::MoveInLineOfSight(who); @@ -1382,7 +1382,7 @@ void boss_julianne::boss_julianneAI::UpdateAI(uint32 diff) if (AggroYellTimer <= diff) { Talk(SAY_JULIANNE_AGGRO); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->setFaction(16); AggroYellTimer = 0; } else AggroYellTimer -= diff; @@ -1523,12 +1523,12 @@ void boss_julianne::boss_julianneAI::DamageTaken(Unit* /*done_by*/, uint32 &dama { if (Creature* Romulo = (ObjectAccessor::GetCreature((*me), RomuloGUID))) { - Romulo->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + Romulo->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); Romulo->GetMotionMaster()->Clear(); Romulo->setDeathState(JUST_DIED); Romulo->CombatStop(true); Romulo->DeleteThreatList(); - Romulo->SetUInt32Value(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); + Romulo->SetDynamicFlags(UNIT_DYNFLAG_LOOTABLE); } return; diff --git a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp index 9e0fcc8f4c3..5c4ac116ba1 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/instance_karazhan.cpp @@ -158,7 +158,7 @@ public: HandleGameObject(StageDoorLeftGUID, true); HandleGameObject(StageDoorRightGUID, true); if (GameObject* sideEntrance = instance->GetGameObject(SideEntranceDoor)) - sideEntrance->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); + sideEntrance->RemoveFlag(GO_FLAG_LOCKED); UpdateEncounterStateForKilledCreature(16812, NULL); } break; @@ -220,9 +220,9 @@ public: case GO_SIDE_ENTRANCE_DOOR: SideEntranceDoor = go->GetGUID(); if (GetBossState(DATA_OPERA_PERFORMANCE) == DONE) - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); + go->AddFlag(GO_FLAG_LOCKED); else - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); + go->RemoveFlag(GO_FLAG_LOCKED); break; case GO_DUST_COVERED_CHEST: DustCoveredChest = go->GetGUID(); diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp index b2bb79ddcf4..6a431713222 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp @@ -200,7 +200,7 @@ public: me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 60000)) { - spotlight->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + spotlight->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); spotlight->CastSpell(spotlight, SPELL_SPOTLIGHT, false); m_uiSpotlightGUID = spotlight->GetGUID(); } @@ -276,11 +276,7 @@ public: float PosX = Spawns[index][1]; if (Creature* creature = me->SummonCreature(entry, PosX, SPAWN_Y, SPAWN_Z, SPAWN_O, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, HOUR*2*IN_MILLISECONDS)) - { - // In case database has bad flags - creature->SetUInt32Value(UNIT_FIELD_FLAGS, 0); - creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - } + creature->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); } RaidWiped = false; diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp index 22e372aa158..dbae2e7a5b5 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp @@ -170,7 +170,7 @@ public: // Enable the Translocation Orb Exit if (GameObject* escapeOrb = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_ESCAPE_ORB))) - escapeOrb->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + escapeOrb->RemoveFlag(GO_FLAG_NOT_SELECTABLE); } void DamageTaken(Unit* /*done_by*/, uint32 &damage) override @@ -315,7 +315,7 @@ public: Creature* Phoenix = me->SummonCreature(CREATURE_PHOENIX, x, y, LOCATION_Z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 60000); if (Phoenix) { - Phoenix->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE); + Phoenix->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE)); SetThreatList(Phoenix); Phoenix->AI()->AttackStart(target); } @@ -454,7 +454,7 @@ public: { Initialize(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->setFaction(14); DoCast(me, SPELL_FLAMESTRIKE2, true); @@ -508,7 +508,7 @@ public: void Reset() override { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE)); me->SetDisableGravity(true); DoCast(me, SPELL_PHOENIX_BURN, true); Initialize(); @@ -540,7 +540,7 @@ public: me->RemoveAllAurasOnDeath(); me->ModifyAuraState(AURA_STATE_HEALTHLESS_20_PERCENT, false); me->ModifyAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, false); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->ClearAllReactives(); me->SetTarget(ObjectGuid::Empty); me->GetMotionMaster()->Clear(); @@ -658,7 +658,7 @@ public: DespawnTimer = 30000; ChangeTargetTimer = urand(6000, 12000); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetDisableGravity(true); me->setFaction(14); DoCast(me, SPELL_ARCANE_SPHERE_PASSIVE, true); diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp index b2e22c91a66..f1eb2dbe0d6 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_priestess_delrissa.cpp @@ -250,10 +250,7 @@ public: if (instance->GetData(DATA_DELRISSA_DEATH_COUNT) == MAX_ACTIVE_LACKEY) instance->SetBossState(DATA_DELRISSA, DONE); else - { - if (me->HasFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE)) - me->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); - } + me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE); } void UpdateAI(uint32 diff) override @@ -444,8 +441,7 @@ struct boss_priestess_lackey_commonAI : public ScriptedAI //time to make her lootable and complete event if she died before lackeys if (!pDelrissa->IsAlive()) { - if (!pDelrissa->HasFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE)) - pDelrissa->SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); + pDelrissa->AddDynamicFlag(UNIT_DYNFLAG_LOOTABLE); instance->SetBossState(DATA_DELRISSA, DONE); } diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp index 85d5ac638e0..b121b58793e 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp @@ -87,7 +87,7 @@ class boss_selin_fireheart : public CreatureScript if (!creature->IsAlive()) creature->Respawn(); - creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + creature->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); } _Reset(); @@ -168,7 +168,7 @@ class boss_selin_fireheart : public CreatureScript Unit* CrystalChosen = ObjectAccessor::GetUnit(*me, CrystalGUID); if (CrystalChosen && CrystalChosen->IsAlive()) { - CrystalChosen->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + CrystalChosen->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); CrystalChosen->CastSpell(me, SPELL_MANA_RAGE, true); events.ScheduleEvent(EVENT_EMPOWER, 10000, PHASE_DRAIN); } diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp index 06a3a6d2877..a2229b234ad 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp @@ -129,7 +129,7 @@ public: Initialize(); events.Reset(); me->setFaction(7); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); me->SetStandState(UNIT_STAND_STATE_KNEEL); me->LoadEquipment(0, true); } @@ -235,7 +235,7 @@ public: else { me->setFaction(14); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); phase = PHASE_ATTACKING; if (Player* target = ObjectAccessor::GetPlayer(*me, playerGUID)) @@ -499,8 +499,8 @@ public: return true; } - creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); - creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_15); + creature->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); + creature->RemoveUnitFlag(UNIT_FLAG_UNK_15); player->CastSpell(creature, SPELL_DUEL, false); player->CastSpell(player, SPELL_DUEL_FLAG, true); @@ -550,7 +550,7 @@ public: me->RestoreFaction(); CombatAI::Reset(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_15); + me->AddUnitFlag(UNIT_FLAG_UNK_15); } void SpellHit(Unit* pCaster, const SpellInfo* pSpell) override @@ -779,7 +779,7 @@ public: if (charmer->HasAura(SPELL_EFFECT_STOLEN_HORSE)) { charmer->RemoveAurasDueToSpell(SPELL_EFFECT_STOLEN_HORSE); - caster->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); + caster->RemoveNpcFlag(UNIT_NPC_FLAG_SPELLCLICK); caster->setFaction(35); DoCast(caster, SPELL_CALL_DARK_RIDER, true); if (Creature* Dark_Rider = me->FindNearestCreature(NPC_DARK_RIDER_OF_ACHERUS, 15)) @@ -856,8 +856,8 @@ public: return; deathcharger->RestoreFaction(); - deathcharger->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); - deathcharger->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + deathcharger->RemoveNpcFlag(UNIT_NPC_FLAG_SPELLCLICK); + deathcharger->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); if (!me->GetVehicle() && deathcharger->IsVehicle() && deathcharger->GetVehicleKit()->HasEmptySeat(0)) me->EnterVehicle(deathcharger); } @@ -870,8 +870,8 @@ public: if (killer->GetTypeId() == TYPEID_PLAYER && deathcharger->GetTypeId() == TYPEID_UNIT && deathcharger->IsVehicle()) { - deathcharger->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); - deathcharger->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + deathcharger->AddNpcFlag(UNIT_NPC_FLAG_SPELLCLICK); + deathcharger->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); deathcharger->setFaction(2096); } } diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp index 6b5192556f0..b5bec78509a 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp @@ -236,7 +236,7 @@ public: me->LoadEquipment(0, true); me->RemoveAurasDueToSpell(SPELL_ANTI_MAGIC_ZONE); me->RemoveAurasDueToSpell(SPELL_KOLTIRA_TRANSFORM); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); } } @@ -257,7 +257,7 @@ public: break; case 3: SetEscortPaused(true); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->SetStandState(UNIT_STAND_STATE_KNEEL); Talk(SAY_BREAKOUT2); DoCast(me, SPELL_ANTI_MAGIC_ZONE); @@ -282,7 +282,7 @@ public: if (summoned->GetEntry() == NPC_HIGH_INQUISITOR_VALROTH) valrothGUID = summoned->GetGUID(); - summoned->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + summoned->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); } void SummonAcolyte(uint32 uiAmount) @@ -340,7 +340,7 @@ public: case 5: Talk(SAY_BREAKOUT9); me->RemoveAurasDueToSpell(SPELL_ANTI_MAGIC_ZONE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); waveTimer = 2500; break; case 6: @@ -655,7 +655,7 @@ public: { Initialize(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); } bool MeetQuestCondition(Player* player) @@ -753,7 +753,7 @@ public: case 9: Talk(SAY_EXEC_TIME_6, player); me->SetStandState(UNIT_STAND_STATE_KNEEL); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); break; case 10: Talk(SAY_EXEC_WAITING, player); @@ -783,7 +783,7 @@ public: case 9: Talk(SAY_EXEC_TIME_8, player); me->SetStandState(UNIT_STAND_STATE_KNEEL); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); break; case 10: Talk(SAY_EXEC_WAITING, player); @@ -813,7 +813,7 @@ public: case 9: Talk(SAY_EXEC_TIME_3, player); me->SetStandState(UNIT_STAND_STATE_KNEEL); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); break; case 10: Talk(SAY_EXEC_WAITING, player); @@ -843,7 +843,7 @@ public: case 9: Talk(SAY_EXEC_TIME_7, player); me->SetStandState(UNIT_STAND_STATE_KNEEL); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); break; case 10: Talk(SAY_EXEC_WAITING, player); @@ -873,7 +873,7 @@ public: case 9: Talk(SAY_EXEC_TIME_4, player); me->SetStandState(UNIT_STAND_STATE_KNEEL); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); break; case 10: Talk(SAY_EXEC_WAITING, player); @@ -903,7 +903,7 @@ public: case 9: Talk(SAY_EXEC_TIME_9, player); me->SetStandState(UNIT_STAND_STATE_KNEEL); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); break; case 10: Talk(SAY_EXEC_WAITING, player); @@ -933,7 +933,7 @@ public: case 9: Talk(SAY_EXEC_TIME_5, player); me->SetStandState(UNIT_STAND_STATE_KNEEL); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); break; case 10: Talk(SAY_EXEC_WAITING, player); @@ -963,7 +963,7 @@ public: case 9: Talk(SAY_EXEC_TIME_10, player); me->SetStandState(UNIT_STAND_STATE_KNEEL); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); break; case 10: Talk(SAY_EXEC_WAITING, player); @@ -993,7 +993,7 @@ public: case 9: Talk(SAY_EXEC_TIME_1, player); me->SetStandState(UNIT_STAND_STATE_KNEEL); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); break; case 10: Talk(SAY_EXEC_WAITING, player); @@ -1023,7 +1023,7 @@ public: case 9: Talk(SAY_EXEC_TIME_2, player); me->SetStandState(UNIT_STAND_STATE_KNEEL); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); break; case 10: Talk(SAY_EXEC_WAITING, player); diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp index 0d4574cc2cb..adaad6b0f9f 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp @@ -551,7 +551,7 @@ public: if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID)) { temp->SetWalk(true); - temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H); + temp->SetEmoteState(EMOTE_STATE_READY2H); temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[10]); } if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID)) @@ -625,7 +625,7 @@ public: //UpdateWorldState(me->GetMap(), WORLD_STATE_REMAINS, 1); UpdateWorldState(me->GetMap(), WORLD_STATE_COUNTDOWN, 0); UpdateWorldState(me->GetMap(), WORLD_STATE_EVENT_BEGIN, 1); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); JumpToNextStep(3000); break; @@ -783,7 +783,7 @@ public: case 15: // summon gate if (Creature* temp = me->SummonCreature(NPC_HIGHLORD_ALEXANDROS_MOGRAINE, LightofDawnLoc[22], TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 300000)) { - temp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + temp->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); temp->CastSpell(temp, SPELL_ALEXANDROS_MOGRAINE_SPAWN, true); temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN06); uiAlexandrosGUID = temp->GetGUID(); @@ -794,7 +794,7 @@ public: case 16: // Alexandros out if (Creature* temp = ObjectAccessor::GetCreature(*me, uiAlexandrosGUID)) { - temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + temp->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[23]); temp->AI()->Talk(SAY_LIGHT_OF_DAWN32); } @@ -999,7 +999,7 @@ public: if (fLichPositionX && fLichPositionY) { Unit* temp = me->SummonCreature(NPC_DEFENDER_OF_THE_LIGHT, LightofDawnLoc[0].GetPositionWithOffset({ float(rand32() % 10), float(rand32() % 10), 0.0f, 0.0f }), TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000); - temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED); + temp->SetEmoteState(EMOTE_STATE_ATTACK_UNARMED); temp->SetWalk(false); temp->SetSpeedRate(MOVE_RUN, 2.0f); temp->setFaction(me->getFaction()); @@ -1007,7 +1007,7 @@ public: uiDefenderGUID[0] = temp->GetGUID(); temp = me->SummonCreature(NPC_RIMBLAT_EARTHSHATTER, LightofDawnLoc[0].GetPositionWithOffset({ float(rand32() % 10), float(rand32() % 10), 0.0f, 0.0f }), TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 10000); - temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED); + temp->SetEmoteState(EMOTE_STATE_ATTACK_UNARMED); temp->SetWalk(false); temp->SetSpeedRate(MOVE_RUN, 2.0f); temp->setFaction(me->getFaction()); @@ -1016,7 +1016,7 @@ public: } if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID)) { - temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED); + temp->SetEmoteState(EMOTE_STATE_ATTACK_UNARMED); temp->SetWalk(false); temp->SetSpeedRate(MOVE_RUN, 2.0f); temp->GetMotionMaster()->MovePoint(0, fLichPositionX, fLichPositionY, fLichPositionZ); @@ -1024,7 +1024,7 @@ public: } if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID)) { - temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED); + temp->SetEmoteState(EMOTE_STATE_ATTACK_UNARMED); temp->SetWalk(false); temp->SetSpeedRate(MOVE_RUN, 2.0f); temp->HandleEmoteCommand(EMOTE_STATE_ATTACK_UNARMED); @@ -1032,7 +1032,7 @@ public: } if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEligorGUID)) { - temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_ATTACK_UNARMED); + temp->SetEmoteState(EMOTE_STATE_ATTACK_UNARMED); temp->SetWalk(false); temp->SetSpeedRate(MOVE_RUN, 2.0f); temp->GetMotionMaster()->MovePoint(0, fLichPositionX, fLichPositionY, fLichPositionZ); @@ -1047,21 +1047,21 @@ public: if (Creature* temp = ObjectAccessor::GetCreature(*me, uiMaxwellGUID)) { - temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); + temp->SetEmoteState(EMOTE_ONESHOT_NONE); temp->SetSpeedRate(MOVE_RUN, 6.0f); temp->SetStandState(UNIT_STAND_STATE_DEAD); temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[14]); } if (Creature* temp = ObjectAccessor::GetCreature(*me, uiKorfaxGUID)) { - temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); + temp->SetEmoteState(EMOTE_ONESHOT_NONE); temp->SetSpeedRate(MOVE_RUN, 6.0f); temp->SetStandState(UNIT_STAND_STATE_DEAD); temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[11]); } if (Creature* temp = ObjectAccessor::GetCreature(*me, uiEligorGUID)) { - temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); + temp->SetEmoteState(EMOTE_ONESHOT_NONE); temp->SetSpeedRate(MOVE_RUN, 6.0f); temp->SetStandState(UNIT_STAND_STATE_DEAD); temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[17]); @@ -1156,7 +1156,7 @@ public: { temp->AI()->Talk(EMOTE_LIGHT_OF_DAWN16); temp->CastSpell(temp, SPELL_TIRION_CHARGE, false); // jumping charge - temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H); + temp->SetEmoteState(EMOTE_STATE_READY2H); temp->SetSpeedRate(MOVE_RUN, 3.0f); // workarounds, make Tirion still running temp->SetWalk(false); temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[2]); @@ -1211,7 +1211,7 @@ public: temp->CastSpell(temp, SPELL_TELEPORT_VISUAL, false); if (Creature* temp = ObjectAccessor::GetCreature(*me, uiTirionGUID)) // Tirion runs to Darion { - temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); + temp->SetEmoteState(EMOTE_ONESHOT_NONE); temp->SetSpeedRate(MOVE_RUN, 1.0f); temp->GetMotionMaster()->MovePoint(0, LightofDawnLoc[6]); } diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp index c10cea4183e..d1226d58811 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/zone_the_scarlet_enclave.cpp @@ -70,7 +70,7 @@ public: { me->setActive(true); me->SetVisible(false); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->SetCanFly(true); me->GetPosition(x, y, z); diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp index ec5195ee49e..797003b13c7 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_headless_horseman.cpp @@ -293,7 +293,7 @@ public: withbody = true; wait = 300; damage = me->GetHealth() - me->CountPctFromMaxHealth(1); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->StopMoving(); //me->GetMotionMaster()->MoveIdle(); DoCast(me, SPELL_HEAD_IS_DEAD); @@ -318,7 +318,7 @@ public: if (!bodyGUID) bodyGUID = caster->GetGUID(); me->RemoveAllAuras(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); DoCast(me, SPELL_HEAD_LANDS, true); DoCast(me, SPELL_HEAD, false); SaySound(SAY_LOST_HEAD); @@ -446,14 +446,14 @@ public: headGUID.Clear(); } - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); //instance->SetBossState(DATA_HORSEMAN_EVENT, NOT_STARTED); } void FlyMode() { me->SetVisible(false); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->SetDisableGravity(true); me->SetSpeedRate(MOVE_WALK, 5.0f); wp_reached = false; @@ -493,7 +493,7 @@ public: Phase = 1; IsFlying = false; wp_reached = false; - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); SaySound(SAY_ENTRANCE); if (Unit* player = ObjectAccessor::GetUnit(*me, PlayerGUID)) DoStartMovement(player); @@ -631,7 +631,7 @@ public: Unit* Head = ObjectAccessor::GetUnit(*me, headGUID); if (Head && Head->IsAlive()) { - Head->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + Head->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); //Head->CastSpell(Head, SPELL_HEAD_INVIS, false); me->InterruptNonMeleeSpells(false); DoCast(me, SPELL_IMMUNE, true); @@ -819,7 +819,7 @@ public: sprouted = false; DoCast(me, SPELL_PUMPKIN_AURA, true); DoCast(me, SPELL_SPROUTING); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); + me->AddUnitFlag(UNIT_FLAG_STUNNED); } void EnterCombat(Unit* /*who*/) override { } @@ -830,7 +830,7 @@ public: { sprouted = true; me->RemoveAllAuras(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); + me->RemoveUnitFlag(UNIT_FLAG_STUNNED); DoCast(me, SPELL_SPROUT_BODY, true); me->UpdateEntry(PUMPKIN_FIEND); DoStartMovement(me->GetVictim()); @@ -924,8 +924,8 @@ void npc_head::npc_headAI::Disappear() body->RemoveAurasDueToSpell(SPELL_IMMUNE);//hack, SpellHit doesn't calls if body has immune aura DoCast(body, SPELL_FLYING_HEAD); me->SetFullHealth(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->GetMotionMaster()->MoveIdle(); ENSURE_AI(boss_headless_horseman::boss_headless_horsemanAI, body->AI())->returned = true; } diff --git a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp index 47152b972be..865037d098b 100644 --- a/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletMonastery/boss_mograine_and_whitemane.cpp @@ -102,8 +102,8 @@ public: Initialize(); //Incase wipe during phase that mograine fake death - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetStandState(UNIT_STAND_STATE_STAND); if (me->IsAlive()) @@ -152,7 +152,7 @@ public: me->RemoveAllAuras(); me->ClearAllReactives(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetStandState(UNIT_STAND_STATE_DEAD); _bHasDied = true; @@ -184,7 +184,7 @@ public: //On resurrection, stop fake death and heal whitemane and resume fight if (Unit* Whitemane = ObjectAccessor::GetUnit(*me, instance->GetGuidData(DATA_WHITEMANE))) { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetStandState(UNIT_STAND_STATE_STAND); DoCast(Whitemane, SPELL_LAYONHANDS); diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp index ecbfe0748e0..85d4aac547f 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_jandice_barov.cpp @@ -89,14 +89,14 @@ public: break; case EVENT_ILLUSION: DoCast(SPELL_ILLUSION); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetDisplayId(11686); // Invisible Model DoModifyThreatPercent(me->GetVictim(), -99); events.ScheduleEvent(EVENT_SET_VISIBILITY, 3000); events.ScheduleEvent(EVENT_ILLUSION, 25000); break; case EVENT_SET_VISIBILITY: - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetDisplayId(11073); //Jandice Model break; default: diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp index 0bb98a2dda5..9bc6cfde5b1 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp @@ -128,7 +128,7 @@ class boss_kirtonos_the_herald : public CreatureScript events.ScheduleEvent(INTRO_1, 500); me->SetDisableGravity(true); me->SetReactState(REACT_PASSIVE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); Talk(EMOTE_SUMMONED); } @@ -180,7 +180,7 @@ class boss_kirtonos_the_herald : public CreatureScript case INTRO_5: me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR); me->SetVirtualItem(0, uint32(WEAPON_KIRTONOS_STAFF)); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->SetReactState(REACT_AGGRESSIVE); events.ScheduleEvent(INTRO_6, 5000); break; diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp index 2a4b86baae6..55e47a19bc6 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp @@ -259,7 +259,7 @@ public: case 1: { Creature* summon = pArchmage->SummonCreature(pArchmage->GetEntry(), SpawnLocation[4], TEMPSUMMON_TIMED_DESPAWN, 10000); - summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + summon->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); summon->SetReactState(REACT_DEFENSIVE); summon->CastSpell(summon, SPELL_ASHCROMBE_TELEPORT, true); summon->AI()->Talk(SAY_ARCHMAGE); diff --git a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp index f2159aac93a..5881f9ccd7f 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp @@ -154,7 +154,7 @@ class instance_stratholme : public InstanceMapScript break; case GO_GAUNTLET_GATE1: //weird, but unless flag is set, client will not respond as expected. DB bug? - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); + go->AddFlag(GO_FLAG_LOCKED); gauntletGate1GUID = go->GetGUID(); break; case GO_ZIGGURAT1: diff --git a/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp b/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp index 6f6284a6c22..69906ba6ed9 100644 --- a/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp +++ b/src/server/scripts/EasternKingdoms/SunkenTemple/instance_sunken_temple.cpp @@ -168,7 +168,7 @@ public: void UseStatue(GameObject* go) { go->SummonGameObject(GO_ATALAI_LIGHT1, *go, QuaternionData::fromEulerAnglesZYX(go->GetOrientation(), 0.0f, 0.0f), 0); - go->SetUInt32Value(GAMEOBJECT_FLAGS, 4); + go->AddFlag(GO_FLAG_INTERACT_COND); } /* diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp index 47d92199e95..5b1961191fb 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp @@ -157,7 +157,7 @@ public: IsIntro = true; Madrigosa->SetMaxHealth(me->GetMaxHealth()); Madrigosa->SetHealth(me->GetMaxHealth()); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->Attack(Madrigosa, true); Madrigosa->Attack(me, true); } @@ -171,7 +171,7 @@ public: void EndIntro() { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); Intro = false; IsIntro = false; } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp index b1e2822c5d3..647c5a1417a 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_eredar_twins.cpp @@ -159,7 +159,7 @@ public: instance->SetBossState(DATA_EREDAR_TWINS, DONE); } else - me->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); + me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE); } void SpellHitTarget(Unit* target, const SpellInfo* spell) override @@ -435,7 +435,7 @@ public: instance->SetBossState(DATA_EREDAR_TWINS, DONE); } else - me->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); + me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE); } void SpellHitTarget(Unit* target, const SpellInfo* spell) override @@ -669,7 +669,7 @@ public: void Reset() override { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); Initialize(); } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp index 3d30972e39e..0edada91c6b 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp @@ -147,8 +147,8 @@ public: events.Reset(); me->SetDisableGravity(true); - me->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 10); - me->SetFloatValue(UNIT_FIELD_COMBATREACH, 10); + me->SetBoundingRadius(10); + me->SetCombatReach(10); DespawnSummons(NPC_VAPOR_TRAIL); me->setActive(false); @@ -526,7 +526,7 @@ public: { npc_felmyst_vaporAI(Creature* creature) : ScriptedAI(creature) { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetSpeedRate(MOVE_RUN, 0.8f); } @@ -560,10 +560,10 @@ public: { npc_felmyst_trailAI(Creature* creature) : ScriptedAI(creature) { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); DoCast(me, SPELL_TRAIL_TRIGGER, true); me->SetTarget(me->GetGUID()); - me->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 0.01f); // core bug + me->SetBoundingRadius(0.01f); // core bug } void Reset() override { } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp index 2bc8748de93..8f9ac1aa871 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kalecgos.cpp @@ -163,7 +163,7 @@ public: me->setFaction(14); if (!bJustReset) //first reset at create { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->SetDisableGravity(false); me->SetVisible(true); me->SetStandState(UNIT_STAND_STATE_SLEEP); @@ -178,7 +178,7 @@ public: bJustReset = true; me->SetVisible(false); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); ScriptedAI::EnterEvadeMode(why); } @@ -203,7 +203,7 @@ public: { if (!TalkSequence) { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->InterruptNonMeleeSpells(true); me->RemoveAllAuras(); me->DeleteThreatList(); @@ -225,7 +225,7 @@ public: { if (ResetTimer <= diff) { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->SetDisableGravity(false); me->SetVisible(true); me->SetStandState(UNIT_STAND_STATE_SLEEP); diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp index 7efc6f31600..b8e8bb91aae 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp @@ -263,7 +263,7 @@ public: { Initialize(); me->SetDisableGravity(true); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->setActive(true); for (uint8 i = 0; i < 4; ++i) @@ -293,7 +293,7 @@ public: me->RemoveDynObject(SPELL_RING_OF_BLUE_FLAMES); for (uint8 i = 0; i < 4; ++i) if (GameObject* pOrb = GetOrb(i)) - pOrb->SetUInt32Value(GAMEOBJECT_FACTION, 0); + pOrb->SetFaction(0); } void EmpowerOrb(bool all) @@ -310,7 +310,7 @@ public: if (GameObject* pOrb = GetOrb(i)) { pOrb->CastSpell(me, SPELL_RING_OF_BLUE_FLAMES); - pOrb->SetUInt32Value(GAMEOBJECT_FACTION, 35); + pOrb->SetFaction(35); pOrb->setActive(true); pOrb->Refresh(); } @@ -322,7 +322,7 @@ public: if (GameObject* pOrb = GetOrb(urand(0, 3))) { pOrb->CastSpell(me, SPELL_RING_OF_BLUE_FLAMES); - pOrb->SetUInt32Value(GAMEOBJECT_FACTION, 35); + pOrb->SetFaction(35); pOrb->setActive(true); pOrb->Refresh(); @@ -351,7 +351,7 @@ public: { if (GameObject* pOrb = GetOrb(i)) { - if (pOrb->GetUInt32Value(GAMEOBJECT_FACTION) == 35) + if (pOrb->GetFaction() == 35) { pOrb->CastSpell(me, SPELL_RING_OF_BLUE_FLAMES); pOrb->setActive(true); @@ -370,12 +370,12 @@ public: bool OnGossipHello(Player* player, GameObject* go) override { - if (go->GetUInt32Value(GAMEOBJECT_FACTION) == 35) + if (go->GetFaction() == 35) { InstanceScript* instance = go->GetInstanceScript(); player->SummonCreature(NPC_POWER_OF_THE_BLUE_DRAGONFLIGHT, player->GetPositionX(), player->GetPositionY(), player->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN, 121000); player->CastSpell(player, SPELL_VENGEANCE_OF_THE_BLUE_FLIGHT, false); - go->SetUInt32Value(GAMEOBJECT_FACTION, 0); + go->SetFaction(0); if (Creature* pKalec = ObjectAccessor::GetCreature(*player, instance->GetGuidData(DATA_KALECGOS_KJ))) ENSURE_AI(boss_kalecgos_kj::boss_kalecgos_kjAI, pKalec->AI())->SetRingOfBlueFlames(); @@ -428,8 +428,8 @@ public: void InitializeAI() override { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->AddUnitState(UNIT_STATE_STUNNED); ScriptedAI::InitializeAI(); @@ -454,7 +454,7 @@ public: case NPC_ANVEENA: summoned->SetDisableGravity(true); summoned->CastSpell(summoned, SPELL_ANVEENA_PRISON, true); - summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + summoned->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); break; case NPC_KILJAEDEN: summoned->CastSpell(summoned, SPELL_REBIRTH, false); @@ -576,7 +576,7 @@ public: if (Creature* pKalec = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_KALECGOS_KJ))) pKalec->RemoveDynObject(SPELL_RING_OF_BLUE_FLAMES); - me->SetFloatValue(UNIT_FIELD_COMBATREACH, 12); + me->SetCombatReach(12.0f); summons.DespawnAll(); } @@ -603,8 +603,8 @@ public: { if (summoned->GetEntry() == NPC_ARMAGEDDON_TARGET) { - summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + summoned->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + summoned->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); // summoned->SetVisibility(VISIBILITY_OFF); //with this we cant see the armageddon visuals } else @@ -1031,7 +1031,7 @@ public: void Reset() override { Initialize(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE)); } void JustSummoned(Creature* summoned) override diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp index e9613d70aac..4ba225aa9fd 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp @@ -248,7 +248,7 @@ public: { _Reset(); Initialize(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetVisible(true); } @@ -295,7 +295,7 @@ public: _phase = PHASE_TWO; me->RemoveAllAuras(); DoCast(me, SPELL_OPEN_ALL_PORTALS, true); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); scheduler.Schedule(Seconds(6), [this](TaskContext /*context*/) { @@ -409,7 +409,7 @@ public: _scheduler.Schedule(Seconds(2), [this](TaskContext /*context*/) { me->SetReactState(REACT_AGGRESSIVE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); if (Creature* _summoner = ObjectAccessor::GetCreature(*me, _summonerGUID)) if (Unit* target = _summoner->AI()->SelectTarget(SELECT_TARGET_RANDOM, 0)) diff --git a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp index 473135f8cbf..5fe9366f036 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/boss_archaedas.cpp @@ -100,7 +100,7 @@ class boss_archaedas : public CreatureScript instance->SetData(0, 5); // respawn any dead minions me->setFaction(35); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetControlled(true, UNIT_STATE_ROOT); me->AddAura(SPELL_FREEZE_ANIM, me); } @@ -113,7 +113,7 @@ class boss_archaedas : public CreatureScript { DoCast(minion, SPELL_AWAKEN_VAULT_WALKER, flag); minion->CastSpell(minion, SPELL_ARCHAEDAS_AWAKEN, true); - minion->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + minion->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); minion->SetControlled(false, UNIT_STATE_ROOT); minion->setFaction(14); minion->RemoveAura(SPELL_MINION_FREEZE_ANIM); @@ -123,7 +123,7 @@ class boss_archaedas : public CreatureScript void EnterCombat(Unit* /*who*/) override { me->setFaction(14); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetControlled(false, UNIT_STATE_ROOT); } @@ -263,7 +263,7 @@ class npc_archaedas_minions : public CreatureScript Initialize(); me->setFaction(35); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetControlled(true, UNIT_STATE_ROOT); me->RemoveAllAuras(); me->AddAura(SPELL_MINION_FREEZE_ANIM, me); @@ -273,7 +273,7 @@ class npc_archaedas_minions : public CreatureScript { me->setFaction (14); me->RemoveAllAuras(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetControlled(false, UNIT_STATE_ROOT); bAmIAwake = true; } @@ -352,7 +352,7 @@ class npc_stonekeepers : public CreatureScript void Reset() override { me->setFaction(35); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetControlled(true, UNIT_STATE_ROOT); me->RemoveAllAuras(); me->AddAura(SPELL_MINION_FREEZE_ANIM, me); @@ -361,7 +361,7 @@ class npc_stonekeepers : public CreatureScript void EnterCombat(Unit* /*who*/) override { me->setFaction(14); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetControlled(false, UNIT_STATE_ROOT); } diff --git a/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp b/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp index f6e00183f7c..0dfb5cfe69d 100644 --- a/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp +++ b/src/server/scripts/EasternKingdoms/Uldaman/instance_uldaman.cpp @@ -122,7 +122,7 @@ class instance_uldaman : public InstanceMapScript case GO_ANCIENT_VAULT_DOOR: go->SetGoState(GO_STATE_READY); - go->SetUInt32Value(GAMEOBJECT_FLAGS, 33); + go->SetFlags(GameObjectFlags(GO_FLAG_IN_USE | GO_FLAG_NODESPAWN)); ancientVaultDoor = go->GetGUID(); if (m_auiEncounter[1] == DONE) @@ -142,7 +142,7 @@ class instance_uldaman : public InstanceMapScript if (m_auiEncounter[2] == DONE) { HandleGameObject(ObjectGuid::Empty, true, go); - go->SetUInt32Value(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND); + go->AddFlag(GO_FLAG_INTERACT_COND); } break; } @@ -152,7 +152,7 @@ class instance_uldaman : public InstanceMapScript { creature->setFaction(35); creature->RemoveAllAuras(); - creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + creature->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); creature->SetControlled(true, UNIT_STATE_ROOT); creature->AddAura(SPELL_MINION_FREEZE_ANIM, creature); } @@ -172,7 +172,7 @@ class instance_uldaman : public InstanceMapScript if (!go) return; - go->SetUInt32Value(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND); + go->AddFlag(GO_FLAG_INTERACT_COND); } void ActivateStoneKeepers() @@ -186,7 +186,7 @@ class instance_uldaman : public InstanceMapScript continue; target->SetControlled(false, UNIT_STATE_ROOT); target->setFaction(14); - target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + target->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); target->RemoveAura(SPELL_MINION_FREEZE_ANIM); return; // only want the first one we find @@ -209,7 +209,7 @@ class instance_uldaman : public InstanceMapScript if (!target || !target->IsAlive() || target->getFaction() == 14) continue; target->SetControlled(false, UNIT_STATE_ROOT); - target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + target->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); target->setFaction(14); target->RemoveAura(SPELL_MINION_FREEZE_ANIM); archaedas->CastSpell(target, SPELL_AWAKEN_VAULT_WALKER, true); @@ -275,7 +275,7 @@ class instance_uldaman : public InstanceMapScript ironaya->setFaction(415); ironaya->SetControlled(false, UNIT_STATE_ROOT); - ironaya->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + ironaya->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); ironaya->GetMotionMaster()->Clear(); ironaya->GetMotionMaster()->MovePoint(0, IronayaPoint); diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp index 3a46af6845d..8f585e0a8aa 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp @@ -93,7 +93,7 @@ class npc_voljin_zulaman : public CreatureScript { me->SetDisplayFromModel(0); if (_instance->GetData(DATA_ZULAMAN_STATE) == NOT_STARTED) - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); } void Reset() override @@ -109,9 +109,9 @@ class npc_voljin_zulaman : public CreatureScript if (me->GetCreatureTemplate()->GossipMenuId == menuId && !gossipListId) { _events.Reset(); - me->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); - me->SetUInt32Value(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_NONE); + me->SetMountDisplayId(0); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); + me->SetDynamicFlags(UNIT_DYNFLAG_NONE); _events.ScheduleEvent(EVENT_INTRO_MOVEPOINT_1, 1000); Talk(SAY_INTRO_1, player); me->SetWalk(true); @@ -149,7 +149,7 @@ class npc_voljin_zulaman : public CreatureScript case EVENT_BANGING_THE_GONG: DoCast(me, SPELL_BANGING_THE_GONG); if (GameObject* strangeGong = ObjectAccessor::GetGameObject(*me, _instance->GetGuidData(DATA_STRANGE_GONG))) - strangeGong->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + strangeGong->RemoveFlag(GO_FLAG_NOT_SELECTABLE); me->SetVirtualItem(0, uint32(ITEM_VIRTUAL_ITEM)); break; case EVENT_START_DOOR_OPENING_1: @@ -159,7 +159,7 @@ class npc_voljin_zulaman : public CreatureScript case EVENT_START_DOOR_OPENING_2: me->SetVirtualItem(0, uint32(0)); if (GameObject* strangeGong = ObjectAccessor::GetGameObject(*me, _instance->GetGuidData(DATA_STRANGE_GONG))) - strangeGong->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + strangeGong->AddFlag(GO_FLAG_NOT_SELECTABLE); _events.ScheduleEvent(EVENT_START_DOOR_OPENING_3, 500); break; case EVENT_START_DOOR_OPENING_3: diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp index d28425b2e86..f5177c98a97 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp @@ -246,7 +246,7 @@ class boss_mandokir : public CreatureScript switch (eventId) { case EVENT_SUMMON_OHGAN: - me->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0); + me->SetMountDisplayId(0); DoCast(me, SPELL_SUMMON_OHGAN, true); break; case EVENT_DECAPITATE: diff --git a/src/server/scripts/EasternKingdoms/zone_dun_morogh_area_coldridge_valley.cpp b/src/server/scripts/EasternKingdoms/zone_dun_morogh_area_coldridge_valley.cpp index a09363aae8c..79ad74fb8bd 100644 --- a/src/server/scripts/EasternKingdoms/zone_dun_morogh_area_coldridge_valley.cpp +++ b/src/server/scripts/EasternKingdoms/zone_dun_morogh_area_coldridge_valley.cpp @@ -68,8 +68,8 @@ public: { _tapped = true; _playerGUID = caster->GetGUID(); - me->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC); - me->SetUInt32Value(UNIT_FIELD_BYTES_1, UNIT_STAND_STATE_STAND); + me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC); + me->SetStandState(UNIT_STAND_STATE_STAND); _events.ScheduleEvent(EVENT_TURN_TO_PLAYER, Seconds(2)); } } diff --git a/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp b/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp index 95012fd1878..83b8b834df9 100644 --- a/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp @@ -75,7 +75,7 @@ public: switch (waypointId) { case 0: - me->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); + me->SetStandState(UNIT_STAND_STATE_STAND); if (GameObject* Cage = me->FindNearestGameObject(GO_CAGE, 20)) Cage->SetGoState(GO_STATE_ACTIVE); Talk(SAY_START, player); diff --git a/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp b/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp index 982c9a412b6..4709617f801 100644 --- a/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp +++ b/src/server/scripts/EasternKingdoms/zone_stranglethorn_vale.cpp @@ -73,7 +73,7 @@ public: void Reset() override { Initialize(); - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); + me->SetEmoteState(EMOTE_STATE_NONE); } void SpellHit(Unit* caster, const SpellInfo* spell) override @@ -85,7 +85,7 @@ public: { if (player->GetQuestStatus(QUEST_SAVING_YENNIKU) == QUEST_STATUS_INCOMPLETE) // Yenniku's Release { - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_STUN); + me->SetEmoteState(EMOTE_STATE_STUN); me->CombatStop(); // stop combat me->DeleteThreatList(); // unsure of this me->setFaction(FACTION_HORDE_GENERIC); // horde generic diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp index c5efcf8d9fa..cb8eda7fd7c 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp @@ -60,7 +60,7 @@ public: if (instance) { go->SetGoState(GO_STATE_ACTIVE); - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->AddFlag(GO_FLAG_NOT_SELECTABLE); instance->SetData(DATA_FIRE, instance->GetData(DATA_FIRE) + 1); return true; } @@ -189,7 +189,7 @@ public: npc_morriduneAI(Creature* creature) : npc_escortAI(creature) { Talk(SAY_MORRIDUNE_1); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); Start(false); } @@ -200,7 +200,7 @@ public: case 4: SetEscortPaused(true); me->SetFacingTo(1.775791f, true); - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); Talk(SAY_MORRIDUNE_2); break; } diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp index 8f627581763..0e8bfa1cd10 100644 --- a/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp +++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/instance_blackfathom_deeps.cpp @@ -100,12 +100,12 @@ public: case GO_SHRINE_OF_GELIHAST: shrineOfGelihastGUID = go->GetGUID(); if (GetBossState(DATA_GELIHAST) != DONE) - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->AddFlag(GO_FLAG_NOT_SELECTABLE); break; case GO_ALTAR_OF_THE_DEEPS: altarOfTheDeepsGUID = go->GetGUID(); if (GetBossState(DATA_AKU_MAI) != DONE) - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->AddFlag(GO_FLAG_NOT_SELECTABLE); break; case GO_AKU_MAI_DOOR: if (GetBossState(DATA_AKU_MAI) == DONE) @@ -176,13 +176,13 @@ public: case DATA_GELIHAST: if (state == DONE) if (GameObject* go = instance->GetGameObject(shrineOfGelihastGUID)) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); break; case DATA_AKU_MAI: if (state == DONE) if (GameObject* go = instance->GetGameObject(altarOfTheDeepsGUID)) { - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); go->SummonCreature(NPC_MORRIDUNE, SpawnsLocation[4], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300000); } break; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp index fbe35df5c96..a7b4305ede4 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp @@ -128,7 +128,7 @@ public: ArchimondeGUID = instance->GetGuidData(DATA_ARCHIMONDE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); } void EnterCombat(Unit* /*who*/) override { } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp index 7f27c2e5166..28bc1a2f90f 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp @@ -405,7 +405,7 @@ void hyjalAI::Reset() } //Flags - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); //Reset Instance Data for trash count if ((!instance->GetData(DATA_ALLIANCE_RETREAT) && me->GetEntry() == JAINA) || (instance->GetData(DATA_ALLIANCE_RETREAT) && me->GetEntry() == THRALL)) @@ -598,7 +598,7 @@ void hyjalAI::StartEvent(Player* player) CheckTimer = 5000; PlayerGUID = player->GetGUID(); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); instance->DoUpdateWorldState(WORLD_STATE_WAVES, 0); instance->DoUpdateWorldState(WORLD_STATE_ENEMY, 0); @@ -630,7 +630,7 @@ void hyjalAI::Retreat() Creature* JainaDummy = me->SummonCreature(JAINA, JainaDummySpawn[0][0], JainaDummySpawn[0][1], JainaDummySpawn[0][2], JainaDummySpawn[0][3], TEMPSUMMON_TIMED_DESPAWN, 60000); if (JainaDummy) { - JainaDummy->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + JainaDummy->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); ENSURE_AI(hyjalAI, JainaDummy->AI())->IsDummy = true; DummyGuid = JainaDummy->GetGUID(); } @@ -640,7 +640,7 @@ void hyjalAI::Retreat() } SpawnVeins(); Overrun = true; - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);//cant talk after overrun event started + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);//cant talk after overrun event started } void hyjalAI::SpawnVeins() @@ -834,7 +834,7 @@ void hyjalAI::UpdateAI(uint32 diff) } EventBegun = false; CheckTimer = 0; - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); BossGUID[i].Clear(); instance->DoUpdateWorldState(WORLD_STATE_ENEMY, 0); // Reset world state for enemies to disable it } @@ -997,7 +997,7 @@ void hyjalAI::DoOverrun(uint32 faction, const uint32 diff) { (*itr)->CastSpell(*itr, SPELL_TELEPORT_VISUAL, true); (*itr)->setFaction(35);//make them friendly so mobs won't attack them - (*itr)->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + (*itr)->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); } } DoCast(me, SPELL_TELEPORT_VISUAL); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp index b69fd874832..2f1fad60e10 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal_trash.cpp @@ -404,7 +404,7 @@ void hyjal_trashAI::JustDied(Unit* /*killer*/) instance->SetData(DATA_TRASH, 0);//signal trash is dead if ((instance->GetData(DATA_RAIDDAMAGE) < MINRAIDDAMAGE && !me->isWorldBoss()) || (damageTaken < me->GetMaxHealth()/4 && me->isWorldBoss())) - me->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);//no loot + me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE);//no loot } class npc_giant_infernal : public CreatureScript @@ -420,8 +420,8 @@ public: meteor = false;//call once! CanMove = false; Delay = rand32() % 30000; - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetDisplayId(MODEL_INVIS); go = false; Reset(); @@ -479,9 +479,9 @@ public: } else if (!CanMove){ if (spawnTimer <= diff) { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - me->SetDisplayId(me->GetUInt32Value(UNIT_FIELD_NATIVEDISPLAYID)); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + me->SetDisplayId(me->GetNativeDisplayId()); CanMove = true; if (instance->GetData(DATA_ALLIANCE_RETREAT) && !instance->GetData(DATA_HORDE_RETREAT)) { @@ -674,7 +674,7 @@ public: } if (waypointId == LastOverronPos && IsOverrun) { - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_ATTACK_UNARMED); + me->SetEmoteState(EMOTE_ONESHOT_ATTACK_UNARMED); if ((faction == 0 && LastOverronPos == 17) || (faction == 1 && LastOverronPos == 21)) { me->setDeathState(DEAD); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp index a64a6cab3b8..94bd1acab74 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp @@ -148,7 +148,7 @@ public: if (HealthBelowPct(1)) { //Handle Escape Event: Don't forget to add Player::RewardPlayerAndGroupAtEvent - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); uiOutroStep = 1; Phase = OUTRO; return; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp index 2390193473e..9caca258c5e 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp @@ -297,7 +297,7 @@ public: } CloseGossipMenuFor(player); ai->SetDespawnAtFar(false); - creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + creature->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); return true; } @@ -420,14 +420,14 @@ public: bStepping = true; step = 0; - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); bossEvent = DATA_MEATHOOK; gossipStep = 0; } void AttackStart(Unit* who) override { - if (who && !who->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC)) + if (who && !who->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC)) npc_escortAI::AttackStart(who); } @@ -451,7 +451,7 @@ public: if (Creature* temp = me->SummonCreature((uint32)RiftAndSpawnsLocations[i][0], RiftAndSpawnsLocations[timeRiftID][1], RiftAndSpawnsLocations[timeRiftID][2], RiftAndSpawnsLocations[timeRiftID][3], RiftAndSpawnsLocations[timeRiftID][4], TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 900000)) { guidVector[i-timeRiftID-1] = temp->GetGUID(); - temp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + temp->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); temp->SetReactState(REACT_PASSIVE); temp->GetMotionMaster()->MovePoint(0, RiftAndSpawnsLocations[i][1], RiftAndSpawnsLocations[i][2], RiftAndSpawnsLocations[i][3]); if ((uint32)RiftAndSpawnsLocations[i][0] == NPC_EPOCH) @@ -508,7 +508,7 @@ public: break; case 8: gossipStep = 1; - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); SetHoldState(true); break; case 12: @@ -533,7 +533,7 @@ public: break; case 20: gossipStep = 2; - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); SetRun(false); SetHoldState(true); break; @@ -579,7 +579,7 @@ public: case 45: SetRun(true); gossipStep = 4; - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); SetHoldState(true); break; case 48: @@ -595,7 +595,7 @@ public: break; case 51: gossipStep = 5; - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); SetHoldState(true); break; } @@ -1043,7 +1043,7 @@ public: { disguised2->UpdateEntry(NPC_INFINITE_HUNTER); //Make them unattackable - disguised2->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + disguised2->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); disguised2->SetReactState(REACT_PASSIVE); } JumpToNextStep(2000); @@ -1053,7 +1053,7 @@ public: { disguised1->UpdateEntry(NPC_INFINITE_AGENT); //Make them unattackable - disguised1->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + disguised1->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); disguised1->SetReactState(REACT_PASSIVE); } JumpToNextStep(2000); @@ -1063,7 +1063,7 @@ public: { disguised0->UpdateEntry(NPC_INFINITE_ADVERSARY); //Make them unattackable - disguised0->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + disguised0->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); disguised0->SetReactState(REACT_PASSIVE); } JumpToNextStep(2000); @@ -1077,7 +1077,7 @@ public: for (uint32 i = 0; i< ENCOUNTER_DRACONIAN_NUMBER; ++i) if (Creature* temp = ObjectAccessor::GetCreature(*me, infiniteDraconianGUID[i])) { - temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + temp->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); temp->SetReactState(REACT_AGGRESSIVE); } JumpToNextStep(5000); @@ -1135,8 +1135,7 @@ public: if (Creature* epoch = ObjectAccessor::GetCreature(*me, epochGUID)) { //Make Epoch attackable - epoch->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); - epoch->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + epoch->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE)); epoch->SetReactState(REACT_AGGRESSIVE); } @@ -1147,7 +1146,7 @@ public: if (instance->GetBossState(DATA_EPOCH) == DONE) { gossipStep = 3; - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); bStepping = false; bossEvent = DATA_MAL_GANIS; JumpToNextStep(15000); @@ -1186,7 +1185,7 @@ public: case 87: if (Creature* malganis = ObjectAccessor::GetCreature(*me, malganisGUID)) { - malganis->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_UNK_6 | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_UNK_15); + malganis->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_UNK_6 | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_UNK_15)); malganis->SetReactState(REACT_AGGRESSIVE); } JumpToNextStep(1000); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp index 88aabb8a1c6..a6c7f10b6ac 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp @@ -208,7 +208,7 @@ class instance_culling_of_stratholme : public InstanceMapScript if (state == DONE) { if (GameObject* go = instance->GetGameObject(_malGanisChestGUID)) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); instance->SummonCreature(NPC_CHROMIE_3, ChromieSummonPos[1]); } break; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp index cb040c983be..ae3a81cb489 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp @@ -342,7 +342,7 @@ public: break; case 30: SetEscortPaused(true); - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); SetRun(false); break; case 31: @@ -366,7 +366,7 @@ public: me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); //make horsie run off SetEscortPaused(true); - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); instance->SetData(TYPE_THRALL_PART2, DONE); SetRun(); break; @@ -475,7 +475,7 @@ public: } void StartWP() { - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); SetEscortPaused(false); } void DoMount() diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp index c26c1ad1772..05c2f45d736 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp @@ -299,8 +299,8 @@ public: TEMPSUMMON_CORPSE_DESPAWN, 0); if (temp) { - temp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - temp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + temp->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + temp->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); if (Creature* boss = SummonedPortalBoss(temp)) { diff --git a/src/server/scripts/Kalimdor/Firelands/boss_alysrazor.cpp b/src/server/scripts/Kalimdor/Firelands/boss_alysrazor.cpp index 016768cc777..01142499089 100644 --- a/src/server/scripts/Kalimdor/Firelands/boss_alysrazor.cpp +++ b/src/server/scripts/Kalimdor/Firelands/boss_alysrazor.cpp @@ -181,7 +181,7 @@ class npc_harbinger_of_flame : public CreatureScript void EnterCombat(Unit* /*target*/) override { - for (ObjectGuid const& birdGuid : me->GetChannelObjects()) + for (ObjectGuid const& birdGuid : me->m_unitData->ChannelObjects) if (Creature* bird = ObjectAccessor::GetCreature(*me, birdGuid)) DoZoneInCombat(bird, 200.0f); @@ -298,7 +298,7 @@ class npc_blazing_monstrosity : public CreatureScript // Our passenger is another vehicle (boardable by players) DoCast(passenger, SPELL_SHARE_HEALTH, true); passenger->setFaction(35); - passenger->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + passenger->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); // Hack to relocate vehicle on vehicle so exiting players are not moved under map Movement::MoveSplineInit init(passenger); diff --git a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp index 6d97bc54bdc..3041202201e 100644 --- a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp +++ b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp @@ -151,7 +151,7 @@ public: if (instance->GetData(DATA_DEAD_ELEMENTALS) == 4) { // Set to combat automatically, Brann's event won't repeat - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); events.SetPhase(PHASE_COMBAT); ScheduleCombatEvents(); me->SetHomePosition(AnraphetActivatePos); @@ -235,7 +235,7 @@ public: events.ScheduleEvent(EVENT_ANRAPHET_READY, 6000, 0, PHASE_INTRO); break; case EVENT_ANRAPHET_READY: - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); events.SetPhase(PHASE_COMBAT); ScheduleCombatEvents(); break; @@ -341,7 +341,7 @@ class npc_brann_bronzebeard_anraphet : public CreatureScript _instance->SetBossState(DATA_VAULT_OF_LIGHTS, IN_PROGRESS); _currentPoint = 0; events.Reset(); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); me->SetWalk(true); Talk(BRANN_SAY_DOOR_INTRO); events.ScheduleEvent(EVENT_BRANN_UNLOCK_DOOR, 7500); @@ -365,7 +365,7 @@ class npc_brann_bronzebeard_anraphet : public CreatureScript break; } case ACTION_ANRAPHET_DIED: - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); events.ScheduleEvent(EVENT_BRANN_MOVE_INTRO, 1000); break; } @@ -412,7 +412,7 @@ class npc_brann_bronzebeard_anraphet : public CreatureScript break; case EVENT_BRANN_SAY_GET_IT: Talk(BRANN_SAY_GET_IT); - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); break; case EVENT_BRANN_SET_ORIENTATION_4: me->SetFacingTo(3.141593f); diff --git a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_earthrager_ptah.cpp b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_earthrager_ptah.cpp index c18c53c04af..0a2c688adbe 100644 --- a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_earthrager_ptah.cpp +++ b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_earthrager_ptah.cpp @@ -233,7 +233,7 @@ public: // Spell not in DBC, it is not cast either, according to sniffs if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100.0f, true)) if (Creature* quicksand = me->SummonCreature(NPC_QUICKSAND, *target)) - quicksand->SetUInt32Value(UNIT_CREATED_BY_SPELL, SPELL_SUMMON_QUICKSAND); + quicksand->SetCreatedBySpell(SPELL_SUMMON_QUICKSAND); events.ScheduleEvent(EVENT_QUICKSAND, 10000, 0, PHASE_DISPERSE); break; } @@ -293,8 +293,8 @@ public: { if (Unit* ptah = GetCaster()) { - ptah->SetFlag(UNIT_FIELD_FLAGS, uint32(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_UNK_29 | UNIT_FLAG_UNK_31)); - ptah->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH); + ptah->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_UNK_29 | UNIT_FLAG_UNK_31)); + ptah->AddUnitFlag2(UNIT_FLAG2_FEIGN_DEATH); } } @@ -302,8 +302,8 @@ public: { if (Unit* ptah = GetCaster()) { - ptah->RemoveFlag(UNIT_FIELD_FLAGS, uint32(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_UNK_29 | UNIT_FLAG_UNK_31)); - ptah->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH); + ptah->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_UNK_29 | UNIT_FLAG_UNK_31)); + ptah->RemoveUnitFlag2(UNIT_FLAG2_FEIGN_DEATH); } } diff --git a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_temple_guardian_anhuur.cpp b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_temple_guardian_anhuur.cpp index b16a15b0507..bfd043ea9ef 100644 --- a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_temple_guardian_anhuur.cpp +++ b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_temple_guardian_anhuur.cpp @@ -131,7 +131,7 @@ public: DoCast(me, SPELL_TELEPORT); DoCast(me, SPELL_SHIELD_OF_LIGHT); - me->SetFlag(UNIT_FIELD_FLAGS, uint32(UNIT_FLAG_UNK_31)); + me->AddUnitFlag(UNIT_FLAG_UNK_31); DoCastAOE(SPELL_ACTIVATE_BEACONS); @@ -357,7 +357,7 @@ class spell_anhuur_activate_beacons : public SpellScriptLoader void Activate(SpellEffIndex index) { PreventHitDefaultEffect(index); - GetHitGObj()->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + GetHitGObj()->RemoveFlag(GO_FLAG_NOT_SELECTABLE); } void Register() override diff --git a/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp b/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp index 737f4153fc1..f538da49848 100644 --- a/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp +++ b/src/server/scripts/Kalimdor/Maraudon/boss_noxxion.cpp @@ -84,7 +84,7 @@ public: { //Become visible again me->setFaction(14); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); //Noxxion model me->SetDisplayId(11172); Invisible = false; @@ -124,7 +124,7 @@ public: //me->m_canMove = true; me->InterruptNonMeleeSpells(false); me->setFaction(35); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); // Invisible Model me->SetDisplayId(11686); SummonAdds(me->GetVictim()); diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp index 48dbac93455..8c63c588727 100644 --- a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp +++ b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp @@ -230,7 +230,7 @@ public: case 9: me->SetCanFly(false); me->SetDisableGravity(false); - me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER); + me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, false); if (Creature* trigger = ObjectAccessor::GetCreature(*me, triggerGUID)) me->Kill(trigger); me->SetReactState(REACT_AGGRESSIVE); @@ -248,7 +248,7 @@ public: case 10: me->SetCanFly(true); me->SetDisableGravity(true); - me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER); + me->SetAnimTier(UnitBytes1_Flags(UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER), false); me->SetFacingTo(me->GetOrientation() + float(M_PI), true); if (Creature * trigger = me->SummonCreature(NPC_TRIGGER, MiddleRoomLocation, TEMPSUMMON_CORPSE_DESPAWN)) triggerGUID = trigger->GetGUID(); diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp index f56a67c2046..17000ec1477 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/instance_razorfen_downs.cpp @@ -71,7 +71,7 @@ public: case GO_GONG: goGongGUID = gameObject->GetGUID(); if (GetBossState(DATA_TUTEN_KASH) == DONE) - gameObject->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + gameObject->AddFlag(GO_FLAG_NOT_SELECTABLE); break; case GO_IDOL_OVEN_FIRE: case GO_IDOL_CUP_FIRE: @@ -114,7 +114,7 @@ public: case IN_PROGRESS: { if (GameObject* go = instance->GetGameObject(goGongGUID)) - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->AddFlag(GO_FLAG_NOT_SELECTABLE); switch (gongWave) { @@ -148,7 +148,7 @@ public: { fiendsKilled = 0; if (GameObject* go = instance->GetGameObject(goGongGUID)) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); } break; case NPC_TOMB_REAVER: @@ -156,7 +156,7 @@ public: { reaversKilled = 0; if (GameObject* go = instance->GetGameObject(goGongGUID)) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); } break; } diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp index 2ca11c6508b..080373b1197 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp @@ -107,7 +107,7 @@ public: channeling = false; eventProgress = 0; spawnerCount = 0; - me->SetFlag(UNIT_NPC_FLAGS, GOSSIP_OPTION_QUESTGIVER); + me->AddNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); } } @@ -136,7 +136,7 @@ public: { eventInProgress = true; Talk(SAY_QUEST_ACCEPTED); - me->RemoveFlag(UNIT_NPC_FLAGS, GOSSIP_OPTION_QUESTGIVER); + me->RemoveNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); me->setFaction(FACTION_ESCORT); me->GetMotionMaster()->MovePath(PATH_ESCORT, false); } diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp b/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp index 8cd91b4e8f5..ab0a57bfbff 100644 --- a/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp +++ b/src/server/scripts/Kalimdor/RazorfenKraul/instance_razorfen_kraul.cpp @@ -58,7 +58,7 @@ public: switch (go->GetEntry()) { case 21099: DoorWardGUID = go->GetGUID(); break; - case 20920: go->SetUInt32Value(GAMEOBJECT_FACTION, 0); break; // big fat fugly hack + case 20920: go->SetFaction(0); break; // big fat fugly hack } } @@ -67,7 +67,7 @@ public: if (WardKeeperDeath == WARD_KEEPERS_NR) if (GameObject* go = instance->GetGameObject(DoorWardGUID)) { - go->SetUInt32Value(GAMEOBJECT_FLAGS, 33); + go->AddFlag(GameObjectFlags(GO_FLAG_IN_USE | GO_FLAG_NODESPAWN)); go->SetGoState(GO_STATE_ACTIVE); } } diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp index 4b345425881..16bccda22a1 100644 --- a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp +++ b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp @@ -104,7 +104,7 @@ public: break; case 45: Talk(SAY_WIN, player); - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); + me->AddNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); player->GroupEventHappens(QUEST_WILLIX_THE_IMPORTER, me); break; case 46: @@ -177,7 +177,7 @@ public: { go->SetRespawnTime(5 * MINUTE); go->Refresh(); - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND); + go->RemoveFlag(GO_FLAG_INTERACT_COND); } IsMovementActive = false; @@ -196,7 +196,7 @@ public: tubbersInRange.remove_if([](GameObject* go) { - return go->isSpawned() || !go->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND); + return go->isSpawned() || !go->HasFlag(GO_FLAG_INTERACT_COND); }); tubbersInRange.sort(Trinity::ObjectDistanceOrderPred(me)); diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp index 4f609ce0991..2c1d743ff75 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp @@ -93,7 +93,7 @@ public: void JustDied(Unit* /*killer*/) override { if (instance->GetData(DATA_BUG_TRIO_DEATH) < 2)// Unlootable if death - me->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); + me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE); instance->SetData(DATA_BUG_TRIO_DEATH, 1); } @@ -187,7 +187,7 @@ public: { instance->SetData(DATA_VEM_DEATH, 0); if (instance->GetData(DATA_BUG_TRIO_DEATH) < 2)// Unlootable if death - me->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); + me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE); instance->SetData(DATA_BUG_TRIO_DEATH, 1); } @@ -281,7 +281,7 @@ public: void JustDied(Unit* /*killer*/) override { if (instance->GetData(DATA_BUG_TRIO_DEATH) < 2)// Unlootable if death - me->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); + me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE); instance->SetData(DATA_BUG_TRIO_DEATH, 1); for (uint8 i = 0; i < 10; ++i) diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp index 892d2b8dc64..fe80c09eb10 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_cthun.cpp @@ -210,7 +210,7 @@ public: //Reset flags me->RemoveAurasDueToSpell(SPELL_RED_COLORATION); me->RemoveAurasDueToSpell(SPELL_FREEZE_ANIM); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE)); me->SetVisible(true); //Reset Phase @@ -421,7 +421,7 @@ public: me->RemoveAurasDueToSpell(SPELL_RED_COLORATION); //Reset to normal emote state and prevent select and attack - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE)); //Remove Target field me->SetTarget(ObjectGuid::Empty); @@ -527,7 +527,7 @@ public: //Reset flags me->RemoveAurasDueToSpell(SPELL_TRANSFORM); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE)); me->SetVisible(false); instance->SetData(DATA_CTHUN_PHASE, PHASE_NOT_STARTED); @@ -641,7 +641,7 @@ public: me->SetFullHealth(); me->SetVisible(true); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE)); //Emerging phase //AttackStart(ObjectAccessor::GetUnit(*me, HoldpPlayer)); diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp index 0215634ee99..7b1f448b6fd 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp @@ -111,7 +111,7 @@ public: { //Cast me->HandleEmoteCommand(EMOTE_ONESHOT_SUBMERGE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->setFaction(35); DoCast(me, SPELL_DIRTMOUND_PASSIVE); @@ -134,7 +134,7 @@ public: //Back_Timer if (Submerged && Back_Timer <= diff) { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->setFaction(14); DoCastVictim(SPELL_GROUND_RUPTURE); diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp index f296d78878a..31c00a7aaa0 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp @@ -126,7 +126,7 @@ struct boss_twinemperorsAI : public ScriptedAI if (ohealth <= 0) { pOtherBoss->setDeathState(JUST_DIED); - pOtherBoss->SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); + pOtherBoss->AddDynamicFlag(UNIT_DYNFLAG_LOOTABLE); } } } @@ -138,7 +138,7 @@ struct boss_twinemperorsAI : public ScriptedAI { pOtherBoss->SetHealth(0); pOtherBoss->setDeathState(JUST_DIED); - pOtherBoss->SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); + pOtherBoss->AddDynamicFlag(UNIT_DYNFLAG_LOOTABLE); ENSURE_AI(boss_twinemperorsAI, pOtherBoss->AI())->DontYellWhenDead = true; } if (!DontYellWhenDead) // I hope AI is not threaded diff --git a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp index a8eb3f0b3b2..c4b7538d988 100644 --- a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp +++ b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp @@ -99,7 +99,7 @@ public: creature->AI()->Talk(SAY_MAKE_PREPARATIONS); creature->setFaction(250); - creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + creature->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); ENSURE_AI(npc_escortAI, (creature->AI()))->Start(false, false, player->GetGUID()); ENSURE_AI(npc_escortAI, (creature->AI()))->SetDespawnAtFar(false); @@ -144,7 +144,7 @@ public: currentEvent = 0; eventProgress = 0; me->setActive(true); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); } uint32 eventTimer; diff --git a/src/server/scripts/Kalimdor/zone_ashenvale.cpp b/src/server/scripts/Kalimdor/zone_ashenvale.cpp index 070f68f1897..d92f0ab0574 100644 --- a/src/server/scripts/Kalimdor/zone_ashenvale.cpp +++ b/src/server/scripts/Kalimdor/zone_ashenvale.cpp @@ -98,7 +98,7 @@ public: switch (waypointId) { case 0: - me->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); + me->SetStandState(UNIT_STAND_STATE_STAND); if (GameObject* Cage = me->FindNearestGameObject(GO_CAGE, 20)) Cage->SetGoState(GO_STATE_ACTIVE); break; @@ -246,7 +246,7 @@ public: if (GameObject* go = GetClosestGameObjectWithEntry(me, GO_NAGA_BRAZIER, INTERACTION_DISTANCE*2)) { - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); SetEscortPaused(true); } break; diff --git a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp index f1ddefb28f7..31c97ea5305 100644 --- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp @@ -86,8 +86,8 @@ public: DoCastSelf(SPELL_IRRIDATION, true); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); + me->AddUnitFlag(UNIT_FLAG_PVP_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_IN_COMBAT); me->SetHealth(me->CountPctFromMaxHealth(10)); me->SetStandState(UNIT_STAND_STATE_SLEEP); } @@ -116,7 +116,7 @@ public: _canAskForHelp = false; _canUpdateEvents = true; - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_PVP_ATTACKABLE); me->SetStandState(UNIT_STAND_STATE_STAND); _playerGUID = caster->GetGUID(); @@ -203,7 +203,7 @@ public: { Initialize(); NormFaction = creature->getFaction(); - NpcFlags = creature->GetUInt32Value(UNIT_NPC_FLAGS); + NpcFlags = NPCFlags(creature->m_unitData->NpcFlags[0]); } void Initialize() @@ -222,7 +222,7 @@ public: Initialize(); me->setFaction(NormFaction); - me->SetUInt32Value(UNIT_NPC_FLAGS, NpcFlags); + me->SetNpcFlags(NpcFlags); } void EnterCombat(Unit* who) override @@ -265,7 +265,7 @@ public: private: uint32 NormFaction; - uint32 NpcFlags; + NPCFlags NpcFlags; uint32 DynamiteTimer; uint32 EmoteTimer; bool IsTreeEvent; @@ -292,7 +292,7 @@ public: void Reset() override { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); + me->AddUnitFlag(UNIT_FLAG_IN_COMBAT); me->SetHealth(me->CountPctFromMaxHealth(15)); switch (urand(0, 1)) { @@ -413,7 +413,7 @@ public: _events.ScheduleEvent(EVENT_STAND, Seconds(2)); break; case EVENT_STAND: // Remove kneel standstate. Using a separate delayed event because it causes unwanted delay before starting waypoint movement. - me->SetByteValue(UNIT_FIELD_BYTES_1, 0, 0); + me->SetStandState(UNIT_STAND_STATE_STAND); break; case EVENT_TALK_END: if (Player* player = ObjectAccessor::GetPlayer(*me, _player)) @@ -510,7 +510,7 @@ public: { SparkGUID = Spark->GetGUID(); Spark->setActive(true); - Spark->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + Spark->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); } SayTimer = 8000; } @@ -640,7 +640,7 @@ public: { if (Creature* ravager = go->FindNearestCreature(NPC_DEATH_RAVAGER, 5.0f, true)) { - ravager->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + ravager->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); ravager->SetReactState(REACT_AGGRESSIVE); ravager->AI()->AttackStart(player); } @@ -674,7 +674,7 @@ public: { Initialize(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->SetReactState(REACT_PASSIVE); } diff --git a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp index 303d2192fb8..13fe48efc7f 100644 --- a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp @@ -631,7 +631,7 @@ public: _explosivesGuids.clear(); if (Creature* sironas = me->FindNearestCreature(NPC_SIRONAS, SIZE_OF_GRIDS)) { - sironas->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + sironas->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); me->SetFacingToObject(sironas); } _moveTimer = 1 * IN_MILLISECONDS; diff --git a/src/server/scripts/Kalimdor/zone_desolace.cpp b/src/server/scripts/Kalimdor/zone_desolace.cpp index d972cd9d0fe..eb2aab5c353 100644 --- a/src/server/scripts/Kalimdor/zone_desolace.cpp +++ b/src/server/scripts/Kalimdor/zone_desolace.cpp @@ -94,7 +94,7 @@ public: } else if (spell->Id == SPELL_KODO_KOMBO_GOSSIP) { - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation()); me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MoveIdle(); diff --git a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp index 6f211b6865c..7932f19317a 100644 --- a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp +++ b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp @@ -203,7 +203,7 @@ public: return; me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation()); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); SetCombatMovement(true); if (me->IsInCombat()) diff --git a/src/server/scripts/Kalimdor/zone_felwood.cpp b/src/server/scripts/Kalimdor/zone_felwood.cpp index 7482c2f92b8..ddc37d07c60 100644 --- a/src/server/scripts/Kalimdor/zone_felwood.cpp +++ b/src/server/scripts/Kalimdor/zone_felwood.cpp @@ -63,10 +63,10 @@ public: } else { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); } - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); + me->RemoveNpcFlag(UNIT_NPC_FLAG_SPELLCLICK); me->CastSpell(me, SPELL_STAND); me->GetMotionMaster()->MoveRandom(8.0f); events.ScheduleEvent(EVENT_CHECK_OOC, 20000); @@ -234,7 +234,7 @@ public: spell_ruumbos_silly_dance() : SpellScriptLoader("spell_ruumbos_silly_dan { if (Player* player = GetHitPlayer()) { - player->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_DANCE); + player->SetEmoteState(EMOTE_STATE_DANCE); if (player->GetMapId() == MAP_KALIMDOR) { diff --git a/src/server/scripts/Kalimdor/zone_moonglade.cpp b/src/server/scripts/Kalimdor/zone_moonglade.cpp index 7a22f94cac6..70b5574f95f 100644 --- a/src/server/scripts/Kalimdor/zone_moonglade.cpp +++ b/src/server/scripts/Kalimdor/zone_moonglade.cpp @@ -52,7 +52,7 @@ public: { npc_omenAI(Creature* creature) : ScriptedAI(creature) { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); me->GetMotionMaster()->MovePoint(1, 7549.977f, -2855.137f, 456.9678f); } @@ -66,7 +66,7 @@ public: if (pointId == 1) { me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation()); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); if (Player* player = me->SelectNearestPlayer(40.0f)) AttackStart(player); } diff --git a/src/server/scripts/Kalimdor/zone_silithus.cpp b/src/server/scripts/Kalimdor/zone_silithus.cpp index 70b99347cf8..7b7f94a63f3 100644 --- a/src/server/scripts/Kalimdor/zone_silithus.cpp +++ b/src/server/scripts/Kalimdor/zone_silithus.cpp @@ -360,7 +360,7 @@ public: { Initialize(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); } void HandleAnimation() @@ -844,7 +844,7 @@ public: if (Creature* spawn = me->SummonCreature(WavesInfo[WaveCount].CreatureId, SpawnLocation[i], TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, desptimer)) { if (spawn->GetEntry() == NPC_KALDOREI_INFANTRY) - spawn->SetUInt32Value(UNIT_FIELD_DISPLAYID, 15427 + rand32() % 4); + spawn->SetDisplayId(15427 + rand32() % 4); if (i >= 30) WaveCount = 1; if (i >= 33) WaveCount = 2; if (i >= 45) WaveCount = 3; @@ -978,25 +978,25 @@ public: if (Merithra) { - Merithra->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); - Merithra->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); - Merithra->SetUInt32Value(UNIT_FIELD_DISPLAYID, MERITHRA_NIGHT_ELF_FORM); + Merithra->SetNpcFlags(UNIT_NPC_FLAG_NONE); + Merithra->SetStandState(UNIT_STAND_STATE_STAND); + Merithra->SetDisplayId(MERITHRA_NIGHT_ELF_FORM); Merithra->setFaction(35); } if (Caelestrasz) { - Caelestrasz->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); - Caelestrasz->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); - Caelestrasz->SetUInt32Value(UNIT_FIELD_DISPLAYID, CAELESTRASZ_NIGHT_ELF_FORM); + Caelestrasz->SetNpcFlags(UNIT_NPC_FLAG_NONE); + Caelestrasz->SetStandState(UNIT_STAND_STATE_STAND); + Caelestrasz->SetDisplayId(CAELESTRASZ_NIGHT_ELF_FORM); Caelestrasz->setFaction(35); } if (Arygos) { - Arygos->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); - Arygos->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); - Arygos->SetUInt32Value(UNIT_FIELD_DISPLAYID, ARYGOS_GNOME_FORM); + Arygos->SetNpcFlags(UNIT_NPC_FLAG_NONE); + Arygos->SetStandState(UNIT_STAND_STATE_STAND); + Arygos->SetDisplayId(ARYGOS_GNOME_FORM); Arygos->setFaction(35); } @@ -1224,7 +1224,7 @@ class go_wind_stone : public GameObjectScript summons->AI()->Talk(YELL_ROYAL_AGGRO); break; } - summons->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + summons->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); summons->SendMeleeAttackStart(player); summons->CombatStart(player); } diff --git a/src/server/scripts/Kalimdor/zone_tanaris.cpp b/src/server/scripts/Kalimdor/zone_tanaris.cpp index 16ea0c3d5b4..c071bfd0088 100644 --- a/src/server/scripts/Kalimdor/zone_tanaris.cpp +++ b/src/server/scripts/Kalimdor/zone_tanaris.cpp @@ -321,8 +321,8 @@ public: { creature->setFaction(113); creature->SetFullHealth(); - creature->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); - creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + creature->SetStandState(UNIT_STAND_STATE_STAND); + creature->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); creature->AI()->Talk(SAY_OOX_START); if (npc_escortAI* pEscortAI = CAST_AI(npc_OOX17::npc_OOX17AI, creature->AI())) diff --git a/src/server/scripts/Kalimdor/zone_the_barrens.cpp b/src/server/scripts/Kalimdor/zone_the_barrens.cpp index 5a6380e8289..1090d3e7c21 100644 --- a/src/server/scripts/Kalimdor/zone_the_barrens.cpp +++ b/src/server/scripts/Kalimdor/zone_the_barrens.cpp @@ -421,8 +421,8 @@ public: if (!creature) continue; creature->setFaction(35); - creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + creature->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + creature->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); creature->HandleEmoteCommand(EMOTE_ONESHOT_ROAR); AffrayChallenger[i] = creature->GetGUID(); } @@ -458,8 +458,8 @@ public: Creature* creature = ObjectAccessor::GetCreature(*me, AffrayChallenger[Wave]); if (creature && (creature->IsAlive())) { - creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + creature->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + creature->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); creature->HandleEmoteCommand(EMOTE_ONESHOT_ROAR); creature->setFaction(14); creature->AI()->AttackStart(warrior); @@ -490,8 +490,8 @@ public: } else if (creature) // Makes BIG WILL attackable. { - creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + creature->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + creature->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); creature->HandleEmoteCommand(EMOTE_ONESHOT_ROAR); creature->setFaction(14); creature->AI()->AttackStart(warrior); diff --git a/src/server/scripts/Kalimdor/zone_winterspring.cpp b/src/server/scripts/Kalimdor/zone_winterspring.cpp index 6c2548e3889..224321fc03b 100644 --- a/src/server/scripts/Kalimdor/zone_winterspring.cpp +++ b/src/server/scripts/Kalimdor/zone_winterspring.cpp @@ -362,13 +362,13 @@ public: { if (GameObject* go = GetClosestGameObjectWithEntry(me, GO_ELUNE_ALTAR, 10.0f)) { - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); me->SetFacingToObject(go); _altarGUID = go->GetGUID(); } } else if (GameObject* go = GetClosestGameObjectWithEntry(me, GO_ELUNE_FIRE, 10.0f)) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); // Yell and set escort to pause Talk(SAY_REACH_TORCH); @@ -617,7 +617,7 @@ public: if (npc_ranshalla::npc_ranshallaAI* escortAI = dynamic_cast<npc_ranshalla::npc_ranshallaAI*>(ranshalla->AI())) escortAI->DoContinueEscort(isAltar); } - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->AddFlag(GO_FLAG_NOT_SELECTABLE); return false; } diff --git a/src/server/scripts/Maelstrom/Stonecore/boss_corborus.cpp b/src/server/scripts/Maelstrom/Stonecore/boss_corborus.cpp index 000b66db881..66ecf0a0fc9 100644 --- a/src/server/scripts/Maelstrom/Stonecore/boss_corborus.cpp +++ b/src/server/scripts/Maelstrom/Stonecore/boss_corborus.cpp @@ -170,7 +170,7 @@ class boss_corborus : public CreatureScript // Face Corborus to players and set new home position me->SetFacingTo(3.176499f); me->SetHomePosition(1154.55f, 878.843f, 284.963f, 3.176499f); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); // Despawn Millhouse and all trash instance->SetData(DATA_MILLHOUSE_EVENT_DESPAWN, 0); @@ -192,7 +192,7 @@ class boss_corborus : public CreatureScript events.RescheduleEvent(EVENT_SUBMERGE, 100000); me->SetReactState(REACT_PASSIVE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); DoCast(me, SPELL_CLEAR_ALL_DEBUFFS); me->AttackStop(); @@ -217,7 +217,7 @@ class boss_corborus : public CreatureScript break; case EVENT_EMERGE: me->RemoveAllAuras(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); DoCast(me, SPELL_EMERGE); events.ScheduleEvent(EVENT_ATTACK, 2500); break; diff --git a/src/server/scripts/Maelstrom/Stonecore/boss_slabhide.cpp b/src/server/scripts/Maelstrom/Stonecore/boss_slabhide.cpp index fa9d74539aa..d97a7126c26 100644 --- a/src/server/scripts/Maelstrom/Stonecore/boss_slabhide.cpp +++ b/src/server/scripts/Maelstrom/Stonecore/boss_slabhide.cpp @@ -118,7 +118,7 @@ class boss_slabhide : public CreatureScript me->setActive(true); me->SetCanFly(true); me->SetDisableGravity(true); - me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER); + me->SetAnimTier(UnitBytes1_Flags(UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER), false); me->SetReactState(REACT_PASSIVE); instance->SetData(DATA_SLABHIDE_INTRO, NOT_STARTED); _isFlying = false; @@ -134,7 +134,7 @@ class boss_slabhide : public CreatureScript me->SetCanFly(false); me->SetDisableGravity(false); - me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER); + me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, false); me->SetReactState(REACT_AGGRESSIVE); _isFlying = false; } @@ -197,11 +197,11 @@ class boss_slabhide : public CreatureScript case POINT_SLABHIDE_INTRO_LAND: me->SetCanFly(false); me->SetDisableGravity(false); - me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER); + me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, false); me->SetHover(false); me->SetHomePosition(SlabhideIntroLandPos); me->HandleEmoteCommand(EMOTE_ONESHOT_ROAR); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetReactState(REACT_AGGRESSIVE); instance->SetData(DATA_SLABHIDE_INTRO, DONE); break; @@ -261,7 +261,7 @@ class boss_slabhide : public CreatureScript case EVENT_STALACTITE: me->SetCanFly(true); me->SetDisableGravity(true); - me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER); + me->SetAnimTier(UnitBytes1_Flags(UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER), false); me->SetHover(true); DoCast(me, SPELL_STALACTITE_SUMMON); @@ -278,7 +278,7 @@ class boss_slabhide : public CreatureScript case EVENT_ATTACK: me->SetCanFly(false); me->SetDisableGravity(false); - me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER); + me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, false); me->SetHover(false); events.ScheduleEvent(EVENT_LAVA_FISSURE, urand(6000, 8000)); diff --git a/src/server/scripts/Maelstrom/Stonecore/instance_stonecore.cpp b/src/server/scripts/Maelstrom/Stonecore/instance_stonecore.cpp index 9853fd5f72e..f89c50f834d 100644 --- a/src/server/scripts/Maelstrom/Stonecore/instance_stonecore.cpp +++ b/src/server/scripts/Maelstrom/Stonecore/instance_stonecore.cpp @@ -213,7 +213,7 @@ class instance_stonecore : public InstanceMapScript return; teleporter->CastSpell(teleporter, SPELL_TELEPORTER_ACTIVE_VISUAL, true); - teleporter->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); + teleporter->AddNpcFlag(UNIT_NPC_FLAG_SPELLCLICK); } GuidVector millhouseTrashGUIDs; diff --git a/src/server/scripts/Maelstrom/Stonecore/stonecore.cpp b/src/server/scripts/Maelstrom/Stonecore/stonecore.cpp index 94c04ecd768..32b2d4b1645 100644 --- a/src/server/scripts/Maelstrom/Stonecore/stonecore.cpp +++ b/src/server/scripts/Maelstrom/Stonecore/stonecore.cpp @@ -160,7 +160,7 @@ class npc_sc_millhouse_manastorm : public CreatureScript break; } - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); + me->AddUnitFlag(UNIT_FLAG_IN_COMBAT); } void MovementInform(uint32 type, uint32 pointId) override @@ -178,7 +178,7 @@ class npc_sc_millhouse_manastorm : public CreatureScript switch (pointId) { case POINT_MILLHOUSE_GROUP_2: - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); + me->AddUnitFlag(UNIT_FLAG_IN_COMBAT); me->SetReactState(REACT_AGGRESSIVE); if (Creature* worldtrigger = me->FindNearestCreature(NPC_WORLDTRIGGER, 200.0f)) me->SetFacingToObject(worldtrigger); @@ -187,7 +187,7 @@ class npc_sc_millhouse_manastorm : public CreatureScript events.ScheduleEvent(EVENT_READY_FOR_COMBAT, 10000); break; case POINT_MILLHOUSE_GROUP_3: - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); + me->AddUnitFlag(UNIT_FLAG_IN_COMBAT); me->SetReactState(REACT_AGGRESSIVE); me->SetFacingTo(5.931499f); DoCast(me, SPELL_ANCHOR_HERE); @@ -236,7 +236,7 @@ class npc_sc_millhouse_manastorm : public CreatureScript events.ScheduleEvent(EVENT_FEAR, 18000); break; case EVENT_READY_FOR_COMBAT: - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); + me->RemoveUnitFlag(UNIT_FLAG_IN_COMBAT); me->SetReactState(REACT_AGGRESSIVE); ScheduleEvents(); break; diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp index 20dfacc4f49..0946b9fda7b 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_herald_volazj.cpp @@ -100,7 +100,7 @@ public: void DamageTaken(Unit* /*pAttacker*/, uint32 &damage) override { - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE)) + if (me->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE)) damage = 0; if ((GetHealthPct(0) >= 66 && GetHealthPct(damage) < 66)|| @@ -124,7 +124,7 @@ public: // Channel visual DoCast(me, INSANITY_VISUAL, true); // Unattackable - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetControlled(true, UNIT_STATE_STUNNED); } @@ -182,7 +182,7 @@ public: // Cleanup Summons.DespawnAll(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetControlled(false, UNIT_STATE_STUNNED); } @@ -245,7 +245,7 @@ public: return; insanityHandled = 0; - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetControlled(false, UNIT_STATE_STUNNED); me->RemoveAurasDueToSpell(INSANITY_VISUAL); } diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp index f015da7d501..f04dc4f3eef 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_jedoga_shadowseeker.cpp @@ -206,7 +206,7 @@ public: me->GetMotionMaster()->MovePoint(1, JedogaPosition[1]); me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, false); me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, false); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE)); me->RemoveAurasDueToSpell(SPELL_SPHERE_VISUAL); @@ -235,7 +235,7 @@ public: { me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, true); me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE)); me->AttackStop(); me->RemoveAllAuras(); @@ -367,14 +367,14 @@ public: me->RemoveAurasDueToSpell(SPELL_SPHERE_VISUAL); me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, false); me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, false); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE)); } else { DoCast(me, SPELL_SPHERE_VISUAL, false); me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, true); me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE)); } } @@ -453,7 +453,7 @@ public: me->RemoveAurasDueToSpell(SPELL_SPHERE_VISUAL); me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, false); me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, false); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE)); float distance = me->GetDistance(JedogaPosition[1]); @@ -475,14 +475,14 @@ public: me->RemoveAurasDueToSpell(SPELL_SPHERE_VISUAL); me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, false); me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, false); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE)); } if (instance->GetBossState(DATA_JEDOGA_SHADOWSEEKER) == IN_PROGRESS && !me->HasAura(SPELL_SPHERE_VISUAL)) { DoCast(me, SPELL_SPHERE_VISUAL, false); me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, true); me->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE + UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE)); } } bCheckTimer = 2*IN_MILLISECONDS; diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp index c89ae0d255a..cae57b8f64e 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp @@ -264,7 +264,7 @@ class boss_prince_taldaram : public CreatureScript void RemovePrison() { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->RemoveAurasDueToSpell(SPELL_BEAM_VISUAL); me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), DATA_GROUND_POSITION_Z, me->GetOrientation()); DoCast(SPELL_HOVER_FALL); @@ -395,7 +395,7 @@ class go_prince_taldaram_sphere : public GameObjectScript Creature* PrinceTaldaram = ObjectAccessor::GetCreature(*go, instance->GetGuidData(DATA_PRINCE_TALDARAM)); if (PrinceTaldaram && PrinceTaldaram->IsAlive()) { - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->AddFlag(GO_FLAG_NOT_SELECTABLE); go->SetGoState(GO_STATE_ACTIVE); switch (go->GetEntry()) diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp index 892907610ff..9ff22bfc309 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/instance_ahnkahet.cpp @@ -88,19 +88,19 @@ class instance_ahnkahet : public InstanceMapScript if (SpheresState[0]) { go->SetGoState(GO_STATE_ACTIVE); - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->AddFlag(GO_FLAG_NOT_SELECTABLE); } else - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); break; case GO_SPHERE_2: if (SpheresState[1]) { go->SetGoState(GO_STATE_ACTIVE); - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->AddFlag(GO_FLAG_NOT_SELECTABLE); } else - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); break; case GO_PRINCE_TALDARAM_GATE: AddDoor(go, true); diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp index 5025edd5eeb..a24b226cd86 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp @@ -122,7 +122,7 @@ public: void Reset() override { BossAI::Reset(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); instance->DoStopCriteriaTimer(CRITERIA_TIMED_TYPE_EVENT, ACHIEV_GOTTA_GO_START_EVENT); _nextSubmerge = 75; _petCount = 0; @@ -334,7 +334,7 @@ public: { me->RemoveAurasDueToSpell(SPELL_SUBMERGE); me->RemoveAurasDueToSpell(SPELL_IMPALE_AURA); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); DoCastSelf(SPELL_EMERGE); events.SetPhase(PHASE_EMERGE); events.ScheduleEvent(EVENT_POUND, randtime(Seconds(13), Seconds(18)), 0, PHASE_EMERGE); @@ -365,7 +365,7 @@ public: { if (spell->Id == SPELL_SUBMERGE) { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->RemoveAurasDueToSpell(SPELL_LEECHING_SWARM); DoCastSelf(SPELL_IMPALE_AURA, true); diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp index 7b87a424d76..ee98c275463 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp @@ -280,8 +280,8 @@ public: void Initialize() { - me->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 9.0f); - me->SetFloatValue(UNIT_FIELD_COMBATREACH, 9.0f); + me->SetBoundingRadius(9.0f); + me->SetCombatReach(9.0f); _enteredCombat = false; _doorsWebbed = false; _lastPlayerCombatState = false; diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp index b50f44ba5d9..85f0aa6a2e1 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp @@ -224,8 +224,7 @@ public: tenebron->SetHomePosition(3239.07f, 657.235f, 86.8775f, 4.74729f); if (tenebron->IsAlive()) { - if (tenebron->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) - tenebron->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + tenebron->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); tenebron->GetMotionMaster()->MoveTargetedHome(); } else @@ -244,8 +243,7 @@ public: shadron->SetHomePosition(3363.06f, 525.28f, 98.362f, 4.76475f); if (shadron->IsAlive()) { - if (shadron->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) - shadron->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + shadron->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); shadron->GetMotionMaster()->MoveTargetedHome(); } else @@ -264,8 +262,7 @@ public: vesperon->SetHomePosition(3145.68f, 520.71f, 89.7f, 4.64258f); if (vesperon->IsAlive()) { - if (vesperon->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) - vesperon->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + vesperon->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); vesperon->GetMotionMaster()->MoveTargetedHome(); } else @@ -301,8 +298,7 @@ public: } fetchTene->GetMotionMaster()->MovePoint(POINT_ID_INIT, TenebronPositions[0]); - if (!fetchTene->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) - fetchTene->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + fetchTene->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); } } @@ -319,8 +315,7 @@ public: } fetchShad->GetMotionMaster()->MovePoint(POINT_ID_INIT, ShadronPositions[0]); - if (!fetchShad->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) - fetchShad->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + fetchShad->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); } } @@ -337,8 +332,7 @@ public: } fetchVesp->GetMotionMaster()->MovePoint(POINT_ID_INIT, VesperonPositions[0]); - if (!fetchVesp->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) - fetchVesp->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + fetchVesp->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); } } @@ -354,8 +348,7 @@ public: { temp->SetWalk(false); - if (temp->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) - temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + temp->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); uint8 textId = 0; diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp index 3ca574d03c5..c90c5f6be55 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/obsidian_sanctum.cpp @@ -177,8 +177,7 @@ struct dummy_dragonAI : public ScriptedAI void Reset() override { - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); events.Reset(); Initialize(); @@ -876,7 +875,7 @@ public: me->SetReactState(REACT_PASSIVE); events.ScheduleEvent(EVENT_TSUNAMI_TIMER, 100); events.ScheduleEvent(EVENT_TSUNAMI_BUFF, 1000); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); } void UpdateAI(uint32 diff) override @@ -933,7 +932,7 @@ public: void Reset() override { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->AddAura(46265, me); // Wrong, can't find proper visual me->AddAura(69422, me); events.ScheduleEvent(EVENT_VOID_BLAST, 5000); diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp index de81e1dfd15..498c82e0c7f 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp @@ -99,7 +99,7 @@ class boss_general_zarithrian : public CreatureScript { _Reset(); if (instance->GetBossState(DATA_SAVIANA_RAGEFIRE) == DONE && instance->GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE) - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE)); } void EnterCombat(Unit* /*who*/) override diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index 0e9baeec5bb..d9bb5f4f359 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -287,7 +287,7 @@ class boss_halion : public CreatureScript Talk(SAY_PHASE_TWO); me->CastStop(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); DoCast(me, SPELL_TWILIGHT_PHASING); if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_HALION_CONTROLLER))) @@ -411,7 +411,7 @@ class boss_twilight_halion : public CreatureScript me->SetHealth(halion->GetHealth()); PhasingHandler::AddPhase(me, 174, false); me->SetReactState(REACT_DEFENSIVE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); + me->AddUnitFlag(UNIT_FLAG_IN_COMBAT); events.ScheduleEvent(EVENT_TAIL_LASH, Seconds(12)); events.ScheduleEvent(EVENT_SOUL_CONSUMPTION, Seconds(15)); } @@ -669,7 +669,7 @@ class npc_halion_controller : public CreatureScript continue; halion->RemoveAurasDueToSpell(SPELL_TWILIGHT_PHASING); - halion->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + halion->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); } // Summon Twilight portals @@ -1755,7 +1755,7 @@ class spell_halion_twilight_cutter : public SpellScriptLoader return; Unit* caster = GetCaster(); - DynamicFieldStructuredView<ObjectGuid> channelObjects = caster->GetChannelObjects(); + auto const& channelObjects = caster->m_unitData->ChannelObjects; if (Unit* channelTarget = (channelObjects.size() == 1 ? ObjectAccessor::GetUnit(*caster, *channelObjects.begin()) : nullptr)) { unitList.remove_if(TwilightCutterSelector(caster, channelTarget)); diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp index 4d8449b62df..824e2754307 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp @@ -120,7 +120,7 @@ class boss_saviana_ragefire : public CreatureScript case POINT_LAND_GROUND: me->SetCanFly(false); me->SetDisableGravity(false); - me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER); + me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, false); me->SetReactState(REACT_AGGRESSIVE); events.ScheduleEvent(EVENT_ENRAGE, Seconds(1), EVENT_GROUP_LAND_PHASE); events.ScheduleEvent(EVENT_FLAME_BREATH, Seconds(2), Seconds(4), EVENT_GROUP_LAND_PHASE); @@ -163,7 +163,7 @@ class boss_saviana_ragefire : public CreatureScript { me->SetCanFly(true); me->SetDisableGravity(true); - me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER); + me->SetAnimTier(UnitBytes1_Flags(UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER), false); me->SetReactState(REACT_PASSIVE); me->AttackStop(); Position pos; diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp index 5cee0b32d5d..f3fda6385f8 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/instance_ruby_sanctum.cpp @@ -241,7 +241,7 @@ class instance_ruby_sanctum : public InstanceMapScript { HandleGameObject(FlameWallsGUID, true); if (Creature* zarithrian = instance->GetCreature(GeneralZarithrianGUID)) - zarithrian->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); + zarithrian->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE)); } break; } @@ -251,7 +251,7 @@ class instance_ruby_sanctum : public InstanceMapScript { HandleGameObject(FlameWallsGUID, true); if (Creature* zarithrian = instance->GetCreature(GeneralZarithrianGUID)) - zarithrian->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); + zarithrian->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE)); } break; } diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp index 9d94cec4f4c..532845155bf 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/ruby_sanctum.cpp @@ -72,7 +72,7 @@ class npc_xerestrasza : public CreatureScript void Reset() override { _events.Reset(); - me->RemoveFlag(UNIT_NPC_FLAGS, GOSSIP_OPTION_QUESTGIVER); + me->RemoveNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); } void DoAction(int32 action) override @@ -131,7 +131,7 @@ class npc_xerestrasza : public CreatureScript Talk(SAY_XERESTRASZA_EVENT_6); break; case EVENT_XERESTRASZA_EVENT_7: - me->SetFlag(UNIT_NPC_FLAGS, GOSSIP_OPTION_QUESTGIVER); + me->AddNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); Talk(SAY_XERESTRASZA_EVENT_7); me->setActive(false); break; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp index 960c27a23d8..d88dc77556b 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp @@ -162,7 +162,7 @@ public: Initialize(); instance = creature->GetInstanceScript(); creature->SetReactState(REACT_PASSIVE); - creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + creature->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); } void Initialize() @@ -273,7 +273,7 @@ public: instance = creature->GetInstanceScript(); creature->SetReactState(REACT_PASSIVE); - creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + creature->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); creature->RestoreFaction(); } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp index f151cfe067b..ac7aef3eb5e 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp @@ -111,7 +111,7 @@ void AggroAllPlayers(Creature* temp) if (player->IsAlive()) { - temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); + temp->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC)); temp->SetReactState(REACT_AGGRESSIVE); temp->SetInCombatWith(player); player->SetInCombatWith(temp); @@ -330,7 +330,7 @@ public: me->SetReactState(REACT_PASSIVE); // THIS IS A HACK, SHOULD BE REMOVED WHEN THE EVENT IS FULL SCRIPTED - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC)); } void Initialize() @@ -467,7 +467,7 @@ public: me->SetReactState(REACT_PASSIVE); // THIS IS A HACK, SHOULD BE REMOVED WHEN THE EVENT IS FULL SCRIPTED - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC)); } void Initialize() @@ -610,7 +610,7 @@ public: me->SetReactState(REACT_PASSIVE); // THIS IS A HACK, SHOULD BE REMOVED WHEN THE EVENT IS FULL SCRIPTED - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC)); } void Initialize() @@ -761,7 +761,7 @@ public: me->SetReactState(REACT_PASSIVE); // THIS IS A HACK, SHOULD BE REMOVED WHEN THE EVENT IS FULL SCRIPTED - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC)); } void Initialize() @@ -921,7 +921,7 @@ public: me->SetReactState(REACT_PASSIVE); // THIS IS A HACK, SHOULD BE REMOVED WHEN THE EVENT IS FULL SCRIPTED - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC)); } void Initialize() diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp index 3acc5d8a649..7e184dfd4b1 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp @@ -184,7 +184,7 @@ public: if (Creature* pAnnouncer = instance->GetCreature(uiAnnouncerGUID)) { pAnnouncer->GetMotionMaster()->MovePoint(0, 748.309f, 619.487f, 411.171f); - pAnnouncer->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + pAnnouncer->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); pAnnouncer->SummonGameObject(instance->IsHeroic()? GO_CHAMPIONS_LOOT_H : GO_CHAMPIONS_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, QuaternionData::fromEulerAnglesZYX(1.42f, 0.0f, 0.0f), 90000); } } @@ -197,7 +197,7 @@ public: if (Creature* pBoss = instance->GetCreature(uiArgentChampionGUID)) { pBoss->GetMotionMaster()->MovePoint(0, 746.88f, 618.74f, 411.06f); - pBoss->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + pBoss->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); pBoss->SetReactState(REACT_AGGRESSIVE); } } @@ -207,7 +207,7 @@ public: if (Creature* pAnnouncer = instance->GetCreature(uiAnnouncerGUID)) { pAnnouncer->GetMotionMaster()->MovePoint(0, 748.309f, 619.487f, 411.171f); - pAnnouncer->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + pAnnouncer->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); pAnnouncer->SummonGameObject(instance->IsHeroic()? GO_EADRIC_LOOT_H : GO_EADRIC_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, QuaternionData::fromEulerAnglesZYX(1.42f, 0.0f, 0.0f), 90000); } break; @@ -216,7 +216,7 @@ public: if (Creature* pAnnouncer = instance->GetCreature(uiAnnouncerGUID)) { pAnnouncer->GetMotionMaster()->MovePoint(0, 748.309f, 619.487f, 411.171f); - pAnnouncer->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + pAnnouncer->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); pAnnouncer->SummonGameObject(instance->IsHeroic()? GO_PALETRESS_LOOT_H : GO_PALETRESS_LOOT, 746.59f, 618.49f, 411.09f, 1.42f, QuaternionData::fromEulerAnglesZYX(1.42f, 0.0f, 0.0f), 90000); } break; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp index 7101642a340..e5cc3182d5d 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp @@ -87,8 +87,8 @@ public: uiTimer = 0; me->SetReactState(REACT_PASSIVE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); SetGrandChampionsForEncounter(); SetArgentChampion(); @@ -346,7 +346,7 @@ public: void StartEncounter() { - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); if (instance->GetData(BOSS_BLACK_KNIGHT) == NOT_STARTED) { @@ -383,7 +383,7 @@ public: if (player->IsAlive()) { temp->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation()); - temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + temp->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); temp->SetReactState(REACT_AGGRESSIVE); temp->SetInCombatWith(player); player->SetInCombatWith(temp); @@ -429,7 +429,7 @@ public: { if (instance->GetData(BOSS_GRAND_CHAMPIONS) == NOT_STARTED) { - summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + summon->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); summon->SetReactState(REACT_PASSIVE); } } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp index 35f965905eb..b3b5279c835 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp @@ -194,7 +194,7 @@ class boss_anubarak_trial : public CreatureScript events.ScheduleEvent(EVENT_SUMMON_FROST_SPHERE, 20*IN_MILLISECONDS); Initialize(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); // clean up spawned Frost Spheres std::list<Creature*> FrostSphereList; me->GetCreatureListWithEntryInGrid(FrostSphereList, NPC_FROST_SPHERE, 150.0f); @@ -274,7 +274,7 @@ class boss_anubarak_trial : public CreatureScript { _EnterCombat(); Talk(SAY_AGGRO); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); // Despawn Scarab Swarms neutral EntryCheckPredicate pred(NPC_SCARAB); @@ -329,7 +329,7 @@ class boss_anubarak_trial : public CreatureScript { DoCast(me, SPELL_SUBMERGE_ANUBARAK); DoCast(me, SPELL_CLEAR_ALL_DEBUFFS); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); Talk(EMOTE_BURROWER); events.SetPhase(PHASE_SUBMERGED); events.ScheduleEvent(EVENT_PURSUING_SPIKE, 2*IN_MILLISECONDS, 0, PHASE_SUBMERGED); @@ -366,7 +366,7 @@ class boss_anubarak_trial : public CreatureScript DoCast(SPELL_SPIKE_TELE); summons.DespawnEntry(NPC_SPIKE); me->RemoveAurasDueToSpell(SPELL_SUBMERGE_ANUBARAK); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); DoCast(me, SPELL_EMERGE_ANUBARAK); Talk(EMOTE_EMERGE); events.SetPhase(PHASE_MELEE); @@ -576,14 +576,14 @@ class npc_nerubian_burrower : public CreatureScript me->RemoveAurasDueToSpell(SPELL_SUBMERGE_EFFECT); DoCast(me, SPELL_EMERGE_EFFECT); DoCast(me, SPELL_AWAKENED); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); } else { if (!me->HasAura(SPELL_PERMAFROST_HELPER)) { DoCast(me, SPELL_SUBMERGE_EFFECT); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); DoCast(me, SPELL_PERSISTENT_DIRT, true); } } @@ -635,7 +635,7 @@ class npc_frost_sphere : public CreatureScript { // we are close to the ground me->GetMotionMaster()->MoveIdle(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->RemoveAurasDueToSpell(SPELL_FROST_SPHERE); DoCast(SPELL_PERMAFROST_MODEL); DoCast(SPELL_PERMAFROST); @@ -645,7 +645,7 @@ class npc_frost_sphere : public CreatureScript { // we are in air me->GetMotionMaster()->MoveIdle(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); //At hit the ground me->HandleEmoteCommand(EMOTE_ONESHOT_FLYDEATH); me->GetMotionMaster()->MoveFall(POINT_FALL_GROUND); diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp index a417c11468c..ccaca4608e0 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp @@ -488,7 +488,7 @@ class boss_toc_champion_controller : public CreatureScript { _summons.Summon(champion); champion->SetReactState(REACT_PASSIVE); - champion->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); + champion->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC)); if (playerTeam == ALLIANCE) { champion->SetHomePosition(vChampionJumpTarget[pos].GetPositionX(), vChampionJumpTarget[pos].GetPositionY(), vChampionJumpTarget[pos].GetPositionZ(), 0); @@ -519,7 +519,7 @@ class boss_toc_champion_controller : public CreatureScript if (Creature* summon = ObjectAccessor::GetCreature(*me, *i)) { summon->SetReactState(REACT_AGGRESSIVE); - summon->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); + summon->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC)); } } break; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp index eac01bd4098..cad0ca4639f 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp @@ -119,7 +119,7 @@ class boss_jaraxxus : public CreatureScript _JustReachedHome(); instance->SetBossState(BOSS_JARAXXUS, FAIL); DoCast(me, SPELL_JARAXXUS_CHAINS); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC)); } void KilledUnit(Unit* who) override @@ -227,7 +227,7 @@ class npc_legion_flame : public CreatureScript void Reset() override { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->SetInCombatWithZone(); DoCast(SPELL_LEGION_FLAME_EFFECT); } @@ -265,9 +265,9 @@ class npc_infernal_volcano : public CreatureScript me->SetReactState(REACT_PASSIVE); if (!IsHeroic()) - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED)); else - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED)); _summons.DespawnAll(); } @@ -369,9 +369,9 @@ class npc_nether_portal : public CreatureScript me->SetReactState(REACT_PASSIVE); if (!IsHeroic()) - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED)); else - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED)); _summons.DespawnAll(); } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp index cd7da39a2c0..d582fcd3f6f 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp @@ -205,7 +205,7 @@ class boss_gormok : public CreatureScript { case 0: instance->DoUseDoorOrButton(instance->GetGuidData(GO_MAIN_GATE_DOOR)); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC)); me->SetReactState(REACT_AGGRESSIVE); me->SetInCombatWithZone(); break; @@ -276,7 +276,7 @@ class boss_gormok : public CreatureScript if (Unit* snobold = me->GetVehicleKit()->GetPassenger(i)) { snobold->ExitVehicle(); - snobold->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + snobold->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); snobold->GetAI()->DoAction(ACTION_DISABLE_FIRE_BOMB); snobold->CastSpell(me, SPELL_JUMP_TO_HAND, true); break; @@ -331,7 +331,7 @@ class npc_snobold_vassal : public CreatureScript void Reset() override { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->SetInCombatWithZone(); _events.ScheduleEvent(EVENT_CHECK_MOUNT, Seconds(1)); _events.ScheduleEvent(EVENT_FIRE_BOMB, Seconds(5), Seconds(30)); @@ -578,7 +578,7 @@ struct boss_jormungarAI : public BossAI if (!Enraged && instance->GetData(TYPE_NORTHREND_BEASTS) == SNAKES_SPECIAL) { me->RemoveAurasDueToSpell(SPELL_SUBMERGE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); DoCast(SPELL_ENRAGE); Enraged = true; Talk(EMOTE_ENRAGE); @@ -614,7 +614,7 @@ struct boss_jormungarAI : public BossAI case EVENT_SUMMON_ACIDMAW: if (Creature* acidmaw = me->SummonCreature(NPC_ACIDMAW, ToCCommonLoc[9].GetPositionX(), ToCCommonLoc[9].GetPositionY(), ToCCommonLoc[9].GetPositionZ(), 5, TEMPSUMMON_MANUAL_DESPAWN)) { - acidmaw->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC); + acidmaw->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC)); acidmaw->SetReactState(REACT_AGGRESSIVE); acidmaw->SetInCombatWithZone(); acidmaw->CastSpell(acidmaw, SPELL_EMERGE); @@ -648,7 +648,7 @@ struct boss_jormungarAI : public BossAI me->SetInCombatWithZone(); events.SetPhase(PHASE_SUBMERGED); events.ScheduleEvent(EVENT_EMERGE, 5*IN_MILLISECONDS, 0, PHASE_SUBMERGED); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->GetMotionMaster()->MovePoint(0, ToCCommonLoc[1].GetPositionX()+ frand(-40.0f, 40.0f), ToCCommonLoc[1].GetPositionY() + frand(-40.0f, 40.0f), ToCCommonLoc[1].GetPositionZ()); WasMobile = !WasMobile; } @@ -660,7 +660,7 @@ struct boss_jormungarAI : public BossAI me->SetDisplayId(ModelMobile); me->RemoveAurasDueToSpell(SPELL_SUBMERGE); me->RemoveAurasDueToSpell(SPELL_GROUND_VISUAL_0); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); // if the worm was mobile before submerging, make him stationary now if (WasMobile) @@ -771,7 +771,7 @@ class boss_dreadscale : public CreatureScript { case 0: instance->DoCloseDoorOrButton(instance->GetGuidData(GO_MAIN_GATE_DOOR)); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC)); me->SetReactState(REACT_AGGRESSIVE); me->SetInCombatWithZone(); break; @@ -944,7 +944,7 @@ class boss_icehowl : public CreatureScript break; case 2: instance->DoUseDoorOrButton(instance->GetGuidData(GO_MAIN_GATE_DOOR)); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC)); me->SetReactState(REACT_AGGRESSIVE); me->SetInCombatWithZone(); break; @@ -1045,7 +1045,7 @@ class boss_icehowl : public CreatureScript me->SetTarget(_trampleTargetGUID); _trampleCast = false; SetCombatMovement(false); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->SetControlled(true, UNIT_STATE_ROOT); me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MoveIdle(); @@ -1134,7 +1134,7 @@ class boss_icehowl : public CreatureScript Talk(EMOTE_TRAMPLE_FAIL); } _movementStarted = false; - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); SetCombatMovement(true); me->GetMotionMaster()->MovementExpired(); me->GetMotionMaster()->Clear(); diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp index 6768037109b..886cc72fb20 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp @@ -169,7 +169,7 @@ struct boss_twin_baseAI : public BossAI void Reset() override { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->SetReactState(REACT_PASSIVE); me->ModifyAuraState(AuraState, true); /* Uncomment this once that they are floating above the ground @@ -195,7 +195,7 @@ struct boss_twin_baseAI : public BossAI switch (uiId) { case 1: - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE)); me->SetReactState(REACT_AGGRESSIVE); break; default: @@ -237,13 +237,13 @@ struct boss_twin_baseAI : public BossAI { if (!pSister->IsAlive()) { - me->SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); - pSister->SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); + me->AddDynamicFlag(UNIT_DYNFLAG_LOOTABLE); + pSister->AddDynamicFlag(UNIT_DYNFLAG_LOOTABLE); _JustDied(); } else { - me->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); + me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE); instance->SetBossState(BOSS_VALKIRIES, SPECIAL); } } @@ -552,7 +552,7 @@ struct npc_unleashed_ballAI : public ScriptedAI void Reset() override { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->SetReactState(REACT_PASSIVE); me->SetDisableGravity(true); me->SetCanFly(true); diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp index 589f8b0ec1b..888dd891d94 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp @@ -248,7 +248,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript DoUpdateCriteria(CRITERIA_TYPE_BE_SPELL_TARGET, SPELL_CHAMPIONS_KILLED_IN_MINUTE); DoRespawnGameObject(CrusadersCacheGUID, 7*DAY); if (GameObject* cache = instance->GetGameObject(CrusadersCacheGUID)) - cache->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + cache->RemoveFlag(GO_FLAG_NOT_SELECTABLE); EventStage = 3100; break; default: @@ -374,7 +374,7 @@ class instance_trial_of_the_crusader : public InstanceMapScript if (state == DONE || NeedSave) { if (Unit* announcer = instance->GetCreature(GetGuidData(NPC_BARRENT))) - announcer->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + announcer->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); Save(); } } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp index 6981ac5037c..89339aea9e1 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp @@ -188,11 +188,11 @@ class npc_announcer_toc10 : public CreatureScript void Reset() override { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); if (Creature* pAlly = GetClosestCreatureWithEntry(me, NPC_THRALL, 300.0f)) - pAlly->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + pAlly->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); if (Creature* pAlly = GetClosestCreatureWithEntry(me, NPC_PROUDMOORE, 300.0f)) - pAlly->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + pAlly->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); } void AttackStart(Unit* /*who*/) override { } @@ -247,7 +247,7 @@ class npc_announcer_toc10 : public CreatureScript if (Creature* jaraxxus = ObjectAccessor::GetCreature(*player, instance->GetGuidData(NPC_JARAXXUS))) { jaraxxus->RemoveAurasDueToSpell(SPELL_JARAXXUS_CHAINS); - jaraxxus->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); + jaraxxus->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC)); jaraxxus->SetReactState(REACT_DEFENSIVE); jaraxxus->SetInCombatWithZone(); } @@ -278,7 +278,7 @@ class npc_announcer_toc10 : public CreatureScript instance->SetData(TYPE_EVENT, 4030); instance->SetBossState(BOSS_LICH_KING, NOT_STARTED); } - creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + creature->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); return true; } @@ -352,12 +352,12 @@ class boss_lich_king_toc : public CreatureScript break; case 5030: Talk(SAY_STAGE_4_04); - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_TALK); + me->SetEmoteState(EMOTE_STATE_TALK); _updateTimer = 10*IN_MILLISECONDS; _instance->SetData(TYPE_EVENT, 5040); break; case 5040: - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); + me->SetEmoteState(EMOTE_ONESHOT_NONE); me->GetMotionMaster()->MovePoint(1, LichKingLoc[1]); _updateTimer = 1*IN_MILLISECONDS; _instance->SetData(TYPE_EVENT, 0); @@ -435,7 +435,7 @@ class npc_fizzlebang_toc : public CreatureScript _instance->SetData(TYPE_EVENT, 1180); if (Creature* jaraxxus = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(NPC_JARAXXUS))) { - jaraxxus->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); + jaraxxus->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC)); jaraxxus->SetReactState(REACT_AGGRESSIVE); jaraxxus->SetInCombatWithZone(); } @@ -532,7 +532,7 @@ class npc_fizzlebang_toc : public CreatureScript Talk(SAY_STAGE_1_04); if (Creature* jaraxxus = me->SummonCreature(NPC_JARAXXUS, ToCCommonLoc[1].GetPositionX(), ToCCommonLoc[1].GetPositionY(), ToCCommonLoc[1].GetPositionZ(), 5.0f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, DESPAWN_TIME)) { - jaraxxus->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); + jaraxxus->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC)); jaraxxus->SetReactState(REACT_PASSIVE); jaraxxus->GetMotionMaster()->MovePoint(0, ToCCommonLoc[1].GetPositionX(), ToCCommonLoc[1].GetPositionY()-10, ToCCommonLoc[1].GetPositionZ()); } @@ -617,19 +617,19 @@ class npc_tirion_toc : public CreatureScript switch (_instance->GetData(TYPE_EVENT)) { case 110: - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_TALK); + me->SetEmoteState(EMOTE_ONESHOT_TALK); Talk(SAY_STAGE_0_01); _updateTimer = 22*IN_MILLISECONDS; _instance->SetData(TYPE_EVENT, 120); break; case 140: - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_TALK); + me->SetEmoteState(EMOTE_ONESHOT_TALK); Talk(SAY_STAGE_0_02); _updateTimer = 5*IN_MILLISECONDS; _instance->SetData(TYPE_EVENT, 150); break; case 150: - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); + me->SetEmoteState(EMOTE_STATE_NONE); if (_instance->GetBossState(BOSS_BEASTS) != DONE) { _instance->DoUseDoorOrButton(_instance->GetGuidData(GO_MAIN_GATE_DOOR)); @@ -637,7 +637,7 @@ class npc_tirion_toc : public CreatureScript if (Creature* gormok = me->SummonCreature(NPC_GORMOK, ToCSpawnLoc[0].GetPositionX(), ToCSpawnLoc[0].GetPositionY(), ToCSpawnLoc[0].GetPositionZ(), 5, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30*IN_MILLISECONDS)) { gormok->GetMotionMaster()->MovePoint(0, ToCCommonLoc[5].GetPositionX(), ToCCommonLoc[5].GetPositionY(), ToCCommonLoc[5].GetPositionZ()); - gormok->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + gormok->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); gormok->SetReactState(REACT_PASSIVE); } } @@ -658,7 +658,7 @@ class npc_tirion_toc : public CreatureScript if (Creature* dreadscale = me->SummonCreature(NPC_DREADSCALE, ToCSpawnLoc[1].GetPositionX(), ToCSpawnLoc[1].GetPositionY(), ToCSpawnLoc[1].GetPositionZ(), 5, TEMPSUMMON_MANUAL_DESPAWN)) { dreadscale->GetMotionMaster()->MovePoint(0, ToCCommonLoc[5].GetPositionX(), ToCCommonLoc[5].GetPositionY(), ToCCommonLoc[5].GetPositionZ()); - dreadscale->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + dreadscale->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); dreadscale->SetReactState(REACT_PASSIVE); } } @@ -676,7 +676,7 @@ class npc_tirion_toc : public CreatureScript if (Creature* icehowl = me->SummonCreature(NPC_ICEHOWL, ToCSpawnLoc[0].GetPositionX(), ToCSpawnLoc[0].GetPositionY(), ToCSpawnLoc[0].GetPositionZ(), 5, TEMPSUMMON_DEAD_DESPAWN)) { icehowl->GetMotionMaster()->MovePoint(2, ToCCommonLoc[5].GetPositionX(), ToCCommonLoc[5].GetPositionY(), ToCCommonLoc[5].GetPositionZ()); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->SetReactState(REACT_PASSIVE); } } @@ -904,13 +904,13 @@ class npc_garrosh_toc : public CreatureScript switch (_instance->GetData(TYPE_EVENT)) { case 130: - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_TALK); + me->SetEmoteState(EMOTE_ONESHOT_TALK); Talk(SAY_STAGE_0_03h); _updateTimer = 3*IN_MILLISECONDS; _instance->SetData(TYPE_EVENT, 132); break; case 132: - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); + me->SetEmoteState(EMOTE_STATE_NONE); _updateTimer = 5*IN_MILLISECONDS; _instance->SetData(TYPE_EVENT, 140); break; @@ -987,13 +987,13 @@ class npc_varian_toc : public CreatureScript switch (_instance->GetData(TYPE_EVENT)) { case 120: - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_TALK); + me->SetEmoteState(EMOTE_ONESHOT_TALK); Talk(SAY_STAGE_0_03a); _updateTimer = 2*IN_MILLISECONDS; _instance->SetData(TYPE_EVENT, 122); break; case 122: - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); + me->SetEmoteState(EMOTE_STATE_NONE); _updateTimer = 3*IN_MILLISECONDS; _instance->SetData(TYPE_EVENT, 130); break; diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp index 29fc33949bc..270f28fbaf0 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp @@ -203,15 +203,13 @@ public: _bubbled = state; if (!state) { - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); if (me->HasUnitState(UNIT_STATE_CASTING)) me->CastStop(); } else { - if (!me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); DoCast(SPELL_ARCANE_FIELD); } } diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp index c5f3f80c6e9..fa0dc783b99 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp @@ -213,7 +213,7 @@ class npc_drakkari_invader : public CreatureScript if (type == POINT_MOTION_TYPE && pointId == POINT_LANDING) { me->Dismount(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); DoCastAOE(SPELL_INVADER_TAUNT); } } diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp index d435b63a0fc..733cac95fa2 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp @@ -78,7 +78,7 @@ public: npc_sylvanas_fosAI(Creature* creature) : ScriptedAI(creature) { Initialize(); - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); } void Initialize() @@ -101,7 +101,7 @@ public: { CloseGossipMenuFor(player); phase = PHASE_INTRO; - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); events.Reset(); events.ScheduleEvent(EVENT_INTRO_1, 1000); } @@ -172,7 +172,7 @@ public: npc_jaina_fosAI(Creature* creature) : ScriptedAI(creature) { Initialize(); - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); } void Initialize() @@ -195,7 +195,7 @@ public: { CloseGossipMenuFor(player); phase = PHASE_INTRO; - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); events.Reset(); events.ScheduleEvent(EVENT_INTRO_1, 1000); } diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_horAI.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_horAI.cpp index aff1ab1d1f7..8e415d1c190 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_horAI.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_horAI.cpp @@ -27,7 +27,7 @@ void boss_horAI::Reset() { _Reset(); me->SetVisible(false); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); me->SetReactState(REACT_PASSIVE); if (instance->GetData(DATA_WAVE_COUNT) != NOT_STARTED) instance->ProcessEvent(NULL, EVENT_DO_WIPE); @@ -38,7 +38,7 @@ void boss_horAI::DoAction(int32 actionId) switch (actionId) { case ACTION_ENTER_COMBAT: // called by InstanceScript when boss shall enter in combat. - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); me->SetReactState(REACT_AGGRESSIVE); DoZoneInCombat(me, 150.0f); break; diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp index 7b0effcbb73..ea15628a362 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp @@ -385,12 +385,12 @@ class npc_jaina_or_sylvanas_intro_hor : public CreatureScript case 0: CloseGossipMenuFor(player); _events.ScheduleEvent(EVENT_START_INTRO, 1000); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); + me->RemoveNpcFlag(NPCFlags(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER)); break; case 1: CloseGossipMenuFor(player); _events.ScheduleEvent(EVENT_SKIP_INTRO, 1000); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); + me->RemoveNpcFlag(NPCFlags(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER)); break; default: break; @@ -404,7 +404,7 @@ class npc_jaina_or_sylvanas_intro_hor : public CreatureScript _utherGUID.Clear(); _lichkingGUID.Clear(); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); + me->RemoveNpcFlag(NPCFlags(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER)); me->SetStandState(UNIT_STAND_STATE_STAND); _events.ScheduleEvent(EVENT_WALK_INTRO1, 3000); } @@ -437,7 +437,7 @@ class npc_jaina_or_sylvanas_intro_hor : public CreatureScript Talk(SAY_JAINA_INTRO_2); else Talk(SAY_SYLVANAS_INTRO_2); - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); + me->AddNpcFlag(NPCFlags(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER)); break; case EVENT_START_INTRO: if (Creature* korelnOrLoralen = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_KORELN_LORALEN))) @@ -633,7 +633,7 @@ class npc_jaina_or_sylvanas_intro_hor : public CreatureScript } if (Creature* uther = ObjectAccessor::GetCreature(*me, _utherGUID)) { - uther->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_COWER); + uther->SetEmoteState(EMOTE_STATE_COWER); if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) uther->AI()->Talk(SAY_UTHER_INTRO_A2_9); else @@ -878,7 +878,7 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript { case 0: CloseGossipMenuFor(player); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); _events.ScheduleEvent(EVENT_ESCAPE_6, 0); break; default: @@ -941,7 +941,7 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript me->RemoveAurasDueToSpell(SPELL_JAINA_ICE_BARRIER); else me->RemoveAurasDueToSpell(SPELL_SYLVANAS_CLOAK_OF_DARKNESS); - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); me->SetHealth(JAINA_SYLVANAS_MAX_HEALTH); me->SetFacingTo(SylvanasShadowThroneDoorPosition.GetOrientation()); break; @@ -993,7 +993,7 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript lichking->AI()->AttackStart(me); } me->SetHealth(JAINA_SYLVANAS_MAX_HEALTH); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); + me->RemoveNpcFlag(NPCFlags(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER)); break; case EVENT_ESCAPE_1: if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_THE_LICH_KING_ESCAPE))) @@ -1018,7 +1018,7 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_THE_LICH_KING_ESCAPE))) { lichking->SetReactState(REACT_PASSIVE); - lichking->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED); + lichking->AddUnitFlag(UNIT_FLAG_PACIFIED); } _events.ScheduleEvent(EVENT_ESCAPE_3, 1500); @@ -1037,7 +1037,7 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_THE_LICH_KING_ESCAPE))) { - lichking->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + lichking->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); lichking->RemoveAllAttackers(); DeleteAllFromThreatList(lichking, me->GetGUID()); @@ -1051,7 +1051,7 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript case EVENT_ESCAPE_6: if (Creature* lichking = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_THE_LICH_KING_ESCAPE))) { - lichking->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_PACIFIED); + lichking->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_PACIFIED)); if (_instance->GetData(DATA_TEAM_IN_INSTANCE) == ALLIANCE) { @@ -1135,7 +1135,7 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript else Talk(SAY_SYLVANAS_ESCAPE_9); DoCast(me, SPELL_CREDIT_ESCAPING_ARTHAS); - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); + me->AddNpcFlag(NPCFlags(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER)); break; default: break; @@ -1933,7 +1933,7 @@ class npc_frostsworn_general : public CreatureScript { if (Creature* reflection = me->SummonCreature(NPC_REFLECTION, *target, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 3000)) { - reflection->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + reflection->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); target->CastSpell(reflection, SPELL_CLONE, true); target->CastSpell(reflection, SPELL_GHOST_VISUAL, true); reflection->AI()->AttackStart(target); @@ -2168,7 +2168,7 @@ struct npc_escape_event_trash : public ScriptedAI DoZoneInCombat(me, 0.0f); if (Creature* leader = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_ESCAPE_LEADER))) { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); me->SetInCombatWith(leader); leader->SetInCombatWith(me); me->AddThreat(leader, 0.0f); @@ -2599,7 +2599,7 @@ class npc_quel_delar_sword : public CreatureScript if (_intro) _events.ScheduleEvent(EVENT_QUEL_DELAR_INIT, 0); else - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); } void EnterCombat(Unit* /*victim*/) override @@ -2667,7 +2667,7 @@ class npc_quel_delar_sword : public CreatureScript case EVENT_QUEL_DELAR_FIGHT: Talk(SAY_QUEL_DELAR_SWORD); me->GetMotionMaster()->MovePoint(0, QuelDelarMovement[2]); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); break; default: break; diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp index e2fbef0622b..a9f9c41f830 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/instance_halls_of_reflection.cpp @@ -127,7 +127,7 @@ class instance_halls_of_reflection : public InstanceMapScript case NPC_KORELN: case NPC_LORALEN: if (GetBossState(DATA_MARWYN) != DONE) - creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); + creature->RemoveNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); KorelnOrLoralenGUID = creature->GetGUID(); break; case NPC_THE_LICH_KING_INTRO: @@ -323,7 +323,7 @@ class instance_halls_of_reflection : public InstanceMapScript bunny->CastSpell(bunny, SPELL_START_HALLS_OF_REFLECTION_QUEST_AE, true); if (Creature* korelnOrLoralen = instance->GetCreature(KorelnOrLoralenGUID)) - korelnOrLoralen->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); + korelnOrLoralen->AddNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); HandleGameObject(EntranceDoorGUID, true); HandleGameObject(ImpenetrableDoorGUID, true); @@ -346,7 +346,7 @@ class instance_halls_of_reflection : public InstanceMapScript break; case DONE: if (GameObject* chest = instance->GetGameObject(CaptainsChestGUID)) - chest->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN); + chest->RemoveFlag(GameObjectFlags(GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN)); DoUseDoorOrButton(CaveInGUID, 15); @@ -596,7 +596,7 @@ class instance_halls_of_reflection : public InstanceMapScript if (Creature* temp = instance->GetCreature(guid)) { temp->CastSpell(temp, SPELL_SPIRIT_ACTIVATE, false); - temp->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NOT_SELECTABLE); + temp->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NOT_SELECTABLE)); temp->AI()->DoZoneInCombat(temp, 100.00f); } } diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp index 73e9ba9fea5..c788d3a46d3 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp @@ -310,7 +310,7 @@ class boss_krick : public CreatureScript Initialize(); me->SetReactState(REACT_PASSIVE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); } Creature* GetIck() diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp index 24f378c601d..443578f011c 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp @@ -152,7 +152,7 @@ class boss_tyrannus : public CreatureScript events.Reset(); events.SetPhase(PHASE_NONE); me->SetReactState(REACT_PASSIVE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); instance->SetBossState(DATA_TYRANNUS, NOT_STARTED); } @@ -168,7 +168,7 @@ class boss_tyrannus : public CreatureScript void AttackStart(Unit* victim) override { - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) + if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)) return; if (victim && me->Attack(victim, true) && !events.IsInPhase(PHASE_INTRO)) @@ -243,7 +243,7 @@ class boss_tyrannus : public CreatureScript if (Creature* rimefang = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_RIMEFANG))) rimefang->AI()->DoAction(ACTION_START_RIMEFANG); //set rimefang also infight events.SetPhase(PHASE_COMBAT); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->SetReactState(REACT_AGGRESSIVE); DoCast(me, SPELL_FULL_HEAL); DoZoneInCombat(); @@ -316,7 +316,7 @@ class boss_rimefang : public CreatureScript Initialize(); me->SetCanFly(true); me->SetReactState(REACT_PASSIVE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); } void JustReachedHome() override diff --git a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp index aaea98fe0a0..258be1c25ed 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp @@ -108,7 +108,7 @@ class boss_drakkari_colossus : public CreatureScript if (GetData(DATA_INTRO_DONE)) { me->SetReactState(REACT_AGGRESSIVE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); me->RemoveAura(SPELL_FREEZE_ANIM); } @@ -140,7 +140,7 @@ class boss_drakkari_colossus : public CreatureScript me->GetMotionMaster()->MoveIdle(); me->SetReactState(REACT_PASSIVE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); DoCast(me, SPELL_FREEZE_ANIM); break; case ACTION_UNFREEZE_COLOSSUS: @@ -149,7 +149,7 @@ class boss_drakkari_colossus : public CreatureScript return; me->SetReactState(REACT_AGGRESSIVE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); me->RemoveAura(SPELL_FREEZE_ANIM); me->SetInCombatWithZone(); @@ -163,7 +163,7 @@ class boss_drakkari_colossus : public CreatureScript void DamageTaken(Unit* /*attacker*/, uint32& damage) override { - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC)) + if (me->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC)) damage = 0; if (phase == COLOSSUS_PHASE_NORMAL || diff --git a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp index 0f6c92a742a..8cceedd3606 100644 --- a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp +++ b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp @@ -97,7 +97,7 @@ class instance_gundrak : public InstanceMapScript if (GetBossState(DATA_SLAD_RAN) == DONE) { if (SladRanStatueState == GO_STATE_ACTIVE) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); else go->SetGoState(GO_STATE_ACTIVE); } @@ -106,7 +106,7 @@ class instance_gundrak : public InstanceMapScript if (GetBossState(DATA_MOORABI) == DONE) { if (MoorabiStatueState == GO_STATE_ACTIVE) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); else go->SetGoState(GO_STATE_ACTIVE); } @@ -115,7 +115,7 @@ class instance_gundrak : public InstanceMapScript if (GetBossState(DATA_DRAKKARI_COLOSSUS) == DONE) { if (DrakkariColossusStatueState == GO_STATE_ACTIVE) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); else go->SetGoState(GO_STATE_ACTIVE); } @@ -171,17 +171,17 @@ class instance_gundrak : public InstanceMapScript case DATA_SLAD_RAN: if (state == DONE) if (GameObject* go = GetGameObject(DATA_SLAD_RAN_ALTAR)) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); break; case DATA_DRAKKARI_COLOSSUS: if (state == DONE) if (GameObject* go = GetGameObject(DATA_DRAKKARI_COLOSSUS_ALTAR)) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); break; case DATA_MOORABI: if (state == DONE) if (GameObject* go = GetGameObject(DATA_MOORABI_ALTAR)) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); break; default: break; @@ -354,7 +354,7 @@ class go_gundrak_altar : public GameObjectScript bool OnGossipHello(Player* /*player*/, GameObject* go) override { - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->AddFlag(GO_FLAG_NOT_SELECTABLE); go->SetGoState(GO_STATE_ACTIVE); if (InstanceScript* instance = go->GetInstanceScript()) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp index 4f54a8c7970..1e0f3819115 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp @@ -244,7 +244,7 @@ class boss_blood_council_controller : public CreatureScript for (uint32 bossData : PrincesData) if (Creature* prince = ObjectAccessor::GetCreature(*me, instance->GetGuidData(bossData))) { - prince->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); + prince->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC)); if (bossData == DATA_PRINCE_VALANAR) prince->SetHealth(prince->GetMaxHealth()); } @@ -453,7 +453,7 @@ struct BloodPrincesBossAI : public BossAI summons.DespawnAll(); me->SetCombatPulseDelay(0); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); _isEmpowered = false; me->SetHealth(_spawnHealth); instance->SetData(DATA_ORB_WHISPERER_ACHIEVEMENT, uint32(true)); @@ -536,7 +536,7 @@ struct BloodPrincesBossAI : public BossAI _isEmpowered = false; if (Creature* controller = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_BLOOD_PRINCES_CONTROL))) { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); controller->AI()->SetData(DATA_PRINCE_EVADE, 1); } } @@ -562,10 +562,9 @@ struct BloodPrincesBossAI : public BossAI { case ACTION_STAND_UP: me->RemoveAurasDueToSpell(SPELL_FEIGN_DEATH); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC); - me->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD); - me->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH); - me->ForceValuesUpdateAtIndex(UNIT_NPC_FLAGS); // was in sniff. don't ask why + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC)); + me->RemoveDynamicFlag(UNIT_DYNFLAG_DEAD); + me->RemoveUnitFlag2(UNIT_FLAG2_FEIGN_DEATH); me->m_Events.AddEvent(new StandUpEvent(me), me->m_Events.CalculateTime(1000)); break; case ACTION_CAST_INVOCATION: @@ -814,7 +813,7 @@ class boss_prince_valanar_icc : public CreatureScript summon->GetPosition(x, y, z); float ground_Z = summon->GetMap()->GetHeight(summon->GetPhaseShift(), x, y, z, true, 500.0f); summon->GetMotionMaster()->MovePoint(POINT_KINETIC_BOMB_IMPACT, x, y, ground_Z); - summon->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + summon->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); break; } case NPC_SHOCK_VORTEX: diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp index 3f6f1f1e03f..e948356041c 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp @@ -212,8 +212,8 @@ class boss_blood_queen_lana_thel : public CreatureScript player->RewardPlayerAndGroupAtEvent(Is25ManRaid() ? NPC_INFILTRATOR_MINCHAR_BQ_25 : NPC_INFILTRATOR_MINCHAR_BQ, player); if (Creature* minchar = me->FindNearestCreature(NPC_INFILTRATOR_MINCHAR_BQ, 200.0f)) { - minchar->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0); - minchar->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND); + minchar->SetEmoteState(EMOTE_ONESHOT_NONE); + minchar->SetAnimTier(UNIT_BYTE1_FLAG_NONE, true); minchar->SetCanFly(false); minchar->RemoveAllAuras(); minchar->GetMotionMaster()->MoveCharge(4629.3711f, 2782.6089f, 401.5301f, SPEED_CHARGE / 3.0f); @@ -245,7 +245,7 @@ class boss_blood_queen_lana_thel : public CreatureScript else { me->SetDisableGravity(true); - me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND); + me->SetAnimTier(UNIT_BYTE1_FLAG_ALWAYS_STAND, true); me->GetMotionMaster()->MovePoint(POINT_MINCHAR, mincharPos); } } @@ -260,7 +260,7 @@ class boss_blood_queen_lana_thel : public CreatureScript { _killMinchar = false; me->SetDisableGravity(true); - me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND); + me->SetAnimTier(UNIT_BYTE1_FLAG_ALWAYS_STAND, true); me->GetMotionMaster()->MovePoint(POINT_MINCHAR, mincharPos); } else @@ -274,7 +274,7 @@ class boss_blood_queen_lana_thel : public CreatureScript void JustReachedHome() override { me->SetDisableGravity(false); - me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND); + me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, true); me->SetReactState(REACT_AGGRESSIVE); _JustReachedHome(); Talk(SAY_WIPE); @@ -324,7 +324,7 @@ class boss_blood_queen_lana_thel : public CreatureScript break; case POINT_GROUND: me->SetDisableGravity(false); - me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND); + me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, true); me->SetReactState(REACT_AGGRESSIVE); if (Unit* victim = me->SelectVictim()) AttackStart(victim); @@ -406,7 +406,7 @@ class boss_blood_queen_lana_thel : public CreatureScript break; } case EVENT_DELIRIOUS_SLASH: - if (!_offtankGUID.IsEmpty() && !me->HasByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER)) + if (!_offtankGUID.IsEmpty() && !(*me->m_unitData->AnimTier & (UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER))) if (Player* _offtank = ObjectAccessor::GetPlayer(*me, _offtankGUID)) DoCast(_offtank, SPELL_DELIRIOUS_SLASH); events.ScheduleEvent(EVENT_DELIRIOUS_SLASH, urand(20000, 24000), EVENT_GROUP_NORMAL); @@ -454,7 +454,7 @@ class boss_blood_queen_lana_thel : public CreatureScript break; case EVENT_AIR_START_FLYING: me->SetDisableGravity(true); - me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND); + me->SetAnimTier(UNIT_BYTE1_FLAG_ALWAYS_STAND, true); me->GetMotionMaster()->MovePoint(POINT_AIR, airPos); break; case EVENT_AIR_FLY_DOWN: diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index ff6226372b7..00710f19342 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -295,7 +295,7 @@ class boss_deathbringer_saurfang : public CreatureScript events.Reset(); events.SetPhase(PHASE_COMBAT); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); if (!_introDone) { DoCast(me, SPELL_GRIP_OF_AGONY); @@ -323,7 +323,7 @@ class boss_deathbringer_saurfang : public CreatureScript void AttackStart(Unit* victim) override { - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC)) + if (me->HasUnitFlag(UNIT_FLAG_IMMUNE_TO_PC)) return; ScriptedAI::AttackStart(victim); @@ -333,7 +333,7 @@ class boss_deathbringer_saurfang : public CreatureScript { ScriptedAI::EnterEvadeMode(why); if (_introDone) - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); } void JustReachedHome() override @@ -369,7 +369,7 @@ class boss_deathbringer_saurfang : public CreatureScript _dead = true; _JustDied(); _EnterEvadeMode(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE)); DoCastAOE(SPELL_REMOVE_MARKS_OF_THE_FALLEN_CHAMPION); DoCast(me, SPELL_ACHIEVEMENT, true); @@ -462,7 +462,7 @@ class boss_deathbringer_saurfang : public CreatureScript switch (eventId) { case EVENT_INTRO_ALLIANCE_2: - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->setFaction(FACTION_SCOURGE); Talk(SAY_INTRO_ALLIANCE_2); break; @@ -475,7 +475,7 @@ class boss_deathbringer_saurfang : public CreatureScript DoCast(me, SPELL_GRIP_OF_AGONY); break; case EVENT_INTRO_HORDE_2: - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->setFaction(FACTION_SCOURGE); Talk(SAY_INTRO_HORDE_2); break; @@ -489,7 +489,7 @@ class boss_deathbringer_saurfang : public CreatureScript case EVENT_INTRO_FINISH: events.SetPhase(PHASE_COMBAT); _introDone = true; - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); break; case EVENT_SUMMON_BLOOD_BEAST: for (uint32 i10 = 0; i10 < 2; ++i10) @@ -663,7 +663,7 @@ class npc_high_overlord_saurfang_icc : public CreatureScript for (std::list<Creature*>::iterator itr = _guardList.begin(); itr != _guardList.end(); ++x, ++itr) (*itr)->AI()->SetData(0, x); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); Talk(SAY_INTRO_HORDE_1); _events.SetPhase(PHASE_INTRO_H); _events.ScheduleEvent(EVENT_INTRO_HORDE_3, 18500, 0, PHASE_INTRO_H); @@ -727,8 +727,8 @@ class npc_high_overlord_saurfang_icc : public CreatureScript if (Creature* deathbringer = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_DEATHBRINGER_SAURFANG))) { deathbringer->CastSpell(me, SPELL_RIDE_VEHICLE, true); // for the packet logs. - deathbringer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - deathbringer->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_DROWNED); + deathbringer->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + deathbringer->SetEmoteState(EMOTE_STATE_DROWNED); } _events.ScheduleEvent(EVENT_OUTRO_HORDE_5, 1000); // move _events.ScheduleEvent(EVENT_OUTRO_HORDE_6, 4000); // say @@ -860,7 +860,7 @@ class npc_muradin_bronzebeard_icc : public CreatureScript for (std::list<Creature*>::iterator itr = _guardList.begin(); itr != _guardList.end(); ++x, ++itr) (*itr)->AI()->SetData(0, x); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); Talk(SAY_INTRO_ALLIANCE_1); _events.ScheduleEvent(EVENT_INTRO_ALLIANCE_4, 2500+17500+9500, 0, PHASE_INTRO_A); _instance->HandleGameObject(_instance->GetGuidData(GO_SAURFANG_S_DOOR), true); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp index e352e109ae9..3814db33f8d 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp @@ -964,7 +964,7 @@ class npc_high_overlord_saurfang_igb : public CreatureScript void sGossipSelect(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/) override { - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); me->GetTransport()->EnableMovement(true); _events.SetPhase(PHASE_INTRO); _events.ScheduleEvent(EVENT_INTRO_H_1, 5000, 0, PHASE_INTRO); @@ -1232,7 +1232,7 @@ class npc_muradin_bronzebeard_igb : public CreatureScript void sGossipSelect(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/) override { - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); me->GetTransport()->EnableMovement(true); _events.SetPhase(PHASE_INTRO); _events.ScheduleEvent(EVENT_INTRO_A_1, 5000); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp index f0e9023ddad..f44a12e81cd 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp @@ -271,7 +271,7 @@ class boss_lady_deathwhisper : public CreatureScript void AttackStart(Unit* victim) override { - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) + if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)) return; if (victim && me->Attack(victim, true) && _phase != PHASE_ONE) @@ -645,12 +645,12 @@ class npc_cult_fanatic : public CreatureScript DoCastSelf(SPELL_PERMANENT_FEIGN_DEATH); DoCastSelf(SPELL_CLEAR_ALL_DEBUFFS); DoCastSelf(SPELL_FULL_HEAL, true); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_UNK_29 | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_UNK_29 | UNIT_FLAG_NOT_SELECTABLE)); }) .Schedule(Seconds(6), [this](TaskContext /*context*/) { me->RemoveAurasDueToSpell(SPELL_PERMANENT_FEIGN_DEATH); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_UNK_29 | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_UNK_29 | UNIT_FLAG_NOT_SELECTABLE)); me->SetReactState(REACT_AGGRESSIVE); DoZoneInCombat(me); @@ -744,12 +744,12 @@ class npc_cult_adherent : public CreatureScript DoCastSelf(SPELL_PERMANENT_FEIGN_DEATH); DoCastSelf(SPELL_CLEAR_ALL_DEBUFFS); DoCastSelf(SPELL_FULL_HEAL, true); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_UNK_29 | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_UNK_29 | UNIT_FLAG_NOT_SELECTABLE)); }) .Schedule(Seconds(6), [this](TaskContext /*context*/) { me->RemoveAurasDueToSpell(SPELL_PERMANENT_FEIGN_DEATH); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_UNK_29 | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_UNK_29 | UNIT_FLAG_NOT_SELECTABLE)); me->SetReactState(REACT_AGGRESSIVE); DoCastSelf(SPELL_SHROUD_OF_THE_OCCULT); DoZoneInCombat(me); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index 805478e66b9..03b3bd43330 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -251,7 +251,7 @@ class boss_professor_putricide : public CreatureScript me->GetMotionMaster()->MovementExpired(); if (instance->GetBossState(DATA_ROTFACE) == DONE && instance->GetBossState(DATA_FESTERGUT) == DONE) - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE)); } void EnterCombat(Unit* who) override diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index 6164f438198..c4c3cc08479 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -324,9 +324,9 @@ class boss_sindragosa : public CreatureScript me->setActive(true); me->SetCanFly(true); me->SetDisableGravity(true); - me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER); + me->SetAnimTier(UnitBytes1_Flags(UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER), false); me->SetSpeedRate(MOVE_FLIGHT, 4.0f); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); float moveTime = me->GetExactDist(&SindragosaFlyPos) / (me->GetSpeed(MOVE_FLIGHT) * 0.001f); me->m_Events.AddEvent(new FrostwyrmLandEvent(*me, SindragosaLandPos), me->m_Events.CalculateTime(uint64(moveTime) + 250)); me->GetMotionMaster()->MovePoint(POINT_FROSTWYRM_FLY_IN, SindragosaFlyPos); @@ -358,9 +358,9 @@ class boss_sindragosa : public CreatureScript me->setActive(false); me->SetCanFly(false); me->SetDisableGravity(false); - me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER); + me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, false); me->SetHomePosition(SindragosaLandPos); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->SetSpeedRate(MOVE_FLIGHT, 2.5f); // Sindragosa enters combat as soon as she lands @@ -386,7 +386,7 @@ class boss_sindragosa : public CreatureScript { me->SetCanFly(false); me->SetDisableGravity(false); - me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER); + me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, false); me->SetReactState(REACT_DEFENSIVE); if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == POINT_MOTION_TYPE) me->GetMotionMaster()->MovementExpired(); @@ -490,7 +490,7 @@ class boss_sindragosa : public CreatureScript Talk(SAY_AIR_PHASE); me->SetCanFly(true); me->SetDisableGravity(true); - me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER); + me->SetAnimTier(UnitBytes1_Flags(UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER), false); me->SetReactState(REACT_PASSIVE); me->AttackStop(); Position pos; @@ -711,7 +711,7 @@ class npc_spinestalker : public CreatureScript me->setActive(true); me->SetSpeedRate(MOVE_FLIGHT, 2.0f); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); float moveTime = me->GetExactDist(&SpinestalkerFlyPos) / (me->GetSpeed(MOVE_FLIGHT) * 0.001f); me->m_Events.AddEvent(new FrostwyrmLandEvent(*me, SpinestalkerLandPos), me->m_Events.CalculateTime(uint64(moveTime) + 250)); me->SetDefaultMovementType(IDLE_MOTION_TYPE); @@ -730,10 +730,10 @@ class npc_spinestalker : public CreatureScript me->setActive(false); me->SetCanFly(false); me->SetDisableGravity(false); - me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER); + me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, false); me->SetHomePosition(SpinestalkerLandPos); me->SetFacingTo(SpinestalkerLandPos.GetOrientation(), true); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->SetReactState(REACT_AGGRESSIVE); } @@ -848,7 +848,7 @@ class npc_rimefang : public CreatureScript me->setActive(true); me->SetSpeedRate(MOVE_FLIGHT, 2.0f); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); float moveTime = me->GetExactDist(&RimefangFlyPos) / (me->GetSpeed(MOVE_FLIGHT) * 0.001f); me->m_Events.AddEvent(new FrostwyrmLandEvent(*me, RimefangLandPos), me->m_Events.CalculateTime(uint64(moveTime) + 250)); me->SetDefaultMovementType(IDLE_MOTION_TYPE); @@ -867,10 +867,10 @@ class npc_rimefang : public CreatureScript me->setActive(false); me->SetCanFly(false); me->SetDisableGravity(false); - me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER); + me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, false); me->SetHomePosition(RimefangLandPos); me->SetFacingTo(RimefangLandPos.GetOrientation(), true); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); me->SetReactState(REACT_AGGRESSIVE); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp index 6b581c4f633..dd25e6ae308 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -512,7 +512,7 @@ class boss_the_lich_king : public CreatureScript void SetupEncounter() { _Reset(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); me->SetReactState(REACT_PASSIVE); events.SetPhase(PHASE_INTRO); Initialize(); @@ -534,7 +534,7 @@ class boss_the_lich_king : public CreatureScript _JustDied(); DoCastAOE(SPELL_PLAY_MOVIE, false); me->SetDisableGravity(false); - me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER); + me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, false); me->GetMotionMaster()->MoveFall(); if (Creature* frostmourne = me->FindNearestCreature(NPC_FROSTMOURNE_TRIGGER, 50.0f)) frostmourne->DespawnOrUnsummon(); @@ -915,7 +915,7 @@ class boss_the_lich_king : public CreatureScript break; case EVENT_FINISH_INTRO: me->SetWalk(false); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); me->SetReactState(REACT_AGGRESSIVE); events.SetPhase(PHASE_ONE); break; @@ -1093,7 +1093,7 @@ class boss_the_lich_king : public CreatureScript CreatureTextMgr::SendSound(me, SOUND_PAIN, CHAT_MSG_MONSTER_YELL); // set flight me->SetDisableGravity(true); - me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER); + me->SetAnimTier(UnitBytes1_Flags(UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER), false); me->GetMotionMaster()->MovePoint(POINT_LK_OUTRO_2, OutroFlying); break; case EVENT_OUTRO_TALK_7: @@ -1144,7 +1144,7 @@ class npc_tirion_fordring_tft : public CreatureScript { _events.Reset(); if (_instance->GetBossState(DATA_THE_LICH_KING) == DONE) - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); me->LoadEquipment(1); } @@ -1156,7 +1156,7 @@ class npc_tirion_fordring_tft : public CreatureScript switch (id) { case POINT_TIRION_INTRO: - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H); + me->SetEmoteState(EMOTE_STATE_READY2H); if (Creature* theLichKing = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_THE_LICH_KING))) theLichKing->AI()->DoAction(ACTION_START_ENCOUNTER); break; @@ -1197,7 +1197,7 @@ class npc_tirion_fordring_tft : public CreatureScript if (me->GetCreatureTemplate()->GossipMenuId == menuId && !gossipListId) { _events.SetPhase(PHASE_INTRO); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); me->SetWalk(true); me->GetMotionMaster()->MovePoint(POINT_TIRION_INTRO, TirionIntro); } @@ -1205,7 +1205,7 @@ class npc_tirion_fordring_tft : public CreatureScript void JustReachedHome() override { - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); + me->SetEmoteState(EMOTE_ONESHOT_NONE); } void UpdateAI(uint32 diff) override @@ -1488,7 +1488,7 @@ class npc_valkyr_shadowguard : public CreatureScript case POINT_CHARGE: if (Player* target = ObjectAccessor::GetPlayer(*me, _grabbedPlayer)) { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); if (GameObject* platform = ObjectAccessor::GetGameObject(*me, _instance->GetGuidData(DATA_ARTHAS_PLATFORM))) { std::list<Creature*> triggers; @@ -1734,7 +1734,7 @@ class npc_terenas_menethil : public CreatureScript damage = me->GetHealth() - 1; if (!me->HasAura(SPELL_TERENAS_LOSES_INSIDE) && !IsHeroic()) { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); DoCast(SPELL_TERENAS_LOSES_INSIDE); _events.ScheduleEvent(EVENT_TELEPORT_BACK, 1000); if (Creature* warden = me->FindNearestCreature(NPC_SPIRIT_WARDEN, 20.0f)) @@ -1789,13 +1789,13 @@ class npc_terenas_menethil : public CreatureScript if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_THE_LICH_KING))) { lichKing->AI()->DoAction(ACTION_FINISH_OUTRO); - lichKing->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC); + lichKing->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC); if (Creature* tirion = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_HIGHLORD_TIRION_FORDRING))) tirion->AI()->AttackStart(lichKing); } break; case EVENT_DESTROY_SOUL: - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); if (Creature* warden = me->FindNearestCreature(NPC_SPIRIT_WARDEN, 20.0f)) warden->CastSpell((Unit*)NULL, SPELL_DESTROY_SOUL, TRIGGERED_NONE); DoCast(SPELL_TERENAS_LOSES_INSIDE); @@ -2774,7 +2774,7 @@ class spell_the_lich_king_vile_spirit_damage_target_search : public SpellScriptL summoner->GetAI()->SetData(DATA_VILE, 1); GetCaster()->CastSpell((Unit*)NULL, SPELL_SPIRIT_BURST, true); GetCaster()->ToCreature()->DespawnOrUnsummon(3000); - GetCaster()->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + GetCaster()->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); } void Register() override diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index 63e6fb7c8d2..e4b0bcf0ccb 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -402,7 +402,7 @@ class boss_valithria_dreamwalker : public CreatureScript DoCast(me, SPELL_AWARD_REPUTATION_BOSS_KILL); // this display id was found in sniff instead of the one on aura me->SetDisplayId(11686); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->DespawnOrUnsummon(4000); if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VALITHRIA_LICH_KING))) lichKing->CastSpell(lichKing, SPELL_SPAWN_CHEST, false); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index 66dd765a485..b86138d2e62 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -829,7 +829,7 @@ class boss_sister_svalna : public CreatureScript case ACTION_START_GAUNTLET: me->setActive(true); _isEventInProgress = true; - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); events.ScheduleEvent(EVENT_SVALNA_START, 25000); break; case ACTION_RESURRECT_CAPTAINS: @@ -863,7 +863,7 @@ class boss_sister_svalna : public CreatureScript _isEventInProgress = false; me->setActive(false); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); me->SetDisableGravity(false); me->SetHover(false); } @@ -880,7 +880,7 @@ class boss_sister_svalna : public CreatureScript { Talk(EMOTE_SVALNA_IMPALE, target); summon->CastCustomSpell(VEHICLE_SPELL_RIDE_HARDCODED, SPELLVALUE_BASE_POINT0, 1, target, false); - summon->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_UNK1 | UNIT_FLAG2_ALLOW_ENEMY_INTERACT); + summon->AddUnitFlag2(UnitFlags2(UNIT_FLAG2_UNK1 | UNIT_FLAG2_ALLOW_ENEMY_INTERACT)); } break; default: @@ -1779,8 +1779,8 @@ class spell_icc_stoneform : public SpellScriptLoader if (Creature* target = GetTarget()->ToCreature()) { target->SetReactState(REACT_PASSIVE); - target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC); - target->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_CUSTOM_SPELL_02); + target->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC)); + target->SetEmoteState(EMOTE_STATE_CUSTOM_SPELL_02); } } @@ -1789,8 +1789,8 @@ class spell_icc_stoneform : public SpellScriptLoader if (Creature* target = GetTarget()->ToCreature()) { target->SetReactState(REACT_AGGRESSIVE); - target->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC); - target->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0); + target->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC)); + target->SetEmoteState(EMOTE_ONESHOT_NONE); } } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index 248bbed2791..8ae9bf6c228 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -156,12 +156,12 @@ class instance_icecrown_citadel : public InstanceMapScript { if (usable) { - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); go->SetGoState(GO_STATE_ACTIVE); } else { - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->AddFlag(GO_FLAG_NOT_SELECTABLE); go->SetGoState(GO_STATE_READY); } } @@ -639,7 +639,7 @@ class instance_icecrown_citadel : public InstanceMapScript case GO_CACHE_OF_THE_DREAMWALKER_25H: if (Creature* valithria = instance->GetCreature(ValithriaDreamwalkerGUID)) go->SetLootRecipient(valithria->GetLootRecipient(), valithria->GetLootRecipientGroup()); - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN); + go->RemoveFlag(GameObjectFlags(GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN)); break; case GO_ARTHAS_PLATFORM: ArthasPlatformGUID = go->GetGUID(); @@ -854,7 +854,7 @@ class instance_icecrown_citadel : public InstanceMapScript SetTeleporterState(teleporter, true); if (GameObject* loot = instance->GetGameObject(GunshipArmoryGUID)) - loot->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN); + loot->RemoveFlag(GameObjectFlags(GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN)); } else if (state == FAIL) Events.ScheduleEvent(EVENT_RESPAWN_GUNSHIP, 30000); @@ -868,7 +868,7 @@ class instance_icecrown_citadel : public InstanceMapScript { if (Creature* deathbringer = instance->GetCreature(DeathbringerSaurfangGUID)) loot->SetLootRecipient(deathbringer->GetLootRecipient(), deathbringer->GetLootRecipientGroup()); - loot->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN); + loot->RemoveFlag(GameObjectFlags(GO_FLAG_LOCKED | GO_FLAG_NOT_SELECTABLE | GO_FLAG_NODESPAWN)); } if (GameObject* teleporter = instance->GetGameObject(TeleporterUpperSpireGUID)) diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp index 0ecd4960508..7b7bd614692 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp @@ -224,7 +224,7 @@ public: return; _Reset(); me->SetReactState(REACT_PASSIVE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE)); _skeletonCount = 0; _bansheeCount = 0; _abominationCount = 0; @@ -425,7 +425,7 @@ public: case EVENT_PHASE_TWO: me->CastStop(); events.SetPhase(PHASE_TWO); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC)); me->getThreatManager().resetAllAggro(); me->SetReactState(REACT_AGGRESSIVE); Talk(EMOTE_PHASE_TWO); @@ -522,7 +522,7 @@ public: case ACTION_BEGIN_ENCOUNTER: if (instance->GetBossState(BOSS_KELTHUZAD) != NOT_STARTED) return; - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); instance->SetBossState(BOSS_KELTHUZAD, IN_PROGRESS); events.SetPhase(PHASE_ONE); DoZoneInCombat(); @@ -806,7 +806,7 @@ public: me->RemoveAllAuras(); me->CombatStop(); me->StopMoving(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); me->DespawnOrUnsummon(30 * IN_MILLISECONDS); // just in case anything interrupts the movement me->GetMotionMaster()->MoveTargetedHome(); default: diff --git a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp index 20f81cb69d5..1702ba7038c 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_noth.cpp @@ -105,7 +105,7 @@ public: { DoCastAOE(SPELL_TELEPORT_BACK); me->SetReactState(REACT_AGGRESSIVE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE)); } balconyCount = 0; @@ -243,7 +243,7 @@ public: case EVENT_BALCONY: events.SetPhase(PHASE_BALCONY); me->SetReactState(REACT_PASSIVE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE)); me->AttackStop(); me->StopMoving(); me->RemoveAllAuras(); @@ -299,7 +299,7 @@ public: EnterPhaseGround(); break; case EVENT_GROUND_ATTACKABLE: - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE)); me->SetReactState(REACT_AGGRESSIVE); break; } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp index 8c5c6697cd6..a378ad1ddbf 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_razuvious.cpp @@ -187,7 +187,7 @@ class npc_dk_understudy : public CreatureScript void EnterCombat(Unit* /*who*/) override { - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); + me->SetEmoteState(EMOTE_ONESHOT_NONE); if (Creature* razuvious = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_RAZUVIOUS))) razuvious->AI()->DoZoneInCombat(nullptr, 250.0f); } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp index fba8b107d21..ea35f4c2283 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp @@ -125,7 +125,7 @@ class boss_sapphiron : public CreatureScript if (!instance->GetData(DATA_HAD_SAPPHIRON_BIRTH)) { me->SetVisible(false); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->SetReactState(REACT_PASSIVE); } @@ -362,7 +362,7 @@ class boss_sapphiron : public CreatureScript return; case EVENT_BIRTH: me->SetVisible(true); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->SetReactState(REACT_AGGRESSIVE); return; } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp index cbd4ca56603..7c807570cd5 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_thaddius.cpp @@ -299,7 +299,7 @@ struct boss_thaddius : public BossAI { events.SetPhase(PHASE_TRANSITION); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); events.ScheduleEvent(EVENT_TRANSITION_1, Seconds(10), 0, PHASE_TRANSITION); events.ScheduleEvent(EVENT_TRANSITION_2, Seconds(12), 0, PHASE_TRANSITION); @@ -320,7 +320,7 @@ struct boss_thaddius : public BossAI me->DespawnOrUnsummon(); me->SetRespawnTime(initial ? 5 : 30); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED)); events.SetPhase(PHASE_RESETTING); if (Creature* feugen = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FEUGEN))) feugen->AI()->DoAction(ACTION_BEGIN_RESET_ENCOUNTER); @@ -384,8 +384,8 @@ struct boss_thaddius : public BossAI me->CastSpell(me, SPELL_THADDIUS_SPARK_VISUAL, true); ballLightningUnlocked = false; me->RemoveAura(SPELL_THADDIUS_INACTIVE_VISUAL); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_STUNNED); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); me->SetReactState(REACT_AGGRESSIVE); DoZoneInCombat(); @@ -492,7 +492,7 @@ public: // if the encounter reset while feigning death me->SetStandState(UNIT_STAND_STATE_STAND); me->SetReactState(REACT_AGGRESSIVE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); isOverloading = false; isFeignDeath = false; @@ -543,7 +543,7 @@ public: me->SetFullHealth(); me->SetStandState(UNIT_STAND_STATE_STAND); me->SetReactState(REACT_AGGRESSIVE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); Talk(EMOTE_FEIGN_REVIVE); isFeignDeath = false; @@ -619,7 +619,7 @@ public: if (Creature* thaddius = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THADDIUS))) thaddius->AI()->DoAction(ACTION_STALAGG_DIED); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->RemoveAllAuras(); me->SetReactState(REACT_PASSIVE); me->AttackStop(); @@ -643,7 +643,7 @@ public: if (!isOverloading) { isOverloading = true; - caster->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + caster->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); if (Creature* creatureCaster = caster->ToCreature()) creatureCaster->AI()->Talk(EMOTE_TESLA_LINK_BREAKS); me->RemoveAura(SPELL_STALAGG_CHAIN_VISUAL); @@ -660,7 +660,7 @@ public: refreshBeam = false; caster->CastStop(); caster->CastSpell(me, SPELL_STALAGG_CHAIN_VISUAL, true); - caster->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + caster->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); } } @@ -760,7 +760,7 @@ public: // if the encounter reset while feigning death me->SetStandState(UNIT_STAND_STATE_STAND); me->SetReactState(REACT_AGGRESSIVE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); isOverloading = false; isFeignDeath = false; @@ -812,7 +812,7 @@ public: me->SetFullHealth(); me->SetStandState(UNIT_STAND_STATE_STAND); me->SetReactState(REACT_AGGRESSIVE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); Talk(EMOTE_FEIGN_REVIVE); isFeignDeath = false; @@ -894,7 +894,7 @@ public: me->AttackStop(); me->StopMoving(); me->SetStandState(UNIT_STAND_STATE_DEAD); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); damage = 0; @@ -913,7 +913,7 @@ public: if (!isOverloading) { isOverloading = true; - caster->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + caster->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); if (Creature* creatureCaster = caster->ToCreature()) creatureCaster->AI()->Talk(EMOTE_TESLA_LINK_BREAKS); me->RemoveAura(SPELL_STALAGG_CHAIN_VISUAL); @@ -930,7 +930,7 @@ public: refreshBeam = false; caster->CastStop(); caster->CastSpell(me, SPELL_FEUGEN_CHAIN_VISUAL, true); - caster->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + caster->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); } } diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index 72212009dea..04cf9e29ae4 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -223,23 +223,23 @@ class instance_naxxramas : public InstanceMapScript break; case GO_NAXX_PORTAL_ARACHNID: if (GetBossState(BOSS_MAEXXNA) == DONE) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); break; case GO_NAXX_PORTAL_CONSTRUCT: if (GetBossState(BOSS_THADDIUS) == DONE) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); break; case GO_NAXX_PORTAL_PLAGUE: if (GetBossState(BOSS_LOATHEB) == DONE) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); break; case GO_NAXX_PORTAL_MILITARY: if (GetBossState(BOSS_HORSEMEN) == DONE) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); break; case GO_KELTHUZAD_THRONE: if (GetBossState(BOSS_KELTHUZAD) == DONE) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); break; case GO_BIRTH: if (hadSapphironBirth || GetBossState(BOSS_SAPPHIRON) == DONE) @@ -379,7 +379,7 @@ class instance_naxxramas : public InstanceMapScript if (state == DONE) { if (GameObject* teleporter = GetGameObject(DATA_NAXX_PORTAL_ARACHNID)) - teleporter->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + teleporter->RemoveFlag(GO_FLAG_NOT_SELECTABLE); events.ScheduleEvent(EVENT_KELTHUZAD_WING_TAUNT, Seconds(6)); } @@ -388,7 +388,7 @@ class instance_naxxramas : public InstanceMapScript if (state == DONE) { if (GameObject* teleporter = GetGameObject(DATA_NAXX_PORTAL_PLAGUE)) - teleporter->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + teleporter->RemoveFlag(GO_FLAG_NOT_SELECTABLE); events.ScheduleEvent(EVENT_KELTHUZAD_WING_TAUNT, Seconds(6)); } @@ -397,7 +397,7 @@ class instance_naxxramas : public InstanceMapScript if (state == DONE) { if (GameObject* teleporter = GetGameObject(DATA_NAXX_PORTAL_CONSTRUCT)) - teleporter->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + teleporter->RemoveFlag(GO_FLAG_NOT_SELECTABLE); events.ScheduleEvent(EVENT_KELTHUZAD_WING_TAUNT, Seconds(6)); } @@ -412,11 +412,11 @@ class instance_naxxramas : public InstanceMapScript if (GameObject* horsemenChest = instance->GetGameObject(HorsemenChestGUID)) { horsemenChest->SetRespawnTime(horsemenChest->GetRespawnDelay()); - horsemenChest->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + horsemenChest->RemoveFlag(GO_FLAG_NOT_SELECTABLE); } if (GameObject* teleporter = GetGameObject(DATA_NAXX_PORTAL_MILITARY)) - teleporter->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + teleporter->RemoveFlag(GO_FLAG_NOT_SELECTABLE); events.ScheduleEvent(EVENT_KELTHUZAD_WING_TAUNT, Seconds(6)); } @@ -429,7 +429,7 @@ class instance_naxxramas : public InstanceMapScript case BOSS_KELTHUZAD: if (state == DONE) if (GameObject* throne = GetGameObject(DATA_KELTHUZAD_THRONE)) - throne->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + throne->RemoveFlag(GO_FLAG_NOT_SELECTABLE); break; default: break; diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp index f9501833f44..4fc9b664132 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp @@ -380,9 +380,9 @@ public: Initialize(); me->SetDisableGravity(true); - me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->SetAnimTier(UnitBytes1_Flags(UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER), false); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); // TO DO: find what in core is making boss slower than in retail (when correct speed data) or find missing movement flag update or forced spline change me->SetSpeedRate(MOVE_FLIGHT, _flySpeed * 0.25f); if (_despawned) @@ -471,7 +471,7 @@ public: pos.m_positionZ = alexstraszaBunny->GetPositionZ(); alexstraszaBunny->GetNearPoint2D(pos.m_positionX, pos.m_positionY, 30.0f, alexstraszaBunny->GetAngle(me)); me->GetMotionMaster()->MoveLand(POINT_LAND_P_ONE, pos); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); me->SetReactState(REACT_AGGRESSIVE); me->SetInCombatWithZone(); events.ScheduleEvent(EVENT_LAND_START_ENCOUNTER, 7*IN_MILLISECONDS, 1, PHASE_NOT_STARTED); @@ -722,7 +722,7 @@ public: if (!_firstCyclicMovementStarted) { _firstCyclicMovementStarted = true; - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); if (Creature* alexstraszaBunny = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_ALEXSTRASZA_BUNNY_GUID))) me->SetFacingToObject(alexstraszaBunny); events.ScheduleEvent(EVENT_SUMMON_ARCANE_BOMB, 1*IN_MILLISECONDS, 0, PHASE_TWO); @@ -954,7 +954,7 @@ public: DoCast(me, SPELL_IMMUNE_CURSES); _canAttack = true; UpdateVictim(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); SetPhase(PHASE_THREE, true); break; case EVENT_SURGE_OF_POWER_P_THREE: @@ -1204,7 +1204,7 @@ public: { me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation()); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetDisableGravity(false); me->SetCanFly(false); } @@ -1234,7 +1234,7 @@ public: if (vehicleTemp->GetPassenger(0) && vehicleTemp->GetPassenger(0)->GetTypeId() == TYPEID_PLAYER) { vehicleTemp->RemoveAllPassengers(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); } } @@ -2149,7 +2149,7 @@ class spell_alexstrasza_bunny_destroy_platform_event : public SpellScriptLoader Creature* caster = GetCaster()->ToCreature(); if (InstanceScript* instance = caster->GetInstanceScript()) if (GameObject* platform = caster->GetMap()->GetGameObject(instance->GetGuidData(DATA_PLATFORM))) - platform->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED); + platform->AddFlag(GO_FLAG_DESTROYED); } void HandleScript(SpellEffIndex /*effIndex*/) @@ -2431,13 +2431,13 @@ class spell_alexstrasza_gift_beam_visual : public SpellScriptLoader if (Creature* target = GetTarget()->ToCreature()) if (InstanceScript* instance = GetCaster()->GetInstanceScript()) { - _alexstraszaGift->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + _alexstraszaGift->RemoveFlag(GO_FLAG_NOT_SELECTABLE); if (GameObject* heartMagic = target->GetMap()->GetGameObject(instance->GetGuidData(DATA_HEART_OF_MAGIC_GUID))) { - heartMagic->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + heartMagic->RemoveFlag(GO_FLAG_NOT_SELECTABLE); // TO DO: This is hack, core doesn't have support for these flags, // remove line below if it ever gets supported otherwise object won't be accessible. - heartMagic->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND); + heartMagic->RemoveFlag(GO_FLAG_INTERACT_COND); } } } diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp index 09e1fef50e5..5026d793dd2 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp @@ -77,7 +77,7 @@ public: SpawnGameObject(GO_EXIT_PORTAL, exitPortalPosition); if (GameObject* platform = instance->GetGameObject(platformGUID)) - platform->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_DESTROYED); + platform->RemoveFlag(GO_FLAG_DESTROYED); } else if (state == DONE) SpawnGameObject(GO_EXIT_PORTAL, exitPortalPosition); @@ -161,7 +161,7 @@ public: alexstraszaBunny->CastSpell(alexstraszaBunny, SPELL_IRIS_OPENED); if (GameObject* iris = instance->GetGameObject(irisGUID)) - iris->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE); + iris->AddFlag(GO_FLAG_IN_USE); if (Creature* malygos = instance->GetCreature(malygosGUID)) malygos->AI()->DoAction(0); // ACTION_LAND_ENCOUNTER_START diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp index b2241f59a63..a6b04ca0228 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp @@ -84,7 +84,7 @@ class boss_keristrasza : public CreatureScript Initialize(); _intenseColdList.clear(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); + me->RemoveUnitFlag(UNIT_FLAG_STUNNED); RemovePrison(CheckContainmentSpheres()); _Reset(); @@ -130,15 +130,15 @@ class boss_keristrasza : public CreatureScript { if (remove) { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); if (me->HasAura(SPELL_FROZEN_PRISON)) me->RemoveAurasDueToSpell(SPELL_FROZEN_PRISON); } else { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); DoCast(me, SPELL_FROZEN_PRISON, false); } } @@ -228,7 +228,7 @@ public: if (pKeristrasza && pKeristrasza->IsAlive()) { // maybe these are hacks :( - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->AddFlag(GO_FLAG_NOT_SELECTABLE); go->SetGoState(GO_STATE_ACTIVE); ENSURE_AI(boss_keristrasza::boss_keristraszaAI, pKeristrasza->AI())->CheckContainmentSpheres(true); diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp index 689fb526a45..27fb04e55eb 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp @@ -134,7 +134,7 @@ public: { Initialize(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetVisible(true); instance->SetBossState(DATA_MAGUS_TELESTRA, NOT_STARTED); @@ -248,7 +248,7 @@ public: me->AttackStop(); if (uiIsWaitingToAppearTimer <= diff) { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); bIsWaitingToAppear = false; } else uiIsWaitingToAppearTimer -= diff; return; @@ -285,7 +285,7 @@ public: me->CastStop(); me->RemoveAllAuras(); me->SetVisible(false); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); uiFireMagusGUID = SplitPersonality(NPC_FIRE_MAGUS); uiFrostMagusGUID = SplitPersonality(NPC_FROST_MAGUS); uiArcaneMagusGUID = SplitPersonality(NPC_ARCANE_MAGUS); @@ -302,7 +302,7 @@ public: me->CastStop(); me->RemoveAllAuras(); me->SetVisible(false); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); uiFireMagusGUID = SplitPersonality(NPC_FIRE_MAGUS); uiFrostMagusGUID = SplitPersonality(NPC_FROST_MAGUS); uiArcaneMagusGUID = SplitPersonality(NPC_ARCANE_MAGUS); diff --git a/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp index e8c82093f0b..4b7027fb992 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/instance_nexus.cpp @@ -102,17 +102,17 @@ class instance_nexus : public InstanceMapScript case GO_ANOMALUS_CONTAINMET_SPHERE: AnomalusContainmentSphere = go->GetGUID(); if (GetBossState(DATA_ANOMALUS) == DONE) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); break; case GO_ORMOROKS_CONTAINMET_SPHERE: OrmoroksContainmentSphere = go->GetGUID(); if (GetBossState(DATA_ORMOROK) == DONE) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); break; case GO_TELESTRAS_CONTAINMET_SPHERE: TelestrasContainmentSphere = go->GetGUID(); if (GetBossState(DATA_MAGUS_TELESTRA) == DONE) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); break; default: break; @@ -130,21 +130,21 @@ class instance_nexus : public InstanceMapScript if (state == DONE) { if (GameObject* sphere = instance->GetGameObject(TelestrasContainmentSphere)) - sphere->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + sphere->RemoveFlag(GO_FLAG_NOT_SELECTABLE); } break; case DATA_ANOMALUS: if (state == DONE) { if (GameObject* sphere = instance->GetGameObject(AnomalusContainmentSphere)) - sphere->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + sphere->RemoveFlag(GO_FLAG_NOT_SELECTABLE); } break; case DATA_ORMOROK: if (state == DONE) { if (GameObject* sphere = instance->GetGameObject(OrmoroksContainmentSphere)) - sphere->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + sphere->RemoveFlag(GO_FLAG_NOT_SELECTABLE); } break; default: diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp index d208dd34624..63aa56865e0 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_varos.cpp @@ -282,10 +282,10 @@ class spell_varos_centrifuge_shield : public SpellScriptLoader if (Unit* caster = GetCaster()) { // flags taken from sniffs - if (caster->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_15|UNIT_FLAG_IMMUNE_TO_NPC|UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_UNK_6)) + if (caster->HasUnitFlag(UnitFlags(UNIT_FLAG_UNK_15 | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_UNK_6))) { caster->ToCreature()->SetReactState(REACT_PASSIVE); - caster->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_15|UNIT_FLAG_IMMUNE_TO_NPC|UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_UNK_6); + caster->AddUnitFlag(UnitFlags(UNIT_FLAG_UNK_15 | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_UNK_6)); } } } @@ -295,7 +295,7 @@ class spell_varos_centrifuge_shield : public SpellScriptLoader if (Unit* caster = GetCaster()) { caster->ToCreature()->SetReactState(REACT_AGGRESSIVE); - caster->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_15|UNIT_FLAG_IMMUNE_TO_NPC|UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_UNK_6); + caster->RemoveUnitFlag(UnitFlags(UNIT_FLAG_UNK_15 | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_UNK_6)); } } diff --git a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp index 822887b907e..36cdda60de0 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/instance_oculus.cpp @@ -90,7 +90,7 @@ class instance_oculus : public InstanceMapScript BelgaristraszGUID = creature->GetGUID(); if (GetBossState(DATA_DRAKOS) == DONE) { - creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + creature->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); creature->Relocate(BelgaristraszMove); } break; @@ -98,7 +98,7 @@ class instance_oculus : public InstanceMapScript EternosGUID = creature->GetGUID(); if (GetBossState(DATA_DRAKOS) == DONE) { - creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + creature->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); creature->Relocate(EternosMove); } break; @@ -106,7 +106,7 @@ class instance_oculus : public InstanceMapScript VerdisaGUID = creature->GetGUID(); if (GetBossState(DATA_DRAKOS) == DONE) { - creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + creature->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); creature->Relocate(VerdisaMove); } break; @@ -232,7 +232,7 @@ class instance_oculus : public InstanceMapScript if (GameObject* cache = instance->GetGameObject(EregosCacheGUID)) { cache->SetRespawnTime(cache->GetRespawnDelay()); - cache->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + cache->RemoveFlag(GO_FLAG_NOT_SELECTABLE); } } break; diff --git a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp index 4222967055d..522fd6065fe 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp @@ -201,7 +201,7 @@ class npc_verdisa_beglaristrasz_eternos : public CreatureScript Talk(SAY_BELGARISTRASZ); // The gossip flag should activate when Drakos die and not from DB - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); } }; diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp index b892556b637..3e9ea51bb9d 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp @@ -116,7 +116,7 @@ public: Initialize(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->SetControlled(false, UNIT_STATE_ROOT); if (!me->IsVisible()) @@ -156,7 +156,7 @@ public: me->AttackStop(); me->SetVisible(false); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->SetControlled(true, UNIT_STATE_ROOT); me->GetMotionMaster()->Clear(); @@ -241,7 +241,7 @@ public: else if (lSparkList.empty()) { me->SetVisible(true); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->SetControlled(false, UNIT_STATE_ROOT); DoCast(me, SPELL_SPARK_DESPAWN, false); diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp index d8a308eedf6..5e8fb169224 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp @@ -234,7 +234,7 @@ public: if (Creature* summon = me->SummonCreature(NPC_DARK_MATTER_TARGET, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN, 1000)) { summon->SetDisplayId(11686); - summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + summon->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); summon->CastSpell(target, SPELL_DARK_MATTER, true); } } @@ -250,7 +250,7 @@ public: if (Creature* summon = me->SummonCreature(NPC_SEARING_GAZE_TARGET, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN, 1000)) { summon->SetDisplayId(11686); - summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + summon->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); summon->CastSpell(target, SPELL_SEARING_GAZE, true); } } @@ -419,7 +419,7 @@ public: void StartWP() { - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); SetEscortPaused(false); uiStep = 1; Start(); @@ -684,7 +684,7 @@ public: Player* player = GetPlayerForEscort(); if (player) player->GroupEventHappens(QUEST_HALLS_OF_STONE, me); - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); JumpToNextStep(180000); break; } diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp index 84ede5bfffd..ce3cffaae7a 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/instance_halls_of_stone.cpp @@ -92,7 +92,7 @@ class instance_halls_of_stone : public InstanceMapScript case GO_TRIBUNAL_CHEST_HERO: TribunalChestGUID = go->GetGUID(); if (GetBossState(DATA_TRIBUNAL_OF_AGES) == DONE) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); break; case GO_TRIBUNAL_SKY_FLOOR: TribunalSkyFloorGUID = go->GetGUID(); @@ -161,7 +161,7 @@ class instance_halls_of_stone : public InstanceMapScript if (state == DONE) { if (GameObject* go = instance->GetGameObject(TribunalChestGUID)) - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); } break; default: diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp index 8f6005bc1fe..f4c3bfeea0a 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp @@ -348,7 +348,7 @@ class boss_algalon_the_observer : public CreatureScript { case ACTION_START_INTRO: { - me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_INSTANTLY_APPEAR_MODEL); + me->AddUnitFlag2(UNIT_FLAG2_INSTANTLY_APPEAR_MODEL); me->SetDisableGravity(true); DoCast(me, SPELL_ARRIVAL, true); DoCast(me, SPELL_RIDE_THE_LIGHTNING, true); @@ -380,11 +380,11 @@ class boss_algalon_the_observer : public CreatureScript events.ScheduleEvent(EVENT_DESPAWN_ALGALON_2, 17000); events.ScheduleEvent(EVENT_DESPAWN_ALGALON_3, 26000); me->DespawnOrUnsummon(34000); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC)); break; case ACTION_INIT_ALGALON: _firstPull = false; - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); break; } } @@ -397,7 +397,7 @@ class boss_algalon_the_observer : public CreatureScript void EnterCombat(Unit* /*target*/) override { uint32 introDelay = 0; - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC)); events.Reset(); events.SetPhase(PHASE_ROLE_PLAY); @@ -504,7 +504,7 @@ class boss_algalon_the_observer : public CreatureScript { instance->SetBossState(BOSS_ALGALON, FAIL); BossAI::EnterEvadeMode(why); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); me->SetSheath(SHEATH_STATE_UNARMED); } @@ -540,7 +540,7 @@ class boss_algalon_the_observer : public CreatureScript me->SetReactState(REACT_PASSIVE); me->AttackStop(); me->setFaction(35); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); DoCast(me, SPELL_SELF_STUN); events.Reset(); summons.DespawnAll(); @@ -579,7 +579,7 @@ class boss_algalon_the_observer : public CreatureScript break; case EVENT_INTRO_FINISH: events.Reset(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); break; case EVENT_START_COMBAT: instance->SetBossState(BOSS_ALGALON, IN_PROGRESS); @@ -588,7 +588,7 @@ class boss_algalon_the_observer : public CreatureScript { events.SetPhase(PHASE_NORMAL); me->SetSheath(SHEATH_STATE_MELEE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_NPC)); me->SetReactState(REACT_DEFENSIVE); DoCastAOE(SPELL_SUPERMASSIVE_FAIL, true); //! Workaround for Creature::_IsTargetAcceptable returning false @@ -662,7 +662,7 @@ class boss_algalon_the_observer : public CreatureScript break; case EVENT_OUTRO_1: me->RemoveAllAuras(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_RENAME); + me->AddUnitFlag(UNIT_FLAG_RENAME); break; case EVENT_OUTRO_2: _EnterEvadeMode(); @@ -673,7 +673,7 @@ class boss_algalon_the_observer : public CreatureScript break; case EVENT_OUTRO_4: DoCastAOE(SPELL_SUPERMASSIVE_FAIL); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); break; case EVENT_OUTRO_5: if (Creature* brann = DoSummon(NPC_BRANN_BRONZBEARD_ALG, BrannOutroPos[0], 131500, TEMPSUMMON_TIMED_DESPAWN)) @@ -762,7 +762,7 @@ class npc_living_constellation : public CreatureScript if (Unit* target = algalon->AI()->SelectTarget(SELECT_TARGET_RANDOM, 0, NonTankTargetSelector(algalon))) { me->SetReactState(REACT_AGGRESSIVE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); AttackStart(target); DoZoneInCombat(); _isActive = true; @@ -982,7 +982,7 @@ class go_celestial_planetarium_access : public GameObjectScript if (!isUse) return true; - if (go->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE)) + if (go->HasFlag(GO_FLAG_IN_USE)) return true; bool hasKey = true; @@ -1006,7 +1006,7 @@ class go_celestial_planetarium_access : public GameObjectScript return false; // Start Algalon event - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE); + go->AddFlag(GO_FLAG_IN_USE); _events.ScheduleEvent(EVENT_DESPAWN_CONSOLE, 5000); if (Creature* brann = go->SummonCreature(NPC_BRANN_BRONZBEARD_ALG, BrannIntroSpawnPos)) brann->AI()->DoAction(ACTION_START_INTRO); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp index 572dca1a7e0..ea7fc49a856 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -248,7 +248,7 @@ class boss_flame_leviathan : public CreatureScript DoCast(SPELL_INVIS_AND_STEALTH_DETECT); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED)); me->SetReactState(REACT_PASSIVE); } @@ -537,7 +537,7 @@ class boss_flame_leviathan : public CreatureScript me->SetHomePosition(Center); me->GetMotionMaster()->MoveCharge(Center.GetPositionX(), Center.GetPositionY(), Center.GetPositionZ()); // position center me->SetReactState(REACT_AGGRESSIVE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED)); return; } break; @@ -608,17 +608,17 @@ class boss_flame_leviathan_seat : public CreatureScript if (Creature* turret = turretPassenger->ToCreature()) { turret->setFaction(me->GetVehicleBase()->getFaction()); - turret->SetUInt32Value(UNIT_FIELD_FLAGS, 0); // unselectable + turret->SetUnitFlags(UnitFlags(0)); // unselectable turret->AI()->AttackStart(who); } if (Unit* devicePassenger = me->GetVehicleKit()->GetPassenger(SEAT_DEVICE)) if (Creature* device = devicePassenger->ToCreature()) { - device->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); - device->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + device->AddNpcFlag(UNIT_NPC_FLAG_SPELLCLICK); + device->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); } - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); } else if (seatId == SEAT_TURRET) { @@ -627,8 +627,8 @@ class boss_flame_leviathan_seat : public CreatureScript if (Unit* device = ASSERT_NOTNULL(me->GetVehicleKit())->GetPassenger(SEAT_DEVICE)) { - device->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); - device->SetUInt32Value(UNIT_FIELD_FLAGS, 0); // unselectable + device->AddNpcFlag(UNIT_NPC_FLAG_SPELLCLICK); + device->SetUnitFlags(UnitFlags(0)); // unselectable } } } @@ -743,8 +743,8 @@ class boss_flame_leviathan_overload_device : public CreatureScript if (me->GetVehicle()) { - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveNpcFlag(UNIT_NPC_FLAG_SPELLCLICK); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); if (Unit* player = me->GetVehicle()->GetPassenger(SEAT_PLAYER)) { @@ -871,7 +871,7 @@ class npc_pool_of_tar : public CreatureScript { npc_pool_of_tarAI(Creature* creature) : ScriptedAI(creature) { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetReactState(REACT_PASSIVE); me->CastSpell(me, SPELL_TAR_PASSIVE, true); } @@ -940,7 +940,7 @@ class npc_thorims_hammer : public CreatureScript { npc_thorims_hammerAI(Creature* creature) : ScriptedAI(creature) { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->CastSpell(me, AURA_DUMMY_BLUE, true); } @@ -984,7 +984,7 @@ public: npc_mimirons_infernoAI(Creature* creature) : npc_escortAI(creature) { Initialize(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->CastSpell(me, AURA_DUMMY_YELLOW, true); me->SetReactState(REACT_PASSIVE); } @@ -1042,7 +1042,7 @@ class npc_hodirs_fury : public CreatureScript { npc_hodirs_furyAI(Creature* creature) : ScriptedAI(creature) { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->CastSpell(me, AURA_DUMMY_GREEN, true); } @@ -1190,10 +1190,10 @@ class npc_brann_bronzebeard_ulduar_intro : public CreatureScript { if (menuId == GOSSIP_MENU_BRANN_BRONZEBEARD && gossipListId == GOSSIP_OPTION_BRANN_BRONZEBEARD) { - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); CloseGossipMenuFor(player); if (Creature* loreKeeper = _instance->GetCreature(DATA_LORE_KEEPER_OF_NORGANNON)) - loreKeeper->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + loreKeeper->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); } } @@ -1243,7 +1243,7 @@ class npc_lorekeeper : public CreatureScript { if (menuId == GOSSIP_MENU_LORE_KEEPER && gossipListId == GOSSIP_OPTION_LORE_KEEPER) { - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); CloseGossipMenuFor(player); me->GetMap()->LoadGrid(364, -16); // make sure leviathan is loaded @@ -1256,7 +1256,7 @@ class npc_lorekeeper : public CreatureScript { if (Creature* brann = _instance->GetCreature(DATA_BRANN_BRONZEBEARD_INTRO)) { - brann->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + brann->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); delorah->GetMotionMaster()->MovePoint(0, brann->GetPositionX() - 4, brann->GetPositionY(), brann->GetPositionZ()); /// @todo delorah->AI()->Talk(xxxx, brann->GetGUID()); when reached at branz } @@ -1592,7 +1592,7 @@ class spell_systems_shutdown : public SpellScriptLoader //! This could probably in the SPELL_EFFECT_SEND_EVENT handler too: owner->AddUnitState(UNIT_STATE_STUNNED | UNIT_STATE_ROOT); - owner->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); + owner->AddUnitFlag(UNIT_FLAG_STUNNED); owner->RemoveAurasDueToSpell(SPELL_GATHERING_SPEED); } @@ -1602,7 +1602,7 @@ class spell_systems_shutdown : public SpellScriptLoader if (!owner) return; - owner->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED); + owner->RemoveUnitFlag(UNIT_FLAG_STUNNED); } void Register() override diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp index d2131a24339..0d3ccc74685 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp @@ -1349,7 +1349,7 @@ class npc_healthy_spore : public CreatureScript npc_healthy_sporeAI(Creature* creature) : ScriptedAI(creature) { SetCombatMovement(false); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC)); me->SetReactState(REACT_PASSIVE); DoCast(me, SPELL_HEALTHY_SPORE_VISUAL); DoCast(me, SPELL_POTENT_PHEROMONES); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp index ec829d860db..5a464a21ee7 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp @@ -426,7 +426,7 @@ class npc_saronite_vapors : public CreatureScript if (damage >= me->GetHealth()) { damage = 0; - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->SetControlled(true, UNIT_STATE_ROOT); me->SetStandState(UNIT_STAND_STATE_DEAD); me->SetHealth(me->GetMaxHealth()); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp index 464249835eb..61a110b366a 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp @@ -189,7 +189,7 @@ class npc_flash_freeze : public CreatureScript Initialize(); instance = me->GetInstanceScript(); me->SetDisplayFromModel(1); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED)); me->SetControlled(true, UNIT_STATE_ROOT); } @@ -265,7 +265,7 @@ class npc_ice_block : public CreatureScript { instance = me->GetInstanceScript(); me->SetDisplayFromModel(1); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED)); me->SetControlled(true, UNIT_STATE_ROOT); } @@ -276,7 +276,7 @@ class npc_ice_block : public CreatureScript void IsSummonedBy(Unit* summoner) override { targetGUID = summoner->GetGUID(); - summoner->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED); + summoner->AddUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED)); summoner->SetControlled(true, UNIT_STATE_ROOT); me->SetInCombatWith(summoner); me->AddThreat(summoner, 250.0f); @@ -293,7 +293,7 @@ class npc_ice_block : public CreatureScript { if (Creature* Helper = ObjectAccessor::GetCreature(*me, targetGUID)) { - Helper->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED); + Helper->RemoveUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED)); Helper->SetControlled(false, UNIT_STATE_ROOT); if (Creature* Hodir = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_HODIR))) @@ -397,7 +397,7 @@ class boss_hodir : public CreatureScript me->RemoveAllAttackers(); me->AttackStop(); me->SetReactState(REACT_PASSIVE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->SetControlled(true, UNIT_STATE_ROOT); me->InterruptNonMeleeSpells(true); me->StopMoving(); @@ -558,7 +558,7 @@ class npc_icicle : public CreatureScript { Initialize(); me->SetDisplayFromModel(0); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_PACIFIED | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_PACIFIED | UNIT_FLAG_NOT_SELECTABLE)); me->SetControlled(true, UNIT_STATE_ROOT); me->SetReactState(REACT_PASSIVE); } @@ -613,7 +613,7 @@ class npc_snowpacked_icicle : public CreatureScript { Initialize(); me->SetDisplayFromModel(1); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED)); me->SetControlled(true, UNIT_STATE_ROOT); me->SetReactState(REACT_PASSIVE); } @@ -670,7 +670,7 @@ class npc_hodir_priest : public CreatureScript void UpdateAI(uint32 diff) override { - if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED)) + if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasUnitFlag(UNIT_FLAG_STUNNED)) return; events.Update(diff); @@ -752,7 +752,7 @@ class npc_hodir_shaman : public CreatureScript void UpdateAI(uint32 diff) override { - if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED)) + if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasUnitFlag(UNIT_FLAG_STUNNED)) return; events.Update(diff); @@ -817,7 +817,7 @@ class npc_hodir_druid : public CreatureScript void UpdateAI(uint32 diff) override { - if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED)) + if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasUnitFlag(UNIT_FLAG_STUNNED)) return; events.Update(diff); @@ -895,7 +895,7 @@ class npc_hodir_mage : public CreatureScript void UpdateAI(uint32 diff) override { - if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED)) + if (!UpdateVictim() || me->HasUnitState(UNIT_STATE_STUNNED) || me->HasUnitFlag(UNIT_FLAG_STUNNED)) return; events.Update(diff); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp index 5cd66d7da86..40a49f5dfef 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp @@ -181,7 +181,7 @@ class boss_ignis : public CreatureScript { summon->setFaction(16); summon->SetReactState(REACT_AGGRESSIVE); - summon->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED | UNIT_FLAG_STUNNED | UNIT_FLAG_IMMUNE_TO_PC); + summon->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED | UNIT_FLAG_STUNNED | UNIT_FLAG_IMMUNE_TO_PC)); summon->SetControlled(false, UNIT_STATE_ROOT); } @@ -382,7 +382,7 @@ class npc_scorch_ground : public CreatureScript npc_scorch_groundAI(Creature* creature) : ScriptedAI(creature) { Initialize(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED)); me->SetControlled(true, UNIT_STATE_ROOT); creature->SetDisplayId(16925); //model 2 in db cannot overwrite wdb fields } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp index 25d40ca4fe1..d8f55a428d9 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp @@ -108,7 +108,7 @@ class boss_kologarn : public CreatureScript boss_kologarnAI(Creature* creature) : BossAI(creature, BOSS_KOLOGARN), left(false), right(false) { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetControlled(true, UNIT_STATE_ROOT); DoCast(SPELL_KOLOGARN_REDUCE_PARRY); @@ -141,7 +141,7 @@ class boss_kologarn : public CreatureScript void Reset() override { _Reset(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); eyebeamTarget.Clear(); } @@ -150,7 +150,7 @@ class boss_kologarn : public CreatureScript Talk(SAY_DEATH); DoCast(SPELL_KOLOGARN_PACIFY); me->GetMotionMaster()->MoveTargetedHome(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetCorpseDelay(604800); // Prevent corpse from despawning. _JustDied(); } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp index 407268bcd80..d7c23502200 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp @@ -424,12 +424,12 @@ class boss_mimiron : public CreatureScript return; _EnterCombat(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->RemoveAurasDueToSpell(SPELL_WELD); DoCast(me->GetVehicleBase(), SPELL_SEAT_6); if (GameObject* button = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_MIMIRON_BUTTON))) - button->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + button->AddFlag(GO_FLAG_NOT_SELECTABLE); if (_fireFighter) events.ScheduleEvent(EVENT_SUMMON_FLAMES, 3000); @@ -456,7 +456,7 @@ class boss_mimiron : public CreatureScript return; _Reset(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); if (GameObject* elevator = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_MIMIRON_ELEVATOR))) elevator->SetGoState(GO_STATE_ACTIVE); @@ -468,7 +468,7 @@ class boss_mimiron : public CreatureScript if (GameObject* button = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_MIMIRON_BUTTON))) { button->SetGoState(GO_STATE_READY); - button->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + button->RemoveFlag(GO_FLAG_NOT_SELECTABLE); } _fireFighter = false; @@ -506,7 +506,7 @@ class boss_mimiron : public CreatureScript { DoCast(mkii, SPELL_SEAT_7); mkii->RemoveAurasDueToSpell(SPELL_FREEZE_ANIM); - mkii->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + mkii->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); } events.ScheduleEvent(EVENT_INTRO_3, 2000); break; @@ -613,7 +613,7 @@ class boss_mimiron : public CreatureScript if (Creature* aerial = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_AERIAL_COMMAND_UNIT))) { aerial->GetMotionMaster()->MoveLand(0, (aerial->GetPositionX(), aerial->GetPositionY(), aerial->GetPositionZMinusOffset())); - aerial->SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, 0); + aerial->SetAnimTier(UNIT_BYTE1_FLAG_NONE, false); aerial->CastSpell(vx001, SPELL_MOUNT_VX_001); aerial->CastSpell(aerial, SPELL_HALF_HEAL); } @@ -654,7 +654,7 @@ class boss_mimiron : public CreatureScript break; case EVENT_OUTTRO_3: DoCast(me, SPELL_TELEPORT_VISUAL); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->DespawnOrUnsummon(1000); // sniffs say 6 sec after, but it doesnt matter. break; default: @@ -696,7 +696,7 @@ class boss_leviathan_mk_ii : public CreatureScript if (damage >= me->GetHealth()) { damage = me->GetHealth() - 1; // Let creature fall to 1 hp, but do not let it die or damage itself with SetHealth(). - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); DoCast(me, SPELL_VEHICLE_DAMAGED, true); me->AttackStop(); me->SetReactState(REACT_PASSIVE); @@ -746,7 +746,7 @@ class boss_leviathan_mk_ii : public CreatureScript break; case DO_ASSEMBLED_COMBAT: me->SetStandState(UNIT_STAND_STATE_STAND); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->SetReactState(REACT_AGGRESSIVE); events.SetPhase(PHASE_VOL7RON); @@ -795,7 +795,7 @@ class boss_leviathan_mk_ii : public CreatureScript switch (point) { case WP_MKII_P1_IDLE: - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); DoCast(me, SPELL_HALF_HEAL); if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON))) @@ -822,7 +822,7 @@ class boss_leviathan_mk_ii : public CreatureScript void Reset() override { _Reset(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->SetReactState(REACT_PASSIVE); _fireFighter = false; _setupMine = true; @@ -931,7 +931,7 @@ class boss_vx_001 : public CreatureScript boss_vx_001AI(Creature* creature) : BossAI(creature, BOSS_MIMIRON) { me->SetDisableGravity(true); // This is the unfold visual state of VX-001, it has to be set on create as it requires an objectupdate if set later. - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_SPECIAL_UNARMED); // This is a hack to force the yet to be unfolded visual state. + me->SetEmoteState(EMOTE_STATE_SPECIAL_UNARMED); // This is a hack to force the yet to be unfolded visual state. me->SetReactState(REACT_PASSIVE); _fireFighter = false; } @@ -948,7 +948,7 @@ class boss_vx_001 : public CreatureScript if (events.IsInPhase(PHASE_VX_001)) { me->CastStop(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); // | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); // | UNIT_FLAG_NOT_SELECTABLE); DoCast(me, SPELL_HALF_HEAL); // has no effect, wat DoCast(me, SPELL_TORSO_DISABLED); if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON))) @@ -957,7 +957,7 @@ class boss_vx_001 : public CreatureScript else if (events.IsInPhase(PHASE_VOL7RON)) { me->SetStandState(UNIT_STAND_STATE_DEAD); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); if (IsEncounterFinished(who)) return; @@ -980,9 +980,9 @@ class boss_vx_001 : public CreatureScript events.ScheduleEvent(EVENT_FLAME_SUPPRESSANT_VX, 6000); // Missing break intended. case DO_START_VX001: - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC)); me->RemoveAurasDueToSpell(SPELL_FREEZE_ANIM); - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); // Remove emotestate. + me->SetEmoteState(EMOTE_ONESHOT_NONE); // Remove emotestate. //me->SetUInt32Value(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER); Blizzard handles hover animation like this it seems. DoCast(me, SPELL_HEAT_WAVE_AURA); @@ -993,7 +993,7 @@ class boss_vx_001 : public CreatureScript break; case DO_ASSEMBLED_COMBAT: me->SetStandState(UNIT_STAND_STATE_STAND); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); events.SetPhase(PHASE_VOL7RON); events.ScheduleEvent(EVENT_ROCKET_STRIKE, 20000); @@ -1042,7 +1042,7 @@ class boss_vx_001 : public CreatureScript // Handle rotation during SPELL_SPINNING_UP, SPELL_P3WX2_LASER_BARRAGE, SPELL_RAPID_BURST, and SPELL_HAND_PULSE_LEFT/RIGHT if (me->HasUnitState(UNIT_STATE_CASTING)) { - DynamicFieldStructuredView<ObjectGuid> channelObjects = me->GetChannelObjects(); + auto const& channelObjects = me->m_unitData->ChannelObjects; if (Unit* channelTarget = (channelObjects.size() == 1 ? ObjectAccessor::GetUnit(*me, *channelObjects.begin()) : nullptr)) me->SetFacingToObject(channelTarget); return; @@ -1122,7 +1122,7 @@ class boss_aerial_command_unit : public CreatureScript if (damage >= me->GetHealth()) { damage = me->GetHealth() - 1; // Let creature fall to 1 hp, but do not let it die or damage itself with SetHealth(). - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->AttackStop(); me->SetReactState(REACT_PASSIVE); DoCast(me, SPELL_VEHICLE_DAMAGED, true); @@ -1157,7 +1157,7 @@ class boss_aerial_command_unit : public CreatureScript events.ScheduleEvent(EVENT_SUMMON_FIRE_BOTS, 1000, 0, PHASE_AERIAL_COMMAND_UNIT); // Missing break intended. case DO_START_AERIAL: - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC)); me->SetReactState(REACT_AGGRESSIVE); events.SetPhase(PHASE_AERIAL_COMMAND_UNIT); @@ -1176,7 +1176,7 @@ class boss_aerial_command_unit : public CreatureScript me->SetReactState(REACT_AGGRESSIVE); break; case DO_ASSEMBLED_COMBAT: - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->SetReactState(REACT_AGGRESSIVE); me->SetStandState(UNIT_STAND_STATE_STAND); events.SetPhase(PHASE_VOL7RON); @@ -1209,7 +1209,7 @@ class boss_aerial_command_unit : public CreatureScript { if (type == POINT_MOTION_TYPE && point == WP_AERIAL_P4_POS) { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); if (Creature* mimiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_MIMIRON))) mimiron->AI()->DoAction(DO_ACTIVATE_V0L7R0N_1); @@ -1651,7 +1651,7 @@ class go_mimiron_hardmode_button : public GameObjectScript bool OnGossipHello(Player* /*player*/, GameObject* go) override { - if (go->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE)) + if (go->HasFlag(GO_FLAG_NOT_SELECTABLE)) return true; InstanceScript* instance = go->GetInstanceScript(); @@ -1661,7 +1661,7 @@ class go_mimiron_hardmode_button : public GameObjectScript if (Creature* computer = ObjectAccessor::GetCreature(*go, instance->GetGuidData(DATA_COMPUTER))) computer->AI()->DoAction(DO_ACTIVATE_COMPUTER); go->SetGoState(GO_STATE_ACTIVE); - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->AddFlag(GO_FLAG_NOT_SELECTABLE); return true; } }; @@ -1688,7 +1688,7 @@ class spell_mimiron_bomb_bot : public SpellScriptLoader { if (Creature* target = GetHitCreature()) { - target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED); + target->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED)); target->DespawnOrUnsummon(1000); } } @@ -1850,7 +1850,7 @@ class spell_mimiron_magnetic_core : public SpellScriptLoader void FilterTargets(std::list<WorldObject*>& targets) { - targets.remove_if([](WorldObject* obj) { return obj->ToUnit() && (obj->ToUnit()->GetVehicleBase() || obj->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)); }); + targets.remove_if([](WorldObject* obj) { return obj->IsUnit() && (obj->ToUnit()->GetVehicleBase() || obj->ToUnit()->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)); }); } void Register() override diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp index 35a67d0fa1f..a263badd7c1 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp @@ -317,7 +317,7 @@ class go_razorscale_harpoon : public GameObjectScript { InstanceScript* instance = go->GetInstanceScript(); if (ObjectAccessor::GetCreature(*go, instance->GetGuidData(BOSS_RAZORSCALE))) - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->AddFlag(GO_FLAG_NOT_SELECTABLE); return false; } }; @@ -358,7 +358,7 @@ class boss_razorscale : public CreatureScript { _Reset(); me->SetCanFly(true); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetReactState(REACT_PASSIVE); Initialize(); if (Creature* commander = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_EXPEDITION_COMMANDER))) @@ -446,7 +446,7 @@ class boss_razorscale : public CreatureScript phase = PHASE_FLIGHT; events.SetPhase(PHASE_FLIGHT); me->SetCanFly(true); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetReactState(REACT_PASSIVE); me->AttackStop(); me->GetMotionMaster()->MoveTakeoff(0, RazorFlight); @@ -457,8 +457,8 @@ class boss_razorscale : public CreatureScript return; case EVENT_LAND: me->SetCanFly(false); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED)); if (Creature* commander = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_EXPEDITION_COMMANDER))) commander->AI()->DoAction(ACTION_GROUND_PHASE); events.ScheduleEvent(EVENT_BREATH, 30000, 0, PHASE_GROUND); @@ -466,7 +466,7 @@ class boss_razorscale : public CreatureScript events.ScheduleEvent(EVENT_FLIGHT, 35000, 0, PHASE_GROUND); return; case EVENT_BREATH: - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED)); me->RemoveAllAuras(); me->SetReactState(REACT_AGGRESSIVE); Talk(EMOTE_BREATH); @@ -551,7 +551,7 @@ class boss_razorscale : public CreatureScript phase = PHASE_PERMAGROUND; events.SetPhase(PHASE_PERMAGROUND); me->SetCanFly(false); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED | UNIT_FLAG_PACIFIED)); me->SetReactState(REACT_AGGRESSIVE); me->RemoveAurasDueToSpell(SPELL_HARPOON_TRIGGER); me->SetSpeedRate(MOVE_FLIGHT, 1.0f); @@ -585,7 +585,7 @@ class boss_razorscale : public CreatureScript switch (action) { case ACTION_EVENT_START: - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->SetReactState(REACT_AGGRESSIVE); DoZoneInCombat(me, 150.0f); break; @@ -658,7 +658,7 @@ class npc_expedition_commander : public CreatureScript break; case ACTION_COMMANDER_RESET: summons.DespawnAll(); - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); break; } } @@ -708,10 +708,10 @@ class npc_expedition_commander : public CreatureScript case 4: for (uint8 n = 0; n < RAID_MODE(2, 4); n++) if (Creature* summonedEngineer = ObjectAccessor::GetCreature(*me, Engineer[n])) - summonedEngineer->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USE_STANDING); + summonedEngineer->SetEmoteState(EMOTE_STATE_USE_STANDING); for (uint8 n = 0; n < 4; ++n) if (Creature* summonedDefender = ObjectAccessor::GetCreature(*me, Defender[n])) - summonedDefender->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H); + summonedDefender->SetEmoteState(EMOTE_STATE_READY2H); Talk(SAY_AGGRO_2); AttackStartTimer = 16000; Phase = 5; @@ -777,7 +777,7 @@ class npc_mole_machine_trigger : public CreatureScript { Initialize(); SetCombatMovement(false); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_PACIFIED); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_PACIFIED)); } void Initialize() @@ -862,7 +862,7 @@ class npc_devouring_flame : public CreatureScript npc_devouring_flameAI(Creature* creature) : ScriptedAI(creature) { SetCombatMovement(false); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_PACIFIED); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_PACIFIED)); } void Reset() override diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp index 0ad29909298..16cf11b2341 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp @@ -203,7 +203,7 @@ class boss_xt002 : public CreatureScript { _Reset(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetReactState(REACT_AGGRESSIVE); DoCastSelf(SPELL_STAND); @@ -252,7 +252,7 @@ class boss_xt002 : public CreatureScript { Talk(SAY_DEATH); _JustDied(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); } void DamageTaken(Unit* /*attacker*/, uint32& /*damage*/) override @@ -378,8 +378,8 @@ class boss_xt002 : public CreatureScript heart->CastSpell(me, SPELL_HEART_LIGHTNING_TETHER); heart->CastSpell(heart, SPELL_HEART_HEAL_TO_FULL, true); heart->CastSpell(me, SPELL_RIDE_VEHICLE_EXPOSED, true); - heart->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - heart->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29); + heart->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + heart->AddUnitFlag(UNIT_FLAG_UNK_29); } events.CancelEvent(EVENT_SEARING_LIGHT); @@ -399,7 +399,7 @@ class boss_xt002 : public CreatureScript Talk(SAY_HEART_CLOSED); Talk(EMOTE_HEART_CLOSED); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetReactState(REACT_AGGRESSIVE); DoCastSelf(SPELL_STAND); @@ -414,8 +414,8 @@ class boss_xt002 : public CreatureScript return; heart->CastSpell(me, SPELL_HEART_RIDE_VEHICLE, true); - heart->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - heart->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_29); + heart->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + heart->RemoveUnitFlag(UNIT_FLAG_UNK_29); heart->RemoveAurasDueToSpell(SPELL_EXPOSED_HEART); if (!_hardMode) @@ -681,12 +681,6 @@ class npc_boombot : public CreatureScript DoCast(SPELL_AURA_BOOMBOT); // For achievement - // HACK/workaround: - // these values aren't confirmed - lack of data - and the values in DB are incorrect - // these values are needed for correct damage of Boom spell - me->SetFloatValue(UNIT_FIELD_MINDAMAGE, 15000.0f); - me->SetFloatValue(UNIT_FIELD_MAXDAMAGE, 18000.0f); - /// @todo proper waypoints? if (Creature* pXT002 = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(BOSS_XT002))) me->GetMotionMaster()->MoveFollow(pXT002, 0.0f, 0.0f); @@ -1043,7 +1037,7 @@ class spell_xt002_submerged : public SpellScriptLoader if (!target) return; - target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + target->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); target->SetStandState(UNIT_STAND_STATE_SUBMERGED); } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp index 2148ec7706d..82f8d66e84e 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp @@ -1049,7 +1049,7 @@ class boss_brain_of_yogg_saron : public CreatureScript void Reset() override { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE)); DoCast(me, SPELL_MATCH_HEALTH); _summons.DespawnAll(); } @@ -1063,7 +1063,7 @@ class boss_brain_of_yogg_saron : public CreatureScript DoCastAOE(SPELL_SHATTERED_ILLUSION_REMOVE, true); DoCast(me, SPELL_MATCH_HEALTH_2, true); // it doesn't seem to hit Yogg-Saron here DoCast(me, SPELL_BRAIN_HURT_VISUAL, true); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE)); if (Creature* voice = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VOICE_OF_YOGG_SARON))) voice->AI()->DoAction(ACTION_PHASE_THREE); @@ -1537,7 +1537,7 @@ class npc_observation_ring_keeper : public CreatureScript if (menuId != 10333) return; - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); me->DespawnOrUnsummon(2000); DoCast(SPELL_TELEPORT); Talk(SAY_KEEPER_CHOSEN_1, player); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp index 12629ba4b27..573a1e566b6 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/instance_ulduar.cpp @@ -201,7 +201,7 @@ class instance_ulduar : public InstanceMapScript if (_algalonTimer && _algalonTimer <= 60) algalon->AI()->DoAction(ACTION_INIT_ALGALON); else - algalon->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + algalon->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); } // Keepers at Observation Ring @@ -566,7 +566,7 @@ class instance_ulduar : public InstanceMapScript case GO_CELESTIAL_PLANETARIUM_ACCESS_10: case GO_CELESTIAL_PLANETARIUM_ACCESS_25: if (_algalonSummoned) - gameObject->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE); + gameObject->AddFlag(GO_FLAG_IN_USE); break; case GO_DOODAD_UL_SIGILDOOR_01: AlgalonSigilDoorGUID[0] = gameObject->GetGUID(); @@ -758,7 +758,7 @@ class instance_ulduar : public InstanceMapScript if (GameObject* gameObject = instance->GetGameObject(KologarnChestGUID)) { gameObject->SetRespawnTime(gameObject->GetRespawnDelay()); - gameObject->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + gameObject->RemoveFlag(GO_FLAG_NOT_SELECTABLE); } HandleGameObject(KologarnBridgeGUID, false); } @@ -768,7 +768,7 @@ class instance_ulduar : public InstanceMapScript { if (GameObject* HodirRareCache = instance->GetGameObject(HodirRareCacheGUID)) if (GetData(DATA_HODIR_RARE_CACHE)) - HodirRareCache->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + HodirRareCache->RemoveFlag(GO_FLAG_NOT_SELECTABLE); if (GameObject* HodirChest = instance->GetGameObject(HodirChestGUID)) HodirChest->SetRespawnTime(HodirChest->GetRespawnDelay()); @@ -1193,7 +1193,7 @@ class instance_ulduar : public InstanceMapScript if (Vehicle* vehicle = vehicleCreature->GetVehicleKit()) { vehicle->RemoveAllPassengers(); - vehicleCreature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + vehicleCreature->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); vehicleCreature->DespawnOrUnsummon(5 * MINUTE * IN_MILLISECONDS); } } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp index 1cf74259c15..6f37c0f6b32 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_ingvar_the_plunderer.cpp @@ -115,7 +115,7 @@ class boss_ingvar_the_plunderer : public CreatureScript { if (me->GetEntry() != NPC_INGVAR) me->UpdateEntry(NPC_INGVAR); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE)); _Reset(); } @@ -131,7 +131,7 @@ class boss_ingvar_the_plunderer : public CreatureScript me->StopMoving(); DoCast(me, SPELL_INGVAR_FEIGN_DEATH, true); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE)); Talk(SAY_DEATH); } @@ -229,7 +229,7 @@ class boss_ingvar_the_plunderer : public CreatureScript break; case EVENT_JUST_TRANSFORMED: ScheduleSecondPhase(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE)); if (Unit* target = me->getThreatManager().getHostilTarget()) AttackStart(target); else diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp index 1f3c675f9d3..c13f8de96d7 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp @@ -264,10 +264,10 @@ class npc_vrykul_skeleton : public CreatureScript // There are some issues with pets // they will still attack. I would say it is a PetAI bug - if (!me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE)) + if (!me->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE)) { // from sniffs - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetStandState(UNIT_STAND_STATE_DEAD); events.Reset(); @@ -308,7 +308,7 @@ class npc_vrykul_skeleton : public CreatureScript case EVENT_SHADOW_FISSURE: DoCast(me, SPELL_SHADOW_FISSURE, true); DoCastAOE(SPELL_BONE_ARMOR, true); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetStandState(UNIT_STAND_STATE_STAND); me->GetMotionMaster()->MoveChase(me->GetVictim()); events.ScheduleEvent(EVENT_DECREPIFY, urand(4, 6) * IN_MILLISECONDS); @@ -321,7 +321,7 @@ class npc_vrykul_skeleton : public CreatureScript return; } - if (!me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE)) + if (!me->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE)) DoMeleeAttackIfReady(); } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp index 00f911eac85..478d0588b75 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_skarvald_dalronn.cpp @@ -123,7 +123,7 @@ struct generic_boss_controllerAI : public BossAI if (otherBoss->IsAlive()) { Talk(SAY_DIED_FIRST); - me->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); + me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE); otherBoss->AI()->DoAction(ACTION_OTHER_JUST_DIED); DoCast(me, OtherBossData == DATA_DALRONN ? SPELL_SUMMON_SKARVALD_GHOST : SPELL_SUMMON_DALRONN_GHOST, true); } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp index dfc6d18767c..2503df7e213 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp @@ -73,7 +73,7 @@ class npc_dragonflayer_forge_master : public CreatureScript if (_forgeId) _instance->SetData(DATA_FORGE_1 + _forgeId - 1, IN_PROGRESS); - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); + me->SetEmoteState(EMOTE_ONESHOT_NONE); } void UpdateAI(uint32 /*diff*/) override @@ -283,7 +283,7 @@ class npc_enslaved_proto_drake : public CreatureScript { if (type == WAYPOINT_MOTION_TYPE && id == POINT_LAST) { - me->RemoveByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER); + me->SetAnimTier(UNIT_BYTE1_FLAG_NONE, false); } } @@ -292,7 +292,7 @@ class npc_enslaved_proto_drake : public CreatureScript if (type == TYPE_PROTODRAKE_AT && data == DATA_PROTODRAKE_MOVE && !_setData && me->GetDistance(protodrakeCheckPos) < 5.0f) { _setData = true; - me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER); + me->SetAnimTier(UnitBytes1_Flags(UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER), false); me->GetMotionMaster()->MovePath(PATH_PROTODRAKE, false); } } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp index 0a401e0d756..0199fe80aa2 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp @@ -140,7 +140,7 @@ public: if (GameObject* go = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_GORTOK_PALEHOOF_SPHERE))) { go->SetGoState(GO_STATE_READY); - go->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->RemoveFlag(GO_FLAG_NOT_SELECTABLE); } } @@ -154,7 +154,7 @@ public: if (!who) return; - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) + if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)) return; if (me->Attack(who, true)) @@ -237,7 +237,7 @@ public: void JustReachedHome() override { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE|UNIT_FLAG_NOT_ATTACKABLE_1|UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC)); me->SetStandState(UNIT_STAND_STATE_STAND); DoCast(me, SPELL_FREEZE); } @@ -335,7 +335,7 @@ public: if (!who) return; - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) + if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)) return; if (me->Attack(who, true)) @@ -355,7 +355,7 @@ public: void JustReachedHome() override { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC)); me->SetStandState(UNIT_STAND_STATE_STAND); DoCast(me, SPELL_FREEZE); } @@ -449,7 +449,7 @@ public: if (!who) return; - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) + if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)) return; if (me->Attack(who, true)) @@ -470,7 +470,7 @@ public: void JustReachedHome() override { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC)); me->SetStandState(UNIT_STAND_STATE_STAND); DoCast(me, SPELL_FREEZE); } @@ -566,7 +566,7 @@ public: if (!who) return; - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) + if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)) return; if (me->Attack(who, true)) @@ -586,7 +586,7 @@ public: void JustReachedHome() override { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC)); me->SetStandState(UNIT_STAND_STATE_STAND); DoCast(me, SPELL_FREEZE); } @@ -688,7 +688,7 @@ public: if (!who) return; - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) + if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)) return; if (me->Attack(who, true)) @@ -708,7 +708,7 @@ public: void JustReachedHome() override { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC)); me->SetStandState(UNIT_STAND_STATE_STAND); DoCast(me, SPELL_FREEZE); } @@ -785,7 +785,7 @@ public: if (Creature* nextBoss = ObjectAccessor::GetCreature(*me, instance->GetGuidData(nextBossId))) { nextBoss->RemoveAurasDueToSpell(SPELL_FREEZE); - nextBoss->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC); + nextBoss->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_ATTACKABLE_1 | UNIT_FLAG_IMMUNE_TO_PC)); nextBoss->SetStandState(UNIT_STAND_STATE_STAND); nextBoss->SetInCombatWithZone(); } @@ -849,7 +849,7 @@ class go_palehoof_sphere : public GameObjectScript Creature* palehoof = ObjectAccessor::GetCreature(*go, instance->GetGuidData(DATA_GORTOK_PALEHOOF)); if (palehoof && palehoof->IsAlive()) { - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->AddFlag(GO_FLAG_NOT_SELECTABLE); go->SetGoState(GO_STATE_ACTIVE); palehoof->AI()->DoAction(ACTION_NEXT_PHASE); diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp index fa942e4c1bb..bf63d511a6d 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_skadi.cpp @@ -231,7 +231,7 @@ public: { case ACTION_START_ENCOUNTER: instance->SetBossState(DATA_SKADI_THE_RUTHLESS, IN_PROGRESS); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->setActive(true); SpawnFirstWave(); Talk(SAY_AGGRO); @@ -267,7 +267,7 @@ public: Talk(SAY_DRAKE_DEATH); DoCast(me, SPELL_SKADI_TELEPORT, true); summons.DespawnEntry(NPC_WORLD_TRIGGER); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC)); me->SetReactState(REACT_AGGRESSIVE); _phase = PHASE_GROUND; @@ -371,7 +371,7 @@ public: me->setActive(true); me->SetCanFly(true); me->SetDisableGravity(true); - me->SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER); + me->SetAnimTier(UnitBytes1_Flags(UNIT_BYTE1_FLAG_ALWAYS_STAND | UNIT_BYTE1_FLAG_HOVER), false); _scheduler.Schedule(Seconds(2), [this](TaskContext /*context*/) { @@ -505,7 +505,7 @@ struct npc_skadi_trashAI : public ScriptedAI switch (pointId) { case POINT_0: - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, me->GetEntry() == NPC_YMIRJAR_WARRIOR ? EMOTE_STATE_READY1H : EMOTE_STATE_READY2HL); + me->SetEmoteState(me->GetEntry() == NPC_YMIRJAR_WARRIOR ? EMOTE_STATE_READY1H : EMOTE_STATE_READY2HL); break; case POINT_1: _scheduler.Schedule(Seconds(1), [this](TaskContext /*context*/) diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp index 6dcb88f9455..db6a0829c5b 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp @@ -191,14 +191,14 @@ class boss_svala : public CreatureScript if (events.IsInPhase(IDLE) && me->IsValidAttackTarget(who) && me->IsWithinDistInMap(who, 40)) { events.SetPhase(INTRO); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); if (GameObject* mirror = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_UTGARDE_MIRROR))) mirror->SetGoState(GO_STATE_READY); if (Creature* arthas = me->SummonCreature(NPC_ARTHAS, ArthasPos, TEMPSUMMON_MANUAL_DESPAWN)) { - arthas->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + arthas->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); _arthasGUID = arthas->GetGUID(); } events.ScheduleEvent(EVENT_INTRO_SVALA_TALK_0, 1 * IN_MILLISECONDS, 0, INTRO); @@ -303,7 +303,7 @@ class boss_svala : public CreatureScript } me->RemoveAllAuras(); me->UpdateEntry(NPC_SVALA_SORROWGRAVE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); events.ScheduleEvent(EVENT_INTRO_SVALA_TALK_1, 6 * IN_MILLISECONDS, 0, INTRO); break; case EVENT_INTRO_SVALA_TALK_1: @@ -338,7 +338,7 @@ class boss_svala : public CreatureScript case EVENT_INTRO_DESPAWN_ARTHAS: if (GameObject* mirror = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_UTGARDE_MIRROR))) mirror->SetGoState(GO_STATE_ACTIVE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); if (Creature* arthas = ObjectAccessor::GetCreature(*me, _arthasGUID)) arthas->DespawnOrUnsummon(); _arthasGUID.Clear(); diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp index a2b4a1000aa..4ec4c58be28 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp @@ -174,7 +174,7 @@ public: { DoCast(ancestor, SPELL_CHANNEL_YMIRON_TO_SPIRIT); ancestor->CastSpell(me, SPELL_CHANNEL_SPIRIT_TO_YMIRON, true); - ancestor->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + ancestor->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); ancestor->SetDisableGravity(true); ActiveAncestorGUID = ancestor->GetGUID(); } diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp index 9474bae2da1..cc840fea23e 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/instance_utgarde_pinnacle.cpp @@ -103,7 +103,7 @@ class instance_utgarde_pinnacle : public InstanceMapScript if (GetBossState(DATA_GORTOK_PALEHOOF) == DONE) { HandleGameObject(ObjectGuid::Empty, true, go); - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->AddFlag(GO_FLAG_NOT_SELECTABLE); } break; case GO_SKADI_THE_RUTHLESS_DOOR: diff --git a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp index 1938ac475b6..f6310236648 100644 --- a/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp +++ b/src/server/scripts/Northrend/VaultOfArchavon/boss_toravon.cpp @@ -252,7 +252,7 @@ class npc_frozen_orb_stalker : public CreatureScript npc_frozen_orb_stalkerAI(Creature* creature) : ScriptedAI(creature) { creature->SetVisible(false); - creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); + creature->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE)); me->SetControlled(true, UNIT_STATE_ROOT); creature->SetReactState(REACT_PASSIVE); diff --git a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp index 4d09d8b0a51..7f480efe7a8 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp @@ -254,7 +254,7 @@ class npc_ichor_globule : public CreatureScript if (spellInfo->Id == SPELL_WATER_GLOBULE_VISUAL) { DoCast(me, SPELL_WATER_GLOBULE_TRANSFORM); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->GetMotionMaster()->MoveFollow(caster, 0.0f, 0.0f); } } @@ -308,14 +308,14 @@ class spell_ichoron_drained : public SpellScriptLoader void HandleApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - GetTarget()->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_UNK_31); - GetTarget()->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH); + GetTarget()->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_UNK_31)); + GetTarget()->AddUnitFlag2(UNIT_FLAG2_FEIGN_DEATH); } void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - GetTarget()->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_UNK_31); - GetTarget()->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH); + GetTarget()->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_UNK_31)); + GetTarget()->RemoveUnitFlag2(UNIT_FLAG2_FEIGN_DEATH); if (GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE) if (GetTarget()->IsAIEnabled) diff --git a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp index 4ceb0be6a1d..30a4b108388 100644 --- a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp @@ -411,14 +411,14 @@ class instance_violet_hold : public InstanceMapScript for (uint8 i = 0; i < ActivationCrystalCount; ++i) if (GameObject* crystal = instance->GetGameObject(ActivationCrystalGUIDs[i])) - crystal->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + crystal->RemoveFlag(GO_FLAG_NOT_SELECTABLE); } else if (data == NOT_STARTED) { if (GameObject* mainDoor = GetGameObject(DATA_MAIN_DOOR)) { mainDoor->SetGoState(GO_STATE_ACTIVE); - mainDoor->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); + mainDoor->RemoveFlag(GO_FLAG_LOCKED); } DoUpdateWorldState(WORLD_STATE_VH_SHOW, 0); @@ -427,21 +427,21 @@ class instance_violet_hold : public InstanceMapScript for (uint8 i = 0; i < ActivationCrystalCount; ++i) if (GameObject* crystal = instance->GetGameObject(ActivationCrystalGUIDs[i])) - crystal->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + crystal->AddFlag(GO_FLAG_NOT_SELECTABLE); } else if (data == DONE) { if (GameObject* mainDoor = GetGameObject(DATA_MAIN_DOOR)) { mainDoor->SetGoState(GO_STATE_ACTIVE); - mainDoor->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); + mainDoor->RemoveFlag(GO_FLAG_LOCKED); } DoUpdateWorldState(WORLD_STATE_VH_SHOW, 0); for (uint8 i = 0; i < ActivationCrystalCount; ++i) if (GameObject* crystal = instance->GetGameObject(ActivationCrystalGUIDs[i])) - crystal->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + crystal->AddFlag(GO_FLAG_NOT_SELECTABLE); if (Creature* sinclari = GetCreature(DATA_SINCLARI)) sinclari->AI()->DoAction(ACTION_SINCLARI_OUTRO); @@ -559,7 +559,7 @@ class instance_violet_hold : public InstanceMapScript { if (Creature* moragg = GetCreature(DATA_MORAGG)) { - moragg->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + moragg->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); moragg->AI()->DoZoneInCombat(moragg, 200.0f); } }); @@ -592,12 +592,12 @@ class instance_violet_hold : public InstanceMapScript for (uint32 i = DATA_EREKEM_GUARD_1; i <= DATA_EREKEM_GUARD_2; ++i) { if (Creature* guard = instance->GetCreature(GetGuidData(i))) - guard->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + guard->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); } if (Creature* erekem = GetCreature(DATA_EREKEM)) { - erekem->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + erekem->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); erekem->AI()->DoZoneInCombat(erekem, 200.0f); } }); @@ -620,7 +620,7 @@ class instance_violet_hold : public InstanceMapScript { if (Creature* ichoron = GetCreature(DATA_ICHORON)) { - ichoron->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + ichoron->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); ichoron->AI()->DoZoneInCombat(ichoron, 200.0f); } }); @@ -642,7 +642,7 @@ class instance_violet_hold : public InstanceMapScript { if (Creature* lavanthor = GetCreature(DATA_LAVANTHOR)) { - lavanthor->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + lavanthor->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); lavanthor->AI()->DoZoneInCombat(lavanthor, 200.0f); } }); @@ -669,7 +669,7 @@ class instance_violet_hold : public InstanceMapScript { if (Creature* xevozz = GetCreature(DATA_XEVOZZ)) { - xevozz->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + xevozz->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); xevozz->AI()->DoZoneInCombat(xevozz, 200.0f); } }); @@ -695,7 +695,7 @@ class instance_violet_hold : public InstanceMapScript { if (Creature* zuramat = GetCreature(DATA_ZURAMAT)) { - zuramat->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + zuramat->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); zuramat->AI()->DoZoneInCombat(zuramat, 200.0f); } }); @@ -735,7 +735,7 @@ class instance_violet_hold : public InstanceMapScript UpdateKilledBoss(guard); guard->GetMotionMaster()->MoveTargetedHome(); - guard->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + guard->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); } } // no break @@ -748,7 +748,7 @@ class instance_violet_hold : public InstanceMapScript } boss->GetMotionMaster()->MoveTargetedHome(); - boss->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + boss->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); break; } } @@ -903,7 +903,7 @@ class instance_violet_hold : public InstanceMapScript { cyanigosa->RemoveAurasDueToSpell(SPELL_CYANIGOSA_ARCANE_POWER_STATE); cyanigosa->CastSpell(cyanigosa, SPELL_CYANIGOSA_TRANSFORM, true); - cyanigosa->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + cyanigosa->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); } }); }); diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp index 23191151d2c..c6e8e19ea05 100644 --- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp @@ -355,7 +355,7 @@ class npc_sinclari_vh : public CreatureScript summon->AI()->SetData(DATA_PORTAL_LOCATION, i); me->SetVisible(true); - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); std::list<Creature*> guardList; me->GetCreatureListWithEntryInGrid(guardList, NPC_VIOLET_HOLD_GUARD, 100.0f); @@ -372,7 +372,7 @@ class npc_sinclari_vh : public CreatureScript { if (menuId == GOSSIP_MENU_START_ENCOUNTER && gossipListId == 0) { - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); _instance->SetData(DATA_MAIN_EVENT_STATE, SPECIAL); ScheduleIntro(); player->PlayerTalkClass->SendCloseGossip(); @@ -469,7 +469,7 @@ class npc_sinclari_vh : public CreatureScript if (GameObject* mainDoor = _instance->GetGameObject(DATA_MAIN_DOOR)) { mainDoor->SetGoState(GO_STATE_READY); - mainDoor->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); + mainDoor->AddFlag(GO_FLAG_LOCKED); } task.Repeat(Seconds(5)); break; @@ -496,7 +496,7 @@ class npc_sinclari_vh : public CreatureScript task.Schedule(Seconds(10), [this](TaskContext /*task*/) { - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); }); }); } diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index 3e487c356f5..43d67555eab 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -120,7 +120,7 @@ public: DoCast(me, SPELL_EXPLODE_CART, true); DoCast(me, SPELL_SUMMON_CART, true); if (GameObject* cart = me->FindNearestGameObject(GO_EXPLOSIVES_CART, 3.0f)) - cart->SetUInt32Value(GAMEOBJECT_FACTION, 14); + cart->SetFaction(14); phaseTimer = 3000; phase = 2; break; @@ -140,7 +140,7 @@ public: DoCast(me, SPELL_SUMMON_WORM, true); if (Unit* worm = me->FindNearestCreature(NPC_SCOURGED_BURROWER, 3.0f)) { - worm->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + worm->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); worm->HandleEmoteCommand(EMOTE_ONESHOT_EMERGE); } phaseTimer = 1000; @@ -151,7 +151,7 @@ public: if (Unit* worm = me->FindNearestCreature(NPC_SCOURGED_BURROWER, 3.0f)) { me->Kill(worm); - worm->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE); + worm->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE); } phaseTimer = 2000; phase = 7; @@ -712,7 +712,7 @@ public: owner->CastSpell(owner, SPELL_SUBDUED, true); GetCaster()->CastSpell(GetCaster(), SPELL_DRAKE_HATCHLING_SUBDUED, true); owner->setFaction(35); - owner->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); + owner->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); owner->DespawnOrUnsummon(3 * MINUTE*IN_MILLISECONDS); } @@ -818,7 +818,7 @@ public: void Reset() override { me->RestoreFaction(); - me->RemoveStandFlags(UNIT_STAND_STATE_SIT); + me->SetStandState(UNIT_STAND_STATE_STAND); Initialize(); } @@ -836,7 +836,7 @@ public: if (Creature* arthas = me->SummonCreature(NPC_IMAGE_LICH_KING, 3730.313f, 3518.689f, 473.324f, 1.562f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 120000)) { arthasGUID = arthas->GetGUID(); - arthas->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + arthas->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); arthas->SetReactState(REACT_PASSIVE); arthas->SetWalk(true); arthas->GetMotionMaster()->MovePoint(0, 3737.374756f, 3564.841309f, 477.433014f); @@ -893,7 +893,7 @@ public: { talbot->UpdateEntry(NPC_PRINCE_VALANAR); talbot->setFaction(14); - talbot->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + talbot->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); talbot->SetReactState(REACT_PASSIVE); } phaseTimer = 5000; @@ -933,7 +933,7 @@ public: leryssaGUID = leryssa->GetGUID(); leryssa->SetWalk(false); leryssa->SetReactState(REACT_PASSIVE); - leryssa->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + leryssa->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); leryssa->GetMotionMaster()->MovePoint(0, 3741.969971f, 3571.439941f, 477.441010f); } phaseTimer = 2000; @@ -991,10 +991,10 @@ public: break; case 14: - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); if (talbot) { - talbot->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + talbot->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); talbot->SetReactState(REACT_AGGRESSIVE); talbot->CastSpell(me, SPELL_SHADOW_BOLT, false); } @@ -1009,7 +1009,7 @@ public: break; case 16: - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); + me->AddNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); phaseTimer = 20000; ++phase; break; @@ -1021,7 +1021,7 @@ public: arlos->RemoveFromWorld(); if (talbot) talbot->RemoveFromWorld(); - me->RemoveStandFlags(UNIT_STAND_STATE_SIT); + me->SetStandState(UNIT_STAND_STATE_STAND); SetEscortPaused(false); phaseTimer = 0; phase = 0; @@ -1289,7 +1289,7 @@ public: phase = 0; phaseTimer = 0; - creature->RemoveStandFlags(UNIT_STAND_STATE_SIT); + creature->SetStandState(UNIT_STAND_STATE_STAND); } bool bDone; @@ -2165,8 +2165,8 @@ public: npc_hidden_cultistAI(Creature* creature) : ScriptedAI(creature) { Initialize(); - uiEmoteState = creature->GetUInt32Value(UNIT_NPC_EMOTESTATE); - uiNpcFlags = creature->GetUInt32Value(UNIT_NPC_FLAGS); + uiEmoteState = creature->GetEmoteState(); + uiNpcFlags = NPCFlags(creature->m_unitData->NpcFlags[0]); } void Initialize() @@ -2177,8 +2177,8 @@ public: uiPlayerGUID.Clear(); } - uint32 uiEmoteState; - uint32 uiNpcFlags; + Emote uiEmoteState; + NPCFlags uiNpcFlags; uint32 uiEventTimer; uint8 uiEventPhase; @@ -2188,10 +2188,10 @@ public: void Reset() override { if (uiEmoteState) - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, uiEmoteState); + me->SetEmoteState(uiEmoteState); if (uiNpcFlags) - me->SetUInt32Value(UNIT_NPC_FLAGS, uiNpcFlags); + me->SetNpcFlags(uiNpcFlags); Initialize(); @@ -2203,8 +2203,8 @@ public: void DoAction(int32 /*iParam*/) override { me->StopMoving(); - me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); + me->SetNpcFlags(UNIT_NPC_FLAG_NONE); + me->SetEmoteState(EMOTE_ONESHOT_NONE); if (Player* player = ObjectAccessor::GetPlayer(*me, uiPlayerGUID)) me->SetFacingToObject(player); uiEventTimer = 3000; diff --git a/src/server/scripts/Northrend/zone_dalaran.cpp b/src/server/scripts/Northrend/zone_dalaran.cpp index f5d6ac3d912..22b162232b6 100644 --- a/src/server/scripts/Northrend/zone_dalaran.cpp +++ b/src/server/scripts/Northrend/zone_dalaran.cpp @@ -64,7 +64,7 @@ public: { npc_mageguard_dalaranAI(Creature* creature) : ScriptedAI(creature) { - creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + creature->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); creature->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_NORMAL, true); creature->ApplySpellImmune(0, IMMUNITY_DAMAGE, SPELL_SCHOOL_MASK_MAGIC, true); } diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp index 255bedc08a6..785f39259a9 100644 --- a/src/server/scripts/Northrend/zone_dragonblight.cpp +++ b/src/server/scripts/Northrend/zone_dragonblight.cpp @@ -404,7 +404,7 @@ public: if (!tree || !player) return; - tree->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); + tree->RemoveNpcFlag(UNIT_NPC_FLAG_SPELLCLICK); if (roll == 1) // friendly version { @@ -575,8 +575,8 @@ class npc_wyrmrest_defender : public CreatureScript { case SPELL_WYRMREST_DEFENDER_MOUNT: Talk(WHISPER_MOUNTED, me->GetCharmerOrOwner()); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC)); + me->AddUnitFlag(UNIT_FLAG_PVP_ATTACKABLE); break; // Both below are for checking low hp warning case SPELL_DEFENDER_ON_LOW_HEALTH_EMOTE: diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index 8d87b702ed5..b36374d6ecc 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -371,8 +371,8 @@ public: if (me->FindNearestGameObject(OBJECT_HAUNCH, 2.0f)) { me->SetStandState(UNIT_STAND_STATE_DEAD); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); - me->SetUInt32Value(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD); + me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); + me->AddDynamicFlag(UNIT_DYNFLAG_DEAD); } _phase = 0; } @@ -415,7 +415,7 @@ public: { if (me->FindNearestCreature(NPC_TALLHORN_STAG, 0.2f)) { - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USE_STANDING); + me->SetEmoteState(EMOTE_STATE_USE_STANDING); } else _events.ScheduleEvent(EVENT_WOODSMAN_1, 0); @@ -430,11 +430,11 @@ public: switch (eventId) { case EVENT_WOODSMAN_1: - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_LOOT); + me->SetEmoteState(EMOTE_STATE_LOOT); _events.ScheduleEvent(EVENT_WOODSMAN_2, 3000); break; case EVENT_WOODSMAN_2: - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_ATTACK1H); + me->SetEmoteState(EMOTE_ONESHOT_ATTACK1H); _events.ScheduleEvent(EVENT_WOODSMAN_1, 4000); break; default: @@ -566,7 +566,7 @@ public: { _playerGUID.Clear(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC)); me->SetReactState(REACT_AGGRESSIVE); } @@ -616,7 +616,7 @@ public: { if (spell->Id == SPELL_SMOKE_BOMB && caster->GetTypeId() == TYPEID_PLAYER) { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC)); me->SetReactState(REACT_PASSIVE); me->CombatStop(false); _playerGUID = caster->GetGUID(); @@ -690,7 +690,7 @@ public: { Initialize(); if (me->GetEntry() == NPC_LAKE_FROG_QUEST) - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); } void UpdateAI(uint32 diff) override @@ -715,11 +715,11 @@ public: _events.ScheduleEvent(EVENT_LAKEFROG_3, 3000); break; case EVENT_LAKEFROG_3: - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); _events.ScheduleEvent(EVENT_LAKEFROG_4, 25000); break; case EVENT_LAKEFROG_4: - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); _events.ScheduleEvent(EVENT_LAKEFROG_5, 2000); break; case EVENT_LAKEFROG_5: diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp index 90914f1af0a..e00322c7c8a 100644 --- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp +++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp @@ -944,7 +944,7 @@ public: case 25: Talk(PLANE_EMOTE); DoCast(SPELL_ENGINE); - me->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FORCE_MOVEMENT); + me->AddUnitFlag2(UNIT_FLAG2_FORCE_MOVEMENT); break; } } diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp index ec49ea14a60..56215d77c35 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -498,7 +498,7 @@ public: case EVENT_SCRIPT_1: if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID)) Talk(SAY_BRANN_1, player); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); + me->RemoveUnitFlag(UnitFlags(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER)); if (Creature* voice = me->SummonCreature(NPC_A_DISTANT_VOICE, 7863.43f, -1396.585f, 1538.076f, 2.949606f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 49000)) voiceGUID = voice->GetGUID(); events.ScheduleEvent(EVENT_SCRIPT_2, 4000); @@ -509,11 +509,11 @@ public: events.ScheduleEvent(EVENT_SCRIPT_3, 6000); break; case EVENT_SCRIPT_3: - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_WORK_MINING); + me->SetEmoteState(EMOTE_STATE_WORK_MINING); events.ScheduleEvent(EVENT_SCRIPT_4, 6000); break; case EVENT_SCRIPT_4: - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); + me->SetEmoteState(EMOTE_ONESHOT_NONE); if (Creature* voice = ObjectAccessor::GetCreature(*me, voiceGUID)) { voice->CastSpell(voice, SPELL_RESURRECTION); @@ -673,7 +673,7 @@ public: playerGUID = who->GetGUID(); Talk(SAY_HOLD_ON, who); me->CastSpell(who, SPELL_JOKKUM_KILL_CREDIT, true); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC); + me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC); me->GetMotionMaster()->MovePath(PATH_JOKKUM, false); } } diff --git a/src/server/scripts/Northrend/zone_wintergrasp.cpp b/src/server/scripts/Northrend/zone_wintergrasp.cpp index 6c71672eb09..3dc606e1f76 100644 --- a/src/server/scripts/Northrend/zone_wintergrasp.cpp +++ b/src/server/scripts/Northrend/zone_wintergrasp.cpp @@ -345,8 +345,8 @@ class go_wg_vehicle_teleporter : public GameObjectScript bool IsFriendly(Unit* passenger) { - return ((go->GetUInt32Value(GAMEOBJECT_FACTION) == WintergraspFaction[TEAM_HORDE] && passenger->getFaction() == HORDE) || - (go->GetUInt32Value(GAMEOBJECT_FACTION) == WintergraspFaction[TEAM_ALLIANCE] && passenger->getFaction() == ALLIANCE)); + return ((go->GetFaction() == WintergraspFaction[TEAM_HORDE] && passenger->getFaction() == HORDE) || + (go->GetFaction() == WintergraspFaction[TEAM_ALLIANCE] && passenger->getFaction() == ALLIANCE)); } Creature* GetValidVehicle(Creature* cVeh) diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index 4f6de8521a2..76f6a76e8e6 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -55,7 +55,7 @@ public: void Reset() override { _rageclawGUID.Clear(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); float x, y, z; me->GetClosePoint(x, y, z, me->GetObjectSize() / 3, 0.1f); @@ -237,8 +237,8 @@ public: void Reset() override { - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_COWER); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); + me->SetEmoteState(EMOTE_STATE_COWER); Initialize(); } @@ -251,8 +251,8 @@ public: switch (eventId) { case EVENT_RECRUIT_1: - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); + me->SetEmoteState(EMOTE_ONESHOT_NONE); Talk(SAY_RECRUIT); _events.ScheduleEvent(EVENT_RECRUIT_2, 3000); break; @@ -509,12 +509,12 @@ public: { case EVENT_TURN_TO_POT: me->SetFacingTo(6.230825f); - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USE_STANDING_NO_SHEATHE); + me->SetEmoteState(EMOTE_STATE_USE_STANDING_NO_SHEATHE); _events.ScheduleEvent(EVENT_TURN_BACK, 11000); break; case EVENT_TURN_BACK: me->SetFacingTo(4.886922f); - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); + me->SetEmoteState(EMOTE_STATE_NONE); _events.ScheduleEvent(EVENT_TURN_TO_POT, urand(25000, 41000)); break; case EVENT_EASY_123: diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp index cd3c6e0933e..fafdb880e1f 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPNA.cpp @@ -314,7 +314,7 @@ bool OPvPCapturePointNA::HandleCustomSpell(Player* player, uint32 spellId, GameO nodes[0] = FlightPathStartNodes[NA_ROOST_N]; nodes[1] = FlightPathEndNodes[NA_ROOST_N]; player->ActivateTaxiPathTo(nodes); - player->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP); + player->AddPlayerFlag(PLAYER_FLAGS_IN_PVP); player->UpdatePvP(true, true); retval = true; break; @@ -322,7 +322,7 @@ bool OPvPCapturePointNA::HandleCustomSpell(Player* player, uint32 spellId, GameO nodes[0] = FlightPathStartNodes[NA_ROOST_S]; nodes[1] = FlightPathEndNodes[NA_ROOST_S]; player->ActivateTaxiPathTo(nodes); - player->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP); + player->AddPlayerFlag(PLAYER_FLAGS_IN_PVP); player->UpdatePvP(true, true); retval = true; break; @@ -330,7 +330,7 @@ bool OPvPCapturePointNA::HandleCustomSpell(Player* player, uint32 spellId, GameO nodes[0] = FlightPathStartNodes[NA_ROOST_W]; nodes[1] = FlightPathEndNodes[NA_ROOST_W]; player->ActivateTaxiPathTo(nodes); - player->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP); + player->AddPlayerFlag(PLAYER_FLAGS_IN_PVP); player->UpdatePvP(true, true); retval = true; break; @@ -338,7 +338,7 @@ bool OPvPCapturePointNA::HandleCustomSpell(Player* player, uint32 spellId, GameO nodes[0] = FlightPathStartNodes[NA_ROOST_E]; nodes[1] = FlightPathEndNodes[NA_ROOST_E]; player->ActivateTaxiPathTo(nodes); - player->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP); + player->AddPlayerFlag(PLAYER_FLAGS_IN_PVP); player->UpdatePvP(true, true); retval = true; break; diff --git a/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp b/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp index d65e9bc3509..d54966b0c61 100644 --- a/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp +++ b/src/server/scripts/Outland/Auchindoun/SethekkHalls/instance_sethekk_halls.cpp @@ -73,7 +73,7 @@ class instance_sethekk_halls : public InstanceMapScript /// gameobject should have GO_DYNFLAG_LO_ACTIVATE too, which makes gobs interactable with GO_FLAG_INTERACT_COND /// so just removed GO_FLAG_INTERACT_COND if (GameObject* coffer = GetGameObject(DATA_TALON_KING_COFFER)) - coffer->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_INTERACT_COND | GO_FLAG_NOT_SELECTABLE); + coffer->RemoveFlag(GameObjectFlags(GO_FLAG_INTERACT_COND | GO_FLAG_NOT_SELECTABLE)); } break; default: diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp index d8ac61d0034..9611194b017 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp @@ -543,7 +543,7 @@ public: void EnterCombat(Unit* /*who*/) override { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); _EnterCombat(); } @@ -563,7 +563,7 @@ public: void JustDied(Unit* /*killer*/) override { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); _JustDied(); } @@ -674,7 +674,7 @@ public: Timer[EVENT_TALK_SEQUENCE] = 100; me->RemoveAllAuras(); me->InterruptNonMeleeSpells(false); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->GetMotionMaster()->Clear(false); me->AttackStop(); break; @@ -685,7 +685,7 @@ public: Timer[EVENT_FLIGHT_SEQUENCE] = 1; me->RemoveAllAuras(); me->InterruptNonMeleeSpells(false); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->GetMotionMaster()->Clear(false); me->AttackStop(); } @@ -810,7 +810,7 @@ public: if (Glaive) { GlaiveGUID[i] = Glaive->GetGUID(); - Glaive->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + Glaive->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); Glaive->SetDisplayId(MODEL_INVISIBLE); Glaive->setFaction(me->getFaction()); DoCast(Glaive, SPELL_THROW_GLAIVE2); @@ -826,7 +826,7 @@ public: if (Glaive) { GlaiveGUID[i] = Glaive->GetGUID(); - Glaive->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + Glaive->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); Glaive->SetDisplayId(MODEL_INVISIBLE); Glaive->setFaction(me->getFaction()); DoCast(Glaive, SPELL_THROW_GLAIVE, true); @@ -879,7 +879,7 @@ public: break; case 10: // attack DoResetThreat(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->SetSheath(SHEATH_STATE_MELEE); EnterPhase(PHASE_NORMAL_2); break; @@ -1315,7 +1315,7 @@ public: { me->SetFullHealth(); me->SetVisible(true); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); Timer[EVENT_MAIEV_STEALTH] = 0; BlinkToPlayer(); EnterPhase(Phase); @@ -1351,7 +1351,7 @@ public: if (HealthBelowPct(50)) { me->SetVisible(false); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); if (Creature* illidan = ObjectAccessor::GetCreature(*me, IllidanGUID)) ENSURE_AI(boss_illidan_stormrage::boss_illidan_stormrageAI, illidan->AI())->DeleteFromThreatList(me->GetGUID()); me->AttackStop(); @@ -1424,8 +1424,8 @@ public: KillAllElites(); - me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); // Database sometimes has strange values.. - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->SetNpcFlags(UNIT_NPC_FLAG_NONE); // Database sometimes has strange values.. + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); me->setActive(false); me->SetVisible(false); } @@ -1486,7 +1486,7 @@ public: void BeginChannel() { me->setActive(true); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); if (!JustCreated) return; float x, y, z; @@ -1534,7 +1534,7 @@ public: if (Creature* illidan = ObjectAccessor::GetCreature(*me, IllidanGUID)) ENSURE_AI(boss_illidan_stormrage::boss_illidan_stormrageAI, illidan->AI())->DeleteFromThreatList(me->GetGUID()); EnterEvadeMode(EVADE_REASON_OTHER); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); ++WalkCount; } JustCreated = false; @@ -1562,11 +1562,11 @@ public: Timer = 30000; // chain lightning break; case PHASE_FIGHT_MINIONS: - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); Timer = urand(10000, 16000); // summon minion break; case PHASE_RETURN: - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); KillAllElites(); WalkCount = 0; BeginWalk(); @@ -1806,9 +1806,9 @@ void boss_illidan_stormrage::boss_illidan_stormrageAI::Reset() Initialize(); me->SetDisplayId(MODEL_ILLIDAN); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag( UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); SetEquipmentSlots(false, EQUIP_UNEQUIP, EQUIP_UNEQUIP, EQUIP_NO_CHANGE); me->SetDisableGravity(false); me->setActive(false); @@ -1845,7 +1845,7 @@ void boss_illidan_stormrage::boss_illidan_stormrageAI::JustSummoned(Creature* su case MAIEV_SHADOWSONG: { summon->SetVisible(false); // Leave her invisible until she has to talk - summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + summon->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); MaievGUID = summon->GetGUID(); ENSURE_AI(boss_maiev_shadowsong::boss_maievAI, summon->AI())->GetIllidanGUID(me->GetGUID()); summon->AI()->DoAction(PHASE_TALK_SEQUENCE); @@ -1866,7 +1866,7 @@ void boss_illidan_stormrage::boss_illidan_stormrageAI::HandleTalkSequence() switch (TalkCount) { case 0: - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); break; case 8: // Equip our warglaives! @@ -1877,7 +1877,7 @@ void boss_illidan_stormrage::boss_illidan_stormrageAI::HandleTalkSequence() case 9: if (Creature* akama = ObjectAccessor::GetCreature(*me, AkamaGUID)) { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); me->AddThreat(akama, 100.0f); ENSURE_AI(npc_akama_illidan::npc_akama_illidanAI, akama->AI())->EnterPhase(PHASE_FIGHT_ILLIDAN); EnterPhase(PHASE_NORMAL); @@ -1900,8 +1900,8 @@ void boss_illidan_stormrage::boss_illidan_stormrageAI::HandleTalkSequence() case 14: if (Creature* maiev = ObjectAccessor::GetCreature(*me, MaievGUID)) { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE); - maiev->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE + UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); + maiev->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); maiev->AddThreat(me, 10000000.0f); // Have Maiev add a lot of threat on us so that players don't pull her off if they damage her via AOE maiev->AI()->AttackStart(me); // Force Maiev to attack us. EnterPhase(PHASE_NORMAL_MAIEV); @@ -1932,7 +1932,7 @@ void boss_illidan_stormrage::boss_illidan_stormrageAI::HandleTalkSequence() { maiev->CastSpell(maiev, SPELL_TELEPORT_VISUAL, true); maiev->setDeathState(JUST_DIED); - me->SetUInt32Value(UNIT_FIELD_BYTES_1, UNIT_STAND_STATE_DEAD); + me->SetStandState(UNIT_STAND_STATE_DEAD); } break; case 21: // Kill ourself. @@ -1972,7 +1972,7 @@ public: { Initialize(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); } void EnterCombat(Unit* /*who*/) override { } diff --git a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp index ebb698650fc..1e9fce3e1bd 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp @@ -165,7 +165,7 @@ public: { _inCombat = true; DoZoneInCombat(); - me->SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_STAND_STATE, UNIT_STAND_STATE_STAND); + me->SetStandState(UNIT_STAND_STATE_STAND); events.ScheduleEvent(EVENT_SUBMERGE, Seconds(10)); } } @@ -774,12 +774,12 @@ class spell_reliquary_of_souls_submerge : public SpellScriptLoader void OnApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - GetTarget()->SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_STAND_STATE, UNIT_STAND_STATE_SUBMERGED); + GetTarget()->SetStandState(UNIT_STAND_STATE_SUBMERGED); } void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - GetTarget()->SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_STAND_STATE, UNIT_STAND_STATE_STAND); + GetTarget()->SetStandState(UNIT_STAND_STATE_STAND); } diff --git a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp index 1d48140db59..41b07aad13c 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp @@ -222,9 +222,9 @@ public: { _Reset(); Initialize(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_STUN); + me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + me->SetEmoteState(EMOTE_STATE_STUN); me->SetWalk(true); events.ScheduleEvent(EVENT_INITIALIZE_SPAWNERS, Seconds(1)); me->SummonCreatureGroup(SUMMON_GROUP_RESET); @@ -247,7 +247,7 @@ public: if (spell->Id == SPELL_AKAMA_SOUL_CHANNEL) { events.ScheduleEvent(EVENT_START_CHANNELERS_AND_SPAWNERS, Seconds(1)); - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); + me->SetEmoteState(EMOTE_STATE_NONE); events.ScheduleEvent(EVENT_EVADE_CHECK, Seconds(10)); if (Creature* akama = instance->GetCreature(DATA_AKAMA_SHADE)) AttackStart(akama); @@ -262,8 +262,8 @@ public: if (_isInPhaseOne && motionType == CHASE_MOTION_TYPE) { _isInPhaseOne = false; - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); me->SetWalk(false); events.ScheduleEvent(EVENT_ADD_THREAT, Milliseconds(100)); @@ -324,7 +324,7 @@ public: { for (ObjectGuid const summonGuid : summons) if (Creature* channeler = ObjectAccessor::GetCreature(*me, summonGuid)) - channeler->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + channeler->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); for (ObjectGuid const spawnerGuid : _spawners) if (Creature* spawner = ObjectAccessor::GetCreature(*me, spawnerGuid)) @@ -388,7 +388,7 @@ public: DoCastSelf(SPELL_STEALTH); if (_instance->GetBossState(DATA_SHADE_OF_AKAMA) != DONE) - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); } void JustSummoned(Creature* summon) override @@ -476,7 +476,7 @@ public: { case EVENT_SHADE_START: _instance->SetBossState(DATA_SHADE_OF_AKAMA, IN_PROGRESS); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); me->RemoveAurasDueToSpell(SPELL_STEALTH); me->SetWalk(true); me->GetMotionMaster()->MovePoint(AKAMA_CHANNEL_WAYPOINT, AkamaWP[0], false); @@ -593,7 +593,7 @@ public: { if (Creature* shade = _instance->GetCreature(DATA_SHADE_OF_AKAMA)) { - if (shade->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE)) + if (shade->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE)) DoCastSelf(SPELL_SHADE_SOUL_CHANNEL); else @@ -602,7 +602,7 @@ public: channel.Repeat(Seconds(2)); }); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); } void UpdateAI(uint32 diff) override @@ -742,7 +742,7 @@ public: { if (Creature* shade = _instance->GetCreature(DATA_SHADE_OF_AKAMA)) { - if (shade->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE)) + if (shade->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE)) me->GetMotionMaster()->MovePoint(0, shade->GetPosition()); else if (Creature* akama = _instance->GetCreature(DATA_AKAMA_SHADE)) @@ -780,7 +780,7 @@ public: { if (Creature* shade = _instance->GetCreature(DATA_SHADE_OF_AKAMA)) { - if (shade->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE)) + if (shade->HasUnitFlag(UNIT_FLAG_NOT_SELECTABLE)) { me->SetFacingToObject(shade); DoCastSelf(SPELL_SHADE_SOUL_CHANNEL); @@ -1174,7 +1174,7 @@ public: Talk(SAY_BROKEN_HAIL); break; case ACTION_BROKEN_EMOTE: - me->SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_STAND_STATE, UNIT_STAND_STATE_KNEEL); + me->SetStandState(UNIT_STAND_STATE_KNEEL); break; default: break; diff --git a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp index 9259e74fc7a..e15663a071d 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_teron_gorefiend.cpp @@ -117,7 +117,7 @@ public: { boss_teron_gorefiendAI(Creature* creature) : BossAI(creature, DATA_TERON_GOREFIEND), _intro(false) { - creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); + creature->AddUnitFlag(UnitFlags(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE)); creature->SetReactState(REACT_PASSIVE); } @@ -203,7 +203,7 @@ public: events.Repeat(Seconds(18), Seconds(30)); break; case EVENT_FINISH_INTRO: - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE)); me->SetReactState(REACT_AGGRESSIVE); break; default: diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp index 73e115e7aa6..527d8983d80 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp @@ -668,7 +668,7 @@ public: if (Creature* Cyclone = me->SummonCreature(CREATURE_CYCLONE, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), float(rand32() % 5), TEMPSUMMON_TIMED_DESPAWN, 15000)) { Cyclone->SetObjectScale(3.0f); - Cyclone->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + Cyclone->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); Cyclone->setFaction(me->getFaction()); Cyclone->CastSpell(Cyclone, SPELL_CYCLONE_CYCLONE, true); if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp index 775e4323e00..d40f46bbaaa 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_hydross_the_unstable.cpp @@ -154,7 +154,7 @@ public: { beamer->CastSpell(me, SPELL_BLUE_BEAM, true); beamer->SetDisplayId(11686); //invisible - beamer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + beamer->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); beams[0] = beamer->GetGUID(); } beamer = me->SummonCreature(ENTRY_BEAM_DUMMY, -219.918f, -371.308f, 22.0042f, 2.73072f, TEMPSUMMON_CORPSE_DESPAWN, 0); @@ -162,7 +162,7 @@ public: { beamer->CastSpell(me, SPELL_BLUE_BEAM, true); beamer->SetDisplayId(11686); //invisible - beamer->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + beamer->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); beams[1] = beamer->GetGUID(); } } diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp index 9426cbb113e..211be3d55f2 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp @@ -152,7 +152,7 @@ public: Intro = false; JustCreated = true; CanAttack = false; - creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); // set it only once on Creature create (no need do intro if wiped) + creature->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); // set it only once on Creature create (no need do intro if wiped) } void Initialize() @@ -322,7 +322,7 @@ public: if (AggroTimer <= diff) { CanAttack = true; - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); AggroTimer=19000; } else @@ -852,7 +852,7 @@ public: Initialize(); me->SetDisplayId(11686); // invisible - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); } void MoveInLineOfSight(Unit* /*who*/) override { } diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp index 4b99ab3335b..d664ed9ce98 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp @@ -155,8 +155,8 @@ public: instance->SetData(DATA_STRANGE_POOL, NOT_STARTED); DoCast(me, SPELL_SUBMERGE); // submerge anim me->SetVisible(false); // we start invis under water, submerged - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); } void JustDied(Unit* /*killer*/) override @@ -207,7 +207,7 @@ public: if (!Submerged && WaitTimer2 <= diff) // wait 500ms before emerge anim { me->RemoveAllAuras(); - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0); + me->SetEmoteState(EMOTE_ONESHOT_NONE); DoCast(me, SPELL_EMERGE, false); WaitTimer2 = 60000; // never reached WaitTimer = 3000; @@ -219,8 +219,8 @@ public: { WaitTimer = 3000; CanStartEvent = true; // fresh fished from pool - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); } else WaitTimer -= diff; @@ -335,8 +335,8 @@ public: Submerged = false; me->InterruptNonMeleeSpells(false); // shouldn't be any me->RemoveAllAuras(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); - me->RemoveFlag(UNIT_NPC_EMOTESTATE, EMOTE_STATE_SUBMERGED); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); + me->SetEmoteState(EMOTE_ONESHOT_NONE); DoCast(me, SPELL_EMERGE, true); Spawned = false; SpoutTimer = 3000; // directly cast Spout after emerging! @@ -355,7 +355,7 @@ public: if (!Spawned) { - me->SetUInt32Value(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->SetUnitFlags(UNIT_FLAG_IMMUNE_TO_PC); // spawn adds for (uint8 i = 0; i < 9; ++i) if (Creature* summoned = me->SummonCreature(i < 6 ? NPC_COILFANG_AMBUSHER : NPC_COILFANG_GUARDIAN, AddPos[i][0], AddPos[i][1], AddPos[i][2], 0, TEMPSUMMON_CORPSE_DESPAWN, 0)) diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp index 0965ad18bc2..52d74278f15 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_morogrim_tidewalker.cpp @@ -320,8 +320,8 @@ public: { Initialize(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->setFaction(14); } diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp index 0c1b98076f3..41897eaeb62 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/boss_warlord_kalithresh.cpp @@ -65,14 +65,14 @@ public: void Reset() override { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); //hack, due to really weird spell behaviour :( if (instance->GetData(DATA_DISTILLER) == IN_PROGRESS) { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); } } @@ -80,8 +80,8 @@ public: void StartRageGen(Unit* /*caster*/) { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); DoCast(me, SPELL_WARLORDS_RAGE_NAGA, true); diff --git a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp index f338f7acf97..7082d0456ed 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SteamVault/instance_steam_vault.cpp @@ -39,7 +39,7 @@ class go_main_chambers_access_panel : public GameObjectScript if (go->GetEntry() == GO_ACCESS_PANEL_MEK && (instance->GetBossState(DATA_MEKGINEER_STEAMRIGGER) == DONE || instance->GetBossState(DATA_MEKGINEER_STEAMRIGGER) == SPECIAL)) instance->SetBossState(DATA_MEKGINEER_STEAMRIGGER, SPECIAL); - go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + go->AddFlag(GO_FLAG_NOT_SELECTABLE); go->SetGoState(GO_STATE_ACTIVE); return true; @@ -140,7 +140,7 @@ class instance_steam_vault : public InstanceMapScript case DATA_HYDROMANCER_THESPIA: if (state == DONE) if (GameObject* panel = GetGameObject(DATA_ACCESS_PANEL_HYDRO)) - panel->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + panel->RemoveFlag(GO_FLAG_NOT_SELECTABLE); if (state == SPECIAL) { if (GetBossState(DATA_MEKGINEER_STEAMRIGGER) == SPECIAL) @@ -152,7 +152,7 @@ class instance_steam_vault : public InstanceMapScript case DATA_MEKGINEER_STEAMRIGGER: if (state == DONE) if (GameObject* panel = GetGameObject(DATA_ACCESS_PANEL_MEK)) - panel->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + panel->RemoveFlag(GO_FLAG_NOT_SELECTABLE); if (state == SPECIAL) { if (GetBossState(DATA_HYDROMANCER_THESPIA) == SPECIAL) diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp index dbdfdb346e1..82f33015979 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheSlavePens/boss_ahune.cpp @@ -268,7 +268,7 @@ public: me->RemoveAurasDueToSpell(SPELL_STAY_SUBMERGED); DoCast(me, SPELL_STAND); DoCast(me, SPELL_RESURFACE, true); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); events.ScheduleEvent(EVENT_SYNCH_HEALTH, Seconds(3)); } @@ -277,7 +277,7 @@ public: if (Creature* frozenCore = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_FROZEN_CORE))) frozenCore->AI()->DoAction(ACTION_AHUNE_RETREAT); me->RemoveAurasDueToSpell(SPELL_AHUNES_SHIELD); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_31); + me->AddUnitFlag(UNIT_FLAG_UNK_31); DoCast(me, SPELL_SUBMERGED, true); DoCast(me, SPELL_AHUNE_SELF_STUN, true); DoCast(me, SPELL_STAY_SUBMERGED, true); @@ -326,7 +326,7 @@ public: { if (action == ACTION_AHUNE_RETREAT) { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC)); me->RemoveAurasDueToSpell(SPELL_ICE_SPEAR_AURA); _events.ScheduleEvent(EVENT_SYNCH_HEALTH, Seconds(3), 0, PHASE_TWO); } @@ -334,7 +334,7 @@ public: { _events.Reset(); DoCast(me, SPELL_ICE_SPEAR_AURA); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_IMMUNE_TO_PC)); } } diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp index fb35c42e74c..cb4b7aac3b7 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp @@ -107,14 +107,14 @@ class boss_broggok : public CreatureScript break; case ACTION_ACTIVATE_BROGGOK: me->SetReactState(REACT_AGGRESSIVE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE)); events.ScheduleEvent(EVENT_SLIME_SPRAY, 10000); events.ScheduleEvent(EVENT_POISON_BOLT, 7000); events.ScheduleEvent(EVENT_POISON_CLOUD, 5000); break; case ACTION_RESET_BROGGOK: me->SetReactState(REACT_PASSIVE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE)); break; } } diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp index 52087352be1..8a361ea1a60 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_kelidan_the_breaker.cpp @@ -100,7 +100,7 @@ class boss_kelidan_the_breaker : public CreatureScript Initialize(); SummonChannelers(); me->SetReactState(REACT_PASSIVE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE)); } void EnterCombat(Unit* who) override @@ -144,7 +144,7 @@ class boss_kelidan_the_breaker : public CreatureScript return; } me->SetReactState(REACT_AGGRESSIVE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE)); if (killer) AttackStart(killer); } diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp index c581a0b8198..27633445701 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/instance_blood_furnace.cpp @@ -219,7 +219,7 @@ class instance_blood_furnace : public InstanceMapScript { if (!prisoner->IsAlive()) prisoner->Respawn(true); - prisoner->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE); + prisoner->AddUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE)); } void StorePrisoner(Creature* creature) @@ -307,7 +307,7 @@ class instance_blood_furnace : public InstanceMapScript for (GuidSet::const_iterator i = prisoners.begin(); i != prisoners.end(); ++i) if (Creature* prisoner = instance->GetCreature(*i)) { - prisoner->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE); + prisoner->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_NON_ATTACKABLE)); prisoner->SetInCombatWithZone(); } } diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp index 20c6e03762c..fb9fe27658c 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/instance_hellfire_ramparts.cpp @@ -64,7 +64,7 @@ class instance_ramparts : public InstanceMapScript case DATA_NAZAN: if (GetBossState(DATA_VAZRUDEN) == DONE && GetBossState(DATA_NAZAN) == DONE) if (GameObject* chest = instance->GetGameObject(felIronChestGUID)) - chest->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + chest->RemoveFlag(GO_FLAG_NOT_SELECTABLE); break; default: break; diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp index 454c1179595..155b59676de 100644 --- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp @@ -249,7 +249,7 @@ class boss_magtheridon : public CreatureScript CombatStart(); break; case EVENT_RELEASED: - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_NOT_SELECTABLE)); me->SetInCombatWithZone(); instance->SetData(DATA_MANTICRON_CUBE, ACTION_ENABLE); events.ScheduleEvent(EVENT_CLEAVE, Seconds(10)); diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp index 6901d165cc1..e98465098b5 100644 --- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/instance_magtheridons_lair.cpp @@ -106,9 +106,9 @@ class instance_magtheridons_lair : public InstanceMapScript if (GameObject* cube = instance->GetGameObject(gobGUID)) { if (value == ACTION_ENABLE) - cube->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + cube->RemoveFlag(GO_FLAG_NOT_SELECTABLE); else - cube->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + cube->AddFlag(GO_FLAG_NOT_SELECTABLE); } break; case DATA_COLLAPSE: diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp index 604c4602e79..e3d95f79c28 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/boss_nethekurse.cpp @@ -111,7 +111,7 @@ class boss_grand_warlock_nethekurse : public CreatureScript void Reset() override { _Reset(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); Initialize(); } @@ -147,7 +147,7 @@ class boss_grand_warlock_nethekurse : public CreatureScript { IsIntroEvent = false; IsMainEvent = true; - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); } break; default: @@ -164,7 +164,7 @@ class boss_grand_warlock_nethekurse : public CreatureScript PeonEngagedCount = 4; PeonKilledCount = 4; IsMainEvent = true; - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); } void AttackStart(Unit* who) override @@ -209,8 +209,8 @@ class boss_grand_warlock_nethekurse : public CreatureScript void JustSummoned(Creature* summoned) override { summoned->setFaction(16); - summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + summoned->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + summoned->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); //triggered spell of consumption does not properly show it's SpellVisual, wrong spellid? summoned->CastSpell(summoned, SPELL_TEMPORARY_VISUAL, true); diff --git a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp index 87ee671454e..afc2f96ef71 100644 --- a/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/ShatteredHalls/shattered_halls.cpp @@ -94,9 +94,9 @@ class boss_shattered_executioner : public CreatureScript me->AddLootMode(LOOT_MODE_HARD_MODE_1); if (instance->GetBossState(DATA_KARGATH) == DONE) - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); else - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); Initialize(); } diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp index 7a98eab4066..d136a7c2db4 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp @@ -135,11 +135,11 @@ class boss_alar : public CreatureScript me->SetDisplayId(me->GetNativeDisplayId()); me->SetSpeedRate(MOVE_RUN, DefaultMoveSpeedRate); - //me->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 10); - //me->SetFloatValue(UNIT_FIELD_COMBATREACH, 10); + //me->SetBoundingRadius(10); + //me->SetCombatReach(10); me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FIRE, true); me->SetDisableGravity(true); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->setActive(false); } @@ -179,7 +179,7 @@ class boss_alar : public CreatureScript me->SetHealth(0); me->InterruptNonMeleeSpells(true); me->RemoveAllAuras(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->AttackStop(); me->SetTarget(ObjectGuid::Empty); me->SetSpeedRate(MOVE_RUN, 5.0f); @@ -266,7 +266,7 @@ class boss_alar : public CreatureScript me->SetStandState(UNIT_STAND_STATE_STAND); me->SetFullHealth(); me->SetSpeedRate(MOVE_RUN, DefaultMoveSpeedRate); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); DoZoneInCombat(); DoCast(me, SPELL_REBIRTH, true); MeltArmor_Timer = 60000; @@ -307,8 +307,8 @@ class boss_alar : public CreatureScript case WE_SUMMON: for (uint8 i = 0; i < 2; ++i) DoSpawnCreature(CREATURE_EMBER_OF_ALAR, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); - me->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 10); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->SetBoundingRadius(10); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetDisplayId(me->GetNativeDisplayId()); DoCast(me, SPELL_REBIRTH_2, true); break; @@ -391,8 +391,8 @@ class boss_alar : public CreatureScript { me->AttackStop(); me->GetMotionMaster()->MovePoint(6, waypoint[4][0], waypoint[4][1], waypoint[4][2]); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - me->SetFloatValue(UNIT_FIELD_BOUNDINGRADIUS, 50); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + me->SetBoundingRadius(50); WaitEvent = WE_METEOR; WaitTimer = 0; DiveBomb_Timer = 40000 + rand32() % 5000; @@ -408,7 +408,7 @@ class boss_alar : public CreatureScript Creature* Summoned = me->SummonCreature(CREATURE_FLAME_PATCH_ALAR, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 120000); if (Summoned) { - Summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + Summoned->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); Summoned->SetObjectScale(Summoned->GetObjectScale() * 2.5f); Summoned->SetDisplayId(11686); Summoned->setFaction(me->getFaction()); @@ -501,7 +501,7 @@ class npc_ember_of_alar : public CreatureScript damage = 0; DoCast(me, SPELL_EMBER_BLAST, true); me->SetDisplayId(11686); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); if (instance->GetBossState(DATA_ALAR) == IN_PROGRESS) { if (Unit* Alar = ObjectAccessor::GetUnit(*me, instance->GetGuidData(DATA_ALAR))) diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp index 9e2b7ebd5b9..9adea2414a8 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_astromancer.cpp @@ -151,7 +151,7 @@ class boss_high_astromancer_solarian : public CreatureScript Initialize(); _Reset(); me->SetArmor(defaultarmor, 0); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetVisible(true); me->SetObjectScale(defaultsize); me->SetDisplayId(MODEL_HUMAN); @@ -217,7 +217,7 @@ class boss_high_astromancer_solarian : public CreatureScript AppearDelay = false; if (Phase == 2) { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetVisible(false); } AppearDelay_Timer = 2000; @@ -320,7 +320,7 @@ class boss_high_astromancer_solarian : public CreatureScript { if (Creature* Summoned = me->SummonCreature(NPC_ASTROMANCER_SOLARIAN_SPOTLIGHT, Portals[i][0], Portals[i][1], Portals[i][2], CENTER_O, TEMPSUMMON_TIMED_DESPAWN, Phase2_Timer+Phase3_Timer+AppearDelay_Timer+1700)) { - Summoned->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + Summoned->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); Summoned->CastSpell(Summoned, SPELL_SPOTLIGHT, false); } } @@ -364,7 +364,7 @@ class boss_high_astromancer_solarian : public CreatureScript if (j != i) SummonMinion(NPC_SOLARIUM_PRIEST, Portals[j][0], Portals[j][1], Portals[j][2]); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetVisible(true); Talk(SAY_SUMMON2); @@ -399,7 +399,7 @@ class boss_high_astromancer_solarian : public CreatureScript { Phase = 4; //To make sure she wont be invisible or not selecatble - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetVisible(true); Talk(SAY_VOIDA); Talk(SAY_VOIDB); diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp index 0d3628c25d3..c0ba5e9b2bf 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp @@ -333,8 +333,8 @@ struct advisorbase_ai : public ScriptedAI Initialize(); me->SetStandState(UNIT_STAND_STATE_STAND); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED)); //reset encounter if (instance->GetBossState(DATA_KAELTHAS) == IN_PROGRESS) @@ -344,7 +344,7 @@ struct advisorbase_ai : public ScriptedAI void MoveInLineOfSight(Unit* who) override { - if (!who || _inFakeDeath || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) + if (!who || _inFakeDeath || me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)) return; ScriptedAI::MoveInLineOfSight(who); @@ -352,7 +352,7 @@ struct advisorbase_ai : public ScriptedAI void AttackStart(Unit* who) override { - if (!who || _inFakeDeath || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) + if (!who || _inFakeDeath || me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)) return; ScriptedAI::AttackStart(who); @@ -363,7 +363,7 @@ struct advisorbase_ai : public ScriptedAI if (spell->Id == SPELL_RESSURECTION) { _hasRessurrected = true; - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED)); me->SetStandState(UNIT_STAND_STATE_STAND); events.ScheduleEvent(EVENT_DELAYED_RESSURECTION, 2000); } @@ -382,7 +382,7 @@ struct advisorbase_ai : public ScriptedAI me->RemoveAllAurasOnDeath(); me->ModifyAuraState(AURA_STATE_HEALTHLESS_20_PERCENT, false); me->ModifyAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, false); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_STUNNED)); me->SetTarget(ObjectGuid::Empty); me->SetStandState(UNIT_STAND_STATE_DEAD); me->GetMotionMaster()->Clear(); @@ -454,8 +454,8 @@ class boss_kaelthas : public CreatureScript { Initialize(); DoAction(ACTION_PREPARE_ADVISORS); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + me->SetEmoteState(EMOTE_ONESHOT_NONE); me->SetDisableGravity(false); me->SetTarget(ObjectGuid::Empty); me->SetObjectScale(1.0f); @@ -483,7 +483,7 @@ class boss_kaelthas : public CreatureScript { case ACTION_START_ENCOUNTER: Talk(SAY_INTRO); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); _advisorGuid[ADVISOR_THALADRED] = instance->GetGuidData(DATA_THALADREDTHEDARKENER); _advisorGuid[ADVISOR_SANGUINAR] = instance->GetGuidData(DATA_LORDSANGUINAR); @@ -500,7 +500,7 @@ class boss_kaelthas : public CreatureScript if (Creature* creature = ObjectAccessor::GetCreature(*me, _advisorGuid[i])) { creature->Respawn(true); - creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + creature->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); creature->AI()->EnterEvadeMode(); } } @@ -600,7 +600,7 @@ class boss_kaelthas : public CreatureScript case POINT_TRANSITION_CENTER_ASCENDING: me->SetFacingTo(float(M_PI), true); Talk(SAY_PHASE5_NUTS); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetDisableGravity(true); //me->SetHover(true); -- Set in sniffs, but breaks his visual. events.ScheduleEvent(EVENT_TRANSITION_2, 2000); @@ -619,7 +619,7 @@ class boss_kaelthas : public CreatureScript case POINT_END_TRANSITION: me->SetReactState(REACT_AGGRESSIVE); me->InterruptNonMeleeSpells(false); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->RemoveAurasDueToSpell(SPELL_FULLPOWER); if (Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO, 0)) @@ -673,13 +673,13 @@ class boss_kaelthas : public CreatureScript switch (eventId) { case EVENT_START_ENCOUNTER: - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED); + me->AddUnitFlag(UNIT_FLAG_PACIFIED); DoAction(ACTION_ACTIVE_ADVISOR); break; case EVENT_ACTIVE_ADVISOR: if (Creature* advisor = ObjectAccessor::GetCreature(*me, _advisorGuid[_advisorCounter])) { - advisor->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + advisor->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) advisor->AI()->AttackStart(target); @@ -709,7 +709,7 @@ class boss_kaelthas : public CreatureScript // Sometimes people can collect Aggro in Phase 1-3. Reset threat before releasing Kael. DoResetThreat(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_PACIFIED)); if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) AttackStart(target); @@ -742,7 +742,7 @@ class boss_kaelthas : public CreatureScript events.ScheduleEvent(EVENT_SUMMON_PHOENIX, urand(45000, 60000), EVENT_GROUP_COMBAT, PHASE_COMBAT); break; case EVENT_END_TRANSITION: - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); + me->SetEmoteState(EMOTE_ONESHOT_NONE); DoCast(SPELL_FULLPOWER); events.ScheduleEvent(EVENT_TRANSITION_4, 2000); break; @@ -807,7 +807,7 @@ class boss_kaelthas : public CreatureScript me->RemoveAurasDueToSpell(SPELL_NETHER_BEAM_VISUAL3); DoCast(me, SPELL_KAEL_EXPLODES3, true); DoCast(me, SPELL_KAEL_STUNNED); // Core doesn't handle the emote properly while flying. - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_DROWNED); + me->SetEmoteState(EMOTE_STATE_DROWNED); // Destroy the surrounding environment. if (GameObject* statue = instance->GetGameObject(DATA_KAEL_STATUE_LEFT)) @@ -1085,7 +1085,7 @@ class boss_grand_astromancer_capernian : public CreatureScript void AttackStart(Unit* who) override { - if (!who || me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) + if (!who || me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)) return; if (me->Attack(who, true)) @@ -1278,7 +1278,7 @@ class npc_kael_flamestrike : public CreatureScript { Initialize(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->setFaction(14); } diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp index 53e8527f5e0..cf285ebb1c4 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp @@ -304,7 +304,7 @@ class npc_warden_mellichar : public CreatureScript { Initialize(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); DoCast(me, SPELL_TARGET_OMEGA); instance->SetBossState(DATA_HARBINGER_SKYRISS, NOT_STARTED); @@ -539,9 +539,9 @@ class npc_zerekethvoidzone : public CreatureScript void Reset() override { - me->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); + me->SetNpcFlags(UNIT_NPC_FLAG_NONE); me->setFaction(16); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); DoCast(me, SPELL_VOID_ZONE_DAMAGE); } diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp index b573d61a1fb..82cf63526c5 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_harbinger_skyriss.cpp @@ -100,7 +100,7 @@ class boss_harbinger_skyriss : public CreatureScript void Reset() override { if (!Intro) - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); Initialize(); } @@ -183,7 +183,7 @@ class boss_harbinger_skyriss : public CreatureScript Intro_Timer = 3000; break; case 3: - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); Intro = true; break; } @@ -287,7 +287,7 @@ class boss_harbinger_skyriss_illusion : public CreatureScript void Reset() override { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); } void EnterCombat(Unit* /*who*/) override { } diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp index dd72605d46a..0c00d733bcb 100644 --- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp +++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp @@ -110,7 +110,7 @@ public: void MoveInLineOfSight(Unit* who) override { - if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE)) + if (me->HasUnitFlag(UNIT_FLAG_NON_ATTACKABLE)) return; ScriptedAI::MoveInLineOfSight(who); @@ -144,7 +144,7 @@ public: if (me->GetEntry() == ENTRY_NIHIL) { Talk(SAY_NIHIL_INTERRUPT); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); IsNihil = false; } @@ -153,7 +153,7 @@ public: if (entry_list[cid] == ENTRY_NIHIL) { EnterEvadeMode(); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); IsNihil = true; }else AttackStart(caster); @@ -186,7 +186,7 @@ public: ++NihilSpeech_Phase; break; case 4: - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); //take off to location above me->GetMotionMaster()->MovePoint(0, me->GetPositionX()+50.0f, me->GetPositionY(), me->GetPositionZ()+50.0f); ++NihilSpeech_Phase; @@ -632,7 +632,7 @@ class npc_simon_bunny : public CreatureScript _events.ScheduleEvent(EVENT_SIMON_PERIODIC_PLAYER_CHECK, 2000); if (GameObject* relic = me->FindNearestGameObject(large ? GO_APEXIS_MONUMENT : GO_APEXIS_RELIC, searchDistance)) - relic->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + relic->AddFlag(GO_FLAG_NOT_SELECTABLE); } // Called when despawning the bunny. Sets all the node GOs to their default states. @@ -642,14 +642,14 @@ class npc_simon_bunny : public CreatureScript for (uint32 clusterId = SIMON_BLUE; clusterId < SIMON_MAX_COLORS; clusterId++) if (GameObject* cluster = me->FindNearestGameObject(clusterIds[clusterId], searchDistance)) - cluster->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + cluster->AddFlag(GO_FLAG_NOT_SELECTABLE); for (uint32 auraId = GO_AURA_BLUE; auraId <= GO_AURA_YELLOW; auraId++) if (GameObject* auraGo = me->FindNearestGameObject(auraId, searchDistance)) auraGo->RemoveFromWorld(); if (GameObject* relic = me->FindNearestGameObject(large ? GO_APEXIS_MONUMENT : GO_APEXIS_RELIC, searchDistance)) - relic->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + relic->RemoveFlag(GO_FLAG_NOT_SELECTABLE); me->DespawnOrUnsummon(1000); } @@ -693,7 +693,7 @@ class npc_simon_bunny : public CreatureScript { for (uint32 clusterId = SIMON_BLUE; clusterId < SIMON_MAX_COLORS; clusterId++) if (GameObject* cluster = me->FindNearestGameObject(clusterIds[clusterId], searchDistance)) - cluster->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + cluster->RemoveFlag(GO_FLAG_NOT_SELECTABLE); if (clustersOnly) return; @@ -747,7 +747,7 @@ class npc_simon_bunny : public CreatureScript { if (GameObject* cluster = me->FindNearestGameObject(clusterIds[clusterId], 2.0f*searchDistance)) { - cluster->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE); + cluster->AddFlag(GO_FLAG_NOT_SELECTABLE); // break since we don't need glowing auras for large clusters if (large) diff --git a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp index 99751a4ccbe..d186f1bf5b1 100644 --- a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp +++ b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp @@ -76,7 +76,7 @@ public: { Initialize(); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); + me->RemoveNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); me->setFaction(FACTION_FRIENDLY); Talk(SAY_SUMMON); @@ -99,7 +99,7 @@ public: if (HealthBelowPct(30)) { me->setFaction(FACTION_FRIENDLY); - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); + me->AddNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); me->RemoveAllAuras(); me->DeleteThreatList(); me->CombatStop(true); @@ -684,7 +684,7 @@ public: Initialize(); playerGUID.Clear(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED); + me->RemoveUnitFlag(UNIT_FLAG_PACIFIED); } void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override @@ -715,7 +715,7 @@ public: me->GetMotionMaster()->MovePoint(0, exorcismPos[1]); Talk(SAY_BARADA_2); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED); + me->AddUnitFlag(UNIT_FLAG_PACIFIED); } } @@ -895,7 +895,7 @@ public: } me->RemoveAura(SPELL_BARADAS_COMMAND); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PACIFIED); + me->RemoveUnitFlag(UNIT_FLAG_PACIFIED); Talk(SAY_BARADA_8); me->GetMotionMaster()->MoveTargetedHome(); @@ -959,7 +959,7 @@ public: { me->Dismount(); me->SetFacingToObject(player, true); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); _playerGUID = player->GetGUID(); _events.ScheduleEvent(EVENT_TALK, Seconds(2)); } @@ -967,9 +967,9 @@ public: void Reset() override { me->RestoreFaction(); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); + me->AddNpcFlag(UNIT_NPC_FLAG_GOSSIP); + me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); } void DamageTaken(Unit* /*attacker*/, uint32 &damage) override @@ -983,8 +983,8 @@ public: me->RemoveAllAuras(); me->DeleteThreatList(); me->CombatStop(true); - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->AddNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); + me->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); Talk(SAY_DEFEATED); _events.ScheduleEvent(EVENT_EVADE, Minutes(1)); @@ -1004,7 +1004,7 @@ public: _events.ScheduleEvent(EVENT_ATTACK, Seconds(2)); break; case EVENT_ATTACK: - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + me->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); me->setFaction(FACTION_HOSTILE); if (Player* player = ObjectAccessor::GetPlayer(*me, _playerGUID)) me->CombatStart(player); diff --git a/src/server/scripts/Outland/zone_netherstorm.cpp b/src/server/scripts/Outland/zone_netherstorm.cpp index 36b934b13f6..35814364992 100644 --- a/src/server/scripts/Outland/zone_netherstorm.cpp +++ b/src/server/scripts/Outland/zone_netherstorm.cpp @@ -500,7 +500,7 @@ public: if (quest->GetQuestId() == Q_ALMABTRIEB) { creature->setFaction(113); - creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + creature->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); ENSURE_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID()); } return true; diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp index b94f9768625..025b0ece9e4 100644 --- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp @@ -167,7 +167,7 @@ public: { if (spell->Id == SPELL_SUMMON_INFERNAL) { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_PACIFIED | UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_PACIFIED | UNIT_FLAG_NOT_SELECTABLE)); me->SetDisplayId(MODEL_INFERNAL); } } @@ -543,7 +543,7 @@ public: if (id) { - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_EAT); + me->SetEmoteState(EMOTE_ONESHOT_EAT); PoisonTimer = 15000; } } @@ -885,7 +885,7 @@ public: Initialize(); me->AddUnitState(UNIT_STATE_ROOT); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->SetTarget(ObjectGuid::Empty); } @@ -924,7 +924,7 @@ public: case 6: if (Player* AggroTarget = ObjectAccessor::GetPlayer(*me, AggroTargetGUID)) { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->ClearUnitState(UNIT_STATE_ROOT); float x, y, z; diff --git a/src/server/scripts/Pet/pet_dk.cpp b/src/server/scripts/Pet/pet_dk.cpp index 17a4acf37ee..d854277f4df 100644 --- a/src/server/scripts/Pet/pet_dk.cpp +++ b/src/server/scripts/Pet/pet_dk.cpp @@ -83,7 +83,7 @@ class npc_pet_dk_ebon_gargoyle : public CreatureScript return; // Stop Fighting - me->ApplyModFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE, true); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); // Sanctuary me->CastSpell(me, SPELL_DK_SANCTUARY, true); diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 59587bbfd39..1defc975ab5 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -1098,8 +1098,8 @@ class spell_gen_creature_permanent_feign_death : public SpellScriptLoader void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { Unit* target = GetTarget(); - target->SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD); - target->SetFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH); + target->AddDynamicFlag(UNIT_DYNFLAG_DEAD); + target->AddUnitFlag2(UNIT_FLAG2_FEIGN_DEATH); if (target->GetTypeId() == TYPEID_UNIT) target->ToCreature()->SetReactState(REACT_PASSIVE); @@ -1108,8 +1108,8 @@ class spell_gen_creature_permanent_feign_death : public SpellScriptLoader void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { Unit* target = GetTarget(); - target->RemoveFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_DEAD); - target->RemoveFlag(UNIT_FIELD_FLAGS_2, UNIT_FLAG2_FEIGN_DEATH); + target->RemoveDynamicFlag(UNIT_DYNFLAG_DEAD); + target->RemoveUnitFlag2(UNIT_FLAG2_FEIGN_DEATH); } void Register() override @@ -3927,7 +3927,7 @@ class spell_gen_gm_freeze : public SpellScriptLoader player->CombatStop(); if (player->IsNonMeleeSpellCast(true)) player->InterruptNonMeleeSpells(true); - player->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + player->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); // if player class = hunter || warlock remove pet if alive if ((player->getClass() == CLASS_HUNTER) || (player->getClass() == CLASS_WARLOCK)) @@ -3950,7 +3950,7 @@ class spell_gen_gm_freeze : public SpellScriptLoader { // Reset player faction + allow combat + allow duels player->setFactionForRace(player->getRace()); - player->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + player->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); // save player player->SaveToDB(); } diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp index d468b820bca..9a4e0c141a0 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -443,7 +443,7 @@ class spell_hun_masters_call : public SpellScriptLoader // Do a mini Spell::CheckCasterAuras on the pet, no other way of doing this SpellCastResult result = SPELL_CAST_OK; - uint32 const unitflag = pet->GetUInt32Value(UNIT_FIELD_FLAGS); + uint32 const unitflag = pet->m_unitData->Flags; if (!pet->GetCharmerGUID().IsEmpty()) result = SPELL_FAILED_CHARMED; else if (unitflag & UNIT_FLAG_STUNNED) @@ -510,7 +510,7 @@ class spell_hun_misdirection : public SpellScriptLoader { if (GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_DEFAULT || GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_INTERRUPT) return; - + if (!GetTarget()->HasAura(SPELL_HUNTER_MISDIRECTION_PROC)) GetTarget()->ResetRedirectThreat(); } @@ -590,7 +590,7 @@ class spell_hun_multi_shot : public SpellScriptLoader void HandleOnHit() { // We need to check hunter's spec because it doesn't generate focus on other specs than MM - if (GetCaster()->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == TALENT_SPEC_HUNTER_MARKSMAN) + if (GetCaster()->ToPlayer()->GetPrimarySpecialization() == TALENT_SPEC_HUNTER_MARKSMAN) GetCaster()->CastSpell(GetCaster(), SPELL_HUNTER_MULTI_SHOT_FOCUS, true); } diff --git a/src/server/scripts/Spells/spell_pet.cpp b/src/server/scripts/Spells/spell_pet.cpp index 988ab17c19e..1030cfd63b5 100644 --- a/src/server/scripts/Spells/spell_pet.cpp +++ b/src/server/scripts/Spells/spell_pet.cpp @@ -298,10 +298,10 @@ public: if (Unit* pet = GetUnitOwner()) if (pet->IsPet()) - if (Unit* owner = pet->ToPet()->GetOwner()) + if (Player* owner = pet->ToPet()->GetOwner()) { - 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 fire = owner->m_activePlayerData->ModDamageDonePos[SPELL_SCHOOL_FIRE] - owner->m_activePlayerData->ModDamageDoneNeg[SPELL_SCHOOL_FIRE]; + int32 shadow = owner->m_activePlayerData->ModDamageDonePos[SPELL_SCHOOL_SHADOW] - owner->m_activePlayerData->ModDamageDoneNeg[SPELL_SCHOOL_SHADOW]; int32 maximum = (fire > shadow) ? fire : shadow; if (maximum < 0) maximum = 0; @@ -325,11 +325,11 @@ public: { if (Unit* pet = GetUnitOwner()) if (pet->IsPet()) - if (Unit* owner = pet->ToPet()->GetOwner()) + if (Player* owner = pet->ToPet()->GetOwner()) { //the damage bonus used for pets is either fire or shadow damage, whatever is higher - 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 fire = owner->m_activePlayerData->ModDamageDonePos[SPELL_SCHOOL_FIRE] - owner->m_activePlayerData->ModDamageDoneNeg[SPELL_SCHOOL_FIRE]; + int32 shadow = owner->m_activePlayerData->ModDamageDonePos[SPELL_SCHOOL_SHADOW] - owner->m_activePlayerData->ModDamageDoneNeg[SPELL_SCHOOL_SHADOW]; int32 maximum = (fire > shadow) ? fire : shadow; float bonusDamage = 0.0f; diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index d2dc4153420..01d1c1f45e5 100644 --- a/src/server/scripts/Spells/spell_quest.cpp +++ b/src/server/scripts/Spells/spell_quest.cpp @@ -277,13 +277,13 @@ class spell_q11396_11399_force_shield_arcane_purple_x3 : public SpellScriptLoade void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { Unit* target = GetTarget(); - target->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + target->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); target->AddUnitState(UNIT_STATE_ROOT); } void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - GetTarget()->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + GetTarget()->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); } void Register() override @@ -835,8 +835,8 @@ class spell_symbol_of_life_dummy : public SpellScriptLoader if (target->HasAura(SPELL_PERMANENT_FEIGN_DEATH)) { target->RemoveAurasDueToSpell(SPELL_PERMANENT_FEIGN_DEATH); - target->SetUInt32Value(OBJECT_DYNAMIC_FLAGS, 0); - target->SetUInt32Value(UNIT_FIELD_FLAGS_2, 0); + target->SetDynamicFlags(0); + target->SetUnitFlags2(UnitFlags2(0)); target->SetHealth(target->GetMaxHealth() / 2); target->SetPower(POWER_MANA, target->GetMaxPower(POWER_MANA) * 0.75f); } diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp index ffee81c073b..0d57059e3b3 100644 --- a/src/server/scripts/Spells/spell_warrior.cpp +++ b/src/server/scripts/Spells/spell_warrior.cpp @@ -1271,7 +1271,7 @@ class spell_warr_victorious_state : public SpellScriptLoader void HandleOnProc(AuraEffect const* /*aurEff*/, ProcEventInfo& procInfo) { - if (procInfo.GetActor()->GetTypeId() == TYPEID_PLAYER && procInfo.GetActor()->GetUInt32Value(PLAYER_FIELD_CURRENT_SPEC_ID) == TALENT_SPEC_WARRIOR_FURY) + if (procInfo.GetActor()->GetTypeId() == TYPEID_PLAYER && procInfo.GetActor()->ToPlayer()->GetPrimarySpecialization() == TALENT_SPEC_WARRIOR_FURY) PreventDefaultAction(); procInfo.GetActor()->GetSpellHistory()->ResetCooldown(SPELL_WARRIOR_IMPENDING_VICTORY, true); diff --git a/src/server/scripts/World/boss_emerald_dragons.cpp b/src/server/scripts/World/boss_emerald_dragons.cpp index 43b96548a91..d6c18647828 100644 --- a/src/server/scripts/World/boss_emerald_dragons.cpp +++ b/src/server/scripts/World/boss_emerald_dragons.cpp @@ -97,7 +97,7 @@ struct emerald_dragonAI : public WorldBossAI void Reset() override { WorldBossAI::Reset(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE)); me->SetReactState(REACT_AGGRESSIVE); DoCast(me, SPELL_MARK_OF_NATURE_AURA, true); events.ScheduleEvent(EVENT_TAIL_SWEEP, 4000); @@ -631,7 +631,7 @@ class boss_taerar : public CreatureScript _shades += count; DoCast(SPELL_SHADE); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE)); me->SetReactState(REACT_PASSIVE); ++_stage; @@ -668,7 +668,7 @@ class boss_taerar : public CreatureScript { _banished = false; - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE)); me->RemoveAurasDueToSpell(SPELL_SHADE); me->SetReactState(REACT_AGGRESSIVE); } diff --git a/src/server/scripts/World/item_scripts.cpp b/src/server/scripts/World/item_scripts.cpp index 0a92c925c5f..a0649c046d2 100644 --- a/src/server/scripts/World/item_scripts.cpp +++ b/src/server/scripts/World/item_scripts.cpp @@ -250,7 +250,7 @@ public: { summon->SetVisible(false); summon->SetReactState(REACT_PASSIVE); - summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC); + summon->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC); } return false; } diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index 07fbb60ce36..5c2cc89eea7 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -286,7 +286,7 @@ public: { Initialize(); me->setFaction(FACTION_CHICKEN); - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); + me->RemoveNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); } void EnterCombat(Unit* /*who*/) override { } @@ -294,7 +294,7 @@ public: void UpdateAI(uint32 diff) override { // Reset flags after a certain time has passed so that the next player has to start the 'event' again - if (me->HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER)) + if (me->HasNpcFlag(UNIT_NPC_FLAG_QUESTGIVER)) { if (ResetFlagTimer <= diff) { @@ -316,7 +316,7 @@ public: case TEXT_EMOTE_CHICKEN: if (player->GetQuestStatus(QUEST_CLUCK) == QUEST_STATUS_NONE && rand32() % 30 == 1) { - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); + me->AddNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); me->setFaction(FACTION_FRIENDLY); Talk(player->GetTeam() == HORDE ? EMOTE_HELLO_H : EMOTE_HELLO_A); } @@ -324,7 +324,7 @@ public: case TEXT_EMOTE_CHEER: if (player->GetQuestStatus(QUEST_CLUCK) == QUEST_STATUS_COMPLETE) { - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); + me->AddNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); me->setFaction(FACTION_FRIENDLY); Talk(EMOTE_CLUCK_TEXT); } @@ -726,7 +726,7 @@ public: void Reset() override { Initialize(); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); } void BeginEvent(Player* player) @@ -751,7 +751,7 @@ public: } Event = true; - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); } void PatientDied(Position const* point) @@ -861,13 +861,13 @@ public: Initialize(); //no select - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); //no regen health - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); + me->AddUnitFlag(UNIT_FLAG_IN_COMBAT); //to make them lay with face down - me->SetUInt32Value(UNIT_FIELD_BYTES_1, UNIT_STAND_STATE_DEAD); + me->SetStandState(UNIT_STAND_STATE_DEAD); uint32 mobId = me->GetEntry(); @@ -902,13 +902,13 @@ public: ENSURE_AI(npc_doctor::npc_doctorAI, doctor->AI())->PatientSaved(me, player, Coord); //make not selectable - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); //regen health - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); + me->RemoveUnitFlag(UNIT_FLAG_IN_COMBAT); //stand up - me->SetUInt32Value(UNIT_FIELD_BYTES_1, UNIT_STAND_STATE_STAND); + me->SetStandState(UNIT_STAND_STATE_STAND); Talk(SAY_DOC); @@ -938,10 +938,10 @@ public: if (me->IsAlive() && me->GetHealth() <= 6) { - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + me->RemoveUnitFlag(UNIT_FLAG_IN_COMBAT); + me->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->setDeathState(JUST_DIED); - me->SetFlag(OBJECT_DYNAMIC_FLAGS, 32); + me->AddDynamicFlag(UNIT_DYNFLAG_DEAD); if (!DoctorGUID.IsEmpty()) if (Creature* doctor = ObjectAccessor::GetCreature((*me), DoctorGUID)) @@ -992,7 +992,7 @@ void npc_doctor::npc_doctorAI::UpdateAI(uint32 diff) if (Creature* Patient = me->SummonCreature(patientEntry, **point, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) { //303, this flag appear to be required for client side item->spell to work (TARGET_SINGLE_FRIEND) - Patient->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); + Patient->AddUnitFlag(UNIT_FLAG_PVP_ATTACKABLE); Patients.push_back(Patient->GetGUID()); ENSURE_AI(npc_injured_patient::npc_injured_patientAI, Patient->AI())->DoctorGUID = me->GetGUID(); @@ -1198,7 +1198,7 @@ public: void Reset() override { - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + me->AddUnitFlag(UNIT_FLAG_NON_ATTACKABLE); } void EnterCombat(Unit* /*who*/) override @@ -1753,7 +1753,7 @@ public: bool OnGossipHello(Player* player, Creature* creature) override { - if (player->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_NO_XP_GAIN)) // not gaining XP + if (player->HasPlayerFlag(PLAYER_FLAGS_NO_XP_GAIN)) // not gaining XP { AddGossipItemFor(player, MENU_ID_XP_ON_OFF, OPTION_ID_XP_ON, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); SendGossipMenuFor(player, NPC_TEXT_XP_ON_OFF, creature->GetGUID()); @@ -1773,10 +1773,10 @@ public: switch (action) { case GOSSIP_ACTION_INFO_DEF + 1: // XP ON selected - player->RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_NO_XP_GAIN); // turn on XP gain + player->RemovePlayerFlag(PLAYER_FLAGS_NO_XP_GAIN); // turn on XP gain break; case GOSSIP_ACTION_INFO_DEF + 2: // XP OFF selected - player->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_NO_XP_GAIN); // turn off XP gain + player->AddPlayerFlag(PLAYER_FLAGS_NO_XP_GAIN); // turn off XP gain break; } CloseGossipMenuFor(player); @@ -2314,7 +2314,7 @@ class npc_train_wrecker : public CreatureScript break; } me->UpdateEntry(NPC_EXULTING_WIND_UP_TRAIN_WRECKER); - me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_DANCE); + me->SetEmoteState(EMOTE_ONESHOT_DANCE); me->DespawnOrUnsummon(5 * IN_MILLISECONDS); _nextAction = 0; break; @@ -2427,8 +2427,8 @@ public: }) .Schedule(Seconds(1), [this](TaskContext context) { - if ((me->HasAura(SPELL_AURA_TIRED_S) || me->HasAura(SPELL_AURA_TIRED_G)) && me->HasFlag64(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_BANKER | UNIT_NPC_FLAG_MAILBOX | UNIT_NPC_FLAG_VENDOR)) - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_BANKER | UNIT_NPC_FLAG_MAILBOX | UNIT_NPC_FLAG_VENDOR); + if ((me->HasAura(SPELL_AURA_TIRED_S) || me->HasAura(SPELL_AURA_TIRED_G)) && me->HasNpcFlag(NPCFlags(UNIT_NPC_FLAG_BANKER | UNIT_NPC_FLAG_MAILBOX | UNIT_NPC_FLAG_VENDOR))) + me->RemoveNpcFlag(NPCFlags(UNIT_NPC_FLAG_BANKER | UNIT_NPC_FLAG_MAILBOX | UNIT_NPC_FLAG_VENDOR)); context.Repeat(); }); } @@ -2439,7 +2439,7 @@ public: { case GOSSIP_OPTION_BANK: { - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_BANKER); + me->AddNpcFlag(UNIT_NPC_FLAG_BANKER); uint32 _bankAura = IsArgentSquire() ? SPELL_AURA_BANK_S : SPELL_AURA_BANK_G; if (!me->HasAura(_bankAura)) DoCastSelf(_bankAura); @@ -2450,7 +2450,7 @@ public: } case GOSSIP_OPTION_SHOP: { - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_VENDOR); + me->AddNpcFlag(UNIT_NPC_FLAG_VENDOR); uint32 _shopAura = IsArgentSquire() ? SPELL_AURA_SHOP_S : SPELL_AURA_SHOP_G; if (!me->HasAura(_shopAura)) DoCastSelf(_shopAura); @@ -2461,7 +2461,7 @@ public: } case GOSSIP_OPTION_MAIL: { - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_MAILBOX); + me->AddNpcFlag(UNIT_NPC_FLAG_MAILBOX); player->GetSession()->SendShowMailBox(me->GetGUID()); uint32 _mailAura = IsArgentSquire() ? SPELL_AURA_POSTMAN_S : SPELL_AURA_POSTMAN_G; diff --git a/src/server/shared/Packets/ByteBuffer.h b/src/server/shared/Packets/ByteBuffer.h index 0fc7bf628fc..8daf86c8489 100644 --- a/src/server/shared/Packets/ByteBuffer.h +++ b/src/server/shared/Packets/ByteBuffer.h @@ -131,6 +131,11 @@ class TC_SHARED_API ByteBuffer append((uint8 *)&value, sizeof(value)); } + bool HasUnfinishedBitPack() const + { + return _bitpos != 8; + } + void FlushBits() { if (_bitpos == 8) |