Nuclear_xD 1 Опубликовано 12 Февраля 2012 Поделиться Опубликовано 12 Февраля 2012 Ребят...помогите. столкнулся с такой проблемой. Вот хочу сделать чтобы еда и аптечки в ТЧ лечили как в ЗП. Нашел мануал(он в спойлере) там всё подробно описывается. Делал точно так же как там написано. В итоге ловлю вылет с логом: ============= 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 Ссылка на комментарий
botik 0 Опубликовано 12 Февраля 2012 Поделиться Опубликовано 12 Февраля 2012 (изменено) народ подскажите плиз как сделать новости там обьявления типо набор в долг или свободу или там погиб сталкер свалка собака там или слышный выстрелы и т.д. как это сделать на чистый сталкер? 1. Соблюдай правило форума по грамотному оофрмлению своих постов. 2. Обращайся к 'народу' где-нибудь на площади, на форуме же лучше не обращайся к 'толпе' ... 3. Этот топик по конкретным вопросам, а с подобными просьбами лучше во темах-флудилках общаться. --/Artos Изменено 12 Февраля 2012 пользователем Artos Ссылка на комментарий
Капрал Хикс 517 Опубликовано 12 Февраля 2012 Поделиться Опубликовано 12 Февраля 2012 Nuclear_xD, проще взять медленное лечение и подогнать под свои нужды. Slow medicine, кажется называется. Ссылка на комментарий
*Shoker* 322 Опубликовано 12 Февраля 2012 Поделиться Опубликовано 12 Февраля 2012 (изменено) Nuclear_xD У тебя синтаксическая ошибка в скрипте heal_regen Либо ты где то написал неправильно, либо может поставил\недоставил лишний end http://dl.dropbox.com/u/23885395/LuaChecker-0.3.rar Используй эту программу, чтобы найти ошибку в скрипте. botik Это дело не на одну минуту. Если сам в скриптах ноль, то даже перенести готовое будет проблематично. Как вариант на ЗП есть мод с дин. новостями от Vano_Santuri, подсмотри у него, и пробуй перенести что надо. Изменено 12 Февраля 2012 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Nuclear_xD 1 Опубликовано 12 Февраля 2012 Поделиться Опубликовано 12 Февраля 2012 (изменено) Shoker , пишет, что ошибок нет. Хотя я может быть не правильно понял действие проги. но вроде все правильно. В первую строку помещаю bind_stalker. Во вторую файл выхода с описанием лога. верно? Ошибок не найдено....хотя вылет ловлю. ============ Капрал Хикс. У меня версия игры- 1.0006. А тот который ты посоветовал- 1.0004. Адаптировать не умею...так что мне проще помощи попросить в исправлении, нежели в полном изменении всего. Изменено 12 Февраля 2012 пользователем Nuclear_xD Ссылка на комментарий
Полтергейст 37 Опубликовано 12 Февраля 2012 Поделиться Опубликовано 12 Февраля 2012 Кто-нибудь может мне объяснить, почему NPC продолжают стрелять, если установлен enemy_callback, который всегда возвращает false? При проверке опасностей в xr_danger тоже возвращается false. Что я делаю не так? Ссылка на комментарий
Artos 99 Опубликовано 12 Февраля 2012 Поделиться Опубликовано 12 Февраля 2012 Полтергейст, NPC, если они не зомби и не зомбированы подчиняются движковой боевке, а не скриптовой. "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Daniar299 0 Опубликовано 12 Февраля 2012 Поделиться Опубликовано 12 Февраля 2012 (изменено) Здрасте, у меня вопрос, как заспанить переход? Неважно как, я читал статьи на вики, толку ноль не понел! Прошу помощи! Сталкер ТЧ 1.0004 Если для тебя даже от статей с вики-сайтов толку ноль, то неужели ты надеешься что тут тебе все разжуют и разъяснят? Ну ... ну. Совет: захотелось помоддить - засучивай рукава и начинай грызть гранит "науки", пока хоть какой-то толк не выйдет ... ;-) --/Artos Изменено 12 Февраля 2012 пользователем Artos Ссылка на комментарий
Капрал Хикс 517 Опубликовано 12 Февраля 2012 Поделиться Опубликовано 12 Февраля 2012 (изменено) Nuclear_xD, тебе так или иначе придется учиться всё адаптировать, а не привыкать, чтобы всё сразу было готовое. Тем более, что отличий 1.006 от 1.004 не так уж много. Daniar299, надо прочитать туторы ещё раз, и если с all.spawn ты раньше не работал, то за него так с ходу не стоит браться. Изменено 12 Февраля 2012 пользователем Капрал Хикс Ссылка на комментарий
Daniar299 0 Опубликовано 12 Февраля 2012 Поделиться Опубликовано 12 Февраля 2012 (изменено) Я могу спанить НПС и т.д. но там что-то не понятно, там идёт какойто бред и не написано какой файл трогать, и там основа для фриплэя написана, так что я не понел! плиз помогите! И ещё один вопрос как прописать диолог не старому НПС а новому? можно пример? Как спавнить переход используя all.spawn, можно увидеть здесь: Переход между уровнями А на остальные свои вопросы используй поиск, поскольку они начального уровня, да и на той же Wiki есть ответы на них, загляни так же сюда: Уроки по модостроению, так же найдёшь много полезной информации. P.S. Да, и выбирай соответствующую тему для своих вопросов. ColR_iT Добавлено через 122 мин.: Спасибо переход зделал! Изменено 12 Февраля 2012 пользователем ColR_iT Ссылка на комментарий
*Shoker* 322 Опубликовано 12 Февраля 2012 Поделиться Опубликовано 12 Февраля 2012 (изменено) Nuclear_xD Файл для вывода можно не делать, всё на экран программы будет выведено. Если пишет что ошибок нет, тогда тут обычно причина в том, что у тебя стоит лишний end в коде, тогда программа начинает тупить. Как вариант удали в скрипте один любой end, и занаво пусти программу, если она ошибку не найдёт, значит точно где то один (а мож и не один) end поставил лишний. Artos А как переключаться между типами боя? Помнится в ЗП работал с переделанной Bak-ом схемой xr_danger, и на основе колбека на опасность сделал простенький такой стелс. Попытался в ЧН но там столкнулся с проблемой как у Полтергейста, и забил. Как можно заставить непися не реагировать на врага? Изменено 12 Февраля 2012 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Nuclear_xD 1 Опубликовано 13 Февраля 2012 Поделиться Опубликовано 13 Февраля 2012 *Shoker* удалил первый попавшийся end. Запустил проверку скрипта. Написал что есть одна ошибка. Вернул end на место - проверил. ошибок нет..... Проблему исправить ой как нужно... Ссылка на комментарий
Полтергейст 37 Опубликовано 13 Февраля 2012 Поделиться Опубликовано 13 Февраля 2012 Artos, NPC, если они не зомби и не зомбированы подчиняются движковой боевке, а не скриптовой. Так я о движковой пишу. Если установить enemy_callback (пример использования есть в xr_combat_ignore), который всегда возвращает false, то движковая схема (stalker_ids.action_combat_planner) должна никого не воспринимать как врагов. Однако NPC продолжают стрелять. В xr_danger тоже сделал, чтобы возвращало false - не помогло. Ссылка на комментарий
Zander_driver 10 335 Опубликовано 13 Февраля 2012 Поделиться Опубликовано 13 Февраля 2012 (изменено) Ребят...помогите. столкнулся с такой проблемой. Вот хочу сделать чтобы еда и аптечки в ТЧ лечили как в ЗП. Нашел мануал(он в спойлере) там всё подробно описывается. Делал точно так же как там написано. В итоге ловлю вылет с логом: ============= 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 Изменено 13 Февраля 2012 пользователем 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. Ссылка на комментарий
*Shoker* 322 Опубликовано 14 Февраля 2012 Поделиться Опубликовано 14 Февраля 2012 (изменено) Напомните как правильно надо удалять аномалии. У меня была схема дин. аномалий, всё работало хорошо. А вот недавно в следствии каких то далёких операций при удалении аномалий через release через некоторое время\после загрузки движковый вылет в ЧН: stack trace: 001B:067C486E xrGame.dll 001B:067C49D9 xrGame.dll 001B:0681EEE1 xrGame.dll + похоже что то пытается некоторые аномалии прописать в рестрикторы, но я вроде как спецом их никуда не вписываю, так какого же... Единственное что я делаю с аномалиями, это disable\enable_anomaly(), отключаю аномалии, далёкие от игрока. После выброса они у меня все разом удаляются (в этот момент они могут быть как отключены, так и нет), и вот потом я сталкиваюсь с таким вылетом. Изменено 14 Февраля 2012 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Artos 99 Опубликовано 14 Февраля 2012 Поделиться Опубликовано 14 Февраля 2012 Если, например, в аномалии валяется труп монстра/сталкера, то этому объекту прописана аномалия как 'dynamic_in_restrictions'. Если такую "прописанную" аномалию удалить при выходе из игры - при загрузке сэйва движек не найдет 'in_restriction' для трупа ... Делай вывод: удаляя аномалию следует ее или дизаблить или вычищать из in_restrictions объектов. "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
*Shoker* 322 Опубликовано 14 Февраля 2012 Поделиться Опубликовано 14 Февраля 2012 (изменено) Спасибо, завтра попробую А если дисаблить аномалию, нужно ли ждать какое то время, или можно сразу же её удалить в той же функции? Ну и если не трудно, можно сказать где лучше всего смотреть пример удаления аномалии из in_restriction, просто с ними ниразу не работал, знаю только как все удалить. Изменено 14 Февраля 2012 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Artos 99 Опубликовано 14 Февраля 2012 Поделиться Опубликовано 14 Февраля 2012 (изменено) Смотри в m_anoms.script из SIMBION'а, там и штатными методами и нет-пакетами ... Можно и в AMK скрипты глянуть, но ... там из-за некорректностей с нет-пакетами "рельсы" могут возникать при чистке рестрикторов. Последние версии читалок/писалок для нет-пакетов (xr_netpk / m_net_pk) уже умеют со скелетом работать. Удалять же онлайновые аномалии в той же функции что и их отключение - ты опять на грабли наступаешь. Отключаешь клиентский объект - удаляешь серверный. Сам подумай - что может быть ... Изменено 15 Февраля 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
*Shoker* 322 Опубликовано 15 Февраля 2012 Поделиться Опубликовано 15 Февраля 2012 Отключил абсолютно все удаляемые аномалии задолго до попытки удаления - вылет остался. Сейчас попробую прочитать рестрикторы. А других причин вылетов таких нету случаем? Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Artos 99 Опубликовано 15 Февраля 2012 Поделиться Опубликовано 15 Февраля 2012 (изменено) Что мешает отмониторить на чем спотыкается загрузка? Ты вроде как не новичок ... А причин вылетов - привеликое множество и только "кашпировский" может подсказать что у тебя конкретно. P.S. Читаем: "После выброса они у меня все разом удаляются (в этот момент они могут быть как отключены, так и нет), и вот потом я сталкиваюсь с таким вылетом." - и думаем ... Изменено 15 Февраля 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти