Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Making scripts compatible with FiteringEnabled?

Asked by 8 years ago

I had a major hacking problem on my game, so I had to turn on FilteringEnabled, but unfortunately that breaks a few of the scripts that run on my game. Is there an easy way that I can convert these scripts to be compatible with FilteringEnabled, or will I have to re-write them altogether?

Here are the scripts I'm having problems with. They are all located within ServerScriptService

  • A roleplay name GUI that also displays the character name/description alongside the player's username in the scoreboard
DescriptionKey = "description"
NameKey = "name"

game.Players.PlayerAdded:connect(function(player)
    player.CharacterAdded:connect(function(character)

    ac = script.ScreenGui:Clone()
    ac.Parent = player.PlayerGui


    --Clone BillboardGui, add to character head
    bc = script.BillboardGui:Clone()
    bc.Parent = character.Head
    bc.Enabled = true

    --Create leaderstats
    stats = Instance.new("IntValue", player)
    stats.Name = "leaderstats"

    --Create value #1, add to leaderstats
    name = Instance.new("StringValue", stats)
    name.Name = "Name"
    name.Value = ""

    --Create value #2, add to leaderstats
    description = Instance.new("StringValue", stats)
    description.Name = "Description"
    description.Value = ""

    --Wait for player data to load
    player:WaitForDataReady()

    --Load keys
    description.Value = player:LoadString(DescriptionKey)

    name.Value = player:LoadString(NameKey)

    --Display information
    character.Head.BillboardGui.MainFrame.PlayerLabel.Text = name.Value

    character.Head.BillboardGui.MainFrame.OccupationLabel.Text = description.Value

    end)
end)

game.Players.PlayerRemoving:connect(function(player)
    --Save string, match corresponding values to keys
    player:SaveString(DescriptionKey, player.leaderstats.Description.Value)
    player:SaveString(NameKey, player.leaderstats.Name.Value)

end)

while true do
    for i,v in pairs(game.Players:GetPlayers()) do
        if v.leaderstats.Description.Value ~= "" then
            v:SaveString(DescriptionKey, v.leaderstats.Description.Value)
        end
        if v.leaderstats.Name.Value ~= "" then
        v:SaveString(NameKey, v.leaderstats.Name.Value)
        end
    end
    wait(120) --Save interval
end
  • A cutscene that moves the camera along the map and displays the game title. The cutscene is working fine, but the button to skip it does not show up...

  • PlayerEntered

local cscript = script:WaitForChild("CutsceneScript")
if script:findFirstChild("SkipCutsceneGuiValue") then
    script.SkipCutsceneGuiValue.Parent = cscript
    script.SkipCutsceneGui.Parent = cscript
end

function onPlayerEntered(player)
    repeat wait () until player.Character
    local new_script = script.CutsceneScript:clone()
    new_script.Parent = player.Character
    new_script.Disabled = false
end

game.Players.PlayerAdded:connect(onPlayerEntered)
onPlayerEntered(game.Players:WaitForChild("Player1")) -- Has to be done since it doesn't work offline for some reason.
  • CutsceneScript (stored inside PlayerEntered)
repeat wait () until game.Workspace.CurrentCamera ~= nil

local c = game.Workspace.CurrentCamera
local data = LoadLibrary("RbxUtility").DecodeJSON(script.CutsceneData.Value)
local rs = game:GetService("RunService").RenderStepped

function tweenCam(c1,f1,time,fov,roll)
    local c0,f0,fv0,r0,frames = c.CoordinateFrame,c.Focus,c.FieldOfView,c:GetRoll(),time/0.015
    for i = 1,frames do
        c.CameraType = "Scriptable"
        c.CoordinateFrame = CFrame.new(c0.p:lerp(c1.p,i/frames),f0.p:lerp(f1.p,i/frames))
        c.FieldOfView = (fv0+(fov-fv0)*(i*(1/frames)))
        c:SetRoll(r0+(roll-r0)*(i*(1/frames)))
        rs:wait()
    end
end

print("Running")
c.CameraSubject = nil   
c.CameraType = "Scriptable"
c.CoordinateFrame = CFrame.new(unpack(data[1].c1))
c.Focus = CFrame.new(unpack(data[1].f1))
c.FieldOfView = data[1].FOV
c:SetRoll(data[1].Roll)
if script:findFirstChild("SkipCutsceneGuiValue") then
    local gui = script.SkipCutsceneGui:clone()
    gui.Parent = game.Players.LocalPlayer.PlayerGui
    gui.Cutscene.Value = script
    gui.Main.Debug.Disabled = false
    script.SkipCutsceneGuiValue.Value = gui
end
for i = 2,#data do
    tweenCam(CFrame.new(unpack(data[i].c1)),CFrame.new(unpack(data[i].f1)),data[i].step,data[i].FOV,data[i].Roll)
end
c.CameraSubject = game.Players.LocalPlayer.Character.Humanoid   
c.CameraType = "Custom"
c.FieldOfView = 70
if script:findFirstChild("SkipCutsceneGuiValue") then
    if script.SkipCutsceneGuiValue.Value ~= nil then
        script.SkipCutsceneGuiValue.Value:Destroy()
    end
end
script:Destroy()
  • A script for a weather plugin I got from the library, that allows admins to open a panel in-game to change the weather (The plugin is called TTP Weather Systems)
local Weather = {
    "Auto",
    "Sunny",
    "Partly Cloudy",
    "Mostly Cloudy",
    "Cloudy",
    "Drizzle",
    "Freezing Drizzle",
    "Flurries",
    "Showers",
    "Rain / Snow Showers",
    "Snow Showers",
    "Rain",
    "Rain / Snow",
    "Snow",
    "Heavy Rain",
    "Heavy Rain / Snow",
    "Heavy Snow",
    "Thunderstorms",
    "Strong Thunderstorms"  
}

local GUI = script.Parent.Frame
local SelectedWeather = "Sunny"

local WeatherDropDown, updateWeatherSelection = LoadLibrary("RbxGui").CreateDropDownMenu(Weather, function(value) SelectedWeather = value end)
WeatherDropDown.Name = "WeatherDropDownLower"
WeatherDropDown.Position = UDim2.new(0, 20, 0, 60)
WeatherDropDown.Size = UDim2.new(0, 240, 0, 40)
WeatherDropDown.Parent = GUI
WeatherDropDown.Visible = true

GUI.SetWeather.MouseButton1Click:connect(function()
    game.ReplicatedStorage.WeatherResources.Settings.AdminEvent:FireServer("Weather", SelectedWeather)
end)

GUI.SetTime.MouseButton1Click:connect(function()
    game.ReplicatedStorage.WeatherResources.Settings.AdminEvent:FireServer("Time", GUI.Time.Text)
end)

GUI.Back.MouseButton1Click:connect(function()
    GUI.Visible = false
end)

repeat wait() until game.Players.LocalPlayer ~= nil

game.Players.LocalPlayer:GetMouse().KeyDown:connect(function(Key)
    if Key == game.ReplicatedStorage.WeatherResources.Settings.AdminHotKey.Value then
        GUI.Visible = true
    end
end)
  • A script inside a button that triggers a volcano to erupt
local onoff = 2 
local eruption = game.Workspace.Volcano.erupt
--- onoff = 2 then eruption is on
--- onoff = 1 then eruption is off

function onClicked(playerWhoClicked)
    if onoff == 1 then
        eruption.Value = true 
        onoff = 2   
        else
        eruption.Value = false
        onoff = 1
    end
end

script.Parent.ClickDetector.MouseClick:connect(onClicked)

  • The script inside the model that is triggered by the button and clones the "lava" brick several times to simulate lava flowing
while true do
wait(.1)
if script.Parent.Parent.erupt.Value==true then
    m=script.Parent.lava:Clone()
    m.Parent=game.Workspace
    m.Anchored=false
    m.CanCollide=true

end
end 
  • The script inside the "lava"
function onTouch(part)
local humanoid = part.Parent:findFirstChild("Humanoid")
if (humanoid ~=nil) then
humanoid.Health = 0
end
end

script.Parent.Touched:connect(onTouch) 
  • And finally the clear script that gets rid of the cloned lava after a specified time
m=script.Parent
while true do
wait(.01)
if m.Anchored==false then
wait(10)
m.Transparency=.3
wait(.5)
m.Transparency=.6
wait(.5)
m.Transparency=.9
wait(.1)
m:Remove()
end
end

Thank you to anyone who can help me with this. I just want to keep my game functioning without worrying about hackers making the rest of the players miserable...

Answer this question