Skocz do zawartości

Kostia i schowki


janzamyslny

Rekomendowane odpowiedzi

Ponieważ temat zrobił się "gorący" postanowiłem rozebrać ten kwest Kostii dotyczący schowka w laboratorium X-10 i teleportów z nim związanych, na czynniki pierwsze ;)

Przy okazji sprawdziłem poprawność plików najnowszej polonizacji z poprzednią i wersją oryginalna Solianki. Ale do rzeczy....

Ponieważ kwest na ostatni PDA w X-10 rozpoczyna się po przyniesieniu PDA ze schowka Kostii na Radarze (tego na drzewie), potraktowałem to jako punkt wyjścia do dalszej pracy. Rzeczony dialog z Kostią znajduje się w pliku stable_dialogs_escape.xml, który był ruszany w polonizacji, ale nie może być uszkodzony, bo by mod w ogóle nie ruszył :D.

Oto interesujący nas fragment:


<string id="kostya_radar_taynik_0">
  <text>To wszystko, Kostia, ostatni PDA znaleziony!</text>
</string>
<string id="kostya_radar_taynik_1">
  <text>Świetnie! Teraz mamy wszystkie części kodu. Ale...</text>
</string>
<string id="kostya_radar_taynik_2">
  <text>Co znaczy to "ale"? Kod znaleziony, zostało iść do laboratorioum otwierać drzwi.</text>
</string>
<string id="kostya_radar_taynik_3">
  <text>Poczekaj, to nie takie proste. Mamy części kodu, ale nie sam kod. Żeby złożyć kod potrzebna jest jeszcze jakaś wskazówka. Miałem nadzieję, że ona
  będzie w ostatnim PDA, ale jej tam nie ma. Wydaje się, żę wskazówkę można odnaleźć w samym laboratorium.
  Tak, że musisz tam iść, i na miejscu sie rozejrzeć. Tu masz liczby, które były zaszyfrowane w odnalezionych przez ciebie PDA. Znajdziesz wskazówkę i z jej pomocą złozysz kod z tych liczb.
  Liczby: 9, 7, 2, 54, 61. Tak, a przy okazji, chodzą słuchy, że po odłaczeniu mózgozwęglacza wzrosła aktywnośc pijawek na Radarze.
  Tak więc bądź ostrozny. Według moich założeń ich legowisko możę znajdować się akurat w samym laboratorium.
  Czyli przed wyruszeniem tam, przygotuj się na wszelki wypadek do spotkania z nimi.</text>
</string>
<string id="kostya_radar_taynik_4">
  <text>Dobrze. Dziękuję ci, mam nadzieję, że przy następnym spotkaniu będę mógł czymś się odwdzięczyć.</text>
</string>
<string id="kostya_radar_taynik_5">
  <text>Ano, zobaczymy.</text>

Prowadzi on do kolejnego pliku (chyba najważniejszego dla tego kwestu) - dialogs_escape.xml, który w polonizacji nie był ruszany. Ten plik zawiera wszystkie instrukcje dla moda - jaką dać infoporcję i kiedy, oraz jakie skrypty mają się uruchomić.

Tak na marginesie to podejrzewam, że problemy carlopapy wynikają z tego, że zawarte w końcówce instrukcje dla skrpytów, nie wiadomo dlaczego nie zadziałały :huh:.

Oto interesujący nas fragment:


<dialog id="kostya_radar_taynik">
	 <has_info>kostya_radar_taynik_have</has_info>
  <dont_has_info>kostya_radar_taynik_done</dont_has_info>
	 <phrase_list>
	  <phrase id="0">
	   <text>kostya_radar_taynik_0</text>
    <give_info>kostya_radar_taynik_done</give_info>
    <action>kostya_dialog.esc_pda7_done</action>
  <next>1</next>
		    </phrase>
		    <phrase id="1">
			    <text>kostya_radar_taynik_1</text>
  <next>2</next>
		    </phrase>
		    <phrase id="2">
			    <text>kostya_radar_taynik_2</text>
  <next>3</next>
		    </phrase>
		    <phrase id="3">
			    <text>kostya_radar_taynik_3</text>
  <next>4</next>
		    </phrase>
		    <phrase id="4">
			    <text>kostya_radar_taynik_4</text>
  <next>5</next>
		    </phrase>
		    <phrase id="5">
			    <text>kostya_radar_taynik_5</text>
    <give_info>kostya_x10_taynik_start</give_info>
    <action>kostya_dialog.esc_pda9_have</action>
    <action>spawn_restrictor.create_sr14</action>
   </phrase>
  </phrase_list>
    </dialog>

