aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Unit/UnitDefines.h29
-rw-r--r--src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp21
-rw-r--r--src/server/game/Movement/Spline/MoveSplineFlag.h6
-rw-r--r--src/server/game/Movement/Spline/MovementUtil.cpp2
4 files changed, 31 insertions, 27 deletions
diff --git a/src/server/game/Entities/Unit/UnitDefines.h b/src/server/game/Entities/Unit/UnitDefines.h
index 0e51bc6525d..91a10a5b9c5 100644
--- a/src/server/game/Entities/Unit/UnitDefines.h
+++ b/src/server/game/Entities/Unit/UnitDefines.h
@@ -333,21 +333,22 @@ DEFINE_ENUM_FLAG(NPCFlags);
// EnumUtils: DESCRIBE THIS
enum NPCFlags2 : uint32
{
- UNIT_NPC_FLAG_2_NONE = 0x00000000,
- UNIT_NPC_FLAG_2_ITEM_UPGRADE_MASTER = 0x00000001, // TITLE is item upgrade
- UNIT_NPC_FLAG_2_GARRISON_ARCHITECT = 0x00000002, // TITLE is garrison architect DESCRIPTION garrison building placement UI
- UNIT_NPC_FLAG_2_STEERING = 0x00000004, // TITLE is avoiding obstacles DESCRIPTION clientside pathfinding
- UNIT_NPC_FLAG_2_AREA_SPIRIT_HEALER_INDIVIDUAL = 0x00000008, // TITLE is area spirit healer individual DESCRIPTION area spirit healer with individual timers
- UNIT_NPC_FLAG_2_SHIPMENT_CRAFTER = 0x00000010, // TITLE is shipment crafter DESCRIPTION garrison work orders
- UNIT_NPC_FLAG_2_GARRISON_MISSION_NPC = 0x00000020, // TITLE is garrison mission
- UNIT_NPC_FLAG_2_TRADESKILL_NPC = 0x00000040, // TITLE is tradeskill DESCRIPTION crafting at npc
- UNIT_NPC_FLAG_2_BLACK_MARKET_VIEW = 0x00000080, // TITLE is black market view DESCRIPTION only allows viewing black market auctions, no bidding
- UNIT_NPC_FLAG_2_GARRISON_TALENT_NPC = 0x00000200, // TITLE is garrrison talent
- UNIT_NPC_FLAG_2_CONTRIBUTION_COLLECTOR = 0x00000400, // TITLE is contribution collector
- UNIT_NPC_FLAG_2_AZERITE_RESPEC = 0x00004000, // TITLE is azerite respec
- UNIT_NPC_FLAG_2_ISLANDS_QUEUE = 0x00008000, // TITLE is islands queue
+ UNIT_NPC_FLAG_2_NONE = 0x00000000,
+ UNIT_NPC_FLAG_2_ITEM_UPGRADE_MASTER = 0x00000001, // TITLE is item upgrade
+ UNIT_NPC_FLAG_2_GARRISON_ARCHITECT = 0x00000002, // TITLE is garrison architect DESCRIPTION garrison building placement UI
+ UNIT_NPC_FLAG_2_STEERING = 0x00000004, // TITLE is avoiding obstacles DESCRIPTION clientside pathfinding
+ UNIT_NPC_FLAG_2_AREA_SPIRIT_HEALER_INDIVIDUAL = 0x00000008, // TITLE is area spirit healer individual DESCRIPTION area spirit healer with individual timers
+ UNIT_NPC_FLAG_2_SHIPMENT_CRAFTER = 0x00000010, // TITLE is shipment crafter DESCRIPTION garrison work orders
+ UNIT_NPC_FLAG_2_GARRISON_MISSION_NPC = 0x00000020, // TITLE is garrison mission
+ UNIT_NPC_FLAG_2_TRADESKILL_NPC = 0x00000040, // TITLE is tradeskill DESCRIPTION crafting at npc
+ UNIT_NPC_FLAG_2_BLACK_MARKET_VIEW = 0x00000080, // TITLE is black market view DESCRIPTION only allows viewing black market auctions, no bidding
+ UNIT_NPC_FLAG_2_GARRISON_TALENT_NPC = 0x00000200, // TITLE is garrrison talent
+ UNIT_NPC_FLAG_2_CONTRIBUTION_COLLECTOR = 0x00000400, // TITLE is contribution collector
+ UNIT_NPC_FLAG_2_FAST_STEERING_AVOIDS_OBSTACLES = 0x00002000, // TITLE enables avoiding obstacles when FastSteering spline flag is set
+ UNIT_NPC_FLAG_2_AZERITE_RESPEC = 0x00004000, // TITLE is azerite respec
+ UNIT_NPC_FLAG_2_ISLANDS_QUEUE = 0x00008000, // TITLE is islands queue
UNIT_NPC_FLAG_2_SUPPRESS_NPC_SOUNDS_EXCEPT_END_OF_INTERACTION = 0x00010000,
- UNIT_NPC_FLAG_2_PERSONAL_TABARD_DESIGNER= 0x00200000, // TITLE is personal tabard designer
+ UNIT_NPC_FLAG_2_PERSONAL_TABARD_DESIGNER = 0x00200000, // TITLE is personal tabard designer
};
DEFINE_ENUM_FLAG(NPCFlags2);
diff --git a/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp b/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp
index 3979882e32c..3a9b8d1a5b0 100644
--- a/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp
+++ b/src/server/game/Entities/Unit/enuminfo_UnitDefines.cpp
@@ -561,6 +561,7 @@ TC_API_EXPORT EnumText EnumUtils<NPCFlags2>::ToString(NPCFlags2 value)
case UNIT_NPC_FLAG_2_BLACK_MARKET_VIEW: return { "UNIT_NPC_FLAG_2_BLACK_MARKET_VIEW", "is black market view", "only allows viewing black market auctions, no bidding" };
case UNIT_NPC_FLAG_2_GARRISON_TALENT_NPC: return { "UNIT_NPC_FLAG_2_GARRISON_TALENT_NPC", "is garrrison talent", "" };
case UNIT_NPC_FLAG_2_CONTRIBUTION_COLLECTOR: return { "UNIT_NPC_FLAG_2_CONTRIBUTION_COLLECTOR", "is contribution collector", "" };
+ case UNIT_NPC_FLAG_2_FAST_STEERING_AVOIDS_OBSTACLES: return { "UNIT_NPC_FLAG_2_FAST_STEERING_AVOIDS_OBSTACLES", "enables avoiding obstacles when FastSteering spline flag is set", "" };
case UNIT_NPC_FLAG_2_AZERITE_RESPEC: return { "UNIT_NPC_FLAG_2_AZERITE_RESPEC", "is azerite respec", "" };
case UNIT_NPC_FLAG_2_ISLANDS_QUEUE: return { "UNIT_NPC_FLAG_2_ISLANDS_QUEUE", "is islands queue", "" };
case UNIT_NPC_FLAG_2_SUPPRESS_NPC_SOUNDS_EXCEPT_END_OF_INTERACTION: return { "UNIT_NPC_FLAG_2_SUPPRESS_NPC_SOUNDS_EXCEPT_END_OF_INTERACTION", "UNIT_NPC_FLAG_2_SUPPRESS_NPC_SOUNDS_EXCEPT_END_OF_INTERACTION", "" };
@@ -570,7 +571,7 @@ TC_API_EXPORT EnumText EnumUtils<NPCFlags2>::ToString(NPCFlags2 value)
}
template <>
-TC_API_EXPORT size_t EnumUtils<NPCFlags2>::Count() { return 15; }
+TC_API_EXPORT size_t EnumUtils<NPCFlags2>::Count() { return 16; }
template <>
TC_API_EXPORT NPCFlags2 EnumUtils<NPCFlags2>::FromIndex(size_t index)
@@ -588,10 +589,11 @@ TC_API_EXPORT NPCFlags2 EnumUtils<NPCFlags2>::FromIndex(size_t index)
case 8: return UNIT_NPC_FLAG_2_BLACK_MARKET_VIEW;
case 9: return UNIT_NPC_FLAG_2_GARRISON_TALENT_NPC;
case 10: return UNIT_NPC_FLAG_2_CONTRIBUTION_COLLECTOR;
- case 11: return UNIT_NPC_FLAG_2_AZERITE_RESPEC;
- case 12: return UNIT_NPC_FLAG_2_ISLANDS_QUEUE;
- case 13: return UNIT_NPC_FLAG_2_SUPPRESS_NPC_SOUNDS_EXCEPT_END_OF_INTERACTION;
- case 14: return UNIT_NPC_FLAG_2_PERSONAL_TABARD_DESIGNER;
+ case 11: return UNIT_NPC_FLAG_2_FAST_STEERING_AVOIDS_OBSTACLES;
+ case 12: return UNIT_NPC_FLAG_2_AZERITE_RESPEC;
+ case 13: return UNIT_NPC_FLAG_2_ISLANDS_QUEUE;
+ case 14: return UNIT_NPC_FLAG_2_SUPPRESS_NPC_SOUNDS_EXCEPT_END_OF_INTERACTION;
+ case 15: return UNIT_NPC_FLAG_2_PERSONAL_TABARD_DESIGNER;
default: throw std::out_of_range("index");
}
}
@@ -612,10 +614,11 @@ TC_API_EXPORT size_t EnumUtils<NPCFlags2>::ToIndex(NPCFlags2 value)
case UNIT_NPC_FLAG_2_BLACK_MARKET_VIEW: return 8;
case UNIT_NPC_FLAG_2_GARRISON_TALENT_NPC: return 9;
case UNIT_NPC_FLAG_2_CONTRIBUTION_COLLECTOR: return 10;
- case UNIT_NPC_FLAG_2_AZERITE_RESPEC: return 11;
- case UNIT_NPC_FLAG_2_ISLANDS_QUEUE: return 12;
- case UNIT_NPC_FLAG_2_SUPPRESS_NPC_SOUNDS_EXCEPT_END_OF_INTERACTION: return 13;
- case UNIT_NPC_FLAG_2_PERSONAL_TABARD_DESIGNER: return 14;
+ case UNIT_NPC_FLAG_2_FAST_STEERING_AVOIDS_OBSTACLES: return 11;
+ case UNIT_NPC_FLAG_2_AZERITE_RESPEC: return 12;
+ case UNIT_NPC_FLAG_2_ISLANDS_QUEUE: return 13;
+ case UNIT_NPC_FLAG_2_SUPPRESS_NPC_SOUNDS_EXCEPT_END_OF_INTERACTION: return 14;
+ case UNIT_NPC_FLAG_2_PERSONAL_TABARD_DESIGNER: return 15;
default: throw std::out_of_range("value");
}
}
diff --git a/src/server/game/Movement/Spline/MoveSplineFlag.h b/src/server/game/Movement/Spline/MoveSplineFlag.h
index fc4d54fdcba..5936f8d7067 100644
--- a/src/server/game/Movement/Spline/MoveSplineFlag.h
+++ b/src/server/game/Movement/Spline/MoveSplineFlag.h
@@ -55,7 +55,7 @@ namespace Movement
CanSwim = 0x00200000,
UncompressedPath = 0x00400000,
Unknown_0x800000 = 0x00800000, // NOT VERIFIED
- Unknown_0x1000000 = 0x01000000, // NOT VERIFIED
+ FastSteering = 0x01000000, // Predicts spline only 500ms into the future for smoothing instead of 1s (making turns sharper) and turns off clientside obstacle detection
Animation = 0x02000000, // Plays animation after some time passed
Parabolic = 0x04000000, // Affects elevation computation, can't be combined with Falling flag
FadeObject = 0x08000000,
@@ -69,7 +69,7 @@ namespace Movement
Mask_No_Monster_Move = Done,
// Unused, not suported flags
Mask_Unused = No_Spline | Enter_Cycle | Frozen | Unknown_0x8 | Unknown_0x100 | Unknown_0x20000 | Unknown_0x40000
- | Unknown_0x800000 | Unknown_0x1000000 | FadeObject | UnlimitedSpeed | Unknown_0x40000000 | Unknown_0x80000000
+ | Unknown_0x800000 | FastSteering | FadeObject | UnlimitedSpeed | Unknown_0x40000000 | Unknown_0x80000000
};
inline uint32& raw() { return (uint32&)*this; }
@@ -127,7 +127,7 @@ namespace Movement
bool canSwim : 1;
bool uncompressedPath : 1;
bool unknown0x800000 : 1;
- bool unknown0x1000000 : 1;
+ bool fastSteering : 1;
bool animation : 1;
bool parabolic : 1;
bool fadeObject : 1;
diff --git a/src/server/game/Movement/Spline/MovementUtil.cpp b/src/server/game/Movement/Spline/MovementUtil.cpp
index 7a6aba2bf88..15b9fbe2ab6 100644
--- a/src/server/game/Movement/Spline/MovementUtil.cpp
+++ b/src/server/game/Movement/Spline/MovementUtil.cpp
@@ -169,7 +169,7 @@ namespace Movement
STRINGIZE(CanSwim ), // 0x00200000
STRINGIZE(UncompressedPath ), // 0x00400000
STRINGIZE(Unknown_0x800000 ), // 0x00800000
- STRINGIZE(Unknown_0x1000000 ), // 0x01000000
+ STRINGIZE(FastSteering ), // 0x01000000 // Predicts spline only 500ms into the future for smoothing instead of 1s and turns off clientside obstacle detection
STRINGIZE(Animation ), // 0x02000000 // Animationid (0...3), Uint32 Time, Not Compartible With Trajectory And Fall Movement
STRINGIZE(Parabolic ), // 0x04000000 // Not Compartible With Fall Movement
STRINGIZE(FadeObject ), // 0x08000000