Ejemplo n.º 1
0
void BattleGroundBE::HandleAreaTrigger(Player *Source, uint32 Trigger)
{
    // this is wrong way to implement these things. On official it done by gameobject spell cast.
    if (GetStatus() != STATUS_IN_PROGRESS)
        return;

    //uint32 SpellId = 0;
    //uint64 buff_guid = 0;
    switch(Trigger)
    {
        case 4538:                                          // buff trigger?
            //buff_guid = m_BgObjects[BG_BE_OBJECT_BUFF_1];
            break;
        case 4539:                                          // buff trigger?
            //buff_guid = m_BgObjects[BG_BE_OBJECT_BUFF_2];
            break;
        case 4924:
        case 4944:
        case 4922:
        case 4923:
        case 4921:
        case 5039:
        case 5040:
            HandlePlayerUnderMap(Source);
            sLog.outError("BattleGroundBE:: Player %s is under map due to trigger %u", Source->GetName(), Trigger);
            break;			
        default:
            sLog.outError("WARNING: Unhandled AreaTrigger in Battleground: %u", Trigger);
            Source->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", Trigger);
            break;
    }

    //if (buff_guid)
    //    HandleTriggerBuff(buff_guid,Source);
}
Ejemplo n.º 2
0
void BattleGroundNA::HandleAreaTrigger(Player *Source, uint32 Trigger)
{
    if (GetStatus() != STATUS_IN_PROGRESS)
        return;

    //uint32 SpellId = 0;
    //uint64 buff_guid = 0;
    switch(Trigger)
    {
        case 4536:                                          // buff trigger?
        case 4537:                                          // buff trigger?
            break;
        case 4917:
        case 5006:
        case 5008:
            HandlePlayerUnderMap(Source);
            sLog.outError("BattleGroundNA:: Player %s is under map due to trigger %u", Source->GetName(), Trigger);
            break;
        default:
            sLog.outError("WARNING: Unhandled AreaTrigger in Battleground: %u", Trigger);
            Source->GetSession()->SendAreaTriggerMessage("Warning: Unhandled AreaTrigger in Battleground: %u", Trigger);
            break;
    }

    //if (buff_guid)
    //    HandleTriggerBuff(buff_guid,Source);
}
Ejemplo n.º 3
0
void BattlegroundDS::PostUpdateImpl(uint32 diff)
{
    if (GetStartTime() >= 75*IN_MILLISECONDS)
    {
        for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); itr++)
        {
            Player* player = ObjectAccessor::FindPlayer(itr->first);
            if (player && player->isAlive() && player->GetPositionX() < 1260 && player->GetPositionY() >755 && player->GetPositionY() < 775 && player->GetPositionZ() > 13)
            {
                player->KnockBackWithAngle(6.15f, 50.00f, 5.00f);
                player->RemoveAurasDueToSpell(48018);
            }
            if (player && player->isAlive() && player->GetPositionX() > 1330 && player->GetPositionY() >805 && player->GetPositionY() < 825 && player->GetPositionZ() > 13)
            {
                player->KnockBackWithAngle(3.10f, 50.00f, 5.00f);
                player->RemoveAurasDueToSpell(48018);
            }
        }
    }

    if (m_knockback)
    {
        if (m_knockback <= diff)
        {
            for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
            {
                Player *player = ObjectAccessor::FindPlayer(itr->first);
                if (!player)
                    continue;

                if (player->GetDistance2d(1214.0f, 765.0f) <= 50.0f && player->GetPositionZ() > 13.0f)
                    player->KnockBackWithAngle(0.0f, 55.0f, 9.0f);
                else if (player->GetDistance2d(1369.0f, 817.0f) <= 50.0f && player->GetPositionZ() > 13.0f)
                    player->KnockBackWithAngle(M_PI, 55.0f, 9.0f);
            }
            m_knockback = 0;
        }
        else
            m_knockback -= diff;
    }

    if (!m_knockback && m_teleport)
    {
        if (m_teleport <= diff)
        {
            for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
            {
                Player* player = ObjectAccessor::FindPlayer(itr->first);
                if (!player)
                    continue;

                if (player->GetPositionZ() > 13.0f)
                    HandlePlayerUnderMap(player);
            }
            m_teleport = 5 * IN_MILLISECONDS;
        }
        else
            m_teleport -= diff;
    }

    if (m_waterFall <= diff)
    {
        if (m_waterFallStatus == 0) // Add the water
        {
            DoorClose(BG_DS_OBJECT_WATER_2);
            m_waterFall = 7 * IN_MILLISECONDS;
            m_waterFallStatus = 1;
        }
        else if (m_waterFallStatus == 1) // Knockback, spawn the LOS object
        {
            for (BattlegroundPlayerMap::const_iterator itr = GetPlayers().begin(); itr != GetPlayers().end(); ++itr)
            {
                Player *player = ObjectAccessor::FindPlayer(itr->first);
                if (!player)
                    continue;

                if (player->GetDistance2d(1291.56f, 790.837f) <= BG_DS_WATERFALL_RADIUS)
                    player->KnockbackFrom(1291.56f, 790.837f, 20.0f, 7.0f);
            }
            SpawnBGObject(BG_DS_OBJECT_WATER_1, RESPAWN_IMMEDIATELY);
            GetBgMap()->SetDynLOSObjectState(m_dynamicLOSid, true);
            m_waterFall = BG_DS_WATERFALL_DURATION;
            m_waterFallStatus = 2;
        }
        else // remove LOS and water
        {
            DoorOpen(BG_DS_OBJECT_WATER_2);
            SpawnBGObject(BG_DS_OBJECT_WATER_1, RESPAWN_ONE_DAY);
            GetBgMap()->SetDynLOSObjectState(m_dynamicLOSid, false);
            m_waterFall = urand(BG_DS_WATERFALL_TIMER_MIN, BG_DS_WATERFALL_TIMER_MAX);
            m_waterFallStatus = 0;
        }
    }
    else
        m_waterFall -= diff;
}