Пример #1
0
 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
     }
 };
Пример #2
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));
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        /// <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);
            }
        }
Пример #5
0
        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
            });
        }
Пример #6
0
        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;
            }
        }
Пример #7
0
 /// <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);
 }
Пример #8
0
 public DefaultNpcBehavior(INpcEntity npcEntity, IChatPacketFactory chatPacketFactory)
 {
     _npc = npcEntity;
     _chatPacketFactory = chatPacketFactory;
 }