0

ホワイトリストに登録されていないプレイヤーが近くにいるときにサイレンを鳴らすように ComputerCraft プログラムを設定しています。

sensor = peripheral.wrap("top")
function arraysubset(a, b)
   local s = set(b)
   for _, el in pairs(a)
      if not s[el] then
         return false
      end
   end
   return true
end
function sirenOn() rs.setBundledOutput("back",colors.blue) end
function sirenOff() rs.setBundledOutput("back",0) end
while 1 do
  playersNear = sensor.getPlayerNames()
  allowedPlayers = {"VirtualDXS","jettrom","Shad0wlurker16","Demonicmobster","FireFang0113","riggs135","DaisySnow123","MasterAlex930"}
  if playersNear[1] ~= nil then
    if arraysubset(playersNear,allowedPlayers) then sirenOff() else sirenOn() end
  else sirenOff() end
end

ただし、3 行目で nil を呼び出そうとしています。これは、 set() 関数がコンピュータークラフトに存在しないと私に思わせます。不思議なんだけど:

  1. a配列が配列のサブセットであるかどうかを確認する別の(おそらくより良い)方法はありますかb
  2. そうでない場合、set() 関数を使用した API はどこで入手できますか?
4

1 に答える 1

0

subset() コードのソースを読み直すと、使用したコードには回答の前半のコードがさらに必要であることがわかります。

function set(list)
   local t = {}
   for _, item in pairs(list) do
       t[item] = true
   end
   return t
end
于 2015-07-29T17:02:26.237 に答える