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

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

Ребят...помогите. столкнулся с такой проблемой. Вот хочу сделать чтобы еда и аптечки в ТЧ лечили как в ЗП.

Нашел мануал(он в спойлере) там всё подробно описывается. Делал точно так же как там написано. В итоге ловлю вылет с логом:

=============

Expression : fatal error

Function : CScriptEngine::lua_error

File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp

Line : 73

Description : <no expression>

Arguments : LUA error: ...ow of chernobyl\gamedata\scripts\bind_stalker.script:233: attempt to index global 'heal_regen' (a nil value)

=============

и название менял на health_regen. все равно не помогает. подскажите пожалуйста- в чем беда.

 

Для начала создадим скрипт. Например health_effect.scripts:

 

 

---Система еды и постепенного лечения из Лурк мода---

 

objectinuse=0

objectused=0

 

--If/then statements for finding the item.

function start(obj)

snd = xr_sound.get_safe_sound_object([[$no_sound]])

if (db.actor~=nil) and (obj~=nil) then

slotinuse=db.actor:active_slot()

slot_div=1

if obj:section() == "medkit" or obj:section() == "medkit_army" or obj:section() == "medkit_scientic" then

snd= xr_sound.get_safe_sound_object([[interface\inv_medkit]])

holster_time=time_global()+7000

if (objectinuse==1) then

holster_time=holster_time+7000

end

soundhub()

 

elseif obj:section() == "antirad" then

snd= xr_sound.get_safe_sound_object([[interface\inv_pills]])

holster_time=time_global()+6000

if (objectinuse==1) then

holster_time=holster_time+6000

end

soundhub()

 

elseif obj:section() == "bandage" then

snd= xr_sound.get_safe_sound_object([[interface\inv_bandage]])

holster_time=time_global()+6000

if (objectinuse==1) then

holster_time=holster_time+6000

end

soundhub()

 

elseif obj:section() == "vodka" then

snd= xr_sound.get_safe_sound_object([[interface\inv_vodka]])

holster_time=time_global()+4000

if (objectinuse==1) then

holster_time=holster_time+4000

end

soundhub()

 

elseif obj:section() == "energy_drink" then

snd= xr_sound.get_safe_sound_object([[interface\inv_softdrink]])

holster_time=time_global()+4000

if (objectinuse==1) then

holster_time=holster_time+4000

end

soundhub()

 

elseif obj:section() == "bread" or obj:section() == "conserva" or obj:section() == "kolbasa" then

snd= xr_sound.get_safe_sound_object([[interface\inv_food]])

holster_time=time_global()+7000

if (objectinuse==1) then

holster_time=holster_time+7000

end

soundhub()

end

 

end

end

 

--Other stuff executes from here.

function soundhub()

if db.actor:alive() then

snd:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)

snd = xr_sound.get_safe_sound_object([[$no_sound]])

if (objectinuse==0) then

db.actor:hide_weapon()

objectinuse=1

if slotinuse == 1 then

slot_div = ((holster_time-time_global())/1.5)

else

slot_div = 0

end

end

objectused=objectused+1

weapontimer()

end

end

 

--Holster time. Its set up as additive: A food and a drink taken together will apply instantly, but your gun is holstered for 9 seconds.

function weapontimer()

if (holster_time~=nil) and (time_global()>(holster_time-slot_div)) and level.present() then

objectused=objectused-1

if (objectused==0) then

db.actor:restore_weapon()

objectinuse=0

holster_time=nil

end

end

end

 

--Message for time remaining and math.Round function. Not used.

--[[

function message()

news_manager.send_tip(db.actor, tostring(math.Round((holster_time - time_global())/1000)).."s", nil, nil, 1000)

end

 

--Math.round

function math.Round(num)

local floored = math.floor(num)

if (num - floored) >= 0.5 then

return math.ceil(num)

else

return floored

end

end

]]--

 

 

Стоит, кстати, учесть параметр

 

 

snd = xr_sound.get_safe_sound_object([[interface\inv_food]])

 

 

Отвечает за воспроизводимый звук. Так что если его нет, поймаете вылет. Теперь создаёте скрипт abc_medkit.script:

 

 

