Случайная подборка модов
Наёмник Сом
3.5
Закон Дегтярева
3.5
Prosectors Project
4.0
Hibernation Evil - Эпизод I
2.8
World of War - Mod 0.2
3.5
Clear Sky Complete
4.1
Последние обновленные темы Прямой эфир Самые популярные темы Последние новости
Архив - только для чтения
⚙ Модострой: Вопросница
Российская Федерация  Wolfstalker
Среда, 24.02.2016, 00:25 | Сообщение # 1
Статус:
Легенда:
Сообщений: 2258
Награды: 15
Регистрация: 05.04.2010

В данной теме вы можете задавать любые вопросы касательно S.T.A.L.K.E.R. моддинга


• Не флудить
• Предварительно просматривайте раздел, ведь ответ на ваш вопрос может быть там
• В своем вопросе указывайте платформу моддинга — Тень Чернобыля, Чистое небо или Зов Припяти




F.A.Q

  Злобная реклама
Среда, 24.02.2016, 00:25
Статус:
Сообщений: 666
Регистрация: 05.04.2010
Российская Федерация  Advisor890
Среда, 23.11.2016, 22:34 | Сообщение # 4651
Статус:
Отмычка:
Сообщений: 115
Награды: 1
Регистрация: 07.07.2012

Как сделать проверку на то что мутант жив?
  Злобная реклама
Среда, 23.11.2016, 22:34
Статус:
Сообщений: 666
Регистрация: 07.07.2012
Российская Федерация  denis2000
Среда, 23.11.2016, 23:00 | Сообщение # 4652
Время Альянса
Статус:
Ветеран:
Сообщений: 4070
Награды: 16
Регистрация: 19.07.2013

Advisor890, xr_conditions.script
Код
function monster_is_alive(actor, npc, p)
    local npc1

    if p and p[1] then
  npc1 = get_story_object_id(p[1])
    else
  return false
    end

    if npc1 == nil then
  return false
    end

    npc1 = alife (): object(npc1)

    if npc1 and IsMonster(npc1) and npc1:alive() then
  return true
    end

    return false
end

В логике рестриктора:
Код

on_info = {=monster_is_alive(storyid_монстра)}
Сообщение отредактировал denis2000 - Среда, 23.11.2016, 23:04
  Злобная реклама
Среда, 23.11.2016, 23:00
Статус:
Сообщений: 666
Регистрация: 19.07.2013
Российская Федерация  Advisor890
Среда, 23.11.2016, 23:48 | Сообщение # 4653
Статус:
Отмычка:
Сообщений: 115
Награды: 1
Регистрация: 07.07.2012

denis2000, Спасибо. А если мне допустим надо это в своем скрипте проверить? Типа: if мутант_жив then "действие"
  Злобная реклама
Среда, 23.11.2016, 23:48
Статус:
Сообщений: 666
Регистрация: 07.07.2012
Российская Федерация  evg
Четверг, 24.11.2016, 00:56 | Сообщение # 4654
Статус:
Зевака:
Сообщений: 4
Награды: 0
Регистрация: 09.03.2016

Подскажите, как можно добавить новый режим стрельбы. у оружия есть верхний и нижний ствол как переключатся между ними?
Например:
fire_modes = 1, -1 ;режим стрельбы
ammo_mag_size = 1
////////РЕЖИМ_1//////////
ammo_class = ammo (Например: 7,62x39)
////////Характеристика 1////////
дисперсия...
отдача...
звуки...
анимация...
////////РЕЖИМ_2//////////
ammo_class = ammo (Например: 5.45x39)
////////Характеристика 2////////
дисперсия...
отдача...
звуки...
анимация...
Сообщение отредактировал evg - Четверг, 24.11.2016, 01:03
  Злобная реклама
Четверг, 24.11.2016, 00:56
Статус:
Сообщений: 666
Регистрация: 09.03.2016
Украина  Sanchess8
Четверг, 24.11.2016, 10:54 | Сообщение # 4655
Статус:
Зевака:
Сообщений: 3
Награды: 0
Регистрация: 22.11.2016

Доброго времени суток. Поставил себе фриплейную сборку Зов Чернобыля 1.4.16, настроил ее под "комфортное брожение" по зоне, решил поставить авторазрядку оружия добавлением скрипта ts_mod_cop.script со следующим содержанием:
Код
--TS MOD для COP-- накопировано и накнопано Tonny S. (aka Tonny на AMK-форуме)
--часть функций или их частей выковыряна из AMK, скриптов SAK и др.

