hwmmapmove

перемещение по карте в один клик, скрипт для ГВД

As of 2014-12-22. See the latest version.

// (c) 2008-2010, xo4yxa
// (c) 2014, Ded Moroz
//
// ==UserScript==
// @name          hwmmapmove
// @namespace     ded_moroz
// @description   перемещение по карте в один клик, скрипт для ГВД
// @version       2.4
// @homepage      https://greasyfork.org/users/7571-ded-moroz
// @include       http://www.heroeswm.ru/map.php*
// @grant         GM_getValue
// @grant         GM_setValue
// @grant         GM_xmlhttpRequest
// ==/UserScript==

if( !this.GM_getValue || ( this.GM_getValue.toString && this.GM_getValue.toString().indexOf("not supported")>-1 ) )
{
	this.GM_getValue = function( key , def )
	{
		return localStorage[key] || def ;
	};
	this.GM_setValue = function( key , value )
	{
		return localStorage[key] = value;
	};
	this.GM_deleteValue = function( key )
	{
		return delete localStorage[key] ;
	};
}

var ver = '2.4'
var coop = '<center style="font-size:10px;">&#169; <a href="http://www.heroeswm.ru/pl_info.php?id=130" style="font-size:10px;">xo4yxa</a>, <a href="mailto:[email protected]" style="font-size:10px;" target="_top">Ded Moroz</a> <a href="https://greasyfork.org/users/7571-ded-moroz" style="font-size:10px;">hwm map move</a> v. ' + ver + '. <span style="text-decoration:underline;cursor:pointer;font-weight:bold;" id="hwmmm_options">Настройки</span></center>' ;

var url = 'http://www.heroeswm.ru/' ;
var url_cur = location.href ;
var url_ref = document.referrer ;
var els = document.getElementsByTagName('param');
for (i = 0; i < els.length; i++)
{
    if (els[i].getAttribute('value').contains('map.swf'))
    {
    	var pl = els[i+1].getAttribute('value').split('=')[1].split(':') ;
        var ems = els[i+1].parentNode;
        var map_swf = els[i].getAttribute('value');
        break;
    }
}
var road = new Array() ;

var transp;
if (pl[17] == 0)
{
	transp = GM_getValue( "transport" , 0 );
	if (transp >= 3)
	{
		// set default simple transport
		GM_setValue( "transport" , 0 );
		transp = 0;
	}
}
else
{
	transp = GM_getValue( "transport" , 3 );
	if (transp < 3)
	{
		// set default advanced transport
		GM_setValue( "transport" , 3 );
		transp = 3;
	}
}

var trtime = new Array( 120 , 84 , 60 , 36 , 24 , 12 ) ; // время перемещения по прямой
var trtimed = new Array( 169 , 118 , 84 , 50 , 33 , 16 ) ; // время перемещения по диагонали
var plgn = [ '2' , '6' , '16' , '21' ] ; // секотра с ГН
var b = document.getElementsByTagName( 'body' ) ;

// вступать в бой ГР
if( pl[14] == 0 && b[0].innerHTML.indexOf( 'ranger_attack.php' ) > 0 && ( GM_getValue( "checkgv" , 0 ) == 1 ) )
	window.location.href = url + 'ranger_attack.php' ;

//если в столице и гр нонстоп
/*
if( pl[14] == 0 && pl[0] == 1 && ( GM_getValue( "checkgvn" , 0 ) == 1 ) && url_ref == 'http://www.heroeswm.ru/map.php' )
	window.location.href = url + 'ranger_guild.php' ;
*/

// если было задание ГН и пришли в сектор где есть ГН
if( pl[14] == 0 && pl[13] == -1 && plgn.indexOf(pl[0]) != -1 && GM_getValue( "checkgn" , 0 ) == 1 )
	window.location.href = url + 'mercenary_guild.php' ;

/*
 - x
|
y
  47   48   49   50   51   52   53   54
  --   --   --   --   --   --   --   --
| 00 | 23 | 09 | 06 | 24 | 16 | 00 | 00 | 48
  --   --   --   --   --   --   --   --
| 00 | 13 | 12 | 03 | 04 | 15 | 18 | 00 | 49
  --   --   --   --   --   --   --   --
| 00 | 27 | 08 | 01 | 02 | 14 | 17 | 00 | 50
  --   --   --   --   --   --   --   --
| 00 | 00 | 07 | 05 | 11 | 00 | 00 | 00 | 51
  --   --   --   --   --   --   --   --
| 00 | 00 | 26 | 10 | 19 | 00 | 00 | 00 | 52
  --   --   --   --   --   --   --   --
| 00 | 00 | 00 | 00 | 20 | 21 | 00 | 00 | 53
  --   --   --   --   --   --   --
| 00 | 00 | 00 | 00 | 00 | 22 | 00 | 00 | 54
  --   --   --   --   --   --   --   --
*/


