I made custom material footsteps, but I can only hear my footsteps, I can't hear my friends. How can I make this serverside: here are the scripts
NOTE: THERE IS A MODULE ON REPLICATED STORAGE WITH ALL THE SOUND IDS IN A TABLE.
this script is located on ServerScriptService
-- Services
local players = game:GetService("Players")
-- Functions
players.PlayerAdded:Connect(function(player)
player.CharacterAdded:Connect(function(character)
local rootPart = character:WaitForChild("HumanoidRootPart")
local footstepsSound = Instance.new("Sound")
footstepsSound.Name = "Footsteps"
footstepsSound.RollOffMaxDistance = 30
footstepsSound.RollOffMode = Enum.RollOffMode.Linear
footstepsSound.PlayOnRemove = true
footstepsSound.Parent = rootPart
end)
end)
Basically above creates a sound inside the humanoidrootpart as soon as the player joins.
Now, a script inside StarterCharacterScripts, on StarterPlayer
-- Services
local replicatedStorage = game:GetService("ReplicatedStorage")
local players = game:GetService("Players")
-- Variables
local footstepsModule = require(replicatedStorage:WaitForChild("FootstepModule"))
local player = players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local rootPart = character:WaitForChild("HumanoidRootPart")
-- Sounds
local footstepsSound = rootPart:WaitForChild("Footsteps")
-- Boolean
local cooldown = 0.47
-- // Functions
rootPart.Running.Volume = 0
-- Check if player is walking
local check_movement = function()
if humanoid.WalkSpeed > 0 and humanoid.MoveDirection.Magnitude > 0 and humanoid.FloorMaterial ~= Enum.Material.Air then
return true
elseif humanoid.WalkSpeed <= 0 or humanoid.MoveDirection.Magnitude <= 0 or humanoid.FloorMaterial == Enum.Material.Air then
return false
end
end
-- Get sound id
local get_material = function()
local soundTable = footstepsModule:GetTableFromMaterial(humanoid.FloorMaterial)
local randomSound = footstepsModule:GetRandomSound(soundTable)
return randomSound
end
-- Main loop
spawn(function()
while wait(cooldown) do
if check_movement() then
footstepsSound.SoundId = get_material()
footstepsSound.Parent = nil
footstepsSound.Parent = rootPart
end
end
end)
Basically, above grabs a random sound from the module in replicated storage, and plays it until the player isn't moving anymore If you can't help me without the module, here it is:
-- FOOTSTEP MODULE BY UGLYBURGER0
-- FOOTSTEP MODULE BY UGLYBURGER0
-- FOOTSTEP MODULE BY UGLYBURGER0
-- FOOTSTEP MODULE BY UGLYBURGER0
local main = {}
main.SoundIds = {
Concrete = {
"rbxassetid://6026529903",
"rbxassetid://6026529887",
"rbxassetid://6026529862",
"rbxassetid://6026529840",
"rbxassetid://6026529818",
"rbxassetid://6026529791",
"rbxassetid://6026529773",
"rbxassetid://6026529752",
"rbxassetid://6026529732",
"rbxassetid://6026529709",
"rbxassetid://6026529682",
"rbxassetid://6026529649",
"rbxassetid://6026529624",
"rbxassetid://6026529596",
"rbxassetid://6026529570",
"rbxassetid://6026529548",
"rbxassetid://6026529529"
},
Dirt = {
"rbxassetid://6026529510",
"rbxassetid://6026529479",
"rbxassetid://6026529455",
"rbxassetid://6026529426",
"rbxassetid://6026529403",
"rbxassetid://6026529380",
"rbxassetid://6026529353",
"rbxassetid://6026529332",
"rbxassetid://6026529302",
"rbxassetid://6026529285",
"rbxassetid://6026529263",
"rbxassetid://6026529241",
"rbxassetid://6026529218",
"rbxassetid://6026529201"
},
Glass = {
"rbxassetid://6026529185",
"rbxassetid://6026529160",
"rbxassetid://6026529132",
"rbxassetid://6026529110",
"rbxassetid://6026529091",
"rbxassetid://6026529067",
"rbxassetid://6026529041",
"rbxassetid://6026529021"
},
Gravel = {
"rbxassetid://6026528992",
"rbxassetid://6026528968",
"rbxassetid://6026528938",
"rbxassetid://6026528910",
"rbxassetid://6026528890",
"rbxassetid://6026528867",
"rbxassetid://6026528838",
"rbxassetid://6026528810",
"rbxassetid://6026528783",
"rbxassetid://6026528757"
},
Metal_Chainlink = {
"rbxassetid://6026528733",
"rbxassetid://6026528705",
"rbxassetid://6026528676",
"rbxassetid://6026528646",
"rbxassetid://6026528628",
"rbxassetid://6026528611",
"rbxassetid://6026528585",
"rbxassetid://6026528552"
},
Metal_Grate = {
"rbxassetid://6026528156",
"rbxassetid://6026528216",
"rbxassetid://6026528188",
"rbxassetid://6026528244",
"rbxassetid://6026528266",
"rbxassetid://6026528287",
"rbxassetid://6026528308",
"rbxassetid://6026528332",
"rbxassetid://6026528357",
"rbxassetid://6026528385",
"rbxassetid://6026528410",
"rbxassetid://6026528441",
"rbxassetid://6026528469",
"rbxassetid://6026528496",
"rbxassetid://6026528524"
},
Metal_Solid = {
"rbxassetid://6026527724",
"rbxassetid://6026527764",
"rbxassetid://6026527787",
"rbxassetid://6026527808",
"rbxassetid://6026527837",
"rbxassetid://6026527863",
"rbxassetid://6026527891",
"rbxassetid://6026527914",
"rbxassetid://6026527941",
"rbxassetid://6026527966",
"rbxassetid://6026527992",
"rbxassetid://6026528021",
"rbxassetid://6026528049",
"rbxassetid://6026528077",
"rbxassetid://6026528109",
"rbxassetid://6026528135"
},
Mud = {
"rbxassetid://6026527485",
"rbxassetid://6026527515",
"rbxassetid://6026527542",
"rbxassetid://6026527565",
"rbxassetid://6026527590",
"rbxassetid://6026527619",
"rbxassetid://6026527643",
"rbxassetid://6026527701",
"rbxassetid://6026527665"
},
Rubber = {
"rbxassetid://6026527312",
"rbxassetid://6026527333",
"rbxassetid://6026527355",
"rbxassetid://6026527373",
"rbxassetid://6026527397",
"rbxassetid://6026527418",
"rbxassetid://6026527438",
"rbxassetid://6026527460"
},
Sand = {
"rbxassetid://6026526986",
"rbxassetid://6026527009",
"rbxassetid://6026527039",
"rbxassetid://6026527068",
"rbxassetid://6026527096",
"rbxassetid://6026527126",
"rbxassetid://6026527161",
"rbxassetid://6026527185",
"rbxassetid://6026527213",
"rbxassetid://6026527233",
"rbxassetid://6026527251",
"rbxassetid://6026527280"
},
Tile = {
"rbxassetid://6026526636",
"rbxassetid://6026526656",
"rbxassetid://6026526679",
"rbxassetid://6026526696",
"rbxassetid://6026526715",
"rbxassetid://6026526748",
"rbxassetid://6026526771",
"rbxassetid://6026526795",
"rbxassetid://6026526825",
"rbxassetid://6026526840",
"rbxassetid://6026526866",
"rbxassetid://6026526891",
"rbxassetid://6026526928",
"rbxassetid://6026526956"
},
Wood = {
"rbxassetid://6026526251",
"rbxassetid://6026526275",
"rbxassetid://6026526300",
"rbxassetid://6026526323",
"rbxassetid://6026526351",
"rbxassetid://6026526385",
"rbxassetid://6026526422",
"rbxassetid://6026526450",
"rbxassetid://6026526470",
"rbxassetid://6026526499",
"rbxassetid://6026526518",
"rbxassetid://6026526541",
"rbxassetid://6026526561",
"rbxassetid://6026526588",
"rbxassetid://6026526612"
},
Snow = {
"rbxassetid://6045131088",
"rbxassetid://6045131054",
"rbxassetid://6045131022",
"rbxassetid://6045130992",
"rbxassetid://6045130947",
"rbxassetid://6045130914",
"rbxassetid://6045130868",
"rbxassetid://6045130832",
"rbxassetid://6045130795",
"rbxassetid://6045130744",
"rbxassetid://6045130703",
"rbxassetid://6045130649"
}
}
main.MaterialMap = {
[Enum.Material.Slate] = main.SoundIds.Concrete,
[Enum.Material.Concrete] = main.SoundIds.Concrete,
[Enum.Material.Brick] = main.SoundIds.Concrete,
[Enum.Material.Cobblestone] = main.SoundIds.Concrete,
[Enum.Material.Sandstone] = main.SoundIds.Concrete,
[Enum.Material.Rock] = main.SoundIds.Concrete,
[Enum.Material.Basalt] = main.SoundIds.Concrete,
[Enum.Material.CrackedLava] = main.SoundIds.Concrete,
[Enum.Material.Asphalt] = main.SoundIds.Concrete,
[Enum.Material.Limestone] = main.SoundIds.Concrete,
[Enum.Material.Pavement] = main.SoundIds.Concrete,
[Enum.Material.Plastic] = main.SoundIds.Tile,
[Enum.Material.Marble] = main.SoundIds.Tile,
[Enum.Material.Granite] = main.SoundIds.Tile,
[Enum.Material.Neon] = main.SoundIds.Tile,
[Enum.Material.Wood] = main.SoundIds.Wood,
[Enum.Material.WoodPlanks] = main.SoundIds.Wood,
[Enum.Material.DiamondPlate] = main.SoundIds.Metal_Solid,
[Enum.Material.Metal] = main.SoundIds.Metal_Solid,
[Enum.Material.CorrodedMetal] = main.SoundIds.Metal_Grate,
[Enum.Material.Grass] = main.SoundIds.Dirt,
[Enum.Material.Ground] = main.SoundIds.Dirt,
[Enum.Material.LeafyGrass] = main.SoundIds.Dirt,
[Enum.Material.Sand] = main.SoundIds.Sand,
[Enum.Material.Fabric] = main.SoundIds.Sand,
[Enum.Material.Salt] = main.SoundIds.Sand,
[Enum.Material.Snow] = main.SoundIds.Snow,
[Enum.Material.Ice] = main.SoundIds.Glass,
[Enum.Material.Glacier] = main.SoundIds.Glass,
[Enum.Material.Glass] = main.SoundIds.Glass,
[Enum.Material.Pebble] = main.SoundIds.Gravel,
[Enum.Material.SmoothPlastic] = main.SoundIds.Rubber,
[Enum.Material.ForceField] = main.SoundIds.Rubber,
[Enum.Material.Foil] = main.SoundIds.Rubber,
[Enum.Material.Mud] = main.SoundIds.Mud,
}
function main:GetTableFromMaterial(EnumItem)
if typeof(EnumItem) == "string" then -- CONVERSION
EnumItem = Enum.Material[EnumItem]
end
return main.MaterialMap[EnumItem]
end
function main:GetRandomSound(SoundTable)
return SoundTable[math.random(#SoundTable)]
end
return main
can you help me make this serversided?
