// ==UserScript==
// @name Ted's market UI
// @namespace Ted's market UI
// @version 1.229
// @description Ted's Diamond Hunt 2 custom market user interface
// @author ted120
// @match http://*.diamondhunt.co/game.php
// @match https://*.diamondhunt.co/game.php
// @run-at document-idle
// @grant none
// ==/UserScript==
$(document).ready(function () {
// Customisable
var hideItemList = ["Raw Shark","Stinger","Wheat","Bear Fur","Stone","Bones","Ashes","Snake Skin","Bat Skin","Raw Shrimp","Shrimp"];
var notEnoughCoinsOpacity = true;
var showMaxCanBuy = true;
var itemTooltips = true;
var smallMarketImages = true, marketImageSize = 30; //pixels, default:50, suggested: 30-40
var marketSlotsCustomUi = false; //incomplete leave false
/* TODO
add one-click search all button on main market page
*/
// Below is not intended to be changed
var debugToConsole = false;
var arrMarketItems = [];
var arrMarketSlots = [[0, 0]]; //updateMarketSlots()
var marketInterval;
var marketOn = true;
var quickCalcOn = false, quickCalcElement = document.createElement('div');
var zMarket = document.createElement("div");
var zMap = document.createElement("span");
zMap.setAttribute("id","mapSpan");
zMap.setAttribute("style","color:white");
zMap.innerHTML = "You have an incomplete map!";
var tickStart = new Date().getTime();
var tickEnd = new Date().getTime();
var tickTime = tickEnd - tickStart;
var tickCheck = 0;
function drawButtons() {
zMarket = document.createElement("div");
zMarket.setAttribute("id","zMarketId");
zMarket.innerHTML = "Ted's market UI = "+marketOn+"quickCalc = "+quickCalcOn+"";
document.getElementById("game-div").appendChild(zMarket);
document.getElementById("zMarketId").appendChild(zMap);
document.getElementById("marketButton").addEventListener(
"click", marketButtonClickAction, false
);
document.getElementById("quickCalcButton").addEventListener(
"click", quickCalcButtonClickAction, false
);
}
function removeButtons() {
document.getElementById("game-div").removeChild(zMarket);
}
function buttonMain() {
removeButtons();
drawButtons();
}
function nextTick() {
if (playtime > tickCheck) {
tickCheck = playtime;
tickEnd = new Date().getTime();
tickTime = tickEnd - tickStart;
if (debugToConsole) { console.log("Tick time: "+ tickTime); }
tickStart = new Date().getTime();
return true;
} else return false;
}
function isInArray(array, search)
{
return array.indexOf(search) >= 0;
}
function itemNameFix(string) { // market style name to var style name; Bat Skin > batSkin
var a = string.replace(/\s/g, "");
return a.charAt(0).toLowerCase() + a.slice(1);
}
function numberWithCommas(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
function addItemTooltips() {
if (itemTooltips) {
for (var i = 0; i < arrMarketItems.length; i++) {
var fixedName = itemNameFix(arrMarketItems[i][0]);
if (document.getElementById("tooltip-"+fixedName) !== null) {
var newTooltip = "Market price:
"+numberWithCommas(arrMarketItems[i][2][0]);
if (document.getElementById("tooltip-"+fixedName).lastElementChild.tagName == "DIV") {
document.getElementById("tooltip-"+fixedName).removeChild(document.getElementById("tooltip-"+fixedName).lastChild);
}
var tooltipElement = document.createElement("div");
tooltipElement.innerHTML = newTooltip;
document.getElementById("tooltip-"+fixedName).appendChild(tooltipElement);
}
}
}
}
function getMarketItems() {
var currentItemId, itemName, itemId, itemPrice, itemAmount, itemMarketId, uniqueMarketItems = 0;
arrMarketItems = [];
for (var i = 1; i < document.getElementById("market-table").rows.length; i++) {
if (typeof(document.getElementById("market-table").rows[i].childNodes[0]) != "undefined" && document.getElementById("market-table").rows[i].childNodes[0] !== null) {
itemName = document.getElementById("market-table").rows[i].childNodes[0];
itemId = document.getElementById("market-table").rows[i].getAttribute("data-market-itemid");
itemPrice = document.getElementById("market-table").rows[i].getAttribute("data-market-price");
itemAmount = document.getElementById("market-table").rows[i].getAttribute("data-market-amount");
itemMarketId = document.getElementById("market-table").rows[i].getAttribute("data-market-marketid");
if (itemId != currentItemId) {
currentItemId = itemId;
uniqueMarketItems++;
arrMarketItems.push([document.getElementById("market-table").rows[i].childNodes[0].innerHTML, itemId]);
}
arrMarketItems[uniqueMarketItems-1].push([itemPrice, itemAmount, itemMarketId, i]);
}
}
}
function alterMarketSlots() {
if (marketSlotsCustomUi) {
if (typeof(document.getElementsByClassName("market-slot")[0].childNodes[1].childNodes[1]) == "undefined") {
var marketSlotFreeElement = document.createElement("div");
marketSlotFreeElement.innerHTML = "
";
document.getElementsByClassName("market-slot")[0].childNodes[1].appendChild(marketSlotFreeElement);
}
}
}
function alterMarketTable() {
var i, a, s, maxCanBuy;
document.getElementById("market-table").rows[0].style.backgroundColor = "gold";
if (debugToConsole) { console.log(arrMarketItems); }
for (i = 0; i < arrMarketItems.length; i++) {
for (a = 2; a < arrMarketItems[i].length; a++) {
if (smallMarketImages) {
document.getElementById("market-table").childNodes[0].childNodes[arrMarketItems[i][a][3]].childNodes[1].childNodes[0].style = "height: "+marketImageSize+"px;width: "+marketImageSize+"px;";
}
maxCanBuy = Math.floor(coins / arrMarketItems[i][a][0]);
if (showMaxCanBuy) {
if (maxCanBuy < arrMarketItems[i][a][1]) {
document.getElementById("market-table").rows[arrMarketItems[i][a][3]].cells[3].append(" (x"+numberWithCommas(maxCanBuy)+")");
} else if (maxCanBuy >= arrMarketItems[i][a][1]) {
maxCanBuy = arrMarketItems[i][a][1];
}
}
if (notEnoughCoinsOpacity && maxCanBuy === 0) {
document.getElementById("market-table").rows[arrMarketItems[i][a][3]].style.opacity = "0.3";
}
if (document.getElementById("market-table").rows.length < 13) {
if (arrMarketItems[i].length >= 4) {
if (arrMarketItems[i][2][0] < Math.ceil(arrMarketItems[i][3][0] * 0.86) && arrMarketItems[i][2][0]) {
document.getElementById("market-table").rows[arrMarketItems[i][2][3]].style.backgroundColor = "#90ee90"; //lightgreen
document.getElementById("market-table").rows[arrMarketItems[i][2][3]].style.display = "";
document.getElementById("market-table").rows[arrMarketItems[i][2][3]].style.fontWeight = 700;
document.getElementById("market-table").rows[arrMarketItems[i][3][3]].style.backgroundColor = "#ffcc66"; //lightorange
document.getElementById("market-table").rows[arrMarketItems[i][3][3]].style.display = "";
}
}
for (s = 0; s < arrMarketSlots.length; s++) {
if (arrMarketSlots[s][1] === false) {
if (arrMarketItems[i][a][2] == arrMarketSlots[s][0]) {
if (a == 2) {
document.getElementById("market-table").rows[arrMarketItems[i][a][3]].style.display = "";
document.getElementById("market-table").rows[arrMarketItems[i][a][3]].style.backgroundColor = "#bffffd"; //lightblue
} else if (a > 2) {
document.getElementById("market-table").rows[arrMarketItems[i][a][3]].style.backgroundColor = "#ffcccc"; //lighterred
document.getElementById("market-table").rows[arrMarketItems[i][a][3]].style.display = "";
document.getElementById("market-table").rows[arrMarketItems[i][2][3]].style.backgroundColor = "#ff7878"; //lightred
document.getElementById("market-table").rows[arrMarketItems[i][2][3]].style.display = "";
} else console.log("for (a... error");
}
}
}
} else if (document.getElementById("market-table").rows.length > 12) {
document.getElementById("market-table").rows[arrMarketItems[i][a][3]].style.backgroundColor = "red";
document.getElementById("market-table").rows[arrMarketItems[i][a][3]].style.display = "none";
for (s = 0; s < arrMarketSlots.length; s++) {
if (arrMarketSlots[s][1] === false) {
if (arrMarketItems[i][a][2] == arrMarketSlots[s][0]) {
if (a == 2) {
document.getElementById("market-table").rows[arrMarketItems[i][a][3]].style.display = "";
document.getElementById("market-table").rows[arrMarketItems[i][a][3]].style.backgroundColor = "#bffffd"; //lightblue
} else if (a > 2) {
document.getElementById("market-table").rows[arrMarketItems[i][a][3]].style.backgroundColor = "#ffcccc"; //lighterred
document.getElementById("market-table").rows[arrMarketItems[i][a][3]].style.display = "";
document.getElementById("market-table").rows[arrMarketItems[i][2][3]].style.backgroundColor = "#ff7878"; //lightred
document.getElementById("market-table").rows[arrMarketItems[i][2][3]].style.display = "";
} else console.log("for (a... error");
}
}
}
if (arrMarketItems[i].length == 3 && (!isInArray(hideItemList,arrMarketItems[i][0]))) {
document.getElementById("market-table").rows[arrMarketItems[i][2][3]].style.backgroundColor = "#ffff66"; //lightyellow
document.getElementById("market-table").rows[arrMarketItems[i][2][3]].style.display = "";
} else if (arrMarketItems[i].length >= 4 && (!isInArray(hideItemList,arrMarketItems[i][0]))) {
if (arrMarketItems[i][2][0] < Math.ceil(arrMarketItems[i][3][0] * 0.86) && arrMarketItems[i][2][0]) {
document.getElementById("market-table").rows[arrMarketItems[i][2][3]].style.backgroundColor = "#90ee90"; //lightgreen
document.getElementById("market-table").rows[arrMarketItems[i][2][3]].style.display = "";
document.getElementById("market-table").rows[arrMarketItems[i][2][3]].style.fontWeight = 700;
document.getElementById("market-table").rows[arrMarketItems[i][3][3]].style.backgroundColor = "#ffcc66"; //lightorange
document.getElementById("market-table").rows[arrMarketItems[i][3][3]].style.display = "";
}
}
}
}
}
}
function updateMarketSlots() {
arrMarketSlots = [[marketSlot1, false]];
for (var i = 0; i < arrMarketSlots.length; i++) {
if (document.getElementById("market-slot-"+(i + 1)+"-free").style.display === "") {
arrMarketSlots[i][1] = true;
}
}
}
function quickCalcMain() {
if (quickCalcOn) {
var i, a, b;
var arrQuickCalcHeat = ["Error, search for all (infinity symbol)", 999999, 0, 999999]; // name, heatprice, amount, logprice, heat
var arrStargemInput = [["Blewit Mushroom",100,0,0],["Gold Leaf",1,0,0],["Sapphire",1,0,0],["Emerald",1,0,0],["Ruby",1,0,0],["Diamond",1,0,0]];//name,amt need, amt have, ttl price
var arrStargemOutput = [["Stardust",0]];
quickCalcElement.style.display = "";
quickCalcElement.style.color = "#F5F5F5";
quickCalcElement.innerHTML = "Quick Calc: (for accurate data search market>all before using Quick Calc)
";
if (typeof(document.getElementById("market-table").rows[1]) == "undefined" || document.getElementById("market-table").rows[1] === null) {
quickCalcElement.innerHTML += "Invalid data: search market for ALL first";
} else if (typeof(document.getElementById("market-table").rows[1]) != "undefined" || document.getElementById("market-table").rows[1] !== null) {
//heat calc
for (i = 0; i < arrMarketItems.length; i++) {
var arrLogs = [["Logs",1],["Oak Logs",2],["Willow Logs",5],["Maple Logs",10],["Stardust Logs",20]];
for (a = 0; a < arrLogs.length; a++) {
if (arrMarketItems[i][0] == arrLogs[a][0]) {
if (arrMarketItems[i][2][0]/arrLogs[a][1] < arrQuickCalcHeat[1]) {
arrQuickCalcHeat[0] = arrMarketItems[i][0];
arrQuickCalcHeat[1] = arrMarketItems[i][2][0]/arrLogs[a][1];
arrQuickCalcHeat[2] = arrMarketItems[i][2][1];
arrQuickCalcHeat[3] = arrMarketItems[i][2][0];
arrQuickCalcHeat[4] = arrLogs[a][1];
}
if (debugToConsole) { console.log(arrMarketItems[i][0],arrMarketItems[i][2][0]/arrLogs[a][1],arrMarketItems[i][2][1]); }
if (debugToConsole) { console.log(arrQuickCalcHeat[0],arrQuickCalcHeat[1],arrQuickCalcHeat[2]); }
}
}
//stargem
for (a = 0; a < arrStargemInput.length; a++) {
if (arrMarketItems[i][0] == arrStargemInput[a][0]) {
for (b = 2; b < arrMarketItems[i].length; b++) {
if (arrStargemInput[a][2] < arrStargemInput[a][1]) {
if (arrMarketItems[i][b][1] < arrStargemInput[a][1]-arrStargemInput[a][2]) {
arrStargemInput[a][2] += arrMarketItems[i][b][1];
arrStargemInput[a][3] += arrMarketItems[i][b][0]*arrMarketItems[i][b][1];
} else if (arrMarketItems[i][b][1] >= arrStargemInput[a][1]-arrStargemInput[a][2]) {
arrStargemInput[a][3] += (arrStargemInput[a][1]-arrStargemInput[a][2])*arrMarketItems[i][b][0];
arrStargemInput[a][2] = arrStargemInput[a][1];
}
if (debugToConsole) { console.log(arrStargemInput[a][0], arrStargemInput[a][1], arrStargemInput[a][2], arrStargemInput[a][3]); }
}
}
}
}
for (a = 0; a < arrStargemOutput.length; a++) {
if (arrMarketItems[i][0] == arrStargemOutput[a][0]) {
arrStargemOutput[a][1] = arrMarketItems[i][2][0];
break;
}
}
}
quickCalcElement.innerHTML += "Cheapest heat:
"+arrQuickCalcHeat[0]+"
Total logs: "+numberWithCommas(arrQuickCalcHeat[2])+" | Total Heat: "+numberWithCommas(arrQuickCalcHeat[4]*arrQuickCalcHeat[2])+"
Heat price: "+numberWithCommas(arrQuickCalcHeat[1])+" | Log price: "+numberWithCommas(arrQuickCalcHeat[3])+" | Total price: "+numberWithCommas((arrQuickCalcHeat[3]*arrQuickCalcHeat[2]))+"
";
quickCalcElement.innerHTML += "Stargem potion:
Input: ";
for (a = 0; a < 2; a++) {
if (arrStargemInput[a][2] != arrStargemInput[a][1]) {
quickCalcElement.innerHTML += "!!! < "+arrStargemInput[a][1]+" "+arrStargemInput[a][0]+" x"+arrStargemInput[a][2]+" + ";
} else quickCalcElement.innerHTML += numberWithCommas(arrStargemInput[a][3])+" "+arrStargemInput[a][0]+" x"+arrStargemInput[a][2]+" + ";
}
for (a = 2; a < arrStargemInput.length; a++) {
if (arrStargemInput[a][2] != arrStargemInput[a][1]) {
quickCalcElement.innerHTML += "
!!! < "+arrStargemInput[a][1]+" "+arrStargemInput[a][0]+" x"+arrStargemInput[a][2]+" + ";
} else quickCalcElement.innerHTML += "
"+numberWithCommas(arrStargemInput[a][3])+" "+arrStargemInput[a][0]+" = "+numberWithCommas((arrStargemInput[a][3]+arrStargemInput[0][3]+arrStargemInput[1][3]));
}
quickCalcElement.innerHTML += "
Output: "+arrStargemOutput[0][0]+"
@ "+arrStargemOutput[0][1]+" | @ "+(arrStargemOutput[0][1]-1)+" net gain/loss";
for (a = 2; a < arrStargemInput.length; a++) {
if (arrStargemInput[a][2] != arrStargemInput[a][1]) {
//
} else if (arrStargemInput[a][2] == arrStargemInput[a][1]) {
var stargemNet, stargemNet1;
if (a == 5) {
stargemNet = numberWithCommas(((arrStargemOutput[0][1]-1)*(a*120000))-(arrStargemInput[a][3]+arrStargemInput[0][3]+arrStargemInput[1][3]));
stargemNet1 = numberWithCommas(((arrStargemOutput[0][1]-1)*(a*120000))-(arrStargemInput[a][3]+arrStargemInput[0][3]+arrStargemInput[1][3]));
quickCalcElement.innerHTML += "
"+stargemNet+" | "+stargemNet1+" "+arrStargemInput[a][0]+": "+arrStargemOutput[0][0]+ " x"+numberWithCommas(a*120000)+" = "+numberWithCommas((arrStargemOutput[0][1]*(a*120000)));
continue;
}
stargemNet = numberWithCommas((arrStargemOutput[0][1]*((a-1)*100000))-(arrStargemInput[a][3]+arrStargemInput[0][3]+arrStargemInput[1][3]));
stargemNet1 = numberWithCommas(((arrStargemOutput[0][1]-1)*((a-1)*100000))-(arrStargemInput[a][3]+arrStargemInput[0][3]+arrStargemInput[1][3]));
quickCalcElement.innerHTML += "
"+stargemNet+" | "+stargemNet1+" "+arrStargemInput[a][0]+": "+arrStargemOutput[0][0]+ " x"+numberWithCommas(((a-1)*100000))+" = "+numberWithCommas((arrStargemOutput[0][1]*((a-1)*100000)));
}
}
}
} else if (quickCalcOn === false) {
quickCalcElement.style.display = "none";
}
}
function quickCalcButtonClickAction (zEvent) {
if (quickCalcOn === true) {
quickCalcOn = false;
quickCalcMain();
buttonMain();
} else if (quickCalcOn === false) {
quickCalcOn = true;
quickCalcMain();
buttonMain();
}
}
function marketReloaded() {
if (typeof(document.getElementById("market-table").rows[0]) != "undefined" && document.getElementById("market-table").rows[0] !== null) {
// exists
if (document.getElementById("market-table").rows[0].style.backgroundColor == "silver") {
updateMarketSlots();
getMarketItems();
addItemTooltips();
alterMarketTable();
quickCalcMain();
}
}
}
function marketMain() {
if (marketOn === true) {
marketInterval = setInterval(marketReloaded, 0);
}
}
function marketButtonClickAction (zEvent) {
if (marketOn === true) {
marketOn = false;
clearInterval(marketInterval);
buttonMain();
} else if (marketOn === false) {
marketOn = true;
marketMain();
buttonMain();
}
}
function persistentInterval() {
if (nextTick()) {
if (treasureMap > 0) {
document.getElementById("mapSpan").style.display = "";
} else if (treasureMap === 0) {
document.getElementById("mapSpan").style.display = "none";
}
}
}
drawButtons();
marketMain();
document.body.append(quickCalcElement);
alterMarketSlots();
setInterval(persistentInterval, 100);
});