aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp2
-rw-r--r--src/server/game/Entities/Object/G3DPosition.hpp6
-rw-r--r--src/server/game/Garrison/Garrison.cpp13
-rw-r--r--src/server/game/Garrison/Garrison.h4
-rw-r--r--src/server/game/Handlers/GarrisonHandler.cpp7
-rw-r--r--src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp2
-rw-r--r--src/server/game/Movement/PathGenerator.cpp2
-rw-r--r--src/server/game/Movement/Spline/MoveSpline.cpp10
-rw-r--r--src/server/game/Movement/Spline/MoveSplineInit.h31
-rw-r--r--src/server/game/Movement/Spline/MoveSplineInitArgs.h4
-rw-r--r--src/server/game/Server/Packets/GarrisonPackets.h2
-rw-r--r--src/server/game/Spells/Spell.cpp2
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp2
-rw-r--r--src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp2
-rw-r--r--src/server/scripts/Spells/spell_mage.cpp22
-rw-r--r--src/server/scripts/Spells/spell_priest.cpp4
16 files changed, 66 insertions, 49 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 3102dac861e..6481325ec04 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -322,7 +322,7 @@ public:
}
dst = dst * pathRotation;
- dst += PositionToVector3(&_owner.GetStationaryPosition());
+ dst += PositionToVector3(_owner.GetStationaryPosition());
_owner.GetMap()->GameObjectRelocation(&_owner, dst.x, dst.y, dst.z, _owner.GetOrientation());
}
diff --git a/src/server/game/Entities/Object/G3DPosition.hpp b/src/server/game/Entities/Object/G3DPosition.hpp
index f83a900bcd9..9b1229c3ba0 100644
--- a/src/server/game/Entities/Object/G3DPosition.hpp
+++ b/src/server/game/Entities/Object/G3DPosition.hpp
@@ -20,10 +20,8 @@
#include "Position.h"
#include <G3D/Vector3.h>
-#include "Errors.h"
-inline G3D::Vector3 PositionToVector3(Position const& p) { return { p.m_positionX, p.m_positionY, p.m_positionZ }; }
-inline G3D::Vector3 PositionToVector3(Position const* p) { ASSERT(p); return { p->m_positionX, p->m_positionY, p->m_positionZ }; }
-inline Position Vector3ToPosition(G3D::Vector3 const& v) { return { v.x, v.y, v.z }; }
+inline constexpr auto PositionToVector3 = [](Position const& p) -> G3D::Vector3 { return { p.m_positionX, p.m_positionY, p.m_positionZ }; };
+inline constexpr auto Vector3ToPosition = [](G3D::Vector3 const& v) -> Position { return { v.x, v.y, v.z }; };
#endif
diff --git a/src/server/game/Garrison/Garrison.cpp b/src/server/game/Garrison/Garrison.cpp
index d71fe4d7474..6a9561646b6 100644
--- a/src/server/game/Garrison/Garrison.cpp
+++ b/src/server/game/Garrison/Garrison.cpp
@@ -301,7 +301,7 @@ void Garrison::Leave() const
GarrisonFactionIndex Garrison::GetFaction() const
{
- return _owner->GetTeam() == HORDE ? GARRISON_FACTION_INDEX_HORDE : GARRISON_FACTION_INDEX_ALLIANCE;
+ return GetFaction(_owner->GetTeam());
}
std::vector<Garrison::Plot*> Garrison::GetPlots()
@@ -530,20 +530,15 @@ Garrison::Follower const* Garrison::GetFollower(uint64 dbId) const
return nullptr;
}
-void Garrison::SendInfo()
+void Garrison::BuildInfoPacket(WorldPackets::Garrison::GarrisonInfo& garrison) const
{
- WorldPackets::Garrison::GetGarrisonInfoResult garrisonInfo;
- garrisonInfo.FactionIndex = GetFaction();
- garrisonInfo.Garrisons.emplace_back();
-
- WorldPackets::Garrison::GarrisonInfo& garrison = garrisonInfo.Garrisons.back();
garrison.GarrTypeID = GetType();
garrison.GarrSiteID = _siteLevel->GarrSiteID;
garrison.GarrSiteLevelID = _siteLevel->ID;
garrison.NumFollowerActivationsRemaining = _followerActivationsRemainingToday;
for (auto& p : _plots)
{
- Plot& plot = p.second;
+ Plot const& plot = p.second;
garrison.Plots.push_back(&plot.PacketInfo);
if (plot.BuildingInfo.PacketInfo)
garrison.Buildings.push_back(&*plot.BuildingInfo.PacketInfo);
@@ -551,8 +546,6 @@ void Garrison::SendInfo()
for (auto const& p : _followers)
garrison.Followers.push_back(&p.second.PacketInfo);
-
- _owner->SendDirectMessage(garrisonInfo.Write());
}
void Garrison::SendRemoteInfo() const
diff --git a/src/server/game/Garrison/Garrison.h b/src/server/game/Garrison/Garrison.h
index 3c895fef38a..65c08e5ab10 100644
--- a/src/server/game/Garrison/Garrison.h
+++ b/src/server/game/Garrison/Garrison.h
@@ -23,6 +23,7 @@
#include "GarrisonPackets.h"
#include "Optional.h"
#include "QuaternionData.h"
+#include "SharedDefines.h"
#include <unordered_map>
class GameObject;
@@ -228,6 +229,7 @@ public:
void Enter() const;
void Leave() const;
+ static constexpr GarrisonFactionIndex GetFaction(Team team) { return team == HORDE ? GARRISON_FACTION_INDEX_HORDE : GARRISON_FACTION_INDEX_ALLIANCE; }
GarrisonFactionIndex GetFaction() const;
GarrisonType GetType() const { return GARRISON_TYPE_GARRISON; }
GarrSiteLevelEntry const* GetSiteLevel() const { return _siteLevel; }
@@ -259,7 +261,7 @@ public:
return count;
}
- void SendInfo();
+ void BuildInfoPacket(WorldPackets::Garrison::GarrisonInfo& garrison) const;
void SendRemoteInfo() const;
void SendBlueprintAndSpecializationData();
void SendMapData(Player* receiver) const;
diff --git a/src/server/game/Handlers/GarrisonHandler.cpp b/src/server/game/Handlers/GarrisonHandler.cpp
index ef725a3cd39..a0a044c5236 100644
--- a/src/server/game/Handlers/GarrisonHandler.cpp
+++ b/src/server/game/Handlers/GarrisonHandler.cpp
@@ -22,8 +22,13 @@
void WorldSession::HandleGetGarrisonInfo(WorldPackets::Garrison::GetGarrisonInfo& /*getGarrisonInfo*/)
{
+ WorldPackets::Garrison::GetGarrisonInfoResult garrisonInfo;
+ garrisonInfo.FactionIndex = Garrison::GetFaction(_player->GetTeam());
+
if (Garrison* garrison = _player->GetGarrison())
- garrison->SendInfo();
+ garrison->BuildInfoPacket(garrisonInfo.Garrisons.emplace_back());
+
+ SendPacket(garrisonInfo.Write());
}
void WorldSession::HandleGarrisonPurchaseBuilding(WorldPackets::Garrison::GarrisonPurchaseBuilding& garrisonPurchaseBuilding)
diff --git a/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp
index 5575c9f6e0c..a954da2a85f 100644
--- a/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp
+++ b/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp
@@ -205,7 +205,7 @@ bool ChaseMovementGenerator::Update(Unit* owner, uint32 diff)
}
if (shortenPath)
- _path->ShortenPathUntilDist(PositionToVector3(target), maxTarget);
+ _path->ShortenPathUntilDist(PositionToVector3(target->GetPosition()), maxTarget);
if (cOwner)
cOwner->SetCannotReachTarget(false);
diff --git a/src/server/game/Movement/PathGenerator.cpp b/src/server/game/Movement/PathGenerator.cpp
index 8f44c3fcc29..04c4505f101 100644
--- a/src/server/game/Movement/PathGenerator.cpp
+++ b/src/server/game/Movement/PathGenerator.cpp
@@ -31,7 +31,7 @@
PathGenerator::PathGenerator(WorldObject const* owner) :
_polyLength(0), _type(PATHFIND_BLANK), _useStraightPath(false),
_forceDestination(false), _pointPathLimit(MAX_POINT_PATH_LENGTH), _useRaycast(false),
- _startPosition(PositionToVector3(owner)), _endPosition(G3D::Vector3::zero()), _source(owner), _navMesh(nullptr),
+ _startPosition(PositionToVector3(owner->GetPosition())), _endPosition(G3D::Vector3::zero()), _source(owner), _navMesh(nullptr),
_navMeshQuery(nullptr)
{
memset(_pathPolyRefs, 0, sizeof(_pathPolyRefs));
diff --git a/src/server/game/Movement/Spline/MoveSpline.cpp b/src/server/game/Movement/Spline/MoveSpline.cpp
index 39118263388..a317b018ed6 100644
--- a/src/server/game/Movement/Spline/MoveSpline.cpp
+++ b/src/server/game/Movement/Spline/MoveSpline.cpp
@@ -37,7 +37,7 @@ Location MoveSpline::computePosition(int32 time_point, int32 point_index) const
c.orientation = initialOrientation;
spline.evaluate_percent(point_index, u, c);
- if (splineflags.Animation)
+ if (anim_tier)
;// MoveSplineFlag::Animation disables falling or parabolic movement
else if (splineflags.Parabolic)
computeParabolicElevation(time_point, c.z);
@@ -214,10 +214,10 @@ void MoveSpline::Initialize(MoveSplineInitArgs const& args)
// init parabolic / animation
// spline initialized, duration known and i able to compute parabolic acceleration
- if (args.flags.HasFlag(MoveSplineFlagEnum::Parabolic | MoveSplineFlagEnum::Animation | MoveSplineFlagEnum::FadeObject))
+ if (args.flags.HasFlag(MoveSplineFlagEnum::Parabolic | MoveSplineFlagEnum::FadeObject) || args.animTier)
{
int32 spline_duration = Duration();
- effect_start_time = spline_duration * args.effect_start_time_percent + args.effect_start_time.count();
+ effect_start_time = spline.length(spline.first() + args.effect_start_point);
if (effect_start_time > spline_duration)
effect_start_time = spline_duration;
@@ -255,7 +255,7 @@ bool MoveSplineInitArgs::Validate(Unit const* unit)
CHECK(path.size() > 1, unit->GetDebugInfo());
CHECK(velocity >= 0.01f, unit->GetDebugInfo());
- CHECK(effect_start_time_percent >= 0.f && effect_start_time_percent <= 1.f, unit->GetDebugInfo());
+ CHECK(effect_start_point < std::ssize(path), unit->GetDebugInfo());
CHECK(_checkPathLengths(), unit->GetGUID().ToString());
if (spellEffectExtra)
{
@@ -295,7 +295,7 @@ bool MoveSplineInitArgs::_checkPathLengths()
}
MoveSplineInitArgs::MoveSplineInitArgs() : path_Idx_offset(0), velocity(0.f),
-parabolic_amplitude(0.f), vertical_acceleration(0.0f), effect_start_time_percent(0.f), effect_start_time(0ms),
+parabolic_amplitude(0.f), vertical_acceleration(0.0f), effect_start_point(0),
splineId(0), initialOrientation(0.f),
walk(false), HasVelocity(false), TransformForTransport(true)
{
diff --git a/src/server/game/Movement/Spline/MoveSplineInit.h b/src/server/game/Movement/Spline/MoveSplineInit.h
index 5035bb38fb1..2461fc1b5d3 100644
--- a/src/server/game/Movement/Spline/MoveSplineInit.h
+++ b/src/server/game/Movement/Spline/MoveSplineInit.h
@@ -52,22 +52,22 @@ namespace Movement
*/
void Stop();
- /* Adds movement by parabolic trajectory
- * @param amplitude - the maximum height of parabola, value could be negative and positive
- * @param start_time - delay between movement starting time and beginning to move by parabolic trajectory
+ /** Adds movement by parabolic trajectory
+ * @param amplitude the maximum height of parabola, value could be negative and positive
+ * @param start_point point index on the path where parabolic movement starts
* can't be combined with final animation
*/
- void SetParabolic(float amplitude, float start_time);
- /* Adds movement by parabolic trajectory
- * @param vertical_acceleration - vertical acceleration
- * @param start_time - delay between movement starting time and beginning to move by parabolic trajectory
+ void SetParabolic(float amplitude, int32 start_point);
+ /** Adds movement by parabolic trajectory
+ * @param vertical_acceleration vertical acceleration
+ * @param start_point point index on the path where parabolic movement starts
* can't be combined with final animation
*/
- void SetParabolicVerticalAcceleration(float vertical_acceleration, float start_time);
+ void SetParabolicVerticalAcceleration(float vertical_acceleration, int32 start_point);
/* Plays animation after movement done
* can't be combined with parabolic movement
*/
- void SetAnimation(AnimTier anim, uint32 tierTransitionId = 0, Milliseconds transitionStartTime = 0ms);
+ void SetAnimation(AnimTier anim, uint32 tierTransitionId = 0, int32 transitionStartPoint = 0);
/* Adds final facing animation
* sets unit's facing to specified point/angle after all path done
@@ -184,26 +184,25 @@ namespace Movement
inline void MoveSplineInit::SetSteering() { args.flags.Steering = true; }
inline void MoveSplineInit::SetUnlimitedSpeed() { args.flags.UnlimitedSpeed = true; }
- inline void MoveSplineInit::SetParabolic(float amplitude, float start_time)
+ inline void MoveSplineInit::SetParabolic(float amplitude, int32 start_point)
{
- args.effect_start_time_percent = start_time;
+ args.effect_start_point = start_point;
args.parabolic_amplitude = amplitude;
args.vertical_acceleration = 0.0f;
args.flags.Parabolic = true;
}
- inline void MoveSplineInit::SetParabolicVerticalAcceleration(float vertical_acceleration, float start_time)
+ inline void MoveSplineInit::SetParabolicVerticalAcceleration(float vertical_acceleration, int32 start_point)
{
- args.effect_start_time_percent = start_time;
+ args.effect_start_point = start_point;
args.parabolic_amplitude = 0.0f;
args.vertical_acceleration = vertical_acceleration;
args.flags.Parabolic = true;
}
- inline void MoveSplineInit::SetAnimation(AnimTier anim, uint32 tierTransitionId /*= 0*/, Milliseconds transitionStartTime /*= 0ms*/)
+ inline void MoveSplineInit::SetAnimation(AnimTier anim, uint32 tierTransitionId /*= 0*/, int32 transitionStartPoint /*= 0*/)
{
- args.effect_start_time_percent = 0.f;
- args.effect_start_time = transitionStartTime;
+ args.effect_start_point = transitionStartPoint;
args.animTier.emplace();
args.animTier->TierTransitionId = tierTransitionId;
args.animTier->AnimTier = anim;
diff --git a/src/server/game/Movement/Spline/MoveSplineInitArgs.h b/src/server/game/Movement/Spline/MoveSplineInitArgs.h
index 46cd0779e21..724ae2ccee7 100644
--- a/src/server/game/Movement/Spline/MoveSplineInitArgs.h
+++ b/src/server/game/Movement/Spline/MoveSplineInitArgs.h
@@ -18,7 +18,6 @@
#ifndef TRINITYSERVER_MOVESPLINEINIT_ARGS_H
#define TRINITYSERVER_MOVESPLINEINIT_ARGS_H
-#include "Duration.h"
#include "MoveSplineFlag.h"
#include "MovementTypedefs.h"
#include "ObjectGuid.h"
@@ -80,8 +79,7 @@ namespace Movement
float velocity;
float parabolic_amplitude;
float vertical_acceleration;
- float effect_start_time_percent; // fraction of total spline duration
- Milliseconds effect_start_time; // absolute value
+ int32 effect_start_point;
uint32 splineId;
float initialOrientation;
Optional<SpellEffectExtraData> spellEffectExtra;
diff --git a/src/server/game/Server/Packets/GarrisonPackets.h b/src/server/game/Server/Packets/GarrisonPackets.h
index 3e2df57f33d..28a71884db3 100644
--- a/src/server/game/Server/Packets/GarrisonPackets.h
+++ b/src/server/game/Server/Packets/GarrisonPackets.h
@@ -203,7 +203,7 @@ namespace WorldPackets
uint32 NumFollowerActivationsRemaining = 0;
uint32 NumMissionsStartedToday = 0; // might mean something else, but sending 0 here enables follower abilities "Increase success chance of the first mission of the day by %."
int32 MinAutoTroopLevel = 0;
- std::vector<GarrisonPlotInfo*> Plots;
+ std::vector<GarrisonPlotInfo const*> Plots;
std::vector<GarrisonBuildingInfo const*> Buildings;
std::vector<GarrisonFollower const*> Followers;
std::vector<GarrisonFollower const*> AutoTroops;
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 3904b81a472..50db01b3fec 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -6393,7 +6393,7 @@ SpellCastResult Spell::CheckCast(bool strict, int32* param1 /*= nullptr*/, int32
else if (m_preGeneratedPath->IsInvalidDestinationZ(target)) // Check position z, if not in a straight line
return SPELL_FAILED_NOPATH;
- m_preGeneratedPath->ShortenPathUntilDist(PositionToVector3(target), objSize); // move back
+ m_preGeneratedPath->ShortenPathUntilDist(PositionToVector3(target->GetPosition()), objSize); // move back
}
break;
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
index 1f2ebb020c9..01bd394f43c 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
@@ -330,7 +330,7 @@ struct boss_razorscale : public BossAI
std::function<void(Movement::MoveSplineInit&)> initializer = [](Movement::MoveSplineInit& init)
{
Movement::PointsArray path(std::size(RazorscalePath));
- std::transform(std::begin(RazorscalePath), std::end(RazorscalePath), path.begin(), [](Position pos) { return PositionToVector3(pos); });
+ std::ranges::transform(RazorscalePath, path.begin(), PositionToVector3);
init.MovebyPath(path, 0);
init.SetCyclic();
init.SetFly();
diff --git a/src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp b/src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp
index 4e0236a8963..fe5996968e4 100644
--- a/src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp
+++ b/src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp
@@ -2999,7 +2999,7 @@ struct at_anduin_wrynn_empowered_wicked_star : public at_anduin_wrynn_wicked_sta
at->MovePositionToFirstCollision(destPos, 100.0f, angle);
std::vector<G3D::Vector3> splinePoints;
- splinePoints.push_back(PositionToVector3(at));
+ splinePoints.push_back(PositionToVector3(at->GetPosition()));
splinePoints.push_back(PositionToVector3(destPos));
at->InitSplines(splinePoints);
diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp
index 80c741fc389..e6462e46257 100644
--- a/src/server/scripts/Spells/spell_mage.cpp
+++ b/src/server/scripts/Spells/spell_mage.cpp
@@ -68,6 +68,7 @@ enum MageSpells
SPELL_MAGE_FIRE_BLAST = 108853,
SPELL_MAGE_FIRESTARTER = 205026,
SPELL_MAGE_FLAMESTRIKE = 2120,
+ SPELL_MAGE_FLAME_ACCELERANT = 453283,
SPELL_MAGE_FLAME_PATCH_AREATRIGGER = 205470,
SPELL_MAGE_FLAME_PATCH_DAMAGE = 205472,
SPELL_MAGE_FLAME_PATCH_TALENT = 205037,
@@ -812,6 +813,26 @@ class spell_mage_fire_blast : public SpellScript
}
};
+// 453282 - Flame Accelerant
+class spell_mage_flame_accelerant : public AuraScript
+{
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_MAGE_FLAME_ACCELERANT });
+ }
+
+ void HandlePeriodicTick(AuraEffect const* /*aurEff*/) const
+ {
+ Unit* target = GetTarget();
+ target->CastSpell(target, SPELL_MAGE_FLAME_ACCELERANT, TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR);
+ }
+
+ void Register() override
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_mage_flame_accelerant::HandlePeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
+ }
+};
+
// 205029 - Flame On
class spell_mage_flame_on : public AuraScript
{
@@ -2116,6 +2137,7 @@ void AddSC_mage_spell_scripts()
RegisterSpellScript(spell_mage_firestarter);
RegisterSpellScript(spell_mage_firestarter_dots);
RegisterSpellScript(spell_mage_fire_blast);
+ RegisterSpellScript(spell_mage_flame_accelerant);
RegisterSpellScript(spell_mage_flame_on);
RegisterSpellScript(spell_mage_flame_patch);
RegisterAreaTriggerAI(at_mage_flame_patch);
diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp
index ab79773e642..d214753fee3 100644
--- a/src/server/scripts/Spells/spell_priest.cpp
+++ b/src/server/scripts/Spells/spell_priest.cpp
@@ -1130,8 +1130,8 @@ struct areatrigger_pri_divine_star : AreaTriggerAI
Movement::PointsArray returnSplinePoints;
- returnSplinePoints.push_back(PositionToVector3(at));
- returnSplinePoints.push_back(PositionToVector3(caster));
+ returnSplinePoints.push_back(PositionToVector3(at->GetPosition()));
+ returnSplinePoints.push_back(PositionToVector3(caster->GetPosition()));
at->InitSplines(returnSplinePoints);