void TradeWindow::action(const gcn::ActionEvent &event) { Item *item = inventoryWindow->getSelectedItem(); if (event.getId() == "add") { if(mStatus != PREPARING) return; if (!inventoryWindow->isVisible()) return; if (!item) return; if (mMyInventory->getFreeSlot() == -1) return; if (mMyInventory->contains(item)) { localChatTab->chatLog(_("Failed adding item. You can not " "overlap one kind of item on the window."), BY_SERVER); return; } // Choose amount of items to trade ItemAmountWindow::showWindow(ItemAmountWindow::TradeAdd, this, item); setStatus(PREPARING); } else if (event.getId() == "cancel") { setVisible(false); reset(); player_node->setTrading(false); Net::getTradeHandler()->cancel(); } else if (event.getId() == "ok") { mMoneyField->setEnabled(false); mAddButton->setEnabled(false); mMoneyChangeButton->setEnabled(false); receivedOk(true); setStatus(PROPOSING); Net::getTradeHandler()->confirm(); } else if (event.getId() == "trade") { receivedOk(true); setStatus(ACCEPTED); Net::getTradeHandler()->finish(); } else if (event.getId() == "money") { if(mStatus != PREPARING) return; int v = atoi(mMoneyField->getText().c_str()); int curMoney = player_node->getMoney(); if(v > curMoney) { localChatTab->chatLog(_("You don't have enough money."), BY_SERVER); v = curMoney; } Net::getTradeHandler()->setMoney(v); mMoneyField->setText(strprintf("%d", v)); } }
void TradeWindow::action(const gcn::ActionEvent &event) { if (!inventoryWindow) return; Item *const item = inventoryWindow->getSelectedItem(); const std::string &eventId = event.getId(); if (eventId == "add") { if (mStatus != PREPARING) return; if (!inventoryWindow->isWindowVisible()) { inventoryWindow->setVisible(true); return; } if (!item) return; if (mMyInventory->getFreeSlot() == -1) return; if (!checkItem(item)) return; // Choose amount of items to trade ItemAmountWindow::showWindow(ItemAmountWindow::TradeAdd, this, item); setStatus(PREPARING); } else if (eventId == "cancel") { setVisible(false); reset(); PlayerInfo::setTrading(false); Net::getTradeHandler()->cancel(); } else if (eventId == "ok") { mMoneyField->setEnabled(false); mAddButton->setEnabled(false); mMoneyChangeButton->setEnabled(false); receivedOk(true); setStatus(PROPOSING); Net::getTradeHandler()->confirm(); } else if (eventId == "trade") { receivedOk(true); setStatus(ACCEPTED); Net::getTradeHandler()->finish(); } else if (eventId == "money") { if (mStatus != PREPARING) return; int v = atoi(mMoneyField->getText().c_str()); const int curMoney = PlayerInfo::getAttribute(PlayerInfo::MONEY); if (v > curMoney) { if (localChatTab) { // TRANSLATORS: trade error localChatTab->chatLog(_("You don't have enough money."), BY_SERVER); } v = curMoney; } Net::getTradeHandler()->setMoney(v); mMoneyField->setText(strprintf("%d", v)); } }