Перейти к контенту

Рекомендуемые сообщения

Добавления в мод эффектов при приёме аптечки в виде звука увеличения серцебиения либо потемнения экрана было бы очень даже кстати

Ссылка на комментарий

Sky_Line, это действительно делается весьма просто, обычным запуском звука функцией например перед/после строки:

xr_s.register_callback("update", medicine.HideWeapon, time_global())


k01jan, я и не говорил, что это что-то новое. Основной задачей было не сделать "также" и не искать "поклонников", а реализовать данное именно так, как оно реализовано. Это не "колесо", это "дорога", по которой это "колесо" может ехать. Даже невооружённым взглядом можно увидеть, что адаптация данного "мода" в разы легче предложенного тобою, пусть и возможностей несколько меньше, но уделив ещё несколько часов внимания это легко можно поправить.

Charsi показал мне возможности xr_s.script, за что ему огромное спасибо, я их изучил и решил поделиться с остальными, т.к. не многие знают что это за "фрукт", а те кто знают и без меня его прекрасно используют, кроме того динамически подключаться к колбекам можно не только этим методом - способов более чем достаточно. Что касается того, что в ЗП "давно" есть подобная система, то здесь я даже более тебе скажу - именно данный способ в нём и используется, правда единожды, но используется...

Ссылка на комментарий

Да хорошая реализация. Способ интересный. И совсем не сложно доработать скрипт добавить звуки использования аптечек и пост-эффекты приема препаратов. Наверно тоже самое можно сделать и для антирадов бинтов и еды. Медленное восстановление здоровья, кровотечения и голода.

Ссылка на комментарий

Ребята, прелесть не в медленном восстановлении, а в том, как это восстановление реализовано. Судя из написанного - Вы понимаете, что это здорово, но совершенно не понимаете как оно работает... А жаль.

Ссылка на комментарий

Добрый день!

Пожалуйста, выложите более подробную инструкцию...

1-й и 2-й шаги сделал:

 - в файле bind_stalker.script в метод reinit класса actor_binder, в конец дописал строку:

self.object:set_callback(callback.use_object, self.use_inventory_item, self)

- в метод net_destroy дописал:

self.object:set_callback(callback.use_object, nil)

 

А дальше не понял: "Допишите данный код после одного из методов (не во внутрь функции!!!), например перед update"...

 

Заранее благодарен.

 

Ссылка на комментарий

Куда уже подробнее?

"после одного из методов" означает, что код нужно вписать между функциями, но никак не во внутрь. Как пример, можно разместить его перед строкой:

function actor_binder:update(delta)
Ссылка на комментарий

@ColR_iT, просто красавчик. нет слов. просто репектище. только непонятно как сделать тоже самое, только на еду?

Изменено пользователем sanjaaa
Ссылка на комментарий

sanjaaa, в таблицу item_, что в файле bind_stalker.script, допиши секцию своей еды после запятой, по аналогии. И в табличку itemParam, в файле medicine.script, допиши туже секцию и два числа: первое из которых - это количество жизней, которое будет пополнять еда; второе число - это сколько времени будет восстанавливаться здоровье (не забудь в конфиге убрать движковое восстановление).

Если тебе не нужно, чтобы еда лечила, то во второй таблице пропиши по нолям, тогда при использовании твоей еды будет просто убираться оружие.

Ссылка на комментарий

А есть уже готовые файлы? а то я не могу разобраться со своим модом, что да как, мне для чистого неба нужно на  чистую игру.

Ссылка на комментарий

Я сделал, вылетает;

 

Expression    : fatal error

Function      : CScriptEngine::lua_error
File          : E:\priquel\sources\engine\xrServerEntities\script_engine.cpp
Line          : 180
Description   : <no expression>
Arguments     : LUA error: ...lver edition\cs\gamedata\scripts\bind_stalker.script:597: table index is nil


не знаю, я просто уже много чего добавил в чн, а теперь разобраться не могу, мне нужен сталкер бин готовый для сравнения с моим) 



под версию 1.5.10, да кстати вылетает когда аптечку использую

Ссылка на комментарий

Да я хочу сам разобраться, спасибо за помощь конечно, мне бы просто на готовый файл глянуть с чистой игры, чтобы я потом сам ручками доделал))



я вставлял Slow Medicine 0.2b работало нормально, но спальник глючило из-за этого)



и еще вопрос, по этому же принципу можно сделать медленный вывод радиации из организма?  



ато я его щас буду калупать до посинения :) и свой скрипт сломаю)



function init (obj)


xr_motivator.AddToMotivator(obj)
end

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

delayed_alife_release_objects = {}
to_delayed_alife_release_objects = {}

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