-- Shortened Creds: ABC Mod made this, LURK team just cleaned up the indentions.

 

-- Should the use of the same medkit accumulate over the previous one?

multiple_medkit = "yes" --Не пробовал ставить no. Но почти уверен что будет вылет

 

-- How many minutes should take to complete the healing process.

hp_fullhealth_time = 0.125 --Кол-во в течении которого будет юзаться аптечка

 

--0.25

 

-- Health update time in MS. 1000 = 1 Second.

hupd_time = 50 --Апдейт времени.Лучше не трогать

 

-- Time modulation

time_mod=0

 

-- HP Healed. No higher than 1.

hp_med_kit = 0.65 --Параметр отвечающий за восстановление жизней одной аптечкой.Точнее за скорость восстановления

hp_med_army = 0.75

hp_med_sci = 0.80

 

-- Is Army faster than Normal?

army_fast = "yes"

 

-- Is Science faster than Normal?

sci_fast = "yes"

 

-- Is Science faster than Army?

sci_fast_than_army = "yes"

 

-- Should medkit_scientic anti-radiation process be progressive?

sci_antirad = "yes"

 

-- EOF

 

 

local med_kit, med_band, med_army, med_sci, medused, medid, medname

local objdtc = 0

function chk_medlot_object(obj)

if db.actor ~= nil then

local objdt = time_global()

if obj ~= nil and obj ~= "load" then

medname = obj:section()

if medname == "medkit" or medname == "medkit_army" or medname == "medkit_scientic" then

if objdtc == 0 then objdtc = time_global() + 350 end

med_used = "yes"

med_id = obj:id()

end

end

if med_used == "yes" and objdt > objdtc then

objdtc = 0

med_used = "no"

if level.object_by_id(med_id) == nil then

if medname == "medkit" then med_kit = "yes" end

if medname == "medkit_army" then med_army = "yes" end

if medname == "medkit_scientic" then med_sci = "yes" end

time_mod=0

end

end

new_medkit()

end

end

 

local time_mkit, time_army, time_sci, count_mkit, count_army, count_sci

function new_medkit()

if db.actor ~= nil and level.present() then

local cgametimemed = time_global()

local hft = (hp_fullhealth_time * 60000) / hupd_time

--normal

if med_kit == "yes" then

if time_mkit == nil then time_mkit = time_global() + hupd_time end

if cgametimemed > time_mkit then

time_mkit = time_global() + hupd_time

local player_hp = db.actor.health

if player_hp < 1 then

if count_mkit == nil then count_mkit = 0 end

if count_mkit < (hft + 1) then

db.actor.health = (hp_med_kit/(hft + time_mod))

count_mkit = count_mkit + 1

--abort("TimeMod: "..time_mod)

--abort("Health: "..hp_med_kit/(hft + time_mod))

time_mod = math.clamp(time_mod+0.23,0,35)

else

med_kit = nil

time_mkit = nil

count_mkit = nil

end

else

med_kit = nil

time_mkit = nil

count_mkit = nil

end

end

end

--army

if med_army == "yes" then

if time_army == nil then time_army = time_global() + hupd_time end

if cgametimemed > time_army then

time_army = time_global() + hupd_time

local player_hp = db.actor.health

if player_hp < 1 then

if count_army == nil then count_army = 0 end

if count_army < (hft + 1) then

local mamf = 0

if army_fast == "yes" then mamf = (hp_med_army/hft) / 4 end

db.actor.health = (hp_med_army/hft) + mamf

count_army = count_army + 1

time_mod = math.clamp(time_mod+0.23,0,35)

else

med_kit = nil

time_mkit = nil

count_mkit = nil

end

else

med_kit = nil

time_mkit = nil

count_mkit = nil

end

end

end

--science

if med_sci == "yes" then

if time_sci == nil then time_sci = time_global() + hupd_time end

if cgametimemed > time_sci then

time_sci = time_global() + hupd_time

local player_hp = db.actor.health

if player_hp < 1 then

if count_sci == nil then count_sci = 0 end

if count_sci < (hft + 1) then

local mamf = 0

local sfta = 4

if sci_fast_than_army == "yes" then sfta = 2 end

if sci_fast == "yes" then mamf = (hp_med_army/hft) / sfta end

