// ==UserScript==
// @name WoD Equipment Tips
// @namespace https://www.wannaexpresso.com/
// @version 0.3
// @description Display minimum equipment requirements!
// @author DotIN13
// @include http://*.world-of-dungeons.org/wod/spiel/hero/items.php*view=gear*
// @include https://*.wannaexpresso.com/wod/spiel/hero/items.php*view=gear*
// @grant none
// @downloadURL https://update.greasyfork.icu/scripts/398570/WoD%20Equipment%20Tips.user.js
// @updateURL https://update.greasyfork.icu/scripts/398570/WoD%20Equipment%20Tips.meta.js
// ==/UserScript==
// todo:
// add error notification
(function() {
'use strict';
var reqList = [];
var hasTooltip = [];
var xhr = [];
var progress = 1;
var equipSel;
// Sort Equipment Requirements //////////////////////////////////////////////
function sortReq () {
var sortList = [{item:[],req:"力量至少为0"},{item:[],req:"体质至少为0"},{item:[],req:"智力至少为0"},{item:[],req:"灵巧至少为0"},{item:[],req:"魅力至少为0"},{item:[],req:"敏捷至少为0"},{item:[],req:"感知至少为0"},{item:[],req:"意志至少为0"}];
for (var i = 0; i < equipSel.length; i++){
if (reqList[i] != "") {
for (var j = 0; j < reqList[i].length; j++){
var isMatch = false;
for (var k = 0; k < sortList.length; k++){
if (reqList[i][j].replace(/\d*/g,"") == sortList[k].req.replace(/\d*/g,"")){
//console.log(reqList[i][j] + "match" + sortList[k].req);
var requestVal = parseInt(reqList[i][j].replace(/(<([^>]+)>)/ig,"").match(/[^0-9]*(\d*)/)[1]);
var sortVal = parseInt(sortList[k].req.replace(/(<([^>]+)>)/ig,"").match(/[^0-9]*(\d*)/)[1]);
if (requestVal > sortVal) {
sortList[k].req = reqList[i][j];
sortList[k].item = [equipSel[i].options[equipSel[i].selectedIndex].innerText];
} else if (requestVal == sortVal) {
sortList[k].item.push(equipSel[i].options[equipSel[i].selectedIndex].innerText);
}
isMatch = true;
}
}
if (!isMatch) sortList.push({item:[equipSel[i].options[equipSel[i].selectedIndex].innerText], req:reqList[i][j]});
}
}
}
//console.log("done");
var outputHTML = "
";
for(var m = 0; m < sortList.length; m++) {
if(m % 2){
outputHTML += "" + sortList[m].item.join(" ") + " | " + sortList[m].req + " |
\n";
}else{
outputHTML += "" + sortList[m].item.join(" ") + " | " + sortList[m].req + " |
\n";
}
}
outputTable.innerHTML = outputHTML;
}
// XMLrequest /////////////////////////////////////////////////////////////
window.XMLrequest = function(URL, i, length){
xhr[i] = new XMLHttpRequest();
xhr[i].onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
outputDiv.innerHTML = "正在加载第" + progress +"件物品";
var reqTitle = $("#details>table>tbody>tr>td:contains('装备要求')",this.responseXML)[0];
if(reqTitle != undefined){
var req = reqTitle.parentElement.lastElementChild.innerHTML.trim();
//console.log(req);
if (!hasTooltip[i]){
wodToolTip(equipSel[i].parentElement,req);
hasTooltip[i] = true;
}else{
wodToolTipContent[equipSel[i].parentElement.id] = req;
}
reqList[i] = req.replace("无任何需求","").split("
");
}else{
reqList[i] = [""];
}
progress++;
if (progress == length + 1) {
outputDiv.innerHTML = "加载完成";
progress = 1;
//console.log(reqList);
sortReq();
}
}
};
xhr[i].open("GET", URL);
xhr[i].responseType = "document";
xhr[i].send();
}
// Add WoD Tip to Equipments //////////////////////////////////////////////
window.equipmentTip = function(){
equipSel = document.querySelectorAll("form table select");
if (equipSel[0] != undefined) {
var id, req, i;
for (i = 0; i < equipSel.length; i++) {
id = equipSel[i].options[equipSel[i].selectedIndex].value == "0" ? -equipSel[i].firstElementChild.value : equipSel[i].options[equipSel[i].selectedIndex].value;
var URL = "/wod/spiel/hero/item.php?item_instance_id=" + id;
equipSel[i].setAttribute("onchange", "document.getElementById('outputDiv').innerHTML = '正在加载第1件物品'; var id = this.value == '0' ? -this.firstElementChild.value : this.value; XMLrequest('/wod/spiel/hero/item.php?item_instance_id=' + id, " + i + ", 1);");
XMLrequest(URL, i, equipSel.length);
}
}else{alert("请先清包!");}
}
// Frontend ////////////////////////////////////////////////////////////
//let calcButton = document.createElement("input");
//calcButton.id = "reqCalcButton";
//calcButton.type = "button";
//calcButton.setAttribute("class","button clickable");
//calcButton.value = "计算最低装备要求";
let tipButton = document.createElement("input");
tipButton.id = "reqTipButton";
tipButton.type = "button";
tipButton.setAttribute("class","button clickable");
tipButton.value = "拉取装备要求";
tipButton.setAttribute("onclick","equipmentTip();");
let outputDiv = document.createElement("div");
outputDiv.id = "outputDiv";
let outputTable = document.createElement("table");
outputTable.id = "outputTable";
outputTable.setAttribute("class","content_table");
var equipTable = document.querySelector("form table");
//equipTable.parentNode.insertBefore(calcButton, equipTable.nextElementSibling);
equipTable.parentNode.insertBefore(outputTable, equipTable.nextElementSibling);
equipTable.parentNode.insertBefore(outputDiv, equipTable.nextElementSibling);
equipTable.parentNode.insertBefore(tipButton, equipTable.nextElementSibling);
var pageBody = document.querySelector("#gadgettable-center-gadgets");
})();