Войти на сайт

Авторизация, ждите ...
×

ТЕМА: Формулы урона и с чем их едят (RPG MAKER MV))

Формулы урона и с чем их едят (RPG MAKER MV)) 1 год 7 мес. назад #112353

  • Kouta555
  • Kouta555 аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 541
  • Спасибо получено: 699
  • Проект месяца 1 местоПроект месяца 3 местоОраторПроект месяца 2 местоВетеранРазработчикПобедитель конкурса2 место
Вы, вероятно, задавались вопросом, как заставить навык наносить больше урона противникам с состоянием, или лечить больше, если у игрока есть состояние, или наносить ровно половину здоровья противника. И так далее.

Все это и многое другое можно сделать с помощью специальной формулы урона.


400.png


Основы:

Тип - устанавливает, формула наносит урон или лечит.
Нет - Ничего, никакого ущерба не будет нанесено.
Повреждение HP - Нанесение Урона НР
Повреждение МР - Нанесение Урона MP
Восстановление HP - Лечение\восстановление HP
Восстановление МР - Лечение\восстановление МР
Поглощение НР - Наносит урон вражескому HP и восстанавливает столько HP для атакующего
Поглощение МР - наносит урон вражескому MP и восстанавливает столько MP для атакующего

Элемент - Устанавливает, какой элемент использовать. Нормальная атака - значит будет использовать тот же элемент, что и оружие.

Дисперсия \ Вариантность - как будет колебаться урон. Например. Если в формуле умения сказано, что он наносит 100 урона, а дисперсия \ вариантность составляет 20%, умение будет наносить от 80 до 120 урона.

Критический - умение может наносить критический удар, нанося увеличенный урон на 300%.



А теперь самое интересное - формулы!
Они решают, какой урон получит противник или на сколько исцелит его союзник.

Давайте рассмотрим одну из основных формул.
Предположим мы делаем спецприем магия огня.

Прописываем в окошко Формула следующее значение
100 + a.mat * 2 - b.mdf * 2 - Что это означает? Давайте по порядку.

Что означают буквы a и b?
а - нападающий
б - защищающийся
Получается, если игрок кастует на противника орка магию огонь, то герой является нападающим "а", в то время как орк
является защищаюмся "b"

Значение означает, что параметр принимает двойной коэффициент игрок mat (Магическая атака), вычитает двойной параметр mdf (магическая защита) противника орка и добавляет его к 100 в начале формулы.
Например. У игрока 100 маг.атаки, а у орка 20 мдф. Если бы мы преобразовали формулу, используя эти числа, у нас было бы - 100 + 100 * 2 - 20 * 2, после расчета мы увидим, что с этими параметрами огонь нанес бы 260 повреждений, если бы не было вариантности.


Но! Только последний номер в формуле наносит урон. Если у вас 2 строки формулы. (точка с запятой; указывает, где заканчивается строка для программы)
Например a.atk; a.atk * 2
Только a.atk * 2 будет рассчитан на урон.


Есть ли еще буквы, кроме a и b для формул?
Да. Есть переменные. Которые используются так: v [ID]. ID - индекс переменной.
Таким образом, вы можете иметь навык, который становится сильнее, чем выше переменная.
Например. v [10] * 2 - b.def * 3


Есть ли способ сделать навык еще более сложным, например, если какая-то переменная превышает 100, нанести дополнительный урон?
Да, в этом случае мы можем использовать операторы if else.
Как, команда выглядит:


if (переменная)
{
формула1;
}
else
{
формула2;
}


Но как записать это в формулу урона?
Она имеет только 1 строку!
Просто напишите все вместе

if (переменная) {формула1; } else {формула2; }

if (v [10]> 100) {a.atk * 4 - b.def * 2} else {a.atk * 2 - b.def * 2}

Формулу модно сократить, если вы используете только 1 строку формулы.

if (переменная)
формула 1;
else
Formula2;

if (v [10]> 100) a.atk * 4 - b.def * 2; иначе a.atk * 2 - b.def * 2;