var dm = document.createElement( 'div' );
dm.innerHTML = '<br><center><a href="http://www.heroeswm.ru/ranger_guild.php"><img src="http://im.heroeswm.ru/i/houses/ranger.gif" border="0" title="Гильдия Рейнджеров"></a> <a href="http://www.heroeswm.ru/hunter_guild.php"><img src="http://im.heroeswm.ru/i/houses/hunter.gif" border="0" title="Гильдия Охотников"></a> <a href="http://www.heroeswm.ru/mercenary_guild.php"><img src="http://im.heroeswm.ru/i/houses/merc.gif" border="0" title="Гильдия Наёмников"></a> <a href="http://www.heroeswm.ru/thief_guild.php"><img src="http://im.heroeswm.ru/i/houses/thief.gif" border="0" title="Гильдия Воров"></a></center><table>' +
'<tr>' +
'<td><div id="loc_23"></div></td>' +
'<td><div id="loc_9"></div></td>' +
'<td><div id="loc_6"></div></td>' +
'<td><div id="loc_24"></div></td>' +
'<td><div id="loc_16"></div></td>' +
'<td></td>' +
'</tr>' +
'<tr>' +
'<td><div id="loc_13"></div></td>' +
'<td><div id="loc_12"></div></td>' +
'<td><div id="loc_3"></div></td>' +
'<td><div id="loc_4"></div></td>' +
'<td><div id="loc_15"></div></td>' +
'<td><div id="loc_18"></div></td>' +
'</tr>' +
'<tr>' +
'<td><div id="loc_27"></div></td>' +
'<td><div id="loc_8"></div></td>' +
'<td><div id="loc_1"></div></td>' +
'<td><div id="loc_2"></div></td>' +
'<td><div id="loc_14"></div></td>' +
'<td><div id="loc_17"></div></td>' +
'</tr>' +
'<tr>' +
'<td></td>' +
'<td><div id="loc_7"></div></td>' +
'<td><div id="loc_5"></div></td>' +
'<td><div id="loc_11"></div></td>' +
'<td></td>' +
'<td></td>' +
'</tr>' +
'<tr>' +
'<td></td>' +
'<td><div id="loc_26"></div></td>' +
'<td><div id="loc_10"></div></td>' +
'<td><div id="loc_19"></div></td>' +
'<td></td>' +
'<td></td>' +
'</tr>' +
'<tr>' +
'<td></td>' +
'<td></td>' +
'<td></td>' +
'<td><div id="loc_20"></div></td>' +
'<td><div id="loc_21"></div></td>' +
'<td></td>' +
'</tr>' +
'<tr>' +
'<td></td>' +
'<td></td>' +
'<td></td>' +
'<td></td>' +
'<td><div id="loc_22"></div></td>' +
'<td></td>' +
'</tr>' +
'</table><br>' +
coop + '<br>' ;

if( GM_getValue( "checklng" ) && GM_getValue( "checklng" ) == 1 )
{
	var check_lng_v = 1 ;
	var lng = 2 + 3 ;
} else
{
	var check_lng_v = 0 ;
	var lng = 1 + 3 ;
}


// cX_Y
var locX =
{
	c50_50:	1 ,	//Empire Capital
	c51_50:	2 ,	//East River
	c50_49:	3 ,	//Tiger's Lake
	c51_49:	4 ,	//Rogue's Wood
	c50_51:	5 ,	//Wolf's Dale
	c50_48:	6 ,	//Peaceful Camp
	c49_51:	7 ,	//Lizard's Lowland
	c49_50:	8 ,	//Green Wood
	c49_48:	9 ,	//Inferno portal 2//Eagle's Nest
	c50_52:	10,	//Inferno portal 1//Portal's ruins
	c51_51:	11,	//Dragon's Caves
	c49_49:	12,	//Shining Spring
	c48_49:	13,	//Sunny City
 	c52_50:	14,	//Magma Mines
	c52_49:	15,	//Bear' Mountain
	c52_48:	16,	//Fairy Trees
	c53_50:	17,	//Port City
	c53_49:	18,	//Mythril Coast
	c51_52:	19,	//Great Wall
	c51_53:	20,	//Titans' Valley
	c52_53:	21,	//Fishing village
	c52_54:	22,	//Kingdom Castle
	c48_48: 23,	//Ungovernable Steppe
	c51_48: 24,	//Crystal Garden
	c49_52: 26,	//The Wilderness
	c48_50: 27	//Sublime Arbor

}


// locations array
var locArr = new Array
(
//		0i	1x	2y	3r	4ne				5nr
	[] ,
	[ 1 , 	50 ,	50 ,	1 ,	'Empire Capital' ,		'Столица Империи' ] ,
	[ 2 ,	51 ,	50 ,	1 ,	'East River' ,			'Восточная Река' ] ,
	[ 3 ,	50 ,	49 ,	1 ,	'Tiger\'s Lake' ,		'Тигриное Озеро' ] ,
	[ 4 ,	51 ,	49 ,	1 ,	'Rogue\'s Wood' ,		'Лес Разбойников' ] ,
	[ 5 ,	50 ,	51 ,	1 ,	'Wolf\'s Dale' ,		'Долина Волков' ] ,
	[ 6 ,	50 ,	48 ,	1 ,	'Peaceful Camp' ,		'Мирный Лагерь' ] ,
	[ 7 ,	49 ,	51 ,	1 ,	'Lizard\'s Lowland' ,	'Равнина Ящеров' ] ,
	[ 8 ,	49 ,	50 ,	1 ,	'Green Wood' ,			'Зеленый Лес' ] ,
	[ 9 ,	49 ,	48 ,	1 ,	'Eagle\'s Nest' ,		'Орлиное Гнездо' ] ,
	[ 10 ,	50 ,	52 ,	1 ,	'Portal\'s ruins' ,		'Руины Портала' ] ,
	[ 11 ,	51 ,	51 ,	1 ,	'Dragon\'s Caves' ,		'Пещеры Драконов' ] ,
	[ 12 ,	49 ,	49 ,	1 ,	'Shining Spring' ,		'Сияющий Родник' ] ,
	[ 13 ,	48 ,	49 ,	1 ,	'Sunny City' ,			'Солнечный Город' ] ,
	[ 14 ,	52 ,	50 ,	1 ,	'Magma Mines' ,			'Магма Шахты' ] ,
	[ 15 ,	52 ,	49 ,	1 ,	'Bear\' Mountain' ,		'Медвежья Гора' ] ,
	[ 16 ,	52 ,	48 ,	1 ,	'Fairy Trees' ,			'Магический Лес' ] ,
	[ 17 ,	53 ,	50 ,	1 ,	'Port City' ,			'Портовый Город' ] ,
	[ 18 ,	53 ,	49 ,	1 ,	'Mythril Coast' ,		'Мифриловый Берег' ] ,
	[ 19 ,	51 ,	52 ,	1 ,	'Great Wall' ,			'Великая Стена' ] ,
	[ 20 ,	51 ,	53 ,	1 ,	'Titans\' Valley' ,		'Равнина Титанов' ] ,
	[ 21 ,	52 ,	53 ,	1 ,	'Fishing village' ,		'Рыбачье село' ] ,
	[ 22 ,	52 ,	54 ,	1 ,	'Kingdom Castle' ,		'Замок Королевства' ] ,
	[ 23 ,	48 ,	48 ,	1 ,	'Ungovernable Steppe' ,	'Непокорная Степь' ] ,
	[ 24 ,	51 ,	48 ,	1 , 'Crystal Garden' ,		'Кристальный Сад' ] ,
	[] ,
	[ 26 ,	49 ,	52 ,	1 ,	'The Wilderness' ,		'Дикие Земли' ] ,
	[ 27 ,	48 ,	50 ,	1 ,	'Sublime Arbor' ,		'Великое Древо' ]
)

