public override void Use(ClientSession session, ref ItemInstance inv, byte Option = 0, string[] packetsplit = null) { if (session.Character.IsVehicled) { session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("CANT_DO_VEHICLED"), 10)); return; } if (session.CurrentMapInstance.MapInstanceType == MapInstanceType.TalentArenaMapInstance) { return; } if (packetsplit == null) { return; } void releasePet(MateType mateType, Guid itemToRemoveId) { if (int.TryParse(packetsplit[3], out int mateTransportId)) { Mate mate = session.Character.Mates.Find(s => s.MateTransportId == mateTransportId && s.MateType == mateType); if (mate != null) { if (!mate.IsTeamMember) { List <ItemInstance> mateInventory = mate.GetInventory(); if (mateInventory.Count > 0) { session.SendPacket(UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("EQ_NOT_EMPTY"), 0)); } else { session.Character.Mates.Remove(mate); byte i = 0; session.Character.Mates.Where(s => s.MateType == MateType.Partner).ToList().ForEach(s => { s.GetInventory().ForEach(item => item.Type = (InventoryType)(13 + i)); s.PetId = i; i++; }); session.SendPacket(UserInterfaceHelper.GenerateInfo(Language.Instance.GetMessageFromKey("PET_RELEASED"))); session.SendPacket(UserInterfaceHelper.GeneratePClear()); session.SendPackets(session.Character.GenerateScP()); session.SendPackets(session.Character.GenerateScN()); session.CurrentMapInstance?.Broadcast(mate.GenerateOut()); session.Character.Inventory.RemoveItemFromInventory(itemToRemoveId); } } else { session.SendPacket(UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("PET_IN_TEAM_UNRELEASABLE"), 0)); } } } } if (BCards.Count > 0 && session.Character.MapInstance == session.Character.Miniland) { BCards.ForEach(c => c.ApplyBCards(session.Character.BattleEntity, session.Character.BattleEntity)); session.Character.Inventory.RemoveItemFromInventory(inv.Id); return; } switch (Effect) { case 10: if (int.TryParse(packetsplit[3], out int mateTransportId)) { Mate mate = session.Character.Mates.Find(s => s.MateTransportId == mateTransportId); if (mate == null || mate.MateType != MateType.Pet || mate.Loyalty >= 1000) { return; } mate.Loyalty += 100; if (mate.Loyalty > 1000) { mate.Loyalty = 1000; } mate.GenerateXp(EffectValue); session.SendPacket(mate.GenerateCond()); session.SendPacket(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5002)); session.Character.Inventory.RemoveItemFromInventory(inv.Id); } break; case 11: if (int.TryParse(packetsplit[3], out mateTransportId)) { Mate mate = session.Character.Mates.Find(s => s.MateTransportId == mateTransportId); if (mate == null || mate.MateType != MateType.Pet || mate.Level >= session.Character.Level - 5 || mate.Level + 1 > ServerManager.Instance.Configuration.MaxLevel) { return; } mate.Level++; mate.Hp = mate.MaxHp; mate.Mp = mate.MaxMp; session.SendPacket($"say 2 {mate.MateTransportId} 0 " + Language.Instance.GetMessageFromKey("MATE_POWER_INCREASED")); session.SendPackets(session.Character.GenerateScP()); session.CurrentMapInstance?.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 8), mate.PositionX, mate.PositionY); session.CurrentMapInstance?.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 198), mate.PositionX, mate.PositionY); session.Character.Inventory.RemoveItemFromInventory(inv.Id); } break; case 12: if (int.TryParse(packetsplit[3], out mateTransportId)) { Mate mate = session.Character.Mates.Find(s => s.MateTransportId == mateTransportId); if (mate == null || mate.MateType != MateType.Partner || mate.Level >= session.Character.Level - 5 || mate.Level + 1 > ServerManager.Instance.Configuration.MaxLevel) { return; } mate.Level++; mate.Hp = mate.MaxHp; mate.Mp = mate.MaxMp; session.SendPacket($"say 2 {mate.MateTransportId} 0 " + Language.Instance.GetMessageFromKey("MATE_POWER_INCREASED")); session.SendPackets(session.Character.GenerateScN()); session.CurrentMapInstance?.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 8), mate.PositionX, mate.PositionY); session.CurrentMapInstance?.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 198), mate.PositionX, mate.PositionY); session.Character.Inventory.RemoveItemFromInventory(inv.Id); } break; case 13: if (int.TryParse(packetsplit[3], out mateTransportId) && session.Character.Mates.FirstOrDefault(s => s.MateTransportId == mateTransportId) is Mate pet) { if (pet.MateType == MateType.Pet) { session.SendPacket(UserInterfaceHelper.GenerateGuri(10, 1, mateTransportId, 2)); } else { session.SendPacket(UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("CANT_CHANGE_PARTNER_NAME"), 0)); } } break; case 14: if (int.TryParse(packetsplit[3], out mateTransportId)) { if (session.Character.MapInstance == session.Character.Miniland) { Mate mate = session.Character.Mates.Find(s => s.MateTransportId == mateTransportId && s.MateType == MateType.Pet); if (mate?.CanPickUp == false) { session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5)); session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5002)); session.SendPacket($"say 2 {mate.MateTransportId} 0 " + Language.Instance.GetMessageFromKey("PET_SMART")); mate.CanPickUp = true; session.SendPackets(session.Character.GenerateScP()); session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("PET_CAN_PICK_UP"), 10)); session.Character.Inventory.RemoveItemFromInventory(inv.Id); } } else { session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("NOT_IN_MINILAND"), 12)); } } break; case 16: if (int.TryParse(packetsplit[3], out mateTransportId)) { Mate mate = session.Character.Mates.Find(s => s.MateTransportId == mateTransportId); if (mate == null || mate.MateType != MateType.Pet || mate.Level == 1) { return; } mate.Level--; mate.Hp = mate.MaxHp; mate.Mp = mate.MaxMp; session.SendPacket($"say 2 {mate.MateTransportId} 0 " + Language.Instance.GetMessageFromKey("MATE_POWER_DECREASED")); session.SendPackets(session.Character.GenerateScP()); session.CurrentMapInstance?.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 198), mate.PositionX, mate.PositionY); session.Character.Inventory.RemoveItemFromInventory(inv.Id); } break; case 17: if (int.TryParse(packetsplit[3], out mateTransportId)) { Mate mate = session.Character.Mates.Find(s => s.MateTransportId == mateTransportId); if (mate?.IsSummonable == false) { mate.IsSummonable = true; session.SendPackets(session.Character.GenerateScP()); session.SendPacket(session.Character.GenerateSay(string.Format(Language.Instance.GetMessageFromKey("PET_SUMMONABLE"), mate.Name), 10)); session.SendPacket(UserInterfaceHelper.GenerateMsg(string.Format(Language.Instance.GetMessageFromKey("PET_SUMMONABLE"), mate.Name), 0)); session.Character.Inventory.RemoveItemFromInventory(inv.Id); } } break; case 18: if (int.TryParse(packetsplit[3], out mateTransportId)) { Mate mate = session.Character.Mates.Find(s => s.MateTransportId == mateTransportId); if (mate == null || mate.MateType != MateType.Partner || mate.Level == 1) { return; } mate.Level--; mate.Hp = mate.MaxHp; mate.Mp = mate.MaxMp; session.SendPacket($"say 2 {mate.MateTransportId} 0 " + Language.Instance.GetMessageFromKey("MATE_POWER_DECREASED")); session.SendPackets(session.Character.GenerateScN()); session.CurrentMapInstance?.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 198), mate.PositionX, mate.PositionY); session.Character.Inventory.RemoveItemFromInventory(inv.Id); } break; case 1000: releasePet(MateType.Pet, inv.Id); break; case 1001: releasePet(MateType.Partner, inv.Id); break; case 1339: int rndevolve = ServerManager.RandomNumber(0, 1000); if (rndevolve > 900) { if (int.TryParse(packetsplit[3], out mateTransportId)) { Mate mate = session.Character.Mates.Find(s => s.MateTransportId == mateTransportId); if (mate == null) { session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("PICK_PET"), 10)); return; } if (mate.Level >= 30 && mate.NpcMonsterVNum == 649 && mate.IsTeamMember == true && mate.MateType == MateType.Pet) { mate.Level = 1; mate.NpcMonsterVNum = 650; session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5)); session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5002)); session.SendPackets(session.Character.GenerateScP()); session.SendPackets(session.Character.GenerateScN()); session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("PET_EVOLED"), 10)); if (session?.Character != null) { if (session.Character.Miniland == session.Character.MapInstance) { ServerManager.Instance.JoinMiniland(session, session); } else { ServerManager.Instance.ChangeMapInstance(session.Character.CharacterId, session.Character.MapInstanceId, session.Character.PositionX, session.Character.PositionY, true); session.SendPacket(StaticPacketHelper.Cancel(2)); } } } else { if (mate.Level >= 30 && mate.NpcMonsterVNum == 648 && mate.IsTeamMember == true && mate.MateType == MateType.Pet) { mate.Level = 1; mate.NpcMonsterVNum = 649; session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5)); session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5002)); session.SendPackets(session.Character.GenerateScP()); session.SendPackets(session.Character.GenerateScN()); session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("PET_EVOLED"), 10)); if (session?.Character != null) { if (session.Character.Miniland == session.Character.MapInstance) { ServerManager.Instance.JoinMiniland(session, session); } else { ServerManager.Instance.ChangeMapInstance(session.Character.CharacterId, session.Character.MapInstanceId, session.Character.PositionX, session.Character.PositionY, true); session.SendPacket(StaticPacketHelper.Cancel(2)); } } } else { if (mate.Level >= 30 && mate.NpcMonsterVNum == 651 && mate.IsTeamMember == true && mate.MateType == MateType.Pet) { mate.Level = 1; mate.NpcMonsterVNum = 652; session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5)); session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5002)); session.SendPackets(session.Character.GenerateScP()); session.SendPackets(session.Character.GenerateScN()); session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("PET_EVOLED"), 10)); if (session?.Character != null) { if (session.Character.Miniland == session.Character.MapInstance) { ServerManager.Instance.JoinMiniland(session, session); } else { ServerManager.Instance.ChangeMapInstance(session.Character.CharacterId, session.Character.MapInstanceId, session.Character.PositionX, session.Character.PositionY, true); session.SendPacket(StaticPacketHelper.Cancel(2)); } } } else { if (mate.Level >= 30 && mate.NpcMonsterVNum == 652 && mate.IsTeamMember == true && mate.MateType == MateType.Pet) { mate.Level = 1; mate.NpcMonsterVNum = 653; session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5)); session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5002)); session.SendPackets(session.Character.GenerateScP()); session.SendPackets(session.Character.GenerateScN()); session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("PET_EVOLED"), 10)); if (session?.Character != null) { if (session.Character.Miniland == session.Character.MapInstance) { ServerManager.Instance.JoinMiniland(session, session); } else { ServerManager.Instance.ChangeMapInstance(session.Character.CharacterId, session.Character.MapInstanceId, session.Character.PositionX, session.Character.PositionY, true); session.SendPacket(StaticPacketHelper.Cancel(2)); } } } else { if (mate.Level >= 30 && mate.NpcMonsterVNum == 660 && mate.IsTeamMember == true && mate.MateType == MateType.Pet) { mate.Level = 1; mate.NpcMonsterVNum = 661; session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5)); session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5002)); session.SendPackets(session.Character.GenerateScP()); session.SendPackets(session.Character.GenerateScN()); session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("PET_EVOLED"), 10)); if (session?.Character != null) { if (session.Character.Miniland == session.Character.MapInstance) { ServerManager.Instance.JoinMiniland(session, session); } else { ServerManager.Instance.ChangeMapInstance(session.Character.CharacterId, session.Character.MapInstanceId, session.Character.PositionX, session.Character.PositionY, true); session.SendPacket(StaticPacketHelper.Cancel(2)); } } } else { if (mate.Level >= 30 && mate.NpcMonsterVNum == 661 && mate.IsTeamMember == true && mate.MateType == MateType.Pet) { mate.Level = 1; mate.NpcMonsterVNum = 662; session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5)); session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5002)); session.SendPackets(session.Character.GenerateScP()); session.SendPackets(session.Character.GenerateScN()); session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("PET_EVOLED"), 10)); if (session?.Character != null) { if (session.Character.Miniland == session.Character.MapInstance) { ServerManager.Instance.JoinMiniland(session, session); } else { ServerManager.Instance.ChangeMapInstance(session.Character.CharacterId, session.Character.MapInstanceId, session.Character.PositionX, session.Character.PositionY, true); session.SendPacket(StaticPacketHelper.Cancel(2)); } } } else { if (mate.Level >= 30 && mate.NpcMonsterVNum == 657 && mate.IsTeamMember == true && mate.MateType == MateType.Pet) { mate.Level = 1; mate.NpcMonsterVNum = 658; session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5)); session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5002)); session.SendPackets(session.Character.GenerateScP()); session.SendPackets(session.Character.GenerateScN()); session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("PET_EVOLED"), 10)); if (session?.Character != null) { if (session.Character.Miniland == session.Character.MapInstance) { ServerManager.Instance.JoinMiniland(session, session); } else { ServerManager.Instance.ChangeMapInstance(session.Character.CharacterId, session.Character.MapInstanceId, session.Character.PositionX, session.Character.PositionY, true); session.SendPacket(StaticPacketHelper.Cancel(2)); } } } else { if (mate.Level >= 30 && mate.NpcMonsterVNum == 658 && mate.IsTeamMember == true && mate.MateType == MateType.Pet) { mate.Level = 1; mate.NpcMonsterVNum = 659; session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5)); session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5002)); session.SendPackets(session.Character.GenerateScP()); session.SendPackets(session.Character.GenerateScN()); session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("PET_EVOLED"), 10)); if (session?.Character != null) { if (session.Character.Miniland == session.Character.MapInstance) { ServerManager.Instance.JoinMiniland(session, session); } else { ServerManager.Instance.ChangeMapInstance(session.Character.CharacterId, session.Character.MapInstanceId, session.Character.PositionX, session.Character.PositionY, true); session.SendPacket(StaticPacketHelper.Cancel(2)); } } } else { if (mate.Level >= 30 && mate.NpcMonsterVNum == 660 && mate.IsTeamMember == true && mate.MateType == MateType.Pet) { mate.Level = 1; mate.NpcMonsterVNum = 661; session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5)); session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5002)); session.SendPackets(session.Character.GenerateScP()); session.SendPackets(session.Character.GenerateScN()); session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("PET_EVOLED"), 10)); if (session?.Character != null) { if (session.Character.Miniland == session.Character.MapInstance) { ServerManager.Instance.JoinMiniland(session, session); } else { ServerManager.Instance.ChangeMapInstance(session.Character.CharacterId, session.Character.MapInstanceId, session.Character.PositionX, session.Character.PositionY, true); session.SendPacket(StaticPacketHelper.Cancel(2)); } } } else { if (mate.Level >= 30 && mate.NpcMonsterVNum == 988 && mate.IsTeamMember == true && mate.MateType == MateType.Pet) { mate.Level = 1; mate.NpcMonsterVNum = 416; session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5)); session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5002)); session.SendPackets(session.Character.GenerateScP()); session.SendPackets(session.Character.GenerateScN()); session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("PET_EVOLED"), 10)); if (session?.Character != null) { if (session.Character.Miniland == session.Character.MapInstance) { ServerManager.Instance.JoinMiniland(session, session); } else { ServerManager.Instance.ChangeMapInstance(session.Character.CharacterId, session.Character.MapInstanceId, session.Character.PositionX, session.Character.PositionY, true); session.SendPacket(StaticPacketHelper.Cancel(2)); } } } else { if (mate.Level >= 30 && mate.NpcMonsterVNum == 416 && mate.IsTeamMember == true && mate.MateType == MateType.Pet) { mate.Level = 1; mate.NpcMonsterVNum = 412; session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5)); session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5002)); session.SendPackets(session.Character.GenerateScP()); session.SendPackets(session.Character.GenerateScN()); session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("PET_EVOLED"), 10)); if (session?.Character != null) { if (session.Character.Miniland == session.Character.MapInstance) { ServerManager.Instance.JoinMiniland(session, session); } else { ServerManager.Instance.ChangeMapInstance(session.Character.CharacterId, session.Character.MapInstanceId, session.Character.PositionX, session.Character.PositionY, true); session.SendPacket(StaticPacketHelper.Cancel(2)); } } } else { if (mate.Level >= 30 && mate.NpcMonsterVNum == 412 && mate.IsTeamMember == true && mate.MateType == MateType.Pet) { mate.Level = 1; mate.NpcMonsterVNum = 414; session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5)); session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5002)); session.SendPackets(session.Character.GenerateScP()); session.SendPackets(session.Character.GenerateScN()); session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("PET_EVOLED"), 10)); if (session?.Character != null) { if (session.Character.Miniland == session.Character.MapInstance) { ServerManager.Instance.JoinMiniland(session, session); } else { ServerManager.Instance.ChangeMapInstance(session.Character.CharacterId, session.Character.MapInstanceId, session.Character.PositionX, session.Character.PositionY, true); session.SendPacket(StaticPacketHelper.Cancel(2)); } } } else { } } } } break; } break; } break; } break; } break; } break; } break; } break; } break; } else { session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("PET_NOT_EVOLED"), 10)); } break; } else { session.Character.Inventory.RemoveItemFromInventory(inv.Id); session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("PET_NOT_EVOLED"), 10)); } break; case 2137: int rnd = ServerManager.RandomNumber(0, 1000); { if (int.TryParse(packetsplit[3], out mateTransportId)) { Mate mate = session.Character.Mates.Find(s => s.MateTransportId == mateTransportId); if (mate == null) { session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("PICK_PET"), 10)); } else if (mate.Defence <= 9 || mate.Attack <= 9) { if (rnd >= 600 && rnd <= 800) { mate.Attack++; session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("ATTACK_PLUS"), 10)); session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Player, session.Character.CharacterId, 3004), session.Character.MapX, session.Character.MapY); } else if (rnd >= 801 && rnd <= 1000) { mate.Defence++; session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("DEF_PLUS"), 10)); session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Player, session.Character.CharacterId, 3004), session.Character.MapX, session.Character.MapY); } else if (rnd <= 800 && rnd >= 400) { if (mate.Defence == 0) { return; } else { mate.Defence--; session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("DEF_MINUS"), 10)); session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Player, session.Character.CharacterId, 3005), session.Character.MapX, session.Character.MapY); } } else if (rnd <= 399 && rnd >= 0) { if (mate.Attack == 0) { return; } else { mate.Attack--; session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("ATTACK_MINUS"), 10)); session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Player, session.Character.CharacterId, 3005), session.Character.MapX, session.Character.MapY); } } else { return; } } else { return; } } else { return; } session.Character.Inventory.RemoveItemAmount(2079, 1); } break; default: Logger.Warn(string.Format(Language.Instance.GetMessageFromKey("NO_HANDLER_ITEM"), GetType(), VNum, Effect, EffectValue)); break; } }
public void LoadVehicleStats() { if (ItemType == ItemType.Special && Effect == 1000) { ActSpeedBoost = new byte[100]; MapSpeedBoost = new byte[100000]; BCards.Add(new BCard { FirstData = 100, SecondData = 336, Type = (byte)BCardType.CardType.Buff, SubType = (byte)AdditionalTypes.Buff.ChanceCausing / 10 }); switch (Morph) { case 2930: // Marco Pollo ActSpeedBoost[1] = 6; SpeedBoost = 2; SpeedBoostDuration = 3; break; case 2513: // Camello mágico ActSpeedBoost[51] = 6; ActSpeedBoost[52] = 6; SpeedBoost = 2; SpeedBoostDuration = 5; break; case 2368: // Patinete mágico SpeedBoost = 2; SpeedBoostDuration = 3; break; case 2370: // Alfombra mágica ActSpeedBoost[51] = 2; SpeedBoost = 2; SpeedBoostDuration = 3; break; case 2432: // Escobón ActSpeedBoost[4] = 2; SpeedBoost = 3; SpeedBoostDuration = 5; BCards.Add(new BCard { FirstData = 5, Type = (byte)BCardType.CardType.SpecialEffects2, SubType = (byte)AdditionalTypes.SpecialEffects2.TeleportInRadius / 10 }); break; case 2520: // Bici "Billy Boneshaker" ActSpeedBoost[51] = 2; ActSpeedBoost[52] = 2; SpeedBoost = 3; SpeedBoostDuration = 5; BCards.Add(new BCard { FirstData = 5, Type = (byte)BCardType.CardType.SpecialEffects2, SubType = (byte)AdditionalTypes.SpecialEffects2.TeleportInRadius / 10 }); break; case 2522: // Patines "Blazing Blades" ActSpeedBoost[51] = 2; ActSpeedBoost[52] = 2; SpeedBoost = 3; SpeedBoostDuration = 5; BCards.Add(new BCard { FirstData = 4, Type = (byte)BCardType.CardType.LightAndShadow, SubType = (byte)AdditionalTypes.LightAndShadow.RemoveBadEffects / 10 }); break; case 2524: // Monopatín "Doni Darkslide" ActSpeedBoost[51] = 2; ActSpeedBoost[52] = 2; SpeedBoost = 3; SpeedBoostDuration = 5; BCards.Add(new BCard { FirstData = 15, IsLevelScaled = true, Type = (byte)BCardType.CardType.HPMP, SubType = (byte)AdditionalTypes.HPMP.HPRestored / 10 }); BCards.Add(new BCard { FirstData = 15, IsLevelScaled = true, Type = (byte)BCardType.CardType.HPMP, SubType = (byte)AdditionalTypes.HPMP.MPRestored / 10 }); break; case 1817: // Esquís mágicos "Iker Alud" ActSpeedBoost[4] = 3; SpeedBoost = 3; SpeedBoostDuration = 5; break; case 1819: // Snowboard mágico ActSpeedBoost[4] = 3; SpeedBoost = 3; SpeedBoostDuration = 5; break; case 2406: // Tigre blanco mágico ActSpeedBoost[4] = 2; SpeedBoost = 2; SpeedBoostDuration = 3; break; case 2411: // Cabrio mágico MapSpeedBoost[1] = 4; MapSpeedBoost[145] = 4; SpeedBoost = 2; SpeedBoostDuration = 3; break; case 2429: // Nublín Núbez SpeedBoost = 5; SpeedBoostDuration = 3; break; case 2517: // Nossi, el dragón ActSpeedBoost[4] = 2; SpeedBoost = 3; SpeedBoostDuration = 5; BCards.Add(new BCard { FirstData = 4, Type = (byte)BCardType.CardType.LightAndShadow, SubType = (byte)AdditionalTypes.LightAndShadow.RemoveBadEffects / 10 }); break; case 2928: // Ovni estrafalario ActSpeedBoost[4] = 1; SpeedBoostDuration = 5; BCards.Add(new BCard { Type = (byte)BCardType.CardType.SpecialBehaviour, SubType = (byte)AdditionalTypes.SpecialBehaviour.TeleportRandom / 10 }); break; case 2526: // Unicornio blanco ActSpeedBoost[4] = 1; SpeedBoostDuration = 5; BCards.Add(new BCard { Type = (byte)BCardType.CardType.SpecialBehaviour, SubType = (byte)AdditionalTypes.SpecialBehaviour.TeleportRandom / 10 }); break; case 2530: // Unicornio negro ActSpeedBoost[51] = 2; ActSpeedBoost[52] = 2; SpeedBoostDuration = 5; BCards.Add(new BCard { Type = (byte)BCardType.CardType.SpecialBehaviour, SubType = (byte)AdditionalTypes.SpecialBehaviour.TeleportRandom / 10 }); break; case 2528: // Unicornio rosa MapSpeedBoost[1] = 3; MapSpeedBoost[145] = 3; SpeedBoostDuration = 5; BCards.Add(new BCard { Type = (byte)BCardType.CardType.SpecialBehaviour, SubType = (byte)AdditionalTypes.SpecialBehaviour.TeleportRandom / 10 }); break; case 2936: // Jeep azul case 2938: // Jeep rojo case 2940: // Jeep turquesa case 2942: // Jeep negro case 2944: // Jeep rosa case 2934: // Jeep amarillo ActSpeedBoost[51] = 2; ActSpeedBoost[52] = 2; SpeedBoost = 2; SpeedBoostDuration = 6; break; case 2932: // Tabla a vela ActSpeedBoost[51] = 2; ActSpeedBoost[52] = 2; SpeedBoost = 3; SpeedBoostDuration = 5; BCards.Add(new BCard { FirstData = 4, Type = (byte)BCardType.CardType.LightAndShadow, SubType = (byte)AdditionalTypes.LightAndShadow.RemoveBadEffects / 10 }); break; case 2511: // Winnie Plumablanca SpeedBoost = 2; SpeedBoostDuration = 8; break; case 3679: // Dragón de huesos mágico ActSpeedBoost[51] = 2; ActSpeedBoost[52] = 2; MapSpeedBoost[1] = 1; MapSpeedBoost[145] = 1; SpeedBoostDuration = 5; BCards.Add(new BCard { Type = (byte)BCardType.CardType.SpecialBehaviour, SubType = (byte)AdditionalTypes.SpecialBehaviour.TeleportRandom / 10 }); break; case 3693: // Jaguar mágico ActSpeedBoost[51] = 2; ActSpeedBoost[52] = 2; ActSpeedBoost[4] = 3; SpeedBoost = 4; SpeedBoostDuration = 2; BCards.Add(new BCard { FirstData = 4, Type = (byte)BCardType.CardType.LightAndShadow, SubType = (byte)AdditionalTypes.LightAndShadow.RemoveBadEffects / 10 }); BCards.Add(new BCard { FirstData = 50, SecondData = 665, ForceDelay = SpeedBoostDuration * 10, Type = (byte)BCardType.CardType.Buff, SubType = (byte)AdditionalTypes.Buff.ChanceCausing / 10 }); break; case 2440: ActSpeedBoost[4] = 1; SpeedBoost = 3; SpeedBoostDuration = 2; break; case 2442: ActSpeedBoost[4] = 3; SpeedBoost = 4; SpeedBoostDuration = 2; BCards.Add(new BCard // Should inflict blind debuff to enemies hitting vehicle while using speed booster, with a chance of 10% { FirstData = 10, SecondData = 37, Type = (byte)BCardType.CardType.Buff, SubType = (byte)AdditionalTypes.Buff.ChanceCausing / 10 }); break; default: SpeedBoost = 2; SpeedBoostDuration = 3; break; } } }
public override void Use(ClientSession session, ref ItemInstance inv, byte Option = 0, string[] packetsplit = null) { if (session.Character.IsVehicled) { session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("CANT_DO_VEHICLED"), 10)); return; } if (session.CurrentMapInstance.MapInstanceType == MapInstanceType.TalentArenaMapInstance) { return; } if (packetsplit == null) { return; } void releasePet(MateType mateType, Guid itemToRemoveId) { if (int.TryParse(packetsplit[3], out int mateTransportId)) { Mate mate = session.Character.Mates.Find(s => s.MateTransportId == mateTransportId && s.MateType == mateType); if (mate != null) { if (!mate.IsTeamMember) { session.Character.Mates.Remove(mate); session.SendPacket(UserInterfaceHelper.GenerateInfo(Language.Instance.GetMessageFromKey("PET_RELEASED"))); session.SendPacket(UserInterfaceHelper.GeneratePClear()); session.SendPackets(session.Character.GenerateScP()); session.SendPackets(session.Character.GenerateScN()); session.CurrentMapInstance?.Broadcast(mate.GenerateOut()); session.Character.Inventory.RemoveItemFromInventory(itemToRemoveId); } else { session.SendPacket(UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("PET_IN_TEAM_UNRELEASABLE"), 0)); } } } } if (BCards.Count > 0 && session.Character.MapInstance == session.Character.Miniland) { BCards.ForEach(c => c.ApplyBCards(session.Character.BattleEntity, session.Character.BattleEntity)); session.Character.Inventory.RemoveItemFromInventory(inv.Id); return; } switch (Effect) { case 10: if (int.TryParse(packetsplit[3], out int mateTransportId)) { Mate mate = session.Character.Mates.Find(s => s.MateTransportId == mateTransportId); if (mate == null || mate.MateType != MateType.Pet || mate.Loyalty >= 1000) { return; } mate.Loyalty += 100; if (mate.Loyalty > 1000) { mate.Loyalty = 1000; } mate.GenerateXp(EffectValue); session.SendPacket(mate.GenerateCond()); session.SendPacket(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5002)); session.Character.Inventory.RemoveItemFromInventory(inv.Id); } break; case 11: if (int.TryParse(packetsplit[3], out mateTransportId)) { Mate mate = session.Character.Mates.Find(s => s.MateTransportId == mateTransportId); if (mate == null || mate.MateType != MateType.Pet || mate.Level >= session.Character.Level - 5 || mate.Level + 1 > ServerManager.Instance.Configuration.MaxLevel) { return; } mate.Level++; session.CurrentMapInstance?.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 8), mate.PositionX, mate.PositionY); session.CurrentMapInstance?.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 198), mate.PositionX, mate.PositionY); session.Character.Inventory.RemoveItemFromInventory(inv.Id); } break; case 12: if (int.TryParse(packetsplit[3], out mateTransportId)) { Mate mate = session.Character.Mates.Find(s => s.MateTransportId == mateTransportId); if (mate == null || mate.MateType != MateType.Partner || mate.Level >= session.Character.Level - 5 || mate.Level + 1 > ServerManager.Instance.Configuration.MaxLevel) { return; } mate.Level++; session.CurrentMapInstance?.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 8), mate.PositionX, mate.PositionY); session.CurrentMapInstance?.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 198), mate.PositionX, mate.PositionY); session.Character.Inventory.RemoveItemFromInventory(inv.Id); } break; case 13: if (int.TryParse(packetsplit[3], out mateTransportId) && session.Character.Mates.FirstOrDefault(s => s.MateTransportId == mateTransportId) is Mate pet) { if (pet.MateType == MateType.Pet) { session.SendPacket(UserInterfaceHelper.GenerateGuri(10, 1, mateTransportId, 2)); } else { session.SendPacket(UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("CANT_CHANGE_PARTNER_NAME"), 0)); } } break; case 14: if (int.TryParse(packetsplit[3], out mateTransportId)) { if (session.Character.MapInstance == session.Character.Miniland) { Mate mate = session.Character.Mates.Find(s => s.MateTransportId == mateTransportId && s.MateType == MateType.Pet); if (mate?.CanPickUp == false) { session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5)); session.CurrentMapInstance.Broadcast(StaticPacketHelper.GenerateEff(UserType.Npc, mate.MateTransportId, 5002)); mate.CanPickUp = true; session.SendPackets(session.Character.GenerateScP()); session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("PET_CAN_PICK_UP"), 10)); session.Character.Inventory.RemoveItemFromInventory(inv.Id); } } else { session.SendPacket(session.Character.GenerateSay(Language.Instance.GetMessageFromKey("NOT_IN_MINILAND"), 12)); } } break; case 16: if (int.TryParse(packetsplit[3], out mateTransportId)) { Mate mate = session.Character.Mates.Find(s => s.MateTransportId == mateTransportId); if (mate == null || mate.MateType != MateType.Pet || mate.Level == 1) { return; } mate.Level--; session.Character.Inventory.RemoveItemFromInventory(inv.Id); } break; case 17: if (int.TryParse(packetsplit[3], out mateTransportId)) { Mate mate = session.Character.Mates.Find(s => s.MateTransportId == mateTransportId); if (mate?.IsSummonable == false) { mate.IsSummonable = true; session.SendPackets(session.Character.GenerateScP()); session.SendPacket(session.Character.GenerateSay(string.Format(Language.Instance.GetMessageFromKey("PET_SUMMONABLE"), mate.Name), 10)); session.SendPacket(UserInterfaceHelper.GenerateMsg(string.Format(Language.Instance.GetMessageFromKey("PET_SUMMONABLE"), mate.Name), 0)); session.Character.Inventory.RemoveItemFromInventory(inv.Id); } } break; case 18: if (int.TryParse(packetsplit[3], out mateTransportId)) { Mate mate = session.Character.Mates.Find(s => s.MateTransportId == mateTransportId); if (mate == null || mate.MateType != MateType.Partner || mate.Level == 1) { return; } mate.Level--; session.Character.Inventory.RemoveItemFromInventory(inv.Id); } break; case 1000: releasePet(MateType.Pet, inv.Id); break; case 1001: releasePet(MateType.Partner, inv.Id); break; default: Logger.Warn(string.Format(Language.Instance.GetMessageFromKey("NO_HANDLER_ITEM"), GetType(), VNum, Effect, EffectValue)); break; } }