server-master/srcs/_plugins/WingsEmu.Plugins.BasicImplementation/ItemUsage/Main/Special/ChangePartnerSkinHandler.cs
2026-02-10 18:21:30 +01:00

122 lines
No EOL
3.7 KiB
C#

using System.Linq;
using System.Threading.Tasks;
using WingsAPI.Game.Extensions.ItemExtension.Inventory;
using WingsEmu.Game._enum;
using WingsEmu.Game._ItemUsage;
using WingsEmu.Game._ItemUsage.Event;
using WingsEmu.Game.Battle;
using WingsEmu.Game.Extensions.Mates;
using WingsEmu.Game.Mates;
using WingsEmu.Game.Networking;
using WingsEmu.Packets.Enums;
namespace WingsEmu.Plugins.BasicImplementations.ItemUsage.Main.Special;
public class ChangePartnerSkinHandler : IItemHandler
{
private static readonly int[] PartnersWithSkins = { 317, 318, 319, 2557, 2617, 2618, 2620, 2640, 2673 };
public ItemType ItemType => ItemType.Special;
public long[] Effects => new long[] { 305 };
public async Task HandleAsync(IClientSession session, InventoryUseItemEvent e)
{
IMateEntity partner = session.PlayerEntity.MateComponent.GetMate(x => x.IsTeamMember && x.MateType == MateType.Partner);
if (partner == null)
{
return;
}
if (!partner.IsAlive())
{
return;
}
if (partner.IsUsingSp)
{
return;
}
if (!PartnersWithSkins.Contains(partner.NpcMonsterVNum))
{
return;
}
if (partner.Skin == e.Item.ItemInstance.GameItem.Morph)
{
return;
}
switch (partner.NpcMonsterVNum)
{
case 317: // Bob
if (e.Item.ItemInstance.ItemVNum != (short)ItemVnums.SKIN_FOR_BOB)
{
return;
}
partner.Skin = e.Item.ItemInstance.GameItem.Morph;
break;
case 318: // Tom
if (e.Item.ItemInstance.ItemVNum != (short)ItemVnums.SKIN_FOR_TOM)
{
return;
}
partner.Skin = e.Item.ItemInstance.GameItem.Morph;
break;
case 319: // Kliff
if (e.Item.ItemInstance.ItemVNum != (short)ItemVnums.SKIN_FOR_KLIFF)
{
return;
}
partner.Skin = e.Item.ItemInstance.GameItem.Morph;
break;
case 2617: // Frigg
if (e.Item.ItemInstance.ItemVNum != (short)ItemVnums.SKIN_FOR_FRIGG)
{
return;
}
partner.Skin = e.Item.ItemInstance.GameItem.Morph;
break;
case 2618: // Ragnar
if (e.Item.ItemInstance.ItemVNum != (short)ItemVnums.SKIN_FOR_RAGNAR)
{
return;
}
partner.Skin = e.Item.ItemInstance.GameItem.Morph;
break;
case 2620: // Erdimien
if (e.Item.ItemInstance.ItemVNum != (short)ItemVnums.SKIN_FOR_ERDIMIEN)
{
return;
}
partner.Skin = e.Item.ItemInstance.GameItem.Morph;
break;
case 2640: // Jennifer
if (e.Item.ItemInstance.ItemVNum != (short)ItemVnums.SKIN_FOR_JENNIFER)
{
return;
}
partner.Skin = e.Item.ItemInstance.GameItem.Morph;
break;
case 2673: // Yertirand
if (e.Item.ItemInstance.ItemVNum != (short)ItemVnums.SKIN_FOR_YERTIRAND)
{
return;
}
partner.Skin = e.Item.ItemInstance.GameItem.Morph;
break;
}
await session.RemoveItemFromInventory(item: e.Item);
session.CurrentMapInstance?.Broadcast(partner.GenerateCMode(partner.Skin));
session.SendCondMate(partner);
}
}