// Handle player position updates if (data.data_type === 'player_position_update' && data.payload) { const playerData = data.payload; const steamid = playerData.steamid; const pos = playerData.position; console.log('[MAP] Processing player update for:', steamid, pos); if (!steamid || !pos) { console.warn('[MAP] Invalid player update data:', playerData); return; } // Update or create player data in players object if (!players[steamid]) { players[steamid] = {}; } // Update all player data players[steamid].pos = pos; players[steamid].name = playerData.name || players[steamid].name || 'Player'; players[steamid].level = playerData.level !== undefined ? playerData.level : (players[steamid].level || 0); players[steamid].health = playerData.health !== undefined ? playerData.health : (players[steamid].health || 0); players[steamid].zombies = playerData.zombies !== undefined ? playerData.zombies : (players[steamid].zombies || 0); players[steamid].deaths = playerData.deaths !== undefined ? playerData.deaths : (players[steamid].deaths || 0); players[steamid].players = playerData.players !== undefined ? playerData.players : (players[steamid].players || 0); players[steamid].score = playerData.score !== undefined ? playerData.score : (players[steamid].score || 0); players[steamid].ping = playerData.ping !== undefined ? playerData.ping : (players[steamid].ping || 0); players[steamid].is_muted = playerData.is_muted !== undefined ? playerData.is_muted : (players[steamid].is_muted || false); players[steamid].is_authenticated = playerData.is_authenticated !== undefined ? playerData.is_authenticated : (players[steamid].is_authenticated || false); players[steamid].in_limbo = playerData.in_limbo !== undefined ? playerData.in_limbo : (players[steamid].in_limbo || false); players[steamid].is_initialized = playerData.is_initialized !== undefined ? playerData.is_initialized : (players[steamid].is_initialized || false); players[steamid].permission_level = playerData.permission_level || players[steamid].permission_level || null; players[steamid].dataset = playerData.dataset || players[steamid].dataset || ''; // Update or create marker if (playerMarkers[steamid]) { // Update existing marker position and popup playerMarkers[steamid].setLatLng([pos.x, pos.z]); playerMarkers[steamid].setPopupContent(createPlayerPopup(steamid, players[steamid])); console.log('[MAP] Updated player marker:', steamid); } else { // Create new marker const marker = L.circleMarker([pos.x, pos.z], { radius: 5, fillColor: '#66ccff', color: '#0099ff', weight: 2, opacity: 1, fillOpacity: 0.9, className: 'player-marker' }).addTo(map); marker.bindPopup(createPlayerPopup(steamid, players[steamid])); playerMarkers[steamid] = marker; console.log('[MAP] Created new player marker:', steamid); } }