您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Use gg's to get statistics about maps! tagpro.page.link/gg
// ==UserScript== // @name TagPro Good Games // @description Use gg's to get statistics about maps! tagpro.page.link/gg // @author Ko // @version 1.6 // @supportURL https://www.reddit.com/message/compose/?to=Wilcooo // @website https://tagpro.page.link/gg // @include http://tagpro-*.koalabeast.com:* // @include http://tagpro-*.koalabeast.com/game // @connect script.google.com // @connect script.googleusercontent.com // @grant GM_getValue // @grant GM_setValue // @license MIT // @namespace https://greasyfork.org/users/152992 // ==/UserScript== //----------------------------------------------------------------// // // // TL;DR: DO NOT EDIT THIS SCRIPT !! // // // // This script will collect some data of the games // // that you play. To see all data, you can go to // // tagpro.page.link/gg. No other data than what is // // visible on the 'rawData' sheet is sent. If you // // don't want your username to be stored, enable // // 'anonymity' in the options below. Even with it // // enabled, it is theoretically possible for // // someone to find out that you use this script, by // // comparing the data with that of TagPro Analytics // // (tagpro.eu) // // // // Please do not alter this script in any way, as // // it may pollute the data. It would be // // exceptionally lame if a mapmaker gave his/her // // own map synthetic GGs. // // // // If, however, you really want to play with this // // script, make sure to remove the POST_URL below, // // or change it to a fake URL. // // // // TL;DR: DO NOT EDIT THIS SCRIPT !! // // // //----------------------------------------------------------------// //////////////////////////////////////////////////////////////////////////////////////////// // ### --- OPTIONS --- ### // //////////////////////////////////////////////////////////////////////////////////////// // // // // By changing false to true, your TagPro username won't be send with the data. // // // and the 'uniqueID' will be changed. // // var anonymity = false; // // // // //////////////////////////////////////////////////////////////////////////////////////// // // ### --- END OF OPTIONS --- ### // //////////////////////////////////////////////////////////////////////////////////////////// // The URL to post the data to var POST_URL = "https://script.google.com/macros/s/AKfycbzZcmWaKvendh1ziz2mloTWJvsMMTbmZcPy_HUgT4yrtvh6SguC/exec"; // Remove the slashes (//) before the next line if you want to play with this script. // Don't send false data to the real URL. // var POST_URL = "http://www.example.com/_This_Is_A_Fake_URL_" // All data will be stored in this var var data = {}; // Get your unique id from the userscripts storage, or create a new one. // This is used to detect data manipulation function generateID(storage){ var ID = ""; var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; for (var n = 0; n < 16; n++) ID += chars.charAt(Math.floor(Math.random() * chars.length)); GM_setValue(storage,ID); return uniqueID; } // There is a seperate anonymousID var whichID = anonymity ? 'anonymousID' : 'normalID'; data.uniqueID = GM_getValue( whichID ) || generateID( whichID ); // To prevent players to be able to say 'gg' multiple times, // this var keeps track of who have said 'gg' before, and when. var saidGG = {}; tagpro.ready(function() { // This socket sends the map name and author // after you join a game. tagpro.socket.on('map', function(map) { data.map = map.info.name; data.author = map.info.author; }); // Intercept every chat message tagpro.socket.on('chat', function(chat) { if (chat.message.toLowerCase().includes('gg') && // If it's a GG Number.isInteger( chat.from ) && // and it's from a player (not a mod/groupmember) chat.to == 'all' ) { // and it's sent to all (not team) // Store it saidGG[ chat.from ] = { time: Date.now(), team: tagpro.players[chat.from].team }; } }); tagpro.socket.on('end', function(end) { var min_time = Date.now() - 10e3; // Basic info of the game and the player data.gameEndsAt = tagpro.gameEndsAt.getTime(); data.server = tagproConfig.serverHost.replace('tagpro-','').replace('.koalabeast.com',''); data.group = Boolean( end.groupId ); data.name = anonymity || tagpro.spectator ? "" : tagpro.players[tagpro.playerId].name; data.auth = anonymity || tagpro.spectator ? "" : tagpro.players[tagpro.playerId].auth; data.redScore = tagpro.score.r; data.blueScore = tagpro.score.b; // Count the number of players per team data.redPlayers = 0; data.bluePlayers = 0; for (var id in tagpro.players) { if (tagpro.players.hasOwnProperty(id)) { if (tagpro.players[id].team == 1) data.redPlayers++; if (tagpro.players[id].team == 2) data.bluePlayers++; } } // Data is only sent when you stay at least 24 seconds after the game ends setTimeout( function() { // wait for the page to unload... window.addEventListener("beforeunload", function () { // Count the GG's per team data.redGG = 0; data.blueGG = 0; for (var id in saidGG) { if ( saidGG[id].time > min_time ) { if ( saidGG[id].team == 1 ) data.redGG++; if ( saidGG[id].team == 2 ) data.blueGG++; } } // Send the data! $.post( POST_URL, data ); }); }, 24e3); }); });