// process a player kick packet void process_player_kick_packet(ubyte *data, header *hinfo) { int player_num,from_player,ban,reason; short player_id; int offset = HEADER_LENGTH; // get the address of the guy who is to be kicked GET_SHORT(player_id); GET_INT(ban); GET_INT(reason); player_num = find_player_id(player_id); PACKET_SET_SIZE(); // only the server should ever receive a request to kick a guy Assert(Net_player->flags & NETINFO_FLAG_AM_MASTER); // determine who sent the packet from_player = find_player_id(hinfo->id); // check to see if this guy is allowed to make such a request if((from_player == -1) || !multi_kick_can_kick(&Net_players[from_player]) ){ nprintf(("Network","Received a kick request from an invalid player!!\n")); } // otherwise, process the request fully else { // make sure we have a valid player to kick if(player_num == -1){ nprintf(("Network","Received request to kick an unknown player!\n")); } else { // will handle all the rest of the details multi_kick_player(player_num,ban,reason); } } }
// debug console function called to determine which player to kick void multi_dcf_kick() { int player_num,idx; SCP_string arg; // get the callsign of the player to kick dc_stuff_string(arg); player_num = -1; for(idx=0;idx<MAX_PLAYERS;idx++){ if(MULTI_CONNECTED(Net_players[idx]) && (stricmp(Net_players[idx].m_player->callsign, arg.c_str()) == 0)) { player_num = idx; break; } } // if we didn't find the player, notify of the results if(player_num == -1){ dc_printf("Could not find player %s to kick!", arg.c_str()); } // if we found the guy, then try and kick him else { multi_kick_player(player_num); } }
// debug console function called to determine which player to kick void multi_dcf_kick() { int player_num,idx; // get the callsign of the player to kick dc_get_arg(ARG_STRING); if(strlen(Dc_arg) == 0){ dc_printf("Invalid player callsign!\n"); return ; } player_num = -1; for(idx=0;idx<MAX_PLAYERS;idx++){ if(MULTI_CONNECTED(Net_players[idx]) && (stricmp(Net_players[idx].player->callsign,Dc_arg)==0)){ player_num = idx; break; } } // if we didn't find the player, notify of the results if(player_num == -1){ dc_printf("Could not find player %s to kick!",Dc_arg); } // if we found the guy, then try and kick him else { multi_kick_player(player_num); } }
// perform the passed command (MULTI_MSG_CMD_* define) with the passed string argument void multi_msg_perform_command(int command,char *param) { // we may eventually want to split each of these cases into its own function to make things neater switch(command){ // kick a player case MULTI_MSG_CMD_KICK: int np_index = multi_find_player_by_callsign(param); if(np_index != -1){ multi_kick_player(np_index); } break; } }