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