All pastes #1263398 Raw Edit

The_Affray_r741.diff

public diff v1 · immutable
#1263398 ·published 2008-11-21 10:55 UTC
rendered paste body
Index: scripts/zone/barrens/the_barrens.cpp===================================================================--- scripts/zone/barrens/the_barrens.cpp	(Revision 741)+++ scripts/zone/barrens/the_barrens.cpp	(Arbeitskopie)@@ -165,6 +165,201 @@     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 MANGOS_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 +381,9 @@     newscript->GetAI = &GetAI_npc_taskmaster_fizzule;     newscript->pReceiveEmote = &ReciveEmote_npc_taskmaster_fizzule;     newscript->RegisterSelf();+    +    newscript = new Script;+    newscript->Name="npc_twiggy_flathead";+    newscript->GetAI = GetAI_npc_twiggy_flathead;+    newscript->RegisterSelf(); }