Ejemplo n.º 1
0
        void SummonedCreatureDies(Creature *summon, Unit*)
        {
            if (!isSartharion)
                ClearInstance();
            else if (pInstance)
            {
                pInstance->DoRemoveAurasDueToSpellOnPlayers(SPELL_TWILIGHT_TORMENT_SARTHARION);
                pInstance->SetData(DATA_CLEAR_PORTAL, 1);
            }

            events.ScheduleEvent(EVENT_MINIBOSS_OPEN_PORTAL, 30000);
        }
Ejemplo n.º 2
0
        void JustDied(Unit* )
        {
            Talk(SAY_SHADRON_DEATH);

            if (!isSartharion)
            {
                ClearInstance();
                if (pInstance)
                    pInstance->SetData(BOSS_SHADRON_EVENT, DONE);
            }
            else if (pInstance)
            {
                if (Creature* cr = ObjectAccessor::GetCreature(*me, pInstance->GetData64(DATA_SARTHARION)))
                    cr->AI()->DoAction(ACTION_DRAKE_DIED);
            }
        }
Ejemplo n.º 3
0
        void SummonedCreatureDies(Creature *summon, Unit*)
        {
            if (isSartharion && pInstance)
            {
                if (Creature* cr = ObjectAccessor::GetCreature(*me, pInstance->GetData64(DATA_SARTHARION)))
                    cr->RemoveAura(SPELL_GIFT_OF_TWILIGHT_FIRE);

                pInstance->SetData(DATA_CLEAR_PORTAL, 0);
            }
            else
            {
                ClearInstance();
                me->RemoveAura(SPELL_GIFT_OF_TWILIGHT_SHADOW);
            }

            events.ScheduleEvent(EVENT_MINIBOSS_OPEN_PORTAL, 30000);
        }
Ejemplo n.º 4
0
        void Reset()
        {
            events.Reset();
            ClearInstance();

            me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC);
            me->SetSpeed(MOVE_FLIGHT, 1.0f);
            me->SetCanFly(false);
            me->ResetLootMode();
            isSartharion = false;
            timer = 0;

            if (pInstance)
            {
                pInstance->SetData(BOSS_SHADRON_EVENT, NOT_STARTED);
                pInstance->SetData(DATA_CLEAR_PORTAL, 0);
            }
        }
Ejemplo n.º 5
0
        void Reset()
        {
            summons2.DespawnAll();
            ClearInstance();
            
            me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC);
            me->SetDisableGravity(false);
            me->SetSpeed(MOVE_FLIGHT, 1.0f);
            me->SetCanFly(false);
            me->ResetLootMode();
            isSartharion = false;
            timer = 0;

            if (pInstance)
            {
                pInstance->SetData(BOSS_TENEBRON_EVENT, NOT_STARTED);
                pInstance->SetData(DATA_CLEAR_PORTAL, 0);
            }
        }
Ejemplo n.º 6
0
void CShockWaveEffect::Start(FLOAT time, BOOL restart)
{
	INDEX	i;
	if(!PreStart(time, restart)) return;
	if(m_eState != ES_NOT_STARTED) return;

	ASSERT(m_iSplitCount >= 8);

	ClearInstance();

	//vertex index, once
	m_vectorIndex.reserve(m_iSplitCount * 2 * 3);
	for( i=0; i<m_iSplitCount-1; ++i)
	{
		m_vectorIndex.push_back(2 * i + 0);
		m_vectorIndex.push_back(2 * i + 2);
		m_vectorIndex.push_back(2 * i + 1);
		m_vectorIndex.push_back(2 * i + 1);
		m_vectorIndex.push_back(2 * i + 2);
		m_vectorIndex.push_back(2 * i + 3);
	}
	m_vectorIndex.push_back(2 * (m_iSplitCount-1) + 0);
	m_vectorIndex.push_back(0);
	m_vectorIndex.push_back(2 * (m_iSplitCount-1) + 1);
	m_vectorIndex.push_back(2 * (m_iSplitCount-1) + 1);
	m_vectorIndex.push_back(0);
	m_vectorIndex.push_back(1); 

	//move vector fill, once
	m_vectorMoveVector.reserve(m_iSplitCount * 2);
	const FLOAT angleUnit = 2 * PI / m_iSplitCount;
	FLOAT angle = 0;
	for( i = 0; i < m_iSplitCount; ++i)
	{
		m_vectorMoveVector.push_back( FLOAT3D( sinf(angle), 0, cosf(angle) ) );
		m_vectorMoveVector.push_back( FLOAT3D( sinf(angle), 0, cosf(angle) ) );
		angle += angleUnit;
	}

	//tex coord fill, once
	m_vectorTexCoord.reserve(m_iSplitCount * 2);
	GFXTexCoord texcrd1, texcrd2, texcrd3, texcrd4;
	texcrd1.s = 0.05f;
	texcrd1.t = 0.05f;
	texcrd2.s = 0.05f;
	texcrd2.t = 0.95f;
	texcrd3.s = 0.95f;
	texcrd3.t = 0.05f;
	texcrd4.s = 0.95f;
	texcrd4.t = 0.95f;
	for( i = 0; i < m_iSplitCount; ++i)
	{
		if(i % 2 == 0)
		{
			m_vectorTexCoord.push_back(texcrd1);
			m_vectorTexCoord.push_back(texcrd2);
		}
		else
		{
			m_vectorTexCoord.push_back(texcrd3);
			m_vectorTexCoord.push_back(texcrd4);
		}
	}

	m_ssRadius.Prepare();
	m_ssWidth.Prepare();
	m_ssHeight.Prepare();

	//first state gfx vertex filll, fir frame
	FLOAT height = m_ssHeight.Value(0);
	FLOAT radiusInner = 0, radiusOuter = 0;
	if(m_bInnerBasis)
	{
		radiusInner = m_ssRadius.Value(0);
		radiusOuter = radiusInner + m_ssWidth.Value(0);
	}
	else
	{
		radiusOuter = m_ssRadius.Value(0);
		radiusInner = radiusOuter - m_ssWidth.Value(0);
	}

	m_vectorGFXVertex.clear();
	m_vectorGFXVertex.reserve(m_iSplitCount * 2);

	//tag의 정보
	m_vTagPos = m_ptrAttachTag->CurrentTagInfo().m_vPos;
	if(m_eRotation != EOTT_NONE) m_qTagRot = m_ptrAttachTag->CurrentTagInfo().m_qRot;

	//gfx vertex fill, every frame
/*
	GFXVertex vtx;
	FLOAT3D pos;
	angle = 0;
	for(i=0; i<m_iSplitCount; ++i)
	{
		pos = m_vectorMoveVector[2*i+0] * radiusOuter;
		RotateVector(pos, rotTag);
		pos += posTag;
		vtx.x = pos(1);	vtx.y = pos(2);	vtx.z = pos(3);
		m_vectorGFXVertex.push_back(vtx);

		pos = m_vectorMoveVector[2*i+1] * radiusInner;
		RotateVector(pos, rotTag);
		pos += posTag;
		vtx.x = pos(1);	vtx.y = pos(2);	vtx.z = pos(3);
		m_vectorGFXVertex.push_back(vtx);
		angle += angleUnit;
	}

	//gfx color fill, once
	GFXColor col;
	for(i=0; i<m_iSplitCount; ++i)
	{
		col.Set(0xFFFFFFFF);
		m_vectorGFXColor.push_back(col);
		m_vectorGFXColor.push_back(col);
	}
*/
	m_bColorWhite = TRUE;

	PostStart();
}
Ejemplo n.º 7
0
CShockWaveEffect::~CShockWaveEffect()
{
	if(m_ptdTexture) _pTextureStock->Release(m_ptdTexture);

	ClearInstance();
}