Macros and Keymaps

Материал из Dwarf Fortress Wiki
Перейти к навигацииПерейти к поиску


Dwarf Fortress требует активного использования клавиатуры. Но в распоряжении дварфовода также имеется встроенная система макросов. Благодаря ей или какой-либо внешней программе, Вы можете сэкономить много времени, когда требуется сделать множество указаний, перестроек, выбрасываний и т.д.

Встроенная система макросов DF

Создание макросов

В самом DF управление макросами следующее:

  • Ctrl+r = начать/прекратить запись макроса
  • Ctrl+p = воспроизвести макрос
  • Ctrl+s = сохранить макрос
  • Ctrl+l = загрузить макрос
  • Ctrl+u + число = повторить макрос [число] раз


Чтобы создать макрос нажмите Ctrl+r, для начала записи Ваших действий. Бывает удобно начинать запись, находясь в меню указаний, когда Вы можете видеть позицию игрового курсора. Когда Вы произвели все необходимые действия и хотите остановить запись, снова нажмите Ctrl+r. Сохраните макрос, нажав Ctrl+s и введя название. Тогда макрос будет добавлен в ваш список макросов. Чтобы загрузить макрос из списка нажмите Ctrl+l и выберите макрос. Воспроизвести выбранный макрос можно нажатием Ctrl+p где бы вы не находились. Так же Вы можете повторить макрос требуемое число раз нажав Ctrl+u, введя двухзначное число (количество повторов) и затем нажав Ctrl+p для запуска макроса. Движение вашей мыши в окне или любое другое действие, в результате которого окно DwarfFortress потеряет фокус, является раздражающим хорошим способом для прерывания работы макроса (так же, это единственно известный способ).

Сохранённые макросы находятся в data/init/macros в .mak-файлах. Даже простейший макрос — например, создание пандуса(Ramp) шириной в 3-тайла — может содержать до 50 команд, так как все возможные назначения клавиш включаются в макрос и помещаются в его блок (r для создания пандуса используется многими по умолчанию).

pressing_enter_recorded
		SELECT
		CLOSE_MEGA_ANNOUNCEMENT
		WORLD_PARAM_ENTER_VALUE
		SETUPGAME_SAVE_PROFILE_GO
		D_BURROWS_DEFINE
		D_MILITARY_ALERTS_SET
	End of group
		CUSTOM_CTRL_R
	End of group
End of macro


Для данного примера после записи макроса был нажат Enter после чего запись макроса была остановлена. При использовании этого макроса каждая команда, находящаяся в файле будет вызвана, если это возможно. Если вы находитесь в меню назначений данный макрос выполнит лишь команду Выбор (Select), все остальные команды будут проигнорированы. Если же вы находитесь в меню нор он сработает так, как будто бы вы нажали Enter здесь. Макрос всегда заканчивается блоком, содержащим конец (End of macro) его записи. Если Вы изменили назначение клавиш, вы получите другой результат, потому что записываются команды, а не нажатые клавиши.
При создании (или редактировании) макросов рекомендуется использовать только те команды, которые действительно нужны.

ramping_created
		DESIGNATE_RAMP
	End of group
		CURSOR_DOWN_Z
	End of group
		SELECT
	End of group
		CURSOR_RIGHT
	End of group
		CURSOR_RIGHT
	End of group
		SELECT
	End of group
		CURSOR_LEFT
	End of group
		CURSOR_LEFT
	End of group
		CURSOR_UP
	End of group
End of macro

Этот макросы был написан вручную и предназначен для создания пандуса шириной в 3 тайла на один уровень ниже и размещающем курсор для повторного запуска макроса и быстрого создания пандуса ниже. Первая строчка - название файла. Каждое нажатие клавиши "закрывается" группирующим тэгом (End of group). Это необходимо для работы макроса.
Неизвестно, можно ли использовать циклы/итерации, а так же другие возможности программирования или комментирования.
Редактирование, удаление или добавление макросов при запущенной игре является нелогичным. После редактирования файла макроса вы должны удалить и заново загрузить макрос. Для этого выберите Select Options>KeyBindings>Macros. Удалите макрос и загрузите его используя Ctrl+l.

Тонкая настройка макросов

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

Второй и самый эффективный способ увеличить скорость состоит в том, чтобы удалить все ненужные команды DF из макроса, при помощи текстового редактора. Несмотря на то, что дополнительные команды игнорируются игрой, они отнимают время на обработку. Например для движения курсора вверх/вниз будет записано 3 команды, а для движения налево/направо - 4, большинство остальных клавиш запишут в макрос гораздо больше. Нажатие d, для примера, запишет более 30 команд.

После редактирования макроса требуется загрузить его заново в игре, смотрите выше

Для примера ниже представлен код простого макроса, который переходит в меню Назначений, выбирает команду копать d,d, затем двигается на один квадрат вправо и назначает этот тайл для раскопок.

