Drachenseelen-Refine-Protokoll aus dem Client-Engine-Code entfernen

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.
This commit is contained in:
Andreas Lierschaft
2026-08-17 23:37:09 +02:00
parent 9ae37cd0ea
commit 5bcf1b92ea
10 changed files with 0 additions and 207 deletions
@@ -908,33 +908,3 @@ bool CPythonNetworkStream::RecvSpecificEffect()
return true;
}
bool CPythonNetworkStream::RecvDragonSoulRefine()
{
TPacketGCDragonSoulRefine kDragonSoul;
if (!Recv(sizeof(kDragonSoul), &kDragonSoul))
return false;
switch (kDragonSoul.bSubType)
{
case DS_SUB_HEADER_OPEN:
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_DragonSoulRefineWindow_Open", Py_BuildValue("()"));
break;
case DS_SUB_HEADER_REFINE_FAIL:
case DS_SUB_HEADER_REFINE_FAIL_MAX_REFINE:
case DS_SUB_HEADER_REFINE_FAIL_INVALID_MATERIAL:
case DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MONEY:
case DS_SUB_HEADER_REFINE_FAIL_NOT_ENOUGH_MATERIAL:
case DS_SUB_HEADER_REFINE_FAIL_TOO_MUCH_MATERIAL:
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_DragonSoulRefineWindow_RefineFail", Py_BuildValue("(iii)",
kDragonSoul.bSubType, kDragonSoul.Pos.window_type, kDragonSoul.Pos.cell));
break;
case DS_SUB_HEADER_REFINE_SUCCEED:
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME], "BINARY_DragonSoulRefineWindow_RefineSucceed",
Py_BuildValue("(ii)", kDragonSoul.Pos.window_type, kDragonSoul.Pos.cell));
break;
}
return true;
}