void outdoor_pvp_eastern_plaguelands::SetData(uint32 uiType, uint32 uiData)
{
    switch(uiType)
    {
        case TYPE_CROWNGUARD_CONTROLLER:
            m_uiCrownguardController = uiData;
            break;
        case TYPE_EASTWALL_CONTROLLER:
            m_uiEastwallController = uiData;
            break;
        case TYPE_NORTHPASS_CONTROLLER:
            m_uiNorthpassController = uiData;
            break;
        case TYPE_PLAGUEWOOD_CONTROLLER:
            m_uiPlaguewoodController = uiData;
            break;
    }

    // update states
    UpdateZoneWorldState();

    if (uiData)
    {
        OUT_SAVE_PVP_DATA;

        std::ostringstream saveStream;
        saveStream << m_uiCrownguardController << " " << m_uiEastwallController << " " << m_uiNorthpassController << " " << m_uiPlaguewoodController;

        strInstData = saveStream.str();

        SaveToDB();
        OUT_SAVE_PVP_DATA_COMPLETE;
    }
}
void worldmap_eastern_kingdoms::ProcessCaptureEvent(uint32 uiCaptureType, uint32 uiTeam, uint32 uiTower)
{
    switch(uiTower)
    {
        case TOWER_ID_CROWNGUARD:
            break;
        case TOWER_ID_EASTWALL:
            break;
        case TOWER_ID_NORTHPASS:
            break;
        case TOWER_ID_PLAGUEWOOD:
            // remove old state
            UpdateZoneWorldState(m_uiPlaguewoodWorldState, 0);
            // update data
            SetData(TYPE_PLAGUEWOOD_STATE, uiCaptureType);
            SetData(TYPE_PLAGUEWOOD_CONTROLLER, uiTeam);
            // send new state
            UpdateZoneWorldState(m_uiPlaguewoodWorldState, 1);
            break;
    }
}
void worldmap_eastern_kingdoms::SetData(uint32 uiType, uint32 uiData)
{
    switch(uiType)
    {
        case TYPE_CROWNGUARD_CONTROLLER:
            m_uiCrownguardController = uiData;
            break;
        case TYPE_EASTWALL_CONTROLLER:
            m_uiEastwallController = uiData;
            break;
        case TYPE_NORTHPASS_CONTROLLER:
            m_uiNorthpassController = uiData;
            break;
        case TYPE_PLAGUEWOOD_CONTROLLER:
            if (uiData == ALLIANCE)
            {
                if (GetData(TYPE_PLAGUEWOOD_STATE) == NEUTRAL)
                {
                    // in neutral case the team id is the opposite team
                    // the team who captured the tower and set it to neutral
                    --m_uiTowersHorde;
                    m_uiPlaguewoodWorldState = WORLD_STATE_PLAGUEWOOD_NEUTRAL;
                    // unsummon flightmaster
                    DoUnsummonFlightMaster();
                }
                else if (GetData(TYPE_PLAGUEWOOD_STATE) == PROGRESS)
                {
                    m_uiPlaguewoodWorldState = WORLD_STATE_PLAGUEWOOD_PROG_ALY;
                    // increase tower count only if the controller is changed
                    if (uiData != GetData(TYPE_PLAGUEWOOD_CONTROLLER))
                    {
                        DoSummonFlightMasterIfCan();
                        ++m_uiTowersAlly;
                    }
                }
                // contested states are also sent by the opposite team
                // alliance contests horde tower
                else if (GetData(TYPE_PLAGUEWOOD_STATE) == CONTESTED)
                    m_uiPlaguewoodWorldState = WORLD_STATE_NORTHPASS_CONT_HORDE;
                else if (GetData(TYPE_PLAGUEWOOD_STATE) == WIN)
                    m_uiPlaguewoodWorldState = WORLD_STATE_NORTHPASS_ALY;
            }
            else if (uiData == HORDE)
            {
                if (GetData(TYPE_PLAGUEWOOD_STATE) == NEUTRAL)
                {
                    // in neutral case the team id is the opposite team
                    // the team who captured the tower and set it to neutral
                    --m_uiTowersAlly;
                    m_uiPlaguewoodWorldState = WORLD_STATE_PLAGUEWOOD_NEUTRAL;
                    // unsummon flightmaster
                    DoUnsummonFlightMaster();
                }
                if (GetData(TYPE_PLAGUEWOOD_STATE) == PROGRESS)
                {
                    m_uiPlaguewoodWorldState = WORLD_STATE_PLAGUEWOOD_PROG_HORDE;
                    // increase tower count only if the controller is changed
                    if (uiData != GetData(TYPE_PLAGUEWOOD_CONTROLLER))
                    {
                        DoSummonFlightMasterIfCan();
                        ++m_uiTowersHorde;
                    }
                }
                // contested states are also sent by the opposite team
                // horde contests alliance tower
                else if (GetData(TYPE_PLAGUEWOOD_STATE) == CONTESTED)
                    m_uiPlaguewoodWorldState = WORLD_STATE_NORTHPASS_CONT_ALY;
                else if (GetData(TYPE_PLAGUEWOOD_STATE) == WIN)
                    m_uiPlaguewoodWorldState = WORLD_STATE_NORTHPASS_HORDE;
            }
            // set controller only for progress and neutral
            if (GetData(TYPE_PLAGUEWOOD_STATE) == PROGRESS)
                m_uiPlaguewoodController = uiData;
            else if (GetData(TYPE_PLAGUEWOOD_STATE) == NEUTRAL)
                m_uiPlaguewoodController = 0;
            break;
        case TYPE_CROWNGUARD_STATE:
            m_uiCrownguardState = uiData;
            break;
        case TYPE_EASTWALL_STATE:
            m_uiEastwallState = uiData;
            break;
        case TYPE_NORTHPASS_STATE:
            m_uiNorthpassState = uiData;
            break;
        case TYPE_PLAGUEWOOD_STATE:
            m_uiPlaguewoodState = uiData;
            break;
    }

    // update buffs
    for (uint8 i = 0; i < 4; i++)
    {
        // buff alliance
        if (m_uiTowersAlly == m_aPlaguelandsTowerBuffs[i].uiTowers)
            DoProcessTeamBuff(ALLIANCE, m_aPlaguelandsTowerBuffs[i].uiSpellIdAlly);
        // buff horde
        if (m_uiTowersHorde == m_aPlaguelandsTowerBuffs[i].uiTowers)
            DoProcessTeamBuff(HORDE, m_aPlaguelandsTowerBuffs[i].uiSpellIdHorde);
    }

    // debuff players if towers == 0; spell to remove will be always the first
    if (m_uiTowersHorde == 0)
        DoProcessTeamBuff(HORDE, m_aPlaguelandsTowerBuffs[0].uiSpellIdHorde, true);
    if (m_uiTowersAlly == 0)
        DoProcessTeamBuff(ALLIANCE, m_aPlaguelandsTowerBuffs[0].uiSpellIdAlly, true);

    // update states counters
    // the map tower states are updated in the ProcessCaptureEvent function
    UpdateZoneWorldState(WORLD_STATE_TOWER_COUNT_ALY, m_uiTowersAlly);
    UpdateZoneWorldState(WORLD_STATE_TOWER_COUNT_HORDE, m_uiTowersHorde);
}