add bow data to weapon search
This commit is contained in:
109
web/js/common.js
109
web/js/common.js
@@ -236,6 +236,69 @@ function set_sharpness_titles(weapon_data) {
|
||||
}
|
||||
|
||||
|
||||
function set_bow_values(weapon_data) {
|
||||
if (weapon_data["wtype"] != "Bow") {
|
||||
return;
|
||||
}
|
||||
|
||||
// translate mh4u data to be consistant with mhx data
|
||||
if (weapon_data["charges"]) {
|
||||
var charges = weapon_data["charges"].split("|");
|
||||
var parts;
|
||||
var shot;
|
||||
var shot_types = [];
|
||||
$.each(charges, function(i, charge) {
|
||||
shot = {};
|
||||
parts = charge.split(" ");
|
||||
shot["type"] = parts[0];
|
||||
shot["level"] = parts[1][1];
|
||||
shot["requires_loading"] = parts[1].endsWith("*");
|
||||
shot_types.push(shot);
|
||||
});
|
||||
weapon_data["shot_types"] = shot_types;
|
||||
|
||||
var coatings = weapon_data["coatings"].split("|");
|
||||
var parts;
|
||||
var coating;
|
||||
var ammo_list = [];
|
||||
$.each(coatings, function(i, coating) {
|
||||
if (coating != "-") {
|
||||
ammo_list.push(coating);
|
||||
}
|
||||
});
|
||||
weapon_data["ammo"] = ammo_list;
|
||||
|
||||
weapon_data["arc_type"] = weapon_data["recoil"];
|
||||
}
|
||||
|
||||
var shots_text = [];
|
||||
var shot_text;
|
||||
$.each(weapon_data["shot_types"], function(i, shot) {
|
||||
shot_text = shot["type"].substring(0, 1) + shot["level"];
|
||||
if (shot["requires_loading"]) {
|
||||
shot_text = "(" + shot_text + ")";
|
||||
}
|
||||
shots_text.push(shot_text);
|
||||
});
|
||||
weapon_data["bow_shots_text"] = shots_text.join(" ");
|
||||
|
||||
var coatings_text = [];
|
||||
var coating_text;
|
||||
$.each(weapon_data["ammo"], function(i, coating) {
|
||||
if (coating.startsWith("Power ")) {
|
||||
coating_text = "P" + coating.substring(6, 7);
|
||||
} else if (coating.startsWith("Element ")) {
|
||||
coating_text = "E" + coating.substring(8, 9);
|
||||
} else {
|
||||
coating_text = coating.substring(0, 3);
|
||||
}
|
||||
coatings_text.push(coating_text);
|
||||
});
|
||||
|
||||
weapon_data["bow_coatings_text"] = coatings_text.join(" ");
|
||||
}
|
||||
|
||||
|
||||
function set_horn_melodies_title(weapon_data) {
|
||||
if (! weapon_data["horn_notes"]) {
|
||||
weapon_data["horn_melodies_title"] = ""
|
||||
@@ -310,3 +373,49 @@ function get_calculating_palico_uri(setups) {
|
||||
var base = "http://minyoung.ch/calculatingpalico/?m=31&s=";
|
||||
return base + encodeURIComponent(JSON.stringify(setups));
|
||||
}
|
||||
|
||||
|
||||
function get_weapon_sort_values(weapon_data) {
|
||||
// Note: javascript does string coersion when comparing lists,
|
||||
// so this can't be used directly, see cmp_arrays.
|
||||
var sharp_reverse;
|
||||
if (weapon_data["sharpness"]) {
|
||||
sharp_reverse = Array.prototype.slice.call(weapon_data["sharpness"]);
|
||||
sharp_reverse.reverse();
|
||||
} else {
|
||||
sharp_reverse = null;
|
||||
}
|
||||
|
||||
return [
|
||||
weapon_data["attack"],
|
||||
sharp_reverse,
|
||||
weapon_data["element_attack"],
|
||||
weapon_data["affinity"],
|
||||
weapon_data["num_slots"],
|
||||
weapon_data["defense"]
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
function cmp_arrays(alist, blist) {
|
||||
var cmp;
|
||||
for (var i=0; i<alist.length; i++) {
|
||||
a = alist[i];
|
||||
b = blist[i];
|
||||
if (a == null && b == null) {
|
||||
// ignore
|
||||
} else if (typeof a == "object") {
|
||||
cmp = cmp_arrays(a, b);
|
||||
if (cmp != 0) {
|
||||
return cmp;
|
||||
}
|
||||
} else {
|
||||
if (a < b) {
|
||||
return -1;
|
||||
} else if (a > b) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -184,12 +184,6 @@
|
||||
var final_only = state["weapon_final"];
|
||||
var weapon_names = state["weapon_name_text"].split("|");
|
||||
|
||||
if (weapon_type == "Bow" || weapon_type == "Light Bowgun"
|
||||
|| weapon_type == "Heavy Bowgun") {
|
||||
// we only support blademaster weapons for now
|
||||
return false;
|
||||
}
|
||||
|
||||
if (final_only && weapon_data["final"] != 1) {
|
||||
return false;
|
||||
}
|
||||
@@ -235,13 +229,13 @@
|
||||
function update_weapon_list(state) {
|
||||
var match_count = 0;
|
||||
console.log("updating weapon list: " + JSON.stringify(state));
|
||||
$("#weapon_table").empty();
|
||||
var results = [];
|
||||
$.each(WEAPON_LIST, function(i, weapon_data) {
|
||||
if (weapon_predicate(state, weapon_data)) {
|
||||
weapon_data["id"] = i;
|
||||
match_count += 1;
|
||||
set_sharpness_titles(weapon_data);
|
||||
set_bow_values(weapon_data);
|
||||
set_horn_melodies_title(weapon_data);
|
||||
weapon_data["wtype_short"] =
|
||||
WEAPON_TYPE_ABBR[weapon_data["wtype"]];
|
||||
@@ -251,36 +245,17 @@
|
||||
}
|
||||
});
|
||||
results.sort(function (a, b) {
|
||||
avals = get_sort_values(a[0]);
|
||||
bvals = get_sort_values(b[0]);
|
||||
if (avals > bvals) {
|
||||
return -1;
|
||||
}
|
||||
if (avals < bvals) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
avals = get_weapon_sort_values(a[0]);
|
||||
bvals = get_weapon_sort_values(b[0]);
|
||||
return cmp_arrays(bvals, avals);
|
||||
});
|
||||
$("#weapon_table").empty();
|
||||
$.each(results, function(i, pair) {
|
||||
$("#weapon_table").append(pair[1]);
|
||||
});
|
||||
console.log("match count: " + match_count);
|
||||
|
||||
}
|
||||
|
||||
function get_sort_values(weapon_data) {
|
||||
var sharp_reverse = Array.prototype.slice.call(
|
||||
weapon_data["sharpness"]);
|
||||
sharp_reverse.reverse();
|
||||
return [
|
||||
weapon_data["attack"],
|
||||
sharp_reverse,
|
||||
weapon_data["element_attack"],
|
||||
weapon_data["affinity"],
|
||||
weapon_data["num_slots"],
|
||||
weapon_data["defense"]
|
||||
];
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
@@ -303,8 +278,8 @@
|
||||
<option value="Switch Axe">Switch Axe</option>
|
||||
<option value="Charge Blade">Charge Blade</option>
|
||||
<option value="Insect Glaive">Insect Glaive</option>
|
||||
<option value="Light Bowgun">Light Bowgun</option>
|
||||
<option value="Heavy Bowgun">Heavy Bowgun</option>
|
||||
<!--option value="Light Bowgun">Light Bowgun</option-->
|
||||
<!--option value="Heavy Bowgun">Heavy Bowgun</option-->
|
||||
<option value="Bow">Bow</option>
|
||||
</select></td>
|
||||
<td><label for="weapon_element"
|
||||
|
||||
@@ -65,6 +65,11 @@
|
||||
<td><%= defense ? "+" + defense + " Def" : "" %></td>
|
||||
<td style="text-align:right"><%= phial %></td>
|
||||
<td style="text-align:right"><%= shelling_type %></td>
|
||||
<% if (arc_type) { %>
|
||||
<td style="text-align:right"><%= arc_type %></td>
|
||||
<td style="font-family:mono"
|
||||
title="<%= bow_coatings_text %>"><%= bow_shots_text %></td>
|
||||
<% } %>
|
||||
<td title="<%= horn_melodies_title %>"
|
||||
style="text-align:right"><%= horn_notes %></td>
|
||||
</tr>
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
});
|
||||
|
||||
function init_page() {
|
||||
load_qs();
|
||||
var state = load_qs();
|
||||
$(window).on("popstate", function(e) {
|
||||
var oe = e.originalEvent;
|
||||
if (oe.state !== null) {
|
||||
@@ -132,12 +132,18 @@
|
||||
save_state(state);
|
||||
update_weapon_list(state);
|
||||
});
|
||||
|
||||
if (state) {
|
||||
update_weapon_list(state);
|
||||
}
|
||||
}
|
||||
|
||||
function load_qs() {
|
||||
if ($.QueryString["weapon_type"]) {
|
||||
load_state($.QueryString);
|
||||
return $.QueryString;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function get_ui_state() {
|
||||
@@ -171,12 +177,6 @@
|
||||
var final_only = state["weapon_final"];
|
||||
var weapon_names = state["weapon_name_text"].split("|");
|
||||
|
||||
if (weapon_type == "Bow" || weapon_type == "Light Bowgun"
|
||||
|| weapon_type == "Heavy Bowgun") {
|
||||
// we only support blademaster weapons for now
|
||||
return false;
|
||||
}
|
||||
|
||||
if (final_only && weapon_data["final"] != 1) {
|
||||
return false;
|
||||
}
|
||||
@@ -223,42 +223,56 @@
|
||||
var cp_setups = [];
|
||||
var comps = state["weapon_component_text"].split("|");
|
||||
console.log("updating weapon list: " + JSON.stringify(state));
|
||||
$("#weapon_table").empty();
|
||||
var results = [];
|
||||
$.each(WEAPON_ID_IDX, function(weapon_id, weapon_list) {
|
||||
var weapon_data = weapon_list[0];
|
||||
if (weapon_predicate(state, weapon_data)) {
|
||||
match_count += 1;
|
||||
$.getJSON(DATA_PATH + "weapon/" + weapon_id + ".json",
|
||||
function(data) {
|
||||
if (comps
|
||||
&& !list_match(comps,
|
||||
Object.keys(data["create_components"]))
|
||||
&& !list_match(comps,
|
||||
Object.keys(data["upgrade_components"])))
|
||||
{
|
||||
console.log("skipping '"
|
||||
+ data["name"]
|
||||
+ "', failed component match");
|
||||
return;
|
||||
}
|
||||
set_sharpness_titles(data);
|
||||
set_horn_melodies_title(data);
|
||||
data["wtype_short"] =
|
||||
WEAPON_TYPE_ABBR[data["wtype"]];
|
||||
data["ELEMENT_ABBR"] = ELEMENT_ABBR;
|
||||
data["url"] = null;
|
||||
var html = template_row.render(data);
|
||||
$("#weapon_table").append(html);
|
||||
var setup = get_calculating_palico_setup(data);
|
||||
console.log("setup for " + weapon_id + ": "
|
||||
+ setup);
|
||||
if (setup.length) {
|
||||
cp_setups.push(setup);
|
||||
}
|
||||
update_cp_link(cp_setups);
|
||||
});
|
||||
$.ajax({
|
||||
url: DATA_PATH + "weapon/" + weapon_id + ".json",
|
||||
dataType: "json",
|
||||
async: false,
|
||||
success: function(data) {
|
||||
if (comps
|
||||
&& !list_match(comps,
|
||||
Object.keys(data["create_components"]))
|
||||
&& !list_match(comps,
|
||||
Object.keys(data["upgrade_components"])))
|
||||
{
|
||||
console.log("skipping '" + data["name"]
|
||||
+ "', failed component match");
|
||||
return;
|
||||
}
|
||||
match_count += 1;
|
||||
set_sharpness_titles(data);
|
||||
data["arc_type"] = null;
|
||||
set_bow_values(data);
|
||||
set_horn_melodies_title(data);
|
||||
data["wtype_short"] = WEAPON_TYPE_ABBR[data["wtype"]];
|
||||
data["ELEMENT_ABBR"] = ELEMENT_ABBR;
|
||||
data["url"] = null;
|
||||
var html = template_row.render(data);
|
||||
results.push([data, html]);
|
||||
var setup = get_calculating_palico_setup(data);
|
||||
//console.log("setup for " + weapon_id + ": " + setup);
|
||||
if (setup.length) {
|
||||
cp_setups.push(setup);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
console.log("results len " + results.length);
|
||||
results.sort(function (a, b) {
|
||||
avals = get_weapon_sort_values(a[0]);
|
||||
bvals = get_weapon_sort_values(b[0]);
|
||||
return cmp_arrays(bvals, avals);
|
||||
});
|
||||
$("#weapon_table").empty();
|
||||
$.each(results, function(i, pair) {
|
||||
$("#weapon_table").append(pair[1]);
|
||||
});
|
||||
update_cp_link(cp_setups);
|
||||
|
||||
console.log("match count: " + match_count);
|
||||
|
||||
}
|
||||
@@ -296,8 +310,8 @@
|
||||
<option value="Switch Axe">Switch Axe</option>
|
||||
<option value="Charge Blade">Charge Blade</option>
|
||||
<option value="Insect Glaive">Insect Glaive</option>
|
||||
<option value="Light Bowgun">Light Bowgun</option>
|
||||
<option value="Heavy Bowgun">Heavy Bowgun</option>
|
||||
<!--option value="Light Bowgun">Light Bowgun</option-->
|
||||
<!--option value="Heavy Bowgun">Heavy Bowgun</option-->
|
||||
<option value="Bow">Bow</option>
|
||||
</select></td>
|
||||
<td><label for="weapon_element"
|
||||
|
||||
Reference in New Issue
Block a user