Для начала немного о том, что такое консоль. Консоль - это окно в мир игры, которое предусмотрительно оставлено разработчиками. В процессе создания и отладки игры она предоставляет возможность отслеживать происходящее и воздействовать на игру. Похоже, что впервые в том виде, в котором она известна сейчас, консоль появилась в незабвенном Quake: открывающееся и закрывающееся окно, в котором можно вводить специальные команды и видеть результаты их выполнения. Это оказалось действительно удобным, и с тех пор консоль встраивается в очень многие игры, причем в финальной версии игры консоль либо не отключают вовсе, либо оставляют возможность включить ее - параметром командной строки, определенным значением в файлах данных игры, или иным способом.
В "Проклятых Землях" консоль доступна сразу, открываясь и закрываясь при нажатии на клавишу тильда (~). Однако же по умолчанию работает лишь незначительная часть консольных команд - для разрешения остальных нужно ввести мастер-код thingamabob. Но и это еще не все: начиная с версии игры 1.02 команды, разрешаемые thingamabob, отключены в режиме мультиплеера. К счастью, для их разрешения достаточно установить мой патч для имеющейся у вас версии игры.
Здесь я привожу описания различных консольных команд. Одни из них вы, возможно, уже знаете, а другие, как я надеюсь, - еще нет. Если вас интересуют команды, с которыми я и сам не разобрался, то вам сюда. Таким шрифтом в описаниях выделены обязательные части ключевых слов; вот так обозначаются параметры команд, вместо которых следует подставить требуемое значение. В [квадратных] скобках записаны необязательные параметры. Вертикальной | чертой разделены параметры, из которых нужно выбрать точно один.
#script_function_call Выводит в консоли вещественное значение, получаемое в результате вызова указанной функции. См. также скриптовые функции, $, ConsoleFloat() и ConsoleString(). Примеры: #GetX(GetLeader()) - вывести координату X для главного персонажа #GetDiplomacy(0,6) - вывести дипломатию от игрока 0 к игроку 6
$string_value Выводит в консоли указанную строку. См. также #, ConsoleFloat() и ConsoleString(). Пример: $"Hello" - вывести строку "Hello"
@script_procedure_call Производит вызов указанной скрипт-процедуры. См. также скриптовые процедуры. Примеры: @SetCP(GetObject(4517),40,135,0) - переместить юнит с идентификатором 4517 в точку (40,135) @KillUnit(GetObjectByName("NSheriff")) - убить Ривара @FixWorldTime(0) - установить на карте вечную ночь
ban [player_name] Отключает игрока с данным именем от сервера и запрещает ему вход на сервер до конца сеанса игры (проверка выполняется по IP-адресу). При задании имени разрешается указать лишь начальные буквы. Имя игрока можно заключать в кавычки, чтобы пробелы в нем корректно обрабатывались. Так можно исключать игроков с именами, начинающимися с пробела. Начиная с версии игры 1.05 можно не указывать имя игрока. В этом случае после ввода команды нужно подвести курсор к портрету игрока и нажать левую кнопку мыши. Отменить команду можно по клавише Esc. Применяется только на сервере. См. также kick. Примеры: ban war - отключить всех игроков с именами, начинающимися на war ban " noble" - отключить всех игроков с именами, начинающимися на noble (первый символ - пробел) ban - отключить игрока по портрету
console position Изменяет позицию консоли на экране. Возможные значения position: left - слева right - справа top - наверху (начальное положение консоли) bottom - внизу center - в центре экрана fullscreen - на весь экран
days ddmmyyyy DDMMYYYY Подсчитывает число дней, прошедшее от первой даты до второй. (Любопытно, с какой целью Нивал ввел эту команду.) Пример: days 26102000 08032001 - вывести число дней между 26.10.2000 и 08.03.2001
disconnect Отключает подсистему клиента на данном компьютере от сервера, т.е. возможно и отключение клиента на компьютере сервера.
execute input_file Выполняет последовательность консольных команд из текстового файла input_file. Имя файла может содержать путь. Примеры: exec init - выполнить файл init из каталога с игрой exec congiveallweapons.con - выполнить файл giveallweapons.con из подкаталога con
exit Немедленно завершает игру. Синоним quit.
fadeout n_milliseconds Если n_milliseconds положительно, то постепенно гасит изображение на экране, если отрицательно, то доводит его до нормальной яркости. Примеры: fadeout 1000 - погасить экран за одну секунду fadeout -1500 - довести экран до нормальной яркости за полторы секунды
filter [type] [off|0|on|1] Включает (on,1) или выключает (off,0) вывод системных сообщений указанного типа. Если второй параметр опущен, то он считается равным on. Параметр type может принимать следующие значения: none: отключается вывод всех сообщений ai: вероятно, самая полезная группа сообщений - выводятся идентификаторы юнитов, их текущие состояния, наносимые повреждения graphics: выводит 3D-координаты точки назначения персонажа all: обозначает "все виды сообщений" Примеры: filter none - отключить вывод всех системных сообщений filter all off - то же самое filter ai 1 - разрешить вывод сообщений группы ai filter - показать текущее состояние фильтров сообщений
fps [off|0|on|1] Включает (on,1) или выключает (off,0) режим отображения текущего значения FPS - оно выводится в правом верхнем углу экрана. См. также lastfps. Примеры: fps 1 - включить отображение FPS fps 0 - отключить отображение FPS
give 0 money|exp amount give 0 assortment С модификатором money дает игроку указанное количество денег. При использовании exp дает указанное количество опыта, причем опыт делится между членами партии, и к нему применяются бонусы за разум. Команду следует вводить, находясь в магазине, причем если в случае денег указанная сумма прибавляется немедленно, то в случае опыта необходимо повысить какой-либо навык или умение, чтобы изменения стали заметны. Кроме того, после ввода данной команды состояние обоза, персонажа и магазина сбрасывается в то, которое было при входе в магазин. По этой причине для получения денег я рекомендую использовать процедуру GiveMoney(). В форме с assortment помещает в набор товаров магазина все неквестовые предметы игры. Учтите, что они будут помещены именно в магазин, то есть вам придется их покупать. Примеры: give 0 money 5000000 - получить пять миллионов наличными give 0 exp 1000000 - передать партии один миллион опыта на распределение give 0 assortment - полки магазина ломятся от товаров
help Выводит в консоли список некоторых команд с их краткими описаниями.
history lines_count Устанавливает число запоминаемых строк консольного вывода, который можно проскроллировать клавишами PageUp и PageDown.
kick [player_name] Исключает игрока с данным именем с сервера. При задании имени разрешается указать лишь начальные буквы. Имя игрока можно заключать в кавычки, чтобы пробелы в нем корректно обрабатывались. Так можно исключать игроков с именами, начинающимися с пробела. Начиная с версии игры 1.05 можно не указывать имя игрока. В этом случае после ввода команды нужно подвести курсор к портрету игрока и нажать левую кнопку мыши. Отменить команду можно по клавише Esc. Применяется только на сервере. См. также ban. Примеры: kick war - исключить всех игроков с именами, начинающимися на war kick " noble" - исключить всех игроков с именами, начинающимися на noble (первый символ - пробел) kick - исключить игрока по портрету
lastfps Выводит в консоли последнее значение FPS. См. также fps.
listvar n_player [output_file] Выводит в консоли список переменных и их значений для игрока n_player. Если указан output_file, то вывод будет продублирован и в него. Позднее этот файл можно использовать в команде loadvar. Пример: listvar 0 plr0 - вывести список переменных для игрока №0 и продублировать его в файл plr0
loadvar n_player input_file Загружает список переменных и их значений для игрока n_player из файла output_file, созданного предшествовавшей командой listvar. Пример: loadvar 0 plr0 - загрузить список переменных для игрока №0 из файла plr0
lootall Перемещает весь свободно лежащий лут на игровой зоне в обоз игрока (сервера). Применяется только на сервере.
quit Немедленно завершает игру. Синоним exit.
rate bytes_per_second Устанавливает максимальную полосу пропускания на одного клиента в байтах в секунду. Диапазон значений - 500..10000. По умолчанию в игре используется rate 2500, что соответствует одному подключенному клиенту при скорости соединения 28,8 Кбит/с. Применяется только на сервере.
thingamabob Мастер-код, позволяющий использовать расширенный набор консольных команд. После его ввода расширенные команды остаются разрешенными вплоть до перезапуска игры. См. также разрешение кодов в мультиплеере.
Здесь описаны скриптовые функции "Проклятых Земель". Перед продолжением чтения полезно ознакомиться с введением в скрипты. С некоторыми функциями мне разобраться так и не удалось - их список вы можете увидеть здесь. Обычно функции применяются в качестве фактических параметров при вызове процедур. Если же вы просто хотите увидеть значение, возвращаемое функцией, то для этого можно воспользоваться консольной командой #. Основные функции для работы с объектами и игроками Функции для работы с группами Координатные функции Арифметические и логические функции Функции AI Функции работы с параметрами юнитов и игроков Прочие функции
Основные функции для работы с объектами и игроками
object GetLeader () Возвращает объект юнита - лидера команды. В сингле это будет Зак, а в мультиплеере - действующий персонаж игрока. Для управления лидером это самый быстрый и удобный способ.
float GetMercsNumber ( nPlayer ) Возвращает число наемников у игрока номер nPlayer (не включает лидера).
object GetObject ( idObject ) Возвращает экземпляр object для объекта с идентификатором idObject. См. также filter и GetObjectID().
object GetObjectByName ( strName ) Возвращает экземпляр object для объекта с именем strName.
float GetObjectID ( objUnit ) Возвращает идентификатор объекта objUnit. См. также GetObject()
float GetPlayer ( objUnit ) Возвращает номер игрока для юнита objUnit. См. также SetPlayer()
object GetUnitOfPlayer ( nPlayer , nUnit ) Возвращает экземпляр object для юнита номер nUnit игрока с номером nPlayer.
Функции для работы с группами
group GetPlayerUnits ( nPlayer ) Возврашает группу юнитов игрока номер nPlayer.
group GroupAdd ( grpA , grpB ) Теоретико-множественная операция объединения - возвращает группу из тех юнитов, которые есть хотя бы в одной из групп grpA и grpB.
group GroupCross ( grpA , grpB ) Теоретико-множественная операция пересечения - возвращает группу юнитов, которые есть как в grpA, так и в grpB.
bool GroupHas ( grp , objUnit ) Возвращает истину, если в группе grp содержится юнит objUnit.
group GroupSee ( grp ) Группа юнитов, которых видят юниты из группы grp. Эта операция рефлексивна - юниты видят и самих себя.
float GroupSize ( grp ) Возвращает число юнитов в группе grp.
group GroupSub ( grpA , grpB ) Теоретико-множественная операция разности - возвращает группу, состоящую из тех юнитов группы grpA, которых нет в grpB.
group PlayerSee ( nPlayer ) Группа юнитов, которых видит игрок номер nPlayer, - т.е., все те юниты, которые видны юнитам данного игрока. Эта операция рефлексивна - юниты видят и самих себя. Эквивалентно вызову GroupSee ( GetPlayerUnits ( nPlayer ) ) .
group UnitSee ( objUnit ) Группа юнитов, которых видит юнит objUnit. Эта операция рефлексивна - юнит видят и самого себя.
Координатные функции
float DistanceUnitPoint ( objUnit , x , y ) Возвращает расстояние между юнитом objUnit и точкой (x,y).
float DistanceUnitUnit ( objUnitA , objUnitB ) Возвращает расстояние между юнитами objUnitA и objUnitB.
float GetFutureX ( objUnit , flTime ) Экстраполирует координату x юнита objUnit через время flTime, основываясь на его текущем направлении движения и скорости. Именно эту функцию используют ловушки на сингл-карте "Портал".
float GetFutureY ( objUnit , flTime ) Экстраполирует координату y юнита objUnit через время flTime, основываясь на его текущем направлении движения и скорости. Именно эту функцию используют ловушки на сингл-карте "Портал".
bool IsInArea ( idArea x , y ) Возвращает истину, если точка (x,y) находится в области с идентификатором idArea. См. процедуры управления областями.
bool IsInSquare ( x , y , x1 , y1 , x2 , y2 ) Возвращает истину, если точка (x,y) находится в прямоугольнике (x1,y1)-(x2, y2).
bool UnitInSquare ( objUnit , x1 , y1 , x2 , y2 ) Возвращает истину, если юнит objUnit находится в прямоугольнике (x1,y1)-(x2, y2).
Арифметические и логические функции
float Add ( flA , flB ) Возвращает сумму чисел flA и flB.
float Div ( flA , flB ) Возвращает частное чисел flA и flB.
bool IsEqual ( flA , flB ) Возвращает истину, если числа flA и flB равны, и ложь в противном случае.
bool IsEqualString ( strA , strB ) Возвращает истину, если строки strA и strB равны с учетом регистра, и ложь в противном случае.
bool IsGreater ( flA , flB ) Возвращает истину, если число flA больше чем flB, и ложь в противном случае.
bool IsLess ( flA , flB ) Возвращает истину, если число flA меньше чем flB, и ложь в противном случае.
float Mul ( flA , flB ) Возвращает произведение чисел flA и flB.
bool Not ( bf ) Возвращает отрицание логического значения bf: истину, если bf равно нулю, и ложь в противном случае.
float Random ( flMax ) Возвращает псевдослучайное число из промежутка [ 0 , flMax ).
float Sub ( flA , flB ) Возвращает разность чисел flA и flB.
Функции AI
float GetDiplomacy ( nPlayerA , nPlayerB ) Возвращает тип дипломатии - кем является игрок номер nPlayerA для игрока номер nPlayerB. Возможные значения: 1 - союзник 0 - нейтрал -1 - враг См. также IsEnemy(), GetPlayer(), SetDiplomacy() и SetPlayer()
bool IsAlive ( objUnit ) Возвращает истину, если юнит objUnit жив, и ложь в противном случае.
bool IsDead ( objUnit ) Возвращает истину, если юнит objUnit мертв, и ложь в противном случае.
bool IsEnemy ( objUnit , nPlayer ) Возвращает истину, если юнит objUnit является врагом для игрока номер nPlayer. См. также GetDiplomacy(), GetPlayer(), SetDiplomacy() и SetPlayer()
bool IsUnitBlocked ( objUnit ) Возвращает истину, если юнит objUnit заблокирован. См. также BlockUnit().
bool IsUnitInWater ( objUnit ) Возвращает истину, если юнит objUnit находится в воде.
Функции работы с параметрами юнитов и игроков
float GetMoney ( nPlayer ) Возвращает количество денег у игрока номер nPlayer.
float GetLootItemsCount ( nPlayer ) Возвращает число предметов в обозе у игрока номер nPlayer.
float HP ( objUnit ) Возвращает текущее значение HP (жизни) у юнита objUnit. Это число учитывает эффекты спеллов ослабления и усиления, наложенных на юнит.
float Mana ( objUnit ) Возвращает текущее значение маны у юнита objUnit.
float MaxHP ( objUnit ) Возвращает максимально возможное значение HP (жизни) у юнита objUnit. Это число учитывает эффекты спеллов ослабления и усиления, наложенных на юнит.
float MaxMana ( objUnit ) Возвращает максимально возможное значение маны у юнита objUnit.
bool WasLooted ( objUnit ) Возвращает истину, если труп юнита objUnit уже взят, и ложь в противном случае (в частности, если юнит еще жив).
Прочие функции
bool GetLeverState ( objLever ) Возвращает истину, если "рычаг" objLever "включен", и ложь в противном случае. См. также SetLeverState().
float GetWorldTime () Возвращает текущее время внутриигроых суток (в часах). См. также IsNight(), FixWorldTime() и RunWorldTime()
float GSGetVar ( nPlayer , strVar ) Возвращает значение переменной с именем strVar у игрока номер nPlayer. См. также GSSetVar().
float IsNight () См. также GetWorldTime(), FixWorldTime() и RunWorldTime()
Процедуры AI
SetDiplomacy ( nPlayerA , nPlayerB , flDiplomacy ) Изменяет дипломатию - кем является игрок nPlayerB для игрока nPlayerA. Возможные значения flDiplomacy: 1 - союзник 0 - нейтрал -1 - враг См. также SetPlayer(), GetDiplomacy() и GetPlayer(). Примеры: SetDiplomacy(0,
SetPlayer ( objUnit , nPlayer ) Объявляет юнит objUnit принадлежащим игроку nPlayer. См. также SetDiplomacy(), GetDiplomacy() и GetPlayer().
Процедуры управления областями
AddRectToArea ( idArea , x1 , y1 , x2 , y2 ) Добавляет к области idArea прямоугольник (x1,y1)-(x2.
AddRoundToArea ( idArea , x , y , rad ) Добавляет к области idArea круг радиуса rad с центром в точке (x,y).
DeleteArea ( idArea ) Удаляет область idArea.
Процедуры динамического задания целей квеста
QFinish () Завершает текущее перечисление целей. См. также QStart
QuestComplete ( nPlayer , strQuestName ) Заявляет квест strQuestName выполненным (это не отражается в окнах квестов), см. *.mq .
QObjUse ( strObject , bfState ) Добавляет цель: перевести "рычаг" strObject в состояние bfState. Пример: QObjUse("GetObject(44456)",1) - включить "рычаг" с идентификатором 44456.
QObjKillGroup ( strGroupName ) Добавляет цель: уничтожить группу с именем strGroupName.
QObjKillUnit ( strUnitName ) Добавляет цель: уничтожить юнит с именем strUnitName. Пример: QObjKillUnit("GetObject(1001936)") - убить юнит с идентификатором 1001936.
QObjSeeUnit ( strUnitName ) Добавляет цель: увидеть юнит с именем strUnitName. Пример: QObjSeeUnit("GetObject(4517)") - увидеть юнит с идентификатором 4517.
QObjArea ( idArea ) Добавляет цель: попасть в область с идентификатором idArea.
QStart ( strQuestName ) Начинает перечисление целей для квеста strQuestName. См. также QFinish
Различные процедуры воспроизведения
PlayAnimation ( objUnit , strAnimation ) Воспроизводит анимационно-звуковую последовательность модели для юнита objUnit. Названия последовательностей и их содержание различны для разных видов юнитов - см. resdatabase.res*.adb . Пример: PlayAnimation(GetLeader(),"uattack01")
PlayCamera ( strName ) Воспроизводит последовательность перемещений камеры файла с именем strName из подкаталога CAMERA. Имя файла указывается с расширением.
PlayCamera ( strName ) Воспроизводит видеоролик с именем strName из подкаталога MOVIES. Имя файла указывается с расширением.
PlayMusic ( 0 , strName ) Начинает воспроизведение мелодии с именем strName из подкаталога MOVIES. Имя файла указывается без расширения.
Генерация предметов и заклинаний
EraseQuestItem ( 0 , idQItem ) Убирает из обоза игрока квестовый предмет с кодом idQItem. Список квестовых предметов и их кодов вы можете увидеть здесь. См. также GiveQuestItem().
FixItems () Чинит все предметы в обозе и на юнитах команды игрока-человека.
GiveItem ( 0 , strItem ) Помещает в обоз предмет, описываемый строкой strItem. См. также задание предметов.
GiveMoney ( 0 , flAmount ) Дает игроку flAmount денег. См. также give.
GiveQuestItem ( 0 , strQItem ) Дает игроку квестовый предмет с именем strQItem. Список квестовых предметов вы можете увидеть здесь. См. также EraseQuestItem().
GiveUnitSpell ( objUnit , strSpell ) Дает юниту objUnit спелл, описываемый строкой strSpell. Спелл помещается не в обоз, а в набор активных спеллов - если он полон, то ничего не происходит. В магазине эта процедура не действует, а в игровой зоне, хотя фактически спелл дается игроку, не обновляет набор спеллов. См. также задание спеллов.
Аудиовизуальные эффекты: источники частиц, освещение, молнии
CreateLightning ( id , x1 , y1 , z1 , x2 , y2 , z2 , flIntensity ) создает молнию с идентификатором id, бьющую из точки (x1,y1,z1) в точку (x2,y2,z2). При параметре flIntensity отличном от нуля молния имеет вид спелла "молния" и бьет с интенсивностью flIntensity. Если же flIntensity равно нулю, то молния имеет вид спелла "стена молний" и интенсивность по умолчанию.
CreateParticleSource ( id , x , y , z , rad , strType ) Создает источник частиц типа strType с радиусом rad и идентификатором id в точке (x,y,z). Возможны следующие типы источника частиц: transform portalstar portal mushroom nuke geyser poisonfog smoke fire lightningblast fireblast campfire fireball firearrow
CreatePointLight ( id , x , y , z , rad , flR , flG , flB ) Создает источник света с идентификатором id, радиусом rad и цветом (flR,flG,flB) в точке (x,y,z).
DeleteLightning ( id ) Удаляет молнию с идентификатором id.
DeleteParticleSource ( id ) Удаляет источник частиц с идентификатором id.
DeletePointLight ( id ) Удаляет источник света с идентификатором id.
MoveParticleSource ( id , x , y , z , flTime , bfRemove ) Перемещает источник частиц с идентификатором id в точку (x,y,z) за время flTime (измеряется в 1/15 секунды). Если bfRemove - истина, то после перемещения удаляет источник.
MovePointLight ( id , x , y , z , flTime , bfRemove ) Перемещает источник света с идентификатором id в точку (x,y,z) за время flTime (измеряется в 1/15 секунды). Если bfRemove - истина, то после перемещения удаляет источник.
SetParticleSourceSize ( id , rad ) Изменяет радиус источника частиц с идентификатором id на rad.
Прочие процедуры
ConsoleString ( str ) Выводит в консоли строку str. См. также $, # и ConsoleFloat().
ConsoleFloat ( fl ) Выводит в консоли число fl. В качестве fl может выступать вызов скриптовой функции. См. также скриптовые функции, $, # и ConsoleString().
FixWorldTime ( flTime ) Устанавливает текущее время внутриигровых суток в flTime (измеряется в часах), запрещая его ход. См. также GetWorldTime(), IsNight(), RunWorldTime().
LeaveToZone ( 0 , strZone , 0 ) Перемещает партию в локацию с именем strZone. Следует, однако, учитывать, что эта команда не взаимодействует с логикой квестов, поэтому ее использование может привести к непредвиденным последствиям. См. также список локаций.
RunWorldTime ( flTime ) Устанавливает текущее время внутриигровых суток в flTime (измеряется в часах), разрешая его ход. См. также GetWorldTime(), IsNight(), FixWorldTime().
SetBackgroudColor ( flR , flG , flB ) Устанавливает фоновый цвет на карте в (flR,flG,flB) (фон перекрывается текстурами неба, поэтому результат будет заметен лишь в пещерных картах).