Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];

Вниз

Функция шанса   Найти похожие ветки 

 
Yokmombyk   (2006-06-07 23:29) [0]

Никак не могу составить/придумать нормальный сабж. Игра: фентези.

Нужно посчитать шанс успешного применения умения. Как пример - умение усыпить противника. Из базовых данных есть:
- магическая атака
- магическая защита
- сила a.k.a. базовый шанс умения
- разница уровней между атакующим и целью (ну или их соотношение, не суть важно)
- некая зависимость от базового стата цели (н.п. от мудрости)

Пробема состоит в том, чтоб можно было нормально управлять функцией с помощью базового шанса умения, и чтоб не было траблов с вылетом за пределы (за 100%).

Из "красивых" функций знаю только 1 / (1 + exp(-ax)) и ещё 0.5 + arctan(ax) / pi, но ни одной из них у меня не получается  нормально управлять.

PS зависимость от магической атаки и защиты предполагается вводить в виде sqrt(magic attack) / magic defend, но это не принципиально.


 
megabyte-ceercop ©   (2006-06-08 07:59) [1]

А чего ты боишься за 100% вылетать? Если атакующий настолько сильнее цели то он его 100 пудов усыпит и все.

Но лучше добавить цели что-то типа "усталости от магической атаки". Каждая попытка добавляет некоторое количество этой усталости, как только этот показатель перевалит за 100 цель засыпает. Применяешь каст на сонного, показатель еще больше увиличивается и цели спит дольше.


 
tButton ©   (2006-06-08 08:05) [2]

очень простая формула, можно сказать, ноу-хау
if (random*atack)>(random*defence)
 then hit
 else miss;

т.е. по сути - ролл атаки против ролла защиты
вылет за 100 % не возможен
так что. считай атаку для атакующего
считай защиту для защищающегося и кидай кости


 
Yokmombyk   (2006-06-08 21:48) [3]


> А чего ты боишься за 100% вылетать? Если атакующий настолько
> сильнее цели то он его 100 пудов усыпит и все.

Да я бы не боялся, но дело в том, что уж очень оно быстро за сотню вылетает - сильно большие диапазоны значений. Ведь цель может быть как магом, так и воином (а значение защиты у них раза в два различается), цель может применить защиты (одёжка, касты от клериков), а может и не применить.

То же самое с атакующим - он может взять \m/ оружие (достаётся хоть и нелегко, но оверным оно не должно быть), заточить своего персонажа на магическую атаку в ущерб другим параметрам, может драться "на износ" (с увеличенным потреблением маны, или же с жертвованием жизнью)... Короче, нижняя и верхняя планка различаются раз в 10 :-)


> т.е. по сути - ролл атаки против ролла защиты
> вылет за 100 % не возможен
> так что. считай атаку для атакующего
> считай защиту для защищающегося и кидай кости

Спасибо, попробую. Преобразования всё равно применять придётся, но это уже попроще будет.


 
tButton ©   (2006-06-09 04:51) [4]


> Спасибо, попробую.

ещё один плюс этой системы - у всех есть шанс

> Преобразования всё равно применять придётся, но это уже
> попроще будет.

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


 
Yokmombyk   (2006-06-10 12:34) [5]


> ещё один плюс этой системы - у всех есть шанс


Дада, я и сам догадался :)


 
RzCoDer ©   (2006-06-10 15:01) [6]


> Yokmombyk

Уж не Lineage II C5 ли вы делаете? ;)


 
Yokmombyk   (2006-06-10 18:52) [7]

Нет, с чего ты взял? А что, сильно похожие умения?


 
RzCoDer ©   (2006-06-10 19:56) [8]

Я бы сказал явный плагиат


 
tButton ©   (2006-06-10 20:30) [9]

ничего плагиатного не вижу
ну атака, ну защита, но они ж ядрёна вошь в каждой РПГ в том или ином виде.
если так, то можно и к названиям статов придраться =)


 
RzCoDer ©   (2006-06-10 20:43) [10]


> tButton

Я знаком с LineageII лично и вижу явное сдирание такое как слип, неудачный каст, сильный учёт разницы в уровне, базовый шанс скила (уровень скила), м атак, м деф,

