April 19, 2024, 06:34
bigger smaller reset     1020px Wide width Full width Reset   * *

Gildor's Forums

  Homepage Facebook Read news on Twitter Youtube channel Github page
Welcome, Guest. Please login or register.
Did you miss your activation email?

« previous next »
Print
Author Topic: Вопрос по UT2004  (Read 5994 times)
Alleras
Newbie
*
Posts: 31


View Profile
« on: April 19, 2009, 00:38 »

Вопрос ко всем, но в первую очередь к Гилдору:

Я пытаюсь скомпиллировать тестовую DLL для UT2004 (3369), но достиг лишь частичного результата:

Dll компилируется, нативный актер ставится на уровень и работает правильно, но при вызове к нему одного из нативных эвентов игра падает.

Подозриваю, что причина заключается в том, что я неправильно определил длину одной или нескольких вызываемых в DLL функций.

В связи с этим вопрос:
1) Как можно определить длину вызываемых в DLL функций?
2) Реально ли получить Header-файлы для Engine.dll и Core.dll (интересует только Ut2004 версии 3369)?
3) Реально ли получить "правильные" Lib-файлы для Engine.dll и Core.dll (интересует только Ut2004 версии 3369)?
4) Если последнее нереально, можно ли получить хотя бы список вызываемых в DLL функций с указанием их длины? (типа _autoclassUArrayProperty@2235) ?

Буду очень благодарен, если кто-нибудь даст ответы...
« Last Edit: April 19, 2009, 00:52 by Alleras » Logged
Gildor
Administrator
Hero Member
*****
Posts: 7973



View Profile WWW
« Reply #1 on: April 19, 2009, 11:47 »

Теоретически можно восстановить хидеры и либы для компиляции нативных пэкеджей для UT2004. Если нужны только актёры, и только поля, которые доступны из скрипта - тут должен помочь ucc - он парсит скрипты (uc) и генерит u- и h-файлы. Для доступа к остальным функциям поможет дизассемблер.
Я в интернете видел где-то "восстановленный" C++ SDK для America's Army. Народ на нём даже что-то делал.

Quote
1) Как можно определить длину вызываемых в DLL функций?
Что вы называете "длиной функции"?
Quote
4) Если последнее нереально, можно ли получить хотя бы список вызываемых в DLL функций с указанием их длины? (типа _autoclassUArrayProperty@2235) ?
Дампером экспортов dll + demangle.
Logged
Alleras
Newbie
*
Posts: 31


View Profile
« Reply #2 on: April 19, 2009, 13:00 »

Что вы называете "длиной функции"?
Длину параметров, передаваемых при вызове функции.
Имея эту длину, можно создать Lib-файл.

Дампером экспортов dll + demangle.
Ок. Буду пробовать.

Logged
Alleras
Newbie
*
Posts: 31


View Profile
« Reply #3 on: April 21, 2009, 15:26 »

Скачал в интернете исходники UT3, с их помощью частично решил проблему.
(на удивление, код оказался довольно вменяемым, хотя и не полным).

Интересно, а исходников Unreal Engine 2 нигде в интернете не завалялось?
А то несправедливо получается: UT1 есть, UT3 есть, а для UT2 ничего нету....
Logged
Gildor
Administrator
Hero Member
*****
Posts: 7973



View Profile WWW
« Reply #4 on: April 21, 2009, 15:59 »

По UT1 есть только "публичные исходники" - хидеры и либы (я не прав?).
По UE3 есть ворованая очень ранняя версия движка, не имеет практически ничего общего с UE2 и современным UE3.
Logged
Alleras
Newbie
*
Posts: 31


View Profile
« Reply #5 on: April 21, 2009, 17:05 »

Для написания DLL этого оказалось достаточно.
« Last Edit: April 21, 2009, 17:16 by Alleras » Logged
webdes27
Newbie
*
Posts: 9


View Profile
« Reply #6 on: March 11, 2015, 17:49 »

Есть исходник от Rognarok Online 2 целиком! Он на 2-м унреале. Только не могу собрать, хотя как я понял исходник рабочий. Только надо правильно настроить и подключить проект!
Logged
Gildor
Administrator
Hero Member
*****
Posts: 7973



View Profile WWW
« Reply #7 on: March 11, 2015, 18:03 »

Он основан на UE2Runtime, совсем другая ветка кода относительно UT2004.
Logged
webdes27
Newbie
*
Posts: 9


View Profile
« Reply #8 on: March 11, 2015, 18:39 »

Не был в курсе. Но все же если кто соберал или есть идеи как собрать, был бы признателен за подсказку!
Logged
DXR
Newbie
*
Posts: 7


