@@ -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(); | |||
}, | |||
@@ -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; | |||
@@ -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) { | |||
@@ -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 | |||
@@ -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; | |||
}, | |||
@@ -2,7 +2,6 @@ const tableNames = [ | |||
'character', | |||
'characterList', | |||
'stash', | |||
'skins', | |||
'login', | |||
'leaderboard', | |||
'customMap', | |||
@@ -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 | |||
}); | |||
} | |||
} | |||
}; |
@@ -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); | |||
} | |||
} | |||
}; |