--[[--
для использования авторазряжалки следует:
- в скрипте bind_stalker.script:
- function actor_binder:net_spawn(data)
в конец добавить
ts_mod_cop.ts_on_net_spawn()    --TS_MOD--

- function actor_binder:take_item_from_box(box, item)
в конец добавить
ts_mod_cop.ts_on_item_take(item)    --TS_MOD--

- function actor_binder <img src="/.s/sm/23/surprised.gif" border="0" align="absmiddle" alt="surprised" /> n_item_take (obj)
в конец добавить
ts_mod_cop.ts_on_item_take(item)    --TS_MOD--

- function actor_binder <img src="/.s/sm/23/surprised.gif" border="0" align="absmiddle" alt="surprised" /> n_item_drop (obj)
ts_mod_cop.ts_on_item_drop(obj)    --TS_MOD--

- в скрипте _g.script
- function start_game_callback()
в конец добавить
ts_mod_cop.ts_init_module()  --TS_MOD--

Внимание! если будет ругаться, можно закомментить/удалить
function ts_remove_stuff()
она для удаления оружия, для SGM мода
--]]--

local notest_time = 0

local weapon_classes_w_ammo = {}

--список аммо для каждой секции. по сути кэш
local weapon_ammo = {}

local ts_weapon_remove_radius=280

local tmp_vint = 0
local ts_hud = nil
local ts_hud_timeout = 0

--лог в текстовый файл
function ts_log(src,msg)

local g_time = game.get_game_time()
local t = game.CTime()

t:set(2012,1,1,0,0,1,1)
local t_diff = g_time:diffSec(t)

local f=io.open("ts_log.txt","a")
--local c_time = time_global()
f:write(string.format("(%s)=%s=>%s" ,t_diff,src,msg),"\n" )
f:close()

--[[--
if get_console() then
local msg_no_ws = string.gsub("=="..src.."==>"..msg, "%s", "_")
get_console():execute(msg_no_ws)
end
--]]--

end

-- упрощённый вызов новости
function ts_tip(news_caption, msg, showtime, timeout)
--local news_caption = "Сообщение"
local news_text
local texture = "ui_iconsTotal_grouping"

if msg then
news_text = msg
else
news_text = "#системная ошибка. перезагрузите ваш PDA"
end

if timeout == nil then timeout = 0 end
if showtime == nil then showtime = 5 end
if timeout == 0 then xr_sound.set_sound_play(db.actor:id(),"pda_tips") end
db.actor:give_game_news(news_caption, news_text, texture, timeout*1000, showtime*1000)
end

function ts_init_module()

weapon_classes_w_ammo = {
[clsid.wpn_vintorez_s]    = true,
[clsid.wpn_ak74_s]     = true,
[clsid.wpn_lr300_s]    = true,
[clsid.wpn_hpsa_s]     = true,
[clsid.wpn_pm_s]     = true,
[clsid.wpn_shotgun_s]    = true,
[clsid.wpn_auto_shotgun_s]  = true,
[clsid.wpn_bm16_s]     = true,
[clsid.wpn_svd_s]     = true,
[clsid.wpn_svu_s]     = true,
[clsid.wpn_rg6_s]     = true,
[clsid.wpn_rpg7_s]     = true,
[clsid.wpn_val_s]     = true,
[clsid.wpn_walther_s]    = true,
[clsid.wpn_usp45_s]    = true,
[clsid.wpn_groza_s]    = true,
[clsid.wpn_knife_s]    = false,
[clsid.wpn_grenade_f1_s]   = false,
[clsid.wpn_grenade_rgd5_s]   = false,
[clsid.wpn_grenade_launcher]  = true,
[clsid.wpn_grenade_fake]   = false}

--for k,v in pairs(weapon_classes_w_ammo) do

end

function is_weapon_w_ammo(object)
local id = get_clsid(object)
if id then
return weapon_classes_w_ammo[id] == true
else
ts_log("is_weapon_w_ammo","ERR.is_weapon_w_ammo:id=nil")
return false
end
end

function ts_get_weapon_ammo_type(sobj)
local stpk=net_packet()
stpk:w_begin(0)
sobj:STATE_Write(stpk)
local size=stpk:w_tell()

stpk:r_seek(size-2)

return stpk:r_u8()
end

--взято с OGSM
function spawn_ammo_in_inv(spawn_item,number,npc)
if npc==nil then
npc=db.actor
end
if number > 0 then
return create_ammo(spawn_item,
npc <img src="/.s/sm/23/tongue.gif" border="0" align="absmiddle" alt="tongue" /> osition(),
npc:level_vertex_id(),
npc:game_vertex_id(),
npc:id(),
number)
end
end

