Skocz do zawartości

The Emperor

Zasłużony
  • Postów

    622
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    57

Odpowiedzi opublikowane przez The Emperor

  1. Sposób I (więcej przeróbek).

    Porada powinna być skuteczna jeśli masz "pierścień najemnika".

    • robisz dowolny zapis z dala od "Wolności".
    • edytujesz plik wg. wskazówek z posta nr. 2
    • wczytujesz zapis.
    • wybierasz się na inną (niż Magazyny Wojskowe np. Bar) lokację.
    • zapisujesz grę.
    • wczytujesz save i wybierasz się na Magazyny Wojskowe.
    • status frakcji powinien się zmienić.

    Całość powinna opierać się na zmodyfikowanej wersji pliku.

     

    Sposób II. (łatwiejsze wykonanie).

    • w katalogu gamedatascripts tworzysz plik skryptu: xyz.script
    • w pliku umieszczasz funkcję następującą:
      function set_friends()	relation_registry.set_community_goodwill ("freedom", db.actor:id (), 5000)end
    • w pliku bind_stalker.script dodajesz wpis poniżej wiersza:

      object_binder.update(self, delta)

      jest to wywołanie funkcji set_friends utworzonej w pkt. 2, dopisujesz poniższą linijkę:

      xyz.set_friends()

      aby ułatwić spojrzenie na kwestię dodania wpisu, przykład (zawartość na screenie pochodzi z CoP'a, gdzie innemu forumowiczowi pomagałem w umiejscowieniu właściwego wpisu, dlatego wpisy będą się różnić od wersji z Solijanki) gdzie dodać wpis - patrz screen

      Dołączona grafika

    • po wczytaniu gry - bez zmiany lokacji powinna nastąpić poprawa reputacji.

    Warunkiem zmiany jest jednak brak przynależności do frakcji wrogiej w stosunku do "Wolności" - np. przynależność do Monolitu etc. Wartość 5000 zadaną w funkcji możesz zmienić na wyższą. Sposób testowałem chwilę temu, specjalnie ostrzeliwując przyjacielskie jednostki, by następnie zmienić reputację z wrogiej na neutralną. Pamiętaj, że jedynym plikiem jakiego kopię należy wykonać jest bind_stalker.script.

    • Dodatnia 1
  2. Podrzuć mi plik bind_stalker.script do przerobienia. Jeśli chcesz samemu dokonać edycji plików, musisz wiedzieć o pewnej kwestii tj. zachowaniu ciągłości danej funkcji w pliku.  Zawsze określona funkcja zaczyna się od wpisu: function, zaś kończy na wpisie end. Czasami jednak w funkcję główną (oznaczyłem czerwonym kolorem na screen'ie) wkomponowane są pod-funkcje (oznaczone kolorem błękitnym) zaczynające się od if, wówczas również kończyć się one będą wpisem end. W konsekwencji wpisów mamy bardzo dużo, czasem więcej niż 100 linijek tekstu przy rozbudowanych funkcjach. Zobacz zaznaczone na screenie parametry początkowe i końcowe funkcji:

    Dołączona grafika

    Zaznaczyłem Ci miejsce dodania wpisu w górnej części screen'a - generalnie chodzi o umieszczenie wpisu w funkcji głównej, ale tak aby nie doszło do naruszenia struktury pod-funkcji, w których zasadą jest, aby każdemu wpisowi rozpoczynającemu się od if towarzyszyła równorzędna ilość wpisów end. Na screenie zaznaczyłem Ci struktury pod-funkcji, jednakże zescreen'owany plik bind_stalker.script pochodzi z innej wersji, niż używana przez ciebie, przeto poszczególne wpisy mogą być różne, kieruj się jednak sugestiami zawartymi w screen'ie.

    • Dodatnia 1
  3. @ƉƐϼД

    sprawdziłem sound-mod'a dopiero dziś i jestem rad z faktu wydania go, bowiem prezentuje się znacznie lepiej niż vanill'owa oprawa dźwiękowa. Jednakże jest pewna część wymagająca uzupełnienia - jak mawiał Lebiediew:

    w każdej beczce miodu znajdzie się łyżka dziegciu

    dźwięki nie są skomentowane, tzn. brakuje konfiguracji zapewniającej właściwą reakcję NPC'ów. Akurat pomijasz dźwięki broni dlatego w kontekście braku komentarza .ogg sytuacja nie wymaga interwencji. W przypadku dźwięków broni - AI przeciwnika interpretuje wystrzał z broni zapewniając lepszą reakcję na zagrożenie, ale podstawą do tego jest komentarz .ogg do pliku. Poradniki mogące ułatwić dodawanie komentarza znajdziesz: tutaj oraz tu (możesz sprawdzić również ten link). Generalnie przypominam o tym w przypadku chęci rozbudowywania R.L.S'a. Log w sytuacji braku komentarza daje info:

    ! Missing ogg-comment, file:  d:stalker is.t.a.l.k.e.r. - shadow of chernobylgamedatasoundsdetectorscontact_1.ogg! Missing ogg-comment, file:  d:stalker is.t.a.l.k.e.r. - shadow of chernobylgamedatasoundsdetectorscontact_8.ogg! Missing ogg-comment, file:  d:stalker is.t.a.l.k.e.r. - shadow of chernobylgamedatasoundsinterfaceinv_open.ogg! Missing ogg-comment, file:  d:stalker is.t.a.l.k.e.r. - shadow of chernobylgamedatasoundsinterfaceinv_close.ogg! Missing ogg-comment, file:  d:stalker is.t.a.l.k.e.r. - shadow of chernobylgamedatasoundsinterfaceinv_slot.ogg! Missing ogg-comment, file:  d:stalker is.t.a.l.k.e.r. - shadow of chernobylgamedatasoundsinterfaceinv_belt.ogg! Missing ogg-comment, file:  d:stalker is.t.a.l.k.e.r. - shadow of chernobylgamedatasoundsinterfaceinv_ruck.ogg! Missing ogg-comment, file:  d:stalker is.t.a.l.k.e.r. - shadow of chernobylgamedatasoundsinterfaceinv_properties.ogg! Missing ogg-comment, file:  d:stalker is.t.a.l.k.e.r. - shadow of chernobylgamedatasoundsinterfaceinv_drop.ogg

    nie jest to błąd krytyczny, ale warto mieć na uwadze konieczność komentowania plików .ogg - zwłaszcza dla odgłosów broni (w przypadku gdybyś zmienił zdanie) czy dźwięków NPC/mutantów. Pozdrawiam

    • Dodatnia 1
  4. Nie mam na dysku tego moda, więc jedyna rada której mogę udzielić - prócz edycji plików handlarzy, to:

    • Zrobić kopię pliku bind_stalker.script
    • do kopii w/w pliku dodać wpis poniżej następującej sekcji:
      function actor_binder:update(delta)object_binder.update(self, delta)

      dopisać należy funkcję:

      if not db.actor:object("af_fire") then	alife():create("af_fire", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())end
    • af_fire - to identyfikator "artefaktu Płomień" z pierwotnej wersji gry.
    • po wprowadzeniu zmian i wczytaniu zapisu z edytowanym plikiem powinien nastąpić spawn artefaktu w ekwipunku.
    • Mając artefakt - robisz save i wychodzisz z gry.
    • przywracasz oryginalny plik bind_stalker.script
    • wczytujesz zapis z artefaktem w ekwipunku.

    Sposób działa w Shoc, w CoP'ie nie sprawdzałem, więc liczę na potwierdzenie z Twojej strony - jeśli chcesz tym sposobem dodać przedmiot. Jeśli masz obawy co do modyfikacji pliku bind_stalker.script - wyślij mi go do przerobienia.

    • Dodatnia 1
  5. @Akmed1109

    Próbowałem pobrać ten patch mając nadzieję, że problem z download'em powoduje przeglądarka - były bowiem podobne problemy zgłaszane przez innych forumowiczów, niestety też mam błąd 404 przy próbie ściągnięcia patcha. Jedyne co mogę Ci poradzić to napisać do forumowiczów ostatnio grających w moda lub zainteresowanie userów na SB - być może ktoś ma patch na dysku i szybko go udostępni.

  6. Nie wiem jak dla innych graczy, ale dla mnie tajemnicą do czasu gry w Solijankę było sekretne pomieszczenie w bazie Bandytów na Dolinie Mroku, gdzie znaleźć można było Komputer z Anteną i Wideo-radiostacją dla Woronina. Mowa o tym miejscu, które pomimo wielu rozgrywek w Stalkera zawsze umykało mojej uwadze, chociaż uważałem się za gracza, który czyścił teren do ostatniego artefaktu, zbierał wszystkie schowki i parafrazując słowa Tommy Lee Jones'a z filmu "Ścigany" - przeszukiwał:

    ...każdą stację benzynową, każdy dom, magazyn, stodołę, kurnik, wychodek i każdą psią budę w okolicy..."

    jak widać Zona potrafi zaskoczyć...poniżej owe tajemnicze (przynajmniej w moim mniemaniu) miejsce:

    Dołączona grafika

    • Dodatnia 3
    • Negatywna 1
  7. @kamil190

    Staram się nie ingerować w posty forumowiczów w dziale nad którym sprawuję pieczę, dlatego popraw link do ściągnięcia aby zawierał protokół: 

    http://

    wstaw screeny w spoiler lub daj miniatury jak zostało przedstawione w oryginale na podanej przez Ciebie stronie. Hosting http://4put.ru/ na którym upload'owano screeny oferuje opcję miniatur dla forum w linku z 4 ramki wygenerowanej pod obrazkiem - przykład poniżej
     
    Dołączona grafika
    jest to screen o linku:

    [url=http://4put.ru/view-max-picture.php?id=2582764][img=http://4put.ru/pictures/small/840/2582764.jpg][/url]

    Nie obciążaj wczytywania strony dużą ilością screenów, jeśli masz zamiar wstawiać je w oryginale - stosuj spoiler, tyczy się to zarówno tego jak i innych tematów.

  8. @ MonoLityczny,

    zamiast pisać posty w stylu j/w powinieneś napisać jak rozwiązałeś problem i która z porad okazała się pomocna, dzięki temu forumowicze z podobnym problemem będą w stanie znaleźć konkretną informację zamiast błądzić "po omacku" szukając rozwiązania. Napisz jak poradziłeś sobie z błędem - taki post będzie miał znacznie większą wartość dla forumowiczów z podobnym logiem - pamiętaj że możesz pomóc innym w ten sposób.

    • Dodatnia 1
  9. Spróbuj uruchomić grę z parametrem  -nointro dodanym do skrótu gry, dodatkowo sprawdź grę z ustawieniami administratora. Gdyby to nie zadziałało, wówczas pozostaje re-instal gry - innej możliwości nie widzę, log urywa się na pliku xrRender_R3.dll, tak jakby brakowało w bibliotece jakiegoś pliku. Możesz oczywiście poczekać na inne sugestie - dobrze będzie jak dodasz albo jako załącznik, albo na dowolny hosting plików dxdiag. Jak gra spisuje się na innej grafice?

    • Dodatnia 1
  10. Można dodać przedmiot za pomocą skryptu, dodawałem w ten sposób item do Shoc - sposób powinien działać również w CoP'ie. Znajdź plik bind_stalker.script, odszukaj funkcję:

    function actor_binder:update(delta)object_binder.update(self, delta)

    poniżej dodaj wpis, ale tak aby nie przerywał innej funkcji:

    if not db.actor:object("device_pda_zat_b5_dealer") then        alife():create("device_pda_zat_b5_dealer", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())end

    identyfikator PDA Morgana: device_pda_zat_b5_dealer (przedmioty questowe - plik: quest_items.ltx). Zrób kopię pliku modyfikowanego. Po wprowadzeniu zmian wczytaj grę i sprawdź ekwipunek - jeśli pojawi się PDA, zrób save'a. Po całej operacji przywracasz oryginalny plik bind_stalker.script. Nie testowałem sposobu na CoP'ie, więc nie zagwarantuję sukcesu.

  11. Masz zainstalowany patch 1.6.0.2 i najnowsze sterowniki? Być może problem jest podobny jak ten zgłaszany przy C-Sky na DX10...Przeczytaj te posty (oraz linki w nich zawarte) : 1/2/3 i odpisz jak coś ustalisz, podobny błąd masz w logu z linku nr. 2.

    Jeśli znajdziesz w panelu sterowania:

    Update for Microsoft Windows (KB2670838)

    to odinstaluj w/w aktualizację. Silniki C-Sky i CoP są podobne, więc można spróbować zastosować rozwiązanie z C-Sky. Podobna sugestia dotycząca odinstalowania w/w aktualizacji - link.

    • Dodatnia 1
  12. @sławoMir32,

    zanim zainstalujesz wersję podejrzaną o brak kompletu plików na skutek ich złego wypakowania - wpierw spróbuj naprawić archiwum korzystając z tego poradnika. Zapytaj forumowiczów ile plików zawiera mod po wypakowaniu oraz jaki ma rozmiar na dysku?, aby zyskać pewność co do kompletu wszystkich wymaganych do gry plików. Zaoszczędzisz w ten sposób czas na rozwiązanie ewentualnych problemów z modem.

  13. Jeśli chcesz połączyć ten mod z innym - dodającym hud do kombinezonu, wówczas trzeba dostosować skrypt. W wersji uproszczonej (bez hud'a) pliki nie powinny kolidować z innymi (pomijam tu podstawową kwestię dostosowania moda). Sprawdzałem modyfikację na "czystej" wersji Shoc'a, trudno mi zatem stwierdzić jak wygląda sprawa ewentualnych błędów przy połączeniu z inną modyfikacją ingerującą w hud, w każdym razie wszystko jest rozpisane "od A do Z", więc osoby zainteresowane zaimplementowaniem moda w większej modyfikacji będą miały ułatwione zadanie.

  14. @Mithrandir,

    o tworzeniu artefaktu maski p-gaz był już temat, który jednak - jak sam twierdzisz jest niedostępny (dość nietypowy problem)...dlatego napiszę jeszcze raz z tą uwagą aby administracja nie usunęła wątku. Poprzednio podałem sposób na tworzenie artefaktu w wersji uproszczonej - bez hud'a maski przeciwgazowej, tym razem będzie inaczej a całość podzielę na 2 części wykonawcze - uproszczoną i zaawansowaną.

     

    I. Część uproszczona.

    [ 1 ]. W katalogu [gamedataconfigmisc] - odnajdujesz plik artefacts.ltx

    [ 2 ]. Robisz kopię w/w pliku oraz plików, które zamierzasz modyfikować (zwłaszcza jeśli planujesz usprawnić jakiś mod).

    [ 3 ]. Na samym dole pliku artefacts.ltx dodaj poniższy wpis, który podłączy nowy plik z artefaktami (maski p-gaz) do gry.

    #include "art_gasmask.ltx"

    w oryginalnym pliku z patcha 1.0004, wpis dodałem w linijce nr. 1373. Wpis nie powinien przerywać sekcji konfigurującej dany artefakt, dlatego najlepiej dodać go na samym dole pliku.

    [ 4 ]. Utwórz plik .ltx (zmiana rozszerzenia z .txt) o nazwie j/w czyli. art_gasmask.ltx, który umieszczasz w katalogu [misc]. W pliku tym utworzymy artefakty-maski p-gaz w ilości 3 szt. Dlaczego tyle? - ponieważ skrypt dodający hud autorstwa Thunder Freak'a jest skonfigurowany na 3 rodzaje masek p-gaz, co nie oznacza, że można mieć w grze tylko 3 maski, jednakże chcąc wprowadzić nowe sekcje trzeba zmodyfikować pliki skryptu.

    [ 5 ]. W nowo utworzonym pliku, dodajesz nowy artefakt, który stworzysz np. w oparciu o już istniejący np. af_fuzz_kolobok - artefakt Kulebiak. Możesz skopiować poniższe wpisy do tego pliku. - opisałem wszystkie parametry w postaci komentarza (polecam zapoznać się z opisem). Poniżej sekcje 3 masek p-gaz dla pliku art_gasmask.ltx :

    ; Artefakt maska pgaz/ sekcja 1[af_pgaz1]:af_baseGroupControlSection    = spawn_group$spawn		  = "artifactsfuzz kolobok"$npc		    = on    ; option for Level Editor;$prefetch	  = 3cform		   = skeletonclass		   = ARTEFACT visual		  = equipmentsgasmask3.ogf  ; model .ogf artefaktu - w tym przypadku ścieżka do modelu maski.description	 = enc_zone_artifact_af-fuzz-kolobox   ; opis artefaktuinv_name	    = af_mask_1 ; skrócona nazwa w ekwipunkuinv_name_short  =inv_weight	  = 0.35 ; waga artefaktu [kg] inv_grid_x	  = 12   ; współrzędna osi X na siatce pliku z ikonamiinv_grid_y	  = 23   ; współrzędna osi Y na siatce pliku z ikonamicost		    = 9500 ; cena bazowa artefaktu/przedmiotu.jump_height	 = 0.0  ; wysokość na jaką artefakt "podskakuje" po wyrzuceniu. ;particles	  = anomaly2artefactartefact_puxx  ; efekt wizualny - usunięty dla maski.lights_enabled  = false	 ; poświata artefaktu, blask  ;Poniżej znajdują się sekcje odpowiedzialne za regenerację zdrowia, przyrost radiacji etc.health_restore_speed    = 0.0    ; odzyskiwanie zdrowia		    radiation_restore_speed = -0.003 ; tempo usuwania radiacji, wartość ujemna usuwa, dodatnia - zwiększa radiację.satiety_restore_speed   = 0.0    ; parametr odpowiedzialny za sytość.power_restore_speed	 = -0.001 ; tempo regeneracji energii, wartość ujemna zwiększa zmęczenie postaci.bleeding_restore_speed  = 0.0    ; parametr odpowiedzialny za krwawieniehit_absorbation_sect    = af_pgaz1_absorbation    ;Dla poniższych wartości, 0 = max ochrona, 1 = brak ochrony[af_pgaz1_absorbation]burn_immunity		  = 1.0  ; odporność na ogień     strike_immunity	    = 1.0  ; odporność na uderzenieshock_immunity		 = 1.0  ; odporność na porażeniewound_immunity		 = 1.0  ; odporność na zadrapanie, uszkodzenia mechaniczne	  radiation_immunity	 = 0.9  ; odporność na radiacjętelepatic_immunity	 = 1.0  ; odporność na telepatięchemical_burn_immunity = 0.7  ; odporność na korozję chemicznąexplosion_immunity	 = 1.0  ; odporność na wybuchfire_wound_immunity    = 1.0  ; odporność na ostrzał; Artefakt maska pgaz/ sekcja 2[af_pgaz2]:af_baseGroupControlSection    = spawn_group$spawn		  = "artifactsfuzz kolobok"$npc		    = on    ; option for Level Editor;$prefetch	  = 3cform		   = skeletonclass		   = ARTEFACT visual		  = equipmentsgasmask1.ogf  ; model ogf artefaktu - w tym przypadku ścieżka do modelu maski.description	 = enc_zone_artifact_af-fuzz-kolobot   ; opis artefaktuinv_name	    = af_mask_2 ; skrócona nazwa w ekwipunkuinv_name_short  =inv_weight	  = 0.25 ; waga artefaktu [kg] inv_grid_x	  = 13   ; współrzędna osi X na siatce pliku z ikonamiinv_grid_y	  = 23   ; współrzędna osi Y na siatce pliku z ikonamicost		    = 4000 ; cena bazowa artefaktu/przedmiotu.jump_height	 = 0.0  ; wysokość na jaką artefakt "podskakuje" po wyrzuceniu. ;particles	  = anomaly2artefactartefact_puxx  ; efekt wizualnylights_enabled  = false	 ; poświata artefaktu, blask  ;Poniżej znajdują się sekcje odpowiedzialne za regenerację zdrowia, przyrost radiacji etc.health_restore_speed    = 0.0    ; odzyskiwanie zdrowia		    radiation_restore_speed = -0.002 ; tempo usuwania radiacji, wartość ujemna usuwa, dodatnia - zwiększa radiację.satiety_restore_speed   = 0.0    ; parametr odpowiedzialny za sytość.power_restore_speed	 = -0.001 ; tempo regeneracji energiibleeding_restore_speed  = 0.0    ; parametr odpowiedzialny za krwawieniehit_absorbation_sect    = af_pgaz2_absorbation    ;Dla poniższych wartości, 0 = max ochrona, 1 = brak ochrony[af_pgaz2_absorbation]burn_immunity		  = 1.0  ; odporność na ogień     strike_immunity	    = 1.0  ; odporność na uderzenieshock_immunity		 = 1.0  ; odporność na porażeniewound_immunity		 = 1.0  ; odporność na zadrapanie, uszkodzenia mechaniczne	  radiation_immunity	 = 0.9  ; odporność na radiacjętelepatic_immunity	 = 1.0  ; odporność na telepatięchemical_burn_immunity = 0.7  ; odporność na korozję chemicznąexplosion_immunity	 = 1.0  ; odporność na wybuchfire_wound_immunity    = 1.0  ; odporność na ostrzał; Artefakt maska pgaz/ sekcja 3[af_pgaz3]:af_baseGroupControlSection    = spawn_group$spawn		  = "artifactsfuzz kolobok"$npc		    = on    ; option for Level Editor;$prefetch	  = 3cform		   = skeletonclass		   = ARTEFACT visual		  = equipmentsgasmask3.ogf  ; model ogf artefaktu - w tym przypadku ścieżka do modelu maski.description	 = enc_zone_artifact_af-fuzz-kolobor   ; opis artefaktuinv_name	    = af_mask_3 ; skrócona nazwa w ekwipunkuinv_name_short  =inv_weight	  = 0.35 ; waga artefaktu [kg] inv_grid_x	  = 12   ; współrzędna osi X na siatce pliku z ikonamiinv_grid_y	  = 23   ; współrzędna osi Y na siatce pliku z ikonamicost		    = 12000 ; cena bazowa artefaktu/przedmiotu.jump_height	 = 0.0  ; wysokość na jaką artefakt "podskakuje" po wyrzuceniu. ;particles	  = anomaly2artefactartefact_puxx  ; efekt wizualnylights_enabled  = false	 ; poświata artefaktu, blask  ;Poniżej znajdują się sekcje odpowiedzialne za regenerację zdrowia, przyrost radiacji etc.health_restore_speed    = 0.0    ; odzyskiwanie zdrowia		    radiation_restore_speed = -0.004 ; tempo usuwania radiacji, wartość ujemna usuwa, dodatnia - zwiększa radiację.satiety_restore_speed   = 0.0    ; parametr odpowiedzialny za sytość.power_restore_speed	 = -0.001 ; tempo regeneracji energiibleeding_restore_speed  = 0.0    ; parametr odpowiedzialny za krwawieniehit_absorbation_sect    = af_pgaz3_absorbation    ;Dla poniższych wartości, 0 = max ochrona, 1 = brak ochrony[af_pgaz3_absorbation]burn_immunity		  = 1.0  ; odporność na ogień     strike_immunity	    = 1.0  ; odporność na uderzenieshock_immunity		 = 1.0  ; odporność na porażeniewound_immunity		 = 1.0  ; odporność na zadrapanie, uszkodzenia mechaniczne	  radiation_immunity	 = 0.8  ; odporność na radiacjętelepatic_immunity	 = 1.0  ; odporność na telepatięchemical_burn_immunity = 0.7  ; odporność na korozję chemicznąexplosion_immunity	 = 1.0  ; odporność na wybuchfire_wound_immunity    = 1.0  ; odporność na ostrzał


    [ 6 ]. Warto poświęcić trochę czasu na opis przedmiotu. W pliku w/w wprowadzono nowe opisy, które pierwotnie nie występują w grze, są to następujące sekcje:

    description	 = enc_zone_artifact_af-fuzz-kolobox

    jest to opis artefaktu o identyfikatorze af_pgaz1

    description	 = enc_zone_artifact_af-fuzz-kolobot

    jest to opis artefaktu o identyfikatorze af_pgaz2

    description	 = enc_zone_artifact_af-fuzz-kolobor

    jest to opis artefaktu o identyfikatorze af_pgaz3

    Powyższe wpisy są zmodyfikowaną wersją opisu art. Kulebiak. Aby każda z masek p-gaz posiadała unikalny opis, należy dodać odpowiednie wpisy - zgodnie z parametrem description do pliku string_table_enc_zone.xml [gamedataconfigtextpol], zatem wprowadzam doń następujące sekcje:

        <string id="enc_zone_artifact_af-fuzz-kolobox">	        <text>Maska przeciwgazowa to podstawowy element wyposażenia stalkerów - jako pierwszy stopień ochrony dróg oddechowych przed toksynami i radiacją. Jej wadą jest szybszy przyrost zmęczenia z uwagi na ograniczoną przepustowość cyrkulacji powietrza.</text>    </string>    <string id="enc_zone_artifact_af-fuzz-kolobot">	        <text>Maska przeciwgazowa SzM-41M (typ "Słoń") jest jedną z najbardziej rozpowszechnionych wśród systemów ochrony dróg oddechowych z uwagi na przystępną cenę. Warto zaopatrzyć się w nią podczas eksploracji radioaktywnych obszarów Zony.</text>    </string>    <string id="enc_zone_artifact_af-fuzz-kolobor">	        <text>%c[255,255,1,1]Ulepszona wersja maski MP-6.</text>    </string>

    identyfikatory opisu tj. string id muszą być zgodne z wprowadzonymi parametrami description znajdującymi się w pliku art_gasmask.ltx. Oczywiście - można wprowadzić dowolny opis przedmiotu - ja dałem przykładowy opis masek.

    Aby skrócona nazwa artefaktu wyświetlała się prawidłowo, należy dodać do pliku string_table_enc_zone.xml opis zgodny z parametrem inv_name, są to sekcje następujące:

    <string id="af_mask_1">        <text>Maska p-gaz typ MP-6</text>    </string>    <string id="af_mask_2">        <text>Maska p-gaz SzM-41M</text>    </string>    <string id="af_mask_3">        <text>Maska p-gaz SzM-41M</text>    </string>

    [ 7 ]. Mając opis, dodać należy teksturę w ekwipunku zgodną z wprowadzonym modelem gasmask3.ogf, przydatny w tym celu okaże się ten poradnik.

    Za współrzędne ikony odpowiadają wpisy (poniżej sekcje już edytowane dla potrzeb modyfikacji):

    dla maski o identyfikatorze: af_pgaz1/af_pgaz3 (obie maski wykorzystują tę samą ikonę)

    inv_grid_x	  = 12   ; współrzędna osi X na siatce pliku z ikonamiinv_grid_y	  = 23   ; współrzędna osi Y na siatce pliku z ikonami

    dla maski o identyfikatorze: af_pgaz2

    inv_grid_x	  = 13   ; współrzędna osi X na siatce pliku z ikonamiinv_grid_y	  = 23   ; współrzędna osi Y na siatce pliku z ikonami

    zatem, zgodnie z w/w parametrami należy umieścić właściwą ikonę przedmiotu w pliku ui_icon_equipment.dds [gamedatatexturesui].

    Aby ułatwić kwestie spojrzenia na obliczanie współrzędnych na siatce ekwipunku - screen z naniesioną numeracją przy ustawieniu oczka siatki 50x50 px.

    Dołączona grafika

     

    W Cieniu Czarnobyla znajdują się 3 modele maski przeciwgazowej, które nie zostały wykorzystane przez twórców. Znaleźć je można w [gamedatameshesequipments], są to modele:

    gasmask1.ogf
    gasmask2.ogf
    gasmask3.ogf
    dlatego nie trzeba dodawać modeli maski do [gamedata], chyba że chcesz wyciąć z moda maskę przeciwgazową o określonym wyglądzie, wówczas należy umieścić go zgodnie ze ścieżką określoną parametrem "visual" w pliku konfigurującym artefakt, który to parametr opisałem w tymże pliku.

    Na tym można zakończyć część uproszczoną, która nie dodaje widoku hud'a maski p-gaz, jednakże maska przeciwgazowa posiada wszelkie parametry zdefiniowane w pliku art_gasmask.ltx i nadaje się do zakładania na pas z uwagi na wykorzystanie konfiguracji artefaktu.

     

     

    II. Część zaawansowana - dodawanie hud'a maski.

    Ta część modyfikacji dodaje widok maski p-gaz wraz z efektami oddechu, krwawienia, zmęczenia - czyli efektów zwiększających poziom realizmu w grze.

    [ 1 ]. Do folderu [gamedatascripts] dodajemy plik skryptu odpowiedzialnego za hud maski p-gazowej.  Jest to plik hud.script autorstwa Thunder Freak'a - poniżej zawartość w wersji ze spolszczonymi komunikatami oraz parametrami dostosowanymi do identyfikatorów wprowadzonych masek p-gaz (af_pgaz1/af_pgaz2/af_pgaz3):

    --[[------------------------------------------------------------------------------------------------ File	   : invasion_hud.script Description: HUD Masken Script mit abnehmbaren Masken, Bluteffekten und Blureffekte Copyright  : Thunder Freak (c) 2009, Rudix (c) 2008, Russo (c) 2008 Author	 : Thunder Freak (c) 2009 Last edit  : 21.05.2009 (by atonium2027 & Thunder Freak) Skrypt skonfigurowany na 3 maski przeciwgazowe: af_pgaz1/af_pgaz2/af_pgaz3--]]------------------------------------------------------------------------------------------------local current_suithudlocal mycurrent_suithudlocal suit_conditionlocal suitfirstrun = "yes"local actor_last_health = 0local bloodtime = 0local bloodtimeb = 0local isbleeding = "no"local countblood = 0local m_blood = nillocal isactcondset = "false"local radeffect = "false"local blurs = nillocal blurval = 0local blurlt = 0local blurcyctime = 0local blurlastphase = 0local suittypes = {   exo = "hud_exo",   scientific = "hud_sci",   ecolog = "hud_sci",   protection = "hud_sci",   military = "hud_mil",   specops = "hud_mil",   killer = "hud_gas",   cs_heavy = "hud_kill",   bandit = "hud_bandit",   cs_light = "hud_bandit"}local xrbelt = nillocal info_send = 0local breath_timelocal init_breath = falselocal heartbeat_setlocal verschnaufpause = {    [0] = "Potrzebny odpoczynek.",    [1] = "Stary, jestem wyczerpany.",    [2] = "W tej masce trudno biec z ekwipunkiem.",    [4] = "Chwila na odpoczynek."}function checkmysuithud()    local suithudtype, suithudname    if db.actor ~= nil then        bleedcondition()        atmen()        suithudtype = nil                local csuithud = db.actor:get_current_outfit()                if csuithud ~= nil then suithudname = csuithud:section() end        if suithudname ~= nil then            suit_condition = check_current_suit_condition()                    if suit_condition ~= nil then                    for i,v in pairs(suittypes) do                    if string.find(suithudname, i) then                        suithudtype = v .. "_" .. suit_condition                        xrbelt = nil                    end                end                        end        end                if suithudtype == nil then            check_mask_on_belt()            xrbelt = inventory.belt["af_pgaz1"]            if xrbelt == nil then xrbelt = inventory.belt["af_pgaz2"] end            if xrbelt == nil then xrbelt = inventory.belt["af_pgaz3"] end                        if xrbelt ~= nil and suit_condition ~= nil then suithudtype = "hud_gasmask_" .. suit_condition end        end                setmysuithud(suithudtype)        init_blurs()        blood()        set_blood()    endendfunction check_mask_on_belt()    local beltset = 0    local x1belt = inventory.belt["af_pgaz1"]    local x2belt = inventory.belt["af_pgaz2"]    local x3belt = inventory.belt["af_pgaz3"]    if x1belt == nil and x2belt == nil and x3belt == nil then return end    if x1belt ~= nil then        if x1belt == 1 then            beltset = 1        elseif x1belt > 1 then            beltset = 10        end    end    if x2belt ~= nil then        if x2belt == 1 then            beltset = beltset + 1        elseif x2belt > 1 then            beltset = 10        end    end    if x3belt ~= nil then        if x3belt == 1 then            beltset = beltset + 1        elseif x3belt > 1 then            beltset = 10        end    end        if info_send == 1 and beltset == 1 then info_send = 0 end        if beltset > 1 and info_send == 0 then        local text = "Przez ile masek chcesz oddychac, hmm? - jedna nie wystarczy?"        db.actor:give_game_news(text, "uiui_icon_gasmask", Frect():set(x,y,83,47), 1000, 5000)            info_send = 1    endendfunction check_current_suit_condition()    local suitname    local csuithud = db.actor:get_current_outfit()    if csuithud ~= nil then suitname = csuithud:section() end    if suitname ~= nil then        suit_condition = ""        local curcond = csuithud:condition()        if curcond >= 0.95 then            suit_condition = "blue"        elseif curcond >= 0.85 and curcond < 0.95 then            suit_condition = "green"        elseif curcond >= 0.70 and curcond < 0.85 then            suit_condition = "yellow"        elseif curcond >= 0.50 and curcond < 0.70 then            suit_condition = "red"        elseif curcond >= 0.27 and curcond < 0.50 then            suit_condition = "red2"        elseif curcond < 0.27 then            suit_condition = "red3"        end    end    return suit_conditionendfunction setmysuithud(hudtype)    local chud = get_hud():GetCustomStatic(mycurrent_suithud)    if chud ~= nil and mycurrent_suithud ~= nil and hudtype == nil then        get_hud():RemoveCustomStatic(mycurrent_suithud)        mycurrent_suithud = nil    end    if hudtype == nil and mycurrent_suithud == nil then return end    local new_hud = get_hud():GetCustomStatic(hudtype)    if new_hud == nil then        get_hud():RemoveCustomStatic(mycurrent_suithud)        get_hud():AddCustomStatic(hudtype)           	 if suit_condition ~= "green" and suit_condition ~= "blue" then            local snd_obj = xr_sound.get_safe_sound_object([[materialglassglass_fall03hl]])            snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 9.0)   	 end        mycurrent_suithud = hudtype    end    --invasion_mags.show_mags_on_mask()endlocal info2_send = falsefunction atmen()    local vol = 0    local ausdauer = db.actor.power    if init_breath == false then        breath_time = time_global() + 2300        heartbeat_set = time_global() + 7800        init_breath = true    end    if time_global() > breath_time and ausdauer < .7 then        if ausdauer < .7 and ausdauer >= .6 then            vol = 0.5        elseif ausdauer < .6 and ausdauer >= .5 then            vol = 1.0        elseif ausdauer < .5 and ausdauer >= .35 then            vol = 1.5        elseif ausdauer < .35 and ausdauer >= .2 then            vol = 2.0        elseif ausdauer < .2 then            vol = 2.5        end                local snd_obj = xr_sound.get_safe_sound_object([[characters_voicehuman_03stalkerstatesbreathbreath_1]])        snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), vol)        breath_time = time_global() + 2300    end    if ausdauer < .3 and time_global() > heartbeat_set then        local snd_obj = xr_sound.get_safe_sound_object([[heart2]])        snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 3.0)        heartbeat_set = time_global() + 7800    end    if ausdauer < .2 and info2_send == false then        db.actor:give_game_news(verschnaufpause[math.random(1, 4)], "uiui_iconstotal", Frect():set(0,0,83,47), 2000, 6000)            info2_send = true    end    if ausdauer > .2 then info2_send = false endendfunction init_blurs()    if mycurrent_suithud ~= nil and db.actor.power < .7 then        local zoom = 67.5 / device().fov        zoom = (zoom - 1) * 1.5 + 1        if zoom < 1.001 then            zoom = 1.001        end        local stretchy = 0.75 / (math.floor(device().aspect_ratio * 1000) / 1000)        if stretchy < 1 then stretchy = 1 end        local rect = {x = -768 * zoom + 768, y = (-512 * zoom + 512) * stretchy - (stretchy - 1) * 300, w = 1024 * zoom, h = 768 * zoom * stretchy}                set_blurs(true, rect)    else        set_blurs(false)    endendfunction set_blurs(enabled,rect)    if (not blurs) or get_hud():GetCustomStatic("hud_blur1") == nil then        blurs = {}        for i = 1, 5 do            get_hud():AddCustomStatic("hud_blur" .. i)            blurs[i] = get_hud():GetCustomStatic("hud_blur" .. i):wnd()            blurs[i]:SetWidth(0)        end    end        if not enabled then        for i = 1, 5 do            blurs[i]:SetWidth(0)        end        return    end    local power = db.actor.power    local period = 1.0 + power * power * 1.0    local expirt = 0.3    local breathpower = 3    local delta = (time_global() - blurlt) / 1000    local phase = (time_global() - blurcyctime) / 1000        blurlt = time_global()    if phase > period then        phase = phase % period        blurcyctime = blurlt - phase * 1000    end    if blurlastphase > phase then        blurlastphase = 0    end    local blurdelta = delta * -0.7    if blurlastphase < expirt and phase < expirt then        blurdelta = blurdelta + (phase - blurlastphase) * breathpower    elseif blurlastphase < expirt then        blurdelta = blurdelta + (expirt - blurlastphase) * breathpower    end    blurlastphase = phase    blurval = blurval + blurdelta    if blurval > 0.999 then        blurval = 0.999    elseif blurval < 0 then        blurval = 0    end    local tm = math.floor(blurval * 3)    local tmn = (tm + 1)    local v = blurval * 3 - math.floor(blurval * 3)    v= 1 - v    local v1 = 1 - v    if tm ~= 0 then        blurs[tm]:SetColor(GetARGB(v * 255, 255, 255, 255))    end    if tmn ~= 0 then        blurs[tmn]:SetColor(GetARGB(v1 * 255, 255, 255, 255))    end    for i = 1,4 do        if i == tm or i == tmn then            blurs[i]:SetWndRect(Frect():set(rect.x, rect.y, rect.w, rect.h))        else            blurs[i]:SetWndRect(Frect():set(rect.x, rect.y, 0, 0))        end    endendfunction blood()    local radwidth = db.actor.radiation    if db.actor ~= nil and radwidth == 0 then        if db.actor:alive() then            local current_health = math.floor(db.actor.health * 100)            local cbloodtime = time_global()            if cbloodtime > bloodtime and isbleeding == "stopit" then                for i=1,5 do                    if get_hud():GetCustomStatic("hud_blood" .. i) ~= nil then                        get_hud():RemoveCustomStatic("hud_blood" .. i)                        isbleeding = "no"                    end                end            end            if cbloodtime > bloodtime then                bloodtime = time_global() + 1500                if actor_last_health > current_health and actor_last_health ~= 0 then isbleeding = "yes" end                actor_last_health = math.floor(db.actor.health * 100)            end        end    endendfunction set_blood()    local radwidth = db.actor.radiation    local cbloodtimed = time_global()    if db.actor ~= nil and cbloodtimed > bloodtimeb and isbleeding == "yes" and radwidth == 0 then        bloodtimeb = time_global() + 170        m_blood = {}        countblood = countblood + 1        get_hud():AddCustomStatic("hud_blood" .. countblood)        m_blood[countblood] = get_hud():GetCustomStatic("hud_blood" .. countblood):wnd()        local chudblood = "hud_blood" .. countblood        if countblood == 4 then            isbleeding = "stopit"            countblood = 0        end    endendfunction bleedcondition()    if db.actor.health < 0.31 and isactcondset ~= "true" then        level.add_pp_effector ("alcohol.ppe", 2012, true)        isactcondset = "true"    end    if db.actor.health > 0.30 and isactcondset ~= "false" then        level.remove_pp_effector (2012)        isactcondset = "false"    end    if db.actor.radiation > 0.3 and radeffect ~= "true" then        level.add_pp_effector ("alcohol.ppe", 2013, true)        radeffect = "true"    end    if db.actor.radiation == 0 and radeffect ~= "false" then        level.remove_pp_effector (2013)        radeffect = "false"    endendfunction check_blood()endlocal logf_console = nilfunction logf( fmt, ... )    logf_console = get_console()    logf = logf_main    logf_main( fmt, ... )endfunction logf_main( fmt, ... )    local c = select( "#", ... )    if c <= 0 then -- nothing to format	  logf_console:execute( ":" .. string.gsub( fmt, " ", "160" ) )    else	  logf_console:execute( ":" .. string.gsub( fmt, " ", "160" ) )    endend

    [ 2 ]. Do tego samego folderu j/w dodaję plik inventory.script, poniżej zawartość pliku dostosowana do utworzonych masek p-gaz :

    -- This script taken from Soljanka. They appear to add duplicate artifact removal.-- The original source code appears to be Thunderfreaks "gasmask mod".-- Altered by Nuor 8/20/2010, for flexibility, now items and belt quanities can be customized. belt = {}belt_id = {}belt_status = falsetbl = {} local need_update = truelocal inventory_open = falselocal separator_spawned = falselocal separator = "separator"local belt_limit_enabled = truelocal debug = falselocal flag function update()		 if (need_update == false) then return end		 if debug == true and belt_status == true then get_console():execute("belt_status=false") end	    belt_status = false		 -- Spawn separatora	    if (separator_spawned == false) then			    alife():create(separator,					    db.actor:position(),					    db.actor:level_vertex_id(),					    db.actor:game_vertex_id(),					    db.actor:id())			    separator_spawned = true			    if debug == true then get_console():execute("separator_spawned") end			    return	    end		 belt = {}	    belt_id = {}	    flag = 0		 -- Usunięcie asortymentu	    db.actor:inventory_for_each(scan_inv)	    need_update = false		 -- Usunięcie separatora	    db.actor:inventory_for_each(del_separator)	    separator_spawned = false		 if debug == true and belt_status == false then get_console():execute("belt_status=true") end	    belt_status = true		 if debug == true then			    for i,k in pairs(belt) do					    get_console():execute(i.."="..k)			    end	    end	    if belt_limit_enabled == true then remove_excess() endend -- Skanowanie przedmiotów w ekwipunkufunction scan_inv(item)		 if tbl and tbl ~= {} then			    for k,v in pairs(tbl) do					    if item:id() == k then							    level.object_by_id(k):set_condition(v)  -- reset condition of transferred items							    tbl[k] = nil					    end			    end	    end		 local section = item:section()		 if section == separator then			    flag = 1			    return	    end		 if flag == 1 then			    if slot_item(item) ~= nil then					    flag = 2			    else					    insert_to_table(belt, section)					    belt_id[item:id()] = true			    end	    endend -- Dodawanie tabelifunction insert_to_table(tbl, section)	    if tbl[section] == nil then			    tbl[section] = 1	    else			    tbl[section] = tbl[section] + 1	    endend -- Skasowanie separatorafunction del_separator(item)	    if item:section() == separator then			    alife():release(alife():object(item:id()), true)			    if debug == true then get_console():execute("separator_removed") end	    endend -- Ustalenie czy obiekt znajduje się w slociefunction slot_item(item)	    for i=0,12 do			    local obj = db.actor:item_in_slot(i)			    if obj and item:id() == obj:id() then					    return i			    end	    end		 return nilend -- Podniesienie przedmiotufunction on_item_take(item)	    if item:section() == separator then return end		 if (inventory_open == false) then			    if (separator_spawned == true) then					    db.actor:inventory_for_each(del_separator)					    separator_spawned = false			    end				 need_update = true			    if debug == true then get_console():execute("item_take") end	    endend -- Wyrzucenie przedmiotufunction on_item_drop(item)	    if item:section() == separator then return end		 if (inventory_open == false) then			    if (separator_spawned == true) then					    db.actor:inventory_for_each(del_separator)					    separator_spawned = false			    end				 need_update = true			    if debug == true then get_console():execute("item_drop") end	    endend -- Ekwipunek Zamykanie/Otwieraniefunction on_inventory_info(info_id)	    if info_id == "ui_inventory" then			    inventory_open = true			    if debug == true then get_console():execute("inventory_open") end		 elseif info_id == "ui_inventory_hide" then			    inventory_open = false			    need_update = true			    if debug == true then get_console():execute("inventory_close") end	    endend -- move any excess artifacts from belt to inventoryfunction remove_excess()	    local t = check_excess()	    if t == nil then return end	    for k, v in pairs(belt_id) do			    local obj = level.object_by_id(k)			    local sect = obj:section()			    if t[sect] ~= nil then					    if t[sect] > 0 then							    t[sect] = t[sect] - 1					    elseif t[sect] <= 0 then							    local cond = obj:condition()							    alife():release(alife():object(k), true)							    local n_sobj = alife():create(sect, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())							    tbl[n_sobj.id] = cond					    end			    end	    endend -- sets item slot max-- returns a table of the form [Section] = <allowed slot amount>-- storage variables <art_lim..#> store the number of bonus slots for each of the 5 categories; "" and 1-4function check_excess()	    local art_limit =			    {			    af_pgaz1 = 1,			    af_pgaz2 = 1,			    af_pgaz3 = 1			    }	    local result = {}	    local belt_limit = nil	    for k, v in pairs(belt) do			    belt_limit = art_limit[k]			    if check_for_suit(k) == true then belt_limit = 0 end			    if belt_limit then					    result[k] = belt_limit			    end	    end	    return resultend -- When wearing a suit with mask no gasmasks are allowedfunction check_for_suit(item)	    local suit_types = {"exo", "scientific", "ecolog", "protection", "military", "specops", "killer", "cs_heavy"}	    local check,suit = false,nil	    if item:find("gasmaske") then			    for k,v in pairs(suit_types) do					    suit = _i.get_suit_stats("name")					    if suit ~= nil then							    if suit:find(v) then									    check = true									    break							    end					    end			    end	    end	    return checkend

    Plik ten odpowiada za usuwanie maski z pasa - jeśli chcemy tam przenieść więcej niż jedną szt. tego samego rodzaju (patrz filmik od 1:37). Skrypt wymaga jeszcze uzupełnienia, ponieważ powinien usuwać więcej niż jedną maskę z pasa. Na chwilę obecną - aby nie psuć realizmu, można ograniczyć ilość noszonych na pasie masek p-gaz.

    [ 3 ]. Aby wspomniane pliki skryptu tj. hud.script oraz inventory.script były wykorzystane w grze, należy podłączyć je do pliku bind_stalker.script [gamedatascripts] - dodaję zatem wpisy następujące:
    w sekcji:

    function actor_binder:info_callback(npc, info_id)

    dodaję odnoszący się do nazwy skryptu wpis (skopiuj poniższy wiersz):

    inventory.on_inventory_info(info_id)

    następny wpis dodaję w sekcji:

    function actor_binder:on_item_take (obj)

    jest to kolejne odwołanie do pliku inventory.script (skopiuj poniższy wiersz):

    inventory.on_item_take(obj)

    ostatni z wpisów umieścić należy w sekcji:

    function actor_binder:update(delta)

    jest to następujące odwołanie do dodanych plików (skopiuj poniższy wiersz) :

    hud.checkmysuithud()inventory.update()

    całość można sprawdzić za pomocą programu WinMerge - na końcu posta wstawię pliki do pobrania.

    [ 4 ]. W pliku escape_dialog.script [gamedatascripts] dodaję nowe przedmioty, które otrzymamy po rozmowie z Wilkiem - poniżej zmodyfikowana wersja funkcji:

    function give_weapon_to_actor (trader, actor)    dialogs.relocate_item_section(trader, "wpn_pm", "in")    dialogs.relocate_item_section(trader, "ammo_9x18_fmj", "in")    dialogs.relocate_item_section(trader, "ammo_9x18_fmj", "in")    dialogs.relocate_item_section(trader, "wpn_knife", "in")    dialogs.relocate_item_section(trader, "af_pgaz1", "in")    dialogs.relocate_item_section(trader, "af_pgaz2", "in")    dialogs.relocate_item_section(trader, "af_pgaz3", "in")end

    W wyniku rozmowy otrzymujemy maski przeciwgazowe o identyfikatorze af_pgaz1/af_pgaz2/af_pgaz3 - patrz plik art_gasmask.ltx

    [ 5 ]. Do pliku items.ltx [gamedataconfigmisc] dodaję (na samym końcu pliku) sekcję odpowiedzialną za separator zdefiniowany w skrypcie inventory.script. Nie będę zagłębiał się w niuanse funkcji tegoż pliku, jednakże nie można pominąć tego wpisu dla prawidłowego działania modyfikacji :

    [separator]:breadinv_grid_width        = 0inv_grid_height       = 0inv_weight            = 0

    [ 6 ]. Do pliku ui_custom_msgs.xml [gamedataconfigui] dodać należy wpis konfigurujący tekstury Hud'a :

        <hud_blood1 x="0" y="0" width="1024" height="768" stretch="1">	  <texture>hudblood1</texture>    </hud_blood1>    <hud_blood2 x="0" y="0" width="1024" height="768" stretch="1">	  <texture>hudblood2</texture>    </hud_blood2>    <hud_blood3 x="0" y="0" width="1024" height="768" stretch="1">	  <texture>hudblood3</texture>    </hud_blood3>    <hud_blood4 x="0" y="0" width="1024" height="768" stretch="1">	  <texture>hudblood4</texture>    </hud_blood4>    <hud_blood5 x="0" y="0" width="1024" height="768" stretch="1">	  <texture>hudblood5</texture>    </hud_blood5>   <hud_gas_blue x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_gas1</texture>   </hud_gas_blue>   <hud_gas_green x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_gas2</texture>   </hud_gas_green>   <hud_gas_yellow x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_gas3</texture>   </hud_gas_yellow>   <hud_gas_red x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_gas4</texture>   </hud_gas_red>   <hud_gas_red2 x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_gas5</texture>   </hud_gas_red2>   <hud_gas_red3 x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_gas6</texture>   </hud_gas_red3>   <hud_kill_blue x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">    <texture>hudhud_merc1</texture>   </hud_kill_blue>   <hud_kill_green x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">    <texture>hudhud_merc2</texture>   </hud_kill_green>   <hud_kill_yellow x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">    <texture>hudhud_merc3</texture>   </hud_kill_yellow>   <hud_kill_red x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">    <texture>hudhud_merc4</texture>   </hud_kill_red>   <hud_kill_red2 x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">    <texture>hudhud_merc5</texture>   </hud_kill_red2>   <hud_kill_red3 x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">    <texture>hudhud_merc6</texture>   </hud_kill_red3>    <hud_sci_blue x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_sci1</texture>   </hud_sci_blue>   <hud_sci_green x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_sci2</texture>   </hud_sci_green>   <hud_sci_yellow x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_sci3</texture>   </hud_sci_yellow>   <hud_sci_red x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_sci4</texture>   </hud_sci_red>   <hud_sci_red2 x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_sci5</texture>   </hud_sci_red2>   <hud_sci_red3 x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_sci6</texture>   </hud_sci_red3>    <hud_nano_blue x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_nano1</texture>   </hud_nano_blue>   <hud_nano_green x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_nano2</texture>   </hud_nano_green>   <hud_nano_yellow x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_nano3</texture>   </hud_nano_yellow>   <hud_nano_red x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_nano4</texture>   </hud_nano_red>   <hud_nano_red2 x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_nano5</texture>   </hud_nano_red2>   <hud_nano_red3 x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_nano6</texture>   </hud_nano_red3>   <hud_mil_blue x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_mil1</texture>   </hud_mil_blue>   <hud_mil_green x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_mil2</texture>   </hud_mil_green>   <hud_mil_yellow x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_mil3</texture>   </hud_mil_yellow>   <hud_mil_red x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_mil4</texture>   </hud_mil_red>   <hud_mil_red2 x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_mil5</texture>   </hud_mil_red2>   <hud_mil_red3 x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_mil6</texture>   </hud_mil_red3>    <hud_exo_blue x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_exo1</texture>   </hud_exo_blue>    <hud_exo_green x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_exo2</texture>   </hud_exo_green>    <hud_exo_yellow x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_exo3</texture>   </hud_exo_yellow>    <hud_exo_red x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_exo4</texture>   </hud_exo_red>    <hud_exo_red2 x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_exo5</texture>   </hud_exo_red2>    <hud_exo_red3 x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_exo6</texture>   </hud_exo_red3>   <hud_gasmask_blue x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_gasmask1</texture>   </hud_gasmask_blue>   <hud_gasmask_green x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_gasmask2</texture>   </hud_gasmask_green>   <hud_gasmask_yellow x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_gasmask3</texture>   </hud_gasmask_yellow>   <hud_gasmask_red x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_gasmask4</texture>   </hud_gasmask_red>   <hud_gasmask_red2 x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_gasmask5</texture>   </hud_gasmask_red2>   <hud_gasmask_red3 x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudhud_gasmask6</texture>   </hud_gasmask_red3>   <hud_blur1 x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudbreath1</texture>   </hud_blur1>   <hud_blur2 x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudbreath2</texture>   </hud_blur2>   <hud_blur3 x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudbreath3</texture>   </hud_blur3>   <hud_blur4 x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudbreath4</texture>   </hud_blur4>   <hud_blur5 x="0" y="0" width="1024" height="768" stretch="1" light_anim="ui_slow_blinking_alpha" la_cyclic="1" la_texture="0" la_text="1" la_alpha="1">	 <texture>hudbreath5</texture>   </hud_blur5>

    [ 7 ]. Na końcu dodajemy tekstury, które należy umiescić w [gamedatatextureshud] - patrz sfinalizowana postać [gamedata] do pobrania.

    spis wykorzystywanych tekstur:

    blood1.dds, blood2.dds, blood3.dds, blood4.dds, blood5.dds, breath1.dds, breath2.dds, breath3.dds, breath4.dds, breath5.dds, hud_gasmask1.dds, hud_gasmask2.dds, hud_gasmask3.dds, hud_gasmask4.dds, hud_gasmask5.dds, hud_gasmask6.dds

    Ktoś zapyta - po co podawać nazwy tekstur? Umieszczona na końcu wersja do pobrania będzie dostępna przez 30 dni na bezpłatnym hostingu plików, jeśli link wygaśnie - na podstawie podanych configów można będzie odtworzyć modyfikację, natomiast tekstury o podanej nazwie można pobrać z dowolnego moda dodającego hud - stąd ich wykaz.

    [ 8 ]. Ostatnim plikiem jaki trzeba dodać jest ui_icon_gasmask.dds, należy umieścić go w [gamedatatexturesui] zgodnie ze skryptem hud.script.

     

    Wersja sfinalizowana przygotowana w oparciu o pliki z patcha 1.0004 do niemodowanej wersji gry: download 1

    ________

    1 pliki będą dostępne przez 30 dni.

    Całość prezentuje się następująco:

     

    http://www.youtube.com/watch?v=MMoylWlfXX0

     

    Mam nadzieję,  że informacje przydadzą się również innym forumowiczom - jak zwykle wyszedł mini-tutorial z posta, ale dzięki temu można odtworzyć moda samodzielnie. W razie problemów - pisz w temacie. Całość testowana bez jakichkolwiek błędów. 

    • Dodatnia 4
  15. @ Ziomkowsky2,

    z loga wynika, iż w folderze [gamedatatexturesgrnd] brakuje tekstury grnd_dry_j02bump.dds - to jest powód w/w błędu, zatem musisz znaleźć ową teksturę lub skopiować dowolny plik tekstur i nazwać jak wskazano w logu. Nie zapomnij, iż masz tutaj teksturę odpowiadającą za nadanie wypukłości określonej powierzchni - nie jest to element wyświetlany bezpośrednio, jednakże ważny dla prawidłowego oddania charakterystyki podłoża (spękania, nierówności etc.)

    • Dodatnia 1
  16. @Garand1939

    Tutaj znajdziesz spakowane pliki: download

    • Sig'a 550
    • celownika 1P29 z kompletem plików *

    * Model celownika 1P29 znajdziesz w [gamedatameshesweaponsupgrades] - upg_1p29.ogf
    Mod zawierający w/w celownik (wstawiłem na lepszy hostning plików niż rusfolder) - dostępny jest również na tej stronie w wykonaniu:

    Model: Mongol/Textura: Simbiot/ Animacje: SIN

    Alternatywny link do pobrania: rusfolder.

    Tak przedstawia się widok modelu celownika 1P29 (1П29):

    Dołączona grafika

     

    Dołączona grafika

    Teksturę celownika znajdziesz tutaj.

    Dołączona grafika

    P.S - chciałem się jakoś zrewanżować za ostatnią pomoc z modelem Spas'a 12. Jeśli szukasz celownika stricte pod Bizon'a - daj informację na SB, gdyby ktoś mający moda Zone of Alienation - przeoczył temat. Niestety wspomnianych w 1 poście modów - nie mam na dysku, więc bardziej nie pomogę.

     

    • Dodatnia 2
  17. Jedyne w tej sytuacji to instalacja moda bezpośrednio na patch 1.0004. Odradzam downgrade patcha, ponieważ log z posta nr. 3 jest charakterystyczny dla niezgodnej wersji poprawki. Wystarczy sprawdzić pilik dialog_manager.script, który w oryginalnej wersji z patcha 1.0004 posiada 357 linijek. Log odwołuje się do wiersza nr. 393, zatem szuka odwołania w miejscu niewystępującym w pliku z patcha 1.0004. W wersji pliku z patcha 1.0005 w tym miejscu mamy funkcję o następującej postaci:

     if ver >= 7 then    flag = reader:r_stringZ()else    flag = tostring(reader:r_s16())end

    jest to ewidentnie odwołanie do wersji gry, dlatego za każdym razem gdy mamy błąd j/w - najpierw musimy sprawdzić zgodność wersji gry z posiadanym patchem. Oczywiście, zdarzyć się może, iż autor wyda moda zawierającego błąd, ten jednak szybko zostałby wyłapany przez graczy - skoro tak nie jest, logika podpowiada błąd związany z wersją gry.

    • Dodatnia 1
  18. @Puszkin86

    skrypt jest skonfigurowany pod 1.0004

    powiedz dokładnie, który skrypt - odwołujesz się do posta nr. 4 ?

    Jaką masz wersję Stalkera? - informację znajdziesz w lewym dolnym rogu menu gry lub Panelu sterowania w opcjach dot. instalacji/dezinstalacji programów. Sprawa następna - wstaw na dowolny bezpłatny hosting plików spakowany folder zawierający skrypty [scripts]. Potrzebuję jeszcze informacji - jaka wartość stoi przy parametrze current_server_entity_version w pliku system.ltx?

    Edit:

    pisałeś w temacie dot. degradacji patcha 1.0006 (link). Chcę wiedzieć, czy zrobiłeś downgrade patcha czy instalowałeś moda bezpośrednio na wersję 1.0004? Całość uzupełnij informacją zawierającą spis plików .db. Nowsze poprawki np. 1.0006 wprowadzają plik gamedata.dbd.

    • Dodatnia 1
  19. @Andwis

    powiedz - czy w modzie dalej dostępne są zadania cykliczne z serii: "Przynieś meduzę/kopyto dzika/zniszcz obozowisko" ? - pytam, ponieważ nie mam na dysku tego moda. Załóżmy, że zadania nie zostały usunięte. Idziesz do Sidorowicza i bierzesz jakiekolwiek zadanie - przykłady:

    [tm_eliminate_camp_1] - "Zniszcz obóz bandytów na Wysypisku"[tm_eliminate_camp_2] - "Zniszcz obóz bandytów na parkingu"[tm_eliminate_camp_4] - "Oczyść teren z mutantów"[tm_find_artefact_1] - "Znajdź Meduzę"[tm_find_artefact_2] - "Znajdź Kamienny Kwiat"[tm_find_artefact_3] - "Znajdź Gwiazdę Wieczorną"

    Wpisy znajdziesz w pliku task_manager.ltx [gamedataconfigmisc] wg. identyfikatora ujętego w nawias kwadratowy - jak w przykładzie w/w. Wszystkie wpisy w których wpis:

    parent = trader

    oznaczają, iż zleceniodawcą jest Sidorowicz. Skoro masz problem w barze - udaj się na Kordon po zadanie, wcześniej jednak zmodyfikuj któreś z zadań. Oczywiście w modzie mogą one się różnić - podane powyżej pochodzą z Shoc 1.0004. Modyfikujesz dowolne zadanie zlecane przez Sidorowicza - przykład z naniesioną zmianą:

    [tm_find_artefact_3]type = artefactcommunity = actorcondlist = {+esc_darklab_documents_read}text = tm_find_artefact_3_textdescription = tm_find_artefact_3_descrparent = tradertarget = af_night_star;reward_money = 1000reward_reputation = +40reward_relation = dolg, 2000reward_rank = 7reward_item = vodkatime = 86400prior = 4

     

    Zmiana polega na dodaniu wiersza:

    reward_relation = dolg, 2000

    tym samym zyskujesz 2000 pkt. reputacji na rzecz Powinności. Oczywiście - wartość możesz ustawić na inną, ale w przypadku dużego spadku reputacji trzeba skompensować różnice - trudno mi w tym momencie oszacować wartość spadku reputacji - jak pisałem powyżej - nie mam moda. Opisy zadań znajdziesz w pliku stable_task_manager.xml [gamedataconfigtextpol] - dzięki temu w przypadku nowych zadań szybko znajdziesz odpowiedni ich config, szukając wg. parametru "text". Jeśli reputacja dotyczy innych frakcji, ich wykaz znajdziesz w pliku game_relations.ltx [gamedataconfigcreatures], wówczas operujesz zmianą parametru "reward_relation" adekwatnie do frakcji, której przychylność chcesz zjednać.

     

    • Dodatnia 1
  20. ! Invalid ogg-comment version - oznacza zły komentarz do pliku .ogg, konkretnie tego pliku mp7_reload.ogg, odpowiedzialnego za odgłos przeładowywania. Można by go zastąpić innym działającym plikiem o odpowiednim komentarzu, którego nazwę zmieni się na podaną powyżej.

    ! Can't find texture 'nwmupgradesred_ęđŕńí' - brak tekstury red_ęđŕńí'.dds. Nazwa dość dziwna - przyznam, ale nie jest to typowy Fatal Error. Sprawa od której powinienem zacząć, to twój brak chęci współpracy - już dwukrotnie upominałem się o pliki z Jenota, jak widać nie zależy Ci na rozwiązaniu problemu, zatem kończę dyskusję na twoją własną - niewypowiedzianą prośbę. Tobie bardziej powinno zależeć na rozwiązaniu, ale mój czas jest cenny - dlatego wcześniejsze prośby o pliki uważam za niebyłe.

  21. Nie mam plików moda, jeśli chcesz pomocy - wyślij mi foldery o których poprzednio wspominałem, tylko w ten sposób będę mógł udzielić jakiejkolwiek rady w związku z twoim problemem. Co do twojego ostatniego pytania - mam SGM 2.2 na dysku (nie wiem jakie są różnice w Jenocie), wrzuciłem config z pliku w_g36_up.ltx [gamedataconfigsweaponsupgrades] na pastebin (link). Pobierz ten kod i wklej do pliku, następnie sprawdź wykorzystując WinMerge - czy występują różnice pomiędzy wersją opcji upgrade'u G36 - udostępnioną z SGM 2.2 a wersją znajdującą się w twoim modzie. Jeśli chcesz inny config dla porównania - napisz jaki. Możesz zainteresować forumowiczów na SB - poruszanym tu tematem, w ten sposób zyskasz configi z różnych modów.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

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