From 8845b3ef0cf718a86d1ef0c19af171b6675f5846 Mon Sep 17 00:00:00 2001 From: Isaac0-dev <62234577+Isaac0-dev@users.noreply.github.com> Date: Fri, 10 May 2024 19:32:50 +1000 Subject: [PATCH] fixed a bug where sync objects could be duplicated (#35) this would happen if the sync object was spawned before the other players in the level's area sync was valid --- src/pc/network/packets/packet_spawn_objects.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/pc/network/packets/packet_spawn_objects.c b/src/pc/network/packets/packet_spawn_objects.c index f4846abe2..89e8f40ad 100644 --- a/src/pc/network/packets/packet_spawn_objects.c +++ b/src/pc/network/packets/packet_spawn_objects.c @@ -158,6 +158,21 @@ void network_receive_spawn_objects(struct Packet* p) { id = gNetworkSystem->get_id_str(p->localIndex); name = gNetworkPlayers[p->localIndex].name; } + + // Don't overwrite existing sync objects + { + u32 syncID = data.rawData[0x04]; // o->oSyncID + struct SyncObject *so = sync_object_get(syncID); + if (so && so->o) { + if (so->o->behavior == get_behavior_from_id(data.behaviorId)) { + LOG_ERROR("recieved duplicate sync object with id %d from %s (%s)", syncID, name, id); + } else { + LOG_ERROR("recieved duplicate sync object with id %d with different behavior %s from %s (%s)", syncID, get_behavior_name_from_id(data.behaviorId), name, id); + } + continue; + } + } + LOG_INFO("rx spawn object %s from %s (%s)", get_behavior_name_from_id(data.behaviorId), name, id); LOG_CONSOLE("rx spawn object %s from %s\\#dcdcdc\\ (%s)", get_behavior_name_from_id(data.behaviorId), name, id); snprintf(gLastRemoteBhv, 256, "%s %s (%s)", get_behavior_name_from_id(data.behaviorId), name, id);