cybermax / studwright /index.html
CyberMax-tools's picture
Add/update privacy-friendly view counter on 120 page(s)
1a5db17 verified
Raw History Blame Contribute Delete
15.3 kB
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Studwright: 16 Tested Luau Game Systems for Roblox (Saves, Receipts, Codes, Rewards, Leaderboards)</title>
<meta name="description" content="Roblox scripts you can trust: session-locked DataStore saves, ProcessReceipt that never double-grants, codes, daily and playtime rewards, leaderboards, loot tables with pity, inventory, currency, rebirths and remote validation. 16 Luau modules, 66 tests, $12. Try the free modules in your browser.">
<meta name="keywords" content="roblox scripts, luau modules, roblox datastore, session lock, processreceipt, roblox codes system, daily rewards roblox, roblox leaderboard script, roblox egg system, loot table luau, roblox inventory system, rebirth system, remote event security, roblox studio kit">
<meta name="theme-color" content="#11141B">
<link rel="canonical" href="https://cybermax-tools-cybermax.static.hf.space/studwright/index.html">
<link rel="manifest" href="manifest.webmanifest">
<link rel="icon" href="icon.svg" type="image/svg+xml">
<link rel="apple-touch-icon" href="icon-192.png">
<meta property="og:type" content="website">
<meta property="og:title" content="Studwright: 16 tested Luau game systems for Roblox">
<meta property="og:description" content="Saves that can't duplicate items, purchases that never double-grant, codes, rewards, leaderboards, loot, inventory and remote guards. 66 tests. $12, 3 modules free.">
<meta property="og:url" content="https://cybermax-tools-cybermax.static.hf.space/studwright/index.html">
<meta property="og:image" content="https://cybermax-tools-cybermax.static.hf.space/studwright/og.png">
<meta name="twitter:card" content="summary_large_image">
<script type="application/ld+json">
{"@context":"https://schema.org","@graph":[
{"@type":"SoftwareSourceCode","name":"Studwright Luau Kit","programmingLanguage":"Luau","runtimePlatform":"Roblox","codeSampleType":"full solution","description":"16 tested Luau modules for Roblox game systems: session-locked saves, purchase receipts, codes, daily and playtime rewards, leaderboards, loot tables, inventory, currency, rebirths, remote validation, cooldowns, state machines, springs, signals and number formatting.","author":{"@type":"Organization","name":"CyberMax"}},
{"@type":"Product","name":"Studwright: 16 Tested Luau Game Systems for Roblox","description":"16 Luau modules (2,228 lines) with 66 automated tests, an example simulator server, a drag-in .rbxmx and a Rojo project. Royalty-free for unlimited experiences.","brand":{"@type":"Brand","name":"CyberMax"},"image":"https://cybermax-tools-cybermax.static.hf.space/studwright/og.png","offers":{"@type":"Offer","price":"12.00","priceCurrency":"USD","availability":"https://schema.org/InStock","url":"https://cybermax-tools-cybermax.static.hf.space/studwright/index.html#pack"}},
{"@type":"FAQPage","mainEntity":[
{"@type":"Question","name":"How does Studwright stop item duplication when players switch servers?","acceptedAnswer":{"@type":"Answer","text":"SaveData session-locks every save with UpdateAsync: only one server can own a player's data at a time. A second server waits and retries until the first one releases the lock on leave, and a server that loses its lock stops writing and kicks the player instead of overwriting newer data."}},
{"@type":"Question","name":"Can a Developer Product purchase be granted twice?","acceptedAnswer":{"@type":"Answer","text":"No. Receipts remembers every PurchaseId in the player's save and returns PurchaseGranted only after the save that contains it succeeded, so Roblox's retries are acknowledged without a second grant."}},
{"@type":"Question","name":"Can I use Studwright in a paid or monetised experience?","acceptedAnswer":{"@type":"Answer","text":"Yes. Royalty-free in unlimited Roblox experiences, including ones that earn Robux and DevEx, for yourself or clients, with no credit needed. You can't resell or share the modules themselves."}},
{"@type":"Question","name":"Is Studwright made by Roblox?","acceptedAnswer":{"@type":"Answer","text":"No. Studwright is original code by CyberMax. Roblox and Roblox Studio are trademarks of Roblox Corporation, named only to describe compatibility."}}]}
]}
</script>
<link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="studwright.css">
</head>
<body>
<header class="top"><div class="wrap">
<a class="brand" href="#"><img src="icon.svg" alt="" width="28" height="28"> Studwright <small>by CyberMax</small></a>
<a class="btn" href="#pack" id="top-buy">Get all 16 · $12</a>
</div></header>
<main class="wrap">
<section class="hero">
<h1>Roblox game systems that don't lose saves or Robux.</h1>
<p class="lede">16 tested Luau modules for what nearly every experience needs: <b>session-locked saves</b>, <b>purchases that never double-grant</b>, codes, daily and playtime rewards, leaderboards, <b>egg rolls with pity</b>, inventory, currency and rebirths, and <b>remote guards</b> that stop exploiters. Drag one file into Studio. <b>3 modules are free.</b></p>
<ul class="facts" aria-label="Kit facts">
<li><b>16</b> modules · 2,228 lines</li>
<li><b>66</b> automated tests</li>
<li><b>1</b> example simulator server</li>
<li><b>75¢</b> a system ($12 one-time)</li>
</ul>
<p class="cta-row"><a class="btn" href="#pack">Get the kit · $12</a> <a class="btn ghost" href="#try">Run the free modules now</a></p>
</section>
<section class="card play" id="try" aria-labelledby="h-try">
<h2 id="h-try">Try it: real Luau, running in your browser</h2>
<p class="hint">This runs the free Studwright modules (Format, Signal, Cleanup) in the real Luau VM compiled to WebAssembly. Edit the code and press Run.</p>
<div class="chips" id="examples" role="group" aria-label="Examples">
<button class="chip on" type="button" data-ex="format">Format numbers</button>
<button class="chip" type="button" data-ex="signal">Signal</button>
<button class="chip" type="button" data-ex="cleanup">Cleanup</button>
</div>
<label class="sr" for="code">Luau code</label>
<textarea id="code" spellcheck="false" autocapitalize="off" autocomplete="off" rows="12"></textarea>
<div class="run-row"><button class="btn" id="run" type="button" disabled>▶ Run</button><span class="hint" id="vm">Loading the Luau VM…</span></div>
<pre id="out" aria-live="polite" class="out">Output appears here.</pre>
<div class="free-row">
<a class="btn small" id="btn-free" href="studwright-sampler-1.0.0.zip" download>Download the 3 free modules (.zip, .rbxmx inside)</a>
<span class="hint">Same licence as the kit: free for commercial experiences.</span>
</div>
</section>
<section class="card" aria-labelledby="h-mods">
<h2 id="h-mods">What's in the kit</h2>
<p class="hint">Server modules use DataStoreService or MarketplaceService. Shared modules run on both sides. Tap a module for its usage.</p>
<div class="mods" id="mods"></div>
</section>
<section class="card proof" aria-labelledby="h-proof">
<h2 id="h-proof">Tested like a live game, before you ship it</h2>
<p>Every build runs <b><span id="test-count">66</span> tests</b> in a real Luau VM against a Roblox engine mock with a virtual clock, DataStore outages and two servers fighting over one save. The tests ship in the kit, so you can run them yourself.</p>
<ul class="tests" id="tests"></ul>
<p class="hint">Results from the build of 1 Oct 2026 (luau-web 1.4.0). <button class="linkish" type="button" id="more-tests">Show all tests</button></p>
</section>
<section id="pack" class="pack card">
<div class="pack-head">
<div>
<h2>Studwright Luau Kit 1.0: everything in one zip</h2>
<p><b>16 ModuleScripts</b> as a drag-in <b>Studwright.rbxmx</b> and as <code>.luau</code> files for <b>Rojo</b>, an <b>example server</b> that wires saves, leaderstats, a code, daily rewards, a Developer Product, rebirths and guarded remotes, <b>API.md</b> with every function, the <b>66 tests</b> and a plain-English licence.</p>
<ul class="inside">
<li><b>SaveData</b>: session lock, retries, migrations, autosave, BindToClose, Erase for deletion requests</li>
<li><b>Receipts</b>: ProcessReceipt that saves before it says granted, and never grants twice</li>
<li><b>Codes</b>, <b>DailyRewards</b> (UTC streaks, grace days), <b>PlaytimeRewards</b></li>
<li><b>Leaderboard</b>: leaderstats + global top lists, throttled writes, huge-number encoding</li>
<li><b>LootTable</b> (luck, pity, odds text), <b>Inventory</b> (stacks, slots, equip), <b>Currency</b> (multipliers, rebirths)</li>
<li><b>RemoteGuard</b>: rate limits + type checks that reject NaN, inf, long strings and extra args</li>
<li><b>Cooldown</b>, <b>StateMachine</b>, <b>Spring</b>, plus the free <b>Signal</b>, <b>Cleanup</b> and <b>Format</b></li>
</ul>
</div>
<div class="price"><div class="big">$12</div><div class="hint">one-time · instant download · 75 KB zip</div>
<a class="btn buy" id="buy" href="https://data.cybermax-tools.workers.dev/buy/studwright?s=hub-studwright" rel="noopener">Buy on Polar</a>
<div class="hint">Secure checkout by Polar (cards, Apple Pay, Google Pay). <a href="https://cybermax.cybermax-tools.workers.dev/terms#payments">14-day refund policy</a>.</div>
<div class="bundle" id="bundle-box"><b>Builder Bundle: $18</b> instead of $25. Studwright plus <a href="../glintpane/index.html">Glintpane</a> (77 game icons + 9-slice UI kit) and <a href="../blipwren/index.html">Blipwren SFX</a> (120 game sounds as OGG, ready to upload).
<a class="btn small complete" id="bundle" href="https://data.cybermax-tools.workers.dev/buy/roblox-builder-bundle?s=hub-studwright" rel="noopener">Get the Builder Bundle · $18</a></div>
</div>
</div>
</section>
<section class="card code" aria-labelledby="h-code">
<h2 id="h-code">A safe save in 8 lines</h2>
<pre><code>local SaveData = require(game.ReplicatedStorage.Studwright.SaveData)
local store = SaveData.new({ name = "PlayerData_v1", template = { Coins = 0, Pets = {} } })
game.Players.PlayerAdded:Connect(function(player)
local profile = store:Load(player) -- session-locked; nil if the player left
if not profile then return end
profile.Data.Coins += 100 -- autosaves, saves on leave and on shutdown
end)</code></pre>
<p class="hint">Install: drag <code>Studwright.rbxmx</code> onto ReplicatedStorage (or copy the folder into your Rojo project). Turn on "Enable Studio Access to API Services" to test saves in Studio.</p>
</section>
<section class="seo" id="faq">
<h2>FAQ</h2>
<h3>How does it stop item duplication when players hop servers?</h3>
<p>SaveData session-locks every save through UpdateAsync, so only one server owns a player's data at a time. If a player joins a new server before the old one finished saving, the new server waits and retries until the lock is released. A lock older than 30 minutes (a crashed server) is taken over. A server that finds its lock taken stops writing and kicks the player rather than overwrite newer data. All of this is covered by tests with two simulated servers.</p>
<h3>Can a Developer Product be granted twice?</h3>
<p>No. Receipts keeps the last 100 PurchaseIds in the player's save and only answers PurchaseGranted after the save holding that PurchaseId succeeded. When Roblox retries a receipt, it's acknowledged without a second grant. If the buyer isn't on this server yet, or saving fails, it answers NotProcessedYet and Roblox tries again later.</p>
<h3>Why not a free library?</h3>
<p>Good free libraries exist for single jobs, and ProfileStore is a popular free choice for saves. Studwright is for when you want the whole set of everyday systems in one consistent style that already work together (saves feed receipts, codes, rewards and leaderboards), with tests you can run and one example server that shows the wiring.</p>
<h3>Why not a single-system kit?</h3>
<p>Single systems sell for $4.29 to $20 each on itch.io (prices seen 1 Oct 2026: codes $4.99, time rewards $4.99, leaderstats $7.99, pet system $14.99, inventory $20). Studwright gives you 16 systems for $12, about 75 cents each, all sharing one save.</p>
<h3>Does it include UI or models?</h3>
<p>No, Studwright is server and shared code. For buttons, panels and icons get <a href="../glintpane/index.html">Glintpane</a>, or the Builder Bundle with both plus 120 sound effects.</p>
<h3>Can I use it in a paid or monetised experience?</h3>
<p>Yes. Royalty-free in unlimited experiences, including ones that earn Robux and DevEx, for yourself or for clients, with no credit needed. You can't resell or share the modules themselves.</p>
<h3>Rojo, Wally, strict mode?</h3>
<p>The zip has a <code>default.project.json</code> for Rojo and the modules as <code>.luau</code> files. They run in Roblox's default (non-strict) type mode and use modern Luau (<code>task</code>, generalized iteration, compound assignment).</p>
<h3>How do I get the files after buying?</h3>
<p>Polar emails a receipt with the download link straight away, and the zip stays in your Polar customer portal for later versions. It's a one-time purchase.</p>
<p><a class="btn" href="#pack">Get all 16 modules · $12</a></p>
</section>
<aside class="related">
<h2>More for game developers</h2>
<p><a href="../glintpane/index.html">Glintpane</a>: 77 game icons + 9-slice UI kit for Roblox · <a href="../blipwren/index.html">Blipwren SFX</a>: 120 game sound effects · <a href="../grindscale/index.html">Grindscale</a>: balance your game economy in a spreadsheet</p>
</aside>
</main>
<footer class="more"><div class="wrap">
<div class="more-title">More from CyberMax</div>
<div class="more-links"><a href="../index.html">All free tools &amp; games</a><a href="../glintpane/index.html">Glintpane UI Kit</a><a href="../blipwren/index.html">Blipwren SFX</a><a href="https://cybermax.cybermax-tools.workers.dev/store/?utm_source=studwright&amp;utm_medium=more-from">CyberMax Store · paid products, API plans &amp; bundles</a></div>
<div class="copy">Studwright © 2026 CyberMax. All rights reserved. Roblox and Roblox Studio are trademarks of Roblox Corporation; Studwright is not affiliated with or endorsed by Roblox. Luau VM in the browser: luau-web (MIT).</div>
</div></footer>
<div class="toast" id="toast" role="status"></div>
<script type="module" src="app.js"></script>
<!-- cybermax-count:start --><script>(function(){try{var u="https://data.cybermaxtools.com/v?p="+encodeURIComponent(location.host+location.pathname)+"&r="+encodeURIComponent((document.referrer||"").split("/")[2]||"")+(function(){var q=new URLSearchParams(location.search),s=q.get("utm_source");return s?"&us="+encodeURIComponent(s)+"&uc="+encodeURIComponent(q.get("utm_campaign")||""):""})();navigator.sendBeacon?navigator.sendBeacon(u):(new Image).src=u}catch(e){}})()</script><!-- cybermax-count:end --></body>
</html>