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

Система смены времени суток

Данный квест будет автоматически менять время суток на вашем сервере.

Важно! Данный квест не тестировался перед публикацией.

Исходный код

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, если ночное. Обратите внимание на то, что данная функция работает со временем. Она не сообщает, действительно ли на сервере сейчас установлена ночь.