вторник, 14 июля 2015 г.

Time management (XP, VXACE)

Введение

Написал небольшой, но, потенциально полезный скриптик для управления временем в игре. 
Скрипт умеет считывать с одного или нескольких файлов формата csv (строки из слов, разделенных точкой с запятой - трансформируется из Excel через Save as csv; а эксель, или calc - просто для удобства редактирования) набор данных по управлению переменными, свитчами и селфсвитчами в реальном времени (точность до секунды) и сходу применять их в игре, в том же реальном времени от начала игры/запуска файла. 

Кроме этого, он поддерживает циклический запуск этого набора в заданном в нем же промежутке времени.

Вроде пока всё. Если ничего непонятно, поясню словами и демкой:


Что я хочу сделать

  • Я хочу сделать демку, которая изображает два дня в лесу, а также рост овощей на небольшой лесной грядке героя. 
  • Я хочу удобно управлять временами дня (хотя бы через screen color tone), погодой и событиями в течение этого времени.
  • Я хочу отдельно от времен дня вырастить за 2 дня (4 минуты) небольшую грядку овощей.
  • Я хочу думать в реальном времени, а не в фреймах, например, пусть мои сутки длятся 2 минуты.

Что я делаю

  • Я составляю 2 файлика (в экселе, так мне удобно) - тут приведу отконверченный в csv вариант обработки переменных, свитчей и селфсвитчей, предварительно настроенных в проекте для времен дня и погоды. Файлик для огорода в демке. (если видите пусто между двумя ";", то там ячейка попросту пуста)
  • Я добавляю скрипт, что внизу под спойлером, чуть выше Main.
  • Я добавляю в авторане первой (и единственной) карты вызов
$time_owner.add_manager(1)
$time_owner.add_manager(2)
$time_owner.reload(1, "test") - тут файл погоды и времени дня
$time_owner.reload(2, "farm") - тут обработка роста овощей
$time_owner.start_all - для простоты - запускаю всё, можно запускать и по отдельности, командой $time_owner.start(1)
  • Я запускаю демо и радуюсь :p

Теперь разберем файлик, вот он:
Name;forest;;;;;;
Cycling;yes;;;;;;
Time;0:00:00;0:04:00;;;;;
Commands;;;;;;;
Время;Тип;Id;Значение;Map_id;Event_id;Letter;Comment
0:00:00;Variable;1;1;;;;morning
0:00:30;Variable;1;2;;;;day
0:01:00;Variable;1;3;;;;evening
0:01:30;Variable;1;4;;;;night
0:02:00;Variable;1;1;;;;morning
0:02:30;Variable;1;2;;;;day
0:03:00;Variable;1;3;;;;evening
0:03:30;Variable;1;4;;;;night
0:00:02;variable;2;1;;;;music day
0:01:10;variable;2;2;;;;music night
0:02:02;variable;2;1;;;;music day
0:03:10;variable;2;2;;;;music night
0:02:40;Variable;3;1;;;;rain
0:03:25;Variable;3;2;;;;no rain
0:01:00;Variable;4;1;;;;fog
0:01:35;Variable;4;2;;;;no fog
0:02:10;Variable;4;1;;;;fog
0:03:20;Variable;4;2;;;;no fog
0:01:40;Switch;1;True;;;;crow
0:02:10;Switch;1;FALSE;;;;no crow
0:00:05;SelfSwitch;;True;1;3;A;squirrel
0:01:10;SelfSwitch;;FALSE;1;3;A;squirrel
0:03:35;SelfSwitch;;True;1;3;A;squirrel
0:03:58;SelfSwitch;;FALSE;1;3;A;squirrel

Первая строка в нем - заголовок. Он ни к чему не обязывает, и просто служит мне для удобства.
Вторая строка показывает, запускаю ли я обработку файла циклически (yes/no).
Третья строка задает время начала запуска и окончания запуска (очень полезно для циклических запусков).
Четвертая и пятая - просто для удобства в экселе.
А далее начинаются команды (значения нечувствительны к регистру)

Время; - время срабатывания в формате hh:mm:ss
Тип; - тип (Variable, Switch, SelfSwitch)
Id; - номер переменной или свитча, для SelfSwitch бесполезно
Значение; - значение переменной/свитча. Для variable это - число; для остальных вариантов - True или False 
Map_id; - номер карты, актуален для селфсвитча
Event_id; - номер события, актуален для селфсвитча
Letter; - буква-селфсвитч (A,B,C,D), актуален для селфсвитча
Comment - комментарий (для удобства)

Файлы и демо

Код

Демо

Комментариев нет:

Отправить комментарий