|
|
|
|
@ -3,6 +3,7 @@ from collections import defaultdict
|
|
|
|
|
import json
|
|
|
|
|
import difflib
|
|
|
|
|
import re
|
|
|
|
|
import math
|
|
|
|
|
|
|
|
|
|
from mhapi import skills
|
|
|
|
|
from mhapi.model import SharpnessLevel, _break_find
|
|
|
|
|
@ -11,13 +12,16 @@ from mhapi.model import SharpnessLevel, _break_find
|
|
|
|
|
WEAKPART_WEIGHT = 0.5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def floor(x):
|
|
|
|
|
return int(math.floor(x))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def raw_damage(true_raw, sharpness, affinity, monster_hitbox, motion):
|
|
|
|
|
"""
|
|
|
|
|
Calculate raw damage to a monster part with the given true raw,
|
|
|
|
|
sharpness, monster raw weakness, and weapon motion value.
|
|
|
|
|
"""
|
|
|
|
|
return (true_raw
|
|
|
|
|
return floor(true_raw
|
|
|
|
|
* SharpnessLevel.raw_modifier(sharpness)
|
|
|
|
|
* (1 + (affinity / 400.0))
|
|
|
|
|
* motion / 100.0
|
|
|
|
|
@ -30,7 +34,7 @@ def element_damage(element, sharpness, monster_ehitbox):
|
|
|
|
|
attack, the given sharpness, and the given monster elemental weakness.
|
|
|
|
|
Note that this is independent of the motion value of the attack.
|
|
|
|
|
"""
|
|
|
|
|
return (element / 10.0
|
|
|
|
|
return floor(element / 10.0
|
|
|
|
|
* SharpnessLevel.element_modifier(sharpness)
|
|
|
|
|
* monster_ehitbox / 100.0)
|
|
|
|
|
|
|
|
|
|
@ -276,7 +280,10 @@ class WeaponMonsterDamage(object):
|
|
|
|
|
|
|
|
|
|
if self.limit_parts is not None and part not in self.limit_parts:
|
|
|
|
|
continue
|
|
|
|
|
#print part, alt
|
|
|
|
|
|
|
|
|
|
if row["cut"] == -1:
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
hitbox = 0
|
|
|
|
|
hitbox_cut = int(row["cut"])
|
|
|
|
|
hitbox_impact = int(row["impact"])
|
|
|
|
|
@ -572,8 +579,10 @@ class PartDamage(object):
|
|
|
|
|
|
|
|
|
|
def average(self, break_weight=0.25, rage_weight=0.5):
|
|
|
|
|
if self.break_diff():
|
|
|
|
|
assert not self.rage_diff()
|
|
|
|
|
return self.average_break(break_weight)
|
|
|
|
|
avg = self.average_break(break_weight)
|
|
|
|
|
if self.rage_diff():
|
|
|
|
|
return (self.average_rage(rage_weight) + avg) / 2.0
|
|
|
|
|
return avg
|
|
|
|
|
else:
|
|
|
|
|
return self.average_rage(rage_weight)
|
|
|
|
|
|
|
|
|
|
|