Problem z nowymi wpisami w bind_stalker.script

Regulamin forum
Dział "Tworzenie Modyfikacji" służy do zadawania pytań odnośnie tworzenia modyfikacji, edytowania plików gry, oraz pisania tzw. tutoriali, czyli poradników odnośnie modyfikowania gry.
Nie zadajemy tutaj pytań odnośnie modyfikacji gotowych (nie dyskutujemy o nich!), prócz prób ich połączenia etc.


Przy cytowaniu plików *.LTX stosować tag [SYNTAX="ini"], przy cytowaniu plików *.script [SYNTAX="lua"] a przy cytowaniu plików *.xml - [SYNTAX="xml"].

Problem z nowymi wpisami w bind_stalker.script

Postprzez StalkerCell w 29 Gru 2013, 20:39

Witam. Dodałem nowego NPC do gry. Chciałem dodać drugiego, ale po ingerencji w skrypt bind_stalker ma taki oto wylot:
Kod: Zaznacz wszystko
FATAL ERROR
 
[error]Expression    : !m_error_code
[error]Function      : raii_guard::~raii_guard
[error]File          : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
[error]Line          : 748
[error]Description   : .... - zew prypeci\gamedata\scripts\bind_stalker.script:237: attempt to index global 'spawnnpc' (a nil value)
 

stack trace:


Zmieniałem plik bind_stalker po kilka razy. Nazwę skryptu zawierającego współrzędne spawnu postaci też. Dla pewności podam wpisy.
bind_stalker.script:
function actor_binder:update(delta)
object_binder.update(self, delta)

if string.find(command_line(), "-designer") then
return
end
-- zat_deliver start
if spawnnpc.load_variable("spawn_zat_deliver",false)==false then
spawnnpc.start_zat_deliver_spawn()
spawnnpc.save_variable("spawn_zat_deliver",true)
end
-- zat_deliver end
-- zat_volk_leader start
if spawnnpc.load_variable("spawn_zat_volk_leader",false)==false then
spawnnpc.start_zat_volk_leader_spawn()
spawnnpc.save_variable("spawn_zat_volk_leader",true)
end
--zat_volk_leader end


spawnnpc.script:
function start_zat_deliver_spawn()
spawn_zat_deliver()
end

function spawn_zat_deliver()
alife():create("zat_deliver",vector():set(104.827324,-3.935896,178.973938),1147187,316)
end

function save_variable(variable_name, value)
xr_logic.pstor_store(db.actor, variable_name, value)
end
function load_variable(variable_name, value_if_not_found)
return xr_logic.pstor_retrieve(db.actor, variable_name, value_if_not_found)
end
-------
function start_zat_volk_leader_spawn()
spawn_zat_volk_leader()
end

function spawn_zat_volk_leader()
alife():create("zat_volk_leader",vector():set(118.437088,-3.936521,190.488541),1169690,316)
end

function save_variable(variable_name, value)
xr_logic.pstor_store(db.actor, variable_name, value)
end
function load_variable(variable_name, value_if_not_found)
return xr_logic.pstor_retrieve(db.actor, variable_name, value_if_not_found)


Wyloty zaczęły się po dodaniu drugiego NPC. Usunąłem wpis związany z drugą postacią, lecz guzik to pomogło. Będzie jakaś rada?
Awatar użytkownika
StalkerCell
Weteran

Posty: 575
Dołączenie: 17 Lut 2013, 17:06
Ostatnio był: 20 Gru 2024, 02:53
Miejscowość: Paniewo
Frakcja: Samotnicy
Ulubiona broń: Akm 74/2
Kozaki: 57

Reklamy Google

Re: Problem z nowymi wpisami w bind_stalker.script

Postprzez vandr w 29 Gru 2013, 20:45

Masz kopię starego bind_stalker.script, nie edytowanego w te wartości?
TAJAG JUDYN
HAZBAZ
SEKODYN!
vandr
Modder

Posty: 3878
Dołączenie: 21 Lut 2011, 14:18
Ostatnio był: 15 Maj 2025, 09:05
Kozaki: 1749

Re: Problem z nowymi wpisami w bind_stalker.script

Postprzez StalkerCell w 29 Gru 2013, 20:52

Waniliowego mam, ale pracowałem na tym z LVIG GVID CoP, by od razu zbierać współrzędne. Co dziwne - zaczęło się sypać po dodaniu drugiego NPC. Przy pierwszym było zero błędów.
Awatar użytkownika
StalkerCell
Weteran

