How would I make a client-sided arena to prevent others from interacting with it?

Hey there!

I’m making a RPG game that is so far going well! But I have a issue and it’s to do with arena’s. The current arena is handled on the server and this means other-players will be there at the same time as you and may mess with it too. I’m trying to make it so it’s seperate from other players and it can be seamless. A example I can perhaps give is Loomian Legacy.

Here is my server-script and the portion that handles the arena.

				local Target = findTarget(HRP, RangeTF)

				local ArenaToClone = Folder_Arenas:WaitForChild(NPC_Stats.ArenaType):Clone()

				local StartSound = Instance.new("Sound")
				StartSound.Parent = Folder_Default.bin
				StartSound.SoundId = "rbxassetid://" .. NPC_Stats.BattleSound
				StartSound:Play()
				StartSound.Volume = 0.3
				Debris:AddItem(StartSound, 10)

				Folder_Remotes.StartBattle:FireClient(
					Players:GetPlayerFromCharacter(Target),
					NPC_Stats.BattleImage,
					NPC_Stats.MusicChoice,
					NPC.Stats,
					NPC_Stats.Type
				)

				ArenaToClone.Parent = workspace.CurrentArena

				EnemyNPC.Parent = ArenaToClone.Enemies

				EnemyNPC.PrimaryPart.CFrame = ArenaToClone.EnemySpawn.CFrame			
				Target.PrimaryPart.CFrame = ArenaToClone.PlayerSpawn.CFrame

				local PhysLevel = Instance.new("IntValue", EnemyNPC.Config)
				PhysLevel.Value = NPC_Stats.LVL
				PhysLevel.Name = "Level"

				Players:GetPlayerFromCharacter(Target).Battling.Value = NPC

				task.spawn(function()
					local CorrectAmounts = 0

					for i=CorrectAmounts, 5, 1 do
						Target.PrimaryPart.CFrame = ArenaToClone.PlayerSpawn.CFrame
						task.wait(1)
					end
				end)

How is this code activated? From a function? An event?

There is a entire script I can show. It gets every ‘BattleNPC’ and they all have a hitbox and that when touched starts it off.