From 8d515afce233da7aeb296a3088c0b306e136365e Mon Sep 17 00:00:00 2001 From: Shaun Date: Sun, 1 May 2022 19:56:08 +0200 Subject: [PATCH 01/22] bug #1915: Fixed an issue causing threads to not be destroyed when rezoning from instanced threads (cherry picked from commit ce046d40e59645b90750f676986c2436b53c1f42) --- src/server/world/atlas.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/server/world/atlas.js b/src/server/world/atlas.js index 9d3cb62c..869353b4 100644 --- a/src/server/world/atlas.js +++ b/src/server/world/atlas.js @@ -264,6 +264,11 @@ module.exports = { rezone: async function (thread, message) { const { args: { obj, newZone, keepPos = true } } = message; + if (thread.instanced) { + thread.worker.kill(); + this.threads.spliceWhere(t => t === thread); + } + //When messages are sent from map threads, they have an id (id of the object in the map thread) // as well as a serverId (id of the object in the main thread) const serverId = obj.serverId; From 6aeed95514fc8b8e97e6df05c2fe9b7a3e5164eb Mon Sep 17 00:00:00 2001 From: Shaun Date: Mon, 30 May 2022 19:41:58 +0200 Subject: [PATCH 02/22] balance #1952 (cherry picked from commit 2086156533e3f015a8d4cd680a9d3e07b29c8f3e) --- src/server/world/resourceSpawner.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/server/world/resourceSpawner.js b/src/server/world/resourceSpawner.js index 7141ca82..28ae1e4c 100644 --- a/src/server/world/resourceSpawner.js +++ b/src/server/world/resourceSpawner.js @@ -131,15 +131,14 @@ module.exports = { if (blueprint.quantity) quantity = blueprint.quantity[0] + ~~(Math.random() * (blueprint.quantity[1] - blueprint.quantity[0])); - let zoneLevel = this.zoneConfig.level; - zoneLevel = ~~(zoneLevel[0] + ((zoneLevel[1] - zoneLevel[0]) / 2)); + const nodeXp = this.zoneConfig.level[0] * 2; let objBlueprint = extend({}, blueprint, position); objBlueprint.properties = { cpnResourceNode: { nodeType: blueprint.type, ttl: blueprint.ttl, - xp: zoneLevel * zoneLevel, + xp: nodeXp, blueprint: extend({}, blueprint), quantity: quantity } From a3bab4ccafe9397da7eea692e29aae17478625d6 Mon Sep 17 00:00:00 2001 From: Shaun Date: Tue, 31 May 2022 20:23:35 +0200 Subject: [PATCH 03/22] bug #1948 (cherry picked from commit b2130d9b56aff65851a340b1c7ed2b8f64ef3ec8) --- .../config/itemEffects/reduceRuneManaReserve.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/server/config/itemEffects/reduceRuneManaReserve.js b/src/server/config/itemEffects/reduceRuneManaReserve.js index 82a8d05f..a40af7fd 100644 --- a/src/server/config/itemEffects/reduceRuneManaReserve.js +++ b/src/server/config/itemEffects/reduceRuneManaReserve.js @@ -1,13 +1,13 @@ module.exports = { events: { - onGetText: function (item) { - let rolls = item.effects.find(e => (e.type === 'reduceRuneManaReserve')).rolls; + onGetText: function (selfItem) { + let rolls = selfItem.effects.find(e => (e.type === 'reduceRuneManaReserve')).rolls; return `Reduces the mana reserved by ${rolls.rune} by ${rolls.amount}%`; }, - onBeforeReserveMana: function (item, reserveEvent) { - let rolls = item.effects.find(e => (e.type === 'reduceRuneManaReserve')).rolls; + onBeforeReserveMana: function (selfItem, reserveEvent) { + let rolls = selfItem.effects.find(e => (e.type === 'reduceRuneManaReserve')).rolls; if (rolls.rune.toLowerCase() !== reserveEvent.spell.toLowerCase()) return; @@ -15,8 +15,8 @@ module.exports = { reserveEvent.reservePercent = Math.max(0, (reserveEvent.reservePercent * 100) - rolls.amount) / 100; }, - afterEquipItem: function (item) { - let rolls = item.effects.find(e => (e.type === 'reduceRuneManaReserve')).rolls; + afterEquipItem: function (selfItem, eqItem) { + let rolls = eqItem.effects?.find(e => (e.type === 'reduceRuneManaReserve'))?.rolls; if (!rolls) return; @@ -31,8 +31,8 @@ module.exports = { }); }, - afterUnequipItem: function (item) { - let rolls = item.effects.find(e => (e.type === 'reduceRuneManaReserve')).rolls; + afterUnequipItem: function (selfItem, eqItem) { + let rolls = eqItem.effects?.find(e => (e.type === 'reduceRuneManaReserve'))?.rolls; if (!rolls) return; From c70ae569ef8bcc2bd8b5832f84cf49dec043b629 Mon Sep 17 00:00:00 2001 From: Shaun Date: Wed, 20 Jul 2022 18:44:44 +0200 Subject: [PATCH 04/22] bug #1955 (cherry picked from commit 5b1c642fb9c0dc5b40afe2ca2cc08474c26d40cc) --- src/server/security/router.js | 12 ++++++++++++ src/server/security/routerConfig.js | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/server/security/router.js b/src/server/security/router.js index 07a943ec..21e46230 100644 --- a/src/server/security/router.js +++ b/src/server/security/router.js @@ -72,6 +72,18 @@ module.exports = { ) ); + return !isCorrect; + } else if (dataType === 'integerNullObjectOrString') { + const isCorrect = ( + Number.isInteger(value) || + typeof(dataType) === 'string' || + value === null || + ( + typeof(value) === 'object' && + this.keysCorrect(value, spec) + ) + ); + return !isCorrect; } else if (dataType === 'arrayOfStrings') return (!Array.isArray(value) || value.some(v => typeof(v) !== 'string')); diff --git a/src/server/security/routerConfig.js b/src/server/security/routerConfig.js index e1a80430..749579c5 100644 --- a/src/server/security/routerConfig.js +++ b/src/server/security/routerConfig.js @@ -165,7 +165,7 @@ const routerConfig = { }, { key: 'target', - dataType: 'integerNullOrObject', + dataType: 'integerNullObjectOrString', spec: [ { key: 'x', From f3f0dfa3f20a2aaeb7524f55ef1fd5480858201b Mon Sep 17 00:00:00 2001 From: Vildravn Date: Wed, 20 Jul 2022 18:58:31 +0200 Subject: [PATCH 05/22] Update lock file (cherry picked from commit 8298ec734ed11b17aa1b580edb1be3d29e72017f) --- src/server/package-lock.json | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/server/package-lock.json b/src/server/package-lock.json index 17686a1b..f69634f7 100644 --- a/src/server/package-lock.json +++ b/src/server/package-lock.json @@ -1,12 +1,12 @@ { "name": "isleward_server", - "version": "0.10.6", + "version": "0.11.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "isleward_server", - "version": "0.10.6", + "version": "0.11.0", "dependencies": { "axios": "^0.22.0", "bcrypt-nodejs": "0.0.3", @@ -3015,6 +3015,22 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true, + "peer": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/prettier-linter-helpers": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", @@ -6485,6 +6501,13 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true, + "peer": true + }, "prettier-linter-helpers": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", From d8c84bb06ad68c23f577872fdd06f8f0bf7cd933 Mon Sep 17 00:00:00 2001 From: Vildravn Date: Wed, 20 Jul 2022 18:59:21 +0200 Subject: [PATCH 06/22] Change only=prod to omit=dev (cherry picked from commit af6e1cae38cd229908104c010c60f36102d7fc1e) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 1e431153..7c5bcb52 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,7 +11,7 @@ COPY . . WORKDIR /usr/src/isleward/src/server/ # Install only production npm modules specified in package.json -RUN npm ci --only=production +RUN npm ci --omit=dev # Expose container's port 4000 EXPOSE 4000 From ee67a2105e9b786a18a18b21d15edadfb458bb6d Mon Sep 17 00:00:00 2001 From: Shaun Date: Sat, 14 Jan 2023 14:01:18 +0200 Subject: [PATCH 07/22] modding #1960: Add the username to the onBeforeRegisterAccount and onBeforeLogin events (cherry picked from commit 9088cc2e80bda632e1a1e4a859ec8f177e0e86f8) --- src/server/components/auth.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/server/components/auth.js b/src/server/components/auth.js index 700378d6..78446170 100644 --- a/src/server/components/auth.js +++ b/src/server/components/auth.js @@ -309,7 +309,8 @@ module.exports = { const emBeforeLogin = { obj: this.obj, success: true, - msg: null + msg: null, + username }; await eventEmitter.emit('onBeforeLogin', emBeforeLogin); if (!emBeforeLogin.success) { @@ -387,7 +388,8 @@ module.exports = { const emBeforeRegisterAccount = { obj: this.obj, success: true, - msg: null + msg: null, + username: msg.data.username }; await eventEmitter.emit('onBeforeRegisterAccount', emBeforeRegisterAccount); From 0cbf3e46e38a9c904a922a3ab4906199de8c2a06 Mon Sep 17 00:00:00 2001 From: Shaun Date: Thu, 9 Feb 2023 06:44:27 +0200 Subject: [PATCH 08/22] test: added debugging for crash --- src/server/world/map.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/server/world/map.js b/src/server/world/map.js index d6ead04e..17e05d7b 100644 --- a/src/server/world/map.js +++ b/src/server/world/map.js @@ -546,6 +546,9 @@ module.exports = { let stats = obj.components.find(c => (c.type === 'stats')); let level = stats.values.level; + if (!this.spawn.filter) + console.log(this.spawn); + let spawns = this.spawn.filter(s => (((s.maxLevel) && (s.maxLevel >= level)) || (!s.maxLevel))); return spawns[0]; }, From 4f36b68f0c4a67da6c6332ff9782a8a3f329e9e7 Mon Sep 17 00:00:00 2001 From: Shaun Date: Thu, 9 Feb 2023 07:59:19 +0200 Subject: [PATCH 09/22] bug #1691: Fixed a crash caused by atlas not waiting long enough for instanced maps to spawn (cherry picked from commit f5fc0a49acca6ae3ad3db7e59195cf74ce70d107) --- src/server/world/atlas.js | 45 +++++++++++++++++++---------------- src/server/world/instancer.js | 4 ++++ 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/src/server/world/atlas.js b/src/server/world/atlas.js index 869353b4..18d805e8 100644 --- a/src/server/world/atlas.js +++ b/src/server/world/atlas.js @@ -36,9 +36,8 @@ module.exports = { if (map.instanced) { delete obj.x; delete obj.y; - thread = this.spawnMap(map); - await new Promise(res => setTimeout(res, 2000)); + thread = await this.spawnMap(map); } else thread = this.getThreadFromName(map.name); } @@ -169,27 +168,27 @@ module.exports = { .filter(m => !m.disabled && !m.instanced) .forEach(m => this.spawnMap(m)); }, - spawnMap: function ({ name, path, instanced }) { - const worker = childProcess.fork('./world/worker', [name]); - - const id = instanced ? _.getGuid() : name; - - const thread = { - id, - name, - instanced, - path, - worker - }; - - const onMessage = this.onMessage.bind(this, thread); - worker.on('message', function (m) { - onMessage(m); - }); + spawnMap: async function ({ name, path, instanced }) { + return new Promise(resolveOnReady => { + const worker = childProcess.fork('./world/worker', [name]); + + const id = instanced ? _.getGuid() : name; + + const thread = { + id, + name, + instanced, + path, + worker, + cbOnInitialized: resolveOnReady + }; - this.threads.push(thread); + const onMessage = this.onMessage.bind(this, thread); + worker.on('message', function (m) { + onMessage(m); + }); - return thread; + this.threads.push(thread); }, onMessage: function (thread, message) { if (message.module) { @@ -226,6 +225,10 @@ module.exports = { }); }, + onInitialized: function (thread) { + thread.cbOnInitialized(thread); + }, + event: function (thread, message) { objects.sendEvent(message, thread); }, diff --git a/src/server/world/instancer.js b/src/server/world/instancer.js index 7e198dda..8a505556 100644 --- a/src/server/world/instancer.js +++ b/src/server/world/instancer.js @@ -75,6 +75,10 @@ module.exports = { this.clientAck = clientAck; eventEmitter.on('removeObject', unstageZoneIn); + + process.send({ + method: 'onInitialized' + }); }, startRegen: function (respawnMap, respawnPos) { From 85c357d889f709abf5c032e44cfb98557a541e5b Mon Sep 17 00:00:00 2001 From: Shaun Date: Thu, 9 Feb 2023 08:02:07 +0200 Subject: [PATCH 10/22] chore: removed test log --- src/server/world/map.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/server/world/map.js b/src/server/world/map.js index 17e05d7b..d6ead04e 100644 --- a/src/server/world/map.js +++ b/src/server/world/map.js @@ -546,9 +546,6 @@ module.exports = { let stats = obj.components.find(c => (c.type === 'stats')); let level = stats.values.level; - if (!this.spawn.filter) - console.log(this.spawn); - let spawns = this.spawn.filter(s => (((s.maxLevel) && (s.maxLevel >= level)) || (!s.maxLevel))); return spawns[0]; }, From cd0f49989aeeb399daf763c63fe723524f6a4dee Mon Sep 17 00:00:00 2001 From: Shaun Date: Thu, 9 Feb 2023 08:08:40 +0200 Subject: [PATCH 11/22] bug: Fixed accidental code delete (cherry picked from commit 9cc4f2329bb2521fa0970355ba70702dd35296e7) --- src/server/world/atlas.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/world/atlas.js b/src/server/world/atlas.js index 18d805e8..f64b07bc 100644 --- a/src/server/world/atlas.js +++ b/src/server/world/atlas.js @@ -189,6 +189,7 @@ module.exports = { }); this.threads.push(thread); + }); }, onMessage: function (thread, message) { if (message.module) { From 7a7b1972051cefcd8556473ad08b4df80927be6c Mon Sep 17 00:00:00 2001 From: Shaun Date: Sat, 11 Feb 2023 13:35:19 +0200 Subject: [PATCH 12/22] modding #1946 (cherry picked from commit 27693cea029694e960787495ec740fc07ecce619) --- .../components/extensions/socialCommands.js | 84 ------------------- src/server/items/generators/slots.js | 4 +- src/server/items/generators/types.js | 2 +- 3 files changed, 4 insertions(+), 86 deletions(-) diff --git a/src/server/components/extensions/socialCommands.js b/src/server/components/extensions/socialCommands.js index af6ceedc..d858bf7d 100644 --- a/src/server/components/extensions/socialCommands.js +++ b/src/server/components/extensions/socialCommands.js @@ -1,7 +1,4 @@ -const generator = require('../../items/generator'); -const configSlots = require('../../items/config/slots'); const configMaterials = require('../../items/config/materials'); -const factions = require('../../config/factions'); const connections = require('../../security/connections'); const events = require('../../misc/events'); @@ -25,7 +22,6 @@ let commandRoles = { saveAll: 8, //Admin - getItem: 10, getGold: 10, setLevel: 10, godMode: 10, @@ -365,86 +361,6 @@ module.exports = { .forEach(i => inventory.destroyItem({ itemId: i }, null, true)); }, - getItem: function (config) { - if (typeof config !== 'object') - return; - - if (config.slot === 'set') { - configSlots.slots.forEach(function (s) { - if (s === 'tool') - return; - - let newConfig = extend({}, config, { - slot: s - }); - - this.getItem(newConfig); - }, this); - - return; - } - - if (config.stats) - config.stats = config.stats.split(','); - - if (config.name) - config.name = config.name.split('_').join(' '); - - if (config.description) - config.description = config.description.split('_').join(' '); - - if (config.spellName) - config.spellName = config.spellName.split('_').join(' '); - - if (config.type) - config.type = config.type.split('_').join(' '); - - if (config.sprite) - config.sprite = config.sprite.split('_'); - - let spritesheet = config.spritesheet; - delete config.spritesheet; - - let factionList = (config.factions || '').split(','); - delete config.factions; - - let safe = config.safe; - delete config.safe; - - let eq = config.eq; - delete config.eq; - - let item = generator.generate(config); - - if (safe) { - item.noDrop = true; - item.noDestroy = true; - item.noSalvage = true; - } - - factionList.forEach(function (f) { - if (f === '') - return; - - let faction = factions.getFaction(f); - faction.uniqueStat.generate(item); - - item.factions = []; - item.factions.push({ - id: f, - tier: 3 - }); - }); - - if (spritesheet) - item.spritesheet = spritesheet; - - let newItem = this.obj.inventory.getItem(item); - - if (eq) - this.obj.equipment.equip({ itemId: newItem.id }); - }, - getGold: function (amount) { let newGold = this.obj.trade.gold + ~~amount; newGold = Math.max(-1000000000, Math.min(1000000000, newGold)); diff --git a/src/server/items/generators/slots.js b/src/server/items/generators/slots.js index 1551ac3c..be4b07bf 100644 --- a/src/server/items/generators/slots.js +++ b/src/server/items/generators/slots.js @@ -14,7 +14,9 @@ module.exports = { item.slot = blueprint.slot; else if (blueprint.type) item.slot = Object.keys(configTypes.types).find(c => configTypes.types[c][blueprint.type]); - else + + //If the slot doesn't exist or the type doesn't exist in the slot, pick a random type + if (!item.slot || !configSlots.slots.includes(item.slot)) item.slot = chances[~~(Math.random() * chances.length)]; } }; diff --git a/src/server/items/generators/types.js b/src/server/items/generators/types.js index 5ff5f0e3..437b71f4 100644 --- a/src/server/items/generators/types.js +++ b/src/server/items/generators/types.js @@ -5,7 +5,7 @@ module.exports = { generate: function (item, blueprint) { let type = blueprint.type; - if (!type) { + if (!type || !configTypes.types[item.slot][type]) { //Pick a material type first const types = configTypes.types[item.slot]; const typeArray = Object.entries(types); From 906bdf7793a9739b9db4bd1a29fff6011ae92790 Mon Sep 17 00:00:00 2001 From: Shaun Date: Sun, 19 Mar 2023 19:01:49 +0200 Subject: [PATCH 13/22] test: hotfix and logging for a crash --- src/server/components/equipment.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/server/components/equipment.js b/src/server/components/equipment.js index 9a36fb3d..91753d19 100644 --- a/src/server/components/equipment.js +++ b/src/server/components/equipment.js @@ -281,6 +281,17 @@ module.exports = { let itemId = eq[slot]; let item = inventory.findItem(itemId); + if (!item) { + console.log({ + error: 'item not found', + itemId, + character: this.obj.name, + eq: this.eq + }); + + return; + } + let factions = item.factions; if (!factions) return; From 33578e95d80aa37a192624e1cf64754b38a23f70 Mon Sep 17 00:00:00 2001 From: Shaun Date: Sun, 19 Mar 2023 19:04:10 +0200 Subject: [PATCH 14/22] test: hotfix and logging for a crash --- src/server/components/equipment.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/server/components/equipment.js b/src/server/components/equipment.js index 91753d19..48987d74 100644 --- a/src/server/components/equipment.js +++ b/src/server/components/equipment.js @@ -285,6 +285,9 @@ module.exports = { console.log({ error: 'item not found', itemId, + slot, + factionId, + tier, character: this.obj.name, eq: this.eq }); From 1a617d0f266e9e913cf2bb5ca47349cc3509291a Mon Sep 17 00:00:00 2001 From: Shaun Date: Mon, 22 May 2023 06:14:49 +0200 Subject: [PATCH 15/22] test: remove this --- src/server/world/instancer.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/world/instancer.js b/src/server/world/instancer.js index cdd1d2a6..78e7df7a 100644 --- a/src/server/world/instancer.js +++ b/src/server/world/instancer.js @@ -339,6 +339,7 @@ module.exports = { let obj = msg.obj; obj = objects.find(o => o.serverId === obj.id); if (!obj) { + console.log('No object found to remove'); //We should probably never reach this return; } From 2a21bff3628b8943aafdd4ee275d72bbcb424a6c Mon Sep 17 00:00:00 2001 From: Shaun Date: Mon, 22 May 2023 08:39:28 +0200 Subject: [PATCH 16/22] test: undo this --- src/server/world/instancer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/world/instancer.js b/src/server/world/instancer.js index 78e7df7a..e476c2dd 100644 --- a/src/server/world/instancer.js +++ b/src/server/world/instancer.js @@ -339,7 +339,7 @@ module.exports = { let obj = msg.obj; obj = objects.find(o => o.serverId === obj.id); if (!obj) { - console.log('No object found to remove'); + console.log('No object found to remove', obj.name); //We should probably never reach this return; } From 6803fa0a101df7d808f25da6b1b4b3f97e50408b Mon Sep 17 00:00:00 2001 From: Shaun Date: Mon, 22 May 2023 10:04:49 +0200 Subject: [PATCH 17/22] test: undo this --- src/server/world/instancer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/world/instancer.js b/src/server/world/instancer.js index e476c2dd..0ad25f16 100644 --- a/src/server/world/instancer.js +++ b/src/server/world/instancer.js @@ -339,7 +339,7 @@ module.exports = { let obj = msg.obj; obj = objects.find(o => o.serverId === obj.id); if (!obj) { - console.log('No object found to remove', obj.name); + console.log('No object found to remove', msg.obj.name); //We should probably never reach this return; } From 83ab998b7ea6cfca188228c2324146e6a4ac0cf0 Mon Sep 17 00:00:00 2001 From: Shaun Date: Tue, 23 May 2023 06:09:52 +0200 Subject: [PATCH 18/22] test: undo this --- src/server/world/atlas.js | 4 ++++ src/server/world/instancer.js | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/server/world/atlas.js b/src/server/world/atlas.js index dcd1389f..cd30efa7 100644 --- a/src/server/world/atlas.js +++ b/src/server/world/atlas.js @@ -103,6 +103,10 @@ module.exports = { if (callback) callbackId = this.registerCallback(callback); + const simple = obj.getSimple(true); + if (!simple.name) + console.log(`Object has no name. Username: ${obj.auth?.username}`); + sendMessageToThread({ threadId: obj.zoneId, msg: { diff --git a/src/server/world/instancer.js b/src/server/world/instancer.js index 0ad25f16..cdd1d2a6 100644 --- a/src/server/world/instancer.js +++ b/src/server/world/instancer.js @@ -339,7 +339,6 @@ module.exports = { let obj = msg.obj; obj = objects.find(o => o.serverId === obj.id); if (!obj) { - console.log('No object found to remove', msg.obj.name); //We should probably never reach this return; } From af4a223f14e6484dad3cc138f1a6cb9589d3b984 Mon Sep 17 00:00:00 2001 From: Shaun Date: Tue, 23 May 2023 06:12:23 +0200 Subject: [PATCH 19/22] test: undo this --- src/server/world/atlas.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/world/atlas.js b/src/server/world/atlas.js index cd30efa7..50603e9b 100644 --- a/src/server/world/atlas.js +++ b/src/server/world/atlas.js @@ -104,8 +104,8 @@ module.exports = { callbackId = this.registerCallback(callback); const simple = obj.getSimple(true); - if (!simple.name) - console.log(`Object has no name. Username: ${obj.auth?.username}`); + if (!simple.name) + console.log(`Object has no name: ${JSON.stringify(simple, null, '\t')}`); sendMessageToThread({ threadId: obj.zoneId, From 1c6ef84d3fa2eff498c72400c9c695d54b47819a Mon Sep 17 00:00:00 2001 From: Shaun Date: Wed, 24 May 2023 08:29:52 +0200 Subject: [PATCH 20/22] bug #1994 --- src/server/security/connections.js | 15 +++++++++++---- src/server/world/atlas.js | 4 ---- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/server/security/connections.js b/src/server/security/connections.js index 8aa53771..ad70bd70 100644 --- a/src/server/security/connections.js +++ b/src/server/security/connections.js @@ -44,9 +44,13 @@ module.exports = { }] }); - await new Promise(res => { - atlas.removeObject(player, false, res); - }); + //If the player doesn't have a 'social' component, they are no longer in a threat + // Likely due to unzoning (character select screen) + if (player.components.some(c => c.type === 'social')) { + await new Promise(res => { + atlas.removeObject(player, false, res); + }); + } } if (player.name) { @@ -93,8 +97,11 @@ module.exports = { keys.forEach(function (k) { let val = player[k]; if (val && val.type) { - if (['player', 'auth', 'syncer'].indexOf(val.type) === -1) + if (['player', 'auth', 'syncer'].indexOf(val.type) === -1) { delete player[k]; + + player.components.spliceWhere(c => c.type === val.type); + } } }); diff --git a/src/server/world/atlas.js b/src/server/world/atlas.js index 50603e9b..dcd1389f 100644 --- a/src/server/world/atlas.js +++ b/src/server/world/atlas.js @@ -103,10 +103,6 @@ module.exports = { if (callback) callbackId = this.registerCallback(callback); - const simple = obj.getSimple(true); - if (!simple.name) - console.log(`Object has no name: ${JSON.stringify(simple, null, '\t')}`); - sendMessageToThread({ threadId: obj.zoneId, msg: { From b7cd6a0148d94d88343bd8ade52e07d12f81d6ed Mon Sep 17 00:00:00 2001 From: Shaun Date: Mon, 29 May 2023 07:54:53 +0200 Subject: [PATCH 21/22] undo this: test code --- src/server/world/instancer.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/world/instancer.js b/src/server/world/instancer.js index cdd1d2a6..ddbed172 100644 --- a/src/server/world/instancer.js +++ b/src/server/world/instancer.js @@ -339,6 +339,7 @@ module.exports = { let obj = msg.obj; obj = objects.find(o => o.serverId === obj.id); if (!obj) { + console.log('No object found', msg); //We should probably never reach this return; } From 00189195cf838ee413d560c7a47a3e9641577fb6 Mon Sep 17 00:00:00 2001 From: Shaun Date: Wed, 31 May 2023 07:15:09 +0200 Subject: [PATCH 22/22] undo this: test code --- src/server/world/instancer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/world/instancer.js b/src/server/world/instancer.js index ddbed172..55121181 100644 --- a/src/server/world/instancer.js +++ b/src/server/world/instancer.js @@ -339,7 +339,7 @@ module.exports = { let obj = msg.obj; obj = objects.find(o => o.serverId === obj.id); if (!obj) { - console.log('No object found', msg); + console.log(`No object found in ${this.zoneId}`, msg); //We should probably never reach this return; }