您需要先安装一个扩展,例如 篡改猴、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或关注我们的公众号极客氢云获取最新地址