// ==UserScript==
// @name ZouZhiZhangBM
// @version 1.34
// @namespace zouzhizhang
// @description bm
// @include http://www.erepublik.com/*
// @include http://www.*.lindasc.com/*
// @include https://www.erepublik.com/*
// @grant GM_wait
// @downloadURL https://update.greasyfork.icu/scripts/1766/ZouZhiZhangBM.user.js
// @updateURL https://update.greasyfork.icu/scripts/1766/ZouZhiZhangBM.meta.js
// ==/UserScript==
var onBattlePage = !!location.href.match(/^.*\/military\/battlefield(?:|\-new)\/[0-9]+.*$/);
var onMarketPage = !!location.href.match(/^.*\/economy\/market\/.*$/);
var onHttps = !!location.href.match(/^https\:\/\/.*$/);
function LoadJS_Reward() {
var scriptElement = document.createElement('script');
scriptElement.type = 'text/javascript';
scriptElement.src = 'https://www.erepublik.com/js/citizen/reward.js';
document.body.appendChild(scriptElement);
}
function ParseHttps_WithoutJQuery() {
Array.prototype.forEach.call(document.getElementsByTagName('form'), function (element) {
if (typeof element.action !== 'undefined') {
element.action = element.action.replace('http://www.erepublik.com', 'https://www.erepublik.com');
}
});
Array.prototype.forEach.call(document.getElementsByTagName('a'), function (element) {
if (typeof element.href !== 'undefined') {
element.href = element.href.replace('http://www.erepublik.com', 'https://www.erepublik.com');
}
});
}
function ParseOldBattle_WithoutJQuery() {
Array.prototype.forEach.call(document.getElementsByTagName('a'), function (element) {
if (typeof element.href !== 'undefined') {
element.href = element.href.replace('/battlefield-new/', '/battlefield/');
}
});
}
function TryJumpOldBattle() {
if (!!location.href.match(/^.*military\/battlefield\-new\/[0-9]+.*$/)) {
location.href = location.href.replace('battlefield-new', 'battlefield');
return true;
}
return false;
}
function WatchLocation() {
try {
unsafeWindow.watch('location', function (property, oldValue, newValue) {
if (property == 'location') {
return newValue.replace('http://www.erepublik.com', 'https://www.erepublik.com');
}
return newValue;
});
} catch (e) {
}
try {
unsafeWindow.location.watch('href', function (property, oldValue, newValue) {
if (property == 'href') {
return newValue.replace('http://www.erepublik.com', 'https://www.erepublik.com');
}
return newValue;
});
} catch (e) {
}
}
function HookJQueryPostAndGetJSON() {
var post = $j.post;
$j.post = function () {
arguments[0] = arguments[0].replace('http://www.erepublik.com', 'https://www.erepublik.com');
post.apply($j, arguments);
}
var getJSON = $j.getJSON;
$j.getJSON = function () {
arguments[0] = arguments[0].replace('http://www.erepublik.com', 'https://www.erepublik.com');
getJSON.apply($j, arguments);
}
}
function HookMarketGenURL() {
var genUrl = unsafeWindow.erepublik.marketplace.genUrl;
unsafeWindow.erepublik.marketplace.genUrl = function () {
var url = genUrl.apply(this, arguments);
return url.replace('http://www.erepublik.com', 'https://www.erepublik.com');
}
}
function HookBattleFightLockout() {
var post = $j.post;
$j.post = function () {
if (arguments[0].match(/.*\/military\/fight-shooot\//)) {
var call = arguments[2];
arguments[2] = function (a) {
if (a.error && a.message == 'SHOOT_LOCKOUT') {
unsafeWindow.shoot();
}
call.apply(this, arguments);
}
}
post.apply($j, arguments);
}
}
function onBattlePageDo() {
HookBattleFightLockout();
var multiHitRunning = false;
var multiHitCount = 0;
var multiHitDone = 0;
var multiHitModeEnergy = true;
var multiHitEnemyKill = 0;
var multiHitLastKilled = false;
var multiHitLoopId = 0;
var foodUrl1 = '';
var foodUrl2 = '&buttonColor=';
var foodUrl3 = '&jsoncallback=?';
var currentHealth = unsafeWindow.SERVER_DATA.health;
var fireAll = false;
function canGetWell() {
var h = $j('#heal_btn');
var trigger = $j('#DailyConsumtionTrigger');
if ($j('#heal_btn small') .html() != '0' && !h.hasClass('disabled')) {
return true
}
if ($j('input#multihit_food') .is(':checked') && !trigger.hasClass('disabled') && !trigger.hasClass('buy') && !trigger.hasClass('energy')) {
return true
}
if ($j('input#multihit_energy') .is(':checked') && !trigger.hasClass('disabled') && trigger.hasClass('energy')) {
return true
}
return false
}
unsafeWindow.jQuery.fx.off = true;
foodUrl1 = location.href.match(/^(.*)military\/battlefield\/\d+.*$/) [1] + 'main/eat?format=json&_token=' + $j('#' + $j('div.user_health input[type=hidden]') .attr('id')) .val();
fireAll = !!location.href.match(/^.*(\#BM_FIRE_ALL)$/);
$j('div#enemy_defeated') .before('
' + 'Delay:
' + ' Consumed:
X
' + '
' + '
' + (fireAll ? '
Fire All Mode ON !!!' : '') + '
');
if (unsafeWindow.SERVER_DATA.battleFinished != 0) {
$j('div#MHP') .hide()
}
$j('#blue_domination') .css({
'opacity': '1',
'color': '#fff'
});
$j('#red_domination') .css({
'opacity': '1',
'color': '#fff'
});
$j('b.pdomi_left') .css({
'width': '67px'
});
$j('b.pdomi_right') .css({
'width': '67px'
});
$j('b.pdomi_left em') .css({
'right': '5px',
'opacity': '1',
'color': '#fff'
});
$j('b.pdomi_right em') .css({
'left': '5px',
'opacity': '1',
'color': '#fff'
});
$j('#drop_part') .css({
'z-index': '3'
});
$j(document) .ready(function () {
clearInterval(unsafeWindow.globalSleepInterval);
unsafeWindow.shootLockout = 1
});
setInterval(function () {
var h = $j('#heal_btn');
if ($j('#heal_btn small') .html() != '0' && !h.hasClass('disabled') && unsafeWindow.SERVER_DATA.onlySpectator == 0) {
unsafeWindow.useHospital()
}
}, 250);
unsafeWindow.battleFX.hit = function () {
if (multiHitRunning) {
multiHitDone = multiHitDone + (currentHealth - unsafeWindow.SERVER_DATA.health) / 10;
currentHealth = unsafeWindow.SERVER_DATA.health;
$j('div#multihit_message') .html('Energy consumed: ' + multiHitDone * 10 + ' Kills: ' + multiHitEnemyKill + ' (' + (multiHitLastKilled ? 'Last Enemy killed!' : 'Last Enemy alive!') + ')');
multiHitLastKilled = false;
clearTimeout(multiHitLoopId);
multiHitLoopId = setTimeout('jQuery.fn.multiHIT()', $j('input#multihit_delay') .val())
}
return false
};
unsafeWindow.battleFX.blow = function () {
if (multiHitRunning) {
multiHitEnemyKill++;
multiHitLastKilled = true
}
return false
};
unsafeWindow.battleFX.pop = function (target, width) {
if (target == 'enemy_defeated') {
unsafeWindow.closeAddDamagePopup()
} else if (target == 'rank_up') {
unsafeWindow.closeAddRankPopup()
} else {
if (typeof width == 'undefined' || typeof width == undefined)
width = '396px';
var useTarget = $j('#' + target) [0];
$j('#pvp') .block({
message: useTarget,
overlayCSS: {
backgroundColor: '#000207',
opacity: 0.5
},
css: {
width: width
}
})
}
return false
};
unsafeWindow.battleFX.countNextBattle = function (time) {
if (isNaN(time.getMonth())) {
setTimeout(function () {
top.location.href = document.location.href
}, 1000);
return false
}
$j('#time_until') .countdown({
until: time,
format: 'MS',
compact: true,
description: '',
onTick: checkTime
});
function checkTime(periods) {
if ($j.countdown.periodsToSeconds(periods) == 0) {
$j('#waiting') .fadeOut('fast');
$j('#waiting') .removeClass('clock');
$j('#notify_link') .fadeIn('fast');
$j('#notify_link') .click();
setTimeout(function () {
top.location.href = document.location.href
}, 2000)
}
}
return false
};
unsafeWindow.jQuery.fn.getWell = function () {
var h = $j('#heal_btn');
var trigger = $j('#DailyConsumtionTrigger');
if ($j('#heal_btn small') .html() != '0' && !h.hasClass('disabled') && unsafeWindow.SERVER_DATA.onlySpectator == 0) {
unsafeWindow.useHospital()
} else if ($j('input#multihit_food') .is(':checked') && !trigger.hasClass('disabled') && !trigger.hasClass('buy') && !trigger.hasClass('energy') || $j('input#multihit_energy') .is(':checked') && !trigger.hasClass('disabled') && trigger.hasClass('energy')) {
$j('#heal_btn small') .hide();
h.removeClass('hospital_btn');
h.attr('title', 'Consume Food');
unsafeWindow.ERPK.disableHealButton();
$j('#DailyConsumtionTrigger') .addClass('load');
$j.getJSON(foodUrl1 + foodUrl2 + (trigger.hasClass('energy') ? 'orange' : 'blue') + foodUrl3, {
}, function (data) {
$j('#DailyConsumtionTrigger') .removeClass('load');
data.health = parseFloat(data.health);
var wellInc = data.health - unsafeWindow.SERVER_DATA.health;
currentHealth = data.health;
unsafeWindow.energy.processResponse(data);
clearTimeout(multiHitLoopId);
multiHitLoopId = setTimeout('jQuery.fn.multiHIT()', 250)
})
}
};
unsafeWindow.jQuery.fn.changeWeapon = function () {
var url = '/en/military/change-weapon';
unsafeWindow.ERPK.disableAllButtons();
$j.post(url, {
_token: unsafeWindow.SERVER_DATA.csrfToken,
battleId: unsafeWindow.SERVER_DATA.battleId
}, function (response) {
unsafeWindow.updateFighterWeapon($j('#scroller') .data('scrollable'), response);
unsafeWindow.ERPK.enableAllButtons();
if ($j('.listing span img') .eq( - 1) .attr('src') .indexOf('q10') !== - 1) {
multiHitRunning = false;
$j('button#multihit_start') .html('HIT!');
return
} else {
clearTimeout(multiHitLoopId);
multiHitLoopId = setTimeout('jQuery.fn.multiHIT()', 250);
return
}
}, 'json')
};
unsafeWindow.jQuery.fn.multiHIT = function () {
if (unsafeWindow.globalStop || multiHitCount <= (multiHitModeEnergy ? multiHitDone : multiHitEnemyKill)) {
multiHitRunning = false;
$j('button#multihit_start') .html('HIT!');
return
}
if (unsafeWindow.ERPK.canFire()) {
if ($j('input#multihit_bazooka') .is(':checked') && $j('.listing span img') .eq( - 1) .attr('src') .indexOf('q10') !== - 1) {
unsafeWindow.jQuery.fn.changeWeapon()
} else {
unsafeWindow.shoot()
}
} else if (canGetWell()) {
unsafeWindow.jQuery.fn.getWell()
} else {
multiHitRunning = false;
$j('button#multihit_start') .html('HIT!');
return
}
};
$j('button#multihit_start') .click(function () {
if (multiHitRunning) {
clearTimeout(multiHitLoopId);
multiHitRunning = false;
$j('button#multihit_start') .html('HIT!')
} else {
multiHitCount = $j('input#multihit_count') .val();
if (multiHitCount > 0) {
currentHealth = Number($j('strong#current_health') .text() .split('/') [0]);
multiHitDone = 0;
multiHitEnemyKill = 0;
multiHitLastKilled = false;
multiHitRunning = true;
$j('button#multihit_start') .html('
STOP!');
unsafeWindow.jQuery.fn.multiHIT()
}
}
});
$j('button#multihit_mode') .click(function () {
if (multiHitModeEnergy) {
multiHitModeEnergy = false;
$j('button#multihit_mode') .html('Enemy');
} else {
multiHitModeEnergy = true;
$j('button#multihit_mode') .html('10 Energy')
}
});
if (fireAll) {
setInterval(function () {
if (!multiHitRunning) {
$j('button#multihit_start') .click()
}
setTimeout(2000, callback)
}, 2000)
}
}
function GM_wait() {
if (typeof unsafeWindow.jQuery === 'undefined') {
window.setTimeout(GM_wait, 100)
} else {
$j = unsafeWindow.jQuery;
letsJQuery();
}
}
function letsJQuery() {
if (typeof unsafeWindow === 'undefined') {
unsafeWindow = window;
}
if (onHttps) {
HookJQueryPostAndGetJSON();
if (onMarketPage) {
HookMarketGenURL();
}
}
if (onBattlePage) {
onBattlePageDo();
}
}
if (TryJumpOldBattle()) {
return ;
}
if (onHttps) {
LoadJS_Reward();
ParseHttps_WithoutJQuery();
WatchLocation();
}
if (onBattlePage) {
ParseOldBattle_WithoutJQuery();
}
GM_wait();