From c8412bbbc80a8680114f728b38f35ce1081f36f6 Mon Sep 17 00:00:00 2001 From: Shaun Date: Mon, 8 May 2023 10:14:29 +0200 Subject: [PATCH 1/2] bug: Fixed character select hanging --- src/server/config/consts.js | 2 +- src/server/security/connections.js | 2 +- src/server/world/atlas.js | 13 ++++++++----- src/server/world/instancer.js | 6 +++--- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/server/config/consts.js b/src/server/config/consts.js index 6b8c2ac9..08ccd22c 100644 --- a/src/server/config/consts.js +++ b/src/server/config/consts.js @@ -1,6 +1,6 @@ module.exports = { //At which interval does each zone tick in ms - tickTime: 350, + tickTime: 5, //The maximum level a player can reach maxLevel: 20, 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; From 5200558d8fc3802d20c46eb54bcb6981eda733b4 Mon Sep 17 00:00:00 2001 From: Shaun Date: Mon, 8 May 2023 10:15:43 +0200 Subject: [PATCH 2/2] chore: undid test code --- src/server/config/consts.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/config/consts.js b/src/server/config/consts.js index 08ccd22c..6b8c2ac9 100644 --- a/src/server/config/consts.js +++ b/src/server/config/consts.js @@ -1,6 +1,6 @@ module.exports = { //At which interval does each zone tick in ms - tickTime: 5, + tickTime: 350, //The maximum level a player can reach maxLevel: 20,