mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-22 07:01:29 +00:00
Going to start work on SerializingItems for bulk inv sends
This commit is contained in:
parent
ca278d029e
commit
4e4168852b
@ -532,71 +532,72 @@ namespace RoF
|
|||||||
{
|
{
|
||||||
//consume the packet
|
//consume the packet
|
||||||
EQApplicationPacket *in = *p;
|
EQApplicationPacket *in = *p;
|
||||||
|
delete in;
|
||||||
|
|
||||||
*p = nullptr;
|
//*p = nullptr;
|
||||||
|
//
|
||||||
if (in->size == 0) {
|
//if (in->size == 0) {
|
||||||
|
//
|
||||||
in->size = 4;
|
// in->size = 4;
|
||||||
in->pBuffer = new uchar[in->size];
|
// in->pBuffer = new uchar[in->size];
|
||||||
|
//
|
||||||
*((uint32 *)in->pBuffer) = 0;
|
// *((uint32 *)in->pBuffer) = 0;
|
||||||
|
//
|
||||||
dest->FastQueuePacket(&in, ack_req);
|
// dest->FastQueuePacket(&in, ack_req);
|
||||||
return;
|
// return;
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
//store away the emu struct
|
////store away the emu struct
|
||||||
unsigned char *__emu_buffer = in->pBuffer;
|
//unsigned char *__emu_buffer = in->pBuffer;
|
||||||
|
//
|
||||||
int ItemCount = in->size / sizeof(InternalSerializedItem_Struct);
|
//int ItemCount = in->size / sizeof(InternalSerializedItem_Struct);
|
||||||
|
//
|
||||||
if (ItemCount == 0 || (in->size % sizeof(InternalSerializedItem_Struct)) != 0) {
|
//if (ItemCount == 0 || (in->size % sizeof(InternalSerializedItem_Struct)) != 0) {
|
||||||
|
//
|
||||||
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Wrong size on outbound %s: Got %d, expected multiple of %d",
|
// Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Wrong size on outbound %s: Got %d, expected multiple of %d",
|
||||||
opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(InternalSerializedItem_Struct));
|
// opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(InternalSerializedItem_Struct));
|
||||||
|
//
|
||||||
delete in;
|
// delete in;
|
||||||
|
//
|
||||||
return;
|
// return;
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
InternalSerializedItem_Struct *eq = (InternalSerializedItem_Struct *)in->pBuffer;
|
//InternalSerializedItem_Struct *eq = (InternalSerializedItem_Struct *)in->pBuffer;
|
||||||
|
//
|
||||||
in->pBuffer = new uchar[4];
|
//in->pBuffer = new uchar[4];
|
||||||
*(uint32 *)in->pBuffer = ItemCount;
|
//*(uint32 *)in->pBuffer = ItemCount;
|
||||||
in->size = 4;
|
//in->size = 4;
|
||||||
|
//
|
||||||
for (int r = 0; r < ItemCount; r++, eq++) {
|
//for (int r = 0; r < ItemCount; r++, eq++) {
|
||||||
|
//
|
||||||
uint32 Length = 0;
|
// uint32 Length = 0;
|
||||||
|
//
|
||||||
char* Serialized = SerializeItem((const ItemInst*)eq->inst, eq->slot_id, &Length, 0);
|
// char* Serialized = SerializeItem((const ItemInst*)eq->inst, eq->slot_id, &Length, 0);
|
||||||
|
//
|
||||||
if (Serialized) {
|
// if (Serialized) {
|
||||||
|
//
|
||||||
uchar *OldBuffer = in->pBuffer;
|
// uchar *OldBuffer = in->pBuffer;
|
||||||
in->pBuffer = new uchar[in->size + Length];
|
// in->pBuffer = new uchar[in->size + Length];
|
||||||
memcpy(in->pBuffer, OldBuffer, in->size);
|
// memcpy(in->pBuffer, OldBuffer, in->size);
|
||||||
|
//
|
||||||
safe_delete_array(OldBuffer);
|
// safe_delete_array(OldBuffer);
|
||||||
|
//
|
||||||
memcpy(in->pBuffer + in->size, Serialized, Length);
|
// memcpy(in->pBuffer + in->size, Serialized, Length);
|
||||||
in->size += Length;
|
// in->size += Length;
|
||||||
|
//
|
||||||
safe_delete_array(Serialized);
|
// safe_delete_array(Serialized);
|
||||||
}
|
// }
|
||||||
else {
|
// else {
|
||||||
Log.Out(Logs::General, Logs::Netcode, "[ERROR] Serialization failed on item slot %d during OP_CharInventory. Item skipped.", eq->slot_id);
|
// Log.Out(Logs::General, Logs::Netcode, "[ERROR] Serialization failed on item slot %d during OP_CharInventory. Item skipped.", eq->slot_id);
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
delete[] __emu_buffer;
|
//delete[] __emu_buffer;
|
||||||
|
//
|
||||||
//Log.LogDebugType(Logs::General, Logs::Netcode, "[ERROR] Sending inventory to client");
|
////Log.LogDebugType(Logs::General, Logs::Netcode, "[ERROR] Sending inventory to client");
|
||||||
//Log.Hex(Logs::Netcode, in->pBuffer, in->size);
|
////Log.Hex(Logs::Netcode, in->pBuffer, in->size);
|
||||||
|
//
|
||||||
dest->FastQueuePacket(&in, ack_req);
|
//dest->FastQueuePacket(&in, ack_req);
|
||||||
}
|
}
|
||||||
|
|
||||||
ENCODE(OP_ClickObjectAction)
|
ENCODE(OP_ClickObjectAction)
|
||||||
|
|||||||
@ -13,6 +13,7 @@
|
|||||||
#include "rof2_structs.h"
|
#include "rof2_structs.h"
|
||||||
#include "../rulesys.h"
|
#include "../rulesys.h"
|
||||||
#include "../memory_buffer.h"
|
#include "../memory_buffer.h"
|
||||||
|
#include "../item_instance.h"
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
@ -26,7 +27,7 @@ namespace RoF2
|
|||||||
static Strategy struct_strategy;
|
static Strategy struct_strategy;
|
||||||
|
|
||||||
char* SerializeItem(const ItemInst *inst, int16 slot_id, uint32 *length, uint8 depth, ItemPacketType packet_type);
|
char* SerializeItem(const ItemInst *inst, int16 slot_id, uint32 *length, uint8 depth, ItemPacketType packet_type);
|
||||||
|
void SerializeItem(EQEmu::MemoryBuffer &packet_data, EQEmu::ItemInstance *inst, int container_id, int slot_id, int bag_id, int aug_id);
|
||||||
// server to client inventory location converters
|
// server to client inventory location converters
|
||||||
static inline structs::ItemSlotStruct ServerToRoF2Slot(uint32 serverSlot, ItemPacketType PacketType = ItemPacketInvalid);
|
static inline structs::ItemSlotStruct ServerToRoF2Slot(uint32 serverSlot, ItemPacketType PacketType = ItemPacketInvalid);
|
||||||
static inline structs::MainInvItemSlotStruct ServerToRoF2MainInvSlot(uint32 serverSlot);
|
static inline structs::MainInvItemSlotStruct ServerToRoF2MainInvSlot(uint32 serverSlot);
|
||||||
@ -612,14 +613,23 @@ namespace RoF2
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//SerializedItemInstance_Struct *sis = (SerializedItemInstance_Struct*)in->pBuffer;
|
SerializedItemInstance_Struct *sis = (SerializedItemInstance_Struct*)in->pBuffer;
|
||||||
//EQEmu::MemoryBuffer packet_data;
|
EQEmu::MemoryBuffer packet_data;
|
||||||
//packet_data.Write<uint32>(entries);
|
packet_data.Write<uint32>(entries);
|
||||||
//
|
|
||||||
//for(size_t i = 0; i < entries; ++i) {
|
for(size_t i = 0; i < entries; ++i) {
|
||||||
|
EQEmu::ItemInstance *inst = (EQEmu::ItemInstance*)sis[i].inst;
|
||||||
|
|
||||||
|
if(!inst) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//SerializeItem(packet_data, inst, sis[i].container_id, sis[i].slot_id, -1, -1, ItemPacketCharInventory);
|
||||||
// //SerializeItem((const EQEmu::ItemInstance*)
|
// //SerializeItem((const EQEmu::ItemInstance*)
|
||||||
// //char* Serialized = SerializeItem((const ItemInst*)eq->inst, eq->slot_id, &Length, 0, ItemPacketCharInventory);
|
// //char* Serialized = SerializeItem((const ItemInst*)eq->inst, eq->slot_id, &Length, 0, ItemPacketCharInventory);
|
||||||
//}
|
}
|
||||||
|
|
||||||
|
delete in;
|
||||||
|
|
||||||
//if (in->size == 0) {
|
//if (in->size == 0) {
|
||||||
//
|
//
|
||||||
|
|||||||
@ -336,71 +336,72 @@ namespace SoD
|
|||||||
{
|
{
|
||||||
//consume the packet
|
//consume the packet
|
||||||
EQApplicationPacket *in = *p;
|
EQApplicationPacket *in = *p;
|
||||||
|
delete in;
|
||||||
|
|
||||||
*p = nullptr;
|
//*p = nullptr;
|
||||||
|
//
|
||||||
if (in->size == 0) {
|
//if (in->size == 0) {
|
||||||
|
//
|
||||||
in->size = 4;
|
// in->size = 4;
|
||||||
|
//
|
||||||
in->pBuffer = new uchar[in->size];
|
// in->pBuffer = new uchar[in->size];
|
||||||
|
//
|
||||||
*((uint32 *)in->pBuffer) = 0;
|
// *((uint32 *)in->pBuffer) = 0;
|
||||||
|
//
|
||||||
dest->FastQueuePacket(&in, ack_req);
|
// dest->FastQueuePacket(&in, ack_req);
|
||||||
|
//
|
||||||
return;
|
// return;
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
//store away the emu struct
|
////store away the emu struct
|
||||||
unsigned char *__emu_buffer = in->pBuffer;
|
//unsigned char *__emu_buffer = in->pBuffer;
|
||||||
|
//
|
||||||
int ItemCount = in->size / sizeof(InternalSerializedItem_Struct);
|
//int ItemCount = in->size / sizeof(InternalSerializedItem_Struct);
|
||||||
|
//
|
||||||
if (ItemCount == 0 || (in->size % sizeof(InternalSerializedItem_Struct)) != 0) {
|
//if (ItemCount == 0 || (in->size % sizeof(InternalSerializedItem_Struct)) != 0) {
|
||||||
|
//
|
||||||
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Wrong size on outbound %s: Got %d, expected multiple of %d",
|
// Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Wrong size on outbound %s: Got %d, expected multiple of %d",
|
||||||
opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(InternalSerializedItem_Struct));
|
// opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(InternalSerializedItem_Struct));
|
||||||
|
//
|
||||||
delete in;
|
// delete in;
|
||||||
return;
|
// return;
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
InternalSerializedItem_Struct *eq = (InternalSerializedItem_Struct *)in->pBuffer;
|
//InternalSerializedItem_Struct *eq = (InternalSerializedItem_Struct *)in->pBuffer;
|
||||||
in->pBuffer = new uchar[4];
|
//in->pBuffer = new uchar[4];
|
||||||
*(uint32 *)in->pBuffer = ItemCount;
|
//*(uint32 *)in->pBuffer = ItemCount;
|
||||||
in->size = 4;
|
//in->size = 4;
|
||||||
|
//
|
||||||
for (int r = 0; r < ItemCount; r++, eq++) {
|
//for (int r = 0; r < ItemCount; r++, eq++) {
|
||||||
|
//
|
||||||
uint32 Length = 0;
|
// uint32 Length = 0;
|
||||||
char* Serialized = SerializeItem((const ItemInst*)eq->inst, eq->slot_id, &Length, 0);
|
// char* Serialized = SerializeItem((const ItemInst*)eq->inst, eq->slot_id, &Length, 0);
|
||||||
|
//
|
||||||
if (Serialized) {
|
// if (Serialized) {
|
||||||
|
//
|
||||||
uchar *OldBuffer = in->pBuffer;
|
// uchar *OldBuffer = in->pBuffer;
|
||||||
in->pBuffer = new uchar[in->size + Length];
|
// in->pBuffer = new uchar[in->size + Length];
|
||||||
memcpy(in->pBuffer, OldBuffer, in->size);
|
// memcpy(in->pBuffer, OldBuffer, in->size);
|
||||||
|
//
|
||||||
safe_delete_array(OldBuffer);
|
// safe_delete_array(OldBuffer);
|
||||||
|
//
|
||||||
memcpy(in->pBuffer + in->size, Serialized, Length);
|
// memcpy(in->pBuffer + in->size, Serialized, Length);
|
||||||
in->size += Length;
|
// in->size += Length;
|
||||||
|
//
|
||||||
safe_delete_array(Serialized);
|
// safe_delete_array(Serialized);
|
||||||
|
//
|
||||||
}
|
// }
|
||||||
else {
|
// else {
|
||||||
Log.Out(Logs::General, Logs::Netcode, "[ERROR] Serialization failed on item slot %d during OP_CharInventory. Item skipped.", eq->slot_id);
|
// Log.Out(Logs::General, Logs::Netcode, "[ERROR] Serialization failed on item slot %d during OP_CharInventory. Item skipped.", eq->slot_id);
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
delete[] __emu_buffer;
|
//delete[] __emu_buffer;
|
||||||
|
//
|
||||||
//Log.LogDebugType(Logs::General, Logs::Netcode, "[ERROR] Sending inventory to client");
|
////Log.LogDebugType(Logs::General, Logs::Netcode, "[ERROR] Sending inventory to client");
|
||||||
//Log.Hex(Logs::Netcode, in->pBuffer, in->size);
|
////Log.Hex(Logs::Netcode, in->pBuffer, in->size);
|
||||||
|
//
|
||||||
dest->FastQueuePacket(&in, ack_req);
|
//dest->FastQueuePacket(&in, ack_req);
|
||||||
}
|
}
|
||||||
|
|
||||||
ENCODE(OP_ClientUpdate)
|
ENCODE(OP_ClientUpdate)
|
||||||
|
|||||||
@ -318,69 +318,70 @@ namespace SoF
|
|||||||
{
|
{
|
||||||
//consume the packet
|
//consume the packet
|
||||||
EQApplicationPacket *in = *p;
|
EQApplicationPacket *in = *p;
|
||||||
|
delete in;
|
||||||
|
|
||||||
*p = nullptr;
|
//*p = nullptr;
|
||||||
|
//
|
||||||
if (in->size == 0) {
|
//if (in->size == 0) {
|
||||||
in->size = 4;
|
// in->size = 4;
|
||||||
in->pBuffer = new uchar[in->size];
|
// in->pBuffer = new uchar[in->size];
|
||||||
*((uint32 *)in->pBuffer) = 0;
|
// *((uint32 *)in->pBuffer) = 0;
|
||||||
|
//
|
||||||
dest->FastQueuePacket(&in, ack_req);
|
// dest->FastQueuePacket(&in, ack_req);
|
||||||
return;
|
// return;
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
//store away the emu struct
|
////store away the emu struct
|
||||||
unsigned char *__emu_buffer = in->pBuffer;
|
//unsigned char *__emu_buffer = in->pBuffer;
|
||||||
|
//
|
||||||
int ItemCount = in->size / sizeof(InternalSerializedItem_Struct);
|
//int ItemCount = in->size / sizeof(InternalSerializedItem_Struct);
|
||||||
|
//
|
||||||
if (ItemCount == 0 || (in->size % sizeof(InternalSerializedItem_Struct)) != 0) {
|
//if (ItemCount == 0 || (in->size % sizeof(InternalSerializedItem_Struct)) != 0) {
|
||||||
|
//
|
||||||
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Wrong size on outbound %s: Got %d, expected multiple of %d",
|
// Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Wrong size on outbound %s: Got %d, expected multiple of %d",
|
||||||
opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(InternalSerializedItem_Struct));
|
// opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(InternalSerializedItem_Struct));
|
||||||
|
//
|
||||||
delete in;
|
// delete in;
|
||||||
return;
|
// return;
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
InternalSerializedItem_Struct *eq = (InternalSerializedItem_Struct *)in->pBuffer;
|
//InternalSerializedItem_Struct *eq = (InternalSerializedItem_Struct *)in->pBuffer;
|
||||||
|
//
|
||||||
in->pBuffer = new uchar[4];
|
//in->pBuffer = new uchar[4];
|
||||||
*(uint32 *)in->pBuffer = ItemCount;
|
//*(uint32 *)in->pBuffer = ItemCount;
|
||||||
in->size = 4;
|
//in->size = 4;
|
||||||
|
//
|
||||||
for (int r = 0; r < ItemCount; r++, eq++) {
|
//for (int r = 0; r < ItemCount; r++, eq++) {
|
||||||
|
//
|
||||||
uint32 Length = 0;
|
// uint32 Length = 0;
|
||||||
|
//
|
||||||
char* Serialized = SerializeItem((const ItemInst*)eq->inst, eq->slot_id, &Length, 0);
|
// char* Serialized = SerializeItem((const ItemInst*)eq->inst, eq->slot_id, &Length, 0);
|
||||||
|
//
|
||||||
if (Serialized) {
|
// if (Serialized) {
|
||||||
uchar *OldBuffer = in->pBuffer;
|
// uchar *OldBuffer = in->pBuffer;
|
||||||
|
//
|
||||||
in->pBuffer = new uchar[in->size + Length];
|
// in->pBuffer = new uchar[in->size + Length];
|
||||||
memcpy(in->pBuffer, OldBuffer, in->size);
|
// memcpy(in->pBuffer, OldBuffer, in->size);
|
||||||
|
//
|
||||||
safe_delete_array(OldBuffer);
|
// safe_delete_array(OldBuffer);
|
||||||
|
//
|
||||||
memcpy(in->pBuffer + in->size, Serialized, Length);
|
// memcpy(in->pBuffer + in->size, Serialized, Length);
|
||||||
in->size += Length;
|
// in->size += Length;
|
||||||
|
//
|
||||||
safe_delete_array(Serialized);
|
// safe_delete_array(Serialized);
|
||||||
|
//
|
||||||
}
|
// }
|
||||||
else {
|
// else {
|
||||||
Log.Out(Logs::General, Logs::Netcode, "[ERROR] Serialization failed on item slot %d during OP_CharInventory. Item skipped.", eq->slot_id);
|
// Log.Out(Logs::General, Logs::Netcode, "[ERROR] Serialization failed on item slot %d during OP_CharInventory. Item skipped.", eq->slot_id);
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
delete[] __emu_buffer;
|
//delete[] __emu_buffer;
|
||||||
|
//
|
||||||
//Log.LogDebugType(Logs::General, Logs::Netcode, "[ERROR] Sending inventory to client");
|
////Log.LogDebugType(Logs::General, Logs::Netcode, "[ERROR] Sending inventory to client");
|
||||||
//Log.Hex(Logs::Netcode, in->pBuffer, in->size);
|
////Log.Hex(Logs::Netcode, in->pBuffer, in->size);
|
||||||
|
//
|
||||||
dest->FastQueuePacket(&in, ack_req);
|
//dest->FastQueuePacket(&in, ack_req);
|
||||||
}
|
}
|
||||||
|
|
||||||
ENCODE(OP_ClientUpdate)
|
ENCODE(OP_ClientUpdate)
|
||||||
|
|||||||
@ -263,40 +263,42 @@ namespace Titanium
|
|||||||
EQApplicationPacket *in = *p;
|
EQApplicationPacket *in = *p;
|
||||||
*p = nullptr;
|
*p = nullptr;
|
||||||
|
|
||||||
//store away the emu struct
|
delete in;
|
||||||
unsigned char *__emu_buffer = in->pBuffer;
|
|
||||||
|
|
||||||
int itemcount = in->size / sizeof(InternalSerializedItem_Struct);
|
////store away the emu struct
|
||||||
if (itemcount == 0 || (in->size % sizeof(InternalSerializedItem_Struct)) != 0) {
|
//unsigned char *__emu_buffer = in->pBuffer;
|
||||||
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Wrong size on outbound %s: Got %d, expected multiple of %d", opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(InternalSerializedItem_Struct));
|
//
|
||||||
delete in;
|
//int itemcount = in->size / sizeof(InternalSerializedItem_Struct);
|
||||||
return;
|
//if (itemcount == 0 || (in->size % sizeof(InternalSerializedItem_Struct)) != 0) {
|
||||||
}
|
// Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Wrong size on outbound %s: Got %d, expected multiple of %d", opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(InternalSerializedItem_Struct));
|
||||||
InternalSerializedItem_Struct *eq = (InternalSerializedItem_Struct *)in->pBuffer;
|
// delete in;
|
||||||
|
// return;
|
||||||
//do the transform...
|
//}
|
||||||
int r;
|
//InternalSerializedItem_Struct *eq = (InternalSerializedItem_Struct *)in->pBuffer;
|
||||||
std::string serial_string;
|
//
|
||||||
for (r = 0; r < itemcount; r++, eq++) {
|
////do the transform...
|
||||||
uint32 length;
|
//int r;
|
||||||
char *serialized = SerializeItem((const ItemInst*)eq->inst, eq->slot_id, &length, 0);
|
//std::string serial_string;
|
||||||
if (serialized) {
|
//for (r = 0; r < itemcount; r++, eq++) {
|
||||||
serial_string.append(serialized, length + 1);
|
// uint32 length;
|
||||||
safe_delete_array(serialized);
|
// char *serialized = SerializeItem((const ItemInst*)eq->inst, eq->slot_id, &length, 0);
|
||||||
}
|
// if (serialized) {
|
||||||
else {
|
// serial_string.append(serialized, length + 1);
|
||||||
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d during OP_CharInventory. Item skipped.", eq->slot_id);
|
// safe_delete_array(serialized);
|
||||||
}
|
// }
|
||||||
|
// else {
|
||||||
}
|
// Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Serialization failed on item slot %d during OP_CharInventory. Item skipped.", eq->slot_id);
|
||||||
|
// }
|
||||||
in->size = serial_string.length();
|
//
|
||||||
in->pBuffer = new unsigned char[in->size];
|
//}
|
||||||
memcpy(in->pBuffer, serial_string.c_str(), serial_string.length());
|
//
|
||||||
|
//in->size = serial_string.length();
|
||||||
delete[] __emu_buffer;
|
//in->pBuffer = new unsigned char[in->size];
|
||||||
|
//memcpy(in->pBuffer, serial_string.c_str(), serial_string.length());
|
||||||
dest->FastQueuePacket(&in, ack_req);
|
//
|
||||||
|
//delete[] __emu_buffer;
|
||||||
|
//
|
||||||
|
//dest->FastQueuePacket(&in, ack_req);
|
||||||
}
|
}
|
||||||
|
|
||||||
ENCODE(OP_DeleteCharge) { ENCODE_FORWARD(OP_MoveItem); }
|
ENCODE(OP_DeleteCharge) { ENCODE_FORWARD(OP_MoveItem); }
|
||||||
|
|||||||
@ -474,68 +474,69 @@ namespace UF
|
|||||||
{
|
{
|
||||||
//consume the packet
|
//consume the packet
|
||||||
EQApplicationPacket *in = *p;
|
EQApplicationPacket *in = *p;
|
||||||
|
delete in;
|
||||||
|
|
||||||
*p = nullptr;
|
//*p = nullptr;
|
||||||
|
//
|
||||||
if (in->size == 0) {
|
//if (in->size == 0) {
|
||||||
|
//
|
||||||
in->size = 4;
|
// in->size = 4;
|
||||||
in->pBuffer = new uchar[in->size];
|
// in->pBuffer = new uchar[in->size];
|
||||||
*((uint32 *)in->pBuffer) = 0;
|
// *((uint32 *)in->pBuffer) = 0;
|
||||||
|
//
|
||||||
dest->FastQueuePacket(&in, ack_req);
|
// dest->FastQueuePacket(&in, ack_req);
|
||||||
return;
|
// return;
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
//store away the emu struct
|
////store away the emu struct
|
||||||
unsigned char *__emu_buffer = in->pBuffer;
|
//unsigned char *__emu_buffer = in->pBuffer;
|
||||||
|
//
|
||||||
int ItemCount = in->size / sizeof(InternalSerializedItem_Struct);
|
//int ItemCount = in->size / sizeof(InternalSerializedItem_Struct);
|
||||||
|
//
|
||||||
if (ItemCount == 0 || (in->size % sizeof(InternalSerializedItem_Struct)) != 0) {
|
//if (ItemCount == 0 || (in->size % sizeof(InternalSerializedItem_Struct)) != 0) {
|
||||||
|
//
|
||||||
Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Wrong size on outbound %s: Got %d, expected multiple of %d",
|
// Log.Out(Logs::General, Logs::Netcode, "[STRUCTS] Wrong size on outbound %s: Got %d, expected multiple of %d",
|
||||||
opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(InternalSerializedItem_Struct));
|
// opcodes->EmuToName(in->GetOpcode()), in->size, sizeof(InternalSerializedItem_Struct));
|
||||||
|
//
|
||||||
delete in;
|
// delete in;
|
||||||
return;
|
// return;
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
InternalSerializedItem_Struct *eq = (InternalSerializedItem_Struct *)in->pBuffer;
|
//InternalSerializedItem_Struct *eq = (InternalSerializedItem_Struct *)in->pBuffer;
|
||||||
|
//
|
||||||
in->pBuffer = new uchar[4];
|
//in->pBuffer = new uchar[4];
|
||||||
*(uint32 *)in->pBuffer = ItemCount;
|
//*(uint32 *)in->pBuffer = ItemCount;
|
||||||
in->size = 4;
|
//in->size = 4;
|
||||||
|
//
|
||||||
for (int r = 0; r < ItemCount; r++, eq++) {
|
//for (int r = 0; r < ItemCount; r++, eq++) {
|
||||||
|
//
|
||||||
uint32 Length = 0;
|
// uint32 Length = 0;
|
||||||
char* Serialized = SerializeItem((const ItemInst*)eq->inst, eq->slot_id, &Length, 0);
|
// char* Serialized = SerializeItem((const ItemInst*)eq->inst, eq->slot_id, &Length, 0);
|
||||||
|
//
|
||||||
if (Serialized) {
|
// if (Serialized) {
|
||||||
|
//
|
||||||
uchar *OldBuffer = in->pBuffer;
|
// uchar *OldBuffer = in->pBuffer;
|
||||||
in->pBuffer = new uchar[in->size + Length];
|
// in->pBuffer = new uchar[in->size + Length];
|
||||||
memcpy(in->pBuffer, OldBuffer, in->size);
|
// memcpy(in->pBuffer, OldBuffer, in->size);
|
||||||
|
//
|
||||||
safe_delete_array(OldBuffer);
|
// safe_delete_array(OldBuffer);
|
||||||
|
//
|
||||||
memcpy(in->pBuffer + in->size, Serialized, Length);
|
// memcpy(in->pBuffer + in->size, Serialized, Length);
|
||||||
in->size += Length;
|
// in->size += Length;
|
||||||
|
//
|
||||||
safe_delete_array(Serialized);
|
// safe_delete_array(Serialized);
|
||||||
}
|
// }
|
||||||
else {
|
// else {
|
||||||
Log.Out(Logs::General, Logs::Netcode, "[ERROR] Serialization failed on item slot %d during OP_CharInventory. Item skipped.", eq->slot_id);
|
// Log.Out(Logs::General, Logs::Netcode, "[ERROR] Serialization failed on item slot %d during OP_CharInventory. Item skipped.", eq->slot_id);
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
delete[] __emu_buffer;
|
//delete[] __emu_buffer;
|
||||||
|
//
|
||||||
//Log.LogDebugType(Logs::General, Logs::Netcode, "[ERROR] Sending inventory to client");
|
////Log.LogDebugType(Logs::General, Logs::Netcode, "[ERROR] Sending inventory to client");
|
||||||
//Log.Hex(Logs::Netcode, in->pBuffer, in->size);
|
////Log.Hex(Logs::Netcode, in->pBuffer, in->size);
|
||||||
|
//
|
||||||
dest->FastQueuePacket(&in, ack_req);
|
//dest->FastQueuePacket(&in, ack_req);
|
||||||
}
|
}
|
||||||
|
|
||||||
ENCODE(OP_ClientUpdate)
|
ENCODE(OP_ClientUpdate)
|
||||||
|
|||||||
@ -820,8 +820,9 @@ void Client::BulkSendInventoryItems() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
EQApplicationPacket* outapp = new EQApplicationPacket(OP_CharInventory, items.Size());
|
EQApplicationPacket outapp(OP_CharInventory, items.Size());
|
||||||
memcpy(outapp->pBuffer, items, items.Size());
|
memcpy(outapp.pBuffer, items, items.Size());
|
||||||
|
QueuePacket(&outapp);
|
||||||
|
|
||||||
|
|
||||||
//int16 slot_id = 0;
|
//int16 slot_id = 0;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user