script only working in Studio - lua

//EDIT: yes i added the 2nd parameter GPE and if not gpe then return end in case someone nitpicks unnecessary details
Another problem is that it is quite long but if you read it and see something wrong then let me know. Also I have put this as a LocalScript in Startpack.
local uis = game:GetService("UserInputService")
local torso = script.Parent.Parent.Character.Torso or script.Parent.Parent.Character.UpperTorso
local TweenService = game:GetService("TweenService")
local db = true
function move(x)
local velocity = Instance.new("BodyVelocity")
velocity.Velocity = torso.CFrame.lookVector*50
velocity.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
velocity.Parent = x
end
uis.InputBegan:Connect(function(input)
if input.KeyCode == Enum.KeyCode.R and db then
db = false
local part = game:GetService("ReplicatedStorage").Union:Clone()
part.CFrame = torso.CFrame + torso.CFrame.lookVector*10
part.Parent = game.Workspace
local effect = game.ReplicatedStorage.Waterfall:Clone()
effect.CFrame = part.CFrame
local light = game:GetService("ReplicatedStorage").PointLight:Clone()
light.Parent = part
local weld = Instance.new("ManualWeld")
weld.Part0 = part
weld.Part1 = effect
weld.Parent = part
effect.Parent = part
local goal3 = {}
goal3.Size = Vector3.new(120,70,70)
local goal4 = {}
goal4.Size = goal3.Size
local tweenInfo = TweenInfo.new(2)
local tween3 = TweenService:Create(part, tweenInfo, goal3)
local tween4 = TweenService:Create(effect,tweenInfo, goal4)
tween3:Play(); tween4:Play()
game.Lighting.Blur.Enabled = true; game.Lighting.ColorCorrection.Enabled = true
move(part)
part.Anchored = false
effect.Anchored = false
move(effect)
local goal = {}
goal.Size = Vector3.new(30,7,7)
goal.Transparency = 0.4
local goal2 = {}
goal2.Size = goal.Size
local tweenInfo = TweenInfo.new(3)
local tween = TweenService:Create(part, tweenInfo, goal)
local tween2 = TweenService:Create(effect,tweenInfo, goal2)
tween:Play(); tween2:Play()
game:GetService("Debris"):AddItem(part,2)
game:GetService("Debris"):AddItem(effect,2)
wait(.5)
game.Lighting.Blur.Enabled = false; game.Lighting.ColorCorrection.Enabled = false
db = true
end
end)
The thing is pretty straightforward, It doesn't work when I publish the game and play it, but it only works in Roblox Studio.
It is not Filtering Enabled yet, and still doesn't work. I don't know exactly.

Fixed it lol i just moved the localscript from starterpack to startercharacter :D

Related

Animation won't play

I've made a GUI that has a WorldModel and when a player joins their character shows up on that GUI. All this works well but when I try to add an idle animation to it, it just won't run. I've tried different ways, loading the animation with animator, humanoid, but it just doesn't work. No errors.
Server Script (Creating animator):
local play = game.StarterGui:WaitForChild("Menu").Play
local uis = game:GetService("UserInputService")
local remote = game:GetService("ReplicatedStorage"):WaitForChild("Events").AnimPlay
game.Players.PlayerAdded:Connect(function(player)
local gui = player.PlayerGui:WaitForChild("CharacterShow")
local viewportframe = gui:WaitForChild("ViewportFrame")
local ClonedChar = game.Players:CreateHumanoidModelFromUserId(player.UserId)
ClonedChar.Parent = game:GetService("ReplicatedStorage")
local animator = Instance.new("Animator")
animator.Parent = ClonedChar.Humanoid
remote:FireClient(player,ClonedChar)
play.MouseButton1Click:Connect(function()
gui:Destroy()
end)
end)
Local Script (Creating animation, animationtrack, playing it, also making the GUI work, it has a turning feature too):
local player = game.Players.LocalPlayer
local remote = game:GetService("ReplicatedStorage"):WaitForChild("Events").AnimPlay
local uis = game:GetService("UserInputService")
local currentX
local MouseInDisplay, HoldInDisplay = false, false
local play = player.PlayerGui:WaitForChild("Menu").Play
local gui = player.PlayerGui:WaitForChild("CharacterShow")
remote.OnClientEvent:Connect(function(ClonedChar)
print("received")
local viewportframe = gui:WaitForChild("ViewportFrame")
local VPFcam = Instance.new("Camera")
VPFcam.Parent = viewportframe
VPFcam.CFrame = CFrame.new(0,0,0)
viewportframe.CurrentCamera = VPFcam
ClonedChar.Parent = viewportframe.WorldModel
ClonedChar.Name = "Character"
ClonedChar.Humanoid.DisplayDistanceType = Enum.HumanoidDisplayDistanceType.None
ClonedChar:SetPrimaryPartCFrame(CFrame.new(Vector3.new(0,0,-9.5),Vector3.new(0,0,0)))
local animator = ClonedChar.Humanoid.Animator
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://11282795546"
local animtrack = animator:LoadAnimation(animation)
animtrack.Looped = true
animtrack.Priority = Enum.AnimationPriority.Action
animtrack:Play()
uis.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
if MouseInDisplay == true then
HoldInDisplay = true
currentX = nil
end
end
end)
uis.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
HoldInDisplay = false
end
end)
viewportframe.MouseMoved:Connect(function(X,Y)
if HoldInDisplay == false then return end
if currentX then ClonedChar.PrimaryPart.CFrame *= CFrame.fromEulerAnglesXYZ(0,((X-currentX)*.025),0) end
currentX = X
end)
viewportframe.MouseEnter:Connect(function() MouseInDisplay = true end)
viewportframe.MouseLeave:Connect(function() MouseInDisplay = false end)
end)
The animation ID is valid, and the game's owner created it.

How to a team system ? (Roblox)

im trying to make a tag game that one player from the spectate team or nutural team will be chosen to be the tag and another will be chosen to be the runner. They'll both teleport to a small map, there the tag will have to try catch the runner before the times up.
Now my problem is that when the player loads to the game he does'nt autoassigned to the nuturalteam(spectateteam) and also when the players tp to the map they wont change the teams to a tager and runner they'll both be in the same team. Help will be appriciated!
Also i dont get any errors in the outpot besides "loadstring is not availble".
Here is the round system script:
Teams = game:GetService("Teams")
local SpectateTeam = game.Teams.Spectate
local ItTeam = game.Teams.It
local RunnerTeam = game.Teams.Runner
local roundlength = 5
local intermissionLength = 4
local inRound = game.ReplicatedStorage.InRound
local Status = game.ReplicatedStorage.Status
local LobbySpawn = workspace.Map.SpawnLobby
local MapSpawnIt = workspace.Map.SpawnMapIt
local MapSpawnRunner = workspace.Map.SpawnMapRunner
local frame = game.StarterGui.ScreenGuimenu.Frame
local KillerSpawn = workspace.Map.SpawnMapIt
local lobbyspace = workspace.Lobbyspace
game.Players.PlayerAdded:Connect(function(player)
player.Team = SpectateTeam
end)
inRound.Changed:Connect(function(player)
if inRound.Value == true then
local chosen = Players:GetChildren()[math.random(1, #Players:GetChildren())]
print(" is It")
chosen.Team = ItTeam
local runner = SpectateTeam:GetPlayers()[math.random(1, #Players:GetChildren())]
print(" is Runner")
runner.Team = Teams.Runner
wait()
runner.Character.HumanoidRootPart.CFrame = MapSpawnRunner.CFrame
chosen.Character.HumanoidRootPart.CFrame = KillerSpawn.CFrame
end
if inRound.Value == false then
for _, player in pairs(game.Players:GetChildren(player)) do
local char = player.Character
char.HumanoidRootPart.CFrame = LobbySpawn.CFrame
player.Team = SpectateTeam
end
end
end)
local function RoundTimer()
while wait() do
for i = intermissionLength, 0, -1 do
inRound.Value = false
wait(1)
Status.Value = "Intermission:" .. i .."seconds left!"
end
for i = roundlength, 0, -1 do
inRound.Value = true
wait(1)
Status.Value = "Game:" .. i .."seconds left!"
end
end
end
spawn(RoundTimer) ```
I found the answer! i just forgot to sync the color of the teams with the spawns :)

How to get local player

I'm making a transformation script and I'm trying to get the LocalPlayer but this error appears:
13:54:03.806 ServerScriptService.SSJScript:2: attempt to index nil with 'GetMouse'  -  Server  -  SSJScript:2
How to fix?
This is my code:
local plr = game.Players.LocalPlayer
local mouse = plr:GetMouse()
local chr = plr.Character
local offence = {
"AAARGH!! I HATE YOU!!",
"FUS RO DAH!",
"I'M COMING FOR THE SAAUCE!",
"IT IS TIME TO PERISH!",
"POOTIS POOTIS POOTIS POOTIS!"
}
local transformcooldown = 10
local healthboost = 1000
local speedboost = 32
local aura = game.ReplicatedStorage.Aura
local hair = game.ReplicatedStorage.Hair
local anim = chr.Humanoid:LoadAnimation(game.ReplicatedStorage.Animation)
local iscooldown = false
local ison = plr.SSJOnOff.Value
local cooldown = 10
game.Players.PlayerAdded:Connect(function(plrjoin)
plr = plrjoin
end)
mouse.KeyDown:connect(function(key)
if iscooldown == false then
key = string.lower(key)
if string.byte(key) == 48 then
local indicator = plr.SSJOnOff
if indicator.Value == false then
chr.Humanoid.WalkSpeed = 0
ison = true
game:GetService("Chat"):Chat(plr.Head,offence[math.random(1,#offence)])
wait(1)
anim:Play()
wait(1.4)
aura:Clone().Parent = chr.HumanoidRootPart
hair:Clone().Parent = chr
wait(0.6)
chr.Humanoid.MaxHealth = healthboost
chr.Humanoid.Health = healthboost / 2
chr.Humanoid.WalkSpeed = chr.Humanoid.WalkSpeed + speedboost
else
ison = false
iscooldown = true
chr.Hair:destroy()
chr.HumanoidRootPart.Aura:destroy()
chr.Humanoid.WalkSpeed = chr.Humanoid.WalkSpeed - speedboost
chr.Humanoid.Health = 100
chr.Humanoid.MaxHealth = 100
wait(cooldown)
end
end
end
The code need to be in a LocalScript part.
The function GetMouse() is on the screen on the Player so the Server cant know where is your mouse.
PS: game.Players.LocalPlayer is nil because it's a ServerScript and not a LocalScript
Write this code in a localscript and NOT in ServerScriptService
local player = game.Players.LocalPlayer

Attempt to index nil with Position

I'm trying to do something like a spear throw and I'm so confused. It says:
ServerScriptService.FireMagic.FireSpear:16: attempt to index nil with 'Position'
Anyways, here's the LocalScript code:
wait(1)
local Player = game.Players.LocalPlayer
local Character = Player.Character
local Mouse = Player:GetMouse()
local rp = game:GetService("ReplicatedStorage")
local FireSpear = rp:WaitForChild("FireRemote")
local UIS = game:GetService("UserInputService")
local debounce = true
local cd = 10
UIS.InputBegan:Connect(function(input, isTyping)
if isTyping then
return
elseif input.KeyCode == Enum.KeyCode.E and debounce and Character then
debounce = false
FireSpear:FireServer()
wait(cd)
debounce = true
end
end)
and the Script:
wait(1)
local rp = game:GetService("ReplicatedStorage")
local ss = game:GetService("ServerStorage")
local Debris = game:GetService("Debris")
local ssFireSpear = ss.FireMagic:WaitForChild("ssFireSpear")
local FireRemote = rp:WaitForChild("FireRemote")
local UhTable = {}
local function LookatMouse(Mouse, RootPart)
local bodyG = Instance.new("BodyGyro")
bodyG.MaxTorque = Vector3.new(0, 500000, 0)
bodyG.P = 10000
bodyG.CFrame = CFrame.new(RootPart.Position, Mouse.Position)
bodyG.Parent = RootPart
Debris:AddItem(bodyG, 1)
end
local function MoveTowardsMouse(Mouse, Main)
local bodyV = Instance.new("BodyVelocity")
bodyV.MaxForce = Vector3.new(500000, 500000, 500000)
bodyV.Velocity = CFrame.new(Main.Position, Mouse.Position).LookVector * 100
bodyV.Parent = Main
local bodyG = Instance.new("BodyGyro")
bodyG.MaxTorque = Vector3.new(500000, 500000, 500000)
bodyG.P = 10000
bodyG.CFrame = CFrame.new(Main.Position, Mouse.Position)
bodyG.Parent = Main
end
FireRemote.OnServerEvent:Connect(function(Player, Mouse_CFrame)
if UhTable[Player.Name] == true then
return
end
UhTable[Player.Name] = true
local Character = Player.Character
local RootPart = Character:WaitForChild("HumanoidRootPart")
local folder = workspace:FindFirstChild("DebrisFolder") or Instance.new("Folder",workspace)
folder.Name = "DebrisFolder"
local RightHand = Character:WaitForChild("RightHand")
local FireSpear = ssFireSpear:Clone()
local Handle = FireSpear:WaitForChild("Handle")
local Hitbox = FireSpear:WaitForChild("Hitbox")
local Mesh = FireSpear:WaitForChild("Mesh")
FireSpear:SetPrimaryPartCFrame(RightHand.CFrame)
FireSpear.Parent = folder
local weld = Instance.new("Motor6D")
weld.Parent = Handle
weld.Part0 = RightHand
weld.Part1 = Handle
Hitbox:SetNetworkOwner(nil)
local function MakeStuffHappen()
spawn(function()
LookatMouse(Mouse_CFrame,RootPart)
wait(.6)
weld:Destroy()
MoveTowardsMouse(Mouse_CFrame,Hitbox)
end)
end
MakeStuffHappen()
end)
I'm following a tutorial but I don't know how the issue got there.
Your error is pointing to the fact that you are trying to reference fields on an object that doesn't exist. In this case, it's the ´Mouse´ object, which you never supplied from the client.
To fix this, pass the mouse information in when you call the RemoteEvent's FireServer() function.
UIS.InputBegan:Connect(function(input, isTyping)
if isTyping then
return
elseif input.KeyCode == Enum.KeyCode.E and debounce and Character then
debounce = false
local mouseCFrame = Mouse.Hit
FireSpear:FireServer(mouseCFrame)
wait(cd)
debounce = true
end
end)

Roblox Studio My script only works one time

I made a gun shop website. When I try to buy a gun the first time it works but, when I delete the gun from my inventory and try again it wont work.
Please Help.
local ServerStorage = game:GetService("ServerStorage")
local Vendedor = script.Parent
local ClickDetector = game.Workspace.Lojadearmas.Vendedor.ClickDetector
local Glock = ServerStorage:WaitForChild("G17"):Clone()
ClickDetector.MouseClick:Connect(function(player)
print(player.name)
local Player = player
local Gui = player.PlayerGui.LojaArmas
Gui.Frame.Visible = true
Gui.Frame2.Visible = true
Gui.Glock.Visible = true
Gui.Fechar.Visible = true
Gui.Loja.Visible = true
Gui.Fechar.MouseButton1Click:Connect(function()
Gui.Frame.Visible = false
Gui.Frame2.Visible = false
Gui.Glock.Visible = false
Gui.Fechar.Visible = false
Gui.Loja.Visible = false
print(Player)
end)
Gui.Glock.MouseButton1Click:Connect(function()
if Player.leaderstats.Reais.Value >= 1000 then
Glock.Parent = Player.Backpack
print(Player.leaderstats.Reais.Value)
Player.leaderstats.Reais.Value = Player.leaderstats.Reais.Value - 1000
end
end)
end)
Its because you are cloning it once when you referenced the variable Glock. Try this:
local ServerStorage = game:GetService("ServerStorage")
local Vendedor = script.Parent
local ClickDetector = game.Workspace.Lojadearmas.Vendedor.ClickDetector
local Glock = ServerStorage:WaitForChild("G17")
ClickDetector.MouseClick:Connect(function(player)
print(player.name)
local Player = player
local Gui = player.PlayerGui.LojaArmas
Gui.Frame.Visible = true
Gui.Frame2.Visible = true
Gui.Glock.Visible = true
Gui.Fechar.Visible = true
Gui.Loja.Visible = true
Gui.Fechar.MouseButton1Click:Connect(function()
Gui.Frame.Visible = false
Gui.Frame2.Visible = false
Gui.Glock.Visible = false
Gui.Fechar.Visible = false
Gui.Loja.Visible = false
print(Player)
end)
Gui.Glock.MouseButton1Click:Connect(function()
if Player.leaderstats.Reais.Value >= 1000 then
Glock:Clone().Parent = Player.Backpack
print(Player.leaderstats.Reais.Value)
Player.leaderstats.Reais.Value = Player.leaderstats.Reais.Value - 1000
end
end)
end)
Let me know if you require any further assistance.

Resources