aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortartalo <none@none>2009-11-07 19:38:21 +0100
committertartalo <none@none>2009-11-07 19:38:21 +0100
commit808fe9ea6324e0e5497d881b8374b9f75259c5cd (patch)
treed30c927f3066f340ebcc1cda1f018254cccca2cc /src
parent5b7ef6fd2fd95e944807f07dcf181b9f1e4ea573 (diff)
Borean Tundra, support for quest 'Escape from the Winterfin Caverns', by manuel
Borean Tundra, support for quest 'Unfit for Death', by Malcrom and manuel Borean Tundra, support for quest 'Drake Hunt' (both versions), by manuel Closes #66 --HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/scripts/northrend/borean_tundra.cpp407
-rw-r--r--src/bindings/scripts/scripts/world/item_scripts.cpp63
2 files changed, 466 insertions, 4 deletions
diff --git a/src/bindings/scripts/scripts/northrend/borean_tundra.cpp b/src/bindings/scripts/scripts/northrend/borean_tundra.cpp
index 3fd135035da..7b21ecc67d4 100644
--- a/src/bindings/scripts/scripts/northrend/borean_tundra.cpp
+++ b/src/bindings/scripts/scripts/northrend/borean_tundra.cpp
@@ -27,9 +27,20 @@ npc_surristrasz
npc_tiare
npc_iruk
npc_corastrasza
+npc_jenny
+npc_sinkhole_kill_credit
+npc_khunok_the_behemoth
+npc_scourge_prisoner
+mob_nerubar_victim
+npc_keristrasza
+npc_nesingwary_trapper
+npc_lurgglbr
+npc_nexus_drake_hatchling
EndContentData */
#include "precompiled.h"
+#include "escort_ai.h"
+#include "follower_ai.h"
/*######
## npc_fizzcrank_fullthrottle
@@ -521,10 +532,7 @@ enum eJenny
SPELL_GIVE_JENNY_CREDIT = 46358,
SPELL_CRATES_CARRIED = 46340,
- SPELL_DROP_CRATE = 46342,
-
- FACTION_ESCORT_A_NEUTRAL_ACTIVE = 231,
- FACTION_ESCORT_H_NEUTRAL_ACTIVE = 232
+ SPELL_DROP_CRATE = 46342
};
struct TRINITY_DLL_DECL npc_jennyAI : public ScriptedAI
@@ -587,6 +595,380 @@ CreatureAI* GetAI_npc_jenny(Creature *pCreature)
return new npc_jennyAI (pCreature);
}
+/*######
+## npc_npc_nesingwary_trapper
+######*/
+
+enum eNesingwaryTrapper
+{
+ GO_HIGH_QUALITY_FUR = 187983,
+
+ GO_CARIBOU_TRAP_1 = 187982,
+ GO_CARIBOU_TRAP_2 = 187995,
+ GO_CARIBOU_TRAP_3 = 187996,
+ GO_CARIBOU_TRAP_4 = 187997,
+ GO_CARIBOU_TRAP_5 = 187998,
+ GO_CARIBOU_TRAP_6 = 187999,
+ GO_CARIBOU_TRAP_7 = 188000,
+ GO_CARIBOU_TRAP_8 = 188001,
+ GO_CARIBOU_TRAP_9 = 188002,
+ GO_CARIBOU_TRAP_10 = 188003,
+ GO_CARIBOU_TRAP_11 = 188004,
+ GO_CARIBOU_TRAP_12 = 188005,
+ GO_CARIBOU_TRAP_13 = 188006,
+ GO_CARIBOU_TRAP_14 = 188007,
+ GO_CARIBOU_TRAP_15 = 188008,
+
+ SPELL_TRAPPED = 46104,
+};
+
+//#define SAY_NESINGWARY_1 -1571008
+
+struct TRINITY_DLL_DECL npc_nesingwary_trapperAI : public ScriptedAI
+{
+ npc_nesingwary_trapperAI(Creature *c) : ScriptedAI(c) {m_creature->SetVisibility(VISIBILITY_OFF);}
+
+ GameObject* go_caribou;
+ uint8 Phase;
+ uint32 Phase_Timer;
+
+ void Reset()
+ {
+ m_creature->SetVisibility(VISIBILITY_OFF);
+ Phase_Timer = 2500;
+ Phase = 1;
+ }
+ void EnterCombat(Unit *who) {}
+ void MoveInLineOfSight(Unit *who) {}
+
+ void JustDied(Unit* who)
+ {
+ go_caribou->SetLootState(GO_JUST_DEACTIVATED);
+
+ TempSummon *summon = (TempSummon*)m_creature;
+ ((Player*)(summon->GetSummoner()))->KilledMonsterCredit(m_creature->GetEntry(),0);
+
+ go_caribou->SetGoState(GO_STATE_READY);
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (Phase_Timer < diff)
+ {
+ switch (Phase)
+ {
+ case 1:
+ m_creature->SetVisibility(VISIBILITY_ON);
+
+ Phase_Timer = 2000;
+ Phase = 2;
+ break;
+
+ case 2:
+ if (GameObject* go_fur = m_creature->FindNearestGameObject(GO_HIGH_QUALITY_FUR,11.0f))
+ m_creature->GetMotionMaster()->MovePoint(0,go_fur->GetPositionX(),go_fur->GetPositionY(),go_fur->GetPositionZ());
+ Phase_Timer = 1500;
+ Phase = 3;
+ break;
+
+ case 3:
+ //DoScriptText(SAY_NESINGWARY_1, m_creature);
+
+ Phase_Timer = 2000;
+ Phase = 4;
+ break;
+
+ case 4:
+ m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LOOT);
+
+ Phase_Timer = 1000;
+ Phase = 5;
+ break;
+
+ case 5:
+ m_creature->HandleEmoteCommand(EMOTE_ONESHOT_NONE);
+
+ Phase_Timer = 500;
+ Phase = 6;
+ break;
+
+ case 6:
+ if (GameObject* go_fur = m_creature->FindNearestGameObject(GO_HIGH_QUALITY_FUR,11.0f))
+ go_fur->Delete();
+
+ Phase_Timer = 500;
+ Phase = 7;
+ break;
+
+ case 7:
+ if ((go_caribou = m_creature->FindNearestGameObject(GO_CARIBOU_TRAP_1, 5.0f)) ||
+ (go_caribou = m_creature->FindNearestGameObject(GO_CARIBOU_TRAP_2, 5.0f)) ||
+ (go_caribou = m_creature->FindNearestGameObject(GO_CARIBOU_TRAP_3, 5.0f)) ||
+ (go_caribou = m_creature->FindNearestGameObject(GO_CARIBOU_TRAP_4, 5.0f)) ||
+ (go_caribou = m_creature->FindNearestGameObject(GO_CARIBOU_TRAP_5, 5.0f)) ||
+ (go_caribou = m_creature->FindNearestGameObject(GO_CARIBOU_TRAP_6, 5.0f)) ||
+ (go_caribou = m_creature->FindNearestGameObject(GO_CARIBOU_TRAP_7, 5.0f)) ||
+ (go_caribou = m_creature->FindNearestGameObject(GO_CARIBOU_TRAP_8, 5.0f)) ||
+ (go_caribou = m_creature->FindNearestGameObject(GO_CARIBOU_TRAP_9, 5.0f)) ||
+ (go_caribou = m_creature->FindNearestGameObject(GO_CARIBOU_TRAP_10, 5.0f)) ||
+ (go_caribou = m_creature->FindNearestGameObject(GO_CARIBOU_TRAP_11, 5.0f)) ||
+ (go_caribou = m_creature->FindNearestGameObject(GO_CARIBOU_TRAP_12, 5.0f)) ||
+ (go_caribou = m_creature->FindNearestGameObject(GO_CARIBOU_TRAP_13, 5.0f)) ||
+ (go_caribou = m_creature->FindNearestGameObject(GO_CARIBOU_TRAP_14, 5.0f)) ||
+ (go_caribou = m_creature->FindNearestGameObject(GO_CARIBOU_TRAP_15, 5.0f)))
+
+ go_caribou->SetGoState(GO_STATE_ACTIVE);
+
+ Phase = 8;
+ Phase_Timer = 1000;
+ break;
+
+ case 8:
+ m_creature->CastSpell(m_creature,SPELL_TRAPPED,true);
+ Phase = 0;
+ break;
+ }
+ } else Phase_Timer -= diff;
+ }
+};
+
+CreatureAI* GetAI_npc_nesingwary_trapper(Creature *pCreature)
+{
+ return new npc_nesingwary_trapperAI (pCreature);
+}
+
+/*######
+## npc_lurgglbr
+######*/
+
+enum eLurgglbr
+{
+ QUEST_ESCAPE_WINTERFIN_CAVERNS = 11570,
+
+ GO_CAGE = 187369,
+
+ FACTION_ESCORTEE_A = 774,
+ FACTION_ESCORTEE_H = 775,
+};
+
+#define SAY_WP_1_LUR_START -1571004
+#define SAY_WP_1_LUR_END -1571005
+#define SAY_WP_41_LUR_START -1571006
+#define SAY_WP_41_LUR_END -1571007
+
+struct TRINITY_DLL_DECL npc_lurgglbrAI : public npc_escortAI
+{
+ npc_lurgglbrAI(Creature* c) : npc_escortAI(c){}
+
+ uint32 IntroTimer;
+ uint32 IntroPhase;
+
+ void Reset()
+ {
+ IntroTimer = 0;
+ IntroPhase = 0;
+ }
+
+ void WaypointReached(uint32 i)
+ {
+ switch(i)
+ {
+ case 0:
+ IntroPhase = 1;
+ IntroTimer = 2000;
+ break;
+ case 41:
+ IntroPhase = 4;
+ IntroTimer = 2000;
+ break;
+ }
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (IntroPhase)
+ {
+ if (IntroTimer < diff)
+ {
+ switch(IntroPhase)
+ {
+ case 1:
+ //DoScriptText(SAY_WP_1_LUR_START,m_creature);
+
+ IntroPhase = 2;
+ IntroTimer = 7500;
+ break;
+
+ case 2:
+ //DoScriptText(SAY_WP_1_LUR_END,m_creature);
+
+ IntroPhase = 3;
+ IntroTimer = 7500;
+ break;
+ case 3:
+ m_creature->SetReactState(REACT_AGGRESSIVE);
+
+ IntroPhase = 0;
+ IntroTimer = 0;
+ break;
+
+ case 4:
+ //DoScriptText(SAY_WP_41_LUR_START,m_creature);
+
+ IntroPhase = 5;
+ IntroTimer = 8000;
+ break;
+ case 5:
+ //DoScriptText(SAY_WP_41_LUR_END,m_creature);
+
+ IntroPhase = 6;
+ IntroTimer = 2500;
+ break;
+
+ case 6:
+ if (Player* pPlayer = GetPlayerForEscort())
+ pPlayer->AreaExploredOrEventHappens(QUEST_ESCAPE_WINTERFIN_CAVERNS);
+
+ IntroPhase = 7;
+ IntroTimer = 2500;
+ break;
+
+ case 7:
+ m_creature->ForcedDespawn();
+
+ IntroPhase = 0;
+ IntroTimer = 0;
+ break;
+ }
+ }else IntroTimer-=diff;
+ }
+ npc_escortAI::UpdateAI(diff);
+ }
+};
+
+CreatureAI* GetAI_npc_lurgglbr(Creature* pCreature)
+{
+ return new npc_lurgglbrAI(pCreature);
+}
+
+bool QuestAccept_npc_lurgglbr(Player* pPlayer, Creature* pCreature, Quest const *_Quest)
+{
+ if (_Quest->GetQuestId() == QUEST_ESCAPE_WINTERFIN_CAVERNS)
+ {
+ if(GameObject* pGo = pCreature->FindNearestGameObject(GO_CAGE,5.0f))
+ {
+ pGo->SetRespawnTime(0);
+ pGo->SetGoType(GAMEOBJECT_TYPE_BUTTON);
+ pGo->UseDoorOrButton(20);
+ }
+
+ if (npc_escortAI* pEscortAI = CAST_AI(npc_lurgglbrAI, pCreature->AI()))
+ pEscortAI->Start(true, false, pPlayer->GetGUID());
+
+ if (pPlayer->GetTeam() == ALLIANCE)
+ pCreature->setFaction(FACTION_ESCORTEE_A);
+
+ if (pPlayer->GetTeam() == HORDE)
+ pCreature->setFaction(FACTION_ESCORTEE_H);
+
+ return true;
+ }
+ return false;
+}
+
+/*######
+## npc_nexus_drake_hatchling
+######*/
+
+enum eNexusDrakeHatchling
+{
+ SPELL_DRAKE_HARPOON = 46607,
+ SPELL_RED_DRAGONBLOOD = 46620,
+ SPELL_DRAKE_HATCHLING_SUBDUED = 46691,
+ SPELL_SUBDUED = 46675,
+
+ NPC_RAELORASZ = 26117,
+
+ QUEST_DRAKE_HUNT = 11919,
+ QUEST_DRAKE_HUNT_D = 11940
+};
+
+struct TRINITY_DLL_DECL npc_nexus_drake_hatchlingAI : public FollowerAI //The spell who makes the npc follow the player is missing, also we can use FollowerAI!
+{
+ npc_nexus_drake_hatchlingAI(Creature *c) : FollowerAI(c) {Reset();}
+
+ bool WithRedDragonBlood;
+
+ Unit* pPlayer;
+
+ void Reset()
+ {
+ WithRedDragonBlood = false;
+ }
+
+ void EnterCombat(Unit* pWho)
+ {
+ if (m_creature->canAttack(pWho))
+ m_creature->AI()->AttackStart(pWho);
+ }
+
+ void SpellHit(Unit *caster, const SpellEntry *spell)
+ {
+ if (spell->Id == SPELL_DRAKE_HARPOON)
+ {
+ pPlayer = caster;
+
+ m_creature->CastSpell(m_creature,SPELL_RED_DRAGONBLOOD,true);
+
+ WithRedDragonBlood = true;
+ }
+ }
+
+ void MoveInLineOfSight(Unit *pWho)
+ {
+ FollowerAI::MoveInLineOfSight(pWho);
+
+ if (m_creature->HasAura(SPELL_SUBDUED) && pWho->GetEntry() == NPC_RAELORASZ)
+ {
+ if (m_creature->IsWithinDistInMap(pWho, INTERACTION_DISTANCE))
+ {
+ ((Player*)(pPlayer))->KilledMonsterCredit(26175,0);
+ ((Player*)(pPlayer))->RemoveAura(SPELL_DRAKE_HATCHLING_SUBDUED);
+ SetFollowComplete();
+ m_creature->DisappearAndDie();
+ }
+ }
+ }
+
+ void UpdateAI(const uint32 diff)
+ {
+ if (WithRedDragonBlood && !m_creature->HasAura(SPELL_RED_DRAGONBLOOD))
+ {
+ if (npc_nexus_drake_hatchlingAI* pDrakeAI = CAST_AI(npc_nexus_drake_hatchlingAI, m_creature->AI()))
+ {
+ EnterEvadeMode();
+ pDrakeAI->StartFollow((Player*)(pPlayer), 35, NULL);
+ }
+
+ m_creature->CastSpell(m_creature,SPELL_SUBDUED,true);
+ ((Player*)(pPlayer))->CastSpell((Player*)(pPlayer),SPELL_DRAKE_HATCHLING_SUBDUED,true);
+
+ m_creature->AttackStop();
+ WithRedDragonBlood = false;
+ }
+
+ if (!UpdateVictim())
+ return;
+
+ DoMeleeAttackIfReady();
+ }
+};
+
+CreatureAI* GetAI_npc_nexus_drake_hatchling(Creature* pCreature)
+{
+ return new npc_nexus_drake_hatchlingAI(pCreature);
+}
+
void AddSC_borean_tundra()
{
@@ -652,4 +1034,21 @@ void AddSC_borean_tundra()
newscript->Name = "npc_jenny";
newscript->GetAI = &GetAI_npc_jenny;
newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name = "npc_nesingwary_trapper";
+ newscript->GetAI = &GetAI_npc_nesingwary_trapper;
+ newscript->RegisterSelf();
+ newscript = new Script;
+
+ newscript = new Script;
+ newscript->Name = "npc_lurgglbr";
+ newscript->GetAI = &GetAI_npc_lurgglbr;
+ newscript->pQuestAccept = &QuestAccept_npc_lurgglbr;
+ newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name = "npc_nexus_drake_hatchling";
+ newscript->GetAI = &GetAI_npc_nexus_drake_hatchling;
+ newscript->RegisterSelf();
}
diff --git a/src/bindings/scripts/scripts/world/item_scripts.cpp b/src/bindings/scripts/scripts/world/item_scripts.cpp
index 77da633fcbe..2464d64422e 100644
--- a/src/bindings/scripts/scripts/world/item_scripts.cpp
+++ b/src/bindings/scripts/scripts/world/item_scripts.cpp
@@ -230,6 +230,64 @@ bool ItemUse_item_harvesters_gift(Player* pPlayer, Item* pItem, SpellCastTargets
return true;
}
+/*#####
+# item_pile_fake_furs
+#####*/
+
+enum ePileFakeFur
+{
+ GO_CARIBOU_TRAP_1 = 187982,
+ GO_CARIBOU_TRAP_2 = 187995,
+ GO_CARIBOU_TRAP_3 = 187996,
+ GO_CARIBOU_TRAP_4 = 187997,
+ GO_CARIBOU_TRAP_5 = 187998,
+ GO_CARIBOU_TRAP_6 = 187999,
+ GO_CARIBOU_TRAP_7 = 188000,
+ GO_CARIBOU_TRAP_8 = 188001,
+ GO_CARIBOU_TRAP_9 = 188002,
+ GO_CARIBOU_TRAP_10 = 188003,
+ GO_CARIBOU_TRAP_11 = 188004,
+ GO_CARIBOU_TRAP_12 = 188005,
+ GO_CARIBOU_TRAP_13 = 188006,
+ GO_CARIBOU_TRAP_14 = 188007,
+ GO_CARIBOU_TRAP_15 = 188008,
+ GO_HIGH_QUALITY_FUR = 187983,
+ NPC_NESINGWARY_TRAPPER = 25835
+};
+bool ItemUse_item_pile_fake_furs(Player* pPlayer, Item* _Item, SpellCastTargets const& targets)
+{
+ GameObject* pGo;
+ if ((pGo = pPlayer->FindNearestGameObject(GO_CARIBOU_TRAP_1, 5.0f)) ||
+ (pGo = pPlayer->FindNearestGameObject(GO_CARIBOU_TRAP_2, 5.0f)) ||
+ (pGo = pPlayer->FindNearestGameObject(GO_CARIBOU_TRAP_3, 5.0f)) ||
+ (pGo = pPlayer->FindNearestGameObject(GO_CARIBOU_TRAP_4, 5.0f)) ||
+ (pGo = pPlayer->FindNearestGameObject(GO_CARIBOU_TRAP_5, 5.0f)) ||
+ (pGo = pPlayer->FindNearestGameObject(GO_CARIBOU_TRAP_6, 5.0f)) ||
+ (pGo = pPlayer->FindNearestGameObject(GO_CARIBOU_TRAP_7, 5.0f)) ||
+ (pGo = pPlayer->FindNearestGameObject(GO_CARIBOU_TRAP_8, 5.0f)) ||
+ (pGo = pPlayer->FindNearestGameObject(GO_CARIBOU_TRAP_9, 5.0f)) ||
+ (pGo = pPlayer->FindNearestGameObject(GO_CARIBOU_TRAP_10, 5.0f)) ||
+ (pGo = pPlayer->FindNearestGameObject(GO_CARIBOU_TRAP_11, 5.0f)) ||
+ (pGo = pPlayer->FindNearestGameObject(GO_CARIBOU_TRAP_12, 5.0f)) ||
+ (pGo = pPlayer->FindNearestGameObject(GO_CARIBOU_TRAP_13, 5.0f)) ||
+ (pGo = pPlayer->FindNearestGameObject(GO_CARIBOU_TRAP_14, 5.0f)) ||
+ (pGo = pPlayer->FindNearestGameObject(GO_CARIBOU_TRAP_15, 5.0f)))
+ {
+ if (pGo->FindNearestCreature(NPC_NESINGWARY_TRAPPER,10.0f,true) || pGo->FindNearestCreature(NPC_NESINGWARY_TRAPPER,10.0f,false) || pGo->FindNearestGameObject(GO_HIGH_QUALITY_FUR,2.0f))
+ return true;
+ float x, y, z;
+ pGo->GetClosePoint(x, y, z, pGo->GetObjectSize() / 3, 7.0f);
+ pGo->SummonGameObject(GO_HIGH_QUALITY_FUR,pGo->GetPositionX(),pGo->GetPositionY(),pGo->GetPositionZ(),0,0,0,0,0,1000);
+ if (TempSummon* summon = pPlayer->SummonCreature(NPC_NESINGWARY_TRAPPER, x, y, z, pGo->GetOrientation(), TEMPSUMMON_DEAD_DESPAWN, 1000))
+ {
+ summon->SetVisibility(VISIBILITY_OFF);
+ summon->SetReactState(REACT_PASSIVE);
+ summon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
+ }
+ } else
+ return true;
+}
+
void AddSC_item_scripts()
{
Script *newscript;
@@ -278,5 +336,10 @@ void AddSC_item_scripts()
newscript->Name = "item_harvesters_gift";
newscript->pItemUse = &ItemUse_item_harvesters_gift;
newscript->RegisterSelf();
+
+ newscript = new Script;
+ newscript->Name = "item_pile_fake_furs";
+ newscript->pItemUse = &ItemUse_item_pile_fake_furs;
+ newscript->RegisterSelf();
}