Posty: 575
Dołączenie: 17 Lut 2013, 17:06
Ostatnio był: 20 Gru 2024, 02:53
Miejscowość: Paniewo
Frakcja: Samotnicy
Ulubiona broń: Akm 74/2
Kozaki: 57

Re: Problem z nowymi wpisami w bind_stalker.script

Postprzez vandr w 29 Gru 2013, 21:09

Nie chodzi mi o vanilliowy- chodzi o bind_stalker z Twojego moda SPRZED edycji NPC'ów. Ja przy modyfikacji pracowałem w ten sposób, że na jednym dysku miałem właściwego moda, a na drugim jego kopię, na której pracowałem- gdy coś było nie tak, po prostu przywracałem pliki z właściwej gamedaty.
TAJAG JUDYN
HAZBAZ
SEKODYN!
vandr
Modder

Posty: 3878
Dołączenie: 21 Lut 2011, 14:18
Ostatnio był: 15 Maj 2025, 09:05
Kozaki: 1749

Re: Problem z nowymi wpisami w bind_stalker.script

Postprzez StalkerCell w 29 Gru 2013, 21:28

No to bind_stalker z LVID GVID CoP. Na nim pracuję. Kiedy skończę pracować nad zbieraniem współrzędnych, przerzucę wpisy o NPC do bind_stalkera nie modyfikowanego. W tymże skrypcie tylko wpisy o NPC dodawałem, nic więcej nie grzebałem.
Awatar użytkownika
StalkerCell
Weteran

Posty: 575
Dołączenie: 17 Lut 2013, 17:06
Ostatnio był: 20 Gru 2024, 02:53
Miejscowość: Paniewo
Frakcja: Samotnicy
Ulubiona broń: Akm 74/2
Kozaki: 57

Re: Problem z nowymi wpisami w bind_stalker.script

Postprzez vandr w 29 Gru 2013, 21:31

A co to jest. Nie chce mi się ściągać, zapodaj mnie to tutaj to popatrzę.
TAJAG JUDYN
HAZBAZ
SEKODYN!
vandr
Modder

Posty: 3878
Dołączenie: 21 Lut 2011, 14:18
Ostatnio był: 15 Maj 2025, 09:05
Kozaki: 1749

Re: Problem z nowymi wpisami w bind_stalker.script

Postprzez StalkerCell w 29 Gru 2013, 21:47

Kurde, link na StalkerTeam, a limitu transferu teraz nie mam :/ . Wezmę w spoiler cały bind_stalker z LVID'a. Sam LVID GVID CoP to narzędzie do pobierania współrzędnych.
:

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

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

local game_difficulty_by_num = {
            [0] = "gd_novice",
            [1] = "gd_stalker",
            [2] = "gd_veteran",
            [3] = "gd_master"
            }

local weapon_hide = {}
local primary_objects_filled = false
----------------------------------------------------------------------------------------------------------------------
class "actor_binder" (object_binder)
----------------------------------------------------------------------------------------------------------------------
function actor_binder:__init (obj) super(obj)
   self.bCheckStart = false
   self.weather_manager = level_weathers.get_weather_manager()
   self.surge_manager = surge_manager.get_surge_manager()
   --self.actor_detector = xr_detector.actor_detector()
   self.last_level_name = nil
   self.deimos_intensity = nil
--   self.actor_weapon_on_start = true
   self.loaded_active_slot = 3
   self.loaded_slot_applied = false
   self.last_detective_achievement_spawn_time    = nil
   self.last_mutant_hunter_achievement_spawn_time   = nil
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:net_spawn(data)
--   printf("actor net spawn")
   level.show_indicators()
   self.bCheckStart = true
   self.weapon_hide = false -- ńďđ˙ňŕíî čëč íĺň îđóćčĺ ďđč đŕçăîâîđĺ.
   self.weapon_hide_in_dialog = false
   weapon_hide = {} -- óńňŕíŕâëčâŕĺě ăëîáŕëüíűé äĺôîëňîâűé ôëŕă.
   if object_binder.net_spawn(self,data) == false then
      return false
   end
   db.add_actor(self.object)
   db.actor.deimos_intensity = self.deimos_intensity
   self.deimos_intensity = nil
   if self.st.disable_input_time == nil then
      level.enable_input()
   end
   xr_s.on_game_load()                                    --' Distemper 03.2008 --
   self.weather_manager:reset()
   --' Çŕăđóćŕĺě íŕńňđîéęč äđîďŕ
   death_manager.init_drop_settings()
   --'Óńňŕíŕâëčâŕĺě ńńűëęó íŕ ňŕńęěĺíĺäćĺđ
   self.task_manager = task_manager.get_task_manager()
   self.spawn_frame = device().frame
   self.already_jumped = false
   self.loaded = false
   benchmark.main()                               --' Distemper 06.2008 --
   return true
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:net_destroy()
   xr_sound.stop_sounds_by_id(self.object:id())
   local board_factions = sim_board.get_sim_board().players
   if(board_factions) then
         for k,v in pairs (board_factions) do
               xr_sound.stop_sounds_by_id(v.id)
         end
   end
   if(actor_stats.remove_from_ranking~=nil)then
      actor_stats.remove_from_ranking(self.object:id())
   end
   level.show_weapon(true)
   db.del_actor(self.object)

   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.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)
   self.object:set_callback(callback.use_object, nil)

   log("--------->"..tostring(_G.amb_vol))
   log("--------->"..tostring(_G.mus_vol))
   if(_G.amb_vol~=0) then
      get_console():execute("snd_volume_eff "..tostring(_G.amb_vol))
      _G.amb_vol = 0
   end
   if(_G.mus_vol~=0) then
       get_console():execute("snd_volume_music "..tostring(_G.mus_vol))
      _G.mus_vol = 0
   end
   if sr_psy_antenna.psy_antenna then
      sr_psy_antenna.psy_antenna:destroy()
      sr_psy_antenna.psy_antenna = false
   end
   xrs_dyn_music.finish_theme()
   xr_s.on_actor_destroy()
   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.object:set_callback(callback.inventory_info, self.info_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.task_state, self.task_callback, self)
   self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self)
   self.object:set_callback(callback.use_object, self.use_inventory_item, self)
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:take_item_from_box(box, item)
   local box_name = box:name()
end

----------------------------------------------------------------------------------------------------------------------
function actor_binder:info_callback(npc, info_id)
   printf("*INFO*: npc='%s' id='%s'", npc:name(), 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)
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:on_item_take (obj)
   printf("on_item_take [%s]", obj:name())
   if isArtefact(obj) then
      local anomal_zone = bind_anomaly_zone.parent_zones_by_artefact_id[obj:id()]
      if anomal_zone ~= nil then
         anomal_zone:on_artefact_take(obj)
      else
         bind_anomaly_zone.artefact_ways_by_id[obj:id()] = nil
      end
      local artefact = obj:get_artefact()
      artefact:FollowByPath("NULL",0,vector():set(500,500,500))
      xr_statistic.inc_founded_artefacts_counter(obj:id())
--[[
      local s_art = alife():object(obj:id())
      if(s_art) then
         xr_statistic.inc_founded_artefacts_counter(s_art:section_name())
      else
         xr_statistic.inc_founded_artefacts_counter()
      end
]]
   end
   treasure_manager.get_treasure_manager():on_item_take(obj:id())
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:on_item_drop (obj)
end

function actor_binder:use_inventory_item(obj)
   if(obj) then
      local s_obj = alife():object(obj:id())
      if(s_obj) and (s_obj:section_name()=="drug_anabiotic") then
         xr_effects.disable_ui_only(db.actor, nil)
         level.add_cam_effector("camera_effects\\surge_02.anm", 10, false, "bind_stalker.anabiotic_callback")
         level.add_pp_effector("surge_fade.ppe", 11, false)
         give_info("anabiotic_in_process")
         _G.mus_vol = get_console():get_float("snd_volume_music")
         _G.amb_vol = get_console():get_float("snd_volume_eff")
         get_console():execute("snd_volume_music 0")
         get_console():execute("snd_volume_eff 0")
      end
   end
end

function anabiotic_callback()
   level.add_cam_effector("camera_effects\\surge_01.anm", 10, false, "bind_stalker.anabiotic_callback2")
   local rnd = math.random(35,45)
   local m = surge_manager.get_surge_manager()
   if(m.started) then
      local tf = level.get_time_factor()
      local diff_sec = math.ceil(game.get_game_time():diffSec(m.inited_time)/tf)
         if(rnd>(m.surge_time-diff_sec)*tf/60) then
         m.time_forwarded = true
         m.ui_disabled = true
         m:kill_all_unhided()
         m:end_surge()
      end
   end
   level.change_game_time(0,0,rnd)
   level_weathers.get_weather_manager():forced_weather_change()
   printf("anabiotic_callback: time forwarded on [%d]", rnd)
