Показать сообщение отдельно
Непрочитано 04.02.2013, 09:16   #1
Аватар для rage
Герой

Автор темы (Топик Стартер) Формулы (PTS)

Всегда было интересно, насколько точно определены те или иные формулы в 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 это эмулятор, и даже самые основные формулы в нем не такие как в оригинале, да похожие но не то
rage вне форума Ответить с цитированием
Сказали спасибо: