您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Useful utilities for the Facebook game Forces of War
// ==UserScript== // @name Forces of War utilities // @namespace Danielv123 // @version 1.0 // @description Useful utilities for the Facebook game Forces of War // @match https://fb-forces.uken.com/* // @match https://forces.uken.com/* // @copyright 2013 Johan / Asbra.net // @grant GM_getValue // @grant GM_setValue // ==/UserScript== /* This script was written by Johan aka Asbra in 2014. Due to undocumented changes in browsers february 2017 the script broke and the 3rd march 2017 I recieved a request to update the script as it is no longer maintained. */ var version = 0.1; var authenticity_token = document.querySelectorAll("input[name='authenticity_token']")[0].value; var mission_bot = 0; var mission_id = 0; var mission_cost = 0; var battle_bot = 0; var min_stamina = 0; var invasion_bot = 0; var invasion_health = 0; var invasion_time = 0; var heal_bot = 0; var min_health = 0; var collect_bot = 0; var fighting_boss = false; function conlog(text) { if(console && console.log) { console.log(text); } var d = new Date(); var newlog = '['+(d.getHours()<10?'0':'')+d.getHours()+':'+(d.getMinutes()<10?'0':'')+d.getMinutes()+':'+(d.getSeconds()<10?'0':'')+d.getSeconds()+'] '+text; var el_conlog = $('#conlog'); if(el_conlog.length == 1) { if(el_conlog.html() && el_conlog.html().length > 0) { var curlog = el_conlog.html().split('<br>'); if(curlog.length > 0) { newlog = curlog[1] + '<br />' + newlog; } else { newlog = el_conlog.html() + '<br />' + newlog; } } $('#conlog').html(newlog); } } function condeb(text) { if(console && console.debug) { console.debug(text); } var d = new Date(); var newlog = '['+(d.getHours()<10?'0':'')+d.getHours()+':'+(d.getMinutes()<10?'0':'')+d.getMinutes()+':'+(d.getSeconds()<10?'0':'')+d.getSeconds()+'] '+text; var el_deblog = $('#deblog'); if(el_deblog.length == 1) { if(el_deblog.html() && el_deblog.html().length > 0) { var curlog = el_deblog.html().split('<br>'); if(curlog.length > 0) { newlog = curlog[1] + '<br />' + newlog; } else { newlog = el_deblog.html() + '<br />' + newlog; } } $('#deblog').html(newlog); } } function do_action(action) { $(document.body).append('<form id="secretForm" action="'+action+'" method="post">'+ '<input name="authenticity_token" value="'+authenticity_token+'">'+ '</form>'); $("#secretForm").submit(); } function do_mission(mission_id) { conlog('Doing mission '+mission_id+'..'); do_action('/missions/attempt?mission='+mission_id); } function npc_attack() { if(fighting_boss == true && $('input[name=npc_id]').length > 0 && $('#npc_current_health').length > 0) { var npc_id = parseInt($('input[name=npc_id]').val()); // condeb('npc_id '+npc_id); var boss_health = parseInt($('#npc_current_health').attr('style').match(/(\d+).*\%/)[1]); condeb('boss_health '+boss_health); $('#npc_current_health div').html(boss_health+'%'); if(boss_health == 0) { fighting_boss = false; conlog('Boss died!'); conlog($('#log_contents .log_entries')[0]); conlog($('#log_contents .log_entries')[1]); window.location.href = '/home'; return; } else if(boss_health <= invasion_health) { // Check if the villains health is <= set health %, if so attack him! conlog('Attacking boss!'); $('#npc_attack_btn form').submit(); } // We need to keep polling setTimeout(function(){npc_attack();}, 100); } else { fighting_boss = false; } } function repeated_checks() { condeb('repeated_checks'); if(fighting_boss == true) { if($('#npc_middle').length == 0) { fighting_boss = false; } else { setTimeout(function(){repeated_checks();}, 1000); return; } } else if($('#npc_middle').length == 1 && fighting_boss == false) { // We are on a boss fight page var boss_health = parseInt($('#npc_current_health').attr('style').match(/(\d+).*\%/)[1]); if(boss_health > 0) { fighting_boss = true; npc_attack(); } } if(collect_bot) { var money_bar = $('#money_bar > div > a.loader'); if(money_bar.length == 1 && money_bar.attr('href') == '/empire') { // There is money to collect! conlog('There is money to collect!'); window.location.href = money_bar.attr('href'); return; } } if(heal_bot && U_HEALTH < min_health) { conlog('health '+U_HEALTH+' < '+min_health); do_action('/regeneration_chamber/regenerate?type=full'); return; } if(mission_bot && U_ENERGY >= mission_cost) { // Do mission do_mission(mission_id); return; } if(battle_bot && U_STAMINA > min_stamina) { if($('div#battle_list_container table#battle_list').length == 0) { conlog('Time for PvP!'); window.location.href = '/battles'; return; } else if($('div#battle_list_container table#battle_list').length == 1) { conlog('Looking for an opponent..'); var found = false; $.each($('#battle_list tr'),function(index,value){ if(found == false) { var player = $('.profile',value).html(); var level = $('p',value).html().split(' ')[1]; var winloss = $('b',value).html().split(' '); var wins = winloss[0].substr(0,winloss[0].length-1); var loss = winloss[2].substr(0,winloss[2].length-1); if(level <= (U_LEVEL+1)) { if(loss < (wins-1)) { // If opponent is lower level, has a smaller alliance, and has lost alot.. // Attack him! conlog('Attacking '+player); $('form',value).submit(); found = true; } } } }); } } if(invasion_bot) { if($('table#npc_list').length > 0) { // Check if there's an active invasion conlog('Looking for an invasion..'); var found = false; $.each($('#npc_list tr'),function(index,value){ if(found == false) { if($('.main_button',value).length > 0) { conlog('Found an ongoing invasion!'); $('.npc_listing',value).submit(); } } }); } else if($('div#npc_container').length == 0) { // If we're not on a boss fight already, go to invasion page var invasion_timer = GM_getValue('fow_invasion_timer',60); condeb('invasion_timer '+invasion_timer); var invasion_timer_max = GM_getValue('fow_invasion_timer_max',60); if(invasion_timer < invasion_timer_max) { // To only check every X seconds invasion_timer++; $('#invasion_timer').html(', checking in <strong>'+(invasion_timer_max-invasion_timer)+'</strong> seconds'); GM_setValue('fow_invasion_timer',invasion_timer); } else { invasion_timer = 0; GM_setValue('fow_invasion_timer',invasion_timer); conlog('Check for invasion..'); window.location.href = '/bounties'; return; } } } setTimeout(function(){repeated_checks();}, 1000); } $(document).ready( function() { conlog('-[ FOW Utils v'+version+' initializing ]-'); $('#body .fb-like').hide(); // Load settings collect_bot = GM_getValue('fow_collect_bot',0); mission_bot = GM_getValue('fow_mission_bot',0); mission_id = GM_getValue('fow_mission_id',''); mission_cost = GM_getValue('fow_mission_cost',0); battle_bot = GM_getValue('fow_pvp_bot',0); min_stamina = GM_getValue('fow_min_stamina',0); invasion_bot = GM_getValue('fow_invasion_bot',0); invasion_health = GM_getValue('fow_invasion_health',0); invasion_timer_max = GM_getValue('fow_invasion_timer_max',60); heal_bot = GM_getValue('fow_heal_bot',0); min_health = GM_getValue('fow_min_health',0); conlog('collect_bot '+collect_bot); conlog('mission_bot '+mission_bot); conlog('mission_id '+mission_id); conlog('mission_cost '+mission_cost); conlog('battle_bot '+battle_bot); conlog('min_stamina '+min_stamina); conlog('invasion_bot '+invasion_bot); conlog('invasion_health '+invasion_health); conlog('invasion_timer_max '+invasion_timer_max); conlog('heal_bot '+heal_bot); conlog('min_health '+min_health); // Initialize data authenticity_token = $('meta[name=csrf-token]').attr('content'); if($('#npc_middle').length > 0) { fighting_boss = true; // We are on a boss fight page npc_attack(); } if(collect_bot && $('form[action=/empire/collect_income]').length > 0) { // There's money to collect! conlog('Collecting money..'); do_action('/empire/collect_income'); return; } // Run main loop repeated_checks(); // Inject controls var el = document.createElement( 'div' ); el.id = 'fow_bot_settings'; el.style.zIndex = 99; el.style.position = 'fixed'; el.style.top = 0; el.style.left = 0; el.style.padding = '5px'; el.style.width = '100%'; el.style.height = '110px'; el.style.backgroundColor = 'rgba(0,0,0,0.75)'; el.style.color = 'white'; el.innerHTML = ''; el_left = document.createElement( 'div' ); el_left.id = 'fow_bot_settings_left'; el_left.style.verticalAlign = 'top'; el_left.style.display = 'inline-block'; el_left.style.width = '49%'; el_left.innerHTML = ''; el_left.innerHTML += '<input id="collect_bot" type="checkbox"'+(collect_bot?' checked':'')+' /> Automatically collect income<br />'; el_left.innerHTML += '<input id="mission_bot" type="checkbox"'+(mission_bot?' checked':'')+' /> Mission bot ID <input id="mission_id" type="text" value="'+mission_id+'" placeholder="ID" size="4" /> Cost <input id="mission_cost" type="text" value="'+mission_cost+'" placeholder="Cost" size="3" /> energy<br />'; el_left.innerHTML += '<input id="battle_bot" type="checkbox"'+(battle_bot?' checked':'')+' /> PvP bot When above <input id="min_stamina" type="text" value="'+min_stamina+'" placeholder="" size="4" /> stamina<br />'; el_left.innerHTML += '<input id="invasion_bot" type="checkbox"'+(invasion_bot?' checked':'')+' /> Invasion bot Attack at <input id="invasion_health" type="text" value="'+invasion_health+'" placeholder="" size="3" />% health or below<br />'; el_left.innerHTML += '<input id="heal_bot" type="checkbox"'+(heal_bot?' checked':'')+' /> Heal me if below <input id="min_health" type="text" value="'+min_health+'" placeholder="0" size="6" /> health<br />'; el_left.innerHTML += 'Check for invasion every <input id="invasion_timer_max" type="text" value="'+invasion_timer_max+'" size="3" /> seconds<span id="invasion_timer"></span><br />'; el_right = document.createElement( 'div' ); el_right.id = 'fow_bot_settings_right'; el_left.style.verticalAlign = 'top'; el_right.style.display = 'inline-block'; el_right.style.width = '49%'; el_right.innerHTML = ''; el_right.innerHTML += 'Status:<br /><span id="conlog"></span><br />'; el_right.innerHTML += '<br />'; el_right.innerHTML += 'Debug:<br /><span id="deblog"></span><br />'; el.appendChild(el_left); el.appendChild(el_right); document.body.appendChild(el); $('#fow_bot_settings #collect_bot').bind('change',function(){ collect_bot = !collect_bot;GM_setValue('fow_collect_bot',collect_bot); condeb('collect_bot '+collect_bot); }); $('#fow_bot_settings #mission_bot').bind('change',function(){ mission_bot = !mission_bot;GM_setValue('fow_mission_bot',mission_bot); condeb('mission_bot '+mission_bot); }); $('#fow_bot_settings #mission_id').bind('change',function(){ mission_id = $('#fow_bot_settings #mission_id').val(); GM_setValue('fow_mission_id',mission_id); condeb('mission_id '+mission_id); }); $('#fow_bot_settings #mission_cost').bind('change',function(){ mission_cost = $('#fow_bot_settings #mission_cost').val(); GM_setValue('fow_mission_cost',mission_cost); condeb('mission_cost '+mission_cost); }); $('#fow_bot_settings #battle_bot').bind('change',function(){ battle_bot = !battle_bot;GM_setValue('fow_pvp_bot',battle_bot); condeb('battle_bot '+battle_bot); }); $('#fow_bot_settings #min_stamina').bind('change',function(){ min_stamina = $('#fow_bot_settings #min_stamina').val(); GM_setValue('fow_min_stamina',min_stamina); condeb('min_stamina '+min_stamina); }); $('#fow_bot_settings #invasion_bot').bind('change',function(){ invasion_bot = !invasion_bot;GM_setValue('fow_invasion_bot',invasion_bot); condeb('invasion_bot '+invasion_bot); }); $('#fow_bot_settings #invasion_health').bind('change',function(){ invasion_health = $('#fow_bot_settings #invasion_health').val(); GM_setValue('fow_invasion_health',invasion_health); condeb('invasion_health '+invasion_health); }); $('#fow_bot_settings #invasion_timer_max').bind('change',function(){ invasion_timer_max = $('#fow_bot_settings #invasion_timer_max').val(); GM_setValue('fow_invasion_timer_max',invasion_timer_max); condeb('invasion_timer_max '+invasion_timer_max); }); $('#fow_bot_settings #heal_bot').bind('change',function(){ heal_bot = !heal_bot;GM_setValue('fow_heal_bot',heal_bot); condeb('heal_bot '+heal_bot); }); $('#fow_bot_settings #min_health').bind('change',function(){ min_health = $('#fow_bot_settings #min_health').val(); GM_setValue('fow_min_health',min_health); condeb('min_health '+min_health); }); });