function ts_ammo_discharge(wpn)
local    name = wpn:name()
local    ammo_count = wpn:get_ammo_in_magazine()
if ammo_count>0 then
local ammo_type = ts_get_weapon_ammo_type( alife() <img src="/.s/sm/23/surprised.gif" border="0" align="absmiddle" alt="surprised" /> bject(wpn:id()) )
--ts_log("ts_ammo_discharge", name.." => ammo_count="..ammo_count.." ammo_type="..ammo_type)
local section_ammo = ts_ammo_by_num(wpn:section(),ammo_type)
if section_ammo~=nil and string.find(section_ammo,"ammo") then
local str1 = string.format("боеприпас %s (%d)",string.sub(section_ammo,6,30), ammo_count)
--ts_log("ts_ammo_discharge",str1)
ts_tip("Патроны",str1)
--add_hud("hud_event","Патроны: "..str1)
--ts_hud_msg(str1,3)
spawn_ammo_in_inv(section_ammo, ammo_count, nil)
wpn:unload_magazine()
else
if section_ammo == nil then
section_ammo = "<nil>"
end
ts_log("ts_ammo_discharge","Ammo section fail: "..section_ammo)
end

end
end

function parse_names_mod( s )
local t = {}

--отсечка коментария
local pos = string.find(s,";")
local ps = ""
if pos ~= nil and pos > 0 then
ps = string.sub(s,1, pos - 1)
else
ps = s
end

for name in string.gfind( ps, "([%w_.\\-]+)%p*" ) do
table.insert( t, name )
end

return t
end

--найти аммо по номеру
function ts_ammo_by_num(section,num)

local ammo_list

if weapon_ammo[section] ~= nil and weapon_ammo[section] ~= "" then
ammo_list = weapon_ammo[section]
--ts_log("ts_ammo_by_num",section.." => Found: "..ammo_list)
else
local ltx = system_ini()
ammo_list = ltx:r_string(section,"ammo_class")
weapon_ammo[section] = ammo_list
--ts_log("ts_ammo_by_num",section.." => Loaded: "..ammo_list)
end

local t=parse_names_mod(ammo_list)

local cnt = table.getn(t)

if cnt == 0 then
return nil
elseif num >= cnt then
return t[1]
else
return t[num+1]
end

--for n,v in pairs(parse_names(ammo_list)) do
--    ts_log("ts_ammo_by_num","....."..n.." -> "..v)
--end

end

function ts_remove_weapons()
local actorpos = db.actor <img src="/.s/sm/23/tongue.gif" border="0" align="absmiddle" alt="tongue" /> osition()
local c_rem = 0
local c_all = 0
local dist = 0
local obj = 0
local sec_name = ""
local obj_logic = 0
local names = " "
for a=1,65534 do
obj = alife() <img src="/.s/sm/23/surprised.gif" border="0" align="absmiddle" alt="surprised" /> bject(a)

if obj and isWeapon(obj) and obj.parent_id and obj.parent_id == 65535 and get_object_story_id(obj.id) == nil
and (level.object_by_id(obj.id) == nil or level.object_by_id(obj.id) <img src="/.s/sm/23/tongue.gif" border="0" align="absmiddle" alt="tongue" /> arent() == nil) then

c_all = c_all + 1

sec_name = obj:section_name()
obj_logic = obj:spawn_ini()

if sec_name and (string.find(sec_name,"wpn_") or string.find(sec_name,"gren") )
and (obj_logic == nil or (obj_logic ~= nil and not obj_logic:section_exist("secret"))) then
dist = actorpos:distance_to(obj.position)
local l_obj = level.object_by_id(obj.id)
if (l_obj) and (l_obj:condition()<98) and (dist > ts_weapon_remove_radius) then
names = names..sec_name.." "
remove_item_by_id(obj.id)
c_rem = c_rem + 1
end
end
end
end
ts_log("ts_remove_weapons","Removed: "..c_rem.." from "..c_all..names)
--ts_tip("System.cleaner","Removed: "..c_rem.." from "..c_all)
--ts_hud_msg("System.cleaner: Removed "..c_rem.." from "..c_all,3)
end

function ts_remove_stuff()

ts_remove_weapons()
ts_weapon_remove_radius = 350
end

function ts_on_net_spawn()
--ts_log("ts_on_net_spawn","..")
notest_time = 0

--ts_init_module() -- перенесено в _g.script

end

function test_discharge_weapon(ItemObj)
--ts_log("test_discharge_weapon")
if ItemObj == nil then
return false
end

