The Emperor Opublikowano 22 Czerwca 2013 Zgłoś Udostępnij Opublikowano 22 Czerwca 2013 SoC Tutorial Tytułem wstępu: Niech obszerność poradnika nie zniechęca Cię - do tworzenia questu!. Aby kompleksowo opisać poszczególne etapy tworzenia zadań, nie wystarczy kilka punktów, toteż zachęcam do lektury. Poradnik umożliwia stworzenie nowego questu zarówno w Shoc jak i w Solijance, na podstawie której został napisany. Zanim zaczniemy pracę z tworzeniem zadań, będzie nam potrzebny program/skrypt umożliwiający pokazanie game_vertex_id oraz level_vertex_id, niezbędnych dla spawnu obiektu. Pobieramy to narzędzie modderskie: http://sdk.stalker-game.com/en/images/d/d7/Smartterrain_and_Waypoint_Tools_by_dez0wave.zip Po wypakowaniu - zawartość folderu: save_pos_patrol - wrzucamy do naszego gamedata. Sposób użytkowania: [*]wychodzimy do menu gry i wciskamy klawisz Z - który aktywuje menu z opcją nadania nazwy dla 1 punktu. [*]lub naciskamy klawisz X - aktywujący menu, umożliwiające wpisania nazwy dla wielu punktów, co jest przydatne zwłaszcza dla tworzenia smart terrain'a. Dane o punkcie zapisują się w logu z dużą dokładnością. Jest to wygodne o tyle, iż nie musimy spisywać z monitora długiego ciągu liczb. Wystarczy iż skopiujemy wartości, które nas interesują. Tak przedstawia się menu powyżej omówionego narzędzia. ________________________________ Część |. - znajdź przedmiot. Aby ułatwić sobie realizację poszczególnych punktów niniejszego opracowania, potrzebną ilość plików oraz ich wzajemne powiązanie - warto zapoznać się ze screenem: [*]Potrzebny będzie plik skryptu, który zawiera funkcję spawnu przedmiotu. (będziemy definiować funkcję). Tworzymy plik tutorial.script i umieszczamy w katalogu gamedata/scripts. Jeśli ktoś wcześniej nie miał do czynienia z plikami, wystarczy, iż zmieni rozszerzenie z .txt na .script - nadając nazwę plikowi. W pliku na potrzeby zadania utworzymy 3 funkcje, jednakże aby unaocznić, jakie powiązania posiadają pliki, będziemy stopniowo dodawać funkcje. W nowo utworzonym pliku o nazwie j/w. umieszczamy funkcję: -- Tutorialowy skrypt.function spawn_kanister()alife():create("explosive_mobiltank",vector():set(-244.069,-19.549,-128.138),12825,8)end Funkcja służy zespawnowaniu obiektu, w naszym przykładzie będzie to kanister z benzyną czyli explosive_mobiltank [katalog weapons] Współrzędne w funkcji - kolejno: (poniższego wpisu nie dodawaj do skryptu) X: -244.069Y: -19.549Z: -128.138level_vertex_id: 12825game_vertex_id: 8 [*]Potrzebny będzie plik dialogu, zawierający wpis aktywujący funkcję - character_desc_escape.xml [gamedataconfiggameplay] do którego musimy dodać nowy dialog, w naszym przykładzie Wilk będzie zlecał zadanie na przyniesienie kanistra do zasilenia generatora - stąd w/w plik. Jeśli zależy nam na innej postaci, wpis dotyczący dialogu dodajemy do pliku .xml - właściwego dla tejże postaci. [*]Znajdujemy sekcję odpowiedzialną za konfigurację Wilka, tj. esc_wolf. Interesują nas dialogi, przechodzimy do wpisu poniżej frazy </supplies> , znajdziemy tam następujące wpisy: <start_dialog>escape_lager_volk_talk</start_dialog> <start_dialog>dm_hello_dialog</start_dialog> <actor_dialog>dm_cool_info_dialog</actor_dialog> <actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog> <actor_dialog>tm_wolf_dialog</actor_dialog> <actor_dialog>tm_wolf_reward</actor_dialog></specific_character> Dodajemy do powyższego nowy dialog, czyli poniższy wiersz: <actor_dialog>explosive_dialog</actor_dialog> Dialog rozpoczyna - I część zadania, w której przedmiot będzie spawnowany poprzez skrypt oraz do PDA zostanie dodany stosowny wpis w zakładce "zadania aktywne". [*] Konstruujemy drzewo dialogowe zawierające "explosive_dialog", stosowny wpis dodajemy w pliku dialogs_escape.xml [gamedataconfiggameplay] <dialog id="explosive_dialog"> <dont_has_info>kanister_done</dont_has_info> <dont_has_info>kanister_start</dont_has_info> <phrase_list> <phrase id="0"> <text>explosive_dialog_0</text> <next>1</next> </phrase> <phrase id="1"> <text>explosive_dialog_1</text> <action>tutorial.spawn_kanister</action> <next>2</next> </phrase> <phrase id="2"> <text>explosive_dialog_2</text> <give_info>kanister_start</give_info> <action>dialogs.break_dialog</action> <action>tutorial.gasoline_have</action> </phrase> </phrase_list> </dialog> gdzie: <dont_has_info>kanister_done</dont_has_info> □ to jeden z warunków - pojawienia się dialogu. Warunek jest spełniony, gdy informacja "kanister_done", która oznacza - wypełnienie zadania z kanistrem - nie zostanie dodana do PDA. <dont_has_info>kanister_start</dont_has_info> □ drugi warunek pojawienia się dialogu w menu, oznacza iż nie mając wpisu "kanister_start" - mamy widoczny (dostępny) dialog. Zasada podobna j/w. - brak określonych infoportion - generuje dialog. Czemu ma to służyć, hmm? - otóż patrząc na drzewo dialogowe z pkt.4 mamy wpis: <give_info>kanister_start</give_info> □ drzewo dodaje informację "kanister_start" do PDA - jeśli doprowadzimy dialog do końca, wówczas złamiemy warunek : <dont_has_info>kanister_start</dont_has_info> czyli będziemy mieli infoportion - i bardzo dobrze - bowiem dialog już się nie powtórzy - tylko zniknie, poprzez złamanie jednego z warunków. Chcąc pozbyć się z menu dialogowego - danej rozmowy, która już jest nieaktualna a dotyczy np. wykonanego zadania - musimy doprowadzić do takiego układu infoportion, aby warunki nie zostały powtórzone (warunki jednorazowe), czyli dodajemy poprzez <give_info> odpowiedni wpis, który stoi w sprzeczności z <dont_has_info> - czyli brakiem informacji zdefiniowanej w początkowym ustawieniu drzewa dialogowego. Jeśli przykładowo pominę : <dont_has_info>kanister_start</dont_has_info> to warunek 1 zawsze będzie spełniony - ponieważ jest nim brak wpisu, a zatem dialog będzie widoczny po zakończeniu zadania, stwarzając możliwość jego zdublowania. Bardzo ważny jest sposób w jaki skrypt jest aktywowany, przyjrzyjmy się wpisowi <action>tutorial.spawn_kanister</action> - wpis jest podzielony na 2 części, rozdziela kropka. Specjalnie wyróżniłem podział, również w pkt. 1 poradnika. □ Część 1 - tutorial - to nazwa pliku z rozszerzeniem .script, który zawiera funkcję wywoływaną. (pkt 1. poradnika) - nowo utworzony plik skryptu (nie wpisujemy rozszerzenia pliku skryptu) □ część 2 - spawn_kanister - ponieważ plik może zawierać wiele funkcji, ten wpis konkretyzuje żądane działanie, czyli spawn obiektu explosive_mobiltank. W tym przykładzie spawn następuje przy explosive_dialog_1, możemy oczywiście stworzyć bardziej rozbudowany dialog i wpis dodać w innej sekcji drzewa. <give_info>kanister_start</give_info> □ informacja dodana do PDA, infoportion omówiony dalej. <action>dialogs.break_dialog</action> □ w/w wpis ucina dialog, który byłby zapętlany - odwołanie do dialogs.script, funkcja: break_dialog <action>tutorial.gasoline_have</action> □ aktywuje funkcję, którą musimy utworzyć w pliku z pkt.1 Omówione w pkt.5 - gasoline_have. <dialog id="explosive_dialog"> □ identyfikator dialogu, dodany w pliku character_desc_escape.xml, w naszym przykładzie, zgodnie z pkt 3. □ explosive_dialog_0/explosive_dialog_1/explosive_dialog_2 - to odniesienia do tekstu zawartego w katalogu: [gamedataconfigtextpol] - pliku: stable_dialogs_escape.xml. Uwaga: tworząc drzewo dialogowe należy zachować szyk tagów je tworzących, jeśli chcemy wkomponować wpisy pomiędzy istniejące już sekcje. Dodajemy wpisy pomiędzy </dialog> kończącej, a <dialog id=" - następnej sekcji. - patrz pierwotne konfiguracje rzeczonego pliku. [*] Zgodnie z uwagą dotyczącą kolejnej funkcji tj. tutorial.gasoline_have Do pliku tutorial.script, dodajemy pod poprzednią funkcją z pkt.1 - wpis, który powoduje informowanie gracza o zaliczeniu części zadania, gdy questowy item znajdzie się w ekwipunku. -- dla infoportion_havefunction gasoline_have(task, objective)if db.actor ~= nil thenreturn db.actor:object("explosive_mobiltank") ~= nilendreturn falseend [*] Do pliku stable_dialogs_escape.xml [gamedataconfigtextpol], musimy dodać odniesienia: explosive_dialog_0, explosive_dialog_1, explosive_dialog_2 , które zdefiniowaliśmy poprzednio w 4 pkt. poradnika - tworząc "szkielet dialogowy", ten rodzaj plików odpowiada za czytany tekst. <string id="explosive_dialog_0"> <text>Mam wrażenie, ze coś cię gryzie?</text></string><string id="explosive_dialog_1"> <text>Skoro emocje mam wypisane na twarzy...jest sprawa, trzeba znaleźć kanister z benzyną do zasilenia agregatu w wiosce, moi ludzie są osłabieni po walce z bandytami, ale Ty wyglądasz na pełnego sił i potrzebującego pieniędzy, więc jak będzie, hmm?</text></string><string id="explosive_dialog_2"> <text>W porządku, zdobędę ten kanister!</text></string> ____________________________________ Część ||. - przynieś przedmiot. [*] Tworzymy infoportion - jest to wpis bądź zbiór wpisów, które pozwalają na umiejscowienie zadania w konkretnym momencie fabuły jak również warunkujące pojawienie się zadania i jego usunięcie z menu dialogu postaci. Ponieważ omawiamy przykład dotyczy zadania na Kordonie, potrzebny plik to: info_l01escape.xml [gamedataconfiggameplay] dodajemy infoportions do w/w, czyli wpis poniższy kopiujemy. <!-- Tutorial_test --><info_portion id="kanister_start"><task>zadanie_testowe</task></info_portion> <info_portion id="kanister_have"></info_portion><info_portion id="kanister_done"></info_portion><!-- Tutorial_test --> <!-- sekcje które są w ten sposób oznaczone, nie są wykorzystywane, można ich używać do komentowania, oznaczania zadań etc. info_portion id □ odnosi się do wpisu (pkt. 4 poradnika -patrz: szkielet dialogowy). <give_info>kanister_start</give_info>, ta sekcja jest dodana w pliku dialogs_escape.xml. Pozostałe wpisy kanister_have oraz kanister_done stanowią istotny element poniższych wpisów (pkt.8), dlatego omówię w następnym punkcie poradnika - w kontekście przykładu. Gdzie: □ "kanister_start" - wpis służący warunkowaniu pojawienia się zadania. □ "kanister_have" - wpis służący warunkowaniu pojawienia się zadania w odniesieniu do posiadania przedmiotu w ekwipunku, zgodnie ze zdefiniowaną funkcją - pkt.5 □ "kanister_done" - wpis służący warunkowaniu pojawienia się zadania w odniesieniu do jego zakończenia, będziemy definiować ostatnią funkcję (pkt.11) warunkującą zakończenie misji. W/w sekcje są ściśle związane z plikiem poniższym. [*] Do pliku tasks_escape.xml [gamedataconfiggameplay] dodajemy wpis: <!--Test dot. wpisów w PDA--> <game_task id="zadanie_testowe"> <title>Znaleźć kanister z benzyną</title> <objective> <text>Trzeba poszukać benzyny dla agregatu w wiosce</text> <icon>ui_iconsTotal_find_item</icon> <infoportion_complete>kanister_done</infoportion_complete> <article>opis_zadania_testowego</article> </objective> <objective> <text>Trzeba poszukać benzyny dla agregatu w wiosce</text> <icon height="50" width="50" x="100" y="50">uiui_icons_task</icon> <function_complete>tutorial.gasoline_have</function_complete> <infoportion_set_complete>kanister_have</infoportion_set_complete> </objective> <objective> <text>Dostarcz kanister Wilkowi</text> <map_location_type hint="volk">blue_location</map_location_type> <object_story_id>Escape_novice_lager_volk</object_story_id> <infoportion_complete>kanister_done</infoportion_complete> </objective> </game_task><!--Test--> W/w sekcja jest kluczowa dla infoportions, ponieważ wiąże określony warunek (wpisy -pkt.7 poradnika) z funkcjami, które definiowaliśmy w pkt. 1 poradnika. Gdzie: □ game_task id - dotyczy infoportion "kanister_start" - patrz pkt.7 □ title - to oczywiście tytuł zadania w PDA. □ text - opis zadania w PDA. □ icon - ikona wyświetlana w PDA np. inną mamy dla zadania zabić stalkera, inną dla znaleźć artefakt etc. Ikony znajdziemy w ui_iconstotal.dds [gamedatatexturesui] □ infoportion_complete - wiążące wpis "kanister_done" z funkcją wykonania questu. □ article - jest to opis szczegółowy, który pojawia się po rozwinięciu zadania w PDA. □ icon height="50" width="50" x="100" y="50 - definiuje położenie ikony z pliku ui_iconstotal.dds - o wartość odsunięcia 100 px w osi X oraz 50 w osi Y a także wysokość/szerokość ikony na 50 px. □ function_complete - odniesienie do tutorial.script i funkcji gasoline_have, którą dodaliśmy w pkt. 5 poradnika. □ infoportion_set_complete - wiąże infoportion kanister_have, z sprawdzeniem posiadania przedmiotu zadania - w ekwipunku i info. zwrotnego do PDA (pkt.7 połączony z pkt.1 poprzez funkcję gasoline_have. □ map_location_type - znacznik dla postaci (mapa - PDA), dla której wykonujemy zadanie. □ object_story_id - jest to odniesienie do pliku game_story_ids.ltx, w którym jest zapisany zleceniodawca - w naszym przykładzie - Wilk: 006 = "Escape_novice_lager_volk" Jeśli chcemy dodać właściwy wpis, musimy odszukać ją w pliku w/w. [*] Ponownie do pliku dialogu dialogs_escape.xml [gamedataconfiggameplay] dodajemy wpis, który będzie odpowiedzialny za 2 etap zadania, czyli rozmowa odnośnie dostarczenia przedmiotu. Do pliku dodajemy: <dialog id = "zadanie_z_kanistrem_complete"> <has_info>kanister_have</has_info> <dont_has_info>kanister_done</dont_has_info> <phrase_list> <phrase id = "0"> <text>esc_kanister_complete_0</text> <next>1</next> </phrase> <phrase id = "1"> <text>esc_kanister_complete_1</text> <give_info>kanister_done</give_info> <action>tutorial.gasoline_done</action> <next>2</next> </phrase> <phrase id = "2"> <text>esc_kanister_complete_2</text> <action>dialogs.break_dialog</action> </phrase> </phrase_list> </dialog> Gdzie: □ has_info - dialog pojawi się, gdy mamy informację "kanister_have" - czyli zgodnie ze skryptem, w którym zdefiniowaliśmy funkcję oraz wiążącymi wpisami z pkt. 8 poradnika. [*] Musimy również dodać do pliku character_desc_escape.xml - tak samo jak w pkt.3 poradnika /sekcja dialogów Wilka/. <actor_dialog>zadanie_z_kanistrem_complete</actor_dialog> [*]Uzupełniamy plik tutorial.script o ostatnią funkcję, która występuje w drzewie skryptowo-dialogowym - pkt 9 poradnika - przy esc_kanister_complete_1. (poniżej funkcji już dodanych w pliku). --- dla infoportion_donefunction gasoline_done(first_speaker, second_speaker)dialogs.relocate_item_section(first_speaker, "explosive_mobiltank", "out")dialogs.relocate_item_section(second_speaker, "wpn_spas12", "in")end Powyższa funkcja odpowiada za zakończenie zadania, oddanie przedmiotu i otrzymanie nagrody. Rozważmy wpisy tworzące funkcję: Poprzez dialog (dialogs) następuje przeniesienie przedmiotu (relocate_item_section) pomiędzy rozmówcami (first_speaker, second_speaker). Jeśli mamy wpis "out" - to oddajemy przedmiot, przy którym stoi wpis, natomiast "in" to przedmiot otrzymywany - w naszym przykładzie jest to Spas12. [*] Oraz uzupełniamy plik stable_dialogs_escape.xml [gamedataconfigtextpol] - jak w pkt.6 <string id="esc_kanister_complete_0"> <text>Znalazłem kanister!</text> </string> <string id="esc_kanister_complete_1"> <text>Dobra robota Naznaczony.</text> </string> <string id="esc_kanister_complete_2"> <text>Wisisz mi kolejkę stary.</text></string> [*] Do pliku storyline_info_escape.xml [gamedataconfiggameplay] dodajemy (opis zgodnie z wierszem: <article>opis_zadania_testowego</article> - patrz pkt.8) wpis: <article id="opis_zadania_testowego" name="new_task" article_type="task" group="new_task/0"> <text>opis_zadania1</text></article> [*]Powyższy plik prowadzi do spolszczenia kwestii dialogowej tj. stable_storyline_info_escape.xml [gamedataconfigtextpol] w którym dodajemy wpis: <string id="opis_zadania1"> <text>Muszę wywiązać się z ważnego dla Wilka - zadania dostarczenia benzyny do agregatu w wiosce, tylko tak mogę udowodnić swoją wartość jako nowicjusz.</text></string> [*]W moim przykładzie wykorzystałem kanister, toteż w pliku weapons.ltx [gamedataconfigweapons] odnajdujemy nasz przedmiot z pliku tutorial.script czyli explosive_mobiltank i zmieniamy sekcję z: can_take = false na: can_take = true Zmiana wpisu umożliwi zabranie przedmiotu do ekwipunku, co przedtem nie było możliwe. Pozostaje jeszcze kwestia drugorzędna - zrobienia ikony dla kanistra, jednak to już temat innego tutoriala. Screeny prezentujące nowe zadanie: Jeśli ktokolwiek będzie miał - przeczytawszy powyższe wskazówki - wątpliwości dotyczące tworzenia zadań - w załączeniu pliki w formie sfinalizowanej - instalacja poprzez skopiowanie gamedata. new_quest_tutorial.7z Uwagi dla administracji: - dotyczące podobnego tematu. Spoiler Ponieważ podobny tutorial już został napisany, w tym temacie, pragnę nadmienić iż niniejsze opracowanie nie służy dublowaniu wątków. Merytoryczna część poradnika dotycząca szczegółów tworzenia własnych funkcji (skrypty) oraz zagadnień ukazujących sposób połączeń plików - dla ich poprawnego funkcjonowania - jak również przedstawiających sposób zbierania informacji o punktach terenowych - jest znacznie bardziej rozbudowana, niż ta podana w linku a odnosząca się do podobnego tematu. Chciałbym zwrócić uwagę na pewien fakt, otóż poradnik - nadmieniony w linku - nie jest kompletny, na jego podstawie nie da się zbudować nowego questu, ponieważ brakuje kilku istotnych tagów - wpisy ujęte w code. Warto sprawdzić to co mówię, porównując zawartość z artykułem, w oparciu o który - powstał. Poradnik opracowany na podstawie plików Solijanki: Prawa autorskie na podstawie regulaminu, pkt.1.6. - The Emperor, wyłączność: StalkerTeam. _________________________ Autor: The Emperor dla StalkerTeam 7 Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
StalkerCell Opublikowano 25 Października 2013 Zgłoś Udostępnij Opublikowano 25 Października 2013 Hej, The Emperor, pokusiłbyś się o napisanie tutoriala pod CoP? Może być tak jak ten, z wykorzystaniem własnego skryptu Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
The Emperor Opublikowano 26 Października 2013 Autor Zgłoś Udostępnij Opublikowano 26 Października 2013 @StalkerCellGdybym miał więcej czasu z chęcią napisałbym taki poradnik, mówiąc szczerze - jeszcze 2 poradniki pod Shoc czekają na napisanie, ale trudno mi "wykrzesać" nawet kilka godzin - nie tylko na napisanie, lecz również przetestowanie sposobu modyfikacji. Aktualnie wzoruję się na Solijance, jeśli chodzi o CoP - musiałbym rozłożyć dany mod na części, ponieważ to jedyny sposób by nauczyć się modować (zadania pod CoP są inaczej skonstruowane). Dam Ci radę którą ja stosuję tworząc poradnik - stosuj metodę inżynierii wstecznej jeśli potrzebujesz wiedzy już teraz, natomiast - jeśli znajdę czas, wówczas z pewnością poradnik pojawi się w dziale tutoriali. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
StalkerCell Opublikowano 26 Października 2013 Zgłoś Udostępnij Opublikowano 26 Października 2013 @The Emperor - już nie potrzeba Na podstawie twojego posta i posta XMK z AMK Forum napisałem tutorial pod CoP. Wszystko działa jak należy ale muszę jeszcze ulepszyć (zespawnować przedmiot przez skrypt, a teraz mi się nie chce). Mimo to dzięki za obszerne tutoriale. Zastanawia mnie jedno - ile czasu na nie poświęciłeś :woot: Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
The Emperor Opublikowano 26 Października 2013 Autor Zgłoś Udostępnij Opublikowano 26 Października 2013 @StalkerCell.By napisać porządny tutorial potrzeba ok. 10 do 30 godz. - włączając w to testy i przeróbki, nie chciałbym aby ktoś tracił czas na tworzenie modyfikacji, która nie będzie działać. Dobrze mieć duży mod i znać strukturę plików, ogólnie wiedzę zbieram od 2 lat - ponieważ tworzę a raczej tworzyłem (brak czasu) dużego moda. Najwięcej pracy zabiera tworzenie obozów. Bazę na 30 osób tworzy się ok. tygodnia włączając testy w cyklu dzień-noc, ostrzał obozu, ataki mutantów czy stalkerów - dopiero wówczas można powiedzieć, że dodało się obozowisko. Wszystko zależy od sumienności - jeśli szanujesz graczy napiszesz porządny poradnik, który będzie twoją wizytówką. Powodzenia w modowaniu. 1 Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
StalkerCell Opublikowano 18 Listopada 2013 Zgłoś Udostępnij Opublikowano 18 Listopada 2013 @The Emperor - wyciąłem wszystkie zadania i infoportiony z plików gry (chodzi mi o Stalker CoP), by zrobić nową fabułę. Może będziesz wiedział, dlatego pytam. Jak zrobić (albo lepiej - co), by nie dawało mi żadnego komunikatu, albo dawało jeden? Bo według mojego toku myślenia nie powinno dawać zadania, gdy wyciąłem wpisy infoportion, tm_zaton, tm_jupiter i tm_pripyat, a nadal daje (lecz nie pokazuje znacznika, i opisów zadania, pisze za to np. DESC_DONT_EXIST). Pomógłbyś? Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
The Emperor Opublikowano 18 Listopada 2013 Autor Zgłoś Udostępnij Opublikowano 18 Listopada 2013 Gdzie może być zawarta fabuła, hmm?Podstawą wszelkich zadań są opcje dialogowe oferujące określone questy. Wycinając fabułę - usunąłbym dialogi odpowiedzialne za zadania, wspomniane przez Ciebie - infoportion'y oraz przeszukałbym plik all.spawn, ponieważ tam znajdują się odpowiedzialne za pojawienie się zadań aktywatory - przykładem są strefy aktywacji zadań, gdy dochodzimy do Ogończy na wzgórzu lub nawet patrząc na Shoc - strefa aktywująca licznik, gdy dochodzimy do CEA-1 i zadanie "uciec przed emisją". Są to strefy reprezentowane przez obiekty typu:section_name = space_restrictoro określonej logice narzucającej aktywację questu. Musiałbyś przeszukać all.spawn'a pod kątem infoportions odnoszących się do fabuły. Usunąłbym lub zakomentował pliki .xml w których zawarte są questy, ale nie podam Ci dokładnie jakie to muszą być pliki, ponieważ nie moduję CoP (nie mam nawet plików na dysku). Jest tutaj krótkie info o usuwaniu fabuły - link, ale traktowałbym to jako ewentualne uzupełnienie. Linię fabularną prawdopodobnie rozpoczyna wpis w pliku bind_stalker.script (trzeba sprawdzić jego zawartość pod kątem powiązania z pierwszym questem). Jeśli znajdę przydatne informacje - dam znać. W tej chwili bardziej precyzyjnie nie jestem w stanie Ci powiedzieć.W skrócie usuwasz korelacje pomiędzy plikami:all.spawn.xml - zawierającymi infoportions.xml odpowiedzialnymi za dialogibind_stalker.script Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
StalkerCell Opublikowano 19 Listopada 2013 Zgłoś Udostępnij Opublikowano 19 Listopada 2013 @The Emperor - wczoraj pobrałem moda SZA Freeplay, uzyskałem odpowiedź na mój problem. Zadań nie ma - wystarczyło skopiować pliki gamedata/configs/scripts. No dobra, skopiowałem te pliki i dodałem nowy quest storyline - wszystko, tak jak do zadań siędodaje. Zadanie działa (aktywacja i wpis w PDA), ale opisy i tytuł są "dziwne", bowiem pisze takie coś:DESC_DONR_EXIST - dla opisu,TEXT_DONT_EXIST - dla nazwy, Być może dzieje się dlatego, że wyciąłem wszystko z wszystkich tm_lokacja i info_lokacja. Dialogi również powywalałem. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
The Emperor Opublikowano 19 Listopada 2013 Autor Zgłoś Udostępnij Opublikowano 19 Listopada 2013 Na pierwszy rzut oka brakuje odniesienia do tekstu...TEXT_DONT_EXIST (tekst główny) oraz DESC_DONT_EXIST (opis zadania) - to informacje które pojawiają się gdy nie istnieje powiązanie tekstu np. spolszczenia z drzewem dialogowym na którym osadzone są odniesienia do tegoż tekstu. Weźmy przykład z poradnika, otóż w pkt. 4 mamy plik:dialogs_escape.xml [gamedataconfiggameplay] a wnim wpis<text>explosive_dialog_0</text>explosive_dialog_0 - jest swoistym identyfikatorem tekstu spolszczenia występującym dla tego przykładu w pliku: stable_dialogs_escape.xml [gamedataconfigtextpol], gdzie mamy właściwy tekst:<text>Mam wrażenie, ze coś cię gryzie?</text> - pkt. 6 poradnikaNie znam struktury plików CoP'a, dlatego trudno mi wskazać dokładne położenie tego tekstu - bazując jedynie na tutorialu pod Shoc. Szukałbym w/w fraz w plikach .xml, ja standardowo otwieram jednocześnie do 200 plików (Notepad ++), Ctrl + F i szukam położenia frazy w takiej sytuacji. Jesteś pewien, że wszystko dobrze połączyłeś? Edit:pobrałem patch 1.6.02, mam kilka plików po wypakowaniu dla wstępnej oceny problemu.przykład na podst. pliku tm_zaton.ltx [lokalizacja: gamedataconfigsmisc][zat_b100_heli_2_crash]icon = ui_inGame2_Skat_2prior = 104storyline = truetitle = zat_b100_heli_2_crash_namedescr = zat_b100_heli_2_crash_texttarget = zat_b100_heli_2condlist_0 = {+zat_b100_heli_2_searched} complete, {+pri_b305_actor_wondered_done} completew powyższym zadaniu zwróć uwagę na parametry: title, który odpowiada za tytuł zadania, a znajduje się w pliku st_quests_zaton.xml, wpis:<string id="zat_b100_heli_2_crash_name"> <text>Ogończa 2: zbadaj miejsce katastrofy</text> </string>oraz parametr "descr" odpowiadający za opis zadania zawarty również w pliku st_quests_zaton.xml czyli wpis:<string id="zat_b100_heli_2_crash_text"> <text>Zbadaj miejsce katastrofy Ogończy 2.</text> </string>W twoim przypadku prawdopodobnie brakuje w/w powiązań - piszę prawdopodobnie ponieważ nie widziałem konstrukcji twoich zadań. Inny przykład do usunięte przez Ciebie infoportion.[zat_b101_heli_5_crash]icon = ui_inGame2_Skat_5prior = 101storyline = truetitle = {+zat_b101_both_heli_info} zat_b101_heli_5_crash_name_03, {+zat_b101_one_heli_info -jup_b8_heli_4_searching} zat_b101_heli_5_crash_name_02, zat_b101_heli_5_crash_namedescr = {+zat_b101_both_heli_info} zat_b101_heli_5_crash_text_03, {+zat_b101_one_heli_info -jup_b8_heli_4_searching} zat_b101_heli_5_crash_text_02, zat_b101_heli_5_crash_texttarget = {+zat_b101_both_heli_info} nil, {+zat_b101_one_heli_info -jup_b8_heli_4_searching} nil, zat_b101_heli_5condlist_0 = {+pri_b305_actor_wondered_done} completew/w znajduje się w pliku tm_zaton.ltx widzimy przykładowy odnośnik do infoportion tj.{+pri_b305_actor_wondered_done}nie wiem jaki komunikat może pojawić się w sytuacji gdy zadanie zostało niewłaściwie skonfigurowane.Przejrzyj uzupełniająco te poradniki pod CoP: link oraz link2. Ponieważ nie mam wszystkich plików CoP'a a jedynie te z patcha - pomóc mogę połowicznie. Myślę, że usunięcie plików tm...*.ltx nie było najlepszym pomysłem. Więcej czasu zajęłoby usuwanie poszczególnych sekcji - efekt byłby jednak lepszy. Jeśli tworzyłeś już zadania i były właściwie skonstruowane - odpowiedzi musisz szukać w usuniętych plikach. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
StalkerCell Opublikowano 19 Listopada 2013 Zgłoś Udostępnij Opublikowano 19 Listopada 2013 No to tak:1.Powycinałem tekst z tm_lokacja.2.Powycinałem tekst z info_lokacja. Przy starcie gry były właśnie te TEXT_DONT_EXIST i DESC_DONT_EXIST. To nie były opisy, gdyż dodając nowe zadanie i nadając mu opisy i nazwę było tak samo. Teraz znalazłem inny sposób:1.Pobrałem moda SZA Freeplay (http://stalkerteam.pl/topic/6095-sza-freeplay-mod/).2.Wyciąłem z niego plik all.spawn i configs/scripts do swojego moda. Zadania nie aktywują się.3.Do pliku all.spawn (uprzednio dekompilując) dodałem space_restrictor z takimi samymi wartościami position, co actora.4.Zgodnie z dodaną ścieżką w pliku alife_zaton dodałem logica, a w nim dwa zadania storyline:[logic]active = sr_idle@give_task[sr_idle@give_task]on_info = {+quest_storyline_give}on_info2 = {+quest_storyline2_give}Nie wiem, czy jest dobrze, ponieważ logiców nigdy nie ruszałem. Jeżeli jest jakiś błąd, to popraw.5.Dodałem zadania do pliku tm_zaton z tymi samymi nazwami, co przy on_info i on_info2. Jednakże nie działa. Jeżeli chcesz i możesz, prosiłbym o pomoc w napisaniu tego logica. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
The Emperor Opublikowano 19 Listopada 2013 Autor Zgłoś Udostępnij Opublikowano 19 Listopada 2013 Powiedz czy wpisy: quest_storyline_give oraz quest_storyline2_give zostały dodane do pliku zawierającego infoportion'y - czyli dla zatonu: info_zaton.xml? (chyba że umieściłeś je w innym pliku?). Plik powinien zawierać zbiór zdefiniowanych dla realizacji fabuły/questów i ich aktywacji wpisy warunkujące. Jeśli tworzysz nowy infoportion definiując quest - zadbaj o dodanie go do bazy infoportion'ów gry. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
StalkerCell Opublikowano 20 Listopada 2013 Zgłoś Udostępnij Opublikowano 20 Listopada 2013 Tak, infoporiony dodane. Cóż, będę musiał inaczej rozwiązać mój problem. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
The Emperor Opublikowano 20 Listopada 2013 Autor Zgłoś Udostępnij Opublikowano 20 Listopada 2013 Mogę zajrzeć do konstrukcji zadań w CoP, ale muszę mieć pliki. Jeśli masz wypakowane pliki .db z Zewu - wyślij mi spakowane foldery: scripts, configs oraz plik alife (all.spawn) z Zatonu. Pliki mają być z oryginalnego CoP w wersji 1.6.02 - bez żadnych dodatków czy innych modów. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 6 Lutego 2016 Zgłoś Udostępnij Opublikowano 6 Lutego 2016 Mam problem. Wzorując się na przykładzie próbowałem stworzyć własne zadanie, które polega na przyniesieniu Sidorowiczowi winchestera, w którego uzbroiłem jednego z bandytów w fabryce w kordonie, edytując plik character_desc_escape. Niestety wywala mnie do pulpitu z logiem FATAL ERROR [error]Expression : start_node && path [error]Function : CXml::NavigateToNode [error]File : E:\stalker\sources\trunk\xrXMLParser\xrXMLParser.cpp [error]Line : 97 [error]Description : NavigateToNode failed in XML file [error]Arguments : gameplay\dialogs_escape.xml stack trace: Tak oto wyglądają dialogi, które dodałem w pliku dialogs_escape <dialog id="poszukiwanie_strzelby_start"> <dont_has_info>strzelba_start</dont_has_info> <phrase_list> <phrase id="1"> <text>poszukiwanie_strzelby_1</text> <next>2</next> </phrase> <phrase id="2"> <text>poszukiwanie_strzelby_2</text> <next>3</next> </phrase> <phrase id="3"> <text>poszukiwanie_strzelby_3</text> <give_info>strzelba_start</give_info> <action>dialogs.break_dialog</action> </phrase> </phrase_list> </dialog> <dialog id="poszukiwanie_strzelby_complete"> <has_info>strzelba_have</has_info> <dont_has_info>strzelba_done</dont_has_info> <phrase_list> <phrase id="1"> <text>poszukiwanie_strzelby_complete_1</text> <next>2</next> </phrase> <phrase id="2"> <text>poszukiwanie_strzelby_complete_2</text> <give_info>strzelba_done</give_info> <action>Moje_zadania_kordon.strzelba_done</action> <action>dialogs.break_dialog</action> </phrase> </phrase_list> </dialog> A tutaj plik script -- dla infoportion_have function strzelba_have(task, objective) if db.actor ~= nil then return db.actor:object("wpn_wincheaster1300") ~= nil end return false end --- dla infoportion_done function strzelba_done(first_speaker, second_speaker) dialogs.relocate_item_section(first_speaker, "wpn_wincheaster1300", "out") dialogs.relocate_item_section(second_speaker, "wpn_spas12", "in") dialogs.relocate_item_section(second_speaker, "wpn_beretta", "in") dialogs.relocate_item_section(second_speaker, "ammo_9x19_fmj", "in") end Do czego służy plik game_story_ids.ltx, który jest w gamedacie z zadaniem do pobrania? Co tam trzeba zedytować? Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gatzek Opublikowano 7 Lutego 2016 Zgłoś Udostępnij Opublikowano 7 Lutego 2016 Log sugeruje, że masz zapętlone odwołania. Podziel to co zrobiłeś na mniejsze kawałki i sprawdzaj kiedy wywali grę, będziesz wiedział w którym miejscu szukać problemu. 1 Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
tomlopag Opublikowano 29 Grudnia 2022 Zgłoś Udostępnij Opublikowano 29 Grudnia 2022 Witam! Mam pytanie odnośnie edytowania zadań, czy jest możliwe zamknięcie aktywnego zadania(zmienienie w plikach na wykonanie)? Mam problem z zadaniem na wódkę dla Kuzniecowa, po powrocie z Agropromu na Kordon kropnełem go bo do mnie strzelał, wódkę mam ale zadanie nie jest zaliczone bo mu jej nie oddałem. Zadanie olałem i doszedłem do Wschodniej Prypeci i okazuje się że zaliczam error(nie otwiera mi się przejście na Jupiter) ze względu na nie wiszące zadanie dla Kuzniecowa. Czy gdzieś w plikach można zmienić to zadanie na ''done"? Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Meta Opublikowano 29 Grudnia 2022 Zgłoś Udostępnij Opublikowano 29 Grudnia 2022 @tomlopag Serwus. Nie wiem, czy grzebanie przy takich rzeczach nie jest trochę ryzykowne, zwłaszcza w modach i nie lepiej cofnąć się w zapisach. Specjalistką żadną też nie jestem, kojarzę tylko, że przy Anomaly często używali takiego wpisu w trybie debugowania: task_manager.get_task_manager():set_task_completed("znacznik zadania") Jednak nie mam pojęcia czy to zadziała gdzie indziej 😕 1 Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
tomlopag Opublikowano 29 Grudnia 2022 Zgłoś Udostępnij Opublikowano 29 Grudnia 2022 @MetaSiema! Jak nie sprawdzę to się nie dowiem;-) Cofać mi się nie chce bo jestem już parę ładnych zadań od Kuzniecowa(a to praktycznie trzeba zaczynać grę od nowa) A kojarzysz ścieżkę do konkretnego task_menager? Może wykażę się laicyzmem ale co znaczy "używać wpisu w trybie debugowania" Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Meta Opublikowano 29 Grudnia 2022 Zgłoś Udostępnij Opublikowano 29 Grudnia 2022 @tomlopag Wnioskuję po Twoich postach, że tu chodzi konkretnie o NS. Nie znam kompletnie tego moda, więc ciężko będzie pomóc, bo nie wiem nawet na ile ma pozmienianą strukturę plików i na ile ta struktura jest delikatna, w końcu to kolos, więc strach kombinować. Nie wiem też, czy w NS w ogóle jest tryb debugowania, takie mody jak CoC i Anomaly to miały raczej specjalne zmiany w silniku, no i jak to wygląda z anticheatem. Może dałoby się to obejść z jakimś modem umożliwiającym cziterkę 'Pogooglam' potem ten konkretny przypadek, ale na pierwszy rzut oka to widzę, że na wschodnich stronach ludzie każą się cofać/zaczynać od nowa. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
tomlopag Opublikowano 29 Grudnia 2022 Zgłoś Udostępnij Opublikowano 29 Grudnia 2022 Dzięki za odpowiedź, próbuję coś wykombinować aby się nie wracać tak daleko. NS faktycznie jest wielkim modem i jest gdzie szukać, biorąc na zdrowy chłopski rozum musi gdzieś być plik w którym gra zapisuje wykonane zadania, nie wykonane i w toku. Jeśli by się udało nawet przez małe oszustwo pchnąć dalej grę byłoby super. Ja niestety nie poszukam nic na wschodnich stronach bo ze znajomością rus nie jest u mnie najlepiej pomimo że do szkoły podstawowej chodziłem gdy ten język był obowiązkowy:-) Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
tom3kb Opublikowano 29 Grudnia 2022 Zgłoś Udostępnij Opublikowano 29 Grudnia 2022 @tomlopag ostatnio w tematach OP 2.2 widziałem parę rozmów o zaliczaniu różnych zadań np: Czy też Może ci to za wiele nie pomoże ale chociaż zobaczysz jak wygląda schemat zadań i warunki jakie trzeba spełniać żeby je zaliczać, pewnie jakby człowiek bardziej poszukał to by jeszcze coś znalazł. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
tomlopag Opublikowano 29 Grudnia 2022 Zgłoś Udostępnij Opublikowano 29 Grudnia 2022 @tom3kbDzięki za próbę pomocy ale pomimo zmiany w plikach dialogu z Kuzniecowem nic nie pomogło. Wszystkie zadania zmieniłem na w wykonane w gamedata a zadanie w PDA dalej wisi jako nie wykonane. Może jeszcze któregoś dnia coś poszukam a jak nie to nic mi nie pozostanie jak zaczynanie od nowa:-( Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Meta Opublikowano 30 Grudnia 2022 Zgłoś Udostępnij Opublikowano 30 Grudnia 2022 @tomlopag Nic specjalnego nie znalazłam, ale ktoś podpowiadał przy jakimś innym zadaniu, że jeśli Kuzniecow stał się wrogiem, to można spróbować to odkręcić przez doprowadzenie do podania mu apteczki, a wcześniej załatwić resztę wojskowych. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
tomlopag Opublikowano 30 Grudnia 2022 Zgłoś Udostępnij Opublikowano 30 Grudnia 2022 Czyli cofamy się do początku bo ja go unicestwiłem(musiał bym go ożywić), ale i tak @Meta dzięki za pomoc. Trochę odsapnę i pójdę znowu w Zonę, zanim będzie Stalker2 może zdążę przejść Solę ponownie. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.
Uwaga: Twój wpis zanim będzie widoczny, będzie wymagał zatwierdzenia moderatora.