protected void kill() {
        if (ship == null) {
            TrekLog.logMessage("kill(): ship was null");
            TrekServer.removePlayer(this);
            return;
        }
        // 8/26: adding 'break save' traps - ship will be removed on
        // exceptions...
        if (!thisPlayerSaved) {
            thisPlayerSaved = true; // set true to abort future kill() runs
            TrekLog.logMessage("kill(): !thisPlayerSaved");
            if (ship.gold < 1000 || ship.damage > 50) {
                if (ship.gold < 1000) {
                    if (ship.gold > 0) {
                        ship.currentQuadrant.addObject(new TrekGold(ship.gold, ship));
                        TrekLog.logMessage(ship.name + " lost connection and was marked as 'dead'.  damage: " + ship.damage);
                    }
                } else {
                    int goldLeftBehind = 1000 + (int) Math.round(.10 * (ship.gold - 1000));
                    ship.currentQuadrant.addObject(new TrekGold(goldLeftBehind, ship));
                    TrekLog.logMessage(ship.name + " lost connection and was marked as 'dead'.  damage: " + ship.damage);
                }
                dbInt.updateShipRecord(ship);
                dbInt.setShipDestroyed(ship.dbShipID);
            } else {
                // saves the ship and reduces gold by 25%, also leaves 40% of
                // that gold behind as a chunk....
                ship.dockTarget = null;
                int goldLost = (int) Math.round(ship.gold * .25);
                int goldLeftBehind = (int) Math.round(goldLost * .40);
                TrekGold tg = new TrekGold(goldLeftBehind, ship);
                ship.currentQuadrant.addObject(tg);
                ship.breakSaves++;
                ship.gold -= goldLost;
                dbInt.updateShipRecord(ship);
                TrekLog.logMessage(ship.name + " lost connection and was saved.");
            }

            // to prevent problems when saving while observing a ship
            if (isObserving) {
                ShipQ thisShip = (ShipQ) ship;
                thisShip.observeShip.parent.theObservers.remove(ship.name);
                if (thisShip.observeShip.parent.theObservers.size() == 0) {
                    thisShip.observeShip.parent.isObserved = false;
                }

                isObserving = false;
            }

            TrekServer.removePlayer(this);
        }
    }