if notest_time == 0 then
notest_time = game.time()+6000
elseif notest_time>game.time() then
return false
elseif is_weapon_w_ammo(ItemObj) then
local ItemId  = ItemObj:id()

local PistolSlot = db.actor:item_in_slot(1)
if PistolSlot then
IdPistol = PistolSlot:id()
end

local AutomaticSlot = db.actor:item_in_slot(2)
if AutomaticSlot then
IdAutomat = AutomaticSlot:id()
end

if ItemId ~= IdPistol and ItemId ~= IdAutomat then
ts_ammo_discharge(ItemObj)
end
end
end

function ts_on_item_take(obj)
if notest_time>game.time() then
return false
end

--ts_log("ts_on_item_take","...")
if obj ~= nil then
--  ts_log("ts_on_item_take",obj:name())
test_discharge_weapon(obj)
end
end

function ts_on_item_drop(obj)
if notest_time>game.time() then
return false
end

--ts_log("ts_on_item_drop","...")
if obj ~= nil then
--  ts_log("ts_on_item_drop",obj:name())
test_discharge_weapon(obj)
end
end

и столкнулся с проблемами следующего характера: файла bind_stalker.script не существует в сборке (пробовал решить переносом файла со сборки 1.3.2), в перенесенном файле не оказалось функций function actor_binder:take_item_from_box(box, item), function actor_binder surprised n_item_take (obj), function actor_binder surprised n_item_drop (obj). Попробовал добавить их из оригинального файла - перестала запускаться игра. Помогите пожалуйста советом или поделитесь готовым файлом (папкой). Заранее благодарен.
Сообщение отредактировал Sanchess8 - Четверг, 24.11.2016, 11:22
  Злобная реклама
Четверг, 24.11.2016, 10:54
Статус:
Сообщений: 666
Регистрация: 22.11.2016
Российская Федерация  alworn95
Четверг, 24.11.2016, 15:46 | Сообщение # 4656
Статус:
Зевака:
Сообщений: 9
Награды: 0
Регистрация: 19.11.2016

Есть чистая локация с одним смартом. При попытке заспаунить на нем сквад, ловлю вылет


Создавал сквад по уроку с x-ray-sdk
Но не могу разобраться с вэйпоинтом. Он выступает в качестве точки спауна? И как его правильно разместить - выбрать удобное место для спауна и добавить точки пути до смарт-террейна? Или по-другому? И как правильно его обозвать? Допустим, у меня Кордон и я в Way name указываю esc_village_kampfire_kamp_1. Заранее спасибо за ответы.

Воспользуйся поиском по теме, ответ на твой вопрос тут есть.
BoBaH_671
Сообщение отредактировал BoBaH_671 - Четверг, 24.11.2016, 16:02
  Злобная реклама
Четверг, 24.11.2016, 15:46
Статус:
Сообщений: 666
Регистрация: 19.11.2016
Российская Федерация  ins33
Четверг, 24.11.2016, 17:21 | Сообщение # 4657
Dream Reader Mod
Статус:
Опытный:
Сообщений: 2269
Награды: 1
Регистрация: 17.01.2012

Sanchess8, Если в моде нет ф-ла bind_stalker.script то его надо брать из оригинала.
Цитата Sanchess8 ()
не оказалось функций function actor_binder:take_item_from_box(box, item), function actor_binder on_item_take (obj), function actor_binder on_item_drop (obj)

Такого быть не может!
Цитата Sanchess8 ()
Попробовал добавить их из оригинального файла - перестала запускаться игра.
Тут бы лог не помешал. Да и покажите, как дописали нужные строчки.
  Злобная реклама
Четверг, 24.11.2016, 17:21
Статус:
Сообщений: 666
Регистрация: 17.01.2012
Украина  Sanchess8
Четверг, 24.11.2016, 18:43 | Сообщение # 4658
Статус:
Зевака:
Сообщений: 3
Награды: 0
Регистрация: 22.11.2016

Вот содержание файла из версии 1.3.2

Код
function init(obj)
    xr_motivator.AddToMotivator(obj)
end

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

----------------------------------------------------------------------------------------------------------------------
class "actor_binder" (object_binder)
----------------------------------------------------------------------------------------------------------------------
function actor_binder:__init (obj) super(obj)
    db.actor_binder = self
    --alun_utils.debug_write("actor init start")
    self.bCheckStart = false
    --self.last_level_name = "nil" -- Not used for anything
    self.deimos_intensity = nil

    self.last_detective_achievement_spawn_time  = nil
    self.last_mutant_hunter_achievement_spawn_time    = nil

    bind_stalker_ext.actor_on_init(self)
    
    self.weather_manager = level_weathers.get_weather_manager()
    --alun_utils.debug_write("actor init end")
