using System.Threading.Tasks; using PhoenixLib.Logging; using WingsAPI.Game.Extensions.ItemExtension.Inventory; using WingsEmu.Game._enum; using WingsEmu.Game._i18n; using WingsEmu.Game._ItemUsage; using WingsEmu.Game._ItemUsage.Event; using WingsEmu.Game.Battle; using WingsEmu.Game.Extensions; using WingsEmu.Game.Extensions.Mates; using WingsEmu.Game.Mates; using WingsEmu.Game.Networking; using WingsEmu.Packets.Enums; using WingsEmu.Packets.Enums.Chat; namespace WingsEmu.Plugins.BasicImplementations.ItemUsage.Etc.Teacher; public class MateFoodHandler : IItemHandler { private readonly IGameLanguageService _gameLanguage; public MateFoodHandler(IGameLanguageService gameLanguage) => _gameLanguage = gameLanguage; public ItemType ItemType => ItemType.PetPartnerItem; public long[] Effects => new long[] { 10 }; public async Task HandleAsync(IClientSession session, InventoryUseItemEvent e) { if (!long.TryParse(e.Packet[3], out long mateId)) { Log.Debug("Mate not found"); return; } IMateEntity mate = session.PlayerEntity.MateComponent.GetMate(m => m.Id == mateId && m.MateType == MateType.Pet); if (mate == null) { return; } if (!mate.IsAlive()) { return; } if (mate.Loyalty == 1000) { return; } int loyalty = mate.Loyalty + 100 > 1000 ? 1000 - mate.Loyalty : 100; mate.Loyalty += (short)loyalty; session.SendCondMate(mate); session.SendPetInfo(mate, _gameLanguage); session.SendMateEffect(mate, EffectType.PetLove); session.SendMateEffect(mate, EffectType.ShinyStars); session.SendChatMessage(_gameLanguage.GetLanguage(GameDialogKey.PET_CHATMESSAGE_EAT_EVERYTHING, session.UserLanguage), ChatMessageColorType.Yellow); await session.RemoveItemFromInventory(item: e.Item); } }