Skocz do zawartości

Usuwanie pojazdów - DMX


Radrif

Rekomendowane odpowiedzi

1. Jak zrobić żeby inne rodzaje wódki były przyjmowane przez wojaków? W sensie kupować za nie/wymieniać je na amunicję, apteczki i bronie  OMÓWIONE

 

2. Próbuję usunąć wszystkie pojazdy bo jak dla mnie nie są potrzebne (zmieniam modyfikację pod siebie  :smile: ), ale jakoś mi to nie wychodzi... Prawdopodobnie dlatego bo nigdy się w to nie bawiłem  :biggrin: Odszukałem większość plików odpowiedzialnych za pojazdy, lecz wszystkie moje próby nie dały żadnego skutku. Raz zrobiłem, że nie było ich wcale - gra odpalała, niestety z błędem... 

ACDC nie ma mowy żebym "rozpakował" all.spawn, xrSpawnerem też nic nie wskórałem więc jak ktoś mógłby mi jakoś pomóc byłbym wdzięczny

 

Bo chyba nie jest możliwe żeby zgrać jakoś pliki NS + DMX żeby nie było pojazdów?  OMÓWIONE

 

3. W dynamicznych wiadomościach, "nowa recepta" i "otrzymano zestaw kompletów remontowych" są zapisane "różnymi znaczkami" (pozwolę sobie tak to ująć  :tongue: ). Jak to naprawić? Jeśli trzeba mogę wrzucić screeny...

 

4. Jak wyłączyć obniżanie/podwyższanie poziomu trudności? Gram na mistrzu a godzinę później schodzi na początkujący mimo tego, że raz zdarzyło mi się zginąć...

Edytowane przez Radrif
Odnośnik do komentarza
Udostępnij na innych stronach

Usuwanie pojazdów bez ingerencji w spawn - nie jest sprawą prostą, ale...jest to bardzo czasochłonne i wymagające cierpliwości - modyfikowanie poprzez skrypt.

Zastanawiałeś się kiedyś, jak to się dzieje, że obiekty przykładowo – teleporty w solijance – są usuwane, hmm? Jest taki skrypt pozwalający na usuwanie przedmiotów, obiektów, postaci. Jeśli z Warlabu znika Pantera, to nie wychodzi zmieniając lokację, usuwa ją skrypt, podobnie Kła z Ognistej Pieczary czy Ducha z CEA-1. Tyle tytułem wstępu.

 

Sam skrypt ma postać:

function usun_samochod()    local se_obj = alife():object("nazwa_samochodu_z_pliku_all.spawn")    if se_obj then        alife():release(se_obj, true)    endend

W powyższym skrypcie w nawiasie mamy obiekt, który znajduje się w spawnie, musi mieć nazwę oraz numer obiektu. Pomiędzy cudzysłów wpisujesz żądany obiekt, sprawdzając all.spawn za pomocą xrSpawnera - lokacja po lokacji. Skrypt stosowałem do usuwania anomali, lecz definiowałem go dla postaci na tej samej lokacji co obiekt, innymi słowy - jeśli usuwam obiekt z kordonu, to przykładowo dopisuję Wilkowi, Fanatowi - czyli NPC z kordonu.

 

Ale skrypt trzeba wywołać, np., dialogiem a jeśli samochodów sporo – wpisów również.

