Решил создать программу, которая будет рассчитывать для выбранного героя единственный наиболее эффективный закуп (из всех возможных), для конкретной задачи максимизации физического или магического урона, или же стойкости/выживаемости, или смешанным целям, которые соответствуют данному моменту времени в игре, по выбираемым условиям (прокачанные скиллы, уровень героя и количество доступного золота (по показателю золота в минуту для данного момента игры) + включение лесных предметов, ограничение повторения закупа и т.д.)
Но для начала, нужно собрать все возможные формулы, которые потребуются для этого амбициозного и сложного проекта.
Ниже - краткий и ёмкий справочник, который я собрал для себя из различных источников. Поправьте меня, если действующие на данный момент правила в Доте, не соответствуют им. Если вы нашли ошибку - просьба указать на нее. Если я что-то упустил, тоже буду рад указанию.
Использование единиц в сущностях:
Сила, Ловкость, Интеллект = в единицах
ХП (очки здоровья) и Мана = в единицах
ХП реген и Мана реген = в единицах
Эффективное ХП Маг (относительно Сопротивления магии) = в единицах
Эффективное ХП Физ (относительно Брони) = в единицах
Броня = в единицах
Броня[%] = в процентах
Скорость атаки (нижняя граница 20, верхняя 700) = в единицах
Базовая СА (Базовая скорость атаки) = в единицах
Бонус СА (Бонус скорости атаки) = в единицах
Время Атаки (Сколько требутся секунд на совершение одной атаки) = в секундах
Базовое ВА (Базовое время атаки) = в секундах
Скорость бега (нижняя граница 100, верхняя 550) = в единицах
Базовая СБ (Базовая скорость бега героя) = в единицах
Бонус СБ (Бонус к скорости бега) = в единицах
Бонус СБ[%] (Бонус к скорости бега) = в процентах
Физ.Урон (Физический урон, может зависеть от основного атрибута героя) = в единицах
Множитель ФУ (Множитель ослабления входящего физического урона) = в единицах
ДПС (DPS - урон в секунду) = в единицах
Множитель ДПС Физ (Множитель усиления исходящего физического урона) = в единицах
Крит Шанс (Вероятность выпадения критического урона на атаку) = в единицах
Крит Шанс[%] = в процентах
Множитель Крита (Показывает, во сколько раз увеличится физический урон от атаки) = в единицах
Множитель Крита[%] = в процентах
Шанс Ударить (Вероятность нанести урон сквозь уклонение) = в единицах
Уклонение (Вероятность избежать урона, полностью) = в единицах
Сопр.Эфф (Сопротивление эффектам контроля и дебаффа) = в единицах
Сопр.Эфф[%] = в процентах
Время Дебаффа (Расчетное время действия наложенного негативного эффекта) = в секундах
Таймер Эффекта (Полное время действия негативного эффекта) = в секундах
Мощь умений[%] (Множитель усиления исходящего магического урона, от способностей) = в процентах
Сопротивление магии[%] = в процентах
Базовое СМ[%] (Базовое сопротивление магии героя) = 25% (кроме Мипо и Визажа)
Множитель СМ (Множитель сопротивления магии - сколько магического урона блокируется) = в единицах
Бонус СМ[%] (Бонус сопротивления магии) = в процентах
Снижение СМ[%] (тоже, что и Бонус СМ(%), но уже вложен другой знак) = в процентах
Множитель МУ (Множитель ослабления входящего магического урона) = в единицах
Скорость разворота[180°] (Время для поворота в противоположном направлении) = в секундах
Скорость поворота = 1, это поворот на один радиан (57,296°) за 30 миллисекунд, что соответствует (100/3) / (2*3,14159) ~ 5,3 оборота вокруг своей оси (на 360°) за 1 секунду.
Базовая СП (Базовая скороть поворота героя, является множителем единичной Скорости поворота) = в единицах
Замедл.Поворота[%] (Замедление поворота героя) = в процентах
Перед всеми единицами и процентами используются только знаки (плюс/минус), а перед множителями (умножение/деление). Проценты становятся множителем, после нормализации (приведения к единице).
Формулы конвертации:
- Сила/Ловкость/Интеллект в Физ.Урон = х*1 (зависит от основного атрибута героя)
- Сила в ХП = S*20
- Сила в ХП реген = S*0.1
- Сила в Сопротивление магии(%) = S*0.08
- Ловкость в Броню = L*0.16
- Ловкость в Бонус СА = L*1
- Ловкость в Скорость бега = L*0.05
- Интеллект в Ману = I*12
- Интеллект в Мана реген = I*0.05
- Интеллект в Мощь умений[%] = I*0.07
Формулы перевода показателей:
- Множитель СМ = 1 - Множитель МУ
- из Броня в Броня[%] (из единиц в проценты) = 1300*Броня / (12*|Броня|+225)
- Множитель СМ = Сопротивление магии[%] / 100
- из Крит Шанс[%] в Крит Шанс = Крит Шанс[%] / 100
- из Множитель Крита[%] вМножитель Крита = Множитель Крита[%] / 100
- Шанс Ударить = 1 - Уклонение
- из Сопр.Эфф[%] в Сопр.Эфф = Сопр.Эфф[%] / 100
- Скорость атаки [в атаках в секунду] = 1 / Время Атаки //Используется только для наглядности
|| - модуль числа, делает его положительным, если оно отрицательное.
Формулы расчета показателей:
- Множитель МУ = (1 - Базовое СМ[%] / 100)*(1 - Сила / 1250)*(1 - Бонус СМ[%] / 100)*(1 - Снижение СМ[%] / 100)*...
- Множитель ФУ = (12*|Броня| - 13*Броня + 225) / (12*|Броня|+225)
- Эффективное ХП Маг = ХП / Множитель МУ
- Эффективное ХП Физ = ХП / Множитель ФУ
- Эффективное ХП Физ = ХП / Множитель ДПС Физ
- Множитель ДПС Физ = Крит Шанс * Множитель Крита - Крит Шанс +1
- Крит Шанс = 1 - (1 - Крит Шанс №1)*(1 - Крит Шанс №2)*...
- Уклонение = 1 - (1 - Уклонение №1)*(1 - Уклонение №2)*...
- Сопр.Эфф = 1 - (1 ± Сопр.Эфф №1)*(1 ± Сопр.Эфф №2)*... //Если источник снижает Сопр.Эфф, то ставится "+" в скобке источника
- Время Дебаффа = Таймер Эффекта * (1 - Сопр.Эфф) //Не уменьшает суммарный урон (если наносится), только длительность действия
- Время Атаки = 100*Базовое ВА / (Базовая СА ± Бонус СА №1 ± Бонус СА №2 ±...) //Если источник бонуса снижает скорость атаки, то перед ним ставится минус
- Скорость бега = (Базовая СБ ± Бонус СБ)*(1 ± Бонус СБ[%] / 100) //Если источник бонуса снижает скорость бега, то перед ним ставится минус. Множество источников процентного бонуса скорости бега не сочетаются, поэтому, если их несколько, то используется наибольший процент из них, при этом целочисленные (НЕ процентные) бонусы могут сочетаться, если иное не оговорено в описании источника бонуса.
- Скорость разворота[180°] = 3*3.14159 / (100*Базовая СП*(1 - Замедл.Поворота[%] №1 / 100)*(1 - Замедл.Поворота[%] №2 / 100)*...) //Если вместо замедления поворота присутствует источник усиления поворота, то вместо минуса "-" в скобках источника ставится плюс "+"