示例#1
0
void instance_naxxramas::SetData(uint32 uiType, uint32 uiData)
{
    switch(uiType)
    {
        case TYPE_ANUB_REKHAN:
            m_auiEncounter[0] = uiData;
            SwitchDoor(uiData, m_uiAnubDoorGUID);
            if (uiData == DONE)
                SwitchDoor(uiData, m_uiAnubGateGUID);
            break;
        case TYPE_FAERLINA:
            m_auiEncounter[1] = uiData;
            SwitchDoor(uiData, m_uiFaerWebGUID);
            if (uiData == DONE)
            {
                SwitchDoor(uiData, m_uiFaerDoorGUID);
                SwitchDoor(uiData, m_uiMaexOuterGUID);
            }
            break;
        case TYPE_MAEXXNA:
            m_auiEncounter[2] = uiData;
            SwitchDoor(uiData, m_uiMaexInnerGUID);
            if (uiData == DONE)
            {
                SwitchDoor(uiData, m_uiAracEyeRampGUID);
                DoRespawnGameObject(m_uiAracPortalGUID, 30*MINUTE);
                DoTaunt();
            }
            break;
        case TYPE_NOTH:
            m_auiEncounter[3] = uiData;
            SwitchDoor(uiData, m_uiNothEntryDoorGUID);
            if (uiData == DONE)
            {
                SwitchDoor(uiData, m_uiNothExitDoorGUID);
                SwitchDoor(uiData, m_uiHeigEntryDoorGUID);
            }
            break;
        case TYPE_HEIGAN:
            m_auiEncounter[4] = uiData;
            SwitchDoor(uiData, m_uiHeigEntryDoorGUID);
            if (uiData == DONE)
            {
                SwitchDoor(uiData, m_uiMiliEyeRampGUID);
                SwitchDoor(uiData, m_uiHeigExitDoorGUID);
            }
            break;
        case TYPE_LOATHEB:
            m_auiEncounter[5] = uiData;
            SwitchDoor(uiData, m_uiLoathebDoorGUID);
            if (uiData == DONE)
            {
                SwitchDoor(uiData, m_uiPlagEyeRampGUID);
                DoRespawnGameObject(m_uiPlagPortalGUID, 30*MINUTE);
                DoTaunt();
            }
            break;
        case TYPE_RAZUVIOUS:
            m_auiEncounter[6] = uiData;
            break;
        case TYPE_GOTHIK:
            switch(uiData)
            {
                case IN_PROGRESS:
                    SwitchDoor(uiData, m_uiGothikEntryDoorGUID);
                    SwitchDoor(uiData, m_uiGothCombatGateGUID);
                    break;
                case SPECIAL:
                    SwitchDoor(uiData, m_uiGothCombatGateGUID);
                    break;
                case FAIL:
                    if (m_auiEncounter[7] == IN_PROGRESS)
                        SwitchDoor(uiData, m_uiGothCombatGateGUID);

                    SwitchDoor(uiData, m_uiGothikEntryDoorGUID);
                    break;
                case DONE:
                    SwitchDoor(uiData, m_uiGothikEntryDoorGUID);
                    SwitchDoor(uiData, m_uiGothikExitDoorGUID);
                    SwitchDoor(uiData, m_uiHorsemenDoorGUID);
                    break;
            }
            m_auiEncounter[7] = uiData;
            break;
        case TYPE_FOUR_HORSEMEN:
            m_auiEncounter[8] = uiData;
            SwitchDoor(uiData, m_uiHorsemenDoorGUID);
            if (uiData == DONE)
            {
                SwitchDoor(uiData, m_uiMiliEyeRampGUID);
                DoRespawnGameObject(m_uiMiliPortalGUID, 30*MINUTE);
                DoRespawnGameObject(m_uiHorsemenChestGUID, 30*MINUTE);
                DoTaunt();
            }
            break;
        case TYPE_PATCHWERK:
            m_auiEncounter[9] = uiData;
            if (uiData == DONE)
                SwitchDoor(uiData, m_uiPathExitDoorGUID);
            break;
        case TYPE_GROBBULUS:
            m_auiEncounter[10] = uiData;
            break;
        case TYPE_GLUTH:
            m_auiEncounter[11] = uiData;
            if (uiData == DONE)
            {
                SwitchDoor(uiData, m_uiGlutExitDoorGUID);
                SwitchDoor(uiData, m_uiThadDoorGUID);
            }
            break;
        case TYPE_THADDIUS:
            m_auiEncounter[12] = uiData;
            SwitchDoor(uiData, m_uiThadDoorGUID);
            if (uiData == DONE)
            {
                SwitchDoor(uiData, m_uiConsEyeRampGUID);
                DoRespawnGameObject(m_uiConsPortalGUID, 30*MINUTE);
                DoTaunt();
            }
            break;
        case TYPE_SAPPHIRON:
            m_auiEncounter[13] = uiData;
            if (uiData == DONE)
                SwitchDoor(uiData, m_uiKelthuzadDoorGUID);
            break;
        case TYPE_KELTHUZAD:
            m_auiEncounter[14] = uiData;
            SwitchDoor(uiData, m_uiKelthuzadExitDoorGUID);
            break;

        case TYPE_ZELIEK:
            m_auiEncounter[15] = uiData;
            if (uiData == NOT_STARTED && m_auiEncounter[16] != IN_PROGRESS && m_auiEncounter[17] != IN_PROGRESS && m_auiEncounter[18] != IN_PROGRESS)
                SetData(TYPE_FOUR_HORSEMEN, NOT_STARTED);
            if (uiData == IN_PROGRESS)
                SetData(TYPE_FOUR_HORSEMEN, IN_PROGRESS);
            break;

        case TYPE_THANE:
            m_auiEncounter[16] = uiData;
            if (uiData == NOT_STARTED && m_auiEncounter[15] != IN_PROGRESS && m_auiEncounter[17] != IN_PROGRESS && m_auiEncounter[18] != IN_PROGRESS)
                SetData(TYPE_FOUR_HORSEMEN, NOT_STARTED);
            if (uiData == IN_PROGRESS)
                SetData(TYPE_FOUR_HORSEMEN, IN_PROGRESS);
            break;

        case TYPE_BLAUMEUX:
            m_auiEncounter[17] = uiData;
            if (uiData == NOT_STARTED && m_auiEncounter[16] != IN_PROGRESS && m_auiEncounter[15] != IN_PROGRESS && m_auiEncounter[18] != IN_PROGRESS)
                SetData(TYPE_FOUR_HORSEMEN, NOT_STARTED);
            if (uiData == IN_PROGRESS)
                SetData(TYPE_FOUR_HORSEMEN, IN_PROGRESS);
            break;

        case TYPE_RIVENDARE:
            m_auiEncounter[18] = uiData;
            if (uiData == NOT_STARTED && m_auiEncounter[16] != IN_PROGRESS && m_auiEncounter[17] != IN_PROGRESS && m_auiEncounter[15] != IN_PROGRESS)
                SetData(TYPE_FOUR_HORSEMEN, NOT_STARTED);
            if (uiData == IN_PROGRESS)
                SetData(TYPE_FOUR_HORSEMEN, IN_PROGRESS);
            break;
    }

    if (m_auiEncounter[15] == DONE && m_auiEncounter[16] == DONE && m_auiEncounter[17] == DONE && m_auiEncounter[18] && m_auiEncounter[8] != DONE )
        SetData(TYPE_FOUR_HORSEMEN, DONE);

    if (uiData == DONE)
    {
        OUT_SAVE_INST_DATA;

        std::ostringstream saveStream;
        saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " "
            << m_auiEncounter[3] << " " << m_auiEncounter[4] << " " << m_auiEncounter[5] << " "
            << m_auiEncounter[6] << " " << m_auiEncounter[7] << " " << m_auiEncounter[8] << " "
            << m_auiEncounter[9] << " " << m_auiEncounter[10] << " " << m_auiEncounter[11] << " "
            << m_auiEncounter[12] << " " << m_auiEncounter[13] << " " << m_auiEncounter[14];

        strInstData = saveStream.str();

        SaveToDB();
        OUT_SAVE_INST_DATA_COMPLETE;
    }
}
void instance_naxxramas::SetData(uint32 uiType, uint32 uiData)
{
    switch(uiType)
    {
        case TYPE_ANUB_REKHAN:
            m_auiEncounter[0] = uiData;
            SwitchDoor(uiData, m_uiAnubDoorGUID);
            if (uiData == DONE)
                SwitchDoor(uiData, m_uiAnubGateGUID);
            break;
        case TYPE_FAERLINA:
            m_auiEncounter[1] = uiData;
            SwitchDoor(uiData, m_uiFaerWebGUID);
            if (uiData == DONE)
            {
                SwitchDoor(uiData, m_uiFaerDoorGUID);
                SwitchDoor(uiData, m_uiMaexOuterGUID);
            }
            break;
        case TYPE_MAEXXNA:
            m_auiEncounter[2] = uiData;
            SwitchDoor(uiData, m_uiMaexInnerGUID);
            if (uiData == DONE)
            {
                SwitchDoor(uiData, m_uiAracEyeRampGUID);
                DoRespawnGameObject(m_uiAracPortalGUID, 30*MINUTE);
            }
            break;
        case TYPE_NOTH:
            m_auiEncounter[3] = uiData;
            SwitchDoor(uiData, m_uiNothEntryDoorGUID);
            if (uiData == DONE)
            {
                SwitchDoor(uiData, m_uiNothExitDoorGUID);
                SwitchDoor(uiData, m_uiHeigEntryDoorGUID);
            }
            break;
        case TYPE_HEIGAN:
            m_auiEncounter[4] = uiData;
            SwitchDoor(uiData, m_uiHeigEntryDoorGUID);
            if (uiData == DONE)
                SwitchDoor(uiData, m_uiMiliEyeRampGUID);
				SwitchDoor(uiData, m_uiHeigExitDoorGUID);				
            break;
        case TYPE_LOATHEB:
            m_auiEncounter[5] = uiData;
            SwitchDoor(uiData, m_uiLoathebDoorGUID);
            if (uiData == DONE)
            {
                SwitchDoor(uiData, m_uiPlagEyeRampGUID);
                DoRespawnGameObject(m_uiPlagPortalGUID, 30*MINUTE);
            }
            break;
        case TYPE_RAZUVIOUS:
            m_auiEncounter[6] = uiData;
            if (uiData == DONE)
                SwitchDoor(uiData, m_uiGothikEntryDoorGUID);
            break;
        case TYPE_GOTHIK:
            switch(uiData)
			{
                 case IN_PROGRESS:
                    SwitchDoor(uiData, m_uiGothikEntryDoorGUID);
                    SwitchDoor(uiData, m_uiGothCombatGateGUID);	
                     break;
                 case SPECIAL:
					SwitchDoor(uiData, m_uiGothCombatGateGUID);
                     break;					
                 case FAIL:
                     if (m_auiEncounter[7] == IN_PROGRESS)
	                SwitchDoor(uiData, m_uiGothCombatGateGUID);
                    SwitchDoor(uiData, m_uiGothikEntryDoorGUID);
                     break;
                 case DONE:
                    SwitchDoor(uiData, m_uiGothikEntryDoorGUID);
                    SwitchDoor(uiData, m_uiGothikExitDoorGUID);
                    SwitchDoor(uiData, m_uiHorsemenDoorGUID);
                     break;
             }
             m_auiEncounter[7] = uiData;
            break;
        case TYPE_FOUR_HORSEMEN:
            m_auiEncounter[8] = uiData;
            SwitchDoor(uiData, m_uiHorsemenDoorGUID);
            if (uiData == DONE)
            {
                SwitchDoor(uiData, m_uiMiliEyeRampGUID);
                DoRespawnGameObject(m_uiMiliPortalGUID, 30*MINUTE);
                DoRespawnGameObject(m_uiHorsemenChestGUID, 30*MINUTE);
            }
            break;
        case TYPE_PATCHWERK:
            m_auiEncounter[9] = uiData;
            if (uiData == DONE)
                SwitchDoor(uiData, m_uiPathExitDoorGUID);
            break;
        case TYPE_GROBBULUS:
            m_auiEncounter[10] = uiData;
            break;
        case TYPE_GLUTH:
            m_auiEncounter[11] = uiData;
            if (uiData == DONE)
            {
                SwitchDoor(uiData, m_uiGlutExitDoorGUID);
                SwitchDoor(uiData, m_uiThadDoorGUID);
            }
            break;
        case TYPE_THADDIUS:
            m_auiEncounter[12] = uiData;
            SwitchDoor(uiData, m_uiThadDoorGUID);
            if (uiData == DONE)
            {
                SwitchDoor(uiData, m_uiConsEyeRampGUID);
                DoRespawnGameObject(m_uiConsPortalGUID, 30*MINUTE);
            }
            break;
        case TYPE_SAPPHIRON:
            m_auiEncounter[13] = uiData;
            if (uiData == DONE)
                SwitchDoor(uiData, m_uiKelthuzadDoorGUID);
            break;
        case TYPE_KELTHUZAD:
            switch(uiData)
            {
                case SPECIAL:
                {
                    Map::PlayerList const& lPlayers = instance->GetPlayers();
 
                    if (lPlayers.isEmpty())
                        return;
 
                    bool bCanBegin = true;
 
                    for(Map::PlayerList::const_iterator itr = lPlayers.begin(); itr != lPlayers.end(); ++itr)
                    {
                        if (Player* pPlayer = itr->getSource())
                        {
                            if (!pPlayer->IsWithinDist2d(m_fChamberCenterX, m_fChamberCenterY, 15.0f))
                                bCanBegin = false;
                        }
                    }
 
                    if (bCanBegin)
                        m_auiEncounter[14] = IN_PROGRESS;
 
                    break;
                }
                case FAIL:
                    m_auiEncounter[14] = NOT_STARTED;
                    break;
                default:
                    m_auiEncounter[14] = uiData;
                    break;
            }
            break;
    }
 
    if (uiData == DONE)
    {
        OUT_SAVE_INST_DATA;
 
        std::ostringstream saveStream;
        saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " "
            << m_auiEncounter[3] << " " << m_auiEncounter[4] << " " << m_auiEncounter[5] << " "
            << m_auiEncounter[6] << " " << m_auiEncounter[7] << " " << m_auiEncounter[8] << " "
            << m_auiEncounter[9] << " " << m_auiEncounter[10] << " " << m_auiEncounter[11] << " "
            << m_auiEncounter[12] << " " << m_auiEncounter[13] << " " << m_auiEncounter[14];
 
        strInstData = saveStream.str();
 
        SaveToDB();
        OUT_SAVE_INST_DATA_COMPLETE;
    }
}