您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a SWAP and PLAY_100 button to IDE
当前为
// ==UserScript== // @name CG Multiplayer Helper // @namespace http://hentschels.com/ // @version 0.1 // @description Adds a SWAP and PLAY_100 button to IDE // @author danBhentschel // @match https://www.codingame.com/ide/* // @grant none // @require http://code.jquery.com/jquery-latest.js // ==/UserScript== (function() { 'use strict'; var g_stopPlay100; $(document).on('DOMNodeInserted', checkForAgentPanel); function checkForAgentPanel(event) { if ($(event.target).is('.cg-ide-agents-management') && $('.cg-ide-agents-management > .scroll-panel').length) { $(document).off('DOMNodeInserted', checkForAgentPanel); createSwapButton(); createPlay100Button(); createStopButton(); } } function createSwapButton() { var panel = $('.cg-ide-agents-management > .scroll-panel'); var swapButton = document.createElement('BUTTON'); swapButton.innerHTML = 'SWAP'; swapButton.setAttribute('id', 'pOneSwapButton'); swapButton.style.padding = '5px 5px 5px 5px'; panel.append(swapButton); console.log('P_ONE: Create SWAP button'); $('#pOneSwapButton').click(swapClicked); } function swapClicked() { console.log('P_ONE: SWAP clicked'); var agentNames = getAgentNames(); deleteAgents(agentNames); addAgents(agentNames); } function getAgentNames() { var agentNames = []; $('.agent').each(function(index) { agentNames[index] = $(this).find('.nickname').text(); }); return agentNames; } function deleteAgents(agentNames) { $('.delete-button').each(function(index) { console.log('P_ONE: Click DELETE for ' + agentNames[index]); $(this).click(); }); } function addAgents(agentNames) { addAgent($('.add-player-square'), agentNames, 0); } function addAgent(buttons, agentNames, position) { if (position >= agentNames.length) return; var nameIndex = (position + 1) % agentNames.length; var wantedAgentName = agentNames[nameIndex]; console.log('P_ONE: Click ADD for ' + wantedAgentName + ' in position ' + position); buttons.eq(position).click(); setTimeout(() => { checkForPlayerSelector(buttons, agentNames, wantedAgentName, position); }, 500); } function checkForPlayerSelector(buttons, agentNames, wantedAgentName, position) { var searchBox = $('.field'); if (searchBox.length && searchBox.closest('.searchfield').length) { selectAgentToAdd(buttons, agentNames, wantedAgentName, position); } else { setTimeout(() => { checkForPlayerSelector(buttons, agentNames, wantedAgentName, position); }, 500); } } function selectAgentToAdd(buttons, agentNames, wantedAgentName, position) { searchForAgent(wantedAgentName); setTimeout(() => { addSpecificAgent(buttons, agentNames, wantedAgentName, position); }, 200); } function addSpecificAgent(buttons, agentNames, wantedAgentName, position) { var found = false; $('.player-add-card').each(function() { var agentCardName = $(this).find('.agent-card-nickname').text(); if (agentCardName == wantedAgentName) { console.log('P_ONE: Found ' + agentCardName); $(this).find('.add-agent-button').click(); found = true; return false; } }); if (found) { addAgent(buttons, agentNames, position + 1); } else { setTimeout(() => { addSpecificAgent(buttons, agentNames, wantedAgentName, position); }, 200); } } function searchForAgent(agentName) { var searchBox = $('.field'); console.log('P_ONE: Search for ' + agentName); searchBox.val(agentName); searchBox[0].focus(); pressEnter(searchBox[0]); } function pressEnter(element) { pressKey(13, element); } function pressKey(k, element) { var oEvent = document.createEvent('KeyboardEvent'); // Chromium Hack Object.defineProperty(oEvent, 'keyCode', { get : function() { return this.keyCodeVal; } }); Object.defineProperty(oEvent, 'which', { get : function() { return this.keyCodeVal; } }); if (oEvent.initKeyboardEvent) { oEvent.initKeyboardEvent("keydown", true, true, document.defaultView, false, false, false, false, k, k); } else { oEvent.initKeyEvent("keydown", true, true, document.defaultView, false, false, false, false, k, 0); } oEvent.keyCodeVal = k; if (oEvent.keyCode !== k) { alert("keyCode mismatch " + oEvent.keyCode + "(" + oEvent.which + ")"); } element.dispatchEvent(oEvent); } function createPlay100Button() { var panel = $('.cg-ide-agents-management > .scroll-panel'); var play100Button = document.createElement('BUTTON'); play100Button.innerHTML = 'PLAY_100'; play100Button.setAttribute('id', 'pOnePlay100Button'); play100Button.style.padding = '5px 5px 5px 5px'; panel.append(play100Button); console.log('P_ONE: Create PLAY_100 button'); $('#pOnePlay100Button').click(play100Clicked); } function play100Clicked() { console.log('P_ONE: PLAY_100 clicked'); g_stopPlay100 = false; $('#pOneStopButton').show(); $('#pOnePlay100Button').hide(); startPlay(1, { names: [], record: {} }); } function startPlay(iteration, results) { if (iteration > 100 || g_stopPlay100) { $('#pOneStopButton').hide(); $('#pOnePlay100Button').show(); return; } console.log('Play ' + pad(iteration)); $('.play').click(); setTimeout(() => { checkForResult(iteration, results); }, 200); } function pad(num) { var s = "00" + num; return s.substr(s.length-3); } function checkForResult(iteration, results) { var rankedNames = $('.cg-ide-mini-leaderboard').find('.nickname'); if ($('.play').is(':disabled') || rankedNames.length === 0) { setTimeout(() => { checkForResult(iteration, results); }, 200); } else { rankedNames.each(function(index) { var name = $(this).text(); if (!results.record.hasOwnProperty(name)) { results.names.push(name); results.record[name] = 0; } if (index === 0) results.record[name]++; }); logResults(results); startPlay(iteration + 1, results); } } function logResults(results) { var report = ''; for (var i = 0; i < results.names.length; i++) { var name = results.names[i]; report += name + ': ' + results.record[name] + ' '; } console.log(report); } function createStopButton() { var panel = $('.cg-ide-agents-management > .scroll-panel'); var stopButton = document.createElement('BUTTON'); stopButton.innerHTML = 'STOP'; stopButton.setAttribute('id', 'pOneStopButton'); stopButton.style.padding = '5px 5px 5px 5px'; panel.append(stopButton); console.log('P_ONE: Create STOP button'); $('#pOneStopButton').click(stopClicked); $('#pOneStopButton').hide(); } function stopClicked() { g_stopPlay100 = true; console.log('P_ONE: STOP requested. Stopping at next opportunity'); } })();