[DarkRP] Свой кастомный звук ходьбы для профессии

Режым DarkRP
Как сделать хотьбу звука MPF и OTA на професию

Пример с вики: GM:PlayerFootstep - Garry's Mod Wiki

hook.Add( "PlayerFootstep", "CustomFootstep", function( ply, pos, foot, sound, volume, rf )
	if ply:Team() ~= TEAM_MPF and ply:Team() ~= TEAM_OTA then return end

    ply:EmitSound( "NPC_Hunter.Footstep" ) -- Play the footsteps hunter is using
	return true -- Don't allow default footsteps, or other addon footsteps
end )

Куда это вписовать ?

В любой shared-файл

Всё сделал звука нет

Ты правильный звук поставил?

NPC_Hunter.Footstep вот это поставил

Если я не ошибаюсь, то охотники есть только в эпизодах халфы, контента которых у тебя нет. Поэтому нет и звука. Попробуй поставить звук npc/combine_soldier/gear1.wav. Ну и проверь, что профессии на самом деле называются TEAM_OTA и TEAM_MPF. Вообще, самый идеальный вариант, который бы сделал я, так это такой:

hook.Add('PlayerFootstep', 'combinesounds', function(ply)
    local t = (ply.getJobTable and ply:getJobTable()) or (ply.GetJobTable and ply:GetJobTable()) -- я не знаю, какой у тебя режим

    if not t or not t.footstepSound then return end
  
    ply:EmitSound(table.Random(istable(t.footstepSound) and t.footstepSound or {t.footstepSound}))
    return true
end)

Затем в каждой профессии, у которой должны быть кастомные звуки ходьбы, ты добавляешь свойство footstepSound, которое может быть либо таблицей, либо строкой (если таблица, то будут издеваться случайные звуки из нее). Например:

TEAM_OTA = DarkRP.createTeam('OTA', {
    ...
    footstepSound = {'npc/combine_soldier/gear1.wav', 'npc/combine_soldier/gear2.wav'},
})

Пробывал твой код тоже самое нет звука режим DarkRP

Заработал именно этот скрипт. Но звук шагов слишком быстро повторяется. Как можно сделать его реже, или разнообразить другими?

Вот код который будет лучше я думаю
(Кидать в Ваш путь\GarrysModDS\garrysmod\lua\autorun)

AddCSLuaFile()

-- Таблицы со звуками шагов для разных профессий
local NPC_CombineS_RunFootstepLeft = {
    "npc/combine_soldier/gear1.wav",
    "npc/combine_soldier/gear3.wav",
    "npc/combine_soldier/gear5.wav"
}

local NPC_CombineS_RunFootstepRight = {
    "npc/combine_soldier/gear2.wav",
    "npc/combine_soldier/gear4.wav",
    "npc/combine_soldier/gear6.wav"
}

local NPC_MetroPolice_RunFootstepLeft = {
    "npc/metropolice/gear1.wav",
    "npc/metropolice/gear3.wav",
    "npc/metropolice/gear5.wav"
}

local NPC_MetroPolice_RunFootstepRight = {
    "npc/metropolice/gear2.wav",
    "npc/metropolice/gear4.wav",
    "npc/metropolice/gear6.wav"
}

-- Таблица с типами звуков шагов
local footstepsSounds = {
    combine = {left = NPC_CombineS_RunFootstepLeft, right = NPC_CombineS_RunFootstepRight},
    metropolice = {left = NPC_MetroPolice_RunFootstepLeft, right = NPC_MetroPolice_RunFootstepRight}
}

-- Функция для назначения типа звуков шагов в зависимости от команды игрока
local function SetPlayerFootstepType(ply)
    local footstepType
    if ply:Team() == TEAM_OTA_JAILER_E then
        footstepType = "combine"
    elseif ply:Team() == TEAM_FORMER_INSPECT then
        footstepType = "metropolice"
    else
        footstepType = nil
    end
    ply:SetNWString("PLAYERFOOTSTEPS_FootstepType", footstepType or "")
end

function PLAYERFOOTSTEPS_PlayerInitialSpawn(ply)
    SetPlayerFootstepType(ply)
end
hook.Add("PlayerInitialSpawn", "PLAYERFOOTSTEPS_PlayerInitialSpawn", PLAYERFOOTSTEPS_PlayerInitialSpawn)

function PLAYERFOOTSTEPS_Think()
    if SERVER then
        for _, ply in pairs(player.GetHumans()) do
            if ply:IsValid() and ply:GetNWString("PLAYERFOOTSTEPS_FootstepType", "") == "" then
                SetPlayerFootstepType(ply)
            end
        end
    end
end
hook.Add("Think", "PLAYERFOOTSTEPS_Think", PLAYERFOOTSTEPS_Think)

function PLAYERFOOTSTEPS_PlayerFootstep(ply, pos, foot, sound, volume, filter)
    -- Определение звука шагов на основе профессии игрока
    local footstepType = footstepsSounds[ply:GetNWString("PLAYERFOOTSTEPS_FootstepType", "")]

    if footstepType then
        -- Воспроизведение соответствующего звука шагов
        if foot == 0 then
            EmitSound(table.Random(footstepType.left), pos, ply:EntIndex(), CHAN_BODY, volume, 75, 0, math.random(95, 105))
        elseif foot == 1 then
            EmitSound(table.Random(footstepType.right), pos, ply:EntIndex(), CHAN_BODY, volume, 75, 0, math.random(95, 105))
        end

        -- Возвращаем false, чтобы предотвратить дальнейшую обработку звуков шага движком
        return false
    end
end
hook.Add("PlayerFootstep", "PLAYERFOOTSTEPS_PlayerFootstep", PLAYERFOOTSTEPS_PlayerFootstep)

-- Новый хук для изменения звуков шагов при смене профессии
function PLAYERFOOTSTEPS_OnPlayerChangedTeam(ply, oldTeam, newTeam)
    SetPlayerFootstepType(ply)
end
hook.Add("OnPlayerChangedTeam", "PLAYERFOOTSTEPS_OnPlayerChangedTeam", PLAYERFOOTSTEPS_OnPlayerChangedTeam)

Что бы добавить новые профессии
if ply:Team() == TEAM_ВАША ПРОФА then

Выбор звука
footstepType = “combine”
footstepType = “metropolice”