end

----------------------------------------------------------------------------------------------------------------------
function actor_binder:net_spawn(data)
    --printf("actor net spawn")
    --alun_utils.debug_write("actor net spawn start")
    level.show_indicators()
    self.bCheckStart = true
    self.weapon_hide = false -- спрятано или нет оружие при разговоре.
    self.weapon_hide_in_dialog = false
    if object_binder.net_spawn(self,data) == false then
  return false
    end
    db.add_actor(self.object)
    db.add_enemy(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
    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
    bind_stalker_ext.actor_on_net_spawn(self)
    self.weather_manager:reset()
    --alun_utils.debug_write("actor net spawn end")
    
    return true
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:net_destroy()
    --alun_utils.debug_write("actor net destroy start")
    
    xr_sound.stop_sounds_by_id(self.object:id())

    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)
    db.delete_enemy(self.object)

    -- remove callbacks
    local t = {
    -- vanilla
    callback.inventory_info,
    callback.on_item_take,
    callback.on_item_drop,
    callback.task_state,
    callback.trade_sell_buy_item,
    callback.take_item_from_box,
    callback.use_object,
    
    -- coc
    callback.hit,
    callback.key_press,
    callback.key_release,
    callback.key_hold,
    callback.actor_before_death,
    callback.on_attach_vehicle,
    callback.on_detach_vehicle,
    callback.on_use_vehicle,
    callback.weapon_jammed,
    callback.weapon_zoom_in,
    callback.weapon_zoom_out
    }
    for i=1,#t do
  if (t[i]) then
   self.object:set_callback(t[i])
  end
    end

    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
    
    bind_stalker_ext.actor_on_net_destroy(self)

    object_binder.net_destroy(self)
    
    --alun_utils.debug_write("actor net destroy end")
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:reinit()
    object_binder.reinit(self)
    
    --alun_utils.debug_write("actor reinit")
    
    local npc_id = self.object:id()
    db.storage[npc_id] = empty_table(db.storage[npc_id])
    self.st = db.storage[npc_id]

    
  local t = {
    -- vanilla
    ["inventory_info"]    = bind_stalker_ext.actor_on_info_callback,
    ["on_item_take"]    = bind_stalker_ext.actor_on_item_take,
    ["on_item_drop"]    = bind_stalker_ext.actor_on_item_drop,
    ["task_state"]     = bind_stalker_ext.actor_on_task_callback,
    ["trade_sell_buy_item"]  = bind_stalker_ext.actor_on_trade,
    ["take_item_from_box"]  = bind_stalker_ext.actor_on_item_take_from_box,
    ["use_object"]    = bind_stalker_ext.actor_on_item_use,
    
    -- coc
    ["hit"]      = bind_stalker_ext.actor_on_hit_callback,
    ["key_press"]    = bind_stalker_ext.on_key_press,
    ["key_release"]    = bind_stalker_ext.on_key_release,
    ["key_hold"]    = bind_stalker_ext.on_key_hold,
    ["actor_before_death"]  = bind_stalker_ext.actor_on_before_death,
    ["on_attach_vehicle"]  = bind_stalker_ext.actor_on_attach_vehicle,
    ["on_detach_vehicle"]  = bind_stalker_ext.actor_on_detach_vehicle,
    ["on_use_vehicle"]   = bind_stalker_ext.actor_on_use_vehicle,
    ["weapon_jammed"]   = bind_stalker_ext.actor_on_weapon_jammed,
    ["weapon_zoom_in"]   = bind_stalker_ext.actor_on_weapon_zoom_in,
    ["weapon_zoom_out"]   = bind_stalker_ext.actor_on_weapon_zoom_out
    }
    for cb,func in pairs(t) do
  if (callback[cb] and func) then
   self.object:set_callback(callback[cb],func,self)
  end
    end
end

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

function actor_binder:update(delta)
    object_binder.update(self, delta)
    --alun_utils.debug_write("actor update START")
    if not (db.actor:alive()) then
  return
    end
    
    if self.bCheckStart then -- first update after netspawn
  bind_stalker_ext.actor_on_first_update(self,delta)
  --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
  pda.fill_primary_objects()
  self.object:activate_slot(self.loaded_active_slot or 0)
  self.bCheckStart = nil
  db.actor.afterFirstUpdate = true
    end
    
    self.task_manager:update()

    -- DEBUG slowdown
    --slowdown.update()
    
    game_stats.update (delta, self.object)

    -- апдейт погоды
    self.weather_manager:update()

    --' Апдейт саундменеджера
    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

    -- обновление пси-антенны
    if sr_psy_antenna.psy_antenna then
  sr_psy_antenna.psy_antenna:update(delta)
    end

    -- Апдейт доступности для симуляции.
    simulation_objects.get_sim_obj_registry():update_avaliability(alife():actor())

    bind_stalker_ext.actor_on_update(self,delta)
    
    local tg = time_global()
    if (self.last_update and tg < self.last_update) then
  --alun_utils.debug_write("actor update END")
  return
    end
    self.last_update = tg + 3000

    pda.fill_sleep_zones()
    new_tasks.task_spec()

    treasure_manager.get_treasure_manager():update()
    
    --alun_utils.debug_write("actor update END")
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:save(packet)
    set_save_marker(packet, "save", false, "actor_binder")
    object_binder.save(self, packet)
    set_save_marker(packet, "save", true, "actor_binder")
    
    if (USE_MARSHAL) then
  if (utils.level_changing()) then
   alun_utils.save_var(db.actor,"heli_enemy_flag",false)
   SendScriptCallback("on_level_changing")
  end
  self:save_state(alife_storage_manager.get_state())
  return
    end
    --alun_utils.debug_write("--------------- actor_binder:save -------- Start")
    set_save_marker(packet, "save", false, "actor_binder")

    if (utils.level_changing()) then
  alun_utils.save_var(db.actor,"heli_enemy_flag",false)
    end
    
    --alundaio
    alun_utils.w_stpk(packet,"u8",level.get_game_difficulty(), "game difficulty")
    alun_utils.w_stpk(packet,"CTime",self.st.disable_input_time, "disable input time")

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

    alun_utils.w_stpk(packet,"bool",SIMBOARD.simulation_started, "sim started")

    xr_sound.actor_save(packet)
    --alun_utils.w_stpk(packet,"stringZ",self.last_level_name,"last level name")
    xr_statistic.save(packet)
    treasure_manager.get_treasure_manager():save(packet)
    task_manager.get_task_manager():save(packet)
    packet:w_u8(self.object:active_slot())

    alun_utils.w_stpk(packet,"CTime",self.last_detective_achievement_spawn_time, "detective spawn time")
    alun_utils.w_stpk(packet,"CTime",self.last_mutant_hunter_achievement_spawn_time, "hunter spawn time")

    bind_stalker_ext.actor_on_save(self,packet)

    --alun_utils.debug_write("--------------- actor_binder:save -------- End")
end

function actor_binder:load(reader)
    set_save_marker(reader, "load", false, "actor_binder")
    object_binder.load(self, reader)
    set_save_marker(reader, "load", true, "actor_binder")
    if (USE_MARSHAL) then
  self:load_state(alife_storage_manager.get_state())
  bind_stalker_ext.actor_on_load(self,reader)
  return
    end
    --alun_utils.debug_write("actor_binder:load start")

    local game_difficulty_by_num = {
    [0] = "gd_novice",
    [1] = "gd_stalker",
    [2] = "gd_veteran",
    [3] = "gd_master"
    }
    local dif = game_difficulty_by_num[reader:r_u8()]
    if not (dif) then
  abort("actor_binder:load save corrupted!")
  return
    end
    get_console():execute("g_game_difficulty "..dif)
    self.st.disable_input_time = utils.r_CTime(reader,"bind_stalker")

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

    sr_psy_antenna.load(reader)
    SIMBOARD.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)
    task_manager.get_task_manager():load(reader)

    self.loaded_active_slot = reader:r_u8()

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

    --alun_utils.debug_write("actor_binder:load end")
end

----------------------------------------------------------------------------------------------------------------------
function actor_binder:save_state(m_data)
    --alun_utils.debug_write(strformat("actor_binder:save_state BEFORE"))
    m_data.actor_binder = {}
    m_data.actor_binder.game_difficulty = level.get_game_difficulty()
    m_data.actor_binder.disable_input_time = self.st.disable_input_time
    m_data.actor_binder.simulation_started = SIMBOARD.simulation_started
    --m_data.actor_binder.last_level_name = self.last_level_name
    m_data.actor_binder.active_slot = self.object:active_slot()
    m_data.actor_binder.last_detective_achievement_spawn_time = self.last_detective_achievement_spawn_time
    m_data.actor_binder.last_mutant_hunter_achievement_spawn_time = self.last_mutant_hunter_achievement_spawn_time
    
    if (sr_psy_antenna.psy_antenna and sr_psy_antenna.psy_antenna.global_state ~= 0 and not utils.level_changing()) then
  sr_psy_antenna.psy_antenna:save_state(m_data)
    end
    
    xr_statistic.save_state(m_data)
    inventory_upgrades.save_state(m_data)
    xr_sound.actor_save_state(m_data)
    task_manager.save_state(m_data)
    level_weathers.get_weather_manager():save_state(m_data)
    surge_manager.save_state(m_data)
    psi_storm_manager.save_state(m_data)
    
    db.storage[0].pstor = db.storage[0].pstor or {}
    --alun_utils.debug_write(strformat("actor_binder:save_state AFTER"))
end

function actor_binder:load_state(m_data)
    if not (m_data.actor_binder) then
  return
    end
    --alun_utils.debug_write(strformat("actor_binder:load_state %s BEFORE",self.object:name()))
    --alun_utils.debug_write("actor_binder:load_state")
    local game_difficulty_by_num = {
    [0] = "gd_novice",
    [1] = "gd_stalker",
    [2] = "gd_veteran",
    [3] = "gd_master"
    }
    get_console():execute("g_game_difficulty "..game_difficulty_by_num[m_data.actor_binder.game_difficulty or 3])
    self.st.disable_input_time = m_data.actor_binder.disable_input_time
    SIMBOARD.simulation_started = m_data.actor_binder.simulation_started
    --self.last_level_name = m_data.actor_binder.last_level_name
    self.loaded_active_slot = m_data.actor_binder.active_slot or 0
    self.last_detective_achievement_spawn_time = m_data.actor_binder.last_detective_achievement_spawn_time
    self.last_mutant_hunter_achievement_spawn_time = m_data.actor_binder.last_mutant_hunter_achievement_spawn_time
    
    if (sr_psy_antenna.psy_antenna) then
  sr_psy_antenna.psy_antenna:load_state(m_data)
    end
    
    xr_statistic.load_state(m_data)
    inventory_upgrades.load_state(m_data)
    xr_sound.actor_load_state(m_data)
    task_manager.load_state(m_data)
    level_weathers.get_weather_manager():load_state(m_data)
    surge_manager.load_state(m_data)
    psi_storm_manager.load_state(m_data)
    
    if (m_data.pstor_all and m_data.pstor_all[0]) then
  db.storage[0].pstor = m_data.pstor_all[0]
  m_data.pstor_all[0] = nil
    end

    if (m_data.pstor_ctime and m_data.pstor_ctime[0]) then
  db.storage[0].pstor_ctime = m_data.pstor_ctime[0]
  m_data.pstor_ctime[0] = nil
    end
    
    m_data.actor_binder = nil
    --alun_utils.debug_write(strformat("actor_binder:load_state %s AFTER",self.object:name()))
end


добавил недостающие функции в конце скрипта
Код

----------------------------------------------------------------------------------------------------------------------
function actor_binder:take_item_from_box(box, item)
    local box_name = box:name()
    ts_mod_cop.ts_on_item_take(item)    --TS_MOD--
end

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

function actor_binder <img src="/.s/sm/23/surprised.gif" border="0" align="absmiddle" alt="surprised" /> n_item_drop (obj)
    ts_mod_cop.ts_on_item_drop(obj)    --TS_MOD--
end
----------------------------------------------------------------------------------------------------------------------

function actor_binder <img src="/.s/sm/23/surprised.gif" border="0" align="absmiddle" alt="surprised" /> n_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 <img src="/.s/sm/23/surprised.gif" border="0" align="absmiddle" alt="surprised" /> n_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() <img src="/.s/sm/23/surprised.gif" border="0" align="absmiddle" alt="surprised" /> bject(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() <img src="/.s/sm/23/surprised.gif" border="0" align="absmiddle" alt="surprised" /> n_item_take(obj:id())
    
    ts_mod_cop.ts_on_item_take(obj)    --TS_MOD--
end


такой лог ошибки получил

FATAL ERROR
[error]Expression : <no expression>
[error]Function : CScriptEngine::lua_error
[error]File : ..\xrServerEntities\script_engine.cpp
[error]Line : 193
[error]Description : fatal error
[error]Arguments : LUA error: ...r coll of chernobyl\gamedata\scripts\bind_stalker.script:190: attempt to index global 'game_stats' (a nil value)

удаляю файл и игра идет как ни в чем не бывало.
Попробую в просторах нэта найти оригинальный файл, может в сборочной версии проблема или пару строк потерял пока редактировал.
Сообщение отредактировал Sanchess8 - Четверг, 24.11.2016, 18:52
  Злобная реклама
Четверг, 24.11.2016, 18:43
Статус:
Сообщений: 666
Регистрация: 22.11.2016
Российская Федерация  ins33
Четверг, 24.11.2016, 19:32 | Сообщение # 4659
Dream Reader Mod
Статус:
Опытный:
Сообщений: 2269
Награды: 1
Регистрация: 17.01.2012

Sanchess8, Эти колбэки перенесены в function actor_binder:reinit()
Подключать надо в bind_stalker_ext.script.
  Злобная реклама
Четверг, 24.11.2016, 19:32
Статус:
Сообщений: 666
Регистрация: 17.01.2012
Украина  Sanchess8
Четверг, 24.11.2016, 19:46 | Сообщение # 4660
Статус:
Зевака:
Сообщений: 3
Награды: 0
Регистрация: 22.11.2016

Опять же такого скрипта - bind_stalker_ext.script. нет ни в одной сборке (1.3.2, 1.4.16) возможно они скрыты в ресурсных файлах с расширениями *.db0-5. Спасибо за помощь. Если не одолеет лень-матушка я туда еще доберусь))
Сообщение отредактировал Sanchess8 - Четверг, 24.11.2016, 19:49
  Злобная реклама
Четверг, 24.11.2016, 19:46
Статус:
Сообщений: 666
Регистрация: 22.11.2016
Российская Федерация  ins33
Четверг, 24.11.2016, 20:19 | Сообщение # 4661
Dream Reader Mod
Статус:
Опытный:
Сообщений: 2269
Награды: 1
Регистрация: 17.01.2012

Sanchess8, db0-5 С этого надо было начинать.
  Злобная реклама
Четверг, 24.11.2016, 20:19
Статус:
Сообщений: 666
Регистрация: 17.01.2012
Российская Федерация  denis2000
Пятница, 25.11.2016, 08:59 | Сообщение # 4662
Время Альянса
Статус:
Ветеран:
Сообщений: 4070
Награды: 16
Регистрация: 19.07.2013

Advisor890, А в чем проблема то?
Код
if xr_condition.monster_is_alive(nil,nil,{"storyid_монстра"}) then "действие"



evg, Для этого нужно движку разъяснить свои хотения.
Сообщение отредактировал denis2000 - Пятница, 25.11.2016, 08:59
  Злобная реклама
Пятница, 25.11.2016, 08:59
Статус:
Сообщений: 666
Регистрация: 19.07.2013
Украина  Shdow_Runner
Пятница, 25.11.2016, 11:00 | Сообщение # 4663
Статус:
Отмычка:
Сообщений: 86
Награды: 4
Регистрация: 11.10.2015

Всем привет!
У меня вопрос концептуального характера: могу ли я из какого либо готового мода, куда вшит определенный оружейный пак, вытянуть модель и анимации для конкретного ствола и заменить им такой же ствол в другом моде? Понимаю, что для завсегдатаев темы вопрос может звучать глупо, но в моддинге я совершенно не разбираюсь, однако если такое возможно, то охотно возьмусь осваивать.
Спасибо.
Сообщение отредактировал Shdow_Runner - Пятница, 25.11.2016, 11:00
  Злобная реклама
Пятница, 25.11.2016, 11:00
Статус:
Сообщений: 666
Регистрация: 11.10.2015
Азербайджан  Hoperise
Пятница, 25.11.2016, 11:05 | Сообщение # 4664
Статус:
Опытный:
Сообщений: 1722
Награды: 10
Регистрация: 26.10.2016

Shdow_Runner, да конечно можно, только конфиг придётся немного переработать в плане того, как будет смотреться на худе оружия. Придётся так же посмотреть какие модели подствольника/глушителя/прицела используются, если стандарт то придётся только худ, партиклы и анимацию оружия смотреть/править. Если нет то переносить и их.
Сообщение отредактировал Hoperise - Пятница, 25.11.2016, 11:06
  Злобная реклама
Пятница, 25.11.2016, 11:05
Статус:
Сообщений: 666
Регистрация: 26.10.2016
Украина  Shdow_Runner
Пятница, 25.11.2016, 16:26 | Сообщение # 4665
Статус:
Отмычка:
Сообщений: 86
Награды: 4
Регистрация: 11.10.2015

Hoperise, однозначно понял, что надо идти учить матчасть и теорию)))) Пойду шерстить форумы да разбираться. Спасибо за ответ!

Добавлено (25.11.2016, 16:26)
---------------------------------------------
В продолжение темы: как работает модель урона на Х-Ray 1.6? Есть регистрация попаданий в разные части тела, определение типа прилетевшего боеприпаса?

  Злобная реклама
Пятница, 25.11.2016, 16:26
Статус:
Сообщений: 666
Регистрация: 11.10.2015
Поиск: