您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Displays data from an Excel sheet on a webpage
// ==UserScript== // @name Major/Minors ALGs on Skill Page // @namespace your-namespace // @version 2.0 // @description Displays data from an Excel sheet on a webpage // @match https://glb.warriorgeneral.com/game/skill_points.pl?player_id=** // @grant none // ==/UserScript== (function() { 'use strict'; // Define the CSS var css = ` .calculator { border: 1px solid #ccc; padding: 10px; margin-bottom: 20px; } .box { width: 25%; } .box input { width: calc(100% - 20px); margin-bottom: 5px; padding: 5px; } .box button { width: 100%; padding: 8px; background-color: #4CAF50; color: white; border: none; cursor: pointer; } .box button:hover { background-color: #45a049; } .box div { margin-top: 10px; } .calculator-title { text-align: center; font-weight: bold; margin-bottom: 10px; } `; // Create style element and append CSS var style = document.createElement('style'); style.textContent = css; document.head.appendChild(style); // Define the CSV data var csvData = "LEVEL,3 majors,4 majors,5 majors\n" + "10,26.17,19.6,15.78\n" + "11,25.5,19.1,15.38\n" + "12,24.83,18.6,14.98\n" + "13,24.16,18.1,14.58\n" + "14,23.49,17.6,14.18\n" + "15,22.82,17.1,13.78\n" + "16,22.15,16.6,13.38\n" + "17,21.48,16.1,12.98\n" + "18,20.81,15.6,12.58\n" + "19,20.14,15.1,12.18\n" + "20,19.47,14.6,11.78\n" + "21,18.8,14.1,11.38\n" + "22,18.3,13.72,11.08\n" + "23,17.8,13.34,10.78\n" + "24,17.3,12.96,10.48\n" + "25,16.8,12.58,10.18\n" + "26,16.3,12.2,9.88\n" + "27,15.8,11.82,9.58\n" + "28,15.3,11.44,9.28\n" + "29,14.8,11.06,8.98\n" + "30,14.42,10.78,8.75\n" + "31,14.04,10.5,8.52\n" + "32,13.66,10.22,8.29\n" + "33,13.28,9.94,8.06\n" + "34,12.9,9.66,7.83\n" + "35,12.52,9.38,7.6\n" + "36,12.14,9.1,7.37\n" + "37,11.76,8.82,7.14\n" + "38,11.48,8.61,6.97\n" + "39,11.2,8.4,6.8\n" + "40,10.92,8.19,6.63\n" + "41,10.64,7.98,6.46\n" + "42,10.36,7.77,6.29\n" + "43,10.08,7.56,6.12\n" + "44,9.8,7.35,5.95\n" + "45,9.52,7.14,5.78\n" + "46,9.24,6.93,5.61\n" + "47,8.96,6.72,5.44\n" + "48,8.68,6.51,5.27\n" + "49,8.4,6.3,5.1\n" + "50,8.12,6.09,4.93\n" + "51,7.84,5.88,4.76\n" + "52,7.56,5.67,4.59\n" + "53,7.28,5.46,4.42\n" + "54,7,5.25,4.25\n" + "55,6.72,5.04,4.08\n" + "56,6.44,4.83,3.91\n" + "57,6.16,4.62,3.74\n" + "58,5.88,4.41,3.57\n" + "59,5.6,4.2,3.4\n" + "60,5.32,3.99,3.23\n" + "61,5.04,3.78,3.06\n" + "62,4.76,3.57,2.89\n" + "63,4.48,3.36,2.72\n" + "64,4.2,3.15,2.55\n" + "65,3.92,2.94,2.38\n" + "66,3.64,2.73,2.21\n" + "67,3.36,2.52,2.04\n" + "68,3.08,2.31,1.87\n" + "69,2.8,2.1,1.7\n" + "70,2.52,1.89,1.53\n" + "71,2.24,1.68,1.36\n" + "72,1.96,1.47,1.19\n" + "73,1.68,1.26,1.02\n" + "74,1.4,1.05,0.85\n" + "75,1.12,0.84,0.68\n" + "76,0.84,0.63,0.51\n" + "77,0.56,0.42,0.34\n" + "78,0.28,0.21,0.17\n" + "79,0,0,0"; // Parse the CSV data function parseCSV() { var rows = csvData.trim().split('\n'); var headers = rows[0].split(',').map(function (header) { return header.trim(); }); var data = []; for (var i = 1; i < rows.length; i++) { var values = rows[i].split(',').map(function (value) { return value.trim(); }); var entry = {}; for (var j = 0; j < headers.length; j++) { entry[headers[j]] = values[j]; } data.push(entry); } return data; } // Create the box container element for the first calculator var boxContainer1 = document.createElement('div'); boxContainer1.classList.add('box'); // Create the input elements for the first calculator var input1_1 = document.createElement('input'); input1_1.type = 'text'; input1_1.placeholder = 'Current Level'; var input1_2 = document.createElement('input'); input1_2.type = 'text'; input1_2.placeholder = 'Number of Majors'; var input1_3 = document.createElement('input'); input1_3.type = 'text'; input1_3.placeholder = 'Current Attribute Level'; // Create the output element for the first calculator var output1 = document.createElement('div'); // Create the button element for the first calculator var button1 = document.createElement('button'); button1.textContent = 'Calculate Majors'; // Append the input elements, button, and output element to the box container for the first calculator boxContainer1.appendChild(input1_1); boxContainer1.appendChild(input1_2); boxContainer1.appendChild(input1_3); boxContainer1.appendChild(button1); boxContainer1.appendChild(output1); // Create the box container element for the second calculator var boxContainer2 = document.createElement('div'); boxContainer2.classList.add('box'); // Create the input elements for the second calculator var input2_1 = document.createElement('input'); input2_1.type = 'text'; input2_1.placeholder = 'Current Level'; var input2_2 = document.createElement('input'); input2_2.type = 'text'; input2_2.placeholder = 'Number of Majors'; var input2_3 = document.createElement('input'); input2_3.type = 'text'; input2_3.placeholder = 'Current Attribute Level'; // Create the output element for the second calculator var output2 = document.createElement('div'); // Create the button element for the second calculator var button2 = document.createElement('button'); button2.textContent = 'Calculate Minors'; // Append the input elements, button, and output element to the box container for the second calculator boxContainer2.appendChild(input2_1); boxContainer2.appendChild(input2_2); boxContainer2.appendChild(input2_3); boxContainer2.appendChild(button2); boxContainer2.appendChild(output2); // Find the target element to insert the box (assuming the target element has the id "content") var targetElement = document.getElementById('content'); targetElement.appendChild(boxContainer1); targetElement.appendChild(boxContainer2); // Calculate the resulting attribute level for the first calculator function calculateResult1() { var currentLevel = parseInt(input1_1.value); var numberOfMajors = parseInt(input1_2.value); var currentAttributeLevel = parseFloat(input1_3.value); var extractedData = parseCSV(); if (currentLevel < 10 || currentLevel > 79) { output1.textContent = 'Invalid current level. Please enter a level between 10 and 79.'; return; } if (numberOfMajors < 3 || numberOfMajors > 5) { output1.textContent = 'Invalid number of majors. Please enter a number between 3 and 5.'; return; } if (currentAttributeLevel < 0 || currentAttributeLevel > 99.99) { output1.textContent = 'Invalid current attribute level. Please enter a level between 0 and 99.99.'; return; } var dataIndex = currentLevel - 10; var targetAttributeLevel = extractedData[dataIndex][numberOfMajors + ' majors']; if (targetAttributeLevel === undefined) { output1.textContent = 'Invalid combination of current level and number of majors.'; return; } var requiredAttributePoints = targetAttributeLevel - currentAttributeLevel + currentAttributeLevel; var result = currentAttributeLevel + requiredAttributePoints; output1.textContent = 'Result: ' + result.toFixed(2); } // Calculate the resulting attribute level for the second calculator function calculateResult2() { var currentLevel = parseInt(input2_1.value); var numberOfMajors = parseInt(input2_2.value); var currentAttributeLevel = parseFloat(input2_3.value); var extractedData = parseCSV(); if (currentLevel < 10 || currentLevel > 79) { output2.textContent = 'Invalid current level. Please enter a level between 10 and 79.'; return; } if (numberOfMajors < 3 || numberOfMajors > 5) { output2.textContent = 'Invalid number of majors. Please enter a number between 3 and 5.'; return; } if (currentAttributeLevel < 0 || currentAttributeLevel > 99.99) { output2.textContent = 'Invalid current attribute level. Please enter a level between 0 and 99.99.'; return; } var dataIndex = currentLevel - 10; var targetAttributeLevel = extractedData[dataIndex][numberOfMajors + ' majors']; if (targetAttributeLevel === undefined) { output2.textContent = 'Invalid combination of current level and number of majors.'; return; } var requiredAttributePoints = targetAttributeLevel / 2 - currentAttributeLevel / 2 + currentAttributeLevel; var result = currentAttributeLevel / 2 + requiredAttributePoints; output2.textContent = 'Result: ' + result.toFixed(2); } // Add event listeners to the buttons button1.addEventListener('click', calculateResult1); button2.addEventListener('click', calculateResult2); })();