Lua ML-Reload

THERION

Известный
Автор темы
Проверенный
88
323
Описание: Перезагрузка скриптов, только не всех, как в ML-ReloadAll. Тут есть список исключений, который позволяет не ставить одни и те же патчи по 100 раз, не засирать лог.
Авторы могут указывать, что скрипт не надо перезагружать. Вот так:
Lua:
EXPORTS = {
    no_reload = true
}
Только никто этого делать не будет, поэтому в начале файла лежит таблица. Ее можно заполнить.
- Убрана зависимость от LFS
- Исправлен игнор системных клавиш (ALT и.т.п)
- Исправлена выгрузка при изменении названия файла
- Исправлен краш при script.load
- Исправлен краш при import нерабочего скрипта
- Изменена система проверки экспортов.
- Не происходит import, а в следствии - загрузка неактивных скриптов при инициализации
- Расширение файла теперь важно (В таблице нужно указывать точное название файла)
- Дезинфицирован код
- Данный скрипт должен быть первым в очереди загрузки для того, чтобы корректно определять экспорты. Поэтому в начале названия файла "!000"
 

Вложения

  • !000Reload.lua
    2.5 KB · Просмотры: 147
Последнее редактирование:

meowprd

Тот самый Котовский
Проверенный
1,283
711
я так и не понял зачем тут lfs
если для перебора файлов, то в этом нет смысла, ведь в муне есть:
 
  • Нравится
Реакции: THERION

FBI13

Известный
706
142
ля ну ты где был? только недавно искал и не нашел
 

дора

Потрачен
7
8
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
я так и не понял зачем тут lfs
если для перебора файлов, то в этом нет смысла, ведь в муне есть:
Lua:
function get_scripts()
  files = {}
  for _, s in ipairs(script.list()) do
      files[#files+1] = s.name
  end
  return files
end
 
  • Bug
Реакции: THERION

meowprd

Тот самый Котовский
Проверенный
1,283
711
Lua:
function get_scripts()
  files = {}
  for _, s in ipairs(script.list()) do
      files[#files+1] = s.name
  end
  return files
end
про этот метод я знаю, но автору нужна перезагрузка с использованием script.load(), поэтому твой метод не подойдет
 
  • Нравится
Реакции: THERION

дора

Потрачен
7
8
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
про этот метод я знаю, но автору нужна перезагрузка с использованием script.load(), поэтому твой метод не подойдет
Я не собирался тебе отвечать и оставить тебя гением в лице автора и других людей, но BUG автора вынудил меня это написать. Я скинул всего лишь пример перебора с использованием s.name. Но s это и есть указатель на luascript скрипта.

Поэтому я изменю код, чтобы вам было понятней. Держите код с перезагрузкой скрипта с определенным названием. Конечно это и близко не финальная версия, но дорабатывать мне её нету смысла, хоть это и займет минут 10.

Что ж, создадим файл с названием test.lua и содержимым
Lua:
function main()
    repeat wait(100) until isSampAvailable()
    sampAddChatMessage('Ого, я загрузился', -1)
    wait(-1)
end

И основной файл с которого мы будем его перезагружать с содержимым
Lua:
function main()
    repeat wait(100) until isSampAvailable()
    sampRegisterChatCommand('reload', function()
        reload('test.lua')
    end)
    wait(-1)
end


function reload(filename)
    for _, s in ipairs(script.list()) do
        if s.name == tostring(filename) then
            s:reload()
        end
    end
end
Введем команду и посмотрим что же произойдет.
1642343243288.png
 

THERION

Известный
Автор темы
Проверенный
88
323
Я не собирался тебе отвечать и оставить тебя гением в лице автора и других людей, но BUG автора вынудил меня это написать. Я скинул всего лишь пример перебора с использованием s.name. Но s это и есть указатель на luascript скрипта.

Поэтому я изменю код, чтобы вам было понятней. Держите код с перезагрузкой скрипта с определенным названием. Конечно это и близко не финальная версия, но дорабатывать мне её нету смысла, хоть это и займет минут 10.

Что ж, создадим файл с названием test.lua и содержимым
Lua:
function main()
    repeat wait(100) until isSampAvailable()
    sampAddChatMessage('Ого, я загрузился', -1)
    wait(-1)
end

И основной файл с которого мы будем его перезагружать с содержимым
Lua:
function main()
    repeat wait(100) until isSampAvailable()
    sampRegisterChatCommand('reload', function()
        reload('test.lua')
    end)
    wait(-1)
end


function reload(filename)
    for _, s in ipairs(script.list()) do
        if s.name == tostring(filename) then
            s:reload()
        end
    end
end
Введем команду и посмотрим что же произойдет.
Посмотреть вложение 131840
Дурнык, ты так будешь перезагружать только те скрипты, которые в данный момент активны. Попробуй по своему перезагрузи https://www.blast.hk/threads/78609/ или что-то крашнутое ошибкой или что-то добавленное в moonloader после загрузки игры.
P.s: если бы ты был внимательней, то мог бы заметить кусок своего кода все это время лежащий в моем моде
 
Последнее редактирование:

дора

Потрачен
7
8
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Попробуй по своему перезагрузи https://www.blast.hk/threads/78609/ или что-то крашнутое ошибкой или что-то добавленное в moonloader после загрузки игры.
Ладно, я думал лист хранит в себе список всех luascript`ов, а не получает только загруженные.
P.s: если бы ты был внимательней, то мог бы заметить кусок своего кода все это время лежащий в моем моде
Я его даже не открывал
 

copypaste_scripter

Известный
1,217
221
Если ты про то чтобы скрипт не перезагружался.
просто добавь в скрипт
Код:
EXPORTS = {
    no_reload = true
}
Если ты про перезагрузку то просто ctrl+r
в какой скрипт, и надо ли иметь этот файл (который в теме прикреплен) чтобы он работал?
я думал надо в список записать все что не хочу чтобы не перезагружались
 

Zeusss

Активный
170
33
в какой скрипт, и надо ли иметь этот файл (который в теме прикреплен) чтобы он работал?
я думал надо в список записать все что не хочу чтобы не перезагружались
например у тебя есть скрипт test.lua который выводит сообщение в чат при загрузке сампа.
В этот test.lua этот код и вписываешь. Файл из темы иметь надо
 

copypaste_scripter

Известный
1,217
221
а я думал наоборот, надо вписать в скриптах которых не обновлять, а тест и надо как раз обновлять