// Generated by CoffeeScript 1.9.3
/* UserScript options {{{1
// ==UserScript==
// @name FlightRising GUI Improvements
// @description Improves the interface for Flight Rising.
// @namespace ahto
// @version 1.13.1
// @include http://*flightrising.com/*
// @require https://greasyfork.org/scripts/10922-ahto-library/code/Ahto%20Library.js?version=61626
// @grant none
// ==/UserScript==
*/
/* Features and changes {{{1
General:
- Adds two new links to Baldwin's Bubbling Brew.
- Removes redundant links to messages and gems.
- Amount of treasure has commas in it.
- Automatically clicks 'play again' at the HiLo game.
Auction House:
- Clicking the icons next to price ranges will let you sort by only treasure or only gems.
- Tells you how much items cost per unit.
- Adds a clear item name button.
- Clicking an item's name sets that to the name filter.
- Prices have commas in them.
Baldwin's Bubbling Brew:
- Replaces useless dialog text with a handy guide.
- Flashes title when your brew is ready. (Leave BBB running in a background tab)
*/
var AH_BUTTON_SPACING, AH_DEFAULT_CURRENCY, AH_UPDATE_DELAY, AuctionListing, BBB_BLINK_TIMEOUT, BBB_GUIDE, GEMS, HILO_CLICK_MAX, HILO_CLICK_MIN, TD_ATTR, TREASURE, blinker, bubble, currentTreasure, gems, instruct, itemNameText, listener, listings, newHTML, showOnly, treasure, treasureIndicator;
TREASURE = 0;
GEMS = 1;
TD_ATTR = 'style="font-size:12px;"';
BBB_GUIDE = "<table>\n <tr>\n <th " + TD_ATTR + "><b>Muck (Familiars)</b></th>\n <th " + TD_ATTR + "><b>Slime (Apparel)</b></th>\n <th " + TD_ATTR + "><b>Misc</b></th>\n </tr>\n <tr>\n <td " + TD_ATTR + ">Copper 50%</td>\n <td " + TD_ATTR + ">Grey 70%(?)</td>\n <td " + TD_ATTR + ">Green 45%</td>\n </tr>\n <tr>\n <td " + TD_ATTR + ">Silver 30%</td>\n <td " + TD_ATTR + ">White 20%(?)</td>\n <td " + TD_ATTR + ">Yellow 20%</td>\n </tr>\n <tr>\n <td " + TD_ATTR + ">Gold 20%</td>\n <td " + TD_ATTR + ">Black 10%(?)</td>\n <td " + TD_ATTR + ">Orange 15%</td>\n </tr>\n <tr> <td/> <td/> <td " + TD_ATTR + ">Red 10%</td> </tr>\n <tr> <td/> <td/> <td " + TD_ATTR + ">Purple 8%</td> </tr>\n <tr> <td/> <td/> <td " + TD_ATTR + ">Blue 2%</td> </tr>\n</table>\n<b>\n <br>\n Misc:<br>\n Ooze (Material), Sludge (Trinkets), Goo (Food)\n</b>";
AH_BUTTON_SPACING = '140px';
AH_UPDATE_DELAY = 2000;
AH_DEFAULT_CURRENCY = void 0;
HILO_CLICK_MIN = 300;
HILO_CLICK_MAX = 1000;
BBB_BLINK_TIMEOUT = 250;
findMatches('a.navbar[href=\'main.php?p=pm\'],\na.navbar[href*=\'msgs\'],\na.navbar[href=\'main.php?p=ge\'],\na.navbar[href*=\'buy-gems\']', 2, 2).remove();
findMatches("a.navbar[href*=crossroads]").after('<a class=\'navbar navbar-glow-hover\' href=\'http://www1.flightrising.com/trading/baldwin/transmute\'>\n Alchemy (Transmute)\n</a>\n<a class=\'navbar navbar-glow-hover\' href=\'http://www1.flightrising.com/trading/baldwin/create\'>\n Alchemy (Create)\n</a>');
if (/www1/.test(window.location.href)) {
treasureIndicator = findMatches('a.loginbar.loginlinks[title*=treasure]', 1, 1);
currentTreasure = numberWithCommas(safeParseInt(treasureIndicator.text()));
newHTML = treasureIndicator.html().replace(/\d+/, currentTreasure);
treasureIndicator.html(newHTML);
} else {
treasureIndicator = findMatches('span#user_treasure', 1, 1);
currentTreasure = numberWithCommas(safeParseInt(treasureIndicator.text()));
treasureIndicator.text(currentTreasure);
}
if ((new RegExp('http://www1\.flightrising\.com/trading/baldwin.*', 'i')).test(window.location.href)) {
if (findMatches("input[value='Collect!']", 0, 1).length) {
blinker = setInterval((function() {
if (document.title === 'Ready!') {
return document.title = '!!!!!!!!!!!!!!!!';
} else {
return document.title = 'Ready!';
}
}), BBB_BLINK_TIMEOUT);
window.onfocus = function() {
clearInterval(blinker);
return document.title = 'Done.';
};
}
if ((new RegExp('/baldwin/create')).test(window.location.href)) {
bubble = findMatches('.baldwin-create-speech-bubble', 1, 1);
instruct = findMatches('.baldwin-create-instruct', 1, 1);
bubble.css('padding', '5px').css('right', 'inherit');
instruct.css('background', 'inherit');
bubble.html(BBB_GUIDE);
}
} else if ((new RegExp("http://flightrising\.com/main\.php.*p=hilo", 'i')).test(window.location.href)) {
setTimeout((function() {
var playAgain;
playAgain = findMatches('.mb_button[value="Play Again"]', 0, 1);
if (playAgain.length) {
return playAgain.click();
}
}), randInt(HILO_CLICK_MIN, HILO_CLICK_MAX));
} else if ((new RegExp('http://flightrising\.com/main\.php.*p=ah.*', 'i')).test(window.location.href)) {
itemNameText = $('#searching > div:nth-child(1)');
itemNameText.html(itemNameText.html() + '<a href=\'javascript:$("input[name=name").val("")\'>\n (clear)\n</a>');
AuctionListing = (function() {
function AuctionListing(element) {
this.element = element;
this.numberOfItems = safeParseInt(this.element.find('div:nth-child(1) > span:nth-child(1) > span').text());
this.button = this.element.find('[id*=buy_button]');
this.price = safeParseInt(this.button.text());
this.priceEA = this.price / this.numberOfItems;
this.nameElement = this.element.find('div:nth-child(1) > span:nth-child(2) > span:nth-child(1)');
this.name = this.nameElement.text();
}
AuctionListing.prototype.modifyElement = function() {
var priceEAString, priceString, target;
target = this.button[0].childNodes[2];
if (target == null) {
return;
}
if (!safeParseInt(target.textContent) === this.price) {
throw new Error("Tried to modify an auction house item but the price didn't match expectations.");
}
priceString = numberWithCommas(this.price);
priceEAString = numberWithCommas(Math.round(this.priceEA));
if (this.numberOfItems > 1) {
target.textContent = " " + priceString + " (" + priceEAString + " ea)";
} else {
target.textContent = " " + priceString;
}
this.button.css('width', AH_BUTTON_SPACING);
return this.nameElement.html("<a href='javascript:$(\"input[name=name]\").val(\"" + this.name + "\")'>" + this.name + "</a>");
};
return AuctionListing;
})();
/*
if window.browseAll?
oldBrowseAll = window.browseAll
window.browseAll = (args...) ->
console.log "window.browseAll() called"
return oldBrowseAll args...
$(document.head).append("""
<script type="text/javascript">
window.browseAll = #{window.browseAll.toString()}
</script>
""")
console.log "window.browseAll() overwritten."
else
console.log "Couldn't find window.browseAll()"
*/
listings = void 0;
safeInterval((function() {
var i, isUpdated, j, len, new_listings, results;
new_listings = $('#ah_left div[id*=sale]');
isUpdated = (function() {
var i, j, ref;
if (listings == null) {
return true;
}
if (new_listings.length === 0 || listings.length === 0) {
return false;
}
for (i = j = 0, ref = listings.length; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
if (listings[i].element[0] !== new_listings[i]) {
return true;
}
}
return false;
})();
if (isUpdated) {
listings = (function() {
var j, len, ref, results;
ref = $('#ah_left div[id*=sale]');
results = [];
for (j = 0, len = ref.length; j < len; j++) {
i = ref[j];
results.push(new AuctionListing($(i)));
}
return results;
})();
results = [];
for (j = 0, len = listings.length; j < len; j++) {
i = listings[j];
results.push(i.modifyElement());
}
return results;
}
}), AH_UPDATE_DELAY);
treasure = {
img: findMatches('#searching img[src="/images/layout/icon_treasure.png"]', 1, 1),
low: findMatches('input[name=tl]', 1, 1),
high: findMatches('input[name=th]', 1, 1)
};
gems = {
img: findMatches('#searching img[src="/images/layout/icon_gems.png"]', 1, 1),
low: findMatches('input[name=gl]', 1, 1),
high: findMatches('input[name=gh]', 1, 1)
};
showOnly = function(currency) {
var ref, ref1, them, us;
if (currency === TREASURE) {
ref = [treasure, gems], us = ref[0], them = ref[1];
} else if (currency === GEMS) {
ref1 = [gems, treasure], us = ref1[0], them = ref1[1];
} else {
throw new Error("showOnly called with invalid currency: " + currency);
}
if (us.low.val() !== '' || us.high.val() !== '') {
us.low.val('');
us.high.val('');
} else {
us.low.val('0');
us.high.val('99999999999999999999');
}
if (them.low.val() !== '' || them.high.val() !== '') {
them.low.val('');
return them.high.val('');
}
};
listener = function(event) {
if (event.currentTarget === treasure.img[0]) {
return showOnly(TREASURE);
} else if (event.currentTarget === gems.img[0]) {
return showOnly(GEMS);
} else {
throw new Error('Something in the auction house code has gone horribly wrong.');
}
};
if (AH_DEFAULT_CURRENCY != null) {
showOnly(AH_DEFAULT_CURRENCY);
findMatches('input[type=submit]', 1, 1).click();
}
treasure.img.click(listener);
gems.img.click(listener);
treasure.img.css('cursor', 'pointer');
gems.img.css('cursor', 'pointer');
}