Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement bank account dialog and associated packets #178

Merged
merged 2 commits into from
Apr 10, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
52 changes: 52 additions & 0 deletions EOLib/Domain/Interact/Bank/BankActions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
using AutomaticTypeMapper;
using EOLib.Net;
using EOLib.Net.Communication;

namespace EOLib.Domain.Interact.Bank
{
[AutoMappedType]
public class BankActions : IBankActions
{
private readonly IPacketSendService _packetSendService;

public BankActions(IPacketSendService packetSendService)
{
_packetSendService = packetSendService;
}

public void Deposit(int amount)
{
var packet = new PacketBuilder(PacketFamily.Bank, PacketAction.Add)
.AddInt(amount)
.Build();

_packetSendService.SendPacket(packet);
}

public void Withdraw(int amount)
{
var packet = new PacketBuilder(PacketFamily.Bank, PacketAction.Take)
.AddInt(amount)
.Build();

_packetSendService.SendPacket(packet);
}

public void BuyStorageUpgrade()
{
var packet = new PacketBuilder(PacketFamily.Locker, PacketAction.Buy)
.Build();

_packetSendService.SendPacket(packet);
}
}

public interface IBankActions
{
void Deposit(int amount);

void Withdraw(int amount);

void BuyStorageUpgrade();
}
}
45 changes: 45 additions & 0 deletions EOLib/Domain/Interact/Bank/BankDataRepository.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
using AutomaticTypeMapper;
using Optional;

namespace EOLib.Domain.Interact.Bank
{
public interface IBankDataRepository : IResettable
{
int AccountValue { get; set; }

int SessionID { get; set; }

Option<int> LockerUpgrades { get; set; }
}

public interface IBankDataProvider : IResettable
{
int AccountValue { get; }

int SessionID { get; }

Option<int> LockerUpgrades { get; }
}

[AutoMappedType(IsSingleton = true)]
public class BankDataRepository : IBankDataRepository, IBankDataProvider
{
public int AccountValue { get; set; }

public int SessionID { get; set; }

public Option<int> LockerUpgrades { get; set; }

public BankDataRepository()
{
ResetState();
}

public void ResetState()
{
AccountValue = 0;
SessionID = 0;
LockerUpgrades = Option.None<int>();
}
}
}
11 changes: 11 additions & 0 deletions EOLib/Domain/Interact/MapNPCActions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,23 @@ public void RequestQuest(INPC npc)

_packetSendService.SendPacket(packet);
}

public void RequestBank(INPC npc)
{
var packet = new PacketBuilder(PacketFamily.Bank, PacketAction.Open)
.AddShort(npc.Index)
.Build();

_packetSendService.SendPacket(packet);
}
}

public interface IMapNPCActions
{
void RequestShop(INPC npc);

void RequestQuest(INPC npc);

void RequestBank(INPC npc);
}
}
71 changes: 0 additions & 71 deletions EOLib/Net/API/Bank.cs

This file was deleted.

26 changes: 0 additions & 26 deletions EOLib/Net/API/Locker.cs

This file was deleted.

2 changes: 0 additions & 2 deletions EOLib/Net/API/PacketAPI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,7 @@ public PacketAPI(EOClient client)
m_client = client;

//each of these sets up members of the partial PacketAPI class relevant to a particular packet family
_createBankMembers();
_createInitMembers();
_createLockerMembers();
_createMusicMembers();
_createPartyMembers();
_createNPCMembers();
Expand Down
35 changes: 35 additions & 0 deletions EOLib/PacketHandlers/Bank/BankOpenHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
using AutomaticTypeMapper;
using EOLib.Domain.Interact.Bank;
using EOLib.Domain.Login;
using EOLib.Net;
using EOLib.Net.Handlers;
using Optional;

namespace EOLib.PacketHandlers.Bank
{
[AutoMappedType]
public class BankOpenHandler : InGameOnlyPacketHandler
{
private readonly IBankDataRepository _bankDataRepository;

public override PacketFamily Family => PacketFamily.Bank;

public override PacketAction Action => PacketAction.Open;

public BankOpenHandler(IPlayerInfoProvider playerInfoProvider,
IBankDataRepository bankDataRepository)
: base(playerInfoProvider)
{
_bankDataRepository = bankDataRepository;
}

public override bool HandlePacket(IPacket packet)
{
_bankDataRepository.AccountValue = packet.ReadInt();
_bankDataRepository.SessionID = packet.ReadThree();
_bankDataRepository.LockerUpgrades = Option.Some<int>(packet.ReadChar());

return true;
}
}
}
40 changes: 40 additions & 0 deletions EOLib/PacketHandlers/Bank/BankReplyHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
using AutomaticTypeMapper;
using EOLib.Domain.Character;
using EOLib.Domain.Interact.Bank;
using EOLib.Domain.Login;
using EOLib.Net;
using EOLib.Net.Handlers;

namespace EOLib.PacketHandlers.Bank
{
[AutoMappedType]
public class BankReplyHandler : InGameOnlyPacketHandler
{
private readonly IBankDataRepository _bankDataRepository;
private readonly ICharacterInventoryRepository _characterInventoryRepository;

public override PacketFamily Family => PacketFamily.Bank;

public override PacketAction Action => PacketAction.Reply;

public BankReplyHandler(IPlayerInfoProvider playerInfoProvider,
IBankDataRepository bankDataRepository,
ICharacterInventoryRepository characterInventoryRepository)
: base(playerInfoProvider)
{
_bankDataRepository = bankDataRepository;
_characterInventoryRepository = characterInventoryRepository;
}

public override bool HandlePacket(IPacket packet)
{
var characterGold = packet.ReadInt();
_characterInventoryRepository.ItemInventory.RemoveWhere(x => x.ItemID == 1);
_characterInventoryRepository.ItemInventory.Add(new InventoryItem(1, characterGold));

_bankDataRepository.AccountValue = packet.ReadInt();

return true;
}
}
}
41 changes: 41 additions & 0 deletions EOLib/PacketHandlers/Locker/LockerBuyHandler.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
using AutomaticTypeMapper;
using EOLib.Domain.Character;
using EOLib.Domain.Interact.Bank;
using EOLib.Domain.Login;
using EOLib.Net;
using EOLib.Net.Handlers;
using Optional;

namespace EOLib.PacketHandlers.Locker
{
[AutoMappedType]
public class LockerBuyHandler : InGameOnlyPacketHandler
{
private readonly IBankDataRepository _bankDataRepository;
private readonly ICharacterInventoryRepository _characterInventoryRepository;

public override PacketFamily Family => PacketFamily.Locker;

public override PacketAction Action => PacketAction.Buy;

public LockerBuyHandler(IPlayerInfoProvider playerInfoProvider,
IBankDataRepository bankDataRepository,
ICharacterInventoryRepository characterInventoryRepository)
: base(playerInfoProvider)
{
_bankDataRepository = bankDataRepository;
_characterInventoryRepository = characterInventoryRepository;
}

public override bool HandlePacket(IPacket packet)
{
var inventoryGold = packet.ReadInt();
_characterInventoryRepository.ItemInventory.RemoveWhere(x => x.ItemID == 1);
_characterInventoryRepository.ItemInventory.Add(new InventoryItem(1, inventoryGold));

_bankDataRepository.LockerUpgrades = Option.Some<int>(packet.ReadChar());

return true;
}
}
}
1 change: 1 addition & 0 deletions EOLib/misc.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ public static class Constants
public const byte ViewLength = 16;

public const int LockerMaxSingleItemAmount = 200;
public const int MaxLockerUpgrades = 7;
public const int PartyRequestTimeoutSeconds = 15;
public const int TradeRequestTimeoutSeconds = 15;
public const int MuteDefaultTimeMinutes = 5;
Expand Down
11 changes: 11 additions & 0 deletions EndlessClient/Controllers/NPCInteractionController.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using AutomaticTypeMapper;
using EndlessClient.Dialogs;
using EndlessClient.Dialogs.Actions;
using EOLib.Domain.Interact;
using EOLib.Domain.NPC;
using EOLib.IO.Repositories;
Expand All @@ -11,14 +12,17 @@ namespace EndlessClient.Controllers
public class NPCInteractionController : INPCInteractionController
{
private readonly IMapNPCActions _mapNpcActions;
private readonly IInGameDialogActions _inGameDialogActions;
private readonly IENFFileProvider _enfFileProvider;
private readonly IActiveDialogProvider _activeDialogProvider;

public NPCInteractionController(IMapNPCActions mapNpcActions,
IInGameDialogActions inGameDialogActions,
IENFFileProvider enfFileProvider,
IActiveDialogProvider activeDialogProvider)
{
_mapNpcActions = mapNpcActions;
_inGameDialogActions = inGameDialogActions;
_enfFileProvider = enfFileProvider;
_activeDialogProvider = activeDialogProvider;
}
Expand All @@ -38,6 +42,13 @@ public void ShowNPCDialog(INPC npc)
case EOLib.IO.NPCType.Quest:
_mapNpcActions.RequestQuest(npc);
break;
case EOLib.IO.NPCType.Bank:
_mapNpcActions.RequestBank(npc);
// note: the npc action types rely on a server response to show the dialog because they are driven
// by config data on the server. Bank account dialog does not have this restriction;
// interaction with the NPC should *always* show the dialog
_inGameDialogActions.ShowBankAccountDialog();
break;
}
}
}
Expand Down