I took SheepGoesBaa's bhop script, and i wanted to modify it for a quake-like game i was making, and i was going to give credit to SheepGoesBaa's script, but can someone help to remove the Custom Character that was provided and make it use roblox's regular character?
local mv = {}
local player
local character
local collider
local camera
local input
local collider
local playerGrounded
local playerVelocity
local jumping
local moveInputSum
local dt = 1/60
local partYRatio
local partZRatio
local cameraYaw
local cameraLook
local movementPosition
local movementVelocity
local gravityForce
local airAccelerate
local airMaxSpeed
local groundAccelerate
local groundMaxVelocity
local friction
local playerTorsoToGround
local movementStickDistance
local jumpVelocity
local movementPositionForce
local movementVelocityForce
local maxMovementPitch
local rayYLength
local movementPositionD
local movementPositionP
local movementVelocityP
local gravity
function mv.init(Player, Camera, Input)
player = Player
character = player.Character
collider = character.Torso
camera = Camera
input = Input
playerVelocity = 0
playerGrounded = false
moveInputSum = {
["forward"] = 0,
["side"] = 0 --left is positive
}
airAccelerate = 10000
airMaxSpeed = 3
groundAccelerate = 300
groundMaxVelocity = 20
friction = 10
playerTorsoToGround = 3
movementStickDistance = 0.5
jumpVelocity = 25
movementPositionForce = 400000
movementVelocityForce = 300000
maxMovementPitch = 0.6
rayYLength = playerTorsoToGround + movementStickDistance
movementPositionD = 125
movementPositionP = 14000
movementVelocityP = 1500
gravity = 0.4
end
function mv.initBodyMovers()
movementPosition = Instance.new("BodyPosition", collider)
movementPosition.Name = "movementPosition"
movementPosition.D = movementPositionD
movementPosition.P = movementPositionP
movementPosition.maxForce = Vector3.new()
movementPosition.position = Vector3.new()
movementVelocity = Instance.new("BodyVelocity", collider)
movementVelocity.Name = "movementVelocity"
movementVelocity.P = movementVelocityP
movementVelocity.maxForce = Vector3.new()
movementVelocity.velocity = Vector3.new()
gravityForce = Instance.new("BodyForce", collider)
gravityForce.Name = "gravityForce"
gravityForce.force = Vector3.new(0, (1-gravity)*196.2, 0) * getCharacterMass()
end
function mv.update(deltaTime)
dt = deltaTime
updateMoveInputSum()
cameraYaw = getYaw()
cameraLook = cameraYaw.lookVector
if cameraLook == nil then
return
end
local hitPart, hitPosition, hitNormal, yRatio, zRatio = findCollisionRay()
partYRatio = yRatio
partZRatio = zRatio
playerGrounded = hitPart ~= nil and true or false
playerVelocity = collider.Velocity - Vector3.new(0, collider.Velocity.y, 0)
if playerGrounded and (input["Space"] or jumping) then
jumping = true
else
jumping = false
end
setCharacterRotation()
if jumping then
jump()
print(math.random())
elseif playerGrounded then
run(hitPosition)
else
air()
end
end
function updateMoveInputSum()
moveInputSum["forward"] = input["W"] == true and 1 or 0
moveInputSum["forward"] = input["S"] == true and moveInputSum["forward"] - 1 or moveInputSum["forward"]
moveInputSum["side"] = input["A"] == true and 1 or 0
moveInputSum["side"] = input["D"] == true and moveInputSum["side"] - 1 or moveInputSum["side"]
end
function findCollisionRay()
local torsoCFrame = character.Torso.CFrame
local ignoreList = {character, camera}
local rays = {
Ray.new(character.Torso.Position, Vector3.new(0, -rayYLength, 0)),
Ray.new((torsoCFrame * CFrame.new(-0.8,0,0)).p, Vector3.new(0, -rayYLength, 0)),
Ray.new((torsoCFrame * CFrame.new(0.8,0,0)).p, Vector3.new(0, -rayYLength, 0)),
Ray.new((torsoCFrame * CFrame.new(0,0,0.8)).p, Vector3.new(0, -rayYLength, 0)),
Ray.new((torsoCFrame * CFrame.new(0,0,-0.8)).p, Vector3.new(0, -rayYLength, 0))
}
local rayReturns = {}
local i
for i = 1, #rays do
local part, position, normal = game.Workspace:FindPartOnRayWithIgnoreList(rays[i],ignoreList)
if part == nil then
position = Vector3.new(0,-3000000,0)
end
if i == 1 then
table.insert(rayReturns, {part, position, normal})
else
local yPos = position.y
if yPos <= rayReturns[#rayReturns][2].y then
table.insert(rayReturns, {part, position, normal})
else
local j
for j = 1, #rayReturns do
if yPos >= rayReturns[j][2].y then
table.insert(rayReturns, j, {part, position, normal})
end
end
end
end
end
i = 1
local yRatio, zRatio = getPartYRatio(rayReturns[i][3])
while magnitude2D(yRatio, zRatio) > maxMovementPitch and i<#rayReturns do
i = i + 1
if rayReturns[i][1] then
yRatio, zRatio = getPartYRatio(rayReturns[i][3])
end
end
return rayReturns[i][1], rayReturns[i][2], rayReturns[i][3], yRatio, zRatio
end
function setCharacterRotation()
local rotationLook = collider.Position + camera.CoordinateFrame.lookVector
collider.CFrame = CFrame.new(collider.Position, Vector3.new(rotationLook.x, collider.Position.y, rotationLook.z))
collider.RotVelocity = Vector3.new()
end
function jump()
collider.Velocity = Vector3.new(collider.Velocity.x, jumpVelocity, collider.Velocity.z)
air()
end
function air()
movementPosition.maxForce = Vector3.new()
movementVelocity.velocity = getMovementVelocity(collider.Velocity, airAccelerate, airMaxSpeed)
movementVelocity.maxForce = getMovementVelocityAirForce()
end
function run(hitPosition)
local playerSpeed = collider.Velocity.magnitude
local mVelocity = collider.Velocity
if playerSpeed ~= 0 then
local drop = playerSpeed * friction * dt;
mVelocity = mVelocity * math.max(playerSpeed - drop, 0) / playerSpeed;
end
movementPosition.position = hitPosition + Vector3.new(0,playerTorsoToGround,0)
movementPosition.maxForce = Vector3.new(0,movementPositionForce,0)
movementVelocity.velocity = getMovementVelocity(mVelocity, groundAccelerate, groundMaxVelocity)
local VelocityForce = getMovementVelocityForce()
movementVelocity.maxForce = VelocityForce
movementVelocity.P = movementVelocityP
end
function getMovementVelocity(prevVelocity, accelerate, maxVelocity)
local accelForward = cameraLook * moveInputSum["forward"]
local accelSide = (cameraYaw * CFrame.Angles(0,math.rad(90),0)).lookVector * moveInputSum["side"];
local accelDir = (accelForward+accelSide).unit;
if moveInputSum["forward"] == 0 and moveInputSum["side"] == 0 then --avoids divide 0 errors
accelDir = Vector3.new(0,0,0);
end
local projVel = prevVelocity:Dot(accelDir);
local accelVel = accelerate * dt;
if (projVel + accelVel > maxVelocity) then
accelVel = math.max(maxVelocity - projVel, 0);
end
return prevVelocity + accelDir * accelVel;
end
function getMovementVelocityForce()
return Vector3.new(movementVelocityForce,0,movementVelocityForce)
end
function getMovementVelocityAirForce()
local accelForward = cameraLook * moveInputSum["forward"];
local accelSide = (cameraYaw * CFrame.Angles(0,math.rad(90),0)).lookVector * moveInputSum["side"]
local accelDir = (accelForward+accelSide).unit
if moveInputSum["forward"] == 0 and moveInputSum["side"] == 0 then
accelDir = Vector3.new(0,0,0);
end
local xp = math.abs(accelDir.x)
local zp = math.abs(accelDir.z)
return Vector3.new(movementVelocityForce*xp,0,movementVelocityForce*zp)
end
function getPartYRatio(normal)
local partYawVector = Vector3.new(-normal.x, 0, -normal.z)
if partYawVector.magnitude == 0 then
return 0,0
else
local partPitch = math.atan2(partYawVector.magnitude,normal.y)/(math.pi/2)
local vector = Vector3.new(cameraLook.x, 0, cameraLook.z)*partPitch
return vector:Dot(partYawVector), -partYawVector:Cross(vector).y
end
end
function getYaw() --returns CFrame
return camera.CoordinateFrame*CFrame.Angles(-getPitch(),0,0)
end
function getPitch() --returns number
return math.pi/2 - math.acos(camera.CoordinateFrame.lookVector:Dot(Vector3.new(0,1,0)))
end
function getCharacterMass()
return character.Torso:GetMass() + character.Head:GetMass()
end
function magnitude2D(x,z)
return math.sqrt(x*x+z*z)
end
return mv
edit: i forgot here's the server-side script,
function serverFunctions.spawnCustom(player)
print(player)
game.Workspace:WaitForChild(player.Name)
game.Workspace[player.Name]:WaitForChild("Humanoid")
local OldCharacter = player.Character
local OldCharacterLocation = OldCharacter.Torso.Position
local NewCharacter = game.ServerStorage.NewCharacter:Clone()
NewCharacter.Name = player.Name
NewCharacter.Parent = game.Workspace
local Humanoid = OldCharacter.Humanoid
player.Character = NewCharacter
Humanoid.Parent = NewCharacter
Humanoid.PlatformStand = false
OldCharacter:Destroy()
local SpawnGui = player.PlayerGui:FindFirstChild("SpawnGui")
if SpawnGui ~= nil then
SpawnGui:Destroy()
end
NewCharacter:MoveTo(OldCharacterLocation)
end
function handleEvent(player, functionName, args)
if serverFunctions[functionName] then
serverFunctions[functionName](player, args)
end
end
remoteEvent.OnServerEvent:connect(handleEvent)

2 comments
Just change the vars and wherever is references the character. you might as well make your own bhop script if you don't want the custom character with his. or just try it with R6 from the looks of it.
im trying to figure it out, but i still don't think its the correct answer, ill check in more files, but yeah, ill keep on trying to get more answers.