fix uneven command size on ep3 card list update
This commit is contained in:
+11
-5
@@ -40,11 +40,11 @@ void send_command(
|
|||||||
PSOCommandHeaderDCGC header;
|
PSOCommandHeaderDCGC header;
|
||||||
header.command = command;
|
header.command = command;
|
||||||
header.flag = flag;
|
header.flag = flag;
|
||||||
header.size = sizeof(header) + size;
|
header.size = (sizeof(header) + size + 3) & ~3;
|
||||||
send_data.append(reinterpret_cast<const char*>(&header), sizeof(header));
|
send_data.append(reinterpret_cast<const char*>(&header), sizeof(header));
|
||||||
if (size) {
|
if (size) {
|
||||||
send_data.append(reinterpret_cast<const char*>(data), size);
|
send_data.append(reinterpret_cast<const char*>(data), size);
|
||||||
send_data.resize((send_data.size() + 3) & ~3);
|
send_data.resize(header.size);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -52,20 +52,23 @@ void send_command(
|
|||||||
case GameVersion::PC:
|
case GameVersion::PC:
|
||||||
case GameVersion::PATCH: {
|
case GameVersion::PATCH: {
|
||||||
PSOCommandHeaderPC header;
|
PSOCommandHeaderPC header;
|
||||||
header.size = sizeof(header) + size;
|
header.size = (sizeof(header) + size + 3) & ~3;
|
||||||
header.command = command;
|
header.command = command;
|
||||||
header.flag = flag;
|
header.flag = flag;
|
||||||
send_data.append(reinterpret_cast<const char*>(&header), sizeof(header));
|
send_data.append(reinterpret_cast<const char*>(&header), sizeof(header));
|
||||||
if (size) {
|
if (size) {
|
||||||
send_data.append(reinterpret_cast<const char*>(data), size);
|
send_data.append(reinterpret_cast<const char*>(data), size);
|
||||||
send_data.resize((send_data.size() + 3) & ~3);
|
send_data.resize(header.size);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case GameVersion::BB: {
|
case GameVersion::BB: {
|
||||||
|
// BB has an annoying behavior here: command lengths must be multiples of
|
||||||
|
// 4, but the actual data length must be a multiple of 8. If the size
|
||||||
|
// field is not divisible by 8, 4 extra bytes are sent anyway.
|
||||||
PSOCommandHeaderBB header;
|
PSOCommandHeaderBB header;
|
||||||
header.size = sizeof(header) + size;
|
header.size = (sizeof(header) + size + 3) & ~3;
|
||||||
header.command = command;
|
header.command = command;
|
||||||
header.flag = flag;
|
header.flag = flag;
|
||||||
send_data.append(reinterpret_cast<const char*>(&header), sizeof(header));
|
send_data.append(reinterpret_cast<const char*>(&header), sizeof(header));
|
||||||
@@ -854,6 +857,9 @@ void send_join_game_t(shared_ptr<Client> c, shared_ptr<Lobby> l) {
|
|||||||
l->clients[x]->player.disp);
|
l->clients[x]->player.disp);
|
||||||
}
|
}
|
||||||
player_count++;
|
player_count++;
|
||||||
|
} else {
|
||||||
|
// inventory doesn't have a default contructor, so clear it manually
|
||||||
|
memset(&cmd.players_ep3[x].inventory, 0, sizeof(cmd.players_ep3[x].inventory));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user