MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / MultiDoLeaveGame

Function MultiDoLeaveGame

Descent3/multi.cpp:3641–3696  ·  view source on GitHub ↗

Do leave game stuff

Source from the content-addressed store, hash-verified

3639extern void MultiClearPlayerMarkers(int slot);
3640// Do leave game stuff
3641void MultiDoLeaveGame(uint8_t *data) {
3642 int count = 0;
3643
3644 mprintf(0, "In MultiDoLeaveGame!\n");
3645
3646 // Skip header stuff
3647 SKIP_HEADER(data, &count);
3648
3649 uint8_t slot = MultiGetByte(data, &count);
3650
3651 if (NetPlayers[slot].flags & NPF_CONNECTED) {
3652 if (NetPlayers[slot].sequence == NETSEQ_PLAYING) {
3653 AddHUDMessage(TXT_MLTLEAVEGAME, Players[slot].callsign);
3654 MultiMakePlayerGhost(slot);
3655 Players[slot].flags = 0;
3656 }
3657 NetPlayers[slot].flags &= ~NPF_CONNECTED;
3658 NetPlayers[slot].secret_net_id = 0;
3659 } else
3660 mprintf(0, "Got a leave game from a non-connected player!\n");
3661
3662 // Now clear any files this guy might be receiving
3663 if (NetPlayers[slot].file_xfer_flags != NETFILE_NONE) {
3664 if (NetPlayers[slot].file_xfer_cfile) {
3665 char delfile[_MAX_PATH * 2];
3666 strcpy(delfile, NetPlayers[slot].file_xfer_cfile->name);
3667 cfclose(NetPlayers[slot].file_xfer_cfile);
3668 NetPlayers[slot].file_xfer_cfile = NULL;
3669 if (NetPlayers[slot].file_xfer_flags == NETFILE_RECEIVING)
3670 ddio_DeleteFile(delfile);
3671 }
3672 NetPlayers[slot].file_xfer_flags = NETFILE_NONE;
3673 NetPlayers[slot].custom_file_seq++;
3674 NetPlayers[slot].custom_file_seq = NETFILE_ID_NOFILE;
3675 }
3676
3677 // If this is the server, do any cleanup on this slot
3678 if (Netgame.local_role == LR_SERVER) {
3679 MultiClearGuidebot(slot);
3680 MultiClearPlayerMarkers(slot);
3681 DLLInfo.me_handle = DLLInfo.it_handle = Objects[Players[slot].objnum].handle;
3682 CallGameDLL(EVT_GAMEPLAYERDISCONNECT, &DLLInfo);
3683
3684 if (NetPlayers[slot].sequence == NETSEQ_PLAYING)
3685 PlayerSpewInventory(&Objects[Players[slot].objnum], true, true);
3686 MultiSendReliablyToAllExcept(slot, data, count, NETSEQ_REQUEST_BUILDINGS);
3687 if (NetPlayers[slot].file_xfer_flags != NETFILE_NONE) {
3688 MultiCancelFile(slot, NetPlayers[slot].custom_file_seq, NetPlayers[slot].file_xfer_who);
3689 }
3690 nw_CloseSocket(&NetPlayers[slot].reliable_socket);
3691 if (Game_is_master_tracker_game) {
3692 NetPlayers[slot].flags |= NPF_MT_WRITING_PILOT;
3693 }
3694 }
3695 ScoreAPIPlayerLeft(slot);
3696}
3697
3698void MultiDoServerQuit(uint8_t *data) {

Callers 1

MultiProcessDataFunction · 0.85

Calls 14

SKIP_HEADERFunction · 0.85
MultiGetByteFunction · 0.85
AddHUDMessageFunction · 0.85
MultiMakePlayerGhostFunction · 0.85
cfcloseFunction · 0.85
MultiClearGuidebotFunction · 0.85
MultiClearPlayerMarkersFunction · 0.85
CallGameDLLFunction · 0.85
PlayerSpewInventoryFunction · 0.85
MultiCancelFileFunction · 0.85
nw_CloseSocketFunction · 0.85

Tested by

no test coverage detected