// location error
// сначала путь берет диагональ, а потом катет
var locP =
{
	l1_14: 11 ,
	l1_17: 11 ,
	l1_26: 5 ,

	l2_14: 15 ,
	l2_18: 15 ,
	l2_17: 15 ,
	l2_21: 11 ,
	l2_22: 11 ,

	l3_14: 4 ,
	l3_16: 4 ,
	l3_17: 4 ,
	l3_26: 5 ,

	l4_14: 15 ,
	l4_16: 15 ,
	l4_17: 15 ,
	l4_21: 2 ,
	l4_22: 2 ,

	l5_14: 11 ,
	l5_17: 11 ,
	l5_19: 10 ,
	l5_20: 10 ,
	l5_21: 10 ,
	l5_22: 10 ,

	l6_2: 4 ,
	l6_16: 4 ,
	l6_26: 5 ,

	l7_14: 5 ,
	l7_17: 5 ,
	l7_26: 5 ,

	l8_14: 5 ,
	l8_17: 5 ,
	l8_26: 5 ,

	l9_16: 3 ,

	l11_21: 19 ,
	l11_22: 19 ,

	l12_14: 3 ,
	l12_16: 3 ,
	l12_17: 3 ,

	l13_14: 12 ,
	l13_16: 12 ,
	l13_17: 12 ,

	l14_1: 11 ,
	l14_2: 15 ,
	l14_3: 15 ,
	l14_4: 15 ,
	l14_6: 15 ,
	l14_8: 11 ,
	l14_9: 15 ,
	l14_12: 15 ,
	l14_13: 15 ,
	l14_18: 15 ,
	l14_21: 11 ,
	l14_22: 11 ,
	l14_27: 11 ,

	l16_1: 15 ,
	l16_2: 15 ,
	l16_3: 15 ,
	l16_4: 15 ,
	l16_5: 15 ,
	l16_6: 15 ,
	l16_7: 15 ,
	l16_8: 15 ,
	l16_9: 15 ,
	l16_10: 15 ,
	l16_11: 15 ,
	l16_12: 15 ,
	l16_13: 15 ,
	l16_19: 15 ,
	l16_20: 15 ,
	l16_23: 15 ,
	l16_24: 15 ,
	l16_26: 15 ,
	l16_27: 15 ,

	l17_2: 15 ,
	l17_5: 14 ,
	l17_7: 14 ,
	l17_10: 14 ,
	l17_11: 14 ,
	l17_19: 14 ,
	l17_20: 14 ,
	l17_21: 14 ,
	l17_22: 14 ,
	l17_26: 14 ,

	l18_1: 15 ,
	l18_2: 15 ,
	l18_5: 15 ,
	l18_6: 15 ,
	l18_7: 15 ,
	l18_8: 15 ,
	l18_9: 15 ,
	l18_10: 15 ,
	l18_11: 15 ,
	l18_14: 15 ,
	l18_19: 15 ,
	l18_20: 15 ,
	l18_21: 15 ,
	l18_22: 15 ,
	l18_27: 15 ,

	l19_1: 11 ,
	l19_3: 11 ,
	l19_5: 10 ,
	l19_6: 11 ,
	l19_7: 10 ,
	l19_8: 10 ,
	l19_9: 11 ,
	l19_12: 11 ,
	l19_13: 11 ,
	l19_14: 11 ,
	l19_15: 11 ,
	l19_16: 11 ,
	l19_17: 11 ,
	l19_18: 11 ,

	l20_14: 19 ,
	l20_15: 19 ,
	l20_16: 19 ,
	l20_17: 19 ,
	l20_18: 19 ,

	l21_14: 19 ,
	l21_15: 19 ,
	l21_16: 19 ,
	l21_17: 19 ,
	l21_18: 19 ,

	l22_17: 21 ,
	l22_18: 21 ,

	l23_16: 15 ,

	l24_16: 15 ,
	l24_21: 2 ,
	l24_22: 2 ,
	
	l26_7: 5 ,
	l26_8: 5 ,
	l26_9: 5 ,
	l26_12: 5 ,
	l26_13: 5 ,
	l26_20: 10 ,
	l26_21: 10 ,
	l26_22: 10 ,
	l26_23: 5 ,
	l26_27: 5

}

/* ! Map checks enabled by default. Do NOT change it unless you know what you are doing. */
var map_swf_passed = false;

if (pl[17] == 0)
{
	GM_xmlhttpRequest({
		method: "GET",
		url: map_swf,
		onload: function (response)
		{
			old_size = 220039;
			old_hash = "b441f0ac541408a809ec907b54cc0060";
			new_size = response.responseText.length;
			
			if (new_size == old_size)
			{
				new_hash = CryptoJS.MD5(response.responseText);
				if (new_hash == old_hash) map_swf_passed = true;				
			}
			
			if (map_swf_passed)
			{
				if (GM_getValue( "hwm_map_move" ) == 1) getCXY();
				else init();
			}
			else
			{
				if (new_size != old_size) console.log("New map size: " + response.responseText.length + "\nOld map size: " + old_size);
				else console.log("New map hash: " + new_hash + "\nOld map hash: " + old_hash);
				
				dm.innerHTML += "<center style='font-size:10px;color:red;'>Карта была изменена, генерация ссылок отключена</center>";
				init();
			}
		}
	});
}
else
{
	init();
}

function init()
{
	var el = ems;
	nado = el.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode
/*
0 - cur place
1 - view place
2-10 - have move
11 - gO
12 - gV
13 - gN
14 - loc from move (only move)
15 - last time move (only move)
16 - all time move (only move)
17 - have advanced transport
18 - magic number for moving
19 - ?
20 - clan id
*/
//+ отображение карты
	var vm = GM_getValue( "checkvm" ) ;
	if( vm == 1 )
	{
		ems.style.display = 'none' ;
	} else
	{
// широкая карта, убрана в 1.16.4
//		ems.width = 500;
	}
//-

	if( pl[14] > 0 )
// происходит передвижение
	{
		var mz = GM_getValue( "hwm_map_move_mz" ) ;
		
		if( pl[0] != mz )
		{
			var stop = ' [<a href="javascript: void(0)" id="a_stop_move">stop</a>]' ;
			div	= document.createElement( 'div' );
			div.innerHTML = '<br><div id="hint_move">Пункт назначения: <b>' + locArr[mz][lng] + '</b>' + stop + '</div><br>' + coop ;
			link = document.getElementsByTagName('a');
			link = link[link.length-1].parentNode;
			link.appendChild(div);
			
			$('a_stop_move').addEventListener( "click", setStop , false );
			
			if (!map_swf_passed) setStop();
		}
		else
		{
			div	= document.createElement( 'div' );
			div.innerHTML = '<br><div id="hint_move">Пункт назначения: <b>' + locArr[pl[0]][lng] + '</b></div><br>' + coop ;
			link = document.getElementsByTagName('a');
			link = link[link.length-1].parentNode;
			link.appendChild(div);
		}
		
		$("hwmmm_options").addEventListener( "click", setting , false );

		var mTitle = document.title ;
		var start_time = new Date() ;
		update_time( start_time.getTime() , mTitle ) ;
	} else
// стоим в секторе
	{
		nado.appendChild( dm ) ;
		$("hwmmm_options").addEventListener( "click", setting , false );

		for( l = 1 ; l < locArr.length; l++ )
		{
			var d = $( 'loc_' + l ) ;
			if (d == null) continue ;
			
			d.parentNode.style.textAlign = 'center' ;
			d.style.padding = '1px 3px' ;
			d.style.fontSize = '11px' ;
			d.parentNode.style.border = pl[1] == l ? '1px solid #00f' : '1px solid #abc' ;

			if( l == pl[0] )
// если текущий сектор
			{
				d.style.fontWeight = 'bold' ;
				d.parentNode.style.backgroundColor = 'FFF8DC' ;
				if( pl[13] != 0 && l == pl[13] )
				{
					d.style.color = 'FF0000' ;
				}
				d.innerHTML = locArr[l][lng] ;
			} else
// если какой другой
			{
				a = document.createElement( 'a' );
				a.style.fontSize = '11px' ;
				a.href = 'http://www.heroeswm.ru/move_sector.php?id='+l ;
				if( pl[13] != 0 && l == pl[13] )
// если здание наемников
				{
					a.style.color = 'FF0000' ;
				}
				a.innerHTML = locArr[l][lng] ;
				a.setAttribute( 'tZ' , l ) ;
				
				if (map_swf_passed && pl[17] == 0)
				{
					a.href = 'javascript: void(0)' ;
					a.addEventListener( "click", setMXY , false );
				}

				a.addEventListener( "mouseover", viewPath , false );
				a.addEventListener( "mouseout", hidePath , false );

				d.appendChild( a );
			}

			if( pl[13] == -1 && plgn.indexOf(l) != -1 )
			{
				b = document.createElement( 'b' );
				b.style.color = '#00F' ;
				b.innerHTML = ' X' ;
				d.appendChild( b ) ;
			}

			if( GM_getValue( "checkvs" ) )
			{
				if( pl[1] != l )
				{
					a = document.createElement( 'a' );
					a.href= 'http://www.heroeswm.ru/map.php?cx=' + locArr[l][1] + '&cy=' + locArr[l][2] ;
					a.style.display = 'block' ;
					a.style.width = '100%';
					a.title = 'Осмотреть сектор '+locArr[l][lng] ;
					vi = document.createElement( 'img' );
					vi.src = "data:image/gif,GIF89a%10%00%10%00%D5%00%00B%40B%15%15%18((-PPUzz%7FHHJ%5D%5D_--.zz%7BWWX23%3BEHS%80%88%A2rx%8C%DA%DD%E7bj%80sx%87%88%8C%97%7D%85%98HO_%7D%85%97%88%8C%95psz%DC%DD%DF%D4%D5%D7x%7F%8C%2B-0%C2%DF%FF%DF%F4%FFMOPmop%EF%F1%F2%E7%F9%FF%EA%FD%FF%E7%FF%FF%13%15%15%E9%FF%FF%18%1A%1A%FA%FF%FFmoo%FC%FF%FF%FD%FF%FFZ%5B%5B%5D%5D%5B%40%3F%3F%FF%FF%FF%16%16%16%10%10%10%05%05%05%00%00%00%FF%FF%FF%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%F9%04%01%00%002%00%2C%00%00%00%00%10%00%10%00%00%06%5C%40%99pH%2C%12%13%01%8D%80e%24%02ZP%A8%A2)k%C8%A2%D1As%01Ma'%CDF%D4%14%7D4!-%94%A8%95%BAJ%9A%07P%8B%E4mm%2C%D4H(%CA%A9%AC%A82%05%19%0C%14%041*%17%80E0%1D%18%8AD%2F%06%89%8FB%25'%1F%94B.%08-%992%23%1E%9ECA%00%3B" ;
					vi.style.border = '0px' ;
					a.appendChild( vi ) ;
					d.parentNode.appendChild( a ) ;
				}
			}
		}
	}
}

