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/
AndreySol 215 Опубликовано 24 Сентября 2018 Поделиться Опубликовано 24 Сентября 2018 17 часов назад, _Sk8_AsTeR_ сказал: где НПС предлагает рандомный итем из таблицы в скрипте. То есть по факту НПС предмет не имеет. 17 часов назад, _Sk8_AsTeR_ сказал: Будет выполнена проверка инвентаря НПС на наличие аптечки. Если такая есть, то НПС ответит - есть Чет у меня не сростается - так предмет должен быть у непися али нет ? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/466/#findComment-1201913
_Sk8_AsTeR_ 122 Опубликовано 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, то, мол: Извини брат, нет лишних аптечек. Подскажите, мил-люди, как сделать проверку НПС на определенный предмет? Своих мозгов не хватает Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/466/#findComment-1201938
Kirgudu 1 328 Опубликовано 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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/466/#findComment-1201948
_Sk8_AsTeR_ 122 Опубликовано 24 Сентября 2018 Поделиться Опубликовано 24 Сентября 2018 (изменено) @Kirgudu, от души благодарю! Заработало всё как надо! Передал НеПиСю аптечку, он сначала сам вылечился, обменяться не предложил. А вот вторую аптечку уже предложил мне обменять! То что надо! Огромное спасибо! А еще вопрос. Как можно проверить все в тех же скриптах, является ли НПС другом? То есть if НПС друг, then выполнение скрипта обмена аптечкой, Else отбой, грубо говоря. Изменено 24 Сентября 2018 пользователем _Sk8_AsTeR_ Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/466/#findComment-1201953
Kirgudu 1 328 Опубликовано 25 Сентября 2018 Поделиться Опубликовано 25 Сентября 2018 Не стоит игнорировать возможность поискать самому ответы на простые вопросы. Например, поиск в скриптах оригинала по слову «friend» даёт массу интересных результатов, в том числе dialogs.is_friend(first_speaker, second_speaker) и dialogs.is_not_friend(first_speaker, second_speaker). Также много полезной информации даст поиск по «enemy» и «relation». 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/466/#findComment-1201991
_Sk8_AsTeR_ 122 Опубликовано 25 Сентября 2018 Поделиться Опубликовано 25 Сентября 2018 @Kirgudu, и снова огромное спасибо! Благодаря последней подсказке реализовал кучу новых фишек для себя! Я конечно новичок и дурачок, но схватываю на лету! Еще раз благодарю! Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/466/#findComment-1202073
Shkiper2012 35 Опубликовано 26 Сентября 2018 Поделиться Опубликовано 26 Сентября 2018 [ЗП/СоС] Как прочесть/выставить режим огня для оружия, с помощью нет-пакетов? Если есть готовые примеры, ткните, пожалуйста. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/466/#findComment-1202210
Norman Eisenherz 354 Опубликовано 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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/466/#findComment-1202645
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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/466/#findComment-1202651
Charsi 441 Опубликовано 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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/466/#findComment-1202652
Norman Eisenherz 354 Опубликовано 30 Сентября 2018 Поделиться Опубликовано 30 Сентября 2018 Работает, спасибо. Если я правильно понимаю, состояние "true" _любой_ указанной в начале переменной означает "исполнять скрипт дальше", а перевод переменной в состояние "false", соответственно, выключает оставшийся скрипт? Касательно отслеживания смерти: по умолчанию костюм пытается лечить мертвого и спамит сообщениями о примененных аптечках, поэтому условие начала лечения все равно надо было менять. Сообщение о смерти – попытка сделать костюм "умным" до конца. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/466/#findComment-1202850
AndreySol 215 Опубликовано 30 Сентября 2018 Поделиться Опубликовано 30 Сентября 2018 7 часов назад, Norman Eisenherz сказал: означает "исполнять скрипт дальше" Правильнее будет говорить не о всем скрипте а о конкретной функции. Начальное состояние переменной не означает какого-то конкретного действия, все определяется условиями проверки переменной в ф-ции. Как напишешь - так и будет работать. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/466/#findComment-1202885
DoberBull 291 Опубликовано 30 Сентября 2018 Поделиться Опубликовано 30 Сентября 2018 Всем привет. Кто знает как реализовать расширенное контекстное меню для аддонов, чтобы было видно название оружия к которому приклепляешь аддон. Например "прикрепить гранатомет к ак-74". Желательно без правок внутри движка. Знаю, такое было в S.N.I.P.E.R, а движок там не был затронут. Кто знает такой мод, или как реализовать либо вытащить такую фичу, очень прошу сообщить Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/466/#findComment-1202931
AndreySol 215 Опубликовано 30 Сентября 2018 Поделиться Опубликовано 30 Сентября 2018 5 часов назад, DoberBull сказал: Желательно без правок внутри движка. Сомнительно. Все формирование контекстной менюшки происходит в движке. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/466/#findComment-1203050
lordmuzer 743 Опубликовано 30 Сентября 2018 Поделиться Опубликовано 30 Сентября 2018 5 hours ago, DoberBull said: Желательно без правок внутри движка. Знаю, такое было в S.N.I.P.E.R, а движок там не был затронут Это вряд ли возможно. Текст для всех меню в движке. То есть или движок правился или это был не ТЧ. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/466/#findComment-1203052
DoberBull 291 Опубликовано 30 Сентября 2018 Поделиться Опубликовано 30 Сентября 2018 2 часа назад, lordmuzer сказал: был не ТЧ Так точно, это был мод S.N.I.P.E.R для ЗП. Вот и интересно, можно ли выдернуть оттуда. Там точно знаю не в движке, я с разными проверял. Вроде все в скриптах, но пока конкретного скрипта отвечающего за это я не обнаружил Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/466/#findComment-1203066
DoberBull 291 Опубликовано 30 Сентября 2018 Поделиться Опубликовано 30 Сентября 2018 Короче понял что написал не по адресу. Фишка с название оружия в контекстном меню в ЗП вшита в движок, забыл просто. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/466/#findComment-1203069
_Sk8_AsTeR_ 122 Опубликовано 4 Октября 2018 Поделиться Опубликовано 4 Октября 2018 Подскажите пожалуйста, какая функция РЕАЛЬНО передает предмет от ГГ к НПС? dialog.relocate_item (или какое там название у этой ф-ции) делает лишь видимость. По факту у ГГ просто отнимается предмет. НПС он не передается (проверял). Как передать предмет НПС? Или костыльно (как заспавнить предмет у нпс через скрипт?) Заранее благодарю! Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/466/#findComment-1203929
AndreySol 215 Опубликовано 4 Октября 2018 Поделиться Опубликовано 4 Октября 2018 Заглядывай по чаще в "Справочник по ф-циям и классам". actor:transfer_item(transfer_obj, npc) Как получить объекты актера, НПС и перемещаемого предмета разберешься сам. Или с этим то же проблемы ? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/466/#findComment-1203935
_Sk8_AsTeR_ 122 Опубликовано 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, одной передачей. Как пофиксить? Под ночь не соображу никак Вдруг еще сможешь помочь! Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/466/#findComment-1203947
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти