Overf1rst 1 499 Опубликовано 1 июля, 2020 Тема посвящена моддингу на платформе Тень Чернобыля. Правила темы: Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть. Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода. Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа). Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться. 6 4 1 3 1 3 6 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 244 Опубликовано 26 мая, 2021 vader_33 да я просто забил на реализацию той идеи своей. У меня такой вопрос, есть представление но геморное и долгое и мб как-то быстрее можно это сделать, возможно ли диалогом забрать случайный предмет из инвентаря гг? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Manool 128 Опубликовано 26 мая, 2021 (изменено) 20 часов назад, ian98 сказал: возможно ли диалогом забрать случайный предмет из инвентаря гг Вот как вариант - Спойлер function remove_random_item() local tbl = {} db.actor:iterate_inventory( function( dummy, obj ) if obj then table.insert( tbl, obj:id() ) end end ) local rnd = tbl[ math.random( #tbl ) ] local sobj = alife():object( rnd ) if sobj then alife():release( sobj, true ) end end Можно вызвать эту функцию из любого диалога. Да и не только из диалога. Должен предупредить, может удалиться и ПДА либо любой другой важный предмет. Изменено 26 мая, 2021 пользователем Sergey_Belichenko 1 Объединённый Пак OGSR Engine Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 244 Опубликовано 26 мая, 2021 (изменено) Sergey_Belichenko попробую. Болт может удалиться? Спрашиваю, ибо болт дается не через character_desc или all.spawn, и я не знаю как он дается гг, скриптом наверное. Да и там вроде стол есть, можно туда вбить список предметов на удаление? Изменено 26 мая, 2021 пользователем ian98 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
denis2000 953 Опубликовано 26 мая, 2021 (изменено) ian98 Болт добавляется движком, и имхо как только вы удалите его движек положит новый. Впрочем попробуйте. А вот удаление ножа или бинокля - это печально, если не будет способа восстановления этих предметов. В конце концов можно проверять, что за объект пытается добавиться в таблицу и на основе этого решать, какие предметы не добавлять в нее. Изменено 26 мая, 2021 пользователем denis2000 1 Путь во мгле. Связь времен."Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Manool 128 Опубликовано 26 мая, 2021 (изменено) 3 часа назад, ian98 сказал: Болт может удалиться Да, может. Поэтому лучше использовать такой вариант - Спойлер function remove_random_item() local important_objects = { -- Здесь предметы, которые нельзя удалять [ "bolt" ] = true, [ "device_pda" ] = true, } local tbl = {} db.actor:iterate_inventory( function( dummy, obj ) if obj and not important_objects[ obj:section() ] then table.insert( tbl, obj:id() ) end end ) local rnd = tbl[ math.random( #tbl ) ] local sobj = alife():object( rnd ) if sobj then alife():release( sobj, true ) end end здесь в таблице предметы, которые НЕ удалятся при срабатывании функции. Туда ещё лучше добавить фонарик, нож, бинокль и т.д. Изменено 26 мая, 2021 пользователем Sergey_Belichenko 1 Объединённый Пак OGSR Engine Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 244 Опубликовано 26 мая, 2021 Sergey_Belichenko чет не вышло. Подключал через диалог <action>sweet_rewards.remove_random_item</action> Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Manool 128 Опубликовано 26 мая, 2021 ian98 Да, там небольшая ошибочка вышла. Вот так нужно - Спойлер function remove_random_item() local important_objects = { -- Здесь предметы, которые нельзя удалять [ "bolt" ] = true, [ "device_pda" ] = true, } local tbl = {} db.actor:iterate_inventory( function( dummy, obj ) if obj and not important_objects[ obj:section() ] then table.insert( tbl, obj:id() ) end end ) local rnd = tbl[ math.random( table.getn( tbl ) ) ] local sobj = alife():object( rnd ) if sobj then news_manager.relocate_item( db.actor, "out", sobj:section_name() ) alife():release( sobj, true ) end end Должно появится сообщение, в котором будет указан предмет, который удалился. 1 Объединённый Пак OGSR Engine Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 244 Опубликовано 26 мая, 2021 (изменено) Sergey_Belichenko заработало! Большое спасибо Дополнено 51 минуты спустя Sergey_Belichenko А можно ли перевооружить нпс с помощью скрипта? Без чехарды с character_desc. Изменено 26 мая, 2021 пользователем ian98 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 244 Опубликовано 27 мая, 2021 (изменено) 10 часов назад, Sergey_Belichenko сказал: Код (Показать контент) function remove_random_item() local important_objects = { -- Здесь предметы, которые нельзя удалять [ "bolt" ] = true, [ "device_pda" ] = true, } local tbl = {} db.actor:iterate_inventory( function( dummy, obj ) if obj and not important_objects[ obj:section() ] then table.insert( tbl, obj:id() ) end end ) local rnd = tbl[ math.random( table.getn( tbl ) ) ] local sobj = alife():object( rnd ) if sobj then news_manager.relocate_item( db.actor, "out", sobj:section_name() ) alife():release( sobj, true ) end end Столкнулся с проблемой, когда игра вылетает в случае полного отсутствия хоть какого-нибудь предмета в инвентаре гг. Решил ее вот такой Спойлер function if_actor_has_items(first_speaker, second_speaker) return first_speaker:object("wpn_abakan") ~= nil or first_speaker:object("wpn_ak74") ~= nil or и т.д Однако, даже не обращая внимания на геморрой с наполнением предметов в эту проверку, игрок может скинуть свой важный хабар на землю и считерить отдав какой-нибудь мусор со 100% шансом, что расстраивает, наверное, и игрока(ему кажется, что это какая-то нелепая дыра), что расстраивает и меня(мне кажется, что это какая-то дыра). Поэтому, вопрос, можно ли устроить проверку общего количества предметов в инвентаре не зацикливаясь на конкретных предметах? Есть какая-то идеальная строчка? А то я нашел вот такую проверку, она не подходит... Ну, и я ее не очень понимаю, так что может ее можно как-то поправить и будет в самый раз Спойлер function название функции(first_speaker, second_speaker) local item_sections = { ["medkit"] = 5, -- к примеру 5 аптечек ["bandage"] = 2} -- и два бинта local function calc(temp, item) local sect = item:section() if item_sections[sect] and item_sections[sect]>0 then if item_sections[sect]==1 then item_sections[sect] = nil else item_sections[sect] = item_sections[sect] - 1 end end end db.actor:iterate_inventory(calc, db.actor) return next(item_sections)==nil end Изменено 27 мая, 2021 пользователем ian98 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Manool 128 Опубликовано 27 мая, 2021 10 часов назад, ian98 сказал: А можно ли перевооружить нпс с помощью скрипта? Можно заспаунить ему ствол с патронами, а выберет ли он его или нет, не знаю. 46 минут назад, ian98 сказал: можно ли устроить проверку общего количества предметов в инвентаре не зацикливаясь на конкретных предметах Можно, в таком случае - Спойлер function remove_random_item() local important_objects = { -- Здесь предметы, которые нельзя удалять [ "bolt" ] = true, [ "device_pda" ] = true, } local tbl = {} local cnt = 0 db.actor:iterate_inventory( function( dummy, obj ) if obj and not important_objects[ obj:section() ] then cnt = cnt + 1 table.insert( tbl, obj:id() ) end end ) if cnt == 0 then return end local rnd = tbl[ math.random( table.getn( tbl ) ) ] local sobj = alife():object( rnd ) if sobj then news_manager.relocate_item( db.actor, "out", sobj:section_name() ) alife():release( sobj, true ) end end не будет вылета, если в инвентаре нет предметов. Переменная cnt - это счётчик добавленных в таблицу предметов. Если он останется равным нулю, то функция остановится. 1 Объединённый Пак OGSR Engine Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 244 Опубликовано 27 мая, 2021 23 минуты назад, Sergey_Belichenko сказал: Можно заспаунить ему ствол с патронами, а выберет ли он его или нет, не знаю. а там можно указывать вероятности? По аналогии с character_desc только одним файлом для всех нпс разом, или выборочно. А то я в попытке дать всем нпс больше выбора в вооружении уже растратил все свои силы. Я делаю это с помощью клонирования и молюсь найти способ легче) Мое безобразие в закрепе. character_desc_escape.xml Дополнено 0 минут спустя Только что, ian98 сказал: По аналогии с character_desc только одним файлом для всех нпс разом, или выборочно loot.xml Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Manool 128 Опубликовано 27 мая, 2021 40 минут назад, ian98 сказал: Я делаю это с помощью клонирования и молюсь найти способ легче У такого способа много минусов: во-первых, если вероятность указывается для каждого предмета, то созданные патроны могут не подойти к созданному стволу, а могут и вовсе не появится, во-вторых у НПС в рюкзаке будет скапливаться много ненужных вещей, а это не очень хорошо сказывается на производительности а также чревато различными багами. 45 минут назад, ian98 сказал: По аналогии с character_desc только одним файлом для всех нпс разом Тут нужно подумать. Для одного НПС было бы куда проще, а для всех разом нужно составлять огромную таблицу с предметами, вероятностями, профилями НПС и без недостатков, о которых я написал выше. 1 Объединённый Пак OGSR Engine Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ZonaChe 405 Опубликовано 27 мая, 2021 Всем привет! Кто знает помогите - как называется мод (вроде ТЧ) где нужно в озере, по водой, достать документы из рубки корабля? Прямой дороги тебе, сталкер. Мимо аномалий, через артефакты... Я всегда хотел отвечать людям добром, но жизнь научала отвечать взаимностью... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 244 Опубликовано 27 мая, 2021 (изменено) Sergey_Belichenko так что, это, получается только character_desc клонировать профили? И еще вопрос, вот ты мне подарил эту замечательную функцию на удаление случайного предмета, она работает отлично, но есть несколько вопросов. Первый, а можно ли сделать проверку к этой функции на общее кол-во предметов в инвентаре, например 10, чтобы только от 10 предметов в инвентаре гг ее включать? Второй, я клянусь, изменив вот эту строчку Спойлер news_manager.relocate_item( db.actor, "out", sobj:section_name() ) я какое-то время вместо потери случайного предмета ПОЛУЧАЛ случайный предмет. Причем это было абсолютно реально, я этим предметом мог пользоваться, и это очень странно, ибо строчка отвечает за уведомление по моим недалеким представлениям. Ключевое здесь это какое-то время. Сейчас я не получаю, а также теряю предмет, а мне просто пишет типо я получил его и все, т.е скрипт заработал как надо. Так вот, вопрос, можно ли выдавать подобной функцией предмет? А то я сейчас пользуюсь, эх, вот этой длиннющей функцией Спойлер function thank_you_old (npc, npz) local reward_item = math.random(1,191) if reward_item == 1 then dialogs.relocate_item_section(npc, "wpn_abakan", "in") end if reward_item == 2 then dialogs.relocate_item_section(npc, "wpn_ak74", "in") end ... Изменено 27 мая, 2021 пользователем ian98 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Manool 128 Опубликовано 28 мая, 2021 (изменено) 13 часов назад, ian98 сказал: получается только character_desc клонировать профили Ну можно и скриптом, только подумать надо, как его грамотнее составить. 13 часов назад, ian98 сказал: Первый, а можно ли сделать проверку к этой функции на общее кол-во предметов в инвентаре Спойлер Легко, в этой функции измените строку if cnt == 0 then return end на такую - if cnt < 10 then return end 13 часов назад, ian98 сказал: Так вот, вопрос, можно ли выдавать подобной функцией предмет? Вот попроще функция - Спойлер function give_to_actor_item( sect ) -- Здесь нужна именно секция предмета news_manager.relocate_item( db.actor, "in", sect ) alife():create( sect, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id() ) end Изменено 28 мая, 2021 пользователем Sergey_Belichenko 1 Объединённый Пак OGSR Engine Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 244 Опубликовано 28 мая, 2021 Sergey_Belichenko блин, я легко бы отдал тебе свой галиль из кс гов за 50 баксов, только бы избавить себя от страданий с бесконечным ctrl+c ctrl+v в character_desc конфигах. В закрепе примерно то, что я планирую и очень медленно реализую. Я скинул его на случай, если ты принял мое предложение, вызвался помочь подарив мне этот чудоскрипт gameplay.rar Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Alex Kireev 18 Опубликовано 30 мая, 2021 Всем привет Где хранятся состояние голода и кровотечения ГГ? Пробовал использовать параметр satiety и bleeding, но выдает ошибку на неправильный аргумент db.actor.bleeding() db.actor.satiety() Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vader_33 1 142 Опубликовано 30 мая, 2021 Alex Kireev двоеточие после актора, не точка В беге за рассветом приближаешь свой закат Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Alex Kireev 18 Опубликовано 30 мая, 2021 (изменено) vader_33 ошибку выдает, в месте вызова функции Дополнено 1 минуту спустя А почему здесь с точкой? db.actor.health И в чем различие точки и двоеточия? Изменено 30 мая, 2021 пользователем Alex Kireev Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vader_33 1 142 Опубликовано 30 мая, 2021 Alex Kireev посмотрите в lua_help.script, как там написано. Если написано property - значит, точка после актора и без скобочек в конце. Если написано function - значит, после актора двоеточие и скобочки в конце. Щас не у компа, не могу посмотреть 1 В беге за рассветом приближаешь свой закат Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Alex Kireev 18 Опубликовано 30 мая, 2021 vader_33 спасибо я понял функция и объект 14 минут назад, vader_33 сказал: посмотрите в lua_help.script, как там написано. Если написано property - значит, точка после актора и без скобочек в конце. Если написано function - значит, после актора двоеточие и скобочки в конце. Но я так и не нашел там сытность актера и кровотечение, в файле lua_help нет таких ни функций, ни объектов Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vader_33 1 142 Опубликовано 30 мая, 2021 Alex Kireev , точно было. Кровотечение вроде так :get_bleeding(), насчёт сытости точно не помню, вроде как свойство с точкой и без скобок (но точно не помню) 1 В беге за рассветом приближаешь свой закат Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Alex Kireev 18 Опубликовано 30 мая, 2021 2 минуты назад, vader_33 сказал: Кровотечение вроде так :get_bleeding(), Да, я уже нашел, сейчас тестирую спасибо, осталось только разобраться с голодом актера Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
vader_33 1 142 Опубликовано 30 мая, 2021 Alex Kireev , может насчёт сытости я с зп путаю) Надо будет вечером проверить В беге за рассветом приближаешь свой закат Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Askar 0 Опубликовано 30 мая, 2021 (изменено) как можно сделать чтобы гг после пробуждения сам что то случайным образом ел? Еда есть в рюкзаке и выбирается случайным образом из того что в нем есть Изменено 30 мая, 2021 пользователем Askar Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты