added favicon and updated sitemap

This commit is contained in:
Frederik Palmø 2022-04-10 23:53:04 +02:00
parent 4ce5b587f8
commit ea572e7087
8 changed files with 664 additions and 656 deletions

View File

@ -9,6 +9,7 @@
<link rel="stylesheet" href="style/main.css" />
<!-- title and description -->
<title>Erdtree - Armor Optimizer</title>
<link rel="icon" type="image/x-icon " href="/resource/favicon.ico">
<meta name="description"
content="Elden Ring build planner, armor optimizer, weapon finder and more!" />
<meta property="og:title" content="Erdtree Build Planner" />

View File

@ -1,270 +1,276 @@
<!DOCTYPE html>
<html>
<head>
<!-- metadata -->
<meta charset="utf-8" />
<meta name="language" content="english" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="style/main.css" />
<head>
<!-- metadata -->
<meta charset="utf-8" />
<meta name="language" content="english" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="style/main.css" />
<!-- title and description -->
<title>Erdtree - Class Optimizer</title>
<link rel="icon" type="image/x-icon " href="/resource/favicon.ico">
<meta name="description"
content="Elden Ring build planner, armor optimizer, weapon finder and more!" />
<meta property="og:title" content="Erdtree Build Planner" />
<meta property="og:description"
content="Erdtree - Elden Ring build planner, armor optimizer, weapon finder and more!" />
<meta property="og:url" content="https://erdtree.palmoe.dk" />
<!-- scripts -->
<script src="/script/class.js"></script>
</head>
<!-- title and description -->
<title>Erdtree - Class Optimizer</title>
<meta name="description" content="Elden Ring build planner, armor optimizer, weapon finder and more!" />
<meta property="og:title" content="Erdtree Build Planner" />
<meta
property="og:description"
content="Erdtree - Elden Ring build planner, armor optimizer, weapon finder and more!"
/>
<meta property="og:url" content="https://erdtree.palmoe.dk" />
<body onload="init();">
<nav>
<h1><a href="/">Elden Ring Build Planner</a></h1>
<ul>
<a href="/planner.html">Build Planner</a>
</ul>
</nav>
<header>
<h2>Class Optimizer</h2>
</header>
<main>
<div class="app">
<article>
<div>
<b>Class</b>
<input id="best" type="text" disabled />
</div>
<hr />
<template id="class">
<li>
<span></span>
<aside></aside>
</li>
</template>
<div>
<ul id="classes"></ul>
</div>
</article>
<article>
<div>
<b>Level</b>
<div>
<input id="initial-level" type="number" disabled />
<input type="number" style="visibility: hidden"
disabled />
<input id="final-level" type="number" disabled />
<input id="virtual-level" type="number" disabled />
</div>
</div>
<hr />
<div>
<label for="vigor">Vigor</label>
<div>
<input type="number" name="initial" disabled />
<input id="vigor" type="number" name="total" min="0"
max="99" oninput="update()" />
<input type="number" name="final" disabled />
<input type="number" name="virtual" disabled />
</div>
</div>
<div>
<label for="mind">Mind</label>
<div>
<input type="number" name="initial" disabled />
<input id="mind" type="number" name="total" min="0"
max="99" oninput="update()" />
<input type="number" name="final" disabled />
<input type="number" name="virtual" disabled />
</div>
</div>
<div>
<label for="endurance">Endurance</label>
<div>
<input type="number" name="initial" disabled />
<input id="endurance" type="number" name="total" min="0"
max="99" oninput="update()" />
<input type="number" name="final" disabled />
<input type="number" name="virtual" disabled />
</div>
</div>
<div>
<label for="strength">Strength</label>
<div>
<input type="number" name="initial" disabled />
<input id="strength" type="number" name="total" min="0"
max="99" oninput="update()" />
<input type="number" name="final" disabled />
<input type="number" name="virtual" disabled />
</div>
</div>
<div>
<label for="dexterity">Dexterity</label>
<div>
<input type="number" name="initial" disabled />
<input id="dexterity" type="number" name="total" min="0"
max="99" oninput="update()" />
<input type="number" name="final" disabled />
<input type="number" name="virtual" disabled />
</div>
</div>
<div>
<label for="intelligence">Intelligence</label>
<div>
<input type="number" name="initial" disabled />
<input id="intelligence" type="number" name="total"
min="0" max="99" oninput="update()" />
<input type="number" name="final" disabled />
<input type="number" name="virtual" disabled />
</div>
</div>
<div>
<label for="faith">Faith</label>
<div>
<input type="number" name="initial" disabled />
<input id="faith" type="number" name="total" min="0"
max="99" oninput="update()" />
<input type="number" name="final" disabled />
<input type="number" name="virtual" disabled />
</div>
</div>
<div>
<label for="arcane">Arcane</label>
<div>
<input type="number" name="initial" disabled />
<input id="arcane" type="number" name="total" min="0"
max="99" oninput="update()" />
<input type="number" name="final" disabled />
<input type="number" name="virtual" disabled />
</div>
</div>
</article>
<article>
<div>
<b>Helmet</b>
<select id="helmet" name="equipment" onchange="update()">
<option id="none" value="none">No Helmet</option>
</select>
</div>
<hr />
<b>Talismans</b>
<div>
<ul id="talismans">
<template id="talisman">
<li>
<div>
<input name="talisman" type="checkbox"
onchange="update()" />
<label></label>
</div>
<aside></aside>
</li>
</template>
</ul>
</div>
<div>
<button onclick="resetAll()">Reset All</button>
</div>
</article>
</div>
<h3 style="text-align: center">Softcaps</h3>
<table>
<thead>
<tr>
<th>Skill</th>
<th>Stat</th>
<th>Softcaps</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td>Vigor</td>
<td>HP</td>
<td>25 (800HP)<br />40 (1450HP)<br />60 (1900HP)</td>
<td>A +12 upgraded crimson flask heals for 810HP.</td>
</tr>
<tr>
<td>Mind</td>
<td>FP</td>
<td>40 (220FP)</td>
<td>A +12 upgraded cerulean flask gives 220FP.</td>
</tr>
<tr>
<td>Endurance</td>
<td>Stamina</td>
<td>30 (125stm.)<br />50 (155stm.)</td>
<td></td>
</tr>
<tr>
<td></td>
<td>Equip Load</td>
<td>25 (72 wgt.)<br />60 (120 wgt.)</td>
<td></td>
</tr>
<tr>
<td>Strength</td>
<td>AR</td>
<td>37 ≃ 55 (2h)<br />54 ≃ 80 (2h)<br />66 ≃ 99 (2h)<br />80
</td>
<td>2-handing gives you 1.5x strength.</td>
</tr>
<tr>
<td>Dexterity</td>
<td>AR</td>
<td>55, 80</td>
<td></td>
</tr>
<tr>
<td>Intelligence</td>
<td>AR</td>
<td>55, 80</td>
<td></td>
</tr>
<tr>
<td></td>
<td>Spell Buff</td>
<td>60, 80</td>
<td></td>
</tr>
<tr>
<td>Faith</td>
<td>AR</td>
<td>55, 80</td>
<td></td>
</tr>
<tr>
<td></td>
<td>Spell Buff</td>
<td>60, 80</td>
<td></td>
</tr>
<tr>
<td>Arcane</td>
<td>AR</td>
<td>55, 80</td>
<td></td>
</tr>
<tr>
<td></td>
<td>Status</td>
<td>45, 60</td>
<td></td>
</tr>
<tr>
<td></td>
<td>Spell Buff</td>
<td>60, 80 (Pure catalyst)<br />30, 45 (Hybrid catalyst)
</td>
<td></td>
</tr>
</tbody>
</table>
</main>
<footer>
<h5>
Erdtree Planner (<a
href="https://git.palmoe.dk/vodofrede/erdtree">available under
BSD-3-Clause license</a>)
</h5>
<h5>Copyright 2022 vodofrede</h5>
</footer>
</body>
<!-- scripts -->
<script src="/script/class.js"></script>
</head>
<body onload="init();">
<nav>
<h1><a href="/">Elden Ring Build Planner</a></h1>
<ul>
<a href="/planner.html">Build Planner</a>
</ul>
</nav>
<header>
<h2>Class Optimizer</h2>
</header>
<main>
<div class="app">
<article>
<div>
<b>Class</b>
<input id="best" type="text" disabled />
</div>
<hr />
<template id="class">
<li>
<span></span>
<aside></aside>
</li>
</template>
<div>
<ul id="classes"></ul>
</div>
</article>
<article>
<div>
<b>Level</b>
<div>
<input id="initial-level" type="number" disabled />
<input type="number" style="visibility: hidden" disabled />
<input id="final-level" type="number" disabled />
<input id="virtual-level" type="number" disabled />
</div>
</div>
<hr />
<div>
<label for="vigor">Vigor</label>
<div>
<input type="number" name="initial" disabled />
<input id="vigor" type="number" name="total" min="0" max="99" oninput="update()" />
<input type="number" name="final" disabled />
<input type="number" name="virtual" disabled />
</div>
</div>
<div>
<label for="mind">Mind</label>
<div>
<input type="number" name="initial" disabled />
<input id="mind" type="number" name="total" min="0" max="99" oninput="update()" />
<input type="number" name="final" disabled />
<input type="number" name="virtual" disabled />
</div>
</div>
<div>
<label for="endurance">Endurance</label>
<div>
<input type="number" name="initial" disabled />
<input id="endurance" type="number" name="total" min="0" max="99" oninput="update()" />
<input type="number" name="final" disabled />
<input type="number" name="virtual" disabled />
</div>
</div>
<div>
<label for="strength">Strength</label>
<div>
<input type="number" name="initial" disabled />
<input id="strength" type="number" name="total" min="0" max="99" oninput="update()" />
<input type="number" name="final" disabled />
<input type="number" name="virtual" disabled />
</div>
</div>
<div>
<label for="dexterity">Dexterity</label>
<div>
<input type="number" name="initial" disabled />
<input id="dexterity" type="number" name="total" min="0" max="99" oninput="update()" />
<input type="number" name="final" disabled />
<input type="number" name="virtual" disabled />
</div>
</div>
<div>
<label for="intelligence">Intelligence</label>
<div>
<input type="number" name="initial" disabled />
<input id="intelligence" type="number" name="total" min="0" max="99" oninput="update()" />
<input type="number" name="final" disabled />
<input type="number" name="virtual" disabled />
</div>
</div>
<div>
<label for="faith">Faith</label>
<div>
<input type="number" name="initial" disabled />
<input id="faith" type="number" name="total" min="0" max="99" oninput="update()" />
<input type="number" name="final" disabled />
<input type="number" name="virtual" disabled />
</div>
</div>
<div>
<label for="arcane">Arcane</label>
<div>
<input type="number" name="initial" disabled />
<input id="arcane" type="number" name="total" min="0" max="99" oninput="update()" />
<input type="number" name="final" disabled />
<input type="number" name="virtual" disabled />
</div>
</div>
</article>
<article>
<div>
<b>Helmet</b>
<select id="helmet" name="equipment" onchange="update()">
<option id="none" value="none">No Helmet</option>
</select>
</div>
<hr />
<b>Talismans</b>
<div>
<ul id="talismans">
<template id="talisman">
<li>
<div>
<input name="talisman" type="checkbox" onchange="update()" />
<label></label>
</div>
<aside></aside>
</li>
</template>
</ul>
</div>
<div>
<button onclick="reset()">Reset All</button>
</div>
</article>
</div>
<h3 style="text-align: center">Softcaps</h3>
<table>
<thead>
<tr>
<th>Skill</th>
<th>Stat</th>
<th>Softcaps</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td>Vigor</td>
<td>HP</td>
<td>25 (800HP)<br />40 (1450HP)<br />60 (1900HP)</td>
<td>A +12 upgraded crimson flask heals for 810HP.</td>
</tr>
<tr>
<td>Mind</td>
<td>FP</td>
<td>40 (220FP)</td>
<td>A +12 upgraded cerulean flask gives 220FP.</td>
</tr>
<tr>
<td>Endurance</td>
<td>Stamina</td>
<td>30 (125stm.)<br />50 (155stm.)</td>
<td></td>
</tr>
<tr>
<td></td>
<td>Equip Load</td>
<td>25 (72 wgt.)<br />60 (120 wgt.)</td>
<td></td>
</tr>
<tr>
<td>Strength</td>
<td>AR</td>
<td>37 ≃ 55 (2h)<br />54 ≃ 80 (2h)<br />66 ≃ 99 (2h)<br />80</td>
<td>2-handing gives you 1.5x strength.</td>
</tr>
<tr>
<td>Dexterity</td>
<td>AR</td>
<td>55, 80</td>
<td></td>
</tr>
<tr>
<td>Intelligence</td>
<td>AR</td>
<td>55, 80</td>
<td></td>
</tr>
<tr>
<td></td>
<td>Spell Buff</td>
<td>60, 80</td>
<td></td>
</tr>
<tr>
<td>Faith</td>
<td>AR</td>
<td>55, 80</td>
<td></td>
</tr>
<tr>
<td></td>
<td>Spell Buff</td>
<td>60, 80</td>
<td></td>
</tr>
<tr>
<td>Arcane</td>
<td>AR</td>
<td>55, 80</td>
<td></td>
</tr>
<tr>
<td></td>
<td>Status</td>
<td>45, 60</td>
<td></td>
</tr>
<tr>
<td></td>
<td>Spell Buff</td>
<td>60, 80 (Pure catalyst)<br />30, 45 (Hybrid catalyst)</td>
<td></td>
</tr>
</tbody>
</table>
</main>
<footer>
<h5>
Erdtree Planner (<a href="https://git.palmoe.dk/vodofrede/erdtree"
>available under BSD-3-Clause license</a
>)
</h5>
<h5>Copyright 2022 vodofrede</h5>
</footer>
</body>
</html>
</html>

