Pewna osoba poprosiła mnie o opisanie w jaki sposób tworzyć nowe zadania w Stalkerze. Pomyślałem, że może innym również się to przyda ...
Są dwa rodzaje zadań w stalkerze: takie które można otrzymać tylko poprzez dialog (zabij kogoś, znajdź artefakt/broń, obroń stalkerów itd i wróć po nagrodę) oraz takie, które kontrolowane są przez infoportion (wszystkie zadania typu storyline są tego typu).
Opiszę pierwszy typ zadań, ponieważ z drugim typem jest znaczenie więcej roboty (jeśli ktoś na prawde będzie chciał to mogę również opisać drugi sposób).
Zadania pierwszego typu dotyczą właściwie tylko trzech plików:
- config\text\eng\stable_task_manager.xml
zawiera tytuły i opisy zadań
- scripts\task_manager.script
skrypt, który daje zadanie, sprawdza czy zadanie zostało wykonane, daje nagrode itd. Generalnie jeśli nie macie jakiegoś ważnego powodu to nie musicie tego skryptu edytować
- config\misc\task_manager.ltx
jest to plik zawierający definicje zadań, myśle że najprościej będzie jeśli omówię to na przykładzie:
- Kod: Zaznacz wszystko
[barmen_kill_stalker_3]
type = kill_stalker
community = actor
init_condition = {=actor_on_level(l10_radar) +yan_kill_brain_done}
need_return = false
text = barmen_kill_stalker_3_text
description = barmen_kill_stalker_3_descr
parent = barman
target = rad_monolith_master
reward_money = 10000
reward_reputation = +200
reward_rank = 20
time = 86400
type to typ zadania, może to być: przynieś artefakt (type = artefact), znajdź przedmiot/broń (type = find_item), przynieś fragment ciała jakiegoś mutanta (type = monster_part), zabij stalkera (type = kill_stalker), obroń obóz stalkerów (type = defend_lager), zabij stalkerów (type = eliminate_lager), storyline
community = actor - jako wartość zawsze jest actor, co oznacza, że to właśnie gracz powinien wykonać to zadanie (kiedyś w stalkerze zadania mogły być wykonywane również przez stalkerów - np. stalker przychodzi to Sidorovitcha i bierze zadanie żeby znaleźć artefakt, szuka, znajduje i odnosi do Sida - szkodza że to wycieli z gry
init_condition - niektóre zadania są typu "random" (czyli takie które dostajesz co jakiś czas, jak na przykład to od Woronina żeby zabić zombi w Jantarze); jeśli zadanie ma być typu "random" to wtedy w definicji zadania musi pojawić się taka właśnie linijka. Po prawej stronie znaku = jest warunek, który musi być spełniony żebyś dostał zadanie. W tym przypadku musisz znajdować się na mapie radar (red forest) i musisz mieć infoportion yan_kill_brain_done (które dostajesz gdy wyłączysz mózg w x16). Jeśli zadanie ma być dostępne przez dialog (czyli nie "random") to ta linijka nie powinna się znaleźć w definicji zadania
need_return = false - określa czy musisz wrócić do osoby która dała Ci to zadanie. Jako domyślne jest
need_return = true czyli za każdym razem musisz wrócić po nagrode. Jeśli nie chcesz zmuszać gracza do powrotu do osoby która zleciła zadanie to umieszczasz w definicji zadania
need_return = false (ale w takim przypadku gracz nie otrzyma nagrody, czyli zrobi zadanie za friko)
text = barmen_kill_stalker_3_text - określna nazwe tekstu wyświetlanego jako opis zadania (config\text\eng\stable_task_manager.xml)
description = barmen_kill_stalker_3_descr - określna nazwe tekstu wyświetlanego jako tytuł zadania (config\text\eng\stable_task_manager.xml)
parent = - osoba która zleca zadanie, oczywiście można utworzyć nowego "zleceniodawce"
parent = trader (Sidorovitch)
parent = barmen (Barkeep)
parent = ecolog (Professor Sakharov)
parent = dolg (General Voronin)
parent = freedom (Lukash)
parent = zastava_commander (Sergeant Kitsenko)
parent = wolf (Wolf)
parent = petrenko (Colonel Petrenko)
parent = hunter (Hunter)
parent = lisiy (Baldy)
parent = drunk_dolg (Brome)
parent = shustriy (Nimble)
parent = mercenary (Snitch)
target = - cel zadania; w zależności od typu zadania:
type = artefact :: target = nazwa_artefaktu
type = find_item :: target = nazwa_przedmiotu
type = monster_part :: target = nazwa_przedmiotu
type = kill_stalker :: target = nazwa_klasy_stalkera (config\gameplay\character_desc_*.xml)
type = defend_lager :: target = nazwa_smart_terrain
type = eliminate_lager :: target = nazwa_smart_terrain
reward_money = - nagroda w postaci rubli
reward_reputation = - nagroda w postaci reputacji (raczej średnio działa w stalkerze, ale dzięki temu można na przykład zostać członkiem Freedom w oryginalnej grze

)
reward_item = - lista przedmiotów, które stanowią nagrodę
reward_rank = - nagroda w postaci ranku
time = - ile czasu na wykonanie zadania (w sekundach); 1 godzina = 3600 sekund, czyli jeden dzień = 3600 x 24 = 86400 sekund
WAŻNEZapomniałem wspomnieć o jednym całkiem ważnym pliku, dlatego zadanie Bartasa nie działa. Zmienna description działa jak pewnego rodzaju link. Gra odczytująć wartość tej zmiennej szuka w pliku config\gameplay\storyline_info_taskmanager.xml tzw.
artykułu. Artykuł opisuje w jaki sposób i gdzie dodać informacje do pda. Definicja wygląda następująco:
- Kod: Zaznacz wszystko
<article id="tm_find_item_4_descr" name="find_item" article_type="task">
<text>tm_find_item_4_descr</text>
</article>
-
id - jest to to samo co wpisaliście w zmiennej
description w definicji zadania
-
name - typ zadania (to samo co
type w definicji zadania)
-
article_type - typ artukułu, w tym przypadku task ponieważ jest to zadanie (dzięki temu gra będzie wiedziała że ten artykuł powinien zostać wyświetlony w sekcji pda odpowiedzialnej za zadania)
text - link do opisu zadania (config\text\eng\stable_task_manager.xml)