diff --git a/src/game/AuctionHouseHandler.cpp b/src/game/AuctionHouseHandler.cpp index 8769c64e9..eef3024b0 100644 --- a/src/game/AuctionHouseHandler.cpp +++ b/src/game/AuctionHouseHandler.cpp @@ -35,13 +35,13 @@ // void called when player click on auctioneer npc void WorldSession::HandleAuctionHelloOpcode( WorldPacket & recv_data ) { - uint64 guid; // NPC guid - recv_data >> guid; + ObjectGuid auctioneerGuid; // NPC guid + recv_data >> auctioneerGuid; - Creature *unit = GetPlayer()->GetNPCIfCanInteractWith(guid,UNIT_NPC_FLAG_AUCTIONEER); + Creature *unit = GetPlayer()->GetNPCIfCanInteractWith(auctioneerGuid, UNIT_NPC_FLAG_AUCTIONEER); if (!unit) { - DEBUG_LOG( "WORLD: HandleAuctionHelloOpcode - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(guid)) ); + DEBUG_LOG("WORLD: HandleAuctionHelloOpcode - %s not found or you can't interact with him.", auctioneerGuid.GetString().c_str()); return; } @@ -49,21 +49,20 @@ void WorldSession::HandleAuctionHelloOpcode( WorldPacket & recv_data ) if(GetPlayer()->hasUnitState(UNIT_STAT_DIED)) GetPlayer()->RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH); - SendAuctionHello(guid, unit); + SendAuctionHello(unit); } // this void causes that auction window is opened -void WorldSession::SendAuctionHello( uint64 guid, Creature* unit ) +void WorldSession::SendAuctionHello(Creature* unit) { + // always return pointer AuctionHouseEntry const* ahEntry = AuctionHouseMgr::GetAuctionHouseEntry(unit->getFaction()); - if(!ahEntry) - return; WorldPacket data( MSG_AUCTION_HELLO, 12 ); - data << uint64(guid); + data << unit->GetObjectGuid(); data << uint32(ahEntry->houseId); data << uint8(1); // 3.3.3: 1 - AH enabled, 0 - AH disabled - SendPacket( &data ); + SendPacket(&data); } // call this method when player bids, creates, or deletes auction @@ -153,12 +152,28 @@ void WorldSession::SendAuctionCancelledToBidderMail( AuctionEntry* auction ) } } +AuctionHouseEntry const* WorldSession::GetCheckedAuctionHouseForAuctioneer(ObjectGuid guid) +{ + Creature *pCreature = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_AUCTIONEER); + if (!pCreature) + { + DEBUG_LOG("Auctioneeer %s accessed in cheating way.", guid.GetString().c_str()); + return NULL; + } + + // always return pointer + return AuctionHouseMgr::GetAuctionHouseEntry(pCreature->getFaction()); +} + // this void creates new auction and adds auction to some auctionhouse void WorldSession::HandleAuctionSellItem( WorldPacket & recv_data ) { - uint64 auctioneer, item; + DEBUG_LOG("WORLD: HandleAuctionSellItem"); + + ObjectGuid auctioneerGuid; + uint64 item; uint32 etime, bid, buyout; - recv_data >> auctioneer; + recv_data >> auctioneerGuid; recv_data.read_skip(); // const 1? recv_data >> item; recv_data.read_skip(); // stack size @@ -166,24 +181,17 @@ void WorldSession::HandleAuctionSellItem( WorldPacket & recv_data ) recv_data >> buyout; recv_data >> etime; - Player *pl = GetPlayer(); - if (!item || !bid || !etime) return; // check for cheaters - Creature *pCreature = GetPlayer()->GetNPCIfCanInteractWith(auctioneer, UNIT_NPC_FLAG_AUCTIONEER); - if (!pCreature) - { - DEBUG_LOG( "WORLD: HandleAuctionSellItem - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(auctioneer)) ); - return; - } + Player *pl = GetPlayer(); - AuctionHouseEntry const* auctionHouseEntry = AuctionHouseMgr::GetAuctionHouseEntry(pCreature->getFaction()); - if(!auctionHouseEntry) - { - DEBUG_LOG( "WORLD: HandleAuctionSellItem - Unit (GUID: %u) has wrong faction.", uint32(GUID_LOPART(auctioneer)) ); + AuctionHouseEntry const* auctionHouseEntry = GetCheckedAuctionHouseForAuctioneer(auctioneerGuid); + if (!auctionHouseEntry) return; - } + + // always return pointer + AuctionHouseObject* auctionHouse = sAuctionMgr.GetAuctionsMap(auctionHouseEntry); // client send time in minutes, convert to common used sec time etime *= MINUTE; @@ -230,8 +238,6 @@ void WorldSession::HandleAuctionSellItem( WorldPacket & recv_data ) return; } - AuctionHouseObject* auctionHouse = sAuctionMgr.GetAuctionsMap( pCreature->getFaction() ); - //we have to take deposit : uint32 deposit = AuctionHouseMgr::GetAuctionDeposit( auctionHouseEntry, etime, it ); if ( pl->GetMoney() < deposit ) @@ -252,7 +258,7 @@ void WorldSession::HandleAuctionSellItem( WorldPacket & recv_data ) AuctionEntry *AH = new AuctionEntry; AH->Id = sObjectMgr.GenerateAuctionID(); - AH->auctioneer = GUID_LOPART(auctioneer); + AH->auctioneer = auctioneerGuid.GetCounter(); AH->item_guidlow = GUID_LOPART(item); AH->item_template = it->GetEntry(); AH->owner = pl->GetGUIDLow(); @@ -264,7 +270,8 @@ void WorldSession::HandleAuctionSellItem( WorldPacket & recv_data ) AH->deposit = deposit; AH->auctionHouseEntry = auctionHouseEntry; - DETAIL_LOG("selling item %u to auctioneer %u with initial bid %u with buyout %u and with time %u (in sec) in auctionhouse %u", GUID_LOPART(item), GUID_LOPART(auctioneer), bid, buyout, auction_time, AH->GetHouseId()); + DETAIL_LOG("selling item %u to auctioneer %s with initial bid %u with buyout %u and with time %u (in sec) in auctionhouse %u", + GUID_LOPART(item), auctioneerGuid.GetString().c_str(), bid, buyout, auction_time, AH->GetHouseId()); auctionHouse->AddAuction(AH); sAuctionMgr.AddAItem(it); @@ -285,27 +292,28 @@ void WorldSession::HandleAuctionSellItem( WorldPacket & recv_data ) // this function is called when client bids or buys out auction void WorldSession::HandleAuctionPlaceBid( WorldPacket & recv_data ) { - uint64 auctioneer; + DEBUG_LOG("WORLD: HandleAuctionPlaceBid"); + + ObjectGuid auctioneerGuid; uint32 auctionId; uint32 price; - recv_data >> auctioneer; + recv_data >> auctioneerGuid; recv_data >> auctionId >> price; if (!auctionId || !price) return; // check for cheaters - Creature *pCreature = GetPlayer()->GetNPCIfCanInteractWith(auctioneer,UNIT_NPC_FLAG_AUCTIONEER); - if (!pCreature) - { - DEBUG_LOG( "WORLD: HandleAuctionPlaceBid - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(auctioneer)) ); + AuctionHouseEntry const* auctionHouseEntry = GetCheckedAuctionHouseForAuctioneer(auctioneerGuid); + if (!auctionHouseEntry) return; - } + + // always return pointer + AuctionHouseObject* auctionHouse = sAuctionMgr.GetAuctionsMap(auctionHouseEntry); // remove fake death if(GetPlayer()->hasUnitState(UNIT_STAT_DIED)) GetPlayer()->RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH); - AuctionHouseObject* auctionHouse = sAuctionMgr.GetAuctionsMap( pCreature->getFaction() ); AuctionEntry *auction = auctionHouse->GetAuction(auctionId); Player *pl = GetPlayer(); @@ -412,25 +420,25 @@ void WorldSession::HandleAuctionPlaceBid( WorldPacket & recv_data ) // this void is called when auction_owner cancels his auction void WorldSession::HandleAuctionRemoveItem( WorldPacket & recv_data ) { - uint64 auctioneer; + DEBUG_LOG("WORLD: HandleAuctionRemoveItem"); + + ObjectGuid auctioneerGuid; uint32 auctionId; - recv_data >> auctioneer; + recv_data >> auctioneerGuid; recv_data >> auctionId; //DEBUG_LOG( "Cancel AUCTION AuctionID: %u", auctionId); - Creature *pCreature = GetPlayer()->GetNPCIfCanInteractWith(auctioneer, UNIT_NPC_FLAG_AUCTIONEER); - if (!pCreature) - { - DEBUG_LOG( "WORLD: HandleAuctionRemoveItem - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(auctioneer)) ); + AuctionHouseEntry const* auctionHouseEntry = GetCheckedAuctionHouseForAuctioneer(auctioneerGuid); + if (!auctionHouseEntry) return; - } + + // always return pointer + AuctionHouseObject* auctionHouse = sAuctionMgr.GetAuctionsMap(auctionHouseEntry); // remove fake death if(GetPlayer()->hasUnitState(UNIT_STAT_DIED)) GetPlayer()->RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH); - AuctionHouseObject* auctionHouse = sAuctionMgr.GetAuctionsMap( pCreature->getFaction() ); - AuctionEntry *auction = auctionHouse->GetAuction(auctionId); Player *pl = GetPlayer(); @@ -487,11 +495,13 @@ void WorldSession::HandleAuctionRemoveItem( WorldPacket & recv_data ) //called when player lists his bids void WorldSession::HandleAuctionListBidderItems( WorldPacket & recv_data ) { - uint64 guid; // NPC guid + DEBUG_LOG("WORLD: HandleAuctionListBidderItems"); + + ObjectGuid auctioneerGuid; // NPC guid uint32 listfrom; // page of auctions uint32 outbiddedCount; // count of outbidded auctions - recv_data >> guid; + recv_data >> auctioneerGuid; recv_data >> listfrom; // not used in fact (this list not have page control in client) recv_data >> outbiddedCount; if (recv_data.size() != (16 + outbiddedCount * 4 )) @@ -500,19 +510,17 @@ void WorldSession::HandleAuctionListBidderItems( WorldPacket & recv_data ) outbiddedCount = 0; } - Creature *pCreature = GetPlayer()->GetNPCIfCanInteractWith(guid,UNIT_NPC_FLAG_AUCTIONEER); - if (!pCreature) - { - DEBUG_LOG( "WORLD: HandleAuctionListBidderItems - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(guid)) ); + AuctionHouseEntry const* auctionHouseEntry = GetCheckedAuctionHouseForAuctioneer(auctioneerGuid); + if (!auctionHouseEntry) return; - } + + // always return pointer + AuctionHouseObject* auctionHouse = sAuctionMgr.GetAuctionsMap(auctionHouseEntry); // remove fake death if(GetPlayer()->hasUnitState(UNIT_STAT_DIED)) GetPlayer()->RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH); - AuctionHouseObject* auctionHouse = sAuctionMgr.GetAuctionsMap( pCreature->getFaction() ); - WorldPacket data( SMSG_AUCTION_BIDDER_LIST_RESULT, (4+4+4) ); Player *pl = GetPlayer(); data << uint32(0); // add 0 as count @@ -541,25 +549,25 @@ void WorldSession::HandleAuctionListBidderItems( WorldPacket & recv_data ) // this void sends player info about his auctions void WorldSession::HandleAuctionListOwnerItems( WorldPacket & recv_data ) { - uint32 listfrom; - uint64 guid; + DEBUG_LOG("WORLD: HandleAuctionListOwnerItems"); - recv_data >> guid; + ObjectGuid auctioneerGuid; + uint32 listfrom; + + recv_data >> auctioneerGuid; recv_data >> listfrom; // not used in fact (this list not have page control in client) - Creature *pCreature = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_AUCTIONEER); - if (!pCreature) - { - DEBUG_LOG( "WORLD: HandleAuctionListOwnerItems - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(guid)) ); + AuctionHouseEntry const* auctionHouseEntry = GetCheckedAuctionHouseForAuctioneer(auctioneerGuid); + if (!auctionHouseEntry) return; - } + + // always return pointer + AuctionHouseObject* auctionHouse = sAuctionMgr.GetAuctionsMap(auctionHouseEntry); // remove fake death if(GetPlayer()->hasUnitState(UNIT_STAT_DIED)) GetPlayer()->RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH); - AuctionHouseObject* auctionHouse = sAuctionMgr.GetAuctionsMap( pCreature->getFaction() ); - WorldPacket data( SMSG_AUCTION_OWNER_LIST_RESULT, (4+4+4) ); data << (uint32) 0; // amount place holder @@ -576,12 +584,14 @@ void WorldSession::HandleAuctionListOwnerItems( WorldPacket & recv_data ) //this void is called when player clicks on search button void WorldSession::HandleAuctionListItems( WorldPacket & recv_data ) { + DEBUG_LOG("WORLD: HandleAuctionListItems"); + + ObjectGuid auctioneerGuid; std::string searchedname; uint8 levelmin, levelmax, usable; uint32 listfrom, auctionSlotID, auctionMainCategory, auctionSubCategory, quality; - uint64 guid; - recv_data >> guid; + recv_data >> auctioneerGuid; recv_data >> listfrom; // start, used for page control listing by 50 elements recv_data >> searchedname; @@ -591,19 +601,17 @@ void WorldSession::HandleAuctionListItems( WorldPacket & recv_data ) recv_data.read_skip(16); // unknown 16 bytes: 00 07 01 00 00 01 05 00 06 00 09 01 08 00 03 00 - Creature *pCreature = GetPlayer()->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_AUCTIONEER); - if (!pCreature) - { - DEBUG_LOG( "WORLD: HandleAuctionListItems - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(guid)) ); + AuctionHouseEntry const* auctionHouseEntry = GetCheckedAuctionHouseForAuctioneer(auctioneerGuid); + if (!auctionHouseEntry) return; - } + + // always return pointer + AuctionHouseObject* auctionHouse = sAuctionMgr.GetAuctionsMap(auctionHouseEntry); // remove fake death if(GetPlayer()->hasUnitState(UNIT_STAT_DIED)) GetPlayer()->RemoveSpellsCausingAura(SPELL_AURA_FEIGN_DEATH); - AuctionHouseObject* auctionHouse = sAuctionMgr.GetAuctionsMap( pCreature->getFaction() ); - //DEBUG_LOG("Auctionhouse search (GUID: %u TypeId: %u)", , list from: %u, searchedname: %s, levelmin: %u, levelmax: %u, auctionSlotID: %u, auctionMainCategory: %u, auctionSubCategory: %u, quality: %u, usable: %u", // GUID_LOPART(guid),GuidHigh2TypeId(GUID_HIPART(guid)), listfrom, searchedname.c_str(), levelmin, levelmax, auctionSlotID, auctionMainCategory, auctionSubCategory, quality, usable); @@ -634,7 +642,13 @@ void WorldSession::HandleAuctionListPendingSales( WorldPacket & recv_data ) { DEBUG_LOG("CMSG_AUCTION_LIST_PENDING_SALES"); - recv_data.read_skip(); // auctioneer guid + ObjectGuid auctioneerGuid; + + recv_data >> auctioneerGuid; // auctioneer guid + + AuctionHouseEntry const* auctionHouseEntry = GetCheckedAuctionHouseForAuctioneer(auctioneerGuid); + if (!auctionHouseEntry) + return; uint32 count = 0; diff --git a/src/game/AuctionHouseMgr.cpp b/src/game/AuctionHouseMgr.cpp index 93ebd772d..5359430e8 100644 --- a/src/game/AuctionHouseMgr.cpp +++ b/src/game/AuctionHouseMgr.cpp @@ -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); diff --git a/src/game/AuctionHouseMgr.h b/src/game/AuctionHouseMgr.h index 0d1b04035..3cbff33ef 100644 --- a/src/game/AuctionHouseMgr.h +++ b/src/game/AuctionHouseMgr.h @@ -122,7 +122,7 @@ class AuctionHouseMgr typedef UNORDERED_MAP ItemMap; - AuctionHouseObject* GetAuctionsMap( uint32 factionTemplateId ); + AuctionHouseObject* GetAuctionsMap(AuctionHouseEntry const* house); Item* GetAItem(uint32 id) { @@ -140,6 +140,8 @@ class AuctionHouseMgr void SendAuctionSuccessfulMail( AuctionEntry * auction ); void SendAuctionExpiredMail( AuctionEntry * auction ); static uint32 GetAuctionDeposit(AuctionHouseEntry const* entry, uint32 time, Item *pItem); + + static uint32 GetAuctionHouseTeam(AuctionHouseEntry const* house); static AuctionHouseEntry const* GetAuctionHouseEntry(uint32 factionTemplateId); public: diff --git a/src/game/GuildHandler.cpp b/src/game/GuildHandler.cpp index deeb3a939..496ac3168 100644 --- a/src/game/GuildHandler.cpp +++ b/src/game/GuildHandler.cpp @@ -700,18 +700,18 @@ void WorldSession::HandleSaveGuildEmblemOpcode(WorldPacket& recvPacket) { DEBUG_LOG("WORLD: Received MSG_SAVE_GUILD_EMBLEM"); - uint64 vendorGuid; + ObjectGuid vendorGuid; uint32 EmblemStyle, EmblemColor, BorderStyle, BorderColor, BackgroundColor; recvPacket >> vendorGuid; recvPacket >> EmblemStyle >> EmblemColor >> BorderStyle >> BorderColor >> BackgroundColor; - Creature *pCreature = GetPlayer()->GetNPCIfCanInteractWith(vendorGuid,UNIT_NPC_FLAG_TABARDDESIGNER); + Creature *pCreature = GetPlayer()->GetNPCIfCanInteractWith(vendorGuid, UNIT_NPC_FLAG_TABARDDESIGNER); if (!pCreature) { //"That's not an emblem vendor!" SendSaveGuildEmblem(ERR_GUILDEMBLEM_INVALIDVENDOR); - DEBUG_LOG("WORLD: HandleSaveGuildEmblemOpcode - Unit (GUID: %u) not found or you can't interact with him.", GUID_LOPART(vendorGuid)); + DEBUG_LOG("WORLD: HandleSaveGuildEmblemOpcode - %s not found or you can't interact with him.", vendorGuid.GetString().c_str()); return; } diff --git a/src/game/ItemHandler.cpp b/src/game/ItemHandler.cpp index f72f27e28..40cdc09b3 100644 --- a/src/game/ItemHandler.cpp +++ b/src/game/ItemHandler.cpp @@ -487,18 +487,22 @@ void WorldSession::HandlePageQuerySkippedOpcode( WorldPacket & recv_data ) void WorldSession::HandleSellItemOpcode( WorldPacket & recv_data ) { DEBUG_LOG( "WORLD: Received CMSG_SELL_ITEM" ); - uint64 vendorguid, itemguid; + + ObjectGuid vendorGuid; + uint64 itemguid; uint32 count; - recv_data >> vendorguid >> itemguid >> count; + recv_data >> vendorGuid; + recv_data >> itemguid; + recv_data >> count; if(!itemguid) return; - Creature *pCreature = GetPlayer()->GetNPCIfCanInteractWith(vendorguid, UNIT_NPC_FLAG_VENDOR); + Creature *pCreature = GetPlayer()->GetNPCIfCanInteractWith(vendorGuid, UNIT_NPC_FLAG_VENDOR); if (!pCreature) { - DEBUG_LOG( "WORLD: HandleSellItemOpcode - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(vendorguid)) ); + DEBUG_LOG("WORLD: HandleSellItemOpcode - %s not found or you can't interact with him.", vendorGuid.GetString().c_str()); _player->SendSellError( SELL_ERR_CANT_FIND_VENDOR, NULL, itemguid, 0); return; } @@ -596,15 +600,15 @@ void WorldSession::HandleSellItemOpcode( WorldPacket & recv_data ) void WorldSession::HandleBuybackItem(WorldPacket & recv_data) { DEBUG_LOG( "WORLD: Received CMSG_BUYBACK_ITEM" ); - uint64 vendorguid; + ObjectGuid vendorGuid; uint32 slot; - recv_data >> vendorguid >> slot; + recv_data >> vendorGuid >> slot; - Creature *pCreature = GetPlayer()->GetNPCIfCanInteractWith(vendorguid, UNIT_NPC_FLAG_VENDOR); + Creature *pCreature = GetPlayer()->GetNPCIfCanInteractWith(vendorGuid, UNIT_NPC_FLAG_VENDOR); if (!pCreature) { - DEBUG_LOG( "WORLD: HandleBuybackItem - Unit (GUID: %u) not found or you can't interact with him.", uint32(GUID_LOPART(vendorguid)) ); + DEBUG_LOG("WORLD: HandleBuybackItem - %s not found or you can't interact with him.", vendorGuid.GetString().c_str()); _player->SendSellError( SELL_ERR_CANT_FIND_VENDOR, NULL, 0, 0); return; } diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 275f8a4bc..5878d44ab 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -12957,7 +12957,7 @@ void Player::OnGossipSelect(WorldObject* pSource, uint32 gossipListId, uint32 me GetSession()->SendTabardVendorActivate(guid); break; case GOSSIP_OPTION_AUCTIONEER: - GetSession()->SendAuctionHello(guid, ((Creature*)pSource)); + GetSession()->SendAuctionHello(((Creature*)pSource)); break; case GOSSIP_OPTION_SPIRITGUIDE: PrepareGossipMenu(pSource); diff --git a/src/game/WorldSession.h b/src/game/WorldSession.h index dd3dbc6c4..b699288fe 100644 --- a/src/game/WorldSession.h +++ b/src/game/WorldSession.h @@ -28,6 +28,7 @@ struct ItemPrototype; struct AuctionEntry; +struct AuctionHouseEntry; struct DeclinedName; class ObjectGuid; @@ -263,12 +264,13 @@ class MANGOS_DLL_SPEC WorldSession bool SendItemInfo( uint32 itemid, WorldPacket data ); //auction - void SendAuctionHello( uint64 guid, Creature * unit ); + void SendAuctionHello(Creature * unit); void SendAuctionCommandResult( uint32 auctionId, uint32 Action, uint32 ErrorCode, uint32 bidError = 0); void SendAuctionBidderNotification( uint32 location, uint32 auctionId, uint64 bidder, uint32 bidSum, uint32 diff, uint32 item_template); void SendAuctionOwnerNotification( AuctionEntry * auction ); void SendAuctionOutbiddedMail( AuctionEntry * auction, uint32 newPrice ); void SendAuctionCancelledToBidderMail( AuctionEntry* auction ); + AuctionHouseEntry const* GetCheckedAuctionHouseForAuctioneer(ObjectGuid guid); //Item Enchantment void SendEnchantmentLog(uint64 Target, uint64 Caster,uint32 ItemID,uint32 SpellID); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index d699a7937..b08ecba4b 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "10249" + #define REVISION_NR "10250" #endif // __REVISION_NR_H__