Недвижимость

Начиная с версии 5.1.5 можно использовать плагин Properties. Он позволяет делать покупки чего угодно, используя стандартный принцип. И это первый плагин, который может взаимодействовать с другим плагином. Существует 3 режима работы: простой режим, режим с использованием плагина SaveGame и продвинутый режим.

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

Этот режим не требует дополнительных настроек. Он создаст маркеры и пикапы недвижимости, которую можно было купить в оригинальной игре (за исключением магазинов Zero RC Shop и Wang Cars). При покупке домов, будут разблокированы их гаражи и маркеры входа в интерьер. Пример использования:

using GTA;
using GTA.Plugins;

public partial class MAIN : Thread {

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

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

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

    public class BUY_PRO : Thread {

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

    }

}

Объект PROPERTIES имеет одну проверку is_property_bought, которая возвращает true, если конкретная недвижимость куплена. Принимает метод 1 параметр типа byte с ограничениями от 0 до 31 включительно — уникальный идентификатор недвижимости (детали будут ниже). Это свойство будет работать независимо от режима использования.

Режим с использованием плагина SaveGame

Этот режим работает точно так же, как и простой режим. Главным отличием является то, что плагин самостоятельно добавляет маркеры сохранения для домов, в которых можно сохраниться. Это позволит реализовать стандартное сохранение и покупку одновременно.

Для реализации этого способа нужно сначала создать плагин SaveGame в простом режиме, а потом передать ссылку на плагин в конструктор класса Properties:

using GTA;
using GTA.Plugins;

public partial class MAIN : Thread {

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

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

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

    public class SAVEGM : Thread {

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

    }
	
    public class BUY_PRO : Thread {

        public override void START( LabelJump label ) {
            PROPERTIES = new Properties( SAVE_GAME ); // <-- передаём ссылку на плагин SaveGame
        }

    }

}

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

В этом режиме можно указать произвольный набор покупок недвижимости (количество должно быть от 1 до 32 включительно). Для этого надо использовать анонимный метод в качестве параметра конструктора:

using GTA;
using GTA.Plugins;

public partial class MAIN : Thread {

    static Properties PROPERTIES; // сохраняем ссылку на плагин Properties

    public override void START( LabelJump label ) {
        create_thread<BUY_PRO>(); // потом запускаем поток для покупок
        end_thread();
    }

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

	public class BUY_PRO : Thread {

        public override void START( LabelJump label ) {

            PROPERTIES = new Properties( setup => {

                setup.add_property( 0.0, 1.0, 2.0, 30000, action => {
                    // ...
                }, BuyPropertyMessage.PROPERTY );

            } );

        }

    }

}

Объект setup даёт доступ к методу add_property. Именно он и добавляет новую недвижимость в свой список. Параметры 0.0 1.0 и 2.0 отвечают за координаты пикапа, 30000 — цена недвижимости. В следующем параметре надо указать анонимную функцию, которая позволяет настроить дополнительные действия. Последний параметр позволяет настроить тип текста, который будет выводится при покупке ("недвижимость" или "номер в отеле"). Рассмотрим их все:

public class BUY_PRO : Thread {
    public override void START( LabelJump label ) {
        PROPERTIES = new Properties( setup => {
            setup.add_property( 0.0, 1.0, 2.0, 30000, action => {


                action.set_camera_position( 316.0747, -1786.757, 5.0712 ); <-- обязательный вызов!

                //action.set_camera_point( 0.0, 1.0, 2.0 );
                //action.X
                //action.Y
                //action.Z
                //action.Price
                //action.ID
                //action.AfterBought = delegate { };
                //action.BeforeCreate = delegate { };


            } );
        } );
    }
}

Метод set_camera_position является обязательным для вызова. Он устанавливает камеру в нужную позицию перед выводом сообщения о покупке. Все остальные опциональны. Метод set_camera_point устанавливает позицию куда будет смотреть камера. Без вызова этого метода камера будет смотреть в точку, где был создан пикап покупки. Свойства AfterBought и BeforeCreate позволяют указать дополнительные действия после покупки и до создания пикапа недвижимости.

Свойства X, Y, Z и Price возвращают координаты пикапа и цену недвижимости соответственно. Остался только загадочный ID. Когда недвижимость добавляется через метод add_property, генератор присваивает ей персональный идентификатор — число от 0 до 31 включительно. Он используется для внутренней реализации плагина, но также позволяет сохранить это число для проверок через метод is_property_bought.

Плагин может существовать в единственном экземпляре и требует отдельного потока (не MAIN)!

Last updated