Scripts/Ebon Hold: Massacre At Light's Point (#24106)

* Scripts/Ebon Hold: Massacre At Light's Point

* Update 9999_99_99_99_world.sql

* Final stuff

* Rename 9999_99_99_99_world.sql to 2020_02_22_00_world.sql

Co-authored-by: Eridium <6587064+Killyana@users.noreply.github.com>
Co-authored-by: Giacomo Pozzoni <giacomopoz@gmail.com>
(cherry picked from commit 0f265b4af6)
This commit is contained in:
Sorikoff
2020-02-22 22:05:50 +02:00
committed by Shauren
parent fa6902cd28
commit f0f7cecc01
2 changed files with 88 additions and 230 deletions

View File

@@ -1070,7 +1070,6 @@ public:
}
}
};
};
enum GiftOfTheHarvester
@@ -1107,233 +1106,6 @@ class spell_gift_of_the_harvester : public SpellScript
}
};
/*####
## npc_scarlet_miner_cart
####*/
enum ScarletMinerCart
{
SPELL_CART_CHECK = 54173,
SPELL_SUMMON_CART = 52463,
SPELL_SUMMON_MINER = 52464,
SPELL_CART_DRAG = 52465,
NPC_MINER = 28841
};
class npc_scarlet_miner_cart : public CreatureScript
{
public:
npc_scarlet_miner_cart() : CreatureScript("npc_scarlet_miner_cart") { }
struct npc_scarlet_miner_cartAI : public PassiveAI
{
npc_scarlet_miner_cartAI(Creature* creature) : PassiveAI(creature)
{
me->SetDisplayFromModel(0); // Modelid2
}
void JustSummoned(Creature* summon) override
{
if (summon->GetEntry() == NPC_MINER)
{
_minerGUID = summon->GetGUID();
summon->AI()->SetGUID(_playerGUID);
}
}
void SummonedCreatureDespawn(Creature* summon) override
{
if (summon->GetEntry() == NPC_MINER)
_minerGUID.Clear();
}
void DoAction(int32 /*param*/) override
{
if (Creature* miner = ObjectAccessor::GetCreature(*me, _minerGUID))
{
me->SetWalk(false);
// Not 100% correct, but movement is smooth. Sometimes miner walks faster
// than normal, this speed is fast enough to keep up at those times.
me->SetSpeedRate(MOVE_RUN, 1.25f);
me->GetMotionMaster()->MoveFollow(miner, 1.0f, 0);
}
}
void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override
{
if (apply)
{
_playerGUID = who->GetGUID();
me->CastSpell(nullptr, SPELL_SUMMON_MINER, true);
}
else
{
_playerGUID.Clear();
if (Creature* miner = ObjectAccessor::GetCreature(*me, _minerGUID))
miner->DespawnOrUnsummon();
}
}
private:
ObjectGuid _minerGUID;
ObjectGuid _playerGUID;
};
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_scarlet_miner_cartAI(creature);
}
};
/*####
## npc_scarlet_miner
####*/
enum Says_SM
{
SAY_SCARLET_MINER_0 = 0,
SAY_SCARLET_MINER_1 = 1
};
class npc_scarlet_miner : public CreatureScript
{
public:
npc_scarlet_miner() : CreatureScript("npc_scarlet_miner") { }
struct npc_scarlet_minerAI : public EscortAI
{
npc_scarlet_minerAI(Creature* creature) : EscortAI(creature)
{
Initialize();
me->SetReactState(REACT_PASSIVE);
}
void Initialize()
{
carGUID.Clear();
IntroTimer = 0;
IntroPhase = 0;
}
uint32 IntroTimer;
uint32 IntroPhase;
ObjectGuid carGUID;
void Reset() override
{
Initialize();
}
void IsSummonedBy(WorldObject* summoner) override
{
carGUID = summoner->GetGUID();
}
void InitWaypoint()
{
AddWaypoint(1, 2389.03f, -5902.74f, 109.014f, 0.f, 5000);
AddWaypoint(2, 2341.812012f, -5900.484863f, 102.619743f);
AddWaypoint(3, 2306.561279f, -5901.738281f, 91.792419f);
AddWaypoint(4, 2300.098389f, -5912.618652f, 86.014885f);
AddWaypoint(5, 2294.142090f, -5927.274414f, 75.316849f);
AddWaypoint(6, 2286.984375f, -5944.955566f, 63.714966f);
AddWaypoint(7, 2280.001709f, -5961.186035f, 54.228283f);
AddWaypoint(8, 2259.389648f, -5974.197754f, 42.359348f);
AddWaypoint(9, 2242.882812f, -5984.642578f, 32.827850f);
AddWaypoint(10, 2217.265625f, -6028.959473f, 7.675705f);
AddWaypoint(11, 2202.595947f, -6061.325684f, 5.882018f);
AddWaypoint(12, 2188.974609f, -6080.866699f, 3.370027f);
if (urand(0, 1))
{
AddWaypoint(13, 2176.483887f, -6110.407227f, 1.855181f);
AddWaypoint(14, 2172.516602f, -6146.752441f, 1.074235f);
AddWaypoint(15, 2138.918457f, -6158.920898f, 1.342926f);
AddWaypoint(16, 2129.866699f, -6174.107910f, 4.380779f);
AddWaypoint(17, 2117.709473f, -6193.830078f, 13.3542f, 0.f, 10000);
}
else
{
AddWaypoint(13, 2184.190186f, -6166.447266f, 0.968877f);
AddWaypoint(14, 2234.265625f, -6163.741211f, 0.916021f);
AddWaypoint(15, 2268.071777f, -6158.750977f, 1.822252f);
AddWaypoint(16, 2270.028320f, -6176.505859f, 6.340538f);
AddWaypoint(17, 2271.739014f, -6195.401855f, 13.3542f, 0.f, 10000);
}
}
void SetGUID(ObjectGuid const& guid, int32 /*id*/) override
{
InitWaypoint();
Start(false, false, guid);
SetDespawnAtFar(false);
}
void WaypointReached(uint32 waypointId, uint32 /*pathId*/) override
{
switch (waypointId)
{
case 1:
if (Unit* car = ObjectAccessor::GetCreature(*me, carGUID))
me->SetFacingToObject(car);
Talk(SAY_SCARLET_MINER_0);
SetRun(true);
IntroTimer = 4000;
IntroPhase = 1;
break;
case 17:
if (Unit* car = ObjectAccessor::GetCreature(*me, carGUID))
{
me->SetFacingToObject(car);
car->Relocate(car->GetPositionX(), car->GetPositionY(), me->GetPositionZ() + 1);
car->StopMoving();
car->RemoveAura(SPELL_CART_DRAG);
}
Talk(SAY_SCARLET_MINER_1);
break;
default:
break;
}
}
void UpdateAI(uint32 diff) override
{
if (IntroPhase)
{
if (IntroTimer <= diff)
{
if (IntroPhase == 1)
{
if (Creature* car = ObjectAccessor::GetCreature(*me, carGUID))
DoCast(car, SPELL_CART_DRAG);
IntroTimer = 800;
IntroPhase = 2;
}
else
{
if (Creature* car = ObjectAccessor::GetCreature(*me, carGUID))
car->AI()->DoAction(0);
IntroPhase = 0;
}
}
else
IntroTimer -= diff;
}
EscortAI::UpdateAI(diff);
}
};
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_scarlet_minerAI(creature);
}
};
// npc 28912 quest 17217 boss 29001 mob 29007 go 191092
void AddSC_the_scarlet_enclave_c1()
{
new npc_unworthy_initiate();
@@ -1350,6 +1122,4 @@ void AddSC_the_scarlet_enclave_c1()
new npc_dkc1_gothik();
new npc_scarlet_ghoul();
RegisterSpellScript(spell_gift_of_the_harvester);
new npc_scarlet_miner();
new npc_scarlet_miner_cart();
}