Quest/Script: Conversion of Bristlelimb Cage/Stillpine Captive cpp to SAI

Closes #19868
This commit is contained in:
dr-j
2017-10-31 20:24:56 +01:00
committed by Killyana
parent 5d73252479
commit 3bb5f17ff5
2 changed files with 18 additions and 124 deletions

View File

@@ -718,128 +718,6 @@ public:
}
};
/*########
## Quest: The Prophecy of Akida
########*/
enum BristlelimbCage
{
QUEST_THE_PROPHECY_OF_AKIDA = 9544,
NPC_STILLPINE_CAPITIVE = 17375,
GO_BRISTELIMB_CAGE = 181714,
CAPITIVE_SAY = 0,
POINT_INIT = 1,
EVENT_DESPAWN = 1,
};
class npc_stillpine_capitive : public CreatureScript
{
public:
npc_stillpine_capitive() : CreatureScript("npc_stillpine_capitive") { }
struct npc_stillpine_capitiveAI : public ScriptedAI
{
npc_stillpine_capitiveAI(Creature* creature) : ScriptedAI(creature)
{
Initialize();
}
void Initialize()
{
_playerGUID.Clear();
_movementComplete = false;
}
void Reset() override
{
if (GameObject* cage = me->FindNearestGameObject(GO_BRISTELIMB_CAGE, 5.0f))
{
cage->SetLootState(GO_JUST_DEACTIVATED);
cage->SetGoState(GO_STATE_READY);
}
_events.Reset();
Initialize();
}
void StartMoving(Player* owner)
{
if (owner)
{
Talk(CAPITIVE_SAY, owner);
_playerGUID = owner->GetGUID();
}
Position pos = me->GetNearPosition(3.0f, 0.0f);
me->GetMotionMaster()->MovePoint(POINT_INIT, pos);
}
void MovementInform(uint32 type, uint32 id) override
{
if (type != POINT_MOTION_TYPE || id != POINT_INIT)
return;
if (Player* _player = ObjectAccessor::GetPlayer(*me, _playerGUID))
_player->KilledMonsterCredit(me->GetEntry(), me->GetGUID());
_movementComplete = true;
_events.ScheduleEvent(EVENT_DESPAWN, 3500);
}
void UpdateAI(uint32 diff) override
{
if (!_movementComplete)
return;
_events.Update(diff);
if (_events.ExecuteEvent() == EVENT_DESPAWN)
me->DespawnOrUnsummon();
}
private:
ObjectGuid _playerGUID;
EventMap _events;
bool _movementComplete;
};
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_stillpine_capitiveAI(creature);
}
};
class go_bristlelimb_cage : public GameObjectScript
{
public:
go_bristlelimb_cage() : GameObjectScript("go_bristlelimb_cage") { }
struct go_bristlelimb_cageAI : public GameObjectAI
{
go_bristlelimb_cageAI(GameObject* go) : GameObjectAI(go) { }
bool GossipHello(Player* player) override
{
me->SetGoState(GO_STATE_READY);
if (player->GetQuestStatus(QUEST_THE_PROPHECY_OF_AKIDA) == QUEST_STATUS_INCOMPLETE)
{
if (Creature* capitive = me->FindNearestCreature(NPC_STILLPINE_CAPITIVE, 5.0f, true))
{
me->ResetDoorOrButton();
ENSURE_AI(npc_stillpine_capitive::npc_stillpine_capitiveAI, capitive->AI())->StartMoving(player);
return false;
}
}
return true;
}
};
GameObjectAI* GetAI(GameObject* go) const override
{
return new go_bristlelimb_cageAI(go);
}
};
void AddSC_azuremyst_isle()
{
new npc_draenei_survivor();
@@ -849,6 +727,4 @@ void AddSC_azuremyst_isle()
new npc_geezle();
new npc_death_ravager();
new go_ravager_cage();
new npc_stillpine_capitive();
new go_bristlelimb_cage();
}