Skip to content

Commit

Permalink
Update Barber code to use sdk
Browse files Browse the repository at this point in the history
  • Loading branch information
ethanmoffat committed Jun 5, 2024
1 parent 4568927 commit 714caf6
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 79 deletions.
19 changes: 8 additions & 11 deletions EOLib/Domain/Interact/Barber/BarberActions.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
using AutomaticTypeMapper;
using EOLib.Net;
using EOLib.Net.Communication;
using System.Diagnostics;
using EOLib.Domain.Character;
using Moffat.EndlessOnline.SDK.Protocol.Net.Client;
namespace EOLib.Domain.Interact.Barber
{
[AutoMappedType]
Expand All @@ -20,18 +18,17 @@ public BarberActions(IPacketSendService packetSendService,

public void Purchase(int hairStyle, int hairColor)
{
var packet = new PacketBuilder(PacketFamily.Barber, PacketAction.Buy)
.AddChar((char)hairStyle)
.AddChar((char)hairColor)
.AddInt(_barberDataRepository.SessionID)
.Build();

_packetSendService.SendPacket(packet);
_packetSendService.SendPacket(new BarberBuyClientPacket
{
SessionId = _barberDataRepository.SessionID,
HairStyle = hairStyle,
HairColor = hairColor,
});
}
}

public interface IBarberActions
{
void Purchase(int hairStyle, int hairColor);
}
}
}
7 changes: 2 additions & 5 deletions EOLib/Domain/Interact/MapNPCActions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,7 @@ public void RequestPriest(NPC.NPC npc)

public void RequestBarber(NPC.NPC npc)
{
var packet = new PacketBuilder(PacketFamily.Barber, PacketAction.Open)
.AddInt(npc.Index)
.Build();

var packet = new BarberOpenClientPacket { NpcIndex = npc.Index };
_packetSendService.SendPacket(packet);
}
}
Expand All @@ -89,7 +86,7 @@ public interface IMapNPCActions
void RequestInnkeeper(NPC.NPC npc);
void RequestLaw(NPC.NPC npc);
void RequestPriest(NPC.NPC npc);
void RequestBarber(NPC.NPC npc); // Corrected here
void RequestBarber(NPC.NPC npc);
}

}
90 changes: 35 additions & 55 deletions EOLib/PacketHandlers/Barber/BarberAgreeHandler.cs
Original file line number Diff line number Diff line change
@@ -1,97 +1,77 @@
using AutomaticTypeMapper;
using EOLib.Domain.Interact;
using EOLib.Net;
using EOLib.Net.Handlers;
using System.Collections.Generic;
using EOLib.Domain.Interact.Barber;
using EOLib.Domain.Character;
using EOLib.Domain.Login;
using EOLib.Domain.Map;
using EOLib.Domain.Notifiers;
using EOLib.Net.Handlers;
using Moffat.EndlessOnline.SDK.Protocol.Net;
using Moffat.EndlessOnline.SDK.Protocol.Net.Server;

