CnC Tiberium Coord Box Shortcut

Adds "navigate" button which opens dialog in which you can enter map coordinates and scroll your screen to that location

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name        CnC Tiberium Coord Box Shortcut
// @namespace   noobs
// @description Adds "navigate" button which opens dialog in which you can enter map coordinates and scroll your screen to that location
// @include   https://prodgame*.alliances.commandandconquer.com/*/index.aspx*
// @version     1.1
// ==/UserScript==

// Fixed to work for chrome
// All functions remain untouched
// Original script here http://userscripts.org/scripts/show/137229

(function (){
	var MoveToCoords = function () {
		function getClib(){
			var clib;
			try{
				clib=ClientLib;
			}catch(e)
			{
				alert("can't get clientLib");
				return null;
			}

			if(!clib)
			{
				alert("clib is undefined");
			}
			return clib;
		}
		function getMyCities(){
			var cities =getData().get_Cities().get_AllCities();
			return cities.d;
		}

		function getWorld(){
			var world = getData().get_World();
			return world;
		}
		function getData(){
			return getClib().Data.MainData.GetInstance();
		}

		function getNearestTargets(city){
			var world = getWorld();
			var x = city.get_X();
			var y = city.get_Y();
			var offset = 7;
			var msg = ""+city.get_Name()+"("+x+","+y+")\n";
			var types=["0","1","N","E","@"];
			for(var cy = y - offset; cy < y+ offset;cy++){
				for(var cx = x-offset; cx < x+offset;cx++){

					var kind = types[world.GetTerritoryTypeByCoordinates(cx,cy)];
					var attack;
					try{
						attack = world.CheckAttackBase (cx , cy);
					}catch(e){
						//alert('err!');
					}

					if(attack && (attack == attack.OK)){
						msg+="["+(x-cx)+","+(y-cy)+"]\n";
					}
				  //  var water = world.IsWater(cx,cy) ? 'W':'_';
				  //  var blocked = world.IsBlocked(cx,cy) ? '#':'_';
					//msg+=""+kind;//+water+blocked;
				}
				msg+="\n";
			}
			alert(msg);
		}
		function test(e){
			var clib=getClib();
			var citiesData = getMyCities();
			var counter = 0;
			var msg = "";
			for (var cityFname in citiesData){
				var city = citiesData[cityFname];
				var level = city.get_BaseLevel();
				var name = city.get_Name();
				counter++;
				msg+="'"+name+"':"+level+"\n";
				try{
					city.setResourcesToMax();
				}catch(e)
				{
					alert('cannot exec that func');
				}
			}
			msg = "CITIES:"+counter+"\n"+msg;
			alert(msg);
		}

		function rangeTest(){
			var world = getWorld();
			world.SetRange(true,true,0,0,10,10);
			alert('finished');
		}


		function createButton(name, handler, par){


			var button = document.createElement("button");
			button.setAttribute("type","button");
			button.setAttribute("id", "myButton"+Math.random().toString().substr(2));
			try{
		//        button.value=name;
		//        button.setAttribute("value",name);
		//        button.setAttribute("innerHTML",name);
		//        button.setAttribute("label",name);
		//        button.setAttribute("name",name);
		//        button.setAttribute("text",name);
				button.innerHTML=name;
			}catch(e)
			{
				//do nothing, result is visible
			}
			button.addEventListener("click", handler);
			button.style.height="100%";
			button.style.margin = "2px";
			par.appendChild(button);
		}
		function tryBase(){
			var cities = getMyCities();
			for(var cityFname in cities){
				var city = cities[cityFname];
				getNearestTargets(city);
			}
		}

		function navigate(){
            var dialog = document.getElementById('ta_navigation_container');  
            if(dialog)  
                dialog.style.display = (dialog.style.display == 'block') ? 'none' : 'block';  
            else  
                createDialog(["x","y"], processNavigateDialog);
		}
		function processNavigateDialog(){

		}
		function createDialog(fields, handler){
			var dialog = document.createElement("div");
            dialog.id = 'ta_navigation_container';
			dialog.style.position="absolute";
			dialog.style.top="30px";
			dialog.style.left="127px";
			dialog.style.zIndex="100";
			dialog.style.display="block";
			dialog.style.borderColor="#DCDCDC"
			dialog.style.borderStyle="solid";
			dialog.style.borderWidth="5px";
			dialog.style.backgroundColor="#881515";
			document.body.appendChild(dialog);
			lastDialog=dialog;
			for(var i=0; i < fields.length;i++){
				var inputName = fields[i];
				//var element = document.createElement("div");
				var element = document.createElement("input");
				element.style.margin="2px";
				//var br = document.createElement("br");
				dialog.appendChild(element);
				//dialog.appendChild(br);
			}
			var commit = document.createElement("button");
			commit.innerHTML="Navigate!";
			commit.style.margin="2px";
			commit.addEventListener("click", doNavigate);
			dialog.appendChild(commit);
		}
		function getVis(){
			var clib = getClib();
			return clib.Vis.VisMain.GetInstance();
		}
		function doNavigate(){
			var dia = lastDialog;

			var x = Number(dia.childNodes[0].value);
			var y = Number(dia.childNodes[1].value);
			var vis = getVis();
			vis.CenterGridPosition(x,y);
			document.body.removeChild(lastDialog);
			lastDialog = null;
		}

		function createPanel(){
			var panel = document.createElement("div");
			panel.style.position="absolute";
			panel.style.top="0px";
			panel.style.left="127px";
			//panel.style.height="20px";
			panel.style.zIndex="100";
			panel.style.display="block";
			panel.style.borderColor="#DCDCDC";
			panel.style.borderStyle="solid";
			panel.style.borderWidth="5px";
			panel.style.backgroundColor="#881515";
			document.body.appendChild(panel);
		//    createButton('Test', test,panel);
		//    createButton('Targets',tryBase,panel);
		//    createButton('Range',rangeTest, panel);
			createButton('Navigate', navigate,panel);
		}

		createPanel();
	}
	
	var TASuiteScript = document.createElement("script");
	var txt = MoveToCoords.toString();
	TASuiteScript.innerHTML = "(" + txt + ")();";
	TASuiteScript.type = "text/javascript";
	if (/commandandconquer\.com/i.test(document.domain)) {
		document.getElementsByTagName("head")[0].appendChild(TASuiteScript);
	}
	
})();