Browse Source

work

1993-leagues
Shaun 11 months ago
parent
commit
fd4facf650
5 changed files with 54 additions and 40 deletions
  1. +17
    -15
      src/client/ui/factory.js
  2. +16
    -13
      src/server/components/auth.js
  3. +3
    -3
      src/server/world/atlas.js
  4. +1
    -0
      src/server/world/mapManager.js
  5. +17
    -9
      src/server/world/threadManager.js

+ 17
- 15
src/client/ui/factory.js View File

@@ -37,26 +37,28 @@ define([
events.clearQueue();

await Promise.all(
globals.clientConfig.uiList.map(u => {
const uiType = u.path ? u.path.split('/').pop() : u;
globals.clientConfig.uiList
.filter(u => u.autoLoadOnPlay !== false)
.map(u => {
const uiType = u.path ? u.path.split('/').pop() : u;

return new Promise(res => {
const doneCheck = () => {
const isDone = this.uis.some(ui => ui.type === uiType);
if (isDone) {
res();
return new Promise(res => {
const doneCheck = () => {
const isDone = this.uis.some(ui => ui.type === uiType);
if (isDone) {
res();

return;
}
return;
}

setTimeout(doneCheck, 100);
};
setTimeout(doneCheck, 100);
};

this.build(uiType, { path: u.path });
this.build(uiType, { path: u.path });

doneCheck();
});
})
doneCheck();
});
})
);

this.ingameUisBuilt = true;


+ 16
- 13
src/server/components/auth.js View File

@@ -426,8 +426,8 @@ module.exports = {
},

createCharacter: async function (msg) {
let data = msg.data;
let name = data.name;
const data = msg.data;
const name = data.name;

let error = null;

@@ -460,7 +460,7 @@ module.exports = {

const releaseCreateLock = await getCreateLock();

let exists = await io.getAsync({
const exists = await io.getAsync({
key: name,
ignoreCase: true,
table: 'character',
@@ -474,23 +474,19 @@ module.exports = {
return;
}

let obj = this.obj;
const simple = this.obj.getSimple(true);

extend(obj, {
name: name,
skinId: data.skinId,
Object.assign(simple, {
name,
class: data.class,
skinId: data.skinId,
cell: skins.getCell(data.skinId),
sheetName: skins.getSpritesheet(data.skinId),
x: null,
y: null
sheetName: skins.getSpritesheet(data.skinId)
});

let simple = this.obj.getSimple(true);

await this.verifySkin(simple);
let prophecies = (data.prophecies || []).filter(p => p);
const prophecies = (data.prophecies ?? []).filter(p => p);
simple.components.push({
type: 'prophecies',
@@ -500,6 +496,13 @@ module.exports = {
customChannels: this.customChannels
});

const emBeforeCreateCharacter = {
obj: simple,
createData: data
};

await eventEmitter.emit('beforeCreateCharacter', emBeforeCreateCharacter);

await io.setAsync({
key: name,
table: 'character',


+ 3
- 3
src/server/world/atlas.js View File

@@ -2,7 +2,7 @@
const objects = require('../objects/objects');
const events = require('../misc/events');
const {
getThread, killThread, sendMessageToThread, getThreadFromId, returnWhenThreadsIdle, gePlayerCountInThread, addPlayerToThread, removePlayerFromThread
getThread, sendMessageToThread, getThreadFromId, returnWhenThreadsIdle, addPlayerToThread, removePlayerFromThread
} = require('./threadManager');
const { registerCallback, removeCallback } = require('./atlas/registerCallback');

@@ -15,7 +15,7 @@ module.exports = {
if (!serverObj)
return;

events.emit('onBeforePlayerEnterWorld', obj);
await events.emit('onBeforePlayerEnterWorld', { obj });

let { zoneName, zoneId } = obj;

@@ -30,7 +30,7 @@ module.exports = {
const { thread, resetObjPosition } = await getThread({
zoneName,
zoneId,
playerId: obj.id
obj
});
if (resetObjPosition) {


+ 1
- 0
src/server/world/mapManager.js View File

@@ -16,6 +16,7 @@ const mapList = [
//Helpers
const init = () => {
events.emit('onBeforeGetMapList', mapList);
events.emit('onBeforeFinalizeMapList', mapList);
};

//Exports


+ 17
- 9
src/server/world/threadManager.js View File

@@ -26,6 +26,7 @@ const objects = require('../objects/objects');
const connections = require('../security/connections');
const { mapList } = require('./mapManager');
const { registerCallback } = require('./atlas/registerCallback');
const events = require('../misc/events');

//Internals
const threads = [];
@@ -165,7 +166,7 @@ const onMessage = (thread, message) => {
messageHandlers[message.method](thread, message);
};

const spawnThread = async ({ name, path, instanced, destroyWhenEmptyForMs = -1 }) => {
const spawnThread = async ({ name, path, instanced, destroyWhenEmptyForMs = -1 }, obj) => {
let cbOnInitialized;

const promise = new Promise(resolveOnReady => {
@@ -174,7 +175,16 @@ const spawnThread = async ({ name, path, instanced, destroyWhenEmptyForMs = -1 }

const worker = childProcess.fork('./world/worker', [name]);

const id = instanced ? _.getGuid() : name;
let id = instanced ? _.getGuid() : name;
const emBeforeGetThreadId = {
id,
obj,
name,
instanced
};
events.emit('beforeGetThreadId', emBeforeGetThreadId);

id = emBeforeGetThreadId.id;

const thread = {
id,
@@ -199,7 +209,7 @@ const spawnThread = async ({ name, path, instanced, destroyWhenEmptyForMs = -1 }
return promise;
};

const getThread = async ({ zoneName, zoneId, playerId }) => {
const getThread = async ({ zoneName, zoneId, obj }) => {
const result = {
resetObjPosition: false,
thread: null
@@ -214,15 +224,13 @@ const getThread = async ({ zoneName, zoneId, playerId }) => {
//Maybe this player has been in a thread for this map before
if (!thread)
thread = threads.find(t => t.name === zoneName && t.players.includes(playerId));
thread = threads.find(t => t.name === zoneName && t.players.includes(obj.id));

if (!thread) {
if (map.instanced) {
if (map.instanced)
result.resetObjPosition = true;

thread = await spawnThread(map);
} else
thread = getThreadFromName(map.name);
thread = await spawnThread(map, obj);
}

if (!thread.isReady)
@@ -274,7 +282,7 @@ const returnWhenThreadsIdle = async () => {

const spawnMapThreads = async () => {
const promises = mapList
.filter(m => !m.disabled && !m.instanced)
.filter(m => !m.disabled && !m.instanced && m.autoSpawn !== false)
.map(m => spawnThread(m));

await Promise.all(promises);


Loading…
Cancel
Save