您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds options to request an assist on the attack page
// ==UserScript== // @name Stigs Torn Scripts // @namespace http://tampermonkey.net/ // @version 1.2.2 // @description Adds options to request an assist on the attack page // @author Stig [2648238] // @match https://www.torn.com/loader.php?sid=attack* // @grant GM_addStyle // @grant GM.xmlHttpRequest // @grant GM_registerMenuCommand // @connect api.no1irishstig.co.uk // ==/UserScript== 'use strict'; GM_registerMenuCommand('Select Assist Location', () => addLocID()); const source = 'Stigs Script'; function getCustomButtons() { GM.xmlHttpRequest({ method: 'GET', url: `https:/api.no1irishstig.co.uk/abtns?locID=${localStorage['assistLocID']}`, headers: { 'Content-Type': 'application/json', }, onload: function(response) { handleResponse(response, 'button'); } }); } var buttonList = []; function handleResponse(response, actionType) { if (response?.status && response.status !== 200) { var responseText = response.responseText.replace(/^"|"$/g, ''); if (actionType === 'button') { alert(`Error Code: ${response.status}\nMessage: ${responseText}` || `An unknown error has occurred - Please report this to ${owner} leadership.`); } else { this.classList.replace('arb-default', 'arb-red'); setTimeout(() => alert(`Error Code: ${response.status}\nMessage: ${responseText}` || `An unknown error has occurred - Please report this to the Developer.`), 20); } return; } if (actionType === 'button') { let json = JSON.parse(response.responseText); for (const [key, value] of Object.entries(json)) { buttonList.push({name: key, value: value}); } } else { this.classList.replace('arb-default', 'arb-green'); } } if (localStorage['assistLocID'] !== undefined) { getCustomButtons(); } GM_addStyle(` .assist-request-top { justify-content: center !important; gap: 5px; flex-wrap: wrap; padding: 0 5px; } .assist-request-button { width: unset !important; margin: 5px 0; cursor: pointer; } .arb-default:hover { background: #AAAAAA !important; } :root .dark-mode .arb-default:hover { background: #666666 !important; } .arb-green { background: linear-gradient(180deg,#f8f2eb,#d2e8bc) !important; cursor: not-allowed !important; } :root .dark-mode .arb-green { background: linear-gradient(180deg,#7e9160,#363636) !important; } .arb-red { background: linear-gradient(180deg, #f8ebeb, #e8b3b3) !important; cursor: not-allowed !important; } :root .dark-mode .arb-red { background: linear-gradient(180deg, #8e4343, #363636) !important; } `); let interval; let bar = null; window.addEventListener('load', function () { render(); interval = setInterval(render, 100); }, false); document.addEventListener('visibilitychange', render); function render() { bar = document.getElementById('assist-request'); if (bar != null) { clearInterval(interval); return; } const header = document.getElementById('react-root'); const element = document.createElement('div'); element.className = 'msg-info-wrap' header.parentNode.insertBefore(element, header); if (localStorage['assistLocID'] === undefined) { element.innerHTML = ` <div id='assist-request' class='info-msg-cont border-round m-top10 assist-request-top'> <div class='info-msg border-round assist-request-top'> <a class='assist-request-button arb-default msg border-round' tabindex='0' href='#' id='setup_location'> Set Assist Location </a> </div> </div> <hr class='page-head-delimiter m-top10 m-bottom10 '> `; document.getElementById("setup_location").addEventListener("click", addLocID); return; } if (buttonList.length === 0) { return; } let buttons = ''; for (const b of buttonList) { buttons += ` <div class='assist-request-button arb-default msg border-round' tabindex='0' data-assist-type='${b.value}' > ${b.name} </div> `; } element.innerHTML = ` <div id='assist-request' class='info-msg-cont border-round m-top10 assist-request-top'> <div class='info-msg border-round assist-request-top'> ${buttons} </div> </div> <hr class='page-head-delimiter m-top10 m-bottom10 '> `; bar = document.getElementById('assist-request'); const buttonSet = document.getElementsByClassName('assist-request-button'); for (let i = 0; i < buttonSet.length; i++) { buttonSet[i].addEventListener('click', request.bind(buttonSet[i])); } } async function request() { const mode = this.getAttribute('data-assist-type'); const res = await fetch(`https://www.torn.com/loader.php?sid=attackData&mode=json&step=poll&user2ID=${window.location.href.match(/user2ID=(\d+)/)[1]}&rfcv=${document.cookie.split("; ").map(c=>c.split("=")).find(([k])=>k==="rfc_v")?.[1]}`, { headers: { 'X-Requested-With': 'XMLHttpRequest' } }); const obj = await res.json(); if (obj.DB.hasOwnProperty('error')) { setTimeout(() => alert(obj.DB.error), 20); return; } GM.xmlHttpRequest({ method: 'POST', url: 'https://api.no1irishstig.co.uk/request', headers: { 'Content-Type': 'application/json', }, data: JSON.stringify({ 'tornid': obj.DB.attackerUser.userID, 'username': obj.DB.attackerUser.playername, 'targetid': obj.DB.defenderUser.userID, 'targetname': obj.DB.defenderUser.playername, 'vendor': `${source} ${GM_info.script.version}`, 'source': source, 'type': 'Assist', 'mode': mode, 'locid': localStorage['assistLocID'], }), onload: function(response) { handleResponse.call(this, response, 'status'); }.bind(this) }); } function addLocID() { const locID = prompt("Please provide a Location, this should be provided by your Faction"); if (locID) { localStorage.setItem('assistLocID', locID); location.reload(); } }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址