server-master/srcs/_plugins/WingsEmu.Plugins.BasicImplementation/Guri/FactionSwitchGuriHandler.cs
2026-02-10 18:21:30 +01:00

78 lines
No EOL
2 KiB
C#

using System.Threading.Tasks;
using WingsAPI.Game.Extensions.ItemExtension.Inventory;
using WingsEmu.Game._Guri;
using WingsEmu.Game._Guri.Event;
using WingsEmu.Game.Characters.Events;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Families.Event;
using WingsEmu.Game.Networking;
using WingsEmu.Packets.Enums;
namespace WingsEmu.Plugins.BasicImplementations.Guri;
public class FactionSwitchGuriHandler : IGuriHandler
{
private const int IndividualAngelEgg = 1;
private const int IndividualDemonEgg = 2;
private const int FamilyAngelEgg = 3;
private const int FamilyDemonEgg = 4;
public long GuriEffectId => 750;
public async Task ExecuteAsync(IClientSession session, GuriEvent e)
{
int eggType = e.Data;
int vnum = 1623 + eggType;
var targetFaction = (FactionType)eggType;
bool hasItem = session.PlayerEntity.HasItem(vnum);
if (!hasItem)
{
return;
}
if (session.PlayerEntity.IsOnVehicle)
{
return;
}
if (session.CantPerformActionOnAct4())
{
return;
}
switch (eggType)
{
case IndividualAngelEgg:
case IndividualDemonEgg:
{
if (session.PlayerEntity.IsInFamily())
{
return;
}
if (session.PlayerEntity.Faction == targetFaction)
{
return;
}
await session.EmitEventAsync(new ChangeFactionEvent
{
NewFaction = targetFaction
});
await session.RemoveItemFromInventory(vnum);
break;
}
case FamilyAngelEgg:
case FamilyDemonEgg:
{
await session.EmitEventAsync(new FamilyChangeFactionEvent
{
Faction = eggType / 2
});
break;
}
}
}
}