Сповіщення
Очистити все

Обмеження часу на виконання квесту


Ранг:
Майстер
Роль:
Гість
Записи:
752
Приєднався:
2 роки тому
 

Якщо вам раптом захотілося створити квест, який буде атоматично провалений після закінчення певної кількості ігрового часу, то один із способів.
Знадобляться файли:
gamedata\config\gameplay\ info_portion.xml
gamedata\scripts\ bind_stalker.script
Відкриваємо блокнот і пишемо:

 
function quest_time()
	if has_alife_info("task_info") then                          --  проверка наличия квеста(в данном случае инфопоршень)
		 tim = 72000000                                            -- время по истечении которого квест будет провален (1 мин. = 50000)
	end
		 timer_t = (game.time() + tim)		                   -- присвоение значения переменной 
		 db.actor:disable_info_portion("quest_time_begin")         -- отключение условия присвоения значения, чтобы значение было присвоено  только один раз
end
 
function time_bind()                                                       -- функция для bind_stalker
	if has_alife_info("quest_time_begin") then                         -- условие присвоения значения (инфопоршень) даётся в начале квеста
		qwest_time()
	end
	if timer_t and not has_alife_info("quest_time_done") then          -- проверка истечения времени
		if timer_t <= game.time() then
			if has_alife_info("task_info") then                -- проверка наличия квеста (вдруг уже выполнен или провален по другой причине)
				db.actor:give_info_portion("imfo_task_fail")   -- выдача условия на провал (в данном случае инфопоршень)
				db.actor:give_info_portion("quest_time_done")  -- отключение счетчика времени
			end
		end
	end
end
 

Тепер зберігаємо все це в
gamedata\scripts\ ім'я_вашого_скрипта.script

Далі відкриваємо info_portion.xml та дописуємо туди два рядки

<info_portion id= "quest_time_begin" ></info_portion> -- інфопоршень, що дає право на включення лічильника
<info_portion id= "quest_time_done" ></info_portion> -- інфопоршень, що дає право на вимкнення лічильника
Виглядає приблизно так:

 
<?xml version='1.0' encoding="windows-1251"?>
<game_information_portions> 
   <info_portion id="quest_time_begin"></info_portion> 
   <info_portion id="quest_time_done"></info_portion>
 
 

Далі відкриваємо bind_stalker.script і дописуємо туди, у функцію function actor_binder:update(delta)
рядок имя_вашего_скрипта.time_bind()
Виглядає приблизно так:

 
function actor_binder:update(delta)
	object_binder.update(self, delta)
 
        имя_вашего_скрипта.time_bind()
 

Всі. Ваш квест буде провалений коли значення game.time() перевищить game.time() + tim
Тут game.time() це ігровий час у мілісекундах, а tim - час, який ви відведете для виконання завдання
Одна ігрова хвилина = 50000.


   
Цитата