Greasy Fork镜像 支持简体中文。

Torn Extensions - Stock Order

Helps to order stock for your company.

  1. // ==UserScript==
  2. // @name Torn Extensions - Stock Order
  3. // @namespace TornExtensions
  4. // @version 2.3
  5. // @description Helps to order stock for your company.
  6. // @author Mathiaas [XID 1918010]
  7. // @match https://www.torn.com/companies.php*
  8. // @grant GM_xmlhttpRequest
  9. // ==/UserScript==
  10.  
  11. (function() {
  12. //'use strict';
  13. let APIKey = "YOUR API KEY HERE";
  14.  
  15. let targetNode = document.getElementById('stock');
  16. let config = { childList: true };
  17. let onItsWay = 0;
  18. let maxStock = 0;
  19.  
  20. let callback = function(mutationsList, observer) {
  21. console.log("exists: " + $(".custom-stock").length);
  22. if($(".custom-stock").length >= 1)
  23. return;
  24. $(".total-price.bold").after("<div class=\"total-stock-container bold\">Total stock:</span> <span class=\"total-stock\"></span></div><br />");
  25. $(".total-stock-container").css("padding", "10px 10px 0");
  26. $(".input-money").change(() => {
  27. calcStock();
  28. });
  29. calcStock();
  30. let API = `https://api.torn.com/company/?selections=stock,detailed&key=${APIKey}`;
  31. GM_xmlhttpRequest({
  32. method: "GET",
  33. url: API,
  34. onreadystatechange: (res) => {
  35. if(res.readyState > 3 && res.status === 200) {
  36. res = JSON.parse(res.response);
  37. console.log(res);
  38. maxStock = res.company_detailed.upgrades.storage_space;
  39. let tablehead = "", tablefields = "";
  40. $.each(res.company_stock, (k, v) => {
  41. onItsWay += v.on_order;
  42. tablehead += `<th>${k}</th>`;
  43. tablefields += `<td><input style="width:75%" data-custom="1" data-name="${k}" value="${localStorage.getItem(k) || 0}" /></td>`;
  44. });
  45. $(".total-stock").text((parseInt($(".total-stock").text().replace(",", "")) + onItsWay).toLocaleString("en-US"));
  46. $(".total-stock").after(`<table class="custom-stock"><tr><th>Total Custom</th>${tablehead}</tr><tr><td id="total-custom">0</td>${tablefields}</tr></table>`);
  47. calcCustom();
  48. $(".custom-stock").css("border", "1px solid black").css("margin-top", "5px");
  49. $(".custom-stock th").css("border", "1px solid black").css("padding", "5px");
  50. $(".custom-stock td").css("border", "1px solid black").css("padding", "5px");
  51. $("input[data-custom=\"1\"]").on("change", (i) => {
  52. if($(i.target).val() == "")
  53. $(i.target).val(0);
  54. localStorage.setItem($(i.target).data("name"), $(i.target).val());
  55. calcCustom();
  56. });
  57. $(".order.btn-wrap.silver").after(`<span class="fill btn-wrap silver"><span class="btn"><button class="torn-btn" role="button">FILL CUSTOM</button></span></span>`);
  58. $(".fill").click(() => {
  59. if(calcCustom() != 0) {
  60. $(".order.btn-wrap.silver").find("button").removeProp("disabled").removeClass("disabled");
  61. $(".confirm.btn-wrap.silver").find("button").removeProp("disabled").removeClass("disabled");
  62. $(".name.bold.t-gray-9.acc-header.t-overflow").each((a, b) => {
  63. let incoming = 0;
  64. $("ul.order-list li").each((i, e) => {
  65. if($(e).text().includes("Delivered"))
  66. return;
  67. let name = $(e).find(".name").text();
  68. if(name == $(b).text().trim()) {
  69. incoming += parseInt($(e).find(".amount").text().replace(",", "")) || 0;
  70. console.log("incoming " + incoming + " " + name);
  71. }
  72. });
  73. let product = $(b).text().trim();
  74. let info = $(b).next(".acc-body");
  75. let stock = parseInt(info.find(".stock").text().trim().replace(",", "").replace("In Stock:", ""));
  76. info.find(".input-money").val((localStorage.getItem(product || 0) - (stock + incoming)) > 0 ? localStorage.getItem(product) - (stock + incoming) : "");
  77. info.find(".input-money").trigger("change");
  78. });
  79. }
  80. });
  81. } else
  82. console.log(`state ${res.readyState} status ${res.status}`);
  83. },
  84. onerror: (err) => {
  85. console.log(err);
  86. }
  87. });
  88. };
  89.  
  90. let observer = new MutationObserver(callback);
  91. observer.observe(targetNode, config);
  92.  
  93. function calcStock() {
  94. $(".total-stock").text((parseInt($(".quantity.bold").text().replace(",", "")) + parseInt($(".stock.bold").text().replace(/,/g, "")) + onItsWay).toLocaleString("en-US"));
  95. }
  96.  
  97. function calcCustom() {
  98. let total = 0;
  99. $("input[data-custom=\"1\"]").each((i, e) => {
  100. total += parseInt($(e).val());
  101. });
  102. $("#total-custom").text(`${total.toLocaleString("en-US")}/${maxStock.toLocaleString("en-US")}`);
  103. if(total == maxStock)
  104. $("#total-custom").css("color", "orange");
  105. else if(total > maxStock)
  106. $("#total-custom").css("color", "red");
  107. else
  108. $("#total-custom").css("color", "green");
  109. return total || 0;
  110. }
  111. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址