Hello everyone I am just making a tutorial on how to set up the Hnadcuff System for Knovon!
Please do the following:
--[[
Arrest folder goes in ServerScriptService
ArrestFolder folder goes in ServerStorage
Civs and Jail teams go in Teams
arrest folder goes in ReplicatedStorage
Handcuffs tool goes wherever you want
ArrestUi gui goes in StarterGui
other info:
you can't test in studio
turn on HTTP requests
settings are in the ArrestSettings module in the Arrest folder in ServerScriptService
]]
In Arrest folder go into Arrest > Arrest Settings type in the following:
local ArrestSettings = {
MainSettings = {
Permissions = {
[Group Id] = {
Rank Id,
Rank Id, -- duplicate if needed
},
},
DiscordWebhook = "", -- webhook to log arrest
JailTeamColor = BrickColor.new("Deep orange"),
CivilianTeamColor = BrickColor.new("Forest green"),
MaxTime = 5000,
},
DataSettings = {
DataStoreName = "ArrestStore",
DataKey = "Key_"
},
}
return ArrestSettings
Then go into Arrest > Arrest and type the following:
local HTTPService = game:GetService("HttpService")
local ArrestSettings = require(script.Parent.ArrestSettings)
local Permissions = ArrestSettings.MainSettings.Permissions
local function GetFolder(Player)
if game.ServerStorage.ArrestFolder:FindFirstChild(Player.Name) then
return game.ServerStorage.ArrestFolder:FindFirstChild(Player.Name)
else
return nil
end
end
local Webhook = ArrestSettings.MainSettings.DiscordWebhook
local JailColor = ArrestSettings.MainSettings.JailTeamColor
local CivilianColor = ArrestSettings.MainSettings.CivilianTeamColor
local MaxTime = ArrestSettings.MainSettings.MaxTime
local function SendHTTP(Player, Message)
local data = {
content = Message;
username = Player.Name;
avatar_url = "http://www.roblox.com/Thumbs/Avatar.ashx?x=100&y=100&Format=Png&userId=" .. Player.UserId
}
HTTPService:PostAsync(Webhook, HTTPService:JSONEncode(data))
end
game.ReplicatedStorage.arrest.Arrest.OnServerEvent:Connect(function(Arrester, Time, Reason)
if Arrester and Time and Reason then
local ArresterFolder = GetFolder(Arrester)
local Player = game.Players:GetPlayerByUserId(ArresterFolder.ArrestHolding.Value)
if Player then
local PlayerFolder = GetFolder(Player)
if ArresterFolder and PlayerFolder then
if tonumber(Time) and tostring(Reason) then
if Time <= MaxTime then
if ArresterFolder:FindFirstChild("ArrestHolding") then
if ArresterFolder.ArrestHolding.Value == Player.UserId then
Time = tonumber(Time)
Reason = tostring(Reason)
local Allowed = false
for Group, PermissionsTable in pairs(Permissions) do
for _, GroupRank in pairs(PermissionsTable) do
print(Arrester:GetRankInGroup(Group))
if Arrester:GetRankInGroup(Group) == GroupRank then
Allowed = true
end
end
end
if Allowed == true then
game.ReplicatedStorage.arrest.GiveArrestUi:FireClient(Arrester, " ", false)
ArresterFolder.ArrestHolding:Destroy()
Player.Character.Torso.Anchored = false
SendHTTP(Arrester, (tostring(Arrester.Name) .. " has arrested ".. tostring(Player.Name) .. " for ".. tostring(Reason) .. " and ".. tostring(Time) .. " time."))
if PlayerFolder:FindFirstChild("JailTime") then
PlayerFolder.JailTime.Value = Time
Player.TeamColor = JailColor
Player:LoadCharacter()
end
local TempFolder = game.ServerStorage:FindFirstChild(Player.Name .. "'s inventory")
if TempFolder then
TempFolder:Destroy()
end
end
end
end
end
end
end
end
end
end)
game.ReplicatedStorage.arrest.ArrestHold.OnServerEvent:Connect(function(Player, Target)
if Player and Target then
if Target.Parent then
local Parent = Target.Parent
if Parent:FindFirstChildOfClass("Humanoid") then
local Character = Parent
Target = game.Players:GetPlayerFromCharacter(Character)
if Target then
local PlayerFolder = GetFolder(Player)
local TargetFolder = GetFolder(Target)
if PlayerFolder and TargetFolder then
if not TargetFolder:FindFirstChild("ArrestHolding") then
if not PlayerFolder:FindFirstChild("ArrestHolding") then
local ArrestHolding = Instance.new("IntValue")
ArrestHolding.Value = Target.UserId
ArrestHolding.Name = "ArrestHolding"
ArrestHolding.Parent = PlayerFolder
game.ReplicatedStorage.arrest.GiveArrestUi:FireClient(Player, Target.Name, true)
local TempFolder = Instance.new("Folder")
TempFolder.Name = Target.Name .. "'s inventory"
TempFolder.Parent = game.ServerStorage
for _, Thing in pairs(Target.Backpack:GetChildren()) do
Thing.Parent = TempFolder
end
spawn(function()
Character.Torso.Anchored = true
while wait() do
if PlayerFolder:FindFirstChild("ArrestHolding") then
Character.Torso.CFrame = Player.Character.Torso.CFrame * CFrame.new(0, 0, -5)
else
break
end
end
end)
end
end
end
end
end
end
end
end)
game.ReplicatedStorage.arrest.Release.OnServerEvent:Connect(function(Arrester)
local ArresterFolder = GetFolder(Arrester)
if ArresterFolder and ArresterFolder ~= nil then
if ArresterFolder:FindFirstChild("ArrestHolding") then
local Player = game.Players:GetPlayerByUserId(ArresterFolder.ArrestHolding.Value)
if Player then
ArresterFolder.ArrestHolding:Destroy()
Player.Character.Torso.Anchored = false
game.ReplicatedStorage.arrest.GiveArrestUi:FireClient(Arrester, " ", false)
local TempFolder = game.ServerStorage:FindFirstChild(Player.Name .. "'s inventory")
if TempFolder then
for _, Thing in pairs(TempFolder:GetChildren()) do
Thing.Parent = Player.Backpack
end
end
end
end
end
end)
game.Players.PlayerRemoving:Connect(function(Player)
local PlayerFolder = GetFolder(Player)
if PlayerFolder:FindFirstChild("ArrestHolding") then
local Holding = game.Players:GetPlayerByUserId(PlayerFolder.ArrestHolding.Value)
if Holding then
PlayerFolder.ArrestHolding:Destroy()
Holding.Character.Torso.Anchored = false
local TempFolder = game.ServerStorage:FindFirstChild(Player.Name .. "'s inventory")
if TempFolder then
for _, Thing in pairs(TempFolder:GetChildren()) do
Thing.Parent = Player.Backpack
end
end
end
end
for _, Folder in pairs(game.ServerStorage.ArrestFolder:GetChildren()) do
if Folder:FindFirstChild("ArrestHolding") then
local OtherPlayer = game.Players:FindFirstChild(Folder.Name)
if OtherPlayer then
if Folder.ArrestHolding.Value == Player.UserId then
game.ReplicatedStorage.arrest.GiveArrestUi:FireClient(OtherPlayer, " ", false)
Folder.ArrestHolding:Destroy()
SendHTTP(Player, (Player.Name .. " has left while in ".. OtherPlayer.Name .. "'s cuffs."))
end
end
end
end
end)
while true do
wait(1)
for _, Player in pairs(game.Players:GetPlayers()) do
local PlayerFolder = GetFolder(Player)
if PlayerFolder and PlayerFolder ~= nil then
if PlayerFolder:FindFirstChild("JailTime") then
if PlayerFolder.JailTime.Value > 0 then
PlayerFolder.JailTime.Value = PlayerFolder.JailTime.Value - 1
game.ReplicatedStorage.arrest.UpdateTime:FireClient(Player, tostring(PlayerFolder.JailTime.Value))
if Player.TeamColor ~= JailColor then
Player.TeamColor = JailColor
Player:LoadCharacter()
end
else
if Player.TeamColor == JailColor then
Player.TeamColor = CivilianColor
Player:LoadCharacter()
end
end
end
end
end
end
Thank you,
Signed, Tbrown392