Редактирование движка |
Здравствуйте, гость ( Авторизация | Регистрация )
Сайт S.T.A.L.K.E.R. Inside / [ЗП] Параметры командной строки / Распаковщик ресурсов
Редактирование движка |
11.04.2009, 17:42
Сообщение
#1
|
|
Навий черны у ношьти Репутация: 377 Группа: Забанен Сообщений: 2210 Награды: 2 Регистрация: 11.03.2009 |
Интересует конкретные идеи/возможности, как декомпилить двиг игры и .dll библиотеки, с вшитыми .cpp файлами, через которые можно было бы восстановить множество отключённых фич. Например, открытие дверей в машине перед "усаживанием" за руль. Хекседикальные вьюверы - фигня. Кроме правки байтов и возможности зануливания от них проку мало, в отношении сталкера. Нашёл оч полезную утилиту и смог дизассемблить xrGame.dll нашёл в нём e"\stalker\patch_1_000*\xr_3da\xrgame\cardoors.cpp и все строки в библиотеке, но, увы, не смог сам файл вытащить из библиотеки. Полагаю, если научиться декомпилить и, собственно, компилить обратно .exe и .dll библиотеки ядра и двига игры - можно сделать прорыв в модостроении.. например вернув хотя бы возможность открывать двери/капоты/багажники в машинах И еще много чего, без необходимости издеваться в скриптах. Так же интересует - возможно ли сделать к сталкеру некий расширитель скриптового/с++ языка, как например к Обливиону OBSE?
p.s. если кого интересует утилита для декомпила - велкам в личку. -------------------- нарушение правил п. 7.2
|
 
|
|
02.08.2019, 22:30
Сообщение
#3881
|
|
Опытный Геймер Репутация: 0 Группа: Участник Сообщений: 155 Регистрация: 09.05.2019 |
Слухайте а кто то пытался ковырнуть xrRender_R2, допустим чтобы синюшность исправить?
-------------------- 1920
|
 
|
|
|
|
02.08.2019, 22:36
Сообщение
#3882
|
|
Игровой Бог Репутация: 648 Группа: Участник Сообщений: 5354 Награды: 9 Регистрация: 24.09.2010 |
bind_class_info нигде не вызывается. Ага, нигде. А куда лучше засунуть? Я тут заприметил два места: Код CScriptEngine::init CResourceManager::LS_Load (тут RvP свою либу подключал) еще возможно здесь, но я не уверен Script::vfExportToLua -------------------- |
 
|
|
02.08.2019, 22:48
Сообщение
#3883
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
Ага, нигде. А куда лучше засунуть? Я тут заприметил два места: Код CScriptEngine::init CResourceManager::LS_Load (тут RvP свою либу подключал) еще возможно здесь, но я не уверен Script::vfExportToLua Абсолютно не важно. Как будет удобней. Но она по идее из luabind.dll не экспортируется, в xrGame/xr3da ее не достанешь. Но можно экспортировать из луабинд.длл и вызвать, где глобальный неймспейс в луа добавляется. Можно попробовать добавить ее вызов в конец open в Там как раз "class" в луа экспортируется. Слухайте а кто то пытался ковырнуть xrRender_R2, допустим чтобы синюшность исправить? Да зачем? На пс3 по-любому синюшности не будет. Синюшность же погодой/смоллскаями добавляется, нет? |
 
|
|
02.08.2019, 23:04
Сообщение
#3884
|
|
Опытный Геймер Репутация: 0 Группа: Участник Сообщений: 155 Регистрация: 09.05.2019 |
Не ну может ктото пытался рендер р2 оптимизировать?
И кто пытался прикручивать lua-5.3.5? -------------------- 1920
|
 
