, conn(addr)
, player(nullptr)
, spawns()
-, confirm_wait(0) {
+, confirm_wait(0)
+, player_update_pack(0)
+, player_update_timer(1500) {
conn.SetHandler(this);
}
response.WritePlayer(*new_player);
response.WriteWorldName(server.GetWorld().Name());
conn.Send(server.GetPacket(), server.GetSocket());
+ // set up update tracking
+ player_update_pack = pack.Seq();
+ player_update_timer.Reset();
+ player_update_timer.Start();
} else {
// aw no :(
cout << "rejected login from player \"" << name << '"' << endl;
void ClientConnection::On(const Packet::PlayerUpdate &pack) {
if (!HasPlayer()) return;
- pack.ReadPlayer(Player());
+ int pack_diff = int16_t(pack.Seq()) - int16_t(player_update_pack);
+ bool overdue = player_update_timer.HitOnce();
+ player_update_timer.Reset();
+ if (pack_diff > 0 || overdue) {
+ player_update_pack = pack.Seq();
+ pack.ReadPlayer(Player());
+ }
}