Merge branch 'atree' into atree-validation-fix
This commit is contained in:
commit
5e43db7a49
11 changed files with 3377 additions and 1655 deletions
3028
clean.json
3028
clean.json
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
|
@ -8,7 +8,7 @@ The game, of course
|
|||
Additional Contributors, in no particular order:
|
||||
- Kiocifer (Icons!)
|
||||
- IncinerateMe (helping transition to 1.20.3 / CI helper)
|
||||
- puppy (wynn2 ability tree help)
|
||||
- puppy (dog)
|
||||
- SockMower (ability tree encode/decode optimization)
|
||||
- ITechnically (coding emotional support / misc)
|
||||
- touhoku (best IM)
|
||||
|
|
28
js/atree.js
28
js/atree.js
|
@ -166,6 +166,7 @@ const atree_node = new (class extends ComputeNode {
|
|||
}
|
||||
node.parents = parents;
|
||||
}
|
||||
console.log(atree_map);
|
||||
|
||||
let atree_topo_sort = [];
|
||||
topological_sort_tree(atree_head, atree_topo_sort, new Map());
|
||||
|
@ -492,22 +493,24 @@ const atree_collect_spells = new (class extends ComputeNode {
|
|||
let ret_spells = new Map();
|
||||
for (const [abil_id, abil] of atree_merged.entries()) {
|
||||
// TODO: Possibly, make a better way for detecting "spell abilities"?
|
||||
if (abil.effects.length == 0) { continue; }
|
||||
|
||||
let ret_spell = deepcopy(abil.effects[0]); // NOTE: do not mutate results of previous steps!
|
||||
let has_spell_def = false;
|
||||
for (const effect of abil.effects) {
|
||||
if (effect.type === 'replace_spell') {
|
||||
has_spell_def = true;
|
||||
// replace_spell just replaces all (defined) aspects.
|
||||
for (const key in effect) {
|
||||
ret_spell[key] = deepcopy(effect[key]);
|
||||
const ret_spell = ret_spells.get(effect.base_spell);
|
||||
if (ret_spell) {
|
||||
// NOTE: do not mutate results of previous steps!
|
||||
for (const key in effect) {
|
||||
ret_spell[key] = deepcopy(effect[key]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
ret_spells.set(effect.base_spell, deepcopy(effect));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!has_spell_def) { continue; }
|
||||
}
|
||||
|
||||
const base_spell_id = ret_spell.base_spell;
|
||||
for (const [abil_id, abil] of atree_merged.entries()) {
|
||||
for (const effect of abil.effects) {
|
||||
switch (effect.type) {
|
||||
case 'replace_spell':
|
||||
|
@ -515,7 +518,7 @@ const atree_collect_spells = new (class extends ComputeNode {
|
|||
continue;
|
||||
case 'add_spell_prop': {
|
||||
const { base_spell, target_part = null, cost = 0, behavior = 'merge'} = effect;
|
||||
if (base_spell !== base_spell_id) { continue; } // TODO: redundant? if we assume abils only affect one spell
|
||||
const ret_spell = ret_spells.get(base_spell);
|
||||
// TODO: unjankify this... if ('cost' in ret_spell) { ret_spell.cost += cost; }
|
||||
|
||||
if (target_part === null) {
|
||||
|
@ -537,7 +540,7 @@ const atree_collect_spells = new (class extends ComputeNode {
|
|||
for (const [idx, v] of Object.entries(effect.hits)) { // looks kinda similar to multipliers case... hmm... can we unify all of these three? (make healpower a list)
|
||||
if (idx in part.hits) { part.hits[idx] += v; }
|
||||
else { part.hits[idx] = v; }
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
throw "uhh invalid spell add effect";
|
||||
|
@ -558,7 +561,7 @@ const atree_collect_spells = new (class extends ComputeNode {
|
|||
}
|
||||
case 'convert_spell_conv':
|
||||
const { base_spell, target_part, conversion } = effect;
|
||||
if (base_spell !== base_spell_id) { continue; } // TODO: redundant? if we assume abils only affect one spell
|
||||
const ret_spell = ret_spells.get(base_spell);
|
||||
const elem_idx = damageClasses.indexOf(conversion);
|
||||
let filter = target_part === 'all';
|
||||
for (let part of ret_spell.parts) { // TODO: replace with Map? to avoid this linear search... idk prolly good since its not more verbose to type in json
|
||||
|
@ -577,7 +580,6 @@ const atree_collect_spells = new (class extends ComputeNode {
|
|||
continue;
|
||||
}
|
||||
}
|
||||
ret_spells.set(base_spell_id, ret_spell);
|
||||
}
|
||||
return ret_spells;
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
|
@ -1,146 +0,0 @@
|
|||
{
|
||||
"Archer": {
|
||||
"Arrow Shield": 0,
|
||||
"Escape": 1,
|
||||
"Arrow Bomb": 2,
|
||||
"Heart Shatter": 3,
|
||||
"Fire Creep": 4,
|
||||
"Bryophyte Roots": 5,
|
||||
"Nimble String": 6,
|
||||
"Arrow Storm": 7,
|
||||
"Guardian Angels": 8,
|
||||
"Windy Feet": 9,
|
||||
"Basaltic Trap": 10,
|
||||
"Windstorm": 11,
|
||||
"Grappling Hook": 12,
|
||||
"Implosion": 13,
|
||||
"Twain's Arc": 14,
|
||||
"Fierce Stomp": 15,
|
||||
"Scorched Earth": 16,
|
||||
"Leap": 17,
|
||||
"Shocking Bomb": 18,
|
||||
"Mana Trap": 19,
|
||||
"Escape Artist": 20,
|
||||
"Initiator": 21,
|
||||
"Call of the Hound": 22,
|
||||
"Arrow Hurricane": 23,
|
||||
"Geyser Stomp": 24,
|
||||
"Crepuscular Ray": 25,
|
||||
"Grape Bomb": 26,
|
||||
"Tangled Traps": 27,
|
||||
"Snow Storm": 28,
|
||||
"All-Seeing Panoptes": 29,
|
||||
"Minefield": 30,
|
||||
"Bow Proficiency I": 31,
|
||||
"Cheaper Arrow Bomb": 32,
|
||||
"Cheaper Arrow Storm": 33,
|
||||
"Cheaper Escape": 34,
|
||||
"Earth Mastery": 35,
|
||||
"Thunder Mastery": 36,
|
||||
"Water Mastery": 37,
|
||||
"Air Mastery": 38,
|
||||
"Fire Mastery": 39,
|
||||
"More Shields": 40,
|
||||
"Stormy Feet": 41,
|
||||
"Refined Gunpowder": 42,
|
||||
"More Traps": 43,
|
||||
"Better Arrow Shield": 44,
|
||||
"Better Leap": 45,
|
||||
"Better Guardian Angels": 46,
|
||||
"Cheaper Arrow Storm (2)": 47,
|
||||
"Precise Shot": 48,
|
||||
"Cheaper Arrow Shield": 49,
|
||||
"Rocket Jump": 50,
|
||||
"Cheaper Escape (2)": 51,
|
||||
"Stronger Hook": 52,
|
||||
"Cheaper Arrow Bomb (2)": 53,
|
||||
"Bouncing Bomb": 54,
|
||||
"Homing Shots": 55,
|
||||
"Shrapnel Bomb": 56,
|
||||
"Elusive": 57,
|
||||
"Double Shots": 58,
|
||||
"Triple Shots": 59,
|
||||
"Power Shots": 60,
|
||||
"Focus": 61,
|
||||
"More Focus": 62,
|
||||
"More Focus (2)": 63,
|
||||
"Traveler": 64,
|
||||
"Patient Hunter": 65,
|
||||
"Stronger Patient Hunter": 66,
|
||||
"Frenzy": 67,
|
||||
"Phantom Ray": 68,
|
||||
"Arrow Rain": 69,
|
||||
"Decimator": 70
|
||||
},
|
||||
"Warrior": {
|
||||
"Bash": 0,
|
||||
"Spear Proficiency 1": 1,
|
||||
"Cheaper Bash": 2,
|
||||
"Double Bash": 3,
|
||||
"Charge": 4,
|
||||
"Heavy Impact": 5,
|
||||
"Vehement": 6,
|
||||
"Tougher Skin": 7,
|
||||
"Uppercut": 8,
|
||||
"Cheaper Charge": 9,
|
||||
"War Scream": 10,
|
||||
"Earth Mastery": 11,
|
||||
"Thunder Mastery": 12,
|
||||
"Water Mastery": 13,
|
||||
"Air Mastery": 14,
|
||||
"Fire Mastery": 15,
|
||||
"Quadruple Bash": 16,
|
||||
"Fireworks": 17,
|
||||
"Half-Moon Swipe": 18,
|
||||
"Flyby Jab": 19,
|
||||
"Flaming Uppercut": 20,
|
||||
"Iron Lungs": 21,
|
||||
"Generalist": 22,
|
||||
"Counter": 23,
|
||||
"Mantle of the Bovemists": 24,
|
||||
"Bak'al's Grasp": 25,
|
||||
"Spear Proficiency 2": 26,
|
||||
"Cheaper Uppercut": 27,
|
||||
"Aerodynamics": 28,
|
||||
"Provoke": 29,
|
||||
"Precise Strikes": 30,
|
||||
"Air Shout": 31,
|
||||
"Enraged Blow": 32,
|
||||
"Flying Kick": 33,
|
||||
"Stronger Mantle": 34,
|
||||
"Manachism": 35,
|
||||
"Boiling Blood": 36,
|
||||
"Ragnarokkr": 37,
|
||||
"Ambidextrous": 38,
|
||||
"Burning Heart": 39,
|
||||
"Stronger Bash": 40,
|
||||
"Intoxicating Blood": 41,
|
||||
"Comet": 42,
|
||||
"Collide": 43,
|
||||
"Rejuvenating Skin": 44,
|
||||
"Uncontainable Corruption": 45,
|
||||
"Radiant Devotee": 46,
|
||||
"Whirlwind Strike": 47,
|
||||
"Mythril Skin": 48,
|
||||
"Armour Breaker": 49,
|
||||
"Shield Strike": 50,
|
||||
"Sparkling Hope": 51,
|
||||
"Massive Bash": 52,
|
||||
"Tempest": 53,
|
||||
"Spirit of the Rabbit": 54,
|
||||
"Massacre": 55,
|
||||
"Axe Kick": 56,
|
||||
"Radiance": 57,
|
||||
"Cheaper Bash 2": 58,
|
||||
"Cheaper War Scream": 59,
|
||||
"Discombobulate": 60,
|
||||
"Thunderclap": 61,
|
||||
"Cyclone": 62,
|
||||
"Second Chance": 63,
|
||||
"Blood Pact": 64,
|
||||
"Haemorrhage": 65,
|
||||
"Brink of Madness": 66,
|
||||
"Cheaper Uppercut 2": 67,
|
||||
"Martyr": 68
|
||||
}
|
||||
}
|
|
@ -236,7 +236,7 @@ class ItemInputDisplayNode extends ComputeNode {
|
|||
this.input_field.classList.add("is-invalid");
|
||||
return null;
|
||||
}
|
||||
if (item.statMap.has('powders')) {
|
||||
if (this.powder_field && item.statMap.has('powders')) {
|
||||
this.powder_field.placeholder = "powders";
|
||||
}
|
||||
|
||||
|
@ -244,7 +244,7 @@ class ItemInputDisplayNode extends ComputeNode {
|
|||
return null;
|
||||
}
|
||||
|
||||
if (item.statMap.has('powders')) {
|
||||
if (this.powder_field && item.statMap.has('powders')) {
|
||||
this.powder_field.placeholder = item.statMap.get('slots') + ' slots';
|
||||
}
|
||||
|
||||
|
@ -945,7 +945,7 @@ class SkillPointSetterNode extends ComputeNode {
|
|||
class SumNumberInputNode extends InputNode {
|
||||
compute_func(input_map) {
|
||||
let value = this.input_field.value;
|
||||
if (value === "") { value = 0; }
|
||||
if (value === "") { value = "0"; }
|
||||
|
||||
let input_num = 0;
|
||||
if (value.includes("+")) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
const DB_VERSION = 93;
|
||||
const DB_VERSION = 94;
|
||||
// @See https://github.com/mdn/learning-area/blob/master/javascript/apis/client-side-storage/indexeddb/video-store/index.jsA
|
||||
|
||||
let db;
|
||||
|
|
|
@ -19,5 +19,62 @@
|
|||
{"name":"Breakthrough","type":"bracelet","level":105,"tier":"Fabled","majorIds":[],"intelligence":45,"agility":45,"strengthPoints":-4,"dexterityPoints":-4,"defensePoints":-6,"earthDefense":-45,"thunderDefense":-45,"fireDefense":-30,"sdPct-base":13,"sdRaw-base":75,"ms-base":6,"spRaw2-base":-4,"category":"accessory","displayName":"Breakthrough","spellDamage":13,"spellDamageRaw":75,"manaSteal":6,"spellCostRaw2":-4,"identified":false},
|
||||
{"name":"Detachment","type":"bracelet","level":105,"tier":"Fabled","majorIds":[],"dexterity":55,"agility":60,"thunderDefense":60,"airDefense":60,"mdRaw-base":-85,"sdRaw-base":-65,"spd-base":13,"spPct4-base":-13,"category":"accessory","displayName":"Detachment","damageBonusRaw":-85,"spellDamageRaw":-65,"speed":13,"spellCostPct4":-13,"identified":false},
|
||||
{"name":"Exhibition","type":"necklace","level":105,"tier":"Fabled","majorIds":[],"intelligence":80,"earthDefense":-30,"thunderDefense":-30,"waterDefense":60,"fireDefense":-30,"airDefense":-30,"mr-base":-4,"spRaw1-base":-2,"spRaw2-base":-2,"spRaw3-base":-2,"spRaw4-base":-2,"category":"accessory","displayName":"Exhibition","manaRegen":-4,"spellCostRaw1":-2,"spellCostRaw2":-2,"spellCostRaw3":-2,"spellCostRaw4":-2,"identified":false},
|
||||
{"name":"Simulacrum","type":"necklace","level":105,"tier":"Fabled","majorIds":[],"strength":55,"defense":45,"health":-800,"earthDefense":-70,"fireDefense":-90,"sdRaw-base":150,"hprRaw-base":-150,"mr-base":5,"spd-base":8,"category":"accessory","displayName":"Simulacrum","spellDamageRaw":150,"healthRegenRaw":-150,"manaRegen":5,"speed":8,"identified":false}
|
||||
{"name":"Simulacrum","type":"necklace","level":105,"tier":"Fabled","majorIds":[],"strength":55,"defense":45,"health":-800,"earthDefense":-70,"fireDefense":-90,"sdRaw-base":150,"hprRaw-base":-150,"mr-base":5,"spd-base":8,"category":"accessory","displayName":"Simulacrum","spellDamageRaw":150,"healthRegenRaw":-150,"manaRegen":5,"speed":8,"identified":false},
|
||||
{"name":"Medeis","type":"chestplate","level":100,"tier":"Unique","sockets":3,"majorIds":[],"dexterity":40,"intelligence":40,"defense":40,"dexterityPoints":10,"intelligencePoints":10,"defensePoints":10,"health":2950,"earthDefense":-100,"thunderDefense":75,"waterDefense":75,"fireDefense":75,"airDefense":-100,"tDamPct-base":8,"wDamPct-base":8,"fDamPct-base":8,"sdPct-base":8,"category":"armor","displayName":"Medeis","bonusEarthDamage":-75,"bonusThunderDamage":8,"bonusWaterDamage":8,"bonusFireDamage":8,"bonusAirDamage":-75,"spellDamage":8,"identified":false},
|
||||
{"name":"Roulette","type":"dagger","level":79,"tier":"Rare","majorIds":[],"dexterity":40,"dexterityPoints":8,"damage":"0-0","earthDamage":"0-0","thunderDamage":"0-58","waterDamage":"0-0","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"SUPER_FAST","category":"weapon","displayName":"Roulette","basedps":29,"bonusThunderDamage":888,"xpBonus":8,"lootBonus":8,"identified":false},
|
||||
{"name":"Prowess","type":"bracelet","level":100,"tier":"Legendary","majorIds":[],"quest":"The Qira Hive","strengthPoints":4,"dexterityPoints":4,"intelligencePoints":4,"defensePoints":4,"agilityPoints":4,"health":425,"category":"accessory","displayName":"Prowess","identified":true},
|
||||
{"name":"Caesura","type":"helmet","level":93,"tier":"Unique","sockets":2,"majorIds":[],"strength":45,"dexterity":60,"intelligence":30,"strengthPoints":10,"intelligencePoints":15,"health":2450,"earthDefense":100,"thunderDefense":100,"waterDefense":-250,"category":"armor","displayName":"Caesura","bonusEarthDamage":25,"bonusThunderDamage":25,"spellDamage":10,"spellDamageRaw":231,"manaRegen":-15,"manaSteal":-15,"identified":false},
|
||||
{"name":"Gigabyte","type":"necklace","level":93,"tier":"Legendary","strengthPoints":4,"dexterityPoints":4,"intelligencePoints":4,"defensePoints":4,"agilityPoints":4,"health":-512,"mr-base":-4,"identified":true,"category":"accessory","displayName":"Gigabyte","healthRegenRaw":48,"manaRegen":-4,"thorns":8,"speed":8},
|
||||
{"name":"Pro Tempore","type":"boots","level":88,"tier":"Unique","sockets":4,"majorIds":[],"dexterity":40,"intelligence":50,"intelligencePoints":10,"health":2350,"thunderDefense":-50,"waterDefense":-50,"sdRaw-base":104,"category":"armor","displayName":"Pro Tempore","spellDamage":20,"spellDamageRaw":104,"manaRegen":10,"manaSteal":-15,"lifeSteal":165,"identified":false},
|
||||
{"name":"Orange Lily","type":"bow","level":96,"tier":"Legendary","sockets":3,"strength":50,"intelligence":60,"damage":"75-140","earthDamage":"165-235","thunderDamage":"0-0","waterDamage":"165-235","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"SLOW","identified":true,"category":"weapon","displayName":"Orange Lily","basedps":507.5,"bonusEarthDamage":20,"bonusWaterDamage":20,"bonusAirDamage":-150,"bonusAirDefense":-100,"manaRegen":10,"spellCostRaw3":-5,"spellCostRaw4":50},
|
||||
{"name":"Brainwash","type":"helmet","level":96,"tier":"Rare","majorIds":[],"strength":40,"dexterity":70,"strengthPoints":13,"intelligencePoints":-50,"health":2800,"earthDefense":70,"thunderDefense":100,"waterDefense":-220,"mr-base":10,"ms-base":15,"category":"armor","displayName":"Brainwash","bonusThunderDamage":15,"bonusWaterDamage":-30,"spellDamage":10,"spellDamageRaw":190,"healthRegen":-40,"manaRegen":10,"manaSteal":15,"identified":false},
|
||||
{"name":"Second Wind","type":"leggings","level":83,"tier":"Fabled","sockets":3,"majorIds":[],"defense":65,"agility":40,"agilityPoints":20,"health":6325,"earthDefense":-350,"thunderDefense":-350,"fireDefense":120,"airDefense":120,"ls-base":-475,"category":"armor","displayName":"Second Wind","attackSpeedBonus":1,"healthRegen":-30,"lifeSteal":-475,"speed":20,"identified":false},
|
||||
{"name":"Cumulonimbus","type":"helmet","level":94,"tier":"Rare","sockets":3,"majorIds":[],"dexterity":30,"intelligence":30,"agility":30,"dexterityPoints":10,"intelligencePoints":10,"agilityPoints":10,"health":1800,"thunderDefense":70,"waterDefense":70,"airDefense":70,"sdPct-base":15,"category":"armor","displayName":"Cumulonimbus","bonusThunderDamage":10,"bonusWaterDamage":10,"bonusAirDamage":10,"spellDamage":15,"speed":25,"identified":false},
|
||||
{"name":"Morrowind","type":"wand","level":96,"tier":"Legendary","sockets":3,"majorIds":[],"agility":45,"agilityPoints":14,"damage":"30-60","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"0-0","airDamage":"45-135","attackSpeed":"FAST","sdRaw-base":145,"category":"weapon","displayName":"Morrowind","basedps":135,"bonusEarthDamage":-15,"bonusAirDamage":23,"spellDamageRaw":145,"bonusAirDefense":23,"reflection":46,"speed":23,"identified":false},
|
||||
{"name": "Anima-Infused Helmet", "displayName":"Boreal-Patterned Crown","type":"helmet","level":100,"tier":"Legendary","sockets":2,"quest":"The Qira Hive","dexterity":40,"intelligence":40,"agility":40,"strengthPoints":-30,"defensePoints":-30,"health":3000,"thunderDefense":150,"waterDefense":150,"airDefense":150,"identified":true,"category":"armor","displayName":"Boreal-Patterned Crown","bonusThunderDamage":25,"bonusWaterDamage":25,"bonusAirDamage":25,"damageBonus":-40,"spellDamage":20,"spellDamageRaw":300,"bonusThunderDefense":10,"bonusWaterDefense":10,"bonusAirDefense":10,"manaRegen":8},
|
||||
{"name":"Corsair","type":"helmet","level":99,"tier":"Unique","sockets":2,"majorIds":[],"dexterity":55,"agility":35,"dexterityPoints":8,"health":2900,"earthDefense":-140,"thunderDefense":80,"airDefense":110,"ms-base":5,"spPct1-base":-10,"spPct4-base":-14,"category":"armor","displayName":"Corsair","bonusThunderDamage":10,"bonusAirDamage":12,"manaSteal":5,"speed":11,"spellCostPct1":-10,"spellCostPct4":-14,"emeraldStealing":4,"identified":false},
|
||||
{"name":"Scaldsteppers","type":"boots","level":90,"tier":"Unique","sockets":2,"majorIds":[],"intelligence":40,"defense":30,"intelligencePoints":7,"health":2325,"thunderDefense":-100,"waterDefense":110,"fireDefense":80,"airDefense":-90,"spRaw3-base":-4,"category":"armor","displayName":"Scaldsteppers","bonusWaterDamage":10,"bonusFireDamage":10,"bonusAirDamage":-12,"spellDamage":20,"exploding":10,"spellCostRaw3":-4,"identified":false},
|
||||
{"name":"Charging Flame","type":"spear","level":94,"tier":"Rare","sockets":2,"majorIds":[],"intelligence":40,"defense":40,"damage":"20-40","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"40-120","fireDamage":"20-140","airDamage":"0-0","attackSpeed":"NORMAL","mr-base":5,"spRaw2-base":-12,"category":"weapon","displayName":"Charging Flame","basedps":190,"bonusWaterDamage":12,"bonusFireDamage":12,"damageBonus":12,"spellDamage":12,"healthBonus":-1200,"bonusThunderDefense":-25,"manaRegen":5,"exploding":24,"spellCostRaw2":-12,"identified":false},
|
||||
{"name":"Aphotic","type":"helmet","level":98,"tier":"Legendary","sockets":2,"majorIds":[],"intelligence":100,"dexterityPoints":-80,"intelligencePoints":5,"health":3200,"thunderDefense":-150,"waterDefense":150,"spRaw3-base":-7,"category":"armor","displayName":"Aphotic","spellDamage":50,"attackSpeedBonus":-6,"spellCostRaw3":-7,"identified":false},
|
||||
{"name":"Silent Ballet","type":"relik","level":83,"tier":"Unique","majorIds":[],"strength":40,"agility":40,"damage":"0-0","earthDamage":"110-121","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"0-0","airDamage":"110-121","attackSpeed":"FAST","category":"weapon","displayName":"Silent Ballet","basedps":231,"damageBonus":40,"spellDamage":-40000,"spellDamageRaw":-40000,"spellCostPct1":-40,"spellCostPct2":-40,"spellCostPct3":-40,"spellCostPct4":-40,"spellCostRaw1":-40,"spellCostRaw2":-40,"spellCostRaw3":-40,"spellCostRaw4":-40,"identified":false},
|
||||
{"name":"Rhythm of the Seasons","type":"spear","level":100,"tier":"Fabled","sockets":2,"majorIds":["RALLY"],"strength":80,"defense":60,"defensePoints":12,"damage":"40-50","earthDamage":"100-140","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"VERY_FAST","mr-base":15,"category":"weapon","displayName":"Rhythm of the Seasons","basedps":165,"bonusWaterDamage":25,"healthBonus":1800,"healthRegenRaw":-660,"manaRegen":15,"identified":false},
|
||||
{"name":"Sorrow","type":"chestplate","level":72,"tier":"Rare","sockets":1,"intelligence":95,"health":1400,"thunderDefense":-150,"waterDefense":150,"identified":true,"category":"armor","displayName":"Sorrow","bonusWaterDamage":42,"spellDamage":8,"manaRegen":5,"manaSteal":-20,"spellCostRaw1":-8,"soulPoints":20},
|
||||
{"name":"Condensation","type":"boots","level":87,"tier":"Unique","majorIds":[],"intelligence":75,"intelligencePoints":10,"health":2000,"thunderDefense":-120,"waterDefense":100,"spRaw3-base":-6,"category":"armor","displayName":"Condensation","damageBonus":-30,"spellDamage":30,"bonusThunderDefense":-20,"spellCostRaw3":-6,"identified":false},
|
||||
{"name":"Augoeides","type":"chestplate","level":63,"tier":"Rare","majorIds":[],"intelligence":65,"health":1000,"earthDefense":20,"thunderDefense":20,"waterDefense":20,"fireDefense":20,"airDefense":20,"mr-base":5,"spRaw3-base":-5,"category":"armor","displayName":"Augoeides","damageBonusRaw":-52,"manaRegen":5,"reflection":30,"spellCostRaw3":-5,"xpBonus":5,"lootBonus":8,"soulPoints":10,"identified":false},
|
||||
{"name":"Matryoshka Shell","type":"chestplate","level":55,"tier":"Legendary","sockets":18,"majorIds":[],"strength":10,"dexterity":10,"intelligence":10,"defense":10,"agility":10,"health":550,"earthDefense":50,"thunderDefense":50,"waterDefense":50,"fireDefense":50,"airDefense":50,"spRaw1-base":-5,"category":"armor","displayName":"Matryoshka Shell","bonusEarthDefense":20,"bonusThunderDefense":20,"bonusWaterDefense":20,"bonusFireDefense":20,"bonusAirDefense":20,"speed":10,"spellCostRaw1":-5,"xpBonus":20,"lootBonus":20,"identified":false},
|
||||
{"name":"Pure","type":"wand","level":65,"tier":"Mythic","majorIds":["ENTROPY"],"intelligence":50,"agility":30,"damage":"0-5","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"20-45","fireDamage":"0-0","airDamage":"15-55","attackSpeed":"FAST","ms-base":30,"spRaw3-base":6,"category":"weapon","displayName":"Pure","basedps":70,"damageBonus":-100,"spellDamage":400,"manaSteal":30,"reflection":20,"spellCostRaw3":6,"xpBonus":30,"identified":false},
|
||||
{"name":"Resurgence","type":"boots","level":91,"tier":"Mythic","sockets":4,"majorIds":[],"intelligence":65,"defense":90,"intelligencePoints":25,"health":4550,"waterDefense":175,"fireDefense":125,"mr-base":30,"category":"armor","displayName":"Resurgence","damageBonus":-45,"spellDamage":-35,"healthRegenRaw":390,"manaRegen":30,"speed":-14,"soulPoints":20,"identified":false},
|
||||
{"name":"Galleon","type":"boots","level":92,"tier":"Mythic","sockets":3,"majorIds":[],"strength":65,"intelligence":60,"health":4500,"earthDefense":200,"waterDefense":250,"airDefense":-175,"ms-base":20,"category":"armor","displayName":"Galleon","bonusEarthDamage":36,"bonusWaterDamage":36,"damageBonus":45,"attackSpeedBonus":-1,"poison":4231,"manaSteal":20,"emeraldStealing":15,"lootBonus":20,"identified":false},
|
||||
{"name":"Boreal","type":"boots","level":93,"tier":"Mythic","sockets":3,"majorIds":[],"defense":75,"agility":65,"health":5000,"fireDefense":250,"airDefense":375,"mr-base":10,"category":"armor","displayName":"Boreal","bonusEarthDamage":-75,"bonusThunderDamage":-75,"bonusFireDefense":50,"bonusAirDefense":50,"healthRegen":100,"healthRegenRaw":269,"manaRegen":10,"reflection":25,"speed":25,"identified":false},
|
||||
{"name":"Freedom","type":"bow","level":93,"tier":"Mythic","sockets":4,"majorIds":[],"strength":40,"dexterity":40,"intelligence":40,"defense":40,"agility":40,"agilityPoints":30,"damage":"0-0","earthDamage":"85-109","thunderDamage":"45-149","waterDamage":"65-129","fireDamage":"75-119","airDamage":"55-139","attackSpeed":"NORMAL","mr-base":10,"category":"weapon","displayName":"Freedom","basedps":485,"damageBonusRaw":111,"spellDamageRaw":111,"healthBonus":1000,"manaRegen":10,"speed":15,"identified":false},
|
||||
{"name":"Olympic","type":"relik","level":93,"tier":"Mythic","sockets":3,"majorIds":[],"agility":105,"agilityPoints":25,"damage":"0-0","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"0-0","airDamage":"345-375","attackSpeed":"FAST","spRaw1-base":-10,"spRaw2-base":-10,"category":"weapon","displayName":"Olympic","basedps":360,"bonusAirDamage":20,"bonusAirDefense":30,"jumpHeight":6,"speed":35,"spellCostRaw1":-10,"spellCostRaw2":-10,"identified":false},
|
||||
{"name":"Guardian","type":"spear","level":93,"tier":"Mythic","sockets":3,"majorIds":["GUARDIAN"],"defense":110,"defensePoints":20,"damage":"50-90","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"165-205","airDamage":"0-0","attackSpeed":"NORMAL","category":"weapon","displayName":"Guardian","basedps":255,"healthBonus":6000,"bonusEarthDefense":20,"bonusWaterDefense":20,"bonusFireDefense":20,"healthRegenRaw":585,"manaRegen":1,"thorns":25,"identified":false},
|
||||
{"name":"Hadal","type":"relik","level":94,"tier":"Mythic","sockets":3,"majorIds":[],"intelligence":130,"damage":"0-0","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"1750-2150","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"SUPER_SLOW","mr-base":30,"spPct3-base":112,"spPct4-base":112,"category":"weapon","displayName":"Hadal","basedps":1950,"spellDamage":75,"manaRegen":30,"spellCostPct3":112,"spellCostPct4":112,"identified":false},
|
||||
{"name":"Nullification","type":"dagger","level":95,"tier":"Mythic","sockets":3,"majorIds":[],"strength":30,"dexterity":30,"intelligence":30,"defense":30,"agility":30,"defensePoints":40,"damage":"0-0","earthDamage":"60-66","thunderDamage":"22-104","waterDamage":"46-80","fireDamage":"36-90","airDamage":"28-98","attackSpeed":"FAST","ms-base":16,"category":"weapon","displayName":"Nullification","basedps":315,"poison":-7000,"bonusEarthDefense":143,"bonusThunderDefense":143,"bonusWaterDefense":143,"bonusFireDefense":143,"bonusAirDefense":143,"manaSteal":16,"lifeSteal":495,"reflection":80,"identified":false},
|
||||
{"name":"Idol","type":"spear","level":95,"tier":"Mythic","sockets":3,"majorIds":[],"intelligence":120,"intelligencePoints":26,"damage":"0-0","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"230-330","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"NORMAL","mr-base":10,"spRaw2-base":-50,"category":"weapon","displayName":"Idol","basedps":280,"spellDamageRaw":264,"bonusWaterDefense":15,"manaRegen":10,"reflection":30,"spellCostRaw2":-50,"soulPoints":25,"identified":false},
|
||||
{"name":"Dawnbreak","type":"boots","level":96,"tier":"Mythic","sockets":2,"majorIds":[],"dexterity":65,"defense":65,"health":4225,"thunderDefense":200,"waterDefense":-125,"fireDefense":200,"airDefense":-125,"ms-base":12,"category":"armor","displayName":"Dawnbreak","bonusThunderDamage":27,"bonusFireDamage":27,"damageBonusRaw":2700,"attackSpeedBonus":-20,"manaSteal":12,"lifeSteal":350,"exploding":23,"identified":false},
|
||||
{"name":"Cataclysm","type":"dagger","level":96,"tier":"Mythic","sockets":3,"majorIds":[],"dexterity":120,"dexterityPoints":20,"damage":"40-140","earthDamage":"0-0","thunderDamage":"45-305","waterDamage":"0-0","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"SUPER_FAST","category":"weapon","displayName":"Cataclysm","basedps":265,"bonusThunderDamage":17,"healthBonus":-6000,"thorns":21,"spellCostRaw1":-1,"emeraldStealing":5,"identified":false},
|
||||
{"name":"Grimtrap","type":"dagger","level":96,"tier":"Mythic","sockets":3,"majorIds":[],"strength":100,"strengthPoints":15,"damage":"175-235","earthDamage":"305-425","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"SLOW","ms-base":-10,"spRaw4-base":-10,"category":"weapon","displayName":"Grimtrap","basedps":570,"poison":2000,"manaSteal":-10,"lifeSteal":650,"thorns":70,"spellCostRaw2":1,"spellCostRaw4":-10,"identified":false},
|
||||
{"name":"Weathered","type":"dagger","level":96,"tier":"Mythic","sockets":3,"majorIds":["ROVINGASSASSIN"],"agility":110,"agilityPoints":15,"damage":"40-80","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"0-0","airDamage":"140-230","attackSpeed":"VERY_FAST","ms-base":16,"category":"weapon","displayName":"Weathered","basedps":245,"bonusAirDamage":20,"attackSpeedBonus":1,"manaSteal":16,"reflection":25,"exploding":-50,"speed":25,"identified":false},
|
||||
{"name":"Thrundacrack","type":"spear","level":96,"tier":"Mythic","sockets":4,"majorIds":[],"dexterity":105,"dexterityPoints":35,"damage":"50-90","earthDamage":"0-0","thunderDamage":"50-220","waterDamage":"0-0","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"VERY_FAST","spRaw3-base":-6,"category":"weapon","displayName":"Thrundacrack","basedps":205,"bonusThunderDamage":25,"bonusWaterDamage":60,"healthRegen":-60,"speed":9,"spellCostRaw3":-6,"identified":false},
|
||||
{"name":"Lament","type":"wand","level":96,"tier":"Mythic","sockets":3,"majorIds":[],"intelligence":110,"intelligencePoints":20,"damage":"70-90","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"180-190","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"SLOW","ms-base":40,"spPct1-base":-35,"category":"weapon","displayName":"Lament","basedps":265,"bonusWaterDamage":80,"manaSteal":40,"lifeSteal":-500,"spellCostPct1":-35,"identified":false},
|
||||
{"name":"Toxoplasmosis","type":"relik","level":96,"tier":"Mythic","sockets":2,"majorIds":[],"strength":110,"strengthPoints":40,"damage":"0-0","earthDamage":"3-3","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"VERY_FAST","ms-base":18,"category":"weapon","displayName":"Toxoplasmosis","basedps":3,"poison":10000,"manaSteal":18,"lifeSteal":500,"speed":20,"lootBonus":20,"identified":false},
|
||||
{"name":"Stardew","type":"boots","level":97,"tier":"Mythic","sockets":2,"majorIds":[],"dexterity":65,"intelligence":75,"health":4075,"earthDefense":-100,"thunderDefense":150,"waterDefense":150,"fireDefense":-100,"airDefense":-100,"mr-base":-9,"ms-base":15,"category":"armor","displayName":"Stardew","bonusThunderDamage":35,"bonusWaterDamage":35,"spellDamageRaw":313,"manaRegen":-9,"manaSteal":15,"reflection":25,"identified":false},
|
||||
{"name":"Divzer","type":"bow","level":97,"tier":"Mythic","sockets":3,"majorIds":[],"dexterity":115,"dexterityPoints":37,"defensePoints":-39,"agilityPoints":-550,"damage":"48-50","earthDamage":"0-0","thunderDamage":"250-250","waterDamage":"0-0","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"SUPER_FAST","ms-base":30,"category":"weapon","displayName":"Divzer","basedps":299,"bonusWaterDamage":-550,"bonusFireDamage":-550,"damageBonusRaw":536,"spellDamageRaw":253,"attackSpeedBonus":1,"manaSteal":30,"lifeSteal":973,"identified":false},
|
||||
{"name":"Inferno","type":"dagger","level":97,"tier":"Mythic","sockets":3,"majorIds":[],"defense":105,"defensePoints":15,"damage":"0-0","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"855-1045","airDamage":"0-0","attackSpeed":"VERY_SLOW","category":"weapon","displayName":"Inferno","basedps":950,"bonusFireDamage":35,"damageBonus":25,"damageBonusRaw":560,"healthBonus":1500,"bonusWaterDefense":-40,"healthRegen":-45,"manaRegen":-1,"speed":25,"spellCostRaw1":-1,"identified":false},
|
||||
{"name":"Nirvana","type":"dagger","level":97,"tier":"Mythic","sockets":3,"majorIds":["ARCANES"],"intelligence":110,"intelligencePoints":40,"damage":"0-0","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"320-385","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"NORMAL","mr-base":10,"ms-base":-20,"category":"weapon","displayName":"Nirvana","basedps":352.5,"damageBonus":-80,"spellDamage":25,"healthBonus":-2000,"manaRegen":10,"manaSteal":-20,"reflection":15,"identified":false},
|
||||
{"name":"Collapse","type":"spear","level":97,"tier":"Mythic","sockets":3,"majorIds":["FISSION"],"strength":35,"dexterity":35,"intelligence":35,"defense":35,"agility":35,"strengthPoints":45,"damage":"40-65","earthDamage":"0-310","thunderDamage":"0-310","waterDamage":"0-310","fireDamage":"0-310","airDamage":"0-310","attackSpeed":"VERY_SLOW","ms-base":18,"category":"weapon","displayName":"Collapse","basedps":827.5,"damageBonus":50,"bonusEarthDefense":-65,"bonusThunderDefense":-65,"bonusWaterDefense":-65,"bonusFireDefense":-65,"bonusAirDefense":-65,"manaSteal":18,"exploding":250,"identified":false},
|
||||
{"name":"Gaia","type":"wand","level":97,"tier":"Mythic","sockets":3,"majorIds":[],"strength":105,"strengthPoints":25,"damage":"150-220","earthDamage":"380-490","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"VERY_SLOW","spRaw4-base":-9,"category":"weapon","displayName":"Gaia","basedps":620,"damageBonus":15,"damageBonusRaw":575,"spellDamageRaw":-275,"poison":2500,"thorns":15,"spellCostRaw4":-9,"identified":false},
|
||||
{"name":"Absolution","type":"relik","level":97,"tier":"Mythic","majorIds":[],"defense":115,"damage":"0-0","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"195-205","airDamage":"0-0","attackSpeed":"SUPER_FAST","mr-base":16,"spRaw1-base":-20,"category":"weapon","displayName":"Absolution","basedps":200,"bonusWaterDamage":200,"bonusFireDamage":20,"healthBonus":3000,"bonusEarthDefense":45,"bonusThunderDefense":45,"manaRegen":16,"spellCostRaw1":-20,"soulPoints":23,"identified":false},
|
||||
{"name":"Spring","type":"bow","level":98,"tier":"Mythic","sockets":3,"majorIds":[],"intelligence":120,"strengthPoints":15,"dexterityPoints":-40,"intelligencePoints":15,"damage":"150-185","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"200-310","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"NORMAL","mr-base":30,"category":"weapon","displayName":"Spring","basedps":422.5,"bonusThunderDamage":-50,"bonusWaterDamage":20,"manaRegen":30,"identified":false},
|
||||
{"name":"Monster","type":"wand","level":98,"tier":"Mythic","sockets":3,"majorIds":[],"defense":110,"defensePoints":40,"damage":"110-140","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"160-220","airDamage":"0-0","attackSpeed":"SLOW","ms-base":10,"spRaw1-base":4,"category":"weapon","displayName":"Monster","basedps":315,"bonusFireDamage":25,"damageBonus":40,"healthBonus":3000,"manaSteal":10,"lifeSteal":500,"spellCostRaw1":4,"identified":false},
|
||||
{"name":"Revenant","type":"boots","level":99,"tier":"Mythic","sockets":3,"majorIds":[],"strength":70,"agility":70,"health":7000,"earthDefense":70,"airDefense":70,"ms-base":10,"spPct4-base":-28,"category":"armor","displayName":"Revenant","bonusEarthDamage":40,"bonusAirDamage":40,"damageBonus":-70,"damageBonusRaw":520,"healthBonus":-2500,"manaSteal":10,"reflection":120,"speed":40,"spellCostPct4":-28,"identified":false},
|
||||
{"name":"Fatal","type":"wand","level":99,"tier":"Mythic","sockets":3,"majorIds":[],"dexterity":110,"dexterityPoints":25,"damage":"0-0","earthDamage":"0-0","thunderDamage":"1-360","waterDamage":"0-0","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"VERY_FAST","spPct1-base":28,"spPct2-base":-49,"category":"weapon","displayName":"Fatal","basedps":180.5,"spellDamage":25,"manaSteal":1,"speed":15,"spellCostPct1":28,"spellCostPct2":-49,"identified":false},
|
||||
{"name":"Warp","type":"wand","level":99,"tier":"Mythic","sockets":3,"majorIds":[],"agility":130,"agilityPoints":20,"damage":"40-70","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"0-0","airDamage":"190-220","attackSpeed":"VERY_FAST","mr-base":-49,"spRaw1-base":4,"spRaw2-base":-299,"category":"weapon","displayName":"Warp","basedps":260,"bonusAirDamage":15,"healthRegen":-200,"healthRegenRaw":-600,"manaRegen":-49,"reflection":90,"exploding":50,"speed":180,"spellCostRaw1":4,"spellCostRaw2":-299,"identified":false},
|
||||
{"name":"Oblivion","type":"dagger","level":101,"tier":"Mythic","sockets":4,"majorIds":[],"dexterity":75,"intelligence":65,"dexterityPoints":15,"damage":"1-200","earthDamage":"0-0","thunderDamage":"600-999","waterDamage":"600-999","fireDamage":"0-0","airDamage":"0-0","attackSpeed":"SUPER_SLOW","mr-base":-30,"ms-base":15,"spRaw2-base":-20,"category":"weapon","displayName":"Oblivion","basedps":1699.5,"spellDamageRaw":265,"manaRegen":-30,"manaSteal":15,"exploding":40,"spellCostRaw2":-20,"soulPoints":40,"identified":false},
|
||||
{"name":"Epoch","type":"bow","level":102,"tier":"Mythic","sockets":3,"majorIds":[],"dexterity":70,"agility":70,"damage":"500-620","earthDamage":"0-0","thunderDamage":"480-640","waterDamage":"0-0","fireDamage":"0-0","airDamage":"520-600","attackSpeed":"SUPER_SLOW","sdPct-base":40,"category":"weapon","displayName":"Epoch","basedps":1680,"damageBonusRaw":769,"spellDamage":40,"manaSteal":-1,"lifeSteal":825,"speed":-20,"sprint":70,"spellCostRaw1":-1,"spellCostRaw4":-1,"identified":false},
|
||||
{"name":"Fantasia","type":"relik","level":96,"tier":"Mythic","sockets":3,"majorIds":[],"strength":45,"dexterity":45,"intelligence":45,"defense":45,"agility":45,"intelligencePoints":50,"damage":"0-0","earthDamage":"200-340","thunderDamage":"260-280","waterDamage":"230-310","fireDamage":"215-325","airDamage":"245-295","attackSpeed":"VERY_SLOW","spPct1-base":-27,"spPct2-base":-27,"spPct3-base":-27,"spPct4-base":-27,"category":"weapon","displayName":"Fantasia","basedps":1350,"spellDamage":30,"manaRegen":-4,"manaSteal":-4,"spellCostPct1":-27,"spellCostPct2":-27,"spellCostPct3":-27,"spellCostPct4":-27,"identified":false},
|
||||
{"name":"Slayer","type":"boots","level":94,"tier":"Mythic","sockets":2,"majorIds":[],"dexterity":75,"agility":60,"dexterityPoints":20,"health":3775,"waterDefense":-100,"spPct3-base":-30,"category":"armor","displayName":"Slayer","damageBonusRaw":285,"attackSpeedBonus":1,"healthRegenRaw":-270,"speed":27,"spellCostPct3":-30,"emeraldStealing":10,"identified":false},
|
||||
{"name":"Immolation","type":"relik","level":101,"tier":"Mythic","sockets":3,"majorIds":[],"defense":80,"agility":80,"defensePoints":50,"agilityPoints":50,"damage":"0-0","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"0-0","fireDamage":"200-440","airDamage":"310-330","attackSpeed":"SLOW","spPct3-base":-14,"category":"weapon","displayName":"Immolation","basedps":640,"bonusWaterDamage":-1000,"bonusFireDamage":45,"bonusAirDamage":45,"healthBonus":-2750,"healthRegen":-180,"spellCostPct3":-14,"identified":false},
|
||||
{"name":"Convergence","type":"spear","level":104,"tier":"Mythic","sockets":3,"majorIds":[],"intelligence":65,"defense":75,"damage":"70-90","earthDamage":"0-0","thunderDamage":"0-0","waterDamage":"100-120","fireDamage":"105-115","airDamage":"0-0","attackSpeed":"NORMAL","spPct3-base":-45,"category":"weapon","displayName":"Convergence","basedps":300,"bonusEarthDamage":55,"bonusThunderDamage":55,"bonusAirDefense":35,"healthRegen":43,"sprintRegen":43,"spellCostPct3":-45,"identified":false}
|
||||
]}
|
||||
|
|
|
@ -58,6 +58,11 @@ mul_keys = {
|
|||
"ms": 50
|
||||
}
|
||||
|
||||
def round_near(x, eps=1e-5):
|
||||
if x - round(x) < eps:
|
||||
return round(x)
|
||||
return x
|
||||
|
||||
remap_items = []
|
||||
#old_items_map = dict()
|
||||
import math
|
||||
|
@ -67,7 +72,7 @@ for item in old_items:
|
|||
# SUPER JANKY ROUNDING
|
||||
tentimes = round(item[k] * v)
|
||||
rem = tentimes % 10
|
||||
val = math.floor(round(tentimes / 10))
|
||||
val = math.floor(round_near(tentimes / 10))
|
||||
if rem >= 5:
|
||||
val += 1
|
||||
item[k] = val
|
||||
|
|
Loading…
Reference in a new issue