Po kolei:

  • w katalogu gamedatascripts – tworzysz plik unspawn_test.script [ważne jest rozszerzenie script].
  • w katalogu gamedataconfiggameplay - musisz zmodyfikować pliki character_desc_escape.xml oraz dialogs_escape.xml
  • W oparciu o w/w pliki tworzysz dialog – modyfikujesz plik character_desc_escape.xml znajdując postać np. Wilk – sekcja "esc_wolf" , następnie wiersz <start_dialog> [pomiędzy wierszami  #include a </specific_character>] - dodajesz wpis :  

    <actor_dialog>delete_car_dialog</actor_dialog>
  • Plik dialogs_escape.xml – tworzysz dialog:  
    <dialog id="delete_car_dialog">   	 <phrase_list>       	 <phrase id="0">           	 <text>delete_dialog_0</text>        <next>1</next>		    </phrase>		    <phrase id="1">			    <text>delete_dialog_1</text>           	 <action>unspawn_test.usun_samochod</action>        <next>2</next>		    </phrase>		    <phrase id="2">			    <text>delete_dialog_2</text>                <action>dialogs.break_dialog</action>		    </phrase>        </phrase_list>    </dialog>                                                                    
  • W drzewie dialogowym odwołujesz się poprzez <action> do pliku, który stworzyłeś czyli unspawn_test oraz funkcji usun_samochod.
  • Sprawa następna – lokalizacja gamedataconfigtextpol i modyfikujesz pliki stable_dialogs_escape.xml, czyli                          

     

    <string id="delete_dialog_0">        <text>Mam wrazenie, ze cos cie gryzie?</text>    </string>    <string id="delete_dialog_1">        <text>Pozbądź się w magiczny sposób tych samochodów</text>    </string>    <string id="explosive_dialog_2">        <text>Copy That!</text>    </string> 

Zapisujesz i sprawdzasz, ale ważne jest abyś zrobił kopię plików modyfikowanych! Jeśli dotrwałeś do końca wpisu, oceń sam - czy starczy Ci zapału do usuwania samochodów. Skrypt sprawdzałem wielokrotnie - usuwa, ale dla pewności konstrukcji drzew dialogowych sprawdź Tutaj.

Uwagi: Skrypt kopiujesz do pustego pliku, pamiętaj by wpisać dokładnie nazwę obiektu usuwanego. Sam skrypt jest mało skomplikowany, natomiast problemów nastręcza wywołanie powyższego.P.S - prościej było by podmienić model samochodu na obiekt małych rozmiarów, np. bandaża, może brzmi to śmiesznie, ale zastępując model wozu - takim jak proponuje, może dać ciekawy rezultat, natomiast próba użycia może skończyć się CDT. Jeśli masz czas - zrób tak z jednym z obiektów..

  • Dodatnia 2
Odnośnik do komentarza
Udostępnij na innych stronach

A nazwy pojazdu nie mogę wziąć z dmx_cars.script? Podane są tam współrzędne spawnu wszystkich (mam nadzieję) pojazdów np.

 

- function car_spawn() 

alife():create("vehicle_actor_btr",vector():set(-162.542,-30.264,-356.309),87065,31)

 

Byłoby szybciej i o wiele prościej niż przekopywać cały all.spawn w xrSpawnerze... 

Odnośnik do komentarza
Udostępnij na innych stronach

Nie mam DMX'a - opisuję ogólny sposób usuwania obiektu - działający zarówno w Solijance jak i czystym Shoc, natomiast moją uwagę zwrócił skrypt dmx_cars.script a konkretyzując function car_spawn, jeśli znajdziesz dialog lub plik wywołujący ową funkcję, wówczas usuwasz ją np. pozbywając dialogu sekcji odpowiedzialnej za spawn...nie wiem jak rozwiązano to w tym modzie...jeśli chodzi o all.spawn - tutaj szukasz nazw pojazdów i tylko nich, jeśli nazwy są w w/w pliku skryptu to zadanie jest ułatwione. Szybsze będzie zablokowanie pliku skryptu, lub wyłączenie sekcji poprzez dodanie na początku wiersza -- przed każdym wpisem. Jest - naprawdę dużo opcji w tej sytuacji, bo pojazdy spawnuje skrypt a nie all.spawn.

Edit: zapomniałbym wspomnieć o ewentualnych questach związanych z pojazdami, jak wspominałem - nie mam tego moda, zapytaj na forum czy pojazdy są potrzebne w jakimś zadaniu.

  • Dodatnia 1
Odnośnik do komentarza
Udostępnij na innych stronach

Niestety każda ingerencja w plik dmx_cars.script kończy się czymś takim

 

! Cannot find saved game ~~~ watchdog 199.reason actor_binder:update

 

 

Oczywiście zaczynam grę od nowa. Chyba będę musiał pobawić się w usunięcie ich tak jak napisałeś wcześniej, poprzez dialog

Odnośnik do komentarza
Udostępnij na innych stronach

Mam nadzieję że skrypt dobrze wygląda? Zawsze wolę się zapytać  :smile: I jeszcze jedno, jeżeli w dmx_cars.script nazwy samochodów w sekcji spawn się powtarzają to podobnie miałem postąpić tutaj? Czy wystarczyło tylko raz wpisać nazwę danego pojazdu?

function usun_samochod()    local se_obj = alife():object("vehicle_actor_btr")    local se_obj2 = alife():object("vehicle_kamaz_no_kuzov")    local se_obj3 = alife():object("vehicle_moskvitch")    local se_obj4 = alife():object("vehicle_niva_white")    local se_obj5 = alife():object("vehicle_school_avtobus")    local se_obj6 = alife():object("vehicle_zaz986")    local se_obj7 = alife():object("vehicle_avtobus_laz4202")    local se_obj8 = alife():object("vehicle_vezdehod")    local se_obj9 = alife():object("vehicle_gaz66")    local se_obj10 = alife():object("vehicle_uaz")    local se_obj11 = alife():object("vehicle_zil131")    local se_obj12 = alife():object("vehicle_moskvitch_police")    local se_obj13 = alife():object("vehicle_lada")    local se_obj14 = alife():object("vehicle_uniq_btr")    local se_obj15 = alife():object("vehicle_sport_baggi")    local se_obj16 = alife():object("vehicle_niva")    local se_obj17 = alife():object("vehicle_zil")    local se_obj18 = alife():object("vehicle_uaz_buhanka")    local se_obj19 = alife():object("vehicle_rover_bot")    local se_obj20 = alife():object("rover_bot_stancion")    local se_obj21 = alife():object("vehicle_avtobus_icarus")    local se_obj22 = alife():object("vehicle_kamaz")    local se_obj23 = alife():object('vehicle_uaz_fsb")    local se_obj24 = alife():object("vehicle_niva_white")    local se_obj25 = alife():object("vehicle_zaz")    local se_obj26 = alife():object("vehicle_zil130_no_kuzov")    local se_obj27 = alife():object("vehicle_lada")    local se_obj28 = alife():object("vehicle_moskvitch")    local se_obj29 = alife():object("vehicle_moskvitch_police")    local se_obj30 = alife():object("vehicle_avtobus_icarus")    local se_obj31 = alife():object("vehicle_tr13")    local se_obj32 = alife():object("vehicle_zaz986")    local se_obj33 = alife():object("vehicle_kamaz")    local se_obj34 = alife():object("vehicle_vezdehod")    local se_obj35 = alife():object("vehicle_hammer")    local se_obj36 = alife():object("vehicle_gaz66")    local se_obj37 = alife():object("vehicle_uaz_fsb")    local se_obj38 = alife():object("vehicle_niva")    local se_obj39 = alife():object("vehicle_actor_btr")    local se_obj40 = alife():object("vehicle_dodje")    local se_obj41 = alife():object("vehicle_btr_hl")    local se_obj42 = alife():object("vehicle_kamaz_military")    local se_obj43 = alife():object("vehicle_kamo_btr")    local se_obj44 = alife():object("vehicle_lada2103")    local se_obj45 = alife():object("vehicle_niva_white")    local se_obj46 = alife():object("vehicle_zil")    local se_obj47 = alife():object("vehicle_yellow_zaz986")    local se_obj48 = alife():object("vehicle_uaz_ukrainian")    local se_obj49 = alife():object("vehicle_black_moskvitch")    local se_obj50 = alife():object("vehicle_kamaz_military")    local se_obj51 = alife():object("vehicle_avtobus_icarus")    local se_obj52 = alife():object("vehicle_lada2103")    local se_obj53 = alife():object("vehicle_black_moskvitch")    local se_obj54 = alife():object("vehicle_zil130_no_kuzov")    local se_obj55 = alife():object("vehicle_camo_btr")	    if se_obj then        alife():release(se_obj, true)    end    if se_obj2 then        alife():release(se_obj, true)    end    if se_obj3 then        alife():release(se_obj, true)    end    if se_obj4 then        alife():release(se_obj, true)    end    if se_obj5 then        alife():release(se_obj, true)    end    if se_obj6 then        alife():release(se_obj, true)    end    if se_obj7 then        alife():release(se_obj, true)    end    if se_obj8 then        alife():release(se_obj, true)    end    if se_obj9 then        alife():release(se_obj, true)    end    if se_obj10 then        alife():release(se_obj, true)    end    if se_obj11 then        alife():release(se_obj, true)    end    if se_obj12 then        alife():release(se_obj, true)    end    if se_obj13 then        alife():release(se_obj, true)    end    if se_obj14 then        alife():release(se_obj, true)    end    if se_obj15 then        alife():release(se_obj, true)    end    if se_obj16 then        alife():release(se_obj, true)    end    if se_obj17 then        alife():release(se_obj, true)    end    if se_obj18 then        alife():release(se_obj, true)    end    if se_obj19 then        alife():release(se_obj, true)    end    if se_obj20 then        alife():release(se_obj, true)    end    if se_obj21 then        alife():release(se_obj, true)    end    if se_obj22 then        alife():release(se_obj, true)    end    if se_obj23 then        alife():release(se_obj, true)    end    if se_obj24 then        alife():release(se_obj, true)    end    if se_obj25 then        alife():release(se_obj, true)    end    if se_obj26 then        alife():release(se_obj, true)    end    if se_obj27 then        alife():release(se_obj, true)    end    if se_obj28 then        alife():release(se_obj, true)    end    if se_obj29 then        alife():release(se_obj, true)    end    if se_obj30 then        alife():release(se_obj, true)    end    if se_obj31 then        alife():release(se_obj, true)    end    if se_obj32 then        alife():release(se_obj, true)    end    if se_obj33 then        alife():release(se_obj, true)    end    if se_obj34 then        alife():release(se_obj, true)    end    if se_obj35 then        alife():release(se_obj, true)    end    if se_obj36 then        alife():release(se_obj, true)    end    if se_obj37 then        alife():release(se_obj, true)    end    if se_obj38 then        alife():release(se_obj, true)    end    if se_obj39 then        alife():release(se_obj, true)    end    if se_obj40 then        alife():release(se_obj, true)    end    if se_obj41 then        alife():release(se_obj, true)    end    if se_obj42 then        alife():release(se_obj, true)    end    if se_obj43 then        alife():release(se_obj, true)    end    if se_obj44 then        alife():release(se_obj, true)    end    if se_obj45 then        alife():release(se_obj, true)    end    if se_obj46 then        alife():release(se_obj, true)    end    if se_obj47 then        alife():release(se_obj, true)    end    if se_obj48 then        alife():release(se_obj, true)    end    if se_obj49 then        alife():release(se_obj, true)    end    if se_obj50 then        alife():release(se_obj, true)    end    if se_obj51 then        alife():release(se_obj, true)    end    if se_obj52 then        alife():release(se_obj, true)    end    if se_obj53 then        alife():release(se_obj, true)    end    if se_obj54 then        alife():release(se_obj, true)    end    if se_obj55 then        alife():release(se_obj, true)    endend

Odnośnik do komentarza
Udostępnij na innych stronach

Każda nazwa odnosi się do konkretnego obiektu, nie wiem jak rozwiązano spawn, tzn. czy jest rozbity na all.spawn + dmx_cars.script, czy tylko skryptem...Twój skrypt jest zbyt rozbudowany jak na test, najpierw powinieneś zrobić próbę z jednym z pojazdów z listy, pamiętając że mają to być obiekty usuwane z jednej lokacji - j/w pisałem.

 

Ja bym zrobił inną konstrukcję skryptu - częściowy:

 

function usun_samochod()  local se_obj = alife():object("vehicle_kamaz_no_kuzov")  if se_obj then    alife():release(se_obj, true)  end  local se_obj = alife():object("vehicle_moskvitch")  if se_obj then    alife():release(se_obj, true)  end  local se_obj = alife():object("vehicle_niva_white")  if se_obj then    alife():release(se_obj, true)  end  local se_obj = alife():object("vehicle_school_avtobus")  if se_obj then    alife():release(se_obj, true)  endend 

Dobrze by było, jakby jakiś doświadczony modder sprawdził całość, ale wpierw zrób test dla jednego pojazdu z kordonu sprawdzając czy funkcja jest prawidłowo wywoływana.

  • Dodatnia 2
Odnośnik do komentarza
Udostępnij na innych stronach

Nie wiem dlaczego skrypt nie usuwa tych pojazdów? - powinien likwidować obiekt, zróbmy tak: w pliku dmx_cars.script odpowiadającym za spawn pojazdów [nie mam DMX'a więc zakładam powyższe], zmień spawnowane obiekty z samochodów na inne, np apteczkę naukowców. Pisałeś, że struktura spawna przedstawia się następująco:

 

function car_spawn() alife():create("vehicle_actor_btr",vector():set(-162.542,-30.264,-356.309),87065,31) 

Zmień "vehicle_actor_btr" na "medkit_scientic" -dając w każdej sekcji zamiast samochodu - apteczkę naukowców. Skrypt zespawnuje na zadanych współrzędnych obiekt określony skryptem...mam nadzieję że w DMX'ie występuje taki przedmiot o takiej specyfice, jakbyś miał wątpliwości sprawdź w items.ltx obiekt [medkit_scientic].

P.S wiem, że pomysł jest dziwny, ale jeśli będzie działał w miejscu pojazdów pojawią się apteczki. Jeśli to nie zadziała, wówczas podeślesz mi spakowany folder script z DMX'a...przerób sekcje i daj znać - będziemy myśleć jak rozwiązać problem. 

  • Dodatnia 2
Odnośnik do komentarza
Udostępnij na innych stronach

No więc zrobiłem tak jak napisałeś, odpalam grę i idę do najbliższego miejsca gdzie stał pojazd i oto co widzę

ss_kamo_04-01-13_17-30-12_l01_escape.jpg

Kombinowałem jak mogłem a tu wystarczyło zrobić coś takiego... Dzięki  monthly_2015_05/smile.png.a202b72868214cf5a7fbbf898d563411.png Jeden problem z głowy. Ale i tak dużo pracy jeszcze przede mną. Jeszcze raz dzięki i aż mi głupio że na to nie wpadłem  monthly_2015_05/biggrin.png.587d3ec922bb099723c6a96331fd019c.png

Odnośnik do komentarza
Udostępnij na innych stronach

Cieszy mnie że sposób działa, natomiast pojazdy zawarte w all.spawn trzeba będzie usunąć, wcześniej znając ich oznaczenia i lokalizując je - nie ma ich dużo w solijance, a piszę o niej bowiem DMX jest nakładką/rozszerzeniem Soli, jeśli wykonano spawn za pomocą skryptu - oznacza to, że nie ingerowano w all.spawn [pojazdy] dla lokacji pierwotnych -chociaż mogę się mylić. Natomiast co do tego tematu, uaktualnij dla pkt.3 - screenami, pkt. 2 - omówiony, pozostają pkt. 1 -wrzuć spakowany folder scripts + screen z rozmowy dot. wymiany, jeśli chodzi o pkt.4 - nie mam pojęcia [widać wyraźny spadek poziomu trudności czy tylko z opisu tak wynika?].

Odnośnik do komentarza
Udostępnij na innych stronach

Dobra, to już kontynuuję w tym temacie najwyżej...
 

Do pkt. 3 
Dotyczy to też wiadomości kiedy otrzymuję info o nowym przejściu.

Spoiler

ss_kamo_03-30-13_01-14-38_l01_escape.jpg

ss_kamo_03-30-13_01-08-56_l01_escape.jpg

ss_kamo_03-30-13_11-44-19_l02_garbage.jpg

 

Do pkt. 4

Widać spadek trudności. Na wysypisku ginę od dwóch strzałów z pistoletu a w później przyjmuję na siebie prawie pół magazynka z automatu i jeszcze stoję. W opcjach sprawdzam i jest na początkującym zamiast na mistrzu... W sumie jeśli dobrze myślę to można zmienić obrażenia na taką samą wartość dla każdego poziomu trudności.

 

Screeny do pkt. 1 zaraz zrobię i wrzucę razem z folderem scripts

 

folder scripts ---> http://sendfile.pl/296640/scriptsDMX.rar

 

screeny:

jeden jest w agropromie drugi oczywiście na kordonie...

Spoiler

ss_kamo_04-01-13_21-37-45_l03_agroprom.jpg

ss_kamo_04-01-13_21-41-53_l01_escape.jpg

 

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chodzi o pkt.3 - sprawdziłem te skrypty pod kątem frazy send_tip [wiadomości sms], ale nie doszukałem się braku spolszczenia, natomiast wszystkie sekcje zawierające "--" są wyłączone, więc nie ma potrzeby ich przerabiać, ponieważ nie są uwzględniane w wysyłaniu wiadomości. Tych skryptów jest 263 szt., sprawdzenie tego pod kątem frazy ze screen'a przekracza moje możliwości pod kątem wolnego czasu, próbowałem szukać po frazie RIA-10, która występuje w wiadomości na screenie, ale jest to albo wiadomość łączona albo jej źródło leży poza skryptem, chociaż - mam wrażenie, że opcja 1 jest właściwa. Tutaj zapytaj ekipy polonizacyjnej, gdzie szukać właściwego pliku. Zwróć uwagę jakiego działania dotyczy nadesłana wiadomość. Jeśli masz dobry sprzęt - zrób kopię folderu scripts i szukaj fraz ze screen'ów, tylko - wpisać ją nie będzie łatwo z uwagi na znaki, ale czasu zaoszczędzisz otwierając wszystkie pliki jednocześnie - ja używam Notepad++ i szukam fraz symultanicznie.

Co do pytania 1:

- po nitce do kłębka:

  • znajdujesz postać oferującą wymianę
  • szukasz sekcji dialogu, w przypadku Szerstiuka <actor_dialog>trade_dialog_sherstyk</actor_dialog> w przypadku Kuzniecowa [jego przypadek rozpatrzymy] plik character_desc_escape.xml <actor_dialog>trade_dialog_kuznezov</actor_dialog>
  • szukasz po frazie trade_dialog_kuznezov [w katalogu gamedataconfiggameplay] -pliku: dialogs_trading.xml. Napotkasz drzewo dialogowe a w min wiersz <dialog id="trade_dialog_kuznezov"> w tej sekcji dochodzimy do wywoływanej funkcji:

 

<phrase id="221">            <precondition>sak_dialog.have_3vodka</precondition>			    <text>trade_dialog_kuznezov_221</text>                <action>sak_dialog.give_3vodka</action>                <action>sak_dialog.add_5ammo_5_45_fmj</action>		    </phrase> 

Powyżej istotna informacja - plik sak_dialog i funkcja have_3vodka oraz w tym samym pliku give_3vodka. Oczywiście nie jest to koniec, jeśli przejrzysz drzewo dialogowe są tam również funkcje have_10vodka, give_10vodka oraz inne, na pewno znajdziesz, wszystko w jednym pliku, więc:

  • w gamedatascripts znajdujesz sak_dialog.script a w nim szereg funkcji dotyczacych wymiany za wódkę, rozpatrzmy have_3vodka:
function have_3vodka()    return sak.have_item_namber("vodka",3) ~= falseend 

Powyżej mamy przedmiot zdefiniowany nasza ukochana "vodka" oraz ilość szt, po przecinku...tutaj już wiesz

  • rozpatrujemy drugą cześć give_3vodka, czyli:
function give_3vodka()    sak.out_item_namber("vodka",3)end 

Powyżej te same składniki skryptu, jeśli w DMX'ie jest więcej rodzajów wódki? - wpisujesz pomiędzy " " - żądany przedmiot w odpowiedniej ilości. Pozostałe sekcje robisz analogicznie.

Pamiętaj: zrób kopię modyfikowanych plików!

P.S Jak już sprawdzisz czy działa, napisz.

  • Dodatnia 2
Odnośnik do komentarza
Udostępnij na innych stronach

Przeszukując skrypty, natknąłem się na plik difficulty_manager.script, sprawdziłem w pozostałych 262 plikach  - gdzie występują wpisy odnoszące się do frazy "difficulty_manager".

Sam plik w/w zawiera funkcję:

       	 if deathCount ~= nil then                if string.len(lastDate) == 8 then                    if deathCount >= deathCountLimitDown then                        if difficultyNumber > 0 then                            amk.send_tip("%c[255,0,255,0]Poziom umiejętności stalkera Naznaczony nie odpowiada danym warunkom. Zmniejszenie poziomu trudności.%c[default]", "SIEĆ LOKALNA", 0, 15, "gen_info")                            difficultyNumber = difficultyNumber - 1                        else                            amk.send_tip("%c[255,0,255,0]Poziom umiejętności stalkera Naznaczony nie odpowiada danym warunkom. Łatwiej już się nie da!%c[default]", "SIEĆ LOKALNA", 0, 15, "gen_info")                        end                                                --clear statistics                        local f1 = f:update_path("$game_saves$", fileName)                        local f2 = f:update_path("$game_saves$", "death_"..dateNow.."_0.sta")                        f:file_rename(f1, f2, true)                    else                        if lastDate ~= dateNow then                            if deathCount <= deathCountLimitUp then                                if difficultyNumber < 3 then                                    amk.send_tip("%c[255,0,255,0]Poziom umiejętności stalkera Naznaczony jest zbyt wysoki dla bieżących warunków. Zwiększenie poziomu trudnośći Zony.%c[default]", "SIEĆ LOKALNA", 0, 15, "gen_info")                                    difficultyNumber = difficultyNumber + 1                                else                                    amk.send_tip("%c[255,0,255,0]Poziom umiejętności stalkera Naznaczony jest zbyt wysoki dla bieżących warunków. Ale trudniej już się nie da! Odpuść trochę.%c[default]", "SIEĆ LOKALNA", 0, 15, "gen_info")                                end                                                                --clear statistics                                local f1 = f:update_path("$game_saves$", fileName)                                local f2 = f:update_path("$game_saves$", "death_"..dateNow.."_0.sta")                                f:file_rename(f1, f2, true)                            end                        end                    end                else                    amk.send_tip("%c[255,0,255,0]Kto mieszał w moich statystykach ? Znajdę - ukarzę !!!%c[default]", "Śmieciarz", 0, 15, "gen_info")                                        --clear statistics                    local f1 = f:update_path("$game_saves$", fileName)                    local f2 = f:update_path("$game_saves$", "death_"..dateNow.."_0.sta")                    f:file_rename(f1, f2, true)                end            else 

z której wynika, iż obniżenie poziomu trudności następuje w skutek licznych zejść śmiertelnych Naznaczonego, warto zapoznać się z wierszem amk.send_tip, w którym stosowny komentarz generuje funkcja w/w, abstrahując od dywagacji nad skryptem, wcześniejsza fraza ma odwołanie w plikach:

  • bind_stalker.script  poprzez difficulty_manager.deathStatCollect()
  • netpacket_pda_binder.script poprzez difficulty_manager.deathStatChangeDifficulty()

powyżej wypunktowane odwołania funkcji należy od-komentować, stawiając --  przed wpisem czyli:

--difficulty_manager.deathStatCollect()

oraz

--difficulty_manager.deathStatChangeDifficulty()

W ten sposób wyłączysz linię z użycia, natomiast problem ze zmianą poziomu trudności nie tylko Ty miałeś, poszukałem trochę i znalazłem Tutaj potwierdzenie[szukaj frazy Найди и закомментируй] oraz  strona GSC [szukaj Disable Auto Difficulty Mod] przypuszczeń.Powinno działać - skoro 2 niezależne fora podają te same info. Wiesz co masz robić, jak przetestujesz - odpisz.

P.S - myślę, że dobrze będzie jak zgłosisz moderatorowi poprzedni temat, skoro już tutaj przeniosła się dyskusja, ewentualnie edytuj pierwszy post i tam umieść pytania z tematu.

  • Dodatnia 2
Odnośnik do komentarza
Udostępnij na innych stronach

Sprawdziłem, działa. Dalej jest na mistrzu pomimo wielu śmierci Naznaczonego. Ale teraz taka sprawa. Modyfikuję parametry wymiany wszystkim postaciom które się tym zajmują i natrafiłem w pliku na coś takiego.

 

function kolbasa2_have()  	return sak.have_item_namber("kolbasa",2) ~= false end

 

 

podczas gdy załatwiałem sprawę dotyczącą wymiany z wódkami wyglądało to tak

 

function have_2vodka()	return sak.have_item_namber("vodka",2) ~= falseend

 

Czy wpis po function który jest w innej kolejności może powodować jakieś problemy czy nie będzie to mieć znaczenia?

Edytowane przez Radrif
Odnośnik do komentarza
Udostępnij na innych stronach

Kolejność jak najbardziej ma znaczenie, ponieważ do wpisu występującym po function czyli kolbasa2_have, będziemy się odwoływali podczas dialogu poprzez <action>.........</action>. Tak jak pisałem powyżej w poście #14, jeśli konstruujesz funkcję  - zwracasz uwagę na:

  • wpis aktywujący funkcję [dialog] czyli <action>sak_dialog.give_3vodka</action>

gdzie: sak_dialog  - odwołuje do pliku sak_dialog.script

    give_3vodka  - odwołuje do funkcji.

 

Jeśli zmieniasz kolejność, to zmieniasz również oznaczoną na czerwono część w <action>....</action>.

 

Edit: najważniejsze są przedmioty określone w funkcji, te zmieniasz, podobnie jak z zamianą pojazdów na apteczkę - pozostałej części nie ruszałeś, bo musi być zgodna z tym co zawiera wywołujący ją wpis w drzewie dialogowym. Dla pewności - poszukaj w plikach .xml wpisów odnoszących się do plików skryptu. Generalnie oznaczone na czerwono

wpisy z .xml = wpisy .script
  • Dodatnia 2
Odnośnik do komentarza
Udostępnij na innych stronach

Dobra, poprzednia sprawa zrobiona. Dałoby się zrobić tak żeby każde zadanie NS było wyświetlane w sekcji zrobione zadania w statystykach? Mam na myśli, żeby były za nie doliczane punkty do statystyk. Jeśli dobrze rozumuję to głównym plikiem byłoby gamedata/config/misc/task_manager.ltx, a w nim sekcja odpowiadająca za naliczenie punktów czyli reward_rank. Cały sęk w tym, że trzeba byłoby je tam wszystkie podopisywać. Ale czas mam więc nie byłby to problem. Znalazłem pliki dotyczące nowych zadań między innymi w:

 

gamedata/config/gameplay/tasks.new.xml, tasks.wawka.xml, tasks.flame.xml, game.tasks.xml

 

Na pewno tych plików będzie więcej, do edycji również (w tym chyba jakieś związane z pda), lecz chcę wiedzieć czy idę dobrym tropem...                                               

Odnośnik do komentarza
Udostępnij na innych stronach

@Radrif

Cały problem polega na tym, że w Solijance większość zadań opiera się nie na pliku task_manager.ltx, w którym z łatwością można edytować wpisy odpowiedzialne za reputację - jak zauważyłeś reward_rank, ale na skryptach - które odnoszą się do wpisów w gamedataconfigmisc  -  arhara_items.ltx. Są tam zawarte przedmioty, za pomocą których - znajdziesz właściwy skrypt [funkcję odpowiadającą za spawn], ale tych zadań jest zbyt dużo, by omówić tutaj sposób ich przerobienia. Wpierw skorzystaj z tego poradnika odnośnie zasadniczych typów zadań. W plikach .xml, o których wspominasz są konstrukcje dialogów, jednakże nie odpowiadają one za szukane przez Ciebie wpisy. Szukaj fraz z pliku -folder misc arhara_items.ltx [przedmiotów kwestowych] w katalogu skryptów scripts.

 

Edit: Pamiętaj że swoje porady opieram na Soliance, dlatego plików definiujących przedmioty może być więcej.

Edytowane przez The Emperor
  • Dodatnia 2
Odnośnik do komentarza
Udostępnij na innych stronach

Znalazłem coś takiego w pliku info_flamequest.xml

 

 

<info_portion id="flamethrower_quest_start">
<task>flamethrower_quest_task</task>
</info_portion>
 
I porównując do pliku task_manager.ltx wygląda na to że pogrubiony wpis pasowałby by go tam wpisać. Tylko czy mam rację czy nie? I teraz przykładowo wygląda to tak:
 
[flamethrower_quest_task]type = storylinereward_rank = 1

 

 

Robię taki wpis ale czy type = storyline chyba też będę musiał zmienić?

 

EDIT: Bardzo sporo wpisów typu <task></task> znalazłem w pliku info_arhara_way.xml więc mam nadzieję, że to jest to. Pliki z gamedata/config/gameplay

Edytowane przez Radrif
Odnośnik do komentarza
Udostępnij na innych stronach

Idziesz złym tropem...plik info_flamequest.xml, zawiera aktywatory dialogu, tzn. określona informacja której dodanie bądź brak - powoduje aktywację dialogu lub jego usunięcie, tak - by nie doszło do sytuacji, że jedno zadanie wykonujesz w nieskończoność.

Wersja rozbudowana:

 

Rozpatrując w/w plik mamy:

    <info_portion id="flamethrower_quest_start">        <task>flamethrower_quest_task</task>    </info_portion> 

wiersz <task>flamethrower_quest_task</task> odsyła do pliku  tasks_flame.xml [gamedataconfiggameplay] w którym wyszukiwana fraza odnosi się do zadania:

<game_task id="flamethrower_quest_task">    <title>Znaleźć przyrządy do naprawy miotacza ognia.</title>    <objective>        <text>Znaleźć przyrządy do naprawy miotacza ognia.</text>        <icon>amk_ui_flame_quest</icon>        <article>mil_screw_flamethrower_descr</article>        <infoportion_complete>game_over</infoportion_complete>        <infoportion_fail>mil_freedom_member0002_umer</infoportion_fail>    </objective>    <objective>        <text>Znaleźć artefakt "Ognista Kula"</text>        <infoportion_complete>flamethrower_quest_fireball</infoportion_complete>    </objective>    <objective>        <text>Znaleźć rurki</text>        <infoportion_complete>flamethrower_quest_trubki</infoportion_complete>    </objective>    <objective>        <text>Znaleźć manometr(czujnik ciśnienia)</text>        <infoportion_complete>flamethrower_quest_manometr</infoportion_complete>    </objective>    <objective>        <text>Znaleźć palnik</text>        <infoportion_complete>flamethrower_quest_gorelka</infoportion_complete>    </objective>    <objective>        <text>Znaleźć 10 butelek wódki</text>        <infoportion_complete>flamethrower_quest_vodka</infoportion_complete>    </objective>    <objective>	    <map_location_type hint="mil_Svoboda_engineer">blue_location</map_location_type>	    <object_story_id>mil_Svoboda_engineer</object_story_id>        <text>Przynieść części Wkrętowi.</text>        <infoportion_complete>game_over</infoportion_complete>    </objective></game_task> 

Pliki są powiązane, zauważ że przykładowy wpis w w/w wycinka:

<infoportion_complete>flamethrower_quest_trubki</infoportion_complete>

Można odnaleźć w info_flamequest.xml, jako informacja o skompletowaniu komponentów składających się na całość zadania.

Na podstawie frazy flamethrower skupiamy się na odnalezieniu dialogu u właściwej postaci: <dialog id="mil_screw_flamethrower"> [gamedataconfiggameplay plik:dialogs_flamequest.xml, wpierw sprawdzając drzewo dialogowe, szukamy funkcji:

Poniżej wycinek:

           	 <give_info>flamethrower_quest_start</give_info>                <action>flamethrower.spawn_parts</action>			    <text>mil_screw_flamethrower_1010</text>			    <action>dialogs.break_dialog</action> 

gdzie:

  • flamethrower_quest_start - donosi się do info_flamequest.xml,
  • flamethrower.spawn_parts  - plik skryptu flamethrower, spawn_parts - funkcja odpowiadająca za spawn.
  • dialogs.break_dialog - dopowiada za przerwanie dialogu, tak by się nie zapętlał.

Postać posiadająca dialog, to mil_Svoboda_engineer z pliku character_desc_military.xml. ale jest on rozbity na części, przykładowa sekcja:

<actor_dialog>parts_completed3</actor_dialog> 

A odnaleźć ją można w dialogs_flamequest.xml, o której powyżej pisałem.

Mówiąc szczerze, wziąłeś jedno z najbardziej skomplikowanych z uwagi na budowę - zadań, dlatego analiza każdego z elementów - wymaga napisania tutoriala, na co nie mam czasu.

 

Wersja skrócona: chcąc zmienić rangę, nie dopisujesz zadania do task_manager.ltx, ponieważ jest ono (jak większość) - oparte o skrypt, więc w plikach .script, szukasz funkcji odnoszących się do zadania, a najłatwiej zrobić to szukając drzewa dialogowego, ponieważ z niego skrypt jest aktywowany.

  • Dodatnia 2
Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 tygodnie później...

Znów jest trochę czasu do roboty więc ostatnie sprawy...  Dałoby się zrobić (znaczy raczej na pewno się da :biggrin: ) tak żeby muzyka na lokacji się zmieniała w zależności od czasu? Chodzi mi o to, żeby było tak jak w Czystym Niebie i Zewie Prypeci (06.00 - 22.00 i 22.00 - 06.00), czyli w godzinach nocnych załączał się ten "straszniejszy" soundtrack  :tongue: Brakuje mi tu tego... I gdzie mogę znaleźć nazwy anomalii? Bo wolałbym zespawnować jakąś anomalię na miejsce tych apteczek (no dawniej pojazdów...) i ja albo jestem ślepy albo nie wiem bo szukam, szukam i szukam...

 

Z tym powyżej nie mogę sobie dać rady ale nie jest mi to potrzebne do szczęścia, a widzę że nie masz czasu a ja to rozumiem. I tak się dziwię, że chciało Ci się pomagać mi z tym wszystkim  :smile:

Edytowane przez Radrif
Odnośnik do komentarza
Udostępnij na innych stronach

Teoretycznie opcja powinna być dostępna. W pliku game_levels_music.ltx

mamy przykładowy wpis:

[l01_escape_musics]musicamb01                    =  6, 22,   0.2,   20, 40musicamb20                    = 22, 6,    0.2,   20, 40

Wpis amb01 - to dźwięk w godzinach 6-22, natomiast amb20 - godziny 22 do 6.

Zew Prypeci - ten sam plik i przykład:

[zaton_musics]musiczaton_day               = 5, 22,     0.5,   2, 4musiczaton_night             = 22, 5,     0.4,   1, 2

zmienione są tylko godziny, ale nie wiem co znaczą pozostałe parametry.

Muzyka znajduje się również w pliku game_maps_single.ltx, gdzie jest konkretny utwór dla lokacji - przykładowo:

[l01_escape]texture		 = mapmap_escapebound_rect	  = -317.164, -633.718, 404.880, 811.627global_rect        = 355.0,2011.0,    576.0,2453.000000weathers        = cordonmusic_tracks    = l01_escape_musics

Generalnie jest jeszcze taka konfiguracja - pod Shoc:

[level_music_tracks]musicamb01        = 0, 12, 0.5, 10,20musicamb03        = 0, 12, 0.5, 10,15musicamb07        = 12,24, 1.0, 5, 25

Jednakże nie zawiera tych samych wpisów co wymienione na początku tego posta, być może tutaj trzeba dodać wpisy zgodne z powyższymi - w level_music_tracks [lokalizacja gamedataconfig]....? Nie sprawdzałem tego.

 

 

Jeśli chodzi o anomalie, to znajdziesz je w gamedataconfigmisc

Są to nazwy gotowe do wpisania - wszystko zawarte w odpowiednich plikach .ltx

- zone_ameba- zone_burning_fuzz- zone_zavesa- zone_sphere- zone_smallrain- zone_sakbuzz- zone_radioactive- zone_no_gravity- zone_mosquito_bald- zone_monolith- zone_mincer- zone_ice- zone_gravi_zone- zone_fountain- zone_buzz- zone_zharka_static

Muzykę musisz sprawdzić modyfikując game_maps_single.ltx, natomiast anomalie rozgryziesz po nazwie, ewentualnie sprawdzając pliki.

  • Dodatnia 2
Odnośnik do komentarza
Udostępnij na innych stronach

A jeśli chodzi o muzykę w radiu? I czy jest jakieś inne rozwiązanie na spanie po "czasie strachu" niż tylko to "lekarstwo na jaki sen jest strasznie"? Bo w sumie wolałbym żeby "czas strachu" został, ale jak nie ma innego rozwiązania to trudno, niech zostanie jak jest  :wink: No i to powinna być ostatnia sprawa w najbliższym czasie. Chodzi o statystyki... Mianowicie zamieniłem plik odpowiadający za naliczanie z OL Ultimate i wygląda to tak

 

1. stalker jakiś tam          x3 <--- ilość zabitych           1

 

(3x1 daje 3 punkty za 3 zabitych, czyli tak jak chcę)

 

gdzie wcześniej wyglądało tak

 

1. stalker jakiś tam          x3                  9

 

W tym wypadku w oryginalnym pliku jeden zabity stalker naliczał 3 "punkty", i byłoby w porządku gdyby te 9 punktów było naliczane w rankingu. Ale zamiast 3x3 było 3x9 co dawało 27 zamiast prawidłowych 9. I to jest rozwiązane. Podobny problem mam w zadaniach. Rangę za każde zadanie zmieniłem na 1 (coś przeczuwałem, że to zbyt łatwe) i zamiast być

 

x4        1

 

po wielokrotnym wzięciu i zaliczeniu zadania wygląda

 

x4         4

 

co daje 16 (zamiast 4 według tego jak ja chciałbym żeby te "punkty" naliczało) i nieco "psuje" jak dla mnie statystyki. I tu nie potrafię znaleźć fragmentu odpowiadającego za naliczanie tak jak w przypadku powyżej.                          

 

 

To nie musi być na teraz :smile: I w końcu DMX zaczyna być taki jaki chcę  :tongue:

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Korzystając z tej strony, zgadzasz się na nasze Warunki użytkowania.