Skip to content

Examples

Practical gameplay patterns for PlayerState. Start with Quick start if you have not called PlayerState.Init yet.

IMPORTANT

Clients can only read data. All writes belong on the server.

Currency System

lua
-- ServerStorage.CurrencyService
local CurrencyService = {}
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local PlayerState = require(ReplicatedStorage.Libraries.PlayerState.PlayerStateServer)

function CurrencyService.GetCoins(player: Player): number
    return PlayerState.Get(player, "Coins") or 0
end

function CurrencyService.AddCoins(player: Player, amount: number): boolean
    if amount <= 0 then return false end
    
    local currentCoins = CurrencyService.GetCoins(player)
    PlayerState.Set(player, "Coins", currentCoins + amount)
    return true
end

function CurrencyService.SpendCoins(player: Player, amount: number): boolean
    local currentCoins = CurrencyService.GetCoins(player)
    if currentCoins < amount then
        return false
    end
    
    PlayerState.Set(player, "Coins", currentCoins - amount)
    return true
end

return CurrencyService
lua
-- Enhanced version with proper validation
local CurrencyService = {}
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local PlayerState = require(ReplicatedStorage.Libraries.PlayerState.PlayerStateServer)

local MAX_COINS = 999999999
local MIN_TRANSACTION = 1

function CurrencyService.AddCoins(player: Player, amount: number): boolean
    -- Validate inputs
    if not player or typeof(amount) ~= "number" then
        return false
    end
    
    if amount < MIN_TRANSACTION or amount > MAX_COINS then
        warn(`[Currency] Invalid amount: {amount}`) 
        return false
    end
    
    local currentCoins = PlayerState.Get(player, "Coins") or 0
    local newTotal = currentCoins + amount
    
    if newTotal > MAX_COINS then
        warn(`[Currency] Would exceed max coins for {player.Name}`) 
        return false
    end
    
    PlayerState.Set(player, "Coins", newTotal)
    print(`[Currency] Added {amount} coins to {player.Name}`)
    return true
end

return CurrencyService
Advanced Currency Features
lua
-- ServerStorage.AdvancedCurrencyService
local CurrencyService = {}

-- Multiple currency support
function CurrencyService.AddCurrency(player: Player, currencyType: string, amount: number)
    local path = `Currencies.{currencyType}`
    local current = PlayerState.GetPath(player, path) or 0
    PlayerState.SetPath(player, path, current + amount)
end

-- Transaction logging
function CurrencyService.LogTransaction(player: Player, type: string, amount: number)
    local transaction = {
        Type = type,
        Amount = amount,
        Timestamp = os.time()
    }
    PlayerState.AddToArray(player, "TransactionHistory", transaction)
end

return CurrencyService

PlayerState - High-Performance Roblox Data Management