Для этого вам нужно посмотреть функцию file.Find.
Я бы рекомендовал создать пользовательскую папку, такую как sound/customsteps/
, где вы можете поместить все свои собственные звуки. Я бы также рекомендовал использовать формат .wav
для звуковых файлов, но некоторые другие работают (.mp3
и .ogg
, если я правильно помню).
В своем коде, просто вызовите local snds=file.Find("sound/customsteps/*", "GAME")
, который дает вам таблицу, то вы можете просто выбрать случайный из списка, используя local snd=snds[math.random(1,#snds)]
и играть, как вы делаете в коде выше - ply:EmitSound(snd)
.
Убедитесь, что вы создали таблицу звуков вне функции GM:PlayerFootstep
, так что она запускается только один раз. Я также рекомендовал бы пресечь все звуки. Вы можете сделать это с помощью цикла через стол и вызова util.PrecacheSound(path)
на них, например, так:
for k,v in pairs(snds) do
util.PrecacheSound(v)
end
Таким образом, со всем, что в виду - ваш окончательный код должен выглядеть следующим образом:
local snds=file.Find("sound/customsteps/*", "GAME")
for k,v in pairs(snds) do
util.PrecacheSound(v)
end
function GM:PlayerFootstep(ply, pos, foot, sound, volume, rf)
ply:EmitSound(snds[math.random(1,#snds)])
return true
end
Источник : personal experience