From 47921188aa7ea8c0cc5b8de16d2267e5b9878f52 Mon Sep 17 00:00:00 2001 From: Ethan Moffat Date: Tue, 12 Apr 2022 22:08:33 -0700 Subject: [PATCH] Implement handler for StatskillTake for learning skills --- EOLib/Net/API/StatSkill.cs | 13 ------ EOLib/PacketHandlers/Skill/StatskillTake.cs | 45 +++++++++++++++++++ EndlessClient/Old/PacketAPICallbackManager.cs | 10 ----- 3 files changed, 45 insertions(+), 23 deletions(-) create mode 100644 EOLib/PacketHandlers/Skill/StatskillTake.cs diff --git a/EOLib/Net/API/StatSkill.cs b/EOLib/Net/API/StatSkill.cs index d089533ca..530c63b78 100644 --- a/EOLib/Net/API/StatSkill.cs +++ b/EOLib/Net/API/StatSkill.cs @@ -134,15 +134,12 @@ internal StatResetData(OldPacket pkt) } public delegate void SpellLearnErrorEvent(SkillMasterReply reply, short classID); - public delegate void SpellLearnSuccessEvent(short spellID, int goldRemaining); public delegate void SpellForgetEvent(short spellID); - public delegate void SpellTrainEvent(short skillPtsRemaining, short spellID, short spellLevel); partial class PacketAPI { public event Action OnSkillmasterOpen; public event SpellLearnErrorEvent OnSpellLearnError; - public event SpellLearnSuccessEvent OnSpellLearnSuccess; public event SpellForgetEvent OnSpellForget; public event Action OnCharacterStatsReset; @@ -150,7 +147,6 @@ private void _createStatSkillMembers() { m_client.AddPacketHandler(new FamilyActionPair(PacketFamily.StatSkill, PacketAction.Open), _handleStatSkillOpen, true); m_client.AddPacketHandler(new FamilyActionPair(PacketFamily.StatSkill, PacketAction.Reply), _handleStatSkillReply, true); - m_client.AddPacketHandler(new FamilyActionPair(PacketFamily.StatSkill, PacketAction.Take), _handleStatSkillTake, true); m_client.AddPacketHandler(new FamilyActionPair(PacketFamily.StatSkill, PacketAction.Remove), _handleStatSkillRemove, true); m_client.AddPacketHandler(new FamilyActionPair(PacketFamily.StatSkill, PacketAction.Junk), _handleStatSkillJunk, true); } @@ -214,15 +210,6 @@ private void _handleStatSkillReply(OldPacket pkt) OnSpellLearnError((SkillMasterReply)pkt.GetShort(), pkt.GetShort()); } - //success learning a skill - private void _handleStatSkillTake(OldPacket pkt) - { - //short - spell id - //int - character gold remaining - if (OnSpellLearnSuccess != null) - OnSpellLearnSuccess(pkt.GetShort(), pkt.GetInt()); - } - //forgetting a skill private void _handleStatSkillRemove(OldPacket pkt) { diff --git a/EOLib/PacketHandlers/Skill/StatskillTake.cs b/EOLib/PacketHandlers/Skill/StatskillTake.cs new file mode 100644 index 000000000..fa8b6de17 --- /dev/null +++ b/EOLib/PacketHandlers/Skill/StatskillTake.cs @@ -0,0 +1,45 @@ +using AutomaticTypeMapper; +using EOLib.Domain.Character; +using EOLib.Domain.Login; +using EOLib.Net; +using EOLib.Net.Handlers; +using System.Linq; + +namespace EOLib.PacketHandlers.Skill +{ + /// + /// Sent when learning a skill, either via $learn command or from skillmaster + /// + [AutoMappedType] + public class StatskillTake : InGameOnlyPacketHandler + { + private readonly ICharacterInventoryRepository _characterInventoryRepository; + + public override PacketFamily Family => PacketFamily.StatSkill; + + public override PacketAction Action => PacketAction.Take; + + public StatskillTake(IPlayerInfoProvider playerInfoProvider, + ICharacterInventoryRepository characterInventoryRepository) + : base(playerInfoProvider) + { + _characterInventoryRepository = characterInventoryRepository; + } + + public override bool HandlePacket(IPacket packet) + { + var spellId = packet.ReadShort(); + var characterGold = packet.ReadInt(); + + if (!_characterInventoryRepository.SpellInventory.Any(x => x.ID == spellId)) + { + _characterInventoryRepository.SpellInventory.Add(new InventorySpell(spellId, 0)); + } + + _characterInventoryRepository.ItemInventory.RemoveWhere(x => x.ItemID == 1); + _characterInventoryRepository.ItemInventory.Add(new InventoryItem(1, characterGold)); + + return true; + } + } +} diff --git a/EndlessClient/Old/PacketAPICallbackManager.cs b/EndlessClient/Old/PacketAPICallbackManager.cs index 52e914838..aff924af6 100644 --- a/EndlessClient/Old/PacketAPICallbackManager.cs +++ b/EndlessClient/Old/PacketAPICallbackManager.cs @@ -48,7 +48,6 @@ public void AssignCallbacks() //skills m_packetAPI.OnSkillmasterOpen += _skillmasterOpen; m_packetAPI.OnSpellLearnError += _statskillLearnError; - m_packetAPI.OnSpellLearnSuccess += _statskillLearnSpellSuccess; m_packetAPI.OnSpellForget += _statskillForgetSpell; m_packetAPI.OnCharacterStatsReset += _statskillReset; @@ -197,15 +196,6 @@ private void _statskillLearnError(SkillMasterReply reply, short id) } } - private void _statskillLearnSpellSuccess(short id, int remaining) - { - OldWorld.Instance.MainPlayer.ActiveCharacter.Spells.Add(new InventorySpell(id, 0)); - if (SkillmasterDialog.Instance != null) - SkillmasterDialog.Instance.RemoveSkillByIDFromLearnList(id); - //OldWorld.Instance.MainPlayer.ActiveCharacter.UpdateInventoryItem(1, remaining); - //m_game.Hud.AddNewSpellToActiveSpellsByID(id); - } - private void _statskillForgetSpell(short id) { OldWorld.Instance.MainPlayer.ActiveCharacter.Spells.RemoveAll(_spell => _spell.ID == id);