Scripts/Borean Tundra: Plug the Sinkholes (#24085)

* Scripts/Borean Tundra: Plug the Sinkholes

* Scripts/Borean Tundra: Improve SQL

* Scripts/Borean Tundra: Remove item script

* Rename 9999_99_99_99_world.sql to 2020_01_26_03_world.sql

Co-authored-by: Giacomo Pozzoni <giacomopoz@gmail.com>
(cherry picked from commit 552a638e31)
This commit is contained in:
Sorikoff
2020-01-26 22:15:00 +02:00
committed by Shauren
parent 9b48370ba1
commit d37547e769
3 changed files with 33 additions and 153 deletions

View File

@@ -33,136 +33,6 @@
#include "TemporarySummon.h"
#include "WorldSession.h"
/*######
## npc_sinkhole_kill_credit
######*/
enum Sinkhole
{
GO_EXPLOSIVES_CART = 188160,
NPC_SCOURGED_BURROWER = 26250,
QUEST_PLUG_THE_SINKHOLES = 11897,
SPELL_SET_CART = 46797,
SPELL_EXPLODE_CART = 46799,
SPELL_SUMMON_CART = 46798,
SPELL_SUMMON_WORM = 46800
};
class npc_sinkhole_kill_credit : public CreatureScript
{
public:
npc_sinkhole_kill_credit() : CreatureScript("npc_sinkhole_kill_credit") { }
struct npc_sinkhole_kill_creditAI : public ScriptedAI
{
npc_sinkhole_kill_creditAI(Creature* creature) : ScriptedAI(creature)
{
Initialize();
}
void Initialize()
{
phaseTimer = 500;
phase = 0;
casterGuid.Clear();
}
uint32 phaseTimer;
uint8 phase;
ObjectGuid casterGuid;
void Reset() override
{
Initialize();
}
void SpellHit(Unit* caster, SpellInfo const* spell) override
{
if (phase || spell->Id != SPELL_SET_CART)
return;
Player* player = caster->ToPlayer();
if (player && player->GetQuestStatus(QUEST_PLUG_THE_SINKHOLES) == QUEST_STATUS_INCOMPLETE)
{
phase = 1;
casterGuid = caster->GetGUID();
}
}
void JustEngagedWith(Unit* /*who*/) override { }
void UpdateAI(uint32 diff) override
{
if (!phase)
return;
if (phaseTimer <= diff)
{
switch (phase)
{
case 1:
DoCast(me, SPELL_EXPLODE_CART, true);
DoCast(me, SPELL_SUMMON_CART, true);
if (GameObject* cart = me->FindNearestGameObject(GO_EXPLOSIVES_CART, 3.0f))
cart->SetFaction(FACTION_MONSTER);
phaseTimer = 3000;
phase = 2;
break;
case 2:
if (GameObject* cart = me->FindNearestGameObject(GO_EXPLOSIVES_CART, 3.0f))
cart->UseDoorOrButton();
DoCast(me, SPELL_EXPLODE_CART, true);
phaseTimer = 3000;
phase = 3;
break;
case 3:
DoCast(me, SPELL_EXPLODE_CART, true);
phaseTimer = 2000;
phase = 5; // @fixme: phase 4 is missing...
break;
case 5:
DoCast(me, SPELL_SUMMON_WORM, true);
if (Unit* worm = me->FindNearestCreature(NPC_SCOURGED_BURROWER, 3.0f))
{
worm->AddUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
worm->HandleEmoteCommand(EMOTE_ONESHOT_EMERGE);
}
phaseTimer = 1000;
phase = 6;
break;
case 6:
DoCast(me, SPELL_EXPLODE_CART, true);
if (Unit* worm = me->FindNearestCreature(NPC_SCOURGED_BURROWER, 3.0f))
{
Unit::Kill(me, worm);
worm->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE);
}
phaseTimer = 2000;
phase = 7;
break;
case 7:
DoCast(me, SPELL_EXPLODE_CART, true);
if (Player* caster = ObjectAccessor::GetPlayer(*me, casterGuid))
caster->KilledMonster(me->GetCreatureTemplate(), me->GetGUID());
phaseTimer = 5000;
phase = 8;
break;
case 8:
EnterEvadeMode();
break;
}
} else phaseTimer -= diff;
}
};
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_sinkhole_kill_creditAI(creature);
}
};
/*######
## npc_khunok_the_behemoth
######*/
@@ -2470,7 +2340,6 @@ class spell_q11653_shortening_blaster : public SpellScript
void AddSC_borean_tundra()
{
new npc_sinkhole_kill_credit();
new npc_khunok_the_behemoth();
new npc_corastrasza();
new npc_iruk();

View File

@@ -128,27 +128,6 @@ public:
}
};
/*#####
# item_incendiary_explosives
#####*/
class item_incendiary_explosives : public ItemScript
{
public:
item_incendiary_explosives() : ItemScript("item_incendiary_explosives") { }
bool OnUse(Player* player, Item* item, SpellCastTargets const& /*targets*/, ObjectGuid /*castId*/) override
{
if (player->FindNearestCreature(26248, 15) || player->FindNearestCreature(26249, 15))
return false;
else
{
player->SendEquipError(EQUIP_ERR_OUT_OF_RANGE, item, nullptr);
return true;
}
}
};
/*#####
# item_mysterious_egg
#####*/
@@ -349,7 +328,6 @@ void AddSC_item_scripts()
new item_only_for_flight();
new item_nether_wraith_beacon();
new item_gor_dreks_ointment();
new item_incendiary_explosives();
new item_mysterious_egg();
new item_disgusting_jar();
new item_petrov_cluster_bombs();