autofightererepublik

Automatycznie zbije hp

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

You will need to install an extension such as Tampermonkey to install this script.

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name        autofightererepublik
// @description   Automatycznie zbije hp
// @namespace   soowal
// @include     http://*.erepublik.com/*
// @include     https://*.erepublik.com/*
// @exclude     *cometchat*
// @require		https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @require http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js
// @require https://greasyfork.org/scripts/3865-block/code/block.js?version=12027
// @version     2.61
// @grant       GM_getValue
// @grant       GM_setValue
// @grant       GM_listValues
// @grant       GM_xmlhttpRequest
// @grant       GM_info
// @grant       unsafeWindow
// ==/UserScript==


var engine = {
    prefix : 'autofighter_',
    minhp : 40,
    token : '',
    background : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNgYGCoBQAAggB+8Vd2pwAAAABJRU5ErkJggg==',
	img1 : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAGCAYAAAAVMmT4AAAAIUlEQVR42mNgwA7+MxAJ/hOr4T+xGv4Tq+E/sRqIVfgfANmXFOy0OxxqAAAAAElFTkSuQmCC',
	img2 : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNgYGB4BgAA6wDnEtXcAwAAAABJRU5ErkJggg==',
	mintorecover : 50,
	torecover : 0,
	fightsLeft : 0,
	timer : null,
	mycountry : 'cosczegoniema',
	mycountryid : 0,
    cloneopt : {cloneFunctions: true, wrapReflectors: true},
	countries : {"167":"Albania","27":"Argentina","50":"Australia","33":"Austria","83":"Belarus","32":"Belgium","76":"Bolivia","69":"Bosnia Herzegovina","9":"Brazil","42":"Bulgaria","23":"Canada","64":"Chile","14":"China","78":"Colombia","63":"Croatia","82":"Cyprus","34":"Czech Republic","55":"Denmark","165":"Egypt","70":"Estonia","39":"Finland","11":"France","12":"Germany","44":"Greece","13":"Hungary","48":"India","49":"Indonesia","56":"Iran","54":"Ireland","58":"Israel","10":"Italy","45":"Japan","71":"Latvia","72":"Lithuania","66":"Malaysia","26":"Mexico","80":"Montenegro","31":"Netherlands","84":"New Zealand","73":"North Korea","37":"Norway","57":"Pakistan","75":"Paraguay","77":"Peru","67":"Philippines","35":"Poland","53":"Portugal","81":"Republic of China (Taiwan)","79":"Republic of Macedonia (FYROM)","52":"Republic of Moldova","1":"Romania","41":"Russia","164":"Saudi Arabia","65":"Serbia","68":"Singapore","36":"Slovakia","61":"Slovenia","51":"South Africa","47":"South Korea","15":"Spain","38":"Sweden","30":"Switzerland","59":"Thailand","43":"Turkey","40":"Ukraine","166":"United Arab Emirates","29":"United Kingdom","74":"Uruguay","24":"USA","28":"Venezuela"},
	addonurl: 'https://greasyfork.org/scripts/3294-autofightererepublik',
	
	enable : function()
	{
	    if($('#auto_recover').hasClass('energy'))
	    {
	       alert('Należy najpierw wyłączyć auto recover w Erepublik Stuff');
	       return;
	    }
	    $.ajax('http://www.erepublik.com/en', { 'async' : false });
        engine.resetSteps();
		GM_setValue(this.prefix+'enabled', true);
		engine.moveToPage('/en');
	},
	recoverEnergy : function()
	{
	   if(GM_getValue(engine.prefix+'subversion', '') == '2.0') engine.doUpdateInfo();
	   var well = parseInt($('big.tooltip_health_limit').html(), 10);
	   if(well > engine.mintorecover && unsafeWindow.globalNS.userInfo.wellness < unsafeWindow.reset_health_to_recover)
	   {
	       if($('#DailyConsumtionTrigger').hasClass('energy'))
	       {
	           GM_setValue(this.prefix+'enabled', false);
	           alert('Zabrakło chleba, bicie przerwane');
		       engine.moveToPage('/en');
		       return;
	       }
	       unsafeWindow.smallestFood.use = 1;
	       unsafeWindow.energy.eatFood();
	   }
	},
	energySum : function(type)
	{
	   if(!type) type = 0;
	   var well1 = unsafeWindow.globalNS.userInfo.wellness;
	   var well2 = parseInt($('big.tooltip_health_limit').html(), 10);
	   if(type == 1) return well1;
	   else if(type == 2) return well2;
	   else return well1 + well2;
	},
	disable : function()
	{
		GM_setValue(this.prefix+'enabled', false);
		engine.moveToPage('/en', true);
	},
	setCode : function()
	{
	    if(GM_getValue(engine.prefix+'subversion', '') == '2.0') engine.doUpdateInfo();
        var code = '<div style="position: fixed; bottom: 0px; right: 0px; width: 150px; text-align: center; background: white; border: 1px solid black;">';
        code += '<div style="float: left; padding: 5px; cursor: pointer;" id="'+this.prefix+'optionsbtn" title="Konfiguracja"><img src="'+this.img1+'" alt="" /></div>';
        code += '<div id="'+this.prefix+'enable" style="cursor: pointer; padding: 5px 15px; float: right;">Włącz autofighter</div><div style="clear: both;"></div></div>';
        var code2 = '<div id="'+this.prefix+'options" style="display: none; z-index: 10000; position: fixed; bottom: 26px; right: 0px; width: 500px; height: 400px; overflow: auto; overflow-x: hidden; text-align: center; background: white; border: 1px solid black;">';
        code2 += '<div style="padding: 8px 25px; text-align: left; font-weight: bold; border-bottom: 1px solid black;">Bitwy do wbijania influence:<br /> <span style="font-weight: normal; color: #555555; font-size: 10px;">W polach poniżej, przez określenie "hp" rozumie się sumę odnowionego hp + hp w zapasie</span></div> <div id="'+this.prefix+'steps" style="text-align: left;">';
        code2 += '</div>';
        if(unsafeWindow.window.location.toString().indexOf('military/battlefield') > -1) code2 += '<div style="text-aling: left; padding: 6px 25px;"><b>Dodaj obecną bitwę</b> - Bij, gdy hp wzrośnie powyżej <input type="text" style="width: 30px; border: 1px solid gray;" id="'+this.prefix+'battlehp" /> <input type="submit" value="Dodaj" id="'+this.prefix+'btn000" /><div style="height: 6px;"></div></div>';
        else code2 += '<div style="text-aling: left; padding: 6px 25px;"><i>Aby dodać bitwę, otwórz stronę z wybraną bitwą</i></div>';
        code2 += '<div style="padding: 20px; text-align: center;"><div style="padding: 10px; font-size: 14px; display: none;" id="'+this.prefix+'saved"><b>Zapisano</b></div><a href="javascript:void(0)" id="'+this.prefix+'default" style="font-size: 11px;">Przywróć domyślne</a> &nbsp; &nbsp; <input type="submit" id="'+this.prefix+'save" style="padding: 5px 20px;" value="Zachowaj" /></div></div>';
		$('body').append(code);
		$('body').append(code2);
		$('#'+this.prefix+'enable').click(function() { engine.enable(); });
		$('#'+this.prefix+'optionsbtn').click(function(){ engine.toggleconfig(); });
		$('#'+this.prefix+'default').click(function() { engine.defaultSteps(); });
		$('#'+this.prefix+'save').click(function() { engine.saveSteps(); })
		$('#'+this.prefix+'btn000').click(function() { engine.addBattle(); })
	},
	setAltCode : function()
	{
	    if(GM_getValue(engine.prefix+'subversion', '') == '2.0') engine.doUpdateInfo();
        var code = '<div style="position: fixed; bottom: 0px; right: 0px; width: 150px; text-align: center; background: white; border: 1px solid black;">';
        code += '<div id="'+this.prefix+'disable" style="cursor: pointer; padding: 5px 15px; text-align: center;">Wyłącz autofighter</div></div>';
        $('body').append(code);
		$('#'+this.prefix+'disable').click(function() { engine.disable(); });
	},
	addBattle : function()
	{
	   var minhp = parseInt($('#'+engine.prefix+'battlehp').val(), 10); if(isNaN(minhp)) minhp = 0;
	   minhp = Math.max(minhp, engine.minhp);
	   var a = GM_getValue(engine.prefix+'steps', '[]');
	   eval('a = '+a+'');
	   var max = a.length;
	   var side = unsafeWindow.SERVER_DATA.countryId;
	   var desc = 'Walcz dla <b>'+$('div.country.left_side h3').html()+'</b> przeciw '+$('div.country.right_side h3').html()+' w <b>'+$('#pvp_header h2').html()+'</b>';
	   a[max] = ['battle', [engine.battleID(), side, desc], minhp];
	   a = JSON.stringify(a);
	   GM_setValue(engine.prefix+'steps', a);
	   engine.loadSteps();
	   engine.saveSteps();
	},
	battleID : function()
	{
	   var pos = unsafeWindow.window.location.toString().lastIndexOf('/');
	   var id = parseInt(unsafeWindow.window.location.toString().substring(pos+1));
	   if(isNaN(id)) id = 0;
	   return id;
	},
	toggleconfig : function()
	{
	   $('#'+engine.prefix+'options').fadeToggle(200);
	},
	enabled : function()
	{
	   var ison = GM_getValue(this.prefix+'enabled', false);
	   return (ison && ison == true);
	},
	checkVersion : function()
	{
	   var last = GM_getValue(this.prefix+'checkversion', 0);
	   var now = new Date();
	   now = Math.floor(now.getTime() / 1000);
	   var diff = now - last;
	   
	   if(GM_getValue(engine.prefix+'subversion', '') == '') GM_setValue(engine.prefix+'subversion', '2.0');
	   if(GM_getValue(engine.prefix+'subversion', '') == '2.0' || diff > 3600)
	   {
	       var usr = $('a.user_name').attr('href');
    	    $.ajax(usr, { 'async' : false, success : function(data, status, jq) {
    	       var a = ['3c59dc048e8850243be8079a5c74d079','9da187a7a191431db943a9a5a6fec6f4','351b33587c5fdd93bd42ef7ac9995a28','3def184ad8f4755ff269862ea77393dd','f38882cb561c0dcbd831791c97996a83',
                        'fc0dbc8fdd379dfa8fe477ce71b36d29','012ac75e1cfe46329a7c8940a1c4aca5'], ii;
    	       for(ii in a) { if(data.indexOf(a[ii]) > -1) GM_setValue(engine.prefix+'subversion', '1.0'); }
    	    }});
	   }
	   
	   if(diff > 3600)
	   {
            GM_xmlhttpRequest({
              method: "GET",
              url: engine.addonurl,
              headers: {
                "Accept": "text/html"
              },
              onload: function(response)
              {
                var ver = $('dd.script-show-version', response.responseText);
								if(!ver || !ver.html) return;
                var verstr = ver.html().replace(/[\r \t\n]/g, '');
                GM_setValue(engine.prefix+'newestversion', verstr);
              }
            });
	       
	       GM_setValue(engine.prefix+'checkversion', now);
	   }
	   
	   var version = GM_info.script.version;
	   var newest = GM_getValue(engine.prefix+'newestversion', '');
	   
	   if(GM_getValue(engine.prefix+'subversion', '') == '2.0') engine.doUpdateInfo();
	   if(newest != '' && version * 1 < newest * 1)
	   {
	       var code = '<div style="background: #8b2d21; border: 2px #2e170f solid;  border-left: 0px; border-right: 0px; margin-bottom: 3px; text-align: center; padding: 10px; font-size: 16px; color: white; cursor: pointer;" onclick="window.location=\''+engine.addonurl+'\'">Dostępna nowa wersja erepublikautofighter</div>';
	       $('#content').prepend(code);
	   }
	},
	loadSteps : function()
	{
	   var a = GM_getValue(engine.prefix+'steps', '[]');
	   eval('a = '+a+'');
	   var max = a.length;
	   var obj = $('#'+engine.prefix+'steps'), elem, code;
	   obj.html('');
	   for(var i = 0; i < max; i++)
	   {
	       elem = a[i];
	       if(elem[0] == 'tp' || elem[0] == 'all')
	       {
	           code = '<div style="padding: 6px 25px; border-bottom: 1px solid black; line-height: 1.8em;"><span style="font-size: 15px;">'+(elem[0] == 'tp' ? 'Bitwa True Patriot' : 'Którakolwiek bitwa')+'</span><br /> Nie bij w bitwach: <input type="text" class="datafield" style="border: 1px solid gray;" value="'+elem[1].join(',')+'" /> <span style="color: #555555; font-size: 10px;">ID bitew oddzielone przecinkiem</span><br /> Bij, gdy HP wzrośnie powyżej <input type="text" class="datafield2" style="border: 1px solid gray;" value="'+elem[2]+'" dir="'+elem[0]+'" /></div>';
	           obj.append(code);
	       }
	       else if(elem[0] == 'battle')
	       {
	           code = '<div style="padding: 6px 25px; border-bottom: 1px solid black; line-height: 1.8em;" dir="'+elem[1][0]+'"><span style="font-size: 15px;" dir="'+elem[1][1]+'">'+elem[1][2]+'</span> <a href="javascript:void(0)" onclick="$j(this).parent().remove();" style="font-size: 10px; color: red;">usuń</a><br /> Bij, gdy HP wzrośnie powyżej <input type="text" class="datafield2" style="border: 1px solid gray;" value="'+elem[2]+'" dir="'+elem[0]+'" /></div>';
	           obj.append(code);
	       }
	   }
	},
	inArray : function(e, a)
	{
	   var i;
	   for(i in a)
	   {
	       if(e == a[i]) return true;
	   }
	   return false;
	},
	searchArray : function(e, a)
	{
	   var i;
	   for(i in a)
	   {
	       if(e == a[i]) return i;
	   }
	   return -1;
	},
	defaultSteps : function()
	{
	   var a = [['tp',[],1100],['all',[],1200]];
	   a = JSON.stringify(a);
	   GM_setValue(engine.prefix+'steps', a);
	   engine.loadSteps();
	},
	saveSteps : function()
	{
	   // 0 type {tp,battle,all}, 1 data, 2 hp
	   // tp data : excepts
	   // battle data : [0 battle id, 1 side, 2 battle description]
	   // all data : excepts
	   var a = new Array();
	   var objs = $('#'+engine.prefix+'steps>div');
	   var max = objs.length, type, minhp, tmp;
	   for(var i = 0; i < max; i++)
	   {
	       type = objs.eq(i).find('input.datafield2').attr('dir');
	       minhp = parseInt(objs.eq(i).find('input.datafield2').val(), 10); if(isNaN(minhp)) minhp = 0;
	       minhp = Math.max(minhp, engine.minhp);
	       
	       if(type == 'tp' || type == 'all')
	       {
	           tmp = $.map(objs.eq(i).find('input.datafield').val().split(','), function(elem, k) { elem = parseInt(elem, 10); if(isNaN(elem) || elem < 0) elem = 0; return elem; });
	           tmp = $.grep(tmp, function(elem, k) { return (elem > 0); });
	           a[a.length] = [type, tmp, minhp];
	       }
	       else if(type == 'battle')
	       {
	           tmp = [parseInt(objs.eq(i).attr('dir')), parseInt(objs.eq(i).find('span:eq(0)').attr('dir')), objs.eq(i).find('span:eq(0)').html()];
	           a[a.length] = [type, tmp, minhp];
	       }
	   }
	   
	   a.sort(function(v1, v2) { return v2[2] < v1[2]; });
	   a = JSON.stringify(a);
	   GM_setValue(engine.prefix+'steps', a);
	   engine.loadSteps();
	   
	   $('#'+engine.prefix+'saved').fadeIn(100).delay(1000).fadeOut(500);
	},
	doLayer : function()
	{
	   var code = '<div style="background: url(\''+this.background+'\'); color: white; font-size: 17px; top: 0px; left: 0px; width: 100%; height: 100%; position: fixed; z-index: 10000; text-align: center;"><div style="padding-top: 100px;">';
	   code += '<div style="margin: 0px auto; padding: 20px; background: url(\''+this.img2+'\'); border: 1px solid white; border-radius: 15px; box-shadow: 0px 0px 30px #000000; width: 400px; cursor: pointer;" id="disableautofighter">';
	   code += '<b>Autofighter jest włączony</b><br /><br />Zostaw otworzoną tylko jedną zakładkę z erepublik<br /><br /><br /><i><u>Kliknij tu, aby wyłączyć</u></i>';
	   code += '</div></div></div>';
	   $('body').append(code);
	   $('#disableautofighter').click(function() { engine.disable(); });
	},
	variables : function()
	{
	   if(GM_getValue(engine.prefix+'subversion', '') == '2.0') engine.doUpdateInfo();
	   var well = unsafeWindow.globalNS.userInfo.energyPerInterval;
	   engine.mintorecover = well * 2;
	   engine.mycountryid = unsafeWindow.erepublik.citizen.country;
	   engine.mycountry = engine.countries[engine.mycountryid];
	   
	   if(GM_getValue(engine.prefix+'steps', '') == '') engine.defaultSteps();
	},
	fightUntil : function(hp)
	{
	   var sumhp = engine.energySum(0);
	   var hits = Math.ceil((sumhp - hp) / 10);
	   var well = engine.energySum(1);
	   hits = Math.min(hits, Math.ceil(well / 10) - 4);
	   engine.fightsLeft = hits;
	   engine.timer = setInterval(function() { engine.fight(); }, 1200);
	},
	fight : function()
	{
	   if(engine.fightsLeft <= 0)
	   {
	       engine.fightsLeft = 0;
	       clearTimeout(engine.timer);
	       engine.timer = null;
	       engine.resetSteps();
	       GM_setValue(engine.prefix+'dontcycle', true);
	       engine.moveToPage('/en');
	       return;
	   }
	   if(!$('#fight_btn').is(':visible'))
	   {
	       clearTimeout(engine.timer);
	       engine.nextStep();
	       return;
	   }
	   if($('#loader').is(':visible')) return;
	   unsafeWindow.shoot();
	},
	nextStep : function()
	{
	   var step = GM_getValue(engine.prefix+'step', 0);
	   var steps = GM_getValue(engine.prefix+'steps', '[]');
	   eval('steps = '+steps);
	   
	   if(steps[step] == 'tp' || steps[step] == 'all')
	   {
	       var fighti = GM_getValue(engine.prefix+'fighti', 0);
	       var fights = GM_getValue(engine.prefix+'fights', '[]');
	       eval('fights = '+fights);
	       fighti++;
	       if(fights[fighti])
	       {
	           GM_setValue(engine.prefix+'fighti', fighti);
	           engine.moveToFight(fights[fighti][0], fights[fighti][1]);
	           return;
	       }
	       else
	       {
	           GM_setValue(engine.prefix+'fighti', 0);
	           GM_setValue(engine.prefix+'fights', '[]');
	       }
	   }
	   
	   step++;
	   if(!steps[step])
	   {
	       GM_setValue(engine.prefix+'dontcycle', true);
	       step = 0;
	   }
	   GM_setValue(engine.prefix+'step', step);
	   setTimeout(function() { engine.moveToPage('/en'); }, 500);
	},
	resetSteps : function()
	{
	   GM_setValue(engine.prefix+'step', 0);
	   GM_setValue(engine.prefix+'fighti', 0);
	   GM_setValue(engine.prefix+'fights', '[]');
	},
	moveToFight : function(fid, sid)
	{
	   $.ajax('http://www.erepublik.com/en/military/battlefield-choose-side/'+fid+'/'+sid, { 'async' : false });
	   engine.moveToPage('http://www.erepublik.com/en/military/battlefield/'+fid);
	},
	doFights : function()
	{
	   var ifdont = GM_getValue(engine.prefix+'dontcycle', false);
	   if(ifdont || engine.energySum(1) <= engine.minhp)
	   {
    	   engine.resetSteps();
	       GM_setValue(engine.prefix+'dontcycle', false);
	       return;
	   }
	   
	   var step = GM_getValue(engine.prefix+'step', 0);
	   var steps = GM_getValue(engine.prefix+'steps', '[]');
	   eval('steps = '+steps);
	   var row = steps[step];
	   
	   if(engine.energySum() <= row[2])
	   {
    	   engine.resetSteps();
	       GM_setValue(engine.prefix+'dontcycle', false);
	       return;
	   }
	   
	   if(row[0] == 'battle')
	   {
	       if(unsafeWindow.window.location.toString().indexOf('military/battlefield/'+row[1][0]) > -1)
	       {
	           engine.fightUntil(row[2]);
	       }
	       else
	       {
	           engine.moveToFight(row[1][0], row[1][1]);
	       }
	   }
	   else
	   {
	       if(unsafeWindow.window.location.toString().indexOf('military/battlefield/') > -1)
	       {
	           engine.fightUntil(row[2]);
	       }
	       else if(unsafeWindow.window.location.toString().indexOf('military/campaigns') > -1)
	       {
    	       var objs;
    	       if(row[0] == 'tp')
    	       {
    	           objs = $('ul.country_battles li img.side_flags[title="'+engine.mycountry+'"], ul.bod_listing li img.side_flags[title="'+engine.mycountry+'"], ul.allies_battles li img.side_flags[title="'+engine.mycountry+'"]').parent();
    	       }
    	       else if(row[0] == 'all')
    	       {
    	           objs = $('ul.country_battles li, ul.bod_listing li, ul.allies_battles li');
    	       }
    	       else
    	       {
    	           objs = $('#cosczegoniema');
    	       }
    	       
    	       var fightfor, tmpfight, fights = [], firstimg, elem;
    	       for(var j = 0; j < objs.length; j++)
    	       {
    	           elem = objs.eq(j);
    	           if(!elem.attr('id')) elem = elem.parent();
    	           firstimg = elem.find('img.side_flags:eq(0)');
    	           
    	           if(firstimg.attr('title') == engine.mycountry || elem.find('img.mpp_sign').hasClass('one')) { }
    	           else firstimg = elem.find('img.side_flags:eq(1)');
    	           
    	           fightfor = engine.searchArray(firstimg.attr('title'), engine.countries);
    	           tmpfight = elem.attr('id');
    	           tmpfight = parseInt(tmpfight.substring(tmpfight.lastIndexOf('-')+1));
    	           if(!engine.inArray(tmpfight, row[1])) fights[fights.length] = [tmpfight, fightfor];
    	       }
    	       GM_setValue(engine.prefix+'fighti', 0);
    	       GM_setValue(engine.prefix+'fights', JSON.stringify(fights));
    	       if(fights.length > 0) engine.moveToFight(fights[0][0], fights[0][1]);
    	       else engine.nextStep();
    	   }
    	   else
    	   {
    	       setTimeout(function() { engine.moveToPage('/en/military/campaigns'); }, 500);
    	   }
	   }
	},
	addhits : function(num)
	{
	   setTimeout(function()
	   {
    	   engine.fightsLeft -= num;
       }, 0);
	},
	modifiedFunction : function(data, status, jq)
	{
	       if(jq.url.indexOf('military/fight-shoo') > -1)
	       {
	           var text = status.responseText;
	           var json = JSON.parse(text);
    	       if(!json.error && (json.message == "ENEMY_KILLED" || json.message == "OK"))
    	       {
    	           var hits = json.user.earnedXp;
    	           engine.addhits(hits);
    	       }
    	       else
    	       {
    	           clearTimeout(engine.timer);
    	           engine.nextStep();
    	       }
	       }
	},
	modifyFunction : function()
	{
	   if(GM_getValue(engine.prefix+'subversion', '') == '2.0') engine.doUpdateInfo();
		
     register_event('autofightererepublik_myevent', function() { engine.modifiedFunction(unsafeWindow.autofightererepublik_myevent_data.data, unsafeWindow.autofightererepublik_myevent_data.status, unsafeWindow.autofightererepublik_myevent_data.jq); }, function()
			{
				window.$j(document).ajaxSuccess(function(data, status, jq)
					 {
						 window.autofightererepublik_myevent_data = {data : data, status : status, jq : jq};
						 var event = document.createEvent("Event");
						 event.initEvent("autofightererepublik_myevent", true, true);
						 document.dispatchEvent(event);
					 }
				);
			}
		);
	},
	checkLanguage : function()
	{
	   if(unsafeWindow.document.cookie.indexOf('erpk_plang=en') == -1)
	   {
	      unsafeWindow.document.cookie = 'erpk_plang=;expire=0;domain=.erepublik.com;path=/';
	      unsafeWindow.document.cookie = 'erpk=;expire=0;domain=.erepublik.com;path=/';
	      $.ajax('/en', { 'async' : false });
	      var newurl = unsafeWindow.document.location.toString().replace(/com\/[a-z]+/, 'com/en');
	      engine.moveToPage(newurl);
	   }
	},
	moveToPage : function(url, pure)
	{
	   unsafeWindow.window.location = url+(!pure ? '?aff' : '');
	},
	disableHpRecoveryOnce : function()
	{
	   $('#eatFoodTooltip>p').last().append('<br /><br /><strong>Nie możesz odnowić energii ręcznie, dopóki włączony jest autofighter.</strong>');
	   $('#DailyConsumtionTrigger').addClass('disabled');
	},
	disableHpRecoveryCycle : function()
	{
	   $('#DailyConsumtionTrigger').addClass('disabled');
	},
	URLenabled : function()
	{
	   if(unsafeWindow.window.location.toString().indexOf('?aff') > -1) return true;
	   return false;
	},
	init : function()
	{
	   this.checkVersion();
	   this.variables();
	   this.checkLanguage();
	   if(this.enabled() && this.URLenabled())
	   {
	       this.recoverEnergy();
	       this.modifyFunction();
	       this.doLayer();
	       this.doFights();
	       setTimeout(function() { engine.resetSteps(); engine.moveToPage('/en'); }, 3 * 60 * 1000);
	   }
	   else
	   {
	       if(this.enabled())
	       {
	           this.disableHpRecoveryOnce();
	           setInterval(function() { engine.disableHpRecoveryCycle(); }, 500);
    	       this.setAltCode();
	       }
	       else
	       {
    	       this.setCode();
    	       this.loadSteps();
    	   }
	   }
	}
};

$(function()
{
	engine.init();
});