Example #1
0
void BattleGroundEY::EventPlayerDroppedFlag(Player* source)
{
    if (!IsFlagPickedUp())
        return;

    if (GetFlagCarrierGuid() != source->GetObjectGuid())
        return;

    ClearFlagCarrier();
    source->RemoveAurasDueToSpell(EY_NETHERSTORM_FLAG_SPELL);

    if (GetStatus() != STATUS_IN_PROGRESS)
    {
        // do not cast auras or send messages after match has ended
        return;
    }

    m_flagState = EY_FLAG_STATE_ON_GROUND;
    m_flagRespawnTimer = EY_FLAG_RESPAWN_TIME;
    source->CastSpell(source, SPELL_RECENTLY_DROPPED_FLAG, true);
    source->CastSpell(source, EY_PLAYER_DROPPED_FLAG_SPELL, true);

    if (source->GetTeam() == ALLIANCE)
    {
        UpdateWorldState(WORLD_STATE_EY_NETHERSTORM_FLAG_STATE_ALLIANCE, 1);
        SendMessageToAll(LANG_BG_EY_DROPPED_FLAG, CHAT_MSG_BG_SYSTEM_ALLIANCE, nullptr);
    }
    else
    {
        UpdateWorldState(WORLD_STATE_EY_NETHERSTORM_FLAG_STATE_HORDE, 1);
        SendMessageToAll(LANG_BG_EY_DROPPED_FLAG, CHAT_MSG_BG_SYSTEM_HORDE, nullptr);
    }
}
Example #2
0
void BattleGroundEY::Update(uint32 diff)
{
    BattleGround::Update(diff);

    if (GetStatus() != STATUS_IN_PROGRESS)
        return;

    // resource counter
    if (m_resourceUpdateTimer < diff)
    {
        UpdateResources();
        m_resourceUpdateTimer = EY_RESOURCES_UPDATE_TIME;
    }
    else
        m_resourceUpdateTimer -= diff;

    // flag respawn
    if (m_flagState == EY_FLAG_STATE_WAIT_RESPAWN || m_flagState == EY_FLAG_STATE_ON_GROUND)
    {
        if (m_flagRespawnTimer < diff)
        {
            m_flagRespawnTimer = 0;
            if (m_flagState == EY_FLAG_STATE_WAIT_RESPAWN)
                RespawnFlag();
            else
                RespawnDroppedFlag();
        }
        else
            m_flagRespawnTimer -= diff;
    }

    // workaround for Fel Reaver Ruins flag capture needed on 3.3.5 only
    // the original areatrigger (4514) is covered by a bigger one (4515) and is not triggered on client side
    if (IsFlagPickedUp())
    {
        if (m_felReaverFlagTimer < diff)
        {
            Player* flagCarrier = sObjectMgr.GetPlayer(GetFlagCarrierGuid());
            if (flagCarrier)
            {
                if (m_towerOwner[NODE_FEL_REAVER_RUINS] == flagCarrier->GetTeam())
                {
                    // coords and range taken from DBC of areatrigger (4514)
                    if (flagCarrier->IsWithinDist3d(2044.0f, 1729.729f, 1190.03f, 3.0f))
                        EventPlayerCapturedFlag(flagCarrier, NODE_FEL_REAVER_RUINS);
                }
            }
            m_felReaverFlagTimer = EY_FEL_REAVER_FLAG_UPDATE_TIME;
        }
        else
            m_felReaverFlagTimer -= diff;
    }
}
Example #3
0
void BattleGroundEY::EventPlayerDroppedFlag(Player* source)
{
    if (GetStatus() != STATUS_IN_PROGRESS)
    {
        // if not running, do not cast things at the dropper player, neither send unnecessary messages
        // just take off the aura
        if (IsFlagPickedUp() && GetFlagCarrierGuid() == source->GetObjectGuid())
        {
            ClearFlagCarrier();
            source->RemoveAurasDueToSpell(EY_NETHERSTORM_FLAG_SPELL);
        }
        return;
    }

    if (!IsFlagPickedUp())
        return;

    if (GetFlagCarrierGuid() != source->GetObjectGuid())
        return;

    ClearFlagCarrier();
    source->RemoveAurasDueToSpell(EY_NETHERSTORM_FLAG_SPELL);
    m_flagState = EY_FLAG_STATE_ON_GROUND;
    m_flagRespawnTimer = EY_FLAG_RESPAWN_TIME;
    source->CastSpell(source, SPELL_RECENTLY_DROPPED_FLAG, true);
    source->CastSpell(source, EY_PLAYER_DROPPED_FLAG_SPELL, true);

    if (source->GetTeam() == ALLIANCE)
    {
        UpdateWorldState(WORLD_STATE_EY_NETHERSTORM_FLAG_STATE_ALLIANCE, 1);
        SendMessageToAll(LANG_BG_EY_DROPPED_FLAG, CHAT_MSG_BG_SYSTEM_ALLIANCE, NULL);
    }
    else
    {
        UpdateWorldState(WORLD_STATE_EY_NETHERSTORM_FLAG_STATE_HORDE, 1);
        SendMessageToAll(LANG_BG_EY_DROPPED_FLAG, CHAT_MSG_BG_SYSTEM_HORDE, NULL);
    }
}
Example #4
0
void BattleGroundEY::RemovePlayer(Player* plr, ObjectGuid guid)
{
    // sometimes flag aura not removed :(
    if (IsFlagPickedUp())
    {
        if (m_flagCarrier == guid)
        {
            if (plr)
                EventPlayerDroppedFlag(plr);
            else
            {
                ClearFlagCarrier();
                RespawnFlag();
            }
        }
    }
}
Example #5
0
void BattleGroundEY::EventPlayerClickedOnFlag(Player* source, GameObject* target_obj)
{
    if (GetStatus() != STATUS_IN_PROGRESS || IsFlagPickedUp() || !source->IsWithinDistInMap(target_obj, 10))
        return;

    if (m_flagState == EY_FLAG_STATE_ON_BASE)
        UpdateWorldState(WORLD_STATE_EY_NETHERSTORM_FLAG_READY, WORLD_STATE_REMOVE);

    if (source->GetTeam() == ALLIANCE)
    {
        PlaySoundToAll(EY_SOUND_FLAG_PICKED_UP_ALLIANCE);

        m_flagState = EY_FLAG_STATE_ON_ALLIANCE_PLAYER;
        UpdateWorldState(WORLD_STATE_EY_NETHERSTORM_FLAG_STATE_ALLIANCE, 2);
    }
    else
    {
        PlaySoundToAll(EY_SOUND_FLAG_PICKED_UP_HORDE);

        m_flagState = EY_FLAG_STATE_ON_HORDE_PLAYER;
        UpdateWorldState(WORLD_STATE_EY_NETHERSTORM_FLAG_STATE_HORDE, 2);
    }

    // despawn center-flag
    SpawnEvent(EY_EVENT_CAPTURE_FLAG, EY_EVENT2_FLAG_CENTER, false);

    SetFlagCarrier(source->GetObjectGuid());
    // get flag aura on player
    source->CastSpell(source, EY_NETHERSTORM_FLAG_SPELL, true);
    source->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_ENTER_PVP_COMBAT);

    if (source->GetTeam() == ALLIANCE)
        PSendMessageToAll(LANG_BG_EY_HAS_TAKEN_FLAG, CHAT_MSG_BG_SYSTEM_ALLIANCE, NULL, source->GetName());
    else
        PSendMessageToAll(LANG_BG_EY_HAS_TAKEN_FLAG, CHAT_MSG_BG_SYSTEM_HORDE, NULL, source->GetName());
}