hack for mis-marked unstable monsters

main
Bryce Allen 11 years ago
parent 0ad973dc79
commit f4185450c4

@ -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,6 +160,8 @@ class QuestItemExpectedValue(object):
def _add_reward(self, r):
mutable_r = dict(r)
# 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)
@ -417,7 +419,7 @@ class ItemStrategy(object):
def add_hunt_item(self, hunt_item):
self.hunt_items.append(hunt_item)
ev = self.hunt_item.expected_value(self.strat,
ev = hunt_item.expected_value(self.strat,
carving_skill=self.carving_skill,
cap_skill=self.cap_skill)
self.hunt_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)

Loading…
Cancel
Save