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.sub_goal = quest_row["sub_goal"]
|
||||||
self.rank = quest_row["rank"]
|
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):
|
def one_line_u(self):
|
||||||
return self._one_line_template.substitute(self.__dict__)
|
return self._one_line_template.substitute(self.__dict__)
|
||||||
|
|
||||||
@@ -170,8 +175,8 @@ class MHDB(object):
|
|||||||
|
|
||||||
def get_quest_monsters(self, quest_id):
|
def get_quest_monsters(self, quest_id):
|
||||||
v = self._get_memoized("quest_monsters", """
|
v = self._get_memoized("quest_monsters", """
|
||||||
SELECT monster_id FROM monster_to_quest
|
SELECT monster_id, unstable FROM monster_to_quest
|
||||||
WHERE quest_id=? AND unstable='no'
|
WHERE quest_id=?
|
||||||
""", quest_id)
|
""", quest_id)
|
||||||
return v
|
return v
|
||||||
|
|
||||||
|
|||||||
@@ -160,7 +160,9 @@ class QuestItemExpectedValue(object):
|
|||||||
|
|
||||||
def _add_reward(self, r):
|
def _add_reward(self, r):
|
||||||
mutable_r = dict(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)
|
reward = QuestReward(mutable_r, self.fixed_rewards)
|
||||||
|
|
||||||
self.slot_rewards[reward.slot].append(reward)
|
self.slot_rewards[reward.slot].append(reward)
|
||||||
@@ -417,9 +419,9 @@ class ItemStrategy(object):
|
|||||||
|
|
||||||
def add_hunt_item(self, hunt_item):
|
def add_hunt_item(self, hunt_item):
|
||||||
self.hunt_items.append(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,
|
carving_skill=self.carving_skill,
|
||||||
cap_skill=self.cap_skill)
|
cap_skill=self.cap_skill)
|
||||||
self.hunt_ev += ev
|
self.hunt_ev += ev
|
||||||
self.ev += ev
|
self.ev += ev
|
||||||
|
|
||||||
@@ -501,6 +503,12 @@ class HuntItemExpectedValue(object):
|
|||||||
carving_skill=carving_skill)
|
carving_skill=carving_skill)
|
||||||
return ev
|
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):
|
def print(self, out, indent=2):
|
||||||
for hr in self.matching_rewards:
|
for hr in self.matching_rewards:
|
||||||
hr.print(out, indent)
|
hr.print(out, indent)
|
||||||
@@ -509,6 +517,7 @@ class HuntItemExpectedValue(object):
|
|||||||
for reward in rewards:
|
for reward in rewards:
|
||||||
if reward["item_id"] != self.item_id:
|
if reward["item_id"] != self.item_id:
|
||||||
continue
|
continue
|
||||||
|
# TODO: warn when percentage == 0
|
||||||
self._add_reward(reward)
|
self._add_reward(reward)
|
||||||
|
|
||||||
def _add_reward(self, r):
|
def _add_reward(self, r):
|
||||||
@@ -570,6 +579,8 @@ class ItemRewards(object):
|
|||||||
reward_rows = self.db.get_monster_rewards(mid, rank)
|
reward_rows = self.db.get_monster_rewards(mid, rank)
|
||||||
hunt_item = HuntItemExpectedValue(self.item_id, monster["name"],
|
hunt_item = HuntItemExpectedValue(self.item_id, monster["name"],
|
||||||
rank, reward_rows)
|
rank, reward_rows)
|
||||||
|
if not hunt_item:
|
||||||
|
continue
|
||||||
key = (mid, rank)
|
key = (mid, rank)
|
||||||
self._hunt_items[key] = hunt_item
|
self._hunt_items[key] = hunt_item
|
||||||
|
|
||||||
@@ -596,6 +607,16 @@ class ItemRewards(object):
|
|||||||
hunt_items = []
|
hunt_items = []
|
||||||
for m in quest_monsters:
|
for m in quest_monsters:
|
||||||
mid = m["monster_id"]
|
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)
|
hunt_item = self.get_hunt_item(mid, quest_item.quest.rank)
|
||||||
if hunt_item:
|
if hunt_item:
|
||||||
hunt_items.append(hunt_item)
|
hunt_items.append(hunt_item)
|
||||||
|
|||||||
Reference in New Issue
Block a user