Zapisane w nim instrukcje wiodą nas do plików skryptowych - kostya_dialog.script (ten był ruszany w najnowszej polonizacji, ale sprawdziłem go i jest identyczny w interesujacym nas fragmencie z poprzednią wersją polonizacji Solianki):


function esc_pda7_done(first_speaker, second_speaker)
dialogs.relocate_item_section(second_speaker, "kostya_pda7", "out")
end
function esc_pda9_have(task, objective)
if db.actor ~= nil then
return db.actor:object("kostya_pda9") ~= nil
end
return false
end

I do pliku spawn_restrictor.script, który nie był ruszany w polonizacji:


-- X-10
function create_sr14()
local se_obj = alife():create("space_restrictor",vector():set(-40.398349761963,-21.837560653687,56.543983459473),1324,2737)
local custom = "[logic]n"..
"active = sr_idlen"..
"[sr_idle]n"..
"on_actor_inside = {+info_restriction} nil %=spawn_teleport35 =spawn_teleport36 =new_inventory11 =create_sr15%"
rewrite_restrictor(se_obj, custom, 2.0)
end

Ten ostatni plik wiedzie nas dalej, do właściwego pliku skryptowego opisującego całą tą checę z teleportami w X-10, ich pojawianie się i znikanie oraz pojawienie się plecaka za siatką - xr_effects.script, który był ruszany w polonizacji, ale sprawdziłem całą sekcję dotycząca X10 i jest identyczna z plikiem oryginalnym i poprzedniej polonizacji. Oto cała sekcja dotycząca X-10:


-- X-10
function play_zvuk6()
local actor = db.actor
   local snd_obj = xr_sound.get_safe_sound_object([[ambientrandomrnd_ratchant]])
snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
end
function new_inventory11()
local obj = alife():create("m_inventory_box11",vector():set(-30.228071212769,-21.02052116394,58.902126312256),2490,2748)
end
function spawn_teleport35()
    local se_obj = alife():create("m_teleport_35",vector():set(-40.398349761963,-21.837560653687,56.543983459473),1324,2737)
xr_logic.pstor_store(db.actor, "m_teleport_35", se_obj.id)   
end
function delete_teleport35(story_id)
local obj_id = xr_logic.pstor_retrieve(db.actor, "m_teleport_35", -1)
local se_obj = alife() : object(obj_id)
if se_obj then
  alife():release(se_obj, true)
end
end
function spawn_teleport36()
    local se_obj = alife():create("m_teleport_36",vector():set(-30.385196685791,-21.020092010498,55.938106536865),1962,2738)
xr_logic.pstor_store(db.actor, "m_teleport_36", se_obj.id)   
end
function delete_teleport36(story_id)
local obj_id = xr_logic.pstor_retrieve(db.actor, "m_teleport_36", -1)
local se_obj = alife() : object(obj_id)
if se_obj then
  alife():release(se_obj, true)
end
end
function create_sr15()
local se_obj = alife():create("space_restrictor",vector():set(-19.994720458984,-9.5514478683472,-35.59744644165),3400,2665)
local custom = "[logic]n"..
"active = sr_idlen"..
"[sr_idle]n"..
"on_actor_inside = {+info_restriction} nil %=delete_teleport36 =play_zvuk6 =spawn_teleport37 =spawn_teleport38 =spawn_teleport39 =spawn_teleport41 =spawn_teleport42 =create_sr16 =create_sr17%"
spawn_restrictor.rewrite_restrictor(se_obj, custom, 2)
end
function spawn_teleport37()
    local se_obj = alife():create("m_teleport_37",vector():set(-19.987188339233,-9.5004644393921,-27.889524459839),3411,2665)
