您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
stock vault for torn.com
- // ==UserScript==
- // @name stock-vault
- // @namespace stock-vault.zero.nao
- // @version 0.2
- // @description stock vault for torn.com
- // @author nao [2669774]
- // @match https://www.torn.com/page.php?sid=stocks*
- // @icon https://www.google.com/s2/favicons?sz=64&domain=torn.com
- // @grant none
- // ==/UserScript==
- let stocks = {};
- let stockId = {};
- function insert() {
- let current = localStorage.stockVault;
- let symbols = [];
- if ($("ul[class^='stock_']").length == 0) {
- setTimeout(insert, 500);
- return;
- }
- $("ul[class^='stock_']").each(function() {
- let sym = $("img", $(this)).attr("src").split("logos/")[1].split(".svg")[0];
- symbols.push(sym);
- // console.log($(this));
- stockId[sym] = $(this).attr("id");
- stocks[sym] = $("div[class^='price_']", $(this));
- });
- symbols.sort();
- let container = `<div>
- <select name="stock" id="stockid"><option value=""></option>`;
- for (let sy of symbols) {
- if (current && current == sy) {
- container += `<option value="${sy}" selected="selected">${sy}</option>`;
- } else {
- container += `<option value="${sy}">${sy}</option>`;
- }
- }
- container += `</select>
- <button id="vaultall" class="torn-btn">Vault</button>
- <input type="try" placeholder="Amount" id="sellval">
- <button id="sellamt" class="torn-btn">Withdraw</button></div>
- <span id="responseStock"></span>`;
- $("#stockmarketroot").prepend(container);
- $("#stockid").change(updateStock);
- $("#vaultall").on("click", vault);
- $("#sellamt").on("click", withdraw);
- $("#sellval").on("keyup", updateKMB);
- }
- function updateStock() {
- // console.log(getPrice($("#stockid").attr("value")));
- localStorage.stockVault = $("#stockid").attr("value");
- }
- function getPrice(id) {
- return parseFloat($(stocks[id]).text());
- }
- function vault() {
- let symb = localStorage.stockVault;
- let money = parseInt(
- document.getElementById("user-money").getAttribute("data-money"),
- );
- let price = getPrice(symb);
- let amt = Math.floor(money / price);
- $.post(
- `https://www.torn.com/page.php?sid=StockMarket&step=buyShares&rfcv=${getRFC()}`,
- {
- stockId: stockId[symb],
- amount: amt,
- },
- function(response) {
- // response = JSON.parse(response);
- $("#responseStock").html(response.success ? "Vaulted" : "Failed");
- $("#responseStock").css("color", response.success ? "green" : "red");
- },
- );
- }
- function updateKMB() {
- try {
- let val = $("#sellval").attr("value");
- // Ensure val is a string and trim any whitespace
- if (typeof val !== "string") {
- throw new Error("Invalid input");
- }
- val = val.trim().toLowerCase();
- if (
- val.endsWith(".") &&
- val.length > 1 &&
- !val.slice(0, -1).includes(".")
- ) {
- return; // Allow user to continue typing
- }
- // Parse the value based on suffix
- if (val.endsWith("k")) {
- val = val.replace("k", "") * 1000;
- } else if (val.endsWith("m")) {
- val = val.replace("m", "") * 1000000;
- } else if (val.endsWith("b")) {
- val = val.replace("b", "") * 1000000000;
- } else if (!isNaN(val) && val.length > 0) {
- val = val; // Handle numeric values directly
- } else {
- throw new Error("Invalid input format");
- }
- // Update the attribute with the parsed value
- $("#sellval").attr("value", val);
- } catch (e) {
- // Handle errors by resetting the value
- $("#sellval").attr("value", "");
- console.error("Error in updateKMB:", e.message);
- }
- }
- function withdraw() {
- let symb = localStorage.stockVault;
- let val = parseFloat($("#sellval").attr("value")) / 0.999;
- let price = getPrice(symb);
- let amt = Math.ceil(val / price);
- console.log(`Value: ${val}, Price: ${price}, Amount: ${amt}`);
- $.post(
- `https://www.torn.com/page.php?sid=StockMarket&step=sellShares&rfcv=${getRFC()}`,
- {
- stockId: stockId[symb],
- amount: amt,
- },
- function(response) {
- // response = JSON.parse(response);
- $("#responseStock").html(response.success ? "Withdrawn" : "Failed");
- $("#responseStock").css("color", response.success ? "green" : "red");
- },
- );
- }
- function getRFC() {
- var rfc = $.cookie("rfc_v");
- if (!rfc) {
- var cookies = document.cookie.split("; ");
- for (var i in cookies) {
- var cookie = cookies[i].split("=");
- if (cookie[0] == "rfc_v") {
- return cookie[1];
- }
- }
- }
- return rfc;
- }
- insert();
- const style = `
- #sellval{
- color: white;
- border: 2px solid #609b9b;
- border-radius: 10px;
- padding: 2px 25px;
- background: transparent;
- max-width: 190px;
- }
- #sellval:active {
- box-shadow: 2px 2px 15px #8707ff inset;
- }
- `;
- const styleSheet = document.createElement("style");
- styleSheet.textContent = style;
- (document.head || document.documentElement).appendChild(styleSheet);
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址