UXR Spin System v4.3

Spin system with customizable rewards, animations, mobile support, and simulator-style design.

UXR SPIN SYSTEM
Version 4.3 Update
December 27, 2025

Security Improvements
  • ProcessReceipt Implementation
    Replaced PromptProductPurchaseFinished with proper ProcessReceipt callback for secure purchase handling. Purchases are now properly validated by Roblox before granting spins.
  • Duplicate Purchase Prevention
    Added receipt tracking to prevent the same purchase from being processed multiple times.
  • Input Validation
    Added type checking for all RemoteFunction communications to prevent exploits.

Performance Improvements
  • Memory Leak Fix
    Fixed infinite while loops that continued running after player left. All timer threads are now properly cleaned up on PlayerRemoving.
  • Player Thread Cleanup
    Server-side free spin timer threads are tracked per-player and terminated when player leaves.
  • Client Loop Cleanup
    Client-side loops are now cancelled on AncestryChanged to prevent orphaned coroutines.
  • Lookup Tables
    Replaced repetitive if-else chains with dictionary lookups for prize rotations and product amounts.

Animation System Overhaul
  • Replaced SPR with TweenService
    Removed external spr library dependency. All animations now use native Roblox TweenService.
  • Removed spinLibs Folder
    The spinLibs folder is no longer needed and can be safely deleted.
  • New Animation Timings
    • Panel open: 0.35s with Back easing (bounce effect)
    • Panel close: 0.25s with Quad easing
    • Spin wheel: 16s with Quart easing (smooth deceleration)
    • Bar tick: 0.08s snap animation

Spin Bar Fix
  • Fixed Missed Checkpoints
    The spin bar now correctly triggers on EVERY checkpoint, even when the wheel is spinning fast.
  • Frame-Independent Detection
    New algorithm tracks last rotation position and detects all checkpoints passed between frames:
    Code:
    local lastIndex = getCheckpointIndex(lastRotation)
    local currentIndex = getCheckpointIndex(currentRotation)
    -- Trigger bar animation for ALL checkpoints between lastIndex and currentIndex
  • Asynchronous Bar Animation
    Bar animations now run in separate threads, preventing the main loop from blocking.

New Features
  • SpinManager API Module
    New developer-friendly API for managing player spins:
    • getSpinCount(player) - Get spin count
    • setSpinCount(player, amount) - Set spin count
    • addSpins(player, amount) - Add spins
    • removeSpins(player, amount) - Remove spins
    • hasSpins(player) - Check if has spins
    • hasEnoughSpins(player, amount) - Check if has enough
    • getFreeSpinTimer(player) - Get free timer
    • resetSpins(player) - Reset to zero
    • getPlayerData(player) - Get all data
  • API Test Script
    Type /testspins in chat to run comprehensive API tests with detailed output.
  • Purchase Notification
    Players now receive a notification when spin purchase is successful.

Data Management Improvements
  • Retry Mechanism
    DataStore operations now retry up to 3 times with 2-second delays before failing.
  • Improved Error Logging
    All DataStore errors now include attempt count and player name for easier debugging.
  • BindToClose Handling
    Properly waits for all save operations to complete (up to 5 seconds) before game closes.
  • Thread-Safe Autosave
    Each player's data is saved in a separate thread during autosave.

Bug Fixes
  • Fixed spin bar not triggering on fast wheel speeds
  • Fixed memory leaks from infinite client loops
  • Fixed server timer threads persisting after player leaves
  • Fixed panel animation race conditions
  • Fixed editPlayerData not creating new fields

Code Quality
  • All error messages converted to English
  • Removed unnecessary comments
  • Added comprehensive API documentation
  • Refactored repetitive code into loops and lookup tables

SpinManager API Example:
Code:
local SpinManager = require(path.to.SpinManager)
local playerDataManager = require(path.to.PlayerDataManager)

-- Initialize once
SpinManager.init(playerDataManager)

-- Give player 5 spins
SpinManager:addSpins(player, 5)

-- Check if player has spins
if SpinManager:hasSpins(player) then
    print("Player has " .. SpinManager:getSpinCount(player) .. " spins!")
end

-- Get all player data
local data = SpinManager:getPlayerData(player)
print("Spins:", data.SpinCount)
print("Free Timer:", data.FreeTimer)
print("Has Spins:", data.HasSpins)

This update focuses on security, performance, and developer experience improvements.
Extra Animation Added
Bugs Fixed
Buy a license now
$9.99
EULA
Standard EULA
Use on any projects you own with attribution
Support
Standard
Includes:
Download the resource
Access new updates
Support from the creator
Support duration
Lifetime
2,656 Views
85 Purchases
78 Downloads
Jul 14, 2025 Published
Dec 26, 2025 Updated
5.00 star(s)
Average rating (3)
71.8 KB File size
Open source
  1. No
DRM-free
  1. Yes
Unobfuscated
  1. Yes
Type
  1. System
Supported languages
  1. English
Includes DRM
No
Source access (legacy)
Closed source & unobfuscated
Creator
Owner
Recommended for you
350+ command admin panel with cross-server moderation, Ban API, ranks & a mobile-ready UI
5.00 star(s) 9 ratings
620 purchases
Overhead UI System asset, perfect for adding player information displays to your Roblox game.
4.50 star(s) 6 ratings
559 purchases
Handcuff System asset, ideal for adding functional arrest mechanics to your Roblox game.
5.00 star(s) 6 ratings
391 purchases
Loading Screen System asset, ideal for creating smooth and interactive loading screens in Roblox.
5.00 star(s) 1 ratings
245 purchases
Taser System asset, ideal for adding realistic non-lethal combat mechanics to your Roblox game.
5.00 star(s) 3 ratings
241 purchases
2,656 Views
85 Purchases
78 Downloads
Jul 14, 2025 Published
Dec 26, 2025 Updated
5.00 star(s)
Average rating (3)
71.8 KB File size
Open source
  1. No
DRM-free
  1. Yes
Unobfuscated
  1. Yes
Type
  1. System
Supported languages
  1. English
Includes DRM
No
Source access (legacy)
Closed source & unobfuscated
Creator
Owner
Recommended for you
350+ command admin panel with cross-server moderation, Ban API, ranks & a mobile-ready UI
5.00 star(s) 9 ratings
620 purchases
Overhead UI System asset, perfect for adding player information displays to your Roblox game.
4.50 star(s) 6 ratings
559 purchases
Handcuff System asset, ideal for adding functional arrest mechanics to your Roblox game.
5.00 star(s) 6 ratings
391 purchases
Loading Screen System asset, ideal for creating smooth and interactive loading screens in Roblox.
5.00 star(s) 1 ratings
245 purchases
Taser System asset, ideal for adding realistic non-lethal combat mechanics to your Roblox game.
5.00 star(s) 3 ratings
241 purchases
Top