private static InPacket GenerateInNpc(INpcEntity npcEntity) => new InPacket { VisualType = VisualType.Npc, Name = npcEntity.NpcMonster.Id.ToString(), TransportId = npcEntity.Id.ToString(), PositionX = npcEntity.Position.X, PositionY = npcEntity.Position.Y, DirectionType = npcEntity.DirectionType, InNpcSubPacket = new InNpcSubPacket { HpPercentage = npcEntity.HpPercentage, MpPercentage = npcEntity.MpPercentage, Dialog = npcEntity.MapNpc.Dialog, Unknown1 = 0, Unknown2 = 0, Unknown3 = -1, Unknown4 = 1, IsSitting = false, Unknown5 = -1, Unknown6 = "-", Unknown7 = 0, Unknown8 = -1, Unknown9 = 0, Unknown10 = 0, Unknown11 = 0, Unknown12 = 0, Unknown13 = 0, Unknown14 = 0, Unknown15 = 0, Unknown16 = 0 } };
public Shop(ShopDto shop, INpcEntity npc) { Id = shop.Id; MapNpcId = shop.MapNpcId; Name = shop.Name; MenuType = shop.MenuType; ShopType = shop.ShopType; Owner = npc; Items = new HashSet <ShopItemDto>(_shopItemService.GetByShopId(Id)); Skills = new HashSet <ShopSkillDto>(_shopSkillService.GetByShopId(Id)); }
/// <inheritdoc /> public void SendOpenNpcShop(IPlayerEntity player, INpcEntity npc) { using var packet = new FFPacket(); packet.StartNewMergedPacket(npc.Id, SnapshotType.OPENSHOPWND); foreach (ItemContainerComponent shopTab in npc.Shop) { shopTab.Serialize(packet); } SendToPlayer(player, packet); }
/// <summary> /// Sends the NPC shop to the player. /// </summary> /// <param name="player">Player</param> /// <param name="npc">NPC</param> public static void SendNpcShop(IPlayerEntity player, INpcEntity npc) { using (var packet = new FFPacket()) { packet.StartNewMergedPacket(npc.Id, SnapshotType.OPENSHOPWND); foreach (ItemContainerComponent shopTab in npc.Shop) { shopTab.Serialize(packet); } player.Connection.Send(packet); } }
public static ShopPacket GenerateShopPacket(this INpcEntity npc) { if (!npc.HasShop) { return(null); } return(new ShopPacket { VisualType = npc.Type, EntityId = npc.Id, ShopId = npc.Shop.Id, MenuType = npc.Shop.MenuType, ShopType = npc.Shop.ShopType, Name = npc.Shop.Name }); }
protected override async Task Handle(ShopBuyEvent e, CancellationToken cancellation) { if (!(e.Sender is IPlayerEntity player)) { return; } switch (e.Type) { case VisualType.Character: IPlayerEntity shop = player.CurrentMap.GetEntitiesByType <IPlayerEntity>(VisualType.Character).FirstOrDefault(s => s.Character.Id == e.OwnerId); if (shop == null) { return; } await HandlePlayerShopBuyRequest(player, e, shop); break; case VisualType.Npc: INpcEntity npc = player.CurrentMap.GetEntitiesByType <INpcEntity>(VisualType.Npc).FirstOrDefault(s => s.MapNpc.Id == e.OwnerId); if (npc == null || !(npc is INpcEntity npcEntity)) { return; } Shop npcShop = npcEntity.Shop; if (npcShop.Skills.Any()) { await HandleNpcSkillBuyRequest(player, e, npcShop); } else { await HandleNpcItemBuyRequest(player, e, npcShop); } break; } }
/// <summary> /// Sends a NPC dialog to the given player. /// </summary> /// <param name="player">Current player.</param> /// <param name="npc">Current npc.</param> /// <param name="texts">Npc dialog texts.</param> /// <param name="links">Npc dialog links.</param> private void SendNpcDialog(IPlayerEntity player, INpcEntity npc, IEnumerable <string> texts, IEnumerable <DialogLink> links) { _npcDialogPacketFactory.SendDialog(player, texts, links); _questSystem.SendQuestsInfo(player, npc); }
public DefaultNpcBehavior(INpcEntity npcEntity, IChatPacketFactory chatPacketFactory) { _npc = npcEntity; _chatPacketFactory = chatPacketFactory; }