Можно сократить формулу еще больше, используя троичный оператор

Переменная ? формула1 : формула2;

v[10] > 100 ? a.atk*4 - b.def*2 : a.atk*2 - b.def*2;


Символы для переменной:

> - больше чем
<- меньше чем
> = больше или равно
<= меньше или равно
=== равно
&& а также
|| или же
! == не равно
! нет


Примеры:

v [10]> 100? 1000: 100; (Если(if) переменная 10 больше 100, она нанесет 1000 урона, иначе(else) она нанесет только 100)

v [10] <100? 1000: 100; (Если переменная 10 меньше 100, она нанесет 1000 урона, иначе она нанесет только 100)

v [10]> == 100? 1000: 100; (Если переменная равна 100 или более, она нанесет 1000 урона, иначе она нанесет только 100)

v [10] <== 100? 1000: 100; (Если переменная равна 100 или меньше, она нанесет 1000 урона, иначе она нанесет только 100)

v [10] === 100? 1000: 100; (Если переменная равна 100, она нанесет 1000 урона, иначе она нанесет только 100)

v [10]> 50 && v [11]> == 25? 1000: 100; (Если переменная 10 больше 50, а переменная 11 25 или больше, она нанесет 1000 урона, иначе она нанесет только 100)

v [10]> 50 || v [11]> 50? 1000: 100; (Если переменная 10 больше 50 или переменная 11 больше 50, тогда она нанесет 1000 урона, она нанесет только 100)

v [10]! == 100? 1000: 100; (Если переменная 10 не равна 100, она нанесет 1000 урона, иначе она нанесет только 100)



Как насчет параметров для использования для a и b?

Вот полный список:

Текущий: (Все плоские числа, например: 900, 999, 11)

level - текущий уровень (герой только по умолчанию)
hp. - текущий хп
mp - текущий мп
tp - текущий tp



Параметры: (Все плоские числа, например: 1337, 7331, 156)

401.png



mhp - максимальное хп
mmp - максимальное мп
atk - атака
def - защита
mat - магическая атака
mdf - магическая защита
agi - скорость
luk - удача



доп параметры: (Все десятичные числа, обозначающие проценты, например, 1,0, 0,5, 0,75, 2,44, будут равны 100%, 50%, 75%, 244%)


402.png



hit - шанс попадания
eva - шанс уклонения
cri - шанс критических попаданий
cev - шанс уклонения от критических попаданий
mev - шанс уклонения от магии
mrf - шанс отражения магии
cnt - контратака
hrg - регенерация хп
mrg - регенерация мп
trg - регенерация тп


Спец параметры: (Все десятичные числа, обозначающие проценты, например, 1,0, 0,5, 0,75, 2,44, будут 100%, 50%, 75%, 244%)


403.png



tgr - шанс стать целью
grd - Эффективность защиты
rec - эффект восстановления
pha - Фармакология
mcr - стоимость Мп
tcr - скорость зарядки тп
pdr - получение физического урона
mdr - получение магического урона
fdr - повреждение от поверхности
exr - опыт



Как насчет изменения HP / MP / TP?


gainHp (значение) - восстанавливает HP по значению
gainMp (значение) - восстанавливает MP по значению
gainTp (значение) - восстанавливает TP по значению

setHp (hp) - устанавливает значение HP
setMp (mp) - устанавливает значение MP в значение
setTp (tp) - устанавливает значение TP в значение
Например. a.setHp (a.mhp)
Например. a.setHp (a.hp + 100)

clearTp () - устанавливает TP в 0

Как насчет продвинутых вещей, где вы можете влиять на формулы с состояниями?

isStateActed (stateId) - проверяет, есть ли у сражающегося состояние, нанесенное им.
Например. b.isStateActed (10)? 10000: 1;

isDeathStateActed () - проверяет, есть ли у сражающегося состояние смерти.
Например. b.isDeathStateActed ()? 10000: 1;

resetStateCounts (Id состояния) - обновляет, как долго будет длиться состояние для бойца
if (b.isStateActed (10)) b.resetStateCounts (10); 100

updateStateTurns () - сокращает все состояния бойца на 1 ход
b.updateStateTurns (); 100

addState (Id состояния) - добавляет состояние бойцу
if (! b.isStateActed (10)) b.addState (10); 100

isStateAddable (stateId) - проверяет, может ли состояние быть добавлено к сражающемуся
с = 100; if (b.isStateAddable (10)) b.addState (10); иначе с = 4000; с

removeState (stateId) - удаляет состояние бойца
if (a.isStateActed (10)) a.removeState (10); 0



А как насчет баффов? Можем ли мы усиливать и ослаблять бойцов?

Можем!

addBuff (Id параметра, кол-во ходов) - добавляет бафф для параметра
a.addBuff (0, 3); b.def * 10

addDebuff (Id параметра, кол-во ходов) - добавляет дебафф для параметра
b.addDebuff (2, 10); 9999

removeBuff (Id параметра) - удаляет бафф или дебафф из бойца
removeAllBuffs () - удаляет все баффы и дебаффы у бойца


ID параметров

0 - Максимальное HP
1 - Максимальное MP
2 - Атакая
3 - Защита
4 - Магическая атака
5 - Магическая защита
6 - Скорость
7 - Удача



die() - убивает бойца
b.die(); 0

revive() - воскрешает бойца
a.revive(); 1000

paramBase(Id параметра) - получить базовы параметр
a.paramBase(3)*10 - b.def*2

paramPlus(Id параметра) - получить прибавку к параметру
a.paramPlus(3)*2 - b.def*2

paramMax(Id параметра) - получить максимальный параметр
b.paramMax(0)

elementRate(Id элемента) - проверяет элемент бойца (скорость - десятичные числа, в процентаже)
b.elementRate(10) >== 0.5 ? 10000 : a.mat*4;

isStateResist(Id состояния) - проверяет, сопротивляется ли боец состоянию
c=0; b.isStateResist(10) ? c+=2000 : b.addState(10); c

isSkillTypeSealed(Id типа навыка) - проверяет, запечатан ли тип навыка бойца
isSkillSealed(Id навыка) - проверяет, запечатан ли навык бойца
isEquipTypeSealed(Id типа экипировки) - проверяет, запечатан ли тип экипировки бойца
isDualWield() - проверяет, может ли боец брать два оружия
isGuard() - проверяет, защищается ли в данный момент ли боец
recoverAll() - снимает все состояния, восстанавливает хп и мп

hpRate() - проверяет уровень ХП бойца
mpRate() - проверяет уровень МП бойца
tpRate() - проверяет уровень ТП бойца
b.hpRate() < 0.5 ? b.hp-1 : 100;

isActor() - Проверяет кем является боец (герой или враг) -для проверки героя
isEnemy() - роверяет кем является боец (герой или враг) -для проверки врага
escape() - побег из битвы
b.escape() (заставляет врага сбежать)

consumeItem(предмет) - использовать предмет
a.consumeItem($dataItems[15]); 100


Только для героя(игрока):

currentExp () - текущий опыт
currentLevelExp () - опыт необходимый для текущего уровня
nextLevelExp () - опыт необходимый для следующего уровня
nextRequiredExp () - опыта осталось до следующего уровня
maxLevel () - максимальный уровень героя
isMaxlevel () - максимальный уровень героя (true / false)
hasWeapon () - герой, владеющий оружием (true / false)
hasArmor () - герой в любой броне (true / false)
clearEquipments () - снять все, что носит герой
isClass (gameClass) - проверяет, принадлежит ли герой к классу (gameClass - $ dataClasses [ID])
hasNoWeapons () - проверяет, нет ли у героя оружия
levelUp () - поднимает уровень героя
levelDown () - уровень героя вниз
gainExp (exp) - дает героя exp
learnSkill (skillId) - заставляет героя выучить навык
ForgotSkill (skillId) - заставляет героя забыть навык
isLearnedSkill (skillId) - проверяет, изучил ли героя навык
actorId () - идентификатор героя (ID)