View Profile
« Reply #9 on: August 04, 2018, 19:08 »

Здравствуйте,

Никак не могу найти причину ошибки при сохранении игры (мод для UT2004). Ошибку провоцирует либо класс игрока (pawn(DeusExPlayer)), либо его контроллер, поскольку если вернуть эти классы к последней версии, где сохранение еще работало, то вылета нет. И UDebugger зависает при попытке поймать "Accessed none" на классе DeusExPlayer.

Code:
Assertion failed: Import.PackageIndex<0 [File:.\UnObj.cpp] [Line: 4471]

Log: SAVE GAME!
ScriptLog: PreSaveGame()
Critical: Assertion failed: Import.PackageIndex<0 [File:.\UnObj.cpp] [Line: 4471]
Critical: Windows GetLastError:   ,     . (183)
Exit: Executing UObject::StaticShutdownAfterError
Exit: Executing UWindowsClient::ShutdownAfterError
Log: Waiting for file streaming thread to finish...
Exit: OpenAL Audio subsystem shut down.
Critical: SaveImportMap
Critical: UObject::SavePackage
Critical: UGameEngine::SaveGame
Critical: UGameEngine::Exec
Critical: UPlayer::Exec
Critical: UViewport::Exec
Critical: UWindowsViewport::Exec
Critical: APlayerController::execConsoleCommand
Critical: (DeusExPlayerController 01_debuglevel.DeusExPlayerController0 @ Function DeusEx.DXRSaveSystem.QuickSave : 01C9)
Critical: UObject::ProcessEvent
Critical: (DeusExPlayerController 01_debuglevel.DeusExPlayerController0, Function DeusEx.DXRSaveSystem.QuickSave)
Critical: UObject::ScriptConsoleExec
Critical: (DeusExPlayerController 01_debuglevel.DeusExPlayerController0)
Critical: UPlayer::Exec
Critical: UViewport::Exec
Critical: UWindowsViewport::Exec
Critical: UInput::ExecInputCommands
Critical: UInput::Process
Critical: UEngine::InputEvent
Critical: UWindowsViewport::CauseInputEvent
Critical: WM_KEYDOWN
Critical: UWindowsViewport::ViewportWndProc
Critical: WWindow::StaticProc
Critical: MessagePump
Critical: MainLoop
Localization: No localization: Window.IDDIALOG_CrashBox.IDC_CrashBox (int)
Exit: Exiting.
Logged
Gildor
Administrator
Hero Member
*****
Posts: 7973



View Profile WWW
« Reply #10 on: August 04, 2018, 19:45 »

Думаю что этот вопрос надо задавать авторам мода.
Logged
DXR
Newbie
*
Posts: 7


View Profile
« Reply #11 on: August 04, 2018, 20:06 »

Я и есть автор Smiley  Мне удалось сузить поиск ошибки до этих двух классов, а что с ними может быть не так -- не пойму.
Logged
Gildor
Administrator
Hero Member
*****
Posts: 7973



View Profile WWW
« Reply #12 on: August 04, 2018, 22:53 »

Ok.
Тогда могу подсказать куда "копать". Assert говорит что ImportIndex >= 0 (скорее всего РАВЕН нулю). Это значит что какой-то package не загрузился - например если файл физически отсутствует. Это можно посмотреть с помощью file monitor или process explorer (SysInternals.com): перед сохранением запустить монитор, отфильтровать ненужные процессы, чтобы показывало только ut2004.exe, и сделать созранение. После падения монитор отключить и спокойно просмотреть лог.
Logged
DXR
Newbie
*
Posts: 7


View Profile
« Reply #13 on: August 05, 2018, 04:19 »

Так выглядит лог на варианте где сохранение работает:
Code:
8:56:43,3017710 UDebugger.exe 5336 WriteFile U:\Engine3369\DXSave\Save.tmp SUCCESS Offset: 0, Length: 64
8:56:43,3017868 UDebugger.exe 5336 CloseFile U:\Engine3369\DXSave\Save.tmp SUCCESS
8:56:43,3018889 UDebugger.exe 5336 QueryNameInformationFile U:\Engine3369\System\UDebugger.exe SUCCESS Name: \Engine3369\System\UDebugger.exe
8:56:43,3022578 UDebugger.exe 5336 CreateFile U:\Engine3369\DXSave\Save9.usa SUCCESS Desired Access: Read Attributes, Delete, Disposition: Open, Options: Non-Directory File, Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
8:56:43,3023078 UDebugger.exe 5336 QueryAttributeTagFile U:\Engine3369\DXSave\Save9.usa SUCCESS Attributes: A, ReparseTag: 0x0

На варианте, где попытка сохранения приводит к вылету, ничего такого нет:
Code:
8:40:06,0846147 UDebugger.exe 988 WriteFile C:\Games\UT2004\DxSave\Save.tmp SUCCESS Offset: 3 405 817, Length: 4 096, Priority: Normal
8:40:06,0846499 UDebugger.exe 988 ReadFile C:\Games\UT2004\DxSave\Save.tmp END OF FILE Offset: 3 407 872, Length: 32 768, I/O Flags: Non-cached, Paging I/O, Synchronous Paging I/O, Priority: Normal
8:40:06,0846618 UDebugger.exe 988 WriteFile C:\Games\UT2004\DxSave\Save.tmp SUCCESS Offset: 3 409 913, Length: 4 096
8:40:06,0846677 UDebugger.exe 988 WriteFile C:\Games\UT2004\DxSave\Save.tmp SUCCESS Offset: 3 414 009, Length: 4 096
8:40:06,0846730 UDebugger.exe 988 WriteFile C:\Games\UT2004\DxSave\Save.tmp SUCCESS Offset: 3 418 105, Length: 7
8:40:06,0846779 UDebugger.exe 988 WriteFile C:\Games\UT2004\DxSave\Save.tmp SUCCESS Offset: 3 385 337, Length: 4
8:40:06,0849907 UDebugger.exe 988 WriteFile C:\Games\UT2004\DxSave\Save.tmp SUCCESS Offset: 3 418 112, Length: 4 096
8:40:06,0853544 UDebugger.exe 988 CreateFile C:\Windows\SysWOW64\ru-RU\KernelBase.dll.mui SUCCESS Desired Access: Generic Read, Disposition: Open, Options: , Attributes: n/a, ShareMode: Read, Delete, AllocationSize: n/a, OpenResult: Opened
8:40:06,0853792 UDebugger.exe 988 CreateFileMapping C:\Windows\SysWOW64\ru-RU\KernelBase.dll.mui FILE LOCKED WITH ONLY READERS SyncType: SyncTypeCreateSection, PageProtection:
8:40:06,0853868 UDebugger.exe 988 QueryStandardInformationFile C:\Windows\SysWOW64\ru-RU\KernelBase.dll.mui SUCCESS AllocationSize: 811 008, EndOfFile: 807 936, NumberOfLinks: 2, DeletePending: False, Directory: False
8:40:06,0854009 UDebugger.exe 988 CreateFileMapping C:\Windows\SysWOW64\ru-RU\KernelBase.dll.mui SUCCESS SyncType: SyncTypeOther
8:40:06,0855194 UDebugger.exe 988 WriteFile C:\Games\UT2004\System\UDebugger.log SUCCESS Offset: 0, Length: 4 096, Priority: Normal
8:40:06,1873533 UDebugger.exe 988 Thread Exit SUCCESS Thread ID: 4844, User Time: 0.1872012, Kernel Time: 0.0156001
8:40:06,1880121 UDebugger.exe 988 Thread Create SUCCESS Thread ID: 5428
8:40:06,1942675 UDebugger.exe 988 Thread Exit SUCCESS Thread ID: 1588, User Time: 0.0000000, Kernel Time: 0.0000000
8:40:06,1947789 UDebugger.exe 988 Thread Exit SUCCESS Thread ID: 4520, User Time: 0.0000000, Kernel Time: 0.0000000
8:40:06,2018158 UDebugger.exe 988 Thread Exit SUCCESS Thread ID: 5500, User Time: 0.0000000, Kernel Time: 0.0000000

Похоже что это где-то здесь:
Code:
           // Set the package index.
            if( Import.XObject->GetOuter() )
            {
                check(!Import.XObject->GetOuter()->IsIn(InOuter));
                Import.PackageIndex = Linker->ObjectIndices(Import.XObject->GetOuter()->GetIndex());
                check(Import.PackageIndex<0);
            }

Набор собственных пакетов в обеих версиях одинаков, то есть потерянного файла (пакета) быть не должно, если только какой-то из них не повредился  Huh?
« Last Edit: August 05, 2018, 04:22 by DXR » Logged
Gildor
Administrator
Hero Member
*****
Posts: 7973



View Profile WWW
« Reply #14 on: August 05, 2018, 09:19 »

Ваш мод сделан на C++ или UnrealScript?
Logged
Print 
« previous next »
Jump to:  

Powered by SMF | SMF © 2006-2009, Simple Machines LLC
Leviathan design by Bloc | XHTML | CSS