02-04-2013, 09:16 AM
Всегда было интересно, насколько точно определены те или иные формулы в l2j. Я решил проверить это и пореверсить чутка ГФ. В общем вот, что получилось:
эффект i_m_attack;36 урон считается по формуле:
эффект i_m_attack_range;23;40 тоже самое, что и i_m_attack только учитывает щит:
Как видно у l2j "почти то же самое" Во всех сборках не правильно рассчитывается шанс крита, бонус от атрибута и бонус от зарядки душ. А trait_bonus'а так ваще нигде нет.
Манор. Понятно, что никому не нужен и никто не юзает. Но мне все же было интересно посмотреть как все рассчитывается, итак:
В общем вот так, l2j это эмулятор, и даже самые основные формулы в нем не такие как в оригинале, да похожие но не то
эффект i_m_attack;36 урон считается по формуле:
Код:
damage = 91 * power * sqrt(mAtk * soul_bonus) / mDef * triat_bonus * attr_bonus * crit_mod * weapon_random
где
power = 36 - из эффекта
mAtk = mAtk если заряжена соска то +mAtk * p1 / 100 где p1 - это первый
пар-р в эффекте соски i_spirit_shot;100;40;1.0, 100 для спиритшота и 300 для
блесс соски.
soul_bonus = 1 если нет душ или 1.30 + soul_count * 0.05
triat_bonus - не разбирался как вычисляется, так как для большинства скилов
с i_m_attack не задан. В общем случае 1
attr_bonus - считается совсем по другому нежели чем в l2j и даже при нулевых
значениях атрибута атаки и защиты оказывает незначительное влияние (~+2%).
Но так как в ГФ эта формула не актуальна то тут ее не привожу.
crit_mod = 1 если нет крита, и 2.5 если крит, шанс маг. крита считается как
crit_chance = 5 * wit_bonus * buff_crit_mod + level_mod
buff_crit_mod = все баффы на шанс крита включая баффы цели на понижение маг
крита. если уровень атакующего и цели больше либо равно 78 то:
level_mod = sqrt(attacker_level) + (attacker_level - target_level) / 25
иначе 0.
Далее, если уровень атакующего и цели больше либо равно 78 и шанс больше 32
то шанс обрезается до 32. Если уровни меньше 78 и шанс больше 20 то шанс
режется до 20.
этот эффект игнорирует щит.
эффект i_m_attack_range;23;40 тоже самое, что и i_m_attack только учитывает щит:
Код:
damage = 91 * power * sqrt(mAtk * soul_bonus) / (mDef + shield_def) * triat_bonus * attr_bonus * crit_mod
shiled_def = sDef * p2 / 100 если попали в щит и 0 если не попали.
где sDef = pDef щита
p2 - второй пар-р из эффекта 40.
Шанс попадания в щит рассчитывается как:
chance = base_shield_rate * buff_mod * dex_bonus
где base_shield_rate = 20 базовый шанс для щитов
buff_mod - все баффы на шанс щита и т.д.
если шанс выпадает то рассчитывается второй шанс полного отражения урона
chance2 = dex_bonus * 2
если этот шанс выпадает то damage = 1
Как видно у l2j "почти то же самое" Во всех сборках не правильно рассчитывается шанс крита, бонус от атрибута и бонус от зарядки душ. А trait_bonus'а так ваще нигде нет.
Манор. Понятно, что никому не нужен и никто не юзает. Но мне все же было интересно посмотреть как все рассчитывается, итак:
Код:
Шанс посадить семечко зависит от уровня игрока, уровня моба и уровня семечки:
level_diff = abs(mob_level - player_level)
если level_diff > 5 то считается fail_chance иначе переходим к расчету seed_fail_chance
fail_chane = (level_diff - 5) * 5
если fail_chane > rand(100) то семечко не садится
далее считается seed_fail_chance
seed_level_diff = abs(mob_level - seed_level)
расчет аналогичный fail_chance
если оба шанса выпали или оба level diff'а меньше 5 то рассчитывается кол-во
плодов, которое не зависит от X-овости моба и кол-ва ХП :)
для альтернативных семян:
crop_count_chance = seed_default_price / crop_default_price
для обычных семян:
crop_count_chance = (mob_drop_adena + crop_default_price) / crop_default_price
mob_drop_adena = (adena_drop_min + adena_drop_max) / 2 * 0.75
потом вычисляется кол-во
coun = 0
пока Rnd.nextDouble() < crop_count_chance то count++ crop_count_chance--
если count == 0 то семечко не садится. Иначе записывается что посадили и кол-во.
При сборке урожая шанс сбора рассчитывается аналогично шансу посадки.
В общем вот так, l2j это эмулятор, и даже самые основные формулы в нем не такие как в оригинале, да похожие но не то