Энциклопедия lava-online.ru вики
Advertisement

Игромеханика[]

Атрибуты Править[]

  1. Стартовое значение атрибутов задается в GSDL (экземпляр Player_Trait).
  2. Атрибуты могут увеличиваться предметами, размещенными в слотах экипировки персонажа.
  3. Атрибуты увеличиваются с ростом соответствующей специализации.
  4. Если специализация сброшена - соответствующий атрибут понижается на соответствующую величину.
  5. Повышение специализации на 1 автоматически увеличивает атрибут на 1.
  6. Текущие специализации:

Номер

Увеличивающийся от использования специализации атрибут

Родительский навык

Специализация

1

Сила

Ближний бой

Рукопашный бой

2

Ловкость

Ближний бой

Режущее оружие

3

Восприятие

Стрельба

Пистолеты

4

Сила

Стрельба

Дробовики

5

Ловкость

Стрельба

Автоматы

6

Восприятие

Стрельба

Винтовки

7

Сила

Стрельба

Ручные пулеметы

8

Ловкость

Стрельба

Пистолет-пулемет

9

Ловкость

Медицина

Первая помощь

10

Интеллект

Медицина

Хирургия

Прокачка телосложения[]

  • Прокачка данного атрибута отличается от прокачки всех остальных, т.к. на телосложение не завязаны специализации. Поэтому алгоритмически телосложение прокачивается следующим образом:
  • Определяется максимально прокачанный навык:
    1. Текущая величина атрибута Телосложение = МЕНЬШЕЕ_ЦЕЛОЕ_ОТ(5 + 0.75 * Текущее значение максимально прокачанного навыка)
    2. После изменения величины атрибута Телосложение выполняется пересчет очков жизни и очков выносливости.

