Greasy Fork

Greasy Fork is available in English.

hwmmapmove

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

当前为 2014-12-17 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// (c) 2008-2010, xo4yxa
// (c) 2014, Ded Moroz
//
// ==UserScript==
// @name          hwmmapmove
// @namespace     ded_moroz
// @description   перемещение по карте в один клик, скрипт для ГВД
// @version       2.2
// @homepage      http://greasyfork.icu/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.2'
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="http://greasyfork.icu/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 ems;
var pl;
var map_swf;
var els = document.getElementsByTagName('param');
for (i = 0; i < els.length; i++)
{
    if (els[i].getAttribute('value').contains('map.swf'))
    {
    	pl = els[i+1].getAttribute('value').split('=')[1].split(':') ;
        ems = els[i+1].parentNode;
        map_swf = els[i].getAttribute('value');
        break;
    }
}
var road = new Array() ;
var transp = GM_getValue( "transport" , 0 ) ;

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 && in_array( pl[0] , plgn ) && 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 | 00 | 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></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

}


// 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' ,		'Дикие Земли' ]
)

// 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_13: 8 ,
	l7_14: 5 ,
	l7_17: 5 ,
	l7_23: 8 ,
	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 ,

//	l15_6: 4 ,
//	l15_9: 4 ,

	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 ,

	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 ,

	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 ,

	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

}

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

if (transp < 3)
{
	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 - ?
18 - magic number for moving
19 - ?
20 - ?
*/
//+ отображение карты
	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 && transp < 3)
				{
					a.href = 'javascript: void(0)' ;
					a.addEventListener( "click", setMXY , false );
				}

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

				a.title = locArr[l][lng] + ' (' + getTimeL( pl[0] , l , 0 ) + ')' ;
				d.appendChild( a );
			}

			if( pl[13] == -1 && in_array( l , plgn ) )
			{
				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 && in_array( cz , plgn ) && ( 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 )
	{
		window.location.href = url + 'move_sector.php?id=' + id1 + '&rand=' + getRand(cz, 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 ) ;
	window.location.href = url + 'move_sector.php?id=' + id + '&rand=' + getRand(cz, id);
}

function getRand(from, to)
{
	return ((from * 153 + to * 234) % 333 * 234 + pl[18] % 346234 - 142) % 10000 / 10000;
}

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";
		
	old_transp = GM_getValue( "transport" );	
	GM_setValue( "transport" , id );
	transp = id ;
		
	if ((old_transp < 3 && transp >= 3) ||
		(old_transp >= 3 && transp < 3))
	{
		window.location.reload();
	}
}

function getTimeL( 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 ) ;
	nx = parseInt( kC[1] ) + tx ;
	ny = parseInt( kC[2] ) + ty ;

//	t = ( ty == 0 || tx == 0 ) ? t + 120 : t + 169 ;
	t = ( ty == 0 || tx == 0 ) ? t + trtime[transp] : t + trtimed[transp] ;
	id = eval( 'locX.c' + nx + '_' + ny ) ;
//	t = t + ' ' + id + '(' + nz + ')' ;

	return getTimeL( id , mz , t );
}


function viewPath()
{
	mz = this.getAttribute( 'tz' ) ;

	path( pl[0] , mz ) ;
	function path( cz , mz )
	{
		if( mz == cz )	 return ;
		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 ) ;
		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 ;
		path( id , mz );
	}
	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' ;
	}

	bgc.innerHTML = '<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><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><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>' ;

	$("transp"+transp).style.background="#0000ff";
	$("transp0").addEventListener( "click", function(){setTransport(0)} , false );
	$("transp1").addEventListener( "click", function(){setTransport(1)} , false );
	$("transp2").addEventListener( "click", function(){setTransport(2)} , false );
	$("transp3").addEventListener( "click", function(){setTransport(3)} , false );
	$("transp4").addEventListener( "click", function(){setTransport(4)} , false );
	$("transp5").addEventListener( "click", function(){setTransport(5)} , false );

	$("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 ); }

function in_array(needle, haystack, strict)
{
	var found = false, key, strict = !!strict;
	for (key in haystack)
	{
		if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle))
		{
			found = true;
			break;
		}
	}
	return found;
}

/*
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);