Предмет за значок другой игры
Выдай игроку предмет, скин или способность, если у него есть значок из другой игры.
Как это работает
Игрок получает значок в одном плейсе, затем заходит в ваш и получает награду. Проверить можно значок любой открытой игры без ограничения 18+. Значок остаётся у игрока: проверка его не расходует.
Подготовка
- Узнайте ID исходного плейса из адреса его страницы:
/places/42означает ID42. Номер значка указан рядом с ним на странице игры. Одинаковые номера в разных плейсах — разные значки. - В своей игре положите инструмент
CollabRewardвServerStorage. - Включите
HttpService.HttpEnabledв настройках игры. - Добавьте обычный серверный
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 проверяет значок текущего плейса.
