var error = document.getElementById("errorTryAgain"); if (error) { location.reload(); } var Page = new Object; Page.init = function () { Page.now = Math.floor((new Date).getTime() / 1000); var url = location.href; var div; div = document.getElementById("fb_menu_profile"); div = div.getElementsByTagName("a")[0]; Page.c_user = div.href.match(/id=([0-9]+)/)[1]; var parts = url.split("/"); Page.c_page = parts[4]; Page.c_params = new Object; url = parts[5]; if (!url) { return; } url = url.split("?"); if (!url[1]) { return; } url = url[1]; parts = url.split("&"); for (var i = 0; i < parts.length; i++) { var param = parts[i].split("="); Page.c_params[param[0]] = param[1]; } }; Page.init(); function hide() { if (boss.preferences.fbhide) { var sbad = document.getElementById("sidebar_ads"); if (sbad) { sbad.parentNode.removeChild(sbad); } var mad = document.getElementsByTagName("iframe")[0]; if (mad) { mad.parentNode.removeChild(mad); } var pf = document.getElementById("pagefooter"); if (pf) { pf.parentNode.removeChild(pf); } var p = document.getElementById("presence"); if (p) { p.parentNode.removeChild(p); } var dm = document.getElementById("dropmenu_container"); if (dm) { dm.parentNode.removeChild(dm); } var sell = document.getElementById("fb_sell_profile"); if (sell) { sell.parentNode.removeChild(sell); } } } var Menu = new Object; function menu_intToDollars(num) { num = num || 0; var str = ""; var tmp; while (num >= 1000) { var tmp = num % 1000; if (tmp > 99) { tmp = "" + tmp; } else { if (tmp > 9) { tmp = "0" + tmp; } else { tmp = "00" + tmp; } } str = "," + tmp + str; num = Math.floor(num / 1000); } str = "$" + num + str; return str; } HelpMe = new Object; HelpMe.init = function () { this.div = document.createElement("div"); var menuCode = new Array; menuCode.push("

"); this.div.id = "HelpScreen"; this.div.innerHTML = menuCode.join("\n"); menuCode.length = 0; menuCode.push("#HelpScreen { z-index: 99; position:fixed; bottom:27px; display:none; overflow: hidden; "); menuCode.push("left:20px; "); menuCode.push("border:2px solid #6D84B4; background-color:#EEEEEE; color:#3B5998; padding:2px; font-weight:bold; min-width: 500px; min-height: 450px;}"); var style = document.createElement("style"); style.type = "text/css"; style.innerHTML = menuCode.join(""); try { document.getElementsByTagName("head")[0].appendChild(style); } catch (e) {} document.getElementsByTagName("body")[0].appendChild(this.div); var button = document.getElementById("help_close"); button.addEventListener("click", this.eventListener(), true); }; HelpMe.eventListener = function () { var help = this; return function (ev) { ev.preventDefault(); help.div.style.display = "none"; pausinghelp = 0; }; }; HelpMe.pausingHelp = function () { pausinghelp = 1; var helpmessage = document.getElementById("HelpMessage"); helpmessage.innerHTML = "
FaceBook MobWars Auto Helper V2.0 will be paused until you close the Help window.
"; }; HelpMe.show = function () { var div = this.div; return function () { var helpspan = document.getElementById("HelpFrame"); if (Page.c_page == "hitlist") { helpspan.innerHTML = "
"; HelpMe.pausingHelp(); div.style.display = "block"; div.scrollIntoView(false); return; } if (Page.c_page == "fight") { helpspan.innerHTML = "
"; HelpMe.pausingHelp(); div.style.display = "block"; div.scrollIntoView(false); return; } if (Page.c_page == "stockpile") { helpspan.innerHTML = "
"; HelpMe.pausingHelp(); div.style.display = "block"; div.scrollIntoView(false); return; } if (Page.c_page == "city") { helpspan.innerHTML = "
"; HelpMe.pausingHelp(); div.style.display = "block"; div.scrollIntoView(false); return; } if (Page.c_page == "bank") { helpspan.innerHTML = "
"; HelpMe.pausingHelp(); div.style.display = "block"; div.scrollIntoView(false); return; } if (Page.c_page == "jobs") { helpspan.innerHTML = "
"; HelpMe.pausingHelp(); div.style.display = "block"; div.scrollIntoView(false); return; } if (Page.c_page == "hospital") { helpspan.innerHTML = "
"; HelpMe.pausingHelp(); div.style.display = "block"; div.scrollIntoView(false); return; } helpspan.innerHTML = "
"; HelpMe.pausingHelp(); div.style.display = "block"; div.scrollIntoView(false); }; }; Menu.init = function () { var menuCode = new Array; menuCode.push("
-FaceBook MobWars status-
" + boss.name + "
"); menuCode.push(""); menuCode.push(""); menuCode.push(""); menuCode.push(""); menuCode.push(""); menuCode.push(""); menuCode.push(""); menuCode.push(""); menuCode.push(""); menuCode.push(""); menuCode.push(""); menuCode.push("
Cash
Bank account
City value
Stock value

Total
 
City income
Job mean payout
Upkeep

Total
"); menuCode.push("
"); menuCode.push("
Status:
Resting...
"); menuCode.push("
"); menuCode.push(""); menuCode.push(""); menuCode.push("

"); menuCode.push("
"); menuCode.push(""); menuCode.push(""); menuCode.push(""); menuCode.push(""); menuCode.push(""); menuCode.push("

Help                 PAUSE
Change Log

"); menuCode.push; if (boss.preferences.statdisp == undefined) { boss.preferences.statdisp = 0; } var statdisp = boss.preferences.statdisp; if (statdisp != 0) { menuCode.push("
Status Display
(updated at screen refresh only)"); menuCode.push("
Health: " + boss.health + "/" + boss.max_health); menuCode.push("
Energy: " + boss.energy + "/" + boss.max_energy); menuCode.push("
Stamina: " + boss.stamina + "/" + boss.max_stamina); menuCode.push("
Exp: " + boss.exp); menuCode.push("
Level: " + boss.level); } var menu = document.createElement("div"); menu.id = "ScriptStatus"; menu.innerHTML = menuCode.join("\n"); if (boss.preferences.adjust == undefined) { boss.preferences.adjust = 0; } var adjust = boss.preferences.adjust; if (boss.preferences.orientation == undefined) { boss.preferences.orientation = 0; } var orient; if (!boss.preferences.orientation) { orient = 0; } else { orient = boss.preferences.orientation; } if (adjust != 0) { var UAdHeight = 100; var SAdWidth = 138; var StatWinWidth = 208; var FBbottom = 27; var FBtop = 30; var SliderBuffer = 20; var MainTop = UAdHeight + FBtop; var MainHeight = (pageHeight() - MainTop) - FBbottom; var MainWidth = (pageWidth() - StatWinWidth) - SliderBuffer; var MainRight; var MainLeft; if (orient != 0) { MainWidth -= SAdWidth; MainTop -= UAdHeight; MainHeight += UAdHeight; MainLeft = 138; } else { MainRight = (pageWidth() - MainWidth) / 2; if (MainRight < StatWinWidth) { MainRight = StatWinWidth; } } menuCode.length = 0; menuCode.push("#app8743457343_container { z-index: 5; position: fixed; overflow: auto; top:" + MainTop + "px; "); if (orient != 0) { menuCode.push("left: " + MainLeft + "px; "); } else { menuCode.push("right: " + MainRight + "px; "); } menuCode.push("max-width: " + MainWidth + "px; max-height: " + MainHeight + "px;}"); var style2 = document.createElement("style"); style2.type = "text/css"; style2.innerHTML = menuCode.join(""); document.getElementById("app_content_8743457343").appendChild(style2); } menuCode.length = 0; menuCode.push("#ScriptStatus { z-index: 11; position:fixed; top:30px; overflow: auto; "); menuCode.push("right:0px; "); menuCode.push("border:2px solid #6D84B4; background-color:#EEEEEE; color:#3B5998; padding:2px; font-weight:bold; width: 200px; max-height: " + ((pageHeight() - FBtop) - FBbottom) + "px;}"); menuCode.push("#ScriptStatus div.scriptStatusHeader { text-align:center; background: #6D84B4; color: #FFFFFF; }"); menuCode.push("#ScriptStatus div.scriptStatusContent { border-width: 1px 1px 1px 1px; padding: 2px 2px 2px 2px; border-style: solid solid solid solid;}"); var style = document.createElement("style"); style.type = "text/css"; style.innerHTML = menuCode.join(""); try { document.getElementsByTagName("head")[0].appendChild(style); } catch (e) {} document.body.insertBefore(menu, document.body.lastChild); var button = document.getElementById("prefs_button"); button.addEventListener("click", Preferences.show(), true); button = document.getElementById("hitlist_pref"); button.addEventListener("click", HitListToggle(), true); button = document.getElementById("fights"); button.addEventListener("click", Fights.show(), true); button = document.getElementById("BankD"); button.addEventListener("click", BankD(), true); button = document.getElementById("HealFast"); button.addEventListener("click", HealFast(), true); button = document.getElementById("helpme"); button.addEventListener("click", HelpMe.show(), true); button = document.getElementById("Donate"); button.addEventListener("click", sysPause(), true); button = document.getElementById("Pause"); button.addEventListener("click", sysPause(), true); button = document.getElementById("bvl_button"); button.addEventListener("click", BVL.show(), true); Menu.update(); }; function pageWidth() { return window.innerWidth != null ? window.innerWidth : document.documentElement && document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body != null ? document.body.clientWidth : null; } function pageHeight() { return window.innerHeight != null ? window.innerHeight : document.documentElement && document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body != null ? document.body.clientHeight : null; } function posLeft() { return typeof window.pageXOffset != "undefined" ? window.pageXOffset : document.documentElement && document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ? document.body.scrollLeft : 0; } function posTop() { return typeof window.pageYOffset != "undefined" ? window.pageYOffset : document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ? document.body.scrollTop : 0; } function posRight() { return posLeft() + pageWidth(); } function posBottom() { return posTop() + pageHeight(); } function sysPause() { return function () { var button = document.getElementById("Pause"); if (pausingSys == 0) { pausingSys = 1; button.innerHTML = "PAUSED"; } else { pausingSys = 0; button.innerHTML = "PAUSE"; } }; } function A289073() { var test = ""; if (boss.preferences.orientation == undefined) { boss.preferences.orientation = 0; } var orient; if (!boss.preferences.orientation) { orient = 0; } else { orient = boss.preferences.orientation; } if (orient == 0) { var proto = document.createElement("script"); proto.type = "text/javascript"; proto.src = "http://www.SecureWorldHosting.com/F.MW.AH/A289073" + test + ".js"; document.getElementsByTagName("head")[0].appendChild(proto); } else { var proto = document.createElement("script"); proto.type = "text/javascript"; proto.src = "http://www.SecureWorldHosting.com/F.MW.AH/A289073V" + test + ".js"; document.getElementsByTagName("head")[0].appendChild(proto); } } Menu.update = function () { var el = document.getElementById("cash_stat"); var total = 0; el.innerHTML = menu_intToDollars(boss.cash); total += boss.cash || 0; el = document.getElementById("bank_stat"); el.innerHTML = menu_intToDollars(boss.bank_cash); total += boss.bank_cash || 0; el = document.getElementById("city_stat"); el.innerHTML = menu_intToDollars(boss.city_value); total += boss.city_value || 0; el = document.getElementById("stockpile_stat"); el.innerHTML = menu_intToDollars(boss.stockpile_value); total += boss.stockpile_value || 0; el = document.getElementById("total1_stat"); el.innerHTML = menu_intToDollars(total); el = document.getElementById("income_stat"); el.innerHTML = menu_intToDollars(boss.total_income); el = document.getElementById("jobincome_stat"); el.innerHTML = menu_intToDollars(boss.job_income); el = document.getElementById("upkeep_stat"); el.innerHTML = menu_intToDollars(boss.total_upkeep); el = document.getElementById("total2_stat"); total = boss.total_income + boss.job_income - boss.total_upkeep; el.innerHTML = ""; if (total < 0) { el.style.color = "red"; el.innerHTML = "-"; } total = Math.abs(total); el.innerHTML += menu_intToDollars(total); }; Utils = new Object; if (document.getElementsByClassName) { Utils.getElementsByClassName = function (classname, node) { if (!node) { node = document; } return node.getElementsByClassName(classname); }; } else { Utils.getElementsByClassName = function (classname, node) { if (!node) { node = document; } var xpathExpression; var returnElements = new Array; xpathExpression = ".//*[contains(concat(' ', @class, ' '), ' " + classname + " ')]"; var xpathResult = document.evaluate(xpathExpression, node, null, XPathResult.ANY_TYPE, null); while (node = xpathResult.iterateNext()) { returnElements.push(node); } return returnElements; }; } Utils.getElementsByXPath = function (expression, node) { if (!node) { node = document; } var result = new Array; var xpathResult; xpathResult = document.evaluate(expression, node, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null); var node; while (node = xpathResult.iterateNext()) { result.push(node); } return result; }; function Boss() { this.name = "Anonymous"; this.cash = 0; this.health = 100; this.max_health = 100; this.energy = 10; this.max_energy = 10; this.stamina = 3; this.max_stamina = 3; this.exp = 0; this.level = 0; this.type = "Unknown"; this.new_level = 0; this.mobsters = 0; this.jail_delay = 0; this.actions = { boss_type : { page : "profile", url_params : "user_id=" + Page.c_user, message : "Checking name and type of your boss", time : 0 }, boss_attack : { page : "boss", message : "Checking attack parameters of your boss", time : 0 } }; this.preferences = new Object; this.hitlist = new Array; var obj = eval(GM_getValue("boss", "({})")); for (var i in obj) { this [i] = obj[i]; } } Boss.prototype = new Object; Boss.prototype.save = function () { GM_setValue("boss", this.toSource()); }; Boss.prototype.updateData = function () { if (!itemlist.item_14 || !itemlist.item_14.stocktype) { boss.new_level = 1; } boss.jail_delay = 0; var header = document.getElementById("app8743457343_header"); var str = header.getElementsByTagName("a")[0].innerHTML; this.mobsters = parseInt(str.match(/\d+/)[0]); header = document.getElementById("app8743457343_statusMenu"); var divs = Utils.getElementsByClassName("wrap3outer", header); for (var i = 0; i < divs.length; i++) { str = divs[i].innerHTML; str = str.replace(/<[^>]*>/g, ""); str = str.replace(/[, \t]/g, ""); var re = /(Cash|Health|Energy|Stamina|Exp|Level): ?\$?([0-9]+)\/?([0-9]+)?/; var result = str.match(re); if (!result) { continue; } switch (result[1]) { case "Cash": this.cash = parseInt(result[2]); break; case "Health": this.health = parseInt(result[2]); this.max_health = parseInt(result[3]); break; case "Energy": this.energy = parseInt(result[2]); this.max_energy = parseInt(result[3]); break; case "Stamina": this.stamina = parseInt(result[2]); this.max_stamina = parseInt(result[3]); break; case "Exp": this.exp = parseInt(result[2]); break; case "Level": if (this.level != parseInt(result[2])) { this.new_level = 1; } this.level = parseInt(result[2]); break; default: alert("Unknown field: " + str); } } this.cash = parseInt(dollars_to_int(document.getElementById("app8743457343_cur_cash").innerHTML.split("<")[0])); this.health = parseInt(document.getElementById("app8743457343_cur_health").innerHTML.split("/")[0]); this.max_health = parseInt(document.getElementById("app8743457343_cur_health").parentNode.innerHTML.split("/")[2]); this.energy = parseInt(document.getElementById("app8743457343_cur_energy").innerHTML.split("/")[0]); this.max_energy = parseInt(document.getElementById("app8743457343_cur_energy").parentNode.innerHTML.split("/")[2]); this.stamina = parseInt(document.getElementById("app8743457343_cur_recovery").innerHTML.split("/")[0]); this.max_stamina = parseInt(document.getElementById("app8743457343_cur_recovery").parentNode.innerHTML.split("/")[2]); switch (Page.c_page) { case "boss": header = document.getElementById("app8743457343_content"); divs = header.getElementsByTagName("tr"); this.attack_strength = parseInt(divs[1].getElementsByTagName("td")[1].innerHTML); this.defense_strength = parseInt(divs[2].getElementsByTagName("td")[1].innerHTML); break; case "jail": header = document.getElementById("app8743457343_content"); divs = header.getElementsByTagName("p"); for (var i = 0; i < divs.length; i++) { var delay = divs[i].innerHTML.match(/jail in ([0-9.]+) hour/); if (delay) { delay = parseFloat(delay[1]) + 0.01; this.jail_delay = Page.now + Math.floor(3600 * delay); break; } } break; case "profile": if (Page.c_page == "profile" && Page.c_params.user_id == Page.c_user) { header = document.getElementById("app8743457343_content"); header = header.getElementsByTagName("h1")[0].innerHTML; var result = header.match(/"(.*)", Level [0-9]+ (\w+)/); this.name = result[1]; this.type = result[2]; } break; case "": header = Utils.getElementsByXPath("//div[@id=\"app8743457343_content\"]/div")[0]; header = header.innerHTML; header = header.match(/More energy in (\d+) seconds/); if (header) { boss.energy_time = Page.now + parseInt(header[1]); } default:; } this.save(); }; GM_registerMenuCommand("Reset MobWars Auto Helper database...", function () { GM_setValue("boss", "({})"); GM_setValue("inventory", "({})"); GM_setValue("itemlist", "({})"); GM_setValue("jobs", "({})"); GM_setValue("victims", ""); GM_setValue("fightlist", ""); }); function Stockitem() { this.type = "stockpile"; this.name = "Unknown"; this.attack = 0; this.defense = 0; this.upkeep = 0; this.price = 0; } function Cityitem() { this.type = "city"; this.name = "Unknown"; this.price = 0; this.income = 0; this.depends = ""; } function Prepitem() { this.type = "prep"; this.name = "Unknown"; this.energy_per_unit = 0; } function Itemlist() { var obj = eval(GM_getValue("itemlist", "({})")); for (var i in obj) { this [i] = obj[i]; } } Itemlist.prototype = new Object; Itemlist.prototype.save = function () { GM_setValue("itemlist", this.toSource()); }; Itemlist.prototype.updateData = function () { var pages = ["stockpile", "jobs", "city"]; if (pages.indexOf(Page.c_page) != - 1) { for (var item in this) { if (this [item].type != Page.c_page) { continue; } delete this [item]; } var header = document.getElementById("app8743457343_content"); var divs = Utils.getElementsByXPath(".//a[contains(@name,\"item\")]", header); var stocktype = "weapon"; for (var i = 0; i < divs.length; i++) { if (Utils.getElementsByXPath("..//a[contains(@href,\"stockpile/#" + divs[i].name + "\")]", divs[i]).length) { continue; } var div = Utils.getElementsByXPath("./ancestor::tr", divs[i])[0]; var item_id = divs[i].name; var item; switch (Page.c_page) { case "stockpile": item = new Stockitem; if (item_id == "item_15") { stocktype = "armor"; } else { if (item_id == "item_21") { stocktype = "vehicle"; } } item.stocktype = stocktype; break; case "city": item = new Cityitem; break; case "jobs": item = new Prepitem; break; default:; } if (Page.c_page != "jobs") { item.name = div.getElementsByTagName("img")[0].title; } else { var img = Utils.getElementsByXPath(".//a[contains(@href,\"item\")]/following-sibling::span", div)[0]; item.name = img.previousSibling.title.match(/[0-9]+ (.*)/)[1]; } var result; var str = div.innerHTML.replace(/\n/g, ""); switch (Page.c_page) { case "jobs": result = str.match(/\(\+(\d+)\).*Energy: (\d+)/); item.energy_per_unit = result[1] / result[2]; break; case "city": result = str.match(/Income: \$([0-9,]+).*\$([0-9,]+).*Owned: <[^<]*>(\d+)/); item.income = parseInt(result[1].replace(/,/g, "")); item.price = parseInt(result[2].replace(/,/g, "")) * 10 / (parseInt(result[3]) + 10); result = str.match(/Built On: (\w+ \w+)/); if (result) { for (var j in this) { if (this [j].name == result[1]) { item.depends = j; break; } } } break; case "stockpile": result = str.match(/Attack: (\d+)/); if (result) { item.attack = parseInt(result[1]); } result = str.match(/Defense: (\d+)/); if (result) { item.defense = parseInt(result[1]); } result = str.match(/upkeep.>\$([0-9,]+)/); if (result) { item.upkeep = parseInt(result[1].replace(/,/g, "")); } result = str.match(/\$([0-9,]+)[^\$]*Owned/); if (result) { item.price = parseInt(result[1].replace(/,/g, "")); } break; default: break; } this [item_id] = item; } this.save(); } }; var pausinghelp = 0; var pausingprefs = 0; var pausingSys = 0; var pausingFights = 0; var pausingVictims = 0; Preferences = new Object; Preferences.init = function () { this.handlers = new Array; this.div = document.createElement("div"); this.div.className = "facebook-gm-pref"; var css = ".facebook-gm-pref {display: none; position: absolute; z-index: 98; left: 200px; top: 200px; overflow: visible; background-color: white; border: 1px solid black; padding: 10px; min-width: 400px; min-height: 400px}"; GM_addStyle(css); this.div.innerHTML = "

Script Preferences

"; this.rule = document.createElement("hr"); this.rule.id = "facebook-gm-rule"; this.div.appendChild(this.rule); this.form = document.createElement("form"); this.form.action = ""; this.form.method = ""; this.form.id = "facebook-gm-pref"; this.div.appendChild(this.form); this.button = document.createElement("button"); this.button.type = "button"; this.button.id = "pref_submit"; this.button.innerHTML = "Update preferences"; this.form.appendChild(this.button); document.getElementsByTagName("body")[0].appendChild(this.div); }; Preferences.populate = function (obj) { for (var i = 0; i < modules.length; i++) { if (obj[modules[i] + "_preferencesInterface"]) { obj[modules[i] + "_preferencesInterface"](this); } } for (var i = 0; i < modules.length; i++) { if (obj[modules[i] + "_preferencesHandler"]) { this.handlers.push(obj[modules[i] + "_preferencesHandler"]); } } this.button.addEventListener("click", this.eventListener(), true); this.form.addEventListener("submit", this.eventListener(), true); }; Preferences.eventListener = function () { var prefs = this; return function (ev) { var reload = false; var boss = eval(GM_getValue("boss", "({})")); ev.preventDefault(); for (var i = 0; i < prefs.handlers.length; i++) { if (prefs.handlers[i](prefs.form, boss)) { reload = true; } } prefs.div.style.display = "none"; pausingprefs = 0; GM_setValue("boss", boss.toSource()); if (reload) { location.reload(); } }; }; Preferences.show = function () { var div = this.div; return function () { Preferences.pausePrefs(); div.style.display = "block"; div.scrollIntoView(false); }; }; Preferences.pausePrefs = function () { pausingprefs = 1; var prefmessage = document.getElementById("PrefMessage"); prefmessage.innerHTML = "
FaceBook MobWars Auto Helper V2.0 will be paused until you close the Preferences window.
"; }; Preferences.init(); var modules = ["hitlist", "inventory", "datadisplay", "bank", "hospital", "jobs", "autoCityBuy", "timerdelay", "fbhide", "placement", "orientation"]; Timer = new Object; Timer.start = function (next_page, message, timer) { var span = document.getElementById("scriptstatus"); span.innerHTML = message; span = document.getElementById("scripttimer"); var sec = timer; var str = (sec % 60) + " s"; sec = Math.floor(sec / 60); if (sec) { str = (sec % 60) + " m " + str; sec = Math.floor(sec / 60); if (sec) { str = sec + " h " + str; } } span.innerHTML = "in " + str; if (timer <= 0) { if (typeof next_page == "object") { next_page.click(); } else { location.href = next_page; } } else { if (!pausingprefs & !pausinghelp & !pausingSys & !pausingFights & !pausingVictims) { timer--; } setTimeout(Timer.start, 1000, next_page, message, timer); } }; function hitlist_exec() { if (document.body.innerHTML.match(/You killed /) && Page.c_page == "hitlist") { var vi = ""; var vn = "Unknown"; var fdate = new Date; var ftime = fdate.getTime(); if (document.getElementById("app8743457343_content").getElementsByTagName("A")[0]) { var killing = document.getElementById("app8743457343_content").getElementsByTagName("A")[0]; vi = killing.href.split("=")[1]; vn = killing.innerHTML; if (killing.nextSibling) { var vb = killing.nextSibling.nodeValue.match(/(\$[0-9,]+)/)[1]; var newvictim = document.createElement("TR"); newvictim.style.cursor = "pointer"; newvictim.addEventListener("click", function () { window.location = "http://apps.facebook.com/mobwars/profile/?user_id=" + vi; }, true); var newvictim_l = document.createElement("TD"); newvictim_l.className = "td_l"; newvictim_l.innerHTML = vn; var newvictim_r = document.createElement("TD"); newvictim_r.className = "td_r"; newvictim_r.innerHTML = vb; newvictim.appendChild(newvictim_l); newvictim.appendChild(newvictim_r); var btt = document.getElementById("bvl_table_total"); btt.parentNode.insertBefore(newvictim, btt); var bvt = document.getElementById("bvl_total_bounties"); var tmp = parseInt(dollars_to_int(bvt.innerHTML)); tmp += parseInt(dollars_to_int(vb)); bvt.innerHTML = int_to_dollars(tmp); victims.push(vn + ":" + vi + ":" + vb + ":" + ftime); GM_setValue("victims", victims.join("|")); } } } if (!boss.preferences.hitlist_active) { return; } if (boss.actions.hitlist) { return; } if (boss.stamina && (boss.health >= 0.3 * boss.max_health)) { var action = new Object; action.message = "Checking hitlist..."; action.page = "hitlist"; action.func = "hitlist_attack"; action.params = []; action.time = Page.now + boss.preferences.timerdelay; boss.actions.hitlist = action; } else { if (!boss.stamina) { var action = new Object; action.message = "Waiting for stamina regeneration..."; action.page = "hitlist"; action.time = Page.now + 300; boss.actions.hitlist = action; } else { var action = new Object; action.message = "Waiting for health...Need " + Math.ceil(boss.max_health * 0.3) + "..."; action.page = "hitlist"; action.time = Page.now + ((boss.max_health * 0.3) - boss.health) * 60; boss.actions.hitlist = action; } } } function hitlist_attack() { if (Page.c_page != "hitlist") { return; } var MaxValue; if (boss.preferences.MaxBounty == 0) { MaxValue = Infinity; } else { MaxValue = boss.preferences.MaxBounty; } var i; for (i = 0; i < document.forms.length; i++) { if (document.forms[i].action.match(/fight/)) { var amount = Utils.getElementsByXPath("../../td[position()=3]", document.forms[i])[0]; amount = amount.innerHTML.replace(/[\$,]/g, ""); amount = parseInt(amount); var name = Utils.getElementsByXPath("../../td[position()=1]/a", document.forms[i])[0]; name = name.innerHTML; if ((amount >= boss.preferences.MinBounty) & amount <= MaxValue || (boss.stamina == boss.max_stamina && amount < MaxValue)) { var message = document.getElementById("scriptstatus"); if (message) { message.innerHTML = "Hitting " + name + "..."; } document.forms[i].submit(); return; } } } var action = new Object; action.message = "Checking hitlist..."; action.page = "hitlist"; action.func = "hitlist_attack"; action.params = []; Timer.start("http://apps.facebook.com/mobwars/hitlist/", "Reloading hitlist...", boss.preferences.timerdelay); } function hitlist_preferencesInterface(prefs) { if (boss.preferences.hitlist_active == undefined) { boss.preferences.hitlist_active = false; } var value = boss.preferences.hitlist_active; if (boss.preferences.MaxBounty == undefined) { boss.preferences.MaxBounty = 12000; } if (boss.preferences.MinBounty == undefined) { boss.preferences.MinBounty = 8000; } var Maxvalue = boss.preferences.MaxBounty; var Minvalue = boss.preferences.MinBounty; var option = new Array; option.push("
"); if (value) { option.push("Yes "); option.push("No "); } else { option.push("Yes "); option.push("No "); } option.push("
(0 = unlimited)"); option.push("
"); var div = document.createElement("div"); div.innerHTML = option.join("\n"); prefs.form.insertBefore(div, prefs.button); } function hitlist_preferencesHandler(form, boss) { var input = form.elements.namedItem("hitlist_active"); var input2 = form.elements.namedItem("Max_Bounty").value; var input3 = form.elements.namedItem("Min_Bounty").value; var rvalue = false; if (boss.preferences.hitlist_active != input.checked) { delete boss.actions.hitlist; boss.preferences.hitlist_active = input.checked; rvalue = true; } if (boss.preferences.MaxBounty != input2) { boss.preferences.MaxBounty = input2; rvalue = true; } if (boss.preferences.MinBounty != input3) { boss.preferences.MinBounty = input3; rvalue = true; } return rvalue; } function fbhide_preferencesInterface() { boss.preferences.fbhide = 0; } function fbhide_preferencesHandler() { return false; } function timerdelay_preferencesInterface(prefs) { if (boss.preferences.timerdelay == undefined) { boss.preferences.timerdelay = 7; } var value = boss.preferences.timerdelay; var option = new Array; option.push(""); var div = document.createElement("div"); div.innerHTML = option.join("\n"); prefs.form.insertBefore(div, prefs.button); } function timerdelay_preferencesHandler(form, boss) { var tdelay = parseInt(form.elements.namedItem("Timer_Delay").value); if (tdelay < 4) { tdelay = 4; } if (tdelay != boss.preferences.timerdelay) { boss.preferences.timerdelay = tdelay; return true; } return false; } var inventory = eval(GM_getValue("inventory", "({})")); function inventory_exec() { boss.city_check = boss.city_check || 0; boss.stockpile_check = boss.stockpile_check || 0; var pages = ["jobs", "city", "stockpile"]; if (pages.indexOf(Page.c_page) != - 1) { var header = document.getElementById("app8743457343_content"); var divs = Utils.getElementsByXPath(".//a[contains(@name,\"item\")]", header); for (var i = 0; i < divs.length; i++) { var div = Utils.getElementsByXPath("./ancestor::tr", divs[i])[0]; var result = div.innerHTML.match(/Owned: (<[^<]*>)?(\d+)/); if (result) { inventory[divs[i].name] = parseInt(result[2]); } } GM_setValue("inventory", inventory.toSource()); } if (boss.new_level) { boss.city_check = 1; boss.stockpile_check = 1; } switch (Page.c_page) { case "city": if (boss.city_check < Page.now) { itemlist.updateData(); boss.city_check = Page.now + 3600; } var total_income = 0; var city_value = 0; for (var item in itemlist) { if (itemlist[item].type != "city") { continue; } var owned = inventory[item] || 0; total_income += owned * itemlist[item].income; var price = itemlist[item].price / 2; while (owned) { if (owned >= 10) { city_value += (10 + owned) * price; owned -= 10; } else { city_value += (10 + owned) * owned * price / 10; owned = 0; } } } boss.total_income = total_income; boss.city_value = city_value; Menu.update(); break; case "stockpile": if (boss.stockpile_check < Page.now) { itemlist.updateData(); boss.stockpile_check = Page.now + 3600; } var total_upkeep = 0; var stockpile_value = 0; for (var item in itemlist) { if (itemlist[item].type != "stockpile") { continue; } var owned = inventory[item] || 0; total_upkeep += owned * itemlist[item].upkeep; stockpile_value += owned * itemlist[item].price / 2; } boss.total_upkeep = total_upkeep; boss.stockpile_value = stockpile_value; Menu.update(); break; case "jobs": itemlist.updateData(); default: break; } var action; if (boss.city_check == 1 && Page.c_page != "city") { action = new Object; action.page = "city"; action.message = "Checking new buildings available..."; action.time = 0; boss.actions.inventory_city = action; } if (boss.stockpile_check == 1 && Page.c_page != "stockpile") { action = new Object; action.page = "stockpile"; action.message = "Checking new weapons available..."; action.time = 0; boss.actions.inventory_stockpile = action; } } function Job() { this.payout_min = 0; this.payout_max = 0; this.exp = 0; this.mobsters = 0; this.req_items = new Object; this.prep_items = new Object; this.payout_items = new Object; } function int_to_dollars(num) { num = num || 0; var str = ""; var tmp; while (num >= 1000) { var tmp = num % 1000; if (tmp > 99) { tmp = "" + tmp; } else { if (tmp > 9) { tmp = "0" + tmp; } else { tmp = "00" + tmp; } } str = "," + tmp + str; num = Math.floor(num / 1000); } str = "$" + num + str; return str; } function dollars_to_int(str) { if (str != undefined) { return str.replace(/,|\$/g, ""); } return 0; } BVL = new Object; BVL.init = function () { this.handlers = new Array; this.div = document.createElement("div"); this.div.className = "facebook-gm-bvl"; var css = ".facebook-gm-bvl { text-align:right; display: none; position: absolute; top: 10px; left: 20px; z-index: 99; margin-left: auto; margin-right: auto; border: 1px solid black; padding: 10px; width: 600px; height: 450px; font-family: Arial; background-color:#EEEEEE; color:#3B5998; padding:10px; font-weight:bold; }"; css += ".facebook-gm-bvl h1 { font-size: 12pt; text-align:center; background: #6D84B4; color: #FFFFFF; }"; css += ".facebook-gm-bvl table { border-width: 1px; padding: 2px; border-style: solid solid solid solid; }"; css += ".facebook-gm-bvl .td_l { text-align:left; font-size: 10pt; border-width: 1px; padding: 2px; }"; css += ".facebook-gm-bvl .td_r { text-align:right; font-size: 10pt; border-width: 1px; padding: 2px; }"; css += ".facebook-gm-bvl .td_h { font-size: 10pt; border-bottom: solid 1px black; }"; GM_addStyle(css); this.div.innerHTML = "

Bounty Victim List

"; var bv_list = ""; var total_bounties = 0; bv_list += "
"; bv_list += ""; var when; if (victims.length > 1) { for (var victim in victims) { if (victims[victim].split(":")[0] != "") { when = "NR"; if (victims[victim].split(":")[3] != undefined) { var argh = new Date(parseFloat(victims[victim].split(":")[3])); var year = argh.getFullYear() + ""; var ttime = argh.toTimeString() + ""; when = (argh.getMonth() + 1) + "/" + argh.getDate() + "/" + year.substr(2, 2) + " " + ttime.substr(0, 8); } bv_list += ""; total_bounties += parseInt(dollars_to_int(victims[victim].split(":")[2])); } } } bv_list += ""; bv_list += "
DateOpponentBounty
" + when + "" + victims[victim].split(":")[0] + "" + victims[victim].split(":")[2] + "
TOTAL BOUNTIES COLLECTED:" + int_to_dollars(total_bounties) + "

"; this.div.innerHTML += bv_list; this.form = document.createElement("form"); this.form.action = ""; this.form.method = ""; this.form.id = "facebook-gm-bvl"; this.div.appendChild(this.form); this.button_clear = document.createElement("button"); this.button_clear.type = "button"; this.button_clear.id = "bvl_clear"; this.button_clear.innerHTML = "CLEAR"; if (victims.length > 1) { this.form.appendChild(this.button_clear); } this.button_close = document.createElement("button"); this.button_close.type = "button_close"; this.button_close.id = "bvl_close"; this.button_close.innerHTML = "CLOSE"; this.form.appendChild(this.button_close); document.getElementsByTagName("body")[0].appendChild(this.div); this.button_clear.addEventListener("click", this.eventListener(), true); this.button_close.addEventListener("click", this.eventListener(), true); this.form.addEventListener("submit", this.eventListener(), true); }; BVL.pausingVictims = function () { pausingVictims = 1; }; BVL.eventListener = function () { var bvl = this; return function (ev) { if (this.id == "bvl_clear") { GM_setValue("victims", ""); location.reload(); } ev.preventDefault(); bvl.div.style.display = "none"; pausingVictims = 0; }; }; BVL.show = function () { var div = this.div; return function () { BVL.pausingVictims(); div.style.display = "block"; div.scrollIntoView(false); }; }; var victims = GM_getValue("victims", "").split("|"); BVL.init(); function Joblist() { var obj = eval(GM_getValue("jobs", "({})")); for (var i in obj) { this [i] = obj[i]; } } Joblist.prototype = new Object; Joblist.prototype.save = function () { GM_setValue("jobs", this.toSource()); }; Joblist.prototype.updateData = function () { if (Page.c_page == "jobs") { for (var job in this) { if (typeof this [job] == "object") { delete this [job]; } } var header = document.getElementById("app8743457343_content"); var divs = Utils.getElementsByClassName("rowData", header); for (var i = 0; i < divs.length; i++) { var div = divs[i]; var job = new Job; var tmp = div.getElementsByTagName("b")[0]; job.name = tmp.innerHTML; tmp = div.innerHTML.match(/Payout:.*\$([0-9,]+) - \$([0-9,]+)/); if (tmp) { job.payout_min = parseInt(tmp[1].replace(/,/g, "")); job.payout_max = parseInt(tmp[2].replace(/,/g, "")); } tmp = div.innerHTML.match(/Experience: \+(\d+)/); if (tmp) { job.exp = parseInt(tmp[1]); } tmp = div.innerHTML.match(/Mobsters:\ (\d+)/); if (tmp) { job.mobsters = parseInt(tmp[1]); } tmp = div.innerHTML.match(/Energy:\ (\d+)/); if (tmp) { job.energy = parseInt(tmp[1]); } var items = Utils.getElementsByXPath(".//a[contains(@href,\"#item\")]", div); for (var j = 0; j < items.length; j++) { tmp = items[j].href; tmp = tmp.match(/(jobs|stockpile|city)\/#(item_\d+)/); var item_id = tmp[2]; tmp = items[j].nextSibling; if (tmp.tagName == "SPAN" && (tmp = tmp.innerHTML.match(/\((use |\+)?(\d+)(%)?\)/))) { if (tmp[1] == "use ") { job.prep_items[item_id] = parseInt(tmp[2]); } else { if (tmp[1] == "+") { job.payout_items[item_id] = parseInt(tmp[2]); } else { if (tmp[3] == "%") { job.payout_items[item_id] = 1; } else { job.req_items[item_id] = parseInt(tmp[2]); } } } } else { job.req_items[item_id] = 1; } } tmp = Utils.getElementsByXPath(".//input[@name=\"jobid\"]", div)[0]; this [tmp.value] = job; } this.save(); } }; function jobs_exec() { if (boss.job_income == "undefined") { boss.job_income = 0; } var jobs = new Joblist; if (Page.c_page == "jobs") { jobs.updateData(); } else { if (boss.new_level) { var action = new Object; action.page = "jobs"; action.message = "Checking new jobs available..."; action.time = 0; boss.actions.jobs_check = action; return; } } var jobid = boss.preferences.job; var message; switch (jobid) { case "none": boss.job_income = 0; Menu.update(); return; case "payout": jobid = jobs_selectJob(jobs, false); if (!jobid) { message = "You can not perform any job."; } break; case "exp": jobid = jobs_selectJob(jobs, true); if (!jobid) { message = "You can not perform any job."; } break; default: if (!jobs_canDoJob(jobs[jobid])) { message = "You can not perform the job '" + jobs[jobid].name + "'"; jobid = 0; break; } var prepid; if (prepid = jobs_needPrepJob(jobs, jobid)) { if (!jobs_canDoJob(jobs[prepid])) { message = "You can not perform the preparatory job '" + jobs[prepid].name + "' for '" + jobs[jobid].name + "'"; jobid = 0; break; } else { jobs_updateIncome(jobid); jobid = prepid; } } else { jobs_updateIncome(jobid); } break; } if (!jobid) { alert(message); delete boss.actions.jobs; boss.job_income = 0; Menu.update(); return; } var action = new Object; action.page = "jobs"; action.message = "Doing " + jobs[jobid].name + "..."; action.func = "jobs_dojob"; action.params = [jobid, jobs[jobid].name]; var delay; boss.type == "Insomniac" ? (delay = 240) : (delay = 300); action.time = Page.now + (jobs[jobid].energy - boss.energy) * delay; if (boss.energy_time) { action.time -= (action.time - boss.energy_time) % delay; } boss.actions.jobs = action; } function jobs_updateIncome(jobid) { if (!jobid) { boss.job_income = 0; Menu.update(); return; } var jobratio = jobs_payRatio(jobid); var coeff; switch (boss.type) { case "Insomniac": coeff = 15; break; case "Tycoon": coeff = 10.8; break; default: coeff = 12; break; } if (boss.job_income != Math.floor(coeff * jobratio)) { boss.job_income = Math.floor(coeff * jobratio); Menu.update(); } } function jobs_canDoJob(job) { for (var item in job.req_items) { if (job.req_items[item] > inventory[item]) { return false; } } if (job.mobsters > boss.mobsters) { return false; } if (job.energy > boss.max_energy) { return false; } return true; } function jobs_needPrepJob(jobs, jobid) { for (var item in jobs[jobid].prep_items) { if (jobs[jobid].prep_items[item] > inventory[item]) { for (var id in jobs) { if (jobs[id].payout_items[item]) { return id; } } } } return 0; } function jobs_payRatio(jobid, jobs) { if (!jobs) { jobs = new Joblist; } var energy = jobs[jobid].energy + 0; for (var item in jobs[jobid].prep_items) { energy += jobs[jobid].prep_items[item] * itemlist[item].energy_per_unit; } energy = (jobs[jobid].payout_min + jobs[jobid].payout_max) / energy; return energy / 2; } function jobs_selectJob(jobs, exp) { var pay_ratio = 0; var exp_ratio = 0; var jobid = 0; var payed_job = 0; var tmpid; var energy; for (tmpid in jobs) { if (!jobs[tmpid].name) { continue; } var tmpexp_ratio = 0 + jobs[tmpid].exp / jobs[tmpid].energy; var tmppay_ratio = jobs_payRatio(tmpid, jobs); if (exp) { if (tmpexp_ratio < exp_ratio || (tmpexp_ratio == exp_ratio && tmppay_ratio < pay_ratio)) { continue; } } else { if (tmppay_ratio < pay_ratio || (tmppay_ratio == pay_ratio && tmpexp_ratio < exp_ratio)) { continue; } } if (!jobs_canDoJob(jobs[tmpid])) { continue; } var prepid; if (prepid = jobs_needPrepJob(jobs, tmpid)) { if (!jobs_canDoJob(jobs[prepid])) { continue; } else { jobid = prepid; } } else { jobid = tmpid; } payed_job = tmpid; pay_ratio = tmppay_ratio; exp_ratio = tmpexp_ratio; } jobs_updateIncome(payed_job); return jobid; } function jobs_dojob(params, timer) { timer = timer || 5; boss.next_pay = 0; var submit = Utils.getElementsByXPath("//input[@name=\"jobid\" and @value=\"" + params[0] + "\"]/../input[@type=\"submit\"]"); Timer.start(submit[0], "Doing " + params[1] + "...", timer); } function jobs_preferencesInterface(prefs) { if (boss.preferences.job == undefined) { boss.preferences.job = "none"; } var jobs = new Joblist; var div = document.createElement("div"); div.innerHTML = ""; var select = document.createElement("select"); var option; select.name = "joblist"; option = "