Промпт для создания скрипта MoonLoader (SAMP, Lua)...
생성일: 2025년 3월 7일
생성일: 2025년 3월 7일
Промпт для создания скрипта MoonLoader (SAMP, Lua)
Задача: Написать скрипт на Lua для MoonLoader (SAMP), который:
Работает в Open.MP.
Открывает GUI-меню при вводе команды /buse.
Имеет два пункта в меню:
Считать (позволяет ввести название предмета, цену покупки, количество, валюту).
Логи (показывает список сделок и позволяет их удалять).
Формула расчёта:
(Количество * Цена покупки) = Потрачено.
(Количество * Цена продажи) = Получено.
(Получено - Потрачено) = Прибыль.
Данные сохраняются в таблицу и остаются до перезапуска игры.
В логах можно удалить запись.
📌 Требования к коду:
Использовать MoonLoader API (sampRegisterChatCommand).
Использовать Imgui для отображения GUI-меню.
Скрипт должен быть максимально коротким и оптимизированным.
НЕ использовать sampfuncs (так как Open.MP его не поддерживает).
Должен работать в Open.MP без багов.
🎯 Входные данные (пример ввода в GUI):
Название: Металл
Цена покупки: 200000 Са
Количество: 200
Валюта: Са
Цена продажи: 210000 Са
🎯 Ожидаемый вывод в чат:
markdown
Копировать
Редактировать
[Калькулятор]: Вы купили 200 шт. Металл за 200000 Са.
[Калькулятор]: Вы продали за 210000 Са. Ваша прибыль: 10000 Са.
Ниже приведён максимально краткий пример Lua-скрипта для MoonLoader, работающего в Open.MP без sampfuncs. Скрипт регистрирует команду /buse, при вызове которой открывается окно на ImGui с двумя вкладками: «Считать» и «Логи». Во вкладке «Считать» можно ввести данные (название, цены, количество, валюту) и при нажатии кнопки «Рассчитать» автоматически добавляется запись в лог и выводится сообщение в чат. Во вкладке «Логи» отображаются все операции и есть кнопка «Удалить» для удаления конкретной записи.
luascript_name("buseCalc") script_author("YourName") local imgui = require 'imgui' local mainWindow = imgui.ImBool(false) local activeTab = 1 -- Поля ввода local itemName = imgui.ImBuffer(256) local buyPrice = imgui.ImBuffer(256) local sellPrice = imgui.ImBuffer(256) local quantity = imgui.ImBuffer(256) local currency = imgui.ImBuffer(256) local logs = {} function main() -- Ждём, пока SAMP станет доступен while not isSampAvailable() do wait(0) end -- Регистрируем команду sampRegisterChatCommand("buse", function() mainWindow.v = not mainWindow.v end) -- Обрабатываем рендер окна imgui.OnFrame(function() if mainWindow.v then imgui.SetNextWindowSize(imgui.ImVec2(400,300), imgui.Cond.FirstUseEver) imgui.Begin("Buse Calc", mainWindow) -- Кнопки переключения вкладок if imgui.Button("Считать") then activeTab = 1 end imgui.SameLine() if imgui.Button("Логи") then activeTab = 2 end -- Вкладка "Считать" if activeTab == 1 then imgui.InputText("Название", itemName) imgui.InputText("Цена покупки", buyPrice) imgui.InputText("Количество", quantity) imgui.InputText("Валюта", currency) imgui.InputText("Цена продажи", sellPrice) if imgui.Button("Рассчитать") then local bp = tonumber(buyPrice.v) or 0 local sp = tonumber(sellPrice.v) or 0 local qt = tonumber(quantity.v) or 0 local spent = bp * qt local received = sp * qt local profit = received - spent -- Сохраняем в логи table.insert(logs, { name = itemName.v, buy = bp, sell = sp, qty = qt, cur = currency.v, spent = spent, received = received, profit = profit }) -- Выводим в чат sampAddChatMessage(string.format("[Калькулятор]: Вы купили %d шт. %s за %d %s.", qt, itemName.v, bp, currency.v), 0xFFFFFF) sampAddChatMessage(string.format("[Калькулятор]: Вы продали за %d %s. Ваша прибыль: %d %s.", sp, currency.v, profit, currency.v), 0xFFFFFF) end -- Вкладка "Логи" elseif activeTab == 2 then for i, v in ipairs(logs) do -- Кнопка с краткой информацией if imgui.Button(string.format("%s x%d (%d/%d)##%d", v.name, v.qty, v.buy, v.sell, i)) then end imgui.SameLine() -- Кнопка удаления if imgui.Button("Удалить##"..i) then table.remove(logs, i) break end end end imgui.End() end end) -- Главный цикл, в котором ImGui-окно обрабатывает события while true do wait(0) imgui.Process = mainWindow.v end end
Как это работает:
buseCalc.lua
или любой другой .lua
) зайдите в игру с Open.MP./buse
в чат, чтобы открыть ImGui-окно.logs
и выведет сообщение в чат с подробной информацией о сделке и прибыли.