AssemblyLinearVelocity doesn't affect players in the same way it affects NPCs?

I’m making a game where you throw players off the map. I’ve been testing on a Dummy, and it’s been working great. I went to test it with my friend, though, and the velocity hardly affected an actual player. I’m updating the player’s velocity using AssemblyLinearVelocity. Is there an alternative way you’re intended to do this, or am I just doing it wrong?

game.ReplicatedStorage.PlayerAttackEvent.OnServerEvent:Connect(function(playerwhosent, character, reverse, vector, distance)
	if reverse == false then
		print(vector)
		print(character)
		wait()
		character:FindFirstChild("Torso").AssemblyLinearVelocity = (character.Torso.AssemblyLinearVelocity + (vector * ((40 - distance) * 5)))
	else
		print(vector)
		print(character)
		wait()
		character:FindFirstChild("Torso").AssemblyLinearVelocity = (character.Torso.AssemblyLinearVelocity - (vector * ((distance) * 2.75)))
	end
end)

Remember that this works just fine on a Dummy humanoid.

1 Like

Send the code. It could be many things, but AssemblyLinearVelocity has to do with objects’ velocity in general, so it’s likely not that it affects you differently.

Edited to include code. Sorry about that.

You should probably set the HumanoidRootPart’s AssemblyLinearVelocity instead. Even though you probably already know this, this needs to be secured.

You probably just need to apply way more force. I’ve always found myself having to apply a force with like a magnitude of 20,000 or more to move a player.

Really? That’s the solution? That feels kind of cheap, but I’ll give it a shot.

That doesn’t seem to work, even if I multiplied the speed by 50,000. Is there anything else?

Ah I guess I was wrong about that. So it seems you shouldn’t be using AssemblyLinearVelocity on the server, because the server doesn’t have network ownership of a player’s character. That player does. So yeah, while you could set the AssemblyLinearVelocity using a RemoteEvent in a LocalScript that belongs to the player you’re trying to move, I honestly would just create a VectorForce on the server and place it inside of the player’s root part, and set the Attachment0 property to the RootAttachment that is placed in their character’s root part by default. And then delete the VectorForce after like 1 second so it’s not being constantly applied to their character.

So something like this:

local force = Instance.new("VectorForce", root)
force.Attachment0 = root.RootAttachment
force.Force = Vector3.new(100000,0,0)
game.Debris:AddItem(force, 1)

A better way to do this is probably to use ApplyImpulse. Then you won’t have to create new instances. You can get the same effect by multiplying the force by the time and applying that as the impulse.

ApplyImpulse can’t be used by the server on a character model because the server doesn’t have network ownership of it.