From a314308a0f4b1f6381884f630768555375b02b55 Mon Sep 17 00:00:00 2001 From: Shaun Date: Sat, 27 Jan 2024 15:52:19 +0200 Subject: [PATCH] modding #2014: new server event 'beforeDeleteCharacter' --- .../ui/templates/characters/characters.js | 30 +++++++++++++------ src/server/components/auth.js | 23 +++++++++++++- 2 files changed, 43 insertions(+), 10 deletions(-) diff --git a/src/client/ui/templates/characters/characters.js b/src/client/ui/templates/characters/characters.js index cb236b13..c1fe5ce3 100644 --- a/src/client/ui/templates/characters/characters.js +++ b/src/client/ui/templates/characters/characters.js @@ -222,7 +222,7 @@ define([ this.find('.message').html(msg); }, - onDeleteClick: function () { + onDeleteClick: async function () { if (!this.selected) return; @@ -242,22 +242,34 @@ define([ this.el.addClass('disabled'); - client.request({ - cpn: 'auth', - method: 'deleteCharacter', - data: { - name: this.selected - }, - callback: this.onGetCharacters.bind(this) + const result = await new Promise(res => { + client.request({ + cpn: 'auth', + method: 'deleteCharacter', + data: { + name: this.selected + }, + callback: res + }); }); + + if (!result.success) { + this.setMessage(result.msg); + this.el.removeClass('disabled'); + + return; + } + + this.onGetCharacters(result.characterList); }, onDeleteReset: function () { - this.setMessage(''); this.deleteCount = 0; this.find('.btnDelete') .removeClass('deleting') .html('delete'); + + setTimeout(this.setMessage.bind(this, ''), 5000); } }; }); diff --git a/src/server/components/auth.js b/src/server/components/auth.js index a48f462e..62fb29cb 100644 --- a/src/server/components/auth.js +++ b/src/server/components/auth.js @@ -547,6 +547,24 @@ module.exports = { return; } + const msgBeforeDeleteCharacter = { + obj: this, + name: data.name, + success: true, + msg: null + }; + + await eventEmitter.emit('beforeDeleteCharacter', msgBeforeDeleteCharacter); + + if (!msgBeforeDeleteCharacter.success) { + msg.callback({ + success: false, + msg: msgBeforeDeleteCharacter.msg + }); + + return; + } + await io.deleteAsync({ key: data.name, table: 'character' @@ -576,7 +594,10 @@ module.exports = { level: leaderboard.getLevel(c.name ? c.name : c) })); - msg.callback(result); + msg.callback({ + success: true, + characterList: result + }); }, permadie: function () {