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

92 lines
No EOL
3 KiB
C#

using System;
using System.Threading.Tasks;
using WingsAPI.Game.Extensions.ItemExtension.Inventory;
using WingsEmu.Game._i18n;
using WingsEmu.Game._ItemUsage;
using WingsEmu.Game._ItemUsage.Event;
using WingsEmu.Game.Characters;
using WingsEmu.Game.Characters.Events;
using WingsEmu.Game.Entities;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Helpers.Damages;
using WingsEmu.Game.Maps;
using WingsEmu.Game.Networking;
using WingsEmu.Packets.Enums;
using WingsEmu.Packets.Enums.Chat;
namespace WingsEmu.Plugins.BasicImplementations.ItemUsage.Etc.Teacher;
public class SteelNetHandler : IItemHandler
{
public ItemType ItemType => ItemType.PetPartnerItem;
public long[] Effects => new long[] { 10001 };
public async Task HandleAsync(IClientSession session, InventoryUseItemEvent e)
{
if (session.PlayerEntity == null)
{
return;
}
IMonsterEntity monsterEntityToCapture = session.CurrentMapInstance?.GetMonsterById(session.PlayerEntity.LastEntity.Item2);
if (monsterEntityToCapture == null)
{
return;
}
int dist = session.PlayerEntity.GetDistance(monsterEntityToCapture);
if (dist > 2)
{
return;
}
if (session.PlayerEntity.LastMonsterCaught.AddSeconds(2) > DateTime.UtcNow)
{
return;
}
IPlayerEntity playerEntity = session.PlayerEntity;
if (monsterEntityToCapture.Level > playerEntity.Level)
{
session.SendMsg(session.GetLanguage(GameDialogKey.SKILL_SHOUTMESSAGE_MONSTER_LEVEL_MUST_BE_LOWER_THAN_YOURS), MsgMessageType.Middle);
return;
}
if (playerEntity.MapInstance.MapInstanceType == MapInstanceType.RaidInstance)
{
session.SendMsg(session.GetLanguage(GameDialogKey.SKILL_SHOUTMESSAGE_CAPTURE_IN_RAID), MsgMessageType.Middle);
return;
}
if (monsterEntityToCapture.GetHpPercentage() >= 50)
{
session.SendMsg(session.GetLanguage(GameDialogKey.SKILL_SHOUTMESSAGE_MONSTER_MUST_BE_LOW_HP), MsgMessageType.Middle);
return;
}
if (playerEntity.MaxPetCount <= playerEntity.MateComponent.GetMates(x => x.MateType == MateType.Pet).Count)
{
session.SendMsg(session.GetLanguage(GameDialogKey.INFORMATION_SHOUTMESSAGE_MAX_PET_COUNT), MsgMessageType.Middle);
return;
}
if (!monsterEntityToCapture.CanBeCaught)
{
session.SendMsg(session.GetLanguage(GameDialogKey.SKILL_SHOUTMESSAGE_CAPTURE_IMPOSSIBLE), MsgMessageType.Middle);
return;
}
if (playerEntity.GetDignityIco() > 3)
{
session.SendMsg(session.GetLanguage(GameDialogKey.SKILL_SHOUTMESSAGE_CAPTURE_DIGNITY_LOW), MsgMessageType.Middle);
return;
}
await session.EmitEventAsync(new MonsterCaptureEvent(monsterEntityToCapture, false));
session.PlayerEntity.LastMonsterCaught = DateTime.UtcNow;
await session.RemoveItemFromInventory(item: e.Item);
}
}