您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Add a pivot table at the top of the game page and allow you to add shortcuts to run console scripts.
// ==UserScript== // @name Quick Bar - For Console Scripts -TribalWars // @version 1.0 // @description Add a pivot table at the top of the game page and allow you to add shortcuts to run console scripts. // @author StonyBaboon // @match *://*/game.php?*village=* // @grant none // @license CC BY-NC-ND 4.0 // @namespace https://greasyfork.org/users/1378628 // ==/UserScript== // Function to insert the table above the specified <br>, if the table does not exist function inserirTabelaAcima() { // Check if the table with the ID "quickbar_inner" already exists if (!document.getElementById('quickbar_inner')) { // Select the <br> element with the class "newStyleOnly" var referenceBr = document.querySelector('br.newStyleOnly'); // Check if the reference element was found if (referenceBr) { // Create the new table element var novaTabela = document.createElement('table'); novaTabela.id = 'quickbar_inner'; novaTabela.style.borderCollapse = 'collapse'; novaTabela.style.width = '100%'; novaTabela.style.backgroundImage = 'url(https://dspt.innogamescdn.com/asset/1e5b6b81/graphic/index/main_bg.jpg)'; novaTabela.innerHTML = ` <br><tbody> <tr class="topborder"> <td class="left"> </td> <td class="main"> </td> <td class="right"> </td> </tr> <tr> <td class="left"> </td> <td id="quickbar_contents" class="main"> <!-- The menu content will be inserted dynamically --> </td> <td class="right"> </td> </tr> <tr class="bottomborder"> <td class="left"> </td> <td class="main" style="text-align: right;"> <!-- Right alignment --> <!-- "+" button will be inserted here --> <a href="#" id="addButton" class="btn">+</a> </td> <td class="right"> </td> </tr> <tr> <td class="shadow" colspan="3"> <div class="leftshadow"> </div> <div class="rightshadow"> </div> </td> </tr> </tbody> `; // Insert the new table above (before) the reference <br> referenceBr.parentNode.insertBefore(novaTabela, referenceBr); // Initialize the menu after the table is created inicializarMenu(); } } } // Function to initialize the menu function inicializarMenu() { // Clear the existing menu var menuContainer = document.getElementById('quickbar_contents'); if (!menuContainer) { console.error("Element 'quickbar_contents' not found."); return; } menuContainer.innerHTML = ''; // Retrieve saved items from localStorage var itensMenu = JSON.parse(localStorage.getItem('quickbarItens')) || []; // Add menu items itensMenu.forEach(function (item) { if (item.type === 'command') { adicionarItemMenu(item.text, item.imageUrl, item.command); } else if (item.type === 'break') { adicionarQuebraDeLinha(); } }); // Configure the "+" button to add new items configurarBotaoAdicionar(); } // Function to configure the "+" button function configurarBotaoAdicionar() { var addButton = document.getElementById('addButton'); if (!addButton) { console.error("Add button not found."); return; } // Add click event to the "+" button addButton.addEventListener('click', function (e) { e.preventDefault(); mostrarOpcoesAdicionar(e.clientX, e.clientY); }); } // Function to show the add options function mostrarOpcoesAdicionar(x, y) { // Remove previous options, if any var opcoesExistentes = document.getElementById('opcoesAdicionar'); if (opcoesExistentes) { document.body.removeChild(opcoesExistentes); } var opcoesContainer = document.createElement('div'); opcoesContainer.id = 'opcoesAdicionar'; opcoesContainer.style.position = 'absolute'; opcoesContainer.style.left = x + 'px'; // Align horizontally with the button opcoesContainer.style.top = (y + 20) + 'px'; // Place below the button opcoesContainer.style.background = '#f9f9f9'; opcoesContainer.style.border = '1px solid #ccc'; opcoesContainer.style.boxShadow = '0px 0px 10px rgba(0,0,0,0.5)'; opcoesContainer.style.zIndex = '1000'; var opcaoAdicionarComando = document.createElement('div'); opcaoAdicionarComando.textContent = 'Add Command'; opcaoAdicionarComando.style.padding = '10px'; opcaoAdicionarComando.style.cursor = 'pointer'; opcaoAdicionarComando.addEventListener('click', function () { adicionarNovoComando(); document.body.removeChild(opcoesContainer); }); var opcaoAdicionarQuebra = document.createElement('div'); opcaoAdicionarQuebra.textContent = 'Add Line Break'; opcaoAdicionarQuebra.style.padding = '10px'; opcaoAdicionarQuebra.style.cursor = 'pointer'; opcaoAdicionarQuebra.addEventListener('click', function () { adicionarQuebraDeLinha(); salvarMenu(); document.body.removeChild(opcoesContainer); }); var opcaoCarregarArquivo = document.createElement('div'); opcaoCarregarArquivo.textContent = 'Load Commands from File'; opcaoCarregarArquivo.style.padding = '10px'; opcaoCarregarArquivo.style.cursor = 'pointer'; opcaoCarregarArquivo.addEventListener('click', function () { carregarComandosDeArquivo(); document.body.removeChild(opcoesContainer); }); var opcaoLimparMemoria = document.createElement('div'); opcaoLimparMemoria.textContent = 'Clear Memory'; opcaoLimparMemoria.style.padding = '10px'; opcaoLimparMemoria.style.cursor = 'pointer'; opcaoLimparMemoria.addEventListener('click', function () { if (confirm('Are you sure you want to clear the memory? This action cannot be undone.')) { limparMemoria(); document.body.removeChild(opcoesContainer); } }); var opcaoExportarTabela = document.createElement('div'); opcaoExportarTabela.textContent = 'Export Table'; opcaoExportarTabela.style.padding = '10px'; opcaoExportarTabela.style.cursor = 'pointer'; opcaoExportarTabela.addEventListener('click', function () { exportarTabela(); document.body.removeChild(opcoesContainer); }); opcoesContainer.appendChild(opcaoAdicionarComando); opcoesContainer.appendChild(opcaoAdicionarQuebra); opcoesContainer.appendChild(opcaoCarregarArquivo); opcoesContainer.appendChild(opcaoLimparMemoria); // Add the clear memory option opcoesContainer.appendChild(opcaoExportarTabela); // Add the export table option document.body.appendChild(opcoesContainer); } // Function to add a new command function adicionarNovoComando() { var nome = prompt('Enter the command name:'); if (!nome) return; var imagemUrl = prompt('Enter the image URL (optional):'); var comando = prompt('Enter the command to be executed:'); if (!comando) return; adicionarItemMenu(nome, imagemUrl, comando); salvarMenu(); } // Function to load commands from a text file function carregarComandosDeArquivo() { var input = document.createElement('input'); input.type = 'file'; input.accept = '.txt'; input.onchange = function (event) { var file = event.target.files[0]; if (file) { var reader = new FileReader(); reader.onload = function (e) { var linhas = e.target.result.split('\n'); linhas.forEach(function (linha) { var partes = linha.split(','); if (partes.length === 3) { var nome = partes[0].trim(); var comando = partes[1].trim(); var imagemUrl = partes[2].trim(); if (imagemUrl === '') imagemUrl = null; // If no image URL is provided adicionarItemMenu(nome, imagemUrl, comando); } else if (partes.length === 1 && partes[0].trim() === '') { adicionarQuebraDeLinha(); // Blank line adds a break } }); salvarMenu(); }; reader.readAsText(file); } }; input.click(); // Opens the file selector } // Function to add an item to the menu function adicionarItemMenu(nome, imagemUrl, comando) { var menuContainer = document.getElementById('quickbar_contents'); var novoItem = document.createElement('li'); novoItem.className = 'quickbar_item'; var link = document.createElement('a'); link.className = 'quickbar_link'; link.textContent = nome; link.setAttribute('data-comando', comando); link.onclick = function () { // Use eval to execute the JavaScript command directly try { eval(comando); } catch (error) { console.error(`Error executing the command: ${error}`); } }; if (imagemUrl) { var imagem = document.createElement('img'); imagem.src = imagemUrl; imagem.alt = nome; imagem.style.width = '15px'; // Set the image width imagem.style.height = '15px'; // Set the image height link.prepend(imagem); // Add the image before the name } novoItem.appendChild(link); menuContainer.appendChild(novoItem); } // Function to add a line break to the menu function adicionarQuebraDeLinha() { var menuContainer = document.getElementById('quickbar_contents'); var quebra = document.createElement('hr'); menuContainer.appendChild(quebra); } // Function to execute a command function executarComando(comando) { console.log(`Executing command: ${comando}`); // Here you can add the logic to execute the command } // Function to clear the menu memory function limparMemoria() { localStorage.removeItem('quickbarItens'); inicializarMenu(); // Reinitialize the menu after clearing memory } // Function to export the current table to a TXT file function exportarTabela() { var itensMenu = []; var menuContainer = document.getElementById('quickbar_contents'); menuContainer.childNodes.forEach(function (node) { if (node.tagName === 'LI') { var link = node.querySelector('.quickbar_link'); var nome = link.textContent.trim(); var comando = link.getAttribute('data-comando'); var imagemUrl = link.querySelector('img') ? link.querySelector('img').src : ''; // Add in the format: command name, command, image URL itensMenu.push(`${nome}, ${comando}, ${imagemUrl}`); } else if (node.tagName === 'HR') { itensMenu.push(''); // Add a blank line for breaks } }); var textoParaSalvar = itensMenu.join('\n'); // Create the text file var blob = new Blob([textoParaSalvar], { type: 'text/plain' }); var url = URL.createObjectURL(blob); // Create the download link var a = document.createElement('a'); a.href = url; a.download = 'tabela_comandos.txt'; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(url); // Release the blob URL } // Function to save the menu in localStorage function salvarMenu() { var itensMenu = []; var menuContainer = document.getElementById('quickbar_contents'); menuContainer.childNodes.forEach(function (node) { if (node.tagName === 'LI') { var link = node.querySelector('.quickbar_link'); var nome = link.textContent.trim(); var imagemUrl = link.querySelector('img') ? link.querySelector('img').src : ''; var comando = link.getAttribute('data-comando'); itensMenu.push({ type: 'command', text: nome, imageUrl: imagemUrl, command: comando }); } else if (node.tagName === 'HR') { itensMenu.push({ type: 'break' }); } }); localStorage.setItem('quickbarItens', JSON.stringify(itensMenu)); } // Call the function to insert the table and initialize the menu inserirTabelaAcima();