Привет ГПТ!
Помоги зафиксить код:

-- Клиентский скрипт для отображения радиального меню взаимодействия
include("autorun/sh_interactions_config.lua")

local interactionRadius = 100 -- Радиус для выбора игроков
local interactionFOV = 30 -- Поле зрения для отображения G-кнопки
local isShowingMenu = false
local targetPlayer = nil
local consentRequestFrame = nil
local consentAction = nil
local consentRequester = nil

-- Функция для создания радиального меню с использованием аддона
local function CreateRadialMenu()
    -- Создаем объект меню с использованием аддона
    local menu = mvp.meta.radialMenu:New()
    return menu
end

-- Функция для создания окна запроса согласия
local function CreateConsentRequestWindow(requester, action)
    if IsValid(consentRequestFrame) then
        consentRequestFrame:Remove()
    end

    consentRequestFrame = vgui.Create("DFrame")
    consentRequestFrame:SetSize(300, 150)
    consentRequestFrame:Center()
    consentRequestFrame:SetTitle("Запрос согласия")
    consentRequestFrame:MakePopup()
    consentRequestFrame:SetDraggable(false)
    consentRequestFrame:ShowCloseButton(false)

    local label = vgui.Create("DLabel", consentRequestFrame)
    label:SetPos(20, 30)
    label:SetSize(260, 30)
    label:SetText(requester:Nick() .. " хочет выполнить действие: " .. action)
    label:SetContentAlignment(5)

    local yesButton = vgui.Create("DButton", consentRequestFrame)
    yesButton:SetSize(100, 40)
    yesButton:SetPos(30, 80)
    yesButton:SetText("Согласен")
    yesButton.DoClick = function()
        net.Start("ConsentResponse")
        net.WriteString(action)
        net.WriteEntity(requester)
        net.WriteBool(true)
        net.SendToServer()
        consentRequestFrame:Close()
        consentRequestFrame = nil
    end

    local noButton = vgui.Create("DButton", consentRequestFrame)
    noButton:SetSize(100, 40)
    noButton:SetPos(170, 80)
    noButton:SetText("Отклонить")
    noButton.DoClick = function()
        net.Start("ConsentResponse")
        net.WriteString(action)
        net.WriteEntity(requester)
        net.WriteBool(false)
        net.SendToServer()
        consentRequestFrame:Close()
        consentRequestFrame = nil
    end
end

-- Обработка сетевого запроса на согласие
net.Receive("ConsentRequest", function()
    local requester = net.ReadEntity()
    local action = net.ReadString()
    CreateConsentRequestWindow(requester, action)
end)

-- Функция для открытия радиального меню с действиями из категории
local function OpenCategoryMenu(categoryActions, target)
    local menu = CreateRadialMenu() -- Создаем меню

    for name, action in pairs(categoryActions) do
        menu:AddOption(action.displayName, "Выполнить действие", Material("path/to/icon.png"), Color(150, 150, 255), function()
            net.Start("RequestInteraction")
            net.WriteString(name)
            net.WriteEntity(target)
            net.SendToServer()
        end)
    end

    -- Открытие меню
    menu:Open()
end

-- Функция для отображения главного радиального меню с категориями
local function OpenMainRadialMenu(target)
    local menu = CreateRadialMenu() -- Создаем новое меню через аддон

    -- Добавляем категории в меню
    menu:AddOption("Другие действия", "Выберите из списка других действий", Material("path/to/icon.png"), Color(255, 150, 150), function()
        OpenCategoryMenu(InteractionsConfig.OtherActions, target)
    end)

    menu:AddOption("Дружелюбные действия", "Выберите дружелюбные действия", Material("path/to/icon.png"), Color(150, 255, 150), function()
        OpenCategoryMenu(InteractionsConfig.FriendlyActions, target)
    end)

    menu:AddOption("Недружелюбные действия", "Выберите недружелюбные действия", Material("path/to/icon.png"), Color(255, 150, 150), function()
        OpenCategoryMenu(InteractionsConfig.SexActions, target)
    end)

    -- Открытие меню
    menu:Open()
