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 Ссылка на комментарий
Norman Eisenherz 322 Опубликовано 2 Ноября 2018 Поделиться Опубликовано 2 Ноября 2018 Здрасьте. Есть диалог выбора типа ПНВ при прокачке брони, который выглядит примерно так: фраза 11: выбираю ПНВ "Зеленый" / действие: установка ПНВ тип 1 фраза 12: выбираю ПНВ "Цифровой" / действие: установка ПНВ тип 2 … фраза 18: выбираю ПНВ "Белая ночь" / действие: установка ПНВ тип 8 Можно ли получить номер, id или текст последней задействованной в диалоге фразы, чтобы исходя из этого определять тип ПНВ и не писать 8 однотипных функций? Думаю, где-то должна храниться информация "скрипт был вызван из фразы phrase_id диалога dialog_id". Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
lordmuzer 743 Опубликовано 2 Ноября 2018 Поделиться Опубликовано 2 Ноября 2018 И Вам не хворать. В xml диалоги добавить тег <action> примерно вот так <phrase id="123"> <text>dialog_123</text> <action>dialogs.action</action> </phrase> где dialogs.action - function action(first_speaker, second_speaker, dialog_id, phrase_id) в файле dialogs.script Как то так? Ссылка на комментарий
AndreySol 215 Опубликовано 2 Ноября 2018 Поделиться Опубликовано 2 Ноября 2018 5 часов назад, Kirgudu сказал: Через нет-пакет. Вроде как story_id - свойство объекта "только для чтения". Сомнительно, что получится задать его простой правкой нет-пакета. В поясниловке к модулю Artos'а есть целый раздел об этом... Ссылка на комментарий
Graff46 598 Опубликовано 2 Ноября 2018 Поделиться Опубликовано 2 Ноября 2018 @AndreySol,@Змея, Можно и записывать. Если еспользуйте X-Ray extensions, то там есть отдельная ф-ция. Логику можно задать в секции НПС или нет-пакетом. Ссылка на комментарий
Kirgudu 1 255 Опубликовано 2 Ноября 2018 Поделиться Опубликовано 2 Ноября 2018 (изменено) @AndreySol, если порыться в самом модуле, можно увидеть, что свойство story_id входит в массив state свойств класса net_cse_alife_object. В то же время в классе net_cse_abstract есть position, direction и др. свойства, но вот именно story_id там нет. Думаю, значение story_id должно прекрасно устанавливаться без дополнительных плясок с бубном, требующихся при работе с абстрактной частью пакета. Мне кажется, что в сопроводиловке к модулю Артос просто описАлся. Но если я не прав - с удовольствием посыплю голову пеплом. В таком случае в той же сопроводиловке написано, как нужно действовать. 10 часов назад, Змея сказал: Как функцию спавна писать в скрипте? Я предложил почти готовый код спавна, в который надо только подставить нужные значения. Если угодно - обрамить дополнительно в функцию. Ну и подключить перед этим модуль, разумеется, а как это сделать - подробно написано в соответствующей теме и в документации к модулю. Помощь помощи рознь. Можно расжевать и положить в рот, а можно дать наводку и научить питаться самостоятельно. Предпочитаю делать второе. P.S. По логике: если брать мой пример выше, то содержимое кастом даты можно установить так: --... local data = pk:get() data.custom_data:setString("логика и проч.") --... Изменено 2 Ноября 2018 пользователем Kirgudu 1 Инструмент Ссылка на комментарий
dsh 3 824 Опубликовано 3 Ноября 2018 Поделиться Опубликовано 3 Ноября 2018 4 hours ago, Kirgudu said: Но если я не прав - с удовольствием посыплю голову пеплом. Прав, прав. story_id через нетпакет устанавливается. Единственное, что нужно помнить устанавливающим, что движок его зарегистрирует только при следующей загрузке сейва. Т.е. после сейв-лоада, ну или при переходе на другую локацию, что то же самое. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Zagolski 74 Опубликовано 3 Ноября 2018 Поделиться Опубликовано 3 Ноября 2018 А зачем заспавненному неписю вообще устанавливать story_id, зачем он ему нужен? 3 часа назад, dsh сказал: что движок его зарегистрирует только при следующей загрузке сейва Вроде даже при перезапуске игры. Ссылка на комментарий
dsh 3 824 Опубликовано 3 Ноября 2018 Поделиться Опубликовано 3 Ноября 2018 4 hours ago, Zagolski said: зачем заспавненному неписю вообще устанавливать story_id Например, что бы его потом по этому story_id найти и что нибудь с ним сделать. Или, что бы движок не удалил его трупик, если он будет долго лежать. А может ещё для чего, кто знает. 4 hours ago, Zagolski said: Вроде даже при перезапуске игры. Точно не только при перезапуске игры. Но это относится к оригинальному движку. В NLC, к примеру, понятия не имею, как оно будет, что там переписали и поменяли. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Okichi 922 Опубликовано 3 Ноября 2018 Поделиться Опубликовано 3 Ноября 2018 22 минуты назад, dsh сказал: NLC, к примеру, понятия не имею, как оно будет, что там переписали и поменяли. То же самое осталось. Присваиваем story_id - переходим на другую локацию ( или сохраняемся и грузим сэйв) - получаем непися с новоприсвоенным story_id След от кругов на воде - это тоже след (с) Ссылка на комментарий
Fenrir02 199 Опубликовано 3 Ноября 2018 Поделиться Опубликовано 3 Ноября 2018 Здравствуйте! Подскажите, какой функцией можно включать/выключать фонарик в X-Ray extensions? И как подключить коллбэк на изменение состояния фонарика? Важнейшая задача цивилизации - научить человека мыслить. Ссылка на комментарий
Graff46 598 Опубликовано 3 Ноября 2018 Поделиться Опубликовано 3 Ноября 2018 @Fenrir02, https://xray-engine.org/index.php?title=X-Ray_extensions Ссылка на комментарий
Fenrir02 199 Опубликовано 3 Ноября 2018 Поделиться Опубликовано 3 Ноября 2018 @Graff46, уже три раза перечитал эту статью. Не могу понять, как использовать эти функции: switch_torch(bool<switch_on>) -- переключает фонарь bool<is_on> is_torch_enabled() -- возвратит true, если фонарь включён Важнейшая задача цивилизации - научить человека мыслить. Ссылка на комментарий
Graff46 598 Опубликовано 3 Ноября 2018 Поделиться Опубликовано 3 Ноября 2018 @Fenrir02, Эти методы применимы к клиентскому объекту фонаря. db.actor:object('device_torch'):switch_torch( true или false) -- включить или выключить фонарик db.actor:object('device_torch'):is_torch_enabled() --Возвратит true или false в зависимости включен-ли фонарь 1 2 Ссылка на комментарий
_Sk8_AsTeR_ 122 Опубликовано 3 Ноября 2018 Поделиться Опубликовано 3 Ноября 2018 Доброго времени. У меня вот какой вопросик странный есть: возможно ли каким-то образом перебрать всех живых НПС и получить имя абсолютно случайного живого НПС? Ссылка на комментарий
naxac 2 477 Опубликовано 3 Ноября 2018 Поделиться Опубликовано 3 Ноября 2018 (изменено) @_Sk8_AsTeR_, можно так примерно (для онлайновых нпс): local obj local tbl = {} for i = 1, 65534 do obj = level.object_by_id( i ) if obj and isStalker( obj ) and obj:alive() then table.insert( tbl, obj:character_name() ) end end return tbl[ math.random( #tbl ) ] Либо по таблице db.storage пройтись. Для оффлайновых придется читать имя из их нет-пакета. Изменено 3 Ноября 2018 пользователем naxac Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Norman Eisenherz 322 Опубликовано 4 Ноября 2018 Поделиться Опубликовано 4 Ноября 2018 Здрасьте. Имеется массив: local nv_type = { ["bad"] = { ["price"] = 10*k, ["id"] = 911 }, ["good"] = { ["price"] = 25*k, ["id"] = 912 }, … ["bast"] = { ["price"] = 30*k, ["id"] = 918 } } Как, имея конечное значение определенной строки, получить ссылку с названиями секций, например "nv_type.good.id" для значения "912"? Простой поиск через "for key, value in pairs do" с возвратом имени ключа результата не дает (видимо, потому, что массив многоуровневый). Сразу уточню, построение массива наоборот ( [911] = { [type] = "good", [price] = 10*k }, …) не рассматривается. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Overfirst 637 Опубликовано 4 Ноября 2018 Поделиться Опубликовано 4 Ноября 2018 (изменено) print(nv_type["good"].id) -- печатать фиксированный элемент for k, v in pairs(nv_type) do -- печатать всё print(nv_type[k].id) end Что-то такое? Изменено 4 Ноября 2018 пользователем Overfirst Ранее был известен под ником BoBaH_671. Ссылка на комментарий
Norman Eisenherz 322 Опубликовано 4 Ноября 2018 Поделиться Опубликовано 4 Ноября 2018 Я вот так делаю Spoiler local result = "" for i, v in pairs(nv_type) do if v == choice then result = i else result = "nope" end end db.actor:give_talk_message(result, task_texture, task_rect, "iconed_trade_info") и получаю сообщение "nope". Как эту функцию перестроить, чтобы получить номер главной секции ("good") по значению входящего ключа ("id" = 911)? Примечание: choice = номер фразы в диалоге, 911…918. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Overfirst 637 Опубликовано 4 Ноября 2018 Поделиться Опубликовано 4 Ноября 2018 (изменено) local nv_type = { ["bad"] = { ["price"] = 10*k, ["id"] = 911 }, ["good"] = { ["price"] = 25*k, ["id"] = 912 }, ["bast"] = { ["price"] = 30*k, ["id"] = 918 } } function get(choice) local result = "nope" for k, v in pairs(nv_type) do if nv_type[k].id == choice then result = k break end end return result end PS: мне уже надоело редачить посты, чтобы исправлять табуляцию. Я ставлю одну, в посте их оказывается две. Сделал пробелами. Что я делаю не так? Изменено 4 Ноября 2018 пользователем Overfirst Ранее был известен под ником BoBaH_671. Ссылка на комментарий
Kirgudu 1 255 Опубликовано 4 Ноября 2018 Поделиться Опубликовано 4 Ноября 2018 @Overfirst, твой пример можно сделать ещё проще, без повторного поиска в массиве: --... if v.id == choice then --... А про табуляции отпиши в "вопросы и предложения", сюда админы могут и не заходить. 1 Инструмент Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти