Example #1
0
	/*
		At <= 50% He will spawn 2 Defias Blackguards
		ToDo: Make them despawn WHEN he dies, also make them unlootable
	*/
	void AIUpdate()
	{
		if(GetHealthPercent() <= 75 && GetPhase() == 1)
		{
			Emote("Lap dogs, all of you.", Text_Yell, 5782);
			SetPhase(2);
		}
		else if(GetHealthPercent() <= 50 && GetPhase() == 2)
		{
			Emote("Fools! Our cause is righteous.", Text_Yell, 5783);
			// Defias Blackguard x 2
			MoonScriptCreatureAI* Guard = NULL;
			for(int x=0; x<2; x++)
			{
				Guard = SpawnCreature(636);
				if(Guard == NULL)
					continue;
				Guard->SetDespawnWhenInactive(true);
				Guard->GetUnit()->m_noRespawn = true;
				Guard = NULL;
			}
			SetPhase(3);
		}
		else if(GetHealthPercent() <= 25 && GetPhase() == 3)
		{
			Emote("The brotherhood shall remain.", Text_Yell, 5784);
			SetPhase(4);
		}
		ParentClass::AIUpdate();
	}
Example #2
0
    void AIUpdate()
    {
        if (GetHealthPercent() <= 75 && GetPhase() == 1)
        {
            _unit->SendScriptTextChatMessage(7723);     // Lapdogs, all of you!
            SetPhase(2);
        }
        else if (GetHealthPercent() <= 50 && GetPhase() == 2)
        {
            _unit->SendScriptTextChatMessage(7725);     // Fools! Our cause is righteous!

            for (int x = 0; x < 2; x++)
            {
                MoonScriptCreatureAI* Guard = SpawnCreature(636);
                if (Guard != NULL)
                {
                    Guard->SetDespawnWhenInactive(true);
                    Guard->GetUnit()->m_noRespawn = true;
                }
            }

            SetPhase(3);

        }
        else if (GetHealthPercent() <= 25 && GetPhase() == 3)
        {
            _unit->SendScriptTextChatMessage(7727);     // The Brotherhood shall prevail!
            SetPhase(4);
        }
        ParentClass::AIUpdate();
    }
	void OnDied(Unit* pKiller)
	{
		MoonScriptCreatureAI* mLadySacrolash = GetNearestCreature(CN_LADY_SACROLASH);
		if( mLadySacrolash != NULL && mLadySacrolash->IsAlive() )
		{
			mLadySacrolash->Emote("Alythess! Your fire burns within me!", Text_Yell, 12488);
		}
		ParentClass::OnDied(pKiller);
	}
	void OnDied(Unit* pKiller)
	{
		MoonScriptCreatureAI* mGrandWarlockAlythess = GetNearestCreature(CN_GRAND_WARLOCK_ALYTHESS);
		if( mGrandWarlockAlythess != NULL && mGrandWarlockAlythess->IsAlive() )
		{
			mGrandWarlockAlythess->Emote("Sacrolash!", Text_Yell, 12492);
		}
		ParentClass::OnDied(pKiller);
	}
Example #5
0
	void SetupPatrol(uint32 entry)
	{
		MoonScriptCreatureAI* Patrol = NULL;
		Patrol = SpawnCreature(entry, (-216.863632f+RandomFloat(10)-10), (514.258423f+RandomFloat(10)-10), 51.537754f, 1.480364f);
		if(Patrol == NULL)
			return;
		Patrol->AddWaypoint(Patrol->CreateWaypoint(1, 2500, Flag_Walk, PatrolCoords[3]));
		Patrol->AddWaypoint(Patrol->CreateWaypoint(2, 2500, Flag_Walk, PatrolCoords[4]));
		Patrol->ForceWaypointMove(1);
		Patrol = NULL;
	}
Example #6
0
	void SetupPatrol(uint32 entry)
	{
		MoonScriptCreatureAI* Patrol = NULL;
		Patrol = SpawnCreature(entry, (-98.025314f+RandomFloat(10)-10), (-396.978333f+RandomFloat(10)-10), 58.609558f, 2.973405f);
		if(Patrol == NULL)
			return;
		Patrol->AddWaypoint(Patrol->CreateWaypoint(1, 2500, Flag_Walk, PatrolCoords[1]));
		Patrol->AddWaypoint(Patrol->CreateWaypoint(2, 2500, Flag_Walk, PatrolCoords[2]));
		Patrol->ForceWaypointMove(1);
		Patrol = NULL;
	}
Example #7
0
MoonScriptCreatureAI* MoonScriptCreatureAI::SpawnCreature(uint32 pCreatureId, float pX, float pY, float pZ, float pO, bool pForceSameFaction, Unit *pTarget)
{
	Creature *NewCreature = _unit->GetMapMgr()->GetMapScript()->SpawnCreature(pCreatureId, pX, pY, pZ, pO);
	MoonScriptCreatureAI* CreatureScriptAI = ( NewCreature ) ? static_cast<MoonScriptCreatureAI*>(NewCreature->GetScript()) : NULL;
	if( pForceSameFaction && NewCreature )
	{
		uint32 FactionTemplate = _unit->GetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE);
		NewCreature->SetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE, FactionTemplate);
	}
	if (pTarget!=NULLUNIT)
		CreatureScriptAI->AttackPlayer(pTarget);
	return CreatureScriptAI;
}
Example #8
0
	void AIUpdate()
	{
		if(SpawnTimer && IsTimerFinished(SpawnTimer))
		{
			switch(GetPhase())
			{
				case 2: Moccasin(); ResetTimer(SpawnTimer,100000); SetPhase(3); break;
				case 3: Ectoplasm(); ResetTimer(SpawnTimer,100000); SetPhase(4); break;
				case 4: BMutanus(); ResetTimer(SpawnTimer,100000); SetPhase(5); break;
			}
		}
		if(GetPhase() == 5 && (!Mutanus || !Mutanus->GetUnit()->isAlive()))
		{
			MoonScriptCreatureAI* Naralex = GetNearestCreature(3679);
			if(Naralex && Naralex->IsAlive())
			{
				SetDisplayId(17089);
				Naralex->SetDisplayId(17089);
				Naralex->Emote("I am awake... at last", Text_Say, 5789);
				Naralex->GetUnit()->SetStandState(STANDSTATE_STAND);
				SetFlyMode(true);
				Naralex->SetFlyMode(true);
				MoveTo(-6.704030f, 200.308838f, -26.938824f);
				Naralex->MoveTo(-6.704030f, 200.308838f, -26.938824f);
			}
			SetPhase(6);
		}
		ParentClass::AIUpdate();
	}
        void OnDied(Unit*  pKiller)
        {
            GetUnit()->SendChatMessageAlternateEntry(4275, CHAT_MSG_MONSTER_YELL, LANG_UNIVERSAL, "Who dares interfere with the Sons of Arugal?");
            GetUnit()->PlaySoundToSet(5791);

            MoonScriptCreatureAI* voidwalker = NULL;
            // Spawn 4 x Arugal's Voidwalkers
            for(int x = 1; x < 5; x++)
            {
                voidwalker = SpawnCreature(4627, VWSpawns[x].x, VWSpawns[x].y, VWSpawns[x].z, VWSpawns[x].o);
                if(voidwalker)
                {
                    voidwalker->AggroNearestPlayer();
                    voidwalker = NULL;
                }
            }

            ParentClass::OnDied(pKiller);
        }
	void OnReachWP(uint32 iWaypointId, bool bForwards)
	{
		if( iWaypointId == 1 )
		{
			switch( RandomUInt(2) )
			{
			case 0: Emote( "Life from the lifelessness... death for you.",			Text_Yell, 13961); break;
			case 1: Emote( "Nothing is wasted in the process. You will see....",	Text_Yell, 13962); break;
			};
			
			MoonScriptCreatureAI* pAnvil = GetNearestCreature( CN_VOLKHANS_ANVIL );
			if( pAnvil )
				_unit->CastSpell( pAnvil->GetUnit(), SPELL_TEMPER, true );
			else
				_unit->CastSpell( GetUnit(), SPELL_TEMPER, true );

			SetCanEnterCombat( true ); 
			_unit->GetAIInterface()->AttackReaction( GetNearestPlayer() , 1 ); // hackfix
		};
	};
Example #11
0
		void AIUpdate()
		{
			// Every 25% Halazzi calls on the lynx
			if(!mLynx && GetHealthPercent() <= (100 - SplitCount * 25))
				Split();

			// Lynx OR Halazzi is at 20% HP Merge them together again
			if(mLynx && (mLynx->GetHealthPct() <= 20 || GetHealthPercent() <= 20))
				Merge();

			// At <25% Phase 3 begins
			if(GetHealthPercent() < 25 && GetPhase() == 1)
			{
				ResetTimer(mTotemTimer, 30000);
				SetPhase(3);
			}

			if(GetPhase() == 2 || GetPhase() == 3)
			{
				if(IsTimerFinished(mTotemTimer))
				{
					MoonScriptCreatureAI* Totem = NULL;
					Totem = SpawnCreature(CN_TOTEM, (_unit->GetPositionX() + RandomFloat(3) - 3), (_unit->GetPositionY() + RandomFloat(3) - 3), _unit->GetPositionZ(), 0, true);
					if(Totem)
					{
						Totem->Despawn(60000); // Despawn in 60 seconds
						Totem->AggroNearestPlayer();
						Totem = NULL;
					}
					switch(GetPhase())
					{
						case 2:
							ResetTimer(mTotemTimer, 60000);
							break;
						case 3:
							ResetTimer(mTotemTimer, 30000);
							break; // Spawn them faster then phase 2
					}
				}
			}
		}
Example #12
0
bool ForceofNeltharakuSpell(uint32 i, SpellPointer pSpell) // Becoming a Shadoweave Tailor
{
	if(pSpell->u_caster->IsPlayer() == false)
		return true;

	PlayerPointer	pPlayer= TO_PLAYER(pSpell->u_caster);
	UnitPointer		pUnit	= TO_UNIT(pPlayer->GetMapMgr()->GetCreature(GET_LOWGUID_PART(pPlayer->GetSelection())));

	if(pUnit == NULLUNIT)
		return true;

	if(!pUnit->IsCreature())
		return true;

	CreaturePointer		 pTarget	= TO_CREATURE(pUnit);
	QuestLogEntry	 *pQuest	= pPlayer->GetQuestLogForEntry(10854);
	if(pQuest == NULL)
		return true;

	if(pTarget->GetEntry() == 21722 && pPlayer->CalcDistance(pUnit)<30)
	{
		if ( pQuest && pQuest->GetMobCount(0) < pQuest->GetQuest()->required_mobcount[0] )
		{
			pTarget->CastSpell(pPlayer, dbcSpell.LookupEntry(38775), true);
			pQuest->SetMobCount(0, pQuest->GetMobCount(0)+1);
			pQuest->SendUpdateAddKill(0);
			pQuest->UpdatePlayerFields();
			if ( pTarget->GetScript() != NULL )
			{
				MoonScriptCreatureAI *pDrakeAI = static_cast<MoonScriptCreatureAI*>(pTarget->GetScript());
				pDrakeAI->SetCanMove(true);
				pDrakeAI->SetWaypointToMove(0);
			}
		}
	}
	return true;
}
Example #13
0
    void AIUpdate()
	{	
        ParentClass::AIUpdate();

		if( IsTimerFinished( mSummonTime ) )
		{
			MoonScriptCreatureAI *Eagle = NULL;
			// Spawn 3 Soaring Eagles
			for(int x=0; x<3; x++)
			{
				Eagle = SpawnCreature(CN_SOARING_EAGLE, ( _unit->GetPositionX() + RandomFloat( 12 ) - 10 ), ( _unit->GetPositionY()+ RandomFloat( 12 ) - 15 ),
				_unit->GetPositionZ(), _unit->GetOrientation(), true);
				if(Eagle)
				{
					Eagle->AggroNearestUnit();
					Eagle->SetDespawnWhenInactive(true);
				}
			}
			Eagle = NULL;
			Emote("Feed, me bruddahs!", Text_Yell, 12019);
			// Restart the timer
			ResetTimer( mSummonTime, 120000);
		}
	}
Example #14
0
	void SetupPatrol(uint32 entry)
	{
		MoonScriptCreatureAI* Patrol = NULL;
		Patrol = SpawnCreature(entry, (-265.543121f+RandomFloat(10)-10), (-578.010925f+RandomFloat(10)-10), 50.516342f, 6.246144f);
		if(Patrol == NULL)
			return;

		Patrol->AddWaypoint(Patrol->CreateWaypoint(1, 2500, WALK, PatrolCoords[5]));
		Patrol->AddWaypoint(Patrol->CreateWaypoint(2, 2500, WALK, PatrolCoords[6]));
		Patrol->AddWaypoint(Patrol->CreateWaypoint(3, 2500, WALK, PatrolCoords[7]));
		Patrol->ForceWaypointMove(1);
		Patrol = NULL;
	}
Example #15
0
	void RestartEncounter()
	{
		for( vector<Creature*>::iterator CreatureIter = mEncounterArray.begin(); CreatureIter != mEncounterArray.end(); ++CreatureIter )
		{
			Creature* pCreature = (*CreatureIter);
			if( pCreature != NULL )
			{
				if( pCreature->isAlive() )
					pCreature->Despawn( 1000, 0);
				else
					sEventMgr.AddEvent( pCreature, &Creature::SafeDelete, EVENT_CREATURE_REMOVE_CORPSE, 1000, 1, 0);
			}
		};

		mEncounterArray.clear();

		// lets remove adds =>
		for( std::set< Object* >::iterator itr = _unit->GetInRangeSetBegin(); itr != _unit->GetInRangeSetEnd(); ++itr )
		{
			if( (*itr)->IsInWorld() && (*itr)->IsCreature() )
			{
				Creature* pAdd = static_cast<Creature*>(*itr);
				if( pAdd->isAlive() && ( pAdd->GetEntry() ==  CN_FELFIRE_PORTAL || pAdd->GetEntry() == CN_VOLATILE_FELFIRE_FIEND ) )
					pAdd->Despawn( 1000, 0 );
			};
		};

		MoonScriptCreatureAI* Anveena = SpawnCreature(CN_ANVEENA, 1698.550049f, 628.033020f, 72.541901f, 3.864760f);
		if( Anveena && Anveena->GetUnit() )
			AddEncounterCreature( Anveena->GetUnit() );

		for( int i = 0; i < 3; ++i )
		{
			MoonScriptCreatureAI* pHand = SpawnCreature( CN_HAND_OF_THE_DECEIVER, HandSpawn[i].mX, HandSpawn[i].mY, HandSpawn[i].mZ, HandSpawn[i].mO );
			if( pHand && pHand->GetUnit() )
				AddEncounterCreature( pHand->GetUnit() );
		};
	
		mStartCount = 0;
		ApplyAura( 46410 );
	};
Example #16
0
        void VoidZoneArc()
        {
            ResetTimer(VoidTimer, (RandomUInt(10) + 30) * 1000);

            std::vector<Player*> TargetTable;
            set< Object* >::iterator Itr = _unit->GetInRangePlayerSetBegin();
            for (; Itr != _unit->GetInRangePlayerSetEnd(); Itr++)
            {
                Player* RandomTarget = NULL;
                if (!(*Itr)->IsPlayer())
                    continue;
                RandomTarget = TO< Player* >(*Itr);
                if (RandomTarget && RandomTarget->isAlive() && isHostile(*Itr, _unit))
                    TargetTable.push_back(RandomTarget);
            }

            if (!TargetTable.size())
                return;

            size_t RandTarget = rand() % TargetTable.size();

            Player* RTarget = TargetTable[RandTarget];

            if (!RTarget)
                return;

            float vzX = RandomUInt(5) * cos(RandomFloat(6.28f)) + RTarget->GetPositionX();
            float vzY = RandomUInt(5) * cos(RandomFloat(6.28f)) + RTarget->GetPositionY();
            float vzZ = RTarget->GetPositionZ();
            MoonScriptCreatureAI* VoidZone = SpawnCreature(CN_VOIDZONEARC, vzX, vzY, vzZ);
            VoidZone->GetUnit()->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2);
            VoidZone->GetUnit()->m_noRespawn = true;
            if (!VoidZone->GetUnit()->IsInWorld())
            {
                VoidZone->Despawn();
                return;
            }
            RTarget = NULL;
            VoidZone->Despawn(60000, 0);
        }
Example #17
0
 void AIUpdate()
 {
     if(IsTimerFinished(mJovaanTimer))
     {
         switch(mJovaanPhase)
         {
             case 0:
                 {
                     MoonScriptCreatureAI* pRazuunAI = SpawnCreature(21502, -3300.47f, 2927.22f, 173.870f, 2.42924f, false);    // Spawn Razuun
                     if(pRazuunAI != NULL)
                     {
                         pRazuunAI->GetUnit()->SetUInt64Value(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2);
                         pRazuunAI->SetCanEnterCombat(false);
                         pRazuunAI->SetMoveType(Move_DontMoveWP);
                         pRazuunAI->SetCanMove(false);
                     }
                     _unit->SetStandState(STANDSTATE_KNEEL);
                     _unit->Emote(EMOTE_ONESHOT_TALK);
                     _unit->SendChatMessage(CHAT_MSG_MONSTER_SAY, LANG_UNIVERSAL, "Everything is in readiness, warbringer.");
                     mJovaanPhase = 1;
                     ResetTimer(mJovaanTimer, 6000);
                 }
                 break;
             case 1:
                 {
                     _unit->Emote(EMOTE_ONESHOT_TALK);
                     _unit->SendChatMessage(CHAT_MSG_MONSTER_SAY, LANG_UNIVERSAL, "Warbringer, that will require the use of all the hold's infernals. It may leave us vulnerable to a counterattack.");
                     mJovaanPhase = 2;
                     ResetTimer(mJovaanTimer, 11000);
                 }
                 break;
             case 2:
                 {
                     _unit->SetStandState(STANDSTATE_STAND);
                     mJovaanPhase = 3;
                     ResetTimer(mJovaanTimer, 1000);
                 }
                 break;
             case 3:
                 {
                     _unit->Emote(EMOTE_ONESHOT_SALUTE);
                     _unit->SendChatMessage(CHAT_MSG_MONSTER_SAY, LANG_UNIVERSAL, "It shall be as you say, warbringer. One last question, if I may...");
                     mJovaanPhase = 4;
                     ResetTimer(mJovaanTimer, 10000);
                 }
                 break;
             case 4:
                 {
                     _unit->Emote(EMOTE_ONESHOT_QUESTION);
                     _unit->SendChatMessage(CHAT_MSG_MONSTER_SAY, LANG_UNIVERSAL, "What's in the crate?");
                     mJovaanPhase = 5;
                     ResetTimer(mJovaanTimer, 10000);
                 }
                 break;
             case 5:
                 {
                     _unit->Emote(EMOTE_ONESHOT_SALUTE);
                     mJovaanPhase = -1;
                     RemoveTimer(mJovaanTimer);
                 }
                 break;
         }
     }
     ParentClass::AIUpdate();
 }