Свойства навыка[]

  1. Текущее значение навыка (целое число от 0 до 20, стартовое значение = 0 (определяется в GSDL, в PlayerTtaits)
  2. Текущее количество очков опыта (unsigned int32, стартовое значение = 0)
    1. При повышении значения навыка, текущее кол-во очков опыта = (максимальное кол-во очков опыта - текущее кол-во очков опыта).
  3. Максимальное количество очков опыта до повышения уровня (unsigned int32, стартовое значение = 100). При превышении данной величины навык повышается, а максимальное количество обновляется по формуле:
  •  Максимальное количество очков опыта (МКОО) = МКОО * 2 

Т.е. прогрессия следующая:

Текущий уровень навыка

Сколько нужно набить, чтобы перейти на следующий уровень навыка

0

100

1

200

2

400

3

800

4

1600

5

3200

6

6400

7

12800

8

25600

9

51200

10

102400

11

204800

12

409600

13

819200

14

1638400

15

3276800

16

6553600

17

13107200

18

26214400

19

52428800

20

104857600

Навык "Ближний бой"[]

Основной механизм расчета удара[]

Последовательность расчета удара после атаки следующая:

  1. Определяется попадание в персонажа против уклонения персонажа.
  2. Определяется вероятность нанесения критического удара против избежания крита.
  3. Определяется количество нанесенного вреда в здоровье (часть нейтрализуется броней и превращается в удар по выносливости) с учетом крита.
  4. Если игроки находятся не в соседних гексах - никаких проверок нет и сразу считается, что удар не нанесен.
  5. Стоимость в ОД удара в кулачном бою = 5.
  6. Стоимость во временных характеристиках удара в кулачном бою = 10.
  7. Расчет попадания в режиме кулачного боя описан здесь следующим образом: если каждый следующий пункт выполняется только в том случае, если успешен предыдущий.
  8. Определяем попадание во врага с учетом его уклонения. Рассчет попадания во врага состоит из следующих этапов:
  1. Определение вероятности нанесения успешного удара нашим персонажем.
   Вероятность нанесения успешного удара = 49 + (Навык "Ближний бой" * 1.25) + (Специализация "Рукопашный бой" * 5) + Бонусы персонажа.
 
  2. Снижение вероятности за счет уклонения врага (в формуле, разумеется параметры врага).
   Вероятность уклонения = Атрибут "Ловкость" + Атрибут "Восприятие" + Навык "Ближний бой" + Специализация "Рукопашный бой" * 3 + Бонусы врага.
 
  3. Непосредственно определение попадания.
   Мы попали, если случайное число от 1 до 100 меньше или равно (Вероятность нанесения успешного удара - Вероятность уклонения).
  1. В случае, если мы попали - пытаемся определить - нанесли ли мы критические повреждения. Это определяется следующим образом:
  1. Определяем вероятность нанесения критических повреждений.
   Вероятность крита = Атрибут "Ловкость" + Навык "Ближний бой" * 2.5 + Специализация "Рукопашный бой" * 6 + Бонусы персонажа.
 
  2. Определяем вероятность избегания критических повреждений
   Вероятность избегания крита = (Атрибут "Ловкость" + Атрибут "Восприятие") / 2 + Навык "Ближний бой" / 4 + Специализация "Рукопашный бой" + Бонусы врага.
 
  3. Определение нанесения критического удара.
   Мы нанесли критический удар, если случайное число от 1 до 100 меньше или равно (Вероятность крита - Вероятность избегания крита).
  1. Определяем нанесенный вред.
  1. Определяем абсолютный вред.
      1. Абсолютный вред для рукопашного боя = Случайное число от (Атрибут "Сила" / 2) до (Атрибут "Сила" * 1.5).
      1. Абсолютный вред для холодного оружия = Случайное число от минимального и максимального вреда данного конкретного оружия + Атрибут "Сила" + бонусы.
 
  1. Если повреждения не критические - весь вред уходит в выносливость, а остаток (если выносливости не хватило) - в здоровье.
   Вред по выносливости = (Текущая Выносливость < Абсолютный вред ) ? Абсолютный вред - Текущая Выносливость : Абсолютный вред.
 
  1. Определяем сколько остатков вреда ушло в здоровье.
   Остаточный вред = Абсолютный вред - Вред по выносливости.
   Вред в здоровье = (Остаточный вред > 0) ? Остаточный вред : 0.
 
  1. Отнимаем вред по здоровью от здоровья игрока. Если текущее здоровье меньше, чем отнимаемое - персонаж помер (упокой Господь его душу).

Навык "Стрельба"[]

Ролевая модель в стрельбе участвует в двух этапах:

  1. Определение угла отклонения для оружия, перед вылетом пули "из ствола".
  2. Рассчет критического попадания.
  3. Рассчет нанесенного вреда.
  4. Выделения опыта.

Расчет углового отклонения[]

При расчете углового отклонения ролевая система пользуется следующими понятиями:

  1. "Разброс" оружия. Зависят от конкретного оружия. Так например для снайперки этот размер может быть меньше чем у автомата. Таким образом мы реализуем разброс в зависимости от конкретного оружия. Наиточнейшее оружие имеет разброс равный площади цели. Это означает, что на оптимальной дистанции совершенное оружие стреляет ровно в диапазоне размера цели.
  2. Модификатор разброса. Зависит от навыков и специализаций персонажа. Различен для каждого из видов оружия. Рассчитывается следующим образом:
   Модификатор разброса (МР) = (1 + (0.7 - 0.65/20 * Навык "Стрельба") + (0.8 - 0.75/5 * Соответствующая оружию специализация)) * GSDL::FireArm::TargetSize * GSDL::Ammo::Precision_Mod

Далее используются следующие сокращения:

  1. Начало оптимального расстояния (НОР)
  2. Максимальное оптимальное расстояние (МОР)
  3. Максимальная дальность оружия (МДО)

Конец оптимального расстояния (КОР) зависит только от параметра оружия.

Случайным образом определяем направление на данном диапазоне и пускаем симуляцию полета пули.

  • Для расчета попадания необходимо определить размеры цели. Предполагается, что в данный момент размер цели = 0.3 метра. Требуется вынос данной характеристики в конфигурационный файл.

Основной механизм расчета вреда[]

Последовательность расчета вреда после успешного повреждения следующая:

  1. Определяется вероятность нанесения критического удара против избежания крита.
  2. Определяется количество нанесенного вреда в здоровье (часть нейтрализуется броней и превращается в удар по выносливости) с учетом крита.

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

Определение критического попадания[]

Критические попадания возможны только на оптимальной дистанции! Для разных типов оружия вероятность критического попадания определяется по-разному:


Оружие

Атрибут 1

Атрибут 2

Пистолет

Ловкость * 3

Восприятие

Пистолет-пулеметы

Ловкость * 2

Восприятие * 2

Дробовик

Сила * 2

Восприятие * 2

Автомат

Ловкость * 2

Восприятие * 2

Винтовка

Ловкость * 2

Восприятие * 2

Ручной пулемет

Сила * 3

Восприятие * 1

  1. Определяем вероятность нанесения критических повреждений
   Вероятность крита = (Атрибут 1 + Атрибут 2) / 4 + Навык "Стрельба"/4 + Специализация * 2
 
  2. Определяем вероятность избегания критических повреждений
   Вероятность избегания крита = (Атрибут "Ловкость" + Атрибут "Восприятие") / 2 + Навык "Стрельба" / 8 + Специализация
 
  3. Определение нанесения критического удара
   Мы нанесли критический удар, если случайное число от 1 до 100 меньше или равно (Вероятность крита - Вероятность избегания крита).

Определяется количество нанесенного вреда в здоровье[]

  1. Определяем абсолютный вред.
 Если вред наносится не на оптимальной дистанции:
   Абсолютный вред = Случайное число от минимального и максимального вреда данного конкретного оружия
 Если вред наносится на оптимальной дистанции:
   MIN_DAMAGE = (Максимальный вред оружия в руках у игрока - Минимальный вред оружия) / 2 + Минимальный вред оружия
   Абсолютный вред = Случайное число от MIN_DAMAGE до максимального вреда конкретного оружия
 
  1. Если повреждения не критические - определяем, сколько абсолютного вреда было преобразовано при помощи брони врага в удар по выносливости. Если повреждения критические, то весь вред уходит в здоровье, выносливость не теряется и армор не учитывается.
   Компенсация броней = (Класс брони > GSDL::Ammo::Armor_LochProbe) ? Класс брони - GSDL::Ammo::Armor_LochProbe : 0
   Вред по выносливости = (Абсолютный вред > Компенсация броней) ? Компенсация броней : Абсолютный вред
 
  1. Определяем сколько остатков вреда ушло в здоровье.
   Остаточный вред = Абсолютный вред - Вред по выносливости
   Вред в здоровье = (Остаточный вред > 0) ? Остаточный вред : 0
  • Если текущих очков выносливости у игрока меньше чем нанесенный вред, то все что есть нейтрализует сначала остатки выносливости, а остатки идут во вред здоровью.

Начисление опыта по мобу[]

  1. Начисление опыта в навык или специализацию выполняется сразу после успешного выполнения действия
  2. Опыт начисляется только если вред был нанесен по мобу
    1. Начисление опыта за нанесение вреда выполняется следующим образом:
      1. Определяем разницу между уровнем моба и игрока
      2. Нормализуем разницу от -4 до 4, если она выходит за эти рамки и прибавляем 4. Таким образом получаем множитель опыта.
      3. Умножаем множитель опыта на нанесенный вред и получаем начисляемый опыт пропорционально пулу моба
      4. Округляем начисляемый опыт в меньшую сторону
      5. Половину начисляемого опыта отправляем в навык и специализацию
      6. Если навык или специализация повышаются, то остаток опыта переходит в следующий ранг
    2. Опыт за отлечивание начисляется следующим образом:
    3. Вычисляем модификатор опыта (МО) = (Макс. кол-во жизни у пациента / Максимальное кол-во очков действий, излечиваемых предметом)
    4. Нормализуем модификатор опыта (МО) = Если МО больше двух - снижаем до двух
    5. Начисляемый опыт равен = Количество по факту излеченных очков действия * Модификатор опыта (пропорционально пулу моба)
    6. Округляем начисляемый опыт в меньшую сторону
    7. Половину начисляемого опыта отправляем в навык и специализацию
    8. Если навык или специализация повышаются, то остаток опыта переходит в следующий ранг

Навык "Медицина"[]

  1. Излечение состоит из одной единственной операции - проверки количества отлеченных ХП и прибавления этого количества как модификатора к опыту.
  2. Лечение без лечащих предметов (бинты, аптечка и т.п.) невозможно. Возможно пополнение жизни при помощи дорогостоящих средств не требующих навыков.
  3. У лечилки есть минимальная и максимальная планка отлечения (heal_min, heal_max).
  4. При увеличении навыка минимальная планка сдвигается от 0 до 100% до максимальной по формуле:
<>o
  1. Также минимальный и максимальный пороги увеличиваются при помощи специализации следующим образом:
<>o
<>o

Пример:

<tbody> </tbody>

Уровень специализации

Минимальный порог лечения предметом

Максимальный порог лечения предметом

Минимум с учетом спецухи

Максимум с учетом спецухи

0

100

200

100

200

1

100

200

120

240

2

100

200

140

280

3

100

200

160

320

4

100

200

180

360

5

100

200

200

400

Специализации[]

  1. Текущее значение специализации (целое число от 0 до 5, стартовое значение = 0 (задается в GSDL, в <a href="https://wiki.vr-ocean/moin.cgi/PlayerTtaits">PlayerTtaits</a>. -1 означает, что специализация выключена)
  2. Текущее количество очков опыта (unsigned int32, стартовое значение = 0)
    1. При повышении значения специализации, текущее кол-во очков опыта = (максимальное кол-во очков опыта - текущее кол-во очков опыта).
  3. Максимальное количество очков опыта до повышения уровня (unsigned int32, стартовое значение = 1250). При превышении данной величины специализация повышается, а максимальное количество пересчитывается по формуле:Максимальное количество очков опыта (МКОО) = 1250 * (2 в степени "соответствующая величина специализации"*3)

<tbody> </tbody>

Текущий уровень специализации

Сколько нужно набить, чтобы перейти на следующий уровень специализации

0

1250

1

10000

2

80000

3

640000

4

5120000

5

40960000

  1. При увеличении специализации, на 1 увеличивается также и ее атрибут, если специализация увеличилась до 3-х.
    1. При этом любой атрибут (без бонусов от шмота) не должен быть больше 20 и не должен быть больше уровня игрока.
  2. Специализации берутся с 4-го уровня

Связи специализаций с атрибутами[]

<tbody> </tbody>

Номер

Увеличивающийся от использования специализации атрибут

Родительский навык

Специализация

1

Сила

Ближний бой

Рукопашный бой

2

Ловкость

Ближний бой

Режущее оружие

3

Восприятие

Стрельба

Пистолеты

4

Сила

Стрельба

Дробовики

5

Ловкость

Стрельба

Автоматы

6

Восприятие

Стрельба

Винтовки

7

Сила

Стрельба

Ручные пулеметы

8

Ловкость

Стрельба

Пистолет-пулемет

9

Ловкость

Медицина

Первая помощь

10

Интеллект

Медицина

Хирургия

Стоимость специализаций[]

<tbody> </tbody>

Количество уже взятых специализаций

Стоимость специализации

0

Бесплатно

1

1000 афро

2

10 голда

3

50 голда

4

100 голда

5 и более

200 голда

Механизм сброса специализации[]

  • Технологически сброс специализации работает следующим образом:
  • Уменьшается на единицу счетчик выбранных специализаций.
  • У сбрасываемой специализации происходит следующее:
    1. Атрибут, связанный со специализацией уменьшается на текущее значение специализации.
    2. Текущее значение специализации приравнивается нулю.
    3. "Текущее количество очков опыта" приравнивается нулю.
    4. "Максимальное количество очков опыта до повышения уровня" приравнивается стартовому значению (1250).

Уровень персонажа[]

  • Как такового уровня персонажа в игре нет (система навыков и специализаций распределяет опыт между ними, не храня опыт централизованно). Однако во многих случаях для определения сложности используется следующее определение: уровень игрока равен максимальному значению навыка.

Очки действия[]

  1. Как определяется максимальный пул очков действия?
    1. Максимальный пул очков действия = 50 + (Величина максимального навыка * 5).

Максимальный переносимый вес[]

  1. Максимально переносимый вес определяется по следующей формуле:
    1. Максимально переносимый вес = 30 + Атрибут "Сила" * 2

Здоровье персонажа[]

  1. Количество очков жизни у персонажа = Сила * 4 + Телосложение * 20
  2. Количество очков выносливости у персонажа = Ловкость * 4 + Телосложение * 20

Регенерация[]

  1. Регенерация зависит от телосложения. Каждую минуту количество очков жизни увеличивается на значение, равное атрибуту "Телосложение" (в случае если текущее количество очков жизни от 100% до 30% или на 1 (единицу), если кол-во очков жизни от 30% до 1%.
  2. Процесс регенерации жизни отнимает выносливость. Каждое 1 отрегенерированное очко жизни отнимает 1 очко выносливости.
  3. Регенерация увеличивает выносливость каждую минуту на 1 очко выносливости.

Восстановление выносливости[]

  • Восстановить выносливость можно как при помощи регенерации, так и ускоренно при помощи расходных предметов вроде еды и воды, а также различных транквилизаторов. Восстановление выносливости не требует навыка.

Броня[]

  1. Принцип работы брони: суммарный класс брони означает то количество вреда, которое попадет не в здоровье, а в стамину. К примеру:

<tbody> </tbody>

Наносимый вред

Класс брони

Итоговый вред по здоровью

Итоговый вред по стамине

100

60

40

60

100

120

0

100

100

0

100

0

  1. Как определяется базовая броня персонажа?
    1. Базовый Класс Брони = (Ловкость * 3 + Восприятие)/2.
Advertisement