Exemplo n.º 1
0
        //[WorldPacketHandler(ClientOpcodes.AuctionListItems)]
        void HandleAuctionListItems(AuctionListItems packet)
        {
            Creature creature = GetPlayer().GetNPCIfCanInteractWith(packet.Auctioneer, NPCFlags.Auctioneer, NPCFlags2.None);

            if (!creature)
            {
                Log.outDebug(LogFilter.Network, "WORLD: HandleAuctionListItems - {0} not found or you can't interact with him.", packet.Auctioneer.ToString());
                return;
            }

            // remove fake death
            if (GetPlayer().HasUnitState(UnitState.Died))
            {
                GetPlayer().RemoveAurasByType(AuraType.FeignDeath);
            }

            AuctionHouseObject auctionHouse = Global.AuctionMgr.GetAuctionsMap(creature.GetFaction());


            Optional <AuctionSearchFilters> filters = new Optional <AuctionSearchFilters>();

            AuctionListItemsResult result = new AuctionListItemsResult();

            if (!packet.ClassFilters.Empty())
            {
                filters.HasValue = true;

                foreach (var classFilter in packet.ClassFilters)
                {
                    if (!classFilter.SubClassFilters.Empty())
                    {
                        foreach (var subClassFilter in classFilter.SubClassFilters)
                        {
                            filters.Value.Classes[classFilter.ItemClass].SubclassMask |= (AuctionSearchFilters.FilterType)(1 << subClassFilter.ItemSubclass);
                            filters.Value.Classes[classFilter.ItemClass].InvTypes[subClassFilter.ItemSubclass] = subClassFilter.InvTypeMask;
                        }
                    }
                    else
                    {
                        filters.Value.Classes[classFilter.ItemClass].SubclassMask = AuctionSearchFilters.FilterType.SkipSubclass;
                    }
                }
            }

            auctionHouse.BuildListAuctionItems(result, GetPlayer(), packet.Name.ToLower(), packet.Offset, packet.MinLevel, packet.MaxLevel, packet.OnlyUsable, filters, packet.Quality);

            result.DesiredDelay = WorldConfig.GetUIntValue(WorldCfg.AuctionSearchDelay);
            result.OnlyUsable   = packet.OnlyUsable;
            SendPacket(result);
        }