特定のプレイヤーだけが通り抜けられるドアを作成します。

  1. Door という名前のパーツを設置します。
  2. Door の中に、RemoteEvent を追加します。
  3. さらに Script を追加し、以下のプログラムを入力します。
local Players = game:GetService("Players")
local door = script.Parent

-- ドアを通り抜けられるプレイヤーIDのリスト
local includePlayers = {
    000000000,
    111111111,

}

door.Touched:Connect(function(hit)
    local player = Players:GetPlayerFromCharacter(hit.Parent)
    if player then
        if table.find(includePlayers,player.UserId) then
            door.RemoteEvent:FireClient(player)
        end
    end
end)
  1. StarterPlayer の StarterPlayerScripts に LocalScript を追加し、以下のプログラムを入力します。
local door = game.Workspace:WaitForChild("Door")

door.RemoteEvent.OnClientEvent:Connect(function()
    door.CanCollide = false
end)

サーバー側で、「CanCollide を false にし、wait(xx)とし、CanCollide を ftrue」としたいところですが、そうするとタイミングによっては、他のプレイヤーも通れてしまいます。それを防ぐには、プレイヤーのクライアント側で、CanCollide を false にするというわけです。

もっと簡単に実現する方法

さらに、もっと簡単に処理したい場合は、LocalScriptに、以下のようなプログラムを入れておけば、良いわけです。

local Players = game:GetService("Players")
local player = Players.LocalPlayer
local door = game.Workspace:WaitForChild("Door")

-- ドアを通り抜けられるプレイヤーIDのリスト
local includePlayers = {
    000000000,
    111111111,

}

if table.find(includePlayers,player.UserId) then
    door.CanCollide = false
end

グループのランクによる制御

あるグループに入っていて、役割のランクが100以上の場合に限り、入れる部屋を作りたい場合は以下のように行えば実現できるでしょう。

local GROUP_ID = xxxxxxx -- グループのID
local GROUP_RANK = 100 -- 部屋に入れるランク(これ以上のランク者が入れる)

-- グループIDを渡すと、そのランクを返す
local function getGroupRank(player,groupId)
    local GroupService = game:GetService("GroupService")
    local playerRank = player:GetRoleInGroup(groupId)
    local groups = GroupService:GetGroupsAsync(player.UserId)
    for _, groupInfo in pairs(groups) do
        if groupInfo.Id == groupId then
            return groupInfo.Rank
        end
    end
    return -1    -- グループに入っていない
end

if getGroupRank(player,GROUP_ID) >= GROUP_RANK then
    door.CanCollide = false
end

なお、グループに入っているかどうかを調べるだけなら、「 player:IsInGroup(GROUP_ID) 」で調べられます。

By schilverberch

ROBLOXでゲームを作ろう! 一緒にプログラミングを学びましょう。

コメントを残す