[10250] Select auction store by house id only.

After this commit auction auctioneer guid used only for select auction house in packet or loading.
Next task replace it in DB by houseid, dependence DB data from creature guid isn't good.
This commit is contained in:
VladimirMangos 2010-07-23 11:38:58 +04:00
parent 02532a469a
commit 9350c9990d
8 changed files with 150 additions and 128 deletions

View file

@ -49,21 +49,18 @@ AuctionHouseMgr::~AuctionHouseMgr()
delete itr->second;
}
AuctionHouseObject * AuctionHouseMgr::GetAuctionsMap( uint32 factionTemplateId )
AuctionHouseObject * AuctionHouseMgr::GetAuctionsMap(AuctionHouseEntry const* house)
{
if(sWorld.getConfig(CONFIG_BOOL_ALLOW_TWO_SIDE_INTERACTION_AUCTION))
return &mNeutralAuctions;
// team have linked auction houses
FactionTemplateEntry const* u_entry = sFactionTemplateStore.LookupEntry(factionTemplateId);
if(!u_entry)
return &mNeutralAuctions;
else if(u_entry->ourMask & FACTION_MASK_ALLIANCE)
return &mAllianceAuctions;
else if(u_entry->ourMask & FACTION_MASK_HORDE)
return &mHordeAuctions;
else
return &mNeutralAuctions;
switch(GetAuctionHouseTeam(house))
{
case ALLIANCE: return &mAllianceAuctions;
case HORDE: return &mHordeAuctions;
default: return &mNeutralAuctions;
}
}
uint32 AuctionHouseMgr::GetAuctionDeposit(AuctionHouseEntry const* entry, uint32 time, Item *pItem)
@ -407,44 +404,24 @@ void AuctionHouseMgr::LoadAuctions()
continue;
}
bool success = true;
CreatureData const* auctioneerData = sObjectMgr.GetCreatureData(auction->auctioneer);
if(!auctioneerData)
{
success = false;
sLog.outError("Auction %u has not a existing auctioneer (GUID : %u), will mail to owner (GUID: %u)",
auction->Id, auction->auctioneer, auction->owner);
}
CreatureInfo const* auctioneerInfo;
if (success)
CreatureInfo const* auctioneerInfo = auctioneerData ? ObjectMgr::GetCreatureTemplate(auctioneerData->id) : NULL;
if(auctioneerData && !auctioneerInfo)
{
auctioneerInfo = ObjectMgr::GetCreatureTemplate(auctioneerData->id);
if(!auctioneerInfo)
{
success = false;
sLog.outError("Auction %u has not a existing auctioneer (GUID : %u Entry: %u), will mail to owner (GUID: %u)",
auction->Id, auction->auctioneer,auctioneerData->id, auction->owner);
}
sLog.outError("Auction %u has not a existing auctioneer (GUID : %u Entry: %u), will mail to owner (GUID: %u)",
auction->Id, auction->auctioneer,auctioneerData->id, auction->owner);
}
if (success)
{
auction->auctionHouseEntry = AuctionHouseMgr::GetAuctionHouseEntry(auctioneerInfo->faction_A);
if(!auction->auctionHouseEntry)
{
success = false;
sLog.outError("Auction %u has auctioneer (GUID : %u Entry: %u) with wrong faction %u, will mail to owner (GUID: %u)",
auction->Id, auction->auctioneer, auctioneerData->id, auctioneerInfo->faction_A, auction->owner);
}
}
if(!success)
if (!auctioneerInfo)
{
// need for send mail, use goblin auctionhouse
if (!auction->auctionHouseEntry)
auction->auctionHouseEntry = sAuctionHouseStore.LookupEntry(7);
auction->auctionHouseEntry = sAuctionHouseStore.LookupEntry(7);
// Attempt send item back to owner
std::ostringstream msgAuctionCanceledOwner;
@ -458,10 +435,14 @@ void AuctionHouseMgr::LoadAuctions()
RemoveAItem(auction->item_guidlow);
auction->DeleteFromDB();
delete auction;
continue;
}
GetAuctionsMap( auctioneerInfo->faction_A )->AddAuction(auction);
// always return pointer
auction->auctionHouseEntry = AuctionHouseMgr::GetAuctionHouseEntry(auctioneerInfo->faction_A);
GetAuctionsMap(auction->auctionHouseEntry)->AddAuction(auction);
} while (result->NextRow());
delete result;
@ -495,6 +476,23 @@ void AuctionHouseMgr::Update()
mNeutralAuctions.Update();
}
uint32 AuctionHouseMgr::GetAuctionHouseTeam(AuctionHouseEntry const* house)
{
// auction houses have faction field pointing to PLAYER,* factions,
// but player factions not have filled team field, and hard go from faction value to faction_template value,
// so more easy just sort by auction house ids
switch(house->houseId)
{
case 1: case 2: case 3:
return ALLIANCE;
case 4: case 5: case 6:
return HORDE;
case 7:
default:
return 0; // neutral
}
}
AuctionHouseEntry const* AuctionHouseMgr::GetAuctionHouseEntry(uint32 factionTemplateId)
{
uint32 houseid = 1; // dwarf auction house (used for normal cut/etc percents)
@ -508,14 +506,16 @@ AuctionHouseEntry const* AuctionHouseMgr::GetAuctionHouseEntry(uint32 factionTem
{
case 12: houseid = 1; break; // human
case 29: houseid = 6; break; // orc, and generic for horde
case 55: houseid = 2; break; // dwarf, and generic for alliance
case 55: houseid = 2; break; // dwarf/gnome, and generic for alliance
case 68: houseid = 4; break; // undead
case 80: houseid = 3; break; // n-elf
case 104: houseid = 5; break; // trolls
case 120: houseid = 7; break; // booty bay, neutral
case 474: houseid = 7; break; // gadgetzan, neutral
case 534: houseid = 2; break; // Alliance Generic
case 855: houseid = 7; break; // everlook, neutral
case 1604: houseid = 6; break; // b-elfs,
case 1638: houseid = 2; break; // exodar, alliance
default: // for unknown case
{
FactionTemplateEntry const* u_entry = sFactionTemplateStore.LookupEntry(factionTemplateId);