It seems that the issue is with the placement of the `onButtonClick` function. It should be defined before it is used in the `ISButton:new()` function. Also, you need to make sure that the `ISButton` and `ISPanel` classes are properly imported. Here's the corrected code:
```lua
-- Make sure to import ISButton and ISPanel classes
require "ISUI/ISButton"
require "ISUI/ISPanel"
-- Вызывается при подключении к игре
function OnPlayerSpawned(player)
-- Функция-обработчик нажатия кнопки
local function onButtonClick(button)
-- Создаем и отображаем окно со списком кнопок
local menu = ISContextMenu:new(0, 0, 0, 0)
menu:addOption("Статистика", nil) -- TODO: Добавить обработчик нажатия
menu:addOption("Опции", nil) -- TODO: Добавить обработчик нажатия
menu:addOption("Выход", nil) -- TODO: Добавить обработчик нажатия
menu:set
X(getCore():getScreenWidth() - menu:getWidth())
menu:setY(getCore():getScreenHeight() - menu:getHeight())
menu:addToUIManager()
end
-- Определяем размер панельки
local panelWidth = 200
local panelHeight = 100
local button = ISButton:new(0, 0, 100, 30, "Открыть", nil, onButtonClick)
local panel = ISPanel:new(0, 0, panelWidth, panelHeight)
panel:addChild(button)
-- Добавим панель на интерфейс игрока
local player = getPlayer()
if player then
player:getInventory():addChild(panel)
panel:setX(100)
panel:setY(getCore():getScreenHeight() - panelHeight - 1)
end
end
-- Вызываем функцию при подключении к игре
Events.OnPlayerSpawned.Add(OnPlayerSpawned)
```
I have moved the `onButtonClick` function definition to the beginning of the `OnPlayerSpawned` function and added the `require` statements for the `ISButton` and `ISPanel`classes. This should create the button as expected. Make sure that the `ISButton` and `ISPanel` classes are available in your project.