From 06d01fbecc2a8f9ef9c32c23745259feba93ff6f Mon Sep 17 00:00:00 2001 From: Shaun Date: Tue, 22 Jun 2021 21:00:43 +0200 Subject: [PATCH] refactor #1807: Initial commit --- src/server/components/auth.js | 85 ++++++++----------- .../components/extensions/socialCommands.js | 22 ----- src/server/components/trade.js | 3 - src/server/config/serverConfig.js | 2 +- src/server/config/skins.js | 37 ++++---- src/server/db/tableNames.js | 1 - src/server/fixes/fixes.js | 20 ----- src/server/misc/events.js | 32 ++++--- 8 files changed, 76 insertions(+), 126 deletions(-) diff --git a/src/server/components/auth.js b/src/server/components/auth.js index aeec53a0..850446c6 100644 --- a/src/server/components/auth.js +++ b/src/server/components/auth.js @@ -6,7 +6,7 @@ const profanities = require('../misc/profanities'); const fixes = require('../fixes/fixes'); const spirits = require('../config/spirits'); const ga = require('../security/ga'); -const events = require('../misc/events'); +const eventEmitter = require('../misc/events'); const checkLoginRewards = require('./auth/checkLoginRewards'); @@ -130,7 +130,6 @@ module.exports = { type: 'auth', username: this.username, charname: this.charname, - skins: this.skins, accountInfo: this.accountInfo }; }, @@ -164,7 +163,7 @@ module.exports = { clean: true }); - events.emit('onAfterGetCharacter', { + eventEmitter.emit('onAfterGetCharacter', { obj: this.obj, character }); @@ -207,65 +206,55 @@ module.exports = { fixes.fixStash(this.stash); - events.emit('onAfterGetStash', { + eventEmitter.emit('onAfterGetStash', { obj: this.obj, stash: this.stash }); }, - getSkins: async function (character) { - this.skins = await io.getAsync({ - key: this.username, - table: 'skins', - isArray: true - }); + verifySkin: function (character) { + const doesOwn = this.doesOwnSkin(character.skinId); - fixes.fixSkins(this.username, this.skins); - }, + if (doesOwn) + return; - getSkinList: function (msg) { - const skinList = skins.getSkinList(this.skins); + const defaultTo = 'wizard'; - msg.callback(skinList); + character.skinId = defaultTo; + character.cell = skins.getCell(defaultTo); + character.sheetName = skins.getSpritesheet(defaultTo); }, - saveSkin: async function (skinId) { - if (!this.skins) { - this.getSkins({ - callback: this.saveSkin.bind(this, skinId) - }); + doesOwnSkin: function (skinId) { + const allSkins = skins.getList(); + const filteredSkins = allSkins.filter(({ default: isDefaultSkin }) => isDefaultSkin); - return; - } + const msgSkinList = { + obj: this, + allSkins, + filteredSkins + }; - this.skins.push(skinId); + eventEmitter.emit('onBeforeGetAccountSkins', msgSkinList); - await io.setAsync({ - key: this.username, - table: 'skins', - value: this.skins, - serialize: true - }); - }, - - onSaveSkin: function () { + const result = filteredSkins.some(f => f.id === skinId); + return result; }, - verifySkin: function (character) { - const skinList = skins.getSkinList(this.skins); + getSkinList: async function ({ callback }) { + const allSkins = skins.getList(); + const filteredSkins = allSkins.filter(({ default: isDefaultSkin }) => isDefaultSkin); - if (!skinList.some(s => (s.id === character.skinId))) { - character.skinId = '1.0'; - character.cell = skins.getCell(character.skinId); - character.sheetName = skins.getSpritesheet(character.skinId); - } - }, + const msgSkinList = { + obj: this, + allSkins, + filteredSkins + }; - doesOwnSkin: function (skinId) { - const skinList = skins.getSkinList(this.skins); + eventEmitter.emit('onBeforeGetAccountSkins', msgSkinList); - return skinList.some(s => s.id === (skinId + '') || s === '*'); + callback(filteredSkins); }, login: async function (msg) { @@ -298,8 +287,6 @@ module.exports = { this.initTracker(); - await this.getSkins(); - const accountInfo = await io.getAsync({ key: username, table: 'accountInfo', @@ -313,7 +300,11 @@ module.exports = { accountInfo }; - events.emit('onBeforeGetAccountInfo', msgAccountInfo); + eventEmitter.emit('onBeforeGetAccountInfo', msgAccountInfo); + + await eventEmitter.emit('onAfterLogin', { + username + }); this.accountInfo = msgAccountInfo.accountInfo; @@ -390,8 +381,6 @@ module.exports = { this.username = msg.data.username; cons.logOut(this.obj); - await this.getSkins(); - msg.callback(); }, diff --git a/src/server/components/extensions/socialCommands.js b/src/server/components/extensions/socialCommands.js index ab016528..d3e11464 100644 --- a/src/server/components/extensions/socialCommands.js +++ b/src/server/components/extensions/socialCommands.js @@ -53,7 +53,6 @@ const localCommands = [ 'leave', 'setPassword', 'roll', - 'giveSkin', 'broadcast', 'saveAll', 'help', @@ -569,27 +568,6 @@ module.exports = { }); }, - giveSkin: async function (config) { - let keys = Object.keys(config); - let username = keys[0]; - let skinId = keys[1]; - - let skins = await io.getAsync({ - key: username, - table: 'skins', - isArray: true - }); - - skins.push(skinId); - - await io.setAsync({ - key: username, - table: 'skins', - value: skins, - serialize: true - }); - }, - getMaterials: function (config) { if (typeof(config) === 'object') config = 100; diff --git a/src/server/components/trade.js b/src/server/components/trade.js index 24b1d0fe..4e01006a 100644 --- a/src/server/components/trade.js +++ b/src/server/components/trade.js @@ -236,9 +236,6 @@ module.exports = { if (!item.infinite) this.obj.syncer.setArray(true, 'trade', 'removeItems', item.id); - } else { - this.obj.auth.saveSkin(item.skinId); - sendMessage(this.obj, 'color-greenB', `Unlocked skin: ${item.name}.`); } if (item.worth.currency) { diff --git a/src/server/config/serverConfig.js b/src/server/config/serverConfig.js index b1f41ee3..746b3f06 100644 --- a/src/server/config/serverConfig.js +++ b/src/server/config/serverConfig.js @@ -8,7 +8,7 @@ module.exports = { // sqlite // rethink //eslint-disable-next-line no-process-env - db: process.env.IWD_DB || 'sqlite', + db: process.env.IWD_DB || 'rethink', //eslint-disable-next-line no-process-env dbHost: process.env.IWD_DB_HOST || 'localhost', //eslint-disable-next-line no-process-env diff --git a/src/server/config/skins.js b/src/server/config/skins.js index ee181686..a6025a13 100644 --- a/src/server/config/skins.js +++ b/src/server/config/skins.js @@ -1,6 +1,6 @@ -let events = require('../misc/events'); +const events = require('../misc/events'); -let config = { +const config = { wizard: { name: 'Wizard', sprite: [0, 0], @@ -35,27 +35,22 @@ module.exports = { return config[skinId]; }, - getSkinList: function (skins) { - let list = Object.keys(config) - .filter(function (s) { - return ((config[s].default) || (skins.some(f => ((f === s) || (f === '*'))))); - }) - .map(function (s) { - let res = extend({}, config[s]); - res.id = s; - return res; - }); + getList: function (skins) { + const result = Object + .entries(config) + .map(([skinId, skinConfig]) => { + const { sprite: [ spriteX, spriteY ] } = skinConfig; + + const serializedSprite = `${spriteX},${spriteY}`; + + const skin = { + id: skinId, + ...skinConfig, + sprite: serializedSprite + }; - let result = []; - list.forEach(function (skin) { - result.push({ - name: skin.name, - id: skin.id, - sprite: skin.sprite[0] + ',' + skin.sprite[1], - spritesheet: skin.spritesheet, - defaultSpirit: skin.defaultSpirit + return skin; }); - }, this); return result; }, diff --git a/src/server/db/tableNames.js b/src/server/db/tableNames.js index 6a9eb1f8..e800a494 100644 --- a/src/server/db/tableNames.js +++ b/src/server/db/tableNames.js @@ -2,7 +2,6 @@ const tableNames = [ 'character', 'characterList', 'stash', - 'skins', 'login', 'leaderboard', 'customMap', diff --git a/src/server/fixes/fixes.js b/src/server/fixes/fixes.js index 1aff44bc..4c983bb8 100644 --- a/src/server/fixes/fixes.js +++ b/src/server/fixes/fixes.js @@ -140,25 +140,5 @@ module.exports = { delete i.enchantedStats.dmgPercent; } }); - }, - - fixSkins: async function (username, skins) { - //Skin 2.0 because gaekatlan-druid - skins.forEach((s, i) => { - if (s === '2.0') - skins[i] = 'gaekatlan-druid'; - }); - - let length = skins.length; - skins = skins.filter(s => !!configSkins.getBlueprint(s)); - - if (length !== skins.length) { - await io.setAsync({ - key: username, - table: 'skins', - value: skins, - serialize: true - }); - } } }; diff --git a/src/server/misc/events.js b/src/server/misc/events.js index b7c0a7d7..052b115d 100644 --- a/src/server/misc/events.js +++ b/src/server/misc/events.js @@ -3,7 +3,14 @@ module.exports = { on: function (event, callback) { let list = this.events[event] || (this.events[event] = []); - list.push(callback); + list.push({ callback }); + + return callback; + }, + + onAsync: function (event, callback) { + let list = this.events[event] || (this.events[event] = []); + list.push({ isAsync: true, callback }); return callback; }, @@ -12,7 +19,9 @@ module.exports = { let list = this.events[event] || []; let lLen = list.length; for (let i = 0; i < lLen; i++) { - if (list[i] === callback) { + const { callback: lCallback } = list[i]; + + if (lCallback === callback) { list.splice(i, 1); i--; lLen--; @@ -23,22 +32,25 @@ module.exports = { delete this.events[event]; }, - emit: function (event) { + emit: async function (event) { let args = [].slice.call(arguments, 1); let list = this.events[event]; if (!list) return; - let len = list.length; - for (let i = 0; i < len; i++) { - let l = list[i]; - l.apply(null, args); + for (let l of list) { + const { isAsync, callback } = l; + + if (isAsync) + await callback.apply(null, args); + else + callback.apply(null, args); } }, //In the future, all events should be non sticky - emitNoSticky: function (event) { + emitNoSticky: async function (event) { let args = [].slice.call(arguments, 1); let list = this.events[event]; @@ -47,8 +59,8 @@ module.exports = { let len = list.length; for (let i = 0; i < len; i++) { - let l = list[i]; - l.apply(null, args); + const { callback } = list[i]; + callback.apply(null, args); } } };