From a1d00528a32f124f99ea26273b7172c2a5e2868e Mon Sep 17 00:00:00 2001 From: megamage Date: Sun, 19 Oct 2008 23:56:06 -0500 Subject: [svn] Script for quest 1719. Patch provided by ckegg. --HG-- branch : trunk --- .../scripts/scripts/zone/barrens/the_barrens.cpp | 197 +++++++++++++++++++++ src/bindings/scripts/sql/Updates/r82_trinity.sql | 1 + 2 files changed, 198 insertions(+) create mode 100644 src/bindings/scripts/sql/Updates/r82_trinity.sql (limited to 'src') diff --git a/src/bindings/scripts/scripts/zone/barrens/the_barrens.cpp b/src/bindings/scripts/scripts/zone/barrens/the_barrens.cpp index f073bb00271..3f1ebd4803b 100644 --- a/src/bindings/scripts/scripts/zone/barrens/the_barrens.cpp +++ b/src/bindings/scripts/scripts/zone/barrens/the_barrens.cpp @@ -164,7 +164,199 @@ bool ReciveEmote_npc_taskmaster_fizzule(Player *player, Creature *_Creature, uin } return true; } +/*##### +## npc_twiggy_flathead +#####*/ +#define BIG_WILL 6238 +#define AFFRAY_CHALLENGER 6240 +#define SAY_BIG_WILL_READY "Ready when you are, warrior" +#define SAY_TWIGGY_FLATHEAD_BEGIN "The Affray has begun, get ready to fight!" +#define SAY_TWIGGY_FLATHEAD_FRAY "You! Enter the fray!" +#define SAY_TWIGGY_FLATHEAD_DOWN "Challenger is down!" +#define SAY_TWIGGY_FLATHEAD_OVER "The Affray is over" + +float AffrayChallengerLoc[6][4]= +{ + {-1683, -4326, 2.79, 0}, + {-1682, -4329, 2.79, 0}, + {-1683, -4330, 2.79, 0}, + {-1680, -4334, 2.79, 1.49}, + {-1674, -4326, 2.79, 3.49}, + {-1677, -4334, 2.79, 1.66} +}; + +struct TRINITY_DLL_DECL npc_twiggy_flatheadAI : public ScriptedAI +{ + npc_twiggy_flatheadAI(Creature *c) : ScriptedAI(c) {Reset();} + + bool EventInProgress; + bool EventGrate; + bool EventBigWill; + bool Challenger_down[6]; + uint32 Wave; + uint32 Wave_Timer; + uint32 Challenger_checker; + uint64 PlayerGUID; + uint64 AffrayChallenger[6]; + uint64 BigWill; + + void Reset() + { + EventInProgress = false; + EventGrate = false; + EventBigWill = false; + Wave_Timer = 600000; + Challenger_checker = 0; + Wave = 0; + PlayerGUID = 0; + + for(uint8 i = 0; i < 6; i++) { + AffrayChallenger[i] = 0; + Challenger_down[i] = false; + } + BigWill = 0; + } + + void Aggro(Unit *who) { } + + void MoveInLineOfSight(Unit *who) + { + if(!who || (!who->isAlive())) return; + + if (m_creature->IsWithinDistInMap(who, 10.0f) && (who->GetTypeId() == TYPEID_PLAYER) && ((Player*)who)->GetQuestStatus(1719) == QUEST_STATUS_INCOMPLETE && !EventInProgress) + { + PlayerGUID = who->GetGUID(); + EventInProgress = true; + } + } + + void KilledUnit(Unit *victim) { } + + void UpdateAI(const uint32 diff) + { + if (EventInProgress) { + Player* pWarrior = NULL; + + if(PlayerGUID) + pWarrior = ((Player*)Unit::GetUnit((*m_creature), PlayerGUID)); + + if(!pWarrior) + return; + + if(!pWarrior->isAlive() && pWarrior->GetQuestStatus(1719) == QUEST_STATUS_INCOMPLETE) { + EventInProgress = false; + DoYell(SAY_TWIGGY_FLATHEAD_DOWN,LANG_UNIVERSAL,NULL); + pWarrior->FailQuest(1719); + + for(uint8 i = 0; i < 6; i++) { + if (AffrayChallenger[i]) { + Creature* pCreature = (Creature*)Unit::GetUnit((*m_creature), AffrayChallenger[i]); + if(pCreature) { + if(pCreature->isAlive()) { + pCreature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); + pCreature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + pCreature->setDeathState(JUST_DIED); + } + } + } + AffrayChallenger[i] = 0; + Challenger_down[i] = false; + } + + if (BigWill) { + Creature* pCreature = (Creature*)Unit::GetUnit((*m_creature), BigWill); + if(pCreature) { + if(pCreature->isAlive()) { + pCreature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); + pCreature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + pCreature->setDeathState(JUST_DIED); + } + } + } + BigWill = 0; + } + + if (!EventGrate && EventInProgress) { + float x,y,z; + pWarrior->GetPosition(x, y, z); + + if (x >= -1684 && x <= -1674 && y >= -4334 && y <= -4324) { + pWarrior->AreaExploredOrEventHappens(1719); + DoYell(SAY_TWIGGY_FLATHEAD_BEGIN,LANG_UNIVERSAL,NULL); + + for(uint8 i = 0; i < 6; i++) { + Creature* pCreature = m_creature->SummonCreature(AFFRAY_CHALLENGER, AffrayChallengerLoc[i][0], AffrayChallengerLoc[i][1], AffrayChallengerLoc[i][2], AffrayChallengerLoc[i][3], TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 600000); + pCreature->setFaction(35); + pCreature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + pCreature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + pCreature->HandleEmoteCommand(15); + AffrayChallenger[i] = pCreature->GetGUID(); + } + Wave_Timer = 5000; + Challenger_checker = 1000; + EventGrate = true; + } + } + else if (EventInProgress) { + if (Challenger_checker < diff) { + for(uint8 i = 0; i < 6; i++) { + if (AffrayChallenger[i]) { + Creature* pCreature = (Creature*)Unit::GetUnit((*m_creature), AffrayChallenger[i]); + if((!pCreature || (!pCreature->isAlive())) && !Challenger_down[i]) { + DoYell(SAY_TWIGGY_FLATHEAD_DOWN,LANG_UNIVERSAL,NULL); + Challenger_down[i] = true; + } + } + } + Challenger_checker = 1000; + } else Challenger_checker -= diff; + + if(Wave_Timer < diff) { + if (AffrayChallenger[Wave] && Wave < 6 && !EventBigWill) { + DoYell(SAY_TWIGGY_FLATHEAD_FRAY,LANG_UNIVERSAL,NULL); + Creature* pCreature = (Creature*)Unit::GetUnit((*m_creature), AffrayChallenger[Wave]); + if(pCreature || (pCreature->isAlive())) { + pCreature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + pCreature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + pCreature->HandleEmoteCommand(15); + pCreature->setFaction(14); + ((CreatureAI*)pCreature->AI())->AttackStart(pWarrior); + Wave++; + Wave_Timer = 20000; + } + } + else if (Wave >= 6 && !EventBigWill) { + Creature* pCreature = m_creature->SummonCreature(BIG_WILL, -1722, -4341, 6.12, 6.26, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 480000); + BigWill = pCreature->GetGUID(); + //pCreature->GetMotionMaster()->MovePoint(0, -1693, -4343, 4.32); + //pCreature->GetMotionMaster()->MovePoint(1, -1684, -4333, 2.78); + pCreature->GetMotionMaster()->MovePoint(2, -1682, -4329, 2.79); + //pCreature->HandleEmoteCommand(15); + pCreature->HandleEmoteCommand(27); + EventBigWill = true; + Wave_Timer = 1000; + } + else if (Wave >= 6 && EventBigWill && BigWill) { + Creature* pCreature = (Creature*)Unit::GetUnit((*m_creature), BigWill); + if (!pCreature->isAlive()) { + DoYell(SAY_TWIGGY_FLATHEAD_OVER,LANG_UNIVERSAL,NULL); + EventInProgress = false; + EventBigWill = false; + EventGrate = false; + PlayerGUID = 0; + Wave = 0; + } + } + } else Wave_Timer -= diff; + } + } + } +}; +CreatureAI* GetAI_npc_twiggy_flathead(Creature *_Creature) +{ + return new npc_twiggy_flatheadAI (_Creature); +} void AddSC_the_barrens() { Script *newscript; @@ -186,4 +378,9 @@ void AddSC_the_barrens() newscript->GetAI = GetAI_npc_taskmaster_fizzule; newscript->pReceiveEmote = &ReciveEmote_npc_taskmaster_fizzule; m_scripts[nrscripts++] = newscript; + + newscript = new Script; + newscript->Name="npc_twiggy_flathead"; + newscript->GetAI = GetAI_npc_twiggy_flathead; + m_scripts[nrscripts++] = newscript; } diff --git a/src/bindings/scripts/sql/Updates/r82_trinity.sql b/src/bindings/scripts/sql/Updates/r82_trinity.sql new file mode 100644 index 00000000000..acdfdd06a6f --- /dev/null +++ b/src/bindings/scripts/sql/Updates/r82_trinity.sql @@ -0,0 +1 @@ +UPDATE `creature_template` SET `ScriptName` = 'npc_twiggy_flathead' WHERE `entry` =6248; \ No newline at end of file -- cgit v1.2.3