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

[CoP] Квесты

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

Да. Там вся фишка в том что нет "ступенек" квеста как в ТЧ. Там просто меняют текст описания при определённых условиях... Вот за этот хитрый ход уважаю ПЫС.

Ссылка на комментарий

как менять описание задания, и как это прописать?

 

==============================

 

кровоSTALKER, спасибо за советы.

Изменено пользователем Rseer
Ссылка на комментарий

[zat_chimera_search_lck]

icon = ui_inGame2_Put_v_pripyat

prior = 106

storyline = false

title = {-has_item(lck)}zat_chimera_lck_name_1, {+actor_has_item(lck)}{+has_lck}zat_chimera_lck_name_2

descr = {-has_item(lck)}zat_chimera_lck_text_1, {+actor_has_item(lck)}{+has_lck}zat_chimera_lck_text_2

target = {=actor_has_item(lck)}zat_a2_stalker_barmen

condlist_0 = {+drop_lck_to_boroda} complete

 

Если у ГГ нет итема описание и имя не меняются с дефолтных. А там если у ГГ есть поршн и итем (поршн выдаёшь через прикондишн(кстати можно обойтись и без поршна, но так надёжнее)) то описание менятся на другое.

Изменено пользователем кровоSTALKER
Ссылка на комментарий

Возможно ли в ЗП сделать повторяющиеся квесты по типу ТЧ (особенно интересуют задания типа защитить/уничтожить лагерь)?

Ссылка на комментарий

Нет. Генерируемые задания вырезаны в корне.

Изменено пользователем кровоSTALKER
Ссылка на комментарий

Artist, кровоSTALKER ну можно сделать повтор одного и того же задания: как писал XMK

condlist_1 = {+название_инфопоршня} reversed - если поршень есть, есть возможность повторить задание

 

Добавлено через 1 мин.:

И делаем проверку на поршень который как раз активирует данное задание-взяли, можно еще и еще раз только вот как сделать ограничение например и закрытии данного задания на n-количество часов я не предполагаю..

 

Добавлено через 195 мин.:

И будет ли продолжаться тема? Хотелось бы еще посмотреть квесты на устранение неприятных личностей-таких как Умник в ТЧ например...

Не соответствует. N6260

Ссылка на комментарий

ZeeK, Ну так ты задавай вопросы по делу и тема будет продолжаться.

 

Как вариант для генерируемых заданий...

Рандом + не отключение ветки квеста после прохождения квеста.

 

Вспомнил даже пример... Торговля Бороды... он арты скупает.Вот вам генерируемый квест.

Изменено пользователем Виталий Зверь
Ссылка на комментарий

Ну и у меня вопрос по делу: какую функцию нада писать для квестов на убийство левых мужиков?

Не соответствует. N6260

Ссылка на комментарий

В ТЧ как я понимаю логика на выполнение повторяющихся квестов была прописана в task_manager.script. В ЗП task_manager.script содержит лишь задание бороды на артефакты (единственное повторяющиеся задание в ЗП), т.е фактически содержит лишь группу "принести арт" из ТЧ в слегка упрощенном варианте. Остальное тупо убрано из скрипта (убийство левых сталкеров, защита/уничтожение лагеря и т.д.). Возникает вопрос: можно ли вернуть остальные функции? Не думаю, что разрабы всё остальное вырезали и из движка (зачем это делать, когда можно просто этим не пользоваться удалив данные секции из скрипта). Т.е. логика построения данных заданий (проверки гулагов, выдача квестов и т.д.) есть в ТЧ и именно эту логику возможно можно использовать в ЗП. Здесь главное сами скрипты приноровить к новому порядку ЗП. Допустим также как и с бородой (по арту) вернуть скрипт на убийство левых сталкеров - для этого заносим скрипт из ТЧ в task_manager.script ЗП и органично вписываем данное задание, которое будет выполнятся по типу квеста с артами. Возможно где-то что-то я не так понял, возможно все мной написаное бред (я в этой области тот еще профан). Хотелось бы услышать мнения знающих людей.

Насчет reversed как возможность повторить задание, тогда допустим с уничтожением лагеря необходимо условие "если гулаг заполнен, то квест повторяется", "если пуст, то квест не выдается". С убийством сталкеров тоже свои приколы: условие появления квеста уже менее важно, т.к. квест тупо может быть всегда, но ведь необходимо, чтоб квест был рандомный, т.е. цель должна быть случайна, а не прописана нами (так?), а вот это в ЗП вроде уже без дополнительных скриптовых функций не выполнить (или я не прав?). Т.е. в любом случае необходима логика из ТЧ для возможности работы повтор. квестов в ЗП.

Изменено пользователем Artist
Ссылка на комментарий
И будет ли продолжаться тема? Хотелось бы еще посмотреть квесты на устранение неприятных личностей-таких как Умник в ТЧ например...

 

будет время... Собсна в квестах по устранению нет ничего сложного

 

 

какую функцию нада писать для квестов на убийство левых мужиков?

в детч_каллбек вставлять проверку по ID сталкера

Изменено пользователем XMK
Ссылка на комментарий

Для одного человека ну и для себя делал типа справочника по функциям ЗОВа, пригодится для новичков квестописания...

 

=======================================================================
         ВЫДАЁМ ПРЕДМЕТ АКТОРУ
=======================================================================
function название функции (first_speaker, second_speaker)
dialogs.relocate_item_section(second_speaker, "название предмета", "in") 
end

Размещается в файлах скрипт.

Выдача поршня вставляется под строку действия.
<action>название скрипта.название функции</action>

Примечание, что бы выдать два одинаковых предмета пишем

function название функции (first_speaker, second_speaker)
dialogs.relocate_item_section(second_speaker, "название предмета", "in",2) 
end

Если надо больше меняем цифру 2 на нужную нам.
=========================================================================
      ОТБИРАЕМ ПРЕДМЕТ У АКТОРА.
=========================================================================
function название функции(first_speaker, second_speaker)
    dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "название предмета")
end

размещается в файлах скрипт

выдача поршня вставляется под строку действия
<action>название скрипта.название функции</action>

Примечание, что бы отобрать два одинаковых предмета пишем

function название функции(first_speaker, second_speaker)
    dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "название предмета",2)
end

Если надо больше меняем цифру 2 на нужную нам.
=======================================================================
      СПАВНИМ ВЕЩЬ В РЮКЗАК гг
=======================================================================
function название функции()
local obj = alife():create("ВЕЩЬ", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
end

В диалог
<action>название скрипта.название функции</action>

===========================================================================
ПРОВЕРКА НАЛИЧИЯ У АКТОРА ПРЕДМЕТА
===========================================================================
Вариант первый
function Название функции()
    if db.actor:object("название предмета") then
        return true
    end
    return false
end

в диалог

<precondition>имя скрипта.название функции</precondition>

<---------как вариант(пользуются ПЫС)------------------>

function название функции(first_speaker, second_speaker)
    return first_speaker:object("название предмета") ~= nil
end

в диалог

<precondition>имя скрипта.название функции</precondition>
===========================================================================
ПРОВЕРКА ВЕЩЕЙ У ГГ
===========================================================================
function Название функции(first_speaker, second_speaker)
    return first_speaker:object("название предмета") ~= nil or
             first_speaker:object("название предмета") ~= nil or
             first_speaker:object("название предмета") ~= nil
end

в диалог

<precondition>имя скрипта.название функции</precondition>

описание... если есть хотя бы одна вещь, то мы получим фразу, если нет всех нет разговора
============================================================================
ПРОВЕРКА ДЕНЕГ У ГГ
============================================================================
Вариант первый(используют ПЫС)


function название функции(first_speaker, second_speaker)
    return first_speaker:money() >= 2000
end

в диалог 

<precondition>имя скрипта.название функции</precondition>

<-----------Вариант два-------------->
Использовал на ТЧ, но и в ЗП работает

function название функции()
return db.actor:money()>=10000
end
в диалог 

<precondition>имя скрипта.название функции</precondition>

=========================================================================
СПАВН ПРЕДМЕТА
=========================================================================
function spawn_vintar()
alife():create("Название предмета",vector():set(24.725412368774,-3.6072344779968,173.83030700684),993926,210)
end

В диалог

<action>название скрипта.название функции</action>

==========================================================================
МГНОВЕННАЯ СМЕРТЬ ГГ
==========================================================================

function название функции(npc, actor)
    npc:kill(actor)
end

В диалог

<action>название скрипта.название функции</action>
===========================================================================
ПРОВЕРКА КОЛ_ВА ОДИНАКОВЫХ ПРЕДМЕТОВ
===========================================================================
function название функции(first_speaker, second_speaker)
        local item_sections = {"Предмет"} 
        local needed = количество одинаковых предметов, ставится цифра без знаков 
        local count = 0
        local item_section
    local function calc(temp, item)
        if item:section() == item_section then
        count = count + 1
end
end
    for k,v in pairs(item_sections) do
    item_section = v
    get_story_object("actor"):iterate_inventory(calc, actor)
end
    return count >= needed
end 


в диалог
<precondition>имя скрипта.название функции</precondition>
==========================================================================
ЛЕЧЕНИЕ ГГ 
==========================================================================
Вставим этот актион в диалог

<action>dialogs.medic_magic_potion</action>
==========================================================================
ВЫДАЧА ДЕНЕГ от НПС ГГ
==========================================================================

function название функции(first_speaker, second_speaker)
    dialogs.relocate_money_to_actor(first_speaker, second_speaker, 2000)
end

В диалог

<action>название скрипта.название функции</action>
==========================================================================

 

 

Всё проверено и работает, надеюсь поможет кому нибудь и кто то может продолжит...

Ссылка на комментарий

Продолжу. Только функции довольно специфические, так что такого ещё нигде не писали.

Начнёмс... Диалог появляется,если:

function actor_good(first_speaker, second_speaker)

if db.actor.health > 0.75 or --уровень здоровья, при котором диалог уже будет появляться(от 0 до 1)

db.actor.radiation < 0.1 or -- уровень радиации,при котором диалог уже будет появляться(от 0 до 1)

db.actor.bleeding < 0.1 then --уровень кровотечения, при котором диалог уже будет появляться(от 0 до 1)

return true

end

return false

end

 

 

function if_enemy_to_actor(first_speaker, second_speaker)
    local npc = dialogs.who_is_npc(first_speaker, second_speaker)
    local actor = dialogs.who_is_actor(first_speaker, second_speaker)
    return xr_conditions.is_faction_enemy_to_actor(actor, npc, {"Название группировки"})
end

если надо когда группировка не враждебна к актору, то return not

если надо когда группировка друзья,то return xr_conditions.is_faction_friend_to_actor(actor, npc, {"Название группировки"})

когда нейтралы, return xr_conditions.is_faction_neutral_to_actor(actor, npc, {"Название группировки"})

 

 

Изменено пользователем psevdoгринго

Ушёл из модостроения

Последний мод http://www.amk-team.ru/forum/index.php?sho...=60#entry351951

Ссылка на комментарий

Решил выложить имена иконок к квестам, думаю понятно без перевода...

 

ui_inGame2_Skat_4

ui_inGame2_Pripasi

ui_inGame2_Naezd

ui_inGame2_Nedostupniy_taynik

ui_inGame2_Artefakti_na_zakaz

ui_inGame2_Zamanchiviy_biznes

ui_inGame2_kompas

ui_inGame2_Temniy_biznes

ui_inGame2_Lager_naemnikov

ui_inGame2_Put_na_plato

ui_inGame2_Tri_tovarisha

ui_inGame2_Ohota_na_Himeru

ui_inGame2_V_poiskah_Soroki

ui_inGame2_Bezopasnoe_mesto

ui_inGame2_Put_v_pripyat

ui_inGame2_Neizvestnoe_oruzhie

ui_inGame2_Propavshaya_razvedgruppa

ui_inGame2_Skoplenie_monolita

ui_inGame2_Propavshiy_chasovoy

ui_inGame2_Razgovor_s_glazu_na_glaz

ui_inGame2_Radiopomehi

ui_inGame2_Neizvestniy

ui_inGame2_Evakuatsiya

ui_inGame2_Laboratoriya_X8

ui_inGame2_Odin_vistrel

ui_inGame2_Skat_1

ui_inGame2_Pripyat_1

ui_inGame2_Ohota_na_Burerov

ui_inGame2_Anomalnoe_rastenie

ui_inGame2_Nochnaya_ohota

ui_inGame2_Dolgi

ui_inGame2_Oazis

ui_inGame2_Radiotechnika

ui_inGame2_Bespilotniy_razvedchik

ui_inGame2_Vizhivshiy_monolit

ui_inGame2_Gipoteza

ui_inGame2_Peremennoe_psi_izluchenie

ui_inGame2_Issledovanie_anomaliy

ui_inGame2_Issledovatelskaya_gruppa

ui_inGame2_Vozmezdie

ui_inGame2_Chuzhie_zaslugi

ui_inGame2_Zalozhnik

ui_inGame2_Krazha

ui_inGame2_Kopachi

ui_inGame2_Kontrakt_s_uchenimi

ui_inGame2_Sklad_dolga

ui_inGame2_Istoriya_dolga

ui_inGame2_Instrumenti

ui_inGame2_Poslednie_razrabotki

ui_inGame2_Ohrana_uchenih

ui_inGame2_Ohota_na_Krovososov

ui_inGame2_Mesta_evakuatsii

ui_inGame2_Skat_2

ui_inGame2_Skat_5

ui_inGame2_Skat_3

ui_inGame2_Strannoe_yavlenie

ui_inGame2_Ischeznovenie_stalkerov

ui_inGame2_Logovo_krovososov

ui_inGame2_Reputatsiya

ui_inGame2_Osobiy_zakaz

ui_inGame2_Sdelka

ui_inGame2_Karti_mestnosti

 

 

Вроде бы все...

 

Ах да ещё начинающим...

 

==========================================================================

ПОРШЕНЬ НА ОДНОРАЗОВОЕ ПРОЧТЕНИЕ ДИАЛОГА.

==========================================================================

прописываем в файле info_какойто.xml

<info_portion id="Название поршня"></info_portion>

 

в конце ветки диалога запишем

<give_info>Название поршня</give_info>

в начале диалога под id квеста запишем

<dont_has_info>название поршня</dont_has_info>

===========================================================================

ПОРШЕНЬ НА СКРЫТИЕ ДИАЛОГА ДО ПРОЧТЕНИЯ ОПРЕДЕЛЁНОГО ДИАЛОГА.

===========================================================================

 

прописываем в файле info_какойто.xml

<info_portion id="Название поршня"></info_portion>

 

В конце диалога после которого должна появиться новая ветка

<give_info>название поршня</give_info>

 

в начале новой ветки под id прописываем

<has_info>название поршня</has_info>

теперь новый диалог недоступен пока мы не прочтём первый

================================================================================

==========

ПОРШЕНЬ НА ЗАПРЕТ ДИАЛОГА ЕСЛИ В ПРЕДИДУЩЕМ МЫ ПОСТАВИЛИ УСЛОВИЕ ПО КОТОРОМУ ЕГО НЕ БУДЕТ

================================================================================

==========

 

прописываем в файле info_какойто.xml

<info_portion id="Название поршня"></info_portion>

 

В конце определяющего диалога ставим

<give_info>название поршня</give_info>

 

под id квеста(диалога) который не должен появиться прописываем

<dont_has_info>название поршня</dont_has_info>

Теперь диалог не появится.

===============================================================================

 

 

и имена НПС на затоне...

 

zat_b7_bandit_boss_sultan СУЛТАН

zat_a2_stalker_barmen БОРОДА

zat_a2_stalker_nimble Шустрый

jup_a10_bandit_leader Валет

zat_a2_stalker_mechanic Шуруп

zat_b22_stalker_medic Вампир

zat_b30_owl_stalker_trader Сыч

zat_b106_stalker_gonta Гонта

zat_b106_stalker_garmata Гармата

zat_b38_stalker_cop Чувак сьеденый медиком

zat_b38_stalker_hunter Охотник???

zat_b33_stalker_snag ????

zat_b42_mayron ?????

zat_b28_draper ????????

zat_b28_umerov

zat_b28_smoliak

zat_b18_noah Ной

zat_b215_stalker_guide Проводник????

 

 

Изменено пользователем Виталий Зверь
Ссылка на комментарий

Если прописать on_init =%=труляля%, то это получается действие выполнится при инициализации? Или если действие выполнилось - квест инициализируется?

В квестах припяти например есть: on_init = %=send_tip(st_resupply_ready:can_resupply) ... %

Хотя в task_objects.script нетути послания типса...

Кстати помимо reward_money есть reward_item. Хотя оно юзалось только один раз на Юпитере и то закоменчено.

 

И вот еще вопрос. Как при начале новой игры кинуть типс что мол такой-то такой квест начинаем проходить?

Ссылка на комментарий

судя по всему, on_init является не условием запуска квеста, а тем что выполняется после выдачи квеста.

 

функция send_tip есть в xr_effect

 

reward_item необходимо протестировать, возможно у меня скоро это получится :)

 

Как при начале новой игры кинуть типс...

найти откуда выдаются квесты на вертолеты, оттуда же вызвать свой квест, типс выдается автоматом ("Новое задание: название"). если нужно доп.типс то там же где выдается квест вбить еще: news_manager.send_tip(db.actor, "текст", timeout, "sender", showtime)

 

timeout - задержка

sender - иконка

pioneer

mutant_hunter

detective

one_of_the_lads

kingpin

herald_of_justice

seeker

battle_systems_master

high_tech_master

skilled_stalker

leader

diplomat

research_man

friend_of_duty

friend_of_freedom

balance_advocate

wealthy

keeper_of_secrets

marked_by_zone

information_dealer

friend_of_stalkers

got_artefact

got_ammo

got_medicine

got_duty_light_armor

got_duty_heavy_armor

got_freedom_light_armor

got_freedom_heavy_armor

can_resupply

recent_surge

 

 

showtime - время показывания

 

 

Как будет время статью отредактирую и напишу для примера квест по сложней.

Ссылка на комментарий

[spoiler=Дополнение к посту №53:]zat_b38_stalker_cop Глухарь

zat_b38_stalker_hunter Данила

zat_b33_stalker_snag Каряга

zat_b42_mayron Майрон

zat_b215_stalker_guide Лоцман

zat_b14_stalker_1 Вобла

zat_b7_duty_illicit_dealer торговец Долга

zat_b5_stalker_commander Спартак

zat_b103_lost_merc_leader Тесак

zat_b40_merc_squad_leader_1 наёмник Крюк

zat_b40_merc_squad_leader_2 наёмник Хребет

zat_b44_stalker_barge Баржа

zat_b53_artefact_hunter_1 Петруха

zat_b53_artefact_hunter_2 Шило

zat_b29_stalker_rival_1 Кувалда

 

 

 

zat_b28_draper Драпей

zat_b28_umerov Умеров

zat_b28_smoliak Смоляк - погибшие на плато десантники

 

zat_b100_army_1 Газда

zat_b100_army_2 Фуртес

zat_b100_army_3 Швейко - погибшие в Железном лесу десантники

 

Изменено пользователем monk
Ссылка на комментарий

Создал свой квест, во время получения - вылет :

Expression : !m_error_code

Function : raii_guard::~raii_guard

File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp

Line : 748

Description : .... - Зов Припяти\gamedata\scripts\news_manager.script:209: attempt to concatenate local 'news_text' (a nil value)

 

 

EuShikari.png
Ссылка на комментарий
Po-meceniy, выдавай типс с помощью news_manager.send_tip(db.actor, "текст", timeout, "sender", showtime). У тебя нет самого тектса что послать нужно...
Ссылка на комментарий

Возможно просто текст указан без ковычек.

 

Po-meceniy лучше давай в таких случаях код квеста, легче будет сказать в чем проблема....

Ссылка на комментарий

Вот код квеста из тм_затон :

 

[quest_zapisi_give]

icon = ui_inGame2_Karti_mestnosti

prior = 100

storyline = false

title = {+zapisi_spawned} find_zapisi

descr = {+zapisi_spawned} find_zapisi_descr

condlist_0 = {+zapisi_found} complete

 

ЗЫ. А где вообще этот типс выдавать?

EuShikari.png
Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

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

AMK-Team.ru

×
×
  • Создать...