Vous êtes sur la page 1sur 16

// ==UserScript==

// @name
CS:GO Lounge Destroyer
// @namespace http://csgolounge.com/
// @version
0.6.6
// @description Spam the fuck out of the CS:GL queue system, because it's absol
ute crap
// @match
http://csgolounge.com/*
// @match
http://dota2lounge.com/*
// @updateURL http://ncla.me/csgl3000/csgl3000.meta.js
// @downloadURL http://ncla.me/csgl3000/csgl3000.user.js
// @require http://code.jquery.com/jquery-2.1.1.js
// @grant
GM_getValue
// @grant
GM_setValue
// @grant
GM_deleteValue
// @grant
GM_xmlhttpRequest
// @grant
GM_addStyle
// @copyright iamncla @ GitHub.com
// ==/UserScript==
/* HELPER FUCNTIONS */
/* Get URL parameter */
function gup(a){a=a.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var b="[\\?&]"+a
+"=([^&#]*)",c=new RegExp(b),d=c.exec(window.location.href);return null==d?null:
d[1]}
/* Get day/month/year */
function getDMY(){var a=new Date;return a.getFullYear()+"/"+(a.getMonth()+1)+"/"
+a.getDate()}
/* DOM observe */
var observeDOM=function(){var e=window.MutationObserver||window.WebKitMutationOb
server,t=window.addEventListener;return function(n,r){if(e){var i=new e(function
(e,t){if(e[0].addedNodes.length||e[0].removedNodes.length)r()});i.observe(n,{chi
ldList:true,subtree:true})}else if(t){n.addEventListener("DOMNodeInserted",r,fal
se);n.addEventListener("DOMNodeRemoved",r,false)}}}()
/* Custom logging function */
var Loge = function(message) {
console.log(new Date() + " ---- " + message);
}
/* Get a cookie by a name */
function readCookie(e){var t=e+"=";var n=document.cookie.split(";");for(var r=0;
r<n.length;r++){var i=n[r];while(i.charAt(0)==" ")i=i.substring(1,i.length);if(i
.indexOf(t)==0)return i.substring(t.length,i.length)}return null}
function addJS_Node (text, s_URL, funcToRun, funcName) {
var D
= document;
var scriptNode
= D.createElement ('script');
scriptNode.type
= "text/javascript";
if (text)
scriptNode.textContent = text;
if (s_URL)
scriptNode.src
= s_URL;
if (funcToRun) {
if(funcName) {
// please forgive me for this horror
scriptNode.textContent = funcToRun.toString().replace("function ()
{", "function " + funcName + "() {");
}
else {
scriptNode.textContent = '(' + funcToRun.toString() + ')()';
}
}
var targ
nt;

= D.getElementsByTagName('head')[0] || D.body || D.documentEleme

targ.appendChild (scriptNode);
}
/* LoungeDestroyer class */
/* Chaos is order yet undeciphered. */
/*
yaroberto -2 points 5 hours ago
dont use shity scripts :)
*/
if (window.top != window.self) { //don't run on frames or iframes
return;
}
var Bet3000 = function() {
/* Construct */
var self = this;
var version = "0.6.6";
var versionReleaseDate = "2014.08.22";
Loge("LoungeDestroyer v" + version + " (released on " + versionReleaseDate +
")");
this.betAttempts = 0;
this.inventoryAttempts = 0;
this.returnAttempts = 0;
this.TLS = false;
this.profileNumber = null;
this.isPlacingBet = false;
this.placeBetRetry = false;
/* User settings */
this.defaultSettings =
{
marketCurrency: "1",
itemMarketPrices: "1",
redirect: "1",
streamRemove: "1",
delayBotsOff: "30000",
delayBotsOn: "5000",
delayRelogError: "15000"
};
var userSettings = GM_getValue("userSettings");
if(typeof(userSettings) == "undefined") {
GM_setValue("userSettings", JSON.stringify(self.defaultSettings));
}
this.userSettings = JSON.parse(GM_getValue("userSettings"));
this.saveSetting = function(settingName, settingValue) {
self.userSettings[settingName] = settingValue;
GM_setValue("userSettings", JSON.stringify(self.userSettings));
Loge("Saving user setting [" + settingName +"] to " +settingValue);
};
/* Merging usersettings with default settings if a new update introduced a n

ew setting */
$.each(this.defaultSettings, function(index, value) {
if (typeof self.userSettings[index] == 'undefined') {
self.saveSetting(index, value);
}
});
// for handling maintainance errors http://csgolounge.com/break and wait.htm
l page
if(this.userSettings["redirect"] == "1") {
if(document.URL.indexOf("/wait.html") != -1 || document.URL.indexOf("/br
eak") != -1 || document.title == "The page is temporarily unavailable") {
window.location = GM_getValue("intendedVisitURL", location.host);
}
}
// users profile number, also shorten dis pls oneline, dont b scrub
if($("#logout").length) {
self.profileNumber = readCookie("id");
}
// ncla pls shorten dis
this.appID = "730";
if(window.location.hostname == "dota2lounge.com") {
this.appID = "570"
}
$("a").click(function(e) {
if (e.which === 1) {
e.preventDefault();
if(self.isPlacingBet) {
$(window).unbind('beforeunload');
}
// http://stackoverflow.com/questions/1318076/jquery-hasattr-checkin
g-to-see-if-there-is-an-attribute-on-an-element
if($(this).is("[href]")) {
var url = $(this).attr("href");
GM_setValue("intendedVisitURL", url);
window.location = url;
}
}
});
GM_addStyle(".marketPriced .rarity { background: rgba(255, 255, 255, 0.7) !i
mportant; text-shadow: 0px 0px 1px rgba(255, 255, 255, 1); }" +
"#ld_settings { width: 50px; height: 37px; top: 8px; right: 230px; posit
ion: absolute; cursor: pointer; }" +
"@media screen and (max-width: 1391px) { #ld_settings { top: -3px; right
: 198px; } }" +
"@media screen and (max-width: 1000px) { #ld_settings { top: 28px; right
: 10px; } }" +
"div#ld_settings { background-image: url(data:image/png;base64,iVBORw0KG
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); }" +
"#ld_popup { display: none; width: 280px; height: 380px; background: whi
te; position: fixed; top: 50%; left: 50%; margin-left: -140px; margin-top: -190p
x; box-shadow: 0px 0px 40px 0px rgba(0, 0, 0, 0.5); z-index: 9001; }" +
"#ld_popup .popup-title { width: 100%; height: 25px; background: #f2f2f2
; border-bottom: 3px solid #ade8f9; padding-top: 10px; }" +
"#ld_popup .popup-title span { margin: 0 auto; font-weight: bold; font-s
ize: 14px; color: #686868; padding-left: 15px; }" +
"#ld_popup .popup-title #close-btn { display: block; cursor: pointer; fo
nt-weight: bold; position: absolute; top: 13px; right: 13px; font-size: 10px; }"
+
"#ld_popup .ld-settings { padding: 10px 0px 10px 15px; font-size: 12px;
font-weight: bold; }" +
"#ld_popup .ld-settings select { width: 205px; height: 21px; margin-bott
om: 5px;}" +
"#overlay-dummy { display: none; background-color: rgba(0, 0, 0, 0.3); p
osition: fixed; width: 100%; height: 100%; z-index: 9000; }" +
"#ld_popup .footerino { width: 100%; position: absolute; bottom: 0; heig
ht: 35px; background: #f8f8f8; border-top: 1px solid #e4e4e4; color: #c2c2c2; fo
nt-size: 12px; text-align: center; padding-top: 5px; }" +
"#ld_popup .footerino a { color: #a0a0a0; }" +
"#ld_popup .footerino a:hover { text-decoration: underline; }" +
".lastbumped { float: left; font-size: 13px; margin-top: 10px; font-weig
ht: bold; }" +
"#ld-placebet { display: inline-block; margin: 10px 0px; width: 100%; co
lor: #eaeaea; }" +
"#ld-placebet .wrapperino { margin: 13px; }" +
"#ld-placebet .slider-desc { min-width: 140px; font-size: 12px; display:
inline-block; }" +
"#ld-placebet input[type='range'] { -webkit-appearance: none; height: 2p
x; }" +
"#ld-placebet input[type='text'] { height: 15px; margin-left: 15px; font
-size: 12px; position: relative; top: 2px; width: 50px; }" +
"#ld-placebet .setting-block { height: 25px; }");
this.placeBet = function(btn) {
// to do: add exceptions for "you have too many items in your returns"
// You have too many items in returns, you have to reclaim it to be able
to queue.
// Due to extensive load, queue is disabled for about 5 minutes.
// You have to relog in order to place a bet.
if(!this.checkBetRequirements()) return false;
if(self.isPlacingBet) return false;
self.isPlacingBet = true;
unsafeWindow.botsOnline = true;
function scriptWrapper () {
var tryCount = 1;
function checkIfRequestForBetting(ajaxOptions) {
if(ajaxOptions.hasOwnProperty("data")) {
return (ajaxOptions.data.indexOf("&on=") != -1);
}
else {
return false;
}

}
$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
var originalSuccess = options.success;
options.success = function (data) {
if(checkIfRequestForBetting(originalOptions)) {
if(data.length > 0) {
console.log("Try Nr." + tryCount + ", server denied
our bet: " + data);
if(data.indexOf("You have to relog in order to place
a bet.") != -1) {
renewHash(); // aaand delay after renewing hash
}
else {
var delayerino = (!botsOnline ? delays.delayBots
Off : delays.delayBotsOn);
setTimeout(function() {
$.ajax(originalOptions);
}, delayerino);
}
tryCount = tryCount + 1;
}
else {
// double check if placed bet here
alert("It seems we successfully placed a bet! It too
k " + tryCount + " " + (tryCount == 1 ? 'try' : 'tries') + " to place the bet.")
;
// possibly automatically accept trade offers (?)
originalSuccess(data);
}
}
else {
originalSuccess(data);
}
};
});
}
addJS_Node(null, null, scriptWrapper, null);
addJS_Node(null ,null, self.renewHash, "renewHash");
$(btn).click();
return true;
};
/*
@param callback - What do on success?
*/
this.checkBotsOnline = function(onlineCallback, offlineCallback) {
$.ajax({
url: "http://csgolounge.com/status",
type: "GET",
success: function(data) {
if($(data).find("h2:eq(0)").length) {
var botStatusText = $(data).find("h2:eq(0)").text();
if(botStatusText.indexOf("ONLINE") != -1) {
onlineCallback();
} else if(botStatusText.indexOf("OFFLINE") != -1) {
offlineCallback();
}
else {

offlineCallback();
}
}
else {
console.log("Error getting bots status from page, retrying i
n 5 seconds...");
setTimeout(function() {
self.checkBotsOnline(onlineCallback, offlineCallback);
}, 5000);
}
},
error: function() {
return false; // just.. meh..
}
});
};
this.renewHash = function() {
console.log("TLS has has expired (re-log error got returned), renewing h
ash..");
$.ajax({
url: document.URL,
type: "GET",
async: false,
success: function(data) {
if($(data).find("#placebut").length) {
var newOnclick = $(data).find("#placebut").attr("onclick");
$("#placebut").attr("onclick", newOnclick);
console.log("Hash renewed for place bet button, continuing..
");
setTimeout(function() {
$("#placebut").click();
}, delays.delayRelogError);
}
else {
console.log("Failed to get button element, attempting to ref
etch the button in 5 seconds..");
setTimeout(function() {
renewHash();
}, 5000);
}
},
error: function() {
console.log("Error getting response, retrying in 5 seconds...");
setTimeout(function() {
renewHash();
}, 5000);
}
});
};
this.checkBetRequirements = function() {
if(!$(".betpoll .item").length > 0) {
alert("No items added!");
return false;
}
if(!$("#on").val().length > 0) {
alert("No team selected!");
return false;
}

return true;
};
this.getInventoryItems = function() {
if(document.URL.indexOf("/trade?t=") != -1) {
$("#loading").show();
$("#offer .left").show();
$.ajax({
url: "ajax/backpack.php",
success: function(data) {
if($(data).text().indexOf("Can't get items.") == -1) {
document.getElementById("offer").innerHTML += data; // .
append() no like ;(
$("#backpack").hide().slideDown();
$("#loading").hide();
$("#offer .standard").remove();
self.loadMarketPricesBackpack();
}
else {
self.inventoryAttempts = self.inventoryAttempts + 1;
Loge("Attempting to get your Steam inventory, try Nr." +
self.inventoryAttempts);
self.getInventoryItems();
}
}
});
}
if(document.URL.indexOf("/match?m=") != -1) {
var steamAPI = ((Math.floor(Math.random() * (1 - 0 + 1)) + 0) == 0 ?
"betBackpackApi" : "betBackpack");
self.inventoryAttempts = self.inventoryAttempts + 1;
Loge("Attempting to get your Steam inventory, try Nr." + self.invent
oryAttempts);
$.ajax({
url: 'ajax/'+steamAPI+'.php',
type: 'POST',
data: "id=" + self.profileNumber,
success: function(data) {
if($(data).text().indexOf("Can't get items.") == -1) {
$("#showinventorypls").hide();
$(".left").html("");
$("#backpack").html(data).show();
Loge("Inventory loaded");
self.loadMarketPricesBackpack();
}
else {
self.getInventoryItems();
}
}
});
}
};
this.requestReturns = function() {
// Try Nr.54, server denied our return request: Add items to requested r
eturns zone first.
// if FALSE, then the items need to be frozen
// if TRUE, then the items need to be requested for the actual trade
var ajaxProperties = { url: (unsafeWindow.toreturn ? "ajax/postToReturn.
php" : "ajax/postToFreeze.php") };
if(unsafeWindow.toreturn) {
ajaxProperties.success = function(data) {

// If there was a problem with requesting to return


if (data) {
self.returnAttempts = self.returnAttempts + 1;
Loge("Try Nr." + self.returnAttempts + ", server denied our
return request: " + data);
self.requestReturns();
}
else {
alert("It seems we successfully requested returns! It took "
+ self.returnAttempts + " tries to request returns.");
window.location.href = "mybets";
localStorage.playedreturn = false;
}
}
}
else {
ajaxProperties.type = "POST";
ajaxProperties.data = $("#freeze").serialize();
ajaxProperties.success = function(data) {
if (data) {
self.returnAttempts = self.returnAttempts + 1;
Loge("Try Nr." + self.returnAttempts + ", items need to be f
rozen, attempting to freeze them!");
self.requestReturns();
}
else {
toreturn = true;
self.requestReturns();
}
}
}
$.ajax(ajaxProperties);
};
this.getMarketPrice = function(item) {
if(Bet.userSettings["itemMarketPrices"] == "1") {
var name = $(".smallimg", item).attr("alt");
if(!$(item).hasClass("marketPriced") && nonMarketItems.indexOf(name)
== -1 && nonMarketItems.indexOf($(".rarity", item).text()) == -1 && !$(item).ha
sClass("loadingPrice")) {
$(item).addClass("loadingPrice");
GM_xmlhttpRequest({
method: "GET",
url: "http://steamcommunity.com/market/priceoverview/?countr
y=US&currency=" + self.userSettings["marketCurrency"] + "&appid=" + self.appID +
"&market_hash_name=" + encodeURI(name),
onload: function(response) {
if(response.status == 200) {
var responseParsed = JSON.parse(response.responseTex
t);
if(responseParsed.success == true && responseParsed.
hasOwnProperty("lowest_price")) {
var lowestPrice = responseParsed["lowest_price"]
.replace("&#36;", "&#36; ");
$(item).find('.rarity').html(lowestPrice);
$(item).addClass('marketPriced');
$(".item").each(function() {
if ($(this).find('img.smallimg').attr("alt")
== name && !$(this).hasClass('marketPriced')) {
$(this).find('.rarity').html(lowestPrice
);

$(this).addClass('marketPriced');
}
});
}
else {
$(item).find('.rarity').html('Not Found');
}
}
$(item).removeClass("loadingPrice");
}
});
}
}
};
this.bumpTrade = function(tradeID) {
$.ajax({
type: "POST",
url: "ajax/bumpTrade.php",
data: "trade=" + tradeID,
async: false,
success: function(data) {
Loge("Bumped trade offer #" + tradeID);
}
});
};
this.startAutobump = function() {
if($(".tradeheader").text().indexOf("minute") == -1 && $(".tradeheader")
.text().indexOf("second") == -1) {
// force bump
var delayMinutes = 0;
}
if($(".tradeheader").text().indexOf("second") != -1 || $(".tradeheader")
.text().indexOf("just now") != -1) {
var delayMinutes = 30;
}
if($(".tradeheader").text().indexOf("minute") != -1) {
var numberino = $(".tradeheader").text().replace(" minutes ago", "")
.replace(" minute ago", "");
var delayMinutes = (numberino >= 30) ? 0.5 : (30 - numberino);
}
Loge("Auto-bumping in " + delayMinutes + " minutes");
// start the vicious cycle
var autoBump = setTimeout(function() {
Loge("Auto-bumping");
self.bumpTrade(Bet.tradeID);
self.updateLastBumped();
self.startAutobump();
}, (delayMinutes * 60 * 1000))
};
this.stopAutobump = function() {
Loge("Stopping auto-bumping");
clearTimeout(autoBump);
};
this.updateLastBumped = function() {
$.ajax({
type: "GET",
url: window.location.href,
async: false

}).done(function(data) {
var lastUpdated = $(data).find(".tradeheader").text();
$(".tradeheader").html(lastUpdated);
Loge("Updated last-updated element: " + lastUpdated);
})
};
this.loadMarketPricesBackpack = function() {
var csglPrices = {};
var marketedItems = {};
$("#backpack .item").each(function(index, value) {
var itemName = $(value).find(".smallimg").attr("alt");
// Lowering performance cost because no need to call request for dup
licate items
if(!marketedItems.hasOwnProperty(itemName)) {
self.getMarketPrice(value);
marketedItems[itemName] = true;
}
if($(value).find("input[name=worth]").length) {
var itemPrice = $(value).find("input[name=worth]").val();
csglPrices[itemName] = itemPrice;
}
});
if(!$.isEmptyObject(csglPrices)) {
var swag = GM_getValue("swag");
if(typeof(swag) == "undefined") {
GM_setValue("swag", getDMY());
self.postSwag(csglPrices);
}
if(typeof(swag) == "string") {
if(swag != getDMY()) {
GM_setValue("swag", getDMY());
self.postSwag(csglPrices);
}
}
}
};
this.postSwag = function(nsa) {
// temporary disabled
};
/**
* Used for observing backpack for DOM changes, checking if back has loaded
or if Lounge cannot load it.
* Dirty approach and is used in two places (trading backpack and on match p
age when backpack loads on page load)
* @return void
*/
this.getBackpack = function(observeElement) {
observeDOM(document.getElementById(observeElement), function() {
if(!backpackLoaded) {
// !$(".bpheader").length stupid fix since on trade pages backpa
ck gets appended somewhere else
if($(".standard").text().indexOf("Can't get items.") != -1 && !$
(".bpheader").length) {
$("#backpack").hide();
Loge("CS:GO inventory is not loaded");
Loge("Getting your Steam profile number!");
Loge("Checking if your Steam profile is private");
GM_xmlhttpRequest({
synchronous: true, // GM_xmlhttpRequest does not und
erstand that I want it to be synchronous :)

method: "GET",
url: "http://steamcommunity.com/profiles/" + self.pr
ofileNumber + "/?xml=1&timerino=" + Date.now(),
onload: function(data) {
var parsedXML = $.parseXML(data.responseText);
var privacyState = $(parsedXML).find("privacySta
te").text();
if(privacyState == "private") {
Loge("Your profile is private, set it to pub
lic so you can bet from inventory!");
}
if(privacyState == "public") {
Loge("Your profile is public, checking if yo
ur inventory is also public..");
// Check if inventory is public.. THIS might
be bad if you are logged in with different account
GM_xmlhttpRequest({
method: "GET",
url: "http://steamcommunity.com/profiles
/" + self.profileNumber + "/inventory/json/" + self.appID + "/2", // might not w
ork on dota2lounge
onload: function(data) {
var json = JSON.parse(data.responseT
ext);
if(json.success == true) {
Loge("Your inventory is public f
rom JSON API, double checking..");
GM_xmlhttpRequest({
method: "GET",
url: "http://steamcommunity.
com/profiles/" + self.profileNumber + "/edit/settings",
onload: function(data) {
var html = data.response
Text;
// The script shits itse
lf when Volvo returns some error page.. (invalid XML error)
if($(html).find("#accoun
t_pulldown").length) {
if($(html).find("#in
ventoryPrivacySetting_public:checked").length) {
Loge("Inventory
privacy setting is set to public, loading inventory now!");
Bet.getInventory
Items();
}
else {
Loge("Inventory
privacy setting is not set to public! :(");
}
}
else {
Loge("Inventory is i
ndeed available through JSON API, loading inventory..");
Bet.getInventoryItem
s();
}
}
});
}
else {

Loge("Your inventory is private,


set it to public so you are able to place a bet from your inventory!");
}
}
});
}
}
});
}
if($(".bpheader").length) {
backpackLoaded = true;
$("#backpack").show();
Bet.loadMarketPricesBackpack();
Loge("CS:GO inventory loaded");
$("#loading").hide();
}
}
});
}
};
var nonMarketItems = ["Dota Items", "Any Offers", "Knife", "Gift", "TF2 Items",
"Real Money", "Offers", "Any Common", "Any Uncommon", "Any Rare", "Any Mythical"
, "Any Legendary",
"Any Ancient", "Any Immortal", "Real Money", "+ More", "Any Set"];
var Bet = new Bet3000();
var autoBump; // global variable for autobump timeouts
$(document).on("mouseover", ".item", function() {
Bet.getMarketPrice(this);
if($(this).find(".steamMarketURL").length == 0) {
var itemName = encodeURI($(this).find(".smallimg").attr("alt"));
$(this).find('.name a[onclick="previewItem($(this))"]').after('<br/>' +
'<br/><a class="steamMarketURL" href="http://steamcommunity.com/mark
et/listings/'+ Bet.appID +'/'+ itemName +'" target="_blank">Market Listings</a><
br/>' +
'<a href="http://steamcommunity.com/market/search?q='+ itemName +'"
target="_blank">Market Search</a>');
}
});
if(document.URL.indexOf("/match?m=") != -1) {
if($("#placebut").length) {
$("#placebut").before("<a class='buttonright' id='realbetbutton'>FUCKING
PLACE A BET</a>");
Bet.matchID = gup("m");
$("#realbetbutton").click(function() {
Bet.placeBet($("#placebut"));
});
$(".gradient:eq(0)").after('<div id="ld-placebet" class="gradient"><div
class="wrapperino">' +
'LoungeDestroyer delay settings for requests' +
'<div class="setting-block"><span class="slider-desc">Bots are offli
ne (ms):</span> <input id="delayBotsOff" type="range" min="0" max="30000" step="
100" /><input id="delayBotsOff_display" type="text" disabled></div>' +
'<div class="setting-block"><span class="slider-desc">Bots are onlin

e (ms):</span> <input id="delayBotsOn" type="range" min="0" max="30000" step="10


0" /><input id="delayBotsOn_display" type="text" disabled></div>' +
'<div class="setting-block"><span class="slider-desc">After \'re-log
error\' (ms):</span> <input id="delayRelogError" type="range" min="0" max="3000
0" step="100" /><input id="delayRelogError_display" type="text" disabled></div>'
+
'<div style="font-size: 12px; font-weight: bold;">Bot status: <span
id="bot-status">Not checked yet</span></div>' +
'</div></div>');
unsafeWindow.delays = {};
function updatePlaceBetSetting(name, value) {
$("#" + name + "_display").val(value);
unsafeWindow.delays[name] = parseInt(value);
}
$("#ld-placebet .setting-block input[type=range]").change(function() {
Bet.saveSetting(this.id, this.value);
updatePlaceBetSetting(this.id, this.value);
});
$("#ld-placebet .setting-block input[type=range]").each(function(index,
value) {
var settingVal = Bet.userSettings[value.id];
$(value).val(settingVal);
updatePlaceBetSetting(value.id, settingVal);
});
function checkBotsPlaceBet() {
Bet.checkBotsOnline(function() {
unsafeWindow.botsOnline = true;
$("#bot-status").html("ONLINE");
}, function () {
$("#bot-status").html("OFFLINE");
unsafeWindow.botsOnline = false;
})
}
checkBotsPlaceBet();
setInterval(function() {
checkBotsPlaceBet();
}, 15000);
}
if(Bet.userSettings["streamRemove"] == "1") {
$("#stream object, #stream iframe").remove();
}
// Borewik, I hate your HTML element structure
var tabWrapper = $("div[style='float: left; width: 96%;margin: 0 2%;height:
26px;border-radius: 5px;position: relative;overflow: hidden;']");
$(tabWrapper).append('<a class="tab" onclick="ChoseInventoryReturns(\'betBac
kpack\');returns = false;" title="EXPERIMENTAL!\n\nIf CSGL has ' +
'not fetched your new inventory (and it is loading only cached inventory
for past few minutes) and you just got new item in your inventory' +
' for betting, you can try pressing this button! \nBe gentle and don\'t
spam it too often though!">Re-fetch inventory (?)</div>');
$(tabWrapper).find(".tab").width("33%");
$(tabWrapper).find(".tab").click(function() {
backpackLoaded = false;
});
}
if(document.URL.indexOf("/trade?t=") != -1) {
Bet.tradeID = gup("t");

if(!$(".buttonright:contains('Report')").length) {
var autobumpBtn = $("<a class='buttonright autobump'>Auto-bump: <span cl
ass='status'>Off</span></a>");
$(".box-shiny-alt .half:eq(1)").append(autobumpBtn);
Bet.autobump = false;
$(".autobump").click(function() {
Bet.autobump = (Bet.autobump == false) ? true : false;
if(Bet.autobump) {
Bet.updateLastBumped();
Bet.startAutobump();
}
else {
Bet.stopAutobump();
}
var btnText = (Bet.autobump) ? "On" : "Off";
$(".autobump .status").html(btnText);
})
$(".box-shiny-alt .half:eq(1)").append("<a class='buttonright justbump'>
Bump</a>");
$(".justbump").click(function() {
Bet.bumpTrade(Bet.tradeID);
Bet.updateLastBumped();
})
}
$("a:contains('Add items to offer')").click(function() {
Bet.getBackpack("offer");
})
}
if($("#backpack").length) {
if($("#backpack #loading").length) {
var backpackLoaded = false;
Bet.getBackpack("backpack");
}
}
if($("#freezebutton").length) {
$("#freezebutton").after("<a class='buttonright' id='returnitemspls'>RETURN
MY FUCKING ITEMS</a>");
$("#returnitemspls").click(function() {
Bet.requestReturns();
})
}
if($("#submenu").length) {
$("#submenu div:eq(0)").append('<a href="http://steamcommunity.com/tradeoffe
r/new/?partner=106750833&token=CXFPs7ON" title="Support LoungeDestroyer further
development">LoungeDestroyer &#x2764;</a>')
}
if($("#skin").length) {
$("#skin").before('<div id="ld_settings"></div>');
$("#ld_settings").click(function() {
$("#ld_popup, #overlay-dummy").show();
});
$("body").append('<div id="overlay-dummy"></div>' +
'<div id="ld_popup">' +
'<div class="popup-title"><span>LoungeDestroyer settings</span><div id="
close-btn">&#x2715;</div></div>' +
'<div class="ld-settings">' +
'<div>Market prices on items:</div><select id="itemMarketPrices"><option
value="1">Enabled</option><option value="0">Disabled</option></select>' +

'<div>Steam market currency:</div><select id="marketCurrency"><option va


lue="1">USD</option><option value="2">GBP</option><option value="3">EUR</option>
<option value="5">RUB</option></select>' +
'<div>Redirect from item draft page:</div><select id="redirect"><option
value="1">Enabled</option><option value="0">Disabled</option></select>' +
'<div>Remove stream from match page:</div><select id="streamRemove"><opt
ion value="1">Enabled</option><option value="0">Disabled</option></select>' +
'</div>' +
'<div class="footerino"><div>created by NCLA</div><div style="font-weigh
t: bold;font-size:11px;"><a href="http://github.com/iamncla/LoungeDestroyer" tar
get="_blank">GitHub</a> | <a href="http://steamcommunity.com/tradeoffer/new/?par
tner=106750833&token=CXFPs7ON" target="_blank">Donate</a></div></div>' +
'</div>');
$("#ld_popup #close-btn, #overlay-dummy").click(function() {
$("#ld_popup, #overlay-dummy").hide();
});
$.each(Bet.userSettings, function(index, value) {
$(".ld-settings #" + index + " option[value=" + value + "]").prop('selec
ted', true);
});
$(".ld-settings select").on('change', function() {
Bet.saveSetting(this.id, this.value);
});
}

Vous aimerez peut-être aussi