В данной статье мы расскажем о создании табло с подсчетом фрагов. Такое табло Вы могли видеть на карте Ka_100x100. При каждом убийстве игрока счетчик увеличивается на единицу. Счетчик имеет 3 разряда: единицы, десятки, сотни, т.е. максимальное количество фрагов составляет 999, затем происходит обнуление.
Мы будем очень активно использовать следующие энтити-объекты:
Приготовьтесь к созданию 94 объектов и выставлению их свойств :) Ничего страшного нет, вся система построена как бы из повторяющихся звеньев. Каждое звено состоит из 3-4 объектов, свойства которых очень схожи.
Итак, давайте посмотрим, как будет выглядеть табло:
Нолики и другие цифры, которые будут появляться при каждом фраге, не просто картинки, это объекты func_button с нанесенными на них цифрами. Когда убьют какого-либо игрока, кнопка с цифрой «0» поднимется вверх, а сверху опустится кнопка с цифрой «1». При следующем фраге кнопка с цифрой «1» поднимется вверх, а сверху опустится кнопка с цифрой «2» и т.д.
Средняя цифра меняется только при каждом десятом фраге. Левая цифра (разряд сотен) меняется только при каждом сотом фраге.
Изначально кнопку с цифрой «0» необходимо разместить так, чтобы ее было видно на табло. Остальные кнопки с цифрами от 1 до 9 нужно разместить над кнопкой 0 так, чтоб они были скрыты в «конструкции табло». Всего необходимо создать 30 кнопок (по 10 на разряды единиц, десятков и сотен). Из этих 30 кнопок сразу будут видны только 3 это изначальные нули, остальные 27 будут скрыты в табло.
Кстати, мы рекомендуем конструкцию табло (т.е. все, что окружает кнопки) превратить в func_wall, чтобы при компиляции свет мог проникнуть через конструкцию (как известно, энтити-объекты пропускают свет) и осветил текстуры цифр (иначе текстуры получатся затемненными).
О подсчете фрагов
Теперь расскажем о том, как будут подсчитываться фраги.
У нас есть замечательный энтити-объект game_counter, который считает свои активации и по достижении определенного значения активирует другой объект.
Мы создадим 3 таких объекта:
Первый будет считать отдельные фраги (он будет переключать кнопки единиц)
Второй будет считать до 10 фрагов (он будет переключать кнопки десятков)
Третий будет считать до 100 фрагов (он будет переключать кнопки сотен)
Нам нужно, чтобы при каждом фраге все 3 счетчика увеличивали свое значение на 1. Для этого воспользуемся объектом multi_manager, в который запишем активацию всех 3-х счетчиков. Имя для multi_manager'а нужно выставить как game_playerkill. Это одно из пяти специальных имен, которое позволяет активировать объект при убийстве игрока. Таким образом, теперь при каждом фраге у нас будет автоматически активироваться multi_manager, который в свою очередь активирует 3 счетчика.
Multi_manager (этот объект активируется при каждом фраге)
Name: game_playerkill (имя должно быть именно таким!) 1counter 0 (активация счетчика единиц по имени 1counter через 0 секунд) 10counter 0 (активация счетчика десятков по имени 10counter через 0 секунд) 100counter 0 (активация счетчика сотен по имени 100counter через 0 секунд)
Счетчики game_counter с именами: 1counter, 10counter, 100counter активируют кнопки с цифрами. Например, кто-то набрал 1 фраг. Срабатывает multi_manager. Тут же все три счетчика увеличивают свое значение на 1. Самый первый счетчик ведет отсчет отдельных фрагов, а значит он должен при каждой активации переключать кнопки единиц.
Нам необходимо сделать так, чтобы активировав первую кнопку, в следующий раз счетчик активировал бы вторую кнопку, затем третью и т.д., то есть необходимо, чтобы параметр «Target» счетчика менялся по кругу от 0 до 9 кнопки. Это можно организовать при помощи объекта trigger_changetarget.
Ниже приведена схема работы одного из счетчиков.
Предположим, что кто-то набрал фраг. В этом случае возникает следующая цепочка действий:
Счетчик game_counter увеличивает свое значение на 1
Затем он активирует первый multi_manager (на схеме левая красная стрелка)
Multi_manager поднимает кнопку «0»
Multi_manager опускает кнопку «1» туда, где только что была кнопка «0»
Multi_manager запускает первый объект trigger_changetarget (на схеме CT1)
Trigger_changetarget перенаправляет счетчик с первого multi_manager'а на второй
Дальше действия развиваются по второй красной стрелке на схеме (все действия аналогичные).
Счетчик game_counter увеличивает свое значение на 1
Активирует второй multi_manager (вторая красная стрелка)
Multi_manager поднимает кнопку «1»
Multi_manager опускает кнопку «2» туда, где только что была кнопка «1»
Multi_manager запускает второй объект trigger_changetarget (на схеме CT2)
Trigger_changetarget перенаправляет счетчик со второго multi_manager'а на третий
Тоже самое происходит при смене кнопки «2» на кнопку «3» и т.д. до кнопки «9». Таким образом, для разряда единиц необходимо создать 10 подобных звеньев из multi_manager'а, двух кнопок и trigger_changetarget (всего: 30 объектов).
Для раздела десятков все тоже самое (нужно создать еще 30 объектов, считая кнопки десятков), единственная разница в свойствах счетчика он активирует кнопки через каждые 10 фрагов, а не через каждый фраг. Для сотен еще 30 объектов. А счетчик сотен активирует кнопки через каждые сто фрагов, т.е. довольно редко.
Рекомендуем размещать счетчики единиц, десятков и сотен рядом с соответствующими мульти_менеджерами и прочими объектами (чтобы не запутаться). Вы можете посмотреть, как это сделано на нашей тестовой карте.
Свойства объектов для счетчика единиц
Ниже мы приводим свойства самого первого звена объектов (на схеме к этому звену ведет левая красная стрелка).
Game_counter (счетчик единиц)
Name: 1counter (имя счетчика единиц) Target: m0 (сюда необходимо записать имя самого первого объекта multi_manager, см. схему выше) Initial Value: 0 (начальное значение счетчика 0) Limit Value: 1 (конечное значение, достигнув которого, счетчик начнет активировать кнопки; т.к. это счетчик единиц, то необходимо поставить значение 1)
Флаги:
Reset on fire: нужно отметить этот флаг, чтобы счетчик сбрасывался на 0 (обнулялся), когда достигаеся значение «Limit Value»
Multi_manager (этот объект опускает/поднимает кнопки, активирует другие объекты)
Name: btn0 (имя кнопки «0» из разряда единиц) Angle: Up (направление движения вверх) Speed: 200 (скорость движения) Lip: -8 (этот параметр управляет расстоянием, на которое перемещается кнопка; отрицательное значение увеличивает расстояние, положительное уменьшает) Delay before reset: 0 (время, после прошествия которого, кнопку можно вновь активировать)
Флаги:
Toggle: этот флаг оставляет кнопку в нажатом положении до следующей активации
Func_button (кнопка «1», разряд единиц)
Name: btn1 (имя кнопки «1» из разряда единиц) Angle: Down (направление движения вниз, т.к. изначально кнопка расположена выше табло) Speed: 200 (скорость движения) Lip: -8 (этот параметр управляет расстоянием, на которое перемещается кнопка; отрицательное значение увеличивает расстояние, положительное уменьшает) Delay before reset: 0 (время, после прошествия которого, кнопку можно вновь активировать)
Флаги:
Toggle: этот флаг оставляет кнопку в нажатом положении до следующей активации
Name: ct0 (имя данного объекта) Target: 1counter (здесь указывается имя счетчика единиц) New Target: m1 (означает, что в следующий раз счетчик будет активировать объект по имени m1, т.е. следующий мульти_менеджер из второго звена)
Это первое звено объектов, которые меняют цифру 0 на цифру 1. Как Вы понимаете, необходимо сделать еще 9 таких звеньев.
Свойства объектов для счетчика десятков
Ниже мы приводим свойства первого звена объектов для счетчика десятков.
Game_counter (счетчик десятков)
Name: 10counter (имя счетчика десятков) Target: m00 (сюда необходимо записать имя самого первого объекта multi_manager в звене десятков) Initial Value: 0 (начальное значение счетчика 0) Limit Value: 10 (конечное значение, достигнув которого, счетчик начнет активировать кнопки; т.к. это счетчик десятков, то необходимо поставить значение 10)
Флаги:
Reset on fire: нужно отметить этот флаг, чтобы счетчик сбрасывался на 0 (обнулялся), когда достигаеся значение «Limit Value»
Multi_manager (этот объект опускает/поднимает кнопки, активирует другие объекты)
Name: m00 (имя данного объекта) btn00 0 (поднимает кнопку «0» в разряде десятков) btn11 0 (опускает кнопку «1» в разряде десятков) ct00 0 (запускает объект trigger_changetarget)
Func_button (кнопка «0», разряд десятков)
Name: btn00 (имя кнопки «0» из разряда десятков) Angle: Up (направление движения вверх) Speed: 200 (скорость движения) Lip: -8 (этот параметр управляет расстоянием, на которое перемещается кнопка; отрицательное значение увеличивает расстояние, положительное уменьшает) Delay before reset: 0 (время, после прошествия которого, кнопку можно вновь активировать)
Флаги:
Toggle: этот флаг оставляет кнопку в нажатом положении до следующей активации
Func_button (кнопка «1», разряд десятков)
Name: btn11 (имя кнопки «1» из разряда десятков) Angle: Down (направление движения вниз, т.к. изначально кнопка расположена выше табло) Speed: 200 (скорость движения) Lip: -8 (этот параметр управляет расстоянием, на которое перемещается кнопка; отрицательное значение увеличивает расстояние, положительное уменьшает) Delay before reset: 0 (время, после прошествия которого, кнопку можно вновь активировать)
Флаги:
Toggle: этот флаг оставляет кнопку в нажатом положении до следующей активации
Name: ct00 (имя данного объекта) Target: 10counter (здесь указывается имя счетчика десятков) New Target: m11 (означает, что в следующий раз счетчик будет активировать объект по имени m11, т.е. следующий мульти_менеджер из второго звена)
Это первое звено объектов, которые меняют цифру 0 на цифру 1 в разряде десятков. Дальше необходимо создать еще 9 таких звеньев.
Свойства объектов для счетчика сотен
Ниже мы приводим свойства первого звена объектов для счетчика сотен.
Game_counter (счетчик сотен)
Name: 100counter (имя счетчика сотен) Target: m000 (сюда необходимо записать имя самого первого объекта multi_manager в звене сотен) Initial Value: 0 (начальное значение счетчика 0) Limit Value: 100 (конечное значение, достигнув которого, счетчик начнет активировать кнопки; т.к. это счетчик сотен, то необходимо поставить значение 100)
Флаги:
Reset on fire: нужно отметить этот флаг, чтобы счетчик сбрасывался на 0 (обнулялся), когда достигаеся значение «Limit Value»
Multi_manager (этот объект опускает/поднимает кнопки, активирует другие объекты)
Name: m000 (имя данного объекта) btn000 0 (поднимает кнопку «0» в разряде сотен) btn111 0 (опускает кнопку «1» в разряде сотен) ct000 0 (запускает объект trigger_changetarget)
Func_button (кнопка «0», разряд сотен)
Name: btn000 (имя кнопки «0» из разряда сотен) Angle: Up (направление движения вверх) Speed: 200 (скорость движения) Lip: -8 (этот параметр управляет расстоянием, на которое перемещается кнопка; отрицательное значение увеличивает расстояние, положительное уменьшает) Delay before reset: 0 (время, после прошествия которого, кнопку можно вновь активировать)
Флаги:
Toggle: этот флаг оставляет кнопку в нажатом положении до следующей активации
Func_button (кнопка «1», разряд сотен)
Name: btn111 (имя кнопки «1» из разряда сотен) Angle: Down (направление движения вниз, т.к. изначально кнопка расположена выше табло) Speed: 200 (скорость движения) Lip: -8 (этот параметр управляет расстоянием, на которое перемещается кнопка; отрицательное значение увеличивает расстояние, положительное уменьшает) Delay before reset: 0 (время, после прошествия которого, кнопку можно вновь активировать)
Флаги:
Toggle: этот флаг оставляет кнопку в нажатом положении до следующей активации
Name: ct000 (имя данного объекта) Target: 100counter (здесь указывается имя счетчика сотен) New Target: m111 (означает, что в следующий раз счетчик будет активировать объект по имени m111, т.е. следующий мульти_менеджер из второго звена)
Это первое звено объектов, которые меняют цифру 0 на цифру 1 в разряде сотен. Дальше необходимо создать еще 9 таких звеньев.
Вот и все нехитрое устройство счетчика фрагов :) Думается, немногие мапперы дочитают эту статью до конца, но поверьте, придумать такое, да еще и понятно описать оч-ч-чень трудно. В любом случае Вы можете скачать нашу карту-пример и скопировать счетчик на свою карту. Используйте на здоровье!
frag-o-matic.zip [93Кб] в архиве карта-пример в форматах BSP и RMF.