namespace EOLib.PacketHandlers.Barber
{
[AutoMappedType]
public class BarberAgreeHandler : InGameOnlyPacketHandler
public class BarberAgreeHandler : InGameOnlyPacketHandler<BarberAgreeServerPacket>
{
private readonly IBarberDataRepository _barberDataRepository;
private readonly IEnumerable<INPCInteractionNotifier> _npcInteractionNotifiers;
private readonly ICharacterRepository _characterRepository;
private readonly ICurrentMapStateRepository _currentMapStateRepository;
private readonly ICharacterInventoryRepository _characterInventoryRepository;

public override PacketFamily Family => PacketFamily.Barber;

public override PacketAction Action => PacketAction.Agree;

public BarberAgreeHandler(
IPlayerInfoProvider playerInfoProvider,
IEnumerable<INPCInteractionNotifier> npcInteractionNotifiers,
IBarberDataRepository barberDataRepository,
ICharacterRepository characterRepository,
ICurrentMapStateRepository currentMapStateRepository,
ICharacterInventoryRepository characterInventoryRepository)
: base(playerInfoProvider)
{
_npcInteractionNotifiers = npcInteractionNotifiers;
_barberDataRepository = barberDataRepository;
_characterRepository = characterRepository;
_currentMapStateRepository = currentMapStateRepository;
_characterInventoryRepository = characterInventoryRepository;
}

public override bool HandlePacket(IPacket packet)
public override bool HandlePacket(BarberAgreeServerPacket packet)
{
var amount = packet.ReadInt();
var gold = new InventoryItem(1, amount);
var playerID = packet.ReadShort();

_characterInventoryRepository.ItemInventory.RemoveWhere(x => x.ItemID == 1);
_characterInventoryRepository.ItemInventory.Add(gold);

var currentCharacter = _characterRepository.MainCharacter.ID == playerID
? _characterRepository.MainCharacter
: null;
_characterInventoryRepository.ItemInventory.Add(new InventoryItem(1, packet.GoldAmount));

if (currentCharacter == null)
if (_characterRepository.MainCharacter.ID == packet.Change.PlayerId)
{
return false;
var currentCharacter = _characterRepository.MainCharacter;
_characterRepository.MainCharacter = currentCharacter.WithRenderProperties(UpdateRenderProperties(currentCharacter, packet));
}

var currentRenderProps = currentCharacter.RenderProperties;
var slot = (AvatarSlot)packet.ReadChar();

switch (slot)
else if (_currentMapStateRepository.Characters.ContainsKey(packet.Change.PlayerId))
{
case AvatarSlot.Hair:
if (packet.ReadChar() != 0)
throw new MalformedPacketException("Missing expected 0 byte in updating hair packet", packet);

currentRenderProps = currentRenderProps
.WithHairStyle(packet.ReadChar())
.WithHairColor(packet.ReadChar());
break;

case AvatarSlot.HairColor:
if (packet.ReadChar() != 0)
throw new MalformedPacketException("Missing expected 0 byte in updating hair color packet", packet);

currentRenderProps = currentRenderProps
.WithHairColor(packet.ReadChar());
break;
var currentCharacter = _currentMapStateRepository.Characters[packet.Change.PlayerId];
_currentMapStateRepository.Characters.Update(currentCharacter, currentCharacter.WithRenderProperties(UpdateRenderProperties(currentCharacter, packet)));
}

var updatedCharacter = currentCharacter.WithRenderProperties(currentRenderProps);
return true;
}

if (_characterRepository.MainCharacter.ID == playerID)
{
_characterRepository.MainCharacter = updatedCharacter;
}
else
private CharacterRenderProperties UpdateRenderProperties(Character currentCharacter, BarberAgreeServerPacket packet)
{
var currentRenderProps = currentCharacter.RenderProperties;
switch (packet.Change.ChangeType)
{
_currentMapStateRepository.Characters.Update(currentCharacter, updatedCharacter);
case AvatarChangeType.Hair:
{
var data = (AvatarChange.ChangeTypeDataHair)packet.Change.ChangeTypeData;
currentRenderProps = currentRenderProps
.WithHairStyle(data.HairStyle)
.WithHairColor(data.HairColor);
}
break;
case AvatarChangeType.HairColor:
{
var data = (AvatarChange.ChangeTypeDataHairColor)packet.Change.ChangeTypeData;
currentRenderProps = currentRenderProps
.WithHairColor(data.HairColor);
}
break;
}

return true;
return currentRenderProps;
}
}
}
16 changes: 8 additions & 8 deletions EOLib/PacketHandlers/Barber/BarberOpenHandler.cs
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
using AutomaticTypeMapper;
using EOLib.Domain.Interact;
using EOLib.Net;
using EOLib.Net.Handlers;
using System.Collections.Generic;
using EOLib.Domain.Interact.Barber;
using EOLib.Domain.Character;
using EOLib.Domain.Login;
using EOLib.Net.Handlers;
using Moffat.EndlessOnline.SDK.Protocol.Net;
using Moffat.EndlessOnline.SDK.Protocol.Net.Server;
using System.Collections.Generic;

namespace EOLib.PacketHandlers.Barber
{
[AutoMappedType]
public class BarberOpenHandler : InGameOnlyPacketHandler
public class BarberOpenHandler : InGameOnlyPacketHandler<BarberOpenServerPacket>
{
private readonly IBarberDataRepository _barberDataRepository;
private readonly IEnumerable<INPCInteractionNotifier> _npcInteractionNotifiers;

public override PacketFamily Family => PacketFamily.Barber;

public override PacketAction Action => PacketAction.Open;

public BarberOpenHandler(
Expand All @@ -28,10 +29,9 @@ public BarberOpenHandler(
_barberDataRepository = barberDataRepository;
}

public override bool HandlePacket(IPacket packet)
public override bool HandlePacket(BarberOpenServerPacket packet)
{
var sessionId = packet.ReadInt();
_barberDataRepository.SessionID = sessionId;
_barberDataRepository.SessionID = packet.SessionId;

foreach (var notifier in _npcInteractionNotifiers)
{
Expand Down

0 comments on commit 714caf6

Please sign in to comment.