hack for mis-marked unstable monsters
This commit is contained in:
@@ -29,6 +29,11 @@ class Quest(object):
|
||||
self.sub_goal = quest_row["sub_goal"]
|
||||
self.rank = quest_row["rank"]
|
||||
|
||||
def is_multi_monster(self):
|
||||
return (" and " in self.goal
|
||||
or "," in self.goal
|
||||
or " all " in self.goal)
|
||||
|
||||
def one_line_u(self):
|
||||
return self._one_line_template.substitute(self.__dict__)
|
||||
|
||||
@@ -170,8 +175,8 @@ class MHDB(object):
|
||||
|
||||
def get_quest_monsters(self, quest_id):
|
||||
v = self._get_memoized("quest_monsters", """
|
||||
SELECT monster_id FROM monster_to_quest
|
||||
WHERE quest_id=? AND unstable='no'
|
||||
SELECT monster_id, unstable FROM monster_to_quest
|
||||
WHERE quest_id=?
|
||||
""", quest_id)
|
||||
return v
|
||||
|
||||
|
||||
@@ -160,7 +160,9 @@ class QuestItemExpectedValue(object):
|
||||
|
||||
def _add_reward(self, r):
|
||||
mutable_r = dict(r)
|
||||
mutable_r["percentage"] *= self.normalize_reward_p[r["reward_slot"]]
|
||||
# don't adjust fixed rewards
|
||||
if mutable_r["percentage"] != 100:
|
||||
mutable_r["percentage"] *= self.normalize_reward_p[r["reward_slot"]]
|
||||
reward = QuestReward(mutable_r, self.fixed_rewards)
|
||||
|
||||
self.slot_rewards[reward.slot].append(reward)
|
||||
@@ -417,9 +419,9 @@ class ItemStrategy(object):
|
||||
|
||||
def add_hunt_item(self, hunt_item):
|
||||
self.hunt_items.append(hunt_item)
|
||||
ev = self.hunt_item.expected_value(self.strat,
|
||||
carving_skill=self.carving_skill,
|
||||
cap_skill=self.cap_skill)
|
||||
ev = hunt_item.expected_value(self.strat,
|
||||
carving_skill=self.carving_skill,
|
||||
cap_skill=self.cap_skill)
|
||||
self.hunt_ev += ev
|
||||
self.ev += ev
|
||||
|
||||
@@ -501,6 +503,12 @@ class HuntItemExpectedValue(object):
|
||||
carving_skill=carving_skill)
|
||||
return ev
|
||||
|
||||
def __nonzero__(self):
|
||||
return bool(len(self.matching_rewards))
|
||||
|
||||
def __len__(self):
|
||||
return len(self.matching_rewards)
|
||||
|
||||
def print(self, out, indent=2):
|
||||
for hr in self.matching_rewards:
|
||||
hr.print(out, indent)
|
||||
@@ -509,6 +517,7 @@ class HuntItemExpectedValue(object):
|
||||
for reward in rewards:
|
||||
if reward["item_id"] != self.item_id:
|
||||
continue
|
||||
# TODO: warn when percentage == 0
|
||||
self._add_reward(reward)
|
||||
|
||||
def _add_reward(self, r):
|
||||
@@ -570,6 +579,8 @@ class ItemRewards(object):
|
||||
reward_rows = self.db.get_monster_rewards(mid, rank)
|
||||
hunt_item = HuntItemExpectedValue(self.item_id, monster["name"],
|
||||
rank, reward_rows)
|
||||
if not hunt_item:
|
||||
continue
|
||||
key = (mid, rank)
|
||||
self._hunt_items[key] = hunt_item
|
||||
|
||||
@@ -596,6 +607,16 @@ class ItemRewards(object):
|
||||
hunt_items = []
|
||||
for m in quest_monsters:
|
||||
mid = m["monster_id"]
|
||||
|
||||
# It looks like every monster other than the first is
|
||||
# marked as stable. This looks like it's usually correct
|
||||
# for single monster quests, but wrong for multi monster
|
||||
# quests, so skip the unstable monsters for single monster
|
||||
# quests.
|
||||
unstable = (m["unstable"] == "yes")
|
||||
if unstable and not q.is_multi_monster():
|
||||
continue
|
||||
|
||||
hunt_item = self.get_hunt_item(mid, quest_item.quest.rank)
|
||||
if hunt_item:
|
||||
hunt_items.append(hunt_item)
|
||||
|
||||
Reference in New Issue
Block a user