diff options
| author | Shauren <shauren.trinity@gmail.com> | 2024-08-02 13:25:41 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2024-08-02 13:25:41 +0200 |
| commit | e59eef5432c7b70679d33f4911c88d0f7d75fd39 (patch) | |
| tree | fe9bce9c82496589facec3719b3f2943d8295e76 /src/server/game/Entities/Unit | |
| parent | 7fb9168d57f378075b0f6692ea7ad822c1d8e43d (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.cpp | 41 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 23 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/UnitDefines.h | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp | 6 |
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; |
