Changeset 18 for trunk/src/game/ItemHandler.cpp
- Timestamp:
- 11/19/08 13:23:29 (17 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/game/ItemHandler.cpp
r2 r18 681 681 // Stop the npc if moving 682 682 pCreature->StopMoving(); 683 // load vendor items if not yet 684 pCreature->LoadGoods(); 685 686 uint8 numitems = pCreature->GetItemCount(); 683 684 VendorItemData const* vItems = pCreature->GetVendorItems(); 685 if(!vItems) 686 { 687 _player->SendSellError( SELL_ERR_CANT_FIND_VENDOR, NULL, 0, 0); 688 return; 689 } 690 691 uint8 numitems = vItems->GetItemCount(); 687 692 uint8 count = 0; 688 uint32 ptime = time(NULL);689 uint32 diff;690 693 691 694 WorldPacket data( SMSG_LIST_INVENTORY, (8+1+numitems*8*4) ); … … 695 698 float discountMod = _player->GetReputationPriceDiscount(pCreature); 696 699 697 ItemPrototype const *pProto;698 700 for(int i = 0; i < numitems; i++ ) 699 701 { 700 CreatureItem* crItem = pCreature->GetItem(i); 701 if( crItem ) 702 { 703 pProto = objmgr.GetItemPrototype(crItem->id); 704 if( pProto ) 702 if(VendorItem const* crItem = vItems->GetItem(i)) 703 { 704 if(ItemPrototype const *pProto = objmgr.GetItemPrototype(crItem->item)) 705 705 { 706 706 if((pProto->AllowableClass & _player->getClassMask()) == 0 && pProto->Bonding == BIND_WHEN_PICKED_UP && !_player->isGameMaster()) 707 707 continue; 708 708 709 ++count; 709 if( crItem->incrtime != 0 && (crItem->lastincr + crItem->incrtime <= ptime) ) 710 { 711 diff = uint32((ptime - crItem->lastincr)/crItem->incrtime); 712 if( (crItem->count + diff * pProto->BuyCount) <= crItem->maxcount ) 713 crItem->count += diff * pProto->BuyCount; 714 else 715 crItem->count = crItem->maxcount; 716 crItem->lastincr = ptime; 717 } 710 711 // reputation discount 712 uint32 price = uint32(floor(pProto->BuyPrice * discountMod)); 713 718 714 data << uint32(count); 719 data << uint32(crItem->i d);715 data << uint32(crItem->item); 720 716 data << uint32(pProto->DisplayInfoID); 721 data << uint32(crItem->maxcount <= 0 ? 0xFFFFFFFF : crItem->count); 722 723 uint32 price = pProto->BuyPrice; 724 725 // reputation discount 726 price = uint32(floor(pProto->BuyPrice * discountMod)); 727 717 data << uint32(crItem->maxcount <= 0 ? 0xFFFFFFFF : pCreature->GetVendorItemCurrentCount(crItem)); 728 718 data << uint32(price); 729 719 data << uint32(pProto->MaxDurability);