AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
SearchableAuctionEntry Struct Reference

#include "AuctionHouseSearcher.h"

Public Member Functions

void BuildAuctionInfo (WorldPacket &data) const
 
void SetItemNames ()
 
int CompareAuctionEntry (uint32 column, SearchableAuctionEntry const &auc, int loc_idx) const
 

Public Attributes

uint32 Id
 
ObjectGuid ownerGuid
 
std::string ownerName
 
uint32 buyout
 
time_t expire_time
 
uint32 startbid
 
uint32 bid
 
ObjectGuid bidderGuid
 
AuctionHouseFaction listFaction
 
SearchableAuctionEntryItem item
 

Detailed Description

Member Function Documentation

◆ BuildAuctionInfo()

void SearchableAuctionEntry::BuildAuctionInfo ( WorldPacket data) const
435{
436 data << uint32(Id);
437 data << uint32(item.entry);
438
439 for (uint8 i = 0; i < MAX_INSPECTED_ENCHANTMENT_SLOT; ++i)
440 {
441 data << uint32(item.enchants[i].id);
442 data << uint32(item.enchants[i].duration);
443 data << uint32(item.enchants[i].charges);
444 }
445
446 data << int32(item.randomPropertyId); // Random item property id
447 data << uint32(item.suffixFactor); // SuffixFactor
448 data << uint32(item.count); // item->count
449 data << uint32(item.spellCharges); // item->charge FFFFFFF
450 data << uint32(0); // item->flags (client doesnt do anything with it)
451 data << ownerGuid; // Auction->owner
452 data << uint32(startbid); // Auction->startbid (not sure if useful)
454 // Minimal outbid
455 data << uint32(buyout); // Auction->buyout
456 data << uint32((expire_time - GameTime::GetGameTime().count()) * IN_MILLISECONDS); // time left
457 data << bidderGuid; // auction->bidder current
458 data << uint32(bid); // current bid
459}
constexpr auto IN_MILLISECONDS
Definition Common.h:53
std::int32_t int32
Definition Define.h:103
std::uint8_t uint8
Definition Define.h:109
std::uint32_t uint32
Definition Define.h:107
@ MAX_INSPECTED_ENCHANTMENT_SLOT
Definition Item.h:176
Seconds GetGameTime()
Definition GameTime.cpp:38
uint32 duration
Definition AuctionHouseSearcher.h:62
uint32 charges
Definition AuctionHouseSearcher.h:63
uint32 id
Definition AuctionHouseSearcher.h:61
static uint32 CalculateAuctionOutBid(uint32 bid)
the sum of outbid is (1% from current bid)*5, if bid is very small, it is 1c
Definition AuctionHouseMgr.cpp:565
uint32 count
Definition AuctionHouseSearcher.h:73
uint32 suffixFactor
Definition AuctionHouseSearcher.h:72
int32 spellCharges
Definition AuctionHouseSearcher.h:74
int32 randomPropertyId
Definition AuctionHouseSearcher.h:71
uint32 entry
Definition AuctionHouseSearcher.h:69
AuctionEntryItemEnchants enchants[MAX_INSPECTED_ENCHANTMENT_SLOT]
Definition AuctionHouseSearcher.h:70
SearchableAuctionEntryItem item
Definition AuctionHouseSearcher.h:89
uint32 bid
Definition AuctionHouseSearcher.h:86
ObjectGuid ownerGuid
Definition AuctionHouseSearcher.h:81
uint32 buyout
Definition AuctionHouseSearcher.h:83
time_t expire_time
Definition AuctionHouseSearcher.h:84
uint32 Id
Definition AuctionHouseSearcher.h:80
ObjectGuid bidderGuid
Definition AuctionHouseSearcher.h:87
uint32 startbid
Definition AuctionHouseSearcher.h:85

