Scripts/Misc: Replace manual jumps with proper spells (or non-jump movement where there should be no jumps)

This commit is contained in:
Shauren
2025-11-23 00:19:43 +01:00
parent b1ab5b7d62
commit faab5afaf4
6 changed files with 36 additions and 33 deletions

View File

@@ -0,0 +1 @@
UPDATE `vehicle_seat_addon` SET `ExitParamX`=1299.1362, `ExitParamY`=1207.2826, `ExitParamZ`=58.477764, `ExitParamO`=3.054326057434082031 WHERE `SeatEntry`=8420;

View File

@@ -20,12 +20,11 @@
#include "Battleground.h"
#include "GameObject.h"
#include "GameObjectAI.h"
#include "Map.h"
#include "MotionMaster.h"
#include "ObjectAccessor.h"
#include "PassiveAI.h"
#include "Player.h"
#include "ScriptedCreature.h"
#include "Spell.h"
#include "SpellInfo.h"
#include "SpellScript.h"
#include "Vehicle.h"

View File

@@ -1617,8 +1617,6 @@ struct go_silverpine_abandoned_outhouse : public GameObjectAI
Position const YorickReadyPosition = { 1313.7f, 1211.99f, 58.5f, 4.564474f };
Position const YorickDeathPosition = { 1295.52f, 1206.58f, 58.501f };
enum DeathstalkerRaneYorick
{
PHASE_WAITING_TO_EXSANGUINATE = 265,
@@ -1822,7 +1820,6 @@ struct npc_silverpine_deathstalker_rane_yorick : public ScriptedAI
}
case EVENT_RANE_LAST_MOVE:
me->GetMotionMaster()->MoveJump(YorickDeathPosition, 10.0f, 10.0f);
DoCastSelf(SPELL_PERMANENT_FEIGN_DEATH);
_events.ScheduleEvent(EVENT_RANE_LAST_MOVE + 1, 2s);
break;
@@ -3937,7 +3934,6 @@ struct npc_silverpine_skitterweb_matriarch : public ScriptedAI
void JustAppeared() override
{
me->SetDisableGravity(true);
me->SetHover(true);
_lurkingOnCeilingPos = me->GetPosition();
@@ -3953,16 +3949,9 @@ struct npc_silverpine_skitterweb_matriarch : public ScriptedAI
void JustReachedHome() override
{
me->SetDisableGravity(true);
me->SetHover(true);
me->SetFacingTo(0.820305f);
me->CastSpell(nullptr, SPELL_SKITTERWEB, true);
me->SetAIAnimKitId(ANIMKIT_MATRIARCH_HANGING_BY_WEB);
me->GetMotionMaster()->MoveJump(_lurkingOnCeilingPos, 8.0f, 8.0f);
_events.ScheduleEvent(EVENT_RESET_POSITION, 1s + 500ms);
_events.ScheduleEvent(EVENT_RESET_POSITION, 1s);
}
void JustSummoned(Creature* summon) override
@@ -3993,13 +3982,11 @@ struct npc_silverpine_skitterweb_matriarch : public ScriptedAI
{
case EVENT_MATRIARCH_AGGRO:
me->SetDisableGravity(false);
me->SetHover(false);
me->GetMotionMaster()->MoveFall();
_events.ScheduleEvent(EVENT_MATRIARCH_AGGRO + 1, 1s);
break;
case EVENT_MATRIARCH_AGGRO + 1:
me->PlayOneShotAnimKitId(ANIMKIT_MATRIARCH_INTERACT);
me->CastStop();
me->SetHomePosition(me->GetPosition());
_events.ScheduleEvent(EVENT_MATRIARCH_AGGRO + 2, 1s + 500ms);
@@ -4011,8 +3998,10 @@ struct npc_silverpine_skitterweb_matriarch : public ScriptedAI
break;
case EVENT_RESET_POSITION:
me->SetFacingTo(0.820305f);
me->SetDisableGravity(true);
me->NearTeleportTo(_lurkingOnCeilingPos);
me->SetHomePosition(me->GetPosition());
me->CastSpell(nullptr, SPELL_SKITTERWEB, true);
me->SetAIAnimKitId(ANIMKIT_MATRIARCH_LURKING_ON_CEILING);
break;

View File

@@ -38,6 +38,7 @@ enum AIs
enum Spells
{
// generic
SPELL_LEAP = 67382, // intro
SPELL_ANTI_AOE = 68595,
SPELL_PVP_TRINKET = 65547,
@@ -482,13 +483,13 @@ struct boss_toc_champion_controller : public BossAI
if (playerTeam == ALLIANCE)
{
champion->SetHomePosition(vChampionJumpTarget[pos].GetPositionX(), vChampionJumpTarget[pos].GetPositionY(), vChampionJumpTarget[pos].GetPositionZ(), 0);
champion->GetMotionMaster()->MoveJump(vChampionJumpTarget[pos], 20.0f, 20.0f);
champion->SetOrientation(0);
champion->CastSpell(vChampionJumpTarget[pos], SPELL_LEAP);
}
else
{
champion->SetHomePosition((ToCCommonLoc[1].GetPositionX()*2)-vChampionJumpTarget[pos].GetPositionX(), vChampionJumpTarget[pos].GetPositionY(), vChampionJumpTarget[pos].GetPositionZ(), 3);
champion->GetMotionMaster()->MoveJump({ (ToCCommonLoc[1].GetPositionX() * 2) - vChampionJumpTarget[pos].GetPositionX(), vChampionJumpTarget[pos].GetPositionY(), vChampionJumpTarget[pos].GetPositionZ() }, 20.0f, 20.0f);
Position jumpTarget = { (ToCCommonLoc[1].GetPositionX() * 2) - vChampionJumpTarget[pos].GetPositionX(), vChampionJumpTarget[pos].GetPositionY(), vChampionJumpTarget[pos].GetPositionZ(), 3 };
champion->SetHomePosition(jumpTarget);
champion->CastSpell(jumpTarget, SPELL_LEAP);
champion->SetOrientation(3);
}
}

View File

@@ -74,8 +74,6 @@ enum MaexxnaData
DATA_WEBWRAP_VICTIM_GUID = 0
};
const float WEB_WRAP_MOVE_SPEED = 20.0f;
struct WebTargetSelector
{
WebTargetSelector(Unit* maexxna) : _maexxna(maexxna) {}
@@ -147,10 +145,7 @@ struct boss_maexxna : public BossAI
target->RemoveAura(SPELL_WEB_SPRAY);
if (Creature* wrap = DoSummon(NPC_WEB_WRAP, WrapPositions[wrapPos], 70s, TEMPSUMMON_TIMED_DESPAWN))
{
wrap->AI()->SetGUID(target->GetGUID(), DATA_WEBWRAP_VICTIM_GUID); // handles application of debuff
target->GetMotionMaster()->MoveJump(WrapPositions[wrapPos], WEB_WRAP_MOVE_SPEED, WEB_WRAP_MOVE_SPEED); // move after stun to avoid stun cancelling move
}
}
}
events.Repeat(Seconds(40));
@@ -204,8 +199,29 @@ struct npc_webwrap : public NullCreatureAI
victimGUID = guid;
if (Unit* victim = ObjectAccessor::GetUnit(*me, victimGUID))
{
visibleTimer = (me->GetDistance2d(victim) / WEB_WRAP_MOVE_SPEED + 0.5f) * AsUnderlyingType(IN_MILLISECONDS);
victim->CastSpell(victim, SPELL_WEB_WRAP, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
uint32 spellId = 28621;
// TODO: not fully correct - should be using different set of script_effect spells first (29280, 29281, 29282, 29283, 29285, 29287)
float dist = me->GetDistance2d(victim);
float speed = 50.0f;
if (dist <= 20.0f)
{
spellId = 28618;
speed = 20.0f;
}
else if (dist <= 30.0f)
{
spellId = 28619;
speed = 30.0f;
}
else if (dist <= 40.0f)
{
spellId = 28620;
speed = 40.0f;
}
visibleTimer = (me->GetDistance2d(victim) / speed + 0.5f) * AsUnderlyingType(IN_MILLISECONDS);
victim->CastSpell(victim, spellId, CastSpellExtraArgs(TRIGGERED_FULL_MASK)
.SetOriginalCaster(me->GetGUID()));
}
}

View File

@@ -138,11 +138,8 @@ public:
me->AddAura(SPELL_JULES_GOES_PRONE, me);
me->AddAura(SPELL_JULES_THREATENS_AURA, me);
me->SetCanFly(true);
me->SetSpeedRate(MOVE_RUN, 0.2f);
me->SetFacingTo(3.207566f);
me->GetMotionMaster()->MoveJump(exorcismPos[2], 2.0f, 2.0f);
me->GetMotionMaster()->MovePoint(11, exorcismPos[2], false, {}, 1.25f);
success = false;