Редактирование движка |
Здравствуйте, гость ( Авторизация | Регистрация )
Сайт 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
|
 
|
|
25.07.2019, 12:41
Сообщение
#3841
|
|
Опытный Геймер Репутация: 3 Группа: Участник Сообщений: 150 Награды: 3 Регистрация: 16.02.2014 |
XR_CPU_PIPE.DLL, ну так написано же: XML node not found, не найдено "msg_box_kicked_by_server:picture". У тебя в конфигах, похоже, вырезано что-то касающееся мультиплеера. Или добавь из оригинальных в свои, или используй оригинальные конфиги.
|
 
|
|
|
|
25.07.2019, 12:54
Сообщение
#3842
|
|
Опытный Геймер Репутация: 0 Группа: Участник Сообщений: 155 Регистрация: 09.05.2019 |
эврика
ну не фига се чтоб я без вас делал -------------------- 1920
|
 
|
|
25.07.2019, 14:26
Сообщение
#3843
|
|
Мастер Игры Репутация: 248 Группа: Участник Сообщений: 1363 Награды: 4 Регистрация: 08.03.2010 |
кто то пытался собрать исходники лост альфы? Я пытался. И даже получалось ( я разработчик лостальфы ) Сообщение отредактировал cjayho - 25.07.2019, 14:30 -------------------- Набор шейдеров для S.T.A.L.K.E.R: Shadow of chernobyl: ECB-Shaderpack -
------ Продюсер электронной музыки в стиле Dark Ambient, автор саундтрека для Desowave S.T.A.L.K.E.R.: Lost Alpha. |
 
|
|
25.07.2019, 14:42
Сообщение
#3844
|
|
Опытный Геймер Репутация: 0 Группа: Участник Сообщений: 155 Регистрация: 09.05.2019 |
2013 студию юзал?
хотя по .sln файлу видно -------------------- 1920
|
 
|
|
25.07.2019, 16:16
Сообщение
#3845
|
|
Мастер Игры Репутация: 248 Группа: Участник Сообщений: 1363 Награды: 4 Регистрация: 08.03.2010 |
2013 студию юзал? хотя по .sln файлу видно ну так к чему такие вопросы? -------------------- Набор шейдеров для S.T.A.L.K.E.R: Shadow of chernobyl: ECB-Shaderpack -
------ Продюсер электронной музыки в стиле Dark Ambient, автор саундтрека для Desowave S.T.A.L.K.E.R.: Lost Alpha. |
 
|
|
25.07.2019, 17:00
Сообщение
#3846
|
|
Опытный Геймер Репутация: 0 Группа: Участник Сообщений: 155 Регистрация: 09.05.2019 |
это был риторический вопрос
-------------------- 1920
|
 
|
|
25.07.2019, 19:58
Сообщение
#3847
|
|
Игровой Бог Репутация: 648 Группа: Участник Сообщений: 5354 Награды: 9 Регистрация: 24.09.2010 |
В оригинальном ТЧ (а может и в ЧН/ЗП) есть баг со скрытием оружия.
Есть вызываем скриптовый метод db.actor:hide_weapon() то оружие исчезает сразу, не отыгрывая анимацию holster (hide). При этом, если скрыть оружие кнопкой на клавиатуре (например, для слота автоматов это кнопка 3), то оружие скрывается нормально, отыгрывая анимацию. Долго ковыряв стек вызовов, решил сравнить, что происходит при скрытии оружия кнопкой. Сравнил стек функции CInventory::Activate и понял, что он абсолютно идентичен что при скрытии кнопкой, так и при скрытии через скрипт. Постепенно стал идти по стеку вызова функций и нашел место, где происходит разное поведение: Если скрыть оружие таким образом Код pActor->inventory().SetSlotsBlocked(u16(INV_STATE_BLOCK_ALL), true); то все ОК.А вот если вызвать Код pActor->SetWeaponHideState(INV_STATE_BLOCK_ALL, true); то оружие исчезнет сразу.Но самое интересное, что SetWeaponHideState делает почти тоже самое, только вызов идет пересылками через пакет: Код void CActor::SetWeaponHideState (u32 State, bool bSet) { if (g_Alive() && this == Level().CurrentControlEntity()) { NET_Packet P; u_EventGen (P, GEG_PLAYER_WEAPON_HIDE_STATE, ID()); P.w_u32 (State); P.w_u8 (u8(bSet)); u_EventSend (P); }; } //////////////////////////////////////////////////////////////////////////////////////////////////// void CActor::OnEvent(NET_Packet& P, u16 type) { ... case GEG_PLAYER_WEAPON_HIDE_STATE: { u32 State = P.r_u32(); BOOL Set = !!P.r_u8(); inventory().SetSlotsBlocked ((u16)State, !!Set); }break; ... } Спрашивается, в чем тут магия и почему разное поведение? Попутно, заметил еще кое-что: 1) Болт скрывается с анимацией и по кнопке, и по скрипту. Но это происходит скорее всего из-за того, что для него не вызывается CHudItem::Deactivate() в родительских классах, в котором в свою очередь вызывается OnHiddenItem(), который херит всю малину (сразу переключает стейт на hidden) 2) Оружие при скрытии скриптом, похоже скрывается не до конца, а убирается из рендера, так как звук скрытия и стейт Hide отыгрывается. Короче, какая-то странная дичь Сообщение отредактировал RayTwitty - 25.07.2019, 20:00 -------------------- |
 
