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 Ссылка на комментарий
Fllfll 8 Опубликовано 19 Февраля Поделиться Опубликовано 19 Февраля @phalcor с 2.1, в 2.2, видимо, также Скрытый текст IReader* r_open(CLocatorAPI* self_obj,LPCSTR fileName) { string_path S1; FS.update_path (S1,"$game_settings$",fileName); return self_obj->r_open(S1); } 1 1 1 Ссылка на комментарий
I am Dead 918 Опубликовано 21 Февраля Поделиться Опубликовано 21 Февраля 13.02.2025 в 06:54, RayTwitty сказал: pstor актора Какой к черту pstor? В движке 1000 лет скриптовое хранилище. Добавлено Купер, 22 Февраля Где? В очередном ЩПЫКе? Уточняйте хотя бы, что местечковое. Ссылка на комментарий
den_z 36 Опубликовано в воскресенье в 13:34 Поделиться Опубликовано в воскресенье в 13:34 Доброго времени суток... Прошу помощи в правке scripts в файле dmx_mod (в скриптах не силен и "посылать "изучать" LUA просьба - не НАДО!"). Игра СТАЛКЕР ТЧ Народная Солянка АМК+ДМХ мод от 2010 года (от Архары, родная) с правками и дополнениями... Генератор огнесмеси - задумка и схема для огнемета просто "огонь"..., но хотелось бы внести правки - "доработать". Файл находится по пути - gamedata - scripts - dmx_mod: Скрытый текст -- Генератор огнесмеси -- Author - Charsi function use_item_ammo_flame_transfer(obj) if obj:section() == "item_ammo_flame_transfer" then amk.spawn_item_in_inv("item_ammo_flame_transfer") play_sound([[device\pda\pda_sos]]) local flame=db.actor:object("wpn_flame") if flame then local ballon=db.actor:object("amk_ballon") local kanistra=db.actor:object("amk_kanistra") if ballon and kanistra then local ammo_elapsed = flame:get_ammo_in_magazine() + 150 if ammo_elapsed > 1670 then -- кабздец огнемету amk.remove_item(flame) amk.remove_item(ognemet) local pos=db.actor:position():add(db.actor:direction():mul(1)) -- спавним детали local lv=db.actor:level_vertex_id() local gv=db.actor:game_vertex_id() alife():create("gorelka",pos,lv,gv) alife():create("manometr",pos,lv,gv) alife():create("trubka",pos,lv,gv) alife():create("flamethrower_bad",pos,lv,gv) db.actor.health = -0.3 -- понижаем хп play_sound([[weapons\t_f1_explosion]]) -- звук взрыва level.add_cam_effector("camera_effects\\fusker.anm",959,false,"") -- камэффектор удара в лицо else if ammo_elapsed > 1500 then amk.send_tip("Опасно! Критическое давление!", "Генератор огнесмеси", nil, 10, "inv_icon") end amk.remove_item(ballon) amk.remove_item(kanistra) flame:set_ammo_elapsed(ammo_elapsed) end else amk.send_tip("Невозможно сгенерировать огнесмесь без наличия коллоидного газа или бензина!", "Генератор огнесмеси", nil, 10, "inv_icon") end else amk.send_tip("Нет огнемета, чтобы его заправить!", "Генератор огнесмеси", nil, 10, "inv_icon") end end end В строке local flame=db.actor:object("wpn_flame") указан тип оружия - хотелось бы добавить ещё ("wpn_rg10_ognemet") или подобное... Я пытался добавлять по разному - не получается: то "схема" не видит "wpn_rg10_ognemet" когда ГГ берет его в руки, то заправляет только "wpn_flame" первым, даже если он лежит в рюкзаке, а "wpn_rg10_ognemet" в этот момент в руках у ГГ... Нужно, чтобы при наличии двух ("wpn_") в рюкзаке ГГ, генератор огнесмеси заправлял их только тогда, когда ГГ брал в руки ("wpn_")... поочередно. И ещё, можно ли реализовать схему: чтобы "-- кабздец огнемету" происходил у разных ("wpn_") при разном давлении... типа: "if ammo_elapsed > 1670 then -- кабздец огнемету" для ("wpn_flame"), а для следующего типа ("wpn_rg10_ognemet") был например: " if ammo_elapsed > 670 then -- кабздец огнемету". Можно ли это все реализовать в этой схеме Генератора Огнесмеси??? Заранее спасибо, если кто из Вас откликнется... (Народная Соль такая "непредсказуемая" - ЕЁ и так и сяк, а она всё "терпит"...) Ссылка на комментарий
Norman Eisenherz 330 Опубликовано в воскресенье в 14:55 Поделиться Опубликовано в воскресенье в 14:55 По умолчанию скрипт рассчитан на наличие одного инвентарного предмета с заданной секцией без проверки "в руках" или "в слоте". В первом приближении можно поправить так: -- подходящее оружие local feuer = { wpn_flame = true, wpn_rg10_ognemet = true, другие_секции, } function use_item_ammo_flame_transfer(obj) … local flame=db.actor:object("wpn_flame") item_in_slot(2) if flame and feuer[ flame:section() ] then 1 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
den_z 36 Опубликовано в воскресенье в 17:26 Поделиться Опубликовано в воскресенье в 17:26 @Norman Eisenherz Я всё вставил в script - dmx_mod. Получилось так: Скрытый текст -- Генератор огнесмеси -- Author - Charsi local feuer = { wpn_flame = true, wpn_rg10_ognemet = true,} function use_item_ammo_flame_transfer(obj) if obj:section() == "item_ammo_flame_transfer" then amk.spawn_item_in_inv("item_ammo_flame_transfer") play_sound([[device\pda\pda_sos]]) local flame=db.actor:item_in_slot(2) if flame and feuer[ flame:section() ] then local ballon=db.actor:object("amk_ballon") local kanistra=db.actor:object("amk_kanistra") if ballon and kanistra then local ammo_elapsed = flame:get_ammo_in_magazine() + 150 if ammo_elapsed > 1670 then -- кабздец огнемету amk.remove_item(flame) local pos=db.actor:position():add(db.actor:direction():mul(1)) -- спавним детали local lv=db.actor:level_vertex_id() local gv=db.actor:game_vertex_id() alife():create("gorelka",pos,lv,gv) alife():create("manometr",pos,lv,gv) alife():create("trubka",pos,lv,gv) alife():create("flamethrower_bad",pos,lv,gv) db.actor.health = -0.3 -- понижаем хп play_sound([[weapons\t_f1_explosion]]) -- звук взрыва level.add_cam_effector("camera_effects\\fusker.anm",959,false,"") -- камэффектор удара в лицо else if ammo_elapsed >= 1500 then amk.send_tip("Опасно! Критическое давление!", "Генератор огнесмеси", nil, 10, "inv_icon") end amk.remove_item(ballon) amk.remove_item(kanistra) flame:set_ammo_elapsed(ammo_elapsed) end else amk.send_tip("Невозможно сгенерировать огнесмесь без наличия коллоидного газа или бензина!", "Генератор огнесмеси", nil, 10, "inv_icon") end else amk.send_tip("Нет огнемета, чтобы его заправить!", "Генератор огнесмеси", nil, 10, "inv_icon") end end end -- Генератор огнесмеси заработал... Единственное, осталось изменить "-- кабздец огнемету" - чтобы высокое давление соответствовало каждому типу ( wpn_) :" if ammo_elapsed > 1670 then -- кабздец огнемету" соотносилось к "wpn_flame" или "if ammo_elapsed > 670 then -- кабздец огнемету" к "wpn_rg10_ognemet" - после оружие разрушалось... По поводу разрушения проверил - разрушаются оба ствола... Осталось прописать давление "-- кабздец огнемету" для каждого ствола. Как сделать? Ссылка на комментарий
Norman Eisenherz 330 Опубликовано в воскресенье в 20:25 Поделиться Опубликовано в воскресенье в 20:25 Тогда так: local feuer = { wpn_flame = 1670, wpn_rg10_ognemet = 670,} … function use_item_ammo_flame_transfer(obj) … if ammo_elapsed > feuer[ flame:section() ] then Вторую проверку оформить аналогично. Можно взять макс. значение -150 или еще как-то. 1 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
den_z 36 Опубликовано в понедельник в 06:47 Поделиться Опубликовано в понедельник в 06:47 Norman Eisenherz Я вставил новые строки в script - dmx_mod -- Генератор огнесмеси, получилось так: Скрытый текст -- Генератор огнесмеси -- Author - Charsi local feuer = { wpn_flame = 1670, wpn_rg10_ognemet = 670, wpn_flame2 = 4670,} function use_item_ammo_flame_transfer(obj) if obj:section() == "item_ammo_flame_transfer" then amk.spawn_item_in_inv("item_ammo_flame_transfer") play_sound([[device\pda\pda_sos]]) local flame=db.actor:item_in_slot(2) if flame and feuer[flame:section()] then local ballon=db.actor:object("amk_ballon") local kanistra=db.actor:object("amk_kanistra") if ballon and kanistra then local ammo_elapsed = flame:get_ammo_in_magazine() + 150 if ammo_elapsed > feuer[flame:section()] then -- кабздец огнемету amk.remove_item(flame) local pos=db.actor:position():add(db.actor:direction():mul(1)) -- спавним детали local lv=db.actor:level_vertex_id() local gv=db.actor:game_vertex_id() alife():create("gorelka",pos,lv,gv) alife():create("manometr",pos,lv,gv) alife():create("trubka",pos,lv,gv) alife():create("flamethrower_bad",pos,lv,gv) alife():create("flamethrower_bad2",pos,lv,gv) alife():create("ammo_balon_rg10",pos,lv,gv) db.actor.health = -0.3 -- понижаем хп play_sound([[weapons\t_f1_explosion]]) -- звук взрыва level.add_cam_effector("camera_effects\\fusker.anm",959,false,"") -- камэффектор удара в лицо else if ammo_elapsed >= 1500 then amk.send_tip("Опасно! Критическое давление!", "Генератор огнесмеси", nil, 10, "inv_icon") end amk.remove_item(ballon) amk.remove_item(kanistra) flame:set_ammo_elapsed(ammo_elapsed) end else amk.send_tip("Невозможно сгенерировать огнесмесь без наличия коллоидного газа или бензина!", "Генератор огнесмеси", nil, 10, "inv_icon") end else amk.send_tip("Нет огнемета, чтобы его заправить!", "Генератор огнесмеси", nil, 10, "inv_icon") end end end Генератор Огнесмеси заработал по схеме: "wpn_flame = 1670 -- кабздец огнемету" "wpn_rg10_ognemet = 670 -- кабздец огнемету" "wpn_flame2 = 4670 -- кабздец огнемету" При зарядке до "предела" происходит ИМЕННО "-- кабздец огнемету"... с его разрушением, по достижении определённого давления. Единственное "НО", при первой замене в строке: local flame=db.actor:object("wpn_flame") на local flame=db.actor:item_in_slot(2) с заменой db.actor:object на db.actor:item - при взрыве огнемета перестал "появляться" "flamethrower_bad", а др. запчасти манометр, трубка и горелка с баллоном "вываливаются" из рюкзака ГГ и всё "видно". Вариант др. Генератор Огнесмеси-2 для заправки "бочкой" - "explosive_barrel" Скрытый текст -- Генератор огнесмеси-2 -- Author - Народная Солянка local feuer = { wpn_flame = 1670, wpn_flame2 = 4670,} function use_item_ammo_flame_transfer2(obj) if obj:section() == "item_ammo_flame_transfer2" then amk.spawn_item_in_inv("item_ammo_flame_transfer2") play_sound([[device\pda\pda_sos]]) local flame=db.actor:item_in_slot(2) if flame and feuer[flame:section()] then local bochka_fuel=db.actor:object("explosive_barrel") if bochka_fuel then local ammo_elapsed = flame:get_ammo_in_magazine() + 1500 if ammo_elapsed > feuer[flame:section()] then -- кабздец огнемету amk.remove_item(flame) local pos=db.actor:position():add(db.actor:direction():mul(1)) -- спавним детали local lv=db.actor:level_vertex_id() local gv=db.actor:game_vertex_id() alife():create("gorelka",pos,lv,gv) alife():create("manometr",pos,lv,gv) alife():create("trubka",pos,lv,gv) alife():create("trubka",pos,lv,gv) alife():create("flamethrower_bad",pos,lv,gv) alife():create("flamethrower_bad2",pos,lv,gv) alife():create("ammo_balon_rg10",pos,lv,gv) alife():create("ammo_balon_rg10",pos,lv,gv) db.actor.health = -0.4 -- понижаем хп play_sound([[weapons\t_f1_explosion]]) -- звук взрыва level.add_cam_effector("camera_effects\\fusker.anm",959,false,"") -- камэффектор удара в лицо else if ammo_elapsed >= 4500 then amk.send_tip("Опасно! Критическое давление!", "Генератор огнесмеси-2", nil, 10, "inv_icon") end amk.remove_item(bochka_fuel) flame:set_ammo_elapsed(ammo_elapsed) end else amk.send_tip("Невозможно сгенерировать огнесмесь без наличия бензина!", "Генератор огнесмеси-2", nil, 10, "inv_icon") end else amk.send_tip("Нет огнемета, чтобы его заправить!", "Генератор огнесмеси", nil, 10, "inv_icon") end end end Во втором варианте - хотелось бы дополнить "разный" вид топлива для зарядки. В строке local bochka_fuel=db.actor:object("explosive_barrel") добавить "explosive_barrel_low" или ещё что-то... Ссылка на комментарий
Norman Eisenherz 330 Опубликовано в понедельник в 17:00 Поделиться Опубликовано в понедельник в 17:00 По поводу спавна запчастей не понял вопроса: детали "flamethrower_bad" в списке указаны, и спавн всех деталей что по-старому, что по-новому выполняется именно на пол. Для спавна в инвентарь надо указать доп. аргумент id, то есть (…, gv, npc_или_ящик:id()). Для спавна именно в инвентарь ГГ можно забить всё нулями: ("sect", vector(), 0, 0, 0). Расширение списка канистр: если годится любой объект без привязки к типу огнемета, то можно оформить через дополнительный обработчик, как показано ниже. Spoiler (+) local fuel = { sect1 = true, sect2 = true, … } function get_fuel() for i = 0, db.actor:object_count() -1 do -- можно также через iterate_inventory или inventory_for_each local obj = db.actor:object(i) if fuel[ obj:section() ] then return obj end end end … function use_item_ammo_flame_transfer2(obj) … (–) local bochka_fuel=db.actor:object("explosive_barrel") (+) local bochka_fuel=get_fuel() 1 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
den_z 36 Опубликовано во вторник в 06:06 Поделиться Опубликовано во вторник в 06:06 @Norman Eisenherz, доброго дня... Я по поводу "выпадение запчастей на пол..." - из списка указанного в script - генератор огнесмеси - Скрытый текст local pos=db.actor:position():add(db.actor:direction():mul(1)) -- спавним детали local lv=db.actor:level_vertex_id() local gv=db.actor:game_vertex_id() alife():create("gorelka",pos,lv,gv) alife():create("manometr",pos,lv,gv) alife():create("trubka",pos,lv,gv) alife():create("flamethrower_bad",pos,lv,gv) alife():create("flamethrower_bad2",pos,lv,gv) alife():create("ammo_balon_rg10",pos,lv,gv) db.actor.health = -0.3 -- понижаем хп "вываливаются на пол" всё, кроме "flamethrower_bad" - его нет. Если "схему" работы "генератора огнесмеси" вернуть к "оригиналу", то при взрыве огнемета "wpn_flame" или "wpn_flame2" на пол "вываливались" все запчасти из списка... вместе с "убитым" "flamethrower_bad". После замены в script в строке: local flame=db.actor:object("wpn_flame") db.actor:object на db.actor:item ( получилось: local flame=db.actor:item_in_slot(2) ) то "запчасти на пол" вываливаются без "flamethrower_bad" - в чём причина? Norman Eisenherz, по поводу расширения списка "бочек и канистр". Я не совсем понял, а может совсем не понял - установил часть написанного в секцию scriptа, получилось так: Скрытый текст -- Генератор огнесмеси-2 -- Author - Народ (+) local fuel = {explosive_barrel = true, explosive_barrel_low = true,} function get_fuel() for i = 0, db.actor:object_count() -1 do -- можно также через iterate_inventory или inventory_for_each local obj = db.actor:object(i) if fuel[obj:section()] then return obj end end end local feuer = { wpn_flame = 1670, wpn_flame2 = 4670,} function use_item_ammo_flame_transfer2(obj) if obj:section() == "item_ammo_flame_transfer2" then amk.spawn_item_in_inv("item_ammo_flame_transfer2") play_sound([[device\pda\pda_sos]]) local flame=db.actor:item_in_slot(2) if flame and feuer[flame:section()] then (+) local bochka_fuel=get_fuel() if bochka_fuel then local ammo_elapsed = flame:get_ammo_in_magazine() + 1500 if ammo_elapsed > feuer[flame:section()] then -- кабздец огнемету amk.remove_item(flame) local pos=db.actor:position():add(db.actor:direction():mul(1)) -- спавним детали local lv=db.actor:level_vertex_id() local gv=db.actor:game_vertex_id() alife():create("gorelka",pos,lv,gv) alife():create("manometr",pos,lv,gv) alife():create("trubka",pos,lv,gv) alife():create("trubka",pos,lv,gv) alife():create("flamethrower_bad",pos,lv,gv) alife():create("flamethrower_bad2",pos,lv,gv) alife():create("ammo_balon_rg10",pos,lv,gv) alife():create("ammo_balon_rg10",pos,lv,gv) db.actor.health = -0.4 -- понижаем хп play_sound([[weapons\t_f1_explosion]]) -- звук взрыва level.add_cam_effector("camera_effects\\fusker.anm",959,false,"") -- камэффектор удара в лицо else local feuer = {wpn_flame = 1500, wpn_flame2 = 4500,} if ammo_elapsed >= feuer[flame:section()] then amk.send_tip("Опасно! Критическое давление!", "Генератор огнесмеси-2", nil, 10, "inv_icon") end amk.remove_item(bochka_fuel) flame:set_ammo_elapsed(ammo_elapsed) end else amk.send_tip("Невозможно сгенерировать огнесмесь без наличия бензина!", "Генератор огнесмеси-2", nil, 10, "inv_icon") end else amk.send_tip("Нет огнемета, чтобы его заправить!", "Генератор огнесмеси", nil, 10, "inv_icon") end end end В строке - local fuel = { sect1 = true, sect2 = true, … } заменил на - local fuel = {explosive_barrel = true, explosive_barrel_low = true,} Игра не запускается, вылетает с логом и "ругается" на dmx_mod естественно... (уже не первый раз - кода что-то не так правишь в scripte). Если, можно, то обьясните как вставить...? Ссылка на комментарий
Balavnik 143 Опубликовано во вторник в 13:09 Поделиться Опубликовано во вторник в 13:09 7 часов назад, den_z сказал: Игра не запускается, вылетает с логом и "ругается" на dmx_mod естественно... (уже не первый раз - кода что-то не так правишь в scripte). Отправь свой лог. А где зима? Ссылка на комментарий
ted.80 378 Опубликовано во вторник в 13:18 Поделиться Опубликовано во вторник в 13:18 (изменено) 7 часов назад, den_z сказал: В строке - local fuel = { sect1 = true, sect2 = true, … } заменил на - local fuel = {explosive_barrel = true, explosive_barrel_low = true-->,<--} Запятую в конце списка убери, объекты в списке (массиве) разделяются запятыми, но в конце списка (массива) ай-яй-яй. 7 часов назад, den_z сказал: (+) Вот это тоже удали. 7 часов назад, den_z сказал: local feuer = { wpn_flame = 1670, wpn_flame2 = 4670,} И тут запятая. 7 часов назад, den_z сказал: local feuer = {wpn_flame = 1500, wpn_flame2 = 4500,} Здесь тоже. Изменено во вторник в 13:18 пользователем ted.80 1 Личный АРХИВ по S.T.A.L.K.E.R Ссылка на комментарий
den_z 36 Опубликовано во вторник в 14:23 Поделиться Опубликовано во вторник в 14:23 (изменено) Balavnik и ted.80 - спасибо, что откликнулись... Запятые я убрал в строках scripta - dmx_mod -- Генератор огнесмеси, теперь это так: local feuer = { wpn_flame = 1670, wpn_flame2 = 4670} и local feuer = {wpn_flame = 1500, wpn_flame2 = 4500} - просто Игра стала быстрее "грузится"... У меня вопрос по правке некоторых строк в scripte "-- Генератор огнесмеси". Есть файл dmx_mod, в нем часть скрипта под названием "-- Генератор огнесмеси" + Я добавил "-- Генератор огнесмеси-2" - получилось с правками от Norman Eisenherz, схема рабочая - В первом случае, "Генератор огнесмеси" теперь заряжает три разных типа оружия { wpn_flame, wpn_rg10_ognemet, wpn_flame2}. Во втором - { wpn_flame, wpn_flame2}. Получилось сделать, чтобы каждому типу оружия своё давление, до полной зарядки и его взрыв "-- кабздец огнемету". Единственное, при взрыве огнемёта "wpn_flame" и "wpn_flame2", из выпадающих "запчастей на пол" не выпадает "flamethrower_bad". До замены в "оригинальном" scripte в строке: local flame=db.actor:object("wpn_flame") на правку - получилось: local flame=db.actor:item_in_slot(2) ) то "запчасти на пол" вываливаются почти все, но без "flamethrower_bad" - в чём причина? До правки - всё выпадало, в чём причина??? Вот две части правленые: Скрытый текст -- Генератор огнесмеси -- Author - Charsi local feuer = { wpn_flame = 1670, wpn_rg10_ognemet = 670, wpn_flame2 = 4670} function use_item_ammo_flame_transfer(obj) if obj:section() == "item_ammo_flame_transfer" then amk.spawn_item_in_inv("item_ammo_flame_transfer") play_sound([[device\pda\pda_sos]]) local flame=db.actor:item_in_slot(2) if flame and feuer[flame:section()] then local ballon=db.actor:object("amk_ballon") local kanistra=db.actor:object("amk_kanistra") if ballon and kanistra then local ammo_elapsed = flame:get_ammo_in_magazine() + 150 if ammo_elapsed > feuer[flame:section()] then -- кабздец огнемету amk.remove_item(flame) local pos=db.actor:position():add(db.actor:direction():mul(1)) -- спавним детали local lv=db.actor:level_vertex_id() local gv=db.actor:game_vertex_id() alife():create("gorelka",pos,lv,gv) alife():create("manometr",pos,lv,gv) alife():create("trubka",pos,lv,gv) alife():create("flamethrower_bad",pos,lv,gv) alife():create("flamethrower_bad2",pos,lv,gv) alife():create("ammo_balon_rg10",pos,lv,gv) db.actor.health = -0.3 -- понижаем хп play_sound([[weapons\t_f1_explosion]]) -- звук взрыва level.add_cam_effector("camera_effects\\fusker.anm",959,false,"") -- камэффектор удара в лицо else local feuer = {wpn_flame = 1500, wpn_rg10_ognemet = 600, wpn_flame2 = 4500} if ammo_elapsed >= feuer[flame:section()] then amk.send_tip("Опасно! Критическое давление!", "Генератор огнесмеси", nil, 10, "inv_icon") end amk.remove_item(ballon) amk.remove_item(kanistra) flame:set_ammo_elapsed(ammo_elapsed) end else amk.send_tip("Невозможно сгенерировать огнесмесь без наличия коллоидного газа или бензина!", "Генератор огнесмеси", nil, 10, "inv_icon") end else amk.send_tip("Нет огнемета, чтобы его заправить!", "Генератор огнесмеси", nil, 10, "inv_icon") end end end ------------------------------------------------------------------------------------------------------------------------ -- Генератор огнесмеси-2 -- Author - Народ local feuer = { wpn_flame = 1670, wpn_flame2 = 4670} function use_item_ammo_flame_transfer2(obj) if obj:section() == "item_ammo_flame_transfer2" then amk.spawn_item_in_inv("item_ammo_flame_transfer2") play_sound([[device\pda\pda_sos]]) local flame=db.actor:item_in_slot(2) if flame and feuer[flame:section()] then local bochka_fuel=db.actor:object("explosive_barrel") if bochka_fuel then local ammo_elapsed = flame:get_ammo_in_magazine() + 1500 if ammo_elapsed > feuer[flame:section()] then -- кабздец огнемету amk.remove_item(flame) local pos=db.actor:position():add(db.actor:direction():mul(1)) -- спавним детали local lv=db.actor:level_vertex_id() local gv=db.actor:game_vertex_id() alife():create("gorelka",pos,lv,gv) alife():create("manometr",pos,lv,gv) alife():create("trubka",pos,lv,gv) alife():create("trubka",pos,lv,gv) alife():create("flamethrower_bad",pos,lv,gv) alife():create("flamethrower_bad2",pos,lv,gv) alife():create("ammo_balon_rg10",pos,lv,gv) alife():create("ammo_balon_rg10",pos,lv,gv) db.actor.health = -0.4 -- понижаем хп play_sound([[weapons\t_f1_explosion]]) -- звук взрыва level.add_cam_effector("camera_effects\\fusker.anm",959,false,"") -- камэффектор удара в лицо else local feuer = {wpn_flame = 1500, wpn_flame2 = 4500} if ammo_elapsed >= feuer[flame:section()] then amk.send_tip("Опасно! Критическое давление!", "Генератор огнесмеси-2", nil, 10, "inv_icon") end amk.remove_item(bochka_fuel) flame:set_ammo_elapsed(ammo_elapsed) end else amk.send_tip("Невозможно сгенерировать огнесмесь без наличия бензина!", "Генератор огнесмеси-2", nil, 10, "inv_icon") end else amk.send_tip("Нет огнемета, чтобы его заправить!", "Генератор огнесмеси", nil, 10, "inv_icon") end end end Во втором варианте - хотелось бы дополнить "разный" вид топлива для зарядки. В строке local bochka_fuel=db.actor:object("explosive_barrel") добавить "explosive_barrel_low" или ещё что-то... "Схему" которую предложил Norman Eisenherz, Я пытался править по его scriptу - Расширение списка канистр: если годится любой объект без привязки к типу огнемета, то можно оформить через дополнительный обработчик, как показано ниже. Как правильно ВСЁ это "вставить" в скрипт, чтобы работало??? Игра не запускается, вылетает с логом и "ругается" на dmx_mod естественно... (уже не первый раз - кода что-то не так правишь в scripte). Если, можно, то обьясните как вставить...? Изменено во вторник в 14:25 пользователем den_z Ссылка на комментарий
Купер 3 008 Опубликовано во вторник в 14:38 Поделиться Опубликовано во вторник в 14:38 @den_z , когда-то писалась спец. утилита для проверки синтаксиса кода lua (ошибок в файлах с расширением .script). Если память не изменяет, Script Syntax Checker называется. Или аналоги поищи, да можно даже онлайн варианты. Что-то наподобие такого или подобного. Если "дружишь" с Notepad++, то @Charsi для него плагин делал аналогичного назначения, очень удобная вещь. Или VS Code, но это уже из разряда палубной артиллерии (избыточно под задачи). 8 часов назад, den_z сказал: (–) - пометка, что нужно удалить в коде (+) - пометка, что нужно добавить в коде Такое непосредственно из кода нужно убрать. Это просто для наглядности на форуме. 1 час назад, ted.80 сказал: explosive_barrel_low = true-->,<--} Это ерунда на самом деле. Будет работать в обоих вариантах: как с запятой, так и без неё. Причём даже попадалось, что первый вариант на самом деле даже более каноничен с т.з. "лексики" языка. 1 1 Ссылка на комментарий
den_z 36 Опубликовано во вторник в 14:42 Поделиться Опубликовано во вторник в 14:42 Игра не запускается и "ругается" с логом - в том случае, если Я пытаюсь к существующему скрипту "-- Генератор огнесмеси" добавить следующие правки "Расширение списка канистр: если годится любой объект без привязки к типу огнемета, то можно оформить через дополнительный обработчик, как показано ниже". А так всё работает - пока вылеты, большей части, по стеку (стек оверлофф). Вот оригинал текста в scripte: Скрытый текст -- Генератор огнесмеси -- Author - Charsi function use_item_ammo_flame_transfer(obj) if obj:section() == "item_ammo_flame_transfer" then amk.spawn_item_in_inv("item_ammo_flame_transfer") play_sound([[device\pda\pda_sos]]) local flame=db.actor:object("wpn_flame") if flame then local ballon=db.actor:object("amk_ballon") local kanistra=db.actor:object("amk_kanistra") if ballon and kanistra then local ammo_elapsed = flame:get_ammo_in_magazine() + 150 if ammo_elapsed > 1150 then -- кабздец огнемету amk.remove_item(flame) local pos=db.actor:position():add(db.actor:direction():mul(1)) -- спавним детали local lv=db.actor:level_vertex_id() local gv=db.actor:game_vertex_id() alife():create("gorelka",pos,lv,gv) alife():create("manometr",pos,lv,gv) alife():create("trubka",pos,lv,gv) alife():create("flamethrower_bad",pos,lv,gv) db.actor.health = -0.3 -- понижаем хп play_sound([[weapons\t_f1_explosion]]) -- звук взрыва level.add_cam_effector("camera_effects\\fusker.anm",959,false,"") -- камэффектор удара в лицо else if ammo_elapsed > 1000 then amk.send_tip("Опасно! Критическое давление!", "Генератор огнесмеси", nil, 10, "inv_icon") end amk.remove_item(ballon) amk.remove_item(kanistra) flame:set_ammo_elapsed(ammo_elapsed) end else amk.send_tip("Невозможно сгенерировать огнесмесь без наличия коллоидного газа или бензина!", "Генератор огнесмеси", nil, 10, "inv_icon") end else amk.send_tip("Нет огнемета, чтобы его заправить!", "Генератор огнесмеси", nil, 10, "inv_icon") end end end Добавлено Купер, во вторник в 14:56 @den_z, лог-то всё-таки как выглядит? Ссылка на комментарий
mole venomous 3 536 Опубликовано во вторник в 14:43 Поделиться Опубликовано во вторник в 14:43 5 минут назад, Купер сказал: утилита для проверки синтаксиса кода lua Вот из древнего, мало ли: https://disk.yandex.ru/d/bR2smtdg2pK4lQ 1 1 Здесь могла быть ваша реклама. Ссылка на комментарий
den_z 36 Опубликовано во вторник в 14:57 Поделиться Опубликовано во вторник в 14:57 @Купер, спасибо за совет. Скрытый текст Да, Я этой прогой, чеккером, несколько лет назад проверял весь "массив" script в НародСоль - работает хорошо. Только не всегда понимаешь, ка эту ошибку заменить - Я с программирование не на "ТЫ". Большей частью - интуитивно - сравниваю - "пошла, не пошла". С запятыми "," - "схема" "--Генератор огнесмеси" тоже работала... Вообще при общении с "ВАМИ" узнаёшь много нового, по части правок. По большей части, по СТАЛКЕРУ т.е. по ТЧ НародСоль АМК+ДМХ моду версии 1.3.5 от Архары с допами и прочим-прочим... - сама Игра "запала" в душу больше чем все остальные... Хотелось немного "подправить", но не так в О.О.П.МАК... @Купер, Я разобрался как вставить в script "--Генератор огнесмеси" часть кода, спасибо за подсказки - смотри ниже... 24.02.2025 в 20:00, Norman Eisenherz сказал: Расширение списка канистр: если годится любой объект без привязки к типу огнемета, то можно оформить через дополнительный обработчик, как показано ниже. всё, "схема" заработала - теперь можно использовать разные виды топлива... для "--Генератора огнесмеси". Вот Рабочая "схема" для "--Генератора огнесмеси" и "--Генератора огнесмеси-2". Скрытый текст -- Генератор огнесмеси -- Author - Charsi local feuer = { wpn_flame = 1670, wpn_rg10_ognemet = 670, wpn_flame2 = 4670} function use_item_ammo_flame_transfer(obj) if obj:section() == "item_ammo_flame_transfer" then amk.spawn_item_in_inv("item_ammo_flame_transfer") play_sound([[device\pda\pda_sos]]) local flame=db.actor:item_in_slot(2) if flame and feuer[flame:section()] then local ballon=db.actor:object("amk_ballon") local kanistra=db.actor:object("amk_kanistra") if ballon and kanistra then local ammo_elapsed = flame:get_ammo_in_magazine() + 150 if ammo_elapsed > feuer[flame:section()] then -- кабздец огнемету amk.remove_item(flame) local pos=db.actor:position():add(db.actor:direction():mul(1)) -- спавним детали local lv=db.actor:level_vertex_id() local gv=db.actor:game_vertex_id() alife():create("gorelka",pos,lv,gv) alife():create("manometr",pos,lv,gv) alife():create("trubka",pos,lv,gv) alife():create("flamethrower_bad",pos,lv,gv) alife():create("flamethrower_bad2",pos,lv,gv) alife():create("ammo_balon_rg10",pos,lv,gv) db.actor.health = -0.3 -- понижаем хп play_sound([[weapons\t_f1_explosion]]) -- звук взрыва level.add_cam_effector("camera_effects\\fusker.anm",959,false,"") -- камэффектор удара в лицо else local feuer = {wpn_flame = 1500, wpn_rg10_ognemet = 600, wpn_flame2 = 4500} if ammo_elapsed >= feuer[flame:section()] then amk.send_tip("Опасно! Критическое давление!", "Генератор огнесмеси", nil, 10, "inv_icon") end amk.remove_item(ballon) amk.remove_item(kanistra) flame:set_ammo_elapsed(ammo_elapsed) end else amk.send_tip("Невозможно сгенерировать огнесмесь без наличия коллоидного газа или бензина!", "Генератор огнесмеси", nil, 10, "inv_icon") end else amk.send_tip("Нет огнемета, чтобы его заправить!", "Генератор огнесмеси", nil, 10, "inv_icon") end end end Скрытый текст -- Генератор огнесмеси-2 -- Author - Народ local fuel = {explosive_barrel = true, explosive_barrel_low = true} function get_fuel() for i = 0, db.actor:object_count() -1 do -- можно также через iterate_inventory или inventory_for_each local obj = db.actor:object(i) if fuel[ obj:section() ] then return obj end end end local feuer = { wpn_flame = 1670, wpn_flame2 = 4670} function use_item_ammo_flame_transfer2(obj) if obj:section() == "item_ammo_flame_transfer2" then amk.spawn_item_in_inv("item_ammo_flame_transfer2") play_sound([[device\pda\pda_sos]]) local flame=db.actor:item_in_slot(2) if flame and feuer[flame:section()] then local bochka_fuel=get_fuel() if bochka_fuel then local ammo_elapsed = flame:get_ammo_in_magazine() + 1500 if ammo_elapsed > feuer[flame:section()] then -- кабздец огнемету amk.remove_item(flame) local pos=db.actor:position():add(db.actor:direction():mul(1)) -- спавним детали local lv=db.actor:level_vertex_id() local gv=db.actor:game_vertex_id() alife():create("gorelka",pos,lv,gv) alife():create("manometr",pos,lv,gv) alife():create("trubka",pos,lv,gv) alife():create("trubka",pos,lv,gv) alife():create("flamethrower_bad",pos,lv,gv) alife():create("flamethrower_bad2",pos,lv,gv) alife():create("ammo_balon_rg10",pos,lv,gv) alife():create("ammo_balon_rg10",pos,lv,gv) db.actor.health = -0.4 -- понижаем хп play_sound([[weapons\t_f1_explosion]]) -- звук взрыва level.add_cam_effector("camera_effects\\fusker.anm",959,false,"") -- камэффектор удара в лицо else local feuer = {wpn_flame = 1500, wpn_flame2 = 4500} if ammo_elapsed >= feuer[flame:section()] then amk.send_tip("Опасно! Критическое давление!", "Генератор огнесмеси-2", nil, 10, "inv_icon") end amk.remove_item(bochka_fuel) flame:set_ammo_elapsed(ammo_elapsed) end else amk.send_tip("Невозможно сгенерировать огнесмесь без наличия бензина!", "Генератор огнесмеси-2", nil, 10, "inv_icon") end else amk.send_tip("Нет огнемета, чтобы его заправить!", "Генератор огнесмеси", nil, 10, "inv_icon") end end end Спасибо за подсказки и за "схему" @Norman Eisenherz!!! Единственное, при взрыве огнемёта "wpn_flame" и "wpn_flame2", из выпадающих "запчастей на пол" (список их scripte) не выпадает только "flamethrower_bad". После замены в "оригинальном" scripte в строке: local flame=db.actor:object("wpn_flame") на правку - получилось: local flame=db.actor:item_in_slot(2) ) И "запчасти на пол" вываливаются почти все, но без "flamethrower_bad". В чём причина? До правки - всё выпадало, в чём причина??? Может быть из-за того, что "flamethrower_bad" считается object-ом? Добавлено Купер, Вчера в 04:54 Продолжение эпопеи с пропавшим огнемётом здесь. 1 1 Ссылка на комментарий
Labadal 68 Опубликовано 6 часов назад Поделиться Опубликовано 6 часов назад Здравствуйте, можно ли как-то установить в нужный момент нужное время? К примеру, если мне нужно, чтобы при выдаче поршня info_time_0, устанавливалось время 00:00 (не перемотка до этого времени через увеличение тайм фактора, а именно установить это время). Спасибо God save Hatsune Miku! Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти