All pastes #450261 Raw Edit

Stuff

public cpp v1 · immutable
·published 2007-04-20 18:36 UTC
rendered paste body
void AuctionHouse::SendAuctionList(Player * plr, WorldPacket * packet){    uint32 start_index, current_index = 0;    uint32 counted_items = 0;	std::string auctionString;    uint8 levelRange1, levelRange2, usableCheck;    int32 inventory_type, itemclass, itemsubclass, rarityCheck;    *packet >> start_index;    *packet >> auctionString;    *packet >> levelRange1 >> levelRange2;    *packet >> inventory_type >> itemclass >> itemsubclass;    *packet >> rarityCheck >> usableCheck;    // convert auction string to lowercase for faster parsing.    if(auctionString.length() > 0)    {        for(uint32 j = 0; j < auctionString.length(); ++j)            auctionString[j] = tolower(auctionString[j]);    }    WorldPacket data(SMSG_AUCTION_LIST_RESULT, 1024);    data << uint32(0);    auctionLock.AcquireReadLock();    HM_NAMESPACE::hash_map<uint32, Auction*>::iterator itr = auctions.begin();    ItemPrototype * proto;    for(; itr != auctions.end(); ++itr)    {        if(itr->second->Deleted) continue;        proto = itr->second->pItem->GetProto();        // Page system.        current_index++;        if(start_index && current_index < start_index) continue;        ++counted_items;        if(counted_items > 50)            break;        // Check the auction for parameters        // inventory type        if(inventory_type != -1 && inventory_type != proto->InventoryType)            continue;        // class        if(itemclass != -1 && itemclass != proto->Class)            continue;        // subclass        if(itemsubclass != -1 && itemsubclass != proto->SubClass)            continue;        // this is going to hurt. - name        if(auctionString.length() > 0 && !FindXinYString(auctionString, proto->lowercase_name))            continue;        // rarity        if(rarityCheck != -1 && rarityCheck != proto->Quality)            continue;        // level range check - lower boundary        if(levelRange1 && proto->ItemLevel < levelRange1)            continue;        // level range check - high boundary        if(levelRange2 && proto->ItemLevel > levelRange2)            continue;        // usable check - this will hurt too :(        if(usableCheck)        {            // allowed class            if(proto->AllowableClass && !(plr->getClassMask() & proto->AllowableClass))                continue;            if(proto->RequiredLevel && proto->RequiredLevel > plr->getLevel())                continue;            if(proto->AllowableRace && !(plr->getRaceMask() & proto->AllowableRace))                continue;            if(proto->Class == 4 && proto->SubClass && !(plr->GetArmorProficiency()&(((uint32)(1))<<proto->SubClass)))                continue;                        if(proto->Class == 2 && proto->SubClass && !(plr->GetWeaponProficiency()&(((uint32)(1))<<proto->SubClass)))                continue;        }        // all checks passed -> add to packet.        itr->second->AddToPacket(data);        (*(uint32*)&data.contents()[0])++;    }    auctionLock.ReleaseReadLock();    plr->GetSession()->SendPacket(&data);}