aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bindings/scripts/scripts/zone/barrens/the_barrens.cpp197
-rw-r--r--src/bindings/scripts/sql/Updates/r82_trinity.sql1
2 files changed, 198 insertions, 0 deletions
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