xr_logic.pstor_store(db.actor, "m_teleport_37", se_obj.id)   
end
function delete_teleport37(story_id)
local obj_id = xr_logic.pstor_retrieve(db.actor, "m_teleport_37", -1)
local se_obj = alife() : object(obj_id)
if se_obj then
  alife():release(se_obj, true)
end
end
function spawn_teleport38()
    local se_obj = alife():create("m_teleport_38",vector():set(-20.023223876953,-9.5004854202271,-43.679775238037),3389,2665)
xr_logic.pstor_store(db.actor, "m_teleport_38", se_obj.id)   
end
function delete_teleport38(story_id)
local obj_id = xr_logic.pstor_retrieve(db.actor, "m_teleport_38", -1)
local se_obj = alife() : object(obj_id)
if se_obj then
  alife():release(se_obj, true)
end
end
function spawn_teleport39()
    local se_obj = alife():create("m_teleport_39",vector():set(-20.102291107178,-9.391640663147,-6.6342015266418),3445,2666)
xr_logic.pstor_store(db.actor, "m_teleport_39", se_obj.id)   
end
function delete_teleport39(story_id)
local obj_id = xr_logic.pstor_retrieve(db.actor, "m_teleport_39", -1)
local se_obj = alife() : object(obj_id)
if se_obj then
  alife():release(se_obj, true)
end
end
function spawn_teleport40()
    local se_obj = alife():create("m_teleport_40",vector():set(-6.7612886428833,-7.3805675506592,-56.52018737793),4518,2663)
xr_logic.pstor_store(db.actor, "m_teleport_40", se_obj.id)   
end
function delete_teleport40(story_id)
local obj_id = xr_logic.pstor_retrieve(db.actor, "m_teleport_40", -1)
local se_obj = alife() : object(obj_id)
if se_obj then
  alife():release(se_obj, true)
end
end
function create_sr16()
local se_obj = alife():create("space_restrictor",vector():set(-1.298624753952,-7.4522504806519,-73.977745056152),5456,2661)
local custom = "[logic]n"..
"active = sr_idlen"..
"[sr_idle]n"..
"on_actor_inside = {+info_restriction} nil %=spawn_teleport40%"
spawn_restrictor.rewrite_restrictor(se_obj, custom, 2)
end
function spawn_teleport41()
    local se_obj = alife():create("m_teleport_41",vector():set(-30.603868484497,-8.9784269332886,19.563804626465),2243,2780)
xr_logic.pstor_store(db.actor, "m_teleport_41", se_obj.id)   
end
function delete_teleport41(story_id)
local obj_id = xr_logic.pstor_retrieve(db.actor, "m_teleport_41", -1)
local se_obj = alife() : object(obj_id)
if se_obj then
  alife():release(se_obj, true)
end
end
function spawn_teleport42()
    local se_obj = alife():create("m_teleport_42",vector():set(-32.942707061768,-9.4474973678589,1.0606206655502),2026,2669)
xr_logic.pstor_store(db.actor, "m_teleport_42", se_obj.id)   
end
function delete_teleport42(story_id)
local obj_id = xr_logic.pstor_retrieve(db.actor, "m_teleport_42", -1)
local se_obj = alife() : object(obj_id)
if se_obj then
  alife():release(se_obj, true)
