Wunderwaffe
30 sie 2012, 00:17
Posty: 18•
Junx chciał się dowiedzieć, jak tworzyć takie questy. Ostrzegam: to są absolutne podstawy i na pewno nie stworzycie z tym tutkiem drugiego Priboia. Zrobicie tylko prostego questa z rozmową z Wilkiem i Sidorowiczem.
A zatem przygotujcie sobie kilka plików.
Jeśli ich nie macie, to nie róbcie tych questów, gdyż prawdziwy modder ma na dysku rozpakowaną gamedatę.
Zacznijmy od infoportion
Otwórzcie plik info_l01escape.xml. To tam gromadzą się infoportions. Potrzebne nam będą trzy takie. Jeden rozpoczynający zadanie i dwa dla każdego punktu (rozmowa z Wilkiem i z Sidem).
Pierwsze aktywuje zadanie "my_fist_task", a dwa pozostałe aktywują nam wymagania.
Robimy zadanie
Zadania zadeklarowane są w plikach tasks_(...).xml. Nasze zaczyna się w Kordonie, więc utworzymy je w tasks_escape.xml.
I tłumaczę już, o co chodzi.
Tworzy nowe zadanie.
Punkt zadania (wymaganie). Spać mi się chce.
Nazwa punktu.
Ikona questa. Nie wiem czemu daje się to w <objective>.
Infoportion, który powoduje wykonanie punktu.
Opis zadania. Też nie wiem, czemu w <objective>.
I jeszcze inne fajne tagi XML, które możesz wrzucić do zadania.
Aktywowanie takiego infoportion powoduje anulowanie zadania.
Chyba to jest skrypt wywoływany, gdy zadanie się kończy. Chyba.
Zaznaczenie obiektu zadania na mapie. W hint podajemy jego wewnętrzną nazwę (np. "volk" dla Wilka). Między tagami dajemy green_location albo blue_location. Może jeszcze coś, sprawdźcie sobie w plikach gry, bo mnie się chce. Chce to mi się położyć.
Podajemy tutaj kogoś z gamedata\config\game_story_ids.ltx.
Opis zadania
Otwórz gamedata\config\gameplaystoryline_info_escape.xml i wpisz gdzieś:
A teraz gamedata\config\gameplay\stable_storyline_info_escape.xml i również wpisz gdzieś:
Aktywacja infoportions
Super, zbliżam się do końca
! Zrobimy to rozmową. Mam nadzieję, że to umiecie. Jeśli nie, to nie róbcie questów, tylko uczcie się innych rzeczy (np. szycia kowadłem).
1. rozmowa będzie taka:
Naznaczony: Masz dla mnie specjalne zlecenie?
Sidorowicz: Zapytaj Wilka, czy chce wpaść do mnie na kieliszeczek wódeczki.
Naznaczony: OK.
Do części Sidorowicza w character_desc_escape dorzucamy to:
Mam nadzieję, że z pisaniem właściwych tekstów do dialogów w stable_dialogs_escape sobie poradzicie, bo to naprawdę proste.
2. rozmowa:
Naznaczony: Mam ci do przekazania wiadomość.
Wilk: O co chodzi?
Naznaczony: Sidorowicz pyta, czy wpadniesz do niego się napić.
Wilk: Oczywiście, że tak!
No i do character_dec_escape w sekcji Wilka:
3. rozmowa:
Naznaczony: Wilk się zgodził.
Sidorowicz: To super.
A oto przydatne tagi:
Aktywuje jakiś skrypt. Przydaje się, bo dzięki temu można zrobić np. nagrodę za zadanie (skrypt wrzucający nam do ekwipunku coś).
Aktywuje infoportion. Przyda wam się również teraz.
Opcja dialogowa pojawia się tylko, gdy aktywowano podany infoportion.
Opcja dialogowa pojawia się tylko, gdy nie aktywowano podanego infoportion.
Próbujcie coś zrobić. Na odpowiedzi, poprawki i uzupełnienia będzie czas jutro. Dobranoc!
A zatem przygotujcie sobie kilka plików.
- \gamedata\config\gameplay\dialogs_escape.xml
\gamedata\config\gameplay\info_l01escape.xml
\gamedata\config\gameplay\tasks_escape.xml
\gamedata\config\gameplay\storyline_info_escape.xml
\gamedata\config\gameplay\character_desc_escape.xml
\gamedata\config\text\pol\stable_dialogs_escape.xml
\gamedata\config\text\pol\stable_storyline_info_escape.xml
Jeśli ich nie macie, to nie róbcie tych questów, gdyż prawdziwy modder ma na dysku rozpakowaną gamedatę.
Zacznijmy od infoportion
Otwórzcie plik info_l01escape.xml. To tam gromadzą się infoportions. Potrzebne nam będą trzy takie. Jeden rozpoczynający zadanie i dwa dla każdego punktu (rozmowa z Wilkiem i z Sidem).
Kod: Zaznacz cały
<info_portion id="start_my_first_task">
<task>my_first_task</task>
</info_portion>
<info_portion id="player_talked_with_wolf"></info_portion>
<info_portion id="player_talked_with_sidorovich"></info_portion>Pierwsze aktywuje zadanie "my_fist_task", a dwa pozostałe aktywują nam wymagania.
Robimy zadanie
Zadania zadeklarowane są w plikach tasks_(...).xml. Nasze zaczyna się w Kordonie, więc utworzymy je w tasks_escape.xml.
Kod: Zaznacz cały
<game_task id="my_first_task">
<title>my_first_task</title>
<objective>
<text>my_first_task_0</text>
<icon>skopiuj tu coś z innego questa, bo pewnie nie masz własnej ikony</icon>
<infoportion_complete>player_talked_with_wolf</infoportion_set_complete>
<article>my_first_task_description</article>
</objective>
<objective>
<text>my_first_task_1</text>
<infoportion_complete>player_talked_with_sidorovich</infoportion_complete>
</objective>
</game_task>I tłumaczę już, o co chodzi.
Kod: Zaznacz cały
<game_task id="my_first_task">Tworzy nowe zadanie.
Kod: Zaznacz cały
<objectve>Punkt zadania (wymaganie). Spać mi się chce.
Kod: Zaznacz cały
<text>my_first_task_0</text>Nazwa punktu.
Kod: Zaznacz cały
<icon>skopiuj tu coś z innego questa, bo pewnie nie masz własnej ikony</icon>Ikona questa. Nie wiem czemu daje się to w <objective>.
Kod: Zaznacz cały
<infoportion_complete>player_talked_with_wolf</infoportion_set_complete>Infoportion, który powoduje wykonanie punktu.
Kod: Zaznacz cały
<article>my_first_task_description</article>Opis zadania. Też nie wiem, czemu w <objective>.
I jeszcze inne fajne tagi XML, które możesz wrzucić do zadania.
Kod: Zaznacz cały
<infoportion_fail>...</infoportion_fail>Aktywowanie takiego infoportion powoduje anulowanie zadania.
Kod: Zaznacz cały
<function_complete>...</function_complete>Chyba to jest skrypt wywoływany, gdy zadanie się kończy. Chyba.
Kod: Zaznacz cały
<map_location_type hint="...">...</map_location_type>Zaznaczenie obiektu zadania na mapie. W hint podajemy jego wewnętrzną nazwę (np. "volk" dla Wilka). Między tagami dajemy green_location albo blue_location. Może jeszcze coś, sprawdźcie sobie w plikach gry, bo mnie się chce. Chce to mi się położyć.
Kod: Zaznacz cały
<object_story_id>...</object_story_id>Podajemy tutaj kogoś z gamedata\config\game_story_ids.ltx.
Opis zadania
Otwórz gamedata\config\gameplaystoryline_info_escape.xml i wpisz gdzieś:
Kod: Zaznacz cały
<article id="my_first_task_description" name="first_task" article_type="task" group="my_first_task/0">
<text>first_task_description</text>
</article>A teraz gamedata\config\gameplay\stable_storyline_info_escape.xml i również wpisz gdzieś:
Kod: Zaznacz cały
<string id="my_first_task_description">
<text>Sidorowicz wysłał mnie z pytaniem do Wilka i oczekuje przekazania odpowiedzi.</text>
</string>Aktywacja infoportions
Super, zbliżam się do końca
1. rozmowa będzie taka:
Naznaczony: Masz dla mnie specjalne zlecenie?
Sidorowicz: Zapytaj Wilka, czy chce wpaść do mnie na kieliszeczek wódeczki.
Naznaczony: OK.
Kod: Zaznacz cały
<dialog id="escape_trader_vodka_task">
<phrase_list>
<phrase id="0">
<text>escape_trader_vodka_task_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>escape_trader_vodka_task_1</text>
<next>2</next>
</phrase>
<phrase id="2">
<text>escape_trader_vodka_task_2</text>
<give_info>start_my_first_task</give_info>
</phrase>
</phrase_list>
</dialog>Do części Sidorowicza w character_desc_escape dorzucamy to:
Kod: Zaznacz cały
<actor_dialog>escape_trader_vodka_task</actor_dialog>Mam nadzieję, że z pisaniem właściwych tekstów do dialogów w stable_dialogs_escape sobie poradzicie, bo to naprawdę proste.
2. rozmowa:
Naznaczony: Mam ci do przekazania wiadomość.
Wilk: O co chodzi?
Naznaczony: Sidorowicz pyta, czy wpadniesz do niego się napić.
Wilk: Oczywiście, że tak!
Kod: Zaznacz cały
<dialog>
<phrase_list>
<phrase id="0">
<text>escape_volk_vodka_task_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>escape_volk_vodka_task_1</text>
<next>2</next>
</phrase>
<phrase id="2">
<text>escape_volk_vodka_task_2</text>
<next>3</next>
</phrase>
<phrase id="3">
<text>escape_volk_vodka_task_3</text>
<give_nfo>player_talked_with_wolf</give_info>
</phrase>
</phrase_list>
</dialog>No i do character_dec_escape w sekcji Wilka:
Kod: Zaznacz cały
<actor_dialog>escape_volk_vodka_task</actor_dialog>3. rozmowa:
Naznaczony: Wilk się zgodził.
Sidorowicz: To super.
Kod: Zaznacz cały
<dialog id="escape_trader_my_first_task">
<phrase_list>
<phrase id="0">
<text>escape_trader_my_first_task_0</text>
<next>1</next>
</phrase>
<phrase id="1">
<text>escape_trader_my_first_task_1</text>
</phrase>
</phrase_list>
</dialog>
Kod: Zaznacz cały
A oto przydatne tagi:
Kod: Zaznacz cały
<action>...</action>Aktywuje jakiś skrypt. Przydaje się, bo dzięki temu można zrobić np. nagrodę za zadanie (skrypt wrzucający nam do ekwipunku coś).
Kod: Zaznacz cały
<give_info>...</give_info>Aktywuje infoportion. Przyda wam się również teraz.
Kod: Zaznacz cały
<has_info>...</has_info>Opcja dialogowa pojawia się tylko, gdy aktywowano podany infoportion.
Kod: Zaznacz cały
<dont_has_info>...</dont_has_info>Opcja dialogowa pojawia się tylko, gdy nie aktywowano podanego infoportion.
Próbujcie coś zrobić. Na odpowiedzi, poprawki i uzupełnienia będzie czas jutro. Dobranoc!

Dzięki wielkie, żeby nie robić nowego tematu w CoP napiszę tutaj. Jak wiadomo w podstawie mamy jako pierwsze zadania przeszukać helikoptery a ja chce jako takie zadanie "Dostań się do Skadowska" i co muszę zrobić?
Niby edytowałem tm_zaton.ltx [gamedata\configs\misc] zostawiając tylko:
Lecz coś nie wyszło lub coś nie dodałem...
Niby edytowałem tm_zaton.ltx [gamedata\configs\misc] zostawiając tylko:
Kod: Zaznacz cały
[zat_a2_reach_base]
icon = ui_inGame2_Bezopasnoe_mesto
prior = 104
storyline = true
title = zat_a2_reach_base_name
descr = zat_a2_reach_base_text
target = zat_a2_sr_noweap
condlist_0 = {=actor_in_zone(zat_a2_sr_noweap)} completeLecz coś nie wyszło lub coś nie dodałem...
Ryzen 5600x || 32gb DDR4 || RTX 2080 Super
A czy zasada nie jest ta sama jak w każdej części?
Edit: Przy zmianie miejsca do nowej gry [inna mapa] wywala mnie coś takiego:
Coś trzeba jeszcze gdzieś zmienić?
Edit: Przy zmianie miejsca do nowej gry [inna mapa] wywala mnie coś takiego:
Kod: Zaznacz cały
FATAL ERROR
[error]Expression : no_assert
[error]Function : CALifeStoryRegistry::add
[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\alife_story_registry.cpp
[error]Line : 30
[error]Description : Specified story object is already in the Story registry!
stack trace:Coś trzeba jeszcze gdzieś zmienić?
Ryzen 5600x || 32gb DDR4 || RTX 2080 Super
No tak. Jako podstawa jest Szkielet Mod dodałem swoje pliki "wywalenia" fabuły i wtedy poszło bez problemu, więc wyłączyłem grę zmieniłem miejsce spawnu spakowałem plik all.spawn i przy nowej grze mam w/w błąd.
Ryzen 5600x || 32gb DDR4 || RTX 2080 Super
Mam pytanie. Jak to jest z tymi infoportions? Skąd gra wie, że np. przy zadaniu garbage_meet_stalker infoportion "garbage_meet_stalker_done" to wykonanie danego punktu. Albo np. w Zewie Monolitu, że przy zadaniu "Oczyść dolne kondygnacje Sarkofagu z burerów" - infoportion "kill_burer_done" jest wtedy gdy zabijemy te burery, skąd gra o tym wie? To jest gdzieś zapisane? Bo chyba nie można tworząc własne zadania nazywać infoportiony tak jak chcemy tylko tak żeby gra je rozpoznała, więc jakby nie patrzeć możemy tworzyć tylko zadania, które mają taką konstrukcję jak te co już są do tej pory. Więc jesli komuś wpadnie jakiś pomysł do głowy jakiś pomysł ciekawy to nie będzie mógł tego zrobić. To jest w jakiś skryptach zapisane czy coś? Sorry jeśli bredzę, nie jestem modderem, po prostu staram się jakoś logicznie wnioskować. Z góry dzięki za odpowiedź.
Jak np. zrobić takie zadanie i czy w ogóle się da?
Zrobiłem wszystko według poradnika, ale coś nie wyszło. Gra nie odpala się i wyskakuje log
Jak np. zrobić takie zadanie i czy w ogóle się da?
Tytuł: Zdobądź wyposażenie dla stalkerów w wiosce kotów
W opisie dam, że stalkerzy potrzebują broni do walki z najemnikami. Zleceniodawcą będzie Wilk. Wiem jak zrobić te rzeczy bo jest poradnik Wunderwaffe. Ale teraz przejdę do sedna. Jak zrobić te punkty?
1. Porozmawiaj z Woroninem (w sumie to jest w poradniku)
2. Znajdź broń w wagonie w Dolinie Mroku
3. Zabierz broń dla stalkerów (5 kałachów z optyką)
4. Porozmawiaj z Barmanem (w sumie to też jest w poradniku)
W tym momencie dostajemy zadanie od Barmana na znalezienie pięciu LR-300, w nagrodę za ich oddanie dostajemy kasę i jeden z nich
5. Dostarcz znalezione bronie (kałachy i LR do Wilka)
6. Porozmawiaj z Wilkiem (no wiem jak to)
Chodzi mi jak to zrobić, ale zwłaszcza jakie dać infoportiony. W przypadku rozmów to wiem, że player_talked_with_... ale przy innych punktach?
Albo inne zadanie:
Udziel pomocy rannemu stalkerowi (Tolik)
Aktywuje się automatycznie po pierwszej rozmowie z Wilkiem o bandytach
1. Oczyść teren (w promieniu dwudziestu metrów) wokół stalkera z mutantów (wiem, że nietypowe i dziwne, właśnie o to mi chodzi czy da się takie robić, albo czy da się zrobić, że zabij jakiegoś stalkera określoną bronią i inne dziwaczne dziwostki)
2. Udziel pomocy (apteczka)
3. Porozmawiaj z Tolikiem
W opisie dam, że stalkerzy potrzebują broni do walki z najemnikami. Zleceniodawcą będzie Wilk. Wiem jak zrobić te rzeczy bo jest poradnik Wunderwaffe. Ale teraz przejdę do sedna. Jak zrobić te punkty?
1. Porozmawiaj z Woroninem (w sumie to jest w poradniku)
2. Znajdź broń w wagonie w Dolinie Mroku
3. Zabierz broń dla stalkerów (5 kałachów z optyką)
4. Porozmawiaj z Barmanem (w sumie to też jest w poradniku)
W tym momencie dostajemy zadanie od Barmana na znalezienie pięciu LR-300, w nagrodę za ich oddanie dostajemy kasę i jeden z nich
5. Dostarcz znalezione bronie (kałachy i LR do Wilka)
6. Porozmawiaj z Wilkiem (no wiem jak to)
Chodzi mi jak to zrobić, ale zwłaszcza jakie dać infoportiony. W przypadku rozmów to wiem, że player_talked_with_... ale przy innych punktach?
Albo inne zadanie:
Udziel pomocy rannemu stalkerowi (Tolik)
Aktywuje się automatycznie po pierwszej rozmowie z Wilkiem o bandytach
1. Oczyść teren (w promieniu dwudziestu metrów) wokół stalkera z mutantów (wiem, że nietypowe i dziwne, właśnie o to mi chodzi czy da się takie robić, albo czy da się zrobić, że zabij jakiegoś stalkera określoną bronią i inne dziwaczne dziwostki)
2. Udziel pomocy (apteczka)
3. Porozmawiaj z Tolikiem
Kod: Zaznacz cały
FATAL ERROR
[error]Expression : false
[error]Function : CXml::Init
[error]File : E:\stalker\sources\trunk\xrXMLParser\xrXMLParser.cpp
[error]Line : 87
[error]Description : XML file:gameplay\dialogs_escape.xml value: errDescr:Error reading end tag.
stack trace:
Nie zamknąłeś dialogu, sprawdź czy masz poprawnie otwarte jak i zamknięte dialogi.
Ryzen 5600x || 32gb DDR4 || RTX 2080 Super
Cytowany przez Ciebie błąd mówi, że gdzieś nie domknąłeś tagów w .xml'u. (któregoś z wyrażeń zaczynających się od "<" a kończących się na ">")
I tak, infoportiony skryptami można dowolnie rozdawać i zabierać.
W pliku xr_logic od linijki 578 jest odpowiedź na Twoje pytanie - w nieco innym języku
A tu przystępna odpowiedź na przykładzie:
Zobacz sobie do pliku %\gamedata\config\gameplay\dialogs_bar.xml, linijka 1855
[SYNTAX="xml"]<action>bar_dialogs.professor_for_resque</action>[/SYNTAX]
to między tagami <action> a </action> oznacza wywołanie funkcji ze skryptu, tutaj funkcji "professor_for_resque" ze skryptu %\gamedata\scripts\bar_dialogs.script,
w tymże skrypcie w linii 219 masz tę funkcję, która zarządza tym, co się stanie podczas dialogu w zależności czy masz infoportion:
[SYNTAX="lua"]
function professor_for_resque(npc, actor)
if not has_alife_info("rostok_kruglov_give_flash") then
dialogs.relocate_item_section(npc, "bar_ecolog_flash", "in")
db.actor:give_info_portion("rostok_kruglov_give_flash")
end
end
[/SYNTAX]
konkretnie, jeśli nie ma jeszcze infoportion "rostok_kruglov_give_flash", wtedy NPC (Krugłow) da Ci przedmiot "bar_ecolog_flash" (pendrive), a logika podaruje ten infoportion. Dzięki temu, nawet jeśli dialog miałby się powtórzyć, drugi raz nie dostaniesz, bo jest warunek "if", a infoportion już dostałeś.
Innymi słowy, na przykład w dialogach uruchamiają się skrypty. I to skrypty obsługują przepływ infoporcji.
Pooglądaj sobie dialogi, poszukaj dokąd odsyłają tagi <action> i więcej stanie się zrozumiałe.
Podobnie działa <precondition> w dialogu - odsyła do skryptu na zasadzie "jeśli ta akcja już była, to lecimy z tym dialogiem". Przykład:
plik %\gamedata\config\gameplay\dialogs_bar.xml, linijka 1105
[SYNTAX="xml]<precondition>bar_dialogs.actor_have_research</precondition>[/SYNTAX]
żeby zrozumieć, co to za warunek, musisz spojrzeć do bar.dialogs.script i znaleźć funkcję "actor_have_research", jest ona tam w linijce 145:
[SYNTAX="lua"]
function actor_have_research(first_speaker, second_speaker)
return first_speaker:object("bar_ecolog_flash") ~= nil
end
[/SYNTAX]
mówi, że nie jest nieprawdą (~= nil), że gość nie ma pendrive'a ("bar_ecolog_flash"), czyli w uproszczeniu, że pena już masz. Jeśli tak, to dialog leci dalej, wypowiada się kwestia "bar_bar_barman_ecolog_flash_done_0" i potem leci funkcja actor_transfer_research ze skrytpu bar_dialogs.script, jest w linijce 148:
[SYNTAX="lua"]
function actor_transfer_research(first_speaker, second_speaker)
dialogs.relocate_item_section(second_speaker, "bar_ecolog_flash", "out")
if has_alife_info("bar_rescue_research_reward") then
dialogs.relocate_money(second_speaker, 5000, "in")
end
end
[/SYNTAX]
oddajesz pendrive'a rozmówcy i jeśli dostałeś infoporcję "bar_rescue_research_reward" to dostajesz w nagrodę pięć koła.
Poszperaj sobie też searchem po plikach
a) szukając nazw konkretnych nazw infoporcji z dialogów - znajdziesz konkretne funkcje z nimi związane,
b) na wyrażenia "has_info", "has_alife_info", "dont_has_info", "give_info_portion", "give_info_portion_via_pda", "disable_info_portion", - znajdziesz m.in. funkcje z infoporcjami związane.
I pytaj dalej, jeśli coś niezrozumiałe/niewyczerpujące.
EDIT:
Aha jeszcze dwie kwestie, o które pytałeś, na przykładzie:
Spójrz sobie w %\gamedata\config\gameplay\game_tasks.xml, linia 31
[syntax="xml"]<infoportion_complete>yan_labx16_switcher_3_off</infoportion_complete>[/syntax]
taki tag Ci mówi o tym, otrzymanie jakiej infoporcji oznacza zaliczenie wykonania zadania.
ED3, więc w przypadku o którym pytasz, w pliku %\gamedata\config\gameplay\tasks_garbage.xml w linii 7 jest
I druga rzecz - tworzoną infoporcję możesz sobie nazywać jak chcesz, dowolnie. Natomiast musisz (chyba, nie jestem pewien jak to w SoCu jest) zaanonsować jej istnienie w którymś z configów z tagiem "<game_information_portions>", przykładowo zajrzyj do %\gamedata\config\gameplay\info_l01escape.xml, jak to jest zrobione.
ED2:
Tworzenie infoporcji na stalker-game.com
Logika na stalker-game.com
ED4:
A ja od siebie mam pytanie do mądrzejszych, jak dokładnie działa parametr "prio" w znaczniku <game_task>?
Na stalker mod portal czytam, że:
ale tego nie kumam.
I tak, infoportiony skryptami można dowolnie rozdawać i zabierać.
W pliku xr_logic od linijki 578 jest odpowiedź na Twoje pytanie - w nieco innym języku
A tu przystępna odpowiedź na przykładzie:
Zobacz sobie do pliku %\gamedata\config\gameplay\dialogs_bar.xml, linijka 1855
[SYNTAX="xml"]<action>bar_dialogs.professor_for_resque</action>[/SYNTAX]
to między tagami <action> a </action> oznacza wywołanie funkcji ze skryptu, tutaj funkcji "professor_for_resque" ze skryptu %\gamedata\scripts\bar_dialogs.script,
w tymże skrypcie w linii 219 masz tę funkcję, która zarządza tym, co się stanie podczas dialogu w zależności czy masz infoportion:
[SYNTAX="lua"]
function professor_for_resque(npc, actor)
if not has_alife_info("rostok_kruglov_give_flash") then
dialogs.relocate_item_section(npc, "bar_ecolog_flash", "in")
db.actor:give_info_portion("rostok_kruglov_give_flash")
end
end
[/SYNTAX]
konkretnie, jeśli nie ma jeszcze infoportion "rostok_kruglov_give_flash", wtedy NPC (Krugłow) da Ci przedmiot "bar_ecolog_flash" (pendrive), a logika podaruje ten infoportion. Dzięki temu, nawet jeśli dialog miałby się powtórzyć, drugi raz nie dostaniesz, bo jest warunek "if", a infoportion już dostałeś.
Innymi słowy, na przykład w dialogach uruchamiają się skrypty. I to skrypty obsługują przepływ infoporcji.
Pooglądaj sobie dialogi, poszukaj dokąd odsyłają tagi <action> i więcej stanie się zrozumiałe.
Podobnie działa <precondition> w dialogu - odsyła do skryptu na zasadzie "jeśli ta akcja już była, to lecimy z tym dialogiem". Przykład:
plik %\gamedata\config\gameplay\dialogs_bar.xml, linijka 1105
[SYNTAX="xml]<precondition>bar_dialogs.actor_have_research</precondition>[/SYNTAX]
żeby zrozumieć, co to za warunek, musisz spojrzeć do bar.dialogs.script i znaleźć funkcję "actor_have_research", jest ona tam w linijce 145:
[SYNTAX="lua"]
function actor_have_research(first_speaker, second_speaker)
return first_speaker:object("bar_ecolog_flash") ~= nil
end
[/SYNTAX]
mówi, że nie jest nieprawdą (~= nil), że gość nie ma pendrive'a ("bar_ecolog_flash"), czyli w uproszczeniu, że pena już masz. Jeśli tak, to dialog leci dalej, wypowiada się kwestia "bar_bar_barman_ecolog_flash_done_0" i potem leci funkcja actor_transfer_research ze skrytpu bar_dialogs.script, jest w linijce 148:
[SYNTAX="lua"]
function actor_transfer_research(first_speaker, second_speaker)
dialogs.relocate_item_section(second_speaker, "bar_ecolog_flash", "out")
if has_alife_info("bar_rescue_research_reward") then
dialogs.relocate_money(second_speaker, 5000, "in")
end
end
[/SYNTAX]
oddajesz pendrive'a rozmówcy i jeśli dostałeś infoporcję "bar_rescue_research_reward" to dostajesz w nagrodę pięć koła.
Poszperaj sobie też searchem po plikach
a) szukając nazw konkretnych nazw infoporcji z dialogów - znajdziesz konkretne funkcje z nimi związane,
b) na wyrażenia "has_info", "has_alife_info", "dont_has_info", "give_info_portion", "give_info_portion_via_pda", "disable_info_portion", - znajdziesz m.in. funkcje z infoporcjami związane.
I pytaj dalej, jeśli coś niezrozumiałe/niewyczerpujące.
EDIT:
Aha jeszcze dwie kwestie, o które pytałeś, na przykładzie:
Spójrz sobie w %\gamedata\config\gameplay\game_tasks.xml, linia 31
[syntax="xml"]<infoportion_complete>yan_labx16_switcher_3_off</infoportion_complete>[/syntax]
taki tag Ci mówi o tym, otrzymanie jakiej infoporcji oznacza zaliczenie wykonania zadania.
ED3, więc w przypadku o którym pytasz, w pliku %\gamedata\config\gameplay\tasks_garbage.xml w linii 7 jest
Kod: Zaznacz cały
<infoportion_complete>garbage_meetstalker_done</infoportion_complete>ED2:
Tworzenie infoporcji na stalker-game.com
Logika na stalker-game.com
ED4:
A ja od siebie mam pytanie do mądrzejszych, jak dokładnie działa parametr "prio" w znaczniku <game_task>?
Na stalker mod portal czytam, że:
Kod: Zaznacz cały
prio = "" defines the priority of the task. The higher the priority, the higher the likelyhood that the current quest marker will be switched to ours.
Postawili kozaka za ten post (1):
Gość
Pytanie nr 1
Skąd gra wie, w jakim pliku jest skrypt definiujący dany infoportion? Wiem, że pokazałeś na przykładzie, że jest ścieżka do tego pliku podana, ale np. w Zewie Monolitu sprawdzałem przy zadaniach i są tylko nazwy infoportionu bez podanej przed nią nazwy pliku, gdzie jest skrypt odnoszący się do tegoż infoportionu. A skryptów jest tyle, że nie wiem gdzie szukać. Jest jakiś sposób żeby to znaleźć?
Pytanie nr 2
Czy mogę sobie np. stworzyć nowy plik script, nazwać go jak chcę i w nim napisać jakie chcę skrypty i później tworzyć zadania wykorzystujące te skrypty? I czy gra automatycznie będzie wiedziała, że skrypt odnoszący się do danego infoportionu jest w moim pliku, czy trzeba podać ścieżkę czy cuś (znowu powraca pytanie 1)?
Skąd gra wie, w jakim pliku jest skrypt definiujący dany infoportion? Wiem, że pokazałeś na przykładzie, że jest ścieżka do tego pliku podana, ale np. w Zewie Monolitu sprawdzałem przy zadaniach i są tylko nazwy infoportionu bez podanej przed nią nazwy pliku, gdzie jest skrypt odnoszący się do tegoż infoportionu. A skryptów jest tyle, że nie wiem gdzie szukać. Jest jakiś sposób żeby to znaleźć?
Pytanie nr 2
Czy mogę sobie np. stworzyć nowy plik script, nazwać go jak chcę i w nim napisać jakie chcę skrypty i później tworzyć zadania wykorzystujące te skrypty? I czy gra automatycznie będzie wiedziała, że skrypt odnoszący się do danego infoportionu jest w moim pliku, czy trzeba podać ścieżkę czy cuś (znowu powraca pytanie 1)?
1. Przeszukaj katalog pod względem szukanego tekstu (nazwy infoportiona). N++ ma taką funkcję.
2. Możesz tworzyć własne skrypty. Odwołujesz się do nich przez podanie jego nazwy przed funkcją lub zmienną. Np. moj_skrypt.moja_zmienna
2. Możesz tworzyć własne skrypty. Odwołujesz się do nich przez podanie jego nazwy przed funkcją lub zmienną. Np. moj_skrypt.moja_zmienna
Postawili kozaka za ten post (1):
Gość
Posty: 18•



