-
_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
-
Система смены времени суток
Данный квест будет автоматически менять время суток на вашем сервере.
Важно! Данный квест не тестировался перед публикацией.
Исходный код
questlib.lua
Добавьте в конец вашего файла-библиотеки следующий код:
TIME_OF_DAY__MORNING_TIME = 9
TIME_OF_DAY__NIGHT_TIME = 1
TIME_OF_DAY__CHECK_INTERVAL = 60
TIME_OF_DAY__DO_INIT = true
clear_server_timer("time_of_day_checker")
server_loop_timer("time_of_day_checker", TIME_OF_DAY__CHECK_INTERVAL)
function time_of_date__is_standart_mode_used()
return math.max(TIME_OF_DAY__MORNING_TIME, TIME_OF_DAY__NIGHT_TIME) == TIME_OF_DAY__NIGHT_TIME
end
function time_of_date__is_day()
local current_hour = tonumber(os.date("%H"))
if time_of_date__is_standart_mode_used() then
return current_hour >= TIME_OF_DAY__MORNING_TIME and current_hour < TIME_OF_DAY__NIGHT_TIME
else
return current_hour >= TIME_OF_DAY__MORNING_TIME or current_hour < TIME_OF_DAY__NIGHT_TIME
end
end
-- Инициализация при запуске сервера
if TIME_OF_DAY__DO_INIT then
if time_of_date__is_day() and game.get_event_flag("eclipse") == 0 then
game.set_event_flag("eclipse", 1)
elseif not time_of_date__is_day() and game.get_event_flag("eclipse") == 1 then
game.set_event_flag("eclipse", 0)
end
end
times_of_day.quest
Создайте файл с именем time_of_day.quest, задайте ему кодировку ANSI или Windows-1251 (также известна как cp1251) и поместите туда код:
quest time_of_day begin
state start begin
when time_of_day_checker.server_timer begin
if time_of_date__is_day() and game.get_event_flag("eclipse") == 1 then
game.set_event_flag("eclipse", 0)
time_of_day.anyway_action()
time_of_day.day_action()
elseif not time_of_date__is_day() and game.get_event_flag("eclipse") == 0 then
game.set_event_flag("eclipse", 1)
time_of_day.anyway_action()
time_of_day.night_action()
end
end
-- Данная функция описывает события, которые произойдут во время изменения времени суток на день
function day_action()
notice_all("Доброе утро, сладкие игроки! ")
end
-- Данная функция описывает события, которые произойдут во время изменения времени суток на ночь
function night_action()
notice_all("Добрых снов, котики! ")
end
-- Данная функция описывает события, которые произойдут во время любого изменения времени суток
function anyway_action()
end
end
end
quest_list
Добавьте в конец файла quest_list (без расширения) следующие квесты:
time_of_day.quest
quest_functions
Добавьте в конец файла quest_functions (без расширения) следующие функции:
time_of_date__is_standart_mode_used
time_of_date__is_day
Конфигурация квеста
Константа TIME_OF_DAY__MORNING_TIME содержит в себе час, в который наступает утро.
Константа TIME_OF_DAY__NIGHT_TIME содержит в себе час, в который наступает ночь.
Константа TIME_OF_DAY__CHECK_INTERVAL содержит в себе частоту проверки времени суток в секундах.
Константа TIME_OF_DAY__DO_INIT отвечает за то, нужно ли при включении сервера производить автоматическую инициализацию событий из квестового файла. Простыми словами: допустим, на вашем сервере автоматически проставляется квота при изменении времени суток. И после технических работ вы в ночное время включаете сервер, а на нём уже установлена ночь. Если данная константа имеет значение false, то при включении сервера ничего не произойдет и квест time_of_day.quest не будет работать до тех пор, пока не наступит день. Если присвоить константе значение true, то сервер при запуске выполнит инструкции, описанные в квестовом файле, присущие текущему времени суток.
Функции
time_of_date__is_standart_mode_used()
Возвращает информацию типа boolean. Сообщает, стоит ли стандартный режим времени суток. Это значит, что если ночь у вас наступает до 23:00, то функция вернет true. Если ночь наступает в 00:00 или позже, то это считается нестандартным режимом и функция вернет false.
time_of_date__is_day()
Возвращает информацию типа boolean. true, если сейчас на сервере дневное время, и false, если ночное. Обратите внимание на то, что данная функция работает со временем. Она не сообщает, действительно ли на сервере сейчас установлена ночь.