diff --git a/SQCSim-common/netprotocol.cpp b/SQCSim-common/netprotocol.cpp index bcd03a7..33a4533 100644 --- a/SQCSim-common/netprotocol.cpp +++ b/SQCSim-common/netprotocol.cpp @@ -181,8 +181,6 @@ void netprot::Serialize(Sync* sync, char* buf[], uint32_t* buflen) { memcpy(*buf + sizeof(uint64_t) * 2 + sizeof(uint32_t) + 1, ammo8, sizeof(uint16_t)); - memcpy(*buf + sizeof(uint64_t) * 2 + sizeof(uint32_t) + sizeof(uint16_t) + 1, &sync->hp, sizeof(uint8_t)); - uint32_t vec[3]; memcpy(vec, &sync->position, sizeof(Vector3f)); // Pour d�naturer les floats. @@ -202,7 +200,17 @@ void netprot::Serialize(Sync* sync, char* buf[], uint32_t* buflen) { memcpy(*buf + sizeof(uint64_t) * 2 + sizeof(uint32_t) + sizeof(uint16_t) + 2, vec8, sizeof(uint32_t) * 3); - *buflen = sizeof(uint64_t) * 2 + sizeof(uint32_t) * 4 + sizeof(uint16_t) + 2; + uint32_t hp; + + memcpy(&hp, &sync->hp, sizeof(float)); + + uint8_t hp8[4] = { + (uint8_t)((hp >> 24) & 0xFF), + (uint8_t)((hp >> 16) & 0xFF), + (uint8_t)((hp >> 8) & 0xFF), + (uint8_t)(hp & 0xFF) }; + + *buflen = sizeof(uint64_t) * 2 + sizeof(uint32_t) * 4 + sizeof(uint16_t) + sizeof(float) + 1; } void netprot::Serialize(TeamInfo* tinfo, char* buf[], uint32_t* buflen) { @@ -691,7 +699,6 @@ bool netprot::Deserialize(Sync* sync, char* buf, uint32_t *buflen) { (uint16_t)diff[0] << 8 | (uint16_t)diff[1]; - memcpy(&sync->hp, &buf[1 + sizeof(uint64_t) * 2 + sizeof(uint32_t) + sizeof(uint16_t)], sizeof(uint8_t)); 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) * 2 + sizeof(uint32_t) + sizeof(uint16_t)], sizeof(uint8_t) * 12); @@ -711,7 +718,18 @@ bool netprot::Deserialize(Sync* sync, char* buf, uint32_t *buflen) { memcpy(&sync->position, vec, sizeof(uint32_t) * 3); - *buflen = sizeof(uint64_t) * 2 + sizeof(uint32_t) * 4 + sizeof(uint16_t) + 2; + uint8_t hp8[4]; + + memcpy(&hp8, &buf[2 + sizeof(uint64_t) * 2 + sizeof(uint32_t) * 4 + sizeof(uint16_t)], sizeof(uint32_t)); + + uint32_t hp = (uint32_t)hp8[0] << 24 | + (uint32_t)hp8[1] << 16 | + (uint32_t)hp8[2] << 8 | + (uint32_t)hp8[3]; + + memcpy(&sync->hp, &hp, sizeof(float)); + + *buflen = sizeof(uint64_t) * 2 + sizeof(uint32_t) * 4 + sizeof(uint16_t) + sizeof(float); return true; } diff --git a/SQCSim-common/netprotocol.h b/SQCSim-common/netprotocol.h index dad658c..7fb8c94 100644 --- a/SQCSim-common/netprotocol.h +++ b/SQCSim-common/netprotocol.h @@ -80,7 +80,7 @@ namespace netprot { uint64_t sid = 0; uint32_t timer = 0; uint16_t ammo = 0; - uint8_t hp = 0; + float hp = 0; Vector3f position; Sync() {} Sync(Sync* sync) : timestamp(sync->timestamp), sid(sync->sid), timer(sync->timer), ammo(sync->ammo), hp(sync->hp), position(sync->position) {} @@ -125,9 +125,11 @@ namespace netprot { uint64_t src_id = 0, dest_id = 0, dest_team_id = 0; - char mess[140]; // Good 'nough for twitr, good 'nough for me. + char* mess = new char[140]; // Good 'nough for twitr, good 'nough for me. Chat() {} - Chat(Chat* cha) : src_id(cha->src_id), dest_id(cha->dest_id), dest_team_id(cha->dest_team_id) { strcpy(cha->mess, mess); } + Chat(Chat* cha) : src_id(cha->src_id), dest_id(cha->dest_id), dest_team_id(cha->dest_team_id) { + strcpy(mess, 140, cha->mess); } + ~Chat() { delete[] mess; } }; struct ChunkMod { diff --git a/SQCSim-srv/connection.cpp b/SQCSim-srv/connection.cpp index bf33ddd..e28094f 100644 --- a/SQCSim-srv/connection.cpp +++ b/SQCSim-srv/connection.cpp @@ -80,9 +80,6 @@ void Connection::sendPacks(SOCKET sock, std::unordered_mapGetHash(false)) continue; - //std::cout << m_playinfo.id << ": " << m_playinfo.name << ": " << conn->GetName() << std::endl; - //std::cout << out.id << ": " << out.position << std::endl; - sendPackTo(sock, &out, &m_bufout, conn->getAddr()); } ++outs; @@ -142,8 +139,8 @@ Timestamp Connection::Run(World* world) { in.keys.right, in.keys.jump, false, el), world, el); - if (player->GetPosition().y < -10.) { - player->InflictDamage(9000); + if (player->GetPosition().y < -20.) { + player->InflictDamage(9000.); player->Killer = GetHash(true); } diff --git a/SQCSim-srv/server.cpp b/SQCSim-srv/server.cpp index edf310a..c68fd90 100644 --- a/SQCSim-srv/server.cpp +++ b/SQCSim-srv/server.cpp @@ -276,16 +276,14 @@ void Server::Run() { Chat* chat = new Chat(); chat->dest_id = chat->dest_team_id = chat->src_id = 0; - std::string killer = m_conns.at(key)->player->GetUsername(); + std::string killer = m_conns.at(conn->player->Killer)->player->GetUsername(); std::string mess = getDeathMessage(conn->player->GetUsername(), killer); strcpy(chat->mess, 140, mess.c_str()); - Log(mess, false, false); - chatlog.emplace_back(chat); ++deadplayers; - conn->m_nsync == false; + conn->m_nsync = false; } else { for (auto& chmo : conn->ChunkDiffs) @@ -342,12 +340,6 @@ void Server::Run() { delete chmo; } - //for (auto& bull : outbox_bullets) - //delete bull; - - //for (auto& bull : netbull) - //delete bull; - outbox_bullets.clear(); netbull.clear(); chunkdiffs.clear(); @@ -358,7 +350,7 @@ void Server::Run() { end.src_id = 0; char endmess[] = "Game over, mothereffers."; - strcpy(end.mess, endmess); + strcpy(end.mess, 140, endmess); for (auto& [key, conn] : m_conns) sendPackTo(m_sock_udp, &end, &m_buf, conn->getAddr()); @@ -451,6 +443,7 @@ std::string Server::getDeathMessage(std::string username, std::string killer) co mess.append(killer); mess.append(temp.substr(indk + 1)); } + else mess.append(temp.substr(ind + 1)); } else { mess.append(temp.substr(0, indk)); diff --git a/SQCSim2021/engine.cpp b/SQCSim2021/engine.cpp index 79fd8f1..de2e9af 100644 --- a/SQCSim2021/engine.cpp +++ b/SQCSim2021/engine.cpp @@ -1332,8 +1332,6 @@ void Engine::Render(float elapsedTime) { if (m_isSkybox) m_skybox.Render(skybox); - DrawHud(elapsedTime, bloc); - DisplayPovGun(); ProcessNotificationQueue(); if (m_damage) { InstantDamage(); @@ -1420,8 +1418,9 @@ void Engine::Render(float elapsedTime) { } if (m_syncs.count(sync.timestamp)) { Sync comp = m_syncs[sync.timestamp]; - m_player.InflictDamage(sync.hp - comp.hp); - + + std::cout << "HP: " << sync.hp << std::endl; + //m_player.InflictDamage(sync.hp - comp.hp); Vector3f diff = sync.position - comp.position; @@ -1502,6 +1501,9 @@ void Engine::Render(float elapsedTime) { glEnable(GL_CULL_FACE); } + DrawHud(elapsedTime, bloc); + DisplayPovGun(); + } }