-
_images
-
ru
-
_articles
-
_quests
-
_triggers
-
affect
-
arena
-
ba
-
building
-
d
-
dance_event
-
DragonLair
-
ds
-
forked
-
game
-
global
-
guild
-
highscore
-
horse
-
item
-
marriage
-
member
-
mgmt
-
mob
-
pc
-
q
-
indexed_articles
-
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.