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/
Viнt@rь 50 Опубликовано 9 Ноября 2012 Поделиться Опубликовано 9 Ноября 2012 (изменено) (ЗП)Нужно добавить текст в текстовое поле(CUITextWnd) ... self.dList = cXml:InitTextWnd("dialog:func_text",self.oDialog) self:Register(self.dList, "func_text") ... -- добавляю self.dList:SetText(self.dList:GetText()..sText .. "\\n") по идее так оно должно переносить "каретку" на строку ниже, но... в итоге получаю что то типо "фывфы \n" ЗЫ смотрел как сделано в ui_load_dialog.script (функция file_data(fname)), и делал так же, там все ок, у меня нет... ЗЫЫ "\n" тоже не катит... правда символ сам не выводит, но и строку не переносит Изменено 9 Ноября 2012 пользователем Viнt@rь Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/240/#findComment-740867
Charsi 441 Опубликовано 9 Ноября 2012 Поделиться Опубликовано 9 Ноября 2012 Viнt@rь, задай в конфиге текстового поля параметр complex_mode="1" либо используй метод SetTextComplexMode(boolean). 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/240/#findComment-740876
Artos 99 Опубликовано 9 Ноября 2012 Поделиться Опубликовано 9 Ноября 2012 (изменено) Viнt@rь, вопрос уже неоднократно обсуждался на различных форумах. Не нужно ожидать от каждого оконного класса то, что присуще другому классу... Распарсивание строк текста заложено не в классы, а выполняется движком для тех классов, которые прописали разработчики (коряво пояснил, но надеюсь смысл понятен...). Так что остается только или делить самому свою строку на куски и выводить в отдельных окошечках или применять соотв.классы (если такое возможно). В примере из ui_load_dialog.script используется класс CScriptXmlInit, т.е. класс, которому прописан наиболее полный функционал/методы. Charsi, параметр complex_mode="1" иль метод SetTextComplexMode(boolean) задают режим (не)переноса строки по мере ее заполнения (по переполнению), а не по знакам "перевода каретки" (\n), т.е. "указать" где делать перенос строки не удастся. P.S. Возможно ошибся, подзабыв что-то, но ... вероятно в этом повинно твое (Viнt@rь) упоминие в вопросе именно класса CUITextWnd (большинство именно скриптовых классов не парсят текст по переносам), а на самом деле используешь тот же CScriptXmlInit. Изменено 9 Ноября 2012 пользователем Artos Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/240/#findComment-740881
Viнt@rь 50 Опубликовано 9 Ноября 2012 Поделиться Опубликовано 9 Ноября 2012 (изменено) Artos, ошибаешься))) все получилось) и перенесло, когда я добавил в тег complex_mode="1" Хотя если делать с использованием SetTextComplexMode(boolean), то ничего не меняется а на самом деле используешь тот же CScriptXmlInit. да, скорей всего ты прав, я забыл дописать local oCXml = CScriptXmlInit() ... self.dList = oCXml:InitTextWnd("dialog:func_text",self.oDialog) -- но все же это создается обьект класса CUITextWnd self:Register(self.dList, "func_text") ... Изменено 9 Ноября 2012 пользователем Viнt@rь Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/240/#findComment-740898
Artos 99 Опубликовано 9 Ноября 2012 Поделиться Опубликовано 9 Ноября 2012 (изменено) Viнt@rь, объект-то окажется от схожего классу CUITextWnd, но он то в твоем и случае "от родителя" и унаследует родительские свойства, т.е. возможность читать xml-тэги из шаблона, а не только скриптовые методы. И мог бы воспользоваться и поиском: #2742 и далее... Изменено 9 Ноября 2012 пользователем Artos Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/240/#findComment-740904
*Shoker* 322 Опубликовано 12 Ноября 2012 Поделиться Опубликовано 12 Ноября 2012 (изменено) Никто не знает, можно ли как то в скриптах в моменте сохранения игры отловить название сейв-файла (*.sav) куда будет произведено сохранение? Зарание спасибо. Есть ли способ в скриптах в момент сохранения узнать имя *sav-файла, то-есть имя файла с сохранением? И ещё вопрос на стыке нескольких тем, но кто нибудь пробовал играть у трупов НПС простые анимации, но чтобы при этом рэгдол ещё работал? Изменено 12 Ноября 2012 пользователем *Shoker* Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/240/#findComment-741343
Artos 99 Опубликовано 12 Ноября 2012 Поделиться Опубликовано 12 Ноября 2012 (изменено) *Shoker*, любое сохранение в игре вызывается консольной командой: get_console():execute("save " .. fileName) - где fileName и есть имя файла (вместе с расширением) сохраняемой игры. "Штатный" вызов находится в ui_save_dialog.script (см. save_dialog:SaveFile(fileName)) и в ТЧ достаточно оттуда получать требуемое имя. Для ЧН и ЗП придется залезть еще в пару.скриптов, т.к. есть "сюжетные" вызовы из xr_effects.script (см. scenario_autosave) и jump_level.script (см. try_to_jump) - поэтому придется и туда вставлять свои строки, чтобы получать требуемое имя. Также, расширение для cэйвов задается в ui_load_dialog.script (см. saved_game_extension), и следует учитывать, что в том же ЗП оно уже не *.sav, а *.scop. Естественно, ничто не мешает в модах изменять расширение для сэйвов на "свое" и/или организовывать свои вызовы для создания сохранений, поэтому тут уже, если потребно, придется подстраиваться... Примечание: При необходимости, следует так же учитывать, что игрок, открыв консоль, может "ручками" отдать команду на сохранение, задав любое удобное ему имя. В таком случае только парсинг лога может помочь узнать имя созданного сохранения, но сам момент - будет упущен. .P.S. Для трупов сразу же по сути полностью отключается менеджер состояния тела (state_mgr.script) и соответственно все анимации. Тут, если конечно и сам движок не блокирует все и вся, если только перелопачивать сам state_mgr и его производные (state_mgr_animstate.script, ...), Однако зачем такие "опыты"? Воскрешение трупов и превращение их, например, в зомби (ходячие трупы) - давно доступно... Изменено 12 Ноября 2012 пользователем Artos Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/240/#findComment-741351
Malandrinus 615 Опубликовано 12 Ноября 2012 Поделиться Опубликовано 12 Ноября 2012 Artos, к сожалению, быстрое сохранение так не отловить. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/240/#findComment-741374
Artos 99 Опубликовано 12 Ноября 2012 Поделиться Опубликовано 12 Ноября 2012 (изменено) malandrinus, ну алгоритм то по "отлову" имени конечно чуть посложнее должен быть, и вполне можно и квик-сэйвы отлавливать. Любой момент сохранения отлавливается в биндере актора (в соотв.методе) и, если имя для сэйва не получено из выше указанных мест/скриптов - то остается только либо квик-сэйв (user_name().."_quicksave"..saved_game_extension), либо "ручками" задано. К сожалению, в вопросе нет ни намека на цель подобного отлова имени... и если уж очень нужно и позволительно чуть позже чем "в момент сохранения" - то парсинг лог-файла всегда позволит заполучить имя. Примечание: если даже и "штатный" лог-файл игрок захочет отключить - можно и в "свой" писать... ;-) Изменено 12 Ноября 2012 пользователем Artos Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/240/#findComment-741375
*Shoker* 322 Опубликовано 12 Ноября 2012 Поделиться Опубликовано 12 Ноября 2012 (изменено) Оффтоп: Это нормально что форум в окно ответа вместе с текстом копирует элементы сайта? Не могу даже ник выделить без копирования фона (!) сайта. malandrinus правильно сказал по поводу быстрых сохранений, не стоит ещё забывать и автосейв и прочее. Я просто расчитывал что может быть имя сейва хранится в нэт-пакете, передаваемом в скрипты. Вариант про парсинг лога был, но он не совсем подходит, т.к узнать имя файла нужно прямо в момент сохранения а не до\после. Вообщем ладно, я уже отказался от этой затеи, было просто интересно узнать ответ. Вообще сейчас делаю хранилище для записи\загрузки значений во время сохранения, сперва думал доделать старую систему записи в текстовый файл и для этого хотелось получать имя сохранения (сейчас у меня имя текстового файла - случайный набор чисел). Но щас пробую адаптировать систему записи в custom_object, которую тут давно уже обсуждали. Просто с ней возни больше. По поводу трупов и анимаций была идея через них сделать отрывание конечностей при смерти у персонажей. (через анимации скрывать нужный участок тела персонажа и спавнить на это место "мясо") Через подмену моделей будет слишком много возни. Изменено 12 Ноября 2012 пользователем *Shoker* Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/240/#findComment-741395
Malandrinus 615 Опубликовано 12 Ноября 2012 Поделиться Опубликовано 12 Ноября 2012 Shoker, Так при чём здесь анимации? Тебе кости надо скрывать/показывать. Вот только настраивать визуалы всех неписей - работёнка та ещё. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/240/#findComment-741396
Artos 99 Опубликовано 12 Ноября 2012 Поделиться Опубликовано 12 Ноября 2012 (изменено) *Shoker*, (маленькая ремарка) - "не стоит ещё забывать и автосейв и прочее" полностью подпадает под уже выше описанное, т.е. под "штатный" вариант создания сэйвов. Ну а про форумный копипаст - это так у всех ;-), твой броузер вместе с движком форума копипастят со всеми тэгами и вытворяют с ними что им вздумается... Если так уж хочется скопипастить - делай, например, через тот же блокнот, т.е. скопированное вставляешь в блокнот и оттуда, уже без тэгов, копипастишь "очищенный" текст. Иль, если браузер позволяет - выбирай в меню "скопировать как текст..." Изменено 12 Ноября 2012 пользователем Artos Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/240/#findComment-741399
*Shoker* 322 Опубликовано 12 Ноября 2012 Поделиться Опубликовано 12 Ноября 2012 (изменено) Shoker, Так при чём здесь анимации? Тебе кости надо скрывать/показывать. Вот только настраивать визуалы всех неписей - работёнка та ещё. Штатного метода вроде нет же, а модифицировать движок тоже не представляется возможным. + при скрытии костей ведь геометрия тоже пропадёт и в теле НПС будет дырка, а анимацией это эту дырку можно "сшить" Изменено 12 Ноября 2012 пользователем *Shoker* Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/240/#findComment-741408
Artos 99 Опубликовано 12 Ноября 2012 Поделиться Опубликовано 12 Ноября 2012 Shoker*, вообще в контексте игры - Анимация — процесс придания способности двигаться и/или видимости жизни объектам и мёртвым телам (например, зомби — анимированный труп), поэтому совершенно не понятно как "мясо" может анимировать и "анимацией сшивать дырки"...Учитывая твое пояснение... и то, что это уже никаким боком не относится к теме топика (скриптам), предлагаю, дальнейшее (если оно будет) перенести в топик ... типа ковырялок Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/240/#findComment-741415
Malandrinus 615 Опубликовано 12 Ноября 2012 Поделиться Опубликовано 12 Ноября 2012 Shoker, а модифицировать движок тоже не представляется возможным. эм.. Религия не позволяет? =) Для ТЧ уже есть такие возможности. Не помню только, делал их для оружия или для любого объекта. Однако, при желании эту правку можно откопать и задействовать. + при скрытии костей ведь геометрия тоже пропадёт и в теле НПС будет дырка, а анимацией это эту дырку можно "сшить" Теоретически да, если движок поддерживает не скелетную анимацию, в чём я не уверен. По моему не поддерживает. Чисто же движением костей ты такого эффекта не добьёшься. Со скрытием костей же всё просто. Одну кость скрыть, другую показать (которая дыру заткнёт), Хотя это всё конечно в теории. На практике придётся менять все стопятьсот моделей сталкеров. Вот поэтому такие фишки обычно присутствуют в играх, где тела неписей отдельно, а одежда отдельно. В движке третьего фола к примеру. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/240/#findComment-741447
Artos 99 Опубликовано 12 Ноября 2012 Поделиться Опубликовано 12 Ноября 2012 (изменено) malandrinus, не хотелось бы поддерживать уже начавшийся оффтопик, но не удержусь от реплики, поэтому скрою спойлером: Учитывая желание *Shoker*'а: "идея через них сделать отрывание конечностей при смерти у персонажей" - то сокрытие одной кости у модели и показ другой, как раз не решит задачу. Очевидно требуется не подменять одну кость на другую, а именно скрывать "оторванную" и, не показывать другую кость модели, а на месте "скрытой" кости показывать "оторванный" от модели объект (заспавненный) с таким же видом как и скрытая кость . Именно тогда можно будет именно "оторвать", и, судя по упоминанию о "рэгдол" в вопросе, вероятно, еще хотСа, чтобы эти оторванные конечности в суставах "анимировали"... ;-) Примечание: как бы ресурс АМК не забанили бы (не включили в черный список) ... за обсуждение способов создания расчлененок и т.п. Изменено 12 Ноября 2012 пользователем ColR_iT Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/240/#findComment-741454
Malandrinus 615 Опубликовано 12 Ноября 2012 Поделиться Опубликовано 12 Ноября 2012 Artos, ну если уж уважаемые конторы, типа Беседки, озаботились созданием расчленёнки, то почему бы и нем не побеседовать на эту тему? =) Вообще конечно задачу можно решить по-разному. Можно было бы попытаться что-то покрутить с разрушаемыми объектами. Т.е. подменить объект при смерти на разрушаемый с визуалом сталкера. Но тогда пропадёт инвентарь. Если же сформулировать решение с костями полностью. Мы в этом случае естественно имитируем процесс. Для решения общей задачи надо решить две подзадачи: 1. Надо убрать оторванную конечность. Это как раз и решается с помощью костей. Кость руки, к примеру, скрывается, а на её месте показывается кость с обрубком. 2. Надо создать отдельный объект конечности на уровне. Это естественно уже к костям отношения не имеет. P.S.: хотя лично мне эта фишка с расчленёнкой всегда казалась сомнительной Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/240/#findComment-741465
Artos 99 Опубликовано 12 Ноября 2012 Поделиться Опубликовано 12 Ноября 2012 (изменено) malandrinus, Про "бан" я конечно пошутил, но ... дело не в том что кто-то где-то тоже подобное обсуждает, а в том, что с 1-го числа этого месяца заработал закон (см. о черных списках Роскомнадзора) и... судя по тому как и с кем это уже "срабатывает" - в шутке может оказаться и частица предвидения. ;-) Крупнейший российский торрент-трекер Rutracker.org попал в черный список Роскомнадзора. Как сообщается в блоге файлообменника, владельцы ресурса получили уведомление, что на одной из страниц находится запрещенная информация, которую нужно удалить в течение суток. Речь идет о раздаче «Энциклопедии суицида». В сообщении Rutracker говорится, что эта раздача была удалена, о чем уведомили Роскомнадзор. Однако электронное письмо вернулось с пометкой rejected (отклонено). За минувший день Rutracker стал уже третьим популярным сайтом, попавшим под прицел Роскомнадзора. Ранее в черный список попала интернет-энциклопедия «Луркоморье» и онлайн-библиотека «Либрусек». В обоих случаях это было сделано по запросу ФСКН. Наркополицейские нашли на этих сайтах пропаганду наркотиков. Владельцы «Луркоморья» согласились убрать спорную статью. НТВ.Ru напоминает: с 1 ноября Роскомнадзор запустил сайт zapret-info.gov.ru. Там составляется список интернет-ресурсов, уличенных в пропаганде наркотиков и самоубийств и распространении детского порно. Если сайт после уведомления не удалит запрещенную информацию, его заблокируют без решения суда. И тоже, считаю сомнительным интерес к созданию подобных "фишек" в модах, и мне малоинтересен. И даже более, считаю моддмейкеров занимающихся подобным - самопиарщиками не брезгающими любыми способами, т.к. немало т.н. фанатов будут "кипятком писать" и восторженно визжать, если им дать в игру подобное. :-( P.S. Кстати, спасибо за невольную наводку, может и пригодится. Твои слова "Но тогда пропадёт инвентарь" попробовал, по своей дурной привычке, проанализировать и... Вспомнилось, что у монстров после сэйва "инвентарь" то сохраняется, но - пустой, т.е. все что в него было заспавнено - исчезает, а порою хотелось бы обратного. А, вот если по месту трупа монстра (иль подмененного на разрушаемый объект) спавнить фейковый невидимый ящик с настройками, чтобы говорил о себе что "это труп монстра" - то в него можно и перекладывать и хранить. Т.е. можно с достаточным приближением имитировать, что валяется именно труп и именно с инвентарем, ну и т.д. в зависимости от др.задач... И вот тут уже, учитывая что и в оригинале спавнятся ("отрываются") копыта, глаза иль иное - расчлененка может быть чуток и подкреплена манипуляциями по скрытию костей. Изменено 12 Ноября 2012 пользователем Artos Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/240/#findComment-741468
_Призрак_ 11 Опубликовано 12 Ноября 2012 Поделиться Опубликовано 12 Ноября 2012 Возвращаясь к вопросу о получении имени сохранения. Есть способ проще. Даже два. 1) Мы можем сохраниться двумя способами - через меню или через консоль/квик_сейв. Через меню мы можем отследить (как это сделать все понятно надеюсь). А в игре можно попробовать отследить статик, который показывается после сохранения - на нем как раз написано имя сохранения. Сложность алгоритма минимальна 2) Можно при старте игра при помощи FS класса считать все файлы в папке saves (точнее считать имена файлов и дату изменения). Как только мы в биндере актора происходит вызов метода save() то мы взводим флаг и на следующем апгрейде опять просматриваем папку с сохраниениями на предмет изменений. Сложность алгоритма зависит от количества файлов в папке Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/240/#findComment-741469
Artos 99 Опубликовано 12 Ноября 2012 Поделиться Опубликовано 12 Ноября 2012 _Призрак_, хотя автору вопроса уже вероятно не интересно, но замечу, чтобы кто-то на грабли не наступал: Имеется основной недостаток как у отлова по кастом-статику, так и по чтению файлов из папки сэйвов - оба метода пост-фактум, т.е. не в момент создания сэйва, а уже после него. Если подразумевается в сам сэйв (куда-то в переменные) записывать его имя или сразу в игре что-то от него зависит - то оба предложенных способа уже бесполезны. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/240/#findComment-741475
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти