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

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


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

Реально ли взять папку Бин и пропатчить необходимые файлы, просто сохранив существующие и добавить и добавлять новые которые мне будут нужны

Скорее нет чем да, по крайней мере существующие патчеры не рассчитаны на 7, его же из исходников собирали.

---

Как можно получить позицию кости в худовой модели по ее имени или ИД? В движке, ТЧ.

---

Нашел вот такой вариант:

 

 

Fvector CalcBonePosition(CKinematics *K, const Fvector &pos, LPCSTR bone_name)
{
	u16					bone_id;
	if (xr_strlen(bone_name))
		bone_id			= K->LL_BoneID(bone_name);
	else
		bone_id			= K->LL_GetBoneRoot();

	Fmatrix				matrix;
	Fmatrix				XF;
	XF.identity();
	XF.translate_over (pos);
	matrix.mul_43		(XF,  K->LL_GetTransform(bone_id));
	return				(matrix.c);
} 

 

 

Только не могу понять: какую позицию надо в него передавать? Ну, вернее позицию ЧЕГО?

Изменено пользователем Kondr48
Ссылка на комментарий

Привет, скажите пожалуйста - за что отвечает ui_mm_opt_video_adv.script? Просто вот такая ошибка выскочила https://yadi.sk/i/AB2bK_CP3F6mMW, я думаю что то связано с блудмарками, но почему не с того не с сего такое появилось.

 Моя нычкаНычка в арендованном у Опричника холодильнике  

Мы хорошие ребята, жаль патронов маловато:):ukostra:

UriZzz.gif

Ссылка на комментарий

Скрипт ui_mm_opt_video_adv.script обычно в паре с config\ui\ui_mm_opt.xml отвечает за пункты в расширенных видеоопциях (там, где галочки ставятся). Скрипт обратился в xml и не нашел там секции cap_bloodmarks.

Изменено пользователем macron
  • Спасибо 1
Ссылка на комментарий

Такой вопрос: что использовать в исходниках для работы с строковыми значениями(типа lua-шных string.find, string.sub) ? Что-то стандартное из С++\WinAPI или есть что-то движковое ?

Ссылка на комментарий

@UnLoaded, есть различные функции из стандартной библиотеки C, C++, функции WinAPI

Изменено пользователем User_X.A.R26
Ссылка на комментарий

@UnLoaded, хочу сразу заметить что многие из этих функций "переписаны" на манер ПЫС: вместо string что-то вроде xr_string и так далее... Поэтому если студия говорит что такой функции нету - попробуй с этой приставкой поколдовать)

  • Согласен 1
Ссылка на комментарий

@User_X.A.R26

Так я же в курсе, просто в двигле разрабы для всего Сишного и WinAPIшного наделали оберток, ну и Lua присутствует. Вот и интересно, что правильней\лучше\быстрее будет ?

 

Такое дело - лыжи по асфальту не едут, помогите смазать или снять...

 

 

Собственно, у CGameTaskManager есть ф-ция GiveGameTaskToActor(CGameTask* t, u32 timeToComplete, bool bCheckExisting), назначение понятно.

Сделал в теле ф-ции вывод инфо в лог:

CGameTask* CGameTaskManager::GiveGameTaskToActor(CGameTask* t, u32 timeToComplete, bool bCheckExisting)
{
     if(bCheckExisting && HasGameTask(t->m_ID))
          return NULL;
     m_flags.set(eChanged, TRUE);

     GameTasks().push_back(SGameTaskKey(t->m_ID));
     GameTasks().back().game_task = t;
     t->m_ReceiveTime = Level().GetGameTime();
     t->m_TimeToComplete = t->m_ReceiveTime + timeToComplete;
Msg("CGameTaskManager::GiveGameTaskToActor - timeToComplete: %u", timeToComplete);
Msg("CGameTaskManager::GiveGameTaskToActor - m_ReceiveTime: %u + timeToComplete: %u = m_TimeToComplete: %u", t->m_ReceiveTime, timeToComplete, t->m_TimeToComplete);

     std::sort(GameTasks().begin(), GameTasks().end(), task_prio_pred);
.....
.....

ну и запустил задание обычным образом, через тег в инфо-порции. Получил в логе такое:



CGameTaskManager::GiveGameTaskToActor - timeToComplete: 0
CGameTaskManager::GiveGameTaskToActor - m_ReceiveTime: 507271692 + timeToComplete: 14778 = m_TimeToComplete: 0

далее, запустил это-же задание, но из скрипта:

local new_task = CGameTask()
new_task:load("ля-ля-ля-ля")
db.actor:give_task(new_task, 3600000, true)

В логе получил такое:



CGameTaskManager::GiveGameTaskToActor - timeToComplete: 3600000
CGameTaskManager::GiveGameTaskToActor - m_ReceiveTime: 507471972 + timeToComplete: 14778 = m_TimeToComplete: 3600000

Вот смотрю на лог и на код в ф-ции... Где подвох ?

 

 

 

Еще вопрос.

С помощью методов CInifile можно читать всякое из конфигов. Мне надо прочитать родительскую секцию, к примеру для аномалии:

[zone_witches_galantine_weak]:zone_witches_galantine <- вот, это.

Кто нибудь знает способ, или куда хоть копать ?

Изменено пользователем UnLoaded
  • Не нравится 1
Ссылка на комментарий

Кто нибудь знает способ, или куда хоть копать ?

Ну разве что сделать параметр и писать дублировать в него родительскую секцию. Костыльно слегка, однако самый легкий и простой способ.

Изменено пользователем Kondr48
Ссылка на комментарий

 

UnLoaded, я имел ввиду задать его изначально в ручную. В конфиг. Ну или же ловить в движке момент, где идет чтение родительских секций и там присваивать своей переменной значение родительской. Первый вариант проще  :)

 

