Norman Eisenherz 320 Опубликовано 3 Октября 2022 12 hours ago, Houdini_one said: Возьми с оригинала какой-то скрипт, скопируй, переименуй как надо, удали содержимое и вставь своё - должно работать. Кодировку можно сменить несколько проще: в любом своем файле вырезать весь текст, выбрать в настройках файла ANSI, вставить текст обратно. @Orсhello Как раз по таблице "костюм = перчатки" проще сопоставлять, и код нагляднее, чем if … then … elseif … then под каждую пару. 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 320 Опубликовано 3 Октября 2022 @alex5773 Если речь о переносах строк, то, например, Akelpad их распознает правильно. По форматированию это тот же "блокнот", только с настройками цвета и прочих параметров, не влияющих на сам текст. Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 320 Опубликовано 3 Октября 2022 @Hind 1. Поймать нажатие клавиши можно через кейлоггер (вики stalkerin, "Интересный способ привязки скриптов" или как-то так). 2. Можно привязаться к самому действию "сохранение": [bind_stalker.script] actor_binder:save(). 3. Callback "on_key_press" в оригинале ТЧ не существует (в логе "ошибка вывода ошибки"). Полный список доступных событий: [lua_help.script] class_callback. 4. Если мод "Золотой шар: завершение", то там движок OGSR. 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 320 Опубликовано 4 Октября 2022 32 minutes ago, Houdini_one said: Скрипт level.tasks В ЗП есть аналогичная таблица в [jump_level.script] и обработчик "найти активную карту, переместиться на сопоставленную с ней следующую карту или на Затон, после чего выйти из игры". В ЧН такая же схема, только реализованная через if … elseif … вместо таблицы. В обоих случаях флаг need_jump не выставляется в положение true ни в скриптах, ни в движке. Возможно, это предрелизный тест стабильности прогрузки локаций. Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 320 Опубликовано 5 Октября 2022 1. Пока нет активации через флаг или инфо, это просто старый тестовый код. Даже при наличии такой активации надо еще разлочить команду для "прыжков" по картам – если не нарушать синтаксис файла, игра никак не реагирует на удаление частей скрипта. 2. Сброс предмета: db.actor:drop_item(ссылка на объект). Состояние "предмет не берется" можно поменять через нетпакеты, но обработка кучи мелких расходников может заметно затормозить игру. Можно создать список id сброшенных предметов и скидывать их снова через событие actor_binder:on_item_take(obj), если разрешение не получено. В этом случае придется заносить список в pstor для переноса через сейв/загрузку, что при большом количестве предметов может и переполнить pstor (8 кб). Нельзя ли обойтись более простой схемой работы, с перемещением предметов в коробку или сбросом только некоторых предметов? Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 320 Опубликовано 5 Октября 2022 Можно отобрать управление через level.disable_input(), потом по таймеру скидывать предметы раз в секунду или еще как-то, в конце процесса выставить ГГ за дверь и включить телепорт, который будет откидывать ГГ чуть назад, ну или саму дверь сделать неинтерактивной. Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 320 Опубликовано 5 Октября 2022 @Houdini_one 1. Нетпакет проще всего редактировать через подключаемый модуль [m_netpk.script] от Артоса. Флаг "можно брать" хранится в нетпакете по пути data.object_flags + Interactive. Пример действий для сброса флага: Spoiler function clear_useful_for_ai( sobj ) local pk = get_netpk( sobj, 1) -- [m_netpk] прочитать нетпакет local data = pk:get() -- [m_netpk] вывести данные в таблицу data.object_flags = bit_xor( data.object_flags, 8 ) -- двоичное сравнение и сброс флага "интерактивно" на 0 (позиция 8 или 2^3 справа налево: …1xxx или …0xxx –> …0xxx) ) data.object_flags = bit_or( data.object_flags, 8 ) -- то же для поднятия флага при любых исходных значениях pk:set( data ) -- [m_netpk] записать данные в нетпакет по измененной таблице end 2. Взятие и активация водки: actor_binder:on_item_take(obj) + db.actor:eat(obj) с проверкой "водка в заданной комнате" или "водка с известным id". Для начала, найди и подключи [m_netpk.script] и попытайся сделать один предмет неактивным. Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 320 Опубликовано 5 Октября 2022 1. Какая именно часть вызывает вопросы: чтение, запись, редактирование значений? Если интересует порядок значений, можно сделать pk:dumpDesc() и отправить полученный текст в сообщение. 2. Это был вариант для transfer_item – в варианте drop_item ГГ указывается только один раз. Проверка на перезапуск (bolt + restart) тоже не требуется. 3. Для тестов можно сделать триггер через расход бинта в actor_binder:use_inventory_item(obj), либо через нажатие клавиши в главном меню – [ui_main_menu.script]. Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 320 Опубликовано 5 Октября 2022 Кажется, есть решение: расширенная скриптовая база OGSR. В файле [_g.script] должны быть обработчики set_item_untakeable( item ) и set_item_takeable( item ), которые через дополнительные флаги состояния позволяют управлять статусом предмета. Примерно так: local obj = db.actor:object(…) set_item_untakeable(obj) Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 320 Опубликовано 5 Октября 2022 (изменено) Простой поиск через Ctlr+F в указанном файле не дает совпадений? Строка 1204. Изменено 5 Октября 2022 пользователем Norman Eisenherz Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 320 Опубликовано 5 Октября 2022 Что же у меня за версия тогда? И в OGSE, и в OGSR обработчики флагов состояния есть. Тогда попробуй просто вызвать метод set_item_untakeable(obj) со ссылкой на существующий объект – если библиотека xrgame.dll изменена, игра должна знать такую конструкцию. Ссылки с фразой global_flags в [_g.script] есть? Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 320 Опубликовано 5 Октября 2022 Попробуй так: на загрузке один предмет должен вывалиться и стать неактивным. Spoiler [bind_stalker.script] (+) выше апдейта function set_item_untakeable( item ) local f = item:get_inventory_item_flags() f:set( global_flags.FCanTake, false ) -- или f:set(1, false) item:set_inventory_item_flags( f ) end function actor_binder:update(delta) object_binder.update(self, delta) (+) if not flag then flag = true local obj = db.actor:object("medkit") -- можно любой другой предмет if obj then db.actor:drop_item(obj) -- проверить сброс, раскомментировать следующую строку, перезагрузиться -- set_obj_untakeable(obj) end end Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 320 Опубликовано 6 Октября 2022 @Houdini_one Не та ссылка в апдейте: должно быть set_item_untakeable(obj), как и в описании выше. Моя невнимательность. Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 320 Опубликовано 6 Октября 2022 Ну, теперь надо отработать ситуацию "вход в комнату – водка неактивна – триггер – водка активна". Для начала, можно добавить следующий код в [_g.script] для глобального вызова: Spoiler function set_item_untakeable( item ) local f = item:get_inventory_item_flags() f:set( global_flags.FCanTake, false ) item:set_inventory_item_flags( f ) end function set_item_takeable( item ) local f = item:get_inventory_item_flags() f:set( global_flags.FCanTake, true ) item:set_inventory_item_flags( f ) end Я на расстоянии только отдельные подсказки могу дать, так что или ковыряй скрипты, или ищи кого-то с уставленным движком OGSR именно твоей версии. Замахиваться сразу на сложные моды, конечно, похвально, но это не решается за 10 строк кода. 2 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 320 Опубликовано 9 Октября 2022 (изменено) Дату и время начала игры см. в конце файла [config\alife.cfg] Изменено 9 Октября 2022 пользователем Norman Eisenherz Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 320 Опубликовано 13 Октября 2022 @Hind level.get_time_minutes() / _hours() / _days() + проверка через какой-нибудь "естественный" триггер, вроде обращения к карте (проверка через апдейт будет слишком частой). Карту можно проверять через actor_binder:info_callback и там же выдавать свой инфо-поршень, если время пришло. В ЧН примерно так работают ночные торговцы на барахолке. 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 320 Опубликовано 14 Октября 2022 @андрей дронав Во втором варианте некролога несколько лишних end или не до конца "обернутая" часть обработчика – подсветка синтаксиса в помощь, ну или хотя бы табуляция "ёлочкой" для отслеживания начала и конца каждого блока. Первый вариант работает как есть – проверял через битву на АТП. Может, вызов не добавлен в [xr_motivator.script] death_callback? Еще в первом варианте сильно "ленивый" код: • вместо повторяющейся проверки is victim можно сразу сделать выход if not victim then return end • варианты killer можно сгруппировать так: по умолчанию "data error", дальше проверка на суицид, сталкера и мутанта (с дополнительной группировкой "общая часть условия > вариант / остаток > итог"), в конце проверка по таблице "если в строке найден ключ часть секции аномалии, подставить значение перевод названия" • по-хорошему, переведенные названия мутантов и аномалий надо не прописывать в скрипте вручную, а читать из конфигов по ссылке who:section() • ну и еще первую таблицу желательно вынести за обработчик, чтобы она заносилась в память один раз при подгрузке скрипта, а не при каждом вызове обработчика 1 3 Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 320 Опубликовано 14 Октября 2022 @андрей дронав В ЧН/ЗП в give_game_news добавляется еще один текстовый аргумент – заголовок (первый), в остальном формат тот же. По коду: именно ошибок нет, только повторяющиеся действия, которые можно собрать воедино. 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 320 Опубликовано 16 Октября 2022 @Купер Можно пояснение? Если я правильно понял, выражение означает "если перед New Line нет Carriage Return, то добавить такой спецсимвол". 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение
Norman Eisenherz 320 Опубликовано 17 Октября 2022 @Houdini_one Уменьшил эти самые значения в [monsters.ltx], и трупы сталкеров тоже перестали скапливаться (множественные тесты на Кордоне под мостом и вблизи перехода). Мини-моды: ТЧ ЧН ЗП Шпаргалка Поделиться этим сообщением Ссылка на сообщение