AndreySol 215 Опубликовано 20 Июня 2018 5 часов назад, dsh сказал: рестриктор или его наследник с шейпом в виде сферы радиусом 0.1 Чисто по интересу - для чего нужны такие шейпы в игре ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 20 Июня 2018 @dsh, И, типа, проще движок править, чем поменять размеры шейпов\сменить тип рестриктора ??? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 25 Августа 2018 17 часов назад, WOLFDOG сказал: Возможно ли его как это экспортировать? Посмотреть, как экспортированы другие UI-классы, и сделать по образу и подобию - не ужели не пришла такая мысля ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 19 Сентября 2018 В ЗП(ЧН ?), при наведении курсора в инвентаре на оружие к примеру, на индикаторах параметров выделяется вторым цветом параметры оружия в слоте. Поделитесь, кому не сложно, фрагментами кода из исходников ЗП(ЧН ?), которые отвечают именно за отрисовку двух цветов в полоске индикатора. А то лень велосипед изобретать. Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 30 Сентября 2018 В xrGame\clsid_game.h регистрируются сеты типа #define CLSID_DETECTOR_SIMPLE MK_CLSID('D','_','S','I','M','D','E','T') Если требуется проверить принадлежность инвентарного предмета к определенному классу, например к вышеозначенным детекторам, то что нужно получить от объекта и с чем сравнить ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 1 Октября 2018 @lordmuzer В разделе редактирования движка, вопрос относится к работе с кодом движка, а не к игровым скриптам. Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 1 Октября 2018 В чем может быть причина несоответствия CLSID прописанного в clsid_game.h и реального CLSID инвентарного объекта ? Добавил новый инвентарный объект, все сделал по образу и подобию уже существующих, но CLSID получаемый в игре через pIItem->object().CLS_ID не соответствует прописанному в clsid_game.h. Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 1 Октября 2018 #include "Accumulator.h" ... ADD(CAccumulator, CSE_ALifeItemAccumulator, CLSID_DEVICE_ACCUMULATOR, "device_accumulator"); ADD(CAccumulator, CSE_ALifeItemAccumulator, TEXT2CLSID("ACCUMUL"), "device_accumulator_s"); Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 1 Октября 2018 #define CLSID_DEVICE_ACCUMULATOR MK_CLSID('D','_','A','C','C','U','M',' ') class = ACCUMUL Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 1 Октября 2018 3 часа назад, lordmuzer сказал: можно проверить класс еще и в lua - должен быть device_accumulator_s Проверил - все правильно... Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 1 Ноября 2018 @Zagolski, Вот к тебе лично вопрос. Почему к тебе - сам понимаешь... Как подключить к 1.0007rc1 новые рендеры ? Я имею в виду - готовые модули... Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 2 Ноября 2018 12 часов назад, Zagolski сказал: Только внедрением через исходники движка. Так это же понятно, тема то об редактировании движка. В исходниках чего и где прописать ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 11 Ноября 2018 @Romann Муравьем поделишься ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 3 Марта 2019 33 минуты назад, Tolyan сказал: регаться на другом форуме вообще не хочется. У тебя с этим проблемы ? 1 час назад, Tolyan сказал: Вопрос с чего начать? Начни с этого... 2 Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 4 Марта 2019 (изменено) 20 часов назад, Tolyan сказал: Пока конечно, ни черта не понятно)) Начало для всех одинаковое: - скачать исходники соответствующей версии движка. - скачать VS от мелкомягких, установить, запустить. - портировать проект в выбранную студию. Родная VS, в которой изначально создан движок ТЧ(для других частей не знаю) - Visual Studio 2005. В статье, с указанного выше ресурса, "Сборка движка X-Ray" - читаем как портировать проект на более современную студию(там для 2010 разжевано). - собираем проект. Если все срослось - радуемся жизни. Если нет - курим скачанные из инета самоучители по работе с VS, задаем вопросы в профильных темах тута и на Stalkerin. - после того, как удалось собрать проект, на мой взгляд лучше всего начать с внесения мелких правок, описанных в теме "Мелкие правки движка". Полезно будет для начала. Изменено 4 Марта 2019 пользователем AndreySol 1 1 Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 4 Марта 2019 @Minya, Тебе наверное в соседнюю тему "X-Ray extensions", там основное обсуждение ассемблерных врезок в движок... Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 4 Апреля 2019 Нашел такое в движке: Скрытый текст LPCSTR CFontManager::GetFontTexName (LPCSTR section) { static char* tex_names[]={"texture800","texture","texture1600"}; int def_idx = 1;//default 1024x768 int idx = def_idx; #if 0 u32 w = Device.dwWidth; if(w<=800) idx = 0; else if(w<=1280)idx = 1; else idx = 2;#else u32 h = Device.dwHeight; if(h<=600) idx = 0; else if(h<=900) idx = 1; else idx = 2;#endif while(idx>=0) { if( pSettings->line_exist(section,tex_names[idx]) ) return pSettings->r_string(section,tex_names[idx]); --idx; } return pSettings->r_string(section,tex_names[def_idx]); } Поясните, как работает в этом случае #if 0... ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 7 Апреля 2019 Скрытый текст void CFontManager::Render() { FONTS_VEC_IT it = m_all_fonts.begin(); FONTS_VEC_IT it_e = m_all_fonts.end(); for (; it != it_e; ++it) { if (**it) (**it)->OnRender(); } } Кто в курсе, для чего собственно это ->OnRender() ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 7 Апреля 2019 24 минуты назад, lordmuzer сказал: И потом на рендеринге худа каждый объект шрифта выводит все надписи которые им "написали" Глядя на код, я было то же так подумал, но оказалось иначе. Я у себя решил добавить возможность использовать вновь добавленные шрифты без обязательной прописи их в движке. Получилось довольно элементарно: xr_3da\xrGame\HUDManager.h CGameFont* InitializeCustomFont(LPCSTR section, u32 flags = 0); xr_3da\xrGame\HUDManager.cpp CGameFont* CFontManager::InitializeCustomFont(LPCSTR section, u32 flags) { CGameFont* pFontAdd = NULL; InitializeFont(pFontAdd, section, flags); return pFontAdd; } xr_3da\xrGame\ui\UIXmlInit.cpp Скрытый текст bool CUIXmlInit::InitFont(CUIXml &xml_doc, LPCSTR path, int index, u32 &color, CGameFont *&pFnt) { pFnt = NULL; color = GetColor(xml_doc, path, index, 0xff); shared_str font_name = xml_doc.ReadAttrib(path, index, "font", NULL); if(*font_name == NULL || xr_strlen(*font_name)<1) { // pFnt = NULL; return false; } if(*font_name) { if (!xr_strcmp(*font_name, ARIAL10_FONT_NAME)) { pFnt = UI()->Font()->pFontArial10Russian; } else if (!xr_strcmp(*font_name, ARIAL14_FONT_NAME))//"arial14" { pFnt = UI()->Font()->pFontArial14; } else if(!xr_strcmp(*font_name, GRAFFITI19_FONT_NAME)) { pFnt = UI()->Font()->pFontGraffiti19Russian; } else if(!xr_strcmp(*font_name, GRAFFITI22_FONT_NAME)) { pFnt = UI()->Font()->pFontGraffiti22Russian; } else if(!xr_strcmp(*font_name, GRAFFITI32_FONT_NAME)) { pFnt = UI()->Font()->pFontGraffiti32Russian; } else if(!xr_strcmp(*font_name, GRAFFITI50_FONT_NAME)) { pFnt = UI()->Font()->pFontGraffiti50Russian; } else if(!xr_strcmp(*font_name, MEDIUM_FONT_NAME)) { pFnt = UI()->Font()->pFontMedium; } else if(!xr_strcmp(*font_name, SMALL_FONT_NAME)) { pFnt = UI()->Font()->pFontStat; } else if(!xr_strcmp(*font_name, LETTERICA16_FONT_NAME)) { pFnt = UI()->Font()->pFontLetterica16Russian; } else if(!xr_strcmp(*font_name, LETTERICA18_FONT_NAME)) { pFnt = UI()->Font()->pFontLetterica18Russian; } else if(!xr_strcmp(*font_name, LETTERICA25_FONT_NAME)) { pFnt = UI()->Font()->pFontLetterica25; } else if(!xr_strcmp(*font_name, DI_FONT_NAME)) { pFnt = UI()->Font()->pFontDI; } else { // pFnt = UI()->Font()->InitializeCustomFont(*font_name); if (!pFnt) { R_ASSERT3(0,"unknown font",*font_name); pFnt = NULL; } } } return true; } xr_3da\xrGame\ui\UIWindow_script.cpp ..... CGameFont* GetFontCustom(LPCSTR section) {return mngr().InitializeCustomFont(section);} ..... def("GetFontCustom", &GetFontCustom), ..... Теперь просто указываем в xml-теге секцию шрифта из fonts.ltx, или в скриптовом вызове так же. Потестил - вроде все нормально. И как видно по коду, нигде m_all_fonts не задействован. Вот и хотел уточнить, на кой изначально инициализированные шрифты прогонялись через этот вектор и CFontManager::Render() ? Поделиться этим сообщением Ссылка на сообщение
AndreySol 215 Опубликовано 21 Апреля 2019 (изменено) Надумал сделать не торгуемость для предметов в слотах(для всех). Нашел вроде подходящее место - CInventoryItem::CanTrade(), ну и правочка получилась такая: bool CInventoryItem::CanTrade() const { bool res = true; if(m_pCurrentInventory) res = inventory_owner().AllowItemToTrade(this,m_eItemPlace); if (m_pCurrentInventory->InSlot((PIItem)this)) res = false; return (res && m_flags.test(FCanTrade) && !IsQuestItem()); } Лучше приведения к типу PIItem ничего не придумалось, все вроде нормально работает. Я в этих приведениях\преобразованиях типов не силен, по этому вопрос: так нормально будет, или могут быть проблемы ? Изменено 21 Апреля 2019 пользователем AndreySol Поделиться этим сообщением Ссылка на сообщение