You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.1 KiB
72 lines
2.1 KiB
#!/usr/bin/env python
|
|
|
|
import os.path
|
|
import codecs
|
|
import json
|
|
|
|
import _pathfix
|
|
from _pathfix import db_path
|
|
|
|
from mhapi.db import MHDB
|
|
|
|
|
|
def get_utf8_writer(writer):
|
|
return codecs.getwriter("utf8")(writer)
|
|
|
|
|
|
def set_carve_counts(db, monster_carves):
|
|
monsters = db.get_monsters()
|
|
for m in monsters:
|
|
rewards = db.get_monster_rewards(m.id)
|
|
mc = monster_carves.get(m.name)
|
|
print "===", m.name
|
|
for r in rewards:
|
|
condition = r["condition"]
|
|
if "Carve" not in condition:
|
|
continue
|
|
if mc and condition in mc:
|
|
stack_size = mc[condition]
|
|
elif m["class"] == "Minion":
|
|
stack_size = 1
|
|
elif m["class"] == "Boss":
|
|
if condition == "Body Carve":
|
|
stack_size = 3
|
|
elif condition == "Tail Carve":
|
|
stack_size = 1
|
|
else:
|
|
print "WARN: unknown condition %s.%s" \
|
|
% (m.name, condition)
|
|
else:
|
|
assert False, "Unknown monster class: %s" % m["class"]
|
|
if r["stack_size"] == stack_size:
|
|
continue
|
|
print " ", condition, r["stack_size"], "=>", stack_size
|
|
cur = db.cursor()
|
|
cur.execute("""UPDATE hunting_rewards
|
|
SET stack_size=? WHERE _id=?""",
|
|
(stack_size, r["_id"]))
|
|
|
|
|
|
def load_carves_json():
|
|
carves_json_path = os.path.join(db_path, "carves.json")
|
|
with open(carves_json_path) as f:
|
|
carves_list = json.load(f)
|
|
monster_carves = {}
|
|
for carves in carves_list:
|
|
for monster_name in carves["monsters"]:
|
|
monster_carves[monster_name] = carves["carves"]
|
|
return monster_carves
|
|
|
|
|
|
if __name__ == '__main__':
|
|
db_file = os.path.join(db_path, "mh4u.db")
|
|
db = MHDB(db_file)
|
|
|
|
import sys
|
|
sys.stdout = get_utf8_writer(sys.stdout)
|
|
sys.stderr = get_utf8_writer(sys.stderr)
|
|
monster_carves = load_carves_json()
|
|
set_carve_counts(db, monster_carves)
|
|
db.commit()
|
|
db.close()
|