您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Un mini-jeu où vous devez casser des cailloux en cliquant dessus. Bonus multiplicateurs et malus inclus !
// ==UserScript== // @name Goulag Mini-jeu - New // @namespace http://tampermonkey.net/ // @version 4.6 // @description Un mini-jeu où vous devez casser des cailloux en cliquant dessus. Bonus multiplicateurs et malus inclus ! // @author ChatGPT feat Monte_Cristo // @match https://onche.org/forum/4/goulag // @grant none // ==/UserScript== (function() { 'use strict'; function addJQuery(callback) { var script = document.createElement('script'); script.setAttribute('src', 'https://code.jquery.com/jquery-3.6.0.min.js'); script.addEventListener('load', function() { var script = document.createElement('script'); script.textContent = 'window.jQuery = jQuery.noConflict(true); (' + callback.toString() + ')();'; document.body.appendChild(script); }, false); document.body.appendChild(script); } function main() { window.jQuery(document).ready(function() { var rocksBroken = parseInt(localStorage.getItem('rocksBroken') || '0', 10); var nextRockThreshold = parseFloat(localStorage.getItem('nextRockThreshold') || '3'); var rockClicks = 0; var multipliers = []; var originalRockSrc = 'https://cloud.onche.org/74aa8730-f8aa-43a1-b216-364886eac580!OdsGr4euQV/default'; var waveRockSrc = 'https://cloud.onche.org/c909de24-aecb-421f-8be6-823431529fad!NUYK3nnw5R'; var rainMalusSrc = 'https://cloud.onche.org/414a7b7a-a383-4e18-82e2-f35555fed1c8!MNJjIKHQmv'; var rainItems = [ 'https://cloud.onche.org/0fa53ac0-72a5-4609-bddd-bc966c2e60c1!fQCEmHjoM2', 'https://cloud.onche.org/bf68281c-0439-4217-b164-4cc58eb281ba!wRldGwgIQe', 'https://cloud.onche.org/75d3f701-21d1-4ec5-8214-ebcb2a034839!6GXGEbIaJu' ]; const updateMultiplierDisplay = () => { const display = multipliers.length > 0 ? multipliers.join(' × ') + ' = x' + multipliers.reduce((a, b) => a * b, 1) : ''; $('#activeMultiplierDisplay').text(display); }; const getTotalMultiplier = () => multipliers.reduce((a, b) => a * b, 1); var pickaxeButton = $('<div>') .addClass('item') .attr('title', 'Lancer le mini-jeu') .css({ cursor: 'pointer' }) .html('<div class="mdi mdi-pickaxe">⛏️</div>') .on('click', function() { $('#miniGameOverlay').fadeIn(); $('#rockCounter').text('Cailloux cassés: ' + rocksBroken); $('#clickValue').text(Math.ceil(nextRockThreshold - rockClicks)); }); $('#theme-button').before(pickaxeButton); var overlay = $('<div id="miniGameOverlay">').css({ display: 'none', position: 'fixed', top: 0, left: 0, width: '100%', height: '100%', backgroundColor: 'rgba(0, 0, 0, 0.8)', zIndex: 10000, textAlign: 'center', color: 'white' }); var multiplierDisplay = $('<div id="activeMultiplierDisplay">').css({ position: 'fixed', bottom: '10px', right: '10px', fontSize: '20px', color: 'gold', fontWeight: 'bold', zIndex: 10001, animation: 'blinker 1s linear infinite' }); $('<style>') .prop('type', 'text/css') .html('@keyframes blinker { 50% { opacity: 0; } }') .appendTo('head'); var closeButton = $('<button>X</button>').css({ position: 'absolute', top: '5%', left: '75%', transform: 'translate(-50%, -50%)', zIndex: '10001', cursor: 'pointer', fontSize: '20px', background: 'none', border: 'none', color: 'white' }).on('click', () => $('#miniGameOverlay').fadeOut()); var counter = $('<div id="rockCounter">').text('Cailloux cassés: ' + rocksBroken).css({ position: 'absolute', top: '3%', left: '25%', transform: 'translateX(-50%)', fontSize: '20px', zIndex: '10001' }); const clickCountdown = $('<div id="clickCountdown">') .html('<div style="width: 150px; text-align: center;">Coups restants : <span id="clickValue">' + Math.ceil(nextRockThreshold - rockClicks) + '</span></div>') .css({ position: 'absolute', top: '5.5%', left: '25%', transform: 'translateX(-50%)', fontSize: '20px', zIndex: 10001, fontFamily: 'inherit', whiteSpace: 'nowrap' }); var rock = $('<img>') .attr('src', originalRockSrc) .attr('id', 'rockImage') .css({ position: 'absolute', top: '50%', left: '50%', transform: 'translate(-50%, -50%)', width: '35%', cursor: 'pointer' }); var resetButton = $('<button>Remettre à zéro</button>').css({ position: 'absolute', top: '12%', left: '25%', transform: 'translate(-50%, -50%)', zIndex: '10001', cursor: 'pointer', fontSize: '16px', background: 'none', border: '1px solid white', color: 'white', padding: '10px', borderRadius: '5px' }).on('click', function() { rocksBroken = 0; nextRockThreshold = 3; multipliers = []; updateMultiplierDisplay(); localStorage.setItem('rocksBroken', rocksBroken); localStorage.setItem('nextRockThreshold', nextRockThreshold); $('#rockCounter').text('Cailloux cassés: ' + rocksBroken); $('#clickCountdown').html('<div style="width: 150px; text-align: center;">Coups restants : <span id="clickValue">' + Math.ceil(nextRockThreshold - rockClicks) + '</span></div>'); }); rock.on('mousedown', function () { $(this).css('transform', 'translate(-50%, -50%) scale(1.1)'); }).on('mouseup mouseleave', function () { $(this).css('transform', 'translate(-50%, -50%)'); }).on('click', function () { rockClicks += getTotalMultiplier(); $('#clickValue').text(Math.ceil(nextRockThreshold - rockClicks)); if (rockClicks >= nextRockThreshold) { $(this).fadeOut('fast').fadeIn('fast'); rocksBroken++; nextRockThreshold += 1.5 + rocksBroken * 0.05; rockClicks = 0; localStorage.setItem('rocksBroken', rocksBroken); localStorage.setItem('nextRockThreshold', nextRockThreshold); $('#rockCounter').text('Cailloux cassés: ' + rocksBroken); $('#clickValue').text(Math.ceil(nextRockThreshold - rockClicks)); } }); overlay.append(closeButton, counter, clickCountdown, rock, resetButton, multiplierDisplay); $('body').append(overlay); function spawnRainEffect() { for (let i = 0; i < 100; i++) { const imgSrc = rainItems[Math.floor(Math.random() * rainItems.length)]; const img = $('<img>').attr('src', imgSrc).css({ position: 'fixed', top: '-10%', left: `${Math.random() * 100}%`, width: '64px', height: '64px', zIndex: 2147483647, animation: `fall ${2 + Math.random() * 3}s linear forwards, spin ${2 + Math.random() * 2}s infinite linear` }); $('body').append(img); setTimeout(() => img.remove(), 7000); } } $('<style>') .prop('type', 'text/css') .html(`@keyframes fall { to { transform: translateY(110vh); } } @keyframes spin { to { transform: rotate(360deg); } }`) .appendTo('head'); function spawnFloatingItem() { const isMalus = Math.random() < 0.35; const isWave = isMalus && Math.random() < 0.5; const isRain = isMalus && !isWave && Math.random() < 0.5; const pos = () => `${Math.random() * 90}%`; const startX = pos(), startY = pos(), endX = pos(), endY = pos(); let item; if (isRain) { item = $('<img>').attr('src', rainMalusSrc).css({ position: 'fixed', top: startY, left: startX, width: '64px', height: '64px', cursor: 'pointer', zIndex: 2147483647, transition: 'top 1s ease-in-out, left 1s ease-in-out' }).on('click', function () { spawnRainEffect(); $(this).remove(); }); } else if (isWave) { item = $('<img>').attr('src', waveRockSrc).css({ position: 'fixed', top: startY, left: startX, width: '64px', height: '64px', cursor: 'pointer', zIndex: 2147483647, transition: 'top 1s ease-in-out, left 1s ease-in-out' }).on('click', function () { rock.attr('src', waveRockSrc); let count = 0; const waveInterval = setInterval(() => { const dx = (Math.random() - 0.5) * 1600; const dy = (Math.random() - 0.5) * 1200; rock.css('transform', `translate(${dx}px, ${dy}px)`); nextRockThreshold += getTotalMultiplier(); $('#clickValue').text(Math.ceil(nextRockThreshold - rockClicks)); count++; if (count >= 6) { clearInterval(waveInterval); rock.attr('src', originalRockSrc); rock.css('transform', 'translate(-50%, -50%)'); } }, 400); $(this).remove(); }); } else if (isMalus) { const malusValue = [5, 10, 15][Math.floor(Math.random() * 3)]; item = $('<div>').text('-' + malusValue).css({ position: 'fixed', top: startY, left: startX, fontSize: '50px', fontWeight: 'bold', color: 'red', zIndex: 2147483647, cursor: 'pointer', transition: 'top 1s ease-in-out, left 1s ease-in-out' }).on('click', function () { rocksBroken = Math.max(0, rocksBroken - malusValue); $('#rockCounter').text('Cailloux cassés: ' + rocksBroken); localStorage.setItem('rocksBroken', rocksBroken); $(this).remove(); }); } else { const tiers = [2, 3, 4, 5, 6, 8, 10, 12, 15, 20, 25, 30, 40, 50]; const progressFactor = Math.floor(rocksBroken / 10); const maxTier = Math.min(tiers.length, 3 + progressFactor); const chance = Math.random(); const x = (chance < 0.01) ? 50 : tiers[Math.floor(Math.random() * maxTier)]; item = $('<div>').text('x' + x).css({ position: 'fixed', top: startY, left: startX, fontSize: '50px', fontWeight: 'bold', color: 'gold', zIndex: 2147483647, cursor: 'pointer', transition: 'top 1s ease-in-out, left 1s ease-in-out' }).on('click', function () { multipliers.push(x); updateMultiplierDisplay(); setTimeout(() => { multipliers.splice(multipliers.indexOf(x), 1); updateMultiplierDisplay(); }, 7000); $(this).remove(); }); } $('body').append(item); requestAnimationFrame(() => item.css({ top: endY, left: endX })); setTimeout(() => item.remove(), 1800); } setInterval(() => { if ($('#miniGameOverlay').is(':visible') && Math.random() < 0.3) spawnFloatingItem(); }, 800); }); } addJQuery(main); })();