diff options
author | maanuel <none@none> | 2009-12-06 02:10:37 -0300 |
---|---|---|
committer | maanuel <none@none> | 2009-12-06 02:10:37 -0300 |
commit | fe18770b6a54dc6fb3d5b2f020138e0beddc2867 (patch) | |
tree | ea5b99fa7710a77eb78ce94b327e8b66a60e3a72 | |
parent | 360e6c485431b5a01e7210b47c8baaee4165d34a (diff) |
Support for quest The Amphitheater of Anguish: Tuskarrmageddon! Q12935
--HG--
branch : trunk
-rw-r--r-- | sql/FULL/world_script_texts.sql | 2 | ||||
-rw-r--r-- | sql/FULL/world_scripts_full.sql | 2 | ||||
-rw-r--r-- | sql/updates/6421_world_scripts.sql | 7 | ||||
-rw-r--r-- | src/bindings/scripts/scripts/northrend/zuldrak.cpp | 274 |
4 files changed, 285 insertions, 0 deletions
diff --git a/sql/FULL/world_script_texts.sql b/sql/FULL/world_script_texts.sql index 619703b20fc..f0c763fc218 100644 --- a/sql/FULL/world_script_texts.sql +++ b/sql/FULL/world_script_texts.sql @@ -1650,6 +1650,8 @@ INSERT INTO `script_texts` (`npc_entry`,`entry`,`content_default`,`content_loc1` (25478,-1571028,'Alright! I am beaten. Your previous archmage is held in a prison, elevated and sealed. Even if you manage to reach her, Salrand herself holds the key. Your mission is folly!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,''), (25478,-1571029,'I''ve given you the information, $C ! You''re wasting your time....',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,''), (25478,-1571030,'Noooo! This tortue is inhumane! You have what you want... why don''t you just kill me?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,''), + (30007,-1571031,'This battle must be seen to be believed! Once a mild-mannered tuskarr fisherman, our next fighter turned to the life of a soulless mercenary when his entire family was wiped out by a vicious pack of lion seals and III-tempered penguins! Now he''s just In It for the gold! Ladies and gentlemen, ORINOKO TUSKBREAKER!!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13363,1,0,0,''), + (30020,-1571032,'Whisker! Where are you? Assist me!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,''), -- -1 574 000 UTGARDE KEEP (23953,-1574000,'Your blood is mine!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13221,1,0,0,'keleseth SAY_AGGRO'), diff --git a/sql/FULL/world_scripts_full.sql b/sql/FULL/world_scripts_full.sql index 3e7b839d132..6f83d491e46 100644 --- a/sql/FULL/world_scripts_full.sql +++ b/sql/FULL/world_scripts_full.sql @@ -1353,6 +1353,8 @@ UPDATE `creature_template` SET `ScriptName`='mob_mojo' WHERE `entry`=24480; UPDATE `creature_template` SET `ScriptName`='npc_captured_rageclaw' WHERE `entry`=29686; UPDATE `creature_template` SET `ScriptName`='npc_drakuru_shackles' WHERE `entry`=29700; UPDATE `creature_template` SET `ScriptName`='npc_gymer' WHERE `entry`=29647; +UPDATE `creature_template` SET `ScriptName`='npc_gurgthock' WHERE `entry`=30007; +UPDATE `creature_template` SET `ScriptName`='npc_orinoko_tuskbreaker' WHERE `entry`= 30020; /* ZUL'FARRAK */ UPDATE `creature_template` SET `ScriptName`='npc_sergeant_bly' WHERE `entry`=7604; diff --git a/sql/updates/6421_world_scripts.sql b/sql/updates/6421_world_scripts.sql new file mode 100644 index 00000000000..6a995737468 --- /dev/null +++ b/sql/updates/6421_world_scripts.sql @@ -0,0 +1,7 @@ +DELETE FROM `script_texts` WHERE `entry` IN (-1571031, -1571032); +INSERT INTO `script_texts` (`npc_entry`,`entry`,`content_default`,`content_loc1`,`content_loc2`,`content_loc3`,`content_loc4`,`content_loc5`,`content_loc6`,`content_loc7`,`content_loc8`,`sound`,`type`,`language`,`emote`,`comment`) VALUES +(30007,-1571031,'This battle must be seen to be believed! Once a mild-mannered tuskarr fisherman, our next fighter turned to the life of a soulless mercenary when his entire family was wiped out by a vicious pack of lion seals and III-tempered penguins! Now he''s just In It for the gold! Ladies and gentlemen, ORINOKO TUSKBREAKER!!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13363,1,0,0,''), +(30020,-1571032,'Whisker! Where are you? Assist me!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,''); + +UPDATE `creature_template` SET `ScriptName` = 'npc_gurgthock' WHERE `entry`=30007; +UPDATE `creature_template` SET `ScriptName` = 'npc_orinoko_tuskbreaker' WHERE `entry`=30020; diff --git a/src/bindings/scripts/scripts/northrend/zuldrak.cpp b/src/bindings/scripts/scripts/northrend/zuldrak.cpp index 148e7fd5ac8..ff3611a1a03 100644 --- a/src/bindings/scripts/scripts/northrend/zuldrak.cpp +++ b/src/bindings/scripts/scripts/northrend/zuldrak.cpp @@ -207,6 +207,269 @@ bool GossipSelect_npc_gymer(Player* pPlayer, Creature* pCreature, uint32 uiSende return true; } +/*#### +## npc_gurgthock +####*/ + +enum eGurgthock +{ + QUEST_AMPHITHEATER_ANGUISH_TUSKARRMAGEDDON = 12935, + + NPC_ORINOKO_TUSKBREAKER = 30020, + + SAY_QUEST_ACCEPT_TUSKARRMAGEDON = -1571031 +}; + +struct TRINITY_DLL_DECL npc_gurgthockAI : public ScriptedAI +{ + npc_gurgthockAI(Creature* pCreature) : ScriptedAI(pCreature) + { + pOrinoko = NULL; + } + + Creature* pOrinoko; + + uint32 uiTimer; + uint32 uiPhase; + uint32 uiRemoveFlagTimer; + uint32 uiQuest; + + bool bEventInProgress; + bool bRemoveFlag; + + void Reset() + { + m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); + uiTimer = 0; + uiPhase = 0; + uiRemoveFlagTimer = 5000; + bEventInProgress = false; + bRemoveFlag = false; + } + + void RemoveSummons() + { + if (bEventInProgress) + bEventInProgress = false; + + m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); + + if (pOrinoko) + { + pOrinoko->RemoveFromWorld(); + pOrinoko = NULL; + } + } + + void UpdateAI(const uint32 uiDiff) + { + ScriptedAI::UpdateAI(uiDiff); + + if (bRemoveFlag) + { + if (uiRemoveFlagTimer <= uiDiff) + { + m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); + bRemoveFlag = false; + } else uiRemoveFlagTimer -= uiDiff; + } + + switch(uiQuest) + { + case 1: + if (!bEventInProgress) + { + bEventInProgress = true; + bRemoveFlag = true; + DoScriptText(SAY_QUEST_ACCEPT_TUSKARRMAGEDON, m_creature); + uiPhase = 1; + uiTimer = 4000; + uiQuest = 0; + } + break; + } + + if (uiPhase) + { + if (uiTimer <= uiDiff) + { + switch(uiPhase) + { + case 1: + pOrinoko = m_creature->SummonCreature(NPC_ORINOKO_TUSKBREAKER, 5757.765137, -2945.161133, 286.276672, 5.156380, TEMPSUMMON_CORPSE_DESPAWN, 1000); + uiPhase = 2; + uiTimer = 4000; + break; + case 2: + if (pOrinoko) + pOrinoko->GetMotionMaster()->MoveJump(5776.319824, -2981.005371, 273.100037, 10.0f, 20.0f); + uiPhase = 0; + break; + } + } else uiTimer -= uiDiff; + } + } + + void SummonedCreatureDespawn(Creature* pSummon) + { + if (bEventInProgress) + bEventInProgress = false; + + m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); + } +}; + +bool QuestAccept_npc_gurgthock(Player* pPlayer, Creature* pCreature, Quest const *pQuest) +{ + switch (pQuest->GetQuestId()) + { + case QUEST_AMPHITHEATER_ANGUISH_TUSKARRMAGEDDON: + CAST_AI(npc_gurgthockAI, pCreature->AI())->uiQuest = 1; + break; + } + return false; +} + +CreatureAI* GetAI_npc_gurgthock(Creature* pCreature) +{ + return new npc_gurgthockAI(pCreature); +} + +/*#### +## npc_orinoko_tuskbreaker +####*/ + +enum eOrinokoTuskbreaker +{ + SPELL_BATTLE_SHOUT = 32064, + SPELL_FISHY_SCENT = 55937, + SPELL_IMPALE = 55929, + SPELL_SUMMON_WHISKER = 55946, + + NPC_WHISKER = 30113, + NPC_HUNGRY_PENGUIN = 30110, + + SAY_CALL_FOR_HELP = -1571032 +}; + +struct TRINITY_DLL_DECL npc_orinoko_tuskbreakerAI : public ScriptedAI +{ + npc_orinoko_tuskbreakerAI(Creature* pCreature) : ScriptedAI(pCreature) + { + m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE); + m_creature->SetReactState(REACT_PASSIVE); + pAffected = NULL; + pWhisker = NULL; + } + + bool bSummoned; + bool bBattleShout; + bool bFishyScent; + + uint32 uiBattleShoutTimer; + uint32 uiFishyScentTimer; + + Unit* pAffected; + Creature* pWhisker; + + void Reset() + { + bSummoned = false; + bBattleShout = false; + bFishyScent = false; + uiBattleShoutTimer = 0; + uiFishyScentTimer = 20000; + } + + void EnterEvadeMode() + { + if (pWhisker) + pWhisker->RemoveFromWorld(); + + if (Unit* pSummoner = CAST_SUM(m_creature)->GetSummoner()) + { + CAST_AI(npc_gurgthockAI,CAST_CRE(pSummoner)->AI())->bEventInProgress = false; + CAST_AI(npc_gurgthockAI,CAST_CRE(pSummoner)->AI())->RemoveSummons(); + } + } + + void MovementInform(uint32 uiType, uint32 uiId) + { + if (uiType != POINT_MOTION_TYPE) + return; + + m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE); + m_creature->SetReactState(REACT_AGGRESSIVE); + m_creature->SetHomePosition(m_creature->GetPositionX(),m_creature->GetPositionY(),m_creature->GetPositionZ(), 0); + uiBattleShoutTimer = 7000; + } + + void EnterCombat(Unit* pWho) + { + DoCast(pWho, SPELL_IMPALE); + } + + void UpdateAI(const uint32 uiDiff) + { + if (!UpdateVictim()) + return; + + if (!bBattleShout && uiBattleShoutTimer <= uiDiff) + { + DoCast(m_creature, SPELL_BATTLE_SHOUT); + bBattleShout = true; + } else uiBattleShoutTimer -= uiDiff; + + if (uiFishyScentTimer <= uiDiff) + { + if (pAffected = SelectUnit(SELECT_TARGET_RANDOM,0)) + DoCast(pAffected, SPELL_FISHY_SCENT); + uiFishyScentTimer = 20000; + } else uiFishyScentTimer -= uiDiff; + + if (!bSummoned && m_creature->GetHealth()*100 / m_creature->GetMaxHealth() <= 50) + { + DoScriptText(SAY_CALL_FOR_HELP ,m_creature); + //DoCast(m_creature->getVictim(), SPELL_SUMMON_WHISKER); petai is not working correctly??? + pWhisker = m_creature->SummonCreature(NPC_WHISKER, m_creature->GetPositionX(), m_creature->GetPositionY(), m_creature->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 0); + bSummoned = true; + } + + DoMeleeAttackIfReady(); + } + + void JustSummoned(Creature* pSummon) + { + switch(pSummon->GetEntry()) + { + case NPC_WHISKER: + pSummon->AI()->AttackStart(m_creature->getVictim()); + break; + case NPC_HUNGRY_PENGUIN: + if (pAffected && pAffected->isAlive()) + pSummon->AI()->AttackStart(pAffected); + break; + } + } + + void JustDied(Unit* pKiller) + { + if (pWhisker) + pWhisker->RemoveFromWorld(); + + if (pKiller->GetTypeId() == TYPEID_PLAYER) + CAST_PLR(pKiller)->GroupEventHappens(QUEST_AMPHITHEATER_ANGUISH_TUSKARRMAGEDDON, CAST_PLR(pKiller)); + + if (Unit* pSummoner = CAST_SUM(m_creature)->GetSummoner()) + CAST_AI(npc_gurgthockAI,CAST_CRE(pSummoner)->AI())->bEventInProgress = false; + } +}; + +CreatureAI* GetAI_npc_orinoko_tuskbreaker(Creature* pCreature) +{ + return new npc_orinoko_tuskbreakerAI(pCreature); +} + void AddSC_zuldrak() { Script *newscript; @@ -226,4 +489,15 @@ void AddSC_zuldrak() newscript->pGossipHello = &GossipHello_npc_gymer; newscript->pGossipSelect = &GossipSelect_npc_gymer; newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "npc_gurgthock"; + newscript->GetAI = &GetAI_npc_gurgthock; + newscript->pQuestAccept = &QuestAccept_npc_gurgthock; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "npc_orinoko_tuskbreaker"; + newscript->GetAI = &GetAI_npc_orinoko_tuskbreaker; + newscript->RegisterSelf(); } |