Winsor 178 Опубликовано 21 Сентября 2016 Привет всем. Такой вопрос. Как можно запретить полностью использовать (обыскивать) труп по опр. секции? Делал проверку на секцию, которую нельзя обыскать, и использовал self.object:set_nonscript_usable(false), но в таком случае все равно висит статик "Обыскать труп", хотя окно обыска и не открывается. Хотелось бы знать, как можно перекрыть сей статик пустышкой, ну или вообще нормальным методом запретить обыск, а не криво, как у меня. по другому не меняется. а текст с помощью set_tip_text_default() set_tip_text() я делал по другому, правда, не для трупа - в биндере, без мотиватора. в net_spawn делал проверку, и если физический объект надо было юзать - вешал на него калбек и тип_текст. если нет - не вешал Поделиться этим сообщением Ссылка на сообщение
Winsor 178 Опубликовано 5 Февраля 2020 3 часа назад, Kirgudu сказал: Ты же возвращаешь db.actor... Поведение коллбэка предсказать в таких условиях не возьмусь; хорошо ещё, что вылета не было. 1) Вылета не должно быть, так как в движке происходит return (*m_lua_function)(); а при вызове info_callback объект актора уже создан, т.е. функция возвращает указатель на существующий объект, движок преобразует это значение в true, так как оно не nullptr. т.е. в результате результат функции всегда true. 2) функция проверяется всегда, до тех пор пока не вызван remove_call. если у тебя не вызывается каждый раз msg() - скорее всего проблема в логике. возможно ты делаешь где то remove_call, либо у тебя повис скриптовый биндер, что очень плохо. Единственное что меня немного смущает - то что ты для глобального колбека используешь local function={} - вот это уже может приводить к "непонятному" поведению. 1 Поделиться этим сообщением Ссылка на сообщение
Winsor 178 Опубликовано 6 Февраля 2020 Хм... Приношу свои извинения за введение в заблуждение. "Почитал" более внимательно движок ТЧ - все что я писал ранее не относится к вызовам, которые добавляются из скриптов, а именно CPHScriptAction и CPHScriptCondition. Для других condition и action которые добавляются в движке - алгоритм работает немного иначе... Действительно, CPHScriptCondition (условие проверки) выполняется всегда и постоянно, при возврате true из данной функции выполняется запуск CPHScriptAction. если CPHScriptCondition или CPHScriptAction перешел в состояние obsolete ("устаревший"), менеджер вызовов удаляет этот call. Тонкость в том что именно скриптовый CPHScriptAction сразу после первого вызова переводит свое состояние в obsolete void CPHScriptAction::run() { (*m_lua_function)(); b_obsolete=true; } что и приводит в удалению всего вызова после единственного срабатывания. Еще раз - прошу прощения за неточность... 2 1 Поделиться этим сообщением Ссылка на сообщение