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%. - Пустота — абсолютный стихийный урон, игнорирующий любую стихийную защиту.
Стоит рассмотреть вариант, когда Космос использует среднее арифметическое от стихий, а Пустота — абсолютное значение. Или не усложнять сверх меры и похоронить обе стихии.
Если оружие наносит урон нескольких типов Огненный меч Огонь\Режущий, то используется меньший параметр защиты. Если игрок больше защищён от огня, его порежет, если от порезов - обожжёт.
Уровень
Если у игрока есть его опыт, и есть таблица уровней, имея эти два числа можно получить уровень, остаток опыта до повышения, проверки на соответствие параметров уровню и прочее. На малых нагрузках это можно постоянно считать. Но если надо держать это в памяти, это можно хранить в сессии и инициализировать при входе + менять лишь при повышении.