ДокументацияСтрой. Играй. Делись.
Войти через Jegg

Предмет за значок другой игры

Выдай игроку предмет, скин или способность, если у него есть значок из другой игры.

Как это работает

Игрок получает значок в одном плейсе, затем заходит в ваш и получает награду. Проверить можно значок любой открытой игры без ограничения 18+. Значок остаётся у игрока: проверка его не расходует.

Подготовка

  1. Узнайте ID исходного плейса из адреса его страницы: /places/42 означает ID 42. Номер значка указан рядом с ним на странице игры. Одинаковые номера в разных плейсах — разные значки.
  2. В своей игре положите инструмент CollabReward в ServerStorage.
  3. Включите HttpService.HttpEnabled в настройках игры.
  4. Добавьте обычный серверный Script в ServerScriptService, вставьте пример ниже и замените SOURCE_PLACE и SOURCE_BADGE.

Пример выдаёт инструмент при входе и после возрождения. Если игрок получит значок позже, награда появится при следующем входе. Инструмент не нужно сохранять отдельно: каждый вход заново подтверждает право на него.

local Players = game:GetService("Players")
local Http = game:GetService("HttpService")
local Storage = game:GetService("ServerStorage")

local SOURCE_PLACE = 42 -- ID страницы игры со значком
local SOURCE_BADGE = 7  -- Номер значка в этой игре
local REWARD = "CollabReward"
local started = {}

local function onPlayer(player)
    if started[player] then return end
    started[player] = true
    local eligible = false

    local function giveReward()
        if not eligible or player.Parent ~= Players then return end
        local backpack = player:WaitForChild("Backpack", 10)
        local character = player.Character
        local reward = Storage:FindFirstChild(REWARD)
        if backpack and reward and not backpack:FindFirstChild(REWARD)
            and not (character and character:FindFirstChild(REWARD)) then
            reward:Clone().Parent = backpack
        end
    end
    player.CharacterAdded:Connect(giveReward)

    local url = "https://jegg.lol/api/places/" .. SOURCE_PLACE
        .. "/badges/" .. SOURCE_BADGE .. "/users/" .. player.UserId
    for attempt = 1, 3 do
        local ok, data = pcall(function()
            return Http:JSONDecode(Http:GetAsync(url, true))
        end)
        if ok and type(data) == "table" and type(data.hasBadge) == "boolean" then
            eligible = data.hasBadge
            giveReward()
            return
        end
        wait(attempt * 2)
    end
    warn("Не удалось проверить значок для " .. player.Name)
end

Players.PlayerAdded:Connect(onPlayer)
Players.PlayerRemoving:Connect(function(player) started[player] = nil end)
for _, player in ipairs(Players:GetPlayers()) do
    spawn(function() onPlayer(player) end)
end

Для своей валюты, скина или способности замените выдачу инструмента своей логикой. Одноразовые награды сохраняйте в DataStore и проверяйте, что игрок ещё не забирал их.

Проверка через HTTP

GET https://jegg.lol/api/places/42/badges/7/users/1000001
{"hasBadge": true}

Последнее число — Player.UserId. Ответ false означает, что значка нет. Неизвестный, удалённый или недоступный значок возвращает 404; превышение лимита — 429 (1200 запросов в минуту с одного адреса). При ошибке награду не выдавайте, повторите проверку позже.

Проверяйте значки и выдавайте награды только на сервере. Проверка не позволяет выдать чужой значок: BadgeService:AwardBadge по-прежнему выдаёт только значки своей игры. Обычный UserHasBadge проверяет значок текущего плейса.

Продолжай создавать.К другим мануалам