Перейти к контенту

Создание квеста


Рекомендуемые сообщения

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>

Сразу говорю, в чём различия\недостатки\преимущества данных вариантов - не знаю :)

Поделиться этим сообщением


Ссылка на сообщение
Функция вернет false, если денег нет?
В таких тонкостях скриптов не разбираюсь - но на практике, денег нет, диалог не появляется. Деньги есть - появляется.

Поделиться этим сообщением


Ссылка на сообщение

Если установлен НЛС, то можно вот таким образом:

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

Поделиться этим сообщением


Ссылка на сообщение

Небольшая практика, по созданию магнитофона на кордоне, в подвале лагеря новичков, с двумя режимами работы - днём одну музыку крутит, ночью - другую (не всегда же только вопросы задавать, хочется и помочь - может и пригодится кому):

 

Для работы, необходимы:

- Небольшие навыки в правке конфигов\скриптов;

- 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.

Чтобы не возникло каких либо последствий, сохраняйте резервные копии файлов, "участвовавших" в уроке...

Поделиться этим сообщением


Ссылка на сообщение
Для этого надо просто в функцию спавна НПС прописать координаты с Агропрома и все.
Либо, если непись прописан в all.spawnе, поставить ему:

 

[spawner]

cond = {+infoportion}

Где: infoportion - условие, инфопоршен (который можно добавить в диалог, к примеру), при выполнении которого, заспавнится данный непись.

Поделиться этим сообщением


Ссылка на сообщение

БоБеР, лог хоть скажи. На первый взгляд, диалог правильный.

Геныч, проверь, есть ли в этом файле теги:

<game_dialogs> и </game_dialogs>

А в самом диалоге:

<dialog> и </dialog>

Поделиться этим сообщением


Ссылка на сообщение

Error reading end tag. Тут ясно сказано - ошибка чтения тэга. Раз вылет происходит во время диалога, то вполне возможно, что ошибка из-за текста. Попробуй перенести текст с диалога в файлы текстов (ну которые в папке rus - впрочем, как все диалоги игры)... Либо, попробуй открыть этот файл диалога, к примеру, с помощью браузера - у меня Opera отлично справляется с отловом моих косяков в файлах диалогов - прямо указывает на строку.

Поделиться этим сообщением


Ссылка на сообщение
Вопрос - как зделать так, чтоб диалог активировался только при наличии предмета?
В скрипте делаешь функцию, проверяющую наличие и в диалоге ставишь 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, статьи "настройка логики". Так долго объяснять - но нужно для непися создавать логику, да и для активации сна при нажатии на ворота, нужно редактировать логику этих ворот. Сон, ролик - разницы никакой.

Поделиться этим сообщением


Ссылка на сообщение
как создать непися и заспавнить?
Вот пример самого простого и на тот же момент, правильного спавна (ну на мой взгляд из всех вариантов спавна через скрипт). Здесь заспавнится обычный сталкер новичок, секцию которого взял из 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)

Поделиться этим сообщением


Ссылка на сообщение

БоБеР:

<action>имя_скрипта.otday_chemodan</action>
<action>имя_скрипта.dengi_chemodan</action>

Только вот я не знаю, эти экшены вешать надо на строку ответа ГГ или на строку ответа непися-квестодателя (и туда и туда попробуй).

Поделиться этим сообщением


Ссылка на сообщение

Можно. Дэн использовал рандомность в НС3 (в диалоге dialogs_new.xml):

                <precondition>amk_dialogs.pre_rnd_50_100</precondition>

                <precondition>amk_dialogs.pre_rnd_0_50</precondition>

Первый прекондишн ставь на одну ветку диалога, второй на другую. Здесь представлен шанс 50 на 50.

Поделиться этим сообщением


Ссылка на сообщение
Рылся в форуме, но не чего конкретного не нашел.
Эх, плохо рылся :)

Ну для начала, нужно сделать диалоги и task (в game_tasks.xml)... А чтобы задание засчиталось при смерти "клиента", нужно ему прописать в логике:

on_death = death

[death]
on_info = {=killed_by_actor} %+инфопоршен%

То есть, если "клиент" скончался и скончался именно от рук ГГ, то выдать инфопоршен.

Инфопоршен прописать в task, в <infoportion_complete>инфопоршен</infoportion_complete>

А чтобы непися заспавнить, с уникальным именем, необходимо создать ему профиль в character_desc_*.xml. В "Ковыряемся в файлах" очень подробно всё расписано. И не раз. Если не разберёшься, пиши в личку - ближе к вечеру отвечу.

Поделиться этим сообщением


Ссылка на сообщение

Обойтись без all.spawn нельзя. Но правка путей не требует новой игры. Изменения в файлах way_уровень.ltx вступают при загрузке, так что...

Поделиться этим сообщением


Ссылка на сообщение

ACDC для народной солянки, подходит из темы новых локаций (Костя выкладывал).

Поделиться этим сообщением


Ссылка на сообщение

Вот, acdc и Active Perl. Для того, чтобы ACDC заработал, необходимо установить Active Perl (файлы с раширением .pl, должны ассоциироваться с этой прогой). Затем распаковать содержимое архива acdc в желаемое место и в получившуюся папку acdc положить all.spawn. Батники для декомпиляции и компиляции, прилагаются. После компиляции, новый файл будет называться all.spawn_new. Для добавления в игру, у него надо будет убрать окончание _new.

Zeka1996Korneev, и к солянке тоже.

Изменено пользователем WAWKA

Поделиться этим сообщением


Ссылка на сообщение

Ошибка в диалоге. Вполне возможно, в одном диалоге имеется две одинаковых строки или id (цифры).

Изменено пользователем WAWKA

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...