diff --git a/EOLib/PacketHandlers/Jukebox/JukeboxAgreeHandler.cs b/EOLib/PacketHandlers/Jukebox/JukeboxAgreeHandler.cs
new file mode 100644
index 00000000..f458329c
--- /dev/null
+++ b/EOLib/PacketHandlers/Jukebox/JukeboxAgreeHandler.cs
@@ -0,0 +1,39 @@
+using AutomaticTypeMapper;
+using EOLib.Domain.Character;
+using EOLib.Domain.Login;
+using EOLib.Net;
+using EOLib.Net.Handlers;
+using Optional.Collections;
+
+namespace EOLib.PacketHandlers.Jukebox
+{
+ ///
+ /// Sent to update character's remaining gold after requesting a song
+ ///
+ [AutoMappedType]
+ public class JukeboxAgreeHandler : InGameOnlyPacketHandler
+ {
+ private readonly ICharacterInventoryRepository _characterInventoryRepository;
+
+ public override PacketFamily Family => PacketFamily.JukeBox;
+
+ public override PacketAction Action => PacketAction.Agree;
+
+ public JukeboxAgreeHandler(IPlayerInfoProvider playerInfoProvider,
+ ICharacterInventoryRepository characterInventoryRepository)
+ : base(playerInfoProvider)
+ {
+ _characterInventoryRepository = characterInventoryRepository;
+ }
+
+ public override bool HandlePacket(IPacket packet)
+ {
+ var goldRemaining = packet.ReadInt();
+
+ _characterInventoryRepository.ItemInventory.SingleOrNone(x => x.ItemID == 1).MatchSome(x => _characterInventoryRepository.ItemInventory.Remove(x));
+ _characterInventoryRepository.ItemInventory.Add(new InventoryItem(1, goldRemaining));
+
+ return true;
+ }
+ }
+}
diff --git a/EOLib/PacketHandlers/Jukebox/JukeboxOpenHandler.cs b/EOLib/PacketHandlers/Jukebox/JukeboxOpenHandler.cs
index 47c618b8..84cd6da0 100644
--- a/EOLib/PacketHandlers/Jukebox/JukeboxOpenHandler.cs
+++ b/EOLib/PacketHandlers/Jukebox/JukeboxOpenHandler.cs
@@ -37,6 +37,10 @@ public override bool HandlePacket(IPacket packet)
{
_jukeboxRepository.PlayingRequestName = Option.Some(packet.ReadEndString());
}
+ else
+ {
+ _jukeboxRepository.PlayingRequestName = Option.None();
+ }
foreach (var notifier in _userInterfaceNotifiers)
notifier.NotifyPacketDialog(PacketFamily.JukeBox);
diff --git a/EOLib/PacketHandlers/Jukebox/JukeboxUseHandler.cs b/EOLib/PacketHandlers/Jukebox/JukeboxUseHandler.cs
index b3fc0236..590d1276 100644
--- a/EOLib/PacketHandlers/Jukebox/JukeboxUseHandler.cs
+++ b/EOLib/PacketHandlers/Jukebox/JukeboxUseHandler.cs
@@ -1,8 +1,10 @@
using AutomaticTypeMapper;
+using EOLib.Domain.Interact.Jukebox;
using EOLib.Domain.Login;
using EOLib.Domain.Notifiers;
using EOLib.Net;
using EOLib.Net.Handlers;
+using Optional;
using System.Collections.Generic;
namespace EOLib.PacketHandlers.Jukebox
@@ -13,6 +15,7 @@ namespace EOLib.PacketHandlers.Jukebox
[AutoMappedType]
public class JukeboxUseHandler : InGameOnlyPacketHandler
{
+ private readonly IJukeboxRepository _jukeboxRepository;
private readonly IEnumerable _soundNotifiers;
public override PacketFamily Family => PacketFamily.JukeBox;
@@ -20,17 +23,23 @@ public class JukeboxUseHandler : InGameOnlyPacketHandler
public override PacketAction Action => PacketAction.Use;
public JukeboxUseHandler(IPlayerInfoProvider playerInfoProvider,
+ IJukeboxRepository jukeboxRepository,
IEnumerable soundNotifiers)
: base(playerInfoProvider)
{
+ _jukeboxRepository = jukeboxRepository;
_soundNotifiers = soundNotifiers;
}
public override bool HandlePacket(IPacket packet)
{
var id = packet.ReadShort();
+
+ _jukeboxRepository.PlayingRequestName = Option.Some(string.Empty);
+
foreach (var notifier in _soundNotifiers)
notifier.NotifyMusic(id, isJukebox: true);
+
return true;
}
}