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

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 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);
	}
	
})();