zogre / NGps

// ==UserScript==
// @name        NGps
// @namespace   NGps.com
// @description Fonction de navigation pour les tortues et les déplacements
// @copyright 2015, Raum
// @include     http://www.nacridan.com/*
// @include     http://nacridan.raistlin.fr/*
// @include     http://nacridan.com/*
// @exclude http://www.nacridan.com/conquest/profile.php?id=*
// @exclude http://nacridan.com/conquest/profile.php?id=*
// @exclude http://nacridan.raistlin.fr/conquest/profile.php?id=*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js
// @require https://raw.githubusercontent.com/wilq32/jqueryrotate/master/jQueryRotate.js
// @version     1.2.1
// @grant GM_xmlhttpRequest
// XXoujs:author zogre
// XXdownloadURL https://openuserjs.org/install/zogre/NGps.user.js
// ==/UserScript==
/*
1.0 : 	- creation Avec fleches directionnelles
1.1 : 	- postGPS remplacement de l'alert d'insertion par un message
		- fleche avec rotation et affichage des coordonnées cibles
1.2 : Gestion de l'arrivée
		amélioration du systéme de message
1.2.1 : changement des noms de domaines et exclusions serveur de tests
*/
var save = '';
var lieu = '';
if(document.getElementsByClassName('centerareaview')[0]){
save = document.getElementsByClassName('centerareaview')[0].innerHTML;
lieu = 'OUT';
// 1.5.6.1 zogre
}else if(document.getElementsByClassName('insidebuildingleft')[0]){
save = document.getElementsByClassName('insidebuildingleft')[0].innerHTML;
lieu = 'IN';
}
var Globals = {
  init: function () {
	
    var menu = jQuery('.menuright');
    var dt = jQuery('<dt>GPS</dt>');
    menu.append(dt);
    var dd = jQuery('<dd id=\'vuegps\'/>');
    menu.append(dd);
    dd.hide();
    

    dt.click(function () {
		
			jQuery('#vuegps').toggle(); 
	
    }); 
	
	var form = jQuery('<form/>');
	var label = jQuery('<label/>');
	
	var txt = jQuery('<input/>');
	txt.attr('type', 'txt');
	txt.attr('name', 'inputX');
	txt.attr('id','inputX');
	txt.attr('size','3');
	label.attr('for','inputX');
	label.append('X:');
	form.append(label);
	form.append(txt);
	form.append('<BR/>');
	label = jQuery('<label/>');
	txt = jQuery('<input/>');
	txt.attr('type', 'txt');
	txt.attr('name', 'inputY');
	txt.attr('id','inputY');
	txt.attr('size','3');
	label.attr('for','inputY');
	label.append('Y:');
	form.append(label);
	form.append(txt);
	form.append('<BR/>');
	label = jQuery('<label/>');
	txt = jQuery('<input/>');
	txt.attr('type', 'checkbox');
	txt.attr('name', 'gpsOn');
	txt.attr('id','gpsOn');
	txt.attr('size','3');
	label.attr('for','gpsOn');
	label.append('GPS : ');
	form.append(label);
	form.append(txt);
	form.append('<BR/>');

	txt = jQuery('<button/>');
	txt.attr('type', 'button');
	txt.attr('name', 'btnValid');
	txt.attr('id','btnValid');
	txt.attr('value','Go');
	txt.append('Go!');
	
	
	txt.click(function () {
      postGPS();
    });
	form.append(txt);
	dd.append(form);
   
   var msgBox = jQuery('<input/>');
	msgBox.attr('type', 'txt');
	msgBox.attr('name', 'msgBox');
	msgBox.attr('id','msgBox');
	msgBox.attr('size','30');
	msgBox.attr('style','background-color: transparent;  border: 0px; outline: none;-webkit-box-shadow: none;-moz-box-shadow: none;box-shadow: none;color:black;cursor:default;');
	menu.append(msgBox);
   
	var msg = jQuery('<input/>');
	msg.attr('type', 'txt');
	msg.attr('name', 'msgCoord');
	msg.attr('id','msgCoord');
	msg.attr('size','30');
	msg.attr('style','background-color: transparent;  border: 0px; outline: none;-webkit-box-shadow: none;-moz-box-shadow: none;box-shadow: none;color:black;cursor:default;');
	menu.append(msg);
	
	 console.log(this.cds);
	
  }
}