только для врагов:
enemyId() - идентификатор врага (ID)


Как насчет математики? Можем ли мы использовать математические методы внутри формулы?

Да, можете.

Math.random () - возвращает случайное число от 0 до 1 (0 <= n <1)
Math.min (numbers) - возвращает минимальное число из предоставленных номеров.
Например. Math.min (10, 50, 40, 200) - вернется 10.

Math.max (число) - возвращает максимальное число из предоставленных номеров.
Например. Math.max (10, 50, 40, 200) - вернул бы 200.

Math.round (число) - округляет число до ближайшего целого числа.
Math.ceil (число) - округляет число до ближайшего целого числа.
Math.floor (число) - округляет число до ближайшего целого числа.

Math.rand () возвращает число от 0 до 1, но можем ли мы получить случайное число от 1 до 100? Или 5 и 200?

Нет проблем:

Math.floor (Math.random () * 100) +1
Это вернуло бы число от 1 до 100. Если бы мы не добавили 1 в конце, оно вернуло бы только число от 0 до 99.

Слишком многА бАкАв? Можем ли мы как-нибудь упростить?

К счастью, в rpg_core.js есть метод, который добавляет Math.randomInt (max);
Таким образом, мы можем написать то же самое, используя:
Math.randomInt (100) +1
Последнее редактирование: 1 год 7 мес. назад от Kouta555.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: idavollr, Doctor_Bug, VarVarKa, PanzerCat, Kirillkrm, Адский дровосек, Snake Fightin, Noxmils, Natan_Exp, LiRo

Формулы урона и с чем их едят (RPG MAKER MV)) 1 год 7 мес. назад #112355

  • Doctor_Bug
  • Doctor_Bug аватар
  • Вне сайта
  • Просветлённый
  • Из горизонта события! ▪_■
  • Сообщений: 471
  • Спасибо получено: 604
  • Программист Ruby3 место в Кодировке3 местоПроект месяца 3 место
Я знал, я знал Кота что ты разбираешься в программирование, хитрец. Окей а как будет высчитываться урон если игрок будет иметь несколько "Элементов атаки", но при этом его скилл будет иметь элемент: обычная атака. И учти я не говорил про эффекты элементов который обладает игрок, а про его элементы атаки, которые у него несколько (ну к примеру одежда и оружие накладывают) Бугага :evil:

Как будет высчитываться по отношению к другим мобам, обладающий разными эффектами элементов?
Баг изучает это Panda3D pygame
А слушает эту музыку ~~> Мое сердце
Последнее редактирование: 1 год 7 мес. назад от Doctor_Bug.
Администратор запретил публиковать записи гостям.

Формулы урона и с чем их едят (RPG MAKER MV)) 1 год 5 мес. назад #113007

  • Seibur
  • Seibur аватар
  • Вне сайта
  • Просветлённый
  • Сообщений: 362
  • Спасибо получено: 302
  • ВетеранРазработчик
Это не оригинальная статья, а перевод: forums.rpgmakerweb.com/index.php?threads...-formulas-101.81905/
Только источник почему-то не указан.
Копейки на счете и вера, что именно ты, а ни кто-то другой изменит мир...
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: AnnTenna, Kouta555, DK

Формулы урона и с чем их едят (RPG MAKER MV)) 11 мес. 3 нед. назад #115221

  • Alx_Yago
  • Alx_Yago аватар
  • Сейчас на сайте
  • Просветлённый
  • Сообщений: 469
  • Спасибо получено: 741
  • Учитель3 место в Обучающем конкурсеРазработчик3 местоПроект месяца 1 место
Я час сидел и бился над этими формулами, пытаясь привязать урон к состоянию, пока не догадался найти оригинал статьи!

Так вот, в переводе ошибка, и вместо isStateActed (stateId) следует использовать isStateAffected(stateId)
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: AnnTenna, Seibur
Время создания страницы: 0.311 секунд