server-master/srcs/_plugins/Plugin.TimeSpaces/Handlers/TimeSpacePartyCreateEventHandler.cs
2026-02-10 18:21:30 +01:00

138 lines
No EOL
5.6 KiB
C#

using System.Threading;
using System.Threading.Tasks;
using PhoenixLib.Events;
using WingsAPI.Game.Extensions.ItemExtension.Inventory;
using WingsAPI.Game.Extensions.ItemExtension.Item;
using WingsEmu.DTOs.Maps;
using WingsEmu.Game._enum;
using WingsEmu.Game._i18n;
using WingsEmu.Game.Configurations;
using WingsEmu.Game.Extensions;
using WingsEmu.Game.Inventory;
using WingsEmu.Game.Managers.StaticData;
using WingsEmu.Game.Networking;
using WingsEmu.Game.TimeSpaces;
using WingsEmu.Game.TimeSpaces.Events;
using WingsEmu.Packets.Enums.Chat;
namespace Plugin.TimeSpaces.Handlers;
public class TimeSpacePartyCreateEventHandler : IAsyncEventProcessor<TimeSpacePartyCreateEvent>
{
private readonly IGameLanguageService _gameLanguage;
private readonly IItemsManager _itemsManager;
private readonly ISubActConfiguration _subActConfiguration;
private readonly ITimeSpaceConfiguration _timeSpaceConfig;
private readonly ITimeSpaceConfiguration _timeSpaceConfiguration;
private readonly ITimeSpaceManager _timeSpaceManager;
public TimeSpacePartyCreateEventHandler(ITimeSpaceManager timeSpaceManager, IGameLanguageService gameLanguage, ITimeSpaceConfiguration timeSpaceConfiguration, IItemsManager itemsManager,
ISubActConfiguration subActConfiguration, ITimeSpaceConfiguration timeSpaceConfig)
{
_timeSpaceManager = timeSpaceManager;
_gameLanguage = gameLanguage;
_timeSpaceConfiguration = timeSpaceConfiguration;
_itemsManager = itemsManager;
_subActConfiguration = subActConfiguration;
_timeSpaceConfig = timeSpaceConfig;
}
public async Task HandleAsync(TimeSpacePartyCreateEvent e, CancellationToken cancellation)
{
IClientSession session = e.Sender;
if (session.PlayerEntity.IsInRaidParty)
{
return;
}
if (session.PlayerEntity.HasShopOpened)
{
return;
}
if (session.IsMuted())
{
session.SendMsg(session.GetLanguage(GameDialogKey.MUTE_SHOUTMESSAGE_YOU_ARE_MUTED), MsgMessageType.Middle);
return;
}
if (!session.PlayerEntity.MapInstance.HasMapFlag(MapFlags.IS_BASE_MAP))
{
session.SendMsg(_gameLanguage.GetLanguage(GameDialogKey.INFORMATION_SHOUTMESSAGE_MUST_BE_IN_CLASSIC_MAP, session.UserLanguage), MsgMessageType.Middle);
return;
}
TimeSpaceFileConfiguration timeSpace = _timeSpaceConfiguration.GetTimeSpaceConfiguration(e.TimeSpaceId);
if (timeSpace == null)
{
return;
}
if (!session.CanJoinToTimeSpace(e.TimeSpaceId, _subActConfiguration, _timeSpaceConfig) && !session.IsGameMaster() && !timeSpace.IsSpecial && !timeSpace.IsHidden)
{
session.SendChatMessage(session.GetLanguage(GameDialogKey.TIMESPACE_SHOUTMESSAGE_WRONG_ACT), ChatMessageColorType.Red);
session.SendMsg(session.GetLanguage(GameDialogKey.TIMESPACE_SHOUTMESSAGE_WRONG_ACT), MsgMessageType.Middle);
return;
}
if (session.PlayerEntity.Level < timeSpace.MinLevel)
{
session.SendChatMessage(session.GetLanguage(GameDialogKey.TIMESPACE_CHATMESSAGE_LOW_LEVEL), ChatMessageColorType.Red);
session.SendMsg(session.GetLanguage(GameDialogKey.TIMESPACE_CHATMESSAGE_LOW_LEVEL), MsgMessageType.Middle);
return;
}
if (session.PlayerEntity.Level > timeSpace.MaxLevel)
{
session.SendChatMessage(session.GetLanguage(GameDialogKey.TIMESPACE_CHATMESSAGE_HIGH_LEVEL), ChatMessageColorType.PlayerSay);
session.SendMsg(session.GetLanguage(GameDialogKey.TIMESPACE_CHATMESSAGE_HIGH_LEVEL), MsgMessageType.Middle);
return;
}
if (timeSpace.SeedsOfPowerRequired != 0)
{
if (!session.PlayerEntity.HasItem((short)ItemVnums.SEED_OF_POWER, timeSpace.SeedsOfPowerRequired))
{
string itemName = _itemsManager.GetItem((short)ItemVnums.SEED_OF_POWER).GetItemName(_gameLanguage, session.UserLanguage);
session.SendChatMessage(session.GetLanguageFormat(GameDialogKey.INVENTORY_SHOUTMESSAGE_NOT_ENOUGH_ITEMS, timeSpace.SeedsOfPowerRequired, itemName), ChatMessageColorType.Red);
session.SendMsg(session.GetLanguageFormat(GameDialogKey.INVENTORY_SHOUTMESSAGE_NOT_ENOUGH_ITEMS, timeSpace.SeedsOfPowerRequired, itemName), MsgMessageType.Middle);
return;
}
}
if (e.IsChallengeMode)
{
if (session.IsActionForbidden())
{
return;
}
if (!session.PlayerEntity.RemoveGold(timeSpace.MinLevel * 50))
{
session.SendChatMessage(session.GetLanguage(GameDialogKey.INTERACTION_MESSAGE_NOT_ENOUGH_GOLD), ChatMessageColorType.Red);
session.SendMsg(session.GetLanguage(GameDialogKey.INTERACTION_MESSAGE_NOT_ENOUGH_GOLD), MsgMessageType.Middle);
return;
}
;
}
if (timeSpace.SeedsOfPowerRequired != 0)
{
await session.RemoveItemFromInventory((short)ItemVnums.SEED_OF_POWER, timeSpace.SeedsOfPowerRequired);
}
var timeSpaceParty = new TimeSpaceParty(timeSpace, e.IsEasyMode, e.IsChallengeMode);
InventoryItem itemToRemove = e.ItemToRemove;
if (itemToRemove != null)
{
timeSpaceParty.ItemVnumToRemove = itemToRemove.ItemInstance.ItemVNum;
}
timeSpaceParty.AddMember(session);
_timeSpaceManager.AddTimeSpace(timeSpaceParty);
session.PlayerEntity.TimeSpaceComponent.SetTimeSpaceParty(timeSpaceParty);
}
}