//code Main *************************************************************************************************

var nom = jQuery('select[name="__idCurPlayer"] :selected').text();
var coords = getCoordCible(nom);
//alert("VALEURS : "+coords.XCIBLE +' - '+ coords.YCIBLE +' - '+ coords.GPS_ON);
//gps(coords.XCIBLE,coords.YCIBLE, coords.GPS_ON);

	
// Fin code Main***************************************************************************************

// function postGPS
// description :  envoie vers la bdd les nouvelle coordonnées ainsi que l'activation
// entrées : N/A
// sorties : affiche un message de succés ou d'erreur aprés la mise à jour de la base

function postGPS() {
	
	
	var nom = jQuery('select[name="__idCurPlayer"] :selected').text();
	var inXcible = document.getElementById('inputX').value;
	var inYcible = document.getElementById('inputY').value;
	var inGpsOn = document.getElementById('gpsOn').checked;
	
	if(inGpsOn)
	{
		inGpsOn = 1;
	}
	else
	{
		inGpsOn = 0;
	}
	
	if (inXcible=="")
	{
			
			inXcible=0;
	}
	if (inYcible=="")
			inYcible=0;
	
	if (isNaN(inXcible)||isNaN(inYcible) )
	{
			alert("Erreur, les coordonnées doivent être numériques");
	}
	else
	{
		
			jQuery('#imgAngle').remove(); 
			//alert('http://nasblabla.youdontcare.com/nacridan/postCoordCible.php'+"nom="+nom+"&Xcible="+inXcible+"&Ycible="+ inYcible+"&GPSON="+inGpsOn);
		 GM_xmlhttpRequest({
			method: 'POST',
			url: 'http://nasblabla.youdontcare.com/nacridan/postCoordCible.php',
			headers: {
			  'Content-Type': 'application/x-www-form-urlencoded'
			},
			//data: JSON.stringify(data),
			data: "nom="+nom+"&Xcible="+inXcible+"&Ycible="+ inYcible+"&GPSON="+inGpsOn,
			onload: function (response) {
						 
			//alert("VALEURS : "+coords.XCIBLE +' - '+ coords.YCIBLE +' - '+ coords.GPS_ON);
				var menu = jQuery('.menuright');
				//menu.append('<br/>Coordonnées cibles insérées');	
				document.getElementById('msgBox').value = "GPS mis à jour";
				gps(inXcible,inYcible, inGpsOn);				
				
			 
			},
			onerror: function (error) {
			  //console.log(error);
			  alert(error);
			}
		  });
		  
		 
	}
	
}
// fin function call getCDMServer




function multilineStr(dummyFunc) {
  var str = dummyFunc.toString();
  str = str.replace(/^[^\/]+\/\*!?/, '') // Strip function () { /*!
  .replace(/\s*\*\/\s*\}\s*$/, '') // Strip */ }
  .replace(/\/\/.+$/gm, '') // Double-slash comments wreck CSS. Strip them.
  ;
  return str;
}

// function getCoord
// description :  récupérer les coordonnées du joueur courant
// entrées : N/A
// sorties : retourne un dictionnaire avec les coordonnées actuelles du joueur
// 
function getCoord(){


var txt = jQuery('div.charac1 + div ').text(); // récupération du div contenant les coordonnées
var coordx = txt.substring(txt.indexOf('X=')+2, txt.indexOf('/')-2);
var coordy = txt.substring(txt.indexOf('Y=')+2, txt.length);
var dicoCoord ={'X':coordx,'Y':coordy};
return dicoCoord;

//alert('X coo =' + dicoCoord['x']);

}