|
|
02.08.2019, 23:20
Сообщение
#3885
|
|
Игровой Бог Репутация: 648 Группа: Участник Сообщений: 5354 Награды: 9 Регистрация: 24.09.2010 |
Можно попробовать добавить ее вызов в конец open в Экспортировал Код tostring(class_info) -> function: 01765AE0 но при таком вызове: Код log("1") local cinfo = class_info(DIK_keys) log("2") log(tostring(cinfo.attributes)) log("3") Отрабатывает только "1", дальше там что-то зависает. -------------------- |
 
|
|
03.08.2019, 01:59
Сообщение
#3886
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
Отрабатывает только "1", дальше там что-то зависает. Зависает или просто больше ничего не выводит? Если ничего больше не выводит, то это нормально. Я же писал, что там лажа Цикл надо переделать на: Код for (map_type::const_iterator i = obj->crep()->properties().begin(); i != obj->crep()->properties().end(); ++i, ++index) { result.attributes[index] = i->first; } Добавить ++index, а то все свойства пишутся по индексу 1. |
 
|
|
03.08.2019, 12:16
Сообщение
#3887
|
|
Опытный Геймер Репутация: 3 Группа: Участник Сообщений: 150 Награды: 3 Регистрация: 16.02.2014 |
Ф-ция CWeapon::SpawnAmmo. Как-то можно для боеприпаса, который в ней будет создан, задать инвентарный флаг EItemPlace? Т.е. указать для создаваемой пачки патронов, контейнер инвентаря в который она должна попасть, пройдя через ф-цию CInventory::Take.
|
 
|
|
03.08.2019, 19:18
Сообщение
#3888
|
|
Продвинутый геймер Репутация: 16 Группа: Участник Сообщений: 222 Награды: 3 Регистрация: 28.06.2016 |
AndreySol, не уверен что это совсем то:
p.s. еще можно получить ID такого итема, в теории зная ID тоже можно попробовать отправить объект в нужный контейнер. |
 
|
|
03.08.2019, 20:01
Сообщение
#3889
|
|
Игровой Бог Репутация: 648 Группа: Участник Сообщений: 5354 Награды: 9 Регистрация: 24.09.2010 |
Зависает или просто больше ничего не выводит? Если ничего больше не выводит, то это нормально. Я же писал, что там лажа Больше ничего не выводит. Добавил инкремент ++index, но ничего не изменилось -------------------- |
 
|
|
03.08.2019, 20:07
Сообщение
#3890
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
|
 
|
|
03.08.2019, 20:19
Сообщение
#3891
|
|
Игровой Бог Репутация: 648 Группа: Участник Сообщений: 5354 Награды: 9 Регистрация: 24.09.2010 |
А если не DIK_keys передать, а db.actor? Вот с ним сработало, вывелись свойства (сытость, жизнь и т.д.). А объекты типа DIK_keys не скушать ему? -------------------- |
 
|
|
03.08.2019, 21:18
Сообщение
#3892
|
|
Опытный Геймер Репутация: 3 Группа: Участник Сообщений: 150 Награды: 3 Регистрация: 16.02.2014 |
Цитата зная ID тоже можно попробовать отправить объект в нужный контейнер. Это придется как-то передавать этот ID в нужное место, городить синхронизацию. Хотелось бы по-проще и по-правильнее .Еще вопрос: имея клиентский класс, к примеру CWeaponAmmo, как-то можно из него добраться до CSE_ALifeItemAmmo? В методе CWeaponAmmo::net_Spawn есть такая возможность, а вот вне этого метода как быть? |
 
|
|
03.08.2019, 22:36
Сообщение
#3893
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
|
 
|
|
03.08.2019, 22:51
Сообщение
#3894
|
|
Игровой Бог Репутация: 648 Группа: Участник Сообщений: 5354 Награды: 9 Регистрация: 24.09.2010 |
Можно попробовать создать объект класса DIK_keys и передать уже его: class_info(DIK_keys()) Неа, не сработало. Тот же самый эффект. -------------------- |
 
|
|
03.08.2019, 23:12
Сообщение
#3895
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
|
 