end

function anabiotic_callback2()
   xr_effects.enable_ui(db.actor, nil)
    get_console():execute("snd_volume_music "..tostring(_G.mus_vol))
   get_console():execute("snd_volume_eff "..tostring(_G.amb_vol))
   _G.amb_vol = 0
   _G.mus_vol = 0
   disable_info("anabiotic_in_process")
end
----------------------------------------------------------------------------------------------------------------------

function actor_binder:task_callback(_task, _state)
   if _state ~= task.fail then
      if _state == task.completed then
         news_manager.send_task(db.actor, "complete", _task)
      else
         news_manager.send_task(db.actor, "new", _task)
      end
   end
   task_manager.task_callback(_task, _state)
end

----------------------------------------------------------------------------------------------------------------------

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

   if string.find(command_line(), "-designer") then
      return
   end

   if self.already_jumped==false and jump_level.need_jump==true and (device().frame > self.spawn_frame+2000) then
      jump_level.try_to_jump()
      self.already_jumped = true
      return
   end

   -- Âűçîâ ŕďäĺéňŕ ďĺđĺíîńŕ čăđîęŕ ďđîâîäíčęîě
   if travel_func ~= nil then
      travel_func()
   end

   -- DEBUG slowdown
   --slowdown.update()
   local time = time_global()
   game_stats.update (delta, self.object)
   -- ŕďäĺéň ďîăîäű
   self.weather_manager:update()

   self:check_detective_achievement()
   self:check_mutant_hunter_achievement()

   --' Ŕďäĺéň ńŕóíäěĺíĺäćĺđŕ
   xr_sound.update(self.object:id())

   -- Îáíîâëĺíčĺ îňęëţ÷ĺíč˙ ââîäŕ ń ęëŕâčŕňóđű.
   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.object:is_talking() then
      if self.weapon_hide_in_dialog == false then
         self.object:hide_weapon()
         printf("hiding weapon!!!")
         self.weapon_hide_in_dialog = true
      end
   else
      if self.weapon_hide_in_dialog == true then
         printf("restoring weapon!!!")
         self.object:restore_weapon()
         self.weapon_hide_in_dialog = false
      end
   end
   -- Ŕďäĺéň ďđ˙ňŕíčĺ îđóćč˙ čăđîęŕ â çîíĺ sr_no_weapon
   if check_for_weapon_hide_by_zones() == true then
      if self.weapon_hide == false then
         printf("hiding weapon!!!")
         self.object:hide_weapon()
         self.weapon_hide = true
      end
   else
      if self.weapon_hide == true then
         printf("restoring weapon!!!")
         self.object:restore_weapon()
         self.weapon_hide = false
      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():TextControl():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("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
      self.bCheckStart = false

--      if self.actor_weapon_on_start == true then
--         db.actor:activate_slot(3)
--         self.actor_weapon_on_start = false
--      end
   end
--   device().precache_frame  == 0 and
   if not self.loaded_slot_applied then
      self.object:activate_slot(self.loaded_active_slot)
      self.loaded_slot_applied = true
   end
   
------------------------------------- Âűâîä číâîđěŕöčč level_vertex_id, game_vertex_id, pos
if true then
   local hud = get_hud()
   local cs = hud:GetCustomStatic("cs_debug" )
   if cs == nil then
      hud:AddCustomStatic("cs_debug", true)
      cs = hud:GetCustomStatic("cs_debug" )
   end
   local lvid, gvid = db.actor:level_vertex_id(), db.actor:game_vertex_id()
   local pos, dir = db.actor: position(), db.actor:direction()
   local pos2 = level.vertex_position(lvid)
   local valid = pos2:distance_to(pos) <= 0.7
   local msg = string.format("lvid: %d\\n", lvid) ..
            string.format("gvid: %d\\n", gvid) ..
            string.format("pos: %f,%f,%f\\n", pos.x, pos.y, pos.z) ..
            string.format("dir: %f,%f,%f\\n", dir.x, dir.y, dir.z) ..
            string.format("valid: %s", tostring(valid))
   if cs ~= nil then
      cs:wnd():TextControl():SetText(msg)
   end
end

----------------------------------------------
   
   xr_s.on_actor_update(delta)

   if(self.surge_manager) then
      if(self.f_surge_manager_loaded ~= true) then
         self.surge_manager:initialize()
         self.f_surge_manager_loaded = true
      end
      if(self.surge_manager.levels_respawn[level.name()]) then
         self.surge_manager:respawn_artefacts_and_replace_anomaly_zone()
      end
      self.surge_manager:update()
   end
   -- Ŕďäĺéň äîńňóďíîńňč äë˙ ńčěóë˙öčč.
   simulation_objects.get_sim_obj_registry():update_avaliability(alife():actor())

   if not self.loaded then
      get_console():execute("dump_infos")
      self.loaded = true
   end
   treasure_manager.get_treasure_manager():update()

   if not(primary_objects_filled) then
      pda.fill_primary_objects()
      primary_objects_filled = true
   end
   pda.fill_sleep_zones()
   
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:save(packet)
   set_save_marker(packet, "save", false, "actor_binder")
   object_binder.save(self, packet)
   --' Ńîőđŕí˙ĺě óđîâĺíü ńëîćíîńňč
   packet:w_u8(level.get_game_difficulty())
   --' Ńîőđŕí˙ĺě äŕííűĺ îá îňęëţ÷ĺííîě ââîäĺ
   if self.st.disable_input_time == nil then
      packet:w_bool(false)
   else
      packet: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)
   release_body_manager.get_release_body_manager():save(packet)
   self.surge_manager:save(packet)
   sr_psy_antenna.save( packet )
   packet:w_bool(sim_board.get_sim_board().simulation_started)

   xr_sound.actor_save(packet)
   packet:w_stringZ(tostring(self.last_level_name))
   xr_statistic.save(packet)
   treasure_manager.get_treasure_manager():save(packet)

   local n = 0
   for k,v in pairs(db.script_ids) do
      n = n + 1
   end
   packet:w_u8(n)
   for k,v in pairs (db.script_ids) do
      packet:w_u16(k)
      packet:w_stringZ(v)
   end
   task_manager.get_task_manager():save(packet)

--   packet:w_bool(self.actor_weapon_on_start)
   
   packet:w_u8(self.object:active_slot())


   local deimos_exist = false
   for k,v in pairs(db.zone_by_name) do
      if(db.storage[v:id()] and db.storage[v:id()].active_scheme=="sr_deimos") then
         deimos_exist = true
         packet:w_bool(true)
         packet:w_float(db.storage[v:id()].sr_deimos.intensity)
      end
   end
   if not deimos_exist then
      packet:w_bool(false)
   end

   if self.last_detective_achievement_spawn_time == nil then
      packet:w_bool(false)
   else
      packet:w_bool(true)
      utils.w_CTime(packet, self.last_detective_achievement_spawn_time)
   end
   if self.last_mutant_hunter_achievement_spawn_time == nil then
      packet:w_bool(false)
   else
      packet:w_bool(true)
      utils.w_CTime(packet, self.last_mutant_hunter_achievement_spawn_time)
   end
   set_save_marker(packet, "save", true, "actor_binder")
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:load(reader)
   set_save_marker(reader, "load", false, "actor_binder")
   object_binder.load(self, reader)
   --' Çŕăđóćŕĺě óđîâĺíü ńëîćíîńňč
   local game_difficulty = reader:r_u8()
   printf("load game_difficulty %s", tostring(game_difficulty))
   get_console():execute("g_game_difficulty "..game_difficulty_by_num[game_difficulty])
   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)
   release_body_manager.get_release_body_manager():load(reader)
--   self.surge_manager:initialize()
   self.surge_manager:load(reader)
   self.f_surge_manager_loaded = true
   sr_psy_antenna.load(reader)
   sim_board.get_sim_board().simulation_started = reader:r_bool()

   xr_sound.actor_load(reader)
   local n = reader:r_stringZ()
   if(n~="nil") then
      self.last_level_name = n
   end
   xr_statistic.load(reader)
   treasure_manager.get_treasure_manager():load(reader)
   n = reader:r_u8()
   for i = 1,n do
      db.script_ids[reader:r_u16()] = reader:r_stringZ()
   end

   task_manager.get_task_manager():load(reader)

--   self.actor_weapon_on_start = reader:r_bool()
   
   self.loaded_active_slot = reader:r_u8()
   
   self.loaded_slot_applied = false

   local b = reader:r_bool()
   if(b) then
      self.deimos_intensity = reader:r_float()
   end

   local stored_achievement_time = reader:r_bool()
   if stored_achievement_time == true then
      self.last_detective_achievement_spawn_time = utils.r_CTime(reader)
   end
   stored_achievement_time = reader:r_bool()
   if stored_achievement_time == true then
      self.last_mutant_hunter_achievement_spawn_time = utils.r_CTime(reader)
   end
   set_save_marker(reader, "load", true, "actor_binder")
end

--*************************************************************
--*               Ďîäńďŕóí âĺůĺé â ˙ůčęč                 *
--*************************************************************
local detective_achievement_items       = {   "medkit",
                                 "antirad",
                                 "bandage"}

local mutant_hunter_achievement_items   = {   "ammo_5.45x39_ap",
                                 "ammo_5.56x45_ap",
                                 "ammo_9x39_ap",
                                 "ammo_5.56x45_ap",
                                 "ammo_12x76_zhekan"}

local function spawn_achivement_items(items_table, count, inv_box_story_id)
   local inv_box = alife():object(get_story_object_id(inv_box_story_id))
   for i = 1,count do
      alife():create(items_table[math.random(#items_table)],
                  inv_box.position,
                  inv_box.m_level_vertex_id,
                  inv_box.m_game_vertex_id,
                  inv_box.id)
   end
end

function actor_binder:check_detective_achievement()
   if not has_alife_info("detective_achievement_gained") then
      return
   end
   if self.last_detective_achievement_spawn_time == nil then
      self.last_detective_achievement_spawn_time = game.get_game_time()
   end
   if game.get_game_time():diffSec(self.last_detective_achievement_spawn_time) > 43200 then
      spawn_achivement_items(detective_achievement_items, 4, "zat_a2_actor_treasure")
      xr_effects.send_tip(db.actor, nil, {"st_detective_news","got_medicine"})
      self.last_detective_achievement_spawn_time = game.get_game_time()
   end
end

function actor_binder:check_mutant_hunter_achievement()
   if not has_alife_info("mutant_hunter_achievement_gained") then
      return
   end
   if self.last_mutant_hunter_achievement_spawn_time == nil then
      self.last_mutant_hunter_achievement_spawn_time = game.get_game_time()
   end
   if game.get_game_time():diffSec(self.last_mutant_hunter_achievement_spawn_time) > 43200 then
      spawn_achivement_items(mutant_hunter_achievement_items, 5, "jup_b202_actor_treasure")
      xr_effects.send_tip(db.actor, nil, {"st_mutant_hunter_news","got_ammo"})
      self.last_mutant_hunter_achievement_spawn_time = game.get_game_time()
   end

end

----------------------------------------------------------------------------------------------------------------------

function check_for_weapon_hide_by_zones()
   for k,v in pairs(weapon_hide) do
      if v == true then
         return true
      end
   end
   return false
end

-- Weapon functions
function hide_weapon(zone_id)
   printf("[WEAPON_CONTROL]:hiding weapon from zone [%s] in section [%s]!!!", zone_id, db.storage[zone_id].active_section)
   weapon_hide[zone_id] = true
end

function restore_weapon(zone_id)
   printf("[WEAPON_CONTROL]:restoring weapon from zone [%s] in section [%s]!!!", zone_id, db.storage[zone_id].active_section)
   weapon_hide[zone_id] = false
end













EDIT.
Znalazłem link w Historii:
http://stalker-2.info/files/more/lvid-g ... t-cop.html

EDIT2.
Zaczyna mnie to lekko mówiąc wkur*iać. Już z 10 razy pisałem i modyfikowałem pliki a i tak ten sam log. W ch*ju mam tego X-Raya. No ni cholery nie wiem, o co chodzi - przedtem działało, a teraz?

EDIT3.
Ok, udało się zespawnować NPC. Teraz mam inny problem - ustawiłem mu path_look'a. Miał patrzeć na drzwi, a patrzy w innym kierunku. Co zrobić, by patrzał, tam, gdzie nakazuje mu path_look?
Awatar użytkownika
StalkerCell
Weteran

Posty: 575
Dołączenie: 17 Lut 2013, 17:06
Ostatnio był: 20 Gru 2024, 02:53
Miejscowość: Paniewo
Frakcja: Samotnicy
Ulubiona broń: Akm 74/2
Kozaki: 57


Powróć do Zew Prypeci

Kto jest na forum

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