PackVerify only checks a single pack's own round-trip, which missed a
real bug: uiscript.eix entries were built without their required
"uiscript/" path prefix, so the standalone tool "round-tripped" fine
(source-relative paths matched its own wrongly-shifted reference) while
the actual game's CEterPackManager - which merges all packs into one
shared dict keyed by full path - failed to resolve any uiscript file.
PackManagerSim replicates the real client's PackInitialize(): it parses
the pack folder's Index manifest, registers every pack (~103) into one
real CEterPackManager exactly like the game does, and can verify every
entry of a given pack resolves through that full lookup path.
Automates the .eix/.epk repacking step that was previously done via the
EterNexus.exe GUI, using the real CEterPack class so output is guaranteed
read-compatible with the game client. PackList inspects an existing pack's
entries, PackMake rebuilds a pack from a source folder, PackVerify
byte-compares a pack's contents against source to confirm round-trip
correctness.
Dritter, zuvor uebersehener Teil der Drachenseelen-Entfernung: das
Visual-Studio-Projekt, das Metin2Client.exe baut und die an Python
exponierten Module (player/chr/item/app/net) bereitstellt.
Entfernt: NEW_AFFECT_DRAGON_SOUL_QUALIFIED/_DECK1/_DECK2 (InstanceBase.h +
Python-Bindings), das komplette Refine-Netzwerkprotokoll
(HEADER_CG/GC_DRAGON_SOUL_REFINE, TPacketCG/GCDragonSoulRefine,
Send/RecvDragonSoulRefine(Packet) inkl. aller Aufrufstellen,
playerSendDragonSoulRefine, DS_SUB_HEADER_*-Bindings in gleich zwei
Modulen), playerIsDSEquipmentSlot, sowie die ungenutzten
EDragonSoulStepTypes-Enum.
Sicherheitsprinzip wie serverseitig beachtet: ESlotType, EWindows und
CItemData::EItemType sind sequentielle Enums, in denen
SLOT_TYPE_DRAGON_SOUL_INVENTORY / DRAGON_SOUL_INVENTORY / ITEM_TYPE_DS /
ITEM_TYPE_SPECIAL_DS mitten drin liegen und mit dem Server sowie
gespeicherten Item-Daten synchron bleiben muessen (u.a. wegen
BELT_INVENTORY danach) - diese bleiben bewusst als reservierte,
ungenutzte Werte stehen, ebenso EDragonSoulGradeTypes (wird noch von
c_DragonSoul_Inventory_Count zur Groessenberechnung des aDSItem[]-Arrays
gebraucht).
WICHTIG: Dieses Projekt kann ich nicht selbst kompilieren (Windows/Visual
Studio). Bitte einmal durchbauen und mir Fehler zurückmelden.