View File

@ -1,83 +1,78 @@
<!DOCTYPE html>
<html>
<head>
<!-- metadata -->
<meta charset="utf-8" />
<meta name="language" content="english" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="style/main.css" />
<head>
<!-- metadata -->
<meta charset="utf-8" />
<meta name="language" content="english" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="style/main.css" />
<!-- title and description -->
<title>Erdtree - Elden Ring Build Planner</title>
<link rel="icon" type="image/x-icon " href="/resource/favicon.ico">
<meta name="description"
content="Elden Ring build planner, armor optimizer, weapon finder and more!" />
<meta property="og:title" content="Erdtree - Elden Ring Build Planner" />
<meta property="og:description"
content="Erdtree - Elden Ring build planner, armor optimizer, weapon finder and more!" />
<meta property="og:url" content="https://erdtree.palmoe.dk" />
</head>
<!-- title and description -->
<title>Erdtree - Elden Ring Build Planner</title>
<meta name="description" content="Elden Ring build planner, armor optimizer, weapon finder and more!" />
<meta property="og:title" content="Erdtree - Elden Ring Build Planner" />
<meta
property="og:description"
content="Erdtree - Elden Ring build planner, armor optimizer, weapon finder and more!"
/>
<meta property="og:url" content="https://erdtree.palmoe.dk" />
</head>
<body>
<nav>
<h1><a href="/">Elden Ring Build Planner</a></h1>
<ul>
<li><a href="/planner.html">Build Planner</a></li>
</ul>
</nav>
<header>
<h1>Create, view and optimize builds for Elden Ring.</h1>
</header>
<main>
<div class="cards">
<article>
<a href="/class.html">
<h3>Class Optimizer</h3>
<br />
<p>Find the optimal starting class for your build.</p>
</a>
</article>
<article>
<a href="/armor.html">
<h3>Armor Optimizer</h3>
<br />
<p>Maximize defensive stats.</p>
</a>
</article>
<article>
<a href="/weapon.html">
<h3>Weapon Finder</h3>
<br />
<p>Get suggestions for usable weapons.</p>
</a>
</article>
<article>
<a href="/planner.html">
<h3>Build Planner (in progress)</h3>
<br />
<p>Create a new build.</p>
</a>
</article>
</div>
<h3>Credits</h3>
<p>
This page was heavily inspired by the awesome <a
href="https://mugenmonkey.com">MugenMonkey</a> website.
</p>
</main>
<footer>
<h5>
Erdtree Planner (<a
href="https://git.palmoe.dk/vodofrede/erdtree">available under
BSD-3-Clause license</a>)
</h5>
<h5>Copyright 2022 vodofrede</h5>
</footer>
</body>
<body>
<nav>
<h1><a href="/">Elden Ring Build Planner</a></h1>
<ul>
<li><a href="/planner.html">Build Planner</a></li>
</ul>
</nav>
<header>
<h1>Create, view and optimize builds for Elden Ring.</h1>
</header>
<main>
<div class="cards">
<article>
<a href="/class.html">
<h3>Class Optimizer</h3>
<br />
<p>Find the optimal starting class for your build.</p>
</a>
</article>
<article>
<a href="/armor.html">
<h3>Armor Optimizer</h3>
<br />
<p>Maximize defensive stats.</p>
</a>
</article>
<article>
<a href="/weapon.html">
<h3>Weapon Finder</h3>
<br />
<p>Get suggestions for usable weapons.</p>
</a>
</article>
<article>
<a href="/planner.html">
<h3>Build Planner (in progress)</h3>
<br />
<p>Create a new build.</p>
</a>
</article>
</div>
<h3>Credits</h3>
<p>
This page was heavily inspired by the awesome <a href="https://mugenmonkey.com">MugenMonkey</a> website.
</p>
</main>
<footer>
<h5>
Erdtree Planner (<a href="https://git.palmoe.dk/vodofrede/erdtree"
>available under BSD-3-Clause license</a
>)
</h5>
<h5>Copyright 2022 vodofrede</h5>
</footer>
</body>
</html>
</html>

