- 114
- 12
- Версия MoonLoader
- .026-beta
Здравия, мужики. Для большего понимания, приложу полный код.
Я написал скрипт, который при появлении диалогового окна ид 487 (паспорт) будет записывать из него информацию в иникфг, и во время игры, можно открыть эти данные через /database. Я не знаю почему, но почему то уровень, законопослушность, телефон и розыск не передаются корректно, их значение nil. Перед отправкой этой темы мне удалось решить проблему, но почему то, код резко выдал ошибку, когда я попытался применить изменение под все "данные" которые не правильно сохранялись. Получилось это с помощью - `local name = text:match("Имя:%s*(.-)\n") or "Неизвестно"` (только подставить данные под параметр, к примеру - `local phone = text:match("Телефон:%s*(.-)\n") or "Неизвестно"` (но как я и говорил, почему то, когда я решил применить всё что не отображалось, в один момент появилась ошибка, исправить которую я не могу)
Постоянно выдает (и выдало когда я почти пришел к успеху...) -
(конечно, не самый лучший код этого скрипта, но я потерял лучшую версию. Надеюсь, так понятно, и мне смогут помочь)
Я написал скрипт, который при появлении диалогового окна ид 487 (паспорт) будет записывать из него информацию в иникфг, и во время игры, можно открыть эти данные через /database. Я не знаю почему, но почему то уровень, законопослушность, телефон и розыск не передаются корректно, их значение nil. Перед отправкой этой темы мне удалось решить проблему, но почему то, код резко выдал ошибку, когда я попытался применить изменение под все "данные" которые не правильно сохранялись. Получилось это с помощью - `local name = text:match("Имя:%s*(.-)\n") or "Неизвестно"` (только подставить данные под параметр, к примеру - `local phone = text:match("Телефон:%s*(.-)\n") or "Неизвестно"` (но как я и говорил, почему то, когда я решил применить всё что не отображалось, в один момент появилась ошибка, исправить которую я не могу)
Постоянно выдает (и выдало когда я почти пришел к успеху...) -
еррор:
[ML] (error) database.lua: D:\SAMSA MEDIUM PC\moonloader\lib\encoding.lua:63: bad argument #1 to 'iconv' (string expected, got nil)
stack traceback:
[C]: in function 'iconv'
D:\SAMSA MEDIUM PC\moonloader\lib\encoding.lua:63: in function 'u8'
D:\SAMSA MEDIUM PC\moonloader\database.lua:78: in function '_draw'
D:\SAMSA MEDIUM PC\moonloader\lib\mimgui\init.lua:107: in function <D:\SAMSA MEDIUM PC\moonloader\lib\mimgui\init.lua:91>
[ML] (error) database.lua: Script died due to an error. (0F70CF04)
Lua:
require "lib.moonloader"
local imgui = require 'mimgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local inicfg = require "inicfg"
local sampev = require "lib.samp.events"
local config = getGameDirectory() .. "\\moonloader\\config\\passport_data.ini"
local window = imgui.new.bool()
local passportData = {}
local passports = {}
function main()
while not isSampAvailable() do wait(0) end
sampRegisterChatCommand('database', function()
window[0] = not window[0]
end)
loadData()
while true do wait(0) end
end
function loadData()
local file = io.open(config, "r")
if file then
file:close()
passportData = inicfg.load({ passports = {} }, config) or { passports = {} }
passports = passportData.passports
else
print("[ERROR] Файл не найден, создаю ini")
passportData = { passports = {} }
passports = passportData.passports
saveData()
end
end
function saveData()
passportData.passports = passports
local success = inicfg.save(passportData, config)
if not success then
print("[ERROR] Не удалось сохранить INI-файл!")
end
end
function sampev.onShowDialog(dialogId, style, title, btn1, btn2, text)
if dialogId == 487 then
local name = text:match("Имя:%s*(.-)\n") or "Неизвестно"
passports[name] = {
Name = name,
lvl = text:match("Проживание в стране %(лет%): (%d+)") or "0",
Gender = text:match("Пол:%s*(.-)\n") or "Неизвестно",
Status = text:match("Семейное положение:%s*(.-)\n") or "Неизвестно",
Residence = text:match("Проживание:%s*(.-)\n") or "Неизвестно",
Job = text:match("Работа:%s*(.-)\n") or "Неизвестно",
Organization = text:match("Организация:%s*(.-)\n") or "Нет",
Department = text:match("Подразделение:%s*(.-)\n") or "Нет",
Phone = text:match("Телефон:%s*(%d+)") or "Нет",
Wanted = text:match("Уровень розыска:%s*(%d+)") or "0",
Lawfulness = text:match("Законопослушность:%s*(%d+)") or "0"
}
saveData()
end
end
imgui.OnFrame(function() return window[0] end, function()
local X, Y = getScreenResolution()
imgui.SetNextWindowSize(imgui.ImVec2(700, 500), imgui.Cond.FirstUseEver)
imgui.SetNextWindowPos(imgui.ImVec2(X / 2 - 350, Y / 2 - 250), imgui.Cond.FirstUseEver)
if imgui.Begin(u8'База паспортов', window) then
for name, data in pairs(passports) do
imgui.TextColored(imgui.ImVec4(1, 1, 0, 1), u8(data.Name))
imgui.Separator()
imgui.Text(u8('Проживание в стране (лет): ') .. u8(data.lvl))
imgui.Text(u8('Пол: ') .. u8(data.Gender))
imgui.Text(u8('Семейное положение: ') .. u8(data.Status))
imgui.Text(u8('Проживание: ') .. u8(data.Residence))
imgui.Text(u8('Работа: ') .. u8(data.Job))
imgui.Text(u8('Организация: ') .. u8(data.Organization))
imgui.Text(u8('Подразделение: ') .. u8(data.Department))
imgui.Text(u8('Телефон: ') .. u8(data.Phone))
imgui.Text(u8('Уровень розыска: ') .. u8(data.Wanted))
imgui.Text(u8('Законопослушность: ') .. u8(data.Lawfulness))
imgui.Separator()
end
imgui.End()
end
end)