Table of Contents

Типичные скрипты

Примеры использования JavaScript в заданиях. Их необходимо вставлять в поле “Скрипт Задания” (в настройках конкретного уровня).

Скрыть Коды

$('#out_codes').hide();

Скрыть бонусы

$('#out_bonuses').hide();

Скрыть глобальные (сквозные) бонусы

$('#out_global_bonuses').hide();

Вместо оригинального текста результата ввода кодов показывать свои сообщения

$('#answer_result_right_out').text('Вроде верно');
$('#answer_result_repeat_out').text('Было уже');
$('#answer_result_wrong_out').text('Что-то не так');

На месте таймера автоперехода отображать время, проведенное на задании

show_time_on_task();

*Примечание: Работает только в том случае, если на уровне не настроен автопереход.*

Заменить слово 'Автопереход' на другое название

$('span#out_end_time').each(function(){$(this).html($(this).html().replace('Автопереход', 'Время до закрытия зоны'));});

Заменить слово 'Подсказка' на другое название

$('span.hint_name').each(function(){$(this).html($(this).html().replace('Подсказка', 'Возможное время до закрытия зоны'));});

Заменить текст на кнопке 'Купить подсказку'

$('div#out_hints').each(function(){$(this).html($(this).html().replaceAll('Взять подсказку', 'Купить задание'));});

Реализация "Олимпийки" (сетка плей-офф)

  1. В текст задания пропишите специальный маркер: [olymp] (он автоматически заменится на сетку-таблицу во время игры).
  2. В скрипт задания пропишите: olymp('8.2');
    • Вместо `'8.2'` можно использовать `'4.2'`, `'16.2'`, `'32.2'`, `'64.2'`, `'128.2'`, `'256.2'`, `'9.3'`, `'27.3'`, `'81.3'`, `'16.4'`, `'64.4'` (где первое число — количество начальных кодов олимпийки, а второе — количество объединяемых ячеек в последующих этапах).
    • Если вы хотите оставить отображение номеров в кодах, используйте: olymp_with_numbers('8.2');
  3. Чтобы отображать вместо правильно вбитого слова какое-то другое кастомное значение:
    • Создайте бонус с тем же кодом.
    • В поле “Текст после решения” бонуса в режиме исходного кода (Source) вставьте скрипт:
<script>olymp_value(n, 'html')</script>

Пример олимпийки | Пример олимпийки со стартовыми ячейками

Отображение набранных штурмовых баллов непосредственно в задании

Вставьте в текст задания:

Всего баллов: !bonus!

Кастомный обработчик ввода ответа

Вы можете перехватывать и изменять вводимый игроками ответ на клиенте перед его отправкой на сервер. Например, автоматически дописать префикс p_:

window.submitAnswerCallback = function(answer) {
  return 'p_' + answer;
}

*Если функция вернет пустую строку, отправка ответа на сервер будет заблокирована.*

Пример перехватчика в игре

Скрипты в бонусах и подсказках

Эти сценарии должны вставляться в поле текста решения бонусов/подсказок в режиме “Источник” (Source):

Автоматический ввод кода при открытии подсказки/бонуса

<script>enter('Код который надо вбить')</script>

Составные коды в бонусах/штрафных подсказках

Если код состоит из частей, разбросанных по разным подсказкам или бонусам:

<script>code_part(номер_составного_кода, 'частькода', число_составных_частей)</script>

<note important> Важно: Обязательно добавьте на уровень итоговый собранный код в качестве обычного кода, иначе у игроков страница будет постоянно обновляться в цикле, пытаясь отправить несуществующий код. </note>

Системные события: Вызов скрипта при обновлении задания

Если вам нужно автоматически запускать определенный JavaScript каждый раз, когда задание перезагружается (обновляется) на клиенте, пропишите в “Общий HTML заголовок игры”:

<script>
document.addEventListener("DOMContentLoaded", function() {
  function common_task_script() {
    console.log('уровень обновился');
  }    
  let old_task_script = task_script;
  task_script = function() {
    old_task_script();
    common_task_script();
  };
  common_task_script();
});
</script>

Автоматический редирект в штурмовых играх (Не показывать закрытые задания)

Чтобы при попадании на уже закрытое (пройденное) штурмовое задание игрока сразу перенаправляло на главную страницу игры с картой/списком уровней, пропишите в “Общий HTML заголовок игры”:

<script>
document.addEventListener("DOMContentLoaded", function() {
  if ($('.closed-level').length > 0) {
    window.location = 'game.php?gid=' + game_id;
  }
});
</script>