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

82 lines
No EOL
3.3 KiB
C#

using System.Threading.Tasks;
using WingsEmu.Game._i18n;
using WingsEmu.Game._ItemUsage;
using WingsEmu.Game._ItemUsage.Event;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Networking;
using WingsEmu.Packets.Enums;
using WingsEmu.Packets.Enums.Chat;
using WingsEmu.Packets.Enums.Families;
namespace WingsEmu.Plugins.BasicImplementations.ItemUsage.Main.Special;
public class FactionEggHandler : IItemHandler
{
private const int IndividualAngelEgg = 1;
private const int IndividualDemonEgg = 2;
private const int FamilyAngelEgg = 3;
private const int FamilyDemonEgg = 4;
private readonly IGameLanguageService _languageService;
public FactionEggHandler(IGameLanguageService languageService) => _languageService = languageService;
public ItemType ItemType => ItemType.Special;
public long[] Effects => new long[] { 570 };
public async Task HandleAsync(IClientSession session, InventoryUseItemEvent e)
{
if (session.PlayerEntity.IsOnVehicle)
{
session.SendMsg(_languageService.GetLanguage(GameDialogKey.INFORMATION_SHOUTMESSAGE_REMOVE_VEHICLE, session.UserLanguage), MsgMessageType.Middle);
return;
}
if (session.CantPerformActionOnAct4())
{
return;
}
int eggType = e.Item.ItemInstance.GameItem.EffectValue;
FactionType targetFaction = eggType == IndividualAngelEgg || eggType == FamilyAngelEgg ? FactionType.Angel : FactionType.Demon;
if (eggType == IndividualAngelEgg || eggType == IndividualDemonEgg)
{
if (session.PlayerEntity.Faction == targetFaction)
{
session.SendMsg(_languageService.GetLanguage(GameDialogKey.ITEM_SHOUTMESSAGE_SAME_FACTION, session.UserLanguage), MsgMessageType.Middle);
return;
}
if (session.PlayerEntity.Family != null)
{
session.SendMsg(_languageService.GetLanguage(GameDialogKey.ITEM_SHOUTMESSAGE_FACTION_CANT_IN_FAMILY, session.UserLanguage), MsgMessageType.Middle);
return;
}
session.SendQnaPacket($"guri 750 {eggType}", _languageService.GetLanguage(GameDialogKey.ITEM_DIALOG_ASK_CHANGE_FACTION, session.UserLanguage));
}
else if (eggType == FamilyAngelEgg || eggType == FamilyDemonEgg)
{
if (!session.PlayerEntity.IsInFamily())
{
session.SendMsg(_languageService.GetLanguage(GameDialogKey.FAMILY_INFO_NO_FAMILY, session.UserLanguage), MsgMessageType.Middle);
return;
}
if (session.PlayerEntity.GetFamilyAuthority() != FamilyAuthority.Head)
{
session.SendMsg(_languageService.GetLanguage(GameDialogKey.FAMILY_INFO_NOT_FAMILY_HEAD, session.UserLanguage), MsgMessageType.Middle);
return;
}
if ((session.PlayerEntity.Family.Faction / 2) == eggType)
{
session.SendMsg(_languageService.GetLanguage(GameDialogKey.ITEM_SHOUTMESSAGE_SAME_FACTION, session.UserLanguage), MsgMessageType.Middle);
return;
}
session.SendQnaPacket($"guri 750 {eggType}", _languageService.GetLanguage(GameDialogKey.ITEM_DIALOG_ASK_CHANGE_FAMILY_FACTION, session.UserLanguage));
}
}
}