コード例 #1
0
ファイル: Battlefield.cpp プロジェクト: Refuge89/TrinityCore
// Called when a player leave the zone
void Battlefield::HandlePlayerLeaveZone(Player* player, uint32 /*zone*/)
{
    if (IsWarTime())
    {
        // If the player is participating to the battle
        if (m_PlayersInWar[player->GetTeamId()].find(player->GetGUID()) != m_PlayersInWar[player->GetTeamId()].end())
        {
            m_PlayersInWar[player->GetTeamId()].erase(player->GetGUID());
            player->GetSession()->SendBfLeaveMessage(m_BattleId);
            if (Group* group = player->GetGroup()) // Remove the player from the raid group
                group->RemoveMember(player->GetGUID());

            OnPlayerLeaveWar(player);
        }
    }

    for (BfCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr)
        itr->second->HandlePlayerLeave(player);

    m_InvitedPlayers[player->GetTeamId()].erase(player->GetGUID());
    m_PlayersWillBeKick[player->GetTeamId()].erase(player->GetGUID());
    m_players[player->GetTeamId()].erase(player->GetGUID());
    SendRemoveWorldStates(player);
    RemovePlayerFromResurrectQueue(player->GetGUID());
    OnPlayerLeaveZone(player);
}
コード例 #2
0
ファイル: Battlefield.cpp プロジェクト: HkLuna/ArkCORE2
//Called when a player leave the zone
void Battlefield::HandlePlayerLeaveZone(Player* player, uint32 /*zone */ )
{
    if (IsWarTime())
    {
        //if player is in war list
        if (m_PlayersInWar[player->GetTeamId()].find(player->GetGUID()) != m_PlayersInWar[player->GetTeamId()].end())
        {
            m_PlayersInWar[player->GetTeamId()].erase(player->GetGUID());
            player->GetSession()->SendBfLeaveMessage(m_BattleId);
            if (Group* group = GetGroupPlayer(player->GetGUID(), player->GetTeamId()))       // remove from raid group if player is member
            {
                // I think that now is not a hack
                if (!group->RemoveMember(player->GetGUID()))   // group was disbanded
                {
                    m_Groups[player->GetTeamId()].erase(group->GetGUID());
                    group->SetBattlefieldGroup(NULL);
                    sGroupMgr->RemoveGroup(group);
                    delete group;
                }
            }
            OnPlayerLeaveWar(player);                          //For scripting
        }
    }

    for (BfCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr)
        itr->second->HandlePlayerLeave(player);

    m_InvitedPlayers[player->GetTeamId()].erase(player->GetGUID());
    m_PlayersWillBeKick[player->GetTeamId()].erase(player->GetGUID());
    m_players[player->GetTeamId()].erase(player->GetGUID());
    SendRemoveWorldStates(player);
    RemovePlayerFromResurrectQueue(player->GetGUID());
    OnPlayerLeaveZone(player);                                 //For scripting
}
コード例 #3
0
ファイル: OutdoorPvP.cpp プロジェクト: Carbenium/TrinityCore
void OutdoorPvP::HandlePlayerLeaveZone(Player* player, uint32 /*zone*/)
{
    // inform the objectives of the leaving
    for (OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr)
        itr->second->HandlePlayerLeave(player);
    // remove the world state information from the player (we can't keep everyone up to date, so leave out those who are not in the concerning zones)
    if (!player->GetSession()->PlayerLogout())
        SendRemoveWorldStates(player);
    m_players[player->GetTeamId()].erase(player->GetGUID());
    TC_LOG_DEBUG("outdoorpvp", "Player %s left an outdoorpvp zone", player->GetName().c_str());
}
コード例 #4
0
/**
   Function that removes a player from the players of the affected outdoor pvp zones

   @param   player to remove
   @param   whether zone is main outdoor pvp zone or a affected zone
 */
void OutdoorPvP::HandlePlayerLeaveZone(Player* player, bool isMainZone)
{
    if (m_zonePlayers.erase(player->GetObjectGuid()))
    {
        // remove the world state information from the player
        if (isMainZone && !player->GetSession()->PlayerLogout())
            SendRemoveWorldStates(player);

        sLog.outDebug("Player %s left an Outdoor PvP zone", player->GetName());
    }
}
コード例 #5
0
ファイル: WorldPvP.cpp プロジェクト: Agustinls/Radical
/**
   Function that a players to a players set

   @param   player to be removed
 */
void WorldPvP::HandlePlayerLeaveZone(Player* pPlayer)
{
    if (!pPlayer)
        return;

    // remove the world state information from the player
    if (!pPlayer->GetSession()->PlayerLogout())
        SendRemoveWorldStates(pPlayer);

    m_sZonePlayers.erase(pPlayer->GetObjectGuid());

    sLog.outDebug("Player %s left an outdoorpvp zone", pPlayer->GetName());
}
コード例 #6
0
ファイル: OutdoorPvP.cpp プロジェクト: Trizzor/uecore
void OutdoorPvP::HandlePlayerLeaveZone(Player * plr, uint32 zone)
{
    // inform the objectives of the leaving
    for(OutdoorPvPObjectiveSet::iterator itr = m_OutdoorPvPObjectives.begin(); itr != m_OutdoorPvPObjectives.end(); ++itr)
        (*itr)->HandlePlayerLeave(plr);
    // remove the world state information from the player (we can't keep everyone up to date, so leave out those who are not in the concerning zones)
    if(zone != plr->GetZoneId())
        SendRemoveWorldStates(plr);
    if(plr->GetTeam()==ALLIANCE)
        m_PlayerGuids[0].erase(plr->GetGUID());
    else
        m_PlayerGuids[1].erase(plr->GetGUID());
    sLog.outDebug("OutdoorPvP: player left an outdoorpvp zone");
}
コード例 #7
0
ファイル: OutdoorPvP.cpp プロジェクト: AwkwardDev/MangosFX
void OutdoorPvP::HandlePlayerLeaveZone(Player * plr, uint32 zone)
{
	if(!plr)
		return;

    // inform the objectives of the leaving
    for (OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr)
        itr->second->HandlePlayerLeave(plr);
    // remove the world state information from the player (we can't keep everyone up to date, so leave out those who are not in the concerning zones)
    if(!plr->GetSession()->PlayerLogout())
        SendRemoveWorldStates(plr);
    m_players[BattleGround::GetTeamIndexByTeamId(plr->GetTeam())].erase(plr);
    sLog.outDebug("Player %s left an outdoorpvp zone", plr->GetName());
}
コード例 #8
0
ファイル: Battlefield.cpp プロジェクト: lduguid/mangos-wotlk
/**
  Function that starts battlefield battle

  @param   defender team
*/
void Battlefield::StartBattle(Team defender)
{
    DEBUG_LOG("Battlefield: Battle has started. Defender Team: %s.", defender == ALLIANCE ? "Alliance" : "Horde");

    m_startTime     = time(nullptr);
    m_status        = BF_STATUS_IN_PROGRESS;
    m_timer         = m_battleDuration;
    m_zoneOwner     = defender;

    // refresh all players before battle
    InitPlayersBeforeBattle();

    // disband existing raid groups
    for (auto& m_battlefieldRaid : m_battlefieldRaids)
    {
        for (auto group : m_battlefieldRaid)
        {
            group->Disband();
            delete group;
        }
        m_battlefieldRaid.clear();
    }

    for (auto& m_zonePlayer : m_zonePlayers)
    {
        if (!m_zonePlayer.first)
            continue;

        Player* player = sObjectMgr.GetPlayer(m_zonePlayer.first);
        if (!player)
            continue;

        uint8 idx = 0;
        std::set<ObjectGuid>::iterator itr2 = m_queuedPlayers[idx].find(m_zonePlayer.first);
        if (itr2 == m_queuedPlayers[idx].end())
        {
            ++idx;
            itr2 = m_queuedPlayers[idx].find(m_zonePlayer.first);
        }

        // send battle invite to players added to queue
        if (itr2 != m_queuedPlayers[idx].end())
        {
            m_invitedPlayers[idx][m_zonePlayer.first] = time(nullptr) + BF_TIME_TO_ACCEPT;
            player->GetSession()->SendBattlefieldWarInvite(m_battleFieldId, m_zoneId, BF_TIME_TO_ACCEPT);
            m_queuedPlayers[idx].erase(itr2);
        }
        // kick players not in queue
        else
        {
            player->GetSession()->SendBattlefieldLeaveMessage(m_battleFieldId, BATTLEFIELD_LEAVE_REASON_EXITED);
            SendRemoveWorldStates(player);
            if (m_activePlayers.find(m_zonePlayer.first) != m_activePlayers.end())
            {
                m_activePlayers[m_zonePlayer.first]->removeTime = time(nullptr);
                m_activePlayers[m_zonePlayer.first]->removeDelay = BF_UNACCEPTED_REMOVE_DELAY;
            }
        }
    }

    // non-zone queued players
    for (uint32 i = 0; i < PVP_TEAM_COUNT; ++i)
    {
        for (std::set<ObjectGuid>::iterator itr = m_queuedPlayers[i].begin(); itr != m_queuedPlayers[i].end();)
        {
            if (Player* plr = sObjectMgr.GetPlayer(*itr, true))
            {
                m_invitedPlayers[i][plr->GetObjectGuid()] = time(nullptr) + BF_TIME_TO_ACCEPT;
                plr->GetSession()->SendBattlefieldWarInvite(m_battleFieldId, m_zoneId, BF_TIME_TO_ACCEPT);
            }

            m_queuedPlayers[i].erase(itr++);
        }
    }
}