diff --git a/sql/updates/hotfixes/master/2026_08_12_00_hotfixes.sql b/sql/updates/hotfixes/master/2026_08_12_00_hotfixes.sql new file mode 100644 index 0000000000..623cbf685e --- /dev/null +++ b/sql/updates/hotfixes/master/2026_08_12_00_hotfixes.sql @@ -0,0 +1,3 @@ +ALTER TABLE `player_condition` + CHANGE COLUMN `MovementFlags1` `MovementFlags` int NOT NULL DEFAULT 0 AFTER `PowerTypeValue`, + DROP COLUMN `MovementFlags2`; diff --git a/sql/updates/world/master/2026_08_12_00_world.sql b/sql/updates/world/master/2026_08_12_00_world.sql new file mode 100644 index 0000000000..257483d76c --- /dev/null +++ b/sql/updates/world/master/2026_08_12_00_world.sql @@ -0,0 +1,2 @@ +UPDATE `trinity_string` SET `content_default` = 'Target''s moveFlags: %llu (%s)' WHERE `entry` = 1143; +UPDATE `trinity_string` SET `content_default` = 'Target''s moveFlags set to: %llu (%s)' WHERE `entry` = 1144; diff --git a/src/server/database/Database/Implementation/HotfixDatabase.cpp b/src/server/database/Database/Implementation/HotfixDatabase.cpp index 355bf1e901..686b31c72f 100644 --- a/src/server/database/Database/Implementation/HotfixDatabase.cpp +++ b/src/server/database/Database/Implementation/HotfixDatabase.cpp @@ -1342,17 +1342,17 @@ void HotfixDatabaseConnection::DoPrepareStatements() "LifetimeMaxPVPRank, AchievementLogic, Gender, NativeGender, AreaLogic, LfgLogic, CurrencyLogic, QuestKillID, QuestKillLogic, " "MinExpansionLevel, MaxExpansionLevel, MinAvgItemLevel, MaxAvgItemLevel, MinAvgEquippedItemLevel, MaxAvgEquippedItemLevel, PhaseUseFlags, " "PhaseID, PhaseGroupID, Flags, ChrSpecializationIndex, ChrSpecializationRole, ModifierTreeID, PowerType, PowerTypeComp, PowerTypeValue, " - "WeaponSubclassMask, MaxGuildLevel, MinGuildLevel, MaxExpansionTier, MinExpansionTier, MinPVPRank, MaxPVPRank, ContentTuningID, CovenantID, " - "TraitNodeEntryLogic, SkillID1, SkillID2, SkillID3, SkillID4, MinSkill1, MinSkill2, MinSkill3, MinSkill4, MaxSkill1, MaxSkill2, MaxSkill3, " - "MaxSkill4, MinFactionID1, MinFactionID2, MinFactionID3, MinReputation1, MinReputation2, MinReputation3, PrevQuestID1, PrevQuestID2, " - "PrevQuestID3, PrevQuestID4, CurrQuestID1, CurrQuestID2, CurrQuestID3, CurrQuestID4, CurrentCompletedQuestID1, CurrentCompletedQuestID2, " - "CurrentCompletedQuestID3, CurrentCompletedQuestID4, SpellID1, SpellID2, SpellID3, SpellID4, ItemID1, ItemID2, ItemID3, ItemID4, ItemCount1, " - "ItemCount2, ItemCount3, ItemCount4, Explored1, Explored2, Time1, Time2, AuraSpellID1, AuraSpellID2, AuraSpellID3, AuraSpellID4, AuraStacks1, " - "AuraStacks2, AuraStacks3, AuraStacks4, Achievement1, Achievement2, Achievement3, Achievement4, AreaID1, AreaID2, AreaID3, AreaID4, " - "LfgStatus1, LfgStatus2, LfgStatus3, LfgStatus4, LfgCompare1, LfgCompare2, LfgCompare3, LfgCompare4, LfgValue1, LfgValue2, LfgValue3, " - "LfgValue4, CurrencyID1, CurrencyID2, CurrencyID3, CurrencyID4, CurrencyCount1, CurrencyCount2, CurrencyCount3, CurrencyCount4, " - "QuestKillMonster1, QuestKillMonster2, QuestKillMonster3, QuestKillMonster4, QuestKillMonster5, QuestKillMonster6, MovementFlags1, " - "MovementFlags2, RaceMask1, RaceMask2, TraitNodeEntryID1, TraitNodeEntryID2, TraitNodeEntryID3, TraitNodeEntryID4, TraitNodeEntryMinRank1, " + "MovementFlags, WeaponSubclassMask, MaxGuildLevel, MinGuildLevel, MaxExpansionTier, MinExpansionTier, MinPVPRank, MaxPVPRank, " + "ContentTuningID, CovenantID, TraitNodeEntryLogic, SkillID1, SkillID2, SkillID3, SkillID4, MinSkill1, MinSkill2, MinSkill3, MinSkill4, " + "MaxSkill1, MaxSkill2, MaxSkill3, MaxSkill4, MinFactionID1, MinFactionID2, MinFactionID3, MinReputation1, MinReputation2, MinReputation3, " + "PrevQuestID1, PrevQuestID2, PrevQuestID3, PrevQuestID4, CurrQuestID1, CurrQuestID2, CurrQuestID3, CurrQuestID4, CurrentCompletedQuestID1, " + "CurrentCompletedQuestID2, CurrentCompletedQuestID3, CurrentCompletedQuestID4, SpellID1, SpellID2, SpellID3, SpellID4, ItemID1, ItemID2, " + "ItemID3, ItemID4, ItemCount1, ItemCount2, ItemCount3, ItemCount4, Explored1, Explored2, Time1, Time2, AuraSpellID1, AuraSpellID2, " + "AuraSpellID3, AuraSpellID4, AuraStacks1, AuraStacks2, AuraStacks3, AuraStacks4, Achievement1, Achievement2, Achievement3, Achievement4, " + "AreaID1, AreaID2, AreaID3, AreaID4, LfgStatus1, LfgStatus2, LfgStatus3, LfgStatus4, LfgCompare1, LfgCompare2, LfgCompare3, LfgCompare4, " + "LfgValue1, LfgValue2, LfgValue3, LfgValue4, CurrencyID1, CurrencyID2, CurrencyID3, CurrencyID4, CurrencyCount1, CurrencyCount2, " + "CurrencyCount3, CurrencyCount4, QuestKillMonster1, QuestKillMonster2, QuestKillMonster3, QuestKillMonster4, QuestKillMonster5, " + "QuestKillMonster6, RaceMask1, RaceMask2, TraitNodeEntryID1, TraitNodeEntryID2, TraitNodeEntryID3, TraitNodeEntryID4, TraitNodeEntryMinRank1, " "TraitNodeEntryMinRank2, TraitNodeEntryMinRank3, TraitNodeEntryMinRank4, TraitNodeEntryMaxRank1, TraitNodeEntryMaxRank2, " "TraitNodeEntryMaxRank3, TraitNodeEntryMaxRank4 FROM player_condition WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_PLAYER_CONDITION, "SELECT MAX(ID) + 1 FROM player_condition", CONNECTION_SYNCH); diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 9635791b4b..13c54f041c 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -3075,11 +3075,17 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio if (condition->LifetimeMaxPVPRank && player->m_activePlayerData->LifetimeMaxRank != condition->LifetimeMaxPVPRank) return false; - if (condition->MovementFlags[0] && !(player->GetUnitMovementFlags() & condition->MovementFlags[0])) - return false; + if (condition->MovementFlags) + { + static constexpr MovementFlags PlayerConditionSupportedMovementFlags = MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD + | MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT | MOVEMENTFLAG_LEFT | MOVEMENTFLAG_RIGHT + | MOVEMENTFLAG_PITCH_UP | MOVEMENTFLAG_PITCH_DOWN | MOVEMENTFLAG_WALKING | MOVEMENTFLAG_DISABLE_GRAVITY + | MOVEMENTFLAG_ROOT | MOVEMENTFLAG_FALLING | MOVEMENTFLAG_SWIMMING; - if (condition->MovementFlags[1] && !(player->GetExtraUnitMovementFlags() & condition->MovementFlags[1])) - return false; + MovementFlags requiredFlags = MovementFlags(condition->MovementFlags) & PlayerConditionSupportedMovementFlags; + if ((player->GetUnitMovementFlags() & requiredFlags) != requiredFlags) + return false; + } if (condition->WeaponSubclassMask) { diff --git a/src/server/game/DataStores/DB2LoadInfo.h b/src/server/game/DataStores/DB2LoadInfo.h index 70c6f58ad5..5c9391631d 100644 --- a/src/server/game/DataStores/DB2LoadInfo.h +++ b/src/server/game/DataStores/DB2LoadInfo.h @@ -4363,7 +4363,7 @@ struct PhaseXPhaseGroupLoadInfo struct PlayerConditionLoadInfo { - static constexpr DB2FieldMeta Fields[163] = + static constexpr DB2FieldMeta Fields[162] = { { .IsSigned = false, .Type = FT_INT, .Name = "ID" }, { .IsSigned = false, .Type = FT_STRING, .Name = "FailureDescription" }, @@ -4414,6 +4414,7 @@ struct PlayerConditionLoadInfo { .IsSigned = true, .Type = FT_BYTE, .Name = "PowerType" }, { .IsSigned = false, .Type = FT_BYTE, .Name = "PowerTypeComp" }, { .IsSigned = true, .Type = FT_BYTE, .Name = "PowerTypeValue" }, + { .IsSigned = true, .Type = FT_INT, .Name = "MovementFlags" }, { .IsSigned = true, .Type = FT_INT, .Name = "WeaponSubclassMask" }, { .IsSigned = false, .Type = FT_BYTE, .Name = "MaxGuildLevel" }, { .IsSigned = false, .Type = FT_BYTE, .Name = "MinGuildLevel" }, @@ -4512,8 +4513,6 @@ struct PlayerConditionLoadInfo { .IsSigned = false, .Type = FT_INT, .Name = "QuestKillMonster4" }, { .IsSigned = false, .Type = FT_INT, .Name = "QuestKillMonster5" }, { .IsSigned = false, .Type = FT_INT, .Name = "QuestKillMonster6" }, - { .IsSigned = true, .Type = FT_INT, .Name = "MovementFlags1" }, - { .IsSigned = true, .Type = FT_INT, .Name = "MovementFlags2" }, { .IsSigned = true, .Type = FT_INT, .Name = "RaceMask1" }, { .IsSigned = true, .Type = FT_INT, .Name = "RaceMask2" }, { .IsSigned = true, .Type = FT_INT, .Name = "TraitNodeEntryID1" }, @@ -4530,7 +4529,7 @@ struct PlayerConditionLoadInfo { .IsSigned = false, .Type = FT_SHORT, .Name = "TraitNodeEntryMaxRank4" }, }; - static constexpr DB2LoadInfo Instance{ Fields, 163, &PlayerConditionMeta::Instance, HOTFIX_SEL_PLAYER_CONDITION }; + static constexpr DB2LoadInfo Instance{ Fields, 162, &PlayerConditionMeta::Instance, HOTFIX_SEL_PLAYER_CONDITION }; }; struct PlayerDataElementAccountLoadInfo diff --git a/src/server/game/DataStores/DB2Metadata.h b/src/server/game/DataStores/DB2Metadata.h index f33dcd8b3f..569b0c6f9e 100644 --- a/src/server/game/DataStores/DB2Metadata.h +++ b/src/server/game/DataStores/DB2Metadata.h @@ -17122,6 +17122,7 @@ struct PlayerConditionMeta { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, + { .Type = FT_INT, .ArraySize = 1, .IsSigned = true }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = false }, { .Type = FT_BYTE, .ArraySize = 1, .IsSigned = true }, @@ -17155,7 +17156,6 @@ struct PlayerConditionMeta { .Type = FT_INT, .ArraySize = 4, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 6, .IsSigned = false }, { .Type = FT_INT, .ArraySize = 2, .IsSigned = true }, - { .Type = FT_INT, .ArraySize = 2, .IsSigned = true }, { .Type = FT_INT, .ArraySize = 4, .IsSigned = true }, { .Type = FT_SHORT, .ArraySize = 4, .IsSigned = false }, { .Type = FT_SHORT, .ArraySize = 4, .IsSigned = false }, @@ -17168,7 +17168,7 @@ struct PlayerConditionMeta .ParentIndexField = -1, .FieldCount = 86, .FileFieldCount = 86, - .LayoutHash = 0x7A9E50CE, + .LayoutHash = 0x1D743D99, .Fields = Fields }; }; diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index d1a98ccb3c..13712b355d 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -3310,6 +3310,7 @@ struct PlayerConditionEntry int8 PowerType; uint8 PowerTypeComp; int8 PowerTypeValue; + int32 MovementFlags; int32 WeaponSubclassMask; uint8 MaxGuildLevel; uint8 MinGuildLevel; @@ -3343,7 +3344,6 @@ struct PlayerConditionEntry std::array CurrencyID; std::array CurrencyCount; std::array QuestKillMonster; - std::array MovementFlags; Trinity::RaceMask RaceMask; std::array TraitNodeEntryID; std::array TraitNodeEntryMinRank; diff --git a/src/server/game/Entities/Object/BaseEntity.cpp b/src/server/game/Entities/Object/BaseEntity.cpp index d786b0507e..b0e564a705 100644 --- a/src/server/game/Entities/Object/BaseEntity.cpp +++ b/src/server/game/Entities/Object/BaseEntity.cpp @@ -274,9 +274,7 @@ void BaseEntity::BuildMovementUpdate(ByteBuffer& data, CreateObjectBits flags, P data << GetGUID(); // MoverGUID - data << uint32(unit->GetUnitMovementFlags()); - data << uint32(unit->GetExtraUnitMovementFlags()); - data << uint32(unit->GetExtraUnitMovementFlags2()); + data << uint64(unit->GetUnitMovementFlags()); data << uint32(unit->m_movementInfo.time); // MoveTime data << float(unit->GetPositionX()); diff --git a/src/server/game/Entities/Object/MovementInfo.h b/src/server/game/Entities/Object/MovementInfo.h index d2a72dce80..052d2e296c 100644 --- a/src/server/game/Entities/Object/MovementInfo.h +++ b/src/server/game/Entities/Object/MovementInfo.h @@ -15,22 +15,113 @@ * with this program. If not, see . */ -#ifndef MovementInfo_h__ -#define MovementInfo_h__ +#ifndef TRINITYCORE_MOVEMENT_INFO_H +#define TRINITYCORE_MOVEMENT_INFO_H +#include "EnumFlag.h" #include "ObjectGuid.h" #include "Optional.h" #include "Position.h" #include #include +// EnumUtils: DESCRIBE THIS +enum MovementFlags : uint64 +{ + MOVEMENTFLAG_NONE = 0x0000000000000000, // SKIP + MOVEMENTFLAG_FORWARD = 0x0000000000000001, + MOVEMENTFLAG_BACKWARD = 0x0000000000000002, + MOVEMENTFLAG_STRAFE_LEFT = 0x0000000000000004, + MOVEMENTFLAG_STRAFE_RIGHT = 0x0000000000000008, + MOVEMENTFLAG_LEFT = 0x0000000000000010, + MOVEMENTFLAG_RIGHT = 0x0000000000000020, + MOVEMENTFLAG_PITCH_UP = 0x0000000000000040, + MOVEMENTFLAG_PITCH_DOWN = 0x0000000000000080, + MOVEMENTFLAG_WALKING = 0x0000000000000100, // Walking + MOVEMENTFLAG_DISABLE_GRAVITY = 0x0000000000000200, // Former MOVEMENTFLAG_LEVITATING. This is used when walking is not possible. + MOVEMENTFLAG_ROOT = 0x0000000000000400, // Must not be set along with MOVEMENTFLAG_MASK_MOVING + MOVEMENTFLAG_FALLING = 0x0000000000000800, // damage dealt on that type of falling + MOVEMENTFLAG_FALLING_FAR = 0x0000000000001000, + MOVEMENTFLAG_PENDING_STOP = 0x0000000000002000, + MOVEMENTFLAG_PENDING_STRAFE_STOP = 0x0000000000004000, + MOVEMENTFLAG_PENDING_FORWARD = 0x0000000000008000, + MOVEMENTFLAG_PENDING_BACKWARD = 0x0000000000010000, + MOVEMENTFLAG_PENDING_STRAFE_LEFT = 0x0000000000020000, + MOVEMENTFLAG_PENDING_STRAFE_RIGHT = 0x0000000000040000, + MOVEMENTFLAG_PENDING_ROOT = 0x0000000000080000, + MOVEMENTFLAG_SWIMMING = 0x0000000000100000, // appears with fly flag also + MOVEMENTFLAG_ASCENDING = 0x0000000000200000, // press "space" when flying + MOVEMENTFLAG_DESCENDING = 0x0000000000400000, + MOVEMENTFLAG_CAN_FLY = 0x0000000000800000, // Appears when unit can fly. For example, appears when a player sits on a mount. + MOVEMENTFLAG_FLYING = 0x0000000001000000, // unit is actually flying. pretty sure this is only used for players. creatures use disable_gravity + MOVEMENTFLAG_SPLINE_ELEVATION = 0x0000000002000000, // used for flight paths + MOVEMENTFLAG_WATERWALKING = 0x0000000004000000, // prevent unit from falling through water + MOVEMENTFLAG_FALLING_SLOW = 0x0000000008000000, // active rogue safe fall spell (passive) + MOVEMENTFLAG_CANNOT_SWIM = 0x0000000010000000, + MOVEMENTFLAG_DISABLE_COLLISION = 0x0000000020000000, + MOVEMENTFLAG_KNOCKBACK = 0x0000000040000000, + MOVEMENTFLAG_TOUCHING_GROUND = 0x0000000080000000, // terrain normal calculation is disabled if this flag is not present, client automatically handles setting this flag + MOVEMENTFLAG_NO_STRAFE = 0x0000000100000000, + MOVEMENTFLAG_NO_JUMPING = 0x0000000200000000, + MOVEMENTFLAG_FULL_SPEED_TURNING = 0x0000000400000000, + MOVEMENTFLAG_FULL_SPEED_PITCHING = 0x0000000800000000, + MOVEMENTFLAG_ALWAYS_ALLOW_PITCHING = 0x0000001000000000, + MOVEMENTFLAG_WATERWALKING_FULL_PITCH = 0x0000002000000000, + MOVEMENTFLAG_CAN_SWIM_TO_FLY_TRANS = 0x0000004000000000, + MOVEMENTFLAG_CAN_TURN_WHILE_FALLING = 0x0000008000000000, + MOVEMENTFLAG_IGNORE_MOVEMENT_FORCES = 0x0000010000000000, + MOVEMENTFLAG_CAN_DOUBLE_JUMP = 0x0000020000000000, + MOVEMENTFLAG_DOUBLE_JUMP = 0x0000040000000000, + MOVEMENTFLAG_UNK43 = 0x0000080000000000, // old MovementFlags2 0x8000 + MOVEMENTFLAG_DISABLE_INERTIA = 0x0000100000000000, + MOVEMENTFLAG_CAN_ADV_FLY = 0x0000200000000000, + MOVEMENTFLAG_ADV_FLYING = 0x0000400000000000, + MOVEMENTFLAG_UNK47 = 0x0000800000000000, // old MovementFlags3 0x8 + MOVEMENTFLAG_UNK48 = 0x0001000000000000, // old MovementFlags3 0x10 + MOVEMENTFLAG_FALLING_ADV_FLY_DISMOUNT = 0x0002000000000000, // falling after dismounting while adv flying + MOVEMENTFLAG_UNK50 = 0x0004000000000000, // old MovementFlags3 0x200 + MOVEMENTFLAG_WALKING_ON_WATER = 0x0008000000000000, // currently on water surface + MOVEMENTFLAG_CAN_DRIVE = 0x0010000000000000, + MOVEMENTFLAG_DRIVING_FORWARD = 0x0020000000000000, + MOVEMENTFLAG_DRIVING_BACKWARD = 0x0040000000000000, + MOVEMENTFLAG_UNK55 = 0x0080000000000000, // old MovementFlags3 0x20000 + MOVEMENTFLAG_UNK56 = 0x0100000000000000, // old MovementFlags3 0x40000 + MOVEMENTFLAG_UNK57 = 0x0200000000000000, // old MovementFlags3 0x80000 + MOVEMENTFLAG_UNK58 = 0x0400000000000000, + MOVEMENTFLAG_HOVER = 0x0800000000000000, + + MOVEMENTFLAG_MASK_MOVING = + MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT | + MOVEMENTFLAG_FALLING | MOVEMENTFLAG_ASCENDING | MOVEMENTFLAG_DESCENDING,// SKIP + + MOVEMENTFLAG_MASK_TURNING = + MOVEMENTFLAG_LEFT | MOVEMENTFLAG_RIGHT | MOVEMENTFLAG_PITCH_UP | MOVEMENTFLAG_PITCH_DOWN, // SKIP + + MOVEMENTFLAG_MASK_MOVING_FLY = + MOVEMENTFLAG_FLYING | MOVEMENTFLAG_ASCENDING | MOVEMENTFLAG_DESCENDING, // SKIP + + // Movement flags allowed for creature in CreateObject - we need to keep all other enabled serverside + // to properly calculate all movement + MOVEMENTFLAG_MASK_CREATURE_ALLOWED = + MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_DISABLE_GRAVITY | MOVEMENTFLAG_ROOT | MOVEMENTFLAG_SWIMMING | + MOVEMENTFLAG_CAN_FLY | MOVEMENTFLAG_WATERWALKING | MOVEMENTFLAG_FALLING_SLOW | MOVEMENTFLAG_HOVER | MOVEMENTFLAG_DISABLE_COLLISION, // SKIP + + /// @todo if needed: add more flags to this masks that are exclusive to players + MOVEMENTFLAG_MASK_PLAYER_ONLY = + MOVEMENTFLAG_FLYING, // SKIP + + /// Movement flags that have change status opcodes associated for players + MOVEMENTFLAG_MASK_HAS_PLAYER_STATUS_OPCODE = MOVEMENTFLAG_DISABLE_GRAVITY | MOVEMENTFLAG_ROOT | + MOVEMENTFLAG_CAN_FLY | MOVEMENTFLAG_WATERWALKING | MOVEMENTFLAG_FALLING_SLOW | MOVEMENTFLAG_HOVER | MOVEMENTFLAG_DISABLE_COLLISION // SKIP +}; + +DEFINE_ENUM_FLAG(MovementFlags); + struct MovementInfo { // common ObjectGuid guid; - uint32 flags = 0; - uint32 flags2 = 0; - uint32 flags3 = 0; + MovementFlags flags = MOVEMENTFLAG_NONE; Position pos; uint32 time = 0; @@ -116,23 +207,11 @@ struct MovementInfo Optional standingOnGameObjectGUID; - uint32 GetMovementFlags() const { return flags; } - void SetMovementFlags(uint32 flag) { flags = flag; } - void AddMovementFlag(uint32 flag) { flags |= flag; } - void RemoveMovementFlag(uint32 flag) { flags &= ~flag; } - bool HasMovementFlag(uint32 flag) const { return (flags & flag) != 0; } - - uint32 GetExtraMovementFlags() const { return flags2; } - void SetExtraMovementFlags(uint32 flag) { flags2 = flag; } - void AddExtraMovementFlag(uint32 flag) { flags2 |= flag; } - void RemoveExtraMovementFlag(uint32 flag) { flags2 &= ~flag; } - bool HasExtraMovementFlag(uint32 flag) const { return (flags2 & flag) != 0; } - - uint32 GetExtraMovementFlags2() const { return flags3; } - void SetExtraMovementFlags2(uint32 flag) { flags3 = flag; } - void AddExtraMovementFlag2(uint32 flag) { flags3 |= flag; } - void RemoveExtraMovementFlag2(uint32 flag) { flags3 &= ~flag; } - bool HasExtraMovementFlag2(uint32 flag) const { return (flags3 & flag) != 0; } + MovementFlags GetMovementFlags() const { return flags; } + void SetMovementFlags(MovementFlags flag) { flags = flag; } + void AddMovementFlag(MovementFlags flag) { flags |= flag; } + void RemoveMovementFlag(MovementFlags flag) { flags &= ~flag; } + bool HasMovementFlag(MovementFlags flag) const { return (flags & flag) != 0; } uint32 GetFallTime() const { return jump.fallTime; } void SetFallTime(uint32 fallTime) { jump.fallTime = fallTime; } @@ -215,4 +294,4 @@ private: float _modMagnitude = 1.0f; }; -#endif // MovementInfo_h__ +#endif // TRINITYCORE_MOVEMENT_INFO_H diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 5752db3db0..2aa5f759ea 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -168,9 +168,7 @@ void MovementInfo::OutDebug() { TC_LOG_DEBUG("misc", "MOVEMENT INFO"); TC_LOG_DEBUG("misc", "{}", guid.ToString()); - TC_LOG_DEBUG("misc", "flags {} ({})", Movement::MovementFlags_ToString(MovementFlags(flags)), flags); - TC_LOG_DEBUG("misc", "flags2 {} ({})", Movement::MovementFlags_ToString(MovementFlags2(flags2)), flags2); - TC_LOG_DEBUG("misc", "flags3 {} ({})", Movement::MovementFlags_ToString(MovementFlags3(flags3)), flags3); + TC_LOG_DEBUG("misc", "flags {} ({})", Movement::MovementFlags_ToString(flags), flags); TC_LOG_DEBUG("misc", "time {} current time {}", time, getMSTime()); TC_LOG_DEBUG("misc", "position: `{}`", pos); if (!transport.guid.IsEmpty()) @@ -186,7 +184,7 @@ void MovementInfo::OutDebug() TC_LOG_DEBUG("misc", "vehicleId: {}", transport.vehicleId); } - if ((flags & (MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING)) || (flags2 & MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING)) + if (flags & (MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING | MOVEMENTFLAG_ALWAYS_ALLOW_PITCHING)) TC_LOG_DEBUG("misc", "pitch: {}", pitch); if (flags & MOVEMENTFLAG_FALLING || jump.fallTime) diff --git a/src/server/game/Entities/Object/enuminfo_MovementInfo.cpp b/src/server/game/Entities/Object/enuminfo_MovementInfo.cpp new file mode 100644 index 0000000000..c6b2250cc9 --- /dev/null +++ b/src/server/game/Entities/Object/enuminfo_MovementInfo.cpp @@ -0,0 +1,238 @@ +/* + * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information + * + * 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 . + */ + +#include "MovementInfo.h" +#include "Define.h" +#include "SmartEnum.h" +#include + +namespace Trinity::Impl::EnumUtilsImpl +{ + +/********************************************************************\ +|* data for enum 'MovementFlags' in 'MovementInfo.h' auto-generated *| +\********************************************************************/ +template <> +TC_API_EXPORT EnumText EnumUtils::ToString(MovementFlags value) +{ + switch (value) + { + case MOVEMENTFLAG_FORWARD: return { "MOVEMENTFLAG_FORWARD", "MOVEMENTFLAG_FORWARD", "" }; + case MOVEMENTFLAG_BACKWARD: return { "MOVEMENTFLAG_BACKWARD", "MOVEMENTFLAG_BACKWARD", "" }; + case MOVEMENTFLAG_STRAFE_LEFT: return { "MOVEMENTFLAG_STRAFE_LEFT", "MOVEMENTFLAG_STRAFE_LEFT", "" }; + case MOVEMENTFLAG_STRAFE_RIGHT: return { "MOVEMENTFLAG_STRAFE_RIGHT", "MOVEMENTFLAG_STRAFE_RIGHT", "" }; + case MOVEMENTFLAG_LEFT: return { "MOVEMENTFLAG_LEFT", "MOVEMENTFLAG_LEFT", "" }; + case MOVEMENTFLAG_RIGHT: return { "MOVEMENTFLAG_RIGHT", "MOVEMENTFLAG_RIGHT", "" }; + case MOVEMENTFLAG_PITCH_UP: return { "MOVEMENTFLAG_PITCH_UP", "MOVEMENTFLAG_PITCH_UP", "" }; + case MOVEMENTFLAG_PITCH_DOWN: return { "MOVEMENTFLAG_PITCH_DOWN", "MOVEMENTFLAG_PITCH_DOWN", "" }; + case MOVEMENTFLAG_WALKING: return { "MOVEMENTFLAG_WALKING", "MOVEMENTFLAG_WALKING", "Walking" }; + case MOVEMENTFLAG_DISABLE_GRAVITY: return { "MOVEMENTFLAG_DISABLE_GRAVITY", "MOVEMENTFLAG_DISABLE_GRAVITY", "Former MOVEMENTFLAG_LEVITATING. This is used when walking is not possible." }; + case MOVEMENTFLAG_ROOT: return { "MOVEMENTFLAG_ROOT", "MOVEMENTFLAG_ROOT", "Must not be set along with MOVEMENTFLAG_MASK_MOVING" }; + case MOVEMENTFLAG_FALLING: return { "MOVEMENTFLAG_FALLING", "MOVEMENTFLAG_FALLING", "damage dealt on that type of falling" }; + case MOVEMENTFLAG_FALLING_FAR: return { "MOVEMENTFLAG_FALLING_FAR", "MOVEMENTFLAG_FALLING_FAR", "" }; + case MOVEMENTFLAG_PENDING_STOP: return { "MOVEMENTFLAG_PENDING_STOP", "MOVEMENTFLAG_PENDING_STOP", "" }; + case MOVEMENTFLAG_PENDING_STRAFE_STOP: return { "MOVEMENTFLAG_PENDING_STRAFE_STOP", "MOVEMENTFLAG_PENDING_STRAFE_STOP", "" }; + case MOVEMENTFLAG_PENDING_FORWARD: return { "MOVEMENTFLAG_PENDING_FORWARD", "MOVEMENTFLAG_PENDING_FORWARD", "" }; + case MOVEMENTFLAG_PENDING_BACKWARD: return { "MOVEMENTFLAG_PENDING_BACKWARD", "MOVEMENTFLAG_PENDING_BACKWARD", "" }; + case MOVEMENTFLAG_PENDING_STRAFE_LEFT: return { "MOVEMENTFLAG_PENDING_STRAFE_LEFT", "MOVEMENTFLAG_PENDING_STRAFE_LEFT", "" }; + case MOVEMENTFLAG_PENDING_STRAFE_RIGHT: return { "MOVEMENTFLAG_PENDING_STRAFE_RIGHT", "MOVEMENTFLAG_PENDING_STRAFE_RIGHT", "" }; + case MOVEMENTFLAG_PENDING_ROOT: return { "MOVEMENTFLAG_PENDING_ROOT", "MOVEMENTFLAG_PENDING_ROOT", "" }; + case MOVEMENTFLAG_SWIMMING: return { "MOVEMENTFLAG_SWIMMING", "MOVEMENTFLAG_SWIMMING", "appears with fly flag also" }; + case MOVEMENTFLAG_ASCENDING: return { "MOVEMENTFLAG_ASCENDING", "MOVEMENTFLAG_ASCENDING", "press \042space\042 when flying" }; + case MOVEMENTFLAG_DESCENDING: return { "MOVEMENTFLAG_DESCENDING", "MOVEMENTFLAG_DESCENDING", "" }; + case MOVEMENTFLAG_CAN_FLY: return { "MOVEMENTFLAG_CAN_FLY", "MOVEMENTFLAG_CAN_FLY", "Appears when unit can fly. For example, appears when a player sits on a mount." }; + case MOVEMENTFLAG_FLYING: return { "MOVEMENTFLAG_FLYING", "MOVEMENTFLAG_FLYING", "unit is actually flying. pretty sure this is only used for players. creatures use disable_gravity" }; + case MOVEMENTFLAG_SPLINE_ELEVATION: return { "MOVEMENTFLAG_SPLINE_ELEVATION", "MOVEMENTFLAG_SPLINE_ELEVATION", "used for flight paths" }; + case MOVEMENTFLAG_WATERWALKING: return { "MOVEMENTFLAG_WATERWALKING", "MOVEMENTFLAG_WATERWALKING", "prevent unit from falling through water" }; + case MOVEMENTFLAG_FALLING_SLOW: return { "MOVEMENTFLAG_FALLING_SLOW", "MOVEMENTFLAG_FALLING_SLOW", "active rogue safe fall spell (passive)" }; + case MOVEMENTFLAG_CANNOT_SWIM: return { "MOVEMENTFLAG_CANNOT_SWIM", "MOVEMENTFLAG_CANNOT_SWIM", "" }; + case MOVEMENTFLAG_DISABLE_COLLISION: return { "MOVEMENTFLAG_DISABLE_COLLISION", "MOVEMENTFLAG_DISABLE_COLLISION", "" }; + case MOVEMENTFLAG_KNOCKBACK: return { "MOVEMENTFLAG_KNOCKBACK", "MOVEMENTFLAG_KNOCKBACK", "" }; + case MOVEMENTFLAG_TOUCHING_GROUND: return { "MOVEMENTFLAG_TOUCHING_GROUND", "MOVEMENTFLAG_TOUCHING_GROUND", "terrain normal calculation is disabled if this flag is not present, client automatically handles setting this flag" }; + case MOVEMENTFLAG_NO_STRAFE: return { "MOVEMENTFLAG_NO_STRAFE", "MOVEMENTFLAG_NO_STRAFE", "" }; + case MOVEMENTFLAG_NO_JUMPING: return { "MOVEMENTFLAG_NO_JUMPING", "MOVEMENTFLAG_NO_JUMPING", "" }; + case MOVEMENTFLAG_FULL_SPEED_TURNING: return { "MOVEMENTFLAG_FULL_SPEED_TURNING", "MOVEMENTFLAG_FULL_SPEED_TURNING", "" }; + case MOVEMENTFLAG_FULL_SPEED_PITCHING: return { "MOVEMENTFLAG_FULL_SPEED_PITCHING", "MOVEMENTFLAG_FULL_SPEED_PITCHING", "" }; + case MOVEMENTFLAG_ALWAYS_ALLOW_PITCHING: return { "MOVEMENTFLAG_ALWAYS_ALLOW_PITCHING", "MOVEMENTFLAG_ALWAYS_ALLOW_PITCHING", "" }; + case MOVEMENTFLAG_WATERWALKING_FULL_PITCH: return { "MOVEMENTFLAG_WATERWALKING_FULL_PITCH", "MOVEMENTFLAG_WATERWALKING_FULL_PITCH", "" }; + case MOVEMENTFLAG_CAN_SWIM_TO_FLY_TRANS: return { "MOVEMENTFLAG_CAN_SWIM_TO_FLY_TRANS", "MOVEMENTFLAG_CAN_SWIM_TO_FLY_TRANS", "" }; + case MOVEMENTFLAG_CAN_TURN_WHILE_FALLING: return { "MOVEMENTFLAG_CAN_TURN_WHILE_FALLING", "MOVEMENTFLAG_CAN_TURN_WHILE_FALLING", "" }; + case MOVEMENTFLAG_IGNORE_MOVEMENT_FORCES: return { "MOVEMENTFLAG_IGNORE_MOVEMENT_FORCES", "MOVEMENTFLAG_IGNORE_MOVEMENT_FORCES", "" }; + case MOVEMENTFLAG_CAN_DOUBLE_JUMP: return { "MOVEMENTFLAG_CAN_DOUBLE_JUMP", "MOVEMENTFLAG_CAN_DOUBLE_JUMP", "" }; + case MOVEMENTFLAG_DOUBLE_JUMP: return { "MOVEMENTFLAG_DOUBLE_JUMP", "MOVEMENTFLAG_DOUBLE_JUMP", "" }; + case MOVEMENTFLAG_UNK43: return { "MOVEMENTFLAG_UNK43", "MOVEMENTFLAG_UNK43", "old MovementFlags2 0x8000" }; + case MOVEMENTFLAG_DISABLE_INERTIA: return { "MOVEMENTFLAG_DISABLE_INERTIA", "MOVEMENTFLAG_DISABLE_INERTIA", "" }; + case MOVEMENTFLAG_CAN_ADV_FLY: return { "MOVEMENTFLAG_CAN_ADV_FLY", "MOVEMENTFLAG_CAN_ADV_FLY", "" }; + case MOVEMENTFLAG_ADV_FLYING: return { "MOVEMENTFLAG_ADV_FLYING", "MOVEMENTFLAG_ADV_FLYING", "" }; + case MOVEMENTFLAG_UNK47: return { "MOVEMENTFLAG_UNK47", "MOVEMENTFLAG_UNK47", "old MovementFlags3 0x8" }; + case MOVEMENTFLAG_UNK48: return { "MOVEMENTFLAG_UNK48", "MOVEMENTFLAG_UNK48", "old MovementFlags3 0x10" }; + case MOVEMENTFLAG_FALLING_ADV_FLY_DISMOUNT: return { "MOVEMENTFLAG_FALLING_ADV_FLY_DISMOUNT", "MOVEMENTFLAG_FALLING_ADV_FLY_DISMOUNT", "falling after dismounting while adv flying" }; + case MOVEMENTFLAG_UNK50: return { "MOVEMENTFLAG_UNK50", "MOVEMENTFLAG_UNK50", "old MovementFlags3 0x200" }; + case MOVEMENTFLAG_WALKING_ON_WATER: return { "MOVEMENTFLAG_WALKING_ON_WATER", "MOVEMENTFLAG_WALKING_ON_WATER", "currently on water surface" }; + case MOVEMENTFLAG_CAN_DRIVE: return { "MOVEMENTFLAG_CAN_DRIVE", "MOVEMENTFLAG_CAN_DRIVE", "" }; + case MOVEMENTFLAG_DRIVING_FORWARD: return { "MOVEMENTFLAG_DRIVING_FORWARD", "MOVEMENTFLAG_DRIVING_FORWARD", "" }; + case MOVEMENTFLAG_DRIVING_BACKWARD: return { "MOVEMENTFLAG_DRIVING_BACKWARD", "MOVEMENTFLAG_DRIVING_BACKWARD", "" }; + case MOVEMENTFLAG_UNK55: return { "MOVEMENTFLAG_UNK55", "MOVEMENTFLAG_UNK55", "old MovementFlags3 0x20000" }; + case MOVEMENTFLAG_UNK56: return { "MOVEMENTFLAG_UNK56", "MOVEMENTFLAG_UNK56", "old MovementFlags3 0x40000" }; + case MOVEMENTFLAG_UNK57: return { "MOVEMENTFLAG_UNK57", "MOVEMENTFLAG_UNK57", "old MovementFlags3 0x80000" }; + case MOVEMENTFLAG_UNK58: return { "MOVEMENTFLAG_UNK58", "MOVEMENTFLAG_UNK58", "" }; + case MOVEMENTFLAG_HOVER: return { "MOVEMENTFLAG_HOVER", "MOVEMENTFLAG_HOVER", "" }; + default: throw std::out_of_range("value"); + } +} + +template <> +TC_API_EXPORT size_t EnumUtils::Count() { return 60; } + +template <> +TC_API_EXPORT MovementFlags EnumUtils::FromIndex(size_t index) +{ + switch (index) + { + case 0: return MOVEMENTFLAG_FORWARD; + case 1: return MOVEMENTFLAG_BACKWARD; + case 2: return MOVEMENTFLAG_STRAFE_LEFT; + case 3: return MOVEMENTFLAG_STRAFE_RIGHT; + case 4: return MOVEMENTFLAG_LEFT; + case 5: return MOVEMENTFLAG_RIGHT; + case 6: return MOVEMENTFLAG_PITCH_UP; + case 7: return MOVEMENTFLAG_PITCH_DOWN; + case 8: return MOVEMENTFLAG_WALKING; + case 9: return MOVEMENTFLAG_DISABLE_GRAVITY; + case 10: return MOVEMENTFLAG_ROOT; + case 11: return MOVEMENTFLAG_FALLING; + case 12: return MOVEMENTFLAG_FALLING_FAR; + case 13: return MOVEMENTFLAG_PENDING_STOP; + case 14: return MOVEMENTFLAG_PENDING_STRAFE_STOP; + case 15: return MOVEMENTFLAG_PENDING_FORWARD; + case 16: return MOVEMENTFLAG_PENDING_BACKWARD; + case 17: return MOVEMENTFLAG_PENDING_STRAFE_LEFT; + case 18: return MOVEMENTFLAG_PENDING_STRAFE_RIGHT; + case 19: return MOVEMENTFLAG_PENDING_ROOT; + case 20: return MOVEMENTFLAG_SWIMMING; + case 21: return MOVEMENTFLAG_ASCENDING; + case 22: return MOVEMENTFLAG_DESCENDING; + case 23: return MOVEMENTFLAG_CAN_FLY; + case 24: return MOVEMENTFLAG_FLYING; + case 25: return MOVEMENTFLAG_SPLINE_ELEVATION; + case 26: return MOVEMENTFLAG_WATERWALKING; + case 27: return MOVEMENTFLAG_FALLING_SLOW; + case 28: return MOVEMENTFLAG_CANNOT_SWIM; + case 29: return MOVEMENTFLAG_DISABLE_COLLISION; + case 30: return MOVEMENTFLAG_KNOCKBACK; + case 31: return MOVEMENTFLAG_TOUCHING_GROUND; + case 32: return MOVEMENTFLAG_NO_STRAFE; + case 33: return MOVEMENTFLAG_NO_JUMPING; + case 34: return MOVEMENTFLAG_FULL_SPEED_TURNING; + case 35: return MOVEMENTFLAG_FULL_SPEED_PITCHING; + case 36: return MOVEMENTFLAG_ALWAYS_ALLOW_PITCHING; + case 37: return MOVEMENTFLAG_WATERWALKING_FULL_PITCH; + case 38: return MOVEMENTFLAG_CAN_SWIM_TO_FLY_TRANS; + case 39: return MOVEMENTFLAG_CAN_TURN_WHILE_FALLING; + case 40: return MOVEMENTFLAG_IGNORE_MOVEMENT_FORCES; + case 41: return MOVEMENTFLAG_CAN_DOUBLE_JUMP; + case 42: return MOVEMENTFLAG_DOUBLE_JUMP; + case 43: return MOVEMENTFLAG_UNK43; + case 44: return MOVEMENTFLAG_DISABLE_INERTIA; + case 45: return MOVEMENTFLAG_CAN_ADV_FLY; + case 46: return MOVEMENTFLAG_ADV_FLYING; + case 47: return MOVEMENTFLAG_UNK47; + case 48: return MOVEMENTFLAG_UNK48; + case 49: return MOVEMENTFLAG_FALLING_ADV_FLY_DISMOUNT; + case 50: return MOVEMENTFLAG_UNK50; + case 51: return MOVEMENTFLAG_WALKING_ON_WATER; + case 52: return MOVEMENTFLAG_CAN_DRIVE; + case 53: return MOVEMENTFLAG_DRIVING_FORWARD; + case 54: return MOVEMENTFLAG_DRIVING_BACKWARD; + case 55: return MOVEMENTFLAG_UNK55; + case 56: return MOVEMENTFLAG_UNK56; + case 57: return MOVEMENTFLAG_UNK57; + case 58: return MOVEMENTFLAG_UNK58; + case 59: return MOVEMENTFLAG_HOVER; + default: throw std::out_of_range("index"); + } +} + +template <> +TC_API_EXPORT size_t EnumUtils::ToIndex(MovementFlags value) +{ + switch (value) + { + case MOVEMENTFLAG_FORWARD: return 0; + case MOVEMENTFLAG_BACKWARD: return 1; + case MOVEMENTFLAG_STRAFE_LEFT: return 2; + case MOVEMENTFLAG_STRAFE_RIGHT: return 3; + case MOVEMENTFLAG_LEFT: return 4; + case MOVEMENTFLAG_RIGHT: return 5; + case MOVEMENTFLAG_PITCH_UP: return 6; + case MOVEMENTFLAG_PITCH_DOWN: return 7; + case MOVEMENTFLAG_WALKING: return 8; + case MOVEMENTFLAG_DISABLE_GRAVITY: return 9; + case MOVEMENTFLAG_ROOT: return 10; + case MOVEMENTFLAG_FALLING: return 11; + case MOVEMENTFLAG_FALLING_FAR: return 12; + case MOVEMENTFLAG_PENDING_STOP: return 13; + case MOVEMENTFLAG_PENDING_STRAFE_STOP: return 14; + case MOVEMENTFLAG_PENDING_FORWARD: return 15; + case MOVEMENTFLAG_PENDING_BACKWARD: return 16; + case MOVEMENTFLAG_PENDING_STRAFE_LEFT: return 17; + case MOVEMENTFLAG_PENDING_STRAFE_RIGHT: return 18; + case MOVEMENTFLAG_PENDING_ROOT: return 19; + case MOVEMENTFLAG_SWIMMING: return 20; + case MOVEMENTFLAG_ASCENDING: return 21; + case MOVEMENTFLAG_DESCENDING: return 22; + case MOVEMENTFLAG_CAN_FLY: return 23; + case MOVEMENTFLAG_FLYING: return 24; + case MOVEMENTFLAG_SPLINE_ELEVATION: return 25; + case MOVEMENTFLAG_WATERWALKING: return 26; + case MOVEMENTFLAG_FALLING_SLOW: return 27; + case MOVEMENTFLAG_CANNOT_SWIM: return 28; + case MOVEMENTFLAG_DISABLE_COLLISION: return 29; + case MOVEMENTFLAG_KNOCKBACK: return 30; + case MOVEMENTFLAG_TOUCHING_GROUND: return 31; + case MOVEMENTFLAG_NO_STRAFE: return 32; + case MOVEMENTFLAG_NO_JUMPING: return 33; + case MOVEMENTFLAG_FULL_SPEED_TURNING: return 34; + case MOVEMENTFLAG_FULL_SPEED_PITCHING: return 35; + case MOVEMENTFLAG_ALWAYS_ALLOW_PITCHING: return 36; + case MOVEMENTFLAG_WATERWALKING_FULL_PITCH: return 37; + case MOVEMENTFLAG_CAN_SWIM_TO_FLY_TRANS: return 38; + case MOVEMENTFLAG_CAN_TURN_WHILE_FALLING: return 39; + case MOVEMENTFLAG_IGNORE_MOVEMENT_FORCES: return 40; + case MOVEMENTFLAG_CAN_DOUBLE_JUMP: return 41; + case MOVEMENTFLAG_DOUBLE_JUMP: return 42; + case MOVEMENTFLAG_UNK43: return 43; + case MOVEMENTFLAG_DISABLE_INERTIA: return 44; + case MOVEMENTFLAG_CAN_ADV_FLY: return 45; + case MOVEMENTFLAG_ADV_FLYING: return 46; + case MOVEMENTFLAG_UNK47: return 47; + case MOVEMENTFLAG_UNK48: return 48; + case MOVEMENTFLAG_FALLING_ADV_FLY_DISMOUNT: return 49; + case MOVEMENTFLAG_UNK50: return 50; + case MOVEMENTFLAG_WALKING_ON_WATER: return 51; + case MOVEMENTFLAG_CAN_DRIVE: return 52; + case MOVEMENTFLAG_DRIVING_FORWARD: return 53; + case MOVEMENTFLAG_DRIVING_BACKWARD: return 54; + case MOVEMENTFLAG_UNK55: return 55; + case MOVEMENTFLAG_UNK56: return 56; + case MOVEMENTFLAG_UNK57: return 57; + case MOVEMENTFLAG_UNK58: return 58; + case MOVEMENTFLAG_HOVER: return 59; + default: throw std::out_of_range("value"); + } +} +} diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 9baf28c3e8..e636aca136 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -28002,7 +28002,7 @@ void Player::ResummonBattlePetTemporaryUnSummonedIfAny() bool Player::IsPetNeedBeTemporaryUnsummoned() const { - return !IsInWorld() || !IsAlive() || HasUnitMovementFlag(MOVEMENTFLAG_FLYING) || HasExtraUnitMovementFlag2(MOVEMENTFLAG3_ADV_FLYING); + return !IsInWorld() || !IsAlive() || HasUnitMovementFlag(MOVEMENTFLAG_FLYING) || HasUnitMovementFlag(MOVEMENTFLAG_ADV_FLYING); } bool Player::CanSeeGossipOn(Creature const* creature) const diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 76d3abd6c6..98e6806288 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -13760,13 +13760,13 @@ bool Unit::SetCollision(bool disable) bool Unit::SetStrafingDisabled(bool disable) { - if (disable == HasExtraUnitMovementFlag(MOVEMENTFLAG2_NO_STRAFE)) + if (disable == HasUnitMovementFlag(MOVEMENTFLAG_NO_STRAFE)) return false; if (disable) - AddExtraUnitMovementFlag(MOVEMENTFLAG2_NO_STRAFE); + AddUnitMovementFlag(MOVEMENTFLAG_NO_STRAFE); else - RemoveExtraUnitMovementFlag(MOVEMENTFLAG2_NO_STRAFE); + RemoveUnitMovementFlag(MOVEMENTFLAG_NO_STRAFE); static OpcodeServer const disableStrafingOpcodeTable[2] = { @@ -13791,13 +13791,13 @@ bool Unit::SetStrafingDisabled(bool disable) bool Unit::SetJumpingDisabled(bool disable) { - if (disable == HasExtraUnitMovementFlag(MOVEMENTFLAG2_NO_JUMPING)) + if (disable == HasUnitMovementFlag(MOVEMENTFLAG_NO_JUMPING)) return false; if (disable) - AddExtraUnitMovementFlag(MOVEMENTFLAG2_NO_JUMPING); + AddUnitMovementFlag(MOVEMENTFLAG_NO_JUMPING); else - RemoveExtraUnitMovementFlag(MOVEMENTFLAG2_NO_JUMPING); + RemoveUnitMovementFlag(MOVEMENTFLAG_NO_JUMPING); static OpcodeServer const disableJumpingOpcodeTable[2] = { @@ -13822,13 +13822,13 @@ bool Unit::SetJumpingDisabled(bool disable) bool Unit::SetEnableFullSpeedTurning(bool enable) { - if (enable == HasExtraUnitMovementFlag(MOVEMENTFLAG2_FULL_SPEED_TURNING)) + if (enable == HasUnitMovementFlag(MOVEMENTFLAG_FULL_SPEED_TURNING)) return false; if (enable) - AddExtraUnitMovementFlag(MOVEMENTFLAG2_FULL_SPEED_TURNING); + AddUnitMovementFlag(MOVEMENTFLAG_FULL_SPEED_TURNING); else - RemoveExtraUnitMovementFlag(MOVEMENTFLAG2_FULL_SPEED_TURNING); + RemoveUnitMovementFlag(MOVEMENTFLAG_FULL_SPEED_TURNING); static constexpr OpcodeServer fullSpeedTurningOpcodeTable[2] = { @@ -13853,13 +13853,13 @@ bool Unit::SetEnableFullSpeedTurning(bool enable) bool Unit::SetEnableFullSpeedPitching(bool enable) { - if (enable == HasExtraUnitMovementFlag(MOVEMENTFLAG2_FULL_SPEED_PITCHING)) + if (enable == HasUnitMovementFlag(MOVEMENTFLAG_FULL_SPEED_PITCHING)) return false; if (enable) - AddExtraUnitMovementFlag(MOVEMENTFLAG2_FULL_SPEED_PITCHING); + AddUnitMovementFlag(MOVEMENTFLAG_FULL_SPEED_PITCHING); else - RemoveExtraUnitMovementFlag(MOVEMENTFLAG2_FULL_SPEED_PITCHING); + RemoveUnitMovementFlag(MOVEMENTFLAG_FULL_SPEED_PITCHING); static constexpr OpcodeServer fullSpeedPitchingOpcodeTable[2] = { @@ -13884,13 +13884,13 @@ bool Unit::SetEnableFullSpeedPitching(bool enable) bool Unit::SetAlwaysAllowPitching(bool enable) { - if (enable == HasExtraUnitMovementFlag(MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING)) + if (enable == HasUnitMovementFlag(MOVEMENTFLAG_ALWAYS_ALLOW_PITCHING)) return false; if (enable) - AddExtraUnitMovementFlag(MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING); + AddUnitMovementFlag(MOVEMENTFLAG_ALWAYS_ALLOW_PITCHING); else - RemoveExtraUnitMovementFlag(MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING); + RemoveUnitMovementFlag(MOVEMENTFLAG_ALWAYS_ALLOW_PITCHING); static constexpr OpcodeServer alwaysAllowPitchingOpcodeTable[2] = { @@ -13918,13 +13918,13 @@ bool Unit::SetCanTransitionBetweenSwimAndFly(bool enable) if (GetTypeId() != TYPEID_PLAYER) return false; - if (enable == HasExtraUnitMovementFlag(MOVEMENTFLAG2_CAN_SWIM_TO_FLY_TRANS)) + if (enable == HasUnitMovementFlag(MOVEMENTFLAG_CAN_SWIM_TO_FLY_TRANS)) return false; if (enable) - AddExtraUnitMovementFlag(MOVEMENTFLAG2_CAN_SWIM_TO_FLY_TRANS); + AddUnitMovementFlag(MOVEMENTFLAG_CAN_SWIM_TO_FLY_TRANS); else - RemoveExtraUnitMovementFlag(MOVEMENTFLAG2_CAN_SWIM_TO_FLY_TRANS); + RemoveUnitMovementFlag(MOVEMENTFLAG_CAN_SWIM_TO_FLY_TRANS); static OpcodeServer const swimToFlyTransOpcodeTable[2] = { @@ -13950,13 +13950,13 @@ bool Unit::SetCanTransitionBetweenSwimAndFly(bool enable) bool Unit::SetCanTurnWhileFalling(bool enable) { // Temporarily disabled for short lived auras that unapply before client had time to ACK applying - //if (enable == HasExtraUnitMovementFlag(MOVEMENTFLAG2_CAN_TURN_WHILE_FALLING)) + //if (enable == HasUnitMovementFlag(MOVEMENTFLAG_CAN_TURN_WHILE_FALLING)) // return false; if (enable) - AddExtraUnitMovementFlag(MOVEMENTFLAG2_CAN_TURN_WHILE_FALLING); + AddUnitMovementFlag(MOVEMENTFLAG_CAN_TURN_WHILE_FALLING); else - RemoveExtraUnitMovementFlag(MOVEMENTFLAG2_CAN_TURN_WHILE_FALLING); + RemoveUnitMovementFlag(MOVEMENTFLAG_CAN_TURN_WHILE_FALLING); static OpcodeServer const canTurnWhileFallingOpcodeTable[2] = { @@ -13981,13 +13981,13 @@ bool Unit::SetCanTurnWhileFalling(bool enable) bool Unit::SetCanDoubleJump(bool enable) { - if (enable == HasExtraUnitMovementFlag(MOVEMENTFLAG2_CAN_DOUBLE_JUMP)) + if (enable == HasUnitMovementFlag(MOVEMENTFLAG_CAN_DOUBLE_JUMP)) return false; if (enable) - AddExtraUnitMovementFlag(MOVEMENTFLAG2_CAN_DOUBLE_JUMP); + AddUnitMovementFlag(MOVEMENTFLAG_CAN_DOUBLE_JUMP); else - RemoveExtraUnitMovementFlag(MOVEMENTFLAG2_CAN_DOUBLE_JUMP); + RemoveUnitMovementFlag(MOVEMENTFLAG_CAN_DOUBLE_JUMP); static OpcodeServer const doubleJumpOpcodeTable[2] = { @@ -14012,13 +14012,13 @@ bool Unit::SetCanDoubleJump(bool enable) bool Unit::SetDisableInertia(bool disable) { - if (disable == HasExtraUnitMovementFlag2(MOVEMENTFLAG3_DISABLE_INERTIA)) + if (disable == HasUnitMovementFlag(MOVEMENTFLAG_DISABLE_INERTIA)) return false; if (disable) - AddExtraUnitMovementFlag2(MOVEMENTFLAG3_DISABLE_INERTIA); + AddUnitMovementFlag(MOVEMENTFLAG_DISABLE_INERTIA); else - RemoveExtraUnitMovementFlag2(MOVEMENTFLAG3_DISABLE_INERTIA); + RemoveUnitMovementFlag(MOVEMENTFLAG_DISABLE_INERTIA); static OpcodeServer const disableInertiaOpcodeTable[2] = { @@ -14043,13 +14043,13 @@ bool Unit::SetDisableInertia(bool disable) bool Unit::SetCanAdvFly(bool enable) { - if (enable == HasExtraUnitMovementFlag2(MOVEMENTFLAG3_CAN_ADV_FLY)) + if (enable == HasUnitMovementFlag(MOVEMENTFLAG_CAN_ADV_FLY)) return false; if (enable) - AddExtraUnitMovementFlag2(MOVEMENTFLAG3_CAN_ADV_FLY); + AddUnitMovementFlag(MOVEMENTFLAG_CAN_ADV_FLY); else - RemoveExtraUnitMovementFlag2(MOVEMENTFLAG3_CAN_ADV_FLY | MOVEMENTFLAG3_ADV_FLYING); + RemoveUnitMovementFlag(MOVEMENTFLAG_CAN_ADV_FLY | MOVEMENTFLAG_ADV_FLYING); static OpcodeServer const advFlyOpcodeTable[2] = { @@ -14074,13 +14074,13 @@ bool Unit::SetCanAdvFly(bool enable) bool Unit::SetMoveCantSwim(bool cantSwim) { - if (cantSwim == HasExtraUnitMovementFlag2(MOVEMENTFLAG3_CANNOT_SWIM)) + if (cantSwim == HasUnitMovementFlag(MOVEMENTFLAG_CANNOT_SWIM)) return false; if (cantSwim) - AddExtraUnitMovementFlag2(MOVEMENTFLAG3_CANNOT_SWIM); + AddUnitMovementFlag(MOVEMENTFLAG_CANNOT_SWIM); else - RemoveExtraUnitMovementFlag2(MOVEMENTFLAG3_CANNOT_SWIM); + RemoveUnitMovementFlag(MOVEMENTFLAG_CANNOT_SWIM); static OpcodeServer const cantSwimOpcodeTable[2] = { @@ -14185,13 +14185,13 @@ void Unit::RemoveMovementForce(ObjectGuid id) bool Unit::SetIgnoreMovementForces(bool ignore) { - if (ignore == HasExtraUnitMovementFlag(MOVEMENTFLAG2_IGNORE_MOVEMENT_FORCES)) + if (ignore == HasUnitMovementFlag(MOVEMENTFLAG_IGNORE_MOVEMENT_FORCES)) return false; if (ignore) - AddExtraUnitMovementFlag(MOVEMENTFLAG2_IGNORE_MOVEMENT_FORCES); + AddUnitMovementFlag(MOVEMENTFLAG_IGNORE_MOVEMENT_FORCES); else - RemoveExtraUnitMovementFlag(MOVEMENTFLAG2_IGNORE_MOVEMENT_FORCES); + RemoveUnitMovementFlag(MOVEMENTFLAG_IGNORE_MOVEMENT_FORCES); static OpcodeServer const ignoreMovementForcesOpcodeTable[2] = { @@ -14717,7 +14717,7 @@ std::string Unit::GetDebugInfo() const sstr << WorldObject::GetDebugInfo() << "\n" << std::boolalpha << "IsAIEnabled: " << IsAIEnabled() << " DeathState: " << std::to_string(getDeathState()) - << " UnitMovementFlags: " << GetUnitMovementFlags() << " ExtraUnitMovementFlags: " << GetExtraUnitMovementFlags() + << " UnitMovementFlags: " << Movement::MovementFlags_ToString(GetUnitMovementFlags()) << " Class: " << std::to_string(GetClass()) << "\n" << "" << (movespline ? movespline->ToString() : "Movespline: \n") << "GetCharmedGUID(): " << GetCharmedGUID().ToString() << "\n" diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index b7ce1834f8..67b122c1e1 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1752,23 +1752,11 @@ class TC_GAME_API Unit : public WorldObject void PauseMovement(uint32 timer = 0, uint8 slot = 0, bool forced = true); // timer in ms void ResumeMovement(uint32 timer = 0, uint8 slot = 0); // timer in ms - void AddUnitMovementFlag(uint32 f) { m_movementInfo.AddMovementFlag(f); } - void RemoveUnitMovementFlag(uint32 f) { m_movementInfo.RemoveMovementFlag(f); } - bool HasUnitMovementFlag(uint32 f) const { return m_movementInfo.HasMovementFlag(f); } - uint32 GetUnitMovementFlags() const { return m_movementInfo.GetMovementFlags(); } - void SetUnitMovementFlags(uint32 f) { m_movementInfo.SetMovementFlags(f); } - - void AddExtraUnitMovementFlag(uint32 f) { m_movementInfo.AddExtraMovementFlag(f); } - void RemoveExtraUnitMovementFlag(uint32 f) { m_movementInfo.RemoveExtraMovementFlag(f); } - bool HasExtraUnitMovementFlag(uint32 f) const { return m_movementInfo.HasExtraMovementFlag(f); } - uint32 GetExtraUnitMovementFlags() const { return m_movementInfo.GetExtraMovementFlags(); } - void SetExtraUnitMovementFlags(uint32 f) { m_movementInfo.SetExtraMovementFlags(f); } - - void AddExtraUnitMovementFlag2(uint32 f) { m_movementInfo.AddExtraMovementFlag2(f); } - void RemoveExtraUnitMovementFlag2(uint32 f) { m_movementInfo.RemoveExtraMovementFlag2(f); } - bool HasExtraUnitMovementFlag2(uint32 f) const { return m_movementInfo.HasExtraMovementFlag2(f); } - uint32 GetExtraUnitMovementFlags2() const { return m_movementInfo.GetExtraMovementFlags2(); } - void SetExtraUnitMovementFlags2(uint32 f) { m_movementInfo.SetExtraMovementFlags2(f); } + void AddUnitMovementFlag(MovementFlags f) { m_movementInfo.AddMovementFlag(f); } + void RemoveUnitMovementFlag(MovementFlags f) { m_movementInfo.RemoveMovementFlag(f); } + bool HasUnitMovementFlag(MovementFlags f) const { return m_movementInfo.HasMovementFlag(f); } + MovementFlags GetUnitMovementFlags() const { return m_movementInfo.GetMovementFlags(); } + void SetUnitMovementFlags(MovementFlags f) { m_movementInfo.SetMovementFlags(f); } bool IsSplineEnabled() const; diff --git a/src/server/game/Entities/Unit/UnitDefines.h b/src/server/game/Entities/Unit/UnitDefines.h index 2579b19904..dd44fc98b6 100644 --- a/src/server/game/Entities/Unit/UnitDefines.h +++ b/src/server/game/Entities/Unit/UnitDefines.h @@ -380,104 +380,6 @@ enum NPCFlags2 : uint32 DEFINE_ENUM_FLAG(NPCFlags2); -// EnumUtils: DESCRIBE THIS -enum MovementFlags : uint32 -{ - MOVEMENTFLAG_NONE = 0x00000000, - MOVEMENTFLAG_FORWARD = 0x00000001, - MOVEMENTFLAG_BACKWARD = 0x00000002, - MOVEMENTFLAG_STRAFE_LEFT = 0x00000004, - MOVEMENTFLAG_STRAFE_RIGHT = 0x00000008, - MOVEMENTFLAG_LEFT = 0x00000010, - MOVEMENTFLAG_RIGHT = 0x00000020, - MOVEMENTFLAG_PITCH_UP = 0x00000040, - MOVEMENTFLAG_PITCH_DOWN = 0x00000080, - MOVEMENTFLAG_WALKING = 0x00000100, // Walking - MOVEMENTFLAG_DISABLE_GRAVITY = 0x00000200, // Former MOVEMENTFLAG_LEVITATING. This is used when walking is not possible. - MOVEMENTFLAG_ROOT = 0x00000400, // Must not be set along with MOVEMENTFLAG_MASK_MOVING - MOVEMENTFLAG_FALLING = 0x00000800, // damage dealt on that type of falling - MOVEMENTFLAG_FALLING_FAR = 0x00001000, - MOVEMENTFLAG_PENDING_STOP = 0x00002000, - MOVEMENTFLAG_PENDING_STRAFE_STOP = 0x00004000, - MOVEMENTFLAG_PENDING_FORWARD = 0x00008000, - MOVEMENTFLAG_PENDING_BACKWARD = 0x00010000, - MOVEMENTFLAG_PENDING_STRAFE_LEFT = 0x00020000, - MOVEMENTFLAG_PENDING_STRAFE_RIGHT = 0x00040000, - MOVEMENTFLAG_PENDING_ROOT = 0x00080000, - MOVEMENTFLAG_SWIMMING = 0x00100000, // appears with fly flag also - MOVEMENTFLAG_ASCENDING = 0x00200000, // press "space" when flying - MOVEMENTFLAG_DESCENDING = 0x00400000, - MOVEMENTFLAG_CAN_FLY = 0x00800000, // Appears when unit can fly. For example, appears when a player sits on a mount. - MOVEMENTFLAG_FLYING = 0x01000000, // unit is actually flying. pretty sure this is only used for players. creatures use disable_gravity - MOVEMENTFLAG_SPLINE_ELEVATION = 0x02000000, // used for flight paths - MOVEMENTFLAG_WATERWALKING = 0x04000000, // prevent unit from falling through water - MOVEMENTFLAG_FALLING_SLOW = 0x08000000, // active rogue safe fall spell (passive) - MOVEMENTFLAG_HOVER = 0x10000000, // hover, cannot jump - MOVEMENTFLAG_DISABLE_COLLISION = 0x20000000, - - MOVEMENTFLAG_MASK_MOVING = - MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT | - MOVEMENTFLAG_FALLING | MOVEMENTFLAG_ASCENDING | MOVEMENTFLAG_DESCENDING,// SKIP - - MOVEMENTFLAG_MASK_TURNING = - MOVEMENTFLAG_LEFT | MOVEMENTFLAG_RIGHT | MOVEMENTFLAG_PITCH_UP | MOVEMENTFLAG_PITCH_DOWN, // SKIP - - MOVEMENTFLAG_MASK_MOVING_FLY = - MOVEMENTFLAG_FLYING | MOVEMENTFLAG_ASCENDING | MOVEMENTFLAG_DESCENDING, // SKIP - - // Movement flags allowed for creature in CreateObject - we need to keep all other enabled serverside - // to properly calculate all movement - MOVEMENTFLAG_MASK_CREATURE_ALLOWED = - MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_DISABLE_GRAVITY | MOVEMENTFLAG_ROOT | MOVEMENTFLAG_SWIMMING | - MOVEMENTFLAG_CAN_FLY | MOVEMENTFLAG_WATERWALKING | MOVEMENTFLAG_FALLING_SLOW | MOVEMENTFLAG_HOVER | MOVEMENTFLAG_DISABLE_COLLISION, // SKIP - - /// @todo if needed: add more flags to this masks that are exclusive to players - MOVEMENTFLAG_MASK_PLAYER_ONLY = - MOVEMENTFLAG_FLYING, // SKIP - - /// Movement flags that have change status opcodes associated for players - MOVEMENTFLAG_MASK_HAS_PLAYER_STATUS_OPCODE = MOVEMENTFLAG_DISABLE_GRAVITY | MOVEMENTFLAG_ROOT | - MOVEMENTFLAG_CAN_FLY | MOVEMENTFLAG_WATERWALKING | MOVEMENTFLAG_FALLING_SLOW | MOVEMENTFLAG_HOVER | MOVEMENTFLAG_DISABLE_COLLISION // SKIP -}; - -// EnumUtils: DESCRIBE THIS -enum MovementFlags2 : uint32 -{ - MOVEMENTFLAG2_NONE = 0x00000000, - MOVEMENTFLAG2_NO_STRAFE = 0x00000001, - MOVEMENTFLAG2_NO_JUMPING = 0x00000002, - MOVEMENTFLAG2_FULL_SPEED_TURNING = 0x00000004, - MOVEMENTFLAG2_FULL_SPEED_PITCHING = 0x00000008, - MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING = 0x00000010, - MOVEMENTFLAG2_IS_VEHICLE_EXIT_VOLUNTARY = 0x00000020, - MOVEMENTFLAG2_WATERWALKING_FULL_PITCH = 0x00000040, // will always waterwalk, even if facing the camera directly down - MOVEMENTFLAG2_VEHICLE_PASSENGER_IS_TRANSITION_ALLOWED = 0x00000080, - MOVEMENTFLAG2_CAN_SWIM_TO_FLY_TRANS = 0x00000100, - MOVEMENTFLAG2_UNK9 = 0x00000200, // terrain normal calculation is disabled if this flag is not present, client automatically handles setting this flag - MOVEMENTFLAG2_CAN_TURN_WHILE_FALLING = 0x00000400, - MOVEMENTFLAG2_IGNORE_MOVEMENT_FORCES = 0x00000800, - MOVEMENTFLAG2_CAN_DOUBLE_JUMP = 0x00001000, - MOVEMENTFLAG2_DOUBLE_JUMP = 0x00002000, - // these flags are not sent - MOVEMENTFLAG2_AWAITING_LOAD = 0x00010000, - MOVEMENTFLAG2_INTERPOLATED_MOVEMENT = 0x00020000, - MOVEMENTFLAG2_INTERPOLATED_TURNING = 0x00040000, - MOVEMENTFLAG2_INTERPOLATED_PITCHING = 0x00080000 -}; - -// EnumUtils: DESCRIBE THIS -enum MovementFlags3 : uint32 -{ - MOVEMENTFLAG3_NONE = 0x00000000, - MOVEMENTFLAG3_DISABLE_INERTIA = 0x00000001, - MOVEMENTFLAG3_CAN_ADV_FLY = 0x00000002, - MOVEMENTFLAG3_ADV_FLYING = 0x00000004, - MOVEMENTFLAG3_CANNOT_SWIM = 0x00002000, - MOVEMENTFLAG3_CAN_DRIVE = 0x00004000, - MOVEMENTFLAG3_DRIVING_FORWARD = 0x00008000, - MOVEMENTFLAG3_DRIVING_BACKWARD = 0x00010000, -}; - enum HitInfo { HITINFO_NORMALSWING = 0x00000000, diff --git a/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp b/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp index f8d0383598..f525096631 100644 --- a/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp +++ b/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp @@ -625,277 +625,4 @@ TC_API_EXPORT size_t EnumUtils::ToIndex(NPCFlags2 value) default: throw std::out_of_range("value"); } } - -/*******************************************************************\ -|* data for enum 'MovementFlags' in 'UnitDefines.h' auto-generated *| -\*******************************************************************/ -template <> -TC_API_EXPORT EnumText EnumUtils::ToString(MovementFlags value) -{ - switch (value) - { - case MOVEMENTFLAG_NONE: return { "MOVEMENTFLAG_NONE", "MOVEMENTFLAG_NONE", "" }; - case MOVEMENTFLAG_FORWARD: return { "MOVEMENTFLAG_FORWARD", "MOVEMENTFLAG_FORWARD", "" }; - case MOVEMENTFLAG_BACKWARD: return { "MOVEMENTFLAG_BACKWARD", "MOVEMENTFLAG_BACKWARD", "" }; - case MOVEMENTFLAG_STRAFE_LEFT: return { "MOVEMENTFLAG_STRAFE_LEFT", "MOVEMENTFLAG_STRAFE_LEFT", "" }; - case MOVEMENTFLAG_STRAFE_RIGHT: return { "MOVEMENTFLAG_STRAFE_RIGHT", "MOVEMENTFLAG_STRAFE_RIGHT", "" }; - case MOVEMENTFLAG_LEFT: return { "MOVEMENTFLAG_LEFT", "MOVEMENTFLAG_LEFT", "" }; - case MOVEMENTFLAG_RIGHT: return { "MOVEMENTFLAG_RIGHT", "MOVEMENTFLAG_RIGHT", "" }; - case MOVEMENTFLAG_PITCH_UP: return { "MOVEMENTFLAG_PITCH_UP", "MOVEMENTFLAG_PITCH_UP", "" }; - case MOVEMENTFLAG_PITCH_DOWN: return { "MOVEMENTFLAG_PITCH_DOWN", "MOVEMENTFLAG_PITCH_DOWN", "" }; - case MOVEMENTFLAG_WALKING: return { "MOVEMENTFLAG_WALKING", "MOVEMENTFLAG_WALKING", "Walking" }; - case MOVEMENTFLAG_DISABLE_GRAVITY: return { "MOVEMENTFLAG_DISABLE_GRAVITY", "MOVEMENTFLAG_DISABLE_GRAVITY", "Former MOVEMENTFLAG_LEVITATING. This is used when walking is not possible." }; - case MOVEMENTFLAG_ROOT: return { "MOVEMENTFLAG_ROOT", "MOVEMENTFLAG_ROOT", "Must not be set along with MOVEMENTFLAG_MASK_MOVING" }; - case MOVEMENTFLAG_FALLING: return { "MOVEMENTFLAG_FALLING", "MOVEMENTFLAG_FALLING", "damage dealt on that type of falling" }; - case MOVEMENTFLAG_FALLING_FAR: return { "MOVEMENTFLAG_FALLING_FAR", "MOVEMENTFLAG_FALLING_FAR", "" }; - case MOVEMENTFLAG_PENDING_STOP: return { "MOVEMENTFLAG_PENDING_STOP", "MOVEMENTFLAG_PENDING_STOP", "" }; - case MOVEMENTFLAG_PENDING_STRAFE_STOP: return { "MOVEMENTFLAG_PENDING_STRAFE_STOP", "MOVEMENTFLAG_PENDING_STRAFE_STOP", "" }; - case MOVEMENTFLAG_PENDING_FORWARD: return { "MOVEMENTFLAG_PENDING_FORWARD", "MOVEMENTFLAG_PENDING_FORWARD", "" }; - case MOVEMENTFLAG_PENDING_BACKWARD: return { "MOVEMENTFLAG_PENDING_BACKWARD", "MOVEMENTFLAG_PENDING_BACKWARD", "" }; - case MOVEMENTFLAG_PENDING_STRAFE_LEFT: return { "MOVEMENTFLAG_PENDING_STRAFE_LEFT", "MOVEMENTFLAG_PENDING_STRAFE_LEFT", "" }; - case MOVEMENTFLAG_PENDING_STRAFE_RIGHT: return { "MOVEMENTFLAG_PENDING_STRAFE_RIGHT", "MOVEMENTFLAG_PENDING_STRAFE_RIGHT", "" }; - case MOVEMENTFLAG_PENDING_ROOT: return { "MOVEMENTFLAG_PENDING_ROOT", "MOVEMENTFLAG_PENDING_ROOT", "" }; - case MOVEMENTFLAG_SWIMMING: return { "MOVEMENTFLAG_SWIMMING", "MOVEMENTFLAG_SWIMMING", "appears with fly flag also" }; - case MOVEMENTFLAG_ASCENDING: return { "MOVEMENTFLAG_ASCENDING", "MOVEMENTFLAG_ASCENDING", "press \042space\042 when flying" }; - case MOVEMENTFLAG_DESCENDING: return { "MOVEMENTFLAG_DESCENDING", "MOVEMENTFLAG_DESCENDING", "" }; - case MOVEMENTFLAG_CAN_FLY: return { "MOVEMENTFLAG_CAN_FLY", "MOVEMENTFLAG_CAN_FLY", "Appears when unit can fly. For example, appears when a player sits on a mount." }; - case MOVEMENTFLAG_FLYING: return { "MOVEMENTFLAG_FLYING", "MOVEMENTFLAG_FLYING", "unit is actually flying. pretty sure this is only used for players. creatures use disable_gravity" }; - case MOVEMENTFLAG_SPLINE_ELEVATION: return { "MOVEMENTFLAG_SPLINE_ELEVATION", "MOVEMENTFLAG_SPLINE_ELEVATION", "used for flight paths" }; - case MOVEMENTFLAG_WATERWALKING: return { "MOVEMENTFLAG_WATERWALKING", "MOVEMENTFLAG_WATERWALKING", "prevent unit from falling through water" }; - case MOVEMENTFLAG_FALLING_SLOW: return { "MOVEMENTFLAG_FALLING_SLOW", "MOVEMENTFLAG_FALLING_SLOW", "active rogue safe fall spell (passive)" }; - case MOVEMENTFLAG_HOVER: return { "MOVEMENTFLAG_HOVER", "MOVEMENTFLAG_HOVER", "hover, cannot jump" }; - case MOVEMENTFLAG_DISABLE_COLLISION: return { "MOVEMENTFLAG_DISABLE_COLLISION", "MOVEMENTFLAG_DISABLE_COLLISION", "" }; - default: throw std::out_of_range("value"); - } -} - -template <> -TC_API_EXPORT size_t EnumUtils::Count() { return 31; } - -template <> -TC_API_EXPORT MovementFlags EnumUtils::FromIndex(size_t index) -{ - switch (index) - { - case 0: return MOVEMENTFLAG_NONE; - case 1: return MOVEMENTFLAG_FORWARD; - case 2: return MOVEMENTFLAG_BACKWARD; - case 3: return MOVEMENTFLAG_STRAFE_LEFT; - case 4: return MOVEMENTFLAG_STRAFE_RIGHT; - case 5: return MOVEMENTFLAG_LEFT; - case 6: return MOVEMENTFLAG_RIGHT; - case 7: return MOVEMENTFLAG_PITCH_UP; - case 8: return MOVEMENTFLAG_PITCH_DOWN; - case 9: return MOVEMENTFLAG_WALKING; - case 10: return MOVEMENTFLAG_DISABLE_GRAVITY; - case 11: return MOVEMENTFLAG_ROOT; - case 12: return MOVEMENTFLAG_FALLING; - case 13: return MOVEMENTFLAG_FALLING_FAR; - case 14: return MOVEMENTFLAG_PENDING_STOP; - case 15: return MOVEMENTFLAG_PENDING_STRAFE_STOP; - case 16: return MOVEMENTFLAG_PENDING_FORWARD; - case 17: return MOVEMENTFLAG_PENDING_BACKWARD; - case 18: return MOVEMENTFLAG_PENDING_STRAFE_LEFT; - case 19: return MOVEMENTFLAG_PENDING_STRAFE_RIGHT; - case 20: return MOVEMENTFLAG_PENDING_ROOT; - case 21: return MOVEMENTFLAG_SWIMMING; - case 22: return MOVEMENTFLAG_ASCENDING; - case 23: return MOVEMENTFLAG_DESCENDING; - case 24: return MOVEMENTFLAG_CAN_FLY; - case 25: return MOVEMENTFLAG_FLYING; - case 26: return MOVEMENTFLAG_SPLINE_ELEVATION; - case 27: return MOVEMENTFLAG_WATERWALKING; - case 28: return MOVEMENTFLAG_FALLING_SLOW; - case 29: return MOVEMENTFLAG_HOVER; - case 30: return MOVEMENTFLAG_DISABLE_COLLISION; - default: throw std::out_of_range("index"); - } -} - -template <> -TC_API_EXPORT size_t EnumUtils::ToIndex(MovementFlags value) -{ - switch (value) - { - case MOVEMENTFLAG_NONE: return 0; - case MOVEMENTFLAG_FORWARD: return 1; - case MOVEMENTFLAG_BACKWARD: return 2; - case MOVEMENTFLAG_STRAFE_LEFT: return 3; - case MOVEMENTFLAG_STRAFE_RIGHT: return 4; - case MOVEMENTFLAG_LEFT: return 5; - case MOVEMENTFLAG_RIGHT: return 6; - case MOVEMENTFLAG_PITCH_UP: return 7; - case MOVEMENTFLAG_PITCH_DOWN: return 8; - case MOVEMENTFLAG_WALKING: return 9; - case MOVEMENTFLAG_DISABLE_GRAVITY: return 10; - case MOVEMENTFLAG_ROOT: return 11; - case MOVEMENTFLAG_FALLING: return 12; - case MOVEMENTFLAG_FALLING_FAR: return 13; - case MOVEMENTFLAG_PENDING_STOP: return 14; - case MOVEMENTFLAG_PENDING_STRAFE_STOP: return 15; - case MOVEMENTFLAG_PENDING_FORWARD: return 16; - case MOVEMENTFLAG_PENDING_BACKWARD: return 17; - case MOVEMENTFLAG_PENDING_STRAFE_LEFT: return 18; - case MOVEMENTFLAG_PENDING_STRAFE_RIGHT: return 19; - case MOVEMENTFLAG_PENDING_ROOT: return 20; - case MOVEMENTFLAG_SWIMMING: return 21; - case MOVEMENTFLAG_ASCENDING: return 22; - case MOVEMENTFLAG_DESCENDING: return 23; - case MOVEMENTFLAG_CAN_FLY: return 24; - case MOVEMENTFLAG_FLYING: return 25; - case MOVEMENTFLAG_SPLINE_ELEVATION: return 26; - case MOVEMENTFLAG_WATERWALKING: return 27; - case MOVEMENTFLAG_FALLING_SLOW: return 28; - case MOVEMENTFLAG_HOVER: return 29; - case MOVEMENTFLAG_DISABLE_COLLISION: return 30; - default: throw std::out_of_range("value"); - } -} - -/********************************************************************\ -|* data for enum 'MovementFlags2' in 'UnitDefines.h' auto-generated *| -\********************************************************************/ -template <> -TC_API_EXPORT EnumText EnumUtils::ToString(MovementFlags2 value) -{ - switch (value) - { - case MOVEMENTFLAG2_NONE: return { "MOVEMENTFLAG2_NONE", "MOVEMENTFLAG2_NONE", "" }; - case MOVEMENTFLAG2_NO_STRAFE: return { "MOVEMENTFLAG2_NO_STRAFE", "MOVEMENTFLAG2_NO_STRAFE", "" }; - case MOVEMENTFLAG2_NO_JUMPING: return { "MOVEMENTFLAG2_NO_JUMPING", "MOVEMENTFLAG2_NO_JUMPING", "" }; - case MOVEMENTFLAG2_FULL_SPEED_TURNING: return { "MOVEMENTFLAG2_FULL_SPEED_TURNING", "MOVEMENTFLAG2_FULL_SPEED_TURNING", "" }; - case MOVEMENTFLAG2_FULL_SPEED_PITCHING: return { "MOVEMENTFLAG2_FULL_SPEED_PITCHING", "MOVEMENTFLAG2_FULL_SPEED_PITCHING", "" }; - case MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING: return { "MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING", "MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING", "" }; - case MOVEMENTFLAG2_IS_VEHICLE_EXIT_VOLUNTARY: return { "MOVEMENTFLAG2_IS_VEHICLE_EXIT_VOLUNTARY", "MOVEMENTFLAG2_IS_VEHICLE_EXIT_VOLUNTARY", "" }; - case MOVEMENTFLAG2_WATERWALKING_FULL_PITCH: return { "MOVEMENTFLAG2_WATERWALKING_FULL_PITCH", "MOVEMENTFLAG2_WATERWALKING_FULL_PITCH", "will always waterwalk, even if facing the camera directly down" }; - case MOVEMENTFLAG2_VEHICLE_PASSENGER_IS_TRANSITION_ALLOWED: return { "MOVEMENTFLAG2_VEHICLE_PASSENGER_IS_TRANSITION_ALLOWED", "MOVEMENTFLAG2_VEHICLE_PASSENGER_IS_TRANSITION_ALLOWED", "" }; - case MOVEMENTFLAG2_CAN_SWIM_TO_FLY_TRANS: return { "MOVEMENTFLAG2_CAN_SWIM_TO_FLY_TRANS", "MOVEMENTFLAG2_CAN_SWIM_TO_FLY_TRANS", "" }; - case MOVEMENTFLAG2_UNK9: return { "MOVEMENTFLAG2_UNK9", "MOVEMENTFLAG2_UNK9", "terrain normal calculation is disabled if this flag is not present, client automatically handles setting this flag" }; - case MOVEMENTFLAG2_CAN_TURN_WHILE_FALLING: return { "MOVEMENTFLAG2_CAN_TURN_WHILE_FALLING", "MOVEMENTFLAG2_CAN_TURN_WHILE_FALLING", "" }; - case MOVEMENTFLAG2_IGNORE_MOVEMENT_FORCES: return { "MOVEMENTFLAG2_IGNORE_MOVEMENT_FORCES", "MOVEMENTFLAG2_IGNORE_MOVEMENT_FORCES", "" }; - case MOVEMENTFLAG2_CAN_DOUBLE_JUMP: return { "MOVEMENTFLAG2_CAN_DOUBLE_JUMP", "MOVEMENTFLAG2_CAN_DOUBLE_JUMP", "" }; - case MOVEMENTFLAG2_DOUBLE_JUMP: return { "MOVEMENTFLAG2_DOUBLE_JUMP", "MOVEMENTFLAG2_DOUBLE_JUMP", "" }; - case MOVEMENTFLAG2_AWAITING_LOAD: return { "MOVEMENTFLAG2_AWAITING_LOAD", "MOVEMENTFLAG2_AWAITING_LOAD", "" }; - case MOVEMENTFLAG2_INTERPOLATED_MOVEMENT: return { "MOVEMENTFLAG2_INTERPOLATED_MOVEMENT", "MOVEMENTFLAG2_INTERPOLATED_MOVEMENT", "" }; - case MOVEMENTFLAG2_INTERPOLATED_TURNING: return { "MOVEMENTFLAG2_INTERPOLATED_TURNING", "MOVEMENTFLAG2_INTERPOLATED_TURNING", "" }; - case MOVEMENTFLAG2_INTERPOLATED_PITCHING: return { "MOVEMENTFLAG2_INTERPOLATED_PITCHING", "MOVEMENTFLAG2_INTERPOLATED_PITCHING", "" }; - default: throw std::out_of_range("value"); - } -} - -template <> -TC_API_EXPORT size_t EnumUtils::Count() { return 19; } - -template <> -TC_API_EXPORT MovementFlags2 EnumUtils::FromIndex(size_t index) -{ - switch (index) - { - case 0: return MOVEMENTFLAG2_NONE; - case 1: return MOVEMENTFLAG2_NO_STRAFE; - case 2: return MOVEMENTFLAG2_NO_JUMPING; - case 3: return MOVEMENTFLAG2_FULL_SPEED_TURNING; - case 4: return MOVEMENTFLAG2_FULL_SPEED_PITCHING; - case 5: return MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING; - case 6: return MOVEMENTFLAG2_IS_VEHICLE_EXIT_VOLUNTARY; - case 7: return MOVEMENTFLAG2_WATERWALKING_FULL_PITCH; - case 8: return MOVEMENTFLAG2_VEHICLE_PASSENGER_IS_TRANSITION_ALLOWED; - case 9: return MOVEMENTFLAG2_CAN_SWIM_TO_FLY_TRANS; - case 10: return MOVEMENTFLAG2_UNK9; - case 11: return MOVEMENTFLAG2_CAN_TURN_WHILE_FALLING; - case 12: return MOVEMENTFLAG2_IGNORE_MOVEMENT_FORCES; - case 13: return MOVEMENTFLAG2_CAN_DOUBLE_JUMP; - case 14: return MOVEMENTFLAG2_DOUBLE_JUMP; - case 15: return MOVEMENTFLAG2_AWAITING_LOAD; - case 16: return MOVEMENTFLAG2_INTERPOLATED_MOVEMENT; - case 17: return MOVEMENTFLAG2_INTERPOLATED_TURNING; - case 18: return MOVEMENTFLAG2_INTERPOLATED_PITCHING; - default: throw std::out_of_range("index"); - } -} - -template <> -TC_API_EXPORT size_t EnumUtils::ToIndex(MovementFlags2 value) -{ - switch (value) - { - case MOVEMENTFLAG2_NONE: return 0; - case MOVEMENTFLAG2_NO_STRAFE: return 1; - case MOVEMENTFLAG2_NO_JUMPING: return 2; - case MOVEMENTFLAG2_FULL_SPEED_TURNING: return 3; - case MOVEMENTFLAG2_FULL_SPEED_PITCHING: return 4; - case MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING: return 5; - case MOVEMENTFLAG2_IS_VEHICLE_EXIT_VOLUNTARY: return 6; - case MOVEMENTFLAG2_WATERWALKING_FULL_PITCH: return 7; - case MOVEMENTFLAG2_VEHICLE_PASSENGER_IS_TRANSITION_ALLOWED: return 8; - case MOVEMENTFLAG2_CAN_SWIM_TO_FLY_TRANS: return 9; - case MOVEMENTFLAG2_UNK9: return 10; - case MOVEMENTFLAG2_CAN_TURN_WHILE_FALLING: return 11; - case MOVEMENTFLAG2_IGNORE_MOVEMENT_FORCES: return 12; - case MOVEMENTFLAG2_CAN_DOUBLE_JUMP: return 13; - case MOVEMENTFLAG2_DOUBLE_JUMP: return 14; - case MOVEMENTFLAG2_AWAITING_LOAD: return 15; - case MOVEMENTFLAG2_INTERPOLATED_MOVEMENT: return 16; - case MOVEMENTFLAG2_INTERPOLATED_TURNING: return 17; - case MOVEMENTFLAG2_INTERPOLATED_PITCHING: return 18; - default: throw std::out_of_range("value"); - } -} - -/********************************************************************\ -|* data for enum 'MovementFlags3' in 'UnitDefines.h' auto-generated *| -\********************************************************************/ -template <> -TC_API_EXPORT EnumText EnumUtils::ToString(MovementFlags3 value) -{ - switch (value) - { - case MOVEMENTFLAG3_NONE: return { "MOVEMENTFLAG3_NONE", "MOVEMENTFLAG3_NONE", "" }; - case MOVEMENTFLAG3_DISABLE_INERTIA: return { "MOVEMENTFLAG3_DISABLE_INERTIA", "MOVEMENTFLAG3_DISABLE_INERTIA", "" }; - case MOVEMENTFLAG3_CAN_ADV_FLY: return { "MOVEMENTFLAG3_CAN_ADV_FLY", "MOVEMENTFLAG3_CAN_ADV_FLY", "" }; - case MOVEMENTFLAG3_ADV_FLYING: return { "MOVEMENTFLAG3_ADV_FLYING", "MOVEMENTFLAG3_ADV_FLYING", "" }; - case MOVEMENTFLAG3_CANNOT_SWIM: return { "MOVEMENTFLAG3_CANNOT_SWIM", "MOVEMENTFLAG3_CANNOT_SWIM", "" }; - case MOVEMENTFLAG3_CAN_DRIVE: return { "MOVEMENTFLAG3_CAN_DRIVE", "MOVEMENTFLAG3_CAN_DRIVE", "" }; - case MOVEMENTFLAG3_DRIVING_FORWARD: return { "MOVEMENTFLAG3_DRIVING_FORWARD", "MOVEMENTFLAG3_DRIVING_FORWARD", "" }; - case MOVEMENTFLAG3_DRIVING_BACKWARD: return { "MOVEMENTFLAG3_DRIVING_BACKWARD", "MOVEMENTFLAG3_DRIVING_BACKWARD", "" }; - default: throw std::out_of_range("value"); - } -} - -template <> -TC_API_EXPORT size_t EnumUtils::Count() { return 8; } - -template <> -TC_API_EXPORT MovementFlags3 EnumUtils::FromIndex(size_t index) -{ - switch (index) - { - case 0: return MOVEMENTFLAG3_NONE; - case 1: return MOVEMENTFLAG3_DISABLE_INERTIA; - case 2: return MOVEMENTFLAG3_CAN_ADV_FLY; - case 3: return MOVEMENTFLAG3_ADV_FLYING; - case 4: return MOVEMENTFLAG3_CANNOT_SWIM; - case 5: return MOVEMENTFLAG3_CAN_DRIVE; - case 6: return MOVEMENTFLAG3_DRIVING_FORWARD; - case 7: return MOVEMENTFLAG3_DRIVING_BACKWARD; - default: throw std::out_of_range("index"); - } -} - -template <> -TC_API_EXPORT size_t EnumUtils::ToIndex(MovementFlags3 value) -{ - switch (value) - { - case MOVEMENTFLAG3_NONE: return 0; - case MOVEMENTFLAG3_DISABLE_INERTIA: return 1; - case MOVEMENTFLAG3_CAN_ADV_FLY: return 2; - case MOVEMENTFLAG3_ADV_FLYING: return 3; - case MOVEMENTFLAG3_CANNOT_SWIM: return 4; - case MOVEMENTFLAG3_CAN_DRIVE: return 5; - case MOVEMENTFLAG3_DRIVING_FORWARD: return 6; - case MOVEMENTFLAG3_DRIVING_BACKWARD: return 7; - default: throw std::out_of_range("value"); - } -} } diff --git a/src/server/game/Entities/Vehicle/Vehicle.cpp b/src/server/game/Entities/Vehicle/Vehicle.cpp index a60e575b2a..69d6d307cb 100644 --- a/src/server/game/Entities/Vehicle/Vehicle.cpp +++ b/src/server/game/Entities/Vehicle/Vehicle.cpp @@ -641,15 +641,15 @@ void Vehicle::InitMovementInfoForBase() uint32 vehicleFlags = GetVehicleInfo()->Flags; if (vehicleFlags & VEHICLE_FLAG_NO_STRAFE) - _me->AddExtraUnitMovementFlag(MOVEMENTFLAG2_NO_STRAFE); + _me->AddUnitMovementFlag(MOVEMENTFLAG_NO_STRAFE); if (vehicleFlags & VEHICLE_FLAG_NO_JUMPING) - _me->AddExtraUnitMovementFlag(MOVEMENTFLAG2_NO_JUMPING); + _me->AddUnitMovementFlag(MOVEMENTFLAG_NO_JUMPING); if (vehicleFlags & VEHICLE_FLAG_FULLSPEEDTURNING) - _me->AddExtraUnitMovementFlag(MOVEMENTFLAG2_FULL_SPEED_TURNING); + _me->AddUnitMovementFlag(MOVEMENTFLAG_FULL_SPEED_TURNING); if (vehicleFlags & VEHICLE_FLAG_ALLOW_PITCHING) - _me->AddExtraUnitMovementFlag(MOVEMENTFLAG2_ALWAYS_ALLOW_PITCHING); + _me->AddUnitMovementFlag(MOVEMENTFLAG_ALWAYS_ALLOW_PITCHING); if (vehicleFlags & VEHICLE_FLAG_FULLSPEEDPITCHING) - _me->AddExtraUnitMovementFlag(MOVEMENTFLAG2_FULL_SPEED_PITCHING); + _me->AddUnitMovementFlag(MOVEMENTFLAG_FULL_SPEED_PITCHING); _me->m_movementInfo.pitch = GetPitch(); } diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 5a14d71df2..96cc383df5 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -56,8 +56,8 @@ bool WorldSession::ValidateMovementInfo(Unit const* mover, MovementInfo* mi) con if (check) \ { \ TC_LOG_DEBUG("entities.unit", "Player::ValidateMovementInfo: Violation of MovementFlags found ({}). " \ - "MovementFlags: {}, MovementFlags2: {}, MovementFlags3: {} for player {}. Mask {} will be removed.", \ - STRINGIZE(check), mi->GetMovementFlags(), mi->GetExtraMovementFlags(), mi->GetExtraMovementFlags2(), GetPlayer()->GetGUID(), maskToRemove); \ + "MovementFlags: {} for player {}. Mask {} will be removed.", \ + STRINGIZE(check), mi->GetMovementFlags(), GetPlayer()->GetGUID(), maskToRemove); \ mi->RemoveMovementFlag((maskToRemove)); \ } \ } while (0) @@ -481,9 +481,9 @@ void WorldSession::HandleMovementOpcode(OpcodeClient opcode, MovementInfo& movem Player* plrMover = mover->ToPlayer(); - TC_LOG_TRACE("opcodes.movement", "HandleMovementOpcode Name {}: opcode {} {} Flags {} Flags2 {} Flags3 {} Pos {}", + TC_LOG_TRACE("opcodes.movement", "HandleMovementOpcode Name {}: opcode {} {} Flags {} Pos {}", mover->GetName(), opcode, GetOpcodeNameForLogging(opcode), - movementInfo.flags, movementInfo.flags2, movementInfo.flags3, movementInfo.pos); + movementInfo.flags, movementInfo.pos); // ignore, waiting processing in WorldSession::HandleMoveWorldportAckOpcode and WorldSession::HandleMoveTeleportAck if (plrMover && plrMover->IsBeingTeleported()) diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp index d0f5db504a..ec57c19c7a 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.cpp +++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp @@ -52,7 +52,7 @@ namespace Movement TransportBase* _transport; }; - UnitMoveType SelectSpeedType(uint32 moveFlags) + UnitMoveType SelectSpeedType(MovementFlags moveFlags) { if (moveFlags & MOVEMENTFLAG_FLYING) { @@ -116,7 +116,7 @@ namespace Movement args.flags.Enter_Cycle = args.flags.Cyclic; move_spline.onTransport = transport; - uint32 moveFlags = unit->m_movementInfo.GetMovementFlags(); + MovementFlags moveFlags = unit->m_movementInfo.GetMovementFlags(); if (!args.flags.Backward) moveFlags = (moveFlags & ~MOVEMENTFLAG_BACKWARD) | MOVEMENTFLAG_FORWARD; else @@ -129,7 +129,7 @@ namespace Movement { // If spline is initialized with SetWalk method it only means we need to select // walk move speed for it but not add walk flag to unit - uint32 moveFlagsForSpeed = moveFlags; + MovementFlags moveFlagsForSpeed = moveFlags; if (args.walk) moveFlagsForSpeed |= MOVEMENTFLAG_WALKING; else diff --git a/src/server/game/Movement/Spline/MovementTypedefs.h b/src/server/game/Movement/Spline/MovementTypedefs.h index b8579f8fca..6cc56d6580 100644 --- a/src/server/game/Movement/Spline/MovementTypedefs.h +++ b/src/server/game/Movement/Spline/MovementTypedefs.h @@ -20,9 +20,7 @@ #include "Common.h" -enum MovementFlags : uint32; -enum MovementFlags2 : uint32; -enum MovementFlags3 : uint32; +enum MovementFlags : uint64; namespace G3D { @@ -83,8 +81,6 @@ namespace Movement float constexpr gravity = static_cast(19.291103363037109375); TC_GAME_API extern UInt32Counter splineIdGen; TC_GAME_API extern std::string MovementFlags_ToString(MovementFlags flags); - TC_GAME_API extern std::string MovementFlags_ToString(MovementFlags2 flags); - TC_GAME_API extern std::string MovementFlags_ToString(MovementFlags3 flags); } #endif // TRINITYSERVER_TYPEDEFS_H diff --git a/src/server/game/Movement/Spline/MovementUtil.cpp b/src/server/game/Movement/Spline/MovementUtil.cpp index 71fc20db48..36e0573056 100644 --- a/src/server/game/Movement/Spline/MovementUtil.cpp +++ b/src/server/game/Movement/Spline/MovementUtil.cpp @@ -16,6 +16,7 @@ */ #include "MoveSplineFlag.h" +#include "MovementInfo.h" #include "MovementTypedefs.h" #include "SmartEnum.h" #include @@ -105,18 +106,4 @@ namespace Movement PrintFlags(flags, str); return str; } - - std::string MovementFlags_ToString(MovementFlags2 flags) - { - std::string str; - PrintFlags(flags, str); - return str; - } - - std::string MovementFlags_ToString(MovementFlags3 flags) - { - std::string str; - PrintFlags(flags, str); - return str; - } } diff --git a/src/server/game/Server/Packets/MovementPackets.cpp b/src/server/game/Server/Packets/MovementPackets.cpp index c037e10476..dd1d27895a 100644 --- a/src/server/game/Server/Packets/MovementPackets.cpp +++ b/src/server/game/Server/Packets/MovementPackets.cpp @@ -76,9 +76,7 @@ ByteBuffer& operator<<(ByteBuffer& data, MovementInfo const& movementInfo) bool hasFallData = hasFallDirection || movementInfo.jump.fallTime != 0; data << movementInfo.guid; - data << uint32(movementInfo.flags); - data << uint32(movementInfo.flags2); - data << uint32(movementInfo.flags3); + data << WorldPackets::As(movementInfo.flags); data << uint32(movementInfo.time); data << movementInfo.pos.PositionXYZOStream(); data << float(movementInfo.pitch); @@ -158,9 +156,7 @@ ByteBuffer& operator<<(ByteBuffer& data, MovementInfo const& movementInfo) ByteBuffer& operator>>(ByteBuffer& data, MovementInfo& movementInfo) { data >> movementInfo.guid; - data >> movementInfo.flags; - data >> movementInfo.flags2; - data >> movementInfo.flags3; + data >> WorldPackets::As(movementInfo.flags); data >> movementInfo.time; data >> movementInfo.pos.PositionXYZOStream(); data >> movementInfo.pitch; diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 5f355d46e4..df7ab77c8d 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -1536,7 +1536,7 @@ void Spell::SelectImplicitCasterDestTargets(SpellEffectInfo const& spellEffectIn { angle = [&]() { - switch (m_caster->m_movementInfo.GetMovementFlags() & (MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT)) + switch (uint64(m_caster->m_movementInfo.GetMovementFlags() & (MOVEMENTFLAG_FORWARD | MOVEMENTFLAG_BACKWARD | MOVEMENTFLAG_STRAFE_LEFT | MOVEMENTFLAG_STRAFE_RIGHT))) { case MOVEMENTFLAG_NONE: case MOVEMENTFLAG_FORWARD: diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index eb70102626..fcb8e462fc 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -2416,9 +2416,8 @@ SpellCastResult SpellInfo::CheckTarget(WorldObject const* caster, WorldObject co if (unitTarget->GetSpellOtherImmunityMask().HasFlag(SpellOtherImmunity::AoETarget)) return SPELL_FAILED_BAD_TARGETS; - if (HasAttribute(SPELL_ATTR9_TARGET_MUST_BE_GROUNDED) && - (unitTarget->HasUnitMovementFlag(MOVEMENTFLAG_FALLING | MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING | MOVEMENTFLAG_HOVER) || - unitTarget->HasExtraUnitMovementFlag2(MOVEMENTFLAG3_ADV_FLYING))) + if (HasAttribute(SPELL_ATTR9_TARGET_MUST_BE_GROUNDED) + && unitTarget->HasUnitMovementFlag(MOVEMENTFLAG_FALLING | MOVEMENTFLAG_SWIMMING | MOVEMENTFLAG_FLYING | MOVEMENTFLAG_HOVER | MOVEMENTFLAG_ADV_FLYING)) return SPELL_FAILED_TARGET_NOT_GROUNDED; } // corpse specific target checks diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index 16e7c08b87..4637466bd3 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -44,6 +44,7 @@ EndScriptData */ #include "M2Stores.h" #include "MapManager.h" #include "MovementPackets.h" +#include "MovementTypedefs.h" #include "ObjectAccessor.h" #include "ObjectMgr.h" #include "PhasingHandler.h" @@ -1197,7 +1198,7 @@ public: return true; } - static bool HandleDebugMoveflagsCommand(ChatHandler* handler, Optional moveFlags, Optional moveFlagsExtra, Optional moveFlagsExtra2) + static bool HandleDebugMoveflagsCommand(ChatHandler* handler, Optional moveFlags) { Unit* target = handler->getSelectedUnit(); if (!target) @@ -1206,17 +1207,11 @@ public: if (!moveFlags) { //! Display case - handler->PSendSysMessage(LANG_MOVEFLAGS_GET, target->GetUnitMovementFlags(), target->GetExtraUnitMovementFlags()); + handler->PSendSysMessage(LANG_MOVEFLAGS_GET, target->GetUnitMovementFlags(), Movement::MovementFlags_ToString(target->GetUnitMovementFlags())); } else { - target->SetUnitMovementFlags(*moveFlags); - - if (moveFlagsExtra) - target->SetExtraUnitMovementFlags(*moveFlagsExtra); - - if (moveFlagsExtra2) - target->SetExtraUnitMovementFlags2(*moveFlagsExtra2); + target->SetUnitMovementFlags(MovementFlags(*moveFlags)); if (target->GetTypeId() != TYPEID_PLAYER) target->DestroyForNearbyPlayers(); // Force new SMSG_UPDATE_OBJECT:CreateObject @@ -1227,7 +1222,7 @@ public: target->SendMessageToSet(moveUpdate.Write(), true); } - handler->PSendSysMessage(LANG_MOVEFLAGS_SET, target->GetUnitMovementFlags(), target->GetExtraUnitMovementFlags()); + handler->PSendSysMessage(LANG_MOVEFLAGS_SET, target->GetUnitMovementFlags(), Movement::MovementFlags_ToString(target->GetUnitMovementFlags())); } return true;