Decompile 4 functions in Source/Client/Mode/GameModeHandlers.cpp
Batch #7513 by eAthena: 0 byte-identical, 4 confirmed by peer review. - fn_21810 CGameMode::ReceiveServerRateNotice: logic confirmed by peer review - fn_21812 CGameMode::ReceiveRequestResult: logic confirmed by peer review - fn_21998 CGameMode::ReceivePackageItemTest: logic confirmed by peer review - fn_22037 CGameMode::ReceiveGradeEnchantResult: logic confirmed by peer review Peer-reviewed-by: meitogi, sherollyner, Qwenkler3.8 Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes).
This commit is contained in:
parent
d1b489d4c0
commit
bb8dc55f2e
1 changed files with 180 additions and 0 deletions
|
|
@ -498,6 +498,57 @@ struct ActorMessage32 {
|
|||
};
|
||||
|
||||
// OFFSET: 0x00D3E8B0
|
||||
// FUNCTION: fn_21810
|
||||
void CGameMode::ReceiveServerRateNotice(const unsigned char* packet) {
|
||||
g_session.unknown_54A0 = *reinterpret_cast<const int*>(packet + 2);
|
||||
g_session.unknown_54A4 = packet[6];
|
||||
g_session.unknown_54A8 = packet[7];
|
||||
if (g_windowMgr.unknown_030C) {
|
||||
reinterpret_cast<UIWindow*>(g_windowMgr.unknown_030C)->SendMsg(nullptr, 60, 0, 0, 0, 0);
|
||||
}
|
||||
|
||||
char text[128];
|
||||
std::memset(text, 0, sizeof(text));
|
||||
g_windowMgr.SendNotice(3, 0, 0, 0, 0, 0);
|
||||
switch (g_session.unknown_54A0) {
|
||||
case 0:
|
||||
std::sprintf(text, "%s - %s : %s", LookupMessage(291), LookupMessage(292), LookupMessage(287));
|
||||
break;
|
||||
case 1:
|
||||
std::sprintf(text, "%s - %s : %s", LookupMessage(291), LookupMessage(292), LookupMessage(288));
|
||||
break;
|
||||
case 2:
|
||||
std::sprintf(text, "%s - %s : %s(%s)", LookupMessage(291), LookupMessage(292), LookupMessage(287), LookupMessage(1535));
|
||||
break;
|
||||
}
|
||||
if (std::strlen(text) != 0) {
|
||||
g_windowMgr.SendNotice(1, reinterpret_cast<std::intptr_t>(text), 0xFFFF, 12, 0, 0);
|
||||
}
|
||||
|
||||
switch (g_session.unknown_54A4) {
|
||||
case 0:
|
||||
std::sprintf(text, "%s - %s : %s", LookupMessage(291), LookupMessage(293), LookupMessage(287));
|
||||
break;
|
||||
case 1:
|
||||
std::sprintf(text, "%s - %s : %s", LookupMessage(291), LookupMessage(293), LookupMessage(290));
|
||||
break;
|
||||
}
|
||||
if (std::strlen(text) != 0) {
|
||||
g_windowMgr.SendNotice(1, reinterpret_cast<std::intptr_t>(text), 0xFFFF, 12, 0, 0);
|
||||
}
|
||||
|
||||
switch (g_session.unknown_54A8) {
|
||||
case 0:
|
||||
std::sprintf(text, "%s - %s : %s", LookupMessage(291), LookupMessage(738), LookupMessage(287));
|
||||
break;
|
||||
case 1:
|
||||
std::sprintf(text, "%s - %s : %s", LookupMessage(291), LookupMessage(738), LookupMessage(288));
|
||||
break;
|
||||
}
|
||||
if (std::strlen(text) != 0) {
|
||||
g_windowMgr.SendNotice(1, reinterpret_cast<std::intptr_t>(text), 0xFFFF, 12, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// OFFSET: 0x00D3F130
|
||||
// FUNCTION: fn_21811
|
||||
|
|
@ -523,6 +574,51 @@ void CGameMode::ReceiveActorMessage32(const unsigned char* packet) {
|
|||
}
|
||||
|
||||
// OFFSET: 0x00D3F3E0
|
||||
// FUNCTION: fn_21812
|
||||
void CGameMode::ReceiveRequestResult(const unsigned char* packet) {
|
||||
std::string text;
|
||||
switch (*reinterpret_cast<const std::int16_t*>(packet + 6)) {
|
||||
case 0:
|
||||
case 8: {
|
||||
UIWindow* window = g_windowMgr.LookupWindow(318);
|
||||
if (window) {
|
||||
window->SendMsg(nullptr, 122, *reinterpret_cast<const int*>(packet + 8), *reinterpret_cast<const int*>(packet + 12), 0, 0);
|
||||
}
|
||||
if (*reinterpret_cast<const std::int16_t*>(packet + 6) == 8) {
|
||||
text = LookupMessage(1814);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 9:
|
||||
text = LookupMessage(1944);
|
||||
break;
|
||||
case 10:
|
||||
text = LookupMessage(1945);
|
||||
break;
|
||||
case 11:
|
||||
text = LookupMessage(1946);
|
||||
break;
|
||||
case 12:
|
||||
text = LookupMessage(1947);
|
||||
break;
|
||||
case 303:
|
||||
text = "- " + IntToString(303, 0) + " : " + LookupMessage(3940);
|
||||
reinterpret_cast<WindowDialogs*>(&g_windowMgr)->Confirm(text.c_str(), 0, false, false, 0, "Error", 280, 120, 0);
|
||||
break;
|
||||
case 304:
|
||||
text = "- " + IntToString(304, 0) + " : " + LookupMessage(3941);
|
||||
reinterpret_cast<WindowDialogs*>(&g_windowMgr)->Confirm(text.c_str(), 0, false, false, 0, "Error", 280, 120, 0);
|
||||
break;
|
||||
default:
|
||||
text = LookupMessage(57);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!text.empty()) {
|
||||
g_windowMgr.SendNotice(3, 0, 0, 0, 0, 0);
|
||||
g_windowMgr.SendNotice(1, reinterpret_cast<std::intptr_t>(text.c_str()), 0xFF, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
// OFFSET: 0x00D3F760
|
||||
// FUNCTION: fn_21813
|
||||
|
|
@ -644,6 +740,56 @@ void CGameMode::ReceiveResultNotice0118(const unsigned char* packet) {
|
|||
}
|
||||
|
||||
// OFFSET: 0x00D652E0
|
||||
// FUNCTION: fn_21998
|
||||
void CGameMode::ReceivePackageItemTest(const unsigned char* packet) {
|
||||
const PackageItemTestEntry* entry = reinterpret_cast<const PackageItemTestEntry*>(packet + 8);
|
||||
char packageName[260];
|
||||
std::memset(packageName, 0, sizeof(packageName));
|
||||
ITEM_INFO item;
|
||||
item.SetItemId(*reinterpret_cast<const int*>(packet + 4));
|
||||
int capacity = sizeof(packageName);
|
||||
ItemDescriptions{g_itemDescriptions}.Name(item, packageName, capacity, 0);
|
||||
|
||||
char path[2048];
|
||||
std::memset(path, 0, sizeof(path));
|
||||
int suffix = 0;
|
||||
std::sprintf(path, "%s\\PackageItemTest", g_applicationDirectory);
|
||||
if (_access(path, 0) != 0 && _mkdir(path) != 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
SYSTEMTIME time;
|
||||
GetLocalTime(&time);
|
||||
std::sprintf(path, "%s\\PackageItemTest\\%s(%d_%d_%d).txt", g_applicationDirectory, packageName, time.wYear, time.wMonth, time.wDay);
|
||||
while (_access(path, 0) == 0) {
|
||||
++suffix;
|
||||
std::sprintf(path, "%s\\PackageItemTest\\%s(%d_%d_%d)_%d.txt", g_applicationDirectory, packageName, time.wYear, time.wMonth, time.wDay, suffix);
|
||||
}
|
||||
|
||||
std::FILE* file = std::fopen(path, "w");
|
||||
if (!file) {
|
||||
return;
|
||||
}
|
||||
|
||||
int total = 0;
|
||||
const int count = static_cast<unsigned int>(*reinterpret_cast<const std::int16_t*>(packet + 2) - 8) / sizeof(PackageItemTestEntry);
|
||||
std::fprintf(file, "============================START============================\n");
|
||||
for (int i = 0; i < count; ++i) {
|
||||
char itemName[260];
|
||||
std::memset(itemName, 0, sizeof(itemName));
|
||||
const PackageItemTestEntry current = *entry;
|
||||
item.SetItemId(current.itemId);
|
||||
int nameCapacity = sizeof(itemName);
|
||||
ItemDescriptions{g_itemDescriptions}.Name(item, itemName, nameCapacity, 0);
|
||||
std::fprintf(file, "%s\t\t\t%d\t%c%d%c\n", itemName, current.count, '(', current.unknown_0004, ')');
|
||||
total += current.count;
|
||||
++entry;
|
||||
}
|
||||
|
||||
std::fprintf(file, "============================END============================\n");
|
||||
std::fprintf(file, "Unpacked %d Packages\n", total);
|
||||
std::fclose(file);
|
||||
}
|
||||
|
||||
#pragma pack(push, 1)
|
||||
struct SummonHpInitPacket {
|
||||
|
|
@ -1010,6 +1156,40 @@ void CGameMode::ReceiveGameOptionResult(int command, int result, int enabled) {
|
|||
}
|
||||
|
||||
// OFFSET: 0x00D679E0
|
||||
// FUNCTION: fn_22037
|
||||
void CGameMode::ReceiveGradeEnchantResult(const unsigned char* packet) {
|
||||
ITEM_INFO item = LookupClientItemByIdentity(g_session.m_inventoryItems, *reinterpret_cast<const std::int16_t*>(packet + 2));
|
||||
if (item.unknown_0000[1]) {
|
||||
const int result = *reinterpret_cast<const int*>(packet + 6);
|
||||
if (result == 0 || result == 2) {
|
||||
if (result == 0) {
|
||||
item.unknown_0060 = 0;
|
||||
}
|
||||
item.unknown_0088 = *reinterpret_cast<const std::int16_t*>(packet + 4);
|
||||
g_session.UpdateInventoryItem(item, 1);
|
||||
}
|
||||
}
|
||||
|
||||
auto* window = static_cast<UIGradeEnchantWnd*>(g_windowMgr.LookupWindow(343));
|
||||
if (window) {
|
||||
const int result = *reinterpret_cast<const int*>(packet + 6);
|
||||
switch (result) {
|
||||
case 0:
|
||||
window->SetResult(2, 0);
|
||||
g_effectMgr->Spawn(g_session.m_aid, 1607, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
||||
g_effectMgr->Spawn(g_session.m_aid, 1608, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0)->Slot16(2800);
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
window->SetResult(2, result);
|
||||
g_effectMgr->Spawn(g_session.m_aid, 1607, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0);
|
||||
g_effectMgr->Spawn(g_session.m_aid, 1609, 0.0f, 0.0f, 0.0f, 0, -1, 0, 0)->Slot16(2800);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// OFFSET: 0x00D686F0
|
||||
// FUNCTION: fn_22042
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue