Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
21 lines (15 sloc) 3.38 KB

Lua-файлы

Как упоминалось ранее, особенность некоторых Lua-файлов в том, что код в них выполняется один раз во время запуска сервера. Например, если в questlib.lua задать переменную, то к этой переменной можно будет обращаться из любого квеста.

Вторая особенность автоматически загружающихся Lua-файлов — это то, что функции в них выполняются анонимно. Проще говоря, в Lua-файле нельзя просто взять и вызвать, допустим, функцию pc.get_name(). Т.к. Lua-файлы исполняются анонимно, то есть от имени сервера, то функция pc.get_name() просто вернет пустую строку, т.к. у сервера нет имени персонажа. Это очень важно понимать при проектировании Lua-файлов, т.к. некоторые функции не приспособлены к анонимной работе и могут либо не работать, либо вообще причинить вред серверу, например, положив его. В данной документации у каждой функции указано, может ли она быть вызвана анонимно, а также у некоторых функций дополнительно указано их поведение в случае анонимного вызова. Также функции вызываются анонимно через триггер server_timer() (см. документацию триггера).

Список автоматически подгружаемых Lua-файлов при запуске сервера:

  • settings.lua
  • questlib.lua (находится в папке quest)
  • translate.lua
  • locale.lua; в зависимости от настрек сервера может подгружаться locale_{LOCALE}.lua, где {LOCALE} — название локали (обычно находится в папке quest)
  • oxquiz.lua
  • а также стадийные файлы, которые обычно лежат в папке quest/object/state. Имя файла соответствует названию квеста, а внутри файла находится Lua-таблица, в которой ключ — это название стадии, а значение — это ID стадии (как он высчитывается я не знаю)

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

dofile("locale/germany/quest/cube.lua")

Подключать файлы рекомендуется в файле questlib.lua.