diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/G3DPosition.hpp | 6 | ||||
| -rw-r--r-- | src/server/game/Garrison/Garrison.cpp | 13 | ||||
| -rw-r--r-- | src/server/game/Garrison/Garrison.h | 4 | ||||
| -rw-r--r-- | src/server/game/Handlers/GarrisonHandler.cpp | 7 | ||||
| -rw-r--r-- | src/server/game/Movement/MovementGenerators/ChaseMovementGenerator.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Movement/PathGenerator.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Movement/Spline/MoveSpline.cpp | 10 | ||||
| -rw-r--r-- | src/server/game/Movement/Spline/MoveSplineInit.h | 31 | ||||
| -rw-r--r-- | src/server/game/Movement/Spline/MoveSplineInitArgs.h | 4 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/GarrisonPackets.h | 2 | ||||
| -rw-r--r-- | src/server/game/Spells/Spell.cpp | 2 | ||||
| -rw-r--r-- | src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp | 2 | ||||
| -rw-r--r-- | src/server/scripts/Shadowlands/SepulcherOfTheFirstOnes/boss_anduin_wrynn.cpp | 2 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_mage.cpp | 22 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_priest.cpp | 4 |
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); |
