diff options
Diffstat (limited to 'src/server')
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)  | 