end
end
function create_sr17()
local se_obj = alife():create("space_restrictor",vector():set(-32.942707061768,-9.4474973678589,1.0606206655502),2026,2669)
local custom = "[logic]n"..
"active = sr_idlen"..
"[sr_idle]n"..
"on_actor_inside = {+info_restriction} nil %=create_sr18 =spawn_teleport54 =spawn_teleport53 =spawn_teleport52 =spawn_teleport51 =spawn_teleport50 =spawn_teleport49 =spawn_teleport48 =spawn_teleport43 =spawn_teleport44 =spawn_teleport45 =spawn_teleport46 =spawn_teleport47%"
spawn_restrictor.rewrite_restrictor(se_obj, custom, 2)
end
function spawn_teleport43()
    local se_obj = alife():create("m_teleport_43",vector():set(-48.170837402344,-23.529655456543,0.87714487314224),1004,2787)
xr_logic.pstor_store(db.actor, "m_teleport_43", se_obj.id)   
end
function delete_teleport43(story_id)
local obj_id = xr_logic.pstor_retrieve(db.actor, "m_teleport_43", -1)
local se_obj = alife() : object(obj_id)
if se_obj then
  alife():release(se_obj, true)
end
end
function spawn_teleport44()
    local se_obj = alife():create("m_teleport_44",vector():set(-52.187408447266,-23.582466125488,-7.2188229560852),772,2712)
xr_logic.pstor_store(db.actor, "m_teleport_44", se_obj.id)   
end
function delete_teleport44(story_id)
local obj_id = xr_logic.pstor_retrieve(db.actor, "m_teleport_44", -1)
local se_obj = alife() : object(obj_id)
if se_obj then
  alife():release(se_obj, true)
end
end
function spawn_teleport45()
    local se_obj = alife():create("m_teleport_45",vector():set(-45.096000671387,-23.522695541382,-12.440341949463),1109,2789)
xr_logic.pstor_store(db.actor, "m_teleport_45", se_obj.id)   
end
function delete_teleport45(story_id)
local obj_id = xr_logic.pstor_retrieve(db.actor, "m_teleport_45", -1)
local se_obj = alife() : object(obj_id)
if se_obj then
  alife():release(se_obj, true)
end
end
function spawn_teleport46()
    local se_obj = alife():create("m_teleport_46",vector():set(-18.216438293457,-21.836561203003,41.694786071777),3815,2785)
xr_logic.pstor_store(db.actor, "m_teleport_46", se_obj.id)   
end
function delete_teleport46(story_id)
local obj_id = xr_logic.pstor_retrieve(db.actor, "m_teleport_46", -1)
local se_obj = alife() : object(obj_id)
if se_obj then
  alife():release(se_obj, true)
end
end
function spawn_teleport47()
    local se_obj = alife():create("m_teleport_47",vector():set(-57.305168151855,-21.859325408936,40.726039886475),454,2728)
xr_logic.pstor_store(db.actor, "m_teleport_47", se_obj.id)   
end
function delete_teleport47(story_id)
local obj_id = xr_logic.pstor_retrieve(db.actor, "m_teleport_47", -1)
local se_obj = alife() : object(obj_id)
if se_obj then
  alife():release(se_obj, true)
end
end
function spawn_teleport48()
    local se_obj = alife():create("m_teleport_48",vector():set(-49.594337463379,-23.536252975464,56.616313934326),929,2735)
xr_logic.pstor_store(db.actor, "m_teleport_48", se_obj.id)   
end
function delete_teleport48(story_id)
local obj_id = xr_logic.pstor_retrieve(db.actor, "m_teleport_48", -1)
local se_obj = alife() : object(obj_id)
if se_obj then
  alife():release(se_obj, true)
end
end
function spawn_teleport49()
    local se_obj = alife():create("m_teleport_49",vector():set(-17.414360046387,-21.840921401978,55.660831451416),3850,2751)
xr_logic.pstor_store(db.actor, "m_teleport_49", se_obj.id)   
end
function delete_teleport49(story_id)
local obj_id = xr_logic.pstor_retrieve(db.actor, "m_teleport_49", -1)
local se_obj = alife() : object(obj_id)
if se_obj then
  alife():release(se_obj, true)
end
end
function spawn_teleport50()
    local se_obj = alife():create("m_teleport_50",vector():set(-64.259719848633,-21.895231246948,30.609943389893),113,2725)
