Старлей 88 Опубликовано 13 Мая 2014 (изменено) По-моему, нпс должен быть на расстоянии менее ~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. Изменено 13 Мая 2014 пользователем Старлей Ray Of Hope - кооператив сталкера OldStory Поделиться этим сообщением Ссылка на сообщение
Старлей 88 Опубликовано 10 Января 2015 Кто-нибудь знает, есть ли хоть какие-нибудь правки/оптимизации по LevelEditor(желательно конечно с СДК 0.7 версии), потому что, например, Болота+Кордон+Свалка+Темная_Долина занимают 1 Гигабайт оперативы в игре, а вот в LevelEditor'e 2.2 Гига(?!)... И это чисто одна геометрия. P.S. а почему в LevelEditor'e то оперативы больше чем в 2 раз используется? Ray Of Hope - кооператив сталкера OldStory Поделиться этим сообщением Ссылка на сообщение
Старлей 88 Опубликовано 4 Ноября 2015 Товарищи, подскажите пожалуйста, может кто уже делал правку или знает где править, чтобы получить динамический граф диалогов, а не нынешний, который строится только один раз. Подробное изложение вопроса: Здесь идет считывание <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) Могу и далее расписать стек вызовов, но смысла не вижу, т.к. сам ничего не нашел... Суть в том что, граф фраз строится один раз, и дальше обновляются все фразы в этом графе на доступность для произношения. Вопрос: Каким образом можно обновлять и граф фраз? Ray Of Hope - кооператив сталкера OldStory Поделиться этим сообщением Ссылка на сообщение