您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
This is a work in progress, it is no where near completed. It is NOT for use for anyone other than my faction. It is probably not even a good script lol. thanks for reading. heres what it does. A collapsible utility panel for my faction to manually fetch their assigned chain number and a hit timer during wars. This tool helps faction members stay organized during chain events without having someone always there to monitor the chain.
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/544476/1637545/Torn%20Chain%20Panel.js
// ==UserScript== // @name Torn Chain Panel // @namespace http://tampermonkey.net/ // @version 0.4 // @description Collapsible panel for chain # + timer // @author BuzzC137 // @match https://www.torn.com/* // @grant none // @license Proprietary // ==/UserScript== /* Copyright © 2025 BuzzC137 This script is proprietary and not open source. You MAY NOT: - Copy, modify, distribute, or use this script in any form without explicit written permission from the author. Exception: Torn City developers and staff are permitted to review or access this script for moderation, verification, or security purposes. Unauthorized use may result in revocation of access or further action. */ (function () { 'use strict'; const discordUsername = 'buzzc137'; const styles = ` #chainPanel { position: fixed; top: 100px; left: 20px; background: rgba(24, 24, 24, 0.95); color: #ccc; font-family: Verdana, sans-serif; font-size: 12px; border: 1px solid #555; border-radius: 5px; padding: 10px; z-index: 9999; width: 220px; box-shadow: 0 0 10px #000; } #chainPanel.collapsed .panel-body { display: none; } #chainPanel .panel-header { font-weight: bold; color: #0f0; cursor: move; margin-bottom: 8px; } #chainPanel button, #chainPanel input { width: 100%; margin-bottom: 6px; padding: 6px; border: none; border-radius: 3px; font-size: 11px; } #chainPanel button { background: #333; color: white; cursor: pointer; } #chainPanel button:hover { background: #555; } #chainPanel .toggle { background: #1c1c1c; color: #aaa; font-size: 10px; text-align: center; padding: 4px; border-top: 1px solid #444; cursor: pointer; } #chainTabs { display: flex; justify-content: space-around; margin-bottom: 6px; } #chainTabs button { font-size: 10px; padding: 4px; } `; const styleTag = document.createElement('style'); styleTag.innerText = styles; document.head.appendChild(styleTag); const panel = document.createElement('div'); panel.id = 'chainPanel'; panel.innerHTML = ` <div class="panel-header">Chain Tool</div> <div class="panel-body"> <input type="number" id="chainTimerInput" placeholder="Timer (sec)"> <button id="getChainBtn">Get My Chain #</button> <button id="startTimerBtn">Start Timer</button> <div id="chainTabs"> <button disabled>Tab 1</button> <button disabled>Tab 2</button> </div> </div> <div class="toggle">▲ Collapse</div> `; document.body.appendChild(panel); // Collapse toggle const toggle = panel.querySelector('.toggle'); toggle.addEventListener('click', () => { panel.classList.toggle('collapsed'); toggle.innerText = panel.classList.contains('collapsed') ? '▼ Expand' : '▲ Collapse'; }); // Drag logic const header = panel.querySelector('.panel-header'); let isDragging = false, offsetX = 0, offsetY = 0; header.addEventListener('mousedown', (e) => { isDragging = true; offsetX = e.clientX - panel.offsetLeft; offsetY = e.clientY - panel.offsetTop; }); document.addEventListener('mousemove', (e) => { if (isDragging) { panel.style.left = `${e.clientX - offsetX}px`; panel.style.top = `${e.clientY - offsetY}px`; } }); document.addEventListener('mouseup', () => isDragging = false); // Fetch Chain Number const fetchBtn = panel.querySelector('#getChainBtn'); fetchBtn.addEventListener('click', () => { fetch(`https://removing-maldives-driving-money.trycloudflare.com/chain/${discordUsername}`) .then(res => res.json()) .then(data => { if (data.chain) { alert(`Your assigned chain number is: #${data.chain}`); } else { alert('You don’t have a chain number yet.'); } }) .catch(err => { alert('Error fetching chain number. Is the bot running?'); console.error('Fetch error:', err); }); }); // Timer logic let timer; panel.querySelector('#startTimerBtn').addEventListener('click', () => { const seconds = parseInt(document.querySelector('#chainTimerInput').value) || 10; // Red flash const flash = document.createElement('div'); flash.style.position = 'fixed'; flash.style.top = 0; flash.style.left = 0; flash.style.width = '100%'; flash.style.height = '100%'; flash.style.backgroundColor = 'red'; flash.style.opacity = '0.5'; flash.style.zIndex = 999; document.body.appendChild(flash); setTimeout(() => document.body.removeChild(flash), 500); if (timer) clearTimeout(timer); timer = setTimeout(() => { const audio = new Audio('https://www.soundjay.com/button/sounds/beep-07.mp3'); audio.play(); console.log("Timer complete – make your hit!"); }, seconds * 1000); }); })();