void NetServer::ServerEchoEvent(bufferevent* bev, short events, void* ctx) { if (events & (BEV_EVENT_EOF | BEV_EVENT_ERROR)) { DuelPlayer* dp = &users[bev]; DuelMode* dm = dp->game; if(dm) dm->LeaveGame(dp); else DisconnectPlayer(dp); } }
void CRPCFunctions::PlayerInGameNotice ( NetBitStreamInterface & bitStream ) { // Already ingame? Protocol error if ( m_pSourcePlayer->IsIngame () ) { DisconnectPlayer ( g_pGame, *m_pSourcePlayer, "Protocol error: Already ingame" ); } else { // Join him to the game g_pGame->JoinPlayer ( *m_pSourcePlayer ); } }
void CRPCFunctions::InitialDataStream ( NetBitStreamInterface & bitStream ) { // Already sent initial stuff? Protocol error if ( m_pSourcePlayer->IsJoined () ) { DisconnectPlayer ( g_pGame, *m_pSourcePlayer, "Protocol error: Already joined" ); } else { // Send him the initial stuff g_pGame->InitialDataStream ( *m_pSourcePlayer ); } }
//--------------------------------------------------------------------------------- // Purpose: Check Player on connect //--------------------------------------------------------------------------------- bool ManiReservedSlot::NetworkIDValidated(player_t *player_ptr) { bool is_reserve_player = false; player_t temp_player; int allowed_players; int total_players; m_iUnaccountedPlayers--; if ((war_mode) || (!mani_reserve_slots.GetBool()) || (mani_reserve_slots_number_of_slots.GetInt() == 0)) // with the other method ( zero slots ) { // other player is kicked BEFORE return true; // NetworkIDValidated } total_players = m_iUnaccountedPlayers + GetNumberOfActivePlayers(true); // DirectLogCommand("[DEBUG] Total players on server [%i]\n", total_players); if (total_players <= (max_players - mani_reserve_slots_number_of_slots.GetInt())) { // DirectLogCommand("[DEBUG] No reserve slot action required\n"); return true; } GetIPAddressFromPlayer(player_ptr); Q_strcpy (player_ptr->steam_id, engine->GetPlayerNetworkIDString(player_ptr->entity)); IPlayerInfo *playerinfo = playerinfomanager->GetPlayerInfo(player_ptr->entity); if (playerinfo && playerinfo->IsConnected()) { Q_strcpy(player_ptr->name, playerinfo->GetName()); } else { Q_strcpy(player_ptr->name,""); } if (FStrEq("BOT", player_ptr->steam_id)) return true; player_ptr->is_bot = false; if (IsPlayerInReserveList(player_ptr)) is_reserve_player = true; else if (mani_reserve_slots_include_admin.GetBool() && gpManiClient->HasAccess(player_ptr->index, ADMIN, ADMIN_BASIC_ADMIN)) is_reserve_player = true; if (mani_reserve_slots_allow_slot_fill.GetInt() != 1) { // Keep reserve slots free at all times allowed_players = max_players - mani_reserve_slots_number_of_slots.GetInt(); if (total_players > allowed_players) { if (!is_reserve_player) { DisconnectPlayer(player_ptr); return false; } temp_player.index = FindPlayerToKick(); FindPlayerByIndex(&temp_player); DisconnectPlayer(&temp_player); } } return true; }