您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds extra filters for tournaments and dashboard games, including a fun filter that brings up a strange mix of games. Allows note-taking in games. A couple of easter eggs are also included.
当前为
// ==UserScript== // @name Jz Warlight // @namespace https://greasyfork.org/en/users/44200-jz // @version 1.3.1 // @grant none // @match https://www.warlight.net/* // @match https://www.warzone.com/* // @description Adds extra filters for tournaments and dashboard games, including a fun filter that brings up a strange mix of games. Allows note-taking in games. A couple of easter eggs are also included. // ==/UserScript== main(); function main() { try{ setupSettings(); var filter_setting = localStorage.getItem('setting_extra_filters'); if(pageIsDashboard()) { if(filter_setting == 'true') { //$("#MyGamesFilter").append('<option value="0">Games that are active</option>'); $("#MyGamesFilter").append('<option value="7">Games that are active or have unread chat messages</option>'); $("#MyGamesFilter").append('<option value="3">Weird Filter (Non-Archived Games)</option>'); } } if(pageIsTournaments()) { var muli_setting = localStorage.getItem('setting_enhance_muli'); if(muli_setting == 'true') { // Add filters for tournaments, to expand the functionality Muli provided var filter = $('<select id="tournamentFilter" title="After updating the tournament data using Muli\'s script, pick a filter." style="float: right;margin: 0 10px;"/>'); filter.append($('<option value="showAll">Show all</option>')); filter.append($('<option value="showGamesLeft">Tournaments with games left</option>')); filter.append($('<option value="showInProgress">Tournaments with games in progress</option>')); filter.append($('<option value="showNotEliminated">Tournaments that I am not eliminated from</option>')); filter.append($('<option value="showAlmostDone">Tournaments that are almost done</option>')); filter.append($('<option value="showCoin">Coin Tournaments</option>')); filter.on("change", function () { var selected = $( this ).val(); var tds = $("td .tournamentData"); for(var i = 0; i < tds.length; i++) { var td = tds[i]; var parentTr = $(td).parent('tr'); if(selected == "showAll") { parentTr.show(); } else if(selected == "showGamesLeft") { if(td.innerHTML.indexOf('<font color="#858585">Games left:</font> None <br>') > 0) { parentTr.hide(); } else { parentTr.show(); } } else if(selected == "showInProgress") { if(td.innerHTML.indexOf('<font color="#858585">Playing:</font> 0 <br>') > 0) { parentTr.hide(); } else if(td.innerHTML.indexOf('<font color="#858585">Playing:</font>') > 0) { parentTr.show(); } else { parentTr.hide(); } } else if(selected == "showNotEliminated") { // Show round robins, tournaments with games in progress, and tournaments with games left if(parentTr.html().indexOf('Round robin tournament') >= 0) { parentTr.show(); } else if(td.innerHTML.indexOf('<font color="#858585">Playing:</font>') > 0 && td.innerHTML.indexOf('<font color="#858585">Playing:</font> 0 <br>') == -1) { parentTr.show(); } else if(td.innerHTML.indexOf('<font color="#858585">Games left:</font> None <br>') == -1) { parentTr.show(); } else { parentTr.hide(); } } else if(selected == "showAlmostDone") { if(td.innerHTML.indexOf('Almost done') > 0) { parentTr.show(); } else { parentTr.hide(); } } else if(selected == "showCoin") { if(parentTr.html().indexOf('https://d2wcw7vp66n8b3.cloudfront.net/Images/Coins/SmallCoins.png') != -1) { parentTr.show(); } else { parentTr.hide(); } } } }); $("#MyTournamentsTable h2").after(filter); } } if(pageIsPastTournaments()) { if(filter_setting == 'true') { //$("#Filter").append('<option value="4">Actionable</option>'); $("#Filter").append('<option value="5">Tournaments with unread chat</option>'); //$("#Filter").append('<option value="6">Actionable or unread chat</option>'); //$("#Filter").append('<option value="8">Not Complete that I joined</option>'); } } if(pageIsGame()) { var note_setting = localStorage.getItem('setting_enable_notes'); if(note_setting == 'true') { setupNotes(); } } // Reimplement Alt tagging /*// Tag alts (alts retrieved from the library) for(var main_count = 0; main_count < mains.length; main_count++) { var main = mains[main_count]; for(var alt_count = 0; alt_count < main.alts.length; alt_count++) { var alt = main.alts[alt_count]; if(poster_id == alt) { var username = poster_cell.html(); poster_cell.html(username + " (" + main.name + ")"); } } }*/ var today = new Date(); var april_fools = today.getDate() == 1 && today.getMonth() == 3; if(april_fools) { aprilFools(); } var troll_setting = localStorage.getItem('setting_troll_players'); if(april_fools || troll_setting == 'true') { playerTrolls(); } var extra_features = localStorage.getItem('setting_extra_features'); if((april_fools || extra_features == 'true')) { extraFeatures(); } } catch(err) { console.log(err); } } function getPosterAnchor(tdCell) { var posterCell = tdCell.find('a[href*="/Profile?p="]').first(); return posterCell; } function getPosterId(posterCell) { if(posterCell !== undefined && posterCell != null){ var postAuthor = posterCell.attr("href"); if(postAuthor != null && postAuthor.length > 11) { return postAuthor.substring(11); } } return null; } function flipLevel(level) { if(level.length == 1) { return level + "0"; } else { return level.substring(1) + level.substring(0,1); } } function setupSettings() { $("#AccountDropDown").parent().find("div .dropdown-divider").before('<div class="dropdown-item" id="jz-userscript-menu" style="cursor:pointer" data-toggle="modal" data-target="#settingsdialog">Jz\'s Userscript</div>'); var modalhtml = '' modalhtml += '<div class="modal" tabindex="-1" role="dialog" id="settingsdialog">' modalhtml += ' <div class="modal-dialog" role="document">' modalhtml += ' <div class="modal-content">' modalhtml += ' <div class="modal-header" style="color:#b3b081;background-color:#330000;height:40px">' modalhtml += ' <h5 class="modal-title">Settings (Automatically Saved)</h5>' modalhtml += ' <button type="button" class="close" data-dismiss="modal" aria-label="Close">' modalhtml += ' <span aria-hidden="true" style="color:#b3b081">×</span>' modalhtml += ' </button>' modalhtml += ' </div>' modalhtml += ' <div class="modal-body" id="settingsbody" style="color:#b3b081;background-color:#171717">' modalhtml += ' </div>' modalhtml += ' </div>' modalhtml += ' </div>' modalhtml += '</div>' var settings_modal=$(modalhtml) $('body').append(settings_modal) var settings_body = $("#settingsbody") addSetting(settings_body, "Enable Note Taking", "setting_enable_notes", "true", "Allow note taking in games"); addSetting(settings_body, "Add extra filters", "setting_extra_filters", "true", "Add extra filters to the dashboard and past tournaments pages"); addSetting(settings_body, "Add features to enhance Muli's userscript", "setting_enhance_muli", "true", "If muli's script is installed, add features to enhance it."); addSetting(settings_body, "Enable Special Features (fun feature)", "setting_extra_features", "false", "Enable the secret easter egg features"); addSetting(settings_body, "Allow Audio Features (fun feature)", "setting_audio_features", "false", "Enable the secret easter egg features that use audio"); addSetting(settings_body, "Player Trolls (fun feature)", "setting_troll_players", "false", "Enable features that troll certain players (including yourself, if relevant)."); } function addSetting(settings_dialog, label, id, default_val, title) { var setting_header = $('<label for="setting_' + id + '" title="' + title + '">' + label + '</label>'); var setting = $('<input type="checkbox" id="setting_' + id + '"/>'); settings_dialog.append(setting); settings_dialog.append(setting_header); settings_dialog.append($('<br/>')); var stored_value = localStorage.getItem(id); if(stored_value == null) { stored_value = default_val; localStorage.setItem(id, default_val); } if(stored_value == 'true') { setting.prop('checked', true); } setting.on('change', function() { if(setting.prop('checked')) { localStorage.setItem(id, 'true'); } else { localStorage.setItem(id, 'false'); } }); } /** * Create a CSS selector * Taken from Muli's Userscript and renamed from createSelector (to avoid conflict): https://greasyfork.org/en/scripts/8936-tidy-up-your-dashboard * @param name The name of the object, which the rules are applied to * @param rules The CSS rules */ function addStyle(name, rules) { var style = document.createElement('style'); style.type = 'text/css'; document.getElementsByTagName('head')[0].appendChild(style); if (!(style.sheet || {}).insertRule) { (style.styleSheet || style.sheet).addRule(name, rules); } else { style.sheet.insertRule(name + "{" + rules + "}", 0); } } function setupNotes() { // Create the minimized notes var modalhtml = '' modalhtml += '<div class="panel" tabindex="-1" id="notesdialogmini">' modalhtml += ' <div class="modal-dialog" role="document" style="border: 2px solid;border-radius: 5px;max-width:100px;position:fixed;bottom:0px;right:0px;margin:0px;padding:0px">' modalhtml += ' <div class="modal-content" style="color:#b3b081">' modalhtml += ' <div class="modal-header" id="notesheadermini" style="border:0px;color:#b3b081;background-color:#330000;padding:5px;height:15px">' modalhtml += ' <span aria-hidden="true" id="notesopen" style="cursor:pointer;font-size:x-small">Notes</span>' modalhtml += ' </div>' modalhtml += ' </div>' modalhtml += ' </div>' modalhtml += '</div>' var notes_modal2=$(modalhtml) $('body').append(notes_modal2) // Create the popup for the notes var modalhtml = '' modalhtml += '<div class="panel" tabindex="-1" id="notesdialog">' modalhtml += ' <div class="modal-dialog" role="document" style="max-width:340px;position:fixed;bottom:0px;right:0px;margin:0px">' modalhtml += ' <div class="modal-content">' modalhtml += ' <div class="modal-header" id="notesheader" style="color:#b3b081;background-color:#330000;height:35px">' modalhtml += ' <h5 class="modal-title">Notes</h5>' modalhtml += ' <button type="button" class="close" id="notesminimize" aria-label="Minimize">' modalhtml += ' <span aria-hidden="true" style="color:#b3b081">-</span>' modalhtml += ' </button>' modalhtml += ' </div>' modalhtml += ' <div class="modal-body" id="notesbody" style="color:#b3b081;background-color:#171717">' modalhtml += ' <textarea id="GameNotes" rows="4" cols="30"/>' modalhtml += ' </div>' modalhtml += ' </div>' modalhtml += ' </div>' modalhtml += '</div>' var notes_modal=$(modalhtml) notes_modal.hide(); $('body').append(notes_modal) // Add the notes header to the Multi-Player Menu var notesHeader = $('<div class="dropdown-item" id="NotesHeader" style="cursor:pointer">Notes</div>'); $("#CreateGameLink").after(notesHeader); // Setup note display events notesHeader.on('click', function() { notes_modal.show(); notes_modal2.hide(); }); var notes_minimize=$("#notesminimize") notes_minimize.on('click', function() { notes_modal.hide(); notes_modal2.show(); }); var notes_open=$("#notesopen") notes_open.on('click', function() { notes_modal.show(); notes_modal2.hide(); }); // Parse the gameid var gameid = getGameID(); // Create the events // Save the note automatically var gameNotes = $("#GameNotes") gameNotes.on('change', function() { saveNote(gameNotes, gameid); }); // Populate the notes field and set the background color for the notes var notes = getNotesFromStorage(); var note = notes[gameid]; if(note != null && note.value != null && note.value.length > 0) { gameNotes.val(note.value); notes_modal.show(); // Resaving it updates the timestamp saveNote(gameNotes, gameid); } colorNotesHeader(gameNotes); } function getGameID() { var gameid = location.href.substring(location.href.indexOf('GameID=') + 7) if(gameid.indexOf('&') > 0) { gameid = gameid.substring(0, gameid.indexOf('&')); } return gameid; } function getNotesFromStorage() { var notesString = localStorage.getItem("notes"); if(notesString != null) { return JSON.parse(notesString); } else { return {}; } } function saveNotesToStorage(notes) { localStorage.setItem("notes", JSON.stringify(notes)); } function saveNote(gameNotes, gameid) { var notes = getNotesFromStorage(); var note = notes[gameid]; if(note == null) { note = {}; } note.date = new Date(); note.value = gameNotes.val(); notes[gameid] = note; if(note.value == null || note.value.length == 0) { delete notes[gameid]; } //alert(JSON.stringify(notes)); saveNotesToStorage(notes); colorNotesHeader(gameNotes); } function colorNotesHeader(gameNotes) { var notesHeader = $("#NotesHeader") var miniNotesHeader = $("#notesheadermini") miniNotesHeader.css('font-style','normal'); var color = ""; if(gameNotes.val() != null && gameNotes.val().length > 0) { color = '#FFAA00'; miniNotesHeader.css('font-style','italic'); } notesHeader.css('color',color); } function pageIsDashboard() { return location.href.match(/.*warzone[.]com\/MultiPlayer\/#?$/i); } function pageIsTournaments() { return location.href.match(/.*warzone[.]com\/MultiPlayer\/Tournaments\/$/i); } function pageIsPastTournaments() { return location.href.match(/.*warzone[.]com\/MultiPlayer\/Tournaments\/Past/i); } function pageIsGame() { return location.href.match(/.*warzone[.]com\/MultiPlayer\?GameID=/i); } function pageIsForum() { return location.href.match(/.*warzone[.]com\/Forum/i); } // "Troll" content below function aprilFools() { var level = $('#LevelLink i').html().substring(1); var newlevel = flipLevel(level) if(level != null) { $('#LevelLink i').html("L" + newlevel); } var headers = $("#navbarSupportedContent ul li"); if(headers) { headers.each(function(i, header) { var anchor = $(header).find("a").first(); anchor.text(anslatetray(anchor.text())); }); } if(pageIsForum()) { var firstpost = $($("#PostTbl_0").find("td")[1]).find("div"); var postcontent = firstpost.html(); firstpost.html(anslatetray(postcontent)) var forumPosts = $("[id^=PostTbl]"); for(var i = 0; i < forumPosts.length; i++) { var post = forumPosts[i]; var tds = $(post).find("td"); var tdCell = $(post).find("td:first"); var poster_cell = getPosterAnchor(tdCell); var poster_id = getPosterId(poster_cell); if(poster_id != null) { if(tdCell.html() != null && poster_id != null) { var levelstart = tdCell.html().indexOf('Level'); if(levelstart > 0) { var level = tdCell.html().substring(levelstart+6, levelstart + 8).trim(); var newlevel = flipLevel(level); tdCell.html(tdCell.html().replace('Level ' + level, 'Level ' + newlevel)); } } } }; //MOTD changeAvatar('2428496679', "http://icons.iconarchive.com/icons/giannis-zographos/english-football-club/256/Liverpool-FC-icon.png"); // Styx changeAvatar('1552135718', "https://lh3.googleusercontent.com/-iDzlv7IG4rY/AAAAAAAAAAI/AAAAAAACsik/FnDXDKxLt5I/s0-c-k-no-ns/photo.jpg"); } var date = new Date(); if(date.getMilliseconds() <= 50) { $("#MailImgNormal").hide(); $("#MailImgFlashing").show(); $("#MailLink").attr("href", "https://www.warlight.net/Forum/154263-troll-awards-war-begins"); return true; } } // Change avatars and give profile theme songs function playerTrolls() { var today = new Date(); if(pageIsForum()) { if(today.getMonth() == 6 && today.getFullYear() == 2017) { // MOTD changeAvatar('2428496679', "https://hdlogo.files.wordpress.com/2011/11/real-salt-lake-city-hd-logo.png"); // Styx changeAvatar('1552135718', "https://hdlogo.files.wordpress.com/2011/11/real-salt-lake-city-hd-logo.png"); } // Nero changeAvatar('397429597', "https://lh3.googleusercontent.com/-iDzlv7IG4rY/AAAAAAAAAAI/AAAAAAACsik/FnDXDKxLt5I/s0-c-k-no-ns/photo.jpg"); } var audio_features = localStorage.getItem('setting_audio_features'); // Platinum if(location.href.match(/.*warzone[.]com\/Profile\?p=6559504553/i) || location.href.match(/.*warzone[.]com\/Profile\?p=5550827655/i)) { addThemeSongToProfile(audio_features, "8Gv0H-vPoDc"); } //After Dark replaceClanIcon("155", "http://static.skaip.org/img/emoticons/180x180/f6fcff/poop.gif", 18, 18); } // Other extra features, such as changed titles. function extraFeatures() { var audio_features = localStorage.getItem('setting_audio_features'); try{ var hiddenThreads = $('tr#HiddenThreadsRow').first().find("font:first"); if(hiddenThreads!= null && hiddenThreads.text().match(/[54]\d hidden threads/i) != null) { lotsOfHiddenThreads(hiddenThreads); } } catch (e) { alert(e); } var profilelink = $('a[href*="/Profile?p="]').first(); var linkhref = profilelink.attr("href"); var profid = linkhref.substring(linkhref.indexOf("=")+1); var date = new Date(); var day = date.getDay(); if(date.getHours() >= 0 && date.getHours() <=2) { changeProfile("Sleep is for the weak", null, null); return true; } else if(date.getHours() > 2 && date.getHours() <= 5) { changeProfile("Seriously, why are you awake at this hour?", null, null); return true; } if(profid == '2214950915') { if(day = 2) { changeProfile('Master of Disaster', null, '0'); } else if(day == 3) { changeProfile('Elitist', 'L99', '999999'); } } else if(profid == '6319040229') { if(day == 2) { changeProfile('Jefferspoon', null, '-35'); } if((day == 6)) { if(date.getMilliseconds() < 50) { var player2 = document.createElement("iframe"); player2.setAttribute("src", "https://www.youtube.com/embed/jsduOOI_EGE?autoplay=1&autohide=1&border=0&wmode=opaque&enablejsapi=1"); player2.width = 5; player2.height = 5; document.body.appendChild(player2); } } } else if(profid == '2428496679') { if(day == 2) { changeProfile('Miles Edgeworth', 'L59', null); } else if(day == 3) { changeProfile('Mercer', 'L31', null); } else if(day == 1) { changeProfile(null, 'L61', null); } } else if(profid == '9911415828') { if(day == 2) { changeProfile('Master Sephiroth', 'L1', '180479'); } } return false; } function changeProfile(username, level, coins) { if(username != null) { $('#AccountDropDown').first().html(username); } if(level != null) { $('#LevelLink i').html(level); } if(coins != null) { var coinsobj = $('#CoinsText'); //coins.html(coins.html() * 100); coinsobj.html(coins); } } function changeAvatar(player, src) { var selector = 'a[href*="/Profile?p=' + player + '"]'; var player_as = $(selector); for(var i = 0; i < player_as.length; i++) { var link = $(player_as[i]); var tdCell = link.parent(); if(tdCell.is('TD')) { var image1 = $(tdCell).find("img:first"); if(image1 != null && image1.attr('src').indexOf('https://s3.amazonaws.com/data.warlight.net/Data/Players') == 0) { image1.attr('src', src); } else { tdCell.prepend('<br/><img src="' + src + '" border="0" width="50" height="50" />'); } } } } function replaceClanIcon(clanId, url, width, height) { var selector = 'a[href*="/Clans/?ID=' + clanId + '"]'; var icon_as = $(selector); for(var i = 0; i < icon_as.length; i++) { var icon_a = $(icon_as[i]); var img = icon_a.find("img")[0]; img.src = url; img.width = width; img.height = height; } } function lotsOfHiddenThreads(hiddenThreads) { var hiddenrow = $('tr#HiddenThreadsRow').first(); var audio_features = localStorage.getItem('setting_audio_features'); if(audio_features == 'true') { var player2 = document.createElement("iframe"); player2.setAttribute("src", "https://www.youtube.com/embed/zq7Eki5EZ8o?autoplay=1&autohide=1&border=0&wmode=opaque&enablejsapi=1"); player2.width = 60; player2.height = 40; hiddenThreads.append(player2); } else { var player2 = document.createElement("div"); $(player2).html("<a href=\"https://www.youtube.com/watch?v=zq7Eki5EZ8o\">Can't nothin bring me shame</a>"); hiddenThreads.append(player2); } } function addThemeSongToProfile(audio_features, youtube_link) { if(audio_features == 'true') { var player2 = document.createElement("iframe"); player2.setAttribute("src", "https://www.youtube.com/embed/" + youtube_link + "?autoplay=1&autohide=1&border=0&wmode=opaque&enablejsapi=1"); player2.width = 5; player2.height = 5; document.body.append(player2); } var theme = document.createElement("small"); $(theme).html("<br/><span>Theme Song: </span><a href=\"https://www.youtube.com/watch?v=" + youtube_link + "\">https://www.youtube.com/watch?v=" + youtube_link + "</a><span></span>"); $("big").append(theme); } function anslatetray(post) { var new_post = ""; var suffix = ""; var suffix_end = false; var chars = post.split(''); var open_br = false; var capital = false; for(var i = 0; i < chars.length; i++) { var character = chars[i]; if(character == ">") { open_br = false; new_post += character; } else if(character == "<") { open_br = true; if(suffix != "") { new_post += suffix + "ay"; suffix = ""; suffix_end = false; } new_post += character; } else if(open_br) { new_post += character; } else if(character.match(/[a-zA-Z]/g) == null) { if(suffix != "") { new_post += suffix + "ay"; suffix = ""; } suffix_end = false; new_post += character; } else if(suffix_end) { new_post += character; } else if(character.match(/[aeiouAEIOU]/g) != null) { suffix_end = true; if(capital) { new_post += character.toUpperCase(); } else { new_post += character; } if(suffix == '') { suffix += 'w' } } else { if(suffix == "") { if(character.match(/[A-Z]/g) != null) { capital = true; suffix += character.toLowerCase(); } else { capital = false; suffix += character; } } else { suffix += character; } } } if(suffix != "") { new_post += suffix + "ay"; suffix = ""; } return new_post; }