fallout.ru

Управление игровым персонажем

Сон игрока

ShowRestMenu

Функция вызывает меню, в котором игрок выбирает продолжительность сна. Она необходима в тех случаях, когда нужно проверить, законно ли спать в какой-либо кровати.

Пример: стандартный скрипт кроватей

begin Bed_Standard

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

if ( MenuMode == 0)
            if ( OnActivate == 1 )
                        ShowRestMenu
            endif
endif

end

GetPCSleep (возвращает Boolean/short)

Функция возвращает 1, когда игрок спит. Учтите, что счетчик времени, который игрок видит во время сна, считается меню, поэтому не используйте в случаях, когда нужно управлять сном игрока, стандартную конструкцию MenuMode.

WakeUpPC

Заставляет игрока проснутся раньше желаемого времени. Иногда также размещает неподалёку монстра, если игрок спал на улице. Если был прерван сон длительностью равной 1 часу, враждебное существо обязательно появится. Разбудить игрока можно только, когда тот действительно спит, а не просто пережидает пару часов.

Пример: отредактированный отрывок длиннющего скрипта “Sleepers” из стандартной игры, отвечающий за появление снов о Дагот Уре и моровой чуме. Он отлично показывает, как работают две последние функции.

if ( GetPCSleep == 0 )
            return
endif

Set dream to 0

if ( GetPCCell "Balmora" == 1 )
            Set dream to 1
endif

if ( GetPCCell "Ald-ruhn" == 1 )
            Set dream to 2
endif

[…]

if ( dream == 0 )
            Set doOnce to 0
            ;это позволяет убедиться, что следующая атака произойдёт не раньше того, как игрок покинет город
            return
endif

AddTopic "Disturbing Dreams"

;Добавить соответствующую тему для разговора. Не важно, если мы добавляем её вновь и вновь.
;ПЕРВЫЙ СОН

if ( GetJournalIndex A1_2_AntabolisInformant >= 10 )
            if ( GetJournalIndex A1_Dreams < 1 )
                        WakeUpPC
                        MessageBox "У Вас был ужасный кошмар. Бла-бла-бла", “ОК"
                        Journal A1_Dreams 1
                        return
            endif
endif

Включение и отключение управления игровым персонажем

Отключение возможности управления

Все эти функции позволяют выключить какую-то часть интерфейса игрока, таким образом ограничивая его действия.

DisablePlayerControls

После вызова этой функции игрок может лишь осматриваться с помощью мышки и открывать опции. Все остальные действия и просмотр игровых меню запрещены.

DisablePlayerFighting
DisablePlayerMagic

Функции, по идее, должны отключать возможность сражаться и использовать магию соответственно. Однако, они неэффективны, так как если игрок обнажил оружие или готовится произнести заклинание, он всё ещё может выполнять задуманное. К тому же, функции не ограничивают использование возможностей с помощью «горячих» клавиш. К сожалению, я не знаю действенного решения этой проблемы.

DisablePlayerJumpingОтключить прыжки
DisablePlayerLookingОтключить осмотр
DisablePlayerViewSwitchОтключить возможность переключаться между ракурсами
DisableVanityModeОтключить ракурс от третьего лица (?)

Включение возможности управления

Эти функции существуют в противовес вышеупомянутым. Их стоит использовать, когда Вам нужно вернуть игроку возможность управления своим персонажем.

EnableLevelUpMenuМеню поднятия уровня
EnablePlayerControlsВключает управление и все меню
EnablePlayerJumpingПрыжки
EnablePlayerFightingСражение
EnablePlayerLookingОсмотр
EnablePlayerMagicМагия
EnablePlayerViewSwitchПереключение между ракурсами
EnableRestРазрешить отдых
EnableVanityModeРазрешить вид от третьего лица (?)

Проверка состояния управления

Все эти функции возвращают 1, если соответствующая возможность отключена, и 0, если игрок может ей воспользоваться.

GetPlayerControlsDisabledУправление и меню
GetPlayerFightingDisabledСражение
GetPlayerJumpingDisabledПрыжки
GetPlayerMagicDisabledМагия
GetPlayerLookingDisabledОсмотр
GetPlayerViewSwitchНе работает. Используйте вместо неё:
GetVanityModeDisabledВид от третьего лица

Переключение ракурса

PCGet3rdPerson (возвращает Boolean/short)

Функция возвращает 1, когда игрок использует вид от третьего лица.

PCForce3rdPerson

Функция провоцирует переключение ракурса на вид от третьего лица (возможно, придётся подождать, пока не завершится анимация).

PCForce1stPerson

То же самое, но с видом от первого лица.

Функции меню генерации персонажа

Эти недокументированные функции используются в игре для создания игрового персонажа. Одни из них активирует меню выбора класса, расы и т.д. Другие постепенно добавляют стандартные возможности к интерфейсу (магия, инвентарь, карта).

Вызов меню генерации персонажа:

EnableBirthMenuвыбор знака зодиака
EnableClassMenuвыбор класса
EnableRaceMenuвыбор расы
EnableNameMenuвыбор имени

Заметьте, что не существует функций, выключающих эти меню. Они автоматически закрываются по нажатию кнопки «ОК».

Подключение игровых меню:

EnableMagicMenuменю магии
EnableMapMenuменю карты
EnableInventoryMenuменю инвентаря
EnableStatsMenuменю информации о персонаже

К сожалению, эти меню также невозможно отключить, что могло бы быть крайне полезным.

Один из вариантов использования этих функций – нечестный способ смены вида и имени в ходе игры. Это, однако, может привести к появлению всякого рода проблем. Например, уровень прокачки иногда может вновь стать равным 1.

Также этими инструментами можно воспользоваться для создания более изощрённого способа генерации персонажа.

Пример: один из упрощенных вариантов скрипта “CharGen”, который провоцирует быструю последовательную генерацию персонажа, когда он просто выходит из двери.

Begin CharGenDoorExit

;скрипт прикреплён к первой двери таможни
;т.е. как только игрок пытается выйти оттуда, он вынужден создать своего персонажа
;все проверки присутствуют

short done

if (done == 1)
            return
endif

if ( OnActivate == 1 )
            enablestatsmenu
            enableinventorymenu
            enablemagicmenu
            enablemapmenu
            enableplayerfighting
            enableplayermagic
            set done to 1
            Activate
endif

End

Определение того, открыто ли меню

MenuMode

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

If ( MenuMode == 1 )
            Return
Endif

Закрытие меню

Недокументрованно

MenuTest

Функция ничего не возвращает, однако, закрывает определённые типы меню. Она никак не влияет на окна диалога, зачарования, алхимии, заклинания и ремонта.

if ( OnPCEquip == 1 )
            set OnPCEquip to 0
            coc Balmora
            MenuTest
endif