aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Unit
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-08-02 13:25:41 +0200
committerShauren <shauren.trinity@gmail.com>2024-08-02 13:25:41 +0200
commite59eef5432c7b70679d33f4911c88d0f7d75fd39 (patch)
treefe9bce9c82496589facec3719b3f2943d8295e76 /src/server/game/Entities/Unit
parent7fb9168d57f378075b0f6692ea7ad822c1d8e43d (diff)
Core/PacketIO: Updated to 11.0.0
Diffstat (limited to 'src/server/game/Entities/Unit')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp41
-rw-r--r--src/server/game/Entities/Unit/Unit.h23
-rw-r--r--src/server/game/Entities/Unit/UnitDefines.h2
-rw-r--r--src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp6
4 files changed, 54 insertions, 18 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index cc2d0f96875..6c0d491b8ea 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -8885,9 +8885,10 @@ void Unit::SetInteractionAllowedInCombat(bool interactionAllowed)
void Unit::UpdateNearbyPlayersInteractions()
{
- for (uint32 i = 0; i < m_unitData->NpcFlags.size(); ++i)
- if (m_unitData->NpcFlags[i])
- ForceUpdateFieldChange(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, i));
+ if (m_unitData->NpcFlags)
+ ForceUpdateFieldChange(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags));
+ if (m_unitData->NpcFlags2)
+ ForceUpdateFieldChange(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags2));
}
//======================================================================
@@ -13176,6 +13177,40 @@ bool Unit::SetCollision(bool disable)
return true;
}
+bool Unit::SetEnableFullSpeedTurning(bool enable)
+{
+ if (GetTypeId() != TYPEID_PLAYER)
+ return false;
+
+ if (enable == HasExtraUnitMovementFlag(MOVEMENTFLAG2_FULL_SPEED_TURNING))
+ return false;
+
+ if (enable)
+ AddExtraUnitMovementFlag(MOVEMENTFLAG2_FULL_SPEED_TURNING);
+ else
+ RemoveExtraUnitMovementFlag(MOVEMENTFLAG2_FULL_SPEED_TURNING);
+
+ static constexpr OpcodeServer fullSpeedTurningOpcodeTable[2] =
+ {
+ SMSG_MOVE_DISABLE_FULL_SPEED_TURNING,
+ SMSG_MOVE_ENABLE_FULL_SPEED_TURNING
+ };
+
+ if (Player* playerMover = Unit::ToPlayer(GetUnitBeingMoved()))
+ {
+ WorldPackets::Movement::MoveSetFlag packet(fullSpeedTurningOpcodeTable[enable]);
+ packet.MoverGUID = GetGUID();
+ packet.SequenceIndex = m_movementCounter++;
+ playerMover->SendDirectMessage(packet.Write());
+
+ WorldPackets::Movement::MoveUpdate moveUpdate;
+ moveUpdate.Status = &m_movementInfo;
+ SendMessageToSet(moveUpdate.Write(), playerMover);
+ }
+
+ return true;
+}
+
bool Unit::SetCanTransitionBetweenSwimAndFly(bool enable)
{
if (GetTypeId() != TYPEID_PLAYER)
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 41d48b70cdf..3adc53fcaaa 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -983,17 +983,17 @@ class TC_GAME_API Unit : public WorldObject
MeleeHitOutcome RollMeleeOutcomeAgainst(Unit const* victim, WeaponAttackType attType) const;
- NPCFlags GetNpcFlags() const { return NPCFlags(m_unitData->NpcFlags[0]); }
- bool HasNpcFlag(NPCFlags flags) const { return (m_unitData->NpcFlags[0] & flags) != 0; }
- void SetNpcFlag(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 ReplaceAllNpcFlags(NPCFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 0), flags); }
-
- NPCFlags2 GetNpcFlags2() const { return NPCFlags2(m_unitData->NpcFlags[1]); }
- bool HasNpcFlag2(NPCFlags2 flags) const { return (m_unitData->NpcFlags[1] & flags) != 0; }
- void SetNpcFlag2(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 ReplaceAllNpcFlags2(NPCFlags2 flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags, 1), flags); }
+ NPCFlags GetNpcFlags() const { return NPCFlags(*m_unitData->NpcFlags); }
+ bool HasNpcFlag(NPCFlags flags) const { return (m_unitData->NpcFlags & flags) != 0; }
+ void SetNpcFlag(NPCFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags), flags); }
+ void RemoveNpcFlag(NPCFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags), flags); }
+ void ReplaceAllNpcFlags(NPCFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags), flags); }
+
+ NPCFlags2 GetNpcFlags2() const { return NPCFlags2(*m_unitData->NpcFlags2); }
+ bool HasNpcFlag2(NPCFlags2 flags) const { return (m_unitData->NpcFlags2 & flags) != 0; }
+ void SetNpcFlag2(NPCFlags2 flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags2), flags); }
+ void RemoveNpcFlag2(NPCFlags2 flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags2), flags); }
+ void ReplaceAllNpcFlags2(NPCFlags2 flags) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::NpcFlags2), flags); }
bool IsVendor() const { return HasNpcFlag(UNIT_NPC_FLAG_VENDOR); }
bool IsTrainer() const { return HasNpcFlag(UNIT_NPC_FLAG_TRAINER); }
@@ -1149,6 +1149,7 @@ class TC_GAME_API Unit : public WorldObject
bool SetFeatherFall(bool enable);
bool SetHover(bool enable, bool updateAnimTier = true);
bool SetCollision(bool disable);
+ bool SetEnableFullSpeedTurning(bool enable);
bool SetCanTransitionBetweenSwimAndFly(bool enable);
bool SetCanTurnWhileFalling(bool enable);
bool SetCanDoubleJump(bool enable);
diff --git a/src/server/game/Entities/Unit/UnitDefines.h b/src/server/game/Entities/Unit/UnitDefines.h
index f19ef29ada0..432a998f9b6 100644
--- a/src/server/game/Entities/Unit/UnitDefines.h
+++ b/src/server/game/Entities/Unit/UnitDefines.h
@@ -296,7 +296,7 @@ enum NPCFlags : uint32
UNIT_NPC_FLAG_NONE = 0x00000000,
UNIT_NPC_FLAG_GOSSIP = 0x00000001, // TITLE has gossip menu DESCRIPTION 100%
UNIT_NPC_FLAG_QUESTGIVER = 0x00000002, // TITLE is quest giver DESCRIPTION 100%
- UNIT_NPC_FLAG_UNK1 = 0x00000004,
+ UNIT_NPC_FLAG_ACCOUNT_BANKER = 0x00000004, // TITLE is account banker
UNIT_NPC_FLAG_UNK2 = 0x00000008,
UNIT_NPC_FLAG_TRAINER = 0x00000010, // TITLE is trainer DESCRIPTION 100%
UNIT_NPC_FLAG_TRAINER_CLASS = 0x00000020, // TITLE is class trainer DESCRIPTION 100%
diff --git a/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp b/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp
index af0544234ff..a5fa869ebc2 100644
--- a/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp
+++ b/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp
@@ -421,7 +421,7 @@ TC_API_EXPORT EnumText EnumUtils<NPCFlags>::ToString(NPCFlags value)
case UNIT_NPC_FLAG_NONE: return { "UNIT_NPC_FLAG_NONE", "UNIT_NPC_FLAG_NONE", "" };
case UNIT_NPC_FLAG_GOSSIP: return { "UNIT_NPC_FLAG_GOSSIP", "has gossip menu", "100%" };
case UNIT_NPC_FLAG_QUESTGIVER: return { "UNIT_NPC_FLAG_QUESTGIVER", "is quest giver", "100%" };
- case UNIT_NPC_FLAG_UNK1: return { "UNIT_NPC_FLAG_UNK1", "UNIT_NPC_FLAG_UNK1", "" };
+ case UNIT_NPC_FLAG_ACCOUNT_BANKER: return { "UNIT_NPC_FLAG_ACCOUNT_BANKER", "UNIT_NPC_FLAG_ACCOUNT_BANKER", "" };
case UNIT_NPC_FLAG_UNK2: return { "UNIT_NPC_FLAG_UNK2", "UNIT_NPC_FLAG_UNK2", "" };
case UNIT_NPC_FLAG_TRAINER: return { "UNIT_NPC_FLAG_TRAINER", "is trainer", "100%" };
case UNIT_NPC_FLAG_TRAINER_CLASS: return { "UNIT_NPC_FLAG_TRAINER_CLASS", "is class trainer", "100%" };
@@ -466,7 +466,7 @@ TC_API_EXPORT NPCFlags EnumUtils<NPCFlags>::FromIndex(size_t index)
case 0: return UNIT_NPC_FLAG_NONE;
case 1: return UNIT_NPC_FLAG_GOSSIP;
case 2: return UNIT_NPC_FLAG_QUESTGIVER;
- case 3: return UNIT_NPC_FLAG_UNK1;
+ case 3: return UNIT_NPC_FLAG_ACCOUNT_BANKER;
case 4: return UNIT_NPC_FLAG_UNK2;
case 5: return UNIT_NPC_FLAG_TRAINER;
case 6: return UNIT_NPC_FLAG_TRAINER_CLASS;
@@ -508,7 +508,7 @@ TC_API_EXPORT size_t EnumUtils<NPCFlags>::ToIndex(NPCFlags value)
case UNIT_NPC_FLAG_NONE: return 0;
case UNIT_NPC_FLAG_GOSSIP: return 1;
case UNIT_NPC_FLAG_QUESTGIVER: return 2;
- case UNIT_NPC_FLAG_UNK1: return 3;
+ case UNIT_NPC_FLAG_ACCOUNT_BANKER: return 3;
case UNIT_NPC_FLAG_UNK2: return 4;
case UNIT_NPC_FLAG_TRAINER: return 5;
case UNIT_NPC_FLAG_TRAINER_CLASS: return 6;