From 45e67976ac98bc2d679c6a640815ba0e3032d9f1 Mon Sep 17 00:00:00 2001 From: Veradictus Date: Sun, 17 Sep 2023 23:50:33 -0600 Subject: [PATCH] feat: sound effects --- packages/client/src/network/connection.ts | 9 +++++++++ packages/common/network/impl/notification.ts | 1 + packages/common/types/popup.d.ts | 1 + .../entity/character/player/achievement/achievement.ts | 3 ++- .../src/game/entity/character/player/achievements.ts | 2 +- .../server/src/game/entity/character/player/player.ts | 6 ++++-- 6 files changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/client/src/network/connection.ts b/packages/client/src/network/connection.ts index 4b1e922d5c..660fc36ff6 100644 --- a/packages/client/src/network/connection.ts +++ b/packages/client/src/network/connection.ts @@ -843,6 +843,8 @@ export default class Connection { } case Opcodes.Notification.Popup: { + if (info.soundEffect) this.audio.playSound(info.soundEffect); + return this.menu .getNotification() .show( @@ -883,6 +885,9 @@ export default class Connection { this.info.create(Modules.Hits.Heal, info.amount, character.x, character.y); character.addEffect(Modules.Effects.Healing); + + if (this.game.player.instance === character.instance) this.audio.playSound('heal'); + break; } @@ -943,6 +948,8 @@ export default class Connection { */ private handleDeath(): void { + this.audio.playSound('death'); + // Stop player movement this.game.player.stop(true); @@ -1038,6 +1045,8 @@ export default class Connection { */ private handleRespawn(info: RespawnPacketData): void { + this.game.audio.playSound('revive'); + this.game.player.setGridPosition(info.x, info.y); this.camera.centreOn(this.game.player); diff --git a/packages/common/network/impl/notification.ts b/packages/common/network/impl/notification.ts index b14ce22eb3..727c71d829 100644 --- a/packages/common/network/impl/notification.ts +++ b/packages/common/network/impl/notification.ts @@ -9,6 +9,7 @@ export interface NotificationPacketData { message: string; // String message to display. colour?: string; // Colour of the message. source?: string; + soundEffect?: string; } export type NotificationPacketCallback = ( diff --git a/packages/common/types/popup.d.ts b/packages/common/types/popup.d.ts index afbd3f6fbc..09c0419df2 100644 --- a/packages/common/types/popup.d.ts +++ b/packages/common/types/popup.d.ts @@ -2,4 +2,5 @@ export interface PopupData { title: string; text: string; colour: string; + soundEffect?: string; } diff --git a/packages/server/src/game/entity/character/player/achievement/achievement.ts b/packages/server/src/game/entity/character/player/achievement/achievement.ts index 23eb49fc72..3f264cf100 100644 --- a/packages/server/src/game/entity/character/player/achievement/achievement.ts +++ b/packages/server/src/game/entity/character/player/achievement/achievement.ts @@ -303,7 +303,8 @@ export default class Achievement { return { title: 'Achievement Completed!', text, - colour: '#33cc33' + colour: '#33cc33', + soundEffect: 'achievement' }; } diff --git a/packages/server/src/game/entity/character/player/achievements.ts b/packages/server/src/game/entity/character/player/achievements.ts index 9a64717c7e..95df4dbcfa 100644 --- a/packages/server/src/game/entity/character/player/achievements.ts +++ b/packages/server/src/game/entity/character/player/achievements.ts @@ -124,7 +124,7 @@ export default class Achievements { */ private handlePopup(popup: PopupData): void { - this.player.popup(popup.title, popup.text, popup.colour); + this.player.popup(popup.title, popup.text, popup.colour, popup.soundEffect); } /** diff --git a/packages/server/src/game/entity/character/player/player.ts b/packages/server/src/game/entity/character/player/player.ts index c223e4adad..5cdf0c599d 100644 --- a/packages/server/src/game/entity/character/player/player.ts +++ b/packages/server/src/game/entity/character/player/player.ts @@ -2268,16 +2268,18 @@ export default class Player extends Character { * @param title The header text for the popup. * @param message The text contents of the popup. * @param colour The colour of the popup's text. + * @param soundEffect The sound effect to play when the popup is displayed. */ - public popup(title: string, message: string, colour = '#00000'): void { + public popup(title: string, message: string, colour = '#00000', soundEffect = ''): void { if (!title) return; this.send( new NotificationPacket(Opcodes.Notification.Popup, { title, message, - colour + colour, + soundEffect }) ); }