> Ведь цель может быть как магом, так и воином

Так там и есть =)


> (касты от клериков)

Ага, клериков, ШЕ, ЕЕ и прочих оверлордов ;)


 
Yokmombyk   (2006-06-10 21:53) [11]


> Я знаком с LineageII лично и вижу явное сдирание такое как
> слип, неудачный каст, сильный учёт разницы в уровне, базовый
> шанс скила (уровень скила), м атак, м деф,


Если с такой стороны подходить...


> > Ведь цель может быть как магом, так и воином
> Так там и есть =)


...а тем более с такой, то 98% игр являются плагиатом.

Скажи, что только в вашем Lineage есть маги и воины? Только там есть умение усыпить противника? Неудачный каст и учёт разницы в уровнях - это пять. А как же иначе? Все заклинания всегда срабатывают, и первый уровень бьёт 120 точно так же, как сто двадцатый - первого?

Может, ты просто больше ни одной игры не знаешь?


> Ага, клериков, ШЕ, ЕЕ и прочих оверлордов


ШЕ и ЕЕ - это наподобии клериков? Гыгы, первый раз вижу, чтоб клериков называли оверами :D Они у вас в Lineage II C5 разрывают всё, что движется? LOL


 
RzCoDer ©   (2006-06-11 20:21) [12]

Ппц, человек воспринял обычный вопрос в штыки... Мдя...


 
Yokmombyk   (2006-06-11 20:35) [13]

Обычный вопрос - нет, а вот обвинение в явном плагиате...


 
RzCoDer ©   (2006-06-11 20:59) [14]

В таком случае где слова обвинения?


 
Yokmombyk   (2006-06-11 21:18) [15]

[8]


 
RzCoDer ©   (2006-06-11 22:03) [16]

Вы обижаетесь при одном слове "плагиат"?


 
Yokmombyk   (2006-06-11 22:10) [17]

да


 
RzCoDer ©   (2006-06-11 22:37) [18]

гы, ну простите извините... нехотел так глубоко ранить человека

кстати по теме

>  Ведь цель может быть как магом, так и воином (а значение
> защиты у них раза в два различается), цель может применить
> защиты (одёжка, касты от клериков), а может и не применить.
>
>
> То же самое с атакующим - он может взять \m/ оружие (достаётся
> хоть и нелегко, но оверным оно не должно быть), заточить
> своего персонажа на магическую атаку в ущерб другим параметрам


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

как нить так (м.а.*скил.сила)/(м.деф)*k

тоисть если нападающий уровнем выше то k будет повышающим коэффициентом и, соответственно, наоборот


 
RzCoDer ©   (2006-06-11 22:40) [19]

ну где то так:

if (м.а.*скил.сила)/(м.деф)*k > Random(100,20) then попытка успешна

где Random(100,20) - случайное отклонение от 100 на +-20


 
Yokmombyk   (2006-06-11 23:24) [20]


> гы, ну простите извините... нехотел так глубоко ранить человека


Да, я смайлык зафтыкнул поставить ;-)


> if (м.а.*скил.сила)/(м.деф)*k > Random(100,20) then попытка
> успешна

Вот-вот, об этом я и говорил. Сейчас оно приблизительно так и считается и постоянно вылетает за пределы :)


 
RzCoDer ©   (2006-06-12 09:40) [21]

ещё поправка  Random(X,20) где число X надо как то связать с м.деф и м.а. чтонить вроде (м.а./м.деф.)*100. Это конечно зависит от того какие "нормальные" значения будут у этих параметров. Скажем если для персов магов 30 лвл нормальная(читай максимальная) м.а. = 400, а м.деф = 150, то неплохо бы доумнажать м.деф. на повышающий коэффициент


 
Yokmombyk   (2006-06-12 20:46) [22]

Почитай первую страницу, там об этом речь идёт, и сказано, что такой способ обсчёта не даёт хороших результатов.


 
Думкин ©   (2006-06-13 06:34) [23]

> Yokmombyk   (12.06.06 20:46) [22]

Вы бы определились с требованиями к функции. будут требования - будет функция.
А так не пойдет. Фтыкнул - не нравится. А что понравится?


 
Yokmombyk   (2006-06-14 18:28) [24]


> Думкин ©   (13.06.06 06:34) [23]

Мне tButton уже подсказал приемлимый вариант.


 
Kobik..   (2006-06-16 08:27) [25]

>tButton ©   (08.06.06 08:05) [2]
>if (random*atack)>(random*defence)
> then hit
> else miss;

Реально классная формула. Нечто бодобное сделано в аллодах.
Единственный касяк, тут шанс попасть меньше чем шанс защититься. А при атаке 0 вообще невозможно попасть.  

Конечно, нулевых (или даже отрицательных) значений атаки/защиты может не быть вообще. Но если они допускаются, то я бы так изменил эту формулу

if (random*(atack+const1))>=(random*(defence+const1))

где const1 дает в сумме с атакой/защитой гарантированно  положительное значение.


 
tButton ©   (2006-06-16 09:21) [26]

немогу однозначно описать свои эмоции по поводу реакции на формулу из которой я хотел сделать коммерческую тайну =)
вообще - как вы себе представляете бойца с атакой равной нулю?
он может вообще во что-то попасть?
так же как и защита равная нулю не даёт шанса защититься вообще.
это не косяк, это суровая правда жизни.
значения переменных - это вопрос игрового баланса.

ПыСы
формулу из аллодов не видел, прокомментировать не могу =)
ПыПыСы
эта формула родилась в припадке психоза, когда я устал подгонять и сравнивать коэффициенты. родилась она из упрощения атако-защитной системы =) (т.е. раньше у меня было нечто подобное, но оно было немного сложнее)


 
Kobik..   (2006-06-17 14:42) [27]

>tButton ©   (16.06.06 09:21) [26]
>вообще - как вы себе представляете бойца с атакой равной нулю?

Очень просто.
Был у нас слабый герой с атакой 10, а на него супер крутой маг колданул ослабление "атака:=атака - 50". Какой показатель атаки останется у героя? :)


 
Yokmombyk   (2006-06-17 15:25) [28]

И будет он при ударах хилить своего врага! :)


 
Kobik..   (2006-06-17 16:04) [29]

>Yokmombyk   (17.06.06 15:25) [28]
>И будет он при ударах хилить своего врага! :)

Это если урон прямо зависит от атаки.
Обычно же идет урон-броня, атака-защита


 
tButton ©   (2006-06-17 16:12) [30]


> Очень просто.
> Был у нас слабый герой с атакой 10, а на него супер крутой
> маг колданул ослабление "атака:=атака - 50". Какой показатель
> атаки останется у героя? :)

и как вы хотите чтобы чувствовал себя маг, который полтора года разучивал это мега заклинание?
колданул он его, а воин как бил так и бьёт...


 
Yokmombyk   (2006-06-30 12:36) [31]

tButton - система работает отлично! Спасибо за идею ;-)


 
tButton ©   (2006-07-04 19:54) [32]


> Yokmombyk   (30.06.06 12:36) [31]
> tButton - система работает отлично! Спасибо за идею ;-)

претендую на эксклюзивное право лицезреть результат использования =)
и если не жалко - можно меня в титры запихать =)


 
Yokmombyk   (2006-07-05 13:39) [33]

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

return damage * rndgen.nextFloat() > target.getMaximumHP() * rndgen.nextFloat();



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.046 c
15-1177875190
ArtemESC
2007-04-29 23:33
2007.05.27
Паскаль-парсер...


2-1178384918
Kostafey
2007-05-05 21:08
2007.05.27
Использование русских названий в тексте SQL-запроса.


2-1178389011
DevilDevil
2007-05-05 22:16
2007.05.27
Использовать компоненты, но не использовать Forms.pas


2-1178390834
Wind
2007-05-05 22:47
2007.05.27
мастер построения Сonnectionstring


4-1166780935
Grademax
2006-12-22 12:48
2007.05.27
Как узнать сколько времени отработал HDD?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский