add weapon tree compare tool
This commit is contained in:
77
bin/mhweaponbuild.py
Executable file
77
bin/mhweaponbuild.py
Executable file
@@ -0,0 +1,77 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
import argparse
|
||||
import json
|
||||
|
||||
import _pathfix
|
||||
|
||||
from mhapi.db import MHDB
|
||||
from mhapi.model import ModelJSONEncoder
|
||||
|
||||
|
||||
def parse_args(argv):
|
||||
parser = argparse.ArgumentParser(description=
|
||||
"Determine the different paths for making a weapons and the cost"
|
||||
" and parts required for each path."
|
||||
)
|
||||
parser.add_argument("-j", "--json", action="store_true",
|
||||
default=False,
|
||||
help="output as json instead of plaintext")
|
||||
parser.add_argument("weapon",
|
||||
help="Full name of weapon")
|
||||
return parser.parse_args(argv)
|
||||
|
||||
|
||||
def get_costs(db, weapon):
|
||||
"""
|
||||
Get a list of alternative ways of making a weapon, as a list of dicts
|
||||
containing item counts. The dicts also contain special keys _zenny
|
||||
for the total zenny needed, and _path for a list of weapons that
|
||||
make up the upgrade path.
|
||||
"""
|
||||
costs = []
|
||||
if weapon.parent_id:
|
||||
parent_weapon = db.get_weapon(weapon.parent_id, True)
|
||||
costs = get_costs(db, parent_weapon)
|
||||
for cost in costs:
|
||||
for item in weapon.upgrade_components:
|
||||
if item.type == "Weapon":
|
||||
continue
|
||||
if item.name not in cost["components"]:
|
||||
cost["components"][item.name] = 0
|
||||
cost["components"][item.name] += item.quantity
|
||||
cost["zenny"] += weapon.upgrade_cost
|
||||
cost["path"] += [weapon]
|
||||
if weapon.creation_cost:
|
||||
create_cost = dict(zenny=weapon.creation_cost,
|
||||
path=[weapon],
|
||||
components={})
|
||||
for item in weapon.create_components:
|
||||
create_cost["components"][item.name] = item.quantity
|
||||
costs = [create_cost] + costs
|
||||
return costs
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
args = parse_args(None)
|
||||
|
||||
db = MHDB()
|
||||
|
||||
weapon = db.get_weapon_by_name(args.weapon, True)
|
||||
if not weapon:
|
||||
raise ValueError("Weapon '%s' not found" % name)
|
||||
costs = get_costs(db, weapon)
|
||||
if args.json:
|
||||
for cost in costs:
|
||||
cost["path"] = [dict(name=w.name, id=w.id)
|
||||
for w in cost["path"]]
|
||||
json.dump(costs, sys.stdout, cls=ModelJSONEncoder, indent=2)
|
||||
else:
|
||||
for cost in costs:
|
||||
components = cost["components"]
|
||||
print "=", ", ".join([w.name for w in cost["path"]])
|
||||
print " Zenny", cost["zenny"]
|
||||
for item_name in sorted(components.iterkeys()):
|
||||
print "%20s %2d" % (item_name, components[item_name])
|
||||
print
|
||||
Reference in New Issue
Block a user