function update_time( start , title )
{
	new_time=new Date();
	s=pl[15]-Math.round((new_time.getTime()-start)/1000.);
	m=0;h=0;
	if(s<0)
	{
	} else
	{
		if(s>59)
		{
			m=Math.floor(s/60);
			s=s-m*60;
		}
		if(m>59)
		{
			h=Math.floor(m/60);
			m=m-h*60;
		}
		if(s<10)
		{
			s="0"+s;
		}
		if(m<10)
		{
			m="0"+m;
		}
//		document.title=" ["+h+":"+m+":"+s+"] " + title;
		document.title=" ["+m+":"+s+"] " + title;
		setTimeout( function(){ update_time(start,title)},999);
	}
}

function move( cz , mz )
{
	if( pl[14] != 0 )
// если на странице перемещения
	{
		init();
		return ;
	}
	if( mz == cz )
// если прибыли в конечный пункт
	{
		GM_setValue( "hwm_map_move" , 0 ) ;
		GM_setValue( "hwm_map_move_mz" , 0 ) ;
		if( pl[13] == -1 && plgn.indexOf(cz) != -1 && ( GM_getValue( "checkgn" ) && GM_getValue( "checkgn" ) == 1 ) )
// если было задание ГН и пришли в сектор где есть ГН
		{
			window.location.href = url + 'mercenary_guild.php' ;
			return ;
		}
		init();
		return ;
	}

	if( pl[11] != '' && ( GM_getValue( "checkgo" ) && GM_getValue( "checkgo" ) == 1 ) )
// есть охота, пить тоже
	{
		GM_setValue( "hwm_map_move" , 0 ) ;
		GM_setValue( "hwm_map_move_mz" , 0 ) ;
		return ;
	}

	id0 = cz
	idN = mz
	id1 = eval( 'locP.l' + id0 + '_' + idN ) //Ид исключение
	if( id1 && id1 > 0 )
	{
		go(id1);
		return;
	}

	var kC = locArr[id0] ; //координаты текущие
	var kM = locArr[idN] ; //координаты назначения

	if( kC[3] != kM[3] )
	{
		move( cz , eC ) ;
		return ;
	}

	nx = kM[1] > kC[1] ? parseInt(kC[1]) + 1 : ( kM[1] == kC[1] ? kC[1] : parseInt(kC[1]) - 1 ) ;
	ny = kM[2] > kC[2] ? parseInt(kC[2]) + 1 : ( kM[2] == kC[2] ? kC[2] : parseInt(kC[2]) - 1 ) ;
	id = eval( 'locX.c' + nx + '_' + ny ) ;
	go(id);
}

function go(to)
{
	rand = ((pl[0] * 153 + to * 234) % 333 * 234 + pl[18] % 346234 - 142) % 10000 / 10000;
	
	// check if the move is legal
	if (pl.slice(2, 11).indexOf(to.toString()) != -1)
	{
		window.location.href = url + 'move_sector.php?id=' + to + '&rand=' + rand;
	}
	else
	{
		alert('Cant move from ' + pl[0] + ' to ' + to);
	}
}

function setMXY()
{
	GM_setValue( "hwm_map_move_mz" , this.getAttribute( 'tz' ) )
	GM_setValue( "hwm_map_move" , 1 ) ;
	getCXY();
}

function getCXY()
{
	move( pl[0] , GM_getValue( "hwm_map_move_mz" ) ) ;
}

function setStop()
{
	GM_setValue( "hwm_map_move" , 0 ) ;
	GM_setValue( "hwm_map_move_mz" , 0 ) ;
	$('hint_move').innerHTML = 'Конечный пункт назначения <b>' + locArr[pl[0]][lng] + '</b>' ;
}

function setCheck(ch)
{
	if( GM_getValue( ch ) && GM_getValue( ch ) == 1 )
		GM_setValue( ch , 0 );
	else
		GM_setValue( ch , 1 );
}

function setTransport(id)
{
	$("transp"+transp).style.background="#F6F3EA";
	$("transp"+id).style.background="#0000ff";
		
	GM_setValue( "transport" , id );
	transp = id ;
}

function viewPath()
{
	mz = this.getAttribute( 'tz' ) ;
	
	this.title = locArr[mz][lng] + ' (' + path( pl[0] , mz , 0 ) + ')' ;
	function path( cz , mz , t )
	{
		/*
			cz	текущий сектор обсчета
			mz 	конечный сектор обсчета
			t	сумма времени
		*/
		// если прибыли в конечный пункт
		if( mz == cz )
		{
			var myT = new Date(t * 1000);
			myTs = myT.getSeconds();
			return myT.getMinutes() + ':' + ( myTs < 10 ? '0' : '' ) + myTs;
		}
		var nz = 0 ; // следующий сектор, к которому надо действительно двигаться
		var kC = locArr[cz] ; //координаты текущие
		var kM = locArr[mz] ; //координаты назначения
		id1 = eval( 'locP.l' + cz + '_' + mz ) //Ид исключение
		// если есть исключения, следующий сектор будет равен ид исключения
		if( id1 && id1 > 0 )
		{
			nz = id1 ;
		}

		// если исключения, то переназначаем координаты назначения
		if( nz != 0 ) var kM = locArr[nz] ;
		tx = kM[1] > kC[1] ? 1 : ( kM[1] == kC[1] ? 0 : -1 ) ;
		ty = kM[2] > kC[2] ? 1 : ( kM[2] == kC[2] ? 0 : -1 ) ;
		t = ( ty == 0 || tx == 0 ) ? t + trtime[transp] : t + trtimed[transp] ;
		nx = parseInt( kC[1] ) + tx ;
		ny = parseInt( kC[2] ) + ty ;
		id = eval( 'locX.c' + nx + '_' + ny ) ;

		td = $('loc_'+id)
		td.parentNode.style.backgroundColor = 'F0E68C' ;
		road[road.length] = id ;
		return path( id , mz , t );
	}
	return ;
}

function hidePath()
{
	for( i = 0; i < road.length ; i ++ )
	{
		$('loc_'+road[i]).parentNode.style.backgroundColor = 'DDD9CD' ;
	}
	road = new Array() ;
}


//+ закрытие форм
function form_close()
{
	bg = $('bgOverlay') ;
	bgc = $('bgCenter') ;
	if( bg )
	{
		bg.style.display = bgc.style.display = 'none' ;
	}
}
//-


//+ форма настроек
function setting()
{
	bg = $('bgOverlay') ;
	bgc = $('bgCenter') ;
	if( !bg )
	{
		bg = document.createElement('div') ;
		bg.id = 'bgOverlay' ;
		document.body.appendChild( bg );
		bg.style.position = 'absolute' ;
		bg.style.left = '0';
		bg.style.width = '100%';
		bg.style.height = '100%';
		bg.style.background = "#000000";
		bg.style.opacity = "0.5";
		bg.addEventListener( "click", form_close , false );

		bgc = document.createElement('div') ;
		bgc.id = 'bgCenter' ;
		document.body.appendChild( bgc );
		bgc.style.position = 'absolute' ;
		bgc.style.width = '400px';
		bgc.style.background = "#F6F3EA";
		bgc.style.left = ( ( document.body.offsetWidth - 400 ) / 2 ) + 'px' ;
	}

	text = '<div style="border:1px solid #abc;padding:5px;margin:2px;"><div style="float:right;border:1px solid #abc;width:15px;height:15px;text-align:center;cursor:pointer;" id="bt_close" title="Close">x</div><center><table><tr><td><b>Настройки</b></td></tr><tr><td><div><label style="cursor:pointer;"><input type="checkbox" id="id_check_gn"> сдавать задания Гильдии Наемников</lable></div>' +
'<div><label style="cursor:pointer;"><input type="checkbox" id="id_check_gv"> вступать в бои Гильдии Рейнджеров</lable></div>' +
'<div><label style="cursor:pointer;"><input type="checkbox" id="id_check_gvn"> заходить в Гильдию Рейнджеров с дороги</lable></div>' +
'<div><label style="cursor:pointer;"><input type="checkbox" id="id_check_lng" title=""lng ru> название секторов по-русски</lable></div>' +
'<div><label style="cursor:pointer;"><input type="checkbox" id="id_check_vm"> не отображать flash-карту</lable></div>' +
'<div><label style="cursor:pointer;"><input type="checkbox" id="id_check_vs"> отображать кнопки осмотра секторов</lable></div><br><div>Ваш транспорт (<a href="http://www.heroeswm.ru/shop.php?cat=transport">транспорт в магазине</a>):<br><table><tr>' ;
	spl_transp = '<td style="padding:5px;cursor:pointer;" id="transp0"><img src="https://cdn1.iconfinder.com/data/icons/disable-sign/300/Leader-dog-48.png"></td><td style="padding:5px;cursor:pointer;" id="transp1"><img src="http://www.heroeswm.ru/i/transport/1.jpg"></td><td style="padding:5px;cursor:pointer;" id="transp2"><img src="http://www.heroeswm.ru/i/transport/2.jpg"></td></tr></table></div></td></tr></table></center></div>' ;
	adv_transp = '<td style="padding:5px;cursor:pointer;" id="transp3"><img src="http://www.heroeswm.ru/i/transport/3.jpg"></td><td style="padding:5px;cursor:pointer;" id="transp4"><img src="http://www.heroeswm.ru/i/transport/4.jpg"></td><td style="padding:5px;cursor:pointer;" id="transp5"><img src="http://www.heroeswm.ru/i/transport/5.jpg"></td></tr></table></div></td></tr></table></center></div>' ;

	if (pl[17] == 0)
	{
		bgc.innerHTML = text + spl_transp;
		$("transp0").addEventListener( "click", function(){setTransport(0)} , false );
		$("transp1").addEventListener( "click", function(){setTransport(1)} , false );
		$("transp2").addEventListener( "click", function(){setTransport(2)} , false );
	}
	else
	{
		bgc.innerHTML = text + adv_transp;
		$("transp3").addEventListener( "click", function(){setTransport(3)} , false );
		$("transp4").addEventListener( "click", function(){setTransport(4)} , false );
		$("transp5").addEventListener( "click", function(){setTransport(5)} , false );
	}	

	$("transp"+transp).style.background="#0000ff";

	$("bt_close").addEventListener( "click", form_close , false );

	var check_gv = $('id_check_gv')
	check_gv.checked = GM_getValue( "checkgv" , 0 ) == 1 ? 'checked' : '' ;
	check_gv.addEventListener( "click", function(){setCheck('checkgv')} , false );

	var check_gvn = $('id_check_gvn')
	check_gvn.checked = GM_getValue( "checkgvn" , 0 ) == 1 ? 'checked' : '' ;
	check_gvn.addEventListener( "click", function(){setCheck('checkgvn')} , false );

	var check_gn = $('id_check_gn')
	check_gn.checked = GM_getValue( "checkgn" , 0 ) == 1 ? 'checked' : '' ;
	check_gn.addEventListener( "click", function(){setCheck('checkgn')} , false );

	var check_vm = $('id_check_vm')
	check_vm.checked = GM_getValue( "checkvm" , 0 ) == 1 ? 'checked' : '' ;
	check_vm.addEventListener( "click", function(){setCheck('checkvm')} , false );

	var check_vs = $('id_check_vs')
	check_vs.checked = GM_getValue( "checkvs" , 0 ) == 1 ? 'checked' : '' ;
	check_vs.addEventListener( "click", function(){setCheck('checkvs')} , false );

	var check_lng = $('id_check_lng') ;
	check_lng.checked = check_lng_v == 1 ? 'checked' : '' ;
	check_lng.addEventListener( "click", function(){setCheck('checklng')} , false );

	bg.style.top = (-document.body.scrollTop)+'px';
	bgc.style.top = ( document.body.scrollTop + 150 ) + 'px';
	bg.style.display = 	bgc.style.display = 'block' ;
}
//-

function $( id ) { return document.getElementById( id ); }

/*
CryptoJS v3.1.2
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
var CryptoJS=CryptoJS||function(s,p){var m={},l=m.lib={},n=function(){},r=l.Base={extend:function(b){n.prototype=this;var h=new n;b&&h.mixIn(b);h.hasOwnProperty("init")||(h.init=function(){h.$super.init.apply(this,arguments)});h.init.prototype=h;h.$super=this;return h},create:function(){var b=this.extend();b.init.apply(b,arguments);return b},init:function(){},mixIn:function(b){for(var h in b)b.hasOwnProperty(h)&&(this[h]=b[h]);b.hasOwnProperty("toString")&&(this.toString=b.toString)},clone:function(){return this.init.prototype.extend(this)}},
q=l.WordArray=r.extend({init:function(b,h){b=this.words=b||[];this.sigBytes=h!=p?h:4*b.length},toString:function(b){return(b||t).stringify(this)},concat:function(b){var h=this.words,a=b.words,j=this.sigBytes;b=b.sigBytes;this.clamp();if(j%4)for(var g=0;g<b;g++)h[j+g>>>2]|=(a[g>>>2]>>>24-8*(g%4)&255)<<24-8*((j+g)%4);else if(65535<a.length)for(g=0;g<b;g+=4)h[j+g>>>2]=a[g>>>2];else h.push.apply(h,a);this.sigBytes+=b;return this},clamp:function(){var b=this.words,h=this.sigBytes;b[h>>>2]&=4294967295<<
32-8*(h%4);b.length=s.ceil(h/4)},clone:function(){var b=r.clone.call(this);b.words=this.words.slice(0);return b},random:function(b){for(var h=[],a=0;a<b;a+=4)h.push(4294967296*s.random()|0);return new q.init(h,b)}}),v=m.enc={},t=v.Hex={stringify:function(b){var a=b.words;b=b.sigBytes;for(var g=[],j=0;j<b;j++){var k=a[j>>>2]>>>24-8*(j%4)&255;g.push((k>>>4).toString(16));g.push((k&15).toString(16))}return g.join("")},parse:function(b){for(var a=b.length,g=[],j=0;j<a;j+=2)g[j>>>3]|=parseInt(b.substr(j,
2),16)<<24-4*(j%8);return new q.init(g,a/2)}},a=v.Latin1={stringify:function(b){var a=b.words;b=b.sigBytes;for(var g=[],j=0;j<b;j++)g.push(String.fromCharCode(a[j>>>2]>>>24-8*(j%4)&255));return g.join("")},parse:function(b){for(var a=b.length,g=[],j=0;j<a;j++)g[j>>>2]|=(b.charCodeAt(j)&255)<<24-8*(j%4);return new q.init(g,a)}},u=v.Utf8={stringify:function(b){try{return decodeURIComponent(escape(a.stringify(b)))}catch(g){throw Error("Malformed UTF-8 data");}},parse:function(b){return a.parse(unescape(encodeURIComponent(b)))}},
g=l.BufferedBlockAlgorithm=r.extend({reset:function(){this._data=new q.init;this._nDataBytes=0},_append:function(b){"string"==typeof b&&(b=u.parse(b));this._data.concat(b);this._nDataBytes+=b.sigBytes},_process:function(b){var a=this._data,g=a.words,j=a.sigBytes,k=this.blockSize,m=j/(4*k),m=b?s.ceil(m):s.max((m|0)-this._minBufferSize,0);b=m*k;j=s.min(4*b,j);if(b){for(var l=0;l<b;l+=k)this._doProcessBlock(g,l);l=g.splice(0,b);a.sigBytes-=j}return new q.init(l,j)},clone:function(){var b=r.clone.call(this);
b._data=this._data.clone();return b},_minBufferSize:0});l.Hasher=g.extend({cfg:r.extend(),init:function(b){this.cfg=this.cfg.extend(b);this.reset()},reset:function(){g.reset.call(this);this._doReset()},update:function(b){this._append(b);this._process();return this},finalize:function(b){b&&this._append(b);return this._doFinalize()},blockSize:16,_createHelper:function(b){return function(a,g){return(new b.init(g)).finalize(a)}},_createHmacHelper:function(b){return function(a,g){return(new k.HMAC.init(b,
g)).finalize(a)}}});var k=m.algo={};return m}(Math);
(function(s){function p(a,k,b,h,l,j,m){a=a+(k&b|~k&h)+l+m;return(a<<j|a>>>32-j)+k}function m(a,k,b,h,l,j,m){a=a+(k&h|b&~h)+l+m;return(a<<j|a>>>32-j)+k}function l(a,k,b,h,l,j,m){a=a+(k^b^h)+l+m;return(a<<j|a>>>32-j)+k}function n(a,k,b,h,l,j,m){a=a+(b^(k|~h))+l+m;return(a<<j|a>>>32-j)+k}for(var r=CryptoJS,q=r.lib,v=q.WordArray,t=q.Hasher,q=r.algo,a=[],u=0;64>u;u++)a[u]=4294967296*s.abs(s.sin(u+1))|0;q=q.MD5=t.extend({_doReset:function(){this._hash=new v.init([1732584193,4023233417,2562383102,271733878])},
_doProcessBlock:function(g,k){for(var b=0;16>b;b++){var h=k+b,w=g[h];g[h]=(w<<8|w>>>24)&16711935|(w<<24|w>>>8)&4278255360}var b=this._hash.words,h=g[k+0],w=g[k+1],j=g[k+2],q=g[k+3],r=g[k+4],s=g[k+5],t=g[k+6],u=g[k+7],v=g[k+8],x=g[k+9],y=g[k+10],z=g[k+11],A=g[k+12],B=g[k+13],C=g[k+14],D=g[k+15],c=b[0],d=b[1],e=b[2],f=b[3],c=p(c,d,e,f,h,7,a[0]),f=p(f,c,d,e,w,12,a[1]),e=p(e,f,c,d,j,17,a[2]),d=p(d,e,f,c,q,22,a[3]),c=p(c,d,e,f,r,7,a[4]),f=p(f,c,d,e,s,12,a[5]),e=p(e,f,c,d,t,17,a[6]),d=p(d,e,f,c,u,22,a[7]),
c=p(c,d,e,f,v,7,a[8]),f=p(f,c,d,e,x,12,a[9]),e=p(e,f,c,d,y,17,a[10]),d=p(d,e,f,c,z,22,a[11]),c=p(c,d,e,f,A,7,a[12]),f=p(f,c,d,e,B,12,a[13]),e=p(e,f,c,d,C,17,a[14]),d=p(d,e,f,c,D,22,a[15]),c=m(c,d,e,f,w,5,a[16]),f=m(f,c,d,e,t,9,a[17]),e=m(e,f,c,d,z,14,a[18]),d=m(d,e,f,c,h,20,a[19]),c=m(c,d,e,f,s,5,a[20]),f=m(f,c,d,e,y,9,a[21]),e=m(e,f,c,d,D,14,a[22]),d=m(d,e,f,c,r,20,a[23]),c=m(c,d,e,f,x,5,a[24]),f=m(f,c,d,e,C,9,a[25]),e=m(e,f,c,d,q,14,a[26]),d=m(d,e,f,c,v,20,a[27]),c=m(c,d,e,f,B,5,a[28]),f=m(f,c,
d,e,j,9,a[29]),e=m(e,f,c,d,u,14,a[30]),d=m(d,e,f,c,A,20,a[31]),c=l(c,d,e,f,s,4,a[32]),f=l(f,c,d,e,v,11,a[33]),e=l(e,f,c,d,z,16,a[34]),d=l(d,e,f,c,C,23,a[35]),c=l(c,d,e,f,w,4,a[36]),f=l(f,c,d,e,r,11,a[37]),e=l(e,f,c,d,u,16,a[38]),d=l(d,e,f,c,y,23,a[39]),c=l(c,d,e,f,B,4,a[40]),f=l(f,c,d,e,h,11,a[41]),e=l(e,f,c,d,q,16,a[42]),d=l(d,e,f,c,t,23,a[43]),c=l(c,d,e,f,x,4,a[44]),f=l(f,c,d,e,A,11,a[45]),e=l(e,f,c,d,D,16,a[46]),d=l(d,e,f,c,j,23,a[47]),c=n(c,d,e,f,h,6,a[48]),f=n(f,c,d,e,u,10,a[49]),e=n(e,f,c,d,
C,15,a[50]),d=n(d,e,f,c,s,21,a[51]),c=n(c,d,e,f,A,6,a[52]),f=n(f,c,d,e,q,10,a[53]),e=n(e,f,c,d,y,15,a[54]),d=n(d,e,f,c,w,21,a[55]),c=n(c,d,e,f,v,6,a[56]),f=n(f,c,d,e,D,10,a[57]),e=n(e,f,c,d,t,15,a[58]),d=n(d,e,f,c,B,21,a[59]),c=n(c,d,e,f,r,6,a[60]),f=n(f,c,d,e,z,10,a[61]),e=n(e,f,c,d,j,15,a[62]),d=n(d,e,f,c,x,21,a[63]);b[0]=b[0]+c|0;b[1]=b[1]+d|0;b[2]=b[2]+e|0;b[3]=b[3]+f|0},_doFinalize:function(){var a=this._data,k=a.words,b=8*this._nDataBytes,h=8*a.sigBytes;k[h>>>5]|=128<<24-h%32;var l=s.floor(b/
4294967296);k[(h+64>>>9<<4)+15]=(l<<8|l>>>24)&16711935|(l<<24|l>>>8)&4278255360;k[(h+64>>>9<<4)+14]=(b<<8|b>>>24)&16711935|(b<<24|b>>>8)&4278255360;a.sigBytes=4*(k.length+1);this._process();a=this._hash;k=a.words;for(b=0;4>b;b++)h=k[b],k[b]=(h<<8|h>>>24)&16711935|(h<<24|h>>>8)&4278255360;return a},clone:function(){var a=t.clone.call(this);a._hash=this._hash.clone();return a}});r.MD5=t._createHelper(q);r.HmacMD5=t._createHmacHelper(q)})(Math);