Добрый день.
Наверно, вам приходилось периодически сталкиваться с нарушениями от випов/админов в ваш адрес, а если вы являетесь випом/админом и достаточно везучие, то даже подстав в виде вырезания фрагмента длиной в одну минуту, выгодному подставляющей стороне. Именно в такой момент времени хочется записать демо, да только демка не записывалась, а момент упущен.
Постановка задачи (чего в итоге нужно добиться):
1) Запись демок должна осуществляться нажатием одной и той же кнопки, при этом старые демки не должны перезаписываться.
2) Использование сторонних программ при записи демо запрещено - только стим-кс и ее возможности.
Для начала попробуем понять, какие возможности нам предоставляет стим-кс. Очевидно (по крайней мере мне :) ), что для реализации подобного механизма стим-кс должна обладать хотя бы одной из следующих возможностей:
1) Возможность присваивать значения переменным и использовать их в будущем - к сожалению единственной найденной мной возможностью что-либо присвоить в стим-кс оказалась команда setinfo, однако нет действующего способа внутри консоли стим-кс прочитать значение переменной и тем более использовать данное значение в качестве аргумента консольной команды
2) Возможность прочитать текущую системную дату и время и использовать в качестве аргумента команды - тут нас тоже ждет облом, т.к. такой возможности также нет
We need to go deeper.
На этом печальном моменте меня посетила мысль - а что, если забиндить такую команду на кнопку, в тексте которой при при выполнении на данную кнопку будет биндится другая команда?
Очевидно, что если мы будем составлять такую бинд-команду, то даже для двух последовательно-записываемых демок она будет достаточно длинная, в виде:
bind KP_END "stop; record num1.dem; bind KP_END "stop; record num2.dem;";"
В такой команде сразу бросаются кавычки в кавычках, и внутренний голос подсказывает "такая бинд-команда в кс не применится".
Однако, следует вспомнить, что в кс существует команда exec <имя .cfg файла> - данная команда выполняет в реальном времени в кс команды, прописанные в указанном файле.
Прототип решения.
Можно попробовать создать бинд-команду, которая будет содержать в себе команду exec конфига, в котором будет бинд другой команды. Ну так попробуем :)
Создадим файл num1.cfg со следующим содержимым:
bind "KP_END" "stop; record num1.dem; exec num2.cfg;"
После выполнения команды exec num1.cfg можно будет использовать данный бинд.
По нажатию кнопки 1 на num-lock панели будут выполнены следующие команды:
stop - останавливает запись демо, если в данный момент демо записывается.
record num1.dem - начинает запись демо в файл num1.dem.
exec num2.cfg - выполняет команды, находящиеся в файле num2.cfg. СТОП - нужно еще создать этот файл num2.cfg :). Его содержимое из одной строки будет таким:
bind "KP_END" "stop; record num2.dem; exec num3.cfg;"
т.е при нажатии кнопки 1 на num-lock также будет выполнен пере-бинд кнопки 1 на num-lock, чтобы она теперь выполняла такие команды:
stop - останавливает запись демо, если в данный момент демо записывается.
record num2.dem - начинает запись демо в файл num2.dem.
exec num3.cfg - выполняет команды, находящиеся в файле num3.cfg. Файл num3.cfg также нужно будет создать по аналогии - запись в num3.dem и выполнение num4.cfg, и т.д.
Таким образом, насоздавав предварительно .cfg файлов num*.cfg, можно обеспечить себя тем самым "интерфейсом одной кнопки для записи демо", как я и хотел в постановке задачи. Осталось только насоздавать .cfg файлов. Но прежде - улучшение команды.
Для того, чтобы в демо в удобном виде записалось время съемки этого демо, можно прописать команду thetime в чате кс. Это тоже можно автоматизировать :)
Таким образом содержимое файла num1.cfg станет следующим:
bind "KP_END" "stop; record num1.dem; say thetime; exec num2.cfg;"
Генерация файлов.
Создавать сотни таких cfg файлов вручную явно не очень удачная затея. Поэтому для автоматического создания необходимых файлов напишем generator.bat файл:
@echo off
@setlocal enabledelayedexpansion
@for /l %%x in (1, 1, 500) do (
@set /a "y=%%x+1"
@echo bind "KP_END" "stop; record num%%x.dem; say thetime; exec num!y!.cfg;">num%%x.cfg
)
pause
Данный .bat файл при выполнении сгенерирует 500 .cfg файлов по требуемому шаблону. Будет осуществляться бинд кнопки KP_END - кнопки 1 на num-lock панели. При необходимости число генерируемых файлов и саму кнопку можно поменять для вашего удобства.
Осталось только зайти в кс и набрать exec num1.cfg для начала эксплуатации "демо-машины".
Решение:
Для удобства записи демо я сгенерировал .cfg файлы, которые помогут автоматизировать процесс записи демо. Почему так и как что-то (например, кнопку для бинда) исправить под себя - читайте в спойлере выше.
Что будет работать:
появится возможность по нажатию кнопки 1 на num-lock панели автоматически начинать запись демо, при этом с каждым новым нажатием кнопки будет создаваться новый файл с демо, а не затираться существующий.
Как это использовать:
нажимайте кнопку 1 на на num-lock панели каждый раз, когда начинаете играть, а также после каждой смены карты. При выходе из игры запись демо заканчивается автоматически.
Как все настроить:
1) загружаете архив с https://drive.google...jUXr33M5IUfIBzi
2) распаковываете все содержимое архива целиком в папку cstrike вашей кс
3) запускаете кс и вводите в консоли:
exec num1.cfg
Готово!
В последствии в процессе использования вы увидите ваши демки в папке cstrike:
Поскольку кс сохраняет текущее состояние bind команд при корректном завершении (выход через меню), то в случае если ваша кс вылетит, вы можете потерять те демки, которые записывали в последний раз. Однако у меня стим-кс не вылетает и мне норм :)