<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://stalkerin.gameru.net/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://stalkerin.gameru.net/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=J.DLRN&amp;*</id>
		<title>S.T.A.L.K.E.R. Inside Wiki - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://stalkerin.gameru.net/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=J.DLRN&amp;*"/>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/J.DLRN"/>
		<updated>2026-04-29T15:07:32Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.22.6</generator>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=%D0%A2%D0%B0%D0%B9%D0%BC%D0%B5%D1%80%D1%8B</id>
		<title>Таймеры</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A2%D0%B0%D0%B9%D0%BC%D0%B5%D1%80%D1%8B"/>
				<updated>2015-02-10T07:59:54Z</updated>
		
		<summary type="html">&lt;p&gt;J.DLRN: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Для чего нужны таймеры?&lt;br /&gt;
Предположим, вы хотите, чтобы Меченому после диалога пришло сообщение на ПДА, но не сразу, а для придания большего реализма с задержкой в ~7-8 секунд. В таком случае, если вы читаете эту статью, то у вас есть:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
- Готовый диалог&amp;lt;br&amp;gt;&lt;br /&gt;
- Необходимая функция в свежем скриптовом файле.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Для того, чтобы создать таймер, необходимо открыть файл с вашими скриптами и написать следующее :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lua&amp;gt;local iTimer&lt;br /&gt;
function function_onetimer()&lt;br /&gt;
    iTimer = time_global() + 6*1000 &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function timer_5_minutes()&lt;br /&gt;
    if iTimer and iTimer &amp;lt; time_global() then &lt;br /&gt;
        iTimer = nil &lt;br /&gt;
        wolfscripts.humorist_killed_msg() &lt;br /&gt;
    end&lt;br /&gt;
end &amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Разъясню: &lt;br /&gt;
&amp;lt;lua&amp;gt;function function_onetimer() — название функции (это главная функция и её будем вызывать из диалога)&lt;br /&gt;
    iTimer = time_global() + 6*1000 -- задержка по времени (6 секунд)&lt;br /&gt;
function timer_5_minutes() — собственно, настройки таймера&lt;br /&gt;
        iTimer = nil       -- отключаем таймер&lt;br /&gt;
        wolfscripts.humorist_killed_msg() -- название скрипта.название функции&amp;lt;/lua&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Тут, вроде бы, всё просто. Но таймер просто так не заработает. Лезем в '''bind_stalker.script''' и в&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;function actor_binder:update(delta)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
пишем:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;название_вашего_скрипта.timer_5_minutes()&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вуаля, теперь всё работает. Спасибо за внимание.&lt;br /&gt;
Да, кстати, из диалога вызываем функцию '''function_onetimer'''.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Скрипты]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;Добавил J.DLRN&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
По поводу таймера в единицах игрового времени: вместо time_global() берётся level.get_time_hours() - время в часах, либо: level.get_time_days() - количество игровых суток, или же: level.get_time_minutes() - игровые минуты.&lt;br /&gt;
&lt;br /&gt;
Пример: Шуруп(механик Свободы) берёт заказ на изготовление арбалетных стрел(&amp;quot;болтов&amp;quot;), через игровые пять часов отсылает Меченому сообщение типа: &amp;quot;приходи, готово&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
В bind_stalker ставится:&amp;lt;code&amp;gt;&lt;br /&gt;
function actor_binder:update(delta)&lt;br /&gt;
	object_binder.update(self, delta)&lt;br /&gt;
	moi_scripts.vse_timers() ----- опрос таймеров&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
В новом файле moi_scripts.script пишутся проверки и обработки:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
function has_strely_payment(actor, npc) ---проверка платёжеспособности актора&lt;br /&gt;
	return actor:money() &amp;gt;= 4500&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function give_shurup_money(actor, npc) --- перемещение денег от актора к механику&lt;br /&gt;
	dialogs.relocate_money(npc, 4500, &amp;quot;out&amp;quot;)	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function give_strely_to_actor(first_speaker, second_speaker) --- забираем заказ(сорок стрел к арбалету)&lt;br /&gt;
	local i = 0&lt;br /&gt;
	for i = 1,40 do&lt;br /&gt;
	dialogs.relocate_item_section(first_speaker, &amp;quot;ammo_arbolt&amp;quot;, &amp;quot;in&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function message_shurupa() --- актор где-то бродит, надо сообщить о готовности&lt;br /&gt;
	db.actor:give_info_portion(&amp;quot;strely_gotovy&amp;quot;) --- инфопорция для диалогов&lt;br /&gt;
	local sactor = alife():actor() --получаем серверный объект актера&lt;br /&gt;
    local cactor = level.object_by_id(sactor.id) --по его ID получаем клиентский объект актера&lt;br /&gt;
    cactor:give_game_news(&lt;br /&gt;
        &amp;quot;Меченый, это Шуруп\\nРабота сделана, подходи за заказом.&amp;quot;, -- строка сообщение, может быть многострочной&lt;br /&gt;
        &amp;quot;ui\\ui_iconsTotal&amp;quot;,        --текстура, из которой берется аватара &amp;quot;отправителя&amp;quot;&lt;br /&gt;
        Frect():set(0,0,83,47),  --координаты и размеры вырезаемого из текстуры изображения&lt;br /&gt;
        math.random(1000, 3000),     --начало показа сообщения с текущего момента (в миллисекундах)&lt;br /&gt;
        10000                         --длительность показа сообщения (в миллисекундах)&lt;br /&gt;
        )&lt;br /&gt;
		local snd_obj&lt;br /&gt;
                  snd_obj = xr_sound.get_safe_sound_object([[device\pda\pda_tip]]) -- путь до звукового файла&lt;br /&gt;
                  snd_obj:play_no_feedback(db.actor, sound_object.s2d, 1, vector(), 1.0) --- пиликает, чтоб не прошляпил сообщение в горячке боя&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local iTimer&lt;br /&gt;
function vremya_strel() --- функция в диалогах&lt;br /&gt;
    iTimer = level.get_time_hours() + 5&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
function vse_timers() --- обработка бинд_сталкером&lt;br /&gt;
    if iTimer and iTimer &amp;lt; level.get_time_hours()  then --- если прошёл срок&lt;br /&gt;
        iTimer = nil                  -- отключаем таймер&lt;br /&gt;
        moi_scripts.message_shurupa() --- сообщаем заказчику&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Необходимые для логичной работы диалогов инфопорции(в любом xml-файле с подобными):&lt;br /&gt;
&amp;lt;code&amp;gt;	&amp;lt;info_portion id=&amp;quot;strely_deal&amp;quot;&amp;gt;&amp;lt;/info_portion&amp;gt;&lt;br /&gt;
	&amp;lt;info_portion id=&amp;quot;strely_gotovy&amp;quot;&amp;gt;&amp;lt;/info_portion&amp;gt;&lt;br /&gt;
	&amp;lt;info_portion id=&amp;quot;strely_vydany&amp;quot;&amp;gt;&amp;lt;/info_portion&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Сами диалоги, в файле с, допустим, диалогами Свободы - dialogs_military.xml :&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
	&amp;lt;dialog id=&amp;quot;mil_shurup_strely_dialog&amp;quot;&amp;gt; &amp;lt;!--- диалог самого заказа---&amp;gt;&lt;br /&gt;
	&amp;lt;dont_has_info&amp;gt;strely_deal&amp;lt;/dont_has_info&amp;gt;&lt;br /&gt;
        &amp;lt;phrase_list&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;mil_shurup_strely_dialog_0&amp;lt;/text&amp;gt;&lt;br /&gt;
				&amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
			&amp;lt;phrase id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;mil_shurup_strely_dialog_1&amp;lt;/text&amp;gt;&lt;br /&gt;
				&amp;lt;next&amp;gt;2&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
			&amp;lt;phrase id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;mil_shurup_strely_dialog_2&amp;lt;/text&amp;gt;&lt;br /&gt;
				&amp;lt;next&amp;gt;3&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
			&amp;lt;phrase id=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;mil_shurup_strely_dialog_3&amp;lt;/text&amp;gt;&lt;br /&gt;
				&amp;lt;next&amp;gt;4&amp;lt;/next&amp;gt;&lt;br /&gt;
				&amp;lt;next&amp;gt;5&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
			&amp;lt;phrase id=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;precondition&amp;gt;moi_scripts.has_strely_payment&amp;lt;/precondition&amp;gt; &amp;lt;!--- если деньги есть, то при нажатии на &amp;quot;договорились&amp;quot; :  --&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;mil_shurup_strely_dialog_4&amp;lt;/text&amp;gt;&lt;br /&gt;
				&amp;lt;give_info&amp;gt;strely_deal&amp;lt;/give_info&amp;gt; &amp;lt;!-- инфопорция &amp;quot;сделка состоялась&amp;quot;--&amp;gt;&lt;br /&gt;
				&amp;lt;action&amp;gt;moi_scripts.give_shurup_money&amp;lt;/action&amp;gt; &amp;lt;!-- акция&amp;quot;предоплата&amp;quot;--&amp;gt;&lt;br /&gt;
				&amp;lt;action&amp;gt;moi_scripts.vremya_strel&amp;lt;/action&amp;gt; &amp;lt;!-- акция&amp;quot;время пошло&amp;quot;--&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
			&amp;lt;phrase id=&amp;quot;5&amp;quot;&amp;gt; &amp;lt;!-- есть деньги, или нет - наше дело, можем передумать--&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;mil_shurup_strely_dialog_5&amp;lt;/text&amp;gt;&lt;br /&gt;
				&amp;lt;action&amp;gt;dialogs.break_dialog&amp;lt;/action&amp;gt; &amp;lt;!-- акция&amp;quot;выход из диалога&amp;quot;--&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
        &amp;lt;/phrase_list&amp;gt;&lt;br /&gt;
    &amp;lt;/dialog&amp;gt;&lt;br /&gt;
	&amp;lt;dialog id=&amp;quot;mil_shurup_strely_dialog_2&amp;quot;&amp;gt; &amp;lt;!--- диалог после выполнения заказа---&amp;gt;&lt;br /&gt;
	&amp;lt;has_info&amp;gt;strely_gotovy&amp;lt;/has_info&amp;gt; &amp;lt;!-- время вышло, то же самое, что работа готова--&amp;gt;&lt;br /&gt;
	&amp;lt;dont_has_info&amp;gt;strely_vydany&amp;lt;/dont_has_info&amp;gt; &amp;lt;!-- если стрелы уже забирали, то диалог не появится--&amp;gt;&lt;br /&gt;
        &amp;lt;phrase_list&amp;gt;&lt;br /&gt;
            &amp;lt;phrase id=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;mil_shurup_strely_gotovy_0&amp;lt;/text&amp;gt;&lt;br /&gt;
				&amp;lt;next&amp;gt;1&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
			&amp;lt;phrase id=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;mil_shurup_strely_gotovy_1&amp;lt;/text&amp;gt;&lt;br /&gt;
				&amp;lt;next&amp;gt;2&amp;lt;/next&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
			&amp;lt;phrase id=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;give_info&amp;gt;strely_vydany&amp;lt;/give_info&amp;gt;&lt;br /&gt;
                &amp;lt;text&amp;gt;mil_shurup_strely_gotovy_2&amp;lt;/text&amp;gt;&lt;br /&gt;
				&amp;lt;action&amp;gt;moi_scripts.give_strely_to_actor&amp;lt;/action&amp;gt; &amp;lt;!-- акция&amp;quot;давай стрелы&amp;quot;--&amp;gt;&lt;br /&gt;
            &amp;lt;/phrase&amp;gt;&lt;br /&gt;
        &amp;lt;/phrase_list&amp;gt;&lt;br /&gt;
    &amp;lt;/dialog&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Расшифровка текста в stable_dialogs_military.xml :&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
	&amp;lt;string id=&amp;quot;mil_shurup_strely_dialog_0&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;Не подскажешь - где мне найти болты к арбалету?&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;string id=&amp;quot;mil_shurup_strely_dialog_1&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;Найти - врядли. А вот сделать на заказ - могу. Штук сорок.&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;string id=&amp;quot;mil_shurup_strely_dialog_2&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;И во сколько мне это обойдётся?&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;string id=&amp;quot;mil_shurup_strely_dialog_3&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;Так, алюминий есть. Сталь на наконечники... Плюс работа, часов пять. Итого - четыре с половиной тыщи.&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;string id=&amp;quot;mil_shurup_strely_dialog_4&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;Договорились, вот деньги. Зайду через несколько часов.&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;string id=&amp;quot;mil_shurup_strely_dialog_5&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;Не, меня не устраивает. Пока.&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;string id=&amp;quot;mil_shurup_strely_gotovy_0&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;Говоришь, справился уже с заказом?&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;string id=&amp;quot;mil_shurup_strely_gotovy_1&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;Всё готово, забирай.&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;/string&amp;gt;&lt;br /&gt;
	&amp;lt;string id=&amp;quot;mil_shurup_strely_gotovy_2&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;text&amp;gt;Ну, и отлично. Благодарю за труд.&amp;lt;/text&amp;gt;&lt;br /&gt;
	&amp;lt;/string&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Надо добавить наши диалоги самому персонажу:&lt;br /&gt;
файл character_desc_military.xml, секция SVOBODA ENGINEER, в конце, перед &amp;lt;/specific_character&amp;gt; вставляем &lt;br /&gt;
&amp;lt;code&amp;gt;		&amp;lt;actor_dialog&amp;gt;mil_shurup_strely_dialog&amp;lt;/actor_dialog&amp;gt;&lt;br /&gt;
		&amp;lt;actor_dialog&amp;gt;mil_shurup_strely_dialog_2&amp;lt;/actor_dialog&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Заказали работу, заплатили, побродили пять часов, и вот - у нас есть болты к арбалету. Пока заказ одноразовый, разработка повторного обращения за тем же - в процессе:)Всё написано ради проверки работоспособности отсрочки события по времени. Благодарность &amp;lt;big&amp;gt;malandrinus&amp;lt;/big&amp;gt; за информацию по выводу сообщения на экран.&lt;br /&gt;
Добавил J.DLRN e.delorean@qip.ru&lt;/div&gt;</summary>
		<author><name>J.DLRN</name></author>	</entry>

	</feed>