mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-23 18:36:31 +01:00
Support for quest The Amphitheater of Anguish: Tuskarrmageddon! Q12935
--HG-- branch : trunk
This commit is contained in:
@@ -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'),
|
||||
|
||||
@@ -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;
|
||||
|
||||
7
sql/updates/6421_world_scripts.sql
Normal file
7
sql/updates/6421_world_scripts.sql
Normal file
@@ -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;
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user