NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Peter Market Tool // @namespace Peter Market Tool // @description Peter Market Tool for eRepublik // @author fpeter76 // @match http://www.erepublik.com/PMT // @include http://www.erepublik.com/PMT // @require https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js // @version 0.3 // @grant none // @updateURL https://openuserjs.org/install/Peter_Fazekas/Peter_Market_Tool.user.js // @downloadURL https://openuserjs.org/install/Peter_Fazekas/Peter_Market_Tool.user.js // ==/UserScript== (function(){ var one_time = 5; var randTime=0; var mymc; var mylc; var update_items_name = {1:{1:'',2:'',3:'',4:'',5:'',6:'',7:''},2:{1:'',2:'',3:'',4:'',5:'',6:'',7:''},3:{1:'',2:'',3:'',4:'',5:''},4:{1:'',2:'',3:'',4:'',5:'',6:'',7:''},7:{1:''},12:{1:''},17:{1:''}}; var autopurchase = 0; var autoupdate = 1; var wait_min = 5; var wait_max = 10; var update_items = {1:{1:0,2:0,3:0,4:0,5:0,6:0,7:0},2:{1:0,2:0,3:0,4:0,5:0,6:0,7:0},3:{1:0,2:0,3:0,4:0,5:0},4:{1:0,2:0,3:0,4:0,5:0,6:0,7:0},7:{1:0},12:{1:0},17:{1:0}}; var update_items_p = { 1: { 1:"0.0" , 2:"0.0" , 3:"0.0" , 4:"0.0" , 5:"0.0" , 6:"0.0" , 7:"0.0" } , 2: { 1:"0.0" , 2:"0.0" , 3:"0.0" , 4:"0.0" , 5:"0.0" , 6:"0.0" , 7:"0.0" } , 3: { 1:"0.0" , 2:"0.0" , 3:"0.0" , 4:"0.0" , 5:"0.0" } , 4: { 1:"0.0" , 2:"0.0" , 3:"0.0" , 4:"0.0" , 5:"0.0" , 6:"0.0" , 7:"0.0" } , 7: { 1:"0.0" } , 12:{ 1:"0.0" } , 17:{ 1:"0.0" } } ; function saveSetting () { var data =new function () { this.autopurchase = autopurchase; this.autoupdate = autoupdate; this.wait_min = wait_min; this.wait_max = wait_max; this.update_items = update_items; this.update_items_p = update_items_p; }(); localStorage.setItem("PMT_Setting",JSON.stringify(data)); } function loadSetting () { var PMT_Setting = localStorage.getItem("PMT_Setting"); if(PMT_Setting!=null) { PMT_Setting = JSON.parse(PMT_Setting); autopurchase = PMT_Setting.autopurchase; autoupdate = PMT_Setting.autoupdate; wait_min = PMT_Setting.wait_min; wait_max = PMT_Setting.wait_max; update_items = PMT_Setting.update_items; update_items_p = PMT_Setting.update_items_p; } } loadSetting (); var mc_clist_arr = [81,65,35,13,24,14,1,11,49,44,9,42,43,63,27,79,58,28,53, 67,74,77,75,52,41,59,29,68,30,38, 15,47,51,61,40,36,166,37,73,70,55, 82,78,64,23,69,76,32,83,33,39,12, 48,84,31,80,26,66,72,71,45,10,54, 56,50,34,165,57,164,167,168,169,170,171]; var mc_name_arr = { 81:'TAIWAN',65:'SERBIA',35:'POLAND',13:'HUNGARY',24:'USA',1:'ROMANIA', 11:'FRANCE',49:'INDONESIA',44:'GREECE',14:'CHINA',9:'BRAZIL',42:'BULGARIA', 43:'TURKEY',63:'CROATIA',27:'ARGENTINA',79:'MACEDONIA',58:'ISRAEL',28:'VENEZUELA', 53:'PORTUGAL',67:'PHILIPPINES',74:'URUGWAY',77:'PERU',75:'PARAGWAY',52:'REPUBLIC_OF_MOLDOVIA', 41:'RUSSIA',59:'THAILAND',29:'UNITED_KINGDOM',68:'SINGAPORE',30:'SWITZERLAND',38:'SWEDEN', 15:'SPAIN',47:'SOUTH_KOREA',51:'SOUTH_AFRICA',61:'SLOVENIA',40:'UKRAINE',36:'SLOVAKIA', 166:'ARAB_EMIRATES',37:'NORWAY',73:'NORTH_KOREA',70:'ESTONIA',55:'DENMARK',82:'CYPRUS', 78:'COLOMBIA',64:'CHILE',23:'CANADA',69:'BOSNIA',76:'BOLIVIA',32:'BELGIUM',83:'BELARUS', 33:'AUSTRIA',39:'FINLAND',12:'GERMANY',48:'INDIA',84:'NEW_ZELAND',31:'NETHERLANDS', 80:'MONTENEGRO',26:'MEXICO',66:'MALAYSIA',72:'LITHUANIA',71:'LATVIA',45:'JAPAN',10:'ITALY', 54:'IRELAND',56:'IRAN',50:'AUSTRALIA',34:'CZECH',165:'EGYPT',57:'PAKISTAN',164:'SAUDI_ARABIA', 167:'ALBANIA',168:'GEORGIA',169:'ARMENIA',170:'NIGERIA',171:'CUBA'}; var mc_url_arr={81:'Republic-of-China-Taiwan',65:'Serbia',35:'Poland',13:'Hungary',24:'USA',1:'Romania', 11:'France',49:'Indonesia',44:'Greece',14:'China',9:'Brazil',42:'Bulgaria', 43:'Turkey',63:'Croatia',27:'Argentina',79:'Republic-of-Macedonia-FYROM',58:'Israel',28:'Venezuela', 53:'Portugal',67:'Philippines',74:'Uruguay',77:'Peru',75:'Paraguay',52:'Republic-of-Moldova', 41:'Russia',59:'Thailand',29:'United-Kingdom',68:'Singapore',30:'Switzerland',38:'Sweden', 15:'Spain',47:'South-Korea',51:'South-Africa',61:'Slovenia',40:'Ukraine',36:'Slovakia', 166:'United-Arab-Emirates',37:'Norway',73:'North-Korea',70:'Estonia',55:'Denmark',82:'Cyprus', 78:'Colombia',64:'Chile',23:'Canada',69:'Bosnia-Herzegovina',76:'Bolivia',32:'Belgium',83:'Belarus', 33:'Austria',39:'Finland',12:'Germany',48:'India',84:'New-Zealand',31:'Netherlands', 80:'Montenegro',26:'Mexico',66:'Malaysia',72:'Lithuania',71:'Latvia',45:'Japan',10:'Italy', 54:'Ireland',56:'Iran',50:'Australia',34:'Czech-Republic',165:'Egypt',57:'Pakistan',164:'Saudi-Arabia', 167:'Albania',168:'Georgia',169:'Armenia',170:'Nigeria',171:'Cuba'}; var currency = "cc"; var items_html="<br><table border='1' cellpadding='2' style='background-color: rgb(209, 204, 198); opacity: 0.8;'>"; { for(var i in update_items) { for(var j in update_items[i]) { if(j==1&&i!=12&&i!=17) items_html = items_html + "<tr>"; items_html = items_html +"<td><INPUT TYPE='checkbox' id='ilist_"+i+"_"+j+"' value='"+update_items_name[i][j] + "' "; if(update_items[i][j]==1) items_html = items_html +"checked"; items_html = items_html + " />"; items_html = items_html + "<a onclick=\"document.getElementById('ilist_"+i+"_"+j+"').click()\">"; if(i<=4) update_items_name[i][j]= "Q" + j +"<img src='http://s1.www.erepublik.net/images/icons/industry/"+i+"/q"+j+"_30x30.png' height=20>"; else update_items_name[i][j]="<font color='#FFF'>     </font><img src='http://s1.www.erepublik.net/images/icons/industry/"+i+"/default_30x30.png' height=20>"; items_html = items_html + update_items_name[i][j] + "</a><INPUT TYPE='text' id='autolist_"+i+"_"+j+"' value='"+update_items_p[i][j]+"' size='5'/></td>"; if(j==7) items_html = items_html + "</tr>"; } } } items_html = items_html + "</table>"; $( "html" ).html ("<title>Peter Market Tool Auto Shopping</title>"+ "<table><tr valign=top><td><h3><b>PMT Auto Shopping</b></h3>"+ "<a target='_blank' href='http://www.erepublik.com/en/economy/donate-money/8325225' >If you like, please donate!</a>"+ //8325225 "<hr></hr><table border='1' cellpadding='2' style='background-color: rgb(209, 204, 198); opacity: 0.8;'>"+ "<tr><td>Nationality: </td><td><canvas class='loading' width='16' height='16'></canvas><b id='mymc'>(n.a.)</b></td></tr>"+ "<tr><td>Location: </td><td><canvas class='loading' width='16' height='16'></canvas><b id='mylc'>(n.a.)</b></td></tr>"+ "<tr><td>Warehouse: </td><td><canvas class='loading' width='16' height='16'></canvas><b id='inventory'>(n.a.)</b></td></tr>"+ "<tr><td>CSRFtoken: </td><td><canvas class='loading' width='16' height='16'></canvas><b id='token'>(n.a.)</b></td></tr>"+ "</table>"+items_html+"<HR />"+ "<table border='1' cellpadding='2' style='background-color: rgb(209, 204, 198); opacity: 0.8;'><tr valign=top><td>" + "<INPUT TYPE='checkbox' id='auto' "+((autoupdate)?"checked":"")+"\><a onclick=\"document.getElementById('auto').click()\">Auto update</a> "+ "<INPUT TYPE='button' onclick='if(confirm(\"Are you sure?\")){localStorage.removeItem(\"PMT_Setting\");location.reload();}' value='Reset'\><br>"+ "</td></tr>" + "<tr valign=top><td>" + "<INPUT TYPE='checkbox' id='autopurchase' "+((autopurchase)?"checked":"")+ "\><a onclick=\"document.getElementById('autopurchase').click()\">Auto purchase</a><br>"+ "</td></tr>" + "<tr valign=top><td>" + "Update interval: <INPUT TYPE='text' id='wait_min' value='"+wait_min+"' size=1\>~<INPUT TYPE='text' id='wait_max' value='"+wait_max+"' size=1\>"+ // "<INPUT TYPE='button' id='update_button' onClick='this.value=\"Update\"; this.disabled=true; ' value='Start' />" + "<INPUT TYPE='button' id='update_button' onClick='this.value=\"Update\"; this.disabled=true; ' value='Update' disabled='true'/>" + "</td></tr>" + "<tr valign=top><td>" + "<div id='header_data'></div>" + "</td></tr>" + "</table>" + "<hr></hr>" + "<div id='data'></div>" + "</td><td><table id='buyLog' border='1' cellpadding='2' style='background-color: rgb(209, 204, 198); opacity: 0.8;'>" + "<tr><td colspan='5' align='center' style='padding:10px;'>Log</td></tr>" + "<tr><td style='padding:5px;'>Date time</td><td style='padding:5px;'>Country</td><td style='padding:5px;'>Sum. price</td><td style='padding:5px;'>Item</td><td style='padding:5px;'>Amount * Price</td></tr>" + "</table></td></tr>"+ "</td></tr>" + "</table>") ; document.body.style.background="#D1CCC6 url(http://www.erepublik.com/images/modules/ambients/external/home_bg.jpg) no-repeat 50% 0%"; update(); var mc_id_arr ; var mc=0; var mcP=0; var times=0; var time=0; var max_time=0; var mc_arr; var inventory = 0; var token = ""; function getAllData() { mcP = 0; times = 0; time = 0; $( "#header_data" ).html ( "Update! Please wait!<br><progress id='times' value=\"0\" max=\"1\">" ) ; timedown ( ); var url = "http://www.erepublik.com/en/economy/inventory"; $.ajax( { url: url, context: document.body, success: function(html) { tmp = html.match(/country: '(\d{1,3})'/); if(tmp) mymc = tmp[1] *1; tmp = html.match(/countryLocationId: '(\d{1,3})'/); if(tmp) mylc = tmp[1] *1; tmp = html.match(/name=\"_token\" value=\"([^"]{32,32})\"/); if(tmp) token = tmp[1]; tmp = html.match(/\(([0-9,]+)\/([0-9,]+)\)/); if(tmp) { tmp[1] = tmp[1].replace(/,/g,"")*1; tmp[2] = tmp[2].replace(/,/g,"")*1; inventory = tmp[2] - tmp[1]; } $( "#inventory" ).html(inventory +" "+ tmp[0]); $( "#token" ).html(token); $( "#mymc" ).html("<img src='http://s2.www.erepublik.net/images/flags_png/S/"+mc_url_arr[mymc]+".png'/> </td><td>" + mc_url_arr[mymc]); $( "#mylc" ).html("<img src='http://s2.www.erepublik.net/images/flags_png/S/"+mc_url_arr[mylc]+".png'/> </td><td>" +mc_url_arr[mylc]); for(var i in update_items_name) { for(var j in update_items_name[i]) { if($("#ilist_"+i+"_"+j).attr("checked")=="checked") { update_items[i][j]=1; } else { update_items[i][j]=0; } } } for(var i in update_items) for(var j in update_items[i]) mcP = mcP + update_items[i][j]; mc_id_arr = new Array() mc_id_arr.push(mymc); //mc_id_arr.push(mylc); if(mymc!=mylc) mc_id_arr.push(mylc); mc = mc_id_arr.length; max_time = mc * one_time; mc_arr = new Array ( ); for (var i = 0 ; i < mc ; i++ ) mc_arr [ i ] = new myCountries ( mc_id_arr [ i ] ) ; $("#times").attr("max",((mc * mcP) + 1)); $("#times").attr("value",1); for ( var i = 0 ; i < mc ; i++ ) { mc_arr[ i ].getall( ); } times++ ; }, error: function(XMLHttpRequest, textStatus, errorThrown) { $( "#inventory" ).html("Error"); $( "#token" ).html("Error"); $( "#mymc" ).html("Error"); $( "#mylc" ).html("Error"); times++ ; } }); } function myCountries ( id ) { this.id = id ; this.location = 0; this.name = mc_name_arr [ id ] ; this.url = mc_url_arr [ id ] ; this.items = { 1:{ 1:0 , 2:0 , 3:0 , 4:0 , 5:0 , 6:0 , 7:0 } , 2:{ 1:0 , 2:0 , 3:0 , 4:0 , 5:0 , 6:0 , 7:0 } , 3:{ 1:0 , 2:0 , 3:0 , 4:0 , 5:0 } , 4:{ 1:0 , 2:0 , 3:0 , 4:0 , 5:0 , 6:0 , 7:0 } , 7:{ 1:0 } , 12:{ 1:0 } , 17:{ 1:0 } } ; this.items_a = { 1:{ 1:0 , 2:0 , 3:0 , 4:0 , 5:0 , 6:0 , 7:0 } , 2:{ 1:0 , 2:0 , 3:0 , 4:0 , 5:0 , 6:0 , 7:0 } , 3:{ 1:0 , 2:0 , 3:0 , 4:0 , 5:0 } , 4:{ 1:0 , 2:0 , 3:0 , 4:0 , 5:0 , 6:0 , 7:0 } , 7:{ 1:0 } , 12:{ 1:0 } , 17:{ 1:0 } } ; this.items_id = { 1:{ 1:0 , 2:0 , 3:0 , 4:0 , 5:0 , 6:0 , 7:0 } , 2:{ 1:0 , 2:0 , 3:0 , 4:0 , 5:0 , 6:0 , 7:0 } , 3:{ 1:0 , 2:0 , 3:0 , 4:0 , 5:0 } , 4:{ 1:0 , 2:0 , 3:0 , 4:0 , 5:0 , 6:0 , 7:0 } , 7:{ 1:0 } , 12:{ 1:0 } , 17:{ 1:0 } } ; this.getall = function ( ) { var x=this; x.getprice ( 7 , 1 ) ; x.getprice ( 12 , 1 ) ; x.getprice ( 17 , 1 ) ; for ( var i = 1 ; i <= 7 ; i++ ) x.getprice ( 1 , i ) ; for ( var i = 1 ; i <= 7 ; i++ ) x.getprice ( 2 , i ) ; for ( var i = 1 ; i <= 5 ; i++ ) x.getprice ( 3 , i ); for ( var i = 1 ; i <= 7 ; i++ ) x.getprice ( 4 , i ) ; } this.getprice = function(item,level) { if(update_items[item][level]==0) { return; } var getURL = "http://www.erepublik.com/en/economy/market/" + this.id + "/" + item + "/" + level + "/citizen/0/price_asc/1" ; var x = this ; $.ajax( { url : getURL , context : document.body , success : function( html ) { tmp = html.match(/productId_(\d+)\"[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^>]+>[^0-9]+([0-9,]+)[^>]+>[^>]+>[^>]+>[^0-9.]?(\d+)[^>]+>[^>]+>[^0-9.]?([0-9.]+)/); //tmp = html.match(/id=\"(\d+)\"[^=]+=[^=]+=[^=]+=\"([0-9.]+)\"[^=]+=\"(\d+)\"/); x.items_id [ item ] [ level ] = tmp[1] ; x.items [ item ] [ level ] = (tmp[3]+tmp[4]) * 1 ; x.items_a [ item ] [ level ] = tmp[2].replace(/,/g,"")*1; times++ ; }, error: function(XMLHttpRequest, textStatus, errorThrown) { times++ ; } }); } } //Alsó táblázat function showtable() { var str=""; str= str + "<table border='1' cellSpacing='0' style='white-space: nowrap; background-color: rgb(209, 204, 198); opacity: 0.8;'>"; str=str+"<tr><td Width='100px' align='center'>Country</td>"; for(var i=0;i<mc;i++) str=str+"<td Width='250px' align='center' colspan='2'>"+ mc_arr[i].name+"<img src='http://s2.www.erepublik.net/images/flags_png/S/"+mc_url_arr[mc_arr[i].id]+".png'/></td>"; str=str+"</tr>"; for(var i in update_items) for(var j in update_items[i]) if(update_items[i][j]==1) { str=str+"<tr><td align='center'>"+update_items_name[i][j]+"</td>"; for(var k=0;k<mc;k++) { str = str + "<td align='center'>"; str = str + "<a href='"+"http://www.erepublik.com/en/economy/market/" + mc_arr[k].id + "/" + i+ "/" +j+ "/citizen/0/price_asc/1"+"' target='_blank'>"+ mc_arr[k].items[i][j]+"</a>"; // + " ("+mc_arr[k].items_a[i][j]+")"; amount = ((mc_arr[k].items_a[i][j] < inventory)?mc_arr[k].items_a[i][j]:inventory); str = str + "<td align='center'>"; if(amount>0) { str = str + "<form target='_blank' method='post' action='http://www.erepublik.com/en/economy/market/" + mc_arr[k].id + "/" + i+ "/" +j+ "/citizen/0/price_asc/1'>"; str = str + "<input type='hidden' name='amount' value="+amount+" />"; str = str + "<input type='hidden' name='offerId' value="+mc_arr[k].items_id[i][j]+" />"; str = str + "<input type='hidden' name='_token' value="+token+" />"; str = str + "<input type='submit' value='Buy "+amount+" pcs.'/>"; str = str + "</form>"; } str = str + "</td>"; update_items_p[i][j] = document.getElementById("autolist_"+i+"_"+j).value; autopurchase = ($("#autopurchase").attr("checked")=="checked")?1:0; if((amount>0)&&(autopurchase==1)&&( mc_arr[k].items[i][j] > 0 )&&((update_items_p[i][j]*1) >= mc_arr[k].items[i][j])) { var d = new Date(); var datetimeStr = (d.getMonth()+1) + "/" + ((d.getDate()<10)?"0":"")+ d.getDate() + " " + ((d.getHours()<10)?"0":"")+ d.getHours() + ":" + ((d.getMinutes()<10)?"0":"")+ d.getMinutes() + ":" + ((d.getSeconds()<10)?"0":"")+ d.getSeconds(); buyurl = "http://www.erepublik.com/en/economy/market/" + mc_arr[k].id + "/" + i+ "/" +j+ "/citizen/0/price_asc/1"; buydata = "amount="+amount+"&offerId="+mc_arr[k].items_id[i][j]+"&_token="+token; buyLogData = datetimeStr + '</td><td>' + mc_arr[k].name + '</td><td>' + (mc_arr[k].items[i][j]*amount).toFixed(2)+' '+ currency + //currencies[mymc]+ '</td><td>' + update_items_name[i][j] + '</td><td>' + amount + ' * ' + mc_arr[k].items[i][j]; $.ajax( { url: buyurl, type: 'POST', data:buydata, success: function(html) { if(html.search("success_message")>0) document.getElementById('buyLog').innerHTML += "<tr><td>" + buyLogData + "</td></tr>"; } } ); } str = str + "</td>"; } if (mc>1) { if ((mc_arr[0].items[i][j] - mc_arr[1].items[i][j]) < 0) { str = str + "<td align='center' style='color:red'>"; } if ((mc_arr[0].items[i][j] - mc_arr[1].items[i][j]) > 0) { str = str + "<td align='center' style='color:green'>"; } if ((mc_arr[0].items[i][j] - mc_arr[1].items[i][j]) == 0) { str = str + "<td align='center' style='color:blue'>"; } str = str + (mc_arr[0].items[i][j] - mc_arr[1].items[i][j]).toFixed(2); str = str + "</td>"; } str=str+"</tr>"; } str=str+"</table>"; $("#header_data").html(""); $("#data").html(str); } function getColorTD(value) { str= "" if(value<=0) str = str + "<td>"; else if (value>=1) str = str +"<td bgcolor='blue'>"; else if (value>=0.5) str = str +"<td bgcolor='red'>"; else str = str +"<td bgcolor='yellow'>"; str = str + (value*100).toFixed(2); str = str + "%</td>"; return str; } function timedown() { saveSetting (); if((times<(mc*mcP)+1)&&(time<max_time+one_time)) { $("#times").attr("value",times); time++; setTimeout(timedown,1000); } else { showtable(); var checked = $( "#auto").attr("checked"); if(checked!="checked") { autoupdate = 0; $("#update_button").val("Start"); $("#update_button").removeAttr("disabled"); setTimeout(update,10); } else { autoupdate = 1; wait_min = $("#wait_min").val()*1; wait_max = $("#wait_max").val()*1; randTime = Math.floor((Math.random() * (wait_max - wait_min)) + wait_min); $("#header_data").html("The update is complete! Wait " +randTime+ " seconds!<br><progress id='times' value=\"0\" max=\""+randTime+"\">"); setTimeout(timecount,10); } } } function timecount() { $("#times").attr("value",randTime); if(randTime>0) { randTime--; setTimeout(timecount,(1000)); } else { setTimeout(update,10); } } function update() { if($("#update_button").val()=="Update") getAllData(); else setTimeout(update,100); } })();