как перезагрузить луа скрипты в игре

Русские Блоги

Механизм перезапуска скрипта Lua

1. Для каждого файла, поддерживающего перезагрузку

2. Загрузка файлов должна осуществляться в определенном порядке, чтобы не создавать путаницу с ресурсами.

Из текущего использования интерфейса love2D на самом деле существует только один «стартовый» файл: main.lua, и в него требуется загрузка различных сценариев подфункций. Если он будет перезагружен, он автоматически будет следовать за файлом, предоставленным main.lua

Порядок require (. ) для автоматической загрузки прекрасен, и нет необходимости писать для каждого файла, как показано выше:

Есть несколько общих целей:
1. Нет необходимости статически поддерживать перезагружаемый файл или функцию, чтобы писать require () для каждого файла сценария для перезагрузки;

2. Он может быть загружен в порядке каждого файла в текущем файле, то есть, если

Напишите main.lua (или другие файлы) в этом порядке, постарайтесь сохранить порядок config> function> globals> gameplayer> scene to reload;
3. Это может предотвратить повторную загрузку «перезаписанных файлов»;

4. Возможность избежать вложенной рекурсивной загрузки;

5. Возможность идентифицировать внешние библиотеки, т. Е.

Он загружает библиотеку «битовых манипуляций» bit.dll, а не bit.lua, поэтому вложенная загрузка не должна выполняться;
6. Уметь определять определенные файлы, которые запрещены к перезагрузке, например:

Сам файл global.lua нельзя запрашивать () несколько раз, иначе глобальные переменные g_object_list будут сброшены, но это не повлияет на перезагрузку skill_cfg и effect_cfg;

7. Он должен поддерживать метод загрузки «post-order». Записано, что в процессе загрузки main.lua файл с индексами теперь должен загружаться рекурсивно:

Затем перейдите к загрузке следующего содержимого main.lua:

8. Возможность распознавать строку require (. ) в файле.

Вероятно, это 8 пунктов целей и требований, но для пункта 7 есть проблема:

Предположим, что рекурсивная функция перезагрузки

А содержимое main.lua очень просто:

В записи, запускающей перезагрузку:

Процесс вызова main_reloader () для перезагрузки будет следующим:

Будут ли эти 5 файлов требоваться () несколько раз? Хотя полная функция recursive_reload () может предотвратить «отображение» от повторения require (), но «неявный» require () не может быть запрещен. Фактически, даже во второй раз » неявный «requre () действительно будет вызван, но фактический физический файл не будет перезагружен, см. руководство по разработке Lua:

Другими словами, пока файл загружен и есть запись в package.loaded, последующий requre () вернется напрямую.

Будут ли эти 5 файлов требоваться () несколько раз? Хотя полная функция recursive_reload () может предотвратить «отображение» от повторения require (), но «неявный» require () не может быть запрещен. Фактически, даже во второй раз » неявный «requre () действительно будет вызван, но фактический физический файл не будет перезагружен, см. руководство по разработке Lua:

require (modname) Loads the given module. The function starts by looking into the package.loaded table to determine whether modname is already loaded. If it is, then require returns the value stored at package.loaded[modname]. Otherwise, it tries to find a loader for the module.

Другими словами, пока файл загружен и есть запись в package.loaded, последующий requre () вернется напрямую.

Особые рабочие эффекты:

b3daa47ced1d888e2f8e8e7bc12d6b5f

Только конкретный код реализации:

Примечание: этот механизм поддерживает только простые файловые каталоги.

Источник

Информация Гайд Всё о Lua скриптинге для MoonLoader

Для лёгкой и удобной работы с кодом Lua скриптов вам понадобится настроить для себя среду разработки. Для работы с Lua достаточно любого текстового редактора, но какой-нибудь блокнот Windows для этого подходит совсем плохо, поэтому лучше использовать специализированные программы. На текущий момент полная поддержка MoonLoader есть в Atom и Notepad++, помимо этого есть пользовательские дополнения для Visual Studio Code и Sublime Text.

Проект по-умолчанию.
В меню File выбираем пункт Open Folder. и указываем путь до папки moonloader, после этого она откроется как проект.

Проект по-умолчанию.
Как и в Atom, здесь есть возможность показа меню проекта, а точнее «Папка как Проект». В меню «Файл» выбираем пункт «Открыть Папку как Проект» и указываем путь к папке «moonloader».

Кодировка по-умолчанию.
Над лентой выбираем пункт Опции и переходим в Настройки. В меню слева выбираем пункт Новый документ и в разделе кодировки ставим флажок на список, в котором выбираем кодировку Windows-1251

После установки среды разработки, изучения основ Lua и ознакомления с документацией MoonLoader, можно приступать от теории к практике. Давайте сначала рассмотрим самое основное, на всякий случай.

В этом примере показаны не все директивы, за полным списком обращайтесь к соответствующей странице на вики.

События и колбэки
Событиями, а точнее их обработчиками, в MoonLoader называются функции, вызывающиеся в скриптах автоматически при каком-либо действии в игре, требующим обработки. Обработчики событий могут иметь входящие и возвращаемые параметры: входящие передают какую-то информацию скрипту, а возвращаемые позволяют повлиять на дальнейшую обработку после совершения события.
Зарегистрировать обработчик события можно двумя способами: просто добавить в скрипт функцию с соответствующим именем, либо воспользоваться функцией addEventHandler. Учтите, что первым способом обработчик может быть зарегистрирован только один раз.
Скрипты с зарегистрированными событиями не завершаются самостоятельно.
Пример: onScriptTerminate вызывается при завершении какого-либо скрипта

С основными принципами разработки вы теперь знакомы и при этих знаниях сможете выполнить большинство задач, однако некоторые задачи требуют применения специальных техник. Давайте рассмотрим некоторые из них.

Создание модулей
Модули делятся на два типа: Lua и DLL. Lua-модули пишутся, как вы уже могли догадаться, на языке Lua и в результате представляют из себя привычные Lua-скрипты, только с некоторыми особенностями.
Давайте рассмотрим пример простого модуля, назовём его example:

Источник

Общеобразовательный справочник
Adblock
detector