Changeset 77

Show
Ignore:
Timestamp:
11/19/08 13:32:05 (17 years ago)
Author:
yumileroy
Message:

[svn] Script for quest 1719. Patch provided by ckegg.

Original author: megamage
Date: 2008-10-19 23:56:06-05:00

Location:
trunk/src/bindings/scripts
Files:
1 added
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/bindings/scripts/scripts/zone/barrens/the_barrens.cpp

    r48 r77  
    165165    return true; 
    166166} 
    167  
     167/*##### 
     168## npc_twiggy_flathead 
     169#####*/ 
     170 
     171#define BIG_WILL 6238 
     172#define AFFRAY_CHALLENGER 6240 
     173#define SAY_BIG_WILL_READY                  "Ready when you are, warrior" 
     174#define SAY_TWIGGY_FLATHEAD_BEGIN           "The Affray has begun, get ready to fight!" 
     175#define SAY_TWIGGY_FLATHEAD_FRAY            "You! Enter the fray!" 
     176#define SAY_TWIGGY_FLATHEAD_DOWN            "Challenger is down!" 
     177#define SAY_TWIGGY_FLATHEAD_OVER            "The Affray is over" 
     178 
     179float AffrayChallengerLoc[6][4]= 
     180{ 
     181    {-1683, -4326, 2.79, 0}, 
     182    {-1682, -4329, 2.79, 0}, 
     183    {-1683, -4330, 2.79, 0}, 
     184    {-1680, -4334, 2.79, 1.49}, 
     185    {-1674, -4326, 2.79, 3.49}, 
     186    {-1677, -4334, 2.79, 1.66} 
     187}; 
     188 
     189struct TRINITY_DLL_DECL npc_twiggy_flatheadAI : public ScriptedAI 
     190{ 
     191    npc_twiggy_flatheadAI(Creature *c) : ScriptedAI(c) {Reset();} 
     192 
     193    bool EventInProgress; 
     194    bool EventGrate; 
     195    bool EventBigWill; 
     196    bool Challenger_down[6]; 
     197    uint32 Wave; 
     198    uint32 Wave_Timer; 
     199    uint32 Challenger_checker; 
     200    uint64 PlayerGUID; 
     201    uint64 AffrayChallenger[6]; 
     202    uint64 BigWill; 
     203 
     204    void Reset() 
     205    { 
     206        EventInProgress = false; 
     207        EventGrate = false; 
     208        EventBigWill = false; 
     209        Wave_Timer = 600000; 
     210        Challenger_checker = 0; 
     211        Wave = 0; 
     212        PlayerGUID = 0; 
     213 
     214        for(uint8 i = 0; i < 6; i++) { 
     215            AffrayChallenger[i] = 0; 
     216            Challenger_down[i] = false; 
     217        } 
     218        BigWill = 0; 
     219    } 
     220 
     221    void Aggro(Unit *who) { } 
     222 
     223    void MoveInLineOfSight(Unit *who) 
     224    { 
     225        if(!who || (!who->isAlive())) return; 
     226 
     227        if (m_creature->IsWithinDistInMap(who, 10.0f) && (who->GetTypeId() == TYPEID_PLAYER) && ((Player*)who)->GetQuestStatus(1719) == QUEST_STATUS_INCOMPLETE && !EventInProgress) 
     228        { 
     229            PlayerGUID = who->GetGUID(); 
     230            EventInProgress = true; 
     231        } 
     232    } 
     233 
     234    void KilledUnit(Unit *victim) { } 
     235 
     236    void UpdateAI(const uint32 diff) 
     237    { 
     238        if (EventInProgress) { 
     239            Player* pWarrior = NULL; 
     240 
     241            if(PlayerGUID) 
     242                pWarrior = ((Player*)Unit::GetUnit((*m_creature), PlayerGUID)); 
     243 
     244            if(!pWarrior) 
     245                return; 
     246 
     247            if(!pWarrior->isAlive() && pWarrior->GetQuestStatus(1719) == QUEST_STATUS_INCOMPLETE) { 
     248                EventInProgress = false; 
     249                DoYell(SAY_TWIGGY_FLATHEAD_DOWN,LANG_UNIVERSAL,NULL); 
     250                pWarrior->FailQuest(1719); 
     251 
     252                for(uint8 i = 0; i < 6; i++) { 
     253                    if (AffrayChallenger[i]) { 
     254                        Creature* pCreature = (Creature*)Unit::GetUnit((*m_creature), AffrayChallenger[i]); 
     255                        if(pCreature) { 
     256                            if(pCreature->isAlive()) { 
     257                                pCreature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); 
     258                                pCreature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); 
     259                                pCreature->setDeathState(JUST_DIED); 
     260                            } 
     261                        } 
     262                    } 
     263                    AffrayChallenger[i] = 0; 
     264                    Challenger_down[i] = false; 
     265                } 
     266 
     267                if (BigWill) { 
     268                    Creature* pCreature = (Creature*)Unit::GetUnit((*m_creature), BigWill); 
     269                    if(pCreature) { 
     270                        if(pCreature->isAlive()) { 
     271                            pCreature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); 
     272                            pCreature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); 
     273                            pCreature->setDeathState(JUST_DIED); 
     274                        } 
     275                    } 
     276                } 
     277                BigWill = 0; 
     278            } 
     279 
     280            if (!EventGrate && EventInProgress) { 
     281                float x,y,z; 
     282                pWarrior->GetPosition(x, y, z); 
     283 
     284                if (x >= -1684 && x <= -1674 && y >= -4334 && y <= -4324) { 
     285                    pWarrior->AreaExploredOrEventHappens(1719); 
     286                    DoYell(SAY_TWIGGY_FLATHEAD_BEGIN,LANG_UNIVERSAL,NULL); 
     287 
     288                    for(uint8 i = 0; i < 6; i++) { 
     289                        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); 
     290                        pCreature->setFaction(35); 
     291                        pCreature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); 
     292                        pCreature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); 
     293                        pCreature->HandleEmoteCommand(15); 
     294                        AffrayChallenger[i] = pCreature->GetGUID(); 
     295                    } 
     296                    Wave_Timer = 5000; 
     297                    Challenger_checker = 1000; 
     298                    EventGrate = true; 
     299                } 
     300            } 
     301            else if (EventInProgress) { 
     302                if (Challenger_checker < diff) { 
     303                    for(uint8 i = 0; i < 6; i++) { 
     304                        if (AffrayChallenger[i]) { 
     305                            Creature* pCreature = (Creature*)Unit::GetUnit((*m_creature), AffrayChallenger[i]); 
     306                            if((!pCreature || (!pCreature->isAlive())) && !Challenger_down[i]) { 
     307                                DoYell(SAY_TWIGGY_FLATHEAD_DOWN,LANG_UNIVERSAL,NULL); 
     308                                Challenger_down[i] = true; 
     309                            } 
     310                        } 
     311                    } 
     312                    Challenger_checker = 1000; 
     313                } else Challenger_checker -= diff; 
     314 
     315                if(Wave_Timer < diff) { 
     316                    if (AffrayChallenger[Wave] && Wave < 6 && !EventBigWill) { 
     317                        DoYell(SAY_TWIGGY_FLATHEAD_FRAY,LANG_UNIVERSAL,NULL); 
     318                        Creature* pCreature = (Creature*)Unit::GetUnit((*m_creature), AffrayChallenger[Wave]); 
     319                        if(pCreature || (pCreature->isAlive())) { 
     320                            pCreature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); 
     321                            pCreature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); 
     322                            pCreature->HandleEmoteCommand(15); 
     323                            pCreature->setFaction(14); 
     324                            ((CreatureAI*)pCreature->AI())->AttackStart(pWarrior); 
     325                            Wave++; 
     326                            Wave_Timer = 20000; 
     327                        } 
     328                    } 
     329                    else if (Wave >= 6 && !EventBigWill) { 
     330                        Creature* pCreature = m_creature->SummonCreature(BIG_WILL, -1722, -4341, 6.12, 6.26, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 480000); 
     331                        BigWill = pCreature->GetGUID(); 
     332                        //pCreature->GetMotionMaster()->MovePoint(0, -1693, -4343, 4.32); 
     333                        //pCreature->GetMotionMaster()->MovePoint(1, -1684, -4333, 2.78); 
     334                        pCreature->GetMotionMaster()->MovePoint(2, -1682, -4329, 2.79); 
     335                        //pCreature->HandleEmoteCommand(15); 
     336                        pCreature->HandleEmoteCommand(27); 
     337                        EventBigWill = true; 
     338                        Wave_Timer = 1000; 
     339                    } 
     340                    else if (Wave >= 6 && EventBigWill && BigWill) { 
     341                        Creature* pCreature = (Creature*)Unit::GetUnit((*m_creature), BigWill); 
     342                        if (!pCreature->isAlive()) { 
     343                            DoYell(SAY_TWIGGY_FLATHEAD_OVER,LANG_UNIVERSAL,NULL); 
     344                            EventInProgress = false; 
     345                            EventBigWill = false; 
     346                            EventGrate = false; 
     347                            PlayerGUID = 0; 
     348                            Wave = 0; 
     349                        } 
     350                    } 
     351                } else Wave_Timer -= diff; 
     352            } 
     353        } 
     354    } 
     355}; 
     356CreatureAI* GetAI_npc_twiggy_flathead(Creature *_Creature) 
     357{ 
     358    return new npc_twiggy_flatheadAI (_Creature); 
     359} 
    168360void AddSC_the_barrens() 
    169361{ 
     
    187379    newscript->pReceiveEmote = &ReciveEmote_npc_taskmaster_fizzule; 
    188380    m_scripts[nrscripts++] = newscript; 
    189 } 
     381 
     382    newscript = new Script; 
     383    newscript->Name="npc_twiggy_flathead"; 
     384    newscript->GetAI = GetAI_npc_twiggy_flathead; 
     385    m_scripts[nrscripts++] = newscript; 
     386}