Bot
Bot
(function () {
'use strict';
window.old = {
'utils': {
'JS': {
'inherits': function inherits(t, i) {
t.prototype = Object.create(i.prototype),
Object.defineProperty(t.prototype, "constructor", {
value: t,
writable: !1,
enumerable: !1
}), t.superClass_ = i.prototype
}
}
},
'enums': {
'SearchType': {
ANY: "any",
BALL: "ball",
CLUB_INFO: "clubInfo",
CONSUMABLES_DEVELOPMENT: "development",
CONSUMABLES_TRAINING: "training",
PLAYER: "player",
STADIUM: "stadium",
STAFF: "staff"
}
}
};
window.AB_STATUSES = {
IDLE: "idle",
ACTIVE: "active",
ADJUST: "adjust"
};
window.autobuyerVersion = 'v1.8.0';
window.searchCount = 0;
window.profit = 0
window.sellQueue = [];
window.adjust = {};
window.adjustBasePriceDetected = null;
window.adjustSellPrice = null;
window.adjustSearchPrice = null;
window.searchCounts = [];
window.autoBuyerStatus = window.AB_STATUSES.IDLE;
window.bids = [];
window.adjustBottomLimit = 3;
window.adjustTopLimit = 13;
window.adjustMinProfit = 50;
window.tradeMode = 'buy';
window.futInfo = 'FC-24 Autobyer software https://github.com/oRastor/fc24-web-
app';
window.futCheck = 1875;
window.futSearchCount = 21;
window.initStatisics = function () {
window.futStatistics = {
soldItems: '-',
unsoldItems: '-',
activeTransfers: '-',
availableItems: '-',
coins: '-',
};
window.timers = {
search: window.createTimeout(0, 0),
coins: window.createTimeout(0, 0),
transferList: window.createTimeout(0, 0),
};
};
window.processor = window.setInterval(function () {
if (window.autoBuyerStatus === window.AB_STATUSES.ACTIVE ||
window.autoBuyerStatus === window.AB_STATUSES.ADJUST) {
var time = (new Date()).getTime();
window.timers.search = window.createTimeout(time,
window.getRandomWait());
}
if (window.timers.transferList.finish === 0 ||
window.timers.transferList.finish <= time) {
window.updateTransferList();
window.timers.transferList = window.createTimeout(time, 30000);
}
} else {
window.initStatisics();
}
window.updateStatistics();
}, 500);
return data.name;
}
return auction.currentBid;
}
window.prepareSearchCriteria = function(searchCriteria) {
var minBidPriceThreshold = $('#ab_min_bid_price_threshold').val()
var minBuyNowPriceThreshold = $('#ab_min_buy_now_threshold').val()
this.setMaxBidPrice(window.getMaxSearchBid(10000000, 1500000))
window.setMinBuyPrice(window.getNextPrice(searchCriteria.minBuy))
if (searchCriteria.minBuy > minBuyNowPriceThreshold) {
window.setMinBidPrice(window.getNextPrice(searchCriteria.minBid));
window.setMinBuyPrice(window.getNextPrice(searchCriteria.minBid))
return searchCriteria
}
services.Item.clearTransferMarketCache();
var searchCriteria =
window.prepareSearchCriteria(window.autobuyerController._viewmodel.searchCriteria)
services.Item.searchTransferMarket(searchCriteria, 1).observe(this,
(function (sender, response) {
if (response.success) {
writeToDebugLog('Received ' + response.data.items.length + '
items.');
var maxPurchases = 3;
if ($('#ab_max_purchases').val() !== '') {
maxPurchases = Math.max(1, parseInt($
('#ab_max_purchases').val()));
}
response.data.items.sort(function (a, b) {
if (window.tradeMode === 'buy') {
var priceDiff = a._auction.buyNowPrice -
b._auction.buyNowPrice;
} else {
var priceDiff = window.bidPrice(a._auction) -
window.bidPrice(b._auction);
}
if (priceDiff != 0) {
return priceDiff;
}
if (auction.tradeOwner) {
flags += '+';
}
if (!window.bids.includes(auction.tradeId) &&
window.tradeMode === 'buy') {
window.bids.push(auction.tradeId);
return null;
}
return result;
}
return null
}
return result;
}
return result;
}, null);
}
return result;
}, null);
}
return result;
}, null);
window.adjust[current] = {
count: resultCount,
expires: minPeriod
};
return window.adjustProcess(current);
};
return false;
}
// if (!window.adjustBasePriceDetected) {
// if (window.adjust[price].count === 0) {
// var nextAvailablePrice = window.getNextAdjustPrice(price);
// if (!nextAvailablePrice) {
// return window.adjustProcess(window.increasePrice(price,
price * 2));
// }
//
// var nextPrice = window.increasePrice(price, nextAvailablePrice);
//
// if (nextPrice) {
// return window.adjustProcess(nextPrice);
// }
// }
//
// if (window.adjust[price].count === window.futSearchCount) {
// var previousAvailablePrice =
window.getPreviousAdjustPrice(price);
// if (!previousAvailablePrice) {
// return
window.adjustProcess(window.decreaseAdjustPrice(price, price / 2));
// }
//
// var previousPrice = window.decreaseAdjustPrice(price,
previousAvailablePrice);
//
// if (previousPrice) {
// return window.adjustProcess(previousPrice)
// }
// }
//
// window.adjustBasePriceDetected = true;
// }
if (!window.adjustSellPrice) {
var minExpirePeriod = $('#ab_adjust_min_expire_period').val();
if (!window.adjust[nextPrice].expires ||
window.adjust[nextPrice].expires > minExpirePeriod * 60) {
return window.adjustProcess(nextPrice);
}
window.adjustSellPrice = price;
writeToLog('Sell price: ' + window.adjustSellPrice);
}
if (!window.adjustSearchPrice) {
if (window.adjust[price].count === window.futSearchCount) {
return window.adjustProcess(window.getPreviousPrice(price));
}
window.adjustSearchPrice = price;
writeToLog('Search price: ' + window.adjustSearchPrice);
}
window.completeAdjust(price);
return true;
}
window.completeAdjust = function () {
window.setMaxBuyPrice(window.adjustSearchPrice);
$('#ab_sell_price').val(window.adjustSellPrice);
var nonProfitPrice = window.adjustSellPrice * 0.95;
var buyPrice = window.adjustSellPrice;
$("#ab_buy_price").val(buyPrice)
window.updateAfterTaxValue();
writeToLog('Adjust completed! Buy Price: ' + buyPrice);
window.autoBuyerStatus = window.AB_STATUSES.ACTIVE;
}
if (data.success) {
writeToLog(name + ' [' + item._auction.tradeId + '] ' + price + "
Bought");
if ($('#buy_sound').prop("checked")) {
var buySound = new
Audio("https://actions.google.com/sounds/v1/cartoon/pop.ogg");
buySound.play();
}
if (!filterSell(item)) {
writeToLog(' -- Hold');
return;
}
if (allowList.length) {
return nameContains(name, allowList);
}
var denyList = prepareList($('#ab_buy_deny_filter').val());
if (denyList.length) {
return !nameContains(name, denyList);
}
return true;
}
if (allowList.length) {
return nameContains(name, allowList);
}
return true;
}
window.updateTransferList = function () {
services.Item.requestTransferItems().observe(this, function (t, response) {
var soldItems = response.response.items.filter(function (item) {
return item.getAuctionData().isSold();
}).length;
window.futStatistics.soldItems = soldItems;
window.futStatistics.unsoldItems =
response.response.items.filter(function (item) {
return !item.getAuctionData().isSold() &&
item.getAuctionData().isExpired();
}).length;
window.futStatistics.activeTransfers =
response.response.items.filter(function (item) {
return item.getAuctionData().isSelling();
}).length;
window.futStatistics.availableItems =
response.response.items.filter(function (item) {
return item.getAuctionData().isInactive();
}).length;
var minSoldCount = 0;
if ($('#ab_min_delete_count').val() !== '') {
minSoldCount = Math.max(1, parseInt($
('#ab_min_delete_count').val()));
}
if (minSoldCount > 0 && window.futStatistics.soldItems >= minSoldCount)
{
writeToLog(window.futStatistics.soldItems + " item(s) sold");
window.clearSoldItems();
}
});
}
window.clearSoldItems = function () {
UTTransferListViewController.prototype._clearSold();
}
window.setAdjustMode = function () {
if (window.autoBuyerStatus === window.AB_STATUSES.ADJUST) {
return;
}
if (!$('#adjust_mode').prop("checked")) {
window.autoBuyerStatus = window.AB_STATUSES.ACTIVE;
return;
}
window.adjust = {};
window.adjustBasePriceDetected = false;
window.adjustSellPrice = null;
window.adjustSearchPrice = null;
window.searchCounts = [];
window.autoBuyerStatus = window.AB_STATUSES.ADJUST;
}
window.activateAutoBuyer = function () {
if (window.autoBuyerStatus === window.AB_STATUSES.ADJUST ||
window.autoBuyerStatus === window.AB_STATUSES.ACTIVE) {
return;
}
window.setAdjustMode();
window.notify('Autobuyer Started');
//$('input[name=trade_mode]:not(:checked)').prop('disabled', true);
//window.tradeMode = $('input[name=trade_mode]:checked').val();
}
window.deactivateAutoBuyer = function () {
if (window.autoBuyerStatus === window.AB_STATUSES.IDLE) {
return;
}
window.autoBuyerStatus = window.AB_STATUSES.IDLE;
window.notify('Autobuyer Stopped');
$('input[name=trade_mode]').prop('disabled', false);
}
if (customClass) {
const classes = customClass.split(" ");
for (let cl of classes) stdButton.getRootElement().classList.add(cl);
}
return stdButton;
}
window.UTAutoBuyerViewController = function () {
UTMarketSearchFiltersViewController.call(this);
}
window.searchFiltersViewInit =
UTMarketSearchFiltersViewController.prototype.init;
window.old.utils.JS.inherits(UTAutoBuyerViewController,
UTMarketSearchFiltersViewController);
window.UTAutoBuyerViewController.prototype.init = function () {
searchFiltersViewInit.call(this);
view.__root.id = 'autobuyer-container';
view.__root.style = "width: 60%; float: left;";
window.autobuyerController = this
};
UTAutoBuyerViewController.prototype.getNavigationTitle = function () {
setTimeout(() => {
$("#autobuyer-container").parent().prepend(
'<div id="InfoWrapper" class="ut-navigation-bar-view navbar-style-
landscape">' +
' <h1 class="title">STATUS: <span id="ab_status"></span> | COUNT:
<span id="ab_request_count">0</span> | PROFIT: <span
id="profit_count">0</span></h1>' +
' <div class="view-navbar-clubinfo" style="border: none;">' +
' <span style="text-decoration: underline; cursor: pointer;"
onclick="window.showAutobuyerInfo()">' + window.autobuyerVersion + '</span>' +
' </div>' +
' <div class="view-navbar-clubinfo">' +
' <div class="view-navbar-clubinfo-data">' +
' <div class="view-navbar-clubinfo-name">' +
' <div style="float: left;">Search:</div>' +
' <div style="float: right; height: 10px; width:
100px; background: #888; margin: 5px 0px 5px 5px;">' +
' <div id="ab_search_progress" style="background:
#000; height: 10px; width: 0%"></div>' +
' </div>' +
' </div>' +
' <div class="view-navbar-clubinfo-name">' +
' <div style="float: left;">Statistics:</div>' +
' <div style="float: right; height: 10px; width:
100px; background: #888; margin: 5px 0px 5px 5px;">' +
' <div id="ab_statistics_progress"
style="background: #000; height: 10px; width: 0%"></div>' +
' </div>' +
' </div>' +
' </div>' +
' </div>' +
' <div class="view-navbar-currency" style="margin-left: 10px;">'
+
' <div class="view-navbar-currency-coins"
id="ab_coins"></div>' +
' </div>' +
' <div class="view-navbar-clubinfo">' +
' <div class="view-navbar-clubinfo-data">' +
' <span class="view-navbar-clubinfo-name">Sold Items:
<span id="ab-sold-items"></span></span>' +
' <span class="view-navbar-clubinfo-name">Unsold Items:
<span id="ab-unsold-items"></span></span>' +
' </div>' +
' </div>' +
' <div class="view-navbar-clubinfo" style="border: none;">' +
' <div class="view-navbar-clubinfo-data">' +
' <span class="view-navbar-clubinfo-name">Available
Items: <span id="ab-available-items"></span></span>' +
' <span class="view-navbar-clubinfo-name">Active
transfers: <span id="ab-active-transfers"></span></span>' +
' </div>' +
' </div>' +
'</div>'
);
$("#autobuyer-container").parent().append('' +
'<div id="SearchWrapper" style="float: right; width: 40%;">' +
' <textarea readonly id="progressAutobuyer" style="font-size:
15px; width: 100%; height: 35%;"></textarea>' +
' <label>Search Results:</label><br/>' +
' <textarea readonly id="autoBuyerFoundLog" style="font-size:
10px; width: 100%; height: 50%;"></textarea>' +
'</div>'
);
$('#autobuyer-container .ut-pinned-list').append().append(
'<div class="search-prices">' +
'<div class="search-price-header">' +
' <h1 class="secondary">Settings:</h1>' +
'</div>' +
'<div class="price-filter">' +
' <div class="info">' +
' <span class="secondary label">Sell
Price:</span><br/><small>After Tax: <span id="sell_after_tax">0</span></small>' +
' </div>' +
' <div class="buttonInfo">' +
' <div class="inputBox">' +
' <input type="tel" class="ut-number-input-control"
id="ab_sell_price">' +
' </div>' +
' </div>' +
'</div>' +
'<div class="price-filter">' +
' <div class="info">' +
' <span class="secondary label">Buy Price:</span>' +
' </div>' +
' <div class="buttonInfo">' +
' <div class="inputBox">' +
' <input type="tel" class="ut-number-input-control"
id="ab_buy_price">' +
' </div>' +
' </div>' +
'</div>' +
'<div class="price-filter">' +
' <div class="info">' +
' <span class="secondary label">Min Bid Price
Threshold:</span>' +
' <br/><small>For cache reset iterations</small>' +
' </div>' +
' <div class="buttonInfo">' +
' <div class="inputBox">' +
' <input type="tel" class="ut-number-input-control"
id="ab_min_bid_price_threshold" value="200">' +
' </div>' +
' </div>' +
'</div>' +
'<div class="price-filter">' +
' <div class="info">' +
' <span class="secondary label">Max Buy Now
Threshold:</span>' +
' <br/><small>For cache reset iterations</small>' +
' </div>' +
' <div class="buttonInfo">' +
' <div class="inputBox">' +
' <input type="tel" class="ut-number-input-control"
id="ab_min_buy_now_threshold" value="350">' +
' </div>' +
' </div>' +
'</div>' +
'<div class="price-filter">' +
' <div class="info">' +
' <span class="secondary label">Wait Time:<br/><small>(random
wait time eg. 2-5)</small>:</span>' +
' </div>' +
' <div class="buttonInfo">' +
' <div class="inputBox">' +
' <input type="tel" class="ut-number-input-control"
id="ab_wait_time" placeholder="7-12" value="7-12">' +
' </div>' +
' </div>' +
'</div>' +
'<div class="price-filter">' +
' <div class="info">' +
' <span class="secondary label">Min clear
count:<br/><small>(clear sold items)</small>:</span>' +
' </div>' +
' <div class="buttonInfo">' +
' <div class="inputBox">' +
' <input type="tel" class="ut-number-input-control"
id="ab_min_delete_count" placeholder="" value="10">' +
' </div>' +
' </div>' +
'</div>' +
'<div class="price-filter">' +
' <div class="info">' +
' <span class="secondary label">Max purchases per search
request:</span>' +
' </div>' +
' <div class="buttonInfo">' +
' <div class="inputBox">' +
' <input type="text" class="ut-number-input-control"
id="ab_max_purchases" placeholder="3" value="3">' +
' </div>' +
' </div>' +
'</div>' +
'<div class="price-filter">' +
' <input type="checkbox" id="adjust_mode" name="adjust_mode"
checked>' +
' <label for="adjust_mode">Adjust mode</label>' +
'</div>' +
'<div class="price-filter" style="padding: 15px 5px;">' +
' <input type="checkbox" id="buy_sound" name="buy_sound"
checked>' +
' <label for="buy_sound">Buy Sound</label>' +
'</div>' +
'<div class="search-price-header">' +
' <h1 class="secondary">Filter settings:</h1>' +
'</div>' +
'<div class="price-filter">' +
' <div class="info">' +
' <span class="secondary label">Buy allow filter:</span>' +
' <br/><small>if name contains, not using if empty, higher
priority</small>' +
' </div>' +
' <div class="buttonInfo">' +
' <div class="inputBox">' +
' <textarea type="tel" class="ut-number-input-control"
id="ab_buy_allow_filter" placeholder="messi, rash" style="background-color:
#0f0f0f; color: #fcfcf7; width: 100%; height: 70px;"></textarea>' +
' </div>' +
' </div>' +
'</div>' +
'<div class="price-filter">' +
' <div class="info">' +
' <span class="secondary label">Buy deny filter:</span>' +
' <br/><small>if name contains, not using if empty</small>' +
' </div>' +
' <div class="buttonInfo">' +
' <div class="inputBox">' +
' <textarea class="ut-number-input-control"
id="ab_buy_deny_filter" placeholder="messi, rash" style="background-color: #0f0f0f;
color: #fcfcf7; width: 100%; height: 70px;"></textarea>' +
' </div>' +
' </div>' +
'</div>' +
'<div class="price-filter">' +
' <div class="info">' +
' <span class="secondary label">Sell allow filter:</span>' +
' <br/><small>if name contains, not using if empty, higher
priority</small>' +
' </div>' +
' <div class="buttonInfo">' +
' <div class="inputBox">' +
' <textarea type="tel" class="ut-number-input-control"
id="ab_sell_allow_filter" placeholder="messi, rash" style="background-color:
#0f0f0f; color: #fcfcf7; width: 100%; height: 70px;"></textarea>' +
' </div>' +
' </div>' +
'</div>' +
'<div class="price-filter">' +
' <div class="info">' +
' <span class="secondary label">Sell deny filter:</span>' +
' <br/><small>if name contains, not using if empty</small>' +
' </div>' +
' <div class="buttonInfo">' +
' <div class="inputBox">' +
' <textarea class="ut-number-input-control"
id="ab_sell_deny_filter" placeholder="messi, rash" style="background-color:
#0f0f0f; color: #fcfcf7; width: 100%; height: 70px;"></textarea>' +
' </div>' +
' </div>' +
'</div>' +
'<div class="search-price-header">' +
' <h1 class="secondary">Adjust settings:</h1>' +
'</div>' +
'<div class="price-filter">' +
' <div class="info">' +
' <span class="secondary label">Enable after X search
requests:</span>' +
' </div>' +
' <div class="buttonInfo">' +
' <div class="inputBox">' +
' <input type="tel" class="ut-number-input-control"
id="ab_adjust_search_requests_count" value="30">' +
' </div>' +
' </div>' +
'</div>' +
'<div class="price-filter">' +
' <div class="info">' +
' <span class="secondary label">Enable after X empty search
responses:</span>' +
' </div>' +
' <div class="buttonInfo">' +
' <div class="inputBox">' +
' <input type="tel" class="ut-number-input-control"
id="ab_adjust_empty_search_responses_count" value="6">' +
' </div>' +
' </div>' +
'</div>' +
'<div class="price-filter">' +
' <div class="info">' +
' <span class="secondary label">Enable after X full search
responses:</span>' +
' </div>' +
' <div class="buttonInfo">' +
' <div class="inputBox">' +
' <input type="tel" class="ut-number-input-control"
id="ab_adjust_full_search_responses_count" value="3">' +
' </div>' +
' </div>' +
'</div>' +
'<div class="price-filter">' +
' <div class="info">' +
' <span class="secondary label">Min expire period
(minutes):</span>' +
' </div>' +
' <div class="buttonInfo">' +
' <div class="inputBox">' +
' <input type="tel" class="ut-number-input-control"
id="ab_adjust_min_expire_period" value="50">' +
' </div>' +
' </div>' +
'</div>' +
'<div class="price-filter">' +
' <div class="info">' +
' <span class="secondary label">Min profit:</span>' +
' </div>' +
' <div class="buttonInfo">' +
' <div class="inputBox">' +
' <input type="tel" class="ut-number-input-control"
id="ab_adjust_min_profit" value="50">' +
' </div>' +
' </div>' +
'</div>' +
'</div>'
);
window.showAutobuyerInfo();
});
return '';
};
function addTabItem() {
const navViewInit =
UTGameTabBarController.prototype.initWithViewControllers;
UTGameTabBarController.prototype.initWithViewControllers = function (tabs)
{
const autoBuyerTab = new UTTabBarItemView();
autoBuyerTab.init();
autoBuyerTab.setTag(8);
autoBuyerTab.setText('Autobuyer');
autoBuyerTab.addClass("icon-transfer");
tabs.push(autoBuyerNav);
navViewInit.call(this, tabs);
};
};
if (!$('#adjust_mode').prop("checked")) {
return false;
}
window.searchCounts.push(itemsFound);
if (window.searchCounts.length >= searchHistoryLength) {
window.searchCounts = window.searchCounts.slice(-searchHistoryLength);
}
if (emptyCount === 0) {
return true;
}
}
return false;
};
window.updateAfterTaxValue = function () {
var sellPrice = parseInt($('#ab_sell_price').val());
$('#sell_after_tax').html((sellPrice * 0.95).toLocaleString());
}
window.updateAutoTransferListStat = function () {
if (window.autoBuyerStatus === window.AB_STATUSES.IDLE) {
return;
}
window.updateTransferList();
};
window.getRandomWait = function () {
var wait = [2, 5];
if ($('#ab_wait_time').val() !== '') {
wait = $('#ab_wait_time').val().toString().split('-');
}
window.searchCount++;
return Math.round(((Math.random() * (parseInt(wait[1]) -
parseInt(wait[0]))) + parseInt(wait[0]))) * 1000;
};
window.updateStatistics = function () {
$('#ab_search_progress').css('width',
window.getTimerProgress(window.timers.search));
$('#ab_statistics_progress').css('width',
window.getTimerProgress(window.timers.transferList));
$('#ab_request_count').html(window.searchCount);
$('#ab_coins').html(window.futStatistics.coins);
$('#profit_count').css('color', '#2cbe2d').html(window.profit);
switch (window.autoBuyerStatus) {
case window.AB_STATUSES.ACTIVE:
$("#ab_status").css('color',
'#2cbe2d').html(window.autoBuyerStatus.toUpperCase());
break;
case window.AB_STATUSES.ADJUST:
$("#ab_status").css('color',
'yellow').html(window.autoBuyerStatus.toUpperCase());
break;
case window.AB_STATUSES.IDLE:
$("#ab_status").css('color',
'red').html(window.autoBuyerStatus.toUpperCase());
break;
}
$("#ab-sold-items").html(window.futStatistics.soldItems);
$("#ab-unsold-items").html(window.futStatistics.unsoldItems);
$("#ab-available-items").html(window.futStatistics.availableItems);
$("#ab-active-transfers").html(window.futStatistics.activeTransfers);
if (window.futStatistics.unsoldItems) {
$('#ab-unsold-items').css('color', 'red');
} else {
$('#ab-unsold-items').css('color', '');
}
if (window.futStatistics.availableItems) {
$('#ab-available-items').css('color', 'orange');
} else {
$('#ab-available-items').css('color', '');
}
};
window.showAutobuyerInfo = function () {
writeToLog(window.futInfo);
};
window.setInterval(function () {
showAutobuyerInfo();
}, 600000);
window.setInterval(function () {
if (window.autoBuyerStatus === window.AB_STATUSES.IDLE) {
return;
}
if (sellItem) {
services.Item.list(sellItem[0], window.getPreviousPrice(sellItem[1]),
sellItem[1], sellItem[2]);
}
}, 3000);
window.hasLoadedAll = false;
window.searchCount = 0;
window.autobuyerController = null
addTabItem();
})();