Example #1
0
    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);
    }
Example #2
0
    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();
    }
Example #3
0
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;
}