rendered paste bodyIndex: 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(); }