Browse Source

enhancement #1819: Recreated change because could not cherry-pick

tags/v0.9.1.5
Shaun 2 years ago
parent
commit
c7795d4078
4 changed files with 43 additions and 2 deletions
  1. +1
    -1
      src/server/components/auth.js
  2. +4
    -1
      src/server/security/connections.js
  3. +20
    -0
      src/server/world/atlas.js
  4. +18
    -0
      src/server/world/instancer.js

+ 1
- 1
src/server/components/auth.js View File

@@ -293,7 +293,7 @@ module.exports = {
}
this.username = msg.data.username;
cons.logOut(this.obj);
await cons.logOut(this.obj);

this.initTracker();



+ 4
- 1
src/server/security/connections.js View File

@@ -154,7 +154,7 @@ module.exports = {
msg.callback();
},

logOut: function (exclude) {
logOut: async function (exclude) {
let players = this.players;
let pLen = players.length;
for (let i = 0; i < pLen; i++) {
@@ -163,6 +163,9 @@ module.exports = {
if ((!p) || (p === exclude) || (!p.auth))
continue;

if (p.name && p.zoneName)
await atlas.forceSavePlayer(p.name, p.zoneName);

if (p.auth.username === exclude.auth.username)
p.socket.emit('dc', {});
}


+ 20
- 0
src/server/world/atlas.js View File

@@ -258,5 +258,25 @@ module.exports = {
});
});
});
},

forceSavePlayer: async function (playerName, zoneName) {
const thread = this.getThreadFromName(zoneName);

if (!thread)
return;

return new Promise(res => {
const callbackId = this.registerCallback(res);

thread.worker.send({
method: 'forceSavePlayer',
args: {
playerName,
callbackId
}
});
});
}

};

+ 18
- 0
src/server/world/instancer.js View File

@@ -337,5 +337,23 @@ module.exports = {
process.send({
method: 'onZoneIdle'
});
},

forceSavePlayer: async function ({ playerName, callbackId }) {
const player = objects.objects.find(o => o.player && o.name === playerName);

if (!player?.auth)
return;

await player.auth.doSave();

process.send({
module: 'atlas',
method: 'resolveCallback',
msg: {
id: callbackId
}
});
}

};

Loading…
Cancel
Save