mirror of
https://github.com/mangosfour/server.git
synced 2025-12-15 01:37:00 +00:00
[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:
parent
02532a469a
commit
9350c9990d
8 changed files with 150 additions and 128 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue