您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
When less than 2 of the 3 last games are won: turn off stats. When the last 3 games are won: turn on stats
当前为
// ==UserScript== // @name TagPro AutoStatsSetting (TP-ASS) // @version 0.2 // @description When less than 2 of the 3 last games are won: turn off stats. When the last 3 games are won: turn on stats // @author Ko // @supportURL https://www.reddit.com/message/compose/?to=Wilcooo // @website https://www.reddit.com/r/TagPro/comments/6wlsfa/userscript_tagpro_autostatsetting_tpass/ // @include http://tagpro-*.koalabeast.com:* // @grant GM_getValue // @grant GM_setValue // @grant GM_xmlhttpRequest // @connect koalabeast.com // @namespace https://greasyfork.org/users/152992 // ==/UserScript== console.log('START: ' + GM_info.script.name + ' (v' + GM_info.script.version + ' by ' + GM_info.script.author + ')'); //////////////////////////////////////////////////////////////////////////////////////////// // ### --- OPTIONS --- ### // //////////////////////////////////////////////////////////////////////////////////////// // // // // Please type your reserved name between the quotes. // // // DO NOT FORGET to change this when you change your reserved name in the future, // // // or it will be set back to what you typed here!! // // var reservedName = ""; // // // // // How many wins in a row should turn stats back on? (Max. 3 at the moment) // // var wins_in_a_row = 3; // // // // // What is the mininum acceptable amount of games to win out of 3? // // // If you win less than that, stats are turned off. // // var minimum_wins = 2; // // // // // Note: With the default options, winning 2 of the last 3 games keeps the stat // // // setting unchanged // // // // // Start a new session after how many minutes of not playing? // // var reset_time = 30; // // // // // Do you want to be alerted when the stat setting is changed? true/false // // var show_alert = true; // // // Currently not working, and I've no idea why. Help appreciated :) // // // // // Do you want to be alerted after every game, with the last three results? // // var show_results = true; // // // // // What color should the alerts have (You'll get those in your chat-box) // // // This tool may come in handy: https://www.w3schools.com/colors/colors_picker.asp // // var alert_color = "#ffccff"; // // // // // Do you want to see some debug-messages in the console // // // (don't worry if you've no idea what this is) // // var debug = false; // // // // //////////////////////////////////////////////////////////////////////////////////////// // // ### --- END OF OPTIONS --- ### // //////////////////////////////////////////////////////////////////////////////////////////// /* UPDATE LOG: 0.2: Two new options; you can now specify at what number of wins stats should be turned on and off Idea for a future update (I don't plan on updating this soon, but if you want you can fork/pull request): Whether or not Stats will be turned off/on won't be based on that simple rule. Instead the win% of the last session will be compared to your R300 win%. Only when you are positively influencing your R300 win%, stats will be turned on I plan on leaving the approach in this version as an option too. */ ////////////////////////////////////// // SCROLL FURTHER AT YOUR OWN RISK! // ////////////////////////////////////// function chat_alert(message) { // This function shows info in your chat. tagpro.socket.emit("local:chat", { to:"all", from:"TP-ASS", message:message, c:alert_color}); } tagpro.ready(function () { if (wins_in_a_row < minimum_wins) { // If this is true, stats will be turned on and off simultaneously in some cases chat_alert("You messed up the options, wins_in_a_row cannot be smaller than minimum_wins!! This script is terminating."); return; } tagpro.socket.on('end',function(data) { // This script only runs at the end of a game. if(debug)console.log('TP-ASS: Game has ended, starting the script'); if (tagpro.spectator) return; // Spectated game results should NOT affect this script! var player = tagpro.players[tagpro.playerId]; // Your own ball's object var teamNames = [null,"red","blue"]; // Because tagpro.players[n].team returns a number, and I need to compare it to a string var team = teamNames [ player.team ] ; // convert number to corresponding teamName string var winner = data.winner; // Returns "red", "blue", or "tie" (even when custom names are set) var won = (team == winner); // Determine if this game is won or not if(debug)console.log('TP-ASS: And the winner is: ',winner); if(debug)console.log('TP-ASS: You are part of that team: ',won); var now = new Date().getTime(); // Get the current time if ( GM_getValue("last_played") < now - reset_time*60000 || !GM_getValue("last_played") ) { // If you haven't played (using this script) during the last x minutes GM_setValue("result1",false); // 2 games earlier is set to Lost GM_setValue("result2",true); // 1 game earlier is set to Win GM_setValue("result3",won); // Last games result is stored // Note: The results of those 2 games are chosen this way because it will give the following effect. // - When loosing the first game of a new session: stats are immediately turned OFF // - You need to win the first 2 games for stats to be turned ON (if they weren't already) if(debug)console.log('TP-ASS: A new session has started'); } else { // Else (if still in the same session) GM_setValue("result1",GM_getValue("result2")); // Move all results one place back in the 'past' GM_setValue("result2",GM_getValue("result3")); GM_setValue("result3",won); // Store the latest result (of the game that just ended) if(debug)console.log('TP-ASS: This result is stored'); } GM_setValue("last_played",now); // Update the last_played time function setStats(to) { // Defines how to turn stats on or off if ( tagpro.settings.stats == to ) return; // If the current Stat setting is different from what you want it to be: if(debug)console.log('TP-ASS: Trying to change the STAT setting to '+to); // This is where the magic starts!! (changing the Stat Setting) var settings = tagpro.settings.ui; // We copy your current settings, because we need a fully filled form to send to the server // What is still missing in tagpro.settings.ui is your displayName and reservedName settings.displayedName = player.name; // We simply get your display name from your ball // Getting the reserved name isn't that easy: if(player.auth) settings.reservedName = player.name; // if you have a green checkmark, the script immediately knows your reserved name else if (reservedName !== "") settings.reservedName = reservedName; // if you're playing unauthenticated, the name from the options (top of this script) will be used instead else { // if you haven't set that as well, you will be prompted at the end of the game. (only the first time) storedName = GM_getValue("storedName"); if (typeof storedName != 'undefined') settings.reservedName = storedName; // If you are prompted before, use that value. else { // If not, prompt and store the input. input = ""; while (input === "") input = prompt('What is your reserved name? Be sure to get it correct! The TP-ASS script needs this to work.\n\nIf you change your reserved name in the future, don\'t forget to update it in the TP-ASS script too or it will be set back to the name you type here!!'); // In case you immediately press 'enter' at the end of the game (f.e. to chat 'gg'), the prompt will just show again. settings.reservedName = input; GM_setValue("storedName",input); } } if(debug)console.log('TP-ASS: Using this reserved name: '+settings.reservedName); settings.stats = to; // The only thing we change in the settings is the stats, to whatever this functions argument is if(debug)console.log('TP-ASS: Got the required settings, sending a POST request now...'); // Now that we have all settings, we can 'post' it to the server. (This is what happens when you click 'save settings' on the TagPro profile page) GM_xmlhttpRequest ( { method: "POST", url: 'http://'+document.location.hostname+'/profile/update', // Settings should be send to the same server, so you'll be logged in for sure. data: jQuery.param(settings), // jQuery.param makes it a string: "stats=false&reservedName=Ko&..." headers: {"Content-Type": "application/x-www-form-urlencoded"}, // No idea why this is needed, but it doesn't work without it. onload: function(r){ // 'r' is the response that we get back from the TP server, lets do some error handling with it: if(r.response.error) chat_alert('Your Stat setting could not be saved due to the following error:\n'+e.error); // Alert it when something is wrong if(r.response.success && show_alert) { var textify = {true: "on", false: "off" }; // Translation from Boolean to the words on/off chat_alert("Stats have been turned " + textify[to] + " for next game!"); // Alert when succeeded! } if(debug)console.log('TP-ASS: Response of the POST request: ', r); }}); // We did the magic!! } var number_of_wins = GM_getValue("result1") + GM_getValue("result2") + GM_getValue("result3"); // Count the number of wins of those last 3 results if (number_of_wins < minimum_wins) setStats(false); // Set stats off when <2 wins var wins_streak = ( GM_getValue("result1") * GM_getValue("result2") + GM_getValue("result2") ) * GM_getValue("result3") + GM_getValue("result3"); // Do some fancy math to get your current win streak if (wins_streak >= wins_in_a_row) setStats(true); // Stats on when enough wins // Note: if 2 of the last 3 games are won: the stat setting isn't changed. (With the default options) if (show_results) { var iconify = {true: "☀ ", false: "· " }; // Translation from Boolean to these icons var results = iconify[GM_getValue("result1")] + iconify[GM_getValue("result2")] + iconify[GM_getValue("result3")]; chat_alert("Results from the last 3 games: " + results); // Alerts you when the stat setting was updated. } if(debug)console.log('TP-ASS: Done! And hopefully succeeded xD'); }); });