db.actor.health = (hp_med_sci/hft) + mamf

if sci_antirad == "yes" then db.actor.radiation = -(hp_med_sci/hft) end

count_sci = count_sci + 1

time_mod = math.clamp(time_mod+0.23,0,35)

else

med_kit = nil

time_mkit = nil

count_mkit = nil

end

else

med_kit = nil

time_mkit = nil

count_mkit = nil

end

end

end

end

end

 

function math.clamp (value,mini,maxi)

local clamped = value

if clamped < mini then clamped = mini end

if clamped > maxi then clamped = maxi end

return clamped

end

 

 

Теперь самое сложное. Лезем в bind_stalker.scripts. После

 

 

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

 

 

Пишем

 

 

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

 

 

В итоге получается вот так:

 

 

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.use_object, 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.on_item_drop, self.on_item_drop, self)

 

 

Пишем

 

 

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

 

 

В итоге:

 

 

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.use_object, self.use_object, 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)

 

 

Ищем функцию:

 

 

function actor_binder:on_item_drop (obj)

 

 

и после ее завершения пишем:

 

 

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

function actor_binder:use_object(obj)

heal_regen.start(obj)

end

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

 

 

В итоге:

 

 

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

function actor_binder:on_item_drop (obj)

level_tasks.proceed(self.object)

--game_stats.update_drop_item (obj, self.object)

abc_medkit.chk_medlot_object(obj)

abc_sleep.uptabc(obj)

end

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

function actor_binder:use_object(obj)

heal_regen.start(obj)

end

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

 

 

После

 

 

--game_stats.update_drop_item (obj, self.object)

 

 

Пишем

 

 

abc_medkit.chk_medlot_object(obj)

 

 

После

 

 

function actor_binder:update(delta)

 

 

Пишем

 

 

abc_medkit.chk_medlot_object()

heal_regen.weapontimer()

 

 

Затем надо найти звуки и прописать их в директории \sounds\interface\

 

Далее идем в файл config\misc\items.ltx, ищем секции аптечек ([medkit],[medkit_army],[medkit_scientic]) и меняем в них параметр eat_health на 0.0, иначе актер будет лечится дважды (сначала сразу, по стандартному, а потом уже постепенно)

 

Автор статьи: Fireman3000, дополнил Darkscape, а так же спасибо Lurk моду и ABC.

 

 

Для начала создадим скрипт. Например health_effect.scripts:

 

 

---Система еды и постепенного лечения из Лурк мода---

 

objectinuse=0

objectused=0

 

--If/then statements for finding the item.

function start(obj)

snd = xr_sound.get_safe_sound_object([[$no_sound]])

if (db.actor~=nil) and (obj~=nil) then

slotinuse=db.actor:active_slot()

slot_div=1

if obj:section() == "medkit" or obj:section() == "medkit_army" or obj:section() == "medkit_scientic" then

snd= xr_sound.get_safe_sound_object([[interface\inv_medkit]])

holster_time=time_global()+7000

if (objectinuse==1) then

holster_time=holster_time+7000

end

soundhub()

 

elseif obj:section() == "antirad" then

snd= xr_sound.get_safe_sound_object([[interface\inv_pills]])

holster_time=time_global()+6000

if (objectinuse==1) then

holster_time=holster_time+6000

end

soundhub()

 

elseif obj:section() == "bandage" then

snd= xr_sound.get_safe_sound_object([[interface\inv_bandage]])

holster_time=time_global()+6000

if (objectinuse==1) then

holster_time=holster_time+6000

end

soundhub()

 

elseif obj:section() == "vodka" then

snd= xr_sound.get_safe_sound_object([[interface\inv_vodka]])

holster_time=time_global()+4000

if (objectinuse==1) then

holster_time=holster_time+4000

end

soundhub()

 

elseif obj:section() == "energy_drink" then

snd= xr_sound.get_safe_sound_object([[interface\inv_softdrink]])

holster_time=time_global()+4000

if (objectinuse==1) then

holster_time=holster_time+4000

end

soundhub()

 

elseif obj:section() == "bread" or obj:section() == "conserva" or obj:section() == "kolbasa" then

snd= xr_sound.get_safe_sound_object([[interface\inv_food]])

holster_time=time_global()+7000

if (objectinuse==1) then

holster_time=holster_time+7000

end

soundhub()

end

 

end

end

 

--Other stuff executes from here.

function soundhub()

if db.actor:alive() then

snd:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)

snd = xr_sound.get_safe_sound_object([[$no_sound]])

if (objectinuse==0) then

db.actor:hide_weapon()

objectinuse=1

if slotinuse == 1 then

slot_div = ((holster_time-time_global())/1.5)

else

slot_div = 0

end

end

objectused=objectused+1

weapontimer()

end

end

 

--Holster time. Its set up as additive: A food and a drink taken together will apply instantly, but your gun is holstered for 9 seconds.

function weapontimer()

if (holster_time~=nil) and (time_global()>(holster_time-slot_div)) and level.present() then

objectused=objectused-1

if (objectused==0) then

db.actor:restore_weapon()

objectinuse=0

holster_time=nil

end

end

end

 

--Message for time remaining and math.Round function. Not used.

--[[

function message()

news_manager.send_tip(db.actor, tostring(math.Round((holster_time - time_global())/1000)).."s", nil, nil, 1000)

end

 

--Math.round

function math.Round(num)

local floored = math.floor(num)

if (num - floored) >= 0.5 then

return math.ceil(num)

else

return floored

end

end

]]--

 

 

Стоит, кстати, учесть параметр

 

 

snd = xr_sound.get_safe_sound_object([[interface\inv_food]])

 

 

Отвечает за воспроизводимый звук. Так что если его нет, поймаете вылет. Теперь создаёте скрипт abc_medkit.script:

 

 

-- Shortened Creds: ABC Mod made this, LURK team just cleaned up the indentions.

 

-- Should the use of the same medkit accumulate over the previous one?

multiple_medkit = "yes" --Не пробовал ставить no. Но почти уверен что будет вылет

 

-- How many minutes should take to complete the healing process.

hp_fullhealth_time = 0.125 --Кол-во в течении которого будет юзаться аптечка

 

--0.25

 

-- Health update time in MS. 1000 = 1 Second.

hupd_time = 50 --Апдейт времени.Лучше не трогать

 

-- Time modulation

time_mod=0

 

-- HP Healed. No higher than 1.

hp_med_kit = 0.65 --Параметр отвечающий за восстановление жизней одной аптечкой.Точнее за скорость восстановления

hp_med_army = 0.75

hp_med_sci = 0.80

 

-- Is Army faster than Normal?

army_fast = "yes"

 

-- Is Science faster than Normal?

sci_fast = "yes"

 

-- Is Science faster than Army?

sci_fast_than_army = "yes"

 

-- Should medkit_scientic anti-radiation process be progressive?

sci_antirad = "yes"

 

-- EOF

 

 

local med_kit, med_band, med_army, med_sci, medused, medid, medname

local objdtc = 0

function chk_medlot_object(obj)

if db.actor ~= nil then

local objdt = time_global()

if obj ~= nil and obj ~= "load" then

medname = obj:section()

if medname == "medkit" or medname == "medkit_army" or medname == "medkit_scientic" then

if objdtc == 0 then objdtc = time_global() + 350 end

med_used = "yes"

med_id = obj:id()

end

end

if med_used == "yes" and objdt > objdtc then

objdtc = 0

med_used = "no"

if level.object_by_id(med_id) == nil then

if medname == "medkit" then med_kit = "yes" end

if medname == "medkit_army" then med_army = "yes" end

if medname == "medkit_scientic" then med_sci = "yes" end

time_mod=0

end

end

new_medkit()

end

end

 

local time_mkit, time_army, time_sci, count_mkit, count_army, count_sci

function new_medkit()

if db.actor ~= nil and level.present() then

local cgametimemed = time_global()

local hft = (hp_fullhealth_time * 60000) / hupd_time

--normal

if med_kit == "yes" then

if time_mkit == nil then time_mkit = time_global() + hupd_time end

if cgametimemed > time_mkit then

time_mkit = time_global() + hupd_time

local player_hp = db.actor.health

if player_hp < 1 then

if count_mkit == nil then count_mkit = 0 end

