Show
Ignore:
Timestamp:
11/19/08 13:23:29 (17 years ago)
Author:
yumileroy
Message:

[svn] * Little fix in RandomMovementGenerator?
* Updated to 6731 and 680

Original author: Neo2003
Date: 2008-10-06 04:48:59-05:00

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/game/ItemHandler.cpp

    r2 r18  
    681681    // Stop the npc if moving 
    682682    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(); 
    687692    uint8 count = 0; 
    688     uint32 ptime = time(NULL); 
    689     uint32 diff; 
    690693 
    691694    WorldPacket data( SMSG_LIST_INVENTORY, (8+1+numitems*8*4) ); 
     
    695698    float discountMod = _player->GetReputationPriceDiscount(pCreature); 
    696699 
    697     ItemPrototype const *pProto; 
    698700    for(int i = 0; i < numitems; i++ ) 
    699701    { 
    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)) 
    705705            { 
    706706                if((pProto->AllowableClass & _player->getClassMask()) == 0 && pProto->Bonding == BIND_WHEN_PICKED_UP && !_player->isGameMaster()) 
    707707                    continue; 
     708 
    708709                ++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 
    718714                data << uint32(count); 
    719                 data << uint32(crItem->id); 
     715                data << uint32(crItem->item); 
    720716                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)); 
    728718                data << uint32(price); 
    729719                data << uint32(pProto->MaxDurability);