/// <summary> /// npc_req packet /// </summary> /// <param name="requestNpcPacket"></param> public void ShowShop(RequestNpcPacket requestNpcPacket) { IRequestableEntity requestableEntity; switch (requestNpcPacket.Type) { case VisualType.Player: requestableEntity = Broadcaster.Instance.GetCharacter(s => s.VisualId == requestNpcPacket.TargetId); break; case VisualType.Npc: requestableEntity = Session.Character.MapInstance.Npcs.Find(s => s.VisualId == requestNpcPacket.TargetId); break; default: _logger.Error(LogLanguage.Instance.GetMessageFromKey(LogLanguageKey.VISUALTYPE_UNKNOWN), requestNpcPacket.Type); return; } if (requestableEntity == null) { _logger.Error(LogLanguage.Instance.GetMessageFromKey(LogLanguageKey.VISUALENTITY_DOES_NOT_EXIST)); return; } requestableEntity.Requests.OnNext(new RequestData(Session)); }
/// <summary> /// npc_req packet /// </summary> /// <param name="requestNpcPacket"></param> public void ShowShop(RequestNpcPacket requestNpcPacket) { Logger.Debug(Session.Character.GenerateIdentity(), requestNpcPacket.ToString()); long owner = requestNpcPacket.Owner; if (!Session.HasCurrentMapInstance) { return; } if (requestNpcPacket.Type == 1) { // User Shop KeyValuePair <long, MapShop> shopList = Session.CurrentMapInstance.UserShops.FirstOrDefault(s => s.Value.OwnerId.Equals(owner)); LoadShopItem(owner, shopList); } else { // Npc Shop , ignore if has drop MapNpc npc = Session.CurrentMapInstance.Npcs.FirstOrDefault(n => n.MapNpcId.Equals((int)requestNpcPacket.Owner)); if (npc == null) { return; } if (npc.Npc.Drops.Any(s => s.MonsterVNum != null) && npc.Npc.Race == 8 && (npc.Npc.RaceType == 7 || npc.Npc.RaceType == 5)) { Session.SendPacket(UserInterfaceHelper.Instance.GenerateDelay(5000, 4, $"#guri^400^{npc.MapNpcId}")); } else if (npc.Npc.VNumRequired > 0 && npc.Npc.Race == 8 && (npc.Npc.RaceType == 7 || npc.Npc.RaceType == 5)) { Session.SendPacket(UserInterfaceHelper.Instance.GenerateDelay(6000, 4, $"#guri^400^{npc.MapNpcId}")); } else if (npc.Npc.MaxHP == 0 && npc.Npc.Drops.All(s => s.MonsterVNum == null) && npc.Npc.Race == 8 && (npc.Npc.RaceType == 7 || npc.Npc.RaceType == 5)) { Session.SendPacket(UserInterfaceHelper.Instance.GenerateDelay(5000, 1, $"#guri^710^162^85^{npc.MapNpcId}")); // #guri^710^X^Y^MapNpcId } else if (!string.IsNullOrEmpty(npc.GetNpcDialog())) { Session.SendPacket(npc.GetNpcDialog()); } } }
/// <summary> /// npc_req packet /// </summary> /// <param name="requestNpcPacket"></param> public void ShowShop(RequestNpcPacket requestNpcPacket) { long owner = requestNpcPacket.Owner; if (!Session.HasCurrentMapInstance) { return; } if (requestNpcPacket.Type == 1) { // User Shop KeyValuePair <long, MapShop> shopList = Session.CurrentMapInstance.UserShops.FirstOrDefault(s => s.Value.OwnerId.Equals(owner)); LoadShopItem(owner, shopList); } else { // Npc Shop , ignore if has drop MapNpc npc = Session.CurrentMapInstance.Npcs.FirstOrDefault(n => n.MapNpcId.Equals((int)requestNpcPacket.Owner)); if (npc == null) { return; } TeleporterDTO tp = npc.Teleporters?.FirstOrDefault(t => t?.Type == TeleporterType.TeleportOnMap); if (tp != null) { Session.SendPacket(UserInterfaceHelper.Instance.GenerateDelay(5000, 1, $"#guri^710^{tp.MapX}^{tp.MapY}^{npc.MapNpcId}")); return; } tp = npc.Teleporters?.FirstOrDefault(t => t?.Type == TeleporterType.TeleportOnOtherMap); if (tp != null) { Session.SendPacket(UserInterfaceHelper.Instance.GenerateDelay(5000, 1, $"#guri^711^{tp.TeleporterId}")); return; } #region Quest Session.Character.IncrementQuests(QuestType.Dialog1, npc.NpcVNum); Session.Character.IncrementQuests(QuestType.Dialog2, npc.NpcVNum); Session.Character.IncrementQuests(QuestType.Wear, npc.NpcVNum); Session.Character.IncrementQuests(QuestType.Brings, npc.NpcVNum); Session.Character.IncrementQuests(QuestType.Required, npc.NpcVNum); if (Session.Character.LastQuest.AddSeconds(1) > DateTime.Now) { return; } #endregion if (npc.Npc.Drops.Any(s => s.MonsterVNum != null) && npc.Npc.Race == 8 && (npc.Npc.RaceType == 7 || npc.Npc.RaceType == 5)) { Session.SendPacket(UserInterfaceHelper.Instance.GenerateDelay(5000, 4, $"#guri^400^{npc.MapNpcId}")); } else if (npc.Npc.VNumRequired > 0 && npc.Npc.Race == 8 && (npc.Npc.RaceType == 7 || npc.Npc.RaceType == 5)) { Session.SendPacket(UserInterfaceHelper.Instance.GenerateDelay(6000, 4, $"#guri^400^{npc.MapNpcId}")); } else if (npc.Npc.MaxHP == 0 && npc.Npc.Drops.All(s => s.MonsterVNum == null) && npc.Npc.Race == 8 && (npc.Npc.RaceType == 7 || npc.Npc.RaceType == 5)) { Session.SendPacket(UserInterfaceHelper.Instance.GenerateDelay(5000, 1, $"#guri^710^162^85^{npc.MapNpcId}")); // #guri^710^X^Y^MapNpcId } else if (!string.IsNullOrEmpty(npc.GetNpcDialog())) { Session.SendPacket(npc.GetNpcDialog()); } } }