LONG CItemVendable::GetVendorPrice( int iConvertFactor ) { ADDTOCALLSTACK("CItemVendable::GetVendorPrice"); // Player is buying/selling from a vendor. // ASSUME this item is on the vendor ! // Consider: (if not on a player vendor) // Quality of the item. // rareity of the item. // ARGS: // iConvertFactor will consider: // Vendors Karma. // Players Karma // -100 = reduce price by 100% (player selling to vendor?) // 0 = base price // +100 = increase price by 100% (vendor selling to player?) INT64 lPrice = m_price; if ( lPrice <= 0 ) // set on player vendor. { if ( lPrice == 0 ) // set a new randomized price for the item { CItemBase * pItemDef; if ( IsType( IT_DEED )) { // Deeds just represent the item they are deeding. pItemDef = CItemBase::FindItemBase(static_cast<ITEMID_TYPE>(RES_GET_INDEX(m_itDeed.m_Type))); if ( pItemDef == NULL ) return( 1 ); } else { pItemDef = Item_GetDef(); } lPrice = pItemDef->GetMakeValue(GetQuality()); m_price = static_cast<long>(-lPrice); } else { lPrice = -lPrice; } } lPrice += IMULDIV( lPrice, maximum(iConvertFactor, -100), 100 ); if (lPrice > LONG_MAX) return LONG_MAX; else if (lPrice <= 0) return 0; return static_cast<long>(lPrice); }
bool CItemVendable::IsValidNPCSaleItem() const { ADDTOCALLSTACK("CItemVendable::IsValidNPCSaleItem"); // This item is in an NPC's vendor box. // Is it a valid item that NPC's should be selling ? CItemBase * pItemDef = Item_GetDef(); if ( m_price <= 0 && pItemDef->GetMakeValue(0) <= 0 ) { DEBUG_ERR(( "Vendor uid=0%lx selling unpriced item %s='%s'\n", static_cast<DWORD>(GetTopLevelObj()->GetUID()), GetResourceName(), GetName())); return( false ); } if ( ! IsValidSaleItem( true )) { DEBUG_ERR(( "Vendor uid=0%lx selling bad item %s='%s'\n", static_cast<DWORD>(GetTopLevelObj()->GetUID()), GetResourceName(), GetName())); return( false ); } return( true ); }