Как перезапустить скрипты самп
Перейти к содержимому

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

  • автор:

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

Вниз сайта Вверх сайта

  • Страница 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:

kungfooman's user avatar

    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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *