Mithrandir Opublikowano 27 Stycznia 2014 Zgłoś Udostępnij Opublikowano 27 Stycznia 2014 (edytowane) Witam. Mam mały problem, wiem tylko po części jak to robić. Czy pomógłby mi ktoś w zrobieniu artefaktu maski pgaz? Edytowane 27 Stycznia 2014 przez Mithrandir Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
The Emperor Opublikowano 29 Stycznia 2014 Zgłoś Udostępnij Opublikowano 29 Stycznia 2014 @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_pgaz1description = enc_zone_artifact_af-fuzz-kolobot□ jest to opis artefaktu o identyfikatorze af_pgaz2description = enc_zone_artifact_af-fuzz-kolobor□ jest to opis artefaktu o identyfikatorze af_pgaz3Powyż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 ikonamizatem, 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 checkendPlik 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")endW 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.ddsKtoś 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 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mithrandir Opublikowano 29 Stycznia 2014 Autor Zgłoś Udostępnij Opublikowano 29 Stycznia 2014 Działa wsio, dzięki! W modzie w który gram już jest mod na widok "z maski" po założeniu kombinezonu,więc nie dodawałem skryptu, bo pewnie będzie coś z grafiką :D Jakieś błędy albo migania. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
The Emperor Opublikowano 29 Stycznia 2014 Zgłoś Udostępnij Opublikowano 29 Stycznia 2014 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. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi