Svoboда 3 Опубликовано 23 Апреля 2009 Поделиться Опубликовано 23 Апреля 2009 Тема для обсуждения скриптов всего и всех в серии игр STALKER. Задавая вопрос (!): 1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего; 2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме); 3. Изучите информацию которая может вам помочь: Stalkerin. Там есть много хороших статей касательно данной темы.Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения. Справочное руководство по языку Lua 5.1https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ruСправочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены. Логика со вступлением и четырьмя частями: ВступлениеЧасть перваяЧасть втораяЧасть третьяЧасть четвертая. Smart_terrain (в простонароде - гулаг)Интересный способ настроики логики для гулаговСкриптовая часть игровой логики 4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос; 5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе; 6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода; 7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины. 8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ. 9. И помните: «Правильно заданный вопрос – половина ответа». Какие вопросы следует задавать, а какие нет... Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу. Вопросы которые будут удалятся, следовательно их задавать не нужно:-- Где находится та или иная функция? Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;-- Как сделать что-то/то-то? С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов? В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос. И последнее: очень рекомендовано к прочтению Правила форума 1 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/
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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/190/#findComment-672595
botik 0 Опубликовано 12 Февраля 2012 Поделиться Опубликовано 12 Февраля 2012 (изменено) народ подскажите плиз как сделать новости там обьявления типо набор в долг или свободу или там погиб сталкер свалка собака там или слышный выстрелы и т.д. как это сделать на чистый сталкер? 1. Соблюдай правило форума по грамотному оофрмлению своих постов. 2. Обращайся к 'народу' где-нибудь на площади, на форуме же лучше не обращайся к 'толпе' ... 3. Этот топик по конкретным вопросам, а с подобными просьбами лучше во темах-флудилках общаться. --/Artos Изменено 12 Февраля 2012 пользователем Artos Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/190/#findComment-672622
Капрал Хикс 567 Опубликовано 12 Февраля 2012 Поделиться Опубликовано 12 Февраля 2012 Nuclear_xD, проще взять медленное лечение и подогнать под свои нужды. Slow medicine, кажется называется. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/190/#findComment-672623
*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, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/190/#findComment-672630
Nuclear_xD 1 Опубликовано 12 Февраля 2012 Поделиться Опубликовано 12 Февраля 2012 (изменено) Shoker , пишет, что ошибок нет. Хотя я может быть не правильно понял действие проги. но вроде все правильно. В первую строку помещаю bind_stalker. Во вторую файл выхода с описанием лога. верно? Ошибок не найдено....хотя вылет ловлю. ============ Капрал Хикс. У меня версия игры- 1.0006. А тот который ты посоветовал- 1.0004. Адаптировать не умею...так что мне проще помощи попросить в исправлении, нежели в полном изменении всего. Изменено 12 Февраля 2012 пользователем Nuclear_xD Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/190/#findComment-672706
Полтергейст 38 Опубликовано 12 Февраля 2012 Поделиться Опубликовано 12 Февраля 2012 Кто-нибудь может мне объяснить, почему NPC продолжают стрелять, если установлен enemy_callback, который всегда возвращает false? При проверке опасностей в xr_danger тоже возвращается false. Что я делаю не так? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/190/#findComment-672708
Artos 99 Опубликовано 12 Февраля 2012 Поделиться Опубликовано 12 Февраля 2012 Полтергейст, NPC, если они не зомби и не зомбированы подчиняются движковой боевке, а не скриптовой. "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/190/#findComment-672722
Daniar299 0 Опубликовано 12 Февраля 2012 Поделиться Опубликовано 12 Февраля 2012 (изменено) Здрасте, у меня вопрос, как заспанить переход? Неважно как, я читал статьи на вики, толку ноль не понел! Прошу помощи! Сталкер ТЧ 1.0004 Если для тебя даже от статей с вики-сайтов толку ноль, то неужели ты надеешься что тут тебе все разжуют и разъяснят? Ну ... ну. Совет: захотелось помоддить - засучивай рукава и начинай грызть гранит "науки", пока хоть какой-то толк не выйдет ... ;-) --/Artos Изменено 12 Февраля 2012 пользователем Artos Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/190/#findComment-672727
Капрал Хикс 567 Опубликовано 12 Февраля 2012 Поделиться Опубликовано 12 Февраля 2012 (изменено) Nuclear_xD, тебе так или иначе придется учиться всё адаптировать, а не привыкать, чтобы всё сразу было готовое. Тем более, что отличий 1.006 от 1.004 не так уж много. Daniar299, надо прочитать туторы ещё раз, и если с all.spawn ты раньше не работал, то за него так с ходу не стоит браться. Изменено 12 Февраля 2012 пользователем Капрал Хикс Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/190/#findComment-672743
Daniar299 0 Опубликовано 12 Февраля 2012 Поделиться Опубликовано 12 Февраля 2012 (изменено) Я могу спанить НПС и т.д. но там что-то не понятно, там идёт какойто бред и не написано какой файл трогать, и там основа для фриплэя написана, так что я не понел! плиз помогите! И ещё один вопрос как прописать диолог не старому НПС а новому? можно пример? Как спавнить переход используя all.spawn, можно увидеть здесь: Переход между уровнями А на остальные свои вопросы используй поиск, поскольку они начального уровня, да и на той же Wiki есть ответы на них, загляни так же сюда: Уроки по модостроению, так же найдёшь много полезной информации. P.S. Да, и выбирай соответствующую тему для своих вопросов. ColR_iT Добавлено через 122 мин.: Спасибо переход зделал! Изменено 12 Февраля 2012 пользователем ColR_iT Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/190/#findComment-672763
*Shoker* 322 Опубликовано 12 Февраля 2012 Поделиться Опубликовано 12 Февраля 2012 (изменено) Nuclear_xD Файл для вывода можно не делать, всё на экран программы будет выведено. Если пишет что ошибок нет, тогда тут обычно причина в том, что у тебя стоит лишний end в коде, тогда программа начинает тупить. Как вариант удали в скрипте один любой end, и занаво пусти программу, если она ошибку не найдёт, значит точно где то один (а мож и не один) end поставил лишний. Artos А как переключаться между типами боя? Помнится в ЗП работал с переделанной Bak-ом схемой xr_danger, и на основе колбека на опасность сделал простенький такой стелс. Попытался в ЧН но там столкнулся с проблемой как у Полтергейста, и забил. Как можно заставить непися не реагировать на врага? Изменено 12 Февраля 2012 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/190/#findComment-672915
Nuclear_xD 1 Опубликовано 13 Февраля 2012 Поделиться Опубликовано 13 Февраля 2012 *Shoker* удалил первый попавшийся end. Запустил проверку скрипта. Написал что есть одна ошибка. Вернул end на место - проверил. ошибок нет..... Проблему исправить ой как нужно... Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/190/#findComment-672983
Полтергейст 38 Опубликовано 13 Февраля 2012 Поделиться Опубликовано 13 Февраля 2012 Artos, NPC, если они не зомби и не зомбированы подчиняются движковой боевке, а не скриптовой. Так я о движковой пишу. Если установить enemy_callback (пример использования есть в xr_combat_ignore), который всегда возвращает false, то движковая схема (stalker_ids.action_combat_planner) должна никого не воспринимать как врагов. Однако NPC продолжают стрелять. В xr_danger тоже сделал, чтобы возвращало false - не помогло. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/190/#findComment-672985
Zander_driver 10 358 Опубликовано 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 / Начинающий игродел на Unreal Engine / Мимокрокодил. Я понял что моя старая подпись что-то нарушает. Удалил все ссылки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/190/#findComment-673005
*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, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/190/#findComment-673466
Artos 99 Опубликовано 14 Февраля 2012 Поделиться Опубликовано 14 Февраля 2012 Если, например, в аномалии валяется труп монстра/сталкера, то этому объекту прописана аномалия как 'dynamic_in_restrictions'. Если такую "прописанную" аномалию удалить при выходе из игры - при загрузке сэйва движек не найдет 'in_restriction' для трупа ... Делай вывод: удаляя аномалию следует ее или дизаблить или вычищать из in_restrictions объектов. "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/190/#findComment-673500
*Shoker* 322 Опубликовано 14 Февраля 2012 Поделиться Опубликовано 14 Февраля 2012 (изменено) Спасибо, завтра попробую А если дисаблить аномалию, нужно ли ждать какое то время, или можно сразу же её удалить в той же функции? Ну и если не трудно, можно сказать где лучше всего смотреть пример удаления аномалии из in_restriction, просто с ними ниразу не работал, знаю только как все удалить. Изменено 14 Февраля 2012 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/190/#findComment-673501
Artos 99 Опубликовано 14 Февраля 2012 Поделиться Опубликовано 14 Февраля 2012 (изменено) Смотри в m_anoms.script из SIMBION'а, там и штатными методами и нет-пакетами ... Можно и в AMK скрипты глянуть, но ... там из-за некорректностей с нет-пакетами "рельсы" могут возникать при чистке рестрикторов. Последние версии читалок/писалок для нет-пакетов (xr_netpk / m_net_pk) уже умеют со скелетом работать. Удалять же онлайновые аномалии в той же функции что и их отключение - ты опять на грабли наступаешь. Отключаешь клиентский объект - удаляешь серверный. Сам подумай - что может быть ... Изменено 15 Февраля 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/190/#findComment-673502
*Shoker* 322 Опубликовано 15 Февраля 2012 Поделиться Опубликовано 15 Февраля 2012 Отключил абсолютно все удаляемые аномалии задолго до попытки удаления - вылет остался. Сейчас попробую прочитать рестрикторы. А других причин вылетов таких нету случаем? Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/190/#findComment-673503
Artos 99 Опубликовано 15 Февраля 2012 Поделиться Опубликовано 15 Февраля 2012 (изменено) Что мешает отмониторить на чем спотыкается загрузка? Ты вроде как не новичок ... А причин вылетов - привеликое множество и только "кашпировский" может подсказать что у тебя конкретно. P.S. Читаем: "После выброса они у меня все разом удаляются (в этот момент они могут быть как отключены, так и нет), и вот потом я сталкиваюсь с таким вылетом." - и думаем ... Изменено 15 Февраля 2012 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/190/#findComment-673504
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти