Перейти к контенту

Скриптование


Svoboда

Рекомендуемые сообщения

Привет всем. Такой вопрос. Как можно запретить полностью использовать (обыскивать) труп по опр. секции? Делал проверку на секцию, которую нельзя обыскать, и использовал self.object:set_nonscript_usable(false), но в таком случае все равно висит статик "Обыскать труп", хотя окно обыска и не открывается. Хотелось бы знать, как можно перекрыть сей статик пустышкой, ну или вообще нормальным методом запретить обыск, а не криво, как у меня.

по другому не меняется. а текст с помощью 

set_tip_text_default() set_tip_text() 

я делал по другому, правда, не для трупа - в биндере, без мотиватора. в net_spawn делал проверку, и если физический объект надо было юзать - вешал на него калбек и тип_текст. если нет - не вешал :)

Поделиться этим сообщением


Ссылка на сообщение
3 часа назад, Kirgudu сказал:

Ты же возвращаешь db.actor... Поведение коллбэка предсказать в таких условиях не возьмусь; хорошо ещё, что вылета не было.

1) Вылета не должно быть, так как  в движке происходит

return (*m_lua_function)();

а при вызове
info_callback объект актора уже создан, т.е. функция возвращает указатель на существующий объект, движок преобразует это значение в true, так как оно не nullptr. т.е. в результате результат функции всегда true.

2) функция проверяется всегда, до тех пор пока не вызван remove_call. если у тебя не вызывается каждый раз msg() - скорее всего проблема в логике. возможно ты делаешь где то remove_call, либо у тебя повис скриптовый биндер, что очень плохо. Единственное что меня немного смущает - то что ты для глобального колбека используешь local function={} - вот это уже может приводить к "непонятному" поведению.

  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение

Хм... Приношу свои извинения за введение в заблуждение. "Почитал" более внимательно движок ТЧ - все что я писал ранее не относится к вызовам, которые добавляются из скриптов, а именно CPHScriptAction и CPHScriptCondition. Для других condition и action которые добавляются в движке - алгоритм работает немного иначе...

Действительно, CPHScriptCondition (условие проверки) выполняется всегда и постоянно, при возврате true из данной функции выполняется запуск CPHScriptAction. если CPHScriptCondition  или CPHScriptAction перешел в состояние obsolete ("устаревший"), менеджер вызовов удаляет этот call. Тонкость в том что именно скриптовый CPHScriptAction сразу после первого вызова переводит свое состояние в obsolete

void CPHScriptAction::run()
{
	(*m_lua_function)();
	b_obsolete=true;
}

что и приводит в удалению всего вызова после единственного срабатывания. Еще раз - прошу прощения за неточность...

  • Нравится 2
  • Полезно 1

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   1 пользователь

×
×
  • Создать...