2013-08-06 506 views
0

我正在嘗試製作新的管理命令腳本;到目前爲止我所擁有的全部是kill命令......除非我使用「:* me」參數(「*」是任何命令,「:」是識別字符, 「T明白爲什麼這是行不通的。Roblox管理命令腳本

我已經嘗試了一些瘋狂的事情,試圖使這項工作,所以代碼可以從我有它最初被屠殺......

admins = {"FakeNameHereSoNoStalkers"} 

function kill(target) 
    for i=1,#target do 
     game.Players.target[i].Character:BreakJoints() 
    end 
end 

function isadmin(source) 
    for i=1,#admins do 
     if admins[i]:lower()==source:lower() then return true end 
    end 
end 

function findplayer(msg, source) 
    people = {} 
    c = game.Players:GetChildren() 
    if msg:lower()=="me" then 
     table.insert(people, source) 
     return people 
    elseif msg:lower()=="all" then 
     for i=1,#c do 
      table.insert(people, c[i]) 
     end 
     return people 
    else 
     local length = msg:len() 
     for i=1,#c do 
      if c[i].Name:lower():sub(1, length)==msg:lower() then 
       table.insert(people, c[i]) 
      end 
     end 
     return people 
    end 
end 

game.Players.PlayerAdded:connect(function(player) 
    source = player.Name 
    if isadmin(source) == true then 
     player.Chatted:connect(function(msg, player) 
      if msg:lower():sub(1,6)==":kill " then 
       msg = msg:sub(7) 
       target = findplayer(msg, source) 
       kill(target) 
      end 
     end) 
    end 
end) 

回答

0
for i=1,#target do 
    game.Players.target[i].Character:BreakJoints() 
end 

是不正確,如果「目標」包含「FakeNameHereSoNoStalkers」然後運行代碼爲:

game.Players.target.1.Character:BreakJoints() 

這是完全不正確的。


c = game.Players:GetChildren() 

切勿使用「玩家:的GetChildren()」,它不能保證只返回球員。

而是使用:

c = Game.Players:GetPlayers() 

if msg:lower()=="me" then 
    table.insert(people, source) 
    return people 

在這裏,您在列表中「人」,在那裏你在其他地方增加了玩家對象添加玩家的名字。


固定碼:

local Admins = {"FakeNameHereSoNoStalkers"} 

function Kill(Players) 
    for i,Player in ipairs(Players) do 
     if Player.Character then 
      Player.Character:BreakJoints() 
     end 
    end 
end 

function IsAdmin(Player) 
    for i,AdminName in ipairs(Admins) do 
     if Player.Name:lower() == AdminName:lower() then return true end 
    end 
    return false 
end 

function GetPlayers(Player,Msg) 
    local Targets = {} 
    local Players = Game.Players:GetPlayers() 

    if Msg:lower() == "me" then 
     Targets = { Player } 
    elseif Msg:lower() == "all" then 
     Targets = Players 
    elseif Msg:lower() == "others" then 
     for i,Plr in ipairs(Players) do 
      if Plr ~= Player then 
       table.insert(Targets,Plr) 
      end 
     end 
    else 
     for i,Plr in ipairs(Players) do 
      if Plr.Name:lower():sub(1,Msg:len()) == Msg then 
       table.insert(Targets,Plr) 
      end 
     end 
    end 
    return Targets 
end 

Game.Players.PlayerAdded:connect(function(Player) 
    if IsAdmin(Player) then 
     Player.Chatted:connect(function(Msg) 
      if Msg:lower():sub(1,6) == ":kill " then 
       Kill(GetPlayers(Player,Msg:sub(7))) 
      end 
     end) 
    end 
end) 
+0

這是做管理一個真正可怕的方式。用發送事件的按鈕創建一個簡單的Gui會更好。此外,你應該打破發送不是管理員的命令的任何人的關節,並記錄他們的嘗試,或將他們添加到禁止列表。 另外,您不應該根據播放器的名稱,而是UserId來執行此操作。你也應該密碼保護行動。 –