diff --git a/src/server/security/connections.js b/src/server/security/connections.js index b1d3bad6..d710d24c 100644 --- a/src/server/security/connections.js +++ b/src/server/security/connections.js @@ -130,7 +130,7 @@ module.exports = { if (p.auth.username === exclude.auth.username) { if (p.name && p.zoneId) - await atlas.forceSavePlayer(p.name, p.zoneId); + await atlas.forceSavePlayer(p.id, p.zoneId); p.socket.emit('dc', {}); } diff --git a/src/server/world/atlas.js b/src/server/world/atlas.js index a35cc6cb..cfb32d91 100644 --- a/src/server/world/atlas.js +++ b/src/server/world/atlas.js @@ -60,14 +60,14 @@ module.exports = { }); }, - removeObjectFromInstancedZone: async function (thread, obj, callback) { + removeObjectFromInstancedZone: async function (thread, objId, callback) { await new Promise(res => { const cb = this.registerCallback(res); thread.worker.send({ method: 'forceSavePlayer', args: { - playerName: obj.name, + playerId: objId, callbackId: cb } }); @@ -80,6 +80,9 @@ module.exports = { }, removeObject: async function (obj, skipLocal, callback) { + //We need to store the player id because the calling thread might delete it (connections.unzone) + const playerId = obj.id; + if (!skipLocal) objects.removeObject(obj); @@ -88,7 +91,7 @@ module.exports = { return; if (thread.instanced && (await gePlayerCountInThread(thread)) === 1) { - this.removeObjectFromInstancedZone(thread, obj, callback); + this.removeObjectFromInstancedZone(thread, playerId, callback); return; } @@ -161,7 +164,7 @@ module.exports = { await returnWhenThreadsIdle(); }, - forceSavePlayer: async function (playerName, zoneId) { + forceSavePlayer: async function (playerId, zoneId) { const thread = getThreadFromId(zoneId); if (!thread) @@ -173,7 +176,7 @@ module.exports = { thread.worker.send({ method: 'forceSavePlayer', args: { - playerName, + playerId, callbackId } }); diff --git a/src/server/world/instancer.js b/src/server/world/instancer.js index e6361560..ce9bb36b 100644 --- a/src/server/world/instancer.js +++ b/src/server/world/instancer.js @@ -363,14 +363,14 @@ module.exports = { }); }, - forceSavePlayer: async function ({ playerName, callbackId }) { - const player = objects.objects.find(o => o.player && o.name === playerName); + forceSavePlayer: async function ({ playerId, callbackId }) { + const player = objects.objects.find(o => o.serverId === playerId); if (!player?.auth) { await io.setAsync({ key: new Date(), table: 'error', - value: 'no auth found for forcesave ' + playerName + value: 'no auth found for forcesave ' + player?.name }); return;