Efekt oddechu postaci przy założonym kombinezonie

Efekt oddechu postaci przy założonym kombinezonie

Postprzez vandr w 26 Mar 2012, 17:35

Dzięki uprzejmości niejakiego Charsi z forum AMK oraz własnym dochodzeniom udało się mi/nam dojść do efektu odgłosu oddechu postaci przy założonym odpowiednim kombinezonie, który używa hełmu/systemu odprowadzania powietrza itp.

1. Pobieramy poniższy pliczek(15-sekundowa zlepka odgłosów oddechu dla wyeliminowania monotonii dźwięku, które wziąłem z paczki P.G.R.) i wrzucamy go do:

Kod: Zaznacz wszystko
gamedata/sounds/actor


2. Otwieramy jakikolwiek skrypt, kasujemy jego zawartość i wklejamy to:

Kod: Zaznacz wszystko
---------------------????????????? ???? ??????? ??? ?????? ?????-----------------------------
-- The table contains a section of suits with a helmet. Supplement those that are in your mod!
local outfits = {
["ecolog_outfit"]=true,
["specops_outfit"]=true,
["specops_outfit_bad"]=true
}

-- the sound of breathing ( Need file sounds\actor\gas_mask_idle.ogg )
local snd            = xr_sound.get_safe_sound_object([[actor\gas_mask_idle]])

-- call from update (actor_binder:update(delta) )
function sound_update()
    local outfit = db.actor:item_in_slot(6)
    if outfit and outfits[outfit:section()]  then
        if not snd:playing() then snd:play_at_pos(db.actor, vector ():set (0, 0, 0), 0, sound_object.s2d) end
    else
        if snd:playing() then snd:stop() end
    end
end
---------------------------------------------------------------------------------------------


Zapisujemy plik pod nazwą np: snd_breath.script

3. Otwieramy nasz bind_stalker.script i pod poniższą linią:

Kod: Zaznacz wszystko
function actor_binder:update(delta)


dopisujemy ów wpis:

Kod: Zaznacz wszystko
snd_breath.sound_update() -- sound of breathing


Zapisujemy, i odpalamy grę. Testowane na Ukrytych Ścieżkach I, więc powinno hulać bez problemu w innych modach/vanilla. Jeśli chcemy dodać inne kombinezony wykorzystujące ów odgłos, należy dodać poszczególne nazwy kombinezonów w tym miejscu, pod którymś z nich:

Kod: Zaznacz wszystko
local outfits = {
["ecolog_outfit"]=true,
["specops_outfit"]=true,
["specops_outfit_bad"]=true
}


O czym należy pamiętać- jeśli dodajemy na sam spód kolejny kombinezon, to przy kombinezonie NAD nowym NALEŻY dodać przecinek. Jak widzicie, po ostatnim TRUE nie ma przecinka(jest to ostatni kombinezon, tak więc tutaj go nie wstawiamy).
Ostatnio edytowany przez vandr 06 Gru 2012, 13:19, edytowano w sumie 2 razy
TAJAG JUDYN
HAZBAZ
SEKODYN!

Za ten post vandr otrzymał następujące punkty reputacji:
Positive DJ[Zone], scigacz1975, Krzysu_Pl, r_populik, Junx, Kudkudak.
vandr
Modder

Posty: 3876
Dołączenie: 21 Lut 2011, 14:18
Ostatnio był: 12 Sie 2024, 20:47
Kozaki: 1747

Reklamy Google

Re: Efekt oddechu postaci przy założonym kombinezonie

Postprzez Kilanov w 30 Mar 2012, 18:19

Wszystko ładnie, pięknie, ale mi po wczytaniu save'a lub rozpoczęciu nowej gry wywala do windy. Z loga:

Kod: Zaznacz wszystko
FATAL ERROR
 
[error]Expression    : fatal error
[error]Function      : CScriptEngine::lua_error
[error]File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
[error]Line          : 73
[error]Description   : <no expression>
[error]Arguments     : LUA error: ....r. - shadow of chernobyl\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)


Pomocy! :+:

Miłość swoją zakopałeś, litość mocno śpi,
Chciałbyś cały świat utopić w oceanie krwi...


Kilanov
Wygnany z Zony

Posty: 6
Dołączenie: 30 Mar 2012, 16:04
Ostatnio był: 08 Mar 2013, 00:58
Frakcja: Samotnicy
Ulubiona broń: TOZ34
Kozaki: 0

Re: Efekt oddechu postaci przy założonym kombinezonie

Postprzez vandr w 30 Mar 2012, 18:23

Używasz prócz tego jakichś innych modów?
TAJAG JUDYN
HAZBAZ
SEKODYN!
vandr
Modder

Posty: 3876
Dołączenie: 21 Lut 2011, 14:18
Ostatnio był: 12 Sie 2024, 20:47
Kozaki: 1747

Re: Efekt oddechu postaci przy założonym kombinezonie

Postprzez Kilanov w 30 Mar 2012, 18:25

Nie, tylko mała zmiana w skrypcie zmieniająca udźwig.
Poprawka: gdy odpalam nową grę nie wywala, ale nie mam okazji sprawdzić czy działa (brak kombinezonu w okolicy :E ).

Miłość swoją zakopałeś, litość mocno śpi,
Chciałbyś cały świat utopić w oceanie krwi...


Kilanov
Wygnany z Zony

Posty: 6
Dołączenie: 30 Mar 2012, 16:04
Ostatnio był: 08 Mar 2013, 00:58
Frakcja: Samotnicy
Ulubiona broń: TOZ34
Kozaki: 0

Re: Efekt oddechu postaci przy założonym kombinezonie

Postprzez vandr w 30 Mar 2012, 18:27

Skoro nie wywala gry, to zapewne działa. Musiałbyś sobie zespawnować takowy kombinezon. Poszukaj na forum o spawn Atlas.
TAJAG JUDYN
HAZBAZ
SEKODYN!

Za ten post vandr otrzymał następujące punkty reputacji:
Positive Kilanov.
vandr
Modder

Posty: 3876
Dołączenie: 21 Lut 2011, 14:18
Ostatnio był: 12 Sie 2024, 20:47
Kozaki: 1747

Re: Efekt oddechu postaci przy założonym kombinezonie

Postprzez scigacz1975 w 30 Mar 2012, 18:39

Ten bug co podałeś może powodować złe scalenie skryptu bind_stalker.script - gdyby błąd się powtórzył to oprócz loga wrzuć tu ten plik.
Awatar użytkownika
scigacz1975
Monolit

Posty: 3243
Dołączenie: 29 Sty 2010, 00:26
Ostatnio był: 12 Wrz 2024, 15:31
Miejscowość: Stalowa Wola
Frakcja: Samotnicy
Ulubiona broń: --
Kozaki: 926

Re: Efekt oddechu postaci przy założonym kombinezonie

Postprzez Kilanov w 30 Mar 2012, 18:59

Modyfikacja może działa, ale save'a wczytać nie mogę, a jestem już bardzo daleko w grze (rozbudowany save, robiłem dużo misji pobocznych i zbierałem unikatowe bronie)...

Plik bind_stalker.script wklejony na prośbę:

Kod: Zaznacz wszystko
function init    (obj)
   xr_motivator.AddToMotivator(obj)
end

function actor_init    (npc)
   npc:bind_object(actor_binder(npc))
end

lasthealth  = 0
lasttime   = 0
post_process = 0
local weapon_hide = false
----------------------------------------------------------------------------------------------------------------------
class "actor_binder" (object_binder)
----------------------------------------------------------------------------------------------------------------------
function actor_binder:__init (obj) super(obj)
   self.bCheckStart = false
   self.weather_manager = level_weathers.WeatherManager()
   self.actor_detector = xr_detector.actor_detector()
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:net_spawn(data)
   printf("actor net spawn")      

   level.show_indicators()

   self.bCheckStart = true
   self.weapon_hide = false -- ńďđ˙ňŕíî čëč íĺň îđóćčĺ ďđč đŕçăîâîđĺ.
   weapon_hide = false -- óńňŕíŕâëčâŕĺě ăëîáŕëüíűé äĺôîëňîâűé ôëŕă.

   if object_binder.net_spawn(self,data) == false then
      return false
   end

   db.add_actor(self.object)
   
   if self.st.disable_input_time == nil then
      level.enable_input()
   end

   self.weather_manager:reset()
--   game_stats.initialize ()

   if(actor_stats.add_to_ranking~=nil)then
      actor_stats.add_to_ranking(self.object:id())
   end

   --' Çŕăđóćŕĺě íŕńňđîéęč äđîďŕ
   death_manager.init_drop_settings()

   return true
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:net_destroy()
   if(actor_stats.remove_from_ranking~=nil)then
      actor_stats.remove_from_ranking(self.object:id())
   end
