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.

4 comments

0

Please. Why are you adding a line of space after each line. This is messy.

0

that always happen when you add something to a block in here incapaxx

0

Yeah, they changed the typing system thing, so now it's very awkward to post scripts because when I copy them and paste them, it adds line spacing and doesn't indent right.

0

Although I'm sure you can at least manage to read it, it's not that bad. If you don't feel like helping, I get it, but don't come here to judge people about things you don't know.