Browse Source

Update readme with URL

master
Brandon Cornejo 4 years ago
parent
commit
2681090f5e
  1. 4
      README.md
  2. 70
      orna-tools.py
  3. 36
      templates/index.html

4
README.md

@ -0,0 +1,4 @@
# OrnaRPG Tools
Equipment combination toolkit
https://orna.atr0phy.net

70
orna-tools.py

@ -1,70 +0,0 @@
from flask import Flask, render_template, jsonify, request
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/results', methods=['POST'])
def results():
combinations = calculate_combinations(request.get_json())
return jsonify(combinations)
# Data Methods
def calculate_combinations(equipment, do_print=True):
# name, defense, resistance
eq_headware = equipment["head"]
eq_chestware = equipment["chest"]
eq_legwear = equipment["legs"]
# Create a list of all possible eq combinations
results = []
for hw in eq_headware:
print('Headware: {}'.format(hw))
for cw in eq_chestware:
print('Chestware: {}'.format(cw))
for lw in eq_legwear:
print('legware: {}'.format(lw))
result = {}
result["eq"] = [hw[0], cw[0], lw[0]]
result["def"] = hw[1] + cw[1] + lw[1]
result["res"] = hw[2] + cw[2] + lw[2]
results.append(result)
# Sort the combinations by combined total of def anf res
results.sort(key=lambda i: i["def"] + i["res"])
if do_print:
for result in results:
print("{} ({} def {} res) -".format(result["def"] + result["res"], result["def"], result["res"]))
for eq in result["eq"]:
print("\t{}".format(eq))
return results
"""
eq_headware = [
["Ljosalfar Hood", 98, 510],
["Kobold Hood", 0, 614],
["Northern Cowl", 584, 130],
["High Fomorian Hood", 487, 112]
]
eq_chestware = [
["Ljosalfar Robe", 121, 528],
["High Fomorian Garb", 544, 0],
["Darkest Garb", 514, 169],
["Northern Garb", 535, 119],
["Northern Robe", 486, 108]
]
eq_legwear = [
["Northern Boots", 636, 142],
["Terra Boots", 129, 369],
["High Fomorian Boots", 516, 0],
["Ljosalfar Boots", 280, 280]
]
"""

36
templates/index.html

@ -24,13 +24,13 @@
</nav> </nav>
<div class="uk-container"> <div class="uk-container">
<div id="help-container" class="uk-padding-large uk-text-center uk-text-muted uk-margin-large-left uk-margin-large-right"> <div id="help-container" class="uk-padding-large uk-text-center uk-text-muted uk-margin-large-left uk-margin-large-right">
<div>Use the three tabs to input your options for each equipment slot (head/chest/leg). Click the calculate button to populate a table with possible combinations. Click on the column headers to sort results. Use the green + to input additional items.</div>
<div>Use the three tabs to input your options for each equipment slot (head/chest/leg). Click the calculate button to populate a table with possible combinations. Click on the column headers to sort results.<br/><br/><strong>Ctrl+Enter</strong> adds a new row to existing table, or use the green <strong>+</strong> to input additional items.</div>
</div> </div>
<div id="equipment-container" class="uk-padding-large"> <div id="equipment-container" class="uk-padding-large">
<ul class="uk-flex-center" uk-tab> <ul class="uk-flex-center" uk-tab>
<li class="uk-active"><a href="">Head</a></li>
<li><a href="">Chest</a></li>
<li><a href="">Leg</a></li>
<li class="uk-active" tbl="head-table"><a href="">Head</a></li>
<li tbl="chest-table"><a href="">Chest</a></li>
<li tbl="leg-table"><a href="">Leg</a></li>
</ul> </ul>
<ul class="uk-switcher"> <ul class="uk-switcher">
{% for slot in ["Head", "Chest", "Leg"] %} {% for slot in ["Head", "Chest", "Leg"] %}
@ -50,9 +50,9 @@
<tbody> <tbody>
<tr> <tr>
<td>1</td> <td>1</td>
<td><input type="text" class="uk-input"/></td>
<td><input type="text" class="uk-input"/></td>
<td><input type="text" class="uk-input"/></td>
<td><input type="text" class="uk-input" autocomplete="off"/></td>
<td><input type="text" class="uk-input" autocomplete="off"/></td>
<td><input type="text" class="uk-input" autocomplete="off"/></td>
<td><a class="uk-icon-button del-row-button" uk-icon="icon:minus-circle;ratio:1"></a></td> <td><a class="uk-icon-button del-row-button" uk-icon="icon:minus-circle;ratio:1"></a></td>
</tr> </tr>
</tbody> </tbody>
@ -97,7 +97,7 @@
</body> </body>
<script> <script>
// Support adding rows to the equipment tables // Support adding rows to the equipment tables
function addEquipmentTableRow() {
function addEquipmentTableRow(findByQuery=false) {
let input_element = document.createElement("input"); let input_element = document.createElement("input");
input_element.className="uk-input"; input_element.className="uk-input";
input_element.type = "text"; input_element.type = "text";
@ -108,7 +108,8 @@
delete_button.setAttribute("uk-icon", "icon:minus-circle;ratio:1"); delete_button.setAttribute("uk-icon", "icon:minus-circle;ratio:1");
delete_button.addEventListener("click", deleteEquipmentTableRow, false); delete_button.addEventListener("click", deleteEquipmentTableRow, false);
let tbody = this.parentElement.previousElementSibling.children[2];
// If called manually, find specific table, otherwise determine based on event element
let tbody = findByQuery ? document.querySelector(findByQuery) : this.parentElement.previousElementSibling.children[2];
let new_row = tbody.insertRow(-1); let new_row = tbody.insertRow(-1);
// Append all of the child cells needed // Append all of the child cells needed
@ -117,6 +118,11 @@
new_row.insertCell(0).appendChild(input_element.cloneNode()); new_row.insertCell(0).appendChild(input_element.cloneNode());
new_row.insertCell(0).appendChild(input_element.cloneNode()); new_row.insertCell(0).appendChild(input_element.cloneNode());
new_row.insertCell(0).appendChild(document.createTextNode(tbody.children.length)) new_row.insertCell(0).appendChild(document.createTextNode(tbody.children.length))
if(findByQuery) {
// If this was a hotkey, then focus the new field
new_row.children[1].firstChild.focus();
}
} }
// Support deleting rows from the equipment table // Support deleting rows from the equipment table
@ -224,6 +230,7 @@
let input_element = document.createElement("input"); let input_element = document.createElement("input");
input_element.className="uk-input"; input_element.className="uk-input";
input_element.type = "text"; input_element.type = "text";
input_element.autocomplete = "off";
// Create the delete button // Create the delete button
let delete_button = document.createElement("a"); let delete_button = document.createElement("a");
@ -271,6 +278,14 @@
} }
} }
function listenForHotkeys(e) {
if(e.ctrlKey && e.which == 13) {
// Determine the active tab
let tbl_id = "table#" + document.querySelector(".uk-active").getAttribute("tbl") + " > tbody";
addEquipmentTableRow(tbl_id);
}
}
// Add event listeners to our table buttons // Add event listeners to our table buttons
const add_row_buttons = document.querySelectorAll("a.add-row-button"); const add_row_buttons = document.querySelectorAll("a.add-row-button");
for(let button of add_row_buttons) { for(let button of add_row_buttons) {
@ -288,6 +303,9 @@
// Enable sorting for our results table // Enable sorting for our results table
var table_sort = new Tablesort(document.querySelector("table#results-table"), {descending: true}); var table_sort = new Tablesort(document.querySelector("table#results-table"), {descending: true});
// Configure keyboard hotkeys
document.onkeyup = listenForHotkeys;
// Load any existing data from LocalStorage // Load any existing data from LocalStorage
loadExistingData(); loadExistingData();
</script> </script>

Loading…
Cancel
Save