Из того что заметил прямо быстренько:
У тебя серверная логика экспозится клиентам в sh_func.lua, любой скиди сможет частично увидеть серверную логику и структуру БД хукнув Lua, это оч хуевая практика.
Напрямую запрашивать базу данных при каждом вызове гетера тоже хуевая затея, лучше запросить один раз при входе игрока на сервак, а потом работать с кешированным значением, а сохранять в базу, например, только при выходе.
У SetNWString есть лимиты в 199 символов. А так как ты пишешь туда JSON, который помимо полезных данных содержит в себе много мусора (разметка и тд), у тебя изи может произойти утеря данных и нарушение логики.
А так ну в принципе годно