// function getCoordCible
// description :  récupérer les coordonnées cible du GPS en base de données pour le joueur
// entrées : le nom du joueur dont on cherche les coordonnées cibles
// sorties : retourne un dictionnaire avec les coordonnées cibles du joueur
// 
function getCoordCible(pluid) {
	//alert('parti '+pluid);
	var coords = {};
  GM_xmlhttpRequest({
    method: 'POST',
    dataType: "json",
    url: 'http://nasblabla.youdontcare.com/nacridan/getCoordCible.php',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    //data: JSON.stringify(data),
    data: "pid=" + pluid,
   //data: "username=johndoe&password=xyz123",
    onload: coords = function (response) {
      
	  // coords = {'XCIBLE':0,'YCIBLE':0, GPS_ON:0};
	  coords	  = JSON.parse(response.responseText);
	 // alert(coords.GPS_ON);
	  
		 if (coords.XCIBLE != null  && coords.YCIBLE != null)
		 {
			document.getElementById('inputX').value=coords.XCIBLE;
			document.getElementById('inputY').value=coords.YCIBLE;
			
			coords.XCIBLE = parseFloat(coords.XCIBLE);
			coords.YCIBLE = parseFloat(coords.YCIBLE);
			coords.GPS_ON = parseFloat(coords.GPS_ON);
			if(coords.GPS_ON ==1)
			{
				document.getElementById('gpsOn').checked= true;
				
			}
			else
			{
				document.getElementById('gpsOn').checked=false;
			}
			gps(coords.XCIBLE,coords.YCIBLE ,coords.GPS_ON);		
		 }
	  
	  
	  return coords;
	},
    onerror: function (error) {
      //console.log(error);
	 // coords = {'XCIBLE':0,'YCIBLE':0, GPS_ON:0};
      alert(error.responseText);
	  
    }
  });
  return coords;
}
// fin function call

// function getCoordCible
// description :  afficher les fleches directionnelles
// entrées : les coordonnées x,y cible destination. Le flag d'activation. (si activé, on affiche les flèches, Sinon, rien n'est affiché
// sorties : N/A
function gps(ciblex, cibley, activation)
{
	document.getElementById('msgCoord').value = "";
	if(activation){
		var coordonnees = getCoord();
		var menu = jQuery('.menuright');
		var coordx = parseFloat(coordonnees['X']);
		var coordy = parseFloat(coordonnees['Y']);
		var imgx;
		var imgy;
		/*
		if(coordx<ciblex)
		{
			imgx = jQuery("<img src='http://nasblabla.youdontcare.com/nacridan/img/go-next-5.png' height='30' width='30'>");
			menu.append(imgx);
			
		}
		else if(coordx>ciblex)
		{
			imgx = jQuery("<img src='http://nasblabla.youdontcare.com/nacridan/img/go-previous-5.png' height='30' width='30'>");
			menu.append(imgx);		
		}
			
		if(coordy<cibley)
		{
			imgy = jQuery("<img src='http://nasblabla.youdontcare.com/nacridan/img/go-down-5.png' height='30' width='30'>");
			menu.append(imgy);
			
		}
		else if(coordy>cibley)
		{
			imgy = jQuery("<img src='http://nasblabla.youdontcare.com/nacridan/img/go-up-5.png' height='30' width='30'>");
			menu.append(imgy);		
		}*/
		//calcul hypothénuse 
	var hyp = Math.sqrt(Math.pow((coordy-cibley),2)+Math.pow((coordx-ciblex),2));
	var angle = Math.acos((coordx-ciblex)/hyp);
	//conversion gradian degre
	angle = 180 * angle / Math.PI;
	if(cibley>coordy)
	{
		angle = 360-angle;
	}
	
	//alert('angle : ' + angle);
	var imgAngle;
	if(cibley==coordy&&ciblex==coordx)
	{
		imgAngle = jQuery("<img src='http://nasblabla.youdontcare.com/nacridan/img/DDamier.png' height='50' width='50'>");
		imgAngle.attr('id','imgAngle');
	imgAngle.attr('alt',ciblex+"/"+cibley);
	}
	else{
	imgAngle= jQuery("<img src='http://nasblabla.youdontcare.com/nacridan/img/go-previous-5.png' height='50' width='50'>");
	imgAngle.attr('id','imgAngle');
	imgAngle.attr('alt',ciblex+"/"+cibley);
	imgAngle.rotate(angle);
	}
	menu.append(imgAngle);
	document.getElementById('msgCoord').value = ciblex+"/"+cibley;

	}
	
	
}


Globals.init();