Disconnect a player for whatever reason Server only
| 1081 | // Disconnect a player for whatever reason |
| 1082 | // Server only |
| 1083 | void MultiDisconnectPlayer(int slot) { |
| 1084 | ASSERT(Netgame.local_role == LR_SERVER); |
| 1085 | |
| 1086 | DLLInfo.me_handle = DLLInfo.it_handle = Objects[Players[slot].objnum].handle; |
| 1087 | CallGameDLL(EVT_GAMEPLAYERDISCONNECT, &DLLInfo); |
| 1088 | |
| 1089 | if (NetPlayers[slot].flags & NPF_CONNECTED) { |
| 1090 | mprintf(0, "Disconnecting player %d (%s)...\n", slot, Players[slot].callsign); |
| 1091 | if (NetPlayers[slot].file_xfer_flags != NETFILE_NONE) { |
| 1092 | MultiCancelFile(slot, NetPlayers[slot].custom_file_seq, NetPlayers[slot].file_xfer_who); |
| 1093 | } |
| 1094 | nw_CloseSocket(&NetPlayers[slot].reliable_socket); |
| 1095 | |
| 1096 | if (NetPlayers[slot].sequence == NETSEQ_PLAYING) { |
| 1097 | PlayerSpewInventory(&Objects[Players[slot].objnum], true, true); |
| 1098 | MultiMakePlayerGhost(slot); |
| 1099 | AddHUDMessage(TXT_MLTDISCONNECTED, Players[slot].callsign); |
| 1100 | } |
| 1101 | |
| 1102 | NetPlayers[slot].flags &= ~NPF_CONNECTED; |
| 1103 | NetPlayers[slot].secret_net_id = 0; |
| 1104 | MultiClearGuidebot(slot); |
| 1105 | MultiClearPlayerMarkers(slot); |
| 1106 | MultiSendPlayerDisconnect(slot); |
| 1107 | Players[slot].flags = 0; |
| 1108 | |
| 1109 | } else |
| 1110 | mprintf(0, "Trying to disconnect a non-existant player!\n"); |
| 1111 | } |
| 1112 | |
| 1113 | // Sends existing players to a joining player |
| 1114 | // Sends to "slot" and describes player "which" |
no test coverage detected