NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name MineThings - Vehicles Map
// @namespace http://calbuco.minethings.com/miners/profile/tested123
// @version 0.1
// @description Displays your current moving vehicles on the server map
// @author tested123@minethings.com
// @match http://fogo.minethings.com/vehicles
// @grant none
// ==/UserScript==
// Globals
var prefix = "t123-";
var mapLink = document.getElementsByClassName("lightview");
var $VehiclesDiv = document.getElementById("VehiclesTable"); // Get the main Vehicles element
var $VehiclesTable = $VehiclesDiv.getElementsByTagName("table"); // Get the generated table of owned vehicles
var $VehicleRows = $VehiclesDiv.getElementsByTagName("tr"); // Get all table rows
var traveling = [];
var pathName;
var nameColumn; var rankIcon; var rankColor; var rankAchor;
// Get and store all the available traveling vehicle info
for (i=1;i<$VehicleRows.length;i++) {
pathName = $VehicleRows[i].cells[2].innerHTML;
if (pathName.indexOf("-") > 0) {
pathName = pathName.replace(/\s+/g, '');
nameColumn = $VehicleRows[i].cells[0];
if (nameColumn !== null)
rankAchor = $VehicleRows[i].cells[0].firstChild;
else rankAchor = null;
if (rankAchor !== null)
rankIcon = rankAchor.firstChild;
else rankIcon = null;
rankColor = "#000000";
if (rankIcon !== null) {
if (rankIcon.src.indexOf("R6") > 0) { rankColor = "#e0df08"; }
else if (rankIcon.src.indexOf("R5") > 0) { rankColor = "#9dd713"; }
else if (rankIcon.src.indexOf("R4") > 0) { rankColor = "#92b5b5"; }
else if (rankIcon.src.indexOf("R3") > 0) { rankColor = "#ee6a6a"; }
else if (rankIcon.src.indexOf("R2") > 0) { rankColor = "#a64891"; }
else if (rankIcon.src.indexOf("R1") > 0) { rankColor = "#f79720"; }
}
var classColor = "#000000";
switch($VehicleRows[i].cells[1].firstChild.className) {
case "yellow": classColor = "yellow"; break; // "#cfb317"; break;
case "green": classColor = "#678917"; break;
case "blue": classColor = "#789b9b"; break;
case "red": classColor = "#e31e1e"; break;
case "purple": classColor = "#a64891"; break;
case "orange": classColor = "#f79720"; break;
}
distanceRemaining = $VehicleRows[i].cells[3].innerHTML;
id = $VehicleRows[i].cells[4].firstChild.href.split("/")[5];
speed = $VehicleRows[i].cells[4].firstChild.innerHTML.split("/")[3];
status = $VehicleRows[i].cells[5].innerHTML;
traveling.push({"id":id,"pathName":pathName,"distanceRemaining":distanceRemaining,"speed":speed,"classColor":classColor,"rankColor":rankColor,"status":status});
// Add classname to rows for kicks
$VehicleRows[i].className=prefix+pathName;
} else {}
}
// Methods
function createCircle(svg,pathId,route,plotPoint,name,vehicle) {
var myCircle = document.createElementNS(svg.namespaceURI,"circle");
myCircle.setAttributeNS(null,"id",name);
myCircle.setAttributeNS(null,"cx",plotPoint.x);
myCircle.setAttributeNS(null,"cy",plotPoint.y);
myCircle.setAttributeNS(null,"r",2);
myCircle.setAttributeNS(null,"fill","black");
myCircle.setAttributeNS(null,"stroke-width",0);
myCircle.setAttributeNS(null,"stroke",vehicle.rankColor);
return myCircle;
}
function createVehicle(svg,pathId,route,vehicle) {
var name = prefix+vehicle.id;
var path = svg.querySelector("#"+prefix+route.name);
var pathLength = path.getTotalLength();
var distanceTraveled;
if (vehicle.direction) {
distanceTraveled = route.distance - vehicle.distanceRemaining;
} else {
if (route.distance-vehicle.distanceRemaining < 15)
distanceTraveled = route.distance-15;
else
distanceTraveled = vehicle.distanceRemaining;
}
var distancePercentage = distanceTraveled/route.distance;
var plotLength = pathLength*distancePercentage;
var bow = path.getPointAtLength(plotLength);
var pointAtLengthBack;
var stern;
if (vehicle.direction) {
pointAtLengthBack = path.getPointAtLength(plotLength-10);
stern = path.getPointAtLength(plotLength-15);
} else {
pointAtLengthBack = path.getPointAtLength(plotLength+10);
stern = path.getPointAtLength(plotLength+15);
}
var myPolygon = document.createElementNS(svg.namespaceURI,"polygon");
var sternStarboardX = pointAtLengthBack.x + (bow.y - pointAtLengthBack.y)/Math.sqrt(3);
var sternStarboardY = pointAtLengthBack.y + (pointAtLengthBack.x - bow.x)/Math.sqrt(3);
var sternPortX = pointAtLengthBack.x + (pointAtLengthBack.y - bow.y)/Math.sqrt(3);
var sternPortY = pointAtLengthBack.y + (bow.x - pointAtLengthBack.x)/Math.sqrt(3);
myPolygon.setAttributeNS(null,"points",bow.x +","+ bow.y +" "+ sternPortX +","+ sternPortY +" "+ stern.x +","+ stern.y +" "+ sternStarboardX +","+ sternStarboardY);
myPolygon.setAttributeNS(null,"id",name);
myPolygon.setAttributeNS(null,"fill",vehicle.classColor);
myPolygon.setAttributeNS(null,"stroke-width",2);
myPolygon.setAttributeNS(null,"stroke",vehicle.rankColor);
svg.appendChild(myPolygon);
if(vehicle.status.indexOf("engaged") > 0) {
svg.appendChild(createCircle(svg,pathId,route,pointAtLengthBack,name+"Eng",vehicle));
}
}
function createPath(svgNS,pathName,pathDescription) {
var path= document.createElementNS(svgNS,'path');
path.setAttribute("id", pathName);
path.setAttribute("d", pathDescription);
path.setAttribute("stroke", "black");
path.setAttribute("stroke-width", 0);
path.setAttribute("opacity", 1);
path.setAttribute("fill", "none");
return path;
}
function createSVG(executionCount) {
var mapIFrame = document.getElementById("lightviewContent");
if (mapIFrame!=null) {
var paths = [
{"name":"Bywater-Quarry","description":"M 456.00,60.00 " +
"C 456.00,60.00 466.00,68.67 439.33,139.33 " +
"440.67,151.33 460.67,159.33 460.67,159.33 " +
"460.67,159.33 486.67,208.00 473.33,250.67",
"distance":250},
{"name":"Bywater-Pincup","description":"M 456.00,58.00 " +
"C 456.00,58.00 594.00,116.00 617.00,210.00 " +
"692.00,254.00 705.00,376.00 705.00,376.00",
"distance":450},
{"name":"Bywater-Gamwich","description":"M 457.00,60.00 " +
"C 457.00,60.00 615.00,64.00 621.00,54.00 " +
"627.00,44.00 686.00,32.00 736.00,100.00",
"distance":300},
{"name":"Quarry-Pincup","description":"M 477.00,257.00 " +
"C 477.00,257.00 605.00,219.00 621.00,310.00 " +
"634.00,381.00 706.00,376.00 706.00,376.00",
"distance":300},
{"name":"Gamwich-Pincup","description":"M 741.00,102.00 " +
"C 741.00,102.00 771.00,118.00 747.00,188.00 " +
"747.00,267.00 826.00,245.00 707.00,380.00",
"distance":325},
{"name":"Quarry-Dwaling","description":"M 476.00,258.00 " +
"C 476.00,258.00 482.00,290.00 520.00,300.00 " +
"547.00,335.00 523.00,375.00 515.00,387.00 " +
"507.00,399.00 502.00,448.00 502.00,448.00 " +
"502.00,448.00 507.00,461.00 465.00,492.00",
"distance":300},
{"name":"Dwaling-Pincup","description":"M 463.00,496.00 " +
"C 463.00,496.00 513.00,482.00 635.00,476.00 " +
"702.00,453.00 651.00,417.00 706.00,381.00",
"distance":325}
];
var svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
svg.setAttribute("id", prefix+"_mapSVG");
svg.setAttribute('width',832);
svg.setAttribute('height',617);
svg.setAttribute('style','position:absolute;');
svg.setAttribute('viewBox','0 0 816 600');
var svgNS = svg.namespaceURI;
var path;
for (var i=0 ; i<paths.length ; i++) {
path = createPath(svgNS,prefix+paths[i].name,paths[i].description);
svg.appendChild(path);
}
var vehicle, route;
for(var i=0 ; i<traveling.length ; i++) {
switch(traveling[i].pathName) {
case "Quarry-Bywater":
vehicle = traveling[i];
vehicle.direction=false;
route = paths[0];
// sending svg, svgPathID, route, and vehicle from traveling array
createVehicle(svg,"#t123-Bywater-Quarry",route,vehicle);
break;
case "Bywater-Quarry":
vehicle = traveling[i];
vehicle.direction=true;
route = paths[0];
createVehicle(svg,"#t123-Bywater-Quarry",route,vehicle);
break;
case "Bywater-Pincup":
vehicle = traveling[i];
vehicle.direction=true;
route = paths[1];
createVehicle(svg,"#t123-Bywater-Pincup",route,vehicle);
break;
case "Pincup-Bywater":
vehicle = traveling[i];
vehicle.direction=false;
route = paths[1];
createVehicle(svg,"#t123-Bywater-Pincup",route,vehicle);
break;
case "Bywater-Gamwich":
vehicle = traveling[i];
vehicle.direction=true;
route = paths[2];
createVehicle(svg,"#t123-Bywater-Gamwich",route,vehicle);
break;
case "Gamwich-Bywater":
vehicle = traveling[i];
vehicle.direction=false;
route = paths[2];
createVehicle(svg,"#t123-Bywater-Gamwich",route,vehicle);
break;
case "Quarry-Pincup":
vehicle = traveling[i];
vehicle.direction=true;
route = paths[3];
createVehicle(svg,"#t123-Quarry-Pincup",route,vehicle);
break;
case "Pincup-Quarry":
vehicle = traveling[i];
vehicle.direction=false;
route = paths[3];
createVehicle(svg,"#t123-Quarry-Pincup",route,vehicle);
break;
case "Pincup-Gamwich":
vehicle = traveling[i];
vehicle.direction=false;
route = paths[4];
createVehicle(svg,"#t123-Gamwich-Pincup",route,vehicle);
break;
case "Gamwich-Pincup":
vehicle = traveling[i];
vehicle.direction=true;
route = paths[4];
createVehicle(svg,"#t123-Gamwich-Pincup",route,vehicle);
break;
case "Quarry-Dwaling":
vehicle = traveling[i];
vehicle.direction=true;
route = paths[5];
createVehicle(svg,"#t123-Quarry-Dwaling",route,vehicle);
break;
case "Dwaling-Quarry":
vehicle = traveling[i];
vehicle.direction=false;
route = paths[5];
createVehicle(svg,"#t123-Quarry-Dwaling",route,vehicle);
break;
case "Dwaling-Pincup":
vehicle = traveling[i];
vehicle.direction=true;
route = paths[6];
createVehicle(svg,"#t123-Dwaling-Pincup",route,vehicle);
break;
case "Pincup-Dwaling":
vehicle = traveling[i];
vehicle.direction=false;
route = paths[6];
createVehicle(svg,"#t123-Dwaling-Pincup",route,vehicle);
break;
}
}
mapIFrame.parentNode.insertBefore(svg,mapIFrame);
} else if (executionCount > 10) {
// Do nothing after 10 attempts, no sense in trying and wasting memory.
} else {
setTimeout(function() {
createSVG(executionCount+1)
}, 1000); // Map hasn't loaded, try again in 1 second
}
}
// Events
mapLink[0].onclick=function(){
createSVG(1);
};