73 lines
No EOL
2.9 KiB
C#
73 lines
No EOL
2.9 KiB
C#
using System.Threading.Tasks;
|
|
using WingsAPI.Game.Extensions.ItemExtension.Inventory;
|
|
using WingsAPI.Game.Extensions.ItemExtension.Item;
|
|
using WingsEmu.Game._enum;
|
|
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.Chat;
|
|
|
|
namespace WingsEmu.Plugins.BasicImplementations.ItemUsage.Main.Special;
|
|
|
|
public class MateSlotExpansionHandler : IItemUsageByVnumHandler
|
|
{
|
|
/**
|
|
* These values can be configurable if needed
|
|
*/
|
|
private const int MaxPet = 90;
|
|
|
|
private const int MaxPartner = 12;
|
|
private const int PetExpansionAdd = 10;
|
|
private const int PartnerExpansionAdd = 1;
|
|
|
|
private readonly IGameLanguageService _languageService;
|
|
|
|
public MateSlotExpansionHandler(IGameLanguageService languageService) => _languageService = languageService;
|
|
|
|
public long[] Vnums => new[]
|
|
{
|
|
(long)ItemVnums.PARTNER_SLOT_EXPANSION, (long)ItemVnums.PARTNER_SLOT_EXPANSION_LIMITED,
|
|
(long)ItemVnums.PET_SLOT_EXPANSION, (long)ItemVnums.PET_SLOT_EXPANSION_LIMITED
|
|
};
|
|
|
|
public async Task HandleAsync(IClientSession session, InventoryUseItemEvent e)
|
|
{
|
|
bool isPetExpansion = e.Item.ItemInstance.ItemVNum == (int)ItemVnums.PET_SLOT_EXPANSION || e.Item.ItemInstance.ItemVNum == (int)ItemVnums.PET_SLOT_EXPANSION_LIMITED;
|
|
if (isPetExpansion && session.PlayerEntity.MaxPetCount >= MaxPet)
|
|
{
|
|
session.SendMsg(_languageService.GetLanguage(GameDialogKey.INFORMATION_SHOUTMESSAGE_MAX_PET_SLOTS, session.UserLanguage), MsgMessageType.Middle);
|
|
return;
|
|
}
|
|
|
|
if (!isPetExpansion && session.PlayerEntity.MaxPartnerCount >= MaxPartner)
|
|
{
|
|
session.SendMsg(_languageService.GetLanguage(GameDialogKey.INFORMATION_SHOUTMESSAGE_MAX_PARTNER_SLOTS, session.UserLanguage), MsgMessageType.Middle);
|
|
return;
|
|
}
|
|
|
|
if (e.Option == 0)
|
|
{
|
|
session.SendPacket(
|
|
$"qna #u_i^1^{session.PlayerEntity.Id}^{(byte)e.Item.ItemInstance.GameItem.Type}^{e.Item.Slot}^2 {_languageService.GetLanguage(isPetExpansion ? GameDialogKey.PET_DIALOG_ASK_SLOT_INCREASE : GameDialogKey.PARTNER_DIALOG_ASK_SLOT_INCREASE, session.UserLanguage)}");
|
|
return;
|
|
}
|
|
|
|
if (isPetExpansion)
|
|
{
|
|
session.PlayerEntity.MaxPetCount += PetExpansionAdd;
|
|
}
|
|
else
|
|
{
|
|
session.PlayerEntity.MaxPartnerCount += PartnerExpansionAdd;
|
|
}
|
|
|
|
string itemName = e.Item.ItemInstance.GameItem.GetItemName(_languageService, session.UserLanguage);
|
|
|
|
session.SendChatMessage(_languageService.GetLanguageFormat(GameDialogKey.ITEM_CHATMESSAGE_EFFECT_ACTIVATED, session.UserLanguage, itemName), ChatMessageColorType.Green);
|
|
session.SendScpStcPacket();
|
|
|
|
await session.RemoveItemFromInventory(item: e.Item);
|
|
}
|
|
} |