Турнир

Как работают формулы начисления очков лиги?

Каждая лига начисляет очки своим игрокам за каждый турнир, в котором они участвуют, используя систему начисления очков, которую вы выбираете при создании или изменении лиги:

  • Логарифмическая
  • Квадратный корень
  • Линейная
  • Фиксированная (вы вводите точное количество очков для каждого места)
  • Пользовательская (напишите свою собственную формулу)

Переменные пользовательской формулы

Пользовательская формула рассчитывается один раз для каждого игрока в конце турнира. Некоторые её переменные описывают турнир, поэтому они имеют одинаковое значение для всех в нём, а некоторые описывают игрока, для которого рассчитываются очки. Понимание того, что есть что, — это большая часть навыка написания формулы.

О турнире, одинаковые для каждого игрока:

pколичество игроков
nколичество входов (включая повторные входы)
bбай-ин
zпризовой фонд
mколичество призовых мест
tформат турнира (1 стандартный, 2 сплит, 3 шутаут, 4 mystery bounty)

Об игроке, для которого рассчитываются очки:

fфинишная позиция
cчто они потратили (бай-ин плюс их собственные ребаи и аддоны)
kнокауты, которые они сделали
rребаи, которые они взяли
aаддоны, которые они взяли
xпули, которые они использовали (их общее количество бай-инов)
wвыигрыш (сумма, которую они выиграли)
dраунды до финала в шутауте (1 — это финальный раунд)

Например, эта формула даёт каждому игроку очко за каждого соперника, которого они пережили, бонус в 2 очка за каждый нокаут и вычитает очко за каждый ребай:

(p - f + 1) + (2 * k) - r

Продвинутое: написание собственной формулы

Помимо арифметики, две части нотации выполняют большую часть работы в реальных формулах лиги: условия и таблицы очков. Вы также можете использовать sqrt, log, log10, exp, pow, round, floor, fix, abs, min и max, а также ^ для степеней.

Условия с ? :

Условие читается как проверка ? значение, если истина : значение в противном случае.

f == 1 ? 50 : 10

Это награждает победителя 50 очками, а всех остальных 10. Обратите внимание на двойное == для «равно». У вас также есть <, <=, >, >= и !=, и вы можете объединять проверки с помощью and и or:

p >= 20 and f <= 3 ? 10 : 0

Условия могут быть цепочкой, так клубы пишут разные правила для каждой позиции. Каждое : передаёт управление следующей проверке:

f == 1 ? 30 : f == 2 ? 20 : f == 3 ? 15 : 5

Таблицы очков с [ ... ][f]

Вместо цепочки условий вы можете перечислить очки по порядку и выбрать то, которое соответствует финишу игрока:

[100, 85, 70][f]

Список читается по позиции: первое место получает 100, второе 85, третье 70. Позиции начинаются с 1, поэтому f совпадает со списком без какой-либо корректировки.

Всегда защищайте таблицу очков условием. Если игрок финиширует ниже конца списка, формула не работает, и этот игрок не получает вообще никаких очков. Список из трёх элементов требует f < 4:

f < 4 ? [100, 85, 70][f] : 0

Используйте значение : для установки минимума для всех остальных, например : 5, чтобы дать пять очков за появление.

Следите за скобками

Умножение и сложение применяются перед сравнением, что незаметно меняет то, что проверяет формула. Написано без скобок:

30 * k + f < p / 3 + 1 ? 100 : 1

проверка становится «является ли 30 * k + f меньше, чем p / 3 + 1», а не «находится ли f в верхней трети». Лига может провести целый сезон по неправильному правилу таким образом. Оберните условие или всё условное выражение в скобки:

30 * k + (f < p / 3 + 1 ? 100 : 1)

Формулы, которые реально используют клубы

Это реальные шаблоны из лиг, работающих на Blind Valet, упрощённые только там, где список мест клуба был очень длинным.

Что хотел клубФормула
Очко за появление, ничего больше1
Рейтинг только победf == 1 ? 1 : 0
Нокауты плюс очко за победуk + (f == 1 ? 1 : 0)
Одно очко за каждого пережитого соперника с бонусом на подиумp - f + 1 + (f < 4 ? [4, 2, 1][f] : 0)
Фиксированная таблица, но все остальные всё равно получают очкиf < 10 ? [1500, 1200, 900, 700, 600, 500, 400, 300, 200][f] : 100
Более высокие ставки стоят больше, каждый ребай стоит очковlog(p + 1) / f * 10 + b - c / 4
Очки, масштабированные по размеру призового фондаsqrt(p + 1) / f * z / 500
Только верхняя треть получает очки, масштабированные по размеру поля30 * k + (f < p / 3 + 1 ? sqrt(p / 10) * [120, 90, 70, 60, 50, 45, 40, 30, 25, 20][f] : 1)
Каждое место — процент от базы, которая растёт вместе с полемf == 1 ? round(600 + p * 10) : f == 2 ? round((600 + p * 10) * 0.82) : round((600 + p * 10) * 0.74)

Пример со ставками показывает, почему две группы имеют значение. Он использует b и c, которые выглядят похоже, но находятся на противоположных сторонах: добавление b повышает каждый счёт в турнире с более высоким бай-ином, потому что бай-ин принадлежит турниру, тогда как вычитание c забирает часть того, что каждый игрок потратил индивидуально. Игрок, который взял ребай дважды, финиширует с меньшим количеством очков, чем игрок, который занял то же место на одной пуле.

Проверка вашей формулы

Настройки лиги предварительно показывают очки для каждой финишной позиции по мере того, как вы печатаете, поэтому вы можете увидеть форму выплат до сохранения. Если предварительный просмотр пуст, формула ещё не действительна: проверьте отсутствующую скобку или таблицу очков, за конец которой может выйти низкий финиш.