|
|
25.07.2019, 21:00
Сообщение
#3848
|
|
Опытный Геймер Репутация: 0 Группа: Участник Сообщений: 155 Регистрация: 09.05.2019 |
А чему то удивляться
Это же ПЫС -------------------- 1920
|
 
|
|
25.07.2019, 21:08
Сообщение
#3849
|
|
Мастер Игры Репутация: 248 Группа: Участник Сообщений: 1363 Награды: 4 Регистрация: 08.03.2010 |
pActor->inventory().SetSlotsBlocked(u16(INV_STATE_BLOCK_ALL), true); pActor->SetWeaponHideState(INV_STATE_BLOCK_ALL, true); Короче, какая-то странная дичь чисто поржать попробуй применить function-style cast на u32 в нижнем коде Сообщение отредактировал cjayho - 25.07.2019, 21:10 -------------------- Набор шейдеров для S.T.A.L.K.E.R: Shadow of chernobyl: ECB-Shaderpack -
------ Продюсер электронной музыки в стиле Dark Ambient, автор саундтрека для Desowave S.T.A.L.K.E.R.: Lost Alpha. |
 
|
|
25.07.2019, 22:12
Сообщение
#3850
|
|
Игровой Бог Репутация: 648 Группа: Участник Сообщений: 5354 Награды: 9 Регистрация: 24.09.2010 |
Поставил вывод в лог на входе и на выходе:
Код // посылаем сообщение void CActor::SetWeaponHideState (u32 State, bool bSet) { if (g_Alive() && this == Level().CurrentControlEntity()) { Msg("CActor::SetWeaponHideState State = %d, (u16)State = %d, u8(bSet) = %d", State, (u16)State, u8(bSet)); NET_Packet P; u_EventGen (P, GEG_PLAYER_WEAPON_HIDE_STATE, ID()); P.w_u32 (State); P.w_u8 (u8(bSet)); u_EventSend (P); }; } // принимаем сообщение void CActor::OnEvent (NET_Packet& P, u16 type) { ... case GEG_PLAYER_WEAPON_HIDE_STATE: { u32 State = P.r_u32(); u8 Set = P.r_u8(); Msg("GEG_PLAYER_WEAPON_HIDE_STATE State = %d, (u16)State = %d, Set = %d", State, (u16)State, Set); inventory().SetSlotsBlocked ((u16)State, !!Set); }break; ... } Результат вызова: Код Lua: db.actor:hide_weapon() исходники: u32 INV_STATE_BLOCK_ALL = 0xffffffff; Actor()->SetWeaponHideState(INV_STATE_BLOCK_ALL,true); Код CActor::SetWeaponHideState State = -1, (u16)State = 65535, u8(bSet) = 1 GEG_PLAYER_WEAPON_HIDE_STATE State = -1, (u16)State = 65535, Set = 1 т.е. как можно видеть, результаты одинаковые. --------------------------------------------------------------------- в качестве временного решения, решил вызывать скрытие оружие напрямую, без нет_пакета. С таким кодом, оно скрывается нормально, с анимацией. Код void CActor::SetWeaponHideState (u32 State, bool bSet)
{ if (g_Alive() && this == Level().CurrentControlEntity()) { inventory().SetSlotsBlocked(u16(State), bSet); /* NET_Packet P; u_EventGen (P, GEG_PLAYER_WEAPON_HIDE_STATE, ID()); P.w_u32 (State); P.w_u8 (u8(bSet)); u_EventSend (P); */ }; } -------------------- |
 