lasthealth = 0
lasttime = 0
post_process = 0
local weapon_hide = {}
----------------------------------------------------------------------------------------------------------------------
class "actor_binder" (object_binder)
----------------------------------------------------------------------------------------------------------------------
function actor_binder:__init (obj) super(obj)
self.bCheckStart = false
self.weather_manager = level_weathers.get_weather_manager()
--self.actor_detector = xr_detector.actor_detector()
self.last_level_name = 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)

if self.st.disable_input_time == nil then
level.enable_input()
end
xr_s.on_game_load() --' Distemper 03.2008 --
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()

--'Устанавливаем ссылку на таскменеджер
self.task_manager = task_manager.get_task_manager()

-- Анремте это, чтобы пропустить интро на марше.
--self.object:give_info_portion("mar_lvl_sim")
if level.name() ~= "marsh" then
sim_board.get_sim_board():start_sim()
end

--spawn_items.main()
self.spawn_frame = device().frame
self.already_jumped = 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
for k,v in pairs (board_factions) do
xr_sound.stop_sounds_by_id(v.id)
end
if(actor_stats.remove_from_ranking~=nil)then
actor_stats.remove_from_ranking(self.object:id())
end
xr_effects.stc_stop_particle_sounds()
level.show_indicators()
level.show_weapon(true)
-- get_console():execute("hud_crosshair 1")
-- get_console():execute("hud_weapon 1")
-- get_console():execute("r2_dof -0.250000,1.400000,200.000000")
-- game_stats.shutdown ()
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.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)
self.object:set_callback(callback.use_object, nil)
if sr_psy_antenna.psy_antenna then
sr_psy_antenna.psy_antenna:destroy()
sr_psy_antenna.psy_antenna = false
end
xrs_dyn_music.stop_sound()
object_binder.net_destroy(self)
-- xr_sound.stop_all_sounds()
xr_s.on_actor_destroy() --' Distemper 03.2008 --
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)
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()
treasure_manager.take_item_from_box(box, box_name, item)

--local smart_name = string.sub(box_name, 1, string.len(box_name)-4)
--if(sim_board.get_sim_board().smarts_by_names[smart_name]~=nil) then
-- game_relations.set_gulag_relation_actor(smart_name, "enemy")
--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)
xr_statistic.inc_recieved_money_counter(money)
else
game_stats.money_trade_update (-money)
xr_statistic.inc_spent_money_counter(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)
printf("on_item_take [%s]", obj:name())
if isArtefact(obj) then
bind_anomaly_zone.artefact_ways_by_id[obj:id()] = nil
local artefact = obj:get_artefact()
artefact:FollowByPath("NULL",0,vector():set(500,500,500))
if bind_anomaly_zone.parent_zones_by_artefact_id[obj:id()] ~= nil then
bind_anomaly_zone.parent_zones_by_artefact_id[obj:id()]:on_artefact_take()
end
end
for k,v in pairs(task_manager:get_task_manager().task_info) do
if(v.type=="bring_item" and v.state~="finished") then
v:on_item_take(obj)
end
end
--game_stats.update_take_item (obj, self.object)
end
----------------------------------------------------------------------------------------------------------------------
function actor_binder:on_item_drop (obj)
level_tasks.proceed(self.object)
for k,v in pairs(task_manager:get_task_manager().task_info) do
if(v.type=="bring_item" and v.state~="finished") then
v:on_item_drop(obj)
end
end
--game_stats.update_drop_item (obj, self.object)
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: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
----------------------------------------------------------------------------------------------------------------------

local item_ = {["medkit"] = true, ["medkit_army"] = true, ["medkit_scientic"] = true,}
function actor_binder:use_inventory_item(obj)
if item_[obj:section()] then
medicine.Rehabilitation(obj)
end
end

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

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

-- DEBUG slowdown
-- slowdown.update()

xr_s.on_actor_update(delta)

local time = time_global()

game_stats.update (delta, self.object)

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

-- апдейт схемы детектора
--self.actor_detector:update()

--' Апдейт саундменеджера
xr_sound.update(self.object:id())

--' Проверка потери жизни
--[[
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 self.object:is_talking() then
if self.weapon_hide_in_dialog == false then
--printf("PL:HIDE_D1 ---> self.weapon_hide = [%s] weapon_hide = [%s]", tostring(self.weapon_hide), tostring(weapon_hide))
self.object:hide_weapon()
self.weapon_hide_in_dialog = true
--printf("PL:HIDE_D2 ---> self.weapon_hide = [%s] weapon_hide = [%s]", tostring(self.weapon_hide), tostring(weapon_hide))
end
else
if self.weapon_hide_in_dialog == true then
--printf("PL:RESTORE_D1 ---> self.weapon_hide = [%s] weapon_hide = [%s]", tostring(self.weapon_hide), tostring(weapon_hide))
self.object:restore_weapon()
self.weapon_hide_in_dialog = false
--printf("PL:RESTORE_D2 ---> self.weapon_hide = [%s] weapon_hide = [%s]", tostring(self.weapon_hide), tostring(weapon_hide))
end
end


-- Апдейт прятание оружия игрока в зоне sr_no_weapon
if check_for_weapon_hide_by_zones() == true then
--printf("weapon_hide1 = [%s]", tostring(weapon_hide))
if self.weapon_hide == false then
--printf("PL:HIDE_W1 ---> self.weapon_hide = [%s] weapon_hide = [%s]", tostring(self.weapon_hide), tostring(weapon_hide))
self.object:hide_weapon()
self.weapon_hide = true
--printf("PL:HIDE_W2 ---> self.weapon_hide = [%s] weapon_hide = [%s]", tostring(self.weapon_hide), tostring(weapon_hide))
end
else
--printf("weapon_hide3 = [%s]", tostring(weapon_hide))
if self.weapon_hide == true then
--printf("PL:RESTORE_W1 ---> self.weapon_hide = [%s] weapon_hide = [%s]", tostring(self.weapon_hide), tostring(weapon_hide))
self.object:restore_weapon()
self.weapon_hide = false
--printf("PL:RESTORE_W2 ---> self.weapon_hide = [%s] weapon_hide = [%s]", tostring(self.weapon_hide), tostring(weapon_hide))
end
end

-- обновление рестрикторов, которые под логикой, срабатывает через интервалы времени
if self.next_restrictors_update_time < time then

self.next_restrictors_update_time = time + 200

self.task_manager: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

--[[local hud_demo = get_hud()

local custom_static_demo = hud_demo:GetCustomStatic("cs_demo_play")
if custom_static_demo == nil then
hud_demo:AddCustomStatic("cs_demo_play", true)
if level.name() == "agroprom_underground" then
hud_demo:GetCustomStatic("cs_demo_play"):wnd():SetTextST("st_demo_agr")
elseif level.name() == "military_nvidia" then
hud_demo:GetCustomStatic("cs_demo_play"):wnd():SetTextST("st_demo_mil")
else
hud_demo:GetCustomStatic("cs_demo_play"):wnd():SetTextST("st_demo_play")
end
end

if jump_level.need_jump==true then
hud_demo:GetCustomStatic("cs_demo_play"):wnd():SetTextST("L: " .. level.name() .. " frame [" ..
tostring(device().frame) ..
"] delta[" ..
tostring(device().frame - self.spawn_frame) ..
"]")
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("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

--' Distemper 03.2008 --
if xrs_dyn_music.play_combat == 0 then
xrs_dyn_music.interactive_music(0)
elseif xrs_dyn_music.play_combat == 1 then
xrs_dyn_music.interactive_music(20)
elseif xrs_dyn_music.play_combat == 2 then
xrs_dyn_music.interactive_music(10)
end

xr_s.on_actor_update(delta)
--' end --
if xr_surge_hide.start_surge then
if not xr_surge_hide.weather_surge then
xr_surge_hide.weather_surge = true
level.set_weather("default_cloudy", true)
end
local diff_sec = math.ceil(game.get_game_time():diffSec(xr_surge_hide.initialization_time)/level.get_time_factor())
local time_before_lag_noosphere = 0
local time_before_give_task = 0
if level.name() == "marsh" then
time_before_lag_noosphere = 12
time_before_give_task = 15
else
time_before_lag_noosphere = 17
time_before_give_task = 27
end
if diff_sec>=time_before_lag_noosphere and xr_surge_hide.phase == 1 then
xr_surge_hide.activate_surge()
elseif diff_sec>=time_before_give_task and xr_surge_hide.phase == 2 then
xr_surge_hide.activate_surge(xr_surge_hide.time_before_surge)
end
end

local al = alife()
if al ~= nil then
local name = al:level_name(al:level_id())
if(self.last_level_name==nil) then
self.last_level_name = name
else
if(name~=self.last_level_name) then
self.last_level_name = name
local time = xr_surge_hide.surge_can_be_started(name)
if time then
xr_surge_hide.activate_surge(time)
end
end
end
end
if guiders.teleported_to_another_level and not guiders.level_changed then
guiders.action_teleport_to_point()
end
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) --' Distemper 12.02.2008
xr_surge_hide.save(packet)
sr_psy_antenna.save( packet )
--self.actor_detector:save(packet)

packet:w_bool(sim_board.get_sim_board().simulation_started)

-- Сохранение списка ожидания на команду атаки от игрока
local n = 0
for k,v in pairs(sim_combat.wait_for_combat) do
n = n + 1
end
packet:w_u8(n)
for k,v in pairs(sim_combat.wait_for_combat) do
packet:w_u16(k)
packet:w_stringZ(v)
end
xr_sound.actor_save(packet)
packet:w_stringZ(tostring(self.last_level_name))
xr_statistic.save(packet)
guiders.save(packet)
treasure_manager.save(packet)
n = 0
for k,v in pairs(delayed_alife_release_objects) do
n = n + 1
end
packet:w_u8(n)
for k,v in pairs (delayed_alife_release_objects) do
printf("TO_RELEASING OBJ:[%s]", tostring(k))
packet:w_u16(k)
end
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
-- minigames_manager.get_minigames_manager():save(packet)
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) --' Distemper 12.02.2008
xr_surge_hide.load(reader)
sr_psy_antenna.load(reader)
--self.actor_detector:load(reader)

sim_board.get_sim_board().simulation_started = reader:r_bool()

-- Загрузка списка ожидания на команду атаки от игрока
local n = reader:r_u8()
sim_combat.wait_for_combat = {}
for i = 1,n do
sim_combat.wait_for_combat[reader:r_u16()] = reader:r_stringZ()
end

xr_sound.actor_load(reader)
local n = reader:r_stringZ()
if(n~="nil") then
self.last_level_name = n
end
xr_statistic.load(reader)
guiders.load(reader)
treasure_manager.load(reader)
n = reader:r_u8()
for i = 1,n do
to_delayed_alife_release_objects[reader:r_u16()] = true
end
printf("delayed_alife_release_objects")
print_table(delayed_alife_release_objects)
n = reader:r_u8()
for i = 1,n do
db.script_ids[reader:r_u16()] = reader:r_stringZ()
end
-- minigames_manager.get_minigames_manager():load(reader)
set_save_marker(reader, "load", true, "actor_binder")
end
----------------------------------------------------------------------------------------------------------------------

--старт префетча звуков
--if string.find(command_line(), "-noprefetch") == nil then
-- sound_prefetch.prefetch_sounds()
--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)
weapon_hide[zone_id] = true
end
function restore_weapon(zone_id)
weapon_hide[zone_id] = false
end


function add_to_delayed_release(obj_id)
printf("TO_RELEASING_add OBJ:[%s]", tostring(obj_id))
delayed_alife_release_objects[obj_id] = true
end
function del_to_delayed_release(obj_id)
printf("TO_RELEASING_del OBJ:[%s]", tostring(obj_id))
delayed_alife_release_objects[obj_id] = nil
end

 



@ColR_iT, Укажи что я не правильно написал, я просто только учусь работать со скриптами) 

Ссылка на комментарий

@Артём_killer, вообще-то, когда я говорил, чтобы ты скинул два файла, я ожидал увидеть ссылку, ну максимум две - на каждый файл... Ну да ладно.

По сабжу... Я упустил из виду тот момент, что в ЧН в функцию hide_weapon передаётся (зачем-то) имя зоны. Измени функцию HideWeapon в файле medicine.script на вот эту:

 

--# Убираем оружие.
--# timeNow - время на которое убирать.
function HideWeapon (timeNow)
    --# Прячем оружие.
    db.actor.hide_weapon()
    --# Если время вышло, то...
    if time_global() > timeNow + timeHide then
        --# Вернём оружие
        db.actor.restore_weapon()
        --# отключим данную функцию от апдейта.
        xr_s.unregister_callback ("update", medicine.HideWeapon)
        return
    end
end

 

Вылета более быть не должно.

 

Вывод радиации по этому же принципу сделать можно. :)

 

P.S. спасибо, за указанную ошибку.

Ссылка на комментарий

@ColR_iT, И тебе большое спасибо) 



А как по этому же принципу сделать вывод радиации?



Вылета нет, но медикаменты не действуют



здоровье не прибавляется почему-то



А еще если на базе чн используешь аптечку, то когда выходишь на болото гг не достает ничего из оружия, только детектор и все.



А вообще реально медицину из зп, перенести в чн, вмести со всеми ее свойствами? 

Ссылка на комментарий

@Артём_killer, в файле bind_stalker.script, в 421 строке убери повторный вызов функции on_actor_update. Возможно причина из-за этого, т.к. всё должно работать, ибо ничего архисложного там ничего нет...

Ссылка на комментарий

Вывод радиации делается аналогично функции UpdateHealth в файле medicine.script, только вместо пополнения здоровья нужно делать вывод радиации. Разгляди внимательно эту функцию, там к каждой строке приписаны комментарии, не сложно разобраться, если хоть чуть-чуть знаком с программированием, если же не знаком - "звиняйте" это не ко мне...
 

Ссылка на комментарий

Убрал, тоже самое



нечего не происходит 



@ColR_iT, Напиши пожалуйста свой  bind_stalker.script, я уже все перепробовал, не выходит ничего, игра работает стабильно, но от аптечек нет толку действий ноль.

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...