summaryrefslogtreecommitdiff
path: root/src/scripts/EasternKingdoms/zone_wetlands.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/scripts/EasternKingdoms/zone_wetlands.cpp')
-rw-r--r--src/scripts/EasternKingdoms/zone_wetlands.cpp169
1 files changed, 169 insertions, 0 deletions
diff --git a/src/scripts/EasternKingdoms/zone_wetlands.cpp b/src/scripts/EasternKingdoms/zone_wetlands.cpp
new file mode 100644
index 0000000000..55a802bd09
--- /dev/null
+++ b/src/scripts/EasternKingdoms/zone_wetlands.cpp
@@ -0,0 +1,169 @@
+/*
+ * Copyright (C)
+ * Copyright (C)
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/* ScriptData
+SDName: Wetlands
+SD%Complete: 80
+SDComment: Quest support: 1249
+SDCategory: Wetlands
+EndScriptData */
+
+/* ContentData
+npc_mikhail
+npc_tapoke_slim_jahn
+EndContentData */
+
+#include "ScriptMgr.h"
+#include "ScriptedCreature.h"
+#include "ScriptedEscortAI.h"
+#include "Player.h"
+
+/*######
+## npc_tapoke_slim_jahn
+######*/
+
+enum TapokeSlim
+{
+ QUEST_MISSING_DIPLO_PT11 = 1249,
+ FACTION_ENEMY = 168,
+ SPELL_STEALTH = 1785,
+ SPELL_CALL_FRIENDS = 16457, //summons 1x friend
+ NPC_SLIMS_FRIEND = 4971,
+ NPC_TAPOKE_SLIM_JAHN = 4962
+};
+
+class npc_tapoke_slim_jahn : public CreatureScript
+{
+public:
+ npc_tapoke_slim_jahn() : CreatureScript("npc_tapoke_slim_jahn") { }
+
+ CreatureAI* GetAI(Creature* creature) const
+ {
+ return new npc_tapoke_slim_jahnAI(creature);
+ }
+
+ struct npc_tapoke_slim_jahnAI : public npc_escortAI
+ {
+ npc_tapoke_slim_jahnAI(Creature* creature) : npc_escortAI(creature) { }
+
+ bool IsFriendSummoned;
+
+ void Reset()
+ {
+ if (!HasEscortState(STATE_ESCORT_ESCORTING))
+ IsFriendSummoned = false;
+ }
+
+ void WaypointReached(uint32 waypointId)
+ {
+ switch (waypointId)
+ {
+ case 2:
+ if (me->HasStealthAura())
+ me->RemoveAurasByType(SPELL_AURA_MOD_STEALTH);
+ SetRun();
+ me->setFaction(FACTION_ENEMY);
+ break;
+ }
+ }
+
+ void EnterCombat(Unit* /*who*/)
+ {
+ if (HasEscortState(STATE_ESCORT_ESCORTING) && !IsFriendSummoned && GetPlayerForEscort())
+ {
+ me->CastSpell(me, SPELL_CALL_FRIENDS, true);
+ IsFriendSummoned = true;
+ }
+ }
+
+ void JustSummoned(Creature* summoned)
+ {
+ if (Player* player = GetPlayerForEscort())
+ summoned->AI()->AttackStart(player);
+ }
+
+ void AttackedBy(Unit* pAttacker)
+ {
+ if (me->GetVictim())
+ return;
+
+ if (me->IsFriendlyTo(pAttacker))
+ return;
+
+ AttackStart(pAttacker);
+ }
+
+ void DamageTaken(Unit*, uint32& uiDamage, DamageEffectType, SpellSchoolMask)
+ {
+ if (HealthBelowPct(20))
+ {
+ if (Player* player = GetPlayerForEscort())
+ {
+ player->GroupEventHappens(QUEST_MISSING_DIPLO_PT11, me);
+
+ uiDamage = 0;
+
+ me->RestoreFaction();
+ me->RemoveAllAuras();
+ me->DeleteThreatList();
+ me->CombatStop(true);
+
+ SetRun(false);
+ }
+ }
+ }
+ };
+};
+
+/*######
+## npc_mikhail
+######*/
+
+class npc_mikhail : public CreatureScript
+{
+public:
+ npc_mikhail() : CreatureScript("npc_mikhail") { }
+
+ bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest)
+ {
+ if (quest->GetQuestId() == QUEST_MISSING_DIPLO_PT11)
+ {
+ Creature* pSlim = creature->FindNearestCreature(NPC_TAPOKE_SLIM_JAHN, 25.0f);
+
+ if (!pSlim)
+ return false;
+
+ if (!pSlim->HasStealthAura())
+ pSlim->CastSpell(pSlim, SPELL_STEALTH, true);
+
+ if (npc_tapoke_slim_jahn::npc_tapoke_slim_jahnAI* pEscortAI = CAST_AI(npc_tapoke_slim_jahn::npc_tapoke_slim_jahnAI, pSlim->AI()))
+ pEscortAI->Start(false, false, player->GetGUID(), quest);
+ }
+ return false;
+ }
+};
+
+/*######
+## AddSC
+######*/
+
+void AddSC_wetlands()
+{
+ new npc_tapoke_slim_jahn();
+ new npc_mikhail();
+}