AndreySol 215 Опубликовано 24 Сентября 2018 Поделиться Опубликовано 24 Сентября 2018 17 часов назад, _Sk8_AsTeR_ сказал: где НПС предлагает рандомный итем из таблицы в скрипте. То есть по факту НПС предмет не имеет. 17 часов назад, _Sk8_AsTeR_ сказал: Будет выполнена проверка инвентаря НПС на наличие аптечки. Если такая есть, то НПС ответит - есть Чет у меня не сростается - так предмет должен быть у непися али нет ? Ссылка на комментарий
_Sk8_AsTeR_ 117 Опубликовано 24 Сентября 2018 Поделиться Опубликовано 24 Сентября 2018 @AndreySol, по задумке предмет, который мы хотим получить от НПС должен быть у самого НПС, иначе он скажет - извини, брат, аптечек лишних нету.@Kirgudu, прошу прощения, да. Имеем диалог (фрагмент): Скрытый текст function init_exchanging_items_dialog(dlg) local intro_phrase = exchanging_items_intro_phrase[math.random(1, table.getn(exchanging_items_intro_phrase))] --рандомная фраза из таблицы с приветствиями phr0 = dlg:AddPhrase(intro_phrase, "0", "", -10000) --фраза 1 phr1 = dlg:AddPhrase(exchanging_items_phr_1, "1", "0", -10000) -- фраза 2, вызывающая ниже написанную функцию phr1:GetPhraseScript():AddAction("exchanging_items.give_message_proposed_items") --вызывается функция по нашему диалогу в ответах (второй спойлер внизу) ...продолжение диалогов... end Готовая функция, вызываемая из диалога (фрагмент): Скрытый текст function give_message_proposed_items(first_speaker, second_speaker) local Art, Item, Outfit, Wpn, TxtArt, TxtItm, TxtOutfit, TxtWpn --переменные итемов local npc_rank = ranks.get_obj_rank_name(first_speaker) -- переменные рангов (в этом фрагменте кода пример с новичком) if npc_rank == "novice" then Art = GetRndItemFromTable(arts_table_novice) --переменной Art присваевается случайный арт из заранее прописанной таблицы Outfit = GetRndItemFromTable(outfits_table_novice) --тоже самое с бронёй Item = GetRndItemFromTable(items_table_novice) --тоже самое с предметами Wpn = GetRndItemFromTable(weapons_table_novice) --тоже самое с оружием ProposedArtRank = Get_Number_Item(Art, arts_table_novice) --если не ошибаюсь, то в диалоге предлагается (отображается) выбранный артефакт ProposedOutfRank = Get_Number_Item(Outfit, outfits_table_novice) --тоже самое с бронёй ProposedItmRank = Get_Number_Item(Item, items_table_novice) --тоже самое с предметами ProposedWpnRank = Get_Number_Item(Wpn, weapons_table_novice) --тоже самое с оружием end TxtArt = game.translate_string(get_inv_name(Art)) TxtOutfit = game.translate_string(get_inv_name(Outfit)) TxtItm = game.translate_string(get_inv_name(Item)) TxtWpn = game.translate_string(get_inv_name(Wpn)) InArt = Art InOutf = Outfit InItm = Item InWpn = Wpn db.actor:give_talk_message("%c[255,250,194,87]Артефакт:%c[255,87,250,240] "..TxtArt, "ui\\ui_iconstotal", Frect():set(0,188,83,47), "iconed_answer_item") db.actor:give_talk_message("%c[255,250,194,87]Костюм:%c[255,87,250,240] "..TxtOutfit, "ui\\ui_iconstotal", Frect():set(0,329,83,47), "iconed_answer_item") db.actor:give_talk_message("%c[255,250,194,87]Предмет:%c[255,87,250,240] "..TxtItm, "ui\\ui_iconstotal", Frect():set(0,423,83,47), "iconed_answer_item") db.actor:give_talk_message("%c[255,250,194,87]Оружие:%c[255,87,250,240] "..TxtWpn, "ui\\ui_iconstotal", Frect():set(0,517,83,47), "iconed_answer_item") end --конец функции В последней функции для реализации моей идеи почти все лишнее. В этой функции, вызываемой из скриптового диалога, как-то нужно реализовать проверку НПС на нужный итем (medkit). Если true, то НПС даст диалог: поделюсь аптечкой. Если False, то, мол: Извини брат, нет лишних аптечек. Подскажите, мил-люди, как сделать проверку НПС на определенный предмет? Своих мозгов не хватает Ссылка на комментарий
Kirgudu 1 187 Опубликовано 24 Сентября 2018 Поделиться Опубликовано 24 Сентября 2018 (изменено) @_Sk8_AsTeR_, если отвечать по существу вопроса, и если функция give_message_proposed_items вызывается во фразе НПС, тогда: function give_message_proposed_items(first_speaker, second_speaker) if first_speaker:object("medkit") ~= nil then -- предмет есть else -- предмета нет end end Только тебе вместо "medkit" надо ещё передать в функцию, какой именно предмет ты запрашиваешь, ведь до собственно проверки ты случайным образом берёшь его из таблицы допустимых предметов. Это первое. А второе - по-хорошему, тебе надо генерить фразы диалога так, чтобы они шли списком: либо "мне нужно 1. это; 2. это; 3. это" от имени ГГ, либо "у меня есть 1. это; 2. это; 3. это" от имени НПС, и с дальнейшим выбором нужного пункта игроком. Рекомендую взять здесь в скриптах «Чистого Неба» модуль guiders.script и посмотреть, как там реализовано формирование диалога с доступными для перехода точками и выбор из них нужной. Впрочем, не исключено, что кто-нибудь посоветует что-то попроще. Изменено 24 Сентября 2018 пользователем Kirgudu 1 Инструмент Ссылка на комментарий
_Sk8_AsTeR_ 117 Опубликовано 24 Сентября 2018 Поделиться Опубликовано 24 Сентября 2018 (изменено) @Kirgudu, от души благодарю! Заработало всё как надо! Передал НеПиСю аптечку, он сначала сам вылечился, обменяться не предложил. А вот вторую аптечку уже предложил мне обменять! То что надо! Огромное спасибо! А еще вопрос. Как можно проверить все в тех же скриптах, является ли НПС другом? То есть if НПС друг, then выполнение скрипта обмена аптечкой, Else отбой, грубо говоря. Изменено 24 Сентября 2018 пользователем _Sk8_AsTeR_ Ссылка на комментарий
Kirgudu 1 187 Опубликовано 25 Сентября 2018 Поделиться Опубликовано 25 Сентября 2018 Не стоит игнорировать возможность поискать самому ответы на простые вопросы. Например, поиск в скриптах оригинала по слову «friend» даёт массу интересных результатов, в том числе dialogs.is_friend(first_speaker, second_speaker) и dialogs.is_not_friend(first_speaker, second_speaker). Также много полезной информации даст поиск по «enemy» и «relation». 2 Инструмент Ссылка на комментарий
_Sk8_AsTeR_ 117 Опубликовано 25 Сентября 2018 Поделиться Опубликовано 25 Сентября 2018 @Kirgudu, и снова огромное спасибо! Благодаря последней подсказке реализовал кучу новых фишек для себя! Я конечно новичок и дурачок, но схватываю на лету! Еще раз благодарю! Ссылка на комментарий
Shkiper2012 35 Опубликовано 26 Сентября 2018 Поделиться Опубликовано 26 Сентября 2018 [ЗП/СоС] Как прочесть/выставить режим огня для оружия, с помощью нет-пакетов? Если есть готовые примеры, ткните, пожалуйста. Адаптация мода "AtmosFear" для мода "Боевая Подготовка" v.2.0.2. Адаптация мода "Магазинное питание" для мода "Боевая Подготовка" v.2.0.2. Ссылка на комментарий
Norman Eisenherz 302 Опубликовано 29 Сентября 2018 Поделиться Опубликовано 29 Сентября 2018 Здрасьте. Солянка 2010, экзоскелет СКАТ-15М [scripts\meceniy_outfit.script]. Пытаюсь научить костюм регистрировать смерть носителя. Добавил приведенный ниже сегмент, костюм перестал делать припарки мертвому, но теперь просто спамит сообщением о смерти. Как так сделать, чтобы это сообщение выводилось только один раз? На мой неискушенный взгляд, условие написано как "если мертв, показать сообщение, _иначе_ обработать весь старый скрипт (включая приращение переменной t_upd)". [новый текст] function on_actor_update() … local act = db.actor if not act:alive() then news_manager.send_tip(act, "%c[skat_name]".."Система жизнеобеспечения:".."\\n".."%c[skat_msg]".."носитель мертв.".."\n", nil, nil, 30000) elseif t_upd<time_global() then … https://drive.google.com/open?id=1qxS9CaauRCcHkQjk0Onqq-OZBpbsyJcg Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
AndreySol 215 Опубликовано 29 Сентября 2018 Поделиться Опубликовано 29 Сентября 2018 1 час назад, Norman Eisenherz сказал: чтобы это сообщение выводилось только один раз? Добавить переменную, в которую будем сохранять факт смерти хозяина костюма, и на апдейте обрабатывать её. Типа так: local is_died = false function on_actor_update() … local act = db.actor if not act:alive() and not is_died then news_manager.send_tip(act, "%c[skat_name]".."Система жизнеобеспечения:".."\\n".."%c[skat_msg]".."носитель мертв.".."\n", nil, nil, 30000) is_died = true elseif t_upd<time_global() then Ну и смотреть уже по факту - где и как(локально или глобально) объявлять эту переменную, и как ее сбрасывать в начальное состояние после загрузки сейва. P.S. Вот только не понятно зачем отслеживать смерть актера(ГГ), ведь игрок и так получит на экран стандартное сообщение о смерти, и обычно после этого сразу загружаются с какого то сейва. 1 Ссылка на комментарий
Charsi 440 Опубликовано 29 Сентября 2018 Поделиться Опубликовано 29 Сентября 2018 @Norman Eisenherz, local actor_alive = true function on_actor_update() ... if actor_alive and not act:alive() then actor_alive = false news_manager.send_tip(...) Но лучше для гибели актора использовать специальный callback.death, как в xr_motivator.script для НПС. 1 Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
Norman Eisenherz 302 Опубликовано 30 Сентября 2018 Поделиться Опубликовано 30 Сентября 2018 Работает, спасибо. Если я правильно понимаю, состояние "true" _любой_ указанной в начале переменной означает "исполнять скрипт дальше", а перевод переменной в состояние "false", соответственно, выключает оставшийся скрипт? Касательно отслеживания смерти: по умолчанию костюм пытается лечить мертвого и спамит сообщениями о примененных аптечках, поэтому условие начала лечения все равно надо было менять. Сообщение о смерти – попытка сделать костюм "умным" до конца. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
AndreySol 215 Опубликовано 30 Сентября 2018 Поделиться Опубликовано 30 Сентября 2018 7 часов назад, Norman Eisenherz сказал: означает "исполнять скрипт дальше" Правильнее будет говорить не о всем скрипте а о конкретной функции. Начальное состояние переменной не означает какого-то конкретного действия, все определяется условиями проверки переменной в ф-ции. Как напишешь - так и будет работать. Ссылка на комментарий
DoberBull 290 Опубликовано 30 Сентября 2018 Поделиться Опубликовано 30 Сентября 2018 Всем привет. Кто знает как реализовать расширенное контекстное меню для аддонов, чтобы было видно название оружия к которому приклепляешь аддон. Например "прикрепить гранатомет к ак-74". Желательно без правок внутри движка. Знаю, такое было в S.N.I.P.E.R, а движок там не был затронут. Кто знает такой мод, или как реализовать либо вытащить такую фичу, очень прошу сообщить Ссылка на комментарий
AndreySol 215 Опубликовано 30 Сентября 2018 Поделиться Опубликовано 30 Сентября 2018 5 часов назад, DoberBull сказал: Желательно без правок внутри движка. Сомнительно. Все формирование контекстной менюшки происходит в движке. Ссылка на комментарий
lordmuzer 743 Опубликовано 30 Сентября 2018 Поделиться Опубликовано 30 Сентября 2018 5 hours ago, DoberBull said: Желательно без правок внутри движка. Знаю, такое было в S.N.I.P.E.R, а движок там не был затронут Это вряд ли возможно. Текст для всех меню в движке. То есть или движок правился или это был не ТЧ. Ссылка на комментарий
DoberBull 290 Опубликовано 30 Сентября 2018 Поделиться Опубликовано 30 Сентября 2018 2 часа назад, lordmuzer сказал: был не ТЧ Так точно, это был мод S.N.I.P.E.R для ЗП. Вот и интересно, можно ли выдернуть оттуда. Там точно знаю не в движке, я с разными проверял. Вроде все в скриптах, но пока конкретного скрипта отвечающего за это я не обнаружил Ссылка на комментарий
DoberBull 290 Опубликовано 30 Сентября 2018 Поделиться Опубликовано 30 Сентября 2018 Короче понял что написал не по адресу. Фишка с название оружия в контекстном меню в ЗП вшита в движок, забыл просто. Ссылка на комментарий
_Sk8_AsTeR_ 117 Опубликовано 4 Октября 2018 Поделиться Опубликовано 4 Октября 2018 Подскажите пожалуйста, какая функция РЕАЛЬНО передает предмет от ГГ к НПС? dialog.relocate_item (или какое там название у этой ф-ции) делает лишь видимость. По факту у ГГ просто отнимается предмет. НПС он не передается (проверял). Как передать предмет НПС? Или костыльно (как заспавнить предмет у нпс через скрипт?) Заранее благодарю! Ссылка на комментарий
AndreySol 215 Опубликовано 4 Октября 2018 Поделиться Опубликовано 4 Октября 2018 Заглядывай по чаще в "Справочник по ф-циям и классам". actor:transfer_item(transfer_obj, npc) Как получить объекты актера, НПС и перемещаемого предмета разберешься сам. Или с этим то же проблемы ? Ссылка на комментарий
_Sk8_AsTeR_ 117 Опубликовано 4 Октября 2018 Поделиться Опубликовано 4 Октября 2018 @AndreySol, благодарю, сенсей! Строг ты и суров, но подсказки твои работают! Но столкнулся с проблемкой. Смотри, реализовал идею с твоей подсказкой следующим образом: Скрытый текст function name(npc, actor) function item(actor) actor:iterate_inventory(keep_item, actor) end function keep_item(actor, item) if item:section() == "medkit" then actor:transfer_item(item, npc) end end item(actor) end Аптечка передается и у НПС она появляется. Только передаётся не 1 аптечка, а сразу все medkit что в рюкзаке у ГГ. Сразу 10, 20, одной передачей. Как пофиксить? Под ночь не соображу никак Вдруг еще сможешь помочь! Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти