// ==UserScript==
// @name DH3 SellFix
// @namespace com.anwinity.dh3
// @version 1.0.0
// @description Allows you to sell items if you are experiencing the bug that doesn't let you.
// @author Anwinity
// @match dh3.diamondhunt.co
// @grant none
// ==/UserScript==
(function() {
'use strict';
const scope = {
items: null,
defaultKeySort: [
"stone",
"copper",
"iron",
"silver",
"gold",
"promethium",
"titanium",
"ancient",
"moonstone",
"marsRock",
"bronzeBars",
"ironBars",
"silverBars",
"goldBars",
"promethiumBars",
"sapphire",
"emerald",
"ruby",
"diamond",
"bloodDiamond",
"dottedGreenLeaf",
"greenLeaf",
"limeLeaf",
"goldLeaf",
"crystalLeaf",
"stripedGoldLeaf",
"stripedCrystalLeaf",
"logs",
"oakLogs",
"willowLogs",
"mapleLogs",
"bambooLogs",
"lavaLogs",
"pineLogs",
"stardustLogs",
"oyster",
"specialOyster",
"pearl",
"rarePearl",
"limeQuartzMineral",
"jadeMineral",
"amethystMineral",
"blueMarbleMineral",
"limoniteMineral",
"tashmarineMineral",
"denseMarbleMineral",
"fluoriteMineral",
"purpleQuartzMineral",
"crystalPrismeMineral",
"amberMineral",
"tanzaniteMineral",
"royalMineral",
"rainbowCrystalMineral",
"bloodCrystalMineral"
]
};
function initUI() {
const styles = document.createElement("style");
styles.textContent = `
table#sellFixTable {
border-collapse: collapse;
width: 100%;
}
table#sellFixTable tr, table#sellFixTable th, table#sellFixTable td {
border: 1px solid rgb(50, 50, 50);
background-color: rgba(26, 26, 26, 0.4);
text-align: left;
}
table#sellFixTable th, table#sellFixTable td {
padding: 0.25em;
padding-left: 0.5em;
padding-right: 0.5em;
}
`;
$("head").append(styles);
$("#navigation-right-shopOptions > center").append(`
<br />
<div onclick="navigate('sellFix')" class="large-shopOptions-buttons">
LET ME SELL THINGS
</div>
`);
$("#right-panel").append(`
<div id="navigation-sellFix" style="display: none; padding: 1em;">
<table id="sellFixTable">
<thead>
<tr>
<th>Item</th>
<th>Price Each</th>
<th>You Have</th>
<th>Sell It</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
`);
const sellFixTable = $("#sellFixTable");
const itemKeys = Object.keys(scope.items);
itemKeys.sort();
itemKeys.forEach(key => {
if(!scope.defaultKeySort.includes(key)) {
scope.defaultKeySort.push(key);
}
});
scope.defaultKeySort.forEach(name => {
sellFixTable.append(`
<tr id="sellFixRow-${name}">
<td><img src="images/${name}.png" class="img-30" /> ${name}</td>
<td style="text-align: right">${scope.items[name].toLocaleString()}</td>
<td id="sellFixQuantity-${name}" style="text-align: right"></td>
<td>
<input type="number" min="0" id="sellFixSellAmount-${name}" />
<button type="button" onclick="$('#sellFixSellAmount-${name}').val(parseInt(window.var_${name}||'0'))">Max</button>
<button type="button" onclick="
let amount = parseInt($('#sellFixSellAmount-${name}').val());
if(typeof amount === 'number' && !isNaN(amount)) {
sendBytes('DO_SELL=${name}~'+amount);
}
">Sell</button> <img src="images/${name}.png" class="img-30" />
</td>
</tr>
`);
});
}
function overrideFunctions() {
const originalNavigate = window.navigate;
window.navigate = function(a) {
originalNavigate.apply(this, arguments);
if(a=="sellFix") {
//
}
else {
$("#navigation-sellFix").hide();
}
};
const originalSetItems = window.setItems;
window.setItems = function(data) {
originalSetItems.apply(this, arguments);
updateQuantities();
}
}
function updateQuantities() {
Object.keys(scope.items).forEach(key => {
$(`#sellFixQuantity-${key}`).text(parseInt(window[`var_${key}`]||"0").toLocaleString());
});
}
function init() {
if(!window.var_username || !window.global_itemPriceMap || window.global_itemPriceMap.length==0) {
setTimeout(init, 1000);
return;
}
scope.items = global_itemPriceMap.reduce((map, item) => {
map[item.name] = parseInt(item.price);
return map;
}, {});
initUI();
overrideFunctions();
updateQuantities();
}
$(init);
})();