el4cteo/roblox-skills

roblox-game-systems

Recipes for common systems built on server authority - currency service and leaderstats, XP/levels, round loops with intermission and teams, validated melee/ranged combat, inventory and tools, soft-currency shops, obby checkpoints, daily rewards, pets.

소스 보기
원본 Skill 문서

원본 저장소의 제목, 예시, 코드, 표, 링크, 이미지를 유지해 표시합니다.

Game systems recipes

Every recipe follows the same contract:

  1. State lives on the server in a service module; persistent parts go through the data layer

(roblox-data-stores).

  1. Clients send intents through validated, rate-limited remotes (roblox-security,

roblox-networking) and render state they receive (attributes, snapshots/deltas).

  1. Config is data: tunables in a shared/server config module (or live ConfigService configs).
  2. Lifecycle-safe: handles late joiners, respawns, leaving mid-action, and server shutdown.
SystemReference
Leaderstats, currency service, XP/levels, daily rewards, obby checkpointsreferences/progression.md
Round loop (intermission → match → results), teams, spawningreferences/round-system.md
Melee and ranged combat with server validation, cooldowns, damage attributionreferences/combat.md
Inventory, equipping tools, shop purchases (soft currency), pets that followreferences/inventory-shop.md

Currency service (the pattern every economy uses)

luau
--!strict
-- ServerScriptService/Server/Services/CurrencyService.luau
local Players = game:GetService("Players")

type Balances = { [Player]: number }

local MAX_BALANCE = 1e12

local CurrencyService = {}
local balances: Balances = {}

local function publish(player: Player)
	player:SetAttribute("Coins", balances[player]) -- replicated to every client; UI listens
end

function CurrencyService.load(player: Player, saved: number?)
	balances[player] = math.clamp(saved or 0, 0, MAX_BALANCE)
	publish(player)
end

function CurrencyService.get(player: Player): number
	return balances[player] or 0
end

-- Positive amount only; returns the new balance.
function CurrencyService.add(player: Player, amount: number, _source: string): number?
	local balance = balances[player]
	if balance == nil or not math.isfinite(amount) or amount <= 0 then
		return nil
	end
	balances[player] = math.min(balance + math.floor(amount), MAX_BALANCE)
	publish(player)
	return balances[player]
end

-- Atomic check-and-spend; false if insufficient.
function CurrencyService.spend(player: Player, amount: number, _sink: string): boolean
	local balance = balances[player]
	if balance == nil or not math.isfinite(amount) or amount <= 0 or balance < amount then
		return false
	end
	balances[player] = balance - math.floor(amount)
	publish(player)
	return true
end

Players.PlayerRemoving:Connect(function(player)
	balances[player] = nil -- after the data layer has saved it
end)

return CurrencyService
  • One module owns each resource; nothing else writes it. Log sources/sinks to analytics

(roblox-analytics-liveops).

  • The in-memory balance is saved by the data layer (ProfileStore profile.Data.coins) — or make the

profile table the balance store directly.

  • For display, clients read player:GetAttribute("Coins") and GetAttributeChangedSignal("Coins").

leaderstats (a Folder with IntValues under the player) shows values in the player list.

Design checklist for any new system

  • [ ] Where does authoritative state live, and how is it persisted?
  • [ ] What can the client request, and how is each request validated and rate-limited?
  • [ ] What happens on join mid-session, respawn, leave, teleport, and server shutdown?
  • [ ] How is it tuned (config) and measured (analytics)?
  • [ ] How does it behave with 1 player, full servers, and high latency?
  • [ ] Is it streaming-safe on the client?

Related skills

roblox-architecture, roblox-security, roblox-data-stores, roblox-networking, roblox-characters-animation, roblox-monetization, roblox-ui.

같은 저장소의 Skills

더 많은 Skills

모든 Skills
el4cteo
커뮤니티

roblox-security

Anti-exploit design - never trust the client, validate every remote argument (NaN, spoofed instances, strings), rate limiting, ProximityPrompt/ClickDetector abuse, network ownership, movement and hit validation, economy/trade duplication, code confidentiality, secure teleports, heuristics, Ban API. Use when writing server handlers for client input, combat/economy/trading, or reviewing for exploits.

설치 수
2
GitHub Stars
29
업데이트
9월 28일
el4cteo
커뮤니티

roblox-analytics-liveops

Analytics and live ops - AnalyticsService economy/funnel/onboarding/progression/custom events, player segments, experience configs via ConfigService, A/B experiments, badges, experience notifications, timed events, daily rewards, season passes. Use when instrumenting a game, tuning economy or onboarding, running A/B tests or feature flags, or planning live events and re-engagement.

설치 수
2
GitHub Stars
29
업데이트
9월 28일
el4cteo
커뮤니티

roblox-architecture

Roblox project structure and client/server model - replication, where code and assets belong (ServerScriptService, ReplicatedStorage, StarterPlayer), RunContext, service/controller bootstrapping, player/character lifecycle, CollectionService components, attributes, streaming-safe client code, library choices. Use when starting a project, deciding where code goes, or fixing replication/streaming bugs.

설치 수
2
GitHub Stars
29
업데이트
9월 28일
el4cteo
커뮤니티

roblox-audio

Sound and music - the Audio API (AudioPlayer, AudioEmitter, AudioListener, AudioDeviceOutput, Wire, effects, faders), classic Sound/SoundGroup, 2D vs 3D audio, music and SFX volume, client vs server playback, asset permissions, streaming caveats, voice routing, text-to-speech. Use when adding music, sound effects, spatial audio, mixing, or fixing sounds that don't play.

설치 수
2
GitHub Stars
29
업데이트
9월 28일