- 108
- 10
- Версия MoonLoader
- .026-beta
Всех приветствую! Однажды, при попытке перезапустить скрипты (с помощью reload_all.lua и комбинации клавиш ctrl + r), но тут, все скрипты перестали работать, открыв консоль я понял проблему. В консоли было следущее:
Немного потупив, я решил узнать, из за какого именно скрипта существует эта проблема (путем экспорта всех скриптов из папки moonloader, я поочередно добавлял по одному скрипту и запускал игру пока проблема вновь не появится), в итоге, проблема вызывается из за моего скрипта, который мне очень дорог. Раньше все работало, а скрипт я не помню чтобы как то переписывал/обновлял... Помогите пожалуйста исправить проблему!!! Вот код скрипта:
В чем проблема и как мне избежать ошибки "Script terminated" в консоли при перезагрузки скриптов?
Lua:
[ML] (system) +B.lua: Script terminated. (1090AAEC)
[ML] (system) auto-join.lua: Script terminated. (1090AC74)
[ML] (system) ML-AutoReboot: Script terminated. (01BC698C)
[ML] (system) binder.lua: Script terminated. (01BC6F1C)
... и так далее со всеми моими скриптами
Lua:
local imgui = require 'mimgui'
local encoding = require 'encoding'
local ffi = require('ffi')
encoding.default = 'CP1251'
local u8 = encoding.UTF8
local inputAutoText = imgui.new.char(256)
ffi.copy(inputAutoText, u8('Алло, я вас слушаю'))
local inputGnewsText1 = imgui.new.char(256)
local inputGnewsText2 = imgui.new.char(256)
local inputGnewsText3 = imgui.new.char(256)
local showGnewsWindow = imgui.new.bool(false)
local function json(filePath)
local class = {}
function class.save(tbl)
if tbl then
local F = io.open(filePath, 'w')
F:write(encodeJson(tbl) or '{}')
F:close()
return true, 'ok'
end
return false, 'table = nil'
end
function class.load(defaultTable)
if not doesFileExist(filePath) then
class.save(defaultTable or {})
end
local F = io.open(filePath, 'r')
local content = F:read('*a')
local TABLE = decodeJson(content or '{}')
F:close()
for def_k, def_v in pairs(defaultTable) do
if TABLE[def_k] == nil then
TABLE[def_k] = def_v
end
end
return TABLE
end
return class
end
createDirectory(getWorkingDirectory() .. '/config/')
local jPath = getWorkingDirectory() .. '/config/cfg.json'
local j = json(jPath).load({
autoP = false,
gnews1 = "Текст новости по умолчанию", -- Текст новости по умолчанию
autoAnswerText = "Алло, я вас слушаю", -- Текст автоответчика по умолчанию
})
local window = imgui.new.bool()
local autoP = imgui.new.bool(j.autoP)
imgui.OnInitialize(function()
imgui.GetIO().IniFilename = nil
end)
imgui.OnFrame(function() return window[0] end, function(player)
local X, Y = getScreenResolution()
imgui.SetNextWindowSize(imgui.ImVec2(415, 279), imgui.Cond.FirstUseEver)
imgui.SetNextWindowPos(imgui.ImVec2(X / 2 - 207, Y / 2 - 139), imgui.Cond.FirstUseEver)
imgui.Begin(u8'Название окна', window)
-- Раздел для автоответчика
if imgui.CollapsingHeader(u8"Role-Play отыгровки", imgui.TreeNodeFlags.DefaultOpen) then
if imgui.Checkbox(u8'Авто ответчик (звонки)', autoP) then
j.autoP = autoP[0]
json(jPath).save(j)
end
if autoP[0] then
if imgui.InputTextWithHint(u8'##autoAnswerInput', u8 'Введите текст для автоответчика', inputAutoText, 256) then
local userInput = u8:decode(ffi.string(inputAutoText))
if userInput and userInput ~= '' then
j.autoAnswerText = userInput
json(jPath).save(j)
end
end
end
end
if imgui.CollapsingHeader(u8"Для лидеров", imgui.TreeNodeFlags.DefaultOpen) then
if imgui.Button(u8"Гос. новости", imgui.ImVec2(-1, 0)) then
showGnewsWindow[0] = true -- Показываем окно новостей
end
end
imgui.End()
-- Новое окно для ввода новостей
if showGnewsWindow[0] then
imgui.SetNextWindowSize(imgui.ImVec2(415, 279), imgui.Cond.FirstUseEver)
imgui.SetNextWindowPos(imgui.ImVec2(X / 2 - 207, Y / 2 - 139), imgui.Cond.FirstUseEver)
imgui.Begin(u8"Добавление новости", showGnewsWindow)
-- Поля ввода новостей
if imgui.InputTextWithHint(u8'##gnewsInput1', u8 'Введите первую новость', inputGnewsText1, 256) then
end
if imgui.InputTextWithHint(u8'##gnewsInput2', u8 'Введите вторую новость', inputGnewsText2, 256) then
end
if imgui.InputTextWithHint(u8'##gnewsInput3', u8 'Введите третью новость', inputGnewsText3, 256) then
end
if imgui.Button(u8"Отправить", imgui.ImVec2(-1, 0)) then
local news1 = u8:decode(ffi.string(inputGnewsText1))
local news2 = u8:decode(ffi.string(inputGnewsText2))
local news3 = u8:decode(ffi.string(inputGnewsText3))
lua_thread.create(function()
if news1 and news1 ~= '' then
sampSendChat("/gnews " .. news1)
wait(900)
end
if news2 and news2 ~= '' then
sampSendChat("/gnews " .. news2)
wait(900)
end
if news3 and news3 ~= '' then
sampSendChat("/gnews " .. news3)
wait(900)
end
end)
end
imgui.End()
end
end)
-- Функция для автоответа
function autoAnswer()
sampAddChatMessage('/p', -1)
wait(900)
if autoP[0] then
local answerText = j.autoAnswerText or "Алло, я вас слушаю"
sampAddChatMessage(answerText, -1)
end
end
-- Функция для команды /uninvite
function cmd_uninvite(args)
local id, reason = args:match("^(%S+)%s+(.+)$")
local nickname = sampGetPlayerNickname(tonumber(id))
if id and reason then
if nickname then
nickname = nickname:gsub("_", " ")
sampAddChatMessage('/me взял бланк с приказом', -1)
wait(900)
sampAddChatMessage('/me написал текст приказа об увольнении игрока ' .. nickname, -1)
wait(900)
sampAddChatMessage('/me поставил печать', -1)
wait(900)
sampAddChatMessage('/me поставил подпись под документом', -1)
wait(900)
sampAddChatMessage('/do приказ подписан', -1)
wait(900)
sampAddChatMessage('/uninvite ' .. id .. ' ' .. reason, -1)
sampAddChatMessage('Сотрудник ' .. nickname .. ' был уволен. Причина: ' .. reason, -1)
else
sampAddChatMessage('Игрок с ID ' .. id .. ' не найден.', -1)
end
else
sampAddChatMessage('Использование: /uninvite [id] [причина увольнения]', -1)
end
end
-- Функция для команды /invite
function cmd_invite(args)
local id = args:match("^(%S+)$")
local nickname = sampGetPlayerNickname(tonumber(id))
if id then
if nickname then
nickname = nickname:gsub("_", " ")
sampAddChatMessage('/do На плечах висит рюкзак.', -1)
wait(900)
sampAddChatMessage('/me снял рюкзак, открыл его и достал форму и бейджик', -1)
wait(900)
sampAddChatMessage('/me передал вещи ' .. nickname, -1)
wait(900)
sampAddChatMessage('/invite ' .. id, -1)
wait(900)
sampAddChatMessage('/me закрыл рюкзак и повесил его обратно на плечи', -1)
else
sampAddChatMessage('Игрок с ID ' .. id .. ' не найден.', -1)
end
else
sampAddChatMessage('Использование: /invite [id]', -1)
end
end
function cmd_changeskin(args)
local id = args:match("^(%S+)$")
local nickname = sampGetPlayerNickname(tonumber(id))
if id then
if nickname then
nickname = nickname:gsub("_", " ")
sampAddChatMessage('/do На плечах висит рюкзак.', -1)
wait(900)
sampAddChatMessage('/me снял рюкзак, открыл его и достал форму и бейджик', -1)
wait(900)
sampAddChatMessage('/me передал вещи ' .. nickname, -1)
wait(900)
sampAddChatMessage('/changeskin ' .. id, -1)
wait(900)
sampAddChatMessage('/me закрыл рюкзак и повесил его обратно на плечи', -1)
else
sampAddChatMessage('Игрок с ID ' .. id .. ' не найден.', -1)
end
else
sampAddChatMessage('Использование: /invite [id]', -1)
end
end
function main()
while not isSampAvailable() do wait(0) end
sampRegisterChatCommand('test', function()
window[0] = not window[0]
end)
sampRegisterChatCommand('1p', function()
lua_thread.create(function()
autoAnswer()
end)
end)
sampRegisterChatCommand('1uninvite', function(args)
lua_thread.create(function()
cmd_uninvite(args)
end)
end)
sampRegisterChatCommand('1invite', function(args)
lua_thread.create(function()
cmd_invite(args)
end)
end)
sampRegisterChatCommand('1changeskin', function(args)
lua_thread.create(function()
cmd_changeskin(args)
end)
end)
wait(-1)
end