В рестрикторах всегда можно прописать вызов функции таким путём
И вот здесь вы, молодой человек, облажались. Если вы думаете, что это всё обрабатывается движком, то спешу вас разочаровать - нет, все строки логики обрабатываются скриптами (за крайне редким исключением). Если вы потрудитесь заглянуть в файл xr_logic.script в функцию pick_section_from_condlist, которая парсит (разбирает) все значения для параметров, то можете заметить вот такие строки:
Код
if not xr_effects[infop.func] then abort("object '%s': pick_section_from_condlist: function '%s' is " .. "not defined in xr_effects.script", if_then_else(npc, npc:name(), "nil"), infop.func) end
Это проверка на то, что функцию, которую вы указываете в знаках процента, находится в файле xr_logic.script (infop.func - это ключ в таблице, который ссылается на имя указанной вами функции) и если таковой в этом файле нет - то произойдёт вылет.
Всё это говорит о том, что вы не очень осведомлены в работе скриптов, вы НЕ проверяли написанное вами на практике и весь этот "урок", если это можно так назвать, не что иное, как нелепая попытка набивание "репы".
BeeRsek, можно, не не посредством предложенного способа в шапке данной темы. Можно сделать так:
Код
[logic] active = sr_idle
[sr_idle] on_actor_inside = sr_sound
[sr_sound] ; звук относительно папки gamedata\sounds. snd = ambient\gunfire_2 ; играем один раз. lide_sound_once = true ; играем на позиции актора. play_at_actor = true ; выдаём инфопоршень по окончании проигрывания звука. on_signal = sound_end | %+infoportion%
Сообщение отредактировал ColR_iT - Пятница, 11.01.2013, 14:43
ColR_iT, просто мне нужно следущее: убить сталкера -> проиграть звук -> выдать поршень. Первых два шага как сделать знаю,вот со звуком никак. То что здесь описано мне не подходит т.к. мне поршень выдается не через область рестриктора.
Хотя в принципе примерно знаю как сделать,Надо попробовать.
Сообщение отредактировал BeeRsek - Пятница, 11.01.2013, 14:52
BeeRsek, в таком случае, когда запускаешь звук, делай это посредством функции play класса sound_object, и проверяй на адейте играет ли звук или нет, при помощи функции playing того же класса, как только вернёт false - значит "музыка" затихла. Чтобы не мучиться с апдейтом актора, можешь воспользоваться методом add_call пространства имён level.
Код
--# Определим объект и что будем играть local snd_obj = xr_sound.get_safe_sound_object([[detectors\bomb_timer]]) snd_obj:play(db.actor, 0, sound_object.s2d) level.add_call ( function () return not(snd_obj:playing()) end, function () db.actor:give_info_portion ("инфопорция") end ) end
Сообщение отредактировал ColR_iT - Пятница, 11.01.2013, 15:11
ColR_iT, У меня не работает, да плюс у многих других людей. Может патчем там прописана данная функция в скриптах. Лучше помоги, я тебе в ЛС написал. По поводу функции воспроизведении звука на локации, играющих определённое время или беспрерывно.
LaRento, ты лучше про аргументируй свои слова - каким способом проигрываться звук не будет? И с чего ты решил, что схема не работает? sr_suond повсеместно используется в чистой игре как с патчами, так и без...
ColR_iT, Потому что просто в игре не проигрывается звук, и если прописать выдачу поршня после его проигрывания, то он не выдастся. Сколько раз пробовал - никак. Так же и у многих такая ситуация случалась, ещё не видел тех людей, которые бы использовали sr_sound.
ColR_iT, Уахаха, ПЫС не использовали, они использовали только опору - sr_idle ! Ещё скажи сообщения sr_tip выдавали) Ну так поможешь с вопросом моим или мне не ждать ответа?
ПЫС не использовали, они использовали только опору - sr_idle
по-твоему, зачем им создавать столько схем? Время убить? Кстати, покапайся в СДК на локациях и посмотри рестрикторные схемы логики. На будущее: прежде чем что-то сказать - подумай, что хочешь сказать, а потом ещё раз подумай, и ещё раз...
Сообщение отредактировал Uyman358 - Пятница, 11.01.2013, 22:28