|
|
26.07.2019, 01:09
Сообщение
#3851
|
|
Продвинутый геймер Репутация: 16 Группа: Участник Сообщений: 222 Награды: 3 Регистрация: 28.06.2016 |
Этих трабл из-за нет-пакетов - полно. Всё же делать единый двигло для сингла и мультиплеера дурная затея. Как пример - из трупа нельзя перетащить оружее в нужный слот, оно залетает в тот который прописан в конфиге если он свободен, иначе просто тупо дропается в инвентарь. Я с этим столкнулся когда делал inv-in-inv рюкзаки и контейнеры.
|
 
|
|
26.07.2019, 16:59
Сообщение
#3852
|
|
Геймер Репутация: 4 Группа: Участник Сообщений: 108 Награды: 3 Регистрация: 02.02.2016 |
Как бы само по себе SetSlotsBlocked оружие не прячет. Оно всего лишь выставляет маску на возможность использование того или иного слота. а вот уже спрятать/достать - это уже делает Activate(slot_id). т.е. могу предположить что в CInventory::SetSlotsBlocked код не попал в if(bChanged). По поводу нетпакета - на обработку такого вызова тратиться как минимум 1-н апдейт, вызов напрямую выполняется на этом же апдейте, на этом же апдейте должна выполниться и анимация hide. может она банально не успевает отрисоваться? может в этом причина? это только предположение.
Я делал проще если через скрипты Код local active_slot=db.actor:active_slot() if active_slot~=inventory_slots.NO_ACT_SLOT then db.actor:activate_slot(inventory_slots.NO_ACT_SLOT,true) --спрячем с анимацией активное оружие end db.actor:hide_weapon() --запретим использование слотов так и красиво все и запрет выставляется. === Что-то я тупенький... Подскажите пожалуйста - где описан механизм обхода препятствий. например, деревьев, крупных скоплений камней. В path_builder все что смог понять - аномалии обходятся через рестрикторы, но у деревьев их нет? Или вот упирание ботов в открытые створки дверей, если открыты "по движению". Как бы дверь physic_object - но они его упорно игнорируют. Не стоит флаг STYPE_VISIBLEFORAI у створки, но при этом механизм коллизий с объектами работает? Или что делать с тем что feel_touch_new не "видит" объект створки? слишком много непонятного... Сообщение отредактировал Winsor - 26.07.2019, 17:03 |
 
|
|
26.07.2019, 17:26
Сообщение
#3853
|
|
Игровой Бог Репутация: 648 Группа: Участник Сообщений: 5354 Награды: 9 Регистрация: 24.09.2010 |
Как бы само по себе SetSlotsBlocked оружие не прячет. Оно всего лишь выставляет маску на возможность использование того или иного слота. а вот уже спрятать/достать - это уже делает Activate(slot_id). т.е. могу предположить что в CInventory::SetSlotsBlocked код не попал в if(bChanged). Конечно же, я проверил вызовы - всё вызывается. И я уже писал выше, что Activate отрабатывает одинаково, что при скрытии кнопкой, что при hide_weapon. И внутри себя Activate работает одинаково (ставил метки после каждого действия/условия и потом сравнивал - в копейку). Короче говоря, дело не в этом куске. Спецэффекты появляются, если делать вызов SetSlotsBlocked через нетпакет. Я даже пробовал обратное - в экшон кнопки засунуть вызов скрытия через нетпакет - в итоге получал такой же косяк. По поводу нетпакета - на обработку такого вызова тратиться как минимум 1-н апдейт, вызов напрямую выполняется на этом же апдейте, на этом же апдейте должна выполниться и анимация hide. Что-то где-то неявно происходит за этот апдейт(ы). Вот мне и интересно что З.Ы. хотя в теории, даже отсрочка на 10 апдейтов не должна ничего ломать - ведь скрытие не растянуто по времени, просто сам вызов SetSlotsBlocked позже происходит, чем вызов SetWeaponHideState. Сообщение отредактировал RayTwitty - 26.07.2019, 17:30 -------------------- |
 
|
|
26.07.2019, 17:39
Сообщение
#3854
|
|
Игровое Воплощение Репутация: 394 Группа: Участник Сообщений: 4791 Награды: 4 Регистрация: 27.04.2011 |
|
 
|
|
27.07.2019, 15:05
Сообщение
#3855
|
|
Опытный Геймер Репутация: 0 Группа: Участник Сообщений: 155 Регистрация: 09.05.2019 |
люди подскажите как в тч запилить раскачку рук?
по идее это в исходниках колупаться надо но я не знаю де именно помогите пожалуйста -------------------- 1920
|
 
|
|
27.07.2019, 15:33
Сообщение
#3856
|
|
Игровой Бог Репутация: 1690 Группа: Участник Сообщений: 7021 Награды: 11 Регистрация: 22.02.2006 |
|
 
|
|
27.07.2019, 15:46
Сообщение
#3857
|
|
Опытный Геймер Репутация: 0 Группа: Участник Сообщений: 155 Регистрация: 09.05.2019 |
Цитата А где обещанный порт ТЧ на PS3/4/5. Уже все приставки раскупили и сидим в предвкушении. laugh.gif ну во первых ответ те на вопрос ну а во вторых я тут думаю какбе присабачить opengl|es к этому дерьму потом ещё и разобраться с этим power процами кароч это капец но я стараюсь а теперь ответ буде? Сообщение отредактировал XR_CPU_PIPE.DLL - 27.07.2019, 15:46 -------------------- 1920
|
 
|
|
27.07.2019, 21:27
Сообщение
#3858
|
|
Игровой Бог Репутация: 648 Группа: Участник Сообщений: 5354 Награды: 9 Регистрация: 24.09.2010 |
В продолжение о скрытии оружия - вроде получилось сделать фикс получше.
В ЗП оказывается эту проблему забороли, но сделали это таким образом (костыль или нет, хз): в функции CInventory::Activate вместо вызова Код m_slots[m_iActiveSlot].m_pIItem->Deactivate(); сделали Код active_item->cast_hud_item()->SendDeactivateItem(); в котором сделали дополнительную смену стейта через нет_пакет Код if (!object().getDestroy()) { NET_Packet P; object().u_EventGen (P,GE_WPN_STATE_CHANGE,object().ID()); P.w_u8 (u8(eHiding)); object().u_EventSend (P, net_flags(TRUE, TRUE, FALSE, TRUE)); } Плюс функцию Deactivate они зачем-то переименовали в DeactivateItem, но похоже что нигде ее не вызывают. В свою очередь, в ней идет вызов OnHiddenItem, о котором я уже писал выше - его убирание тоже фиксит проблему, но я думал что будут нежелательные эффекты. Проверил - все что вызывается в ней у классов оружия и гранат/болта уже итак вызывается без нее. И даже то, что пыс сделали в ЗП с посылкой GE_WPN_STATE_CHANGE - не нужно. Я проверил, с этим кодом в ТЧ два раза устанавливается стейт eHiding. Короче говоря, фикс этой херни заключается в комменте вызова OnHiddenItem() в CHudItem::Deactivate(). Заодно, плавное убирание заработает на лестнице и в других местах, а не только при скрытии скриптом. x-ray Сообщение отредактировал RayTwitty - 27.07.2019, 21:28 -------------------- |
 
|
|
28.07.2019, 00:04
Сообщение
#3859
|
|
Почти Игроман Репутация: 91 Группа: Модератор Сообщений: 516 Награды: 4 Регистрация: 19.07.2015 |
Кст, за лестницы. Два года назад словили интересное исключение, когда прыгали по лесницам туда-сюда. Если Стейт не до конца дошёл и тут же запускался следующий, двиг падал. Можно словить в ванильном ЗП в подземке Юпитер <-> Припять. Фикс можно найти у нас в одной из правок Гипа. А, да. Нужно достать детектор.
-------------------- В армии по 01.07.2020. |
 
|
|
28.07.2019, 03:16
Сообщение
#3860
|
|
Продвинутый геймер Репутация: 16 Группа: Участник Сообщений: 222 Награды: 3 Регистрация: 28.06.2016 |
Кст, тут напомнили ( не знаю насколько сильно этот баг известен ) о баге с оружием на классе РГ-6. Короче, берёшь ствол в руки, открывашь инв, разряжаешь и закрываешь инв, потом можно сделать один бесплатный выстрел. Повторять можно до бесконечности. Пока не ковырялся особо, но штука больно читерная, надо править, в OXR точно не исправлено)
|
 
|
|
Текстовая версия | Сейчас: 29.05.2024, 11:21 |