end

-- Пример вызова вложенного меню
local function OpenNestedCategoryMenu(target)
    local menu = CreateRadialMenu()

    local subMenuHolder = menu:AddOption("Вложенное меню", "Описание", Material("path/to/icon.png"), Color(255, 200, 200))

    -- Добавляем опции во вложенное меню
    subMenuHolder:AddSubOption("Опция 1", "Описание 1", Material("path/to/icon1.png"), Color(200, 255, 150), function() print("Опция 1 выбрана") end)
    subMenuHolder:AddSubOption("Опция 2", "Описание 2", Material("path/to/icon2.png"), Color(150, 255, 200), function() print("Опция 2 выбрана") end)

    -- Открываем главное меню
    menu:Open()
end

-- Функция для рисования кнопки "G" над игроками
local function DrawGButton(player)
    local pos = player:LocalToWorld(player:OBBCenter()):ToScreen()
    draw.SimpleText("G", "Trebuchet24", pos.x, pos.y, Color(255, 255, 255, 255), TEXT_ALIGN_CENTER, TEXT_ALIGN_CENTER)
end

-- Проверка, находится ли игрок в поле зрения
local function IsPlayerInFOV(ply)
    local localPlayer = LocalPlayer()
    local forward = localPlayer:EyeAngles():Forward()
    local direction = (ply:GetPos() - localPlayer:GetPos()):GetNormalized()
    local dot = forward:Dot(direction)

    local angle = math.deg(math.acos(dot))
    return angle <= (interactionFOV / 2)
end

-- Получение ближайших игроков
local function GetNearbyPlayers()
    local players = {}
    for _, ply in ipairs(player.GetAll()) do
        if ply ~= LocalPlayer() and ply:GetPos():Distance(LocalPlayer():GetPos()) <= interactionRadius then
            table.insert(players, ply)
        end
    end
    return players
end

-- Хук для рисования кнопки "G" на HUD
hook.Add("HUDPaint", "ShowGKeyOnClosePlayers", function()
    if isShowingMenu then return end
    local localPlayer = LocalPlayer()

    for _, ply in ipairs(player.GetAll()) do
        if ply ~= localPlayer and ply:Alive() then
            local distance = localPlayer:GetPos():Distance(ply:GetPos())

            if distance <= interactionRadius and IsPlayerInFOV(ply) then
                DrawGButton(ply)
                targetPlayer = ply
                break
            else
                targetPlayer = nil
            end
        end
    end
end)

-- Хук для проверки нажатия кнопки "G"
hook.Add("Think", "CheckGKeyPress", function()
    local localPlayer = LocalPlayer()

    -- Проверка, что фокус не находится на элементе ввода текста и игра не в паузе
    if not vgui.GetKeyboardFocus() and not gui.IsGameUIVisible() and input.IsKeyDown(KEY_G) and targetPlayer and not isShowingMenu then
        isShowingMenu = true
        OpenMainRadialMenu(targetPlayer) -- Открываем главное меню
    end

    if isShowingMenu and targetPlayer then
        local distance = localPlayer:GetPos():Distance(targetPlayer:GetPos())
        if distance > interactionRadius then
            isShowingMenu = false
            targetPlayer = nil
        end
    end
end)

-- Функция для рисования круга
function draw.Circle(x, y, radius, seg)
    local cir = {}
    table.insert(cir, {x = x, y = y})

    for i = 0, seg do
        local a = math.rad((i / seg) * -360)
        table.insert(cir, {x = x + math.sin(a) * radius, y = y + math.cos(a) * radius})
    end

    surface.DrawPoly(cir)
end

-- Уведомление о завершении клиентской загрузки
print("Client-side Interaction Menu loaded.")

Проблема заключается в том, что после закрытия меню или его открытия, и кнопка "G" перестает появляться, пока я не перезайду в радиус взаимодействия. У меня так же есть код как просчитывается радиальное меню, но этот аддон не мой, я могу лишь при помощи него делать это радиальное меню