--- deliantra/server/common/player.C 2006/09/14 22:34:00 1.5 +++ deliantra/server/common/player.C 2006/12/21 23:37:05 1.11 @@ -27,35 +27,42 @@ void free_player (player *pl) { - if (first_player != pl) { player *prev = first_player; while (prev != NULL && prev->next != NULL && prev->next != pl) prev = prev->next; + if (prev->next != pl) { LOG (llevError, "Free_player: Can't find previous player.\n"); exit (1); } + prev->next = pl->next; } else first_player = pl->next; - if (pl->ob != NULL) + if (pl->ob) { - if (!QUERY_FLAG (pl->ob, FLAG_REMOVED)) - remove_ob (pl->ob); - free_object (pl->ob); + pl->ob->contr = 0; + pl->ob->destroy (); } + + if (pl->ns) + { + pl->ns->send_packet ("goodbye"); + pl->ns->flush (); + pl->ns->pl = 0; + pl->ns->destroy (); + } + /* Clear item stack */ if (pl->stack_items) free (pl->stack_items); - free (pl->socket.faces_sent); - delete pl; } @@ -71,6 +78,7 @@ if (attacknr == ATNR_MAGIC || attacknr == ATNR_FIRE || attacknr == ATNR_ELECTRICITY || attacknr == ATNR_COLD || attacknr == ATNR_ACID || attacknr == ATNR_POISON) return 1; + return 0; }