Код IT Загрузка примера кода…

Lua main.lua
-- ServerScriptService/CoinManager.luau
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerStorage = game:GetService("ServerStorage")

local COIN_TEMPLATE = ReplicatedStorage:WaitForChild("CoinTemplate")
local COIN_SPAWN_POINTS = ServerStorage:WaitForChild("CoinSpawns")  -- Folder с Part'ами

local coinCount = 0
local coins = {}

local function spawnCoin(at: Vector3)
    local coin = COIN_TEMPLATE:Clone()
    coin.Position = at
    coin.Anchored = true
    coin.Parent = workspace

    local touchedConn
    touchedConn = coin.Touched:Connect(function(hit)
        local character = hit:FindFirstAncestorOfClass("Model")
        if not character then return end

        local player = game.Players:GetPlayerFromCharacter(character)
        if not player then return end

        -- Валидация: не слишком ли часто?
        if os.clock() - (coins[coin] or 0) < 0.5 then return end

        coinCount += 1
        coins[coin] = os.clock()
        touchedConn:Disconnect()
        coin:Destroy()

        -- Уведомляем клиента
        game.ReplicatedStorage.CoinCollected:FireClient(player, coinCount)
    end)

    coins[coin] = 0
end

-- Спавним по точкам
for _, point in COIN_SPAWN_POINTS:GetChildren() do
    if point:IsA("BasePart") then
        spawnCoin(point.Position)
    end
end
-- ServerScriptService/CoinManager.luau
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ServerStorage = game:GetService("ServerStorage")

local COIN_TEMPLATE = ReplicatedStorage:WaitForChild("CoinTemplate")
local COIN_SPAWN_POINTS = ServerStorage:WaitForChild("CoinSpawns")  -- Folder с Part'ами

local coinCount = 0
local coins = {}

local function spawnCoin(at: Vector3)
    local coin = COIN_TEMPLATE:Clone()
    coin.Position = at
    coin.Anchored = true
    coin.Parent = workspace

    local touchedConn
    touchedConn = coin.Touched:Connect(function(hit)
        local character = hit:FindFirstAncestorOfClass("Model")
        if not character then return end

        local player = game.Players:GetPlayerFromCharacter(character)
        if not player then return end

        -- Валидация: не слишком ли часто?
        if os.clock() - (coins[coin] or 0) < 0.5 then return end

        coinCount += 1
        coins[coin] = os.clock()
        touchedConn:Disconnect()
        coin:Destroy()

        -- Уведомляем клиента
        game.ReplicatedStorage.CoinCollected:FireClient(player, coinCount)
    end)

    coins[coin] = 0
end

-- Спавним по точкам
for _, point in COIN_SPAWN_POINTS:GetChildren() do
    if point:IsA("BasePart") then
        spawnCoin(point.Position)
    end
end