xr_logic.pstor_store(db.actor, "m_teleport_50", se_obj.id)   
end
function delete_teleport50(story_id)
local obj_id = xr_logic.pstor_retrieve(db.actor, "m_teleport_50", -1)
local se_obj = alife() : object(obj_id)
if se_obj then
  alife():release(se_obj, true)
end
end
function spawn_teleport51()
    local se_obj = alife():create("m_teleport_51",vector():set(-52.363986968994,-23.589921951294,-13.084785461426),765,2788)
xr_logic.pstor_store(db.actor, "m_teleport_51", se_obj.id)   
end
function delete_teleport51(story_id)
local obj_id = xr_logic.pstor_retrieve(db.actor, "m_teleport_51", -1)
local se_obj = alife() : object(obj_id)
if se_obj then
  alife():release(se_obj, true)
end
end
function spawn_teleport52()
    local se_obj = alife():create("m_teleport_52",vector():set(-52.968780517578,-23.594024658203,-2.0381298065186),749,2715)
xr_logic.pstor_store(db.actor, "m_teleport_52", se_obj.id)   
end
function delete_teleport52(story_id)
local obj_id = xr_logic.pstor_retrieve(db.actor, "m_teleport_52", -1)
local se_obj = alife() : object(obj_id)
if se_obj then
  alife():release(se_obj, true)
end
end
function spawn_teleport53()
    local se_obj = alife():create("m_teleport_53",vector():set(3.5164728164673,-21.845838546753,41.598541259766),6991,2755)
xr_logic.pstor_store(db.actor, "m_teleport_53", se_obj.id)   
end
function delete_teleport53(story_id)
local obj_id = xr_logic.pstor_retrieve(db.actor, "m_teleport_53", -1)
local se_obj = alife() : object(obj_id)
if se_obj then
  alife():release(se_obj, true)
end
end
function spawn_teleport54()
    local se_obj = alife():create("m_teleport_54",vector():set(-6.4082336425781,-21.823808670044,55.724376678467),4658,2752)
xr_logic.pstor_store(db.actor, "m_teleport_54", se_obj.id)   
end
function delete_teleport54(story_id)
local obj_id = xr_logic.pstor_retrieve(db.actor, "m_teleport_54", -1)
local se_obj = alife() : object(obj_id)
if se_obj then
  alife():release(se_obj, true)
end
end
function create_sr18()
local se_obj = alife():create("space_restrictor",vector():set(-30.385196685791,-21.020092010498,55.938106536865),1962,2738)
local custom = "[logic]n"..
"active = sr_idlen"..
"[sr_idle]n"..
"on_actor_inside = {+info_restriction} nil %=play_zvuk6 =delete_teleport54 =delete_teleport53 =delete_teleport52 =delete_teleport51 =delete_teleport50 =delete_teleport49 =delete_teleport48 =delete_teleport47 =delete_teleport46 =delete_teleport45 =delete_teleport44 =delete_teleport43 =delete_teleport42 =delete_teleport41 =delete_teleport40 =delete_teleport39 =delete_teleport38 =delete_teleport37 =delete_teleport35%"
spawn_restrictor.rewrite_restrictor(se_obj, custom, 2)
end

Jak się w niego wpatrzymy to dostrzeżemy, że za spawn plecaka i jego zawartość odpowiadają dwa pliki, które nie były ruszane w polonizacji - za spawn: spawn_sections.ltx


[m_inventory_box11]:kostya_box
visual = equipmentsitem_rukzak
radius = 1
custom_data = scriptsm_inventory_box11.ltx

...i za zawartość plecaka: m_inventory_box11.ltx


[spawn]
kostya_pda9 = 1
mutant_krovosos_cocoon = 1

I to by było na tyle tego kwestu w zapisie... Pozostał jeszcze wpis w encyklopedii, który nie ma znaczenia dla samego przebiegu kwestu.

Tak więc po sprawdzeniu i porównaniu plików zarówno z poprzednią polonizacją jak i z oryginałem Solianki stwierdzam, że błąd nie leży po stronie polonizacji.

