8 Наброски параметров игрока
Ivor Barhansky edited this page 2022-08-16 00:33:14 +00:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Статы и зависящие величины

Стат Базовый Бонус 1 очко выше 10 Штраф 1 очко ниже 10
Сила 10 +5% профильного урона, +5 максимального веса (+1 слот рюкзака) -10% профильного урона
Ловкость 10 +5% профильного урона, +1 к точности и уклонению -10% профильного урона, -2 к точности и уклонению
Интуиция 10 +1% шанса крита, -4 секунды к таймеру ходов. Макс 40*4 = 20 сек между ходами вместо 3 минут по умолчанию. -2% шанса крита, +8 секунд к таймеру ходов
Выносливость 10 формула здоровья формула здоровья
Интеллект 10 +5% профильного урона -10% профильного урона
Мудрость 10 +1 слот для приёмов + формула маны формула маны

0 уровень → +3 стата. Левелапы → +2 стата. Потолок каждого стата — 40.

Топ по всем статам — 90 уровней. Можно ограничиваться 50.

Accuracy = Шанс Ударить
Evasion = Шанс Уворота
Разница параметров влияет на упешность удара.
Critical = Шанс двойного урона

Опционально:
Parry = Шанс автоудара при блокировке

Процент добавляется к базовому диапазону урона (мин-макс). Потом От диапазона отнимается броня врага ((мин-Б)-(макс-Б)), получившимся диапазоном ударяется противник.

Здоровье

30 + 15 * (level - 1) + 5 * ((level - 1) * (level - 2) / 2)

level math formula
1 30 initial
2 30+15 30+(15*1)+(5*0)
3 30+15+20 30+(15*2)+(5*1)
4 30+15+20+25 30+(15*3)+(5*3)
5 30+15+20+25+30 30+(15*4)+(5*6)
6 30+15+20+25+30+35 30+(15*5)+(5*10)
7 30+15+20+25+30+35+40 30+(15*6)+(5*15)
function health($level, $endurance = 10) {
    return round(($vit*3) + ($vit/2) * ($level - 1) + ($vit/5) * (($level - 1) * ($level - 2) / 2));
}

Используя функцию выше, получаем:

Уровень Здоровье при [Выносливость=10] Здоровье при [Выносливость=40]
1 30 120
2 35 140
3 42 168
4 51 204
5 62 248
6 75 300
7 90 360
8 107 428
9 126 504
10 147 588
11 170 680
12 195 780
13 222 888
14 251 1004
15 282 1128
16 315 1260
17 350 1400
18 387 1548
19 426 1704
20 467 1868
50 2627 10508

Другой вариант

function health_new($vit) {
    // 1 -45, 2 -40, 3 -35, 4 -30, 5 -25, 6 -20, 7 -15, 8 -10, 9 -5, 10 0.
    // 3 * $vit + (-50 + 5 * $vit)%
    $percentageChange =  -50 + 5 * $vit;
    $baseHealth = 3 * $vit;
    $bonus = ($baseHealth / 100) * $percentageChange;
    $final = $baseHealth + $bonus;
    return $final;
}
vit result
1_new 1.65(2)
2_new 3.6(4)
3_new 5.85(6)
4_new 8.4(8)
5_new 11.25(11)
6_new 14.4(14)
7_new 17.85(18)
8_new 21.6(22)
9_new 25.65(26)
10_new 30(30)
11_new 34.65(35)
12_new 39.6(40)
13_new 44.85(45)
14_new 50.4(50)
15_new 56.25(56)
16_new 62.4(62)
17_new 68.85(69)
18_new 75.6(76)
19_new 82.65(83)
20_new 90(90)
21_new 97.65(98)
22_new 105.6(106)
23_new 113.85(114)
24_new 122.4(122)
25_new 131.25(131)
26_new 140.4(140)
27_new 149.85(150)
28_new 159.6(160)
29_new 169.65(170)
30_new 180(180)
31_new 190.65(191)
32_new 201.6(202)
33_new 212.85(213)
34_new 224.4(224)
35_new 236.25(236)
36_new 248.4(248)
37_new 260.85(261)
38_new 273.6(274)
39_new 286.65(287)
40_new 300(300)

Профильный урон

  • Сила — наносит урон физическому щиту, потом здоровью. Можно бить только того, кто перед тобой.
  • Ловкость — наносит урон физическому щиту, потом здоровью. Можно бить любого по выбору.
  • Интеллект — наносит урон магическому щиту, потом здоровью. Можно бить любого по выбору.

Удар кулаком — базовый урон всегда равен 1-2.

Шанс Крита

Шанс нанести дополнительный урон. Каждое оружие имеет свой базовый шанс крита, который изменяется в зависимости от Интуиции персонажа и от одетых предметов. Критический урон повышает не сам урон, а высчитывает бонус к урону. Например: 180% критического урона меняет урон стандратного удара в 10 на новое значение 18.

Абстрактная формула расчёта критического урона: (Base Damage)*(1+Elemental Bonus%)*(1+Attribute Bonus%+Weapon Skill Bonus%+Misc Bonuses%)*(1 + Crit Bonus%).

Полоски здоровья

Здоровье

Основная полоска. Когда здоровье достигает 0, персонаж погибает в бою.

Мана (техническое название в коде упомниается как «Пыль»)

Мана тратится на применение заклинаний.
Мана тратится в случае магического урона по персонажу.
Пока у персонажа есть Мана, магические атаки не наносят физического урона. Это сделано, чтобы как-то сбалансировать заклинания, которые всегда бьют без промаха и которые невозможно заблокировать.

Защита от стихий

Любой стихийный урон уменьшается в зависимости от процента защит от стихий. Для каждого значения выше 100% стихийный урон будет лечить персонажа на соответствующее количество единиц. Например, если в персонажа прилетела молния, которая нанесла 500 урона электричеством, а у него защита от воздуха 150%, то персонаж получит лечение на 250 единиц.

Пока что рассматриваются стандартные стихии:

  • Огонь
  • Вода
  • Воздух
  • Земля

Отдельно присматриваюсь ещё к трём:

  • Яд — наносит повторяющийся несколько раз урон.
  • Космос — объединение всех стихий. Если процент защиты от космоса выше стихийной, идёт подмена значения. Например, есть персонаж с защитами Огонь 10%, Вода 25%, Земля 30%, Воздух 5% получает защиту Космос 20%. Конечный уровень защит будет: Огонь 10% 20%, Вода 25%, Земля 30%, Воздух 5% 20%. Космический урон наносит стихийное повреждение, ориентируясь на самую низкую защиту от стихийного урона. То есть при защитах Огонь 10%, Вода 25%, Земля 30%, Воздух 5% космический урон будет снижен на 5%.
  • Пустота — абсолютный стихийный урон, игнорирующий любую стихийную защиту.

Стоит рассмотреть вариант, когда Космос использует среднее арифметическое от стихий, а Пустота — абсолютное значение. Или не усложнять сверх меры и похоронить обе стихии.

Если оружие наносит урон нескольких типов Огненный меч Огонь\Режущий, то используется меньший параметр защиты. Если игрок больше защищён от огня, его порежет, если от порезов - обожжёт.

Уровень

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