Core/Movement: Update movement flags for 12.1.0

This commit is contained in:
Shauren
2026-08-10 19:55:02 +02:00
parent 5cc473d606
commit 2e0ecc7d3c
25 changed files with 442 additions and 529 deletions
@@ -0,0 +1,3 @@
ALTER TABLE `player_condition`
CHANGE COLUMN `MovementFlags1` `MovementFlags` int NOT NULL DEFAULT 0 AFTER `PowerTypeValue`,
DROP COLUMN `MovementFlags2`;
@@ -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;
@@ -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);
+10 -4
View File
@@ -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)
{
+3 -4
View File
@@ -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
+2 -2
View File
@@ -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
};
};
+1 -1
View File
@@ -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<uint32, 4> CurrencyID;
std::array<uint32, 4> CurrencyCount;
std::array<uint32, 6> QuestKillMonster;
std::array<int32, 2> MovementFlags;
Trinity::RaceMask<int32, 2> RaceMask;
std::array<int32, 4> TraitNodeEntryID;
std::array<uint16, 4> TraitNodeEntryMinRank;
@@ -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());
+102 -23
View File
@@ -15,22 +15,113 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#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 <algorithm>
#include <vector>
// 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<ObjectGuid> 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
+2 -4
View File
@@ -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)
@@ -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 <http://www.gnu.org/licenses/>.
*/
#include "MovementInfo.h"
#include "Define.h"
#include "SmartEnum.h"
#include <stdexcept>
namespace Trinity::Impl::EnumUtilsImpl
{
/********************************************************************\
|* data for enum 'MovementFlags' in 'MovementInfo.h' auto-generated *|
\********************************************************************/
template <>
TC_API_EXPORT EnumText EnumUtils<MovementFlags>::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<MovementFlags>::Count() { return 60; }
template <>
TC_API_EXPORT MovementFlags EnumUtils<MovementFlags>::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<MovementFlags>::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");
}
}
}
+1 -1
View File
@@ -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
+37 -37
View File
@@ -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: <none>\n")
<< "GetCharmedGUID(): " << GetCharmedGUID().ToString() << "\n"
+5 -17
View File
@@ -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;
@@ -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,
@@ -625,277 +625,4 @@ TC_API_EXPORT size_t EnumUtils<NPCFlags2>::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<MovementFlags>::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<MovementFlags>::Count() { return 31; }
template <>
TC_API_EXPORT MovementFlags EnumUtils<MovementFlags>::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<MovementFlags>::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<MovementFlags2>::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<MovementFlags2>::Count() { return 19; }
template <>
TC_API_EXPORT MovementFlags2 EnumUtils<MovementFlags2>::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<MovementFlags2>::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<MovementFlags3>::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<MovementFlags3>::Count() { return 8; }
template <>
TC_API_EXPORT MovementFlags3 EnumUtils<MovementFlags3>::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<MovementFlags3>::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");
}
}
}
+5 -5
View File
@@ -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();
}
+4 -4
View File
@@ -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())
@@ -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
@@ -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<float>(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
@@ -16,6 +16,7 @@
*/
#include "MoveSplineFlag.h"
#include "MovementInfo.h"
#include "MovementTypedefs.h"
#include "SmartEnum.h"
#include <cmath>
@@ -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;
}
}
@@ -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<uint64>(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<uint64>(movementInfo.flags);
data >> movementInfo.time;
data >> movementInfo.pos.PositionXYZOStream();
data >> movementInfo.pitch;
+1 -1
View File
@@ -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:
+2 -3
View File
@@ -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
+5 -10
View File
@@ -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<uint32> moveFlags, Optional<uint32> moveFlagsExtra, Optional<uint32> moveFlagsExtra2)
static bool HandleDebugMoveflagsCommand(ChatHandler* handler, Optional<uint64> 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;