Mam pewien pomysł by sprawdzić moje domysły, które opisałem na początku, więc jeśli carlopapa ma chęć posprawdzać co nieco, to niech do mnie napisze na PW :D

Odnośnik do komentarza
Udostępnij na innych stronach

Czemu tak wyłączałeś efekty pogodowe? Oczywiście, że mogło mieć wpływ, brak limitu czasowego- niepotrzebny dodatek, limit 7 dni mamy tylko na cykliczne zlecenia od Barmana, Sidora itp. Udźwig sam zwiększam, ale maximum to 500 kg (5 ton to zdecydowanie za dużo) i jest to jedyna zmiana w plikach której dokonuję.

Odnośnik do komentarza
Udostępnij na innych stronach

Carlopapa - podczas opróżniania schowka Kostii na Radarze spotyka nas coś w rodzaju "uderzenia". Dość ciężko to przeżyć, miałeś to? Jeśli wyłączyłeś efekty pogodowe to może tu tkwi przyczyna kłopotów z następnym schowkiem w X10. Nie było "uderzenia" i skrypt nie uruchamia teleportów bo myśli że jeszcze nie zaliczyło się poprzednie zadanie. To tylko domysły, oczywiście. Z udźwigiem i spawnem nie przesadzaj, handlarze też mają swój bazowy udźwig i jak ich przeładujesz - umierają.

Odnośnik do komentarza
Udostępnij na innych stronach

Efekty pogodowe powyłączałem ponieważ nie cierpię w grach deszczu i burz jestem fanem czystych FPS-ów, a że stalker mnie tak wciągnął to już inna sprawa. Na radzrze miałem to uderzenie i po kilku próbach wzięcie zawartości schowka kończyło się śmiercią dopiero pomogły arty. Pogodę wyłączam też aby poprawić FPS nie mam za dobrego kompa a sola całkowicie wykorzystuje moje zasoby systemowe.

Odnośnik do komentarza
Udostępnij na innych stronach

Carlopapa wypróbował dwie opcje, które podesłałem mu do przetestowania w sprawie tych nieobecnych teleportów w X-10 w jego grze. Niestety obie zawiodły... :unsure:

Moja gruntowna analiza kwestu parę postów wyżej, nie wnosi nic nowego w kwestii poznania przyczyn takiego błędu, bo polonizacja nie tykała akurat tych fragmentów kodu. :huh:

Jedynym innym elementem w tej całej układance jest miejsce spawnu schowka na Radarze w grze carlopapy. Dotychczas nikt z nas grajacych nie miał go w tym miejscu gdzie on (a u niego znajdował się on nie na drzewie, a na kamieniach nieopodal wagonika snajpera) i tak naprawdę nie wiemy, czy to nie powoduje jakiegoś błędu. My wszyscy mieliśmy do zawsze na drzewie (i tam go zawsze innym kazaliśmy szukać - i go znajdowali).

Jak znajdę troche czasu, to spróbuję znaleźć w plikach czym te schowki oprócz lokalizacji się różnią - bo może w modzie jest błąd i akurat ten schowek jest jakiś felerny.... :confused:

Odnośnik do komentarza
Udostępnij na innych stronach

Jedynym innym elementem w tej całej układance jest miejsce spawnu schowka na Radarze w grze carlopapy. Dotychczas nikt z nas grajacych nie miał go w tym miejscu gdzie on (a u niego znajdował się on nie na drzewie, a na kamieniach nieopodal wagonika snajpera) i tak naprawdę nie wiemy, czy to nie powoduje jakiegoś błędu. My wszyscy mieliśmy do zawsze na drzewie (i tam go zawsze innym kazaliśmy szukać - i go znajdowali).

Akurat ja zawsze miałem schowek Kostii na rozbitym helikopterze w lesie na Radarze.

Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.
Uwaga: Twój wpis zanim będzie widoczny, będzie wymagał zatwierdzenia moderatora.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

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