!!!!
This commit is contained in:
@@ -212,7 +212,14 @@ void netprot::Serialize(Sync* sync, char* buf[], uint32_t* buflen) {
|
||||
|
||||
memcpy(*buf + sizeof(uint64_t) * 2 + sizeof(uint32_t) * 4 + sizeof(uint16_t) + 1, hp8, sizeof(float));
|
||||
|
||||
*buflen = sizeof(uint64_t) * 2 + sizeof(uint32_t) * 4 + sizeof(uint16_t) + sizeof(float) + 1;
|
||||
Boosts boost = sync->boost;
|
||||
uint8_t boost8 = // Reste 6 bits.
|
||||
(boost.invincible ? 0b10000000 : 0) |
|
||||
(boost.damage ? 0b01000000 : 0);
|
||||
|
||||
memcpy(*buf + sizeof(uint64_t) * 2 + sizeof(uint32_t) * 4 + sizeof(uint16_t) + 2, &boost8, sizeof(uint8_t));
|
||||
|
||||
*buflen = sizeof(uint64_t) * 2 + sizeof(uint32_t) * 4 + sizeof(uint16_t) + sizeof(float) + 2;
|
||||
}
|
||||
|
||||
void netprot::Serialize(TeamInfo* tinfo, char* buf[], uint32_t* buflen) {
|
||||
@@ -514,6 +521,53 @@ void netprot::Serialize(BulletAdd* bull, char* buf[], uint32_t* buflen) {
|
||||
*buflen = 1 + sizeof(uint64_t) * 2 + sizeof(uint32_t) * 6;
|
||||
}
|
||||
|
||||
void netprot::Serialize(PickupMod* pmod, char* buf[], uint32_t* buflen) {
|
||||
*buf[0] = (char)netprot::PACKET_TYPE::PICKUPMOD;
|
||||
|
||||
uint64_t id = pmod->id;
|
||||
uint8_t id8[sizeof(uint64_t)] = { (uint8_t)((id >> 56) & 0xFF),
|
||||
(uint8_t)((id >> 48) & 0xFF),
|
||||
(uint8_t)((id >> 40) & 0xFF),
|
||||
(uint8_t)((id >> 32) & 0xFF),
|
||||
(uint8_t)((id >> 24) & 0xFF),
|
||||
(uint8_t)((id >> 16) & 0xFF),
|
||||
(uint8_t)((id >> 8) & 0xFF),
|
||||
(uint8_t)(id & 0xFF) };
|
||||
|
||||
memcpy(*buf + 1, id8, sizeof(uint64_t));
|
||||
|
||||
uint32_t vec[3];
|
||||
memcpy(vec, &pmod->pos, sizeof(Vector3f)); // Pour d<>naturer les floats.
|
||||
|
||||
uint8_t vec8[3 * sizeof(uint32_t)] = {
|
||||
(uint8_t)((vec[0] >> 24) & 0xFF),
|
||||
(uint8_t)((vec[0] >> 16) & 0xFF),
|
||||
(uint8_t)((vec[0] >> 8) & 0xFF),
|
||||
(uint8_t)(vec[0] & 0xFF),
|
||||
(uint8_t)((vec[1] >> 24) & 0xFF),
|
||||
(uint8_t)((vec[1] >> 16) & 0xFF),
|
||||
(uint8_t)((vec[1] >> 8) & 0xFF),
|
||||
(uint8_t)(vec[1] & 0xFF),
|
||||
(uint8_t)((vec[2] >> 24) & 0xFF),
|
||||
(uint8_t)((vec[2] >> 16) & 0xFF),
|
||||
(uint8_t)((vec[2] >> 8) & 0xFF),
|
||||
(uint8_t)(vec[2] & 0xFF) };
|
||||
|
||||
memcpy(*buf + sizeof(uint64_t) + 1, vec8, sizeof(uint32_t) * 3);
|
||||
|
||||
Boosts boost = pmod->boost;
|
||||
uint8_t boost8 = // Reste 5 bits.
|
||||
(boost.invincible ? 0b10000000 : 0) |
|
||||
(boost.damage ? 0b01000000 : 0) |
|
||||
(boost.hp ? 0b00100000 : 0);
|
||||
|
||||
memcpy(*buf + sizeof(uint64_t) + sizeof(uint32_t) * 3 + 1, &boost8, sizeof(uint8_t));
|
||||
|
||||
memcpy(*buf + 2 + sizeof(uint64_t) + sizeof(uint32_t) * 3, &pmod->available, sizeof(bool));
|
||||
|
||||
*buflen = 2 + sizeof(uint64_t) + sizeof(uint32_t) * 3 + 3;
|
||||
}
|
||||
|
||||
void netprot::Serialize(ErrorLog* errlog, char* buf[], uint32_t* buflen) {
|
||||
*buf[0] = (char)netprot::PACKET_TYPE::ERRLOG;
|
||||
|
||||
@@ -528,6 +582,7 @@ void netprot::Serialize(ErrorLog* errlog, char* buf[], uint32_t* buflen) {
|
||||
|
||||
|
||||
|
||||
|
||||
bool netprot::Deserialize(Input* in, char* buf, uint32_t* buflen) {
|
||||
if (*buflen <= sizeof(Input))
|
||||
return false;
|
||||
@@ -736,7 +791,12 @@ bool netprot::Deserialize(Sync* sync, char* buf, uint32_t* buflen) {
|
||||
|
||||
memcpy(&sync->hp, &hp, sizeof(float));
|
||||
|
||||
*buflen = 1 + sizeof(uint64_t) * 2 + sizeof(uint32_t) * 4 + sizeof(uint16_t) + sizeof(float);
|
||||
uint8_t boost = 0;
|
||||
memcpy(&boost, &buf[2 + sizeof(uint64_t) * 2 + sizeof(uint32_t) * 4 + sizeof(uint16_t)], sizeof(uint8_t));
|
||||
sync->boost.invincible = boost & 0b10000000;
|
||||
sync->boost.damage = boost & 0b01000000;
|
||||
|
||||
*buflen = 2 + sizeof(uint64_t) * 2 + sizeof(uint32_t) * 4 + sizeof(uint16_t) + sizeof(float);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1059,6 +1119,53 @@ bool netprot::Deserialize(ErrorLog* errlog, char* buf, uint32_t* buflen) {
|
||||
return true;
|
||||
}
|
||||
|
||||
bool netprot::Deserialize(PickupMod* pmod, char* buf, uint32_t* buflen) {
|
||||
if (*buflen <= sizeof(PickupMod))
|
||||
return false;
|
||||
|
||||
uint8_t diff[sizeof(uint64_t)] = { 0,0,0,0,0,0,0,0 };
|
||||
memcpy(diff, &buf[1], sizeof(uint64_t));
|
||||
pmod->id =
|
||||
(uint64_t)diff[0] << 56 |
|
||||
(uint64_t)diff[1] << 48 |
|
||||
(uint64_t)diff[2] << 40 |
|
||||
(uint64_t)diff[3] << 32 |
|
||||
(uint64_t)diff[4] << 24 |
|
||||
(uint64_t)diff[5] << 16 |
|
||||
(uint64_t)diff[6] << 8 |
|
||||
(uint64_t)diff[7];
|
||||
|
||||
uint8_t subvec[3 * sizeof(uint32_t)] = { 0,0,0,0,0,0,0,0,0,0,0,0 };
|
||||
memcpy(subvec, &buf[2 + sizeof(uint64_t)], sizeof(uint8_t) * 12);
|
||||
uint32_t vec[3] = {
|
||||
(uint32_t)subvec[0] << 24 |
|
||||
(uint32_t)subvec[1] << 16 |
|
||||
(uint32_t)subvec[2] << 8 |
|
||||
(uint32_t)subvec[3],
|
||||
(uint32_t)subvec[4] << 24 |
|
||||
(uint32_t)subvec[5] << 16 |
|
||||
(uint32_t)subvec[6] << 8 |
|
||||
(uint32_t)subvec[7],
|
||||
(uint32_t)subvec[8] << 24 |
|
||||
(uint32_t)subvec[9] << 16 |
|
||||
(uint32_t)subvec[10] << 8 |
|
||||
(uint32_t)subvec[11] };
|
||||
|
||||
memcpy(&pmod->pos, vec, sizeof(uint32_t) * 3);
|
||||
|
||||
uint8_t boosts = 0;
|
||||
memcpy(&boosts, &buf[1 + sizeof(uint64_t) + sizeof(uint32_t) * 3], sizeof(uint8_t));
|
||||
pmod->boost.invincible = boosts & 0b10000000;
|
||||
pmod->boost.damage = boosts & 0b01000000;
|
||||
pmod->boost.hp = boosts & 0b00100000;
|
||||
|
||||
memcpy(&pmod->available, &buf[2 + sizeof(uint64_t) + sizeof(uint32_t) * 3], sizeof(bool));
|
||||
|
||||
*buflen = 3 + sizeof(uint64_t) + sizeof(uint32_t) * 3;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
netprot::PACKET_TYPE netprot::getType(char* buf, const uint32_t buflen) {
|
||||
|
Reference in New Issue
Block a user