--   game_stats.shutdown ()
   db.del_actor(self.object)

    sr_light.clean_up ()

   self.object:set_callback(callback.inventory_info, nil)
   self.object:set_callback(callback.article_info, nil)
   self.object:set_callback(callback.on_item_take, nil)
   self.object:set_callback(callback.on_item_drop, nil)
   --self.object:set_callback(callback.actor_sleep, nil)
   self.object:set_callback(callback.task_state, nil)
   self.object:set_callback(callback.level_border_enter, nil)
   self.object:set_callback(callback.level_border_exit, nil)
   self.object:set_callback(callback.take_item_from_box, nil)

   if sr_psy_antenna.psy_antenna then
      sr_psy_antenna.psy_antenna:destroy()
      sr_psy_antenna.psy_antenna = false
   end

   xr_sound.stop_all_sound_object()

   object_binder.net_destroy(self)
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:reinit()
   object_binder.reinit(self)
   
   local npc_id = self.object:id()

   db.storage[npc_id] = { }

   self.st = db.storage[npc_id]
   self.st.pstor = nil

   self.next_restrictors_update_time = -10000

   self.object:set_callback(callback.inventory_info, self.info_callback, self)
   self.object:set_callback(callback.article_info, self.article_callback, self)
   self.object:set_callback(callback.on_item_take, self.on_item_take, self)
   self.object:set_callback(callback.on_item_drop, self.on_item_drop, self)
   self.object:set_callback(callback.trade_sell_buy_item, self.on_trade, self) -- for game stats
   --self.object:set_callback(callback.actor_sleep, self.sleep_callback, self)
   self.object:set_callback(callback.task_state, self.task_callback, self)
   --self.object:set_callback(callback.map_location_added, self.map_location_added_callback, self)
   self.object:set_callback(callback.level_border_enter, self.level_border_enter, self)
   self.object:set_callback(callback.level_border_exit, self.level_border_exit, self)
   self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self)
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:take_item_from_box(box, item)
   local story_id = box:story_id()
   if story_id == nil then
      return
   end

   treasure_manager.take_item_from_box(box, story_id)
--[[   
   local respawner = se_respawn.get_respawner_by_parent(story_id)
   if respawner == nil then
      return
   end
   
   --' Íĺîáőîäčěî óěĺíüřčňü ń÷ĺň÷čę â đĺńďŕâíĺđĺ
   respawner:remove_spawned(item:id())

   local smart_terrain = db.strn_by_respawn[respawner:name()]
   if smart_terrain == nil then
      return
   end

   local npc = smart_terrain.gulag:get_nearest_online_obj(db.actor:position())
    if npc ~= nil then
       xr_sound.set_sound_play(npc, "reac_box")
       xr_gulag.setGulagEnemy(smart_terrain:name() , db.actor)      
    end
]]
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:level_border_enter(npc, info_id)
   self.actor_detector:actor_enter()
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:level_border_exit(npc, info_id)
   self.actor_detector:actor_exit()
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:info_callback(npc, info_id)
   printf("*INFO*: npc='%s' id='%s'", npc:name(), info_id)
   --' Ńţćĺň
   level_tasks.proceed(self.object)
   -- Îňěĺňęč íŕ ęŕđňĺ
   level_tasks.process_info_portion(info_id)
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:on_trade (item, sell_bye, money)
    if sell_bye == true then
       game_stats.money_trade_update (money)
    else       
       game_stats.money_trade_update (-money)
    end   
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:article_callback(npc, group, name)
   --printf("article_callback [%s][%s]", group, name)
   if device().precache_frame >1 then return end
   
   if group == "Diary" then
      news_manager.send_encyclopedy("diary", group)
   else
      news_manager.send_encyclopedy("encyclopedy", group)
   end
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:on_item_take (obj)
    level_tasks.proceed(self.object)
    --game_stats.update_take_item (obj, self.object)
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:on_item_drop (obj)
    level_tasks.proceed(self.object)
    --game_stats.update_drop_item (obj, self.object)
end
----------------------------------------------------------------------------------------------------------------------

function actor_binder:task_callback(_task, _objective, _state)
   task_manager.task_callback(_task:get_id(), _objective:get_idx(), _state)
   if _objective:get_idx() == 0 then
      if _state == task.fail then
         news_manager.send_task(db.actor, "fail", _task, _objective)
      elseif _state == task.completed then
         task_manager.reward_by_task(_task)
         news_manager.send_task(db.actor, "complete", _task, _objective)
      else
         news_manager.send_task(db.actor, "new", _task, _objective)
      end
   else
      if _task:get_objective(0):get_state() == task.in_progress then
         news_manager.send_task(db.actor, "update", _task, _objective)
      end
   end
end

----------------------------------------------------------------------------------------------------------------------
function actor_binder:map_location_added_callback(spot_type_str, object_id)
   if (false==app_ready()) or (device().precache_frame>1) then return end
   --'news_manager.send_task(db.actor, "new")
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:update(delta)
snd_breath.sound_update() -- sound of breathing
   object_binder.update(self, delta)

   -- DEBUG slowdown
--   slowdown.update()

   local time = time_global()
   
   game_stats.update (delta, self.object)

   -- ŕďäĺéň ďîăîäű
   self.weather_manager:update()
   
   -- ŕďäĺéň ńőĺěű äĺňĺęňîđŕ
   self.actor_detector:update()

   -- ŕďäĺéň çâóęîâîé ńőĺěű ŕęňĺđŕ
   xr_sound.update_actor()
   
   --' Ďđîâĺđęŕ ďîňĺđč ćčçíč
--[[
   if self.object.health - lasthealth > 0.001 or
      self.object.health - lasthealth < -0.001 then
      printf("%f | %f", self.object.health, self.object.health - lasthealth, game.time() - lasttime)
      lasthealth = self.object.health
      lasttime = game.time()
   end
]]   
   -- Îáíîâëĺíčĺ îňęëţ÷ĺíč˙ ââîäŕ ń ęëŕâčŕňóđű.
   if self.st.disable_input_time ~= nil and
      game.get_game_time():diffSec(self.st.disable_input_time) >= self.st.disable_input_idle
   then
      level.enable_input()
      self.st.disable_input_time = nil
   end
   -- Îáíîâëĺíčĺ ńíŕ ń ďĺđĺíîńîě ÷óâŕęŕ â óęŕçŕííóţ ďîçčöčţ
   if self.st.sleep_relocate_time ~= nil and
      game.get_game_time():diffSec(self.st.sleep_relocate_time) >= self.st.sleep_relocate_idle
   then
      self.object:set_actor_position(self.st.sleep_relocate_point)
      local dir = self.st.sleep_relocate_point:sub(self.st.sleep_relocate_look)
      self.object:set_actor_direction(dir:getH())
      self.st.sleep_relocate_time = nil
   end

   -- Ŕďäĺéň ďđ˙ňŕíčĺ îđóćč˙ čăđîęŕ âî âđĺě˙ äčŕëîăŕ
   if weapon_hide == true or self.object:is_talking() then
      if self.weapon_hide == false then
         self.object:hide_weapon()
         self.weapon_hide = true
      end
   else
      if self.weapon_hide == true then
         self.object:restore_weapon()
         self.weapon_hide = false
      end
   end   

   -- îáíîâëĺíčĺ đĺńňđčęňîđîâ, ęîňîđűĺ ďîä ëîăčęîé, ńđŕáŕňűâŕĺň ÷ĺđĺç číňĺđâŕëű âđĺěĺíč
   if self.next_restrictors_update_time < time then
      bind_restrictor.actor_update(delta)

      self.next_restrictors_update_time = time + 200

      task_manager.actor_update()
   end

   -- îáíîâëĺíčĺ ďîńňďđîöĺńńîâ
   if post_process ~= 0 then
      if post_process:update () == true then
         post_process = 0
      end
   end

   -- îáíîâëĺíčĺ ďńč-ŕíňĺííű
   if sr_psy_antenna.psy_antenna then
      sr_psy_antenna.psy_antenna:update(delta)
   end

   --' Âűâîä ńîîáůĺíč˙ î áîëüřîé đŕäčŕöčč
   if self.object.radiation >= 0.7 then
      local hud = get_hud()
      local custom_static = hud:GetCustomStatic("cs_radiation_danger")
      if custom_static == nil then
         hud:AddCustomStatic("cs_radiation_danger", true)
         hud:GetCustomStatic("cs_radiation_danger"):wnd():SetTextST("st_radiation_danger")
      end
   else
      local hud = get_hud()
      local custom_static = hud:GetCustomStatic("cs_radiation_danger")
      if custom_static ~= nil then
         hud:RemoveCustomStatic("cs_radiation_danger")
      end
   end



    if self.bCheckStart then
      printf("SET DEFAULT INFOS")      

      if not has_alife_info("storyline_actor_start") and
         (level.name() == "l01_escape")
      then
         self.object:give_info_portion("storyline_actor_start")
         _G.g_start_avi = true
         printf("*AVI* RUN START AVI")         
      end

--      if not has_alife_info("encyclopedy") then
--         self.object:give_info_portion("encyclopedy")
--      end

      if not has_alife_info("global_dialogs") then
         self.object:give_info_portion("global_dialogs")
      end

      if not has_alife_info("level_changer_icons") then
         self.object:give_info_portion("level_changer_icons")
      end

      level_tasks.add_lchanger_location()

      self.bCheckStart = false      
   end      
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:save(packet)
   printf("actor_binder:save(): self.object:name()='%s'", self.object:name())
   object_binder.save(self, packet)

   --' Ńîőđŕí˙ĺě äŕííűĺ îá îňęëţ÷ĺííîě ââîäĺ
   if self.st.disable_input_time == nil then
      packet:w_bool(false)
   else
      packer:w_bool(true)
      utils.w_CTime(packet, self.st.disable_input_time)
   end

   xr_logic.pstor_save_all(self.object, packet)
   self.weather_manager:save(packet)

   sr_psy_antenna.save( packet )
   task_manager.save(packet)
   self.actor_detector:save(packet)   
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:load(reader)
   printf("actor_binder:load(): self.object:name()='%s'", self.object:name())
   object_binder.load(self, reader)
   printf("actor_binder:object_binder.load(): self.object:name()='%s'", self.object:name())

   if reader:r_eof() then
      abort("SAVE FILE IS CORRUPT")
   end

   local stored_input_time = reader:r_u8()
   if stored_input_time == true then
      self.st.disable_input_time = utils.r_CTime(reader)
   end

   xr_logic.pstor_load_all(self.object, reader)
   self.weather_manager:load(reader)

   sr_psy_antenna.load(reader)
   task_manager.load(reader)
   self.actor_detector:load(reader)   
end
----------------------------------------------------------------------------------------------------------------------

--ńňŕđň ďđĺôĺň÷ŕ çâóęîâ
--if string.find(command_line(), "-noprefetch") == nil then
--   sound_prefetch.prefetch_sounds()
--end


-- Weapon functions
function hide_weapon()
   weapon_hide = true
end
function restore_weapon()
   weapon_hide = false
end

// this is test for section iteration
/**
local function test_section_iteration(file_name, section_name)
   printf         ("file    : %s",file_name)
   printf         ("section : %s",section_name)
   
   local         file = ini_file(file_name)
   local         n = file:line_count(section_name)
   printf         ("lines   : %d",n)
   
   local         id, value = "", "", result
   for i=0,n-1 do
      result, id, value   = file:r_line(section_name,i,"","")
      printf      ("line %d : %s = %s",i,id,value)
   end
end

test_section_iteration("system.ltx","space_restrictor")
/**/



Miłość swoją zakopałeś, litość mocno śpi,
Chciałbyś cały świat utopić w oceanie krwi...


Kilanov
Wygnany z Zony

Posty: 6
Dołączenie: 30 Mar 2012, 16:04
Ostatnio był: 08 Mar 2013, 00:58
Frakcja: Samotnicy
Ulubiona broń: TOZ34
Kozaki: 0

Re: Efekt oddechu postaci przy założonym kombinezonie

Postprzez scigacz1975 w 30 Mar 2012, 20:14

Wg syntax_checker plik jest ok. Potrzebuję loga z ostatniego błędu
Awatar użytkownika
scigacz1975
Monolit

Posty: 3243
Dołączenie: 29 Sty 2010, 00:26
Ostatnio był: 12 Wrz 2024, 15:31
Miejscowość: Stalowa Wola
Frakcja: Samotnicy
Ulubiona broń: --
Kozaki: 926

Re: Efekt oddechu postaci przy założonym kombinezonie

Postprzez vandr w 30 Mar 2012, 20:20

Ścigacz, Syntax Checker nie jest w 100 procentach wiarygodny- ostatnio grzebiąc w skryptach musiałem usunąć jedną linię, której on mi nie wskazał. Dziwne, że ten bug wyskoczył Kilanovi- sprawdzałem na wersji vanilliowej oraz moda- zero problemów.
TAJAG JUDYN
HAZBAZ
SEKODYN!
vandr
Modder

Posty: 3876
Dołączenie: 21 Lut 2011, 14:18
Ostatnio był: 12 Sie 2024, 20:47
Kozaki: 1747

Re: Efekt oddechu postaci przy założonym kombinezonie

Postprzez scigacz1975 w 30 Mar 2012, 20:41

Spróbuj tego:

Kod: Zaznacz wszystko
    function init    (obj)
       xr_motivator.AddToMotivator(obj)
    end

    function actor_init    (npc)
       npc:bind_object(actor_binder(npc))
    end

    lasthealth  = 0
    lasttime   = 0
    post_process = 0
    local weapon_hide = false
    ----------------------------------------------------------------------------------------------------------------------
    class "actor_binder" (object_binder)
    ----------------------------------------------------------------------------------------------------------------------
    function actor_binder:__init (obj) super(obj)
       self.bCheckStart = false
       self.weather_manager = level_weathers.WeatherManager()
       self.actor_detector = xr_detector.actor_detector()
    end
    ----------------------------------------------------------------------------------------------------------------------
    function actor_binder:net_spawn(data)
       printf("actor net spawn")     

       level.show_indicators()

       self.bCheckStart = true
       self.weapon_hide = false -- ńďđ˙ňŕíî čëč íĺň îđóćčĺ ďđč đŕçăîâîđĺ.
       weapon_hide = false -- óńňŕíŕâëčâŕĺě ăëîáŕëüíűé äĺôîëňîâűé ôëŕă.

       if object_binder.net_spawn(self,data) == false then
          return false
       end

       db.add_actor(self.object)
       
       if self.st.disable_input_time == nil then
          level.enable_input()
       end

       self.weather_manager:reset()
    --   game_stats.initialize ()

       if(actor_stats.add_to_ranking~=nil)then
          actor_stats.add_to_ranking(self.object:id())
       end

       --' Çŕăđóćŕĺě íŕńňđîéęč äđîďŕ
       death_manager.init_drop_settings()

       return true
    end
    ----------------------------------------------------------------------------------------------------------------------
    function actor_binder:net_destroy()
       if(actor_stats.remove_from_ranking~=nil)then
          actor_stats.remove_from_ranking(self.object:id())
       end
    --   game_stats.shutdown ()
       db.del_actor(self.object)

        sr_light.clean_up ()

       self.object:set_callback(callback.inventory_info, nil)
       self.object:set_callback(callback.article_info, nil)
       self.object:set_callback(callback.on_item_take, nil)
       self.object:set_callback(callback.on_item_drop, nil)
       --self.object:set_callback(callback.actor_sleep, nil)
       self.object:set_callback(callback.task_state, nil)
       self.object:set_callback(callback.level_border_enter, nil)
       self.object:set_callback(callback.level_border_exit, nil)
       self.object:set_callback(callback.take_item_from_box, nil)

       if sr_psy_antenna.psy_antenna then
          sr_psy_antenna.psy_antenna:destroy()
          sr_psy_antenna.psy_antenna = false
       end

       xr_sound.stop_all_sound_object()

       object_binder.net_destroy(self)
    end
    ----------------------------------------------------------------------------------------------------------------------
    function actor_binder:reinit()
       object_binder.reinit(self)
       
       local npc_id = self.object:id()

       db.storage[npc_id] = { }

       self.st = db.storage[npc_id]
       self.st.pstor = nil

       self.next_restrictors_update_time = -10000

       self.object:set_callback(callback.inventory_info, self.info_callback, self)
       self.object:set_callback(callback.article_info, self.article_callback, self)
       self.object:set_callback(callback.on_item_take, self.on_item_take, self)
       self.object:set_callback(callback.on_item_drop, self.on_item_drop, self)
       self.object:set_callback(callback.trade_sell_buy_item, self.on_trade, self) -- for game stats
       --self.object:set_callback(callback.actor_sleep, self.sleep_callback, self)
       self.object:set_callback(callback.task_state, self.task_callback, self)
       --self.object:set_callback(callback.map_location_added, self.map_location_added_callback, self)
       self.object:set_callback(callback.level_border_enter, self.level_border_enter, self)
       self.object:set_callback(callback.level_border_exit, self.level_border_exit, self)
       self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self)
    end
    ----------------------------------------------------------------------------------------------------------------------
    function actor_binder:take_item_from_box(box, item)
       local story_id = box:story_id()
       if story_id == nil then
          return
       end

       treasure_manager.take_item_from_box(box, story_id)
    --[[   
       local respawner = se_respawn.get_respawner_by_parent(story_id)
       if respawner == nil then
          return
       end
       
       --' Íĺîáőîäčěî óěĺíüřčňü ń÷ĺň÷čę â đĺńďŕâíĺđĺ
       respawner:remove_spawned(item:id())

       local smart_terrain = db.strn_by_respawn[respawner:name()]
       if smart_terrain == nil then
          return
       end

       local npc = smart_terrain.gulag:get_nearest_online_obj(db.actor:position())
        if npc ~= nil then
           xr_sound.set_sound_play(npc, "reac_box")
           xr_gulag.setGulagEnemy(smart_terrain:name() , db.actor)     
        end
    ]]
    end
    ----------------------------------------------------------------------------------------------------------------------
    function actor_binder:level_border_enter(npc, info_id)
       self.actor_detector:actor_enter()
    end
    ----------------------------------------------------------------------------------------------------------------------
    function actor_binder:level_border_exit(npc, info_id)
       self.actor_detector:actor_exit()
    end
    ----------------------------------------------------------------------------------------------------------------------
    function actor_binder:info_callback(npc, info_id)
       printf("*INFO*: npc='%s' id='%s'", npc:name(), info_id)
       --' Ńţćĺň
       level_tasks.proceed(self.object)
       -- Îňěĺňęč íŕ ęŕđňĺ
       level_tasks.process_info_portion(info_id)
    end
    ----------------------------------------------------------------------------------------------------------------------
    function actor_binder:on_trade (item, sell_bye, money)
        if sell_bye == true then
           game_stats.money_trade_update (money)
        else       
           game_stats.money_trade_update (-money)
        end   
    end
    ----------------------------------------------------------------------------------------------------------------------
    function actor_binder:article_callback(npc, group, name)
       --printf("article_callback [%s][%s]", group, name)
       if device().precache_frame >1 then return end
       
       if group == "Diary" then
          news_manager.send_encyclopedy("diary", group)
       else
          news_manager.send_encyclopedy("encyclopedy", group)
       end
    end
    ----------------------------------------------------------------------------------------------------------------------
    function actor_binder:on_item_take (obj)
        level_tasks.proceed(self.object)
        --game_stats.update_take_item (obj, self.object)
    end
    ----------------------------------------------------------------------------------------------------------------------
    function actor_binder:on_item_drop (obj)
        level_tasks.proceed(self.object)
        --game_stats.update_drop_item (obj, self.object)
    end
    ----------------------------------------------------------------------------------------------------------------------

    function actor_binder:task_callback(_task, _objective, _state)
       task_manager.task_callback(_task:get_id(), _objective:get_idx(), _state)
       if _objective:get_idx() == 0 then
          if _state == task.fail then
             news_manager.send_task(db.actor, "fail", _task, _objective)
          elseif _state == task.completed then
             task_manager.reward_by_task(_task)
             news_manager.send_task(db.actor, "complete", _task, _objective)
          else
             news_manager.send_task(db.actor, "new", _task, _objective)
          end
       else
          if _task:get_objective(0):get_state() == task.in_progress then
             news_manager.send_task(db.actor, "update", _task, _objective)
          end
       end
    end

    ----------------------------------------------------------------------------------------------------------------------
    function actor_binder:map_location_added_callback(spot_type_str, object_id)
       if (false==app_ready()) or (device().precache_frame>1) then return end
       --'news_manager.send_task(db.actor, "new")
    end
    ----------------------------------------------------------------------------------------------------------------------
    function actor_binder:update(delta)

       object_binder.update(self, delta)

    snd_breath.sound_update() -- sound of breathing

       local time = time_global()
       
       game_stats.update (delta, self.object)

       -- ŕďäĺéň ďîăîäű
       self.weather_manager:update()
       
       -- ŕďäĺéň ńőĺěű äĺňĺęňîđŕ
       self.actor_detector:update()

       -- ŕďäĺéň çâóęîâîé ńőĺěű ŕęňĺđŕ
       xr_sound.update_actor()
       
       --' Ďđîâĺđęŕ ďîňĺđč ćčçíč
    --[[
       if self.object.health - lasthealth > 0.001 or
          self.object.health - lasthealth < -0.001 then
          printf("%f | %f", self.object.health, self.object.health - lasthealth, game.time() - lasttime)
          lasthealth = self.object.health
          lasttime = game.time()
       end
    ]]   
       -- Îáíîâëĺíčĺ îňęëţ÷ĺíč˙ ââîäŕ ń ęëŕâčŕňóđű.
       if self.st.disable_input_time ~= nil and
          game.get_game_time():diffSec(self.st.disable_input_time) >= self.st.disable_input_idle
       then
          level.enable_input()
          self.st.disable_input_time = nil
       end
       -- Îáíîâëĺíčĺ ńíŕ ń ďĺđĺíîńîě ÷óâŕęŕ â óęŕçŕííóţ ďîçčöčţ
       if self.st.sleep_relocate_time ~= nil and
          game.get_game_time():diffSec(self.st.sleep_relocate_time) >= self.st.sleep_relocate_idle
       then
          self.object:set_actor_position(self.st.sleep_relocate_point)
          local dir = self.st.sleep_relocate_point:sub(self.st.sleep_relocate_look)
          self.object:set_actor_direction(dir:getH())
          self.st.sleep_relocate_time = nil
       end

       -- Ŕďäĺéň ďđ˙ňŕíčĺ îđóćč˙ čăđîęŕ âî âđĺě˙ äčŕëîăŕ
       if weapon_hide == true or self.object:is_talking() then
          if self.weapon_hide == false then
             self.object:hide_weapon()
             self.weapon_hide = true
          end
       else
          if self.weapon_hide == true then
             self.object:restore_weapon()
             self.weapon_hide = false
          end
       end   

       -- îáíîâëĺíčĺ đĺńňđčęňîđîâ, ęîňîđűĺ ďîä ëîăčęîé, ńđŕáŕňűâŕĺň ÷ĺđĺç číňĺđâŕëű âđĺěĺíč
       if self.next_restrictors_update_time < time then
          bind_restrictor.actor_update(delta)

          self.next_restrictors_update_time = time + 200

          task_manager.actor_update()
       end

       -- îáíîâëĺíčĺ ďîńňďđîöĺńńîâ
       if post_process ~= 0 then
          if post_process:update () == true then
             post_process = 0
          end
       end

       -- îáíîâëĺíčĺ ďńč-ŕíňĺííű
       if sr_psy_antenna.psy_antenna then
          sr_psy_antenna.psy_antenna:update(delta)
       end

       --' Âűâîä ńîîáůĺíč˙ î áîëüřîé đŕäčŕöčč
       if self.object.radiation >= 0.7 then
          local hud = get_hud()
          local custom_static = hud:GetCustomStatic("cs_radiation_danger")
          if custom_static == nil then
             hud:AddCustomStatic("cs_radiation_danger", true)
             hud:GetCustomStatic("cs_radiation_danger"):wnd():SetTextST("st_radiation_danger")
          end
       else
          local hud = get_hud()
          local custom_static = hud:GetCustomStatic("cs_radiation_danger")
          if custom_static ~= nil then
             hud:RemoveCustomStatic("cs_radiation_danger")
          end
       end



       if self.bCheckStart then
          printf("SET DEFAULT INFOS")     

          if not has_alife_info("storyline_actor_start") and
             (level.name() == "l01_escape")
          then
             self.object:give_info_portion("storyline_actor_start")
             _G.g_start_avi = true
             printf("*AVI* RUN START AVI")         
          end

    --      if not has_alife_info("encyclopedy") then
    --         self.object:give_info_portion("encyclopedy")
    --      end

          if not has_alife_info("global_dialogs") then
             self.object:give_info_portion("global_dialogs")
          end

          if not has_alife_info("level_changer_icons") then
             self.object:give_info_portion("level_changer_icons")
          end

          level_tasks.add_lchanger_location()

          self.bCheckStart = false     
       end     
    end
    ----------------------------------------------------------------------------------------------------------------------
    function actor_binder:save(packet)
       printf("actor_binder:save(): self.object:name()='%s'", self.object:name())
       object_binder.save(self, packet)

       --' Ńîőđŕí˙ĺě äŕííűĺ îá îňęëţ÷ĺííîě ââîäĺ
       if self.st.disable_input_time == nil then
          packet:w_bool(false)
       else
          packer:w_bool(true)
          utils.w_CTime(packet, self.st.disable_input_time)
       end

       xr_logic.pstor_save_all(self.object, packet)
       self.weather_manager:save(packet)

       sr_psy_antenna.save( packet )
       task_manager.save(packet)
       self.actor_detector:save(packet)   
    end
    ----------------------------------------------------------------------------------------------------------------------
    function actor_binder:load(reader)
       printf("actor_binder:load(): self.object:name()='%s'", self.object:name())
       object_binder.load(self, reader)
       printf("actor_binder:object_binder.load(): self.object:name()='%s'", self.object:name())

       if reader:r_eof() then
          abort("SAVE FILE IS CORRUPT")
       end

       local stored_input_time = reader:r_u8()
       if stored_input_time == true then
          self.st.disable_input_time = utils.r_CTime(reader)
       end

       xr_logic.pstor_load_all(self.object, reader)
       self.weather_manager:load(reader)

       sr_psy_antenna.load(reader)
       task_manager.load(reader)
       self.actor_detector:load(reader)   
    end
    ----------------------------------------------------------------------------------------------------------------------

    --ńňŕđň ďđĺôĺň÷ŕ çâóęîâ
    --if string.find(command_line(), "-noprefetch") == nil then
    --   sound_prefetch.prefetch_sounds()
    --end


    -- Weapon functions
    function hide_weapon()
       weapon_hide = true
    end
    function restore_weapon()
       weapon_hide = false
    end

    // this is test for section iteration
    /**
    local function test_section_iteration(file_name, section_name)
       printf         ("file    : %s",file_name)
       printf         ("section : %s",section_name)
       
       local         file = ini_file(file_name)
       local         n = file:line_count(section_name)
       printf         ("lines   : %d",n)
       
       local         id, value = "", "", result
       for i=0,n-1 do
          result, id, value   = file:r_line(section_name,i,"","")
          printf      ("line %d : %s = %s",i,id,value)
       end
    end

    test_section_iteration("system.ltx","space_restrictor")
    /**/




zamień wszystko

Za ten post scigacz1975 otrzymał następujące punkty reputacji:
Positive Kilanov.
Awatar użytkownika
scigacz1975
Monolit

Posty: 3243
Dołączenie: 29 Sty 2010, 00:26
Ostatnio był: 12 Wrz 2024, 15:31
Miejscowość: Stalowa Wola
Frakcja: Samotnicy
Ulubiona broń: --
Kozaki: 926

Re: Efekt oddechu postaci przy założonym kombinezonie

Postprzez Kilanov w 30 Mar 2012, 20:58

Dalej wywala przy wczytywaniu save'ów zrobionych przed modyfikacją. :(
No ale nic, zagram sobie od nowa. :D

Miłość swoją zakopałeś, litość mocno śpi,
Chciałbyś cały świat utopić w oceanie krwi...


Kilanov
Wygnany z Zony

Posty: 6
Dołączenie: 30 Mar 2012, 16:04
Ostatnio był: 08 Mar 2013, 00:58
Frakcja: Samotnicy
Ulubiona broń: TOZ34
Kozaki: 0

Re: Efekt oddechu postaci przy założonym kombinezonie

Postprzez scigacz1975 w 30 Mar 2012, 21:04

Trochę to dziwne - dodałem efekt oddechu w trakcie gry w TŚ2 i wszystko jest ok.
Awatar użytkownika
scigacz1975
Monolit

Posty: 3243
Dołączenie: 29 Sty 2010, 00:26
Ostatnio był: 12 Wrz 2024, 15:31
Miejscowość: Stalowa Wola
Frakcja: Samotnicy
Ulubiona broń: --
Kozaki: 926

Następna

Powróć do Tutoriale

Kto jest na forum

Użytkownicy przeglądający to forum: Brak zarejestrowanych użytkowników oraz 0 gości