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()
 |