73 lines
No EOL
2.4 KiB
C#
73 lines
No EOL
2.4 KiB
C#
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using WingsEmu.Game._enum;
|
|
using WingsEmu.Game._i18n;
|
|
using WingsEmu.Game._NpcDialog;
|
|
using WingsEmu.Game._NpcDialog.Event;
|
|
using WingsEmu.Game.Characters.Events;
|
|
using WingsEmu.Game.Extensions;
|
|
using WingsEmu.Game.Networking;
|
|
using WingsEmu.Packets.Enums;
|
|
using WingsEmu.Packets.Enums.Character;
|
|
using WingsEmu.Packets.Enums.Chat;
|
|
|
|
namespace WingsEmu.Plugins.BasicImplementations.NpcDialogs;
|
|
|
|
public class ChangeClassHandler : INpcDialogAsyncHandler
|
|
{
|
|
private readonly IGameLanguageService _langService;
|
|
|
|
public ChangeClassHandler(IGameLanguageService langService) => _langService = langService;
|
|
|
|
public NpcRunType[] NpcRunTypes => new[] { NpcRunType.CHANGE_CLASS };
|
|
|
|
public async Task Execute(IClientSession session, NpcDialogEvent e)
|
|
{
|
|
if (session.PlayerEntity.Class != (byte)ClassType.Adventurer)
|
|
{
|
|
session.SendMsg(_langService.GetLanguage(GameDialogKey.INFORMATION_SHOUTMESSAGE_NO_ADNVENTURER, session.UserLanguage), MsgMessageType.Middle);
|
|
return;
|
|
}
|
|
|
|
if (session.CantPerformActionOnAct4())
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (session.PlayerEntity.Level < 15 || session.PlayerEntity.JobLevel < 20)
|
|
{
|
|
session.SendMsg(_langService.GetLanguage(GameDialogKey.INFORMATION_SHOUTMESSAGE_TOO_LOW_LVL, session.UserLanguage), MsgMessageType.Middle);
|
|
return;
|
|
}
|
|
|
|
if (session.PlayerEntity.IsInGroup())
|
|
{
|
|
session.SendMsg(_langService.GetLanguage(GameDialogKey.INFORMATION_SHOUTMESSAGE_NEED_LEAVE_GROUP, session.UserLanguage), MsgMessageType.Middle);
|
|
return;
|
|
}
|
|
|
|
if (e.Argument == (byte)session.PlayerEntity.Class)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (e.Argument >= 4 || e.Argument < 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (session.PlayerEntity.EquippedItems.Any(s => s != null && s.ItemInstance.GameItem.Class == (byte)ItemClassType.Adventurer))
|
|
{
|
|
session.SendMsg(_langService.GetLanguage(GameDialogKey.INFORMATION_SHOUTMESSAGE_EQ_NOT_EMPTY, session.UserLanguage), MsgMessageType.Middle);
|
|
return;
|
|
}
|
|
|
|
await session.EmitEventAsync(new ChangeClassEvent
|
|
{
|
|
NewClass = (ClassType)e.Argument,
|
|
ShouldObtainBasicItems = true,
|
|
ShouldObtainNewFaction = true,
|
|
ShouldResetJobLevel = true
|
|
});
|
|
}
|
|
} |