Zitat von tim66613
Ja, aber nur notdürftig.
Der Code hier funktioniert nicht richtig und verstößt nebenbei noch gg. meine Coding-Conventions.
Code:
uint8_t packet[40];
uint8_t safeboxData[44];
if (!self->Recv(packet, 40))
return 0;
// TODO: Rewrite this using the packet_item and the TPacketSafeboxItemSet structures (1byte alignment)
*(uint32_t *)safeboxData = *(uint32_t *)&packet[2];
safeboxData[4] = packet[6];
*(uint32_t *)&safeboxData[9] = *(uint32_t *)&packet[7];
*(uint32_t *)&safeboxData[13] = *(uint32_t *)&packet[11];
*(uint32_t *)&safeboxData[17] = *(uint32_t *)&packet[15];
*(uint16_t *)&safeboxData[21] = *(uint16_t *)&packet[19];
safeboxData[23] = packet[21];
*(uint16_t *)&safeboxData[24] = *(uint16_t *)&packet[22];
safeboxData[26] = packet[24];
*(uint16_t *)&safeboxData[27] = *(uint16_t *)&packet[25];
safeboxData[29] = packet[27];
*(uint16_t *)&safeboxData[30] = *(uint16_t *)&packet[28];
safeboxData[32] = packet[30];
*(uint16_t *)&safeboxData[33] = *(uint16_t *)&packet[31];
safeboxData[35] = packet[33];
*(uint16_t *)&safeboxData[36] = *(uint16_t *)&packet[34];
safeboxData[38] = packet[36];
*(uint16_t *)&safeboxData[39] = *(uint16_t *)&packet[37];
safeboxData[41] = packet[39];
*(uint32_t *)&safeboxData[5] = 0;
void (__stdcall* CPythonSafebox__SetItemData)(DWORD dwSlotIndex, const void* data) = (void (__stdcall* )(DWORD, const void*))0x467500;
const void* safeboxSingleton = *(void **)0x61C370;
asm("movl %0, %%ecx" : : "m" (safeboxSingleton));
CPythonSafebox__SetItemData(DWORD(packet[1]), safeboxData);
(reinterpret_cast<uint8_t*>(self))[1322] = 1; // Refresh Safebox
habs mal aus dem thread kopiert falls es nichts ausmacht