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()); } } } }