// ==UserScript==
// @name Cartel Empire - Torn Vault Withdraw Buttons
// @namespace baccy.ce
// @version 0.1
// @description Adds buttons that input amounts of cash for withdrawing, and adds a magic button that will set your current cash to its value after clicking withdraw/deposit
// @author Baccy (Idea from Titanic_'s Torn Script)
// @match https://cartelempire.online/Property
// @match https://cartelempire.online/Bank
// @icon https://cartelempire.online/images/icon-white.png
// @grant none
// ==/UserScript==
(function() {
'use strict';
const magicButton = 1000000; // Change to the value you want. Currently 1m.
const buttons = [
{value: 10000, display: '10k'},
{value: 25000, display: '25k'},
{value: 50000, display: '50k'},
{value: 100000, display: '100k'},
{value: 250000, display: '250k'},
{value: 500000, display: '500k'},
{value: 1000000, display: '1m'},
{value: 2500000, display: '2.5m'},
{value: 5000000, display: '5m'},
{value: 10000000, display: '10m'}
];
const parentContainer = document.createElement('div');
parentContainer.style.marginBottom = '20px';
parentContainer.classList.add('withdraw-container');
const buttonContainer = document.createElement('div');
buttonContainer.classList.add('custom-button-container');
const newWithdrawInput = document.createElement('input');
newWithdrawInput.type = 'text';
newWithdrawInput.id = 'new-withdraw-input';
newWithdrawInput.className = 'form-control allowAbbreviation';
newWithdrawInput.value = 0;
const newDepositInput = document.createElement('input');
newDepositInput.type = 'text';
newDepositInput.id = 'new-deposit-input';
newDepositInput.className = 'form-control allowAbbreviation';
newDepositInput.value = 0;
const formatNumber = val => {
const num = parseFloat(val.replace(/,/g, ''));
return isNaN(num) ? 0 : num.toLocaleString();
};
const handleFormat = input => e => {
setTimeout(() => {
input.value = formatNumber(input.value);
}, 0);
};
newWithdrawInput.addEventListener('input', handleFormat(newWithdrawInput));
newWithdrawInput.addEventListener('paste', handleFormat(newWithdrawInput));
newDepositInput.addEventListener('input', handleFormat(newDepositInput));
newDepositInput.addEventListener('paste', handleFormat(newDepositInput));
const withdrawBtn = document.querySelector('#withdrawBtn');
document.querySelector('#withdrawInput').remove();
withdrawBtn.parentElement.parentElement.insertBefore(newWithdrawInput, withdrawBtn.parentElement);
const depositBtn = document.querySelector('#depositBtn');
document.querySelector('#depositInput').remove();
depositBtn.parentElement.parentElement.insertBefore(newDepositInput, depositBtn.parentElement);
buttons.forEach(function (config) {
const btn = document.createElement('span');
btn.textContent = `£${config.display}`;
btn.style.cssText = 'padding: 8px; cursor: pointer; border-radius: 4px; border: 1px solid #495057; background: #2b3035; color: #fff;';
buttonContainer.appendChild(btn);
btn.addEventListener('click', () => {
let intvalue = parseInt(newWithdrawInput.value.replace(/,/g, ''));
newWithdrawInput.value = (intvalue + config.value).toLocaleString();
});
});
const magicBtn = document.createElement('span');
magicBtn.textContent = 'Magic';
magicBtn.style.cssText = 'padding: 8px; cursor: pointer; border-radius: 4px; border: 1px solid purple; background: #2b3035; color: #fff;';
magicBtn.addEventListener('click', () => {
const currentCash = parseInt(document.querySelector('.cashDisplay').textContent.replace(/,/g, ''));
const requiredCash = magicButton - currentCash;
if (requiredCash > 0) {
newWithdrawInput.value = requiredCash.toLocaleString();;
newDepositInput.value = '0';
} else if (requiredCash < 0) {
newDepositInput.value = Math.abs(requiredCash).toLocaleString();;
newWithdrawInput.value = '0';
} else {
newWithdrawInput.value = '0';
newDepositInput.value = '0';
}
});
buttonContainer.appendChild(magicBtn);
parentContainer.appendChild(buttonContainer);
withdrawBtn.addEventListener('click', async function(e) {
e.preventDefault();
const form = document.querySelector('form[action="/Property/Withdraw"]');
let cash = parseInt(document.querySelector('#new-withdraw-input').value.replace(/,/g, ''));
const propertyId = form.querySelector('input[name="propertyId"]').value;
const availableCash = parseInt(document.querySelector('#cashInVault').textContent.replace(/,/g, ''));
if (cash > availableCash) cash = availableCash;
const response = await fetch('/Property/Withdraw', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'X-Requested-With': 'XMLHttpRequest'
},
body: new URLSearchParams({
Cash: cash,
propertyId: propertyId
})
});
const text = await response.text();
const parser = new DOMParser();
const doc = parser.parseFromString(text, 'text/html');
const messageDiv = doc.querySelector('.mb-4.card.border-success');
const element = document.querySelector('#mainBackground > .container > .row > .col-12');
if (messageDiv && element) {
element.prepend(messageDiv);
newWithdrawInput.value = '0';
newDepositInput.value = '0';
}
});
depositBtn.addEventListener('click', async function(e) {
e.preventDefault();
const form = document.querySelector('form[action="/Property/Deposit"]');
let cash = parseInt(document.querySelector('#new-deposit-input').value.replace(/,/g, ''));
const propertyId = form.querySelector('input[name="propertyId"]').value;
const availableCash = parseInt(document.querySelector('.cashDisplay').textContent.replace(/,/g, ''));
if (cash > availableCash) cash = availableCash;
const response = await fetch('/Property/Deposit', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'X-Requested-With': 'XMLHttpRequest'
},
body: new URLSearchParams({
Cash: cash,
propertyId: propertyId
})
});
const text = await response.text();
const parser = new DOMParser();
const doc = parser.parseFromString(text, 'text/html');
const messageDiv = doc.querySelector('.mb-4.card.border-success');
const element = document.querySelector('#mainBackground > .container > .row > .col-12');
if (messageDiv && element) {
element.prepend(messageDiv);
newWithdrawInput.value = '0';
newDepositInput.value = '0';
}
});
if (window.location.href.toLowerCase().includes("online/property")) {
const targetElement = document.querySelector('.row.mb-4.g-0.align-items-center.text-center');
if (targetElement) targetElement.parentNode.insertBefore(parentContainer, targetElement);
} else if (window.location.href.toLowerCase().includes("online/bank")) {
const targetElement = document.querySelector('.card-text.fw-bold.text-muted');
if (targetElement) targetElement.parentNode.insertBefore(parentContainer, targetElement);
}
})();