您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
Raid Tab
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.greasyfork.icu/scripts/399268/787098/RaidTab.js
/********************************* Raid Tab ***********************************/ // @tabversion 20171101 Tabs.Raid = { tabDisabled : false, tabOrder : 8000, tabColor : 'brown', myDiv : null, tabLabel : unsafeWindow.g_js_strings.commonstr.raid, rallypointlevel:null, knt:{}, Troops:{}, city:0, raidtimer:null, rslt:{}, save:{}, stopping:false, resuming:false, deleting:false, stopprogress:0, stopcount:0, activecount:0, count:0, Options : { RemoveDeleteTab : false, foodreport : false, MsgInterval : 1, LastReport : 0, raidbtns : false, Foodstatus : {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0}, }, init : function (div){ var t = Tabs.Raid; t.myDiv = div; if (!Options.RaidOptions) { Options.RaidOptions = t.Options; } else { for (var y in t.Options) { if (!Options.RaidOptions.hasOwnProperty(y)) { Options.RaidOptions[y] = t.Options[y]; } } } setInterval(t.lookup, 2500); setInterval(t.sendreport, 1*60*1000); if(Options.RaidOptions.raidbtns) { AddMainTabLink('Raids: S', 'pboldraidtab', t.StopAllRaids); AddMainTabLink('R', 'pboldraidtabRes', t.ResumeAllRaids); if (!Options.RaidOptions.RemoveDeleteTab) AddMainTabLink('D', 'pboldraidtabDel', t.DeleteAllRaids); document.getElementById('pboldraidtabRes').style.marginLeft = '0px'; if (!Options.RaidOptions.RemoveDeleteTab) document.getElementById('pboldraidtabDel').style.marginLeft = '0px'; document.getElementById('pboldraidtab').title = 'Click to Stop Active Raids'; document.getElementById('pboldraidtabRes').title = 'Click to Resume Stopped Raids'; if (!Options.RaidOptions.RemoveDeleteTab) document.getElementById('pboldraidtabDel').title = 'Click to Delete Stopped Raids'; }; var m = '<DIV class=divHeader align=center>RAID FUNCTIONS</div><TABLE width=100% height=0% class=xtab><TR align="center">'; m += '<TD> </td>'; m += '<TD><INPUT id=pbRaidBut type=checkbox '+ (Options.RaidOptions.raidbtns?'CHECKED ':'') +'/></td><TD>'+translate("Raid toggle buttons on top of screen")+'</td><TD><INPUT id=pbDeleteTab type=checkbox '+ (Options.RaidOptions.RemoveDeleteTab?'CHECKED':'') +'\> Remove Delete Tab '; m += '<TD><INPUT id=pbsendraidreport type=checkbox '+ (Options.RaidOptions.foodreport?'CHECKED':'') +'\> Send raid report every '; m += '<INPUT id=pbsendreportint value='+ Options.RaidOptions.MsgInterval +' type=text size=3 \> hours </td>'; m += '</tr></table></div>'; m += '<DIV class=divHeader align=center>ACTIVE RAIDS</div><TABLE width=100% height=0% class=xtab><TR align="center">'; m += '<TD><DIV style="margin-bottom:10px;"><span id=ptRaidCity></span></div></td></tr>'; m +='<TR><TD><DIV style="margin-bottom:10px;"><span id=ptRaidTimer></span></div></td></tr></table>'; m += '<DIV id=PaintRaids></div>'; m += '<DIV class=divHeader align=center>SAVED RAIDS</div><TABLE width=100% height=0% class=xtab><TR align="center">'; m += '<DIV id=SavedRaids></div>'; t.myDiv.innerHTML = m; t.from = new CdispCityPicker ('ptRaidpicker', document.getElementById('ptRaidCity'), true, t.clickCitySelect, 0); document.getElementById('pbRaidBut').addEventListener('change', function(){ Options.RaidOptions.raidbtns = document.getElementById('pbRaidBut').checked; saveOptions(); }, false); document.getElementById('pbDeleteTab').addEventListener('change', function(){ Options.RaidOptions.RemoveDeleteTab = document.getElementById('pbDeleteTab').checked; saveOptions(); }, false); document.getElementById('pbsendraidreport').addEventListener('change', function(){ Options.RaidOptions.foodreport = document.getElementById('pbsendraidreport').checked; saveOptions(); }, false); document.getElementById('pbsendreportint').addEventListener('change', function(){ Options.RaidOptions.MsgInterval = parseInt(document.getElementById('pbsendreportint').value); saveOptions(); }, false); var serverID = getServerId(); t.save = GM_getValue ('SavedRaids_'+unsafeWindow.tvuid+'_'+serverID); if (t.save == null) t.save = GM_getValue ('SavedRaids_'+serverID); if (t.save != undefined) t.save = JSON2.parse (t.save); setInterval (t.paint,1000); }, lookup : function (){ var t = Tabs.Raid; t.activecount=0; t.stopcount=0; for (c=0; c< Seed.cities.length;c++) { cityID = 'city' + Seed.cities[c][0]; for (b in Seed.queue_atkp[cityID]){ destinationUnixTime = Seed.queue_atkp[cityID][b]['destinationUnixTime']; MarchStatus = Seed.queue_atkp[cityID][b]['marchStatus']; MarchType = Seed.queue_atkp[cityID][b]['marchType']; botMarchStatus = Seed.queue_atkp[cityID][b]['botMarchStatus']; if (MarchType == 9 && (MarchStatus == 3 || MarchStatus==10)) t.stopcount++; else if (MarchType == 9) t.activecount++; } } if(!Options.RaidOptions.raidbtns)return; if (t.resuming == false && t.stopping == false && t.deleting == false && t.activecount != 0) document.getElementById('pboldraidtab').innerHTML = '<span style="color: #ff6">Raids: S ('+ t.activecount + ')</span>' else if (t.resuming == false && t.stopping == false && t.deleting == false) document.getElementById('pboldraidtab').innerHTML = '<span style="color: #CCC">Raids: S ('+ t.activecount + ')</span>' if (t.resuming == false && t.resuming == false && t.deleting == false && t.stopcount !=0) document.getElementById('pboldraidtabRes').innerHTML = '<span style="color: #ff6">R ('+ t.stopcount + ')</span>' else if (t.resuming == false && t.stopping == false && t.deleting == false) document.getElementById('pboldraidtabRes').innerHTML = '<span style="color: #CCC">R ('+ t.stopcount + ')</span>' if (!Options.RaidOptions.RemoveDeleteTab) { if (t.resuming == false && t.stopping == false && t.deleting == false && t.stopcount !=0) document.getElementById('pboldraidtabDel').innerHTML = '<span style="color: #ff6">D ('+ t.stopcount + ')</span>' else if (t.resuming == false && t.stopping == false && t.deleting == false) document.getElementById('pboldraidtabDel').innerHTML = '<span style="color: #CCC">D ('+ t.stopcount + ')</span>' } }, paint : function () { var t = Tabs.Raid; var botMarchStat = {0:'Inactive', 1:'Raiding', 2:'Returning', 3:'Stopped', 4:'Resting', 5:'Unknown', 7:'Situation Changed', 8:'Returning', 9:'Aborting'}; var botStat = { 0:'Undefined', 1:'Marching', 2:'Returning', 3:'Stopped', 4:'Insufficient Troops', 5:'Max Raids Exceeded', 7:'Timed out', 8:'Resting'}; var o = ''; if (t.rslt.settings != undefined) o+= '<FONT size=2px><B>Raid Timer: '+ timestr( 86400 - ( unixTime() - t.rslt.settings.lastUpdated )) +'</b></font>'; document.getElementById('ptRaidTimer').innerHTML = o; var z ='<TABLE class=xtab><TR><TD width=60px align=center><A onclick="pbStopAll('+t.cityId+')">STOP</a></td><TD width=70px>Time</td><TD width=85px>Coords</td><TD width=50px>Level</td><TD width=50px></td><TD width=50px><A onclick="pbDeleteAll('+t.cityId+')">DELETE</a></td></TR>'; if (t.rslt['queue'] != ""){ for (y in t.rslt['queue']) { if (t.rslt['queue'][y]['botMarches'] != undefined) { for (k in Seed.queue_atkp['city' + t.cityId]){ if (Seed.queue_atkp['city' + t.cityId][k]['marchId'] == t.rslt['queue'][y]['botMarches']['marchId']) { botMarchStatus = Seed.queue_atkp['city' + t.cityId][k]['botMarchStatus']; MarchStatus = Seed.queue_atkp['city' + t.cityId][k]['marchStatus']; restPeriod = (Seed.queue_atkp['city' + t.cityId][k]['restPeriod']/60); destinationUnixTime = Seed.queue_atkp['city' + t.cityId][k]['destinationUnixTime']; returnUnixTime = Seed.queue_atkp['city' + t.cityId][k]['returnUnixTime'] now = unixTime(); z+='<TR>'; if (MarchStatus ==1) z+='<TD align=center><img src='+IMGURL+'attacking.jpg></td>'; else if (MarchStatus ==8 && (destinationUnixTime - now) <= 0 && botMarchStatus !=3 && returnUnixTime > now) z+='<TD align=center><img src='+IMGURL+'returning.jpg></td>'; else if (MarchStatus == 3) z+='<TD align=center><img src='+IMGURL+'autoAttack/raid_stopped_desat.png></td>'; else if (MarchStatus == 4 || (returnUnixTime < now && botMarchStatus !=3)) z+='<TD align=center><img src='+IMGURL+'autoAttack/raid_resting.png></td>'; else z+='<TD align=center><img src='+IMGURL+'autoAttack/raid_stopped_desat.png></td>'; if (destinationUnixTime >= now) z+='<TD>'+ timestr(Seed.queue_atkp['city' + t.cityId][k]['destinationUnixTime'] - unixTime())+'</td>'; if (destinationUnixTime <= now) { if ((destinationUnixTime - now) <= 0 && returnUnixTime > now) z+='<TD>'+ timestr(returnUnixTime - now)+'</td>'; if (returnUnixTime <= now) z+='<TD>'+ timestr(now - returnUnixTime)+'</td>'; } } } z+='<TD>('+ t.rslt['queue'][y]['botMarches']['toXCoord'] +','+ t.rslt['queue'][y]['botMarches']['toYCoord']+')</td>'; z+='<TD align=center>'+ t.rslt['queue'][y]['botMarches']['toTileLevel'] +'</td>'; if (botMarchStatus == 3) z+='<TD><A onclick="pbEditRaid('+ y +')">Edit</a></td>'; else z+='<TD><FONT COLOR= "CCCCCC">Edit</font></td>'; if (botMarchStatus == 3) z+='<TD align=center><A onclick="pbDeleteRaid('+ t.rslt['queue'][y]['botMarches']['marchId']+')">Delete</a></td>'; else z+='<TD align=center><FONT COLOR= "CCCCCC">Delete</font></td>'; z +='<TD width=25px></td><TD>Rest Time: '+ timestr(restPeriod) +'</td>'; z+='</tr>'; } } } z+='</table>'; if (t.rslt['queue'] == "") z ='<TABLE class=xtab><TR><TD>No Raids in city!</td></TR>'; document.getElementById('PaintRaids').innerHTML = z; var check = true; if (t.save != ""){ var a ='<TABLE class=xtab><TR><TD width=60px></td><TD width=70px></td><TD width=85px>Coords</td><TD width=50px>Level</td><TD width=50px></td><TD width=50px></td></tr>'; for (y in t.save){ if (t.save[y] != undefined && t.cityId == t.save[y]['cityId']){ a +='<TR><TD align=center><A onclick="pbDeleteSavedRaid('+ t.save[y]['marchId'] +')">X</a></td>'; a +='<TD></td><TD><FONT COLOR= "CC0000">('+t.save[y]['toXCoord']+','+t.save[y]['toYCoord']+')</font></td>'; a +='<TD align=center>'+t.save[y]['toTileLevel']+'</td>'; a +='<TD><A onclick="pbEditSavedRaid('+ y +')">Edit</a></td>'; a +='<TD align=center><A onclick="pbAddRaid('+ t.save[y]['marchId']+')">Add</a></td></tr>'; check = false; } } m+='</table>'; } if (check) a ='<TABLE class=xtab><TR><TD>No Saved Raids in city!</td></TR>'; document.getElementById('SavedRaids').innerHTML = a; unsafeWindow.pbDeleteRaid = t.DeleteRaid; unsafeWindow.pbEditRaid = t.EditRaid; unsafeWindow.pbAddRaid = t.AddRaid; unsafeWindow.pbDeleteSavedRaid = t.DeleteSavedRaid; unsafeWindow.pbEditSavedRaid = t.EditSavedRaid; unsafeWindow.pbStopAll = t.StopCityRaids; unsafeWindow.pbDeleteAll = t.DeleteCityRaids; }, DeleteSavedRaid : function (Id){ var t = Tabs.Raid; for (yy=0;yy<t.save.length;yy++){ if (t.save[yy]['marchId'] == Id){ t.save.splice (yy,1); } } var serverID = getServerId(); setTimeout (function (){GM_setValue ('SavedRaids_'+unsafeWindow.tvuid+'_'+serverID, JSON2.stringify(t.save));}, 0); t.paint(); }, EditSavedRaid : function (y){ var t = Tabs.Raid; var pop = new CPopup ('pbEditRaid', 0,0, 750,350, true); if (t.popFirst){ pop.centerMe (mainPop.getMainDiv()); t.popFirst = false; } pop.getTopDiv().innerHTML = '<CENTER><B>Edit Saved Raid</b></center>'; cityId = t.save[y]['cityId']; var m = '<BR><TABLE id=pbRaidAdd height=0% class=xtab><TR align="center">'; m+='<TR></tr><TR><TD width=25px>X= <INPUT id=toXCoord type=text size=3 maxlength=3 value='+t.save[y]['toXCoord']+'></td>'; m+='<TD width=10px></td><TD widht=25px>Y= <INPUT id=toYCoord type=text size=3 maxlength=3 value='+ t.save[y]['toYCoord'] +'></td>'; m+='<TD width=25px></td><TD>Round Trip: '+ timestr((t.save[y]['returnUnixTime'] - t.save[y]['destinationUnixTime'])*2)+ '</td></tr></table>'; m += '<BR><TABLE id=pbRaidAdd width=100% height=0% class=xtab><TR align="center">'; var rowcounter = 0; for (var ui in unsafeWindow.cm.UNIT_TYPES){ var i = unsafeWindow.cm.UNIT_TYPES[ui]; rowcounter++; if (rowcounter > 4) { m += '</tr><tr align="center">'; rowcounter = 1; } m += '<td><table class=xtab><tr><td rowspan=2><img src="'+IMGURL+'units/unit_'+i+'_50.jpg?6545"></td><td>'+ addCommas(Seed.units['city'+cityId]['unt'+i]) +'</td></tr><tr><td><INPUT id=Unit'+i+' type=text size=6 maxlength=6 value="'+t.save[y]['unit'+i+'Count']+'"></td></tr></table></td>'; } m += '</tr></table>'; m += '<BR><CENTER><SELECT id=AddKnights type=list></select></center>'; m+= '<BR><CENTER>'+ strButton20('Save', 'id=pbSaveRaid') +'</center>'; pop.getMainDiv().innerHTML = m; t.getKnights(cityId); document.getElementById ('AddKnights').value = t.save[y]['knightId']; document.getElementById ('pbSaveRaid').addEventListener ('click', function(){ t.save[y]['knightId'] = parseInt(document.getElementById ('AddKnights').value); t.save[y]['toXCoord'] = parseInt(document.getElementById ('toXCoord').value); t.save[y]['toYCoord'] = parseInt(document.getElementById ('toYCoord').value); for (var ui in unsafeWindow.cm.UNIT_TYPES){ var i = unsafeWindow.cm.UNIT_TYPES[ui]; t.save[y]['unit'+i+'Count'] = parseInt(document.getElementById ('Unit'+i).value); } var serverID = getServerId(); setTimeout (function (){GM_setValue ('SavedRaids_'+unsafeWindow.tvuid+'_'+serverID, JSON2.stringify(t.save));}, 0); pop.show (false); }, false); pop.show (true); }, EditRaid : function (y){ var t = Tabs.Raid; var pop = new CPopup ('pbEditRaid', 0,0, 750,430, true); if (t.popFirst){ pop.centerMe (mainPop.getMainDiv()); t.popFirst = false; } pop.getTopDiv().innerHTML = '<CENTER><B>Edit Raid</b></center>'; cityId = t.rslt['queue'][y]['botMarches']['cityId']; var m = '<BR><TABLE id=pbRaidAdd height=0% class=xtab><TR align="center">'; m+='<TR></tr><TR><TD width=25px>X= <INPUT id=toXCoord type=text size=3 maxlength=3 value='+t.rslt['queue'][y]['botMarches']['toXCoord']+'></td>'; m+='<TD width=10px></td><TD widht=25px>Y= <INPUT id=toYCoord type=text size=3 maxlength=3 value='+ t.rslt['queue'][y]['botMarches']['toYCoord'] +'></td>'; m+='<TD width=25px></td><TD>Round Trip: '+ timestr((t.rslt['queue'][y]['botMarches']['returnUnixTime'] - t.rslt['queue'][y]['botMarches']['destinationUnixTime'])*2)+ '</td></tr></table>'; m += '<BR><TABLE id=pbRaidAdd width=100% height=0% class=xtab><TR align="center">'; var rowcounter = 0; for (var ui in unsafeWindow.cm.UNIT_TYPES){ var i = unsafeWindow.cm.UNIT_TYPES[ui]; rowcounter++; if (rowcounter > 4) { m += '</tr><tr align="center">'; rowcounter = 1; } m += '<td><table class=xtab><tr><td rowspan=2><img src="'+IMGURL+'units/unit_'+i+'_50.jpg?6545"></td><td>'+ addCommas(Seed.units['city'+cityId]['unt'+i]) +'</td></tr><tr><td><INPUT id=Unit'+i+' type=text size=6 maxlength=6 value="'+t.rslt['queue'][y]['botMarches']['unit'+i+'Count']+'"></td></tr></table></td>'; } m += '</tr></table>'; m += '<BR><CENTER><SELECT id=AddKnights type=list></select></center>'; m+= '<BR><CENTER>'+ strButton20('Save', 'id=pbRaidSave') +'</center>'; pop.getMainDiv().innerHTML = m; t.getKnights(cityId); document.getElementById ('AddKnights').value = t.rslt['queue'][y]['botMarches']['knightId']; document.getElementById ('pbRaidSave').addEventListener ('click', function(){ var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams); params.pf = 0; params.ctrl = 'BotManager'; params.action = 'editMarch'; params.settings = {}; params.settings.cityId = t.rslt['queue'][y]['botMarches']['fromCityId']; params.queue = {0:{botMarches:{botMarchStatus:1,botState:1},cityMarches:{}}}; params.queue[0].cityMarches.knightId = parseInt(document.getElementById ('AddKnights').value); params.queue[0].cityMarches.toXCoord = parseInt(document.getElementById ('toXCoord').value); params.queue[0].cityMarches.toYCoord = parseInt(document.getElementById ('toYCoord').value); params.queue[0].cityMarches.unit0Count = 0; //document.getElementById ('Unit0').value; for (var ui in unsafeWindow.cm.UNIT_TYPES){ var i = unsafeWindow.cm.UNIT_TYPES[ui]; params.queue[0]['cityMarches']['unit'+i+'Count'] = parseIntNan(document.getElementById ('Unit'+i).value); } params.queue[0].cityMarches.marchId = t.rslt['queue'][y]['botMarches']['marchId']; new MyAjaxRequest(unsafeWindow.g_ajaxpath + "ajax/_dispatch.php" + unsafeWindow.g_ajaxsuffix, { method: "post", parameters: params, loading: true, onSuccess: function(rslt){ if (rslt.ok) { pop.show (false); unsafeWindow.cityinfo_army(); setTimeout(unsafeWindow.update_seed_ajax, 250); setTimeout(t.GetRaids, (750),Seed.cities[i][0]); } }, },true); }, false); pop.show (true); }, DeleteRaid : function (Id){ var t = Tabs.Raid; var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams); for (y in t.rslt['queue']) { if (t.rslt['queue'][y]['botMarches'] != undefined) { if (t.rslt['queue'][y]['botMarches']['marchId'] == Id) { marchId = t.rslt['queue'][y]['botMarches']['marchId']; cityId = t.rslt['queue'][y]['botMarches']['cityId']; knightId = t.rslt['queue'][y]['botMarches']['knightId']; toTileLevel = t.rslt['queue'][y]['botMarches']['toTileLevel']; returnUnixTime = t.rslt['queue'][y]['botMarches']['returnUnixTime']; destinationUnixTime = t.rslt['queue'][y]['botMarches']['destinationUnixTime']; toXCoord = t.rslt['queue'][y]['botMarches']['toXCoord']; toYCoord = t.rslt['queue'][y]['botMarches']['toYCoord']; var units = {}; for (var ui in unsafeWindow.cm.UNIT_TYPES){ var i = unsafeWindow.cm.UNIT_TYPES[ui]; units[i] = t.rslt['queue'][y]['botMarches']['unit'+i+'Count']; } } } } params.pf = 0; params.ctrl = 'BotManager'; params.action = 'deleteMarch'; params.marchId = marchId; params.settings = {}; params.settings.cityId = cityId; new MyAjaxRequest(unsafeWindow.g_ajaxpath + "ajax/_dispatch.php" + unsafeWindow.g_ajaxsuffix, { method: "post", parameters: params, loading: true, onSuccess: function(rslt){ if (rslt.ok) { var serverID = getServerId(); t.save = GM_getValue ('SavedRaids_'+unsafeWindow.tvuid+'_'+serverID); if (t.save == null) t.save = GM_getValue ('SavedRaids_'+serverID); if (t.save == undefined) t.save =new Array(); else t.save = JSON2.parse (t.save); var RaidObj = {}; RaidObj.marchId = marchId; RaidObj.cityId = cityId; RaidObj.knightId = knightId; RaidObj.toTileLevel = toTileLevel; RaidObj.returnUnixTime = destinationUnixTime; RaidObj.returnUnixTime = returnUnixTime; RaidObj.toXCoord = toXCoord; RaidObj.toYCoord = toYCoord; for (var ui in unsafeWindow.cm.UNIT_TYPES){ var i = unsafeWindow.cm.UNIT_TYPES[ui]; RaidObj['unit'+i+'Count'] = units[i]; } t.save.push (RaidObj); for (u in Seed.queue_atkp['city' + cityId]){ if (Seed.queue_atkp['city' + cityId][u]['marchId'] == marchId){ delete Seed.queue_atkp['city' + cityId][u]; if (Object.keys(Seed.queue_atkp['city' + cityId]).length == 0) { Seed.queue_atkp['city' + cityId] = uWCloneInto([]); } break; } } for (u in Seed.knights['city' + cityId]){ if (Seed.knights['city' + cityId][u]['knightId'] == knightId){ Seed.knights['city' + cityId][u]["knightStatus"] = 1; break; } } GM_setValue ('SavedRaids_'+unsafeWindow.tvuid+'_'+serverID, JSON2.stringify(t.save)); unsafeWindow.cityinfo_army(); setTimeout(unsafeWindow.update_seed_ajax, 250); t.GetRaids(cityId); } }, },true); }, StopCityRaids : function (cityId){ var t = Tabs.Raid; var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams); params.pf = 0; params.ctrl = 'BotManager'; params.action = 'stopAll'; params.settings = {}; params.settings.cityId = cityId; new MyAjaxRequest(unsafeWindow.g_ajaxpath + "ajax/_dispatch.php" + unsafeWindow.g_ajaxsuffix, { method: "post", parameters: params, loading: true, onSuccess: function(rslt){ if (rslt.ok) { } }, },true); setTimeout(t.GetRaids, (750), cityId); }, StopAllRaids : function (){ var t = Tabs.Raid; if (t.stopping == true || t.resuming == true || t.deleting == true) return; if (t.activecount == 0) return; t.stopping = true; for (i=0;i<Seed.cities.length;i++){ setTimeout(t.DoAllStop, (i*1500),i); } }, ResumeAllRaids : function (){ var t = Tabs.Raid; if (t.stopping == true || t.resuming == true || t.deleting == true) return; if (t.stopcount == 0) return; t.resuming = true; for (i=0;i<Seed.cities.length;i++){ setTimeout(t.DoAllResume, (i*1500),i); } }, DeleteAllRaids : function (){ var t = Tabs.Raid; if (t.stopping == true || t.resuming == true || t.deleting == true) return; if (t.stopcount == 0) return; t.deleting = true; count=0; t.count = t.stopcount; for (d=0; d< Seed.cities.length;d++) { var cityId = Seed.cities[d][0]; var city_atkp = Seed.queue_atkp['city'+cityId]; for (var e in city_atkp){ destinationUnixTime = city_atkp[e]['destinationUnixTime']; MarchId = city_atkp[e]['marchId']; MarchStatus = city_atkp[e]['marchStatus']; MarchType = city_atkp[e]['marchType']; botMarchStatus = city_atkp[e]['botMarchStatus']; if (MarchType == 9 && botMarchStatus == 3 && MarchStatus == 10) { count++; setTimeout(t.DoAllDelete, (count*1250), MarchId,d,count); } } } }, DoAllStop: function(i) { var t = Tabs.Raid; var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams); params.pf = 0; params.ctrl = 'BotManager'; params.action = 'stopAll'; params.settings = {}; params.settings.cityId = Seed.cities[i][0]; new MyAjaxRequest(unsafeWindow.g_ajaxpath + "ajax/_dispatch.php" + unsafeWindow.g_ajaxsuffix, { method: "post", parameters: params, loading: true, onSuccess: function(rslt){ if (rslt.ok) { t.stopprogress = t.stopprogress + (100/Seed.cities.length); actionLog('Stopping: '+ Seed.cities[i][1],'RAIDS'); t.updatebotbutton('Stopping: '+ t.stopprogress.toFixed(0) + '%', 'pboldraidtab'); if (t.stopprogress.toFixed(0) == 100) { t.stopprogress = 0; setTimeout(function(){t.updatebotbutton('Raids: S ('+ t.activecount + ')', 'pboldraidtab');t.stopping = false;}, (5000)); } } else { if (rslt.msg == "The system is busy, please try again later") setTimeout (t.DoAllStop, (2000),i); else { t.stopprogress = t.stopprogress + (100/Seed.cities.length); actionLog('Stopping: '+ Seed.cities[i][1] + ' - ' + rslt.msg,'RAIDS'); t.updatebotbutton('Stopping: '+ t.stopprogress.toFixed(0) + '%', 'pboldraidtab') if (t.stopprogress.toFixed(0) == 100) { t.stopprogress = 0; setTimeout(function(){t.updatebotbutton('Raids: S ('+ t.activecount + ')', 'pboldraidtab');t.stopping = false;}, (5000)); } } } }, },true); }, DoAllResume: function(i) { var t = Tabs.Raid; var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams); params.pf = 0; params.ctrl = 'BotManager'; params.action = 'resumeAll'; params.settings = {}; params.settings.cityId = Seed.cities[i][0]; new MyAjaxRequest(unsafeWindow.g_ajaxpath + "ajax/_dispatch.php" + unsafeWindow.g_ajaxsuffix, { method: "post", parameters: params, loading: true, onSuccess: function(rslt){ if (rslt.ok) { t.stopprogress = t.stopprogress + (100/Seed.cities.length); actionLog('Resuming: '+ Seed.cities[i][1],'RAIDS'); t.updatebotbutton('Resuming: '+ t.stopprogress.toFixed(0) + '%', 'pboldraidtab'); if (t.stopprogress.toFixed(0) == 100) { t.stopprogress = 0; setTimeout(function(){t.updatebotbutton('Raids: S ('+ t.activecount + ')', 'pboldraidtab');t.resuming = false;}, (5000)); } } else { if (rslt.msg == "The system is busy, please try again later") setTimeout (t.DoAllResume, (2000),i); else { t.stopprogress = t.stopprogress + (100/Seed.cities.length); actionLog('Resuming: '+ Seed.cities[i][1] + ' - ' + rslt.msg,'RAIDS'); t.updatebotbutton('Resuming: '+ t.stopprogress.toFixed(0) + '%', 'pboldraidtab') if (t.stopprogress.toFixed(0) == 100) { t.stopprogress = 0; setTimeout(function(){t.updatebotbutton('Raids: S ('+ t.activecount + ')', 'pboldraidtab');t.resuming = false;}, (5000)); } } } }, },true); }, DoAllDelete : function (Id,city,count){ var t = Tabs.Raid; var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams); cityID = 'city'+ Seed.cities[city][0]; for (f in Seed.queue_atkp[cityID]){ if (Seed.queue_atkp[cityID][f]['marchId'] == Id) { marchId = Seed.queue_atkp[cityID][f]['marchId']; cityId = Seed.queue_atkp[cityID][f]['cityId']; knightId = Seed.queue_atkp[cityID][f]['knightId']; toTileLevel = Seed.queue_atkp[cityID][f]['toTileLevel']; returnUnixTime = Seed.queue_atkp[cityID][f]['returnUnixTime']; destinationUnixTime = Seed.queue_atkp[cityID][f]['destinationUnixTime']; toXCoord = Seed.queue_atkp[cityID][f]['toXCoord']; toYCoord = Seed.queue_atkp[cityID][f]['toYCoord']; var units = {}; for (var ui in unsafeWindow.cm.UNIT_TYPES){ var i = unsafeWindow.cm.UNIT_TYPES[ui]; units[i] = Seed.queue_atkp[cityID][f]['unit'+i+'Count']; } } } params.pf = 0; params.ctrl = 'BotManager'; params.action = 'deleteMarch'; params.marchId = marchId; params.settings = {}; params.settings.cityId = cityId; new MyAjaxRequest(unsafeWindow.g_ajaxpath + "ajax/_dispatch.php" + unsafeWindow.g_ajaxsuffix, { method: "post", parameters: params, loading: true, onSuccess: function(rslt){ if (rslt != "") { var serverID = getServerId(); t.save = GM_getValue ('SavedRaids_'+unsafeWindow.tvuid+'_'+serverID, "[]"); if (t.save == undefined) t.save = GM_getValue ('SavedRaids_'+serverID, "[]"); if (t.save != undefined) t.save = JSON2.parse (t.save); if (t.save == undefined) t.save =new Array(); var RaidObj = {}; RaidObj.marchId = marchId; RaidObj.cityId = cityId; RaidObj.knightId = knightId; RaidObj.toTileLevel = toTileLevel; RaidObj.returnUnixTime = destinationUnixTime; RaidObj.returnUnixTime = returnUnixTime; RaidObj.toXCoord = toXCoord; RaidObj.toYCoord = toYCoord; for (var ui in unsafeWindow.cm.UNIT_TYPES){ var u = unsafeWindow.cm.UNIT_TYPES[ui]; RaidObj['unit'+u+'Count'] = units[u]; } t.save.push (RaidObj); for (u in Seed.queue_atkp['city' + cityId]){ if (Seed.queue_atkp['city' + cityId][u]['marchId'] == marchId){ delete Seed.queue_atkp['city' + cityId][u]; if (Object.keys(Seed.queue_atkp['city' + cityId]).length == 0) { Seed.queue_atkp['city' + cityId] = uWCloneInto([]); } break; } } for (u in Seed.knights['city' + cityId]){ if (Seed.knights['city' + cityId][u]['knightId'] == knightId){ Seed.knights['city' + cityId][u]["knightStatus"] = 1; break; } } setTimeout (function (){GM_setValue ('SavedRaids_'+unsafeWindow.tvuid+'_'+serverID, JSON2.stringify(t.save));}, 0); unsafeWindow.cityinfo_army(); setTimeout(unsafeWindow.update_seed_ajax, 250); } }, },true); t.stopprogress = count * (100/t.count); actionLog('Deleting: '+ Seed.cities[city][1],'RAIDS'); t.updatebotbutton('Deleting: '+ t.stopprogress.toFixed(0) + '%', 'pboldraidtab'); if (t.stopprogress.toFixed(0) == 100) { t.stopprogress = 0; setTimeout(function(cid){t.GetRaids(cid); t.updatebotbutton('Raids: S ('+ t.activecount + ')', 'pboldraidtab');t.deleting = false; }, 5000, cityId); } }, DeleteCityRaids : function (cityId){ var t = Tabs.Raid; if (t.stopping == true || t.resuming == true || t.deleting == true) return; count=0; for (d=0; d< Seed.cities.length;d++) { if (Seed.cities[d][0]==cityId) { var cityId = Seed.cities[d][0]; var city_atkp = Seed.queue_atkp['city'+cityId]; for (var e in city_atkp){ destinationUnixTime = city_atkp[e]['destinationUnixTime']; MarchStatus = city_atkp[e]['marchStatus']; MarchType = city_atkp[e]['marchType']; botMarchStatus = city_atkp[e]['botMarchStatus']; if (MarchType == 9 && botMarchStatus == 3 && MarchStatus == 10) { count++; } } } } t.count = count; if (t.count == 0) return; t.deleting = true; count=0; for (d=0; d< Seed.cities.length;d++) { if (Seed.cities[d][0]==cityId) { var cityId = Seed.cities[d][0]; var city_atkp = Seed.queue_atkp['city'+cityId]; for (var e in city_atkp){ destinationUnixTime = city_atkp[e]['destinationUnixTime']; MarchId = city_atkp[e]['marchId']; MarchStatus = city_atkp[e]['marchStatus']; MarchType = city_atkp[e]['marchType']; botMarchStatus = city_atkp[e]['botMarchStatus']; if (MarchType == 9 && botMarchStatus == 3 && MarchStatus == 10) { count++; setTimeout(t.DoAllDelete, (count*1250), MarchId,d,count); } } } } }, AddRaid : function (Id){ var t = Tabs.Raid; var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams); update = {}; params.pf = 0; params.ctrl = 'BotManager'; params.action = 'saveMarch'; params.settings = {}; params.queue = {0:{botMarches:{botMarchStatus:1,botState:1},cityMarches:{}}}; for (y in t.save){ if (t.save[y]['marchId'] == Id){ params.settings.cityId = t.save[y]['cityId']; params.queue[0].cityMarches.knightId = t.save[y]['knightId']; //parseInt(document.getElementById('AddKnights').value); params.queue[0].cityMarches.toXCoord = t.save[y]['toXCoord']; params.queue[0].cityMarches.toYCoord = t.save[y]['toYCoord']; params.queue[0].cityMarches.unit0Count = 0; for (var ui in unsafeWindow.cm.UNIT_TYPES){ var i = unsafeWindow.cm.UNIT_TYPES[ui]; params.queue[0]['cityMarches']['unit'+i+'Count'] = t.save[y]['unit'+i+'Count']; } } } new MyAjaxRequest(unsafeWindow.g_ajaxpath + "ajax/_dispatch.php" + unsafeWindow.g_ajaxsuffix, { method: "post", parameters: params, loading: true, onSuccess: function(rslt){ if (rslt.ok) { t.GetRaids(params.settings.cityId); unsafeWindow.cityinfo_army(); setTimeout(unsafeWindow.update_seed_ajax, 250); for (yy=0;yy<t.save.length;yy++){ if (t.save[yy]['marchId'] == Id){ t.save.splice (yy,1); } } var serverID = getServerId(); setTimeout (function (){GM_setValue ('SavedRaids_'+unsafeWindow.tvuid+'_'+serverID, JSON2.stringify(t.save));}, 0); t.paint(); } else { alert('Error: '+ rslt.msg); } }, },true); }, getKnights : function(cityId){ var t = Tabs.Raid; var knt = new Array(); var status =""; for (k in Seed.knights['city' + cityId]){ if ( Seed.leaders['city' + cityId]["resourcefulnessKnightId"] != Seed.knights['city' + cityId][k]["knightId"] && Seed.leaders['city' + cityId]["politicsKnightId"] != Seed.knights['city' + cityId][k]["knightId"] && Seed.leaders['city' + cityId]["combatKnightId"] != Seed.knights['city' + cityId][k]["knightId"] && Seed.leaders['city' + cityId]["intelligenceKnightId"] != Seed.knights['city' + cityId][k]["knightId"]){ if (Seed.knights['city' + cityId][k]["knightStatus"] == 1 ) status = "Free"; else status = "Marching"; knt.push ({ Name: Seed.knights['city' + cityId][k]["knightName"], Combat: parseInt(Seed.knights['city' + cityId][k]["combat"]), ID: Seed.knights['city' + cityId][k]["knightId"], Status: status, }); } } knt = knt.sort(function sort(a,b) {a = a['Combat'];b = b['Combat'];return a == b ? 0 : (a > b ? -1 : 1);}); document.getElementById('AddKnights').options.length=0; var o = document.createElement("option"); o.text = '--Choose a Knight--'; o.value = 0; document.getElementById("AddKnights").options.add(o); for (k in knt){ if (knt[k]["Name"] !=undefined){ var o = document.createElement("option"); o.text = (knt[k]["Name"] + ' (' + knt[k]["Combat"] +') (' + knt[k]["Status"] +')'); o.value = knt[k]["ID"]; document.getElementById("AddKnights").options.add(o); } } }, clickCitySelect : function (city){ var t = Tabs.Raid; t.cityId = city['id']; t.GetRaids(t.cityId); }, GetRaids : function(cityId){ var t = Tabs.Raid; var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams); params.pf = 0; params.ctrl = 'BotManager'; params.action = 'getMarches'; params.settings = {}; params.settings.cityId = cityId; new MyAjaxRequest(unsafeWindow.g_ajaxpath + "ajax/_dispatch.php" + unsafeWindow.g_ajaxsuffix, { method: "post", parameters: params, loading: true, onSuccess: function(rslt){ if (rslt.ok) { t.rslt = rslt; t.paint(); unsafeWindow.cityinfo_army(); setTimeout(unsafeWindow.update_seed_ajax, 250); } }, },true); }, resetRaids : function(cityId,cityName){ var t = Tabs.Raid; var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams); params.pf = 0; params.ctrl = 'BotManager'; params.action = 'resetRaidTimer'; params.settings = {}; params.settings.cityId = cityId; new MyAjaxRequest(unsafeWindow.g_ajaxpath + "ajax/_dispatch.php" + unsafeWindow.g_ajaxsuffix, { method: "post", parameters: params, loading: true, onSuccess: function(rslt){ if (rslt.ok) { unsafeWindow.cityinfo_army(); setTimeout(unsafeWindow.update_seed_ajax, 250); t.citiesdone += cityName + ' '; } }, },true); }, sendreport: function(){ var t = Tabs.Raid; if(!Options.RaidOptions.foodreport) return; var now = new Date().getTime()/1000.0; now = now.toFixed(0); if (now < (parseInt(Options.RaidOptions.LastReport)+(Options.RaidOptions.MsgInterval*60*60))) return; var total = 0; var message = 'Raid Stats: %0A'; message += '%0A Food Gain (for '+ Options.RaidOptions.MsgInterval +' hour of raiding) %0A'; for (q=1;q<=Seed.cities.length;q++){ var cityID = 'city' + Seed.cities[q-1][0]; var gain = parseInt(Seed.resources[cityID]['rec1'][0] / 3600) - parseIntNan(Options.RaidOptions.Foodstatus[q]); message+= Seed.cities[q-1][1] + ': Start: ' + addCommas(parseIntNan(Options.RaidOptions.Foodstatus[q])) + ' End :' + addCommas(parseInt(Seed.resources[cityID]['rec1'][0] / 3600)) + ' Gain: '; message += addCommas(gain) + '%0A'; total += gain; Options.RaidOptions.Foodstatus[q] = parseIntNan(Seed.resources[cityID]['rec1'][0] / 3600); } message += '%0A Total food gain : '+addCommas(total)+'%0A'; var params = unsafeWindow.Object.clone(unsafeWindow.g_ajaxparams); params.emailTo = Seed.player['name']; params.subject = "Raid Overview"; params.message = message; params.requestType = "COMPOSED_MAIL"; new MyAjaxRequest(unsafeWindow.g_ajaxpath + "ajax/getEmail.php" + unsafeWindow.g_ajaxsuffix, { method: "post", parameters: params, onSuccess: function (rslt) { if (rslt.ok) { DeleteLastMessage(); } else { } }, onFailure: function () { }, },true); Options.RaidOptions.LastReport = now; saveOptions(); }, hide : function (){ }, show : function (){ }, updatebotbutton : function (text, id) { var but=document.getElementById(id); but.innerHTML = '<span style="color: #ff6">'+text+'</span>'; }, };