example
		OPTION4
		CUSTOM_D
		WORLD_PARAM_DELETE
		LEGENDS_EXPORT_DETAILED_MAP
		A_COMBAT_DODGE
		A_STATUS_DESC
		A_SLEEP_DAWN
		A_INV_DROP
		SETUP_NOTES_DELETE_NOTE
		BUILDJOB_TARGET_RIGHT
		BUILDJOB_BED_DORMITORY
		BUILDJOB_FARM_WINTER
		BUILDJOB_RACKSTAND_KILL2
		HOTKEY_BUILDING_DOOR
		HOTKEY_BUILDING_CONSTRUCTION_STAIR_DOWN
		HOTKEY_BUILDING_WORKSHOP_DYER
		BUILDING_ORIENT_RIGHT
		BUILDING_ADVANCE_STAGE
		BUILDING_TRIGGER_MAX_SIZE_DOWN
		BUILDING_TRACK_STOP_DUMP
		HOTKEY_GLASS_DOOR
		HOTKEY_CARPENTER_DOOR
		HOTKEY_MASON_DOOR
		HOTKEY_TRAP_DOOR
		BUILDJOB_STOCKPILE_DELETE_CHILD
		STOCKPILE_ARMOR
		STOCKPILE_SETTINGS_DISABLE
		STORES_DUMP
		ORDERS_DYED_CLOTH
		ORDERS_ZONE_DRINKING
		D_DESIGNATE
		D_HAULING_STOP_LC_DIR
		D_BURROWS_DELETE
		D_NOTE_DELETE
		D_NOTE_ROUTE_DELETE
		D_BITEM_DUMP
		D_LOOK_DUMP
		ARENA_CREATURE_SIDE_UP
		ASSIGNTRADE_SORT
		DESIGNATE_DUMP
		DESIGNATE_DIG
		ITEM_DUMP
		D_MILITARY_DISBAND_SQUAD
		D_MILITARY_ALERTS_DELETE
		D_MILITARY_AMMUNITION_REMOVE_ITEM
		D_MILITARY_DELETE_UNIFORM
		STRING_A100
	End of group
		STANDARDSCROLL_RIGHT
		CURSOR_RIGHT
		WORLD_PARAM_INCREASE
		A_MOVE_E
	End of group
		SELECT
		CLOSE_MEGA_ANNOUNCEMENT
		WORLD_PARAM_ENTER_VALUE
		SETUPGAME_SAVE_PROFILE_GO
		D_BURROWS_DEFINE
		D_MILITARY_ALERTS_SET
	End of group
		SELECT
		CLOSE_MEGA_ANNOUNCEMENT
		WORLD_PARAM_ENTER_VALUE
		SETUPGAME_SAVE_PROFILE_GO
		D_BURROWS_DEFINE
		D_MILITARY_ALERTS_SET
	End of group
		CUSTOM_CTRL_R
	End of group
End of macro

Ниже представлен макрос, выполняющий те же самые действия, только оптимизированный путем удаления ненужных (избыточных) команд. Так же каждый макрос содержит дополнительную команду CUSTOM_CTRL_R в конце, которая может быть удалена без проблем.

example
		DESIGNATE_DIG
	End of group
		CURSOR_RIGHT
	End of group
		SELECT
	End of group
		SELECT
	End of group
End of macro

Третий способ увеличения скорости работы макроса заключается в редактировании файлов настроек. В основном файле настроек (data/init/init.txt) вы можете увидеть следующие строки: The third way is to change settings in the init-files. In the base init file (data/init/init.txt) you will find the follow lines:

If you set KEY_REPEAT_ACCEL_LIMIT above one, then after KEY_REPEAT_ACCEL_START repetitions 
the repetition delay will smoothly decrease until repetition is this number of times faster 
than at the start.

[KEY_REPEAT_ACCEL_LIMIT:8]
[KEY_REPEAT_ACCEL_START:10]

This controls the number of milliseconds between macro instructions.

[MACRO_MS:15]

  • MACRO_MS регулирует время (в миллисекундах) между командами макроса. (Значение по умолчанию, 15, дает 1000/15 команд в секунду, т.е. около 66). Уменьшение этого значения увеличивает скорость выполнению макроса. При значительном снижении этого параметра игра может не отвечать при выполнении макроса.
  • KEY_REPEAT_ACCEL_START и KEY_REPEAT_ACCEL_LIMIT не связаны с выполнением макросов (за исключением записи).

Внешние утилиты

QuickFort

Дополнительная утилита для Dwarf Fortress основанная на таблицах. Переводит CSV файлы, содержащие "графическое" (или как минимум двумерное) представление Ваших желаний в обычные макросы DF. Включает в себя некоторое количество скриптов для быстрого старта, некоторые из них довольно сложны. Входит в состав Lazy Newb Pack.

AutoHotKey

  1. Скачайте AutoHotKey в Utilities#AutoHotKey. Установка проста и утилита использует мало системных ресурсов.
  2. Запишите макрос (сохраняется в формате .ahk), содержащий любое количество команд. Скрипт запускается двойным кликом по файлу .ahk и выключается кликом правой кнопки мыши по иконке AutoHotKey в трее. Это можно сделать в любое время - даже посреди игры. AutoHotKey также способен сам запускать скрипты.
Данная статья помечена как не оконченная.
Вы можете прочитать эту статью на английском или помочь проекту её переводом.