Kirgudu 1 264 Опубликовано 22 Мая 2015 (изменено) , on_value при type = dec срабатывает, если текущее значение меньше или равно установленного (соответственно, при type = inc - если больше или равно). Поскольку схема продолжает работать вплоть до значения счётчика, равного нулю, звук запускается при каждой проверке. Чтобы этого избежать, можно добавить дополнительное блокирующее условие, например выдачу инфопорции при первом проигрыше и проверку наличия этой инфопорции. Примерно так (судя по скриптам, должно работать): on_value = 9000 | {-stop_breath} %=play_snd(actor\breath_1) +stop_breath% | 0 | nil %=aes_kill_actor% А хотя нет, там будет чуть сложнее. Надо, чтобы он дышал постоянно, но не часто. Тут надо подумать, но направление мыслей я тебе дал. Изменено 22 Мая 2015 пользователем Kirgudu Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 264 Опубликовано 29 Июня 2015 (изменено) @GFMan, Заводской game_relations.ltx: [game_relations] ;реальное разделение на группы репутаций на шкалы rating = novice, 300, experienced, 600, veteran, 900, master ...Изменённый spawn_sections.ltx, первая же секция и аналогичным образом дальше: [agr_stalker_regular]:stalker ... spec_rank = regular ...Я бы на это грешил. Изменено 29 Июня 2015 пользователем Kirgudu 1 Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 264 Опубликовано 4 Июля 2015 @NL-Vincenz, тебе Карлан выше уже ответил. Поищи в имеющихся конфигах секцию meet, где есть настройка use = self или use_wpn = self и посмотри, как там это сделано. Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 264 Опубликовано 11 Августа 2015 Не подскажете, как можно заспавнить оружие через alife():create, но только без патронов? local unload_magazine = function(id, obj) obj:unload_magazine() end local sobj = alife():create("секция_оружия", vector(), 0, 0, db.actor:id()) if sobj then level.client_spawn_manager():add(sobj.id, db.actor:id(), unload_magazine) end 1 1 Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 264 Опубликовано 11 Августа 2015 (изменено) @NonGrande, почти так. obj:unload_magazine() - обнуляет кол-во патронов в уже заспавненном оружии (патроны при этом теряются; если надо их положить рядом, следует использовать дополнительный спавн пачки патронов). Аналогом является метод obj:set_ammo_elapsed(0). if sobj then - если серверный объект существует (спавн прошёл успешно). level.client_spawn_manager():add(...) - добавляем коллбэк на выход нашего заспавненного оружия в онлайн (появление клиентского объекта). Как только оружие будет в онлайне, автоматически сработает коллбэк, то есть объявленная для этого ранее функция unload_magazine(). А вообще, все необходимые сведения есть тут, на форуме - см. описание использованных функций, например, в теме «справочник по функциям и классам». Изменено 11 Августа 2015 пользователем Kirgudu 2 Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 264 Опубликовано 20 Августа 2015 (изменено) @Карлан, @abramcumner, @UnLoaded, вся дискуссия про спавн и координаты перенесена в «Курилку программистов». Изменено 20 Августа 2015 пользователем Kirgudu 1 Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 264 Опубликовано 21 Августа 2015 Уважаемые - по поводу проблемы с подствольником - это может кто-то подтвердить или это только моя проблема? @Winsor, насколько я помню, просто так управлять неактивным типом зарядов с помощью update-части нет-пакета не получится. Если не ошибаюсь, тут надо рыть в сторону абстрактной части, причём оперировать ею будет несколько сложнее, так как она доступна только во время исполнения метода STATE_Write для серверного объекта (этот метод должен быть вызван движком, а не скриптом, то есть, по сути, для этого доступен только один момент - выход объекта в онлайн, когда клиентский объект считывает из движкового нет-пакета свои данные. Вот тогда абстрактную часть и можно прочитать и изменить). Детали можно найти поиском в обсуждениях двух-трёхлетней давности, например кое-какая косвенная информация есть здесь. 1 Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 264 Опубликовано 21 Августа 2015 @Winsor, в оригинале этой проблемы нет, так как разрабам игры не было необходимости править таким образом нет-пакеты из скрипта. Я же написал, что следует сделать - пощупать abstract-часть нетпакета. Естественно, с ней работали - см. мою ссылку, да и поиск на форуме работает, - но из тех, кто есть сейчас на форуме, вряд ли кто-то этим так уж заморачивался (я конкретно про тип зарядов). Попробуй ты, посмотри, что там есть, как можно менять, какой эффект, и отпиши здесь результат. Может, я вообще ошибаюсь, и рыть надо в другом месте. Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 264 Опубликовано 17 Сентября 2015 Собственно ставиться задача, сделать спавн предмета по условию. Как вариант: http://www.amk-team.ru/forum/index.php?showtopic=7450&page=23#entry803687 Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 264 Опубликовано 18 Сентября 2015 @Вспышка, емнип, 50, 75 - минимум и максимум аномалий для спавна, 400 - максимум аномалий на локации. 1 Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 264 Опубликовано 31 Октября 2015 По-хорошему, ответить на вопрос должен был бы кто-нибудь из знатоков NLC, но что поделать. sak_off_corpses - это полностью самостоятельный уборщик, который надо вызвать один раз при каждой загрузке. Соответственно, на наличие/отсутствие каких-либо специфических строк обращать внимание не нужно, инструкция в этом плане некорректна. Достаточно поместить строку sak_off_corpses.off_corpses() например, в самом конце функции actor_binder:net_spawn(data) оригинального модуля bind_stalker.script, перед закрывающим end. На сам уборщик из NLC 6 я посмотрел впервые в жизни. Да не обидятся на меня апологеты NLC, но... извините, это тихий ужас. Цикл до 65535, внутри него такой же цикл второго уровня, многоэтажные «If»... Чур меня, пусть дальше в этом разбираются другие. Ещё раз извините. 1 1 1 Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 264 Опубликовано 11 Ноября 2015 Исчерпывающий ответ уже дал @UnLoaded в этом посте. Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 264 Опубликовано 15 Августа 2016 @Silver Raven, on_actor_inside = ... on_actor_inside2 = ... on_actor_inside3 = ... ... Но не всегда такое разделение будет равнозначным - зависит от конкретной логики. Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 264 Опубликовано 27 Сентября 2016 (изменено) @dPlayer, возможно ошибаюсь, так как с SoC не работал, но не требуется ли указание нового xml в "config\localization.ltx"? Или в "config\text\rus\string_table_includes.xml". Изменено 27 Сентября 2016 пользователем Kirgudu Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 264 Опубликовано 27 Октября 2016 @Badmodst74, math.randomseed(device():time_global()) obj:set_condition(math.random()) 1 Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 264 Опубликовано 27 Октября 2016 @Badmodst74, вопрос из разряда "У меня автомобиль не заводится. Как завести?" с количеством потенциальных ответов, приближающимся к бесконечности; всегда такие нравились. Но телепаты традиционно в отпуске. Судя по знакомому коду, эта функция из мода типа AMK или OGSM и предназначена для срабатывания по истечении таймера определённого типа ("otf"). Таймер запускал? Id конкретного предмета ему передал? Никому, кроме тебя, сие не известно. А проще всего будет поискать в модулях своей сборки места использования метода set_condition(...) (легко делается разными средствами, например TC) и там, где оно явно связано с установкой состояния брони, заменить расчёт аргумента на простой math.random(), как предложено в примере выше. Сложности в этом нет никакой, вполне можно справиться самостоятельно. Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 264 Опубликовано 8 Ноября 2016 (изменено) @ins33, судя по всему, модуль таймеров или объединённый комплект модулей Artos-а взят из моего поста в теме «Сборочный цех»? Всё там есть, просто не надо делать скоропалительных выводов. Скрипт test_modules.script действительно содержит неточность и указывает на отсутствие интеграции в методе actor_binder:__init вместо actor_binder:__reinit - это я в архиве поправлю. В то же время изменение actor_binder:__init также требуется - это ясно видно из содержимого файла bind_stalker_ADD.script из комплекта подключения. Если говорить конкретно, блок if event then ... elseif ... end нужен, так как запускает первичный расчёт вертексов и некоторых других полезных переменных. Комментировать его не надо, иначе при проверке как раз возникнет вторая ошибка из поста выше. А вот на эти строчки из первого куска лога lua_helper:fGet_IniSection:ini=[<userdata>],NOT_found_Section=[levels],Type=[table]:<Error!> lua_helper:fGet_IniSection:ini=[<userdata>],NOT_found_Section=[levels_underground],Type=[true]:<Error!>внимания обращать не надо. Дело в том, что автор (Artos) добавил чтение при инициализации модуля lua_helper списков наземных и подземных из конфигов (levels.ltx и levels_underground.ltx соответственно, если они есть, или одноимённые секции из всех системных конфигов, если, опять же, таковые наличествуют). Если такие конфиги/секции не обнаружены, списки создаются пустыми и заполняются потом, в процессе игры. Это не ошибка, а особенность.Из общего комплекта удалять это, в большинстве случаев ни на что не влияющее чтение мне не хотелось бы. Но если смущает лишняя информация в логе, можно открыть на редактирование модуль lua_helper.script и в строках 88-89 вместо db.tLevels = Get_IniSection(ltx, "levels", "table", "val2num", ",") db.tUndergrounds = Get_IniSection(ltx, "levels_underground", "true")написать так: db.tLevels = {} db.tUndergrounds = {}Две мнимые ошибки в логе исчезнут. Добавлено: обновил общий комплект здесь. Изменено 8 Ноября 2016 пользователем Kirgudu Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 264 Опубликовано 11 Ноября 2016 но мне так и не удалось найти ф-ию parse_ini_section_to_array Эта функция есть в ЧН/ЗП (модуль xr_s.script), а в оригинальном ТЧ она отсутствует. А что именно говорит эта строчка, может тут есть подсказка? Это просто информация, она не является показателем ошибки и на неё можно не обращать внимания. Если говорить о числах, то 594270 - максимальный level вертекс локации, найденный по game вертексам, 627038 - максимальный level вертекс локации, найденный уточняющим способом по координатам, 32768 - разница между ними. понимая, что это не совсем верно Скорее это совсем не верно. Ограничивая блоки кода признаком наличия актора (и, судя по всему, при отсутствии этого самого актора в переменной), ты принудительно инициировал появление других ошибок, которые, в свою очередь, могли привести к попаданию где-то в недрах скриптов в _g.abort() (а именно там есть вызов функции exit()). Лучше озаботиться поиском причин, почему же именно переменная actor (или, как мне кажется, db.actor, верно?) пустая. Возможно и в самом деле виновата кривая сборка, и тогда любая работа со скриптам является лечением симптомов, а не болезни. Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 264 Опубликовано 28 Ноября 2016 (изменено) @Kober(BRUC), alife():create("item", vector(), 0, 0, self.object:id()) Изменено 28 Ноября 2016 пользователем Kirgudu 1 1 Инструмент Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 264 Опубликовано 14 Декабря 2016 @dPlayer, стартовому диалогу тоже можно задавать условия: meet_dialog = {+info1} dialog1, dialog2 2 Инструмент Поделиться этим сообщением Ссылка на сообщение