add id map

This commit is contained in:
b 2021-01-07 02:34:31 -06:00
parent ef96d77b2f
commit 86bd75833e
8 changed files with 10740 additions and 3578 deletions

View file

@ -9,7 +9,7 @@ Damage calculation
- Poison calculations
Skillpoint engine
- Make it work...
- Make it work... DONE! SURPRISINGLY!
Build encoding
- Allow exporting/importing builds to strings

10635
clean.json

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -107,6 +107,14 @@ delete_keys = [
"material"
]
import os
if os.path.exists("id_map.json"):
with open("id_map.json","r") as id_mapfile:
id_map = json.load(id_mapfile)
else:
id_map = {item["name"]: i for i, item in enumerate(items)}
for item in items:
for key in delete_keys:
if key in item:
@ -117,9 +125,16 @@ for item in items:
item[v] = item[k]
del item[k]
if not (item["name"] in id_map):
id_ma[item["name"]] = len(id_map)
print(f'New item: {item["name"]}')
item["id"] = id_map[item["name"]]
item["type"] = item["type"].lower()
with open("id_map.json","w") as id_mapfile:
json.dump(id_map, id_mapfile, indent=2)
with open("clean.json", "w") as outfile:
outfile.write(json.dumps(data, indent=2))
json.dump(data, outfile, indent=2)
with open("compress.json", "w") as outfile:
outfile.write(json.dumps(data))
json.dump(data, outfile)

3547
id_map.json Normal file

File diff suppressed because it is too large Load diff

View file

@ -5,7 +5,14 @@ function calculate_skillpoints(equipment, weapon) {
let fixed = [];
let consider = [];
let noboost = [];
let has_skillpoint = [false, false, false, false, false];
for (const item of equipment) {
for (let i = 0; i < 5; ++i) {
if (item.reqs[i] > 0) {
has_skillpoint[i] = true;
}
}
if (item.reqs.every(x => x === 0)) {
fixed.push(item);
}
@ -30,10 +37,14 @@ function calculate_skillpoints(equipment, weapon) {
// Figure out (naively) how many skillpoints need to be applied to get the current item to fit.
// Doesn't handle -skp.
function apply_to_fit(skillpoints, item) {
function apply_to_fit(skillpoints, item, skillpoint_filter) {
let applied = [0, 0, 0, 0, 0];
let total = 0;
for (let i = 0; i < 5; i++) {
if (item.skillpoints[i] < 0 && skillpoint_filter[i]) {
applied[i] -= item.skillpoints[i];
total -= item.skillpoints[i];
}
if (item.reqs[i] == 0) continue;
const req = item.reqs[i];
const cur = skillpoints[i];
@ -73,7 +84,7 @@ function calculate_skillpoints(equipment, weapon) {
let needed_skillpoints;
let total_diff;
for (const item of permutation) {
result = apply_to_fit(skillpoints, item);
result = apply_to_fit(skillpoints, item, has_skillpoint);
needed_skillpoints = result[0];
total_diff = result[1];
@ -87,32 +98,32 @@ function calculate_skillpoints(equipment, weapon) {
break;
}
}
if (total_applied < best_total) {
console.log(total_applied);
console.log(skillpoints_applied);
console.log("Iteration 2");
for (const item of permutation) {
console.log(item);
remove_skillpoints(skillpoints, item);
console.log(skillpoints);
result = apply_to_fit(skillpoints, item);
needed_skillpoints = result[0];
total_diff = result[1];
for (let i = 0; i < 5; ++i) {
skillpoints_applied[i] += needed_skillpoints[i];
skillpoints[i] += needed_skillpoints[i];
}
apply_skillpoints(skillpoints, item);
console.log(skillpoints);
console.log(total_diff);
total_applied += total_diff;
if (total_applied >= best_total) {
break;
}
}
}
// if (total_applied < best_total) {
// console.log(total_applied);
// console.log(skillpoints_applied);
// console.log("Iteration 2");
// for (const item of permutation) {
// console.log(item);
//
// remove_skillpoints(skillpoints, item);
// console.log(skillpoints);
// result = apply_to_fit(skillpoints, item, has_skillpoint);
// needed_skillpoints = result[0];
// total_diff = result[1];
// for (let i = 0; i < 5; ++i) {
// skillpoints_applied[i] += needed_skillpoints[i];
// skillpoints[i] += needed_skillpoints[i];
// }
//
// apply_skillpoints(skillpoints, item);
// console.log(skillpoints);
// console.log(total_diff);
// total_applied += total_diff;
// if (total_applied >= best_total) {
// break;
// }
// }
// }
result = apply_to_fit(skillpoints, weapon);
needed_skillpoints = result[0];
total_diff = result[1];

View file

@ -179,7 +179,12 @@ function calculateBuild(){
);
console.log(player_build.toString());
player_build.equip_order;
let equip_order_text = "Equip order: <br>";
for (const item of player_build.equip_order) {
equip_order_text += item.displayName + "<br>";
}
setHTML("build-order", equip_order_text);
player_build.base_skillpoints;
let skillpoints = player_build.total_skillpoints;
setValue("str-skp", skillpoints[0]);
@ -190,6 +195,7 @@ function calculateBuild(){
console.log(skillpoints);
player_build.assigned_skillpoints;
setHTML("summary-box", "Summary: Assigned " + player_build.assigned_skillpoints + " skillpoints.");
setHTML("build-helmet", player_build.helmet.name);

View file

@ -29,3 +29,41 @@ function setHTML(id, html) {
function setValue(id, value) {
document.getElementById(id).value = value;
}
// Base 64 encoding tools
// https://stackoverflow.com/a/27696695
Base64 = (function () {
var digitsStr =
// 0 8 16 24 32 40 48 56 63
// v v v v v v v v v
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+-";
var digits = digitsStr.split('');
var digitsMap = {};
for (var i = 0; i < digits.length; i++) {
digitsMap[digits[i]] = i;
}
return {
fromInt: function(int32) {
var result = '';
while (true) {
result = digits[int32 & 0x3f] + result;
int32 >>>= 6;
if (int32 === 0)
break;
}
return result;
},
toInt: function(digitsStr) {
var result = 0;
var digits = digitsStr.split('');
for (var i = 0; i < digits.length; i++) {
result = (result << 6) + digitsMap[digits[i]];
}
return result;
}
};
})();
// Base64.fromInt(-2147483648); // gives "200000"
// Base64.toInt("200000"); // gives -2147483648