References bid, bidderGuid, buyout, AuctionEntry::CalculateAuctionOutBid(), AuctionEntryItemEnchants::charges, SearchableAuctionEntryItem::count, AuctionEntryItemEnchants::duration, SearchableAuctionEntryItem::enchants, SearchableAuctionEntryItem::entry, expire_time, GameTime::GetGameTime(), AuctionEntryItemEnchants::id, Id, IN_MILLISECONDS, item, MAX_INSPECTED_ENCHANTMENT_SLOT, ownerGuid, SearchableAuctionEntryItem::randomPropertyId, SearchableAuctionEntryItem::spellCharges, startbid, and SearchableAuctionEntryItem::suffixFactor.

◆ CompareAuctionEntry()

int SearchableAuctionEntry::CompareAuctionEntry ( uint32  column,
SearchableAuctionEntry const &  auc,
int  loc_idx 
) const
521{
522 switch (column)
523 {
524 case AUCTION_SORT_MINLEVEL: // level = 0
525 {
526 ItemTemplate const* itemProto1 = item.itemTemplate;
527 ItemTemplate const* itemProto2 = auc.item.itemTemplate;
528
529 if (itemProto1->RequiredLevel > itemProto2->RequiredLevel)
530 return -1;
531 else if (itemProto1->RequiredLevel < itemProto2->RequiredLevel)
532 return +1;
533 break;
534 }
535 case AUCTION_SORT_RARITY: // quality = 1
536 {
537 ItemTemplate const* itemProto1 = item.itemTemplate;
538 ItemTemplate const* itemProto2 = auc.item.itemTemplate;
539
540 if (itemProto1->Quality < itemProto2->Quality)
541 return -1;
542 else if (itemProto1->Quality > itemProto2->Quality)
543 return +1;
544 break;
545 }
546 case AUCTION_SORT_BUYOUT: // buyoutthenbid = 2 (UNUSED?)
547 if (buyout != auc.buyout)
548 {
549 if (buyout < auc.buyout)
550 return -1;
551 else if (buyout > auc.buyout)
552 return +1;
553 }
554 else
555 {
556 if (bid < auc.bid)
557 return -1;
558 else if (bid > auc.bid)
559 return +1;
560 }
561 break;
562 case AUCTION_SORT_TIMELEFT: // duration = 3
563 if (expire_time < auc.expire_time)
564 return -1;
565 else if (expire_time > auc.expire_time)
566 return +1;
567 break;
568 case AUCTION_SORT_UNK4: // status = 4 (WRONG)
569 if (bidderGuid.GetCounter() < auc.bidderGuid.GetCounter())
570 return -1;
571 else if (bidderGuid.GetCounter() > auc.bidderGuid.GetCounter())
572 return +1;
573 break;
574 case AUCTION_SORT_ITEM: // name = 5
575 {
576 int comparison = item.itemName[loc_idx].compare(auc.item.itemName[loc_idx]);
577 if (comparison > 0)
578 return -1;
579 else if (comparison < 0)
580 return +1;
581
582 break;
583 }
584 case AUCTION_SORT_MINBIDBUY: // minbidbuyout = 6
585 {
586 if (buyout != auc.buyout)
587 {
588 if (buyout > auc.buyout)
589 return -1;
590 else if (buyout < auc.buyout)
591 return +1;
592 }
593 else
594 {
595 if (bid < auc.bid)
596 return -1;
597 else if (bid > auc.bid)
598 return +1;
599 }
600 break;
601 }
602 case AUCTION_SORT_OWNER: // seller = 7
603 {
604 int comparison = ownerName.compare(auc.ownerName);
605 if (comparison > 0)
606 return -1;
607 else if (comparison < 0)
608 return +1;
609
610 break;
611 }
612 case AUCTION_SORT_BID: // bid = 8
613 {
614 uint32 bid1 = bid ? bid : startbid;
615 uint32 bid2 = auc.bid ? auc.bid : auc.startbid;
616
617 if (bid1 > bid2)
618 return -1;
619 else if (bid1 < bid2)
620 return +1;
621 break;
622 }
623 case AUCTION_SORT_STACK: // quantity = 9
624 {
625 if (item.count < auc.item.count)
626 return -1;
627 else if (item.count > auc.item.count)
628 return +1;
629 break;
630 }
631 case AUCTION_SORT_BUYOUT_2: // buyout = 10 (UNUSED?)
632 if (buyout < auc.buyout)
633 return -1;
634 else if (buyout > auc.buyout)
635 return +1;
636 break;
637 default:
638 break;
639 }
640
641 return 0;
642}
@ AUCTION_SORT_TIMELEFT
Definition AuctionHouseSearcher.h:39
@ AUCTION_SORT_BID
Definition AuctionHouseSearcher.h:44
@ AUCTION_SORT_BUYOUT
Definition AuctionHouseSearcher.h:38
@ AUCTION_SORT_MINLEVEL
Definition AuctionHouseSearcher.h:36
@ AUCTION_SORT_UNK4
Definition AuctionHouseSearcher.h:40
@ AUCTION_SORT_MINBIDBUY
Definition AuctionHouseSearcher.h:42
@ AUCTION_SORT_OWNER
Definition AuctionHouseSearcher.h:43
@ AUCTION_SORT_ITEM
Definition AuctionHouseSearcher.h:41
@ AUCTION_SORT_STACK
Definition AuctionHouseSearcher.h:45
@ AUCTION_SORT_RARITY
Definition AuctionHouseSearcher.h:37
@ AUCTION_SORT_BUYOUT_2
Definition AuctionHouseSearcher.h:46
LowType GetCounter() const
Definition ObjectGuid.h:145
Definition ItemTemplate.h:619
uint32 Quality
Definition ItemTemplate.h:626
uint32 RequiredLevel
Definition ItemTemplate.h:636
ItemTemplate const * itemTemplate
Definition AuctionHouseSearcher.h:75
std::wstring itemName[TOTAL_LOCALES]
Definition AuctionHouseSearcher.h:68
std::string ownerName
Definition AuctionHouseSearcher.h:82

References AUCTION_SORT_BID, AUCTION_SORT_BUYOUT, AUCTION_SORT_BUYOUT_2, AUCTION_SORT_ITEM, AUCTION_SORT_MINBIDBUY, AUCTION_SORT_MINLEVEL, AUCTION_SORT_OWNER, AUCTION_SORT_RARITY, AUCTION_SORT_STACK, AUCTION_SORT_TIMELEFT, AUCTION_SORT_UNK4, bid, bidderGuid, buyout, SearchableAuctionEntryItem::count, expire_time, ObjectGuid::GetCounter(), item, SearchableAuctionEntryItem::itemName, SearchableAuctionEntryItem::itemTemplate, ownerName, ItemTemplate::Quality, ItemTemplate::RequiredLevel, and startbid.

Referenced by AuctionSorter::operator()().

◆ SetItemNames()

void SearchableAuctionEntry::SetItemNames ( )
462{
463 ItemTemplate const* proto = item.itemTemplate;
464 ItemLocale const* il = sObjectMgr->GetItemLocale(proto->ItemId);
465
466 for (uint32 locale = 0; locale < TOTAL_LOCALES; ++locale)
467 {
468 if (proto->Name1.empty())
469 continue;
470
471 std::string itemName = proto->Name1;
472
473 // local name
474 LocaleConstant locdbc_idx = sWorld->GetAvailableDbcLocale(static_cast<LocaleConstant>(locale));
475 if (locdbc_idx >= LOCALE_enUS && il)
476 ObjectMgr::GetLocaleString(il->Name, locale, itemName);
477
478 // DO NOT use GetItemEnchantMod(proto->RandomProperty) as it may return a result
479 // that matches the search but it may not equal item->GetItemRandomPropertyId()
480 // used in BuildAuctionInfo() which then causes wrong items to be listed
481 int32 propRefID = item.randomPropertyId;
482
483 if (propRefID)
484 {
485 // Append the suffix to the name (ie: of the Monkey) if one exists
486 // These are found in ItemRandomSuffix.dbc and ItemRandomProperties.dbc
487 // even though the DBC name seems misleading
488 std::array<char const*, 16> const* suffix = nullptr;
489
490 if (propRefID < 0)
491 {
492 ItemRandomSuffixEntry const* itemRandEntry = sItemRandomSuffixStore.LookupEntry(-item.randomPropertyId);
493 if (itemRandEntry)
494 suffix = &itemRandEntry->Name;
495 }
496 else
497 {
499 if (itemRandEntry)
500 suffix = &itemRandEntry->Name;
501 }
502
503 // dbc local name
504 if (suffix)
505 {
506 // Append the suffix (ie: of the Monkey) to the name using localization
507 // or default enUS if localization is invalid
508 itemName += ' ';
509 itemName += (*suffix)[locdbc_idx >= 0 ? locdbc_idx : LOCALE_enUS];
510 }
511 }
512
513 if (!Utf8toWStr(itemName, item.itemName[locale]))
514 continue;
515
516 wstrToLower(item.itemName[locale]);
517 }
518}
LocaleConstant
Definition Common.h:65
@ TOTAL_LOCALES
Definition Common.h:76
@ LOCALE_enUS
Definition Common.h:66
DBCStorage< ItemRandomSuffixEntry > sItemRandomSuffixStore(ItemRandomSuffixfmt)
DBCStorage< ItemRandomPropertiesEntry > sItemRandomPropertiesStore(ItemRandomPropertiesfmt)
#define sObjectMgr
Definition ObjectMgr.h:1636
bool Utf8toWStr(char const *utf8str, std::size_t csize, wchar_t *wstr, std::size_t &wsize)
Definition Util.cpp:281
void wstrToLower(std::wstring &str)
Definition Util.cpp:382
static std::string_view GetLocaleString(std::vector< std::string > const &data, std::size_t locale)
Definition ObjectMgr.h:1409
#define sWorld
Definition World.h:363
Definition ItemTemplate.h:838
std::vector< std::string > Name
Definition ItemTemplate.h:839
Definition DBCStructure.h:1206
std::array< char const *, 16 > Name
Definition DBCStructure.h:1211
Definition DBCStructure.h:1216
std::array< char const *, 16 > Name
Definition DBCStructure.h:1218
std::string Name1
Definition ItemTemplate.h:624
uint32 ItemId
Definition ItemTemplate.h:620

References ObjectMgr::GetLocaleString(), item, ItemTemplate::ItemId, SearchableAuctionEntryItem::itemName, SearchableAuctionEntryItem::itemTemplate, LOCALE_enUS, ItemLocale::Name, ItemRandomPropertiesEntry::Name, ItemRandomSuffixEntry::Name, ItemTemplate::Name1, SearchableAuctionEntryItem::randomPropertyId, sItemRandomPropertiesStore, sItemRandomSuffixStore, sObjectMgr, sWorld, TOTAL_LOCALES, Utf8toWStr(), and wstrToLower().

Member Data Documentation

◆ bid

uint32 SearchableAuctionEntry::bid

◆ bidderGuid

ObjectGuid SearchableAuctionEntry::bidderGuid

◆ buyout

uint32 SearchableAuctionEntry::buyout

◆ expire_time

time_t SearchableAuctionEntry::expire_time

◆ Id

uint32 SearchableAuctionEntry::Id

Referenced by BuildAuctionInfo().

◆ item

SearchableAuctionEntryItem SearchableAuctionEntry::item

◆ listFaction

AuctionHouseFaction SearchableAuctionEntry::listFaction

◆ ownerGuid

ObjectGuid SearchableAuctionEntry::ownerGuid

Referenced by BuildAuctionInfo().

◆ ownerName

std::string SearchableAuctionEntry::ownerName

Referenced by CompareAuctionEntry().

◆ startbid

uint32 SearchableAuctionEntry::startbid

The documentation for this struct was generated from the following files: