From 295172e92fe4a6242c73709c4377ab47153c234b Mon Sep 17 00:00:00 2001 From: Abhorrent_Anger Date: Thu, 12 Mar 2026 12:55:33 +0200 Subject: [PATCH] Initial commit --- README.md | 15 +++++- RulkaProFortuneWheelSpinner.user.js | 73 +++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 RulkaProFortuneWheelSpinner.user.js diff --git a/README.md b/README.md index 6b292d2..669639c 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,16 @@ # RulkaProFortuneWheelSpinner -Claims free daily spins worth ~$0.50 \ No newline at end of file +Claims free daily spins worth ~$0.50 + +## Requirements +* [Violentmonkey](https://chromewebstore.google.com/detail/violentmonkey/jinjaccalgkegednnccohejagnlnfdag) (Chrome) +* [Violentmonkey](https://addons.mozilla.org/en-US/firefox/addon/violentmonkey/) (Firefox) + +## Installation +1. Ensure that you have Violentmonkey or other userscript extension installed. +2. Download the script [`RulkaProFortuneWheelSpinner.user.js`](RulkaProFortuneWheelSpinner.user.js). +3. Confirm that you want to install the script. +4. The script should now be installed and ready to use. Open the [Rulka.pro](https://rulka.pro/fortune) fortune wheel page. + +## Note +The items need to be wagered. \ No newline at end of file diff --git a/RulkaProFortuneWheelSpinner.user.js b/RulkaProFortuneWheelSpinner.user.js new file mode 100644 index 0000000..bf23a49 --- /dev/null +++ b/RulkaProFortuneWheelSpinner.user.js @@ -0,0 +1,73 @@ +// ==UserScript== +// @name Rulka Pro Fortune Wheel Spinner +// @namespace https://pube.tk +// @match https://rulka.pro/fortune* +// @icon https://www.google.com/s2/favicons?sz=64&domain=rulka.pro +// @version 2026-03-08 +// @author Abhorrent_Anger +// @description Claims free daily spins +// @grant none +// @require https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js +// @require https://cdn.jsdelivr.net/gh/CoeJoder/waitForKeyElements.js@v1.3/waitForKeyElements.js +// @run-at document-end +// ==/UserScript== + +const INITIAL_TIMER = 4000; +const RECHECK_TIMER = 12 * 60 * 60 * 1000; +const RELOAD_TIMER = 24 * 60 * 60 * 1000; +const ROLLER_TIMEOUT = 10 * 1000; +const COLLECT_TIMEOUT = 5 * 1000; +const MAIN_WINDOW_SELECTOR = ".content"; +const FREE_SPIN_BUTTON = '.wheel .slot .load span'; +const ROLLER_RIGHT = '.roller.right'; +const COLLECT_HAND = '.wheel-container .center span'; + +function clickFreeSpin() { + $(FREE_SPIN_BUTTON).click(); + console.log('Waiting for the roller button...'); + setTimeout(clickRollerRight, ROLLER_TIMEOUT); +} + +function clickRollerRight() { + $(ROLLER_RIGHT).click(); + console.log('Waiting for the collection button...'); + setTimeout(clickCollect, COLLECT_TIMEOUT); +} + +function clickCollect() { + $(COLLECT_HAND).click(); + console.log('Waiting for the OK button...'); + setTimeout(clickOK, COLLECT_TIMEOUT); +} + +function clickOK() { + $(COLLECT_HAND).click(); + console.log('Clicked the OK button...'); +} + +function runRoutines() { + console.log('Checking for free spin claims...'); + clickFreeSpin(); + setTimeout(runRoutines, RECHECK_TIMER); +} + +function setupReload() { + console.log('Sleeping for '+RELOAD_TIMER+' seconds...'); + setTimeout(reload, RELOAD_TIMER); +} + +function getCooldown() { + let time = 0; + time += ($(MINUTE_SELECTOR).text() * 60 * 1000) + 60 * 1000; + return time; +} + +function reload() { + console.log('Reloading...'); + location.reload(); +} + +waitForKeyElements(MAIN_WINDOW_SELECTOR, () => { + setTimeout(runRoutines, INITIAL_TIMER); + setTimeout(setupReload, RECHECK_TIMER); +}); \ No newline at end of file