void TradeWindow::startTrade(const MWWorld::Ptr& actor) { mPtr = actor; mCurrentBalance = 0; mCurrentMerchantOffer = 0; restock(); std::vector<MWWorld::Ptr> itemSources; MWBase::Environment::get().getWorld()->getContainersOwnedBy(actor, itemSources); // Important: actor goes last, so that items purchased by the merchant go into his inventory itemSources.push_back(actor); std::vector<MWWorld::Ptr> worldItems; MWBase::Environment::get().getWorld()->getItemsOwnedBy(actor, worldItems); mTradeModel = new TradeItemModel(new ContainerItemModel(itemSources, worldItems), mPtr); mSortModel = new SortFilterItemModel(mTradeModel); mItemView->setModel (mSortModel); updateLabels(); // Careful here. setTitle may cause size updates, causing itemview redraw, so make sure to do it last // or we end up using a possibly invalid model. setTitle(actor.getClass().getName(actor)); onFilterChanged(mFilterAll); }
void TradeWindow::onOfferButtonClicked(MyGUI::Widget* _sender) { TradeItemModel* playerItemModel = MWBase::Environment::get().getWindowManager()->getInventoryWindow()->getTradeModel(); const MWWorld::Store<ESM::GameSetting> &gmst = MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>(); // were there any items traded at all? std::vector<ItemStack> playerBought = playerItemModel->getItemsBorrowedToUs(); std::vector<ItemStack> merchantBought = mTradeModel->getItemsBorrowedToUs(); if (playerBought.empty() && merchantBought.empty()) { // user notification MWBase::Environment::get().getWindowManager()-> messageBox("#{sBarterDialog11}"); return; } MWWorld::Ptr player = MWMechanics::getPlayer(); int playerGold = player.getClass().getContainerStore(player).count(MWWorld::ContainerStore::sGoldId); // check if the player can afford this if (mCurrentBalance < 0 && playerGold < std::abs(mCurrentBalance)) { // user notification MWBase::Environment::get().getWindowManager()-> messageBox("#{sBarterDialog1}"); return; } // check if the merchant can afford this if (mCurrentBalance > 0 && getMerchantGold() < mCurrentBalance) { // user notification MWBase::Environment::get().getWindowManager()-> messageBox("#{sBarterDialog2}"); return; } // check if the player is attempting to sell back an item stolen from this actor for (std::vector<ItemStack>::iterator it = merchantBought.begin(); it != merchantBought.end(); ++it) { if (MWBase::Environment::get().getMechanicsManager()->isItemStolenFrom(it->mBase.getCellRef().getRefId(), mPtr.getCellRef().getRefId())) { std::string msg = gmst.find("sNotifyMessage49")->getString(); if (msg.find("%s") != std::string::npos) msg.replace(msg.find("%s"), 2, it->mBase.getClass().getName(it->mBase)); MWBase::Environment::get().getWindowManager()->messageBox(msg); MWBase::Environment::get().getMechanicsManager()->confiscateStolenItemToOwner(player, it->mBase, mPtr, it->mCount); onCancelButtonClicked(mCancelButton); MWBase::Environment::get().getWindowManager()->exitCurrentGuiMode(); return; } } bool offerAccepted = mTrading.haggle(player, mPtr, mCurrentBalance, mCurrentMerchantOffer); // apply disposition change if merchant is NPC if ( mPtr.getClass().isNpc() ) { int dispositionDelta = offerAccepted ? gmst.find("iBarterSuccessDisposition")->getInt() : gmst.find("iBarterFailDisposition")->getInt(); MWBase::Environment::get().getDialogueManager()->applyDispositionChange(dispositionDelta); } // display message on haggle failure if ( !offerAccepted ) { MWBase::Environment::get().getWindowManager()-> messageBox("#{sNotifyMessage9}"); return; } // make the item transfer mTradeModel->transferItems(); playerItemModel->transferItems(); // transfer the gold if (mCurrentBalance != 0) { addOrRemoveGold(mCurrentBalance, player); mPtr.getClass().getCreatureStats(mPtr).setGoldPool( mPtr.getClass().getCreatureStats(mPtr).getGoldPool() - mCurrentBalance ); } eventTradeDone(); MWBase::Environment::get().getWindowManager()->playSound("Item Gold Up"); MWBase::Environment::get().getWindowManager()->removeGuiMode(GM_Barter); restock(); }
int SList::processBatch() { if(storeExistingBatch(1)) { string job; int error=0; int countT=(int)batchPro.size(); for(int i=0;i<countT;i++) { transID=batchPro.top().front(); batchPro.top().pop(); stringtoothers(batchPro.top().front(),numJobs); batchPro.top().pop(); for(int j=0;j<numJobs;j++) { job=batchPro.top().front(); //what job it is batchPro.top().pop(); if(!job.compare("DELETE")||!job.compare("SALE")||!job.compare("RESTOCK")) { temp=batchPro.top().front(); stringtoothers(temp,_barcode); batchPro.top().pop(); if(!job.compare("DELETE")) { int ind=searchBarcode(1,_barcode); if(ind) delProduct(ind); else error=1; } else if(!job.compare("SALE")) { stringtoothers(batchPro.top().front(),_qty); batchPro.top().pop(); int ind=searchBarcode(1,_barcode); if(ind) if(!specifySales(ind,_qty)) error=1; } else if(!job.compare("RESTOCK")) { stringtoothers(batchPro.top().front(),_qty); batchPro.top().pop(); int ind=searchBarcode(1,_barcode); if(ind) restock(ind,_qty); else error=1; } } else if(!job.compare("ADD")) { _name=batchPro.top().front(); batchPro.top().pop(); _cat=batchPro.top().front(); batchPro.top().pop(); temp=batchPro.top().front(); stringtoothers(temp,_barcode); if(!searchBarcode(1,_barcode)) { batchPro.top().pop(); stringtoothers(batchPro.top().front(),_price); batchPro.top().pop(); _man=batchPro.top().front(); batchPro.top().pop(); stringtoothers(batchPro.top().front(),_curunit); batchPro.top().pop(); Product p(_name,_cat,_man,_barcode,0,_curunit,_price); addProduct(size,p); } else error=1; } if(error) { errorLog.push(transID); errorLog.push(job); errorLog.push(temp); error=0; } } batchPro.pop(); } if(!errorLog.empty()) { writeErrorLog(); return 1; //cout<<"Some errors occured, please check log.txt file!"<<endl; // } return 2;//cout<<"Batch Processed!"<<endl; } else return 3; // cout<<"Please add some transactions!"<<endl; }