Как перезапустить скрипты самп

- Страница 1 из 1
- 1
Владислав 
ICQ: Нет данных
Skype: Нет данных
- Страница 1 из 1
- 1
Администрация проекта не несет какую-либо ответственность за публикуемые материалы.
Как можно перезагрузить скрипты lua во время выполнения?
Я хочу перезагрузить скрипты lua во время выполнения. Как это сделать? Вам просто нужно повторно инициализировать систему lua, а затем перечитать все файлы lua?
задан 11 мая ’10, 12:05
2 ответы
Если (а) скрипты Lua находятся в модулии (б) модули не влияют на глобальные объекты или таблицы за пределами модуля, вы можете использовать package.loaded. = nil вызывать require чтобы перезагрузить модуль:
Точно так же, если немодульный сценарии хорошо работают в том смысле, что они (а) определяют только одну таблицу и (б) не влияют на глобальные или другие таблицы, тогда простая перезагрузка сценария также будет работать.
ответ дан 11 мая ’10, 22:05
Просто используй свой include(filename) функция:
ответ дан 15 мар ’14, в 04:03

Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками scripting lua or задайте свой вопрос.
Русские Блоги
Будь то игровой сервер, разрабатываемый в настоящее время, или интерфейс, недавно разработанный love2D, Lua используется в качестве движка скриптов, который требует модификации и перезапуска скрипта. Первый метод — написать пакетную функцию, которая выполняет все скрипты lua. files Операция require (), которая требует:
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:
What is a way to reload lua scripts during run-time?
I want to reload lua scripts at run-time. What are the ways to do this? Do you just have to reinitialize the lua system and then re-read all the lua files?
2 Answers 2
If (a) the Lua scripts are in modules, and (b) the modules don’t affect globals or tables outside the scope of the module, you can use package.loaded. = nil to cause require to reload the module:
Similarly, if the non-module scripts are well behaved in that they (a) only define a single table, and (b) don’t affect globals or other tables, then simply reloading the script will work as well.
Just use your own include(filename) function:
![]()
-
The Overflow Blog
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.3.3.43278
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.