您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
提交你想要的 Gamee 分数
当前为
// ==UserScript== // @name Gamee Score Modifier // @version 1.1 // @description 提交你想要的 Gamee 分数 // @author People11 // @match https://prizes.gamee.com/* // @grant GM_xmlhttpRequest // @namespace https://gf.qytechs.cn/users/1143233 // @require https://update.gf.qytechs.cn/scripts/490306/1345896/Mini%20Md5.js // ==/UserScript== (function() { 'use strict'; // ============ 全局变量 ============ let lastGameplayData = null; // 保存最近一次的游戏数据 let authToken = null; // 认证令牌 let installUuid = null; // 安装UUID let isSubmittingScore = false; // 防止循环请求的标记 // ============ 工具函数 ============ // 计算checksum的函数,使用外部MD5库 function calculateChecksum(score, playTime, gameUrl, gameStateData, uuid) { const saltValue = "crmjbjm3lczhlgnek9uaxz2l9svlfjw14npauhen"; const checksumString = `${score}:${playTime}:${gameUrl}:${gameStateData || ""}:${uuid}:${saltValue}`; console.log("计算checksum的字符串:", checksumString); return shenchanran_md5(checksumString); } // 生成UUID v4 function generateUUID() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { const r = Math.random() * 16 | 0; const v = c === 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); }); } // 获取当前时间的ISO字符串 function getCurrentTimeISO() { const now = new Date(); // 获取年月日 const year = now.getFullYear(); const month = String(now.getMonth() + 1).padStart(2, '0'); const day = String(now.getDate()).padStart(2, '0'); // 获取时分秒 const hours = String(now.getHours()).padStart(2, '0'); const minutes = String(now.getMinutes()).padStart(2, '0'); const seconds = String(now.getSeconds()).padStart(2, '0'); // 获取时区 const tzOffset = now.getTimezoneOffset(); const tzHours = String(Math.abs(Math.floor(tzOffset / 60))).padStart(2, '0'); const tzMinutes = String(Math.abs(tzOffset % 60)).padStart(2, '0'); const tzSign = tzOffset <= 0 ? '+' : '-'; return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}${tzSign}${tzHours}:${tzMinutes}`; } // 获取下一个gameplayId function getNextGameplayId() { // 从localStorage中获取当前最大值 let currentMax = localStorage.getItem('gameeScoreModifier_maxGameplayId'); if (!currentMax && lastGameplayData && lastGameplayData.metadata && lastGameplayData.metadata.gameplayId) { currentMax = lastGameplayData.metadata.gameplayId; } // 如果仍然为空,则从555开始 currentMax = currentMax ? parseInt(currentMax, 10) : 555; // 增加并保存新值 const nextId = currentMax + 1; localStorage.setItem('gameeScoreModifier_maxGameplayId', nextId.toString()); return nextId; } // 从cookie获取认证信息 function getCookieValue(cookieName) { const cookies = document.cookie.split(';'); for (let i = 0; i < cookies.length; i++) { const cookie = cookies[i].trim(); // 检查cookie是否以给定的名称开头 if (cookie.indexOf(cookieName + '=') === 0) { // 返回cookie的值部分 return cookie.substring(cookieName.length + 1); } } return null; } // 设置网络捕获和拦截 function setupNetworkCapture() { console.log('设置网络捕获...'); // 从cookie中获取认证信息 try { // 从cookie中获取认证token const authCookie = getCookieValue('authentication'); if (authCookie) { authToken = "Bearer " + authCookie; console.log('从cookie找到认证令牌: authentication'); } // 从cookie中获取UUID const uuidCookie = getCookieValue('uuid'); if (uuidCookie) { installUuid = uuidCookie; console.log('从cookie找到UUID: uuid'); } } catch (e) { console.error('从cookie获取认证信息时出错:', e); } // 拦截XHR请求以捕获游戏数据 const originalXHROpen = XMLHttpRequest.prototype.open; const originalXHRSend = XMLHttpRequest.prototype.send; XMLHttpRequest.prototype.open = function(method, url) { this._url = url; this._method = method; return originalXHROpen.apply(this, arguments); }; XMLHttpRequest.prototype.send = function(body) { // 避免捕获我们自己的修改请求 if (this._url && this._url.includes('api.gamee.com') && !isSubmittingScore) { // 尝试从请求体中捕获游戏数据 if (body && typeof body === 'string') { try { const data = JSON.parse(body); if (data.method === 'game.saveWebGameplay' && data.params && data.params.gameplayData) { lastGameplayData = data.params.gameplayData; console.log('捕获到游戏数据:', lastGameplayData); // 更新状态徽章 updateStatusBadge(); } } catch (e) { console.error('解析请求体失败:', e); } } } return originalXHRSend.apply(this, arguments); }; // 拦截fetch请求以捕获游戏数据 const originalFetch = window.fetch; window.fetch = function(input, init) { // 只拦截对Gamee API的请求 if (input && typeof input === 'string' && input.includes('api.gamee.com') && !isSubmittingScore) { // 如果有请求体,尝试捕获游戏数据 if (init && init.body && typeof init.body === 'string') { try { const data = JSON.parse(init.body); if (data.method === 'game.saveWebGameplay' && data.params && data.params.gameplayData) { lastGameplayData = data.params.gameplayData; console.log('捕获到游戏数据:', lastGameplayData); // 更新状态徽章 updateStatusBadge(); } } catch (e) { console.error('解析fetch请求体失败:', e); } } } // 对于所有请求,直接传递给原始fetch return originalFetch.apply(this, arguments); }; } // ============ UI界面 ============ // 创建状态徽章 function addStatusBadge() { let badge = document.getElementById('gamee-score-modifier-badge'); // 如果徽章已存在,则移除它 if (badge) { badge.remove(); } // 创建新徽章 badge = document.createElement('div'); badge.id = 'gamee-score-modifier-badge'; badge.style.position = 'fixed'; badge.style.bottom = '10px'; badge.style.right = '10px'; badge.style.backgroundColor = '#f44336'; badge.style.color = 'white'; badge.style.padding = '5px 10px'; badge.style.borderRadius = '5px'; badge.style.fontSize = '12px'; badge.style.zIndex = '9999'; badge.style.cursor = 'pointer'; badge.textContent = '未捕获游戏数据'; badge.title = '点击打开分数修改器'; badge.addEventListener('click', createScoreModifierDialog); document.body.appendChild(badge); // 更新徽章状态 updateStatusBadge(); } // 更新状态徽章 function updateStatusBadge() { const badge = document.getElementById('gamee-score-modifier-badge'); if (badge) { if (lastGameplayData) { badge.style.backgroundColor = '#4CAF50'; badge.textContent = `已捕获游戏数据: ${lastGameplayData.gameId} (分数: ${lastGameplayData.score})`; } else { badge.style.backgroundColor = '#f44336'; badge.textContent = '未捕获游戏数据'; } } } // 创建修改分数的弹窗 function createScoreModifierDialog() { if (!lastGameplayData) { alert('尚未捕获到游戏数据,请先玩一次游戏并提交分数'); return; } // 创建对话框元素 const dialog = document.createElement('div'); dialog.style.position = 'fixed'; dialog.style.top = '50%'; dialog.style.left = '50%'; dialog.style.transform = 'translate(-50%, -50%)'; dialog.style.backgroundColor = 'white'; dialog.style.padding = '20px'; dialog.style.borderRadius = '5px'; dialog.style.boxShadow = '0 0 10px rgba(0,0,0,0.5)'; dialog.style.zIndex = '10000'; dialog.style.width = '500px'; dialog.style.maxHeight = '80vh'; dialog.style.overflowY = 'auto'; // 添加标题 const title = document.createElement('h2'); title.textContent = '修改游戏分数'; title.style.marginBottom = '15px'; dialog.appendChild(title); // 添加游戏信息 const gameInfo = document.createElement('div'); gameInfo.innerHTML = ` <p><strong>游戏ID:</strong> ${lastGameplayData.gameId}</p> <p><strong>当前分数:</strong> ${lastGameplayData.score}</p> <p><strong>当前时长:</strong> ${lastGameplayData.playTime} 秒</p> `; dialog.appendChild(gameInfo); // 添加分数输入 const scoreLabel = document.createElement('label'); scoreLabel.textContent = '目标分数:'; scoreLabel.style.display = 'block'; scoreLabel.style.marginTop = '15px'; scoreLabel.style.fontWeight = 'bold'; dialog.appendChild(scoreLabel); const scoreInput = document.createElement('input'); scoreInput.type = 'number'; scoreInput.value = lastGameplayData.score; scoreInput.style.width = '100%'; scoreInput.style.padding = '8px'; scoreInput.style.boxSizing = 'border-box'; scoreInput.style.marginTop = '5px'; scoreInput.style.marginBottom = '5px'; dialog.appendChild(scoreInput); // 添加自动计算结果显示区域 const resultInfo = document.createElement('div'); resultInfo.style.marginTop = '15px'; resultInfo.style.padding = '10px'; resultInfo.style.backgroundColor = '#f5f5f5'; resultInfo.style.borderRadius = '5px'; resultInfo.style.border = '1px solid #ddd'; resultInfo.style.display = 'none'; // 初始隐藏 dialog.appendChild(resultInfo); // 添加预览按钮 const previewButton = document.createElement('button'); previewButton.textContent = '预览修改结果'; previewButton.style.display = 'block'; previewButton.style.marginTop = '15px'; previewButton.style.padding = '8px 16px'; previewButton.style.backgroundColor = '#2196F3'; previewButton.style.color = 'white'; previewButton.style.border = 'none'; previewButton.style.borderRadius = '4px'; previewButton.style.cursor = 'pointer'; previewButton.style.width = '100%'; dialog.appendChild(previewButton); // 如果有游戏状态数据,显示编辑框 let gameStateInput = null; if (lastGameplayData.gameStateData) { const gameStateLabel = document.createElement('label'); gameStateLabel.textContent = '其他数据:'; gameStateLabel.style.display = 'block'; gameStateLabel.style.marginTop = '15px'; gameStateLabel.style.fontWeight = 'bold'; dialog.appendChild(gameStateLabel); gameStateInput = document.createElement('textarea'); try { // 尝试格式化JSON以便于编辑 gameStateInput.value = JSON.stringify(JSON.parse(lastGameplayData.gameStateData), null, 2); } catch (e) { gameStateInput.value = lastGameplayData.gameStateData; } gameStateInput.style.width = '100%'; gameStateInput.style.padding = '5px'; gameStateInput.style.boxSizing = 'border-box'; gameStateInput.style.height = '150px'; gameStateInput.style.fontFamily = 'monospace'; gameStateInput.style.marginTop = '5px'; dialog.appendChild(gameStateInput); } // 为预览按钮添加功能 previewButton.addEventListener('click', function() { const newScore = parseInt(scoreInput.value, 10); if (isNaN(newScore) || newScore <= 0) { alert('请输入有效的分数值'); return; } // 计算分数倍率 const scoreMultiplier = newScore / lastGameplayData.score; // 按照相同比例调整游戏时长 const newPlayTime = Math.round(lastGameplayData.playTime * scoreMultiplier); // 创建新的UUID用于计算 const newUuid = generateUUID(); // 计算新的checksum const newChecksum = calculateChecksum( newScore, newPlayTime, lastGameplayData.gameUrl, gameStateInput ? gameStateInput.value : lastGameplayData.gameStateData, newUuid ); // 显示预览结果 resultInfo.innerHTML = ` <p><strong>修改后分数:</strong> ${newScore} (${scoreMultiplier.toFixed(2)}倍)</p> <p><strong>修改后时长:</strong> ${newPlayTime} 秒</p> <p><strong>UUID:</strong> ${newUuid}</p> <p><strong>Checksum:</strong> ${newChecksum}</p> `; resultInfo.style.display = 'block'; }); // 创建按钮容器,使按钮并排显示 const buttonContainer = document.createElement('div'); buttonContainer.style.display = 'flex'; buttonContainer.style.justifyContent = 'space-between'; buttonContainer.style.marginTop = '15px'; dialog.appendChild(buttonContainer); // 添加提交按钮 const submitButton = document.createElement('button'); submitButton.textContent = '提交修改后的分数'; submitButton.style.padding = '8px 16px'; submitButton.style.backgroundColor = '#4CAF50'; submitButton.style.color = 'white'; submitButton.style.border = 'none'; submitButton.style.borderRadius = '4px'; submitButton.style.cursor = 'pointer'; submitButton.style.flex = '1'; submitButton.style.marginRight = '10px'; buttonContainer.appendChild(submitButton); // 添加取消按钮 const cancelButton = document.createElement('button'); cancelButton.textContent = '取消'; cancelButton.style.padding = '8px 16px'; cancelButton.style.backgroundColor = '#f44336'; cancelButton.style.color = 'white'; cancelButton.style.border = 'none'; cancelButton.style.borderRadius = '4px'; cancelButton.style.cursor = 'pointer'; cancelButton.style.flex = '1'; buttonContainer.appendChild(cancelButton); // 创建半透明背景 const overlay = document.createElement('div'); overlay.style.position = 'fixed'; overlay.style.top = '0'; overlay.style.left = '0'; overlay.style.width = '100%'; overlay.style.height = '100%'; overlay.style.backgroundColor = 'rgba(0,0,0,0.5)'; overlay.style.zIndex = '9999'; // 添加关闭对话框的功能 cancelButton.addEventListener('click', function() { document.body.removeChild(dialog); document.body.removeChild(overlay); }); // 添加提交功能 submitButton.addEventListener('click', function() { const newScore = parseInt(scoreInput.value, 10); if (isNaN(newScore) || newScore <= 0) { alert('请输入有效的分数值'); return; } // 计算分数倍率 const scoreMultiplier = newScore / lastGameplayData.score; // 按照相同比例调整游戏时长 const newPlayTime = Math.round(lastGameplayData.playTime * scoreMultiplier); // 创建新的游戏数据对象,避免修改原始对象 const modifiedGameplayData = {...lastGameplayData}; // 更新分数和游戏时长 modifiedGameplayData.score = newScore; modifiedGameplayData.playTime = newPlayTime; // 如果有游戏状态数据编辑框,更新游戏状态数据 if (gameStateInput) { try { // 验证JSON格式 JSON.parse(gameStateInput.value); modifiedGameplayData.gameStateData = gameStateInput.value; } catch (e) { alert('游戏状态数据不是有效的JSON格式'); return; } } // 发送修改后的分数 sendModifiedScore(modifiedGameplayData); // 关闭对话框 document.body.removeChild(dialog); document.body.removeChild(overlay); }); // 添加到页面 document.body.appendChild(overlay); document.body.appendChild(dialog); } // ============ 分数修改与提交 ============ // 发送修改后的分数 function sendModifiedScore(gameplayData) { // 生成新的唯一标识符 const newUuid = generateUUID(); const newCreatedTime = getCurrentTimeISO(); const newGameplayId = getNextGameplayId(); // 创建新的gameplay数据对象,避免修改原始对象 const modifiedGameplayData = {...gameplayData}; // 更新唯一标识 modifiedGameplayData.uuid = newUuid; modifiedGameplayData.createdTime = newCreatedTime; if (modifiedGameplayData.metadata) { modifiedGameplayData.metadata = {...modifiedGameplayData.metadata}; modifiedGameplayData.metadata.gameplayId = newGameplayId; } else { modifiedGameplayData.metadata = { gameplayId: newGameplayId }; } // 重新计算checksum modifiedGameplayData.checksum = calculateChecksum( modifiedGameplayData.score, modifiedGameplayData.playTime, modifiedGameplayData.gameUrl, modifiedGameplayData.gameStateData, newUuid ); console.log('使用新的唯一标识:', { uuid: newUuid, createdTime: newCreatedTime, gameplayId: newGameplayId, checksum: modifiedGameplayData.checksum }); // 设置防止循环请求的标记 isSubmittingScore = true; const requestData = { jsonrpc: "2.0", id: "game.saveWebGameplay", method: "game.saveWebGameplay", params: { gameplayData: modifiedGameplayData } }; console.log('发送修改后的游戏数据:', requestData); GM_xmlhttpRequest({ method: "POST", url: "https://api.gamee.com/", headers: { "Content-Type": "text/plain;charset=UTF-8", "Authorization": authToken, "X-Install-UUID": installUuid, "X-Bot-Header": "gamee", "Origin": "https://prizes.gamee.com", "Referer": "https://prizes.gamee.com/", "User-Agent": navigator.userAgent, // 添加额外的标记,避免被脚本拦截 "X-Score-Modifier": "true" }, data: JSON.stringify(requestData), onload: function(response) { console.log('分数提交响应:', response.responseText); try { const result = JSON.parse(response.responseText); if (result.result) { alert('分数修改成功!'); } else { alert('分数修改失败:' + JSON.stringify(result.error || '未知错误')); } } catch (e) { alert('解析响应失败:' + e.message); } // 清除标记 isSubmittingScore = false; }, onerror: function(error) { alert('请求出错:' + error.message); console.error('请求错误详情:', error); // 清除标记 isSubmittingScore = false; } }); } // ============ 初始化 ============ // 页面加载完成后初始化 function initialize() { console.log('Gamee分数修改器初始化中...'); setupNetworkCapture(); addStatusBadge(); console.log('Gamee分数修改器已启动'); } // 检查页面是否已加载 if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initialize); } else { initialize(); } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址