> For the complete documentation index, see [llms.txt](https://wmysterio.gitbook.io/gta-script-generator/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wmysterio.gitbook.io/gta-script-generator/docs/plugins/plugin_save_game.md).

# Сохранение игры

Начиная с версии 5.1.5 можно использовать плагин `SaveGame`. Он реализует систему сохранения, как это было сделано в оригинальном **main.scm**. Существует 2 режима работы: простой и продвинутый.

### Простой режим

В этом режиме нам не нужно делать какие-либо дополнительные действия. Режим предполагает использование стандартных точек сохранения. Пример использования:

```csharp
using GTA;
using GTA.Plugins;

public partial class MAIN : Thread {

    static SaveGame SAVE_GAME; // сохраняем ссылку на плагин, если нужно

    public override void START( LabelJump label ) {
        create_thread<SAVEGM>(); // создать поток, который контролирует сохранение
        end_thread();
    }

    //----------------------------------------------------------------------------------------------------

    public class SAVEGM : Thread {

        public override void START( LabelJump label ) {
            SAVE_GAME = new SaveGame(); // инициализация плагина
        }

    }

}
```

Плагин создаст пикапы сохранения в 18-ти стандартных местах.

### Продвинутый режим

Этот режим позволяет настроить позиции пикапов вручную. Для этого в конструктор передайте анонимный метод:

```csharp
using GTA;
using GTA.Plugins;

public partial class MAIN : Thread {

    static SaveGame SAVE_GAME; // сохраняем ссылку на плагин, если нужно

    public override void START( LabelJump label ) {
        create_thread<SAVEGM>(); // создать поток, который контролирует сохранение
        end_thread();
    }

    //----------------------------------------------------------------------------------------------------

    public class SAVEGM : Thread {

        public override void START( LabelJump label ) {

            SAVE_GAME = new SaveGame( setup => { // инициализация плагина
			
                setup.add_point( 2495.53, -1711.88, 1014.24, 2495.9, -1707.45, 1013.26, 0.0 ) // 0

                     .add_point( 1263.05, -773.67, 1091.39, 1263.76, -776.59, 1090.89, 183.23 ) // 1

                     .add_point( 416.9548, 2538.813, 9.5077, 418.0759, 2536.771, 9.0077, 269.2893 ) // 2

                               //   1        2          3          4         5           6         7       8
                     .add_point( 2367.192, -1121.518, 1050.382, 2367.072, -1123.715, 1049.875, 183.259, delegate { 
                         // действие...
                     } ); // 3

            } );

        }

    }

}
```

Объект **setup** даёт доступ к методу `add_point`, который добавляет новую точку для пикапа сохранения (дискеты). Первые три параметра отвечают за позицию самого пикапа. Следующие 3 указывают позицию, в которую будет передвинут игрок при сохранении. 7-й параметр позволяет развернуть игрока на нужный угол при сохранении. Последний параметр является опциональным. Мы можем указать дополнительное действие при добавлении точки. Это можно использовать, например, чтобы создать маркер на радаре.

{% hint style="danger" %}
Координаты пикапа и координаты перемещения игрока должны отличаться, чтобы избежать зацикливания вызова меню сохранения.
{% endhint %}

{% hint style="danger" %}
Этот плагин не создаёт маркеров!
{% endhint %}

{% hint style="danger" %}
Плагин может существовать только в одном экземпляре и требует отдельного потока (не **MAIN**).
{% endhint %}
