Не делайте тяжёлую работу каждый кадр
Think, HUDPaint и похожие хуки вызываются очень часто. Внутри них нельзя постоянно читать файлы, выполнять SQL, искать все сущности или строить большие таблицы.
hook.Add("Think", "GML_LimitedThink", function()
if (GMLNextThink or 0) > CurTime() then return end
GMLNextThink = CurTime() + 0.25
-- небольшая периодическая работа
end)Имена должны быть уникальными
Используйте префикс аддона: GML_PlayerSpawn, а не PlayerSpawn1. При перезагрузке Lua хук с тем же именем заменится, а случайные имена могут накопить дубликаты.
Таймер или хук
- событие игры — хук;
- редкая периодическая задача — таймер;
- задержка одного действия —
timer.Simple; - визуальная интерполяция — кадр, но только с дешёвыми вычислениями.
Перед удалением сущности или игрока внутри отложенной функции всегда проверяйте IsValid. Для профилирования временно измеряйте длительность участка через SysTime, а затем убирайте диагностический спам.
