您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Show your own revive chance in hospital
// ==UserScript== // @name TornReviveChance // @namespace http://tampermonkey.net/ // @version 0.3 // @description Show your own revive chance in hospital // @author Resh // @match https://www.torn.com/hospitalview.php* // @icon https://www.google.com/s2/favicons?sz=64&domain=torn.com // @grant none // @license MIT // ==/UserScript== // Step 1: // Generate API Key using this link: // https://www.torn.com/preferences.php#tab=api?step=addNewKey&title=Revive%20Chance&user=revivesfull,timestamp,basic // Step 2: // paste API Key below inside the '' const API_KEY = ''; // Step 3 (optional): // Set the minimum value for colors. By default, the number will be green when chance>70, orange on 40-70 and red when <40 // If you instead want only green and red, simply set both GREEN_MIN and ORANGE_MIN values to the same value. const GREEN_MIN = 70; const ORANGE_MIN = 40; // Step 4 (optional): // Change this value from false to true if you want to also see the minimum revive chance, from a skill 1 reviver const SHOW_MINIMUM = false; function displayError(error) { console.log(error); $('#reviveChanceDisplay').html("API ERROR").css('color', 'red'); } function displayReviveChances(data) { let truePenalty = calculatePenalty(data); let revChanceMax = 100 - truePenalty/2; if (revChanceMax < 1) { revChanceMax = 1; } $('#revChanceMax').html(revChanceMax.toFixed(2)+'%'); if (revChanceMax >= GREEN_MIN) { $('#revChanceMax').css('color', 'var(--revive-availability-btn-everyone-green)'); } else if (revChanceMax >= ORANGE_MIN) { $('#revChanceMax').css('color', 'var(--revive-availability-btn-everyone-orange)'); } else { $('#revChanceMax').css('color', 'var(--revive-availability-btn-everyone-red)'); } if (SHOW_MINIMUM) { let revChanceMin = 90 - truePenalty; if (revChanceMin < 1) { revChanceMin = 1; } $('#revChanceMin').html(revChanceMin.toFixed()+"%"); } } function calculatePenalty(data) { const UNIX_DAY = 86400; const REV_PENALTY = 8; let currentPenalty = 0; let currentTs = data["timestamp"]; let playerId = data["player_id"]; for (const [key, singleRevive] of Object.entries(data["revives"])) { // only count incoming revives, not outgoing! if (singleRevive["target_id"] == playerId && singleRevive["result"] == "success") { let timeDif = currentTs - singleRevive["timestamp"]; if (timeDif < UNIX_DAY) { currentPenalty += (1 - (timeDif/UNIX_DAY))*REV_PENALTY; } } } return currentPenalty; } (function() { 'use strict'; // Your code here... if ($('div.content-title > h4').size() > 0 && $('#reviveChanceDisplay').size() < 1) { const revDisplay = `<span id="reviveChanceDisplay" style="font-size: 20px;"> <span id="revChanceMax" style="font-weight: bold">-</span> </span>`; $('div.content-title > h4').append(revDisplay); if (SHOW_MINIMUM) { const revDisplayMin = `<span style="font-size: 15px; font-weight: 400;"> (min: <span id="revChanceMin">-</span>) </span>`; $('#reviveChanceDisplay').append(revDisplayMin); } fetch("https://api.torn.com/user/?selections=revivesfull,timestamp,basic&key="+API_KEY+"&comment=RevChance") .then(response => { // indicates whether the response is successful (status code 200-299) or not if (!response.ok) { throw new Error(`Response Status: ${reponse.status}`); } return response.json(); }) .then(data => { if("error" in data) { displayError(data.error.error); } else { displayReviveChances(data); } }) .catch(error => displayError(error)) } })();