Визор HL2RP

Сделал визор для ГО за 15 минут.
Почему-то не работает сразу, а после того как просто подредактирую любой луа файл и сервер сделает reload.

Хочу что бы работал после того сразу беру профессию, не что то не клеится…

в darkrp modules
есть Init файл

сам визор:
– Список профессий, которым будет применяться визор и эффекты
local allowedTeams = {
TEAM_C17OPDCDT,
TEAM_C17OPDSER,
TEAM_C17OPDLT,
TEAM_C17OPDINSTRUCTOR,
TEAM_C17SDMEDICALSER,
TEAM_C17SDTECHNICALSER,
TEAM_C17SDCOMBATSER,
TEAM_C17SDCHASERSER,
TEAM_C17SDWARDENMJR,
TEAM_ELITEGUARDCPT,
TEAM_ELITEMJR,
TEAM_ELITECMDPPT,
TEAM_ADSUPERVISORCPT,
TEAM_ADINSPECTORMJR,
TEAM_ADGOVPPT,
TEAM_C17CMDCOMMISSARPT,
TEAM_C17CMDDIVISIONGENMGR,
TEAM_C17CMDSECTORIALGCS
}

– Функция проверки профессии
local function isAllowedTeam(ply)
return table.HasValue(allowedTeams, ply:Team())
end

– Добавление визуального эффекта
hook.Add(“RenderScreenspaceEffects”, “CombineVisorEffect”, function()
local ply = LocalPlayer()
if isAllowedTeam(ply) then
DrawMaterialOverlay(“effects/combine_binocoverlay.vmt”, 0.1)
end
end)

– Звук шагов
hook.Add(“PlayerFootstep”, “CombineFootstepSound”, function(ply, pos, foot, sound, volume, rf)
if isAllowedTeam(ply) then
local soundPath = “npc/combine_soldier/gear” … math.random(1, 6) … “.wav”
ply:EmitSound(soundPath, 30, 100, 1, CHAN_AUTO)
return true – Отключаем стандартный звук шагов
end
end)

– Анимированный текст
local statusMessages = {
“Обновление API…”,
“Обновление сделано успешно!”,
“Загрузка модулей безопасности…”,
“Модули загружены успешно!”,
“Проверка системных файлов…”,
“Проверка завершена без ошибок!”,
“Сканирование на уязвимости…”,
“Уязвимостей не обнаружено!”,
“Установка обновлений безопасности…”,
“Установлено успешно!”,
“Проверка соединения с сервером…”,
“Соединение установлено!”,
“Синхронизация времени с сервером…”,
“Время синхронизировано!”,
“Обновление конфигурационных файлов…”,
“Конфигурация обновлена!”,
“Инициализация протоколов защиты данных…”,
“Протоколы активированы!”,
“Сбор данных телеметрии…”,
“Данные собраны успешно!”,
“Запуск системного мониторинга…”,
“Мониторинг активирован!”,
“Инициализация модулей коммуникации…”,
“Модули инициализированы!”,
“Проверка аппаратного обеспечения…”,
“Оборудование работает корректно!”,
“Обновление баз данных…”,
“Базы данных обновлены!”,
“Проверка целостности данных…”,
“Целостность данных подтверждена!”,
“Загрузка пользовательских настроек…”,
“Настройки загружены!”,
“Запуск системного аудита…”,
“Аудит завершен успешно!”,
“Обновление протоколов безопасности…”,
“Протоколы обновлены!”,
“Инициализация системы оповещений…”,
“Система оповещений активирована!”,
“Обновление интерфейса пользователя…”,
“Интерфейс обновлен!”,
“Инициализация сетевых служб…”,
“Сетевые службы запущены!”,
“Проверка обновлений системы…”,
“Обновлений не требуется!”
}

local currentIndex = 1
local displayMessages = {}
local lastUpdate = CurTime()

hook.Add(“HUDPaint”, “CombineStatusMessages”, function()
local ply = LocalPlayer()
if isAllowedTeam(ply) then
if CurTime() - lastUpdate >= 1 then
table.insert(displayMessages, statusMessages[currentIndex])
currentIndex = (currentIndex % #statusMessages) + 1
if #displayMessages > 3 then
table.remove(displayMessages, 1)
end
lastUpdate = CurTime()
end

    for i, msg in ipairs(displayMessages) do
        draw.SimpleText(msg, "Default", 10, 10 + (i - 1) * 15, Color(0, 255, 0, 255), TEXT_ALIGN_LEFT, TEXT_ALIGN_TOP)
    end
end

end)

init:
– Отправка клиентского скрипта игрокам
util.AddNetworkString(“SendVisorScript”)

hook.Add(“PlayerInitialSpawn”, “SendVisorScriptToPlayer”, function(ply)
net.Start(“SendVisorScript”)
net.Send(ply)
end)

это не весь код :
по данной части не вижу проблем, кроме использования функций table.HasValue , ipairs и Color в прорисовке|рендере, это очень сильно бьёт по производительности, проще сделать таблицу так:

local allowedTeams = {
TEAM_C17OPDCDT=true,
TEAM_C17OPDSER=true,
TEAM_C17OPDLT=true,
TEAM_C17OPDINSTRUCTOR=true,
TEAM_C17SDMEDICALSER=true,
TEAM_C17SDTECHNICALSER=true,
TEAM_C17SDCOMBATSER=true,
TEAM_C17SDCHASERSER=true,
TEAM_C17SDWARDENMJR=true,
TEAM_ELITEGUARDCPT=true,
TEAM_ELITEMJR=true,
TEAM_ELITECMDPPT=true,
TEAM_ADSUPERVISORCPT=true,
TEAM_ADINSPECTORMJR=true,
TEAM_ADGOVPPT=true,
TEAM_C17CMDCOMMISSARPT=true,
TEAM_C17CMDDIVISIONGENMGR=true,
TEAM_C17CMDSECTORIALGCS=true
}
--А саму проверку так
local function isAllowedTeam(ply)
return allowedTeams[ply:Team()]
end

пока делал таблицу подумал, а может у тебя код вызвается до создания профессий?
из за чего TEAM_C17CMDCOMMISSARPT будет как nil
попробуй сделат так:

спрятал текст
local allowedTeams={}
hook.Add('PostGamemodeLoaded','CREATE.TABLE.TEAMS.!',function()
-- навсякий задерку на 1 сек
timer.Simple(1, function()
allowedTeams = {
TEAM_C17OPDCDT=true,
TEAM_C17OPDSER=true,
TEAM_C17OPDLT=true,
TEAM_C17OPDINSTRUCTOR=true,
TEAM_C17SDMEDICALSER=true,
TEAM_C17SDTECHNICALSER=true,
TEAM_C17SDCOMBATSER=true,
TEAM_C17SDCHASERSER=true,
TEAM_C17SDWARDENMJR=true,
TEAM_ELITEGUARDCPT=true,
TEAM_ELITEMJR=true,
TEAM_ELITECMDPPT=true,
TEAM_ADSUPERVISORCPT=true,
TEAM_ADINSPECTORMJR=true,
TEAM_ADGOVPPT=true,
TEAM_C17CMDCOMMISSARPT=true,
TEAM_C17CMDDIVISIONGENMGR=true,
TEAM_C17CMDSECTORIALGCS=true
}


end )
end)

если не поможет отправляй поный код файлом. Да тут можно просто перенести файл в сообщение.

Всё еще не работает (сразу)
сделал быстро 2 init файла, думал мб поможет. (Спасибо за помощь)

init:
– Отправка клиентского скрипта игрокам
util.AddNetworkString(“SendVisorScript”)

hook.Add(“PlayerInitialSpawn”, “SendVisorScriptToPlayer”, function(ply)
net.Start(“SendVisorScript”)
net.Send(ply)
end)

init2:
– Отправка клиентского скрипта игрокам
if SERVER then
AddCSLuaFile(“visor.lua”)
else
include(“visor.lua”)
end

visor:
local allowedTeams={}
hook.Add(‘PostGamemodeLoaded’,‘CREATE.TABLE.TEAMS.!’,function()
– навсякий задерку на 1 сек
timer.Simple(1, function()
allowedTeams = {
TEAM_C17OPDCDT=true,
TEAM_C17OPDSER=true,
TEAM_C17OPDLT=true,
TEAM_C17OPDINSTRUCTOR=true,
TEAM_C17SDMEDICALSER=true,
TEAM_C17SDTECHNICALSER=true,
TEAM_C17SDCOMBATSER=true,
TEAM_C17SDCHASERSER=true,
TEAM_C17SDWARDENMJR=true,
TEAM_ELITEGUARDCPT=true,
TEAM_ELITEMJR=true,
TEAM_ELITECMDPPT=true,
TEAM_ADSUPERVISORCPT=true,
TEAM_ADINSPECTORMJR=true,
TEAM_ADGOVPPT=true,
TEAM_C17CMDCOMMISSARPT=true,
TEAM_C17CMDDIVISIONGENMGR=true,
TEAM_C17CMDSECTORIALGCS=true
}

–А саму проверку так
local function isAllowedTeam(ply)
return allowedTeams[ply:Team()]
end

– Добавление визуального эффекта
hook.Add(“RenderScreenspaceEffects”, “CombineVisorEffect”, function()
local ply = LocalPlayer()
if isAllowedTeam(ply) then
DrawMaterialOverlay(“effects/combine_binocoverlay.vmt”, 0.1)
end
end)

– Звук шагов
hook.Add(“PlayerFootstep”, “CombineFootstepSound”, function(ply, pos, foot, sound, volume, rf)
if isAllowedTeam(ply) then
local soundPath = “npc/combine_soldier/gear” … math.random(1, 6) … “.wav”
ply:EmitSound(soundPath, 30, 100, 1, CHAN_AUTO)
return true – Отключаем стандартный звук шагов
end
end)

– Анимированный текст
local statusMessages = {
“Обновление API…”,
“Обновление сделано успешно!”,
“Загрузка модулей безопасности…”,
“Модули загружены успешно!”,
“Проверка системных файлов…”,
“Проверка завершена без ошибок!”,
“Сканирование на уязвимости…”,
“Уязвимостей не обнаружено!”,
“Установка обновлений безопасности…”,
“Установлено успешно!”,
“Проверка соединения с сервером…”,
“Соединение установлено!”,
“Синхронизация времени с сервером…”,
“Время синхронизировано!”,
“Обновление конфигурационных файлов…”,
“Конфигурация обновлена!”,
“Инициализация протоколов защиты данных…”,
“Протоколы активированы!”,
“Сбор данных телеметрии…”,
“Данные собраны успешно!”,
“Запуск системного мониторинга…”,
“Мониторинг активирован!”,
“Инициализация модулей коммуникации…”,
“Модули инициализированы!”,
“Проверка аппаратного обеспечения…”,
“Оборудование работает корректно!”,
“Обновление баз данных…”,
“Базы данных обновлены!”,
“Проверка целостности данных…”,
“Целостность данных подтверждена!”,
“Загрузка пользовательских настроек…”,
“Настройки загружены!”,
“Запуск системного аудита…”,
“Аудит завершен успешно!”,
“Обновление протоколов безопасности…”,
“Протоколы обновлены!”,
“Инициализация системы оповещений…”,
“Система оповещений активирована!”,
“Обновление интерфейса пользователя…”,
“Интерфейс обновлен!”,
“Инициализация сетевых служб…”,
“Сетевые службы запущены!”,
“Проверка обновлений системы…”,
“Обновлений не требуется!”
}

local currentIndex = 1
local displayMessages = {}
local lastUpdate = CurTime()

hook.Add(“HUDPaint”, “CombineStatusMessages”, function()
local ply = LocalPlayer()
if isAllowedTeam(ply) then
if CurTime() - lastUpdate >= 1 then
table.insert(displayMessages, statusMessages[currentIndex])
currentIndex = (currentIndex % #statusMessages) + 1
if #displayMessages > 3 then
table.remove(displayMessages, 1)
end
lastUpdate = CurTime()
end

    for i, msg in ipairs(displayMessages) do
        draw.SimpleText(msg, "Default", 10, 10 + (i - 1) * 15, Color(0, 255, 0, 255), TEXT_ALIGN_LEFT, TEXT_ALIGN_TOP)
    end
end

end)

Но не работает(

init.lua (250 байтов)
init2.lua (188 байтов)
visor.lua (4,9 КБ)

1-2 дня помочь не смогу, дом горел за пк сидеть не могу.

Реально?!? Дай бог тебе поможет