122 lines
No EOL
3.7 KiB
C#
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);
|
|
}
|
|
} |