So I have this script where if the Magnitude lowers by -1 then I want it to print the magnitude like for every -1 for lets say 100 it does I want it to print it how would I do that this is my script
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
local HumanoidRootPart = Character:WaitForChild("HumanoidRootPart")
while wait() do
local Magnitude = (HumanoidRootPart.Position - workspace.Baseplate.Position).Magnitude
if Magnitude < Magnitude then
print(Magnitude)
end
end
while wait() do
If Magnitude == nil then
Magnitude = (HumanoidRootPart.Position - workspace.Baseplate.Position).Magnitude
end
if Magnitude < (HumanoidRootPart.Position - workspace.Baseplate.Position).Magnitude then
print(Magnitude)
Magnitude = (HumanoidRootPart.Position - workspace.Baseplate.Position).Magnitude
end
end
Just store a variable outside the loop that stores that last iteration’s magnitude, and then compare if the latest magnitude is not equal to the last iteration’s magnitude, from here you can use your basic logic to check if it is less than last time using an if statement and more if needed.
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
local HumanoidRootPart = Character:WaitForChild("HumanoidRootPart")
local PreviousMagnitude = (HumanoidRootPart.Position - workspace.Baseplate.Position).Magnitude
while wait() do
local Magnitude = (HumanoidRootPart.Position - workspace.Baseplate.Position).Magnitude
if Magnitude < PreviousMagnitude then
print(Magnitude)
end
end
this does not detect a change of -1 just a change in magnitude
When the Magnitude variable is set it’s not going to update, each while true do run will be different. Look at it like it’s a function, it will not update.
As I told just add another check for checking if it was a -1 change (simple logic, just subtract the latest Magnitude from PreviousMagnitude and if the result is 1 then it means there was a -1 change). Also you need to set PreviousMagnitude in the loop, otherwise it won’t update.
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
local HumanoidRootPart = Character:WaitForChild("HumanoidRootPart")
while true do
local PreviousMagnitude = math.round((HumanoidRootPart.Position - workspace.Baseplate.Position).Magnitude)
wait()
local Magnitude = math.round((HumanoidRootPart.Position - workspace.Baseplate.Position).Magnitude)
if Magnitude - PreviousMagnitude == 1 then
print(Magnitude)
end
end
You’re doing it mostly correctly, except the if statement part. Doing it this way, should do it:
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
local HumanoidRootPart = Character:WaitForChild("HumanoidRootPart")
while true do
local PreviousMagnitude = math.round((HumanoidRootPart.Position - workspace.Baseplate.Position).Magnitude)
wait()
local Magnitude = math.round((HumanoidRootPart.Position - workspace.Baseplate.Position).Magnitude)
if (PreviousMagnitude - Magnitude) == 1 then
print(Magnitude)
end
end
Also I don’t get why you’re using that math.round function, Its not needed.
But for my hot and cold map when they get closer it will switch from really blue to really red which is not a smooth tansition how do I make it a smooth transition
I don’t understand what you mean now, what is going to change from Really Blue to Really Red? I believe you’re wanting to change Color3 Property of some instance, couldn’t you use TweenService for smoothly making a transition?
So when someone is near the baseplate i want it to turn more and more red when someone is further away I want it to turn more blue but it goes from really red to really blue instantly not smoothly
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
local HumanoidRootPart = Character:WaitForChild("HumanoidRootPart")
while true do
local PreviousMagnitude = math.round((HumanoidRootPart.Position - workspace.Baseplate.Position).Magnitude)
wait()
local Magnitude = math.round((HumanoidRootPart.Position - workspace.Baseplate.Position).Magnitude)
if (Magnitude - PreviousMagnitude) == 1 then
workspace.Baseplate.Color = Color3.fromRGB(0, 0, Magnitude)
elseif (Magnitude - PreviousMagnitude) == -1 then
workspace.Baseplate.Color = Color3.fromRGB(Magnitude, 0, 0)
end
end
local Players = game:GetService("Players")
local LocalPlayer = Players.LocalPlayer
local Character = LocalPlayer.Character or LocalPlayer.CharacterAdded:Wait()
local HumanoidRootPart = Character:WaitForChild("HumanoidRootPart")
local color1 = Color3.new(1, 0, 0)
local color2 = Color3.new(0, 0, 1)
local maxDistance = (workspace.Baseplate.Size.X + workspace.Baseplate.Size.Z) / 2 -- Average distance based on XZ size.
while true do
workspace.BasePlate.Color = color1:Lerp(color2, math.clamp((HumanoidRootPart.Position - workspace.Baseplate.Position).Magnitude / maxDistance, 0, 1))
wait()
end
Something like this should work although I wrote it on phone without testing, tinker around with it.