if count_mkit < (hft + 1) then

db.actor.health = (hp_med_kit/(hft + time_mod))

count_mkit = count_mkit + 1

--abort("TimeMod: "..time_mod)

--abort("Health: "..hp_med_kit/(hft + time_mod))

time_mod = math.clamp(time_mod+0.23,0,35)

else

med_kit = nil

time_mkit = nil

count_mkit = nil

end

else

med_kit = nil

time_mkit = nil

count_mkit = nil

end

end

end

--army

if med_army == "yes" then

if time_army == nil then time_army = time_global() + hupd_time end

if cgametimemed > time_army then

time_army = time_global() + hupd_time

local player_hp = db.actor.health

if player_hp < 1 then

if count_army == nil then count_army = 0 end

if count_army < (hft + 1) then

local mamf = 0

if army_fast == "yes" then mamf = (hp_med_army/hft) / 4 end

db.actor.health = (hp_med_army/hft) + mamf

count_army = count_army + 1

time_mod = math.clamp(time_mod+0.23,0,35)

else

med_kit = nil

time_mkit = nil

count_mkit = nil

end

else

med_kit = nil

time_mkit = nil

count_mkit = nil

end

end

end

--science

if med_sci == "yes" then

if time_sci == nil then time_sci = time_global() + hupd_time end

if cgametimemed > time_sci then

time_sci = time_global() + hupd_time

local player_hp = db.actor.health

if player_hp < 1 then

if count_sci == nil then count_sci = 0 end

if count_sci < (hft + 1) then

local mamf = 0

local sfta = 4

if sci_fast_than_army == "yes" then sfta = 2 end

if sci_fast == "yes" then mamf = (hp_med_army/hft) / sfta end

db.actor.health = (hp_med_sci/hft) + mamf

if sci_antirad == "yes" then db.actor.radiation = -(hp_med_sci/hft) end

count_sci = count_sci + 1

time_mod = math.clamp(time_mod+0.23,0,35)

else

med_kit = nil

time_mkit = nil

count_mkit = nil

end

else

med_kit = nil

time_mkit = nil

count_mkit = nil

end

end

end

end

end

 

function math.clamp (value,mini,maxi)

local clamped = value

if clamped < mini then clamped = mini end

if clamped > maxi then clamped = maxi end

return clamped

end

 

 

Теперь самое сложное. Лезем в bind_stalker.scripts. После

 

 

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

 

 

Пишем

 

 

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

 

 

В итоге получается вот так:

 

 

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.use_object, 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.on_item_drop, self.on_item_drop, self)

 

 

Пишем

 

 

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

 

 

В итоге:

 

 

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.use_object, self.use_object, 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)

 

 

Ищем функцию:

 

 

function actor_binder:on_item_drop (obj)

 

 

и после ее завершения пишем:

 

 

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

function actor_binder:use_object(obj)

heal_regen.start(obj)

end

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

 

 

В итоге:

 

 

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

function actor_binder:on_item_drop (obj)

level_tasks.proceed(self.object)

--game_stats.update_drop_item (obj, self.object)

abc_medkit.chk_medlot_object(obj)

abc_sleep.uptabc(obj)

end

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

function actor_binder:use_object(obj)

heal_regen.start(obj)

end

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

 

 

После

 

 

--game_stats.update_drop_item (obj, self.object)

 

 

Пишем

 

 

abc_medkit.chk_medlot_object(obj)

 

 

После

 

 

function actor_binder:update(delta)

 

 

Пишем

 

 

abc_medkit.chk_medlot_object()

heal_regen.weapontimer()

 

 

Затем надо найти звуки и прописать их в директории \sounds\interface\

 

Далее идем в файл config\misc\items.ltx, ищем секции аптечек ([medkit],[medkit_army],[medkit_scientic]) и меняем в них параметр eat_health на 0.0, иначе актер будет лечится дважды (сначала сразу, по стандартному, а потом уже постепенно)

 

Автор статьи: Fireman3000, дополнил Darkscape, а так же спасибо Lurk моду и ABC.

 

  • Не нравится 1
Ссылка на комментарий

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

 

1. Соблюдай правило форума по грамотному оофрмлению своих постов.