|
|
03.08.2019, 23:27
Сообщение
#3896
|
|
Продвинутый геймер Репутация: 16 Группа: Участник Сообщений: 222 Награды: 3 Регистрация: 28.06.2016 |
AndreySol, да, можно, в том примере из ogsr можно потом вызвать смарткастом нужный класс ( не проверял ). Либо же получить серверный объект зная ID итема и потом уже опять смарткастом вызвать нужный класс
CODE
Сообщение отредактировал mortan - 03.08.2019, 23:27 |
 
|
|
04.08.2019, 01:09
Сообщение
#3897
|
|
Опытный Геймер Репутация: 3 Группа: Участник Сообщений: 150 Награды: 3 Регистрация: 16.02.2014 |
Цитата CSE_Abstract* obj = Level().Server->GetGameState()->get_entity_from_eid(ID); У меня VS заругался, что не знает GetGameState для xrServer, поправил на CSE_Abstract* obj = Level().Server->game->get_entity_from_eid(ID); Спасибо за подсказку. Еще вопрос: имеется такой фрагмент BOOL CWeaponAmmo::net_Spawn(CSE_Abstract* DC) { BOOL bResult = inherited::net_Spawn(DC); CSE_Abstract* e = (CSE_Abstract*)(DC); CSE_ALifeItemAmmo* l_pW = smart_cast<CSE_ALifeItemAmmo*>(e); Зачем сделано то, что я жирным выделил? Сообщение отредактировал AndreySol - 04.08.2019, 01:28 |
 
|
|
04.08.2019, 15:59
Сообщение
#3898
|
|
Продвинутый геймер Репутация: 16 Группа: Участник Сообщений: 222 Награды: 3 Регистрация: 28.06.2016 |
AndreySol, если не ошибаюсь, то это связано с работой указателей, сначала нужно разыменовать указатель, потом уже можно и смарткаст вызвать.
Сообщение отредактировал mortan - 04.08.2019, 16:00 |
 
|
|
04.08.2019, 23:20
Сообщение
#3899
|
|
Игровой Бог Репутация: 648 Группа: Участник Сообщений: 5354 Награды: 9 Регистрация: 24.09.2010 |
У тебя отладочная сборка работает? Надо под отладчиком пройтись по get_class_info. Посмотреть, на чем зависает DIK_keys? Зависает как раз таки на куске с циклом, а конкретно здесь: Код map_type::const_iterator i = obj->crep()->properties().begin(); Похоже, в объекте нет свойств (там только "константы"). -------------------- |
 
|
|
06.08.2019, 10:46
Сообщение
#3900
|
|
Опытный Геймер Репутация: 3 Группа: Участник Сообщений: 150 Награды: 3 Регистрация: 16.02.2014 |
При появлении однотипных пачек патронов в инвентаре, они группируются в одну ячейку, при этом отображается суммарное кол-во патронов всех пачек, сгруппированых в этой ячейке. Единственное место в коде(или я ошибаюсь?), где это прописано - ф-ция CUIAmmoCellItem::UpdateItemText, где перебираются все пачки, сгруппированые в ячейке и формируется текст с общим кол-вом патронов. Само добавление пачки патронов в ячейку начинается из CUIDragDropListEx::SetItem. Я битый час рою от SetItem и дальше в лес, но не могу понять, где появляется CUIAmmoCellItem?
Вот в CUIInventoryWnd::InitInventory() все прозрачно: CUICellItem* itm = create_cell_item(*it); m_pUIBagList->SetItem(itm); ---> UICellItemFactory.cpp: CUICellItem* create_cell_item(CInventoryItem* itm) { CWeaponAmmo* pAmmo = smart_cast<CWeaponAmmo*>(itm); if(pAmmo) return xr_new<CUIAmmoCellItem>(pAmmo); Ячейка будет класса CUIAmmoCellItem, соответственно в ней будет отображаться общее кол-во патронов. А из CUIDragDropListEx::SetItem я это найти не могу. Подскажите. |
 
|
|
Текстовая версия | Сейчас: 10.06.2024, 05:44 |