* @param settlement an <code>IndianSettlement</code> value
     * @param random A pseudo-random number source.
     * @param cs A <code>ChangeSet</code> to update.
     */
    private void csDestroySettlement(Unit attacker,
                                     IndianSettlement settlement,
                                     Random random, ChangeSet cs) {
        Game game = getGame();
        Tile tile = settlement.getTile();
        ServerPlayer attackerPlayer = (ServerPlayer) attacker.getOwner();
        ServerPlayer nativePlayer = (ServerPlayer) settlement.getOwner();
        StringTemplate attackerNation = attackerPlayer.getNationName();
        StringTemplate nativeNation = nativePlayer.getNationName();
        String settlementName = settlement.getName();
        boolean capital = settlement.isCapital();
        int plunder = settlement.getPlunder(attacker, random);

        // Destroy the settlement, update settlement tiles.
        csDisposeSettlement(settlement, cs);

        // Make the treasure train if there is treasure.
        if (plunder > 0) {
            List<UnitType> unitTypes = game.getSpecification()
                .getUnitTypesWithAbility(Ability.CARRY_TREASURE);
            UnitType type = Utils.getRandomMember(logger, "Choose train",
                unitTypes, random);
            Unit train = new ServerUnit(game, tile, attackerPlayer, type);
            train.setTreasureAmount(plunder);
        }

        // This is an atrocity.
        int atrocities = Player.SCORE_SETTLEMENT_DESTROYED;
        if (settlement.getType().getClaimableRadius() > 1) atrocities *= 2;
        if (capital) atrocities = (atrocities * 3) / 2;
        attackerPlayer.modifyScore(atrocities);
        cs.addPartial(See.only(attackerPlayer), attackerPlayer, "score");

        // Finish with messages and history.
        cs.addMessage(See.only(attackerPlayer),
            new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                "model.unit.indianTreasure", attacker)
            .addName("%settlement%", settlementName)
            .addAmount("%amount%", plunder));
        cs.addHistory(attackerPlayer,
            new HistoryEvent(game.getTurn(),
                HistoryEvent.EventType.DESTROY_SETTLEMENT)
            .addStringTemplate("%nation%", nativeNation)
            .addName("%settlement%", settlementName));
        if (capital) {
            cs.addMessage(See.only(attackerPlayer),
                new ModelMessage(ModelMessage.MessageType.FOREIGN_DIPLOMACY,
                    "indianSettlement.capitalBurned", attacker)
                .addName("%name%", settlementName)
                .addStringTemplate("%nation%", nativeNation));
        }
        if (nativePlayer.checkForDeath() == IS_DEAD) {
            cs.addGlobalHistory(game,
                new HistoryEvent(game.getTurn(),
                    HistoryEvent.EventType.DESTROY_NATION)
                .addStringTemplate("%nation%", attackerNation)
                .addStringTemplate("%nativeNation%", nativeNation));
        }
        cs.addAttribute(See.only(attackerPlayer), "sound",
            "sound.event.destroySettlement");
    }