バッジの作り方

初めてゲームに参加したプレイヤーにバッジを与える方法です。
まず、バッジの画像を登録して、IDを作成しておきます。

  1. まずはバッジの画像を作成します。
    画像作成ソフトか、下記のサイトを使って作ります。画像サイズは512x512になります。最終的に円形に切り取られますので、その辺りも考慮してください。なお画像ファイルはPNGがベストです。
    https://www.photopea.com
  2. Creator Dashboardに移動します。
    https://create.roblox.com/creations
  3. バッジを設置したいゲームを選択します。
  4. 左側メニューの「Associated Items」をクリックします。
  5. BADGESになっていると思いますので、「CREATE ABADGE」をクリックします。
  6. 「UPLOAD IMAGE」をクリックし、用意しておいた画像を選択します。
  7. Nameにバッジの名称を入力します。
  8. Descriptionにバッジの説明を入力します。
  9. 「CREATE BADGE」をクリックして完了です。
  10. 作成したバッジをクリックすると、下記のようなURLが確認できると思います。
    バッジ番号の数字がIDになりますので書き留めておきましょう。
    https://www.roblox.com/badges/バッジ番号/ゲーム名

バッジを与える関数

この関数は、プレイヤーにバッジを与えるものです。

local BadgeService = game:GetService("BadgeService")
 
local function awardBadge(player, badgeId)
    -- バッジ情報を取得する
    local success, badgeInfo = pcall(function()
        return BadgeService:GetBadgeInfoAsync(badgeId)
    end)
    if success then
        -- バッジの付与が可能かどうかを確認する
        if badgeInfo.IsEnabled then
            -- バッジを与える
            local awarded, errorMessage = pcall(BadgeService.AwardBadge, BadgeService, player.UserId, badgeId)
            end)
            if not awarded then
                warn("Error while awarding badge:", errorMessage)
            end
        end
    else
        warn("Error while fetching badge info!")
    end
end

初めてゲームに入ったプレイヤーにバッジを与える

下記のプログラムは、初めてゲームに入ったプレイヤーにバッジを与えるものです。

-- local BadgeService = game:GetService("BadgeService")
local Players = game:GetService("Players")
 
local badgeID = 00000000  -- 与えるバッジの番号を設定
 
local function onPlayerAdded(player)
    -- プレーヤーがバッジを持っているかどうか確認する
    local success, hasBadge = pcall(function()
        return BadgeService:UserHasBadgeAsync(player.UserId, badgeID)
    end)
 
    -- エラーが発生した場合は、警告を出して終了する
    if not success then
        warn("Error while checking if player has badge!")
        return
    end
 
    if not hasBadge then    -- バッジを持っていなかったら実行
        awardBadge(player,badgeID)    -- 上記のバッジを与える関数を呼ぶ
    end
end

Players.PlayerAdded:Connect(onPlayerAdded)

モジュールスクリプト

上記の2つの処理を汎用的に使えるようにモジュールスクリプトにしてみました。

local BadgeManager = {}

local BadgeService = game:GetService("BadgeService")

function BadgeManager:give(player,badgeID)
    -- プレーヤーがバッジを持っているかどうか確認する
    local success, hasBadge = pcall(function()
        return BadgeService:UserHasBadgeAsync(player.UserId, badgeID)
    end)
    -- エラーが発生した場合は、警告を出して戻る
    if not success then
        warn("バッジ有無のチェックでエラー発生!")
        return
    end
    if hasBadge then
        return    -- すでにバッジを持っているのでそのまま戻る
    end

    -- バッジを授与する処理
    local success, badgeInfo = pcall(function()
        return BadgeService:GetBadgeInfoAsync(badgeId)
    end)

    if success then
        if badgeInfo.IsEnabled then    -- バッジが有効になっている
            local success, result = pcall(function()
                return BadgeService:AwardBadge(player.UserId, badgeId)
            end)
            if not success then
                warn("バッジ授与時のエラー:", result)
             elseif not result then
                warn("バッジの授与に失敗しました")
             end
        end
    else
        warn("バッジ情報取得エラー:" .. badgeInfo)
    end
end

return BadgeManager

返信を残す