-
Postów
622 -
Dołączył
-
Ostatnia wizyta
-
Wygrane w rankingu
57
Odpowiedzi opublikowane przez The Emperor
- Poprzednia
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- Dalej
- Strona 2 z 24
-
-
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:
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.
- 1
-
@ƉƐϼД
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 dziegciudź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
- 1
-
@bolo,
plik bind_stalker.script znajdziesz w gamedatascripts. To co podałeś powyżej to zupełnie inny wpis.
@qwerty12
jesteś pewny że spawner jest całkowicie kompatybilny z posiadaną przez kol.bolo - wersją moda?
- 1
-
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.
- 1
-
@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.
-
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:
- 3
- 1
-
@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
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.
-
@ 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.
- 1
-
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?
- 1
-
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.
-
Odinstaluj tą aktualizację i daj znać, - naprawdę sprawdzona informacja może komuś zaoszczędzić sporo stresu w podobnej sytuacji.
Edit:
pod odinstalowaniu KB2670838 zrestartuj kompa i usuń plik user.ltx.
- 1
-
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.
- 1
-
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.
-
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.
-
@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.
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.
- 4
-
@ 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.)
- 1
-
-
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):
Teksturę celownika znajdziesz tutaj.
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ę.
- 2
-
Z okazji urodzin, składam najserdeczniejsze życzenia - zdrowia, pomyślności, sukcesów w każdej dziedzinie życia, spełnienia marzeń oraz wytrwałości w wędrówce po Zonie - 100 lat!
- 3
-
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.
- 1
-
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.
- 1
-
@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ć.
- 1
-
! 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.
-
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.
- Poprzednia
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- Dalej
- Strona 2 z 24
Wroga powinność - pierścień najemnika.
w Problemy fabularne
Opublikowano
Sposób I (więcej przeróbek).
Porada powinna być skuteczna jeśli masz "pierścień najemnika".
Całość powinna opierać się na zmodyfikowanej wersji pliku.
Sposób II. (łatwiejsze wykonanie).
jest to wywołanie funkcji set_friends utworzonej w pkt. 2, dopisujesz poniższą linijkę:
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
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.