So, from my understanding of BodyVelocity, they add to the velocity of their parent part until the parent part has the same velocity as the BodyVelocity. When making a fire ball script, this BodyVelocity works just fine and launches the fire ball, but when I try to make a wave, it's like the wave just completely ignores the BodyVelocity's existance.
Wave Script:
-- Replicated Storage local repStorage = game:GetService("ReplicatedStorage") local powers = repStorage.Powers local water = powers.Water local r = water.R local t = water.T local v = water.V -- Events r.OnServerEvent:Connect(function(player,mousehit) -- Character Stuff local char = player.Character local hum = char.Humanoid local root = char.HumanoidRootPart -- Stats local stats = player.Stats local power = stats.Power local powerLevel = power.PowerLevel -- Meshes local mesh = script.Wave:Clone() mesh.Size = Vector3.new(powerLevel.Value/15+10,powerLevel.Value/15+10,powerLevel.Value/10+25) mesh.Parent = game.Workspace mesh.CFrame = CFrame.new(root.Position,mousehit.p) mesh.Orientation = Vector3.new(0,mesh.Orientation.Y,0) local bv = Instance.new("BodyVelocity",mesh) bv.Velocity = (mousehit.p-root.Position).Unit*200 bv.Velocity = Vector3.new(bv.Velocity.X,0,bv.Velocity.Z) mesh.Velocity = bv.Velocity wait(5) mesh:Destroy() end)
Fire Ball Script:
-- Meshes local explosion = script:WaitForChild("Explosion") local magma = script:WaitForChild("Magma") local fireBall = script:WaitForChild("FireBall") local fireEvents = game.ReplicatedStorage:WaitForChild("Powers"):WaitForChild("Fire") local fireEvent = fireEvents:WaitForChild("Fire") local onDead = fireEvents:WaitForChild("OnDead") -- Variables local multiplier = 1.5 local whenHit = require(script.Parent["Module Scripts"].WhenHit) -- Other local tweenService = game:GetService("TweenService") fireEvent.OnServerEvent:Connect(function(player,key,mousePose,mouseTarget) local char = game.Workspace[player.Name] local rootPart = char.HumanoidRootPart local humanoid = char.Humanoid local stats = player.Stats local power = stats.Power local powerLevel = power.PowerLevel if key == Enum.KeyCode.R then local rightHand = char.RightHand -- Fire Ball local fireBallc = fireBall:Clone() fireBallc.Parent = game.Workspace fireBallc.CFrame = rightHand.CFrame -- Body Velocity local bv = Instance.new("BodyVelocity",fireBallc) bv.Velocity = (mousePose.p-rightHand.Position).Unit*200 fireBallc.Velocity = bv.Velocity local db1 = false fireBallc.Touched:Connect(function(hit) local canExplode = true for i,v in pairs(char:GetChildren()) do if hit == v then canExplode = false end for i,b in pairs(v:GetChildren()) do if hit == b then canExplode = false end end end if not canExplode or db1 or hit ~= mouseTarget then return end db1 = true local explosionC1 = explosion:Clone() local explosionC2 = explosion:Clone() explosionC1.Parent = game.Workspace explosionC2.Parent = game.Workspace explosionC1.Color = Color3.fromRGB(255,math.random(150,255)) explosionC2.Color = Color3.fromRGB(255,math.random(150,255)) explosionC1.CFrame = mousePose * CFrame.Angles(math.random(0,360),math.random(0,360),math.random(0,360)) explosionC2.CFrame = mousePose * CFrame.Angles(math.random(0,360),math.random(0,360),math.random(0,360)) -- Damage for i,v in pairs(game.Workspace:GetChildren()) do if v == explosionC2 then local db = false local ignored = {} v.Touched:Connect(function(hit) if not db and hit.Parent and hit.Parent:FindFirstChild("Humanoid") and hit.Parent.Name ~= player.Name then db = true local isIgnored = false local number = 1 local Character = hit.Parent for i,ignor in pairs(ignored) do if ignor == Character then isIgnored = true end if not isIgnored then number = number + 1 end end local blocking if Character:FindFirstChild("StatsStuffs") then blocking = Character.StatsStuffs.BlockEnabled end local didHurt = false local damage if not isIgnored then table.insert(ignored,Character) whenHit.tagged(hit,player) local dmg = (powerLevel.Value*2)+math.random(20,30) if blocking and blocking.Value then damage = whenHit.ifBlocking(hit,dmg,player) else damage = dmg end local hum = hit.Parent.Humanoid hum:TakeDamage(damage) didHurt = true end db = false if damage then whenHit.dmgGui(hit,damage) end if didHurt then whenHit.burn(hit,powerLevel.Value/2 + math.random(1,5),1) end end end) end end fireBallc:Destroy() db1 = false local tweenInfo = TweenInfo.new( 1, -- Time Enum.EasingStyle.Sine, -- Style Enum.EasingDirection.InOut, -- Direction 0, -- Repeat Times false, -- Should Repeat 0 -- Repeat Delay ) local partProperties = { Size = Vector3.new(powerLevel.Value/4+75,powerLevel.Value/4+75,powerLevel.Value/4+75); Transparency = 1; Color = Color3.fromRGB(0,0,0) } local tween1 = tweenService:Create(explosionC1,tweenInfo,partProperties) local tween2 = tweenService:Create(explosionC2,tweenInfo,partProperties) tween1:Play() tween2:Play() wait(1) explosionC1:Destroy() explosionC2:Destroy() end) end
Note: * Both scripts are server scripts triggered by local scripts. * The wave script isn't finished yet, so it doesn't show damage.
Edit: I did some testing around, and I found out that the size of the mesh is what caused the fire ball to work but not the wave, but how would I make it work with the wave too?
Edit 2: I noticed that by upping the MaxForce property of the BodyVelocity, it allowed the heavier meshes to move as I wanted them to. I will keep this question here in case anyone else has this issue, but as of right now, I've figured it out.