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

Редактирование движка X-Ray


Rolan

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

По-моему, нпс должен быть на расстоянии менее ~3 метров, иначе и будет такой эффект(гг прячет оружие и не может двигаться)

==========

А ну у тебя на видео ГГ начинает диалог, а НПС то нет. Для него тоже нужна какая-то функция.



Очевидно, ты взял функцию из xr_meet.script?

        self.npc:enable_talk()
        --printf("SET allow_break %s", tostring(self.allow_break))
        self.npc:allow_break_talk_dialog(self.allow_break)
        db.actor:run_talk_dialog(self.npc, not(self.allow_break)) 

Вот только здесь у двух последних функций аргументы - булевы. А что это такое: "victim.allow_break" я не знаю, насколько помнится такого свойства нет у game_object.

Есть метод такой: allow_break_talk_dialog(boolean)

Однако он устанавливает значение, а не считывает. Посмотри, что по умолчанию в xr_meet.script стоит для self.allow_break.

Изменено пользователем Старлей

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


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

Кто-нибудь знает, есть ли хоть какие-нибудь правки/оптимизации по LevelEditor(желательно конечно с СДК 0.7 версии), потому что, например, Болота+Кордон+Свалка+Темная_Долина занимают 1 Гигабайт оперативы в игре, а вот в LevelEditor'e 2.2 Гига(?!)... И это чисто одна геометрия. 

 

P.S. а почему в LevelEditor'e то оперативы больше чем в 2 раз используется?

 

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


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

Товарищи, подскажите пожалуйста, может кто уже делал правку или знает где править, чтобы получить динамический граф диалогов, а не нынешний, который строится только один раз. 

 

Подробное изложение вопроса:

 

 

Здесь идет считывание <phrase_list> или <init_func>.

void CPhraseDialog::load_shared	(LPCSTR)
        ...
	//заполнить граф диалога фразами
	data()->m_PhraseGraph.clear();

	XML_NODE* phrase_list_node = pXML->NavigateToNode(dialog_node, "phrase_list", 0);
	if(NULL == phrase_list_node){
		LPCSTR func = pXML->Read(dialog_node, "init_func", 0, "");

		luabind::functor<void>	lua_function;
		bool functor_exists = ai().script_engine().functor(func ,lua_function);
		THROW3(functor_exists, "Cannot find precondition", func);
		lua_function	(this);
		return;
	}
        ...

Вызывается эта функцию отсюда:

void CPhraseDialog::Load(shared_str dialog_id)
{
	m_DialogId = dialog_id;
	inherited_shared::load_shared(m_DialogId, NULL);
}

Эта в свою очередь отсюда:

bool CPhraseDialogManager::AddAvailableDialog(shared_str dialog_id, CPhraseDialogManager* partner)
{
//	PHRASE_DIALOG_INDEX dialog_index =  CPhraseDialog::IdToIndex(dialog_id);
	if(std::find(m_CheckedDialogs.begin(), m_CheckedDialogs.end(), dialog_id) != m_CheckedDialogs.end())
		return false;
	m_CheckedDialogs.push_back(dialog_id);

	DIALOG_SHARED_PTR phrase_dialog(xr_new<CPhraseDialog>());
	phrase_dialog->Load(dialog_id);
        ...

Она в свою очередь: 

void   CActor::UpdateAvailableDialogs	(CPhraseDialogManager* partner)

Могу и далее расписать стек вызовов, но смысла не вижу, т.к. сам ничего не нашел... Суть в том что, граф фраз строится один раз, и дальше обновляются все фразы в этом графе на доступность для произношения. Вопрос: Каким образом можно обновлять и граф фраз?

 

 

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


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

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...