2. Обращайся к 'народу' где-нибудь на площади, на форуме же лучше не обращайся к 'толпе' ...

3. Этот топик по конкретным вопросам, а с подобными просьбами лучше во темах-флудилках общаться.

--/Artos

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

Nuclear_xD,

проще взять медленное лечение и подогнать под свои нужды. Slow medicine, кажется называется.

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

Nuclear_xD

У тебя синтаксическая ошибка в скрипте heal_regen

Либо ты где то написал неправильно, либо может поставил\недоставил лишний end

http://dl.dropbox.com/u/23885395/LuaChecker-0.3.rar

Используй эту программу, чтобы найти ошибку в скрипте.

 

botik

Это дело не на одну минуту. Если сам в скриптах ноль, то даже перенести готовое будет проблематично. Как вариант на ЗП есть мод с дин. новостями от Vano_Santuri, подсмотри у него, и пробуй перенести что надо.

Изменено пользователем *Shoker*

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

Shoker

, пишет, что ошибок нет. Хотя я может быть не правильно понял действие проги. но вроде все правильно. В первую строку помещаю bind_stalker.

Во вторую файл выхода с описанием лога. верно? Ошибок не найдено....хотя вылет ловлю.

============

Капрал Хикс. У меня версия игры- 1.0006. А тот который ты посоветовал- 1.0004. Адаптировать не умею...так что мне проще помощи попросить в исправлении, нежели в полном изменении всего.

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

Кто-нибудь может мне объяснить, почему NPC продолжают стрелять, если установлен enemy_callback, который всегда возвращает false? При проверке опасностей в xr_danger тоже возвращается false. Что я делаю не так?

Ссылка на комментарий
Полтергейст, NPC, если они не зомби и не зомбированы подчиняются движковой боевке, а не скриптовой.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Здрасте, у меня вопрос, как заспанить переход? Неважно как, я читал статьи на вики, толку ноль не понел! Прошу помощи! Сталкер ТЧ 1.0004

 

Если для тебя даже от статей с вики-сайтов толку ноль, то неужели ты надеешься что тут тебе все разжуют и разъяснят? Ну ... ну.

Совет: захотелось помоддить - засучивай рукава и начинай грызть гранит "науки", пока хоть какой-то толк не выйдет ... ;-) --/Artos

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

Nuclear_xD,

тебе так или иначе придется учиться всё адаптировать, а не привыкать, чтобы всё сразу было готовое. Тем более, что отличий 1.006 от 1.004 не так уж много.

Daniar299,

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

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

Я могу спанить НПС и т.д. но там что-то не понятно, там идёт какойто бред и не написано какой файл трогать, и там основа для фриплэя написана, так что я не понел! плиз помогите! И ещё один вопрос как прописать диолог не старому НПС а новому? можно пример?

 

Как спавнить переход используя all.spawn, можно увидеть здесь: Переход между уровнями

А на остальные свои вопросы используй поиск, поскольку они начального уровня, да и на той же Wiki есть ответы на них, загляни так же сюда: Уроки по модостроению, так же найдёшь много полезной информации.

P.S. Да, и выбирай соответствующую тему для своих вопросов.

ColR_iT

 

Добавлено через 122 мин.:

Спасибо переход зделал!

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

Nuclear_xD

Файл для вывода можно не делать, всё на экран программы будет выведено. Если пишет что ошибок нет, тогда тут обычно причина в том, что у тебя стоит лишний end в коде, тогда программа начинает тупить. Как вариант удали в скрипте один любой end, и занаво пусти программу, если она ошибку не найдёт, значит точно где то один (а мож и не один) end поставил лишний.

 

Artos

А как переключаться между типами боя? Помнится в ЗП работал с переделанной Bak-ом схемой xr_danger, и на основе колбека на опасность сделал простенький такой стелс. Попытался в ЧН но там столкнулся с проблемой как у Полтергейста, и забил. Как можно заставить непися не реагировать на врага?

Изменено пользователем *Shoker*

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

Ссылка на комментарий
*Shoker* удалил первый попавшийся end. Запустил проверку скрипта. Написал что есть одна ошибка. Вернул end на место - проверил. ошибок нет..... Проблему исправить ой как нужно...
Ссылка на комментарий

Artos,

NPC, если они не зомби и не зомбированы подчиняются движковой боевке, а не скриптовой.

Так я о движковой пишу. Если установить enemy_callback (пример использования есть в xr_combat_ignore), который всегда возвращает false, то движковая схема (stalker_ids.action_combat_planner) должна никого не воспринимать как врагов. Однако NPC продолжают стрелять. В xr_danger тоже сделал, чтобы возвращало false - не помогло.

Ссылка на комментарий
Ребят...помогите. столкнулся с такой проблемой. Вот хочу сделать чтобы еда и аптечки в ТЧ лечили как в ЗП.

Нашел мануал(он в спойлере) там всё подробно описывается. Делал точно так же как там написано. В итоге ловлю вылет с логом:

=============

Expression : fatal error

Function : CScriptEngine::lua_error

File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp

Line : 73

Description : <no expression>

Arguments : LUA error: ...ow of chernobyl\gamedata\scripts\bind_stalker.script:233: attempt to index global 'heal_regen' (a nil value)

=============

и название менял на health_regen. все равно не помогает. подскажите пожалуйста- в чем беда.

 

Столько шума из ничего... у вас лог ругается на синтаксическую ошибку в heal_regen.script. Указания строки лишь говорят, что из bind_stalker-а произошел вызов вашего, который уже с ошибкой.

А вы ошибку ищете, как я понял, в bind_stalker.script. Зачем? ее там нет, иначе лог был бы совсем другой.

 

Зачем столько цитировать? Достаточно передать суть...

ColR_iT

Изменено пользователем ColR_iT

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Напомните как правильно надо удалять аномалии. У меня была схема дин. аномалий, всё работало хорошо. А вот недавно в следствии каких то далёких операций при удалении аномалий через release через некоторое время\после загрузки движковый вылет в ЧН:

 

stack trace:

001B:067C486E xrGame.dll
001B:067C49D9 xrGame.dll
001B:0681EEE1 xrGame.dll

 

+ похоже что то пытается некоторые аномалии прописать в рестрикторы, но я вроде как спецом их никуда не вписываю, так какого же...

 

Единственное что я делаю с аномалиями, это disable\enable_anomaly(), отключаю аномалии, далёкие от игрока.

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

Изменено пользователем *Shoker*

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

Если, например, в аномалии валяется труп монстра/сталкера, то этому объекту прописана аномалия как 'dynamic_in_restrictions'. Если такую "прописанную" аномалию удалить при выходе из игры - при загрузке сэйва движек не найдет 'in_restriction' для трупа ...

Делай вывод: удаляя аномалию следует ее или дизаблить или вычищать из in_restrictions объектов.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Спасибо, завтра попробую :)

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

Ну и если не трудно, можно сказать где лучше всего смотреть пример удаления аномалии из in_restriction, просто с ними ниразу не работал, знаю только как все удалить.

Изменено пользователем *Shoker*

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

Смотри в m_anoms.script из SIMBION'а, там и штатными методами и нет-пакетами ... Можно и в AMK скрипты глянуть, но ... там из-за некорректностей с нет-пакетами "рельсы" могут возникать при чистке рестрикторов. Последние версии читалок/писалок для нет-пакетов (xr_netpk / m_net_pk) уже умеют со скелетом работать.

Удалять же онлайновые аномалии в той же функции что и их отключение - ты опять на грабли наступаешь. Отключаешь клиентский объект - удаляешь серверный. Сам подумай - что может быть ...

Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Отключил абсолютно все удаляемые аномалии задолго до попытки удаления - вылет остался. Сейчас попробую прочитать рестрикторы.

 

А других причин вылетов таких нету случаем?

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

Что мешает отмониторить на чем спотыкается загрузка? Ты вроде как не новичок ...

А причин вылетов - привеликое множество и только "кашпировский" может подсказать что у тебя конкретно.

 

P.S. Читаем:

"После выброса они у меня все разом удаляются (в этот момент они могут быть как отключены, так и нет), и вот потом я сталкиваюсь с таким вылетом."
- и думаем ... Изменено пользователем Artos

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

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

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

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

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

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

Войти

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

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

×
×
  • Создать...