Wawka 5 Опубликовано 21 Сентября 2008 Silent Forest, либо можно и по другому (по крайней мере, я таким кодом пользуюсь). Пример проверки наличия денег: function have_money_30000(actor,npc) return actor:money() > 30000 end Изымание: function give_money_30000(actor, npc) dialogs.relocate_money(actor, 30000, "out") end have_money_30000 и give_money_30000 - это произвольное название функции - можно назвать как душе угодно. Главное, чтоб в action диалога было то же самое название. Пример - функция записана в скрипте wawka_dialog.script, тогда в диалоге проверка будет выглядить: <action>wawka_dialog.have_money_30000</action> А изъятие: <action>wawka_dialog.give_money_30000</action> Сразу говорю, в чём различия\недостатки\преимущества данных вариантов - не знаю Поделиться этим сообщением Ссылка на сообщение
Wawka 5 Опубликовано 22 Сентября 2008 Функция вернет false, если денег нет?В таких тонкостях скриптов не разбираюсь - но на практике, денег нет, диалог не появляется. Деньги есть - появляется. Поделиться этим сообщением Ссылка на сообщение
Wawka 5 Опубликовано 30 Сентября 2008 Если установлен НЛС, то можно вот таким образом: function otdat_konserva(first_speaker, second_speaker) sak.out_item_namber("conserva", 3) end Если нет НЛС, то помимо вышеуказанного, нужно дописать в свой скрипт вот это (пусть меня поправят, если я не прав): function out_item_namber(itm_section,need_number) reloc_params.itm_section=itm_section reloc_params.itm_cnt=need_number reloc_params.itm_cnt_found=0 db.actor:iterate_inventory(checkout_items_count,db.actor) reloc_params.itm_cnt_found=0 if reloc_params.itm_cnt_found<=reloc_params.itm_cnt then db.actor:iterate_inventory(out_items_count,db.actor) end news_manager.relocate_item(db.actor, "out", itm_section) reloc_params={} end И в sak.out_item_namber("conserva", 3), вместо sak пропиши свой скрипт, в который добавишь второй код. К примеру, вышеуказанное записано в скрипт ferrari.script: function otdat_konserva(first_speaker, second_speaker) ferrari.out_item_namber("conserva", 3) end Поделиться этим сообщением Ссылка на сообщение
Wawka 5 Опубликовано 18 Октября 2008 Небольшая практика, по созданию магнитофона на кордоне, в подвале лагеря новичков, с двумя режимами работы - днём одну музыку крутит, ночью - другую (не всегда же только вопросы задавать, хочется и помочь - может и пригодится кому): Для работы, необходимы: - Небольшие навыки в правке конфигов\скриптов; - xRay SDK для ТЧ (можно и лайт версию. У кого Виста, с установленными обновками - последняя версия, 0.4, запускается без проблем и лишних телодвижений!); - Любой звуковой редактор\конвертер (у кого есть Nero, там уже имеется инструмент Wave Editor); - ACDC для AMK; 1. Распаковываем all.spawn, с помощью acdc и в самом низу, добавляем запись: [940] ; cse_abstract properties section_name = physic_object name = wawka_mayfuna position = -212.976898193359,-22.2855587005615,-127.408164978027 direction = 0,2.40000009536743,0 ; cse_alife_object properties game_vertex_id = 59 distance = 0.400000005960464 level_vertex_id = 41277 object_flags = 0xffffff3a custom_data = <<END [logic] cfg = scripts\wawka\esc_mayfuna.ltx END ; cse_visual properties visual_name = equipments\mafon ; cse_ph_skeleton properties skeleton_flags = 1 ; cse_alife_object_physic properties physic_type = 0x3 mass = 10 fixed_bones = link Где: [940] - порядковый номер записи, ставьте следующей по счёту, после самой последней записи. Допустим, последняя запись, до вашего вмешательства, была под номером [931], тогда ставите [932]; name - название; cfg = scripts\wawka\esc_mayfuna.ltx - ссылка на файл логики, который будет находиться в gamedata\config\scripts\(и в моём случае)wawka\esc_mayfuna.ltx; pisition, direction, game_vertex_id и level_vertex_id - это координаты магнитофона. В данном практическом примере - он расположен в подвале, на тумбочке, у входа; После добавления, файл нужно запаковать обратно. С ним покончено. 2. В gamedata\config\scripts\wawka\, создаёте файл esc_mayfuna.ltx, и в нём пишете: [logic] active = ph_sound@day [ph_sound@day] snd = wawka_music_day on_info = {!is_day} ph_sound@night [ph_sound@night] snd = wawka_music_night on_info = {=is_day} ph_sound@day Где: snd = wawka_music_day - звуковая тема, играющая днём. snd = wawka_music_night - звуковая тема, играющая ночью. Сохраняем и закрываем. 3. Добавляем музыку. Создаём свою папку в gamedata\sounds\characters_voice\scenario\ (в моём случае, опять же) wawka\ и в ней создаём ещё две папки - day и night. Чтобы получилось: gamedata\sounds\characters_voice\scenario\wawka\day\ gamedata\sounds\characters_voice\scenario\wawka\night\ Можно и в другом пути - к примеру gamedata\sounds\wawka\day\ и gamedata\sounds\wawka\night\ - на ваше усмотрение. Но в этой практике, в том числе и ниже, записи основаны именно на моём расположении каталога с музыкой. Берёте желаемые композиции и с помощью аудио конвертера, переводите их в обычный PCM формат - .wave, с параметрами: 44100 khz, 16 бит, Моно. Помещаете их в каталог SDK, в папку rawdata\sounds\ (в имеющейся у меня версии SDK v.0.4 light, именно так) и открываете actor_editor, либо level_editor. Запускаете звуковой редактор и в левом окне, в секции Items, должны появиться ваши композиции. Сохраняете с параметрами (не окончательные - слышно хорошо, но и через потолок, на улице идёт звучане - можно по экспериментировать с цифрами): Min Dist = 6.00, Max Dist = 8.00, Max AI Dist = 0.00 и Base wolume = 1.0 (можно 1.5). Остальное - не трогать. Нажимаете OK и через некоторое время, закроется окошко звукового редактора, после чего, не выходя из каталога SDK, проследуйте в gamedata\sounds\ (Важно - кто не знает, для запуска SDK, необходимо в её каталог поместить распакованные ресурсы игры) и там увидете свои, уже готовые для добавления в игру, композиции. Раскидываете музыку по папкам day и night. Более подробное описание и уроки по работе с SDK - в теме Инструментария для мододелов, а FAQ по обработке звуков, в теме Mongolа и Mullerа - Sound Remake Mod. 4. Скрипты... В gamedata\scripts\, в файле sound_theme.script добавляете такую запись: ph_snd_themes["wawka_music_night"] = {"characters_voice\\scenario\\wawka\\night\\wawka_music_1", "characters_voice\\scenario\\wawka\\night\\wawka_music_2", "characters_voice\\scenario\\wawka\\night\\wawka_music_3", "characters_voice\\scenario\\wawka\\night\\wawka_music_4", "characters_voice\\scenario\\wawka\\night\\wawka_music_5", "characters_voice\\scenario\\wawka\\night\\wawka_music_6", "characters_voice\\scenario\\wawka\\night\\wawka_music_7", "characters_voice\\scenario\\wawka\\night\\wawka_music_8", "characters_voice\\scenario\\wawka\\night\\wawka_music_9", "characters_voice\\scenario\\wawka\\night\\wawka_music_10", "characters_voice\\scenario\\wawka\\night\\wawka_music_11" } ph_snd_themes["wawka_music_day"] = {"characters_voice\\scenario\\wawka\\day\\wawka_music_1", "characters_voice\\scenario\\wawka\\day\\wawka_music_2", "characters_voice\\scenario\\wawka\\day\\wawka_music_3", "characters_voice\\scenario\\wawka\\day\\wawka_music_4", "characters_voice\\scenario\\wawka\\day\\wawka_music_5", "characters_voice\\scenario\\wawka\\day\\wawka_music_6", "characters_voice\\scenario\\wawka\\day\\wawka_music_7", "characters_voice\\scenario\\wawka\\day\\wawka_music_8", "characters_voice\\scenario\\wawka\\day\\wawka_music_9", "characters_voice\\scenario\\wawka\\day\\wawka_music_10", "characters_voice\\scenario\\wawka\\day\\wawka_music_11" } Где: wawka_music_night и wawka_music_day - и есть названия тем, которые указаны в логике, в esc_mayfuna.ltx; wawka_music_1, wawka_music_2 и т.д. - названия композиций. characters_voice\\scenario\\wawka\\day\\ - путь к звуковым файлам. Всё! Если всё сделано правильно, то при старте новой игры, в подвале услышите свои композиции. Днём будут играть одни, ночью - другие. Не обязательно добавлять именно по 11 композиций! Достаточно по 1-2. Чтобы не возникло каких либо последствий, сохраняйте резервные копии файлов, "участвовавших" в уроке... Поделиться этим сообщением Ссылка на сообщение
Wawka 5 Опубликовано 15 Ноября 2008 Для этого надо просто в функцию спавна НПС прописать координаты с Агропрома и все.Либо, если непись прописан в all.spawnе, поставить ему: [spawner] cond = {+infoportion} Где: infoportion - условие, инфопоршен (который можно добавить в диалог, к примеру), при выполнении которого, заспавнится данный непись. Поделиться этим сообщением Ссылка на сообщение
Wawka 5 Опубликовано 3 Декабря 2008 БоБеР, лог хоть скажи. На первый взгляд, диалог правильный. Геныч, проверь, есть ли в этом файле теги: <game_dialogs> и </game_dialogs> А в самом диалоге: <dialog> и </dialog> Поделиться этим сообщением Ссылка на сообщение
Wawka 5 Опубликовано 3 Декабря 2008 Error reading end tag. Тут ясно сказано - ошибка чтения тэга. Раз вылет происходит во время диалога, то вполне возможно, что ошибка из-за текста. Попробуй перенести текст с диалога в файлы текстов (ну которые в папке rus - впрочем, как все диалоги игры)... Либо, попробуй открыть этот файл диалога, к примеру, с помощью браузера - у меня Opera отлично справляется с отловом моих косяков в файлах диалогов - прямо указывает на строку. Поделиться этим сообщением Ссылка на сообщение
Wawka 5 Опубликовано 3 Декабря 2008 Вопрос - как зделать так, чтоб диалог активировался только при наличии предмета?В скрипте делаешь функцию, проверяющую наличие и в диалоге ставишь precondition. Допустим, есть скрипт wawka_dialog, в нём функция: function chemodan_have(first_speaker, second_speaker) return first_speaker:object("chemodan") ~= nil end Где - chemodan - нужный предмет. Тогда в диалоге этот прекондишн будет выглядеть: <precondition>wawka_dialog.chemodan_have</precondition> Вставляй его в самое начало (для примера - кусок диалога): <dialog id="chemodan_dialog"> <precondition>wawka_dialog.chemodan_have</precondition> <phrase_list> <phrase id="0"> <text>chemodan_dialog_0</text> <next>1</next> </phrase> Геныч, для этого нужно создать task - как пример, загляни в game_task.xml. Строки, которые отвечают за отметку: <map_location_type hint="Волк">blue_location</map_location_type> <object_story_id>Escape_novice_lager_volk</object_story_id> В первой - пишешь имя\название, во второй имя объекта из all.spawnа или файла game_story_ids.ltx blue_location - значит, что отметка будет бледно голубой, green_location - зелёной. Геныч, по поводу вопроса в "Ковыряемся", загляни в xr_effects.script (чтоб сон сделать), а чтоб его активировать и чтоб заставить непися стоять на месте, почитай Wiki, статьи "настройка логики". Так долго объяснять - но нужно для непися создавать логику, да и для активации сна при нажатии на ворота, нужно редактировать логику этих ворот. Сон, ролик - разницы никакой. Поделиться этим сообщением Ссылка на сообщение
Wawka 5 Опубликовано 3 Декабря 2008 как создать непися и заспавнить?Вот пример самого простого и на тот же момент, правильного спавна (ну на мой взгляд из всех вариантов спавна через скрипт). Здесь заспавнится обычный сталкер новичок, секцию которого взял из spawn_sections.ltx. Заспавнится он как раз в домике на болоте: function spawn_npc() local obj=alife():create("esc_stalker_respawn_1",vector():set(101.435539245605,-8.38547039031982,164.284591674805),396523,1643) local params=amk.read_stalker_params(obj) params.custom="[logic]\ncfg = scripts\\mil_npc.ltx" amk.write_stalker_params(params,obj) end Добавляй её куда-нибудь в диалог, в виде <action>имя_скрипта.spawn_npc</action> и всё. Но сначала, создай файл логики (здесь, как пример, файл mil_npc.ltx, который находится в gamedata\config\scripts\) и заполни его нужной тебе логикой (Wiki, Настройка логики, ч.1). Как самый простой пример: [logic] active = walker [walker] path_walk = mil_zomb_stalker_walk1 path_look = mil_zomb_stalker_look1 mil_zomb_stalker_walk1 и mil_zomb_stalker_look1 - это пути сумасшедшего сталкера (взял из алл.спавна),который в доме на болоте тусуется. То есть, это готовый, работающий пример - только для полного счастья, доработать надо - а именно, доделать логику (поставить игнорирование врагов, дополнительные пути, диалог, фразы приветствия и т.п.), ну и профиль создать отдельный для непися. БоБеР, да, через action - для примера функции сдачи\получения денег, загляни в любой *_dialog скрипт (к примеру, в escape_dialog.script) Поделиться этим сообщением Ссылка на сообщение
Wawka 5 Опубликовано 5 Декабря 2008 БоБеР: <action>имя_скрипта.otday_chemodan</action> <action>имя_скрипта.dengi_chemodan</action> Только вот я не знаю, эти экшены вешать надо на строку ответа ГГ или на строку ответа непися-квестодателя (и туда и туда попробуй). Поделиться этим сообщением Ссылка на сообщение
Wawka 5 Опубликовано 8 Января 2009 Можно. Дэн использовал рандомность в НС3 (в диалоге dialogs_new.xml): <precondition>amk_dialogs.pre_rnd_50_100</precondition> <precondition>amk_dialogs.pre_rnd_0_50</precondition> Первый прекондишн ставь на одну ветку диалога, второй на другую. Здесь представлен шанс 50 на 50. Поделиться этим сообщением Ссылка на сообщение
Wawka 5 Опубликовано 27 Февраля 2009 Рылся в форуме, но не чего конкретного не нашел.Эх, плохо рылся Ну для начала, нужно сделать диалоги и task (в game_tasks.xml)... А чтобы задание засчиталось при смерти "клиента", нужно ему прописать в логике: on_death = death [death] on_info = {=killed_by_actor} %+инфопоршен% То есть, если "клиент" скончался и скончался именно от рук ГГ, то выдать инфопоршен. Инфопоршен прописать в task, в <infoportion_complete>инфопоршен</infoportion_complete> А чтобы непися заспавнить, с уникальным именем, необходимо создать ему профиль в character_desc_*.xml. В "Ковыряемся в файлах" очень подробно всё расписано. И не раз. Если не разберёшься, пиши в личку - ближе к вечеру отвечу. Поделиться этим сообщением Ссылка на сообщение
Wawka 5 Опубликовано 27 Марта 2009 Обойтись без all.spawn нельзя. Но правка путей не требует новой игры. Изменения в файлах way_уровень.ltx вступают при загрузке, так что... Поделиться этим сообщением Ссылка на сообщение
Wawka 5 Опубликовано 28 Марта 2009 ACDC для народной солянки, подходит из темы новых локаций (Костя выкладывал). Поделиться этим сообщением Ссылка на сообщение
Wawka 5 Опубликовано 28 Марта 2009 (изменено) Вот, acdc и Active Perl. Для того, чтобы ACDC заработал, необходимо установить Active Perl (файлы с раширением .pl, должны ассоциироваться с этой прогой). Затем распаковать содержимое архива acdc в желаемое место и в получившуюся папку acdc положить all.spawn. Батники для декомпиляции и компиляции, прилагаются. После компиляции, новый файл будет называться all.spawn_new. Для добавления в игру, у него надо будет убрать окончание _new. Zeka1996Korneev, и к солянке тоже. Изменено 28 Марта 2009 пользователем WAWKA Поделиться этим сообщением Ссылка на сообщение
Wawka 5 Опубликовано 23 Мая 2009 (изменено) Ошибка в диалоге. Вполне возможно, в одном диалоге имеется две одинаковых строки или id (цифры). Изменено 23 Мая 2009 пользователем WAWKA Поделиться этим сообщением Ссылка на сообщение