Начиная с версии 5.1.5 можно использовать плагин Phone. Он реализует систему приёма звонков, как это было в оригинальной игре. Создаётся он так:
usingGTA;usingGTA.Plugins;publicpartialclassMAIN { staticPhone CJ_PHONE; // сохраняем ссылку на плагинpublicoverridevoidSTART( LabelJump label ) {create_thread<PHONE>();end_thread(); } //----------------------------------------------------------------------------------------------------publicclassPHONE:Thread {publicoverridevoidSTART( LabelJump label ) { CJ_PHONE =newPhone( setup => { // можно указать время, которое нужно ождать перед звонком // setup.set_max_time_between_calls( 60000 ); // максимальное время на ответ игрока // setup.set_max_response_time( 20000 ); // можно указать номер WAV-файла, если стандартная мелодия не устраивает // setup.set_ringtone( 23000 );setup.add_dialog( 11, dialog => {dialog.add_replica( "DIALOG1",4000,false );dialog.add_replica( "DIALOG2",6000,true );dialog.add_replica( "DIALOG3",3500,false );dialog.add_replica( "DIALOG4",4000,true );dialog.add_replica( "DIALOG5",3500,false );dialog.OnComplete=delegate {create_thread<TEMP>(); }; } ); } ); } }publicclassTEMP:Thread {publicoverridevoidSTART( LabelJump label ) {end_thread(); } }}
Объект setup позволяет настроить телефон. Обязательным методом является add_dialog. Он создаёт новый диалог. Здесь 11 - идентификатор диалога. Все остальные методы опциональны.
Все диалоги должны иметь разные ID!
В объекте setup доступны новые свойства: OnLoadData, OnUnloadData и OnReplicaChanged. Первое свойство позволяет указать метод, который будет выполнятся при загрузке данных диалога. Второе свойство позволяет указать действие когда загруженные данные освобождаются. Последнее свойство позволяет вызывать указанный метод, когда выполняется каждая реплика:
Объект dialog позволяет настроить диалог. В нём есть основной метод add_replica. Он принимает 3 параметра: GXT-ключ строки, которая будет показана; длительность реплики; далее значение true, если надо, чтобы игрок шевелил губами во время этой реплики или false, чтобы НЕ шевелил.
Реплики будут выполнятся последовательно. После последней фразы игрок спрячет телефон и диалог закончится. Свойство OnComplete позволяет выполнить действие после успешного завершения диалога. В данном примере создаётся поток TEMP. Осталось только научится делать звонок:
usingGTA;usingGTA.Plugins;publicpartialclassMAIN:Thread {staticPhone CJ_PHONE;publicoverridevoidSTART( LabelJump label ) {create_thread<PHONE>();wait( 1000 ); // лучше сделать небольшую задержку после создания потока "PHONE". // ...CJ_PHONE.call( 11 ); // <-- активируем телефон, передав в метод идентификатор диалога // ...end_thread(); } // здесь класс "MAIN.PHONE" ...}
Плагин может существовать только в единственном экземпляре и требует отдельный поток (не MAIN)!
Использование плагина требует хорошего планирования цепочек миссий, чтобы звонки совершались в строгой последователоьности согласно плану. В противном случае есть риск, что ID звонка может перезаписаться, что не позволит выполнить диалог и действия после его завершения!