int CItemStone::FixWeirdness() { ADDTOCALLSTACK("CItemStone::FixWeirdness"); // Check all my members. Make sure all wars are reciprocated and members are flaged. int iResultCode = CItem::FixWeirdness(); if ( iResultCode ) { return( iResultCode ); } bool fChanges = false; CStoneMember * pMember = STATIC_CAST <CStoneMember *>(GetHead()); while ( pMember != NULL ) { CStoneMember * pMemberNext = pMember->GetNext(); if ( ! CheckValidMember(pMember)) { IT_TYPE oldtype = GetType(); SetAmount(0); // turn off validation for now. we don't want to delete other members. delete pMember; SetAmount(1); // turn off validation for now. we don't want to delete other members. SetType( oldtype ); fChanges = true; } pMember = pMemberNext; } if ( fChanges ) { ElectMaster(); // May have changed the vote count. } return( 0 ); }
void AItem::TakeFrom(AItem* otherItem) { // Get the amount of items needed to add int amountToAdd = otherItem->GetAmount(); // Can we just add to this item if (GetRemainingSpace() >= amountToAdd) { SetAmount(GetAmount() + otherItem->GetAmount()); otherItem->SetAmount(0); } else { // If we're greater than stack size just set the amount to max size otherItem->SetAmount(otherItem->GetAmount() - GetRemainingSpace()); SetAmount(GetStackSize()); } }
void CItemVendable::Restock( bool fSellToPlayers ) { ADDTOCALLSTACK("CItemVendable::Restock"); // This is on a non-pet vendor. // allow prices to fluctuate randomly (per vendor) but hold the values for a bit. ASSERT( IsItemInContainer()); if ( m_price < 0 ) m_price = 0; // signal to recalc this later. if ( fSellToPlayers ) { // restock to my full amount. int iAmountRestock = GetContainedLayer(); if ( ! iAmountRestock ) { SetContainedLayer(1); iAmountRestock = 1; } if ( GetAmount() < iAmountRestock ) { SetAmount( iAmountRestock ); // restock amount } } else { // Clear the amount i have bought from players. // GetAmount() is the max that i will buy in the next period. SetContainedLayer(0); } }
CItemStone::~CItemStone() { SetAmount(0); // Tell everyone we are deleting. DeletePrepare(); // Must remove early because virtuals will fail in child destructor. // Remove this stone from the links of guilds in the world g_World.m_Stones.RemovePtr( this ); // all members are deleted automatically. Empty(); // do this manually to preserve the parents type cast }
int PVFilter::Set(char* mess, float value){ switch(FindMsg(mess)){ case 41: SetAmount(value, m_interpobj); return 1; default: return SpecInterp::Set(mess, value); } }
bool CItemSpawn::r_LoadVal(CScript & s) { ADDTOCALLSTACK("CitemSpawn:r_LoadVal"); EXC_TRY("LoadVal"); int iCmd = FindTableSorted(s.GetKey(), sm_szLoadKeys, COUNTOF(sm_szLoadKeys) - 1); if ( iCmd < 0 ) return CItem::r_LoadVal(s); switch ( iCmd ) { case ISPW_ADDOBJ: { AddObj(static_cast<CGrayUID>(s.GetArgVal())); return true; } case ISPW_AMOUNT: { SetAmount(static_cast<BYTE>(s.GetArgVal())); return true; } case ISPW_DELOBJ: { DelObj(static_cast<CGrayUID>(s.GetArgVal())); return true; } case ISPW_RESET: KillChildren(); return true; case ISPW_START: SetTimeout(0); return true; case ISPW_STOP: KillChildren(); SetTimeout(-1); return true; default: break; } EXC_CATCH; return false; }
int PVFilter::Connect(char* mess, void* input){ switch(FindMsg(mess)){ case 41: SetAmount(m_amnt, (SndObj*) input); return 1; case 42: SetFilterInput((SndObj*)input); return 1; case 43: SetFilterTable((Table*)input); return 1; default: return SpecInterp::Connect(mess, input); } }
// Overloaded addition operator for gold class Gold & Gold::operator+(const Gold & gold) { int total = GetAmount() + gold.m_nAmount; SetAmount(total); return *this; }