// WingsEmu
//
// Developed by NosWings Team
using System.Collections.Generic;
using System.Linq;
using WingsAPI.Packets.Enums.Shells;
using WingsEmu.DTOs.BCards;
using WingsEmu.DTOs.Items;
using WingsEmu.Game._enum;
using WingsEmu.Game.Buffs;
using WingsEmu.Game.Characters;
using WingsEmu.Game.Items;
using WingsEmu.Packets.Enums;
namespace WingsEmu.Game.Extensions;
public static class EquipmentOptionExtensions
{
public static int GetJewelsCellonsValue(this IPlayerEntity character, CellonType cellonType)
{
int ring = character.GetCellonValue(EquipmentType.Ring, cellonType);
int necklace = character.GetCellonValue(EquipmentType.Necklace, cellonType);
int bracelet = character.GetCellonValue(EquipmentType.Bracelet, cellonType);
return ring + necklace + bracelet;
}
///
/// Picks the maximum values between primary weapon and secondary weapon for the given shell optionType
///
///
///
///
public static int GetMaxWeaponShellValue(this IPlayerEntity character, ShellEffectType shellEffectType)
{
int mainValue = character.GetMaxWeaponShellValue(shellEffectType, true);
int secondValue = character.GetMaxWeaponShellValue(shellEffectType, false);
if (mainValue == 0 && secondValue == 0)
{
return 0;
}
return mainValue >= secondValue ? mainValue : secondValue;
}
public static List ShellBuffs(this IPlayerEntity playerEntity, GameItemInstance gameItemInstance)
{
List options = gameItemInstance.EquipmentOptions;
if (options == null)
{
return null;
}
if (!options.Any())
{
return null;
}
List buffBCards = new();
foreach (EquipmentOptionDTO option in options)
{
if (option.EquipmentOptionType != EquipmentOptionType.WEAPON_SHELL)
{
continue;
}
var type = (ShellEffectType)option.Type;
BCardDTO newBCard = type.TryCreateBuffBCard(option.Value);
if (newBCard == null)
{
continue;
}
buffBCards.Add(newBCard);
}
return buffBCards;
}
public static void TryAddShellBuffs(this IPlayerEntity playerEntity, GameItemInstance gameItemInstance)
{
List buffBCards = playerEntity.ShellBuffs(gameItemInstance);
if (buffBCards == null)
{
return;
}
if (!buffBCards.Any())
{
return;
}
playerEntity.BCardComponent.AddShellTrigger(gameItemInstance.GameItem.EquipmentSlot == EquipmentType.MainWeapon, buffBCards);
}
}