/* REWRITTEN BY XINEF */ #include "ScriptMgr.h" #include "ScriptPCH.h" #include "InstanceScript.h" #include "PassiveAI.h" class instance_gnomeregan : public InstanceMapScript { public: instance_gnomeregan() : InstanceMapScript("instance_gnomeregan", 90) { } InstanceScript* GetInstanceScript(InstanceMap* map) const { return new instance_gnomeregan_InstanceMapScript(map); } struct instance_gnomeregan_InstanceMapScript : public InstanceScript { instance_gnomeregan_InstanceMapScript(Map* map) : InstanceScript(map) { } }; }; enum eKernobee { QUEST_A_FINE_MESS = 2904, }; class npc_kernobee : public CreatureScript { public: npc_kernobee() : CreatureScript("npc_kernobee") { } CreatureAI* GetAI(Creature* creature) const { return new npc_kernobeeAI(creature); } bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) { if (quest->GetQuestId() == QUEST_A_FINE_MESS) { creature->SetStandState(UNIT_STAND_STATE_STAND); creature->AI()->SetGUID(player->GetGUID(), 0); creature->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, M_PI, MOTION_SLOT_CONTROLLED); } return true; } struct npc_kernobeeAI : public PassiveAI { npc_kernobeeAI(Creature* creature) : PassiveAI(creature) { playerGUID = 0; checkTimer = 0; } uint32 checkTimer; uint64 playerGUID; void SetGUID(uint64 guid, int32) { playerGUID = guid; } void UpdateAI(uint32 diff) { checkTimer += diff; if (checkTimer >= 2000) { checkTimer = 0; if (me->GetDistance(-332.2f, -2.8f, -152.8f) < 5.0f) { if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID)) player->GroupEventHappens(QUEST_A_FINE_MESS, me); me->DespawnOrUnsummon(1000); } } } }; }; class spell_gnomeregan_radiation_bolt : public SpellScriptLoader { public: spell_gnomeregan_radiation_bolt() : SpellScriptLoader("spell_gnomeregan_radiation_bolt") { } class spell_gnomeregan_radiation_bolt_SpellScript : public SpellScript { PrepareSpellScript(spell_gnomeregan_radiation_bolt_SpellScript); void HandleTriggerSpell(SpellEffIndex effIndex) { if (roll_chance_i(80)) PreventHitDefaultEffect(effIndex); } void Register() { OnEffectHit += SpellEffectFn(spell_gnomeregan_radiation_bolt_SpellScript::HandleTriggerSpell, EFFECT_1, SPELL_EFFECT_TRIGGER_SPELL); } }; SpellScript* GetSpellScript() const { return new spell_gnomeregan_radiation_bolt_SpellScript; } }; void AddSC_instance_gnomeregan() { new instance_gnomeregan(); new npc_kernobee(); new spell_gnomeregan_radiation_bolt(); }