View File

@ -1,264 +1,276 @@
<!DOCTYPE html>
<html>
<head>
<!-- metadata -->
<meta charset="utf-8" />
<meta name="language" content="english" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="style/main.css" />
<head>
<!-- metadata -->
<meta charset="utf-8" />
<meta name="language" content="english" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="style/main.css" />
<!-- title and description -->
<title>Erdtree - Build Planner</title>
<link rel="icon" type="image/x-icon " href="/resource/favicon.ico">
<meta name="description" content="" />
<meta property="og:title" content="Erdtree Build Planner" />
<meta property="og:description"
content="Erdtree - Elden Ring build planner, armor optimizer, weapon finder and more!" />
<meta property="og:url" content="https://erdtree.palmoe.dk" />
<!-- scripts -->
<script src="script/planner.js"></script>
</head>
<!-- title and description -->
<title>Erdtree - Build Planner</title>
<meta name="description" content="" />
<meta property="og:title" content="Erdtree Build Planner" />
<meta
property="og:description"
content="Erdtree - Elden Ring build planner, armor optimizer, weapon finder and more!"
/>
<meta property="og:url" content="https://erdtree.palmoe.dk" />
<!-- scripts -->
<script src="script/planner.js"></script>
</head>
<body onload="init()">
<nav>
<h1><a href="/">Elden Ring Build Planner</a></h1>
<ul>
<li><a href="/planner.html">Build Planner</a></li>
</ul>
</nav>
<header>
<h1>Build Planner</h1>
</header>
<main>
<div class="app">
<!-- Class -->
<article style="flex-basis: 20%; max-width: 320px">
<body onload="init()">
<nav>
<h1><a href="/">Elden Ring Build Planner</a></h1>
<ul>
<li><a href="/planner.html">Build Planner</a></li>
</ul>
</nav>
<header>
<h1>Build Planner</h1>
</header>
<main>
<div class="app">
<!-- Class -->
<article style="flex-basis: 20%; max-width: 320px">
<div>
<b>Character</b>
</div>
<hr />
<div>
<b>Name</b>
<input id="name" />
</div>
<div>
<label for="class"><b>Starting Class</b></label>
<div>
<b>Character</b>
<select id="class" onchange="update()">
<option id="wretch" selected>Wretch</option>
<option id="vagabond">Vagabond</option>
<option id="warrior">Warrior</option>
<option id="hero">Hero</option>
<option id="bandit">Bandit</option>
<option id="astrologer">Astrologer</option>
<option id="prophet">Prophet</option>
<option id="samurai">Samurai</option>
<option id="prisoner">Prisoner</option>
<option id="confessor">Confessor</option>
</select>
</div>
<hr />
<div>
<b>Name</b>
<input id="name" />
</div>
<div>
<label><b>Level</b></label>
<span>
<input type="number" id="final-level" disabled />
</span>
</div>
<div>
<label for="vigor">Vigor</label>
<span>
<input type="number" id="vigor" name="final" min="0"
max="99" onchange="update()" />
</span>
</div>
<div>
<label for="mind">Mind</label>
<span>
<input type="number" id="mind" name="final" min="0"
max="99" onchange="update()" />
</span>
</div>
<div>
<label for="endurance">Endurance</label>
<span>
<input type="number" id="endurance" name="final" min="0"
max="99" onchange="update()" />
</span>
</div>
<div>
<label for="strength">Strength</label>
<span>
<input type="number" id="strength" name="final" min="0"
max="99" onchange="update()" />
</span>
</div>
<div>
<label for="dexterity">Dexterity</label>
<span>
<input type="number" id="dexterity" name="final" min="0"
max="99" onchange="update()" />
</span>
</div>
<div>
<label for="intelligence">Intelligence</label>
<span>
<input type="number" id="intelligence" name="final"
min="0" max="99" onchange="update()" />
</span>
</div>
<div>
<label for="faith">Faith</label>
<span>
<input type="number" id="faith" name="final" min="0"
max="99" onchange="update()" />
</span>
</div>
<div>
<label for="arcane">Arcane</label>
<span>
<input type="number" id="arcane" name="final" min="0"
max="99" onchange="update()" />
</span>
</div>
<hr />
<b>Import</b>
<div>
<input type="file" />
</div>
<hr />
<b>Export</b>
<div>
<button>Export</button>
</div>
</article>
<!-- equipment -->
<article style="flex-basis: 20%; max-width: 450px">
<b>Equipment</b>
<hr />
<b>Weapons & Shields</b>
<template id="picker">
<div class="popup">
<input type="image" src="/resource/icon/standard.jpg"
height="20px" />
</div>
</template>
<div>
<div>
<label for="class"><b>Starting Class</b></label>
<div>
<select id="class" onchange="update()">
<option id="wretch" selected>Wretch</option>
<option id="vagabond">Vagabond</option>
<option id="warrior">Warrior</option>
<option id="hero">Hero</option>
<option id="bandit">Bandit</option>
<option id="astrologer">Astrologer</option>
<option id="prophet">Prophet</option>
<option id="samurai">Samurai</option>
<option id="prisoner">Prisoner</option>
<option id="confessor">Confessor</option>
</select>
</div>
</div>
<div>
<label><b>Level</b></label>
<span>
<input type="number" id="final-level" disabled />
<select id="lh1" name="weapon"
onchange="update()"></select>
</span>
<span>
<img id="lh1-img" src="/resource/icon/standard.jpg"
width="20px" />
<select id="lh1-infusion" name="infusion"></select>
</span>
</div>
<div>
<label for="vigor">Vigor</label>
<span>
<input type="number" id="vigor" name="final" min="0" max="99" onchange="update()" />
<select id="rh1" name="weapon"
onchange="update()"></select>
</span>
<span>
<select id="rh1-infusion" name="infusion"></select>
<img id="rh1-img" src="/resource/icon/standard.jpg"
width="20px" />
</span>
</div>
</div>
<div>
<div>
<span>
<select id="lh2" name="weapon"
onchange="update()"></select>
</span>
<span>
<img id="lh2-img" src="/resource/icon/standard.jpg"
width="20px" />
<select id="lh2-infusion" name="infusion"></select>
</span>
</div>
<div>
<label for="mind">Mind</label>
<span>
<input type="number" id="mind" name="final" min="0" max="99" onchange="update()" />
<select id="rh2" name="weapon"
onchange="update()"></select>
</span>
<span>
<select id="rh2-infusion" name="infusion"></select>
<img id="rh2-img" src="/resource/icon/standard.jpg"
width="20px" />
</span>
</div>
</div>
<div>
<div>
<span>
<select id="lh3" name="weapon"
onchange="update()"></select>
</span>
<span>
<img id="lh3-img" src="/resource/icon/standard.jpg"
width="20px" />
<select id="lh3-infusion" name="infusion"></select>
</span>
</div>
<div>
<label for="endurance">Endurance</label>
<span>
<input type="number" id="endurance" name="final" min="0" max="99" onchange="update()" />
<select id="rh3" name="weapon"
onchange="update()"></select>
</span>
<span>
<select id="rh3-infusion" name="infusion"></select>
<img id="rh3-img" src="/resource/icon/standard.jpg"
width="20px" />
</span>
</div>
<div>
<label for="strength">Strength</label>
<span>
<input type="number" id="strength" name="final" min="0" max="99" onchange="update()" />
</span>
</div>
<div>
<label for="dexterity">Dexterity</label>
<span>
<input type="number" id="dexterity" name="final" min="0" max="99" onchange="update()" />
</span>
</div>
<div>
<label for="intelligence">Intelligence</label>
<span>
<input type="number" id="intelligence" name="final" min="0" max="99" onchange="update()" />
</span>
</div>
<div>
<label for="faith">Faith</label>
<span>
<input type="number" id="faith" name="final" min="0" max="99" onchange="update()" />
</span>
</div>
<div>
<label for="arcane">Arcane</label>
<span>
<input type="number" id="arcane" name="final" min="0" max="99" onchange="update()" />
</span>
</div>
<hr />
<b>Import</b>
<div>
<input type="file" />
</div>
</div>
<hr />
<b>Armor</b>
<div>
<label>Helmet</label>
<select id="helmet" name="armor"
onchange="update()"></select>
</div>
<div>
<label>Chestpiece</label>
<select id="chestpiece" name="armor"
onchange="update()"></select>
</div>
<div>
<label>Gauntlets</label>
<select id="gauntlets" name="armor"
onchange="update()"></select>
</div>
<div>
<label>Leggings</label>
<select id="leggings" name="armor"
onchange="update()"></select>
</div>
<hr />
<li><b>Talismans</b></li>
<div>
<label>Talisman #1</label>
<select id="talisman-1" name="talisman"
onchange="update()"></select>
</div>
<div>
<label>Talisman #2</label>
<select id="talisman-2" name="talisman"
onchange="update()"></select>
</div>
<div>
<label>Talisman #3</label>
<select id="talisman-3" name="talisman"
onchange="update()"></select>
</div>
<div>
<label>Talisman #4</label>
<select id="talisman-4" name="talisman"
onchange="update()"></select>
</div>
<hr />
<li><b>Spells</b></li>
</article>
</div>
</main>
<footer>
<h5>
Erdtree Planner (<a
href="https://git.palmoe.dk/vodofrede/erdtree">available under
BSD-3-Clause license</a>)
</h5>
<h5>Copyright 2022 vodofrede</h5>
</footer>
</body>
<hr />
<b>Export</b>
<div>
<button>Export</button>
</div>
</article>
<!-- equipment -->
<article style="flex-basis: 20%; max-width: 450px">
<b>Equipment</b>
<hr />
<b>Weapons & Shields</b>
<template id="picker">
<div class="popup">
<input type="image" src="/resource/icon/standard.jpg" height="20px" />
</div>
</template>
<div>
<div>
<span>
<select id="lh1" name="weapon" onchange="update()"></select>
</span>
<span>
<img id="lh1-img" src="/resource/icon/standard.jpg" width="20px" />
<select id="lh1-infusion" name="infusion"></select>
</span>
</div>
<div>
<span>
<select id="rh1" name="weapon" onchange="update()"></select>
</span>
<span>
<select id="rh1-infusion" name="infusion"></select>
<img id="rh1-img" src="/resource/icon/standard.jpg" width="20px" />
</span>
</div>
</div>
<div>
<div>
<span>
<select id="lh2" name="weapon" onchange="update()"></select>
</span>
<span>
<img id="lh2-img" src="/resource/icon/standard.jpg" width="20px" />
<select id="lh2-infusion" name="infusion"></select>
</span>
</div>
<div>
<span>
<select id="rh2" name="weapon" onchange="update()"></select>
</span>
<span>
<select id="rh2-infusion" name="infusion"></select>
<img id="rh2-img" src="/resource/icon/standard.jpg" width="20px" />
</span>
</div>
</div>
<div>
<div>
<span>
<select id="lh3" name="weapon" onchange="update()"></select>
</span>
<span>
<img id="lh3-img" src="/resource/icon/standard.jpg" width="20px" />
<select id="lh3-infusion" name="infusion"></select>
</span>
</div>
<div>
<span>
<select id="rh3" name="weapon" onchange="update()"></select>
</span>
<span>
<select id="rh3-infusion" name="infusion"></select>
<img id="rh3-img" src="/resource/icon/standard.jpg" width="20px" />
</span>
</div>
</div>
<hr />
<b>Armor</b>
<div>
<label>Helmet</label>
<select id="helmet" name="armor" onchange="update()"></select>
</div>
<div>
<label>Chestpiece</label>
<select id="chestpiece" name="armor" onchange="update()"></select>
</div>
<div>
<label>Gauntlets</label>
<select id="gauntlets" name="armor" onchange="update()"></select>
</div>
<div>
<label>Leggings</label>
<select id="leggings" name="armor" onchange="update()"></select>
</div>
<hr />
<li><b>Talismans</b></li>
<div>
<label>Talisman #1</label>
<select id="talisman-1" name="talisman" onchange="update()"></select>
</div>
<div>
<label>Talisman #2</label>
<select id="talisman-2" name="talisman" onchange="update()"></select>
</div>
<div>
<label>Talisman #3</label>
<select id="talisman-3" name="talisman" onchange="update()"></select>
</div>
<div>
<label>Talisman #4</label>
<select id="talisman-4" name="talisman" onchange="update()"></select>
</div>
<hr />
<li><b>Spells</b></li>
</article>
</div>
</main>
<footer>
<h5>
Erdtree Planner (<a href="https://git.palmoe.dk/vodofrede/erdtree"
>available under BSD-3-Clause license</a
>)
</h5>
<h5>Copyright 2022 vodofrede</h5>
</footer>
</body>
</html>
</html>

BIN
src/resource/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

View File

@ -1,64 +1,63 @@
const CLASSES = fetch("/data/classes.json")
.then((response) => response.json())
.catch((error) => console.log(error));
const TALISMANS = fetch("/data/talismans.json")
.then((response) => response.json())
.catch((error) => console.log(error));
const HELMETS = fetch("/data/helmets.json")
.then((response) => response.json())
.catch((error) => console.log(error));
let CLASSES;
let TALISMANS;
let HELMETS;
const STAT_SHORT_NAMES = ["vig.", "mnd.", "end.", "str.", "dex.", "int.", "fth.", "arc."];
const selected = select => select.options[select.selectedIndex];
async function init() {
// fetch and await data sources
CLASSES = await fetch("/data/classes.json").then(response => response.json());
TALISMANS = await fetch("/data/talismans.json").then(response => response.json());
HELMETS = await fetch("/data/helmets.json").then(response => response.json());
// populate helmet select
let helmets = Object.values(await HELMETS);
helmets = helmets.filter((helmet) => helmet.stats != null);
let destination = document.getElementById("helmet");
helmets.forEach((helmet) => {
destination.options.add(new Option(helmet.name, helmet.id));
});
Object.values(HELMETS)
.filter(helmet => helmet.stats != null)
.forEach(helmet => destination.options.add(new Option(helmet.name, helmet.id)));
// populate talisman list
let talismans = Object.values(await TALISMANS);
talismans = talismans.filter((talisman) => talisman.stats != null && !talisman.id.includes("scar"));
let template = document.getElementById("talisman");
destination = document.getElementById("talismans");
talismans.forEach((item) => {
let clone = template.content.cloneNode(true);
let li = clone.children[0];
let input = li.children[0].children[0];
let label = li.children[0].children[1];
let aside = li.children[1];
Object.values(TALISMANS)
.filter(talisman => talisman.stats != null && !talisman.id.includes("scar"))
.forEach(item => {
let clone = template.content.cloneNode(true);
let li = clone.children[0];
input.id = item.id;
input.value = item.id;
label.htmlFor = item.id;
label.innerHTML = item.name;
aside.innerHTML = statsDescription(item.stats);
let input = li.children[0].children[0];
let label = li.children[0].children[1];
let aside = li.children[1];
destination.appendChild(clone);
});
input.id = item.id;
input.value = item.id;
label.htmlFor = item.id;
label.innerHTML = item.name;
aside.innerHTML = statsDescription(item.stats);
destination.appendChild(clone);
});
update();
}
async function update() {
function update() {
// get inputted stats, clamp value to 0..99
let total = [...document.getElementsByName("total")].map((elem) => {
let total = [...document.getElementsByName("total")].map(elem => {
elem.value = Math.min(Math.max(elem.value, 0), 99) || null;
return parseInt(elem.value) || 0;
});
// get added stats from items
let items = itemStats(Object.values(await TALISMANS).concat(Object.values(await HELMETS)));
let items = itemStats([...Object.values(TALISMANS), ...Object.values(HELMETS)]);
// calculate best class
let sorted = sortClasses(
Object.values(await CLASSES),
total.map((stat, i) => stat - items[i])
Object.values(CLASSES),
total.map((stat, i) => stat - items[i]),
);
let best = sorted[0];
@ -80,7 +79,7 @@ async function update() {
let destination = document.getElementById("classes");
destination.innerHTML = "";
let template = document.getElementById("class");
sorted.forEach((c) => {
sorted.forEach(c => {
let clone = template.content.cloneNode(true);
let li = clone.children[0];
let span = li.children[0];
@ -94,41 +93,40 @@ async function update() {
// update talismans
let talismans = [...document.getElementsByName("talisman")];
if (talismans.filter((checkbox) => checkbox.checked).length >= 4) {
talismans.forEach((checkbox) => (checkbox.disabled = !checkbox.checked));
if (talismans.filter(checkbox => checkbox.checked).length >= 4) {
talismans.forEach(checkbox => (checkbox.disabled = !checkbox.checked));
} else {
talismans.forEach((checkbox) => (checkbox.disabled = false));
talismans.forEach(checkbox => (checkbox.disabled = false));
}
}
function sortClasses(classes, desiredStats) {
let deltas = classes.map((c) => {
c.total = c.level + statDelta(c.stats, desiredStats);
return c;
});
deltas.sort((a, b) => a.total - b.total);
return deltas;
function delta(classStats, final) {
return classStats.map((stat, i) => (stat < final[i] ? final[i] - stat : 0)).reduce((total, n) => total + n);
}
function statDelta(classStats, desiredStats) {
return classStats.map((e, i) => (e < desiredStats[i] ? desiredStats[i] - e : 0)).reduce((total, n) => total + n);
function sortClasses(classes, desiredStats) {
return classes
.map(c => {
c.total = c.level + delta(c.stats, desiredStats);
return c;
})
.sort((a, b) => a.total - b.total);
}
function itemStats(relevantItems) {
let helmet = document.getElementById("helmet").options[document.getElementById("helmet").selectedIndex].value;
let talismans = [...document.getElementsByName("talisman")].filter((t) => t.checked).map((t) => t.value);
let helmet = selected(document.getElementById("helmet")).value;
let talismans = [...document.getElementsByName("talisman")].filter(t => t.checked).map(t => t.value);
ids = [helmet, ...talismans];
let relevant = relevantItems.filter((item) => ids.includes(item.id));
return relevant.reduce((total, item) => total.map((stat, i) => (stat += item.stats[i])), [0, 0, 0, 0, 0, 0, 0, 0]);
return relevantItems
.filter(item => ids.includes(item.id))
.reduce((total, item) => total.map((stat, i) => (stat += item.stats[i])), [0, 0, 0, 0, 0, 0, 0, 0]);
}
function reset() {
document.getElementsByName("total").forEach((elem) => (elem.value = null));
function resetAll() {
document.getElementsByName("total").forEach(elem => (elem.value = null));
document.getElementById("helmet").selectedIndex = 0;
[...document.getElementsByName("talisman")].forEach((elem) => (elem.checked = false));
[...document.getElementsByName("talisman")].forEach(elem => (elem.checked = false));
update();
}
@ -138,7 +136,3 @@ function statsDescription(stats) {
return stat ? total + " +" + stat + STAT_SHORT_NAMES[i] : total;
}, "");
}
function clamp(n, min, max) {
return Math.min(Math.max(n, min), max);
}

View File

@ -1,33 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<!-- created with Free Online Sitemap Generator www.xml-sitemaps.com -->
<url>
<loc>https://erdtree.palmoe.dk/</loc>
<lastmod>2022-03-28T13:52:48+00:00</lastmod>
<lastmod>2022-04-06T23:37:09+00:00</lastmod>
<priority>1.00</priority>
</url>
<url>
<loc>https://erdtree.palmoe.dk/planner</loc>
<lastmod>2022-03-28T13:52:48+00:00</lastmod>
<lastmod>2022-04-07T15:27:19+00:00</lastmod>
<priority>0.80</priority>
</url>
<url>
<loc>https://erdtree.palmoe.dk/class</loc>
<lastmod>2022-03-28T13:52:48+00:00</lastmod>
<lastmod>2022-04-06T23:35:40+00:00</lastmod>
<priority>0.80</priority>
</url>
<url>
<loc>https://erdtree.palmoe.dk/armor</loc>
<lastmod>2022-03-28T13:52:48+00:00</lastmod>
<lastmod>2022-04-10T20:24:25+00:00</lastmod>
<priority>0.80</priority>
</url>
<url>
<loc>https://erdtree.palmoe.dk/weapons</loc>
<lastmod>2022-03-28T13:52:48+00:00</lastmod>
<priority>0.64</priority>
<loc>https://erdtree.palmoe.dk/weapon</loc>
<lastmod>2022-04-07T15:44:52+00:00</lastmod>
<priority>0.80</priority>
</url>

View File

@ -9,6 +9,7 @@
<link rel="stylesheet" href="style/main.css" />
<!-- title and description -->
<title>Erdtree - Weapon Finder</title>
<link rel="icon" type="image/x-icon " href="/resource/favicon.ico">
<meta name="description"
content="Erdtree - Elden Ring build planner, armor optimizer, weapon finder and more!" />
<meta property="og:title" content="Erdtree Build Planner" />