private void ExecuteHandler(ClientSession session)
        {
            Mate mate = session.Character.Mates.Find(x => x.IsTeamMember && x.MateType == MateType.Partner);

            if (mate == null)
            {
                return;
            }

            if (Type == 0)
            {
                if (mate.SpInstance == null)
                {
                    session.SendPacket(UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("NEED_WEAR_PARTNER_SP"), 0));
                    return;
                }

                var currentRunningSeconds  = (DateTime.UtcNow - Process.GetCurrentProcess().StartTime.AddHours(-2).AddSeconds(-50)).TotalSeconds;
                var timeSpanSinceLastUsage = currentRunningSeconds - mate.LastSp;

                if (timeSpanSinceLastUsage < mate.SpCooldown)
                {
                    session.SendPacket(UserInterfaceHelper.GenerateMsg(string.Format(Language.Instance.GetMessageFromKey("PARTNER_SP_IN_COOLDOWN"), mate.SpCooldown - (int)Math.Round(timeSpanSinceLastUsage, 0)), 0));
                    return;
                }

                if (mate.IsUsingSp)
                {
                    mate.RemoveSp();
                }
                else
                {
                    session.SendPacket("pdelay 5000 3 #psl^1 ");
                    session.CurrentMapInstance?.Broadcast(UserInterfaceHelper.GenerateGuri(2, 2, mate.MateTransportId), mate.PositionX, mate.PositionY);
                }
            }
            else
            {
                if (mate.SpInstance == null)
                {
                    session.SendPacket(UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("NEED_WEAR_PARTNER_SP"), 0));
                    return;
                }

                mate.IsUsingSp = true;
                session.SendPacket(mate.GenerateCond());
                session.Character.MapInstance.Broadcast(mate.GenerateCMode(mate.SpInstance.Item.Morph));
                session.SendPacket(mate.GenerateScPacket());
                session.Character.MapInstance.Broadcast(mate.GenerateOut());
                session.Character.MapInstance.Broadcast(mate.GenerateIn());
                session.SendPacket(session.Character.GeneratePinit());
                session.Character.MapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 196));
                session.SendPacket(mate.GeneratePski());
                MateHelper.Instance.AddPartnerBuffs(session, mate);
            }
        }
        private void ExecuteHandler(ClientSession session)
        {
            InventoryType equipment;
            Mate          mate = null;

            if (Type >= 1 && Type <= 12)
            {
                // Partner inventories
                equipment = (InventoryType)(Type + 12);
                mate      = session.Character.Mates.FirstOrDefault(s => s.PartnerSlot == (Type - 1) && s.MateType == MateType.Partner);
            }
            else
            {
                equipment = InventoryType.Wear;
            }


            if (session.HasCurrentMapInstance &&
                session.CurrentMapInstance.UserShops.FirstOrDefault(mapshop =>
                                                                    mapshop.Value.OwnerId.Equals(session.Character.CharacterId)).Value == null &&
                (session.Character.ExchangeInfo == null ||
                 (session.Character.ExchangeInfo?.ExchangeList).Count == 0))
            {
                ItemInstance inventory =
                    session.Character.Inventory.LoadBySlotAndType(InventorySlot, equipment);
                if (inventory != null)
                {
                    double currentRunningSeconds =
                        (DateTime.UtcNow - Process.GetCurrentProcess().StartTime.AddHours(-2).AddSeconds(-50)).TotalSeconds;
                    double timeSpanSinceLastSpUsage = currentRunningSeconds - session.Character.LastSp;
                    if (Type == 0)
                    {
                        if (InventorySlot == (byte)EquipmentType.Sp && session.Character.UseSp)
                        {
                            if (session.Character.IsVehicled)
                            {
                                session.SendPacket(
                                    UserInterfaceHelper.GenerateMsg(
                                        Language.Instance.GetMessageFromKey("REMOVE_VEHICLE"), 0));
                                return;
                            }

                            if (session.Character.LastSkillUse.AddSeconds(2) > DateTime.UtcNow)
                            {
                                return;
                            }

                            session.Character.LastSp =
                                (DateTime.UtcNow - Process.GetCurrentProcess().StartTime.AddHours(-2).AddSeconds(-50)).TotalSeconds;
                            session.RemoveSp(inventory.ItemVNum);
                        }
                        else if (InventorySlot == (byte)EquipmentType.Sp &&
                                 !session.Character.UseSp &&
                                 timeSpanSinceLastSpUsage <= session.Character.SpCooldown)
                        {
                            session.SendPacket(UserInterfaceHelper.GenerateMsg(
                                                   string.Format(Language.Instance.GetMessageFromKey("SP_INLOADING"),
                                                                 session.Character.SpCooldown - (int)Math.Round(timeSpanSinceLastSpUsage, 0)),
                                                   0));
                            return;
                        }
                        else if (InventorySlot == (byte)EquipmentType.Fairy &&
                                 session.Character.IsUsingFairyBooster)
                        {
                            session.SendPacket(UserInterfaceHelper.GenerateMsg(
                                                   Language.Instance.GetMessageFromKey("REMOVE_FAIRY_WHILE_USING_BOOSTER"), 0));
                            return;
                        }

                        session.Character.EquipmentBCards.RemoveAll(o => o.ItemVNum == inventory.ItemVNum);
                    }

                    ItemInstance inv = session.Character.Inventory.MoveInInventory(InventorySlot,
                                                                                   equipment, InventoryType.Equipment);

                    if (inv == null)
                    {
                        session.SendPacket(
                            UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("NOT_ENOUGH_PLACE"),
                                                            0));
                        return;
                    }

                    if (inv.Slot != -1)
                    {
                        session.SendPacket(inventory.GenerateInventoryAdd());
                    }

                    if (Type == 0)
                    {
                        session.SendPacket(session.Character.GenerateStatChar());
                        session.CurrentMapInstance?.Broadcast(session.Character.GenerateEq());
                        session.SendPacket(session.Character.GenerateEquipment());
                        session.CurrentMapInstance?.Broadcast(session.Character.GeneratePairy());
                    }
                    else if (mate != null)
                    {
                        switch (inv.Item.EquipmentSlot)
                        {
                        case EquipmentType.Armor:
                            mate.ArmorInstance = null;
                            break;

                        case EquipmentType.MainWeapon:
                            mate.WeaponInstance = null;
                            break;

                        case EquipmentType.Gloves:
                            mate.GlovesInstance = null;
                            break;

                        case EquipmentType.Boots:
                            mate.BootsInstance = null;
                            break;

                        case EquipmentType.Sp:
                            mate.SpInstance = null;
                            mate.RemoveSp();
                            break;
                        }
                        session.SendPacket(mate.GenerateScPacket());
                    }
                }
            }
        }