Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

How do i make this script work ingame in a roblox server and not just roblox studio?

So basically i have a local script and i have a script keep in mind that this is filtering enabled and this is a fireball script. But the script only works in Roblox Studio and not ingame in a roblox server. Whenever i load it in a roblox server it says Players.Player1.Backack.Fireball.LocalScript:6: attempt to index global 'char' (a nil value)

Heres the scripts

Local script here

--Local Script
local Tool = script.Parent
play = game.Players.LocalPlayer
local mouse = play:GetMouse()
char = play.Character
hum = char.Humanoid 
root = char.HumanoidRootPart

local en = true
Tool.Activated:connect(function()
 if not en then return end
 en = false
 Tool.RemoteEvent:FireServer(mouse.Hit)
 wait(0.5)
 en = true
end)

Server script here

--Server Script
local Tool = script.Parent
play = Tool.Parent.Parent 
char = play.Character
hum = char.Humanoid 
root = char.HumanoidRootPart

local en = true


Tool.RemoteEvent.OnServerEvent:connect(function(play,mousehit)
 local a = hum:LoadAnimation(Tool.Throw)
 a:Play()
 root.CFrame = CFrame.new(root.Position,root.Position + Vector3.new(mousehit.lookVector.x,0,mousehit.lookVector.z))
 wait(0.7)
 local fireball = Tool.Handle:clone()
 fireball.CFrame = Tool.Handle.CFrame
 local bv = Instance.new("BodyVelocity")
 bv.MaxForce = Vector3.new(1e8,1e8,1e8)
 bv.Velocity = mousehit.lookVector * 50
 bv.Parent = fireball
 fireball.CanCollide = false
 fireball.Parent = game.Workspace
 game.Debris:AddItem(fireball,4)
 local ten = true
 fireball.Touched:connect(function(hit)
 if not ten then return end
 ten = false
 local ehum = hit.Parent:findFirstChild("Humanoid") or hit.Parent.Parent:findFirstChild("Humanoid")
 if ehum and ehum ~= hum then
  ehum:TakeDamage(10)
 elseif hit.Anchored  == true and hit.CanCollide == true then
  for i=1,10 do
   local part = fireball:clone()
   part.Size = Vector3.new(0.5,0.5,0.5)
   part.CFrame = fireball.CFrame
   --part.BodyVelcoity.MaxForce = Vector3.new(1e8,0,1e8)
   part.ParticleEmitter.LockedToPart = false
   part.BodyVelocity.Velocity = Vector3.new(math.random(-30,30),math.random(-30,30),math.random(-30,30))
   part.Parent = game.Workspace
   game.Debris:AddItem(part,1)
  end
 end
 wait()
 ten = true
 end)

1 answer

✓ Accepted answer

Before line 05 of the LocalScript, add:

repeat wait() until play.Character

2 comments

0

Thanks it worked!

0

If you're wondering why, it's because Player.Character is not guaranteed to return a valid Character model. In this case, your LocalScript was running before the player's Character was created, so play.Character was nil. The solution was to wait until play.Character was anything but nil, which is what my line of code essentially does.

This discussion is preserved as it was. New answers, comments, and votes are closed.