mh4u: show wyp trade mouse over in planner
This commit is contained in:
@@ -14,7 +14,7 @@ from mhapi import model
|
||||
|
||||
ENTITIES = """item weapon monster armor
|
||||
skilltree skill decoration
|
||||
horn_melody""".split()
|
||||
horn_melody wyporium""".split()
|
||||
|
||||
def parse_args(argv=None):
|
||||
parser = argparse.ArgumentParser(description=
|
||||
@@ -23,6 +23,7 @@ def parse_args(argv=None):
|
||||
parser.add_argument("-o", "--outpath",
|
||||
help="output base directory, defaults to web/jsonapi/"
|
||||
" in project root")
|
||||
parser.add_argument("-g", "--game", help="game, one of 4u, gu, gen")
|
||||
parser.add_argument("entities", nargs="*",
|
||||
help=", ".join(ENTITIES))
|
||||
return parser.parse_args(argv)
|
||||
@@ -68,6 +69,12 @@ def write_all_file(path, all_data):
|
||||
json.dump(all_data, f, cls=model.ModelJSONEncoder, indent=2)
|
||||
|
||||
|
||||
def write_map_file(path, map_data):
|
||||
map_path = os.path.join(path, "_map.json")
|
||||
with open(map_path, "w") as f:
|
||||
json.dump(map_data, f, cls=model.ModelJSONEncoder, indent=2)
|
||||
|
||||
|
||||
def monster_json(db, path):
|
||||
monsters = db.get_monsters()
|
||||
mkdirs_p(path)
|
||||
@@ -219,10 +226,14 @@ def weapon_json(db, path):
|
||||
|
||||
|
||||
def item_json(db, path):
|
||||
if db.game == "4u":
|
||||
items = db.get_items(wyporium=True)
|
||||
else:
|
||||
items = db.get_items()
|
||||
mkdirs_p(path)
|
||||
write_list_file(path, items)
|
||||
|
||||
|
||||
indexes = {}
|
||||
for item in items:
|
||||
item_path = file_path(path, item)
|
||||
@@ -233,6 +244,21 @@ def item_json(db, path):
|
||||
write_index_file(path, indexes)
|
||||
|
||||
|
||||
def wyporium_json(db, path):
|
||||
trade_map = {}
|
||||
for item in db.get_wyporium_trades():
|
||||
trade_map[item.id] = dict(id=item.id,
|
||||
name=item.name)
|
||||
all_data = item.as_data()
|
||||
for k in all_data.keys():
|
||||
if not k.startswith("wyporium"):
|
||||
continue
|
||||
trade_map[item.id][k] = all_data[k]
|
||||
print trade_map
|
||||
mkdirs_p(path)
|
||||
write_map_file(path, trade_map)
|
||||
|
||||
|
||||
def horn_melody_json(db, path):
|
||||
# only 143 rows, just do index with all data
|
||||
melodies = db.get_horn_melodies()
|
||||
@@ -246,10 +272,10 @@ def horn_melody_json(db, path):
|
||||
|
||||
|
||||
def main():
|
||||
db = MHDB(include_item_components=True)
|
||||
|
||||
args = parse_args()
|
||||
|
||||
db = MHDB(game=args.game, include_item_components=True)
|
||||
|
||||
if not args.outpath:
|
||||
args.outpath = os.path.join(_pathfix.web_path, "jsonapi")
|
||||
|
||||
@@ -261,6 +287,9 @@ def main():
|
||||
else:
|
||||
args.entities = ENTITIES
|
||||
|
||||
if db.game != "4u":
|
||||
args.entities.remove("wyporium")
|
||||
|
||||
for entity in args.entities:
|
||||
fn = globals()["%s_json" % entity]
|
||||
fn(db, os.path.join(args.outpath, entity))
|
||||
|
||||
37
mhapi/db.py
37
mhapi/db.py
@@ -157,22 +157,30 @@ class MHDB(object):
|
||||
WHERE type IN (%s)
|
||||
""" % placeholders, tuple(args), model_cls=field_model("name"))
|
||||
|
||||
def get_items(self, item_types=None, exclude_types=None):
|
||||
def get_items(self, item_types=None, exclude_types=None, wyporium=False):
|
||||
"""
|
||||
List of item objects.
|
||||
"""
|
||||
q = "SELECT * FROM items"
|
||||
fields = ["items.*"]
|
||||
where = []
|
||||
args = []
|
||||
if item_types:
|
||||
item_types = sorted(item_types)
|
||||
placeholders = ", ".join(["?"] * len(item_types))
|
||||
q += "\nWHERE type IN (%s)" % placeholders
|
||||
where.append("WHERE type IN (%s)" % placeholders)
|
||||
args.extend(item_types)
|
||||
if exclude_types:
|
||||
exclude_types = sorted(exclude_types)
|
||||
placeholders = ", ".join(["?"] * len(exclude_types))
|
||||
q += "\nWHERE type NOT IN (%s)" % placeholders
|
||||
where.append("WHERE type NOT IN (%s)" % placeholders)
|
||||
args.extend(exclude_types)
|
||||
if wyporium:
|
||||
where.append("LEFT JOIN wyporium AS w ON w.item_in_id = items._id")
|
||||
where.append(
|
||||
"LEFT JOIN items AS wi ON w.item_out_id = wi._id")
|
||||
fields += ["w.item_out_id AS wyporium_item_id",
|
||||
"wi.name AS wyporium_item_name"]
|
||||
q = "SELECT " + ", ".join(fields) + " FROM items " + "\n".join(where)
|
||||
args = tuple(args)
|
||||
return self._query_all("items", q, args, model_cls=model.Item)
|
||||
|
||||
@@ -205,6 +213,27 @@ class MHDB(object):
|
||||
WHERE item_in_id=?
|
||||
""", (item_id,))
|
||||
|
||||
def get_wyporium_trades(self):
|
||||
"""
|
||||
Single wyporium row or None.
|
||||
"""
|
||||
if self.game != "4u":
|
||||
return None
|
||||
return self._query_all("wyporium", """
|
||||
SELECT items.*,
|
||||
wyporium.item_out_id AS wyporium_item_id,
|
||||
trade_items.name AS wyporium_item_name,
|
||||
quests._id AS wyporium_quest_id,
|
||||
quests.name AS wyporium_quest_name,
|
||||
quests.hub AS wyporium_quest_hub,
|
||||
quests.stars AS wyporium_quest_stars,
|
||||
quests.rank AS wyporium_quest_rank
|
||||
FROM wyporium
|
||||
JOIN items ON items._id = wyporium.item_in_id
|
||||
JOIN items AS trade_items ON trade_items._id = wyporium.item_out_id
|
||||
JOIN quests ON wyporium.unlock_quest_id == quests._id
|
||||
""", model_cls=model.Item)
|
||||
|
||||
def search_item_name(self, term, item_type=None):
|
||||
"""
|
||||
Search for items containing @term somewhere in the name. Returns
|
||||
|
||||
@@ -654,6 +654,15 @@ class ItemStars(object):
|
||||
self.db = db
|
||||
self._item_stars = {} # item id -> stars dict
|
||||
self._weapon_stars = {} # weapon id -> stars dict
|
||||
self._wyporium_trades = {}
|
||||
|
||||
if self.db.game == "4u":
|
||||
self.init_wyporium_trades()
|
||||
|
||||
def init_wyporium_trades(self):
|
||||
trades = self.db.get_wyporium_trades()
|
||||
for item in trades:
|
||||
self._wyporium_trades[item.id] = item
|
||||
|
||||
def get_weapon_stars(self, weapon):
|
||||
"""
|
||||
@@ -724,7 +733,10 @@ class ItemStars(object):
|
||||
item = self.db.get_item(row["item_id"])
|
||||
if "Scrap" in item.name:
|
||||
continue
|
||||
stars = self.get_item_stars(item.id)
|
||||
istars = self.get_item_stars(item.id)
|
||||
for k, v in stars.items():
|
||||
if istars[k] > v:
|
||||
stars[k] = istars[k]
|
||||
break
|
||||
self._item_stars[material_item_id] = stars
|
||||
return stars
|
||||
@@ -737,6 +749,16 @@ class ItemStars(object):
|
||||
stars = dict(Village=None, Guild=None, Permit=None, Arena=None,
|
||||
Event=None)
|
||||
|
||||
# for 4u wyporium trade items, use the stars from the unlock quest
|
||||
trade = self._wyporium_trades.get(item_id)
|
||||
if trade is not None:
|
||||
hub = trade.wyporium_quest_hub
|
||||
if hub == "Caravan":
|
||||
hub = "Village"
|
||||
stars[hub] = trade.wyporium_quest_stars
|
||||
self._item_stars[item_id] = stars
|
||||
return stars
|
||||
|
||||
quests = self.db.get_item_quests(item_id)
|
||||
|
||||
gathering = self.db.get_item_gathering(item_id)
|
||||
|
||||
@@ -86,10 +86,23 @@
|
||||
|
||||
<script type="text/javascript">
|
||||
var DATA_PATH = "/jsonapi/mh4u/";
|
||||
var WYPORIUM_MAP = {};
|
||||
|
||||
var template_path = new EJS({ url: "/templates/weaponpath.ejs" });
|
||||
var template_stats = new EJS({ url: "/templates/weaponstats.ejs" });
|
||||
|
||||
$.ajax({
|
||||
url: DATA_PATH + "wyporium/_map.json",
|
||||
async: false,
|
||||
dataType: "json",
|
||||
success: function (data) {
|
||||
$.each(data, function(id, item) {
|
||||
WYPORIUM_MAP[item["name"]] = item["wyporium_item_name"];
|
||||
});
|
||||
console.log("wyporium count " + WYPORIUM_MAP.length);
|
||||
}
|
||||
});
|
||||
|
||||
$(document).ready(function(){
|
||||
setup_weapon_autocomplete("#weapon", autocomplete_predicate,
|
||||
init_page, update_search);
|
||||
@@ -234,6 +247,16 @@
|
||||
}
|
||||
path["delta"] = delta;
|
||||
path["component_list"].sort();
|
||||
path["trade_names"] = [];
|
||||
for (j=0; j<all_components.length; j++) {
|
||||
var name = all_components[j];
|
||||
if (name in WYPORIUM_MAP) {
|
||||
path["trade_names"][j] = WYPORIUM_MAP[name];
|
||||
} else {
|
||||
path["trade_names"][j] = "";
|
||||
}
|
||||
}
|
||||
|
||||
var html = template_path.render(path);
|
||||
$("#results").append(html);
|
||||
}
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
<td class="<%= delta[all_components[i]] < 0 ? 'plus' :
|
||||
delta[all_components[i]] > 0 ? 'minus' :
|
||||
'neutral' %>"
|
||||
<%if (trade_names[i]) { %>
|
||||
title="<%= trade_names[i] %>"
|
||||
<% } %>
|
||||
><a href="recommends.html?item=<%=
|
||||
encodeURIComponent(all_components[i]) %>"
|
||||
><%= all_components[i] %></a></td>
|
||||
|
||||
Reference in New Issue
Block a user