Ссылка на комментарий

 

 

Первый вариант проще
Не думаю...

Насчет "..ловить в движке..." - я опять за! Но вот именно в этом и вопрос - где это ловить ? В каком месте кода CInifile ?

Ссылка на комментарий

В каком месте кода CInifile ?

 

Вот в этом:

void CInifile::Load(IReader* F, LPCSTR path ...
{
   . . .   
   if (0!=inherited_names)
   {
      VERIFY2 (m_flags.test(eReadOnly),"Allow for readonly mode only.");
      inherited_names += 2;
      //  в  inherited_names  содержится строка с родительскими секциями
      . . .
   }   
   . . .
}

 

 

S.T.A.L.K.E.R. CoP Objects (upd 15.11.24)

Ссылка на комментарий
Помощь нужна: как сделать массив(таблицу) произвольного размера? Типа такого:

строка = строка

строка = строка

строка = строка

....

....

Обычные массивы С++ видимо не прокатят, надо что-то типа vector? В движке есть обертка - xr_vector, вот только не пойму как эти векторы использовать. Может кто подкинуть пример, как сделать строковый массив типа того, что я выше показал ?
Ссылка на комментарий

Привет. Visual Studio 2013, X-ray 1.6, качал с какого-то репо, сейчас уже не упомню с какого именно.

Не могу скомпилировать xrGame. Debug и Mixed на первом скриншоте, Release - на втором. В Realese сборка идёт не смотря на ошибки, но валится позже, ссылаясь на отсутствие xrCore.lib. Опыт работы со студией у меня почти нулевой, но предполагаю, что дело в каких-то путях. Прошу помощи. 

 

122.jpg ascx.jpg

 

Ссылка на комментарий

@drksnc, неудачный репо. Скорее всего Debug и Mixed конфигурации не настроены. В релизе ошибки intellisense - они не в счет. Покажи ошибки сборки.

 

но валится позже, ссылаясь на отсутствие xrCore.lib

Попробуй сначала собрать xrCore, потом xrGame.

 

Может к репо прилагалась инструкция по сборке?

 

Почему не хочешь взять OpenXray?

Изменено пользователем abramcumner
  • Спасибо 1
Ссылка на комментарий

 

 

Помощь нужна: как сделать массив(таблицу) произвольного размера? Типа такого: строка = строка строка = строка строка = строка
xr_vector не подойдет - это аналог std::vector. для Вашей задачи необходимо использовать std::map - в xray аналог - xr_map. для ключей и значений можно использовать как shared_str (память выделяется один раз и храниться до тех пор пока есть хоть одна ссылка на эту строку) так и xr_string (аналог std::string).
Ссылка на комментарий

 

 

для Вашей задачи необходимо использовать std::map - в xray аналог - xr_map

Мне уже подсказали насчет xr_map, вроде смог разобраться как его использовать, но осталась одна проблемка: если объявляю  xr_map <shared_str, shared_str> table в cpp-файле - все нормально, все сохраняется\получается, но если выношу объявление в h-файл

public:
    xr_map <shared_str, shared_str> table;
то игра вылетает с логом:
0023:599609D1 xrCore.dll, std::_Lower_bound<CInifile::Sect * *,char const [256],int,bool (__cdecl*)(CInifile::Sect const *,char const *)>(), c:\program files (x86)\microsoft visual studio 12.0\vc\include\algorithm, 2514
..........
..........
..........

 

Посмотрел как у ПЫСов сделано - практически все, что начинается с xr_(или связано с таковым) у них в хедерах объявлено как typedef. Попробовал сделать для своей переменной - в cpp-файле студия подчеркивает красным и ругается "Идентификатор "table" не определен".

Как побороть ?

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

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