diff options
author | _manuel_ <none@none> | 2010-01-14 03:48:48 -0300 |
---|---|---|
committer | _manuel_ <none@none> | 2010-01-14 03:48:48 -0300 |
commit | a8b4a7bc378d651a2dde25f64a6b5a3927ee1815 (patch) | |
tree | c904e62ffa172e23b4d6e97112507f42a8f7321d /src | |
parent | 0077466598eb1b569a8ce041cb2f588a1fa92812 (diff) |
Gnomeregan: Implemented Blastmaster Emi Shortfuse Event.
--HG--
branch : trunk
Diffstat (limited to 'src')
7 files changed, 788 insertions, 0 deletions
diff --git a/src/bindings/scripts/CMakeLists.txt b/src/bindings/scripts/CMakeLists.txt index 14c2c9593b1..3ebbd87b0eb 100644 --- a/src/bindings/scripts/CMakeLists.txt +++ b/src/bindings/scripts/CMakeLists.txt @@ -58,6 +58,9 @@ SET(trinityscript_LIB_SRCS scripts/eastern_kingdoms/deadmines/deadmines.h scripts/eastern_kingdoms/deadmines/deadmines.cpp scripts/eastern_kingdoms/deadmines/instance_deadmines.cpp + scripts/eastern_kingdoms/gnomeregan/gnomeregan.h + scripts/eastern_kingdoms/gnomeregan/gnomeregan.cpp + scripts/eastern_kingdoms/gnomeregan/instance_gnomeregan.cpp scripts/eastern_kingdoms/karazhan/boss_curator.cpp scripts/eastern_kingdoms/karazhan/boss_maiden_of_virtue.cpp scripts/eastern_kingdoms/karazhan/boss_midnight.cpp diff --git a/src/bindings/scripts/VC90/90ScriptDev2.vcproj b/src/bindings/scripts/VC90/90ScriptDev2.vcproj index f989fdb73d4..b6922755313 100644 --- a/src/bindings/scripts/VC90/90ScriptDev2.vcproj +++ b/src/bindings/scripts/VC90/90ScriptDev2.vcproj @@ -675,6 +675,22 @@ > </File> </Filter> +<Filter + Name="Gnomeregan" + > + <File + RelativePath="..\scripts\eastern_kingdoms\gnomeregan\gnomeregan.cpp" + > + </File> + <File + RelativePath="..\scripts\eastern_kingdoms\gnomeregan\gnomeregan.h" + > + </File> + <File + RelativePath="..\scripts\eastern_kingdoms\gnomeregan\instance_gnomeregan.cpp" + > + </File> + </Filter> <Filter Name="Karazhan" > diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/gnomeregan/gnomeregan.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/gnomeregan/gnomeregan.cpp new file mode 100644 index 00000000000..5b6e4e2cfd1 --- /dev/null +++ b/src/bindings/scripts/scripts/eastern_kingdoms/gnomeregan/gnomeregan.cpp @@ -0,0 +1,593 @@ +/* + * Copyright (C) 2010 Trinity <http://www.trinitycore.org/> + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* Script Data Start +SDName: Gnomeregan +SDAuthor: Manuel +SD%Complete: 90% +SDComment: Some visual effects are not implemented. +Script Data End */ + +#include "precompiled.h" +#include "gnomeregan.h" +#include "escort_ai.h" + +#define GOSSIP_START_EVENT "I am ready to being" + +enum eBlastmasterEmiShortfuse +{ + GOSSIP_TEXT_EMI = 1693, + + SAY_BLASTMASTER_0 = -1090000, + SAY_BLASTMASTER_1 = -1090001, + SAY_BLASTMASTER_2 = -1090002, + SAY_BLASTMASTER_3 = -1090003, + SAY_BLASTMASTER_4 = -1090004, + SAY_BLASTMASTER_5 = -1090005, + SAY_BLASTMASTER_6 = -1090006, + SAY_BLASTMASTER_7 = -1090007, + SAY_BLASTMASTER_8 = -1090008, + SAY_BLASTMASTER_9 = -1090009, + SAY_BLASTMASTER_10 = -1090010, + SAY_BLASTMASTER_11 = -1090011, + SAY_BLASTMASTER_12 = -1090012, + SAY_BLASTMASTER_13 = -1090013, + SAY_BLASTMASTER_14 = -1090014, + SAY_BLASTMASTER_15 = -1090015, + SAY_BLASTMASTER_16 = -1090016, + SAY_BLASTMASTER_17 = -1090017, + SAY_BLASTMASTER_18 = -1090018, + SAY_BLASTMASTER_19 = -1090019, + SAY_BLASTMASTER_20 = -1090020, + SAY_BLASTMASTER_21 = -1090021, + SAY_BLASTMASTER_22 = -1090022, + SAY_BLASTMASTER_23 = -1090023, + SAY_BLASTMASTER_24 = -1090024, + SAY_BLASTMASTER_25 = -1090025, + SAY_BLASTMASTER_26 = -1090026, + SAY_BLASTMASTER_27 = -1090027, + + SAY_GRUBBIS = -1090028 +}; + +const Position SpawnPosition[] = +{ + {-557.630,-114.514,-152.209,0.641}, + {-555.263,-113.802,-152.737,0.311}, + {-552.154,-112.476,-153.349,0.621}, + {-548.692,-111.089,-154.090,0.621}, + {-546.905,-108.340,-154.877,0.729}, + {-547.736,-105.154,-155.176,0.372}, + {-547.274,-114.109,-153.952,0.735}, + {-552.534,-110.012,-153.577,0.747}, + {-550.708,-116.436,-153.103,0.679}, + {-554.030,-115.983,-152.635,0.695}, + {-494.595,-87.516,149.116,3.344}, + {-493.349,-90.845,-148.882,3.717}, + {-491.995,-87.619,-148.197,3.230}, + {-490.732,-90.739,-148.091,3.230}, + {-490.554,-89.114,-148.055,3.230}, + {-495.240,-90.808,-149.493,3.238}, + {-494.195,-89.553,-149.131,3.254} +}; + +struct TRINITY_DLL_DECL npc_blastmaster_emi_shortfuseAI : public npc_escortAI +{ + npc_blastmaster_emi_shortfuseAI(Creature* pCreature) : npc_escortAI(pCreature) + { + pInstance = pCreature->GetInstanceData(); + pCreature->RestoreFaction(); + Reset(); + } + + ScriptedInstance* pInstance; + + uint8 uiPhase; + uint32 uiTimer; + + std::list<uint64> SummonList; + std::list<uint64> GoSummonList; + + void Reset() + { + if (!HasEscortState(STATE_ESCORT_ESCORTING)) + { + uiTimer = 0; + uiPhase = 0; + + RestoreAll(); + + SummonList.clear(); + GoSummonList.clear(); + } + } + + void NextStep(uint32 uiTimerStep,bool bNextStep = true,uint8 uiPhaseStep = 0) + { + uiTimer = uiTimerStep; + if (bNextStep) + ++uiPhase; + else + uiPhase = uiPhaseStep; + } + + void CaveDestruction(bool bBool) + { + if (GoSummonList.empty()) + return; + + for(std::list<uint64>::iterator itr = GoSummonList.begin(); itr != GoSummonList.end(); ++itr) + { + if (GameObject* pGo = GameObject::GetGameObject(*m_creature, *itr)) + { + if (pGo) + { + if (Creature *trigger = pGo->SummonTrigger(pGo->GetPositionX(), pGo->GetPositionY(),pGo->GetPositionZ(), 0, 1)) + { + //visual effects are not working! ¬¬ + trigger->CastSpell(trigger,11542,true); + trigger->CastSpell(trigger,35470,true); + } + pGo->RemoveFromWorld(); + //pGo->CastSpell(m_creature,12158); makes all die?! + } + } + } + + if (bBool) + { + if (pInstance) + if (GameObject* pGo = GameObject::GetGameObject((*m_creature),pInstance->GetData64(DATA_GO_CAVE_IN_RIGHT))) + pInstance->HandleGameObject(NULL,false,pGo); + }else + if (pInstance) + if (GameObject* pGo = GameObject::GetGameObject((*m_creature),pInstance->GetData64(DATA_GO_CAVE_IN_LEFT))) + pInstance->HandleGameObject(NULL,false,pGo); + } + + void SetInFace(bool bBool) + { + if (!pInstance) + return; + + if (bBool) + { + if (GameObject* pGo = GameObject::GetGameObject((*m_creature),pInstance->GetData64(DATA_GO_CAVE_IN_RIGHT))) + m_creature->SetFacingToObject(pGo); + }else + if (GameObject* pGo = GameObject::GetGameObject((*m_creature),pInstance->GetData64(DATA_GO_CAVE_IN_LEFT))) + m_creature->SetFacingToObject(pGo); + } + + void RestoreAll() + { + if (!pInstance) + return; + + if (GameObject* pGo = GameObject::GetGameObject((*m_creature),pInstance->GetData64(DATA_GO_CAVE_IN_RIGHT))) + pInstance->HandleGameObject(NULL,false,pGo); + + if (GameObject* pGo = GameObject::GetGameObject((*m_creature),pInstance->GetData64(DATA_GO_CAVE_IN_LEFT))) + pInstance->HandleGameObject(NULL,false,pGo); + + if (!GoSummonList.empty()) + for(std::list<uint64>::iterator itr = GoSummonList.begin(); itr != GoSummonList.end(); ++itr) + { + if (GameObject* pGo = GameObject::GetGameObject(*m_creature, *itr)) + pGo->RemoveFromWorld(); + } + + if (!SummonList.empty()) + for(std::list<uint64>::iterator itr = SummonList.begin(); itr != SummonList.end(); ++itr) + { + if (Creature* pSummon = Unit::GetCreature(*m_creature, *itr)) + { + if (pSummon->isAlive()) + pSummon->DisappearAndDie(); + else + pSummon->RemoveCorpse(); + } + } + } + + void AggroAllPlayers(Creature* pTemp) + { + Map::PlayerList const &PlList = m_creature->GetMap()->GetPlayers(); + + if(PlList.isEmpty()) + return; + + for (Map::PlayerList::const_iterator i = PlList.begin(); i != PlList.end(); ++i) + { + if(Player* pPlayer = i->getSource()) + { + if(pPlayer->isGameMaster()) + continue; + + if(pPlayer->isAlive()) + { + pTemp->SetInCombatWith(pPlayer); + pPlayer->SetInCombatWith(pTemp); + pTemp->AddThreat(pPlayer, 0.0f); + } + } + } + } + + void WaypointReached(uint32 uiPoint) + { + //just in case + if (GetPlayerForEscort()) + if (m_creature->getFaction() != GetPlayerForEscort()->getFaction()) + m_creature->setFaction(GetPlayerForEscort()->getFaction()); + + switch(uiPoint) + { + case 3: + SetEscortPaused(true); + NextStep(2000,false,3); + break; + case 7: + SetEscortPaused(true); + NextStep(2000,false,4); + break; + case 9: + NextStep(1000,false,8); + break; + case 10: + NextStep(25000,false,10); + break; + case 11: + SetEscortPaused(true); + SetInFace(true); + NextStep(1000,false,11); + break; + case 12: + NextStep(25000,false,18); + break; + case 13: + Summon(7); + NextStep(25000,false,19); + break; + case 14: + SetInFace(false); + DoScriptText(SAY_BLASTMASTER_26,m_creature); + SetEscortPaused(true); + NextStep(5000,false,20); + break; + } + } + + void SetData(uint32 uiI,uint32 uiValue) + { + switch(uiI) + { + case 1: + SetEscortPaused(true); + DoScriptText(SAY_BLASTMASTER_0,m_creature); + NextStep(1500,true); + break; + case 2: + if (!pInstance) + return; + + switch(uiValue) + { + case 1: + pInstance->SetData(TYPE_EVENT, IN_PROGRESS); + break; + case 2: + pInstance->SetData(TYPE_EVENT, DONE); + NextStep(5000,false,22); + break; + } + break; + } + } + + void Summon(uint8 uiCase) + { + switch(uiCase) + { + case 1: + m_creature->SummonCreature(NPC_CAVERNDEEP_AMBUSHER, SpawnPosition[0], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); + m_creature->SummonCreature(NPC_CAVERNDEEP_AMBUSHER, SpawnPosition[1], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); + m_creature->SummonCreature(NPC_CAVERNDEEP_AMBUSHER, SpawnPosition[2], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); + m_creature->SummonCreature(NPC_CAVERNDEEP_AMBUSHER, SpawnPosition[3], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); + m_creature->SummonCreature(NPC_CAVERNDEEP_AMBUSHER, SpawnPosition[4], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); + m_creature->SummonCreature(NPC_CAVERNDEEP_AMBUSHER, SpawnPosition[5], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); + m_creature->SummonCreature(NPC_CAVERNDEEP_AMBUSHER, SpawnPosition[6], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); + m_creature->SummonCreature(NPC_CAVERNDEEP_AMBUSHER, SpawnPosition[7], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); + m_creature->SummonCreature(NPC_CAVERNDEEP_AMBUSHER, SpawnPosition[8], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); + m_creature->SummonCreature(NPC_CAVERNDEEP_AMBUSHER, SpawnPosition[9], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); + break; + case 2: + if (GameObject* pGo = m_creature->SummonGameObject(183410, -533.140,-105.322,-156.016, 0, 0, 0, 0, 0, 1000)) + { + GoSummonList.push_back(pGo->GetGUID()); + pGo->SetFlag(GAMEOBJECT_FLAGS,GO_FLAG_UNK1); //We can't use it! + } + Summon(3); + break; + case 3: + m_creature->SummonCreature(NPC_CAVERNDEEP_AMBUSHER, SpawnPosition[0], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); + m_creature->SummonCreature(NPC_CAVERNDEEP_AMBUSHER, SpawnPosition[1], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); + m_creature->SummonCreature(NPC_CAVERNDEEP_AMBUSHER, SpawnPosition[2], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); + m_creature->SummonCreature(NPC_CAVERNDEEP_AMBUSHER, SpawnPosition[3], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); + DoScriptText(SAY_BLASTMASTER_19,m_creature); + break; + case 4: + if (GameObject* pGo = m_creature->SummonGameObject(183410, -542.199,-96.854,-155.790, 0, 0, 0, 0, 0, 1000)) + { + GoSummonList.push_back(pGo->GetGUID()); + pGo->SetFlag(GAMEOBJECT_FLAGS,GO_FLAG_UNK1); + } + break; + case 5: + m_creature->SummonCreature(NPC_CAVERNDEEP_AMBUSHER, SpawnPosition[0], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); + m_creature->SummonCreature(NPC_CAVERNDEEP_AMBUSHER, SpawnPosition[1], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); + m_creature->SummonCreature(NPC_CAVERNDEEP_AMBUSHER, SpawnPosition[2], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); + DoScriptText(SAY_BLASTMASTER_15,m_creature); + break; + case 6: + m_creature->SummonCreature(NPC_CAVERNDEEP_AMBUSHER, SpawnPosition[10], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); + m_creature->SummonCreature(NPC_CAVERNDEEP_AMBUSHER, SpawnPosition[11], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); + m_creature->SummonCreature(NPC_CAVERNDEEP_AMBUSHER, SpawnPosition[12], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); + m_creature->SummonCreature(NPC_CAVERNDEEP_AMBUSHER, SpawnPosition[13], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); + m_creature->SummonCreature(NPC_CAVERNDEEP_AMBUSHER, SpawnPosition[14], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); + break; + case 7: + if (GameObject* pGo = m_creature->SummonGameObject(183410, -507.820,-103.333,-151.353, 0, 0, 0, 0, 0, 1000)) + { + GoSummonList.push_back(pGo->GetGUID()); + pGo->SetFlag(GAMEOBJECT_FLAGS,GO_FLAG_UNK1); //We can't use it! + Summon(6); + } + break; + case 8: + if (GameObject* pGo = m_creature->SummonGameObject(183410, -511.829,-86.249,-151.431, 0, 0, 0, 0, 0, 1000)) + { + GoSummonList.push_back(pGo->GetGUID()); + pGo->SetFlag(GAMEOBJECT_FLAGS,GO_FLAG_UNK1); //We can't use it! + } + break; + case 9: + if (Creature* pGrubbis = m_creature->SummonCreature(NPC_GRUBBIS, SpawnPosition[15], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000)) + DoScriptText(SAY_GRUBBIS,pGrubbis); + m_creature->SummonCreature(NPC_CHOMPER, SpawnPosition[16], TEMPSUMMON_CORPSE_TIMED_DESPAWN, 1800000); + break; + } + } + + void UpdateEscortAI(const uint32 uiDiff) + { + if (uiPhase) + { + if (uiTimer <= uiDiff) + { + switch(uiPhase) + { + case 1: + DoScriptText(SAY_BLASTMASTER_1,m_creature); + NextStep(1500,true); + break; + case 2: + SetEscortPaused(false); + NextStep(0,false,0); + break; + case 3: + DoScriptText(SAY_BLASTMASTER_2,m_creature); + SetEscortPaused(false); + NextStep(0,false,0); + break; + case 4: + DoScriptText(SAY_BLASTMASTER_3,m_creature); + NextStep(3000,true); + break; + case 5: + DoScriptText(SAY_BLASTMASTER_4,m_creature); + NextStep(3000,true); + break; + case 6: + SetInFace(true); + DoScriptText(SAY_BLASTMASTER_5,m_creature); + Summon(1); + if (pInstance) + if (GameObject* pGo = GameObject::GetGameObject((*m_creature),pInstance->GetData64(DATA_GO_CAVE_IN_RIGHT))) + pInstance->HandleGameObject(NULL,true,pGo); + NextStep(3000,true); + break; + case 7: + DoScriptText(SAY_BLASTMASTER_6,m_creature); + SetEscortPaused(false); + NextStep(0,false,0); + break; + case 8: + m_creature->HandleEmoteCommand(EMOTE_STATE_WORK); + NextStep(25000,true); + break; + case 9: + Summon(2); + NextStep(0,false); + break; + case 10: + Summon(4); + NextStep(0,false); + break; + case 11: + DoScriptText(SAY_BLASTMASTER_17,m_creature); + NextStep(5000,true); + break; + case 12: + DoScriptText(SAY_BLASTMASTER_18,m_creature); + NextStep(5000,true); + break; + case 13: + DoScriptText(SAY_BLASTMASTER_20,m_creature); + CaveDestruction(true); + NextStep(8000,true); + break; + case 14: + DoScriptText(SAY_BLASTMASTER_21,m_creature); + NextStep(8500,true); + break; + case 15: + DoScriptText(SAY_BLASTMASTER_22,m_creature); + NextStep(2000,true); + break; + case 16: + DoScriptText(SAY_BLASTMASTER_23,m_creature); + SetInFace(false); + if (pInstance) + if (GameObject* pGo = GameObject::GetGameObject((*m_creature),pInstance->GetData64(DATA_GO_CAVE_IN_LEFT))) + pInstance->HandleGameObject(NULL,true,pGo); + NextStep(2000,true); + break; + case 17: + SetEscortPaused(false); + DoScriptText(SAY_BLASTMASTER_24,m_creature); + Summon(6); + NextStep(0,false); + break; + case 18: + Summon(7); + NextStep(0,false); + break; + case 19: + SetInFace(false); + Summon(8); + DoScriptText(SAY_BLASTMASTER_25,m_creature); + NextStep(0,false); + break; + case 20: + DoScriptText(SAY_BLASTMASTER_27,m_creature); + NextStep(2000,true); + break; + case 21: + Summon(9); + NextStep(0,false); + break; + case 22: + CaveDestruction(false); + DoScriptText(SAY_BLASTMASTER_20,m_creature); + NextStep(0,false); + break; + } + } else uiTimer -= uiDiff; + } + + if (!UpdateVictim()) + return; + + DoMeleeAttackIfReady(); + } + + void JustSummoned(Creature* pSummon) + { + SummonList.push_back(pSummon->GetGUID()); + AggroAllPlayers(pSummon); + } +}; + +CreatureAI* GetAI_npc_blastmaster_emi_shortfuse(Creature* pCreature) +{ + return new npc_blastmaster_emi_shortfuseAI(pCreature); +} + +bool GossipHello_npc_blastmaster_emi_shortfuse(Player* pPlayer, Creature* pCreature) +{ + ScriptedInstance* pInstance = pCreature->GetInstanceData(); + + if (pInstance && pInstance->GetData(TYPE_EVENT) == NOT_STARTED) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_START_EVENT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); + + pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXT_EMI, pCreature->GetGUID()); + + return true; +} + +bool GossipSelect_npc_blastmaster_emi_shortfuse(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + if (uiAction == GOSSIP_ACTION_INFO_DEF+1) + { + if (npc_escortAI* pEscortAI = CAST_AI(npc_blastmaster_emi_shortfuseAI, pCreature->AI())) + pEscortAI->Start(true, false,pPlayer->GetGUID()); + + pCreature->setFaction(pPlayer->getFaction()); + pCreature->AI()->SetData(1,0); + + pPlayer->CLOSE_GOSSIP_MENU(); + } + return true; +} + +struct TRINITY_DLL_DECL boss_grubbisAI : public ScriptedAI +{ + boss_grubbisAI(Creature* pCreature) : ScriptedAI(pCreature) + { + SetDataSummoner(); + } + + void SetDataSummoner() + { + if (!m_creature->isSummon()) + return; + + if (Unit* pSummon = CAST_SUM(m_creature)->GetSummoner()) + CAST_CRE(pSummon)->AI()->SetData(2,1); + } + + void UpdateAI(const uint32 diff) + { + if (!UpdateVictim()) + return; + + DoMeleeAttackIfReady(); + } + + void JustDied(Unit* pKiller) + { + if (!m_creature->isSummon()) + return; + + if (Unit* pSummon = CAST_SUM(m_creature)->GetSummoner()) + CAST_CRE(pSummon)->AI()->SetData(2,2); + } +}; + +CreatureAI* GetAI_boss_grubbis(Creature* pCreature) +{ + return new boss_grubbisAI(pCreature); +} + +void AddSC_gnomeregan() +{ + Script* newscript; + + newscript = new Script; + newscript->Name = "npc_blastmaster_emi_shortfuse"; + newscript->pGossipHello = &GossipHello_npc_blastmaster_emi_shortfuse; + newscript->pGossipSelect = &GossipSelect_npc_blastmaster_emi_shortfuse; + newscript->GetAI = &GetAI_npc_blastmaster_emi_shortfuse; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "boss_grubbis"; + newscript->GetAI = &GetAI_boss_grubbis; + newscript->RegisterSelf(); +} diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/gnomeregan/gnomeregan.h b/src/bindings/scripts/scripts/eastern_kingdoms/gnomeregan/gnomeregan.h new file mode 100644 index 00000000000..e46c811e9b1 --- /dev/null +++ b/src/bindings/scripts/scripts/eastern_kingdoms/gnomeregan/gnomeregan.h @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2010 Trinity <http://www.trinitycore.org/> + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef DEF_GNOMEREGAN_H +#define DEF_GNOMEREGAN_H + +enum eGameObjects +{ + GO_CAVE_IN_LEFT = 146085, + GO_CAVE_IN_RIGHT = 146086 +}; + +enum eCreatures +{ + NPC_BLASTMASTER_EMI_SHORTFUSE = 7998, + NPC_CAVERNDEEP_AMBUSHER = 6207, + NPC_GRUBBIS = 7361, + NPC_CHOMPER = 6215 +}; + +enum eData +{ + TYPE_EVENT = 1 +}; + +enum eData64 +{ + DATA_GO_CAVE_IN_LEFT, + DATA_GO_CAVE_IN_RIGHT, + DATA_NPC_BASTMASTER_EMI_SHORTFUSE +}; + +#endif diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/gnomeregan/instance_gnomeregan.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/gnomeregan/instance_gnomeregan.cpp new file mode 100644 index 00000000000..473a01a106d --- /dev/null +++ b/src/bindings/scripts/scripts/eastern_kingdoms/gnomeregan/instance_gnomeregan.cpp @@ -0,0 +1,119 @@ +/* + * Copyright (C) 2010 Trinity <http://www.trinitycore.org/> + * + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "precompiled.h" +#include "gnomeregan.h" + +#define MAX_ENCOUNTER 1 + +struct TRINITY_DLL_DECL instance_gnomeregan : public ScriptedInstance +{ + instance_gnomeregan(Map* pMap) : ScriptedInstance(pMap) + { + Initialize(); + }; + + uint32 m_auiEncounter[MAX_ENCOUNTER]; + + uint64 uiCaveInLeftGUID; + uint64 uiCaveInRightGUID; + + uint64 uiBastmasterEmiShortfuseGUID; + + void Initialize() + { + memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); + + uiCaveInLeftGUID = 0; + uiCaveInRightGUID = 0; + + uiBastmasterEmiShortfuseGUID = 0; + } + + void Load(const char* in) + { + if (!in) + { + OUT_LOAD_INST_DATA_FAIL; + return; + } + + OUT_LOAD_INST_DATA(in); + + std::istringstream loadStream(in); + loadStream >> m_auiEncounter[0]; + + for (uint8 i = 0; i < MAX_ENCOUNTER; ++i) + { + if (m_auiEncounter[i] == IN_PROGRESS) + m_auiEncounter[i] = NOT_STARTED; + } + + OUT_LOAD_INST_DATA_COMPLETE; + } + + void OnCreatureCreate(Creature* pCreature, bool bAdd) + { + switch(pCreature->GetEntry()) + { + case NPC_BLASTMASTER_EMI_SHORTFUSE: uiBastmasterEmiShortfuseGUID = pCreature->GetGUID(); break; + } + } + + void OnGameObjectCreate(GameObject* pGo, bool bAdd) + { + switch(pGo->GetEntry()) + { + case GO_CAVE_IN_LEFT: + uiCaveInLeftGUID = pGo->GetGUID(); + HandleGameObject(NULL,false,pGo); + break; + case GO_CAVE_IN_RIGHT: + uiCaveInRightGUID = pGo->GetGUID(); + HandleGameObject(NULL,false,pGo); + break; + } + } + + uint64 GetData64(uint32 uiType) + { + switch(uiType) + { + case DATA_GO_CAVE_IN_LEFT: return uiCaveInLeftGUID; + case DATA_GO_CAVE_IN_RIGHT: return uiCaveInRightGUID; + case DATA_NPC_BASTMASTER_EMI_SHORTFUSE: return uiBastmasterEmiShortfuseGUID; + } + + return 0; + } +}; + +InstanceData* GetInstanceData_instance_gnomeregan(Map* pMap) +{ + return new instance_gnomeregan(pMap); +} + +void AddSC_instance_gnomeregan() +{ + Script* newscript; + + newscript = new Script; + newscript->Name = "instance_gnomeregan"; + newscript->GetInstanceData = &GetInstanceData_instance_gnomeregan; + newscript->RegisterSelf(); +} diff --git a/src/bindings/scripts/scripts/northrend/sholazar_basin.cpp b/src/bindings/scripts/scripts/northrend/sholazar_basin.cpp index adc6ff94e3e..85fb0f06fb0 100644 --- a/src/bindings/scripts/scripts/northrend/sholazar_basin.cpp +++ b/src/bindings/scripts/scripts/northrend/sholazar_basin.cpp @@ -320,4 +320,9 @@ void AddSC_sholazar_basin() newscript->pGossipHello = &GossipHello_npc_avatar_of_freya; newscript->pGossipSelect = &GossipSelect_npc_avatar_of_freya; newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "npc_bushwhacker"; + newscript->GetAI = &GetAI_npc_bushwhacker; + newscript->RegisterSelf(); } diff --git a/src/bindings/scripts/system/ScriptLoader.cpp b/src/bindings/scripts/system/ScriptLoader.cpp index 2fc5dd5e757..8bbea6822dc 100644 --- a/src/bindings/scripts/system/ScriptLoader.cpp +++ b/src/bindings/scripts/system/ScriptLoader.cpp @@ -63,6 +63,8 @@ extern void AddSC_boss_victor_nefarius(); extern void AddSC_boss_mr_smite(); extern void AddSC_deadmines(); //Deadmines extern void AddSC_instance_deadmines(); +extern void AddSC_gnomeregan(); //Gnomeregan +extern void AddSC_instance_gnomeregan(); extern void AddSC_boss_attumen(); //Karazhan extern void AddSC_boss_curator(); extern void AddSC_boss_maiden_of_virtue(); @@ -522,6 +524,8 @@ void AddScripts() AddSC_boss_mr_smite(); AddSC_deadmines(); //Deadmines AddSC_instance_deadmines(); + AddSC_gnomeregan(); //Gnomeregan + AddSC_instance_gnomeregan(); AddSC_boss_attumen(); //Karazhan AddSC_boss_curator(); AddSC_boss_maiden_of_virtue(); |