server-master/srcs/_plugins/WingsEmu.Plugins.BasicImplementation/ItemUsage/Etc/Magical/HairDyeHandler.cs
2026-02-10 18:21:30 +01:00

90 lines
No EOL
3.3 KiB
C#

using System;
using System.Threading.Tasks;
using WingsAPI.Game.Extensions.ItemExtension.Inventory;
using WingsEmu.Game;
using WingsEmu.Game._enum;
using WingsEmu.Game._ItemUsage;
using WingsEmu.Game._ItemUsage.Event;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Items;
using WingsEmu.Game.Networking;
using WingsEmu.Packets.Enums;
using WingsEmu.Packets.Enums.Character;
namespace WingsEmu.Plugins.BasicImplementations.ItemUsage.Etc.Magical;
public class HairDyeHandler : IItemUsageByVnumHandler
{
private readonly IRandomGenerator _randomGenerator;
public HairDyeHandler(IRandomGenerator randomGenerator) => _randomGenerator = randomGenerator;
public long[] Vnums => new[]
{
(long)ItemVnums.MYSTERIOUS_HAIR_DYE, (long)ItemVnums.MYSTERIOUS_HAIR_DYE_LIMITED, (long)ItemVnums.SAVAGE_DYES,
(long)ItemVnums.HAIR_DYE_11,
(long)ItemVnums.HAIR_DYE_12,
(long)ItemVnums.HAIR_DYE_13,
(long)ItemVnums.HAIR_DYE_14,
(long)ItemVnums.HAIR_DYE_15,
(long)ItemVnums.HAIR_DYE_16,
(long)ItemVnums.HAIR_DYE_17,
(long)ItemVnums.HAIR_DYE_18,
(long)ItemVnums.HAIR_DYE_19,
(long)ItemVnums.HAIR_DYE_20,
(long)ItemVnums.RED_DYE,
(long)ItemVnums.DARK_DYE,
(long)ItemVnums.BLUE_DYE,
(long)ItemVnums.GREY_DYE,
(long)ItemVnums.PINK_DYE,
(long)ItemVnums.BLACK_DYE,
(long)ItemVnums.BROWN_DYE,
(long)ItemVnums.GREEN_DYE,
(long)ItemVnums.WHITE_DYE,
(long)ItemVnums.ORANGE_DYE,
(long)ItemVnums.PURPLE_DYE,
(long)ItemVnums.YELLOW_DYE,
(long)ItemVnums.LIGHT_BLUE_DYE,
(long)ItemVnums.LIGHT_GREEN_DYE
};
public async Task HandleAsync(IClientSession session, InventoryUseItemEvent e)
{
IGameItem gameItem = e.Item.ItemInstance.GameItem;
int itemVnum = e.Item.ItemInstance.ItemVNum;
if (itemVnum == (short)ItemVnums.SAVAGE_DYES)
{
HairStyleType hairStyle = session.PlayerEntity.HairStyle;
if (hairStyle is HairStyleType.FemaleSpecialHair or HairStyleType.MaleSpecialHair)
{
return;
}
if (hairStyle != HairStyleType.ChoppyBangs && hairStyle != HairStyleType.FrenchBraid && hairStyle != HairStyleType.FauxHawk && hairStyle != HairStyleType.JellyRolls)
{
return;
}
session.PlayerEntity.HairStyle = session.PlayerEntity.Gender == GenderType.Female ? HairStyleType.FemaleSpecialHair : HairStyleType.MaleSpecialHair;
session.BroadcastEq();
await session.RemoveItemFromInventory(item: e.Item);
return;
}
if (itemVnum == (int)ItemVnums.MYSTERIOUS_HAIR_DYE || itemVnum == (int)ItemVnums.MYSTERIOUS_HAIR_DYE_LIMITED)
{
short nextValue = (short)_randomGenerator.RandomNumber(0, 127);
session.PlayerEntity.HairColor = Enum.TryParse(nextValue.ToString(), out HairColorType hairColorType) ? hairColorType : 0;
}
else
{
session.PlayerEntity.HairColor = Enum.TryParse(gameItem.EffectValue.ToString(), out HairColorType hairColorType) ? hairColorType : 0;
}
session.BroadcastEq();
await session.RemoveItemFromInventory(item: e.Item);
}
}