summaryrefslogtreecommitdiff
path: root/src/net/buysellhandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/net/buysellhandler.cpp')
-rw-r--r--src/net/buysellhandler.cpp111
1 files changed, 35 insertions, 76 deletions
diff --git a/src/net/buysellhandler.cpp b/src/net/buysellhandler.cpp
index a2442d70..a551f213 100644
--- a/src/net/buysellhandler.cpp
+++ b/src/net/buysellhandler.cpp
@@ -1,32 +1,32 @@
/*
* The Mana World
- * Copyright (C) 2004 The Mana World Development Team
+ * Copyright 2004 The Mana World Development Team
*
* This file is part of The Mana World.
*
- * This program is free software; you can redistribute it and/or modify
+ * The Mana World is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* any later version.
*
- * This program is distributed in the hope that it will be useful,
+ * The Mana World is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
+ * along with The Mana World; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#include "buysellhandler.h"
+
#include <SDL_types.h>
-#include "buysellhandler.h"
#include "messagein.h"
#include "protocol.h"
#include "../beingmanager.h"
-#include "../inventory.h"
#include "../item.h"
#include "../localplayer.h"
#include "../npc.h"
@@ -35,98 +35,57 @@
#include "../gui/chat.h"
#include "../gui/sell.h"
-#include "../utils/gettext.h"
-
extern BuyDialog *buyDialog;
-extern Window *buySellDialog;
extern SellDialog *sellDialog;
+extern Window *buySellDialog;
BuySellHandler::BuySellHandler()
{
static const Uint16 _messages[] = {
- SMSG_NPC_BUY_SELL_CHOICE,
- SMSG_NPC_BUY,
- SMSG_NPC_SELL,
- SMSG_NPC_BUY_RESPONSE,
- SMSG_NPC_SELL_RESPONSE,
+ GPMSG_NPC_BUY,
+ GPMSG_NPC_SELL,
0
};
handledMessages = _messages;
}
-void BuySellHandler::handleMessage(MessageIn *msg)
+void BuySellHandler::handleMessage(MessageIn &msg)
{
- int n_items;
- switch (msg->getId())
+ Being *being = beingManager->findBeing(msg.readInt16());
+ if (!being || being->getType() != Being::NPC)
{
- case SMSG_NPC_BUY_SELL_CHOICE:
- buyDialog->setVisible(false);
- buyDialog->reset();
- sellDialog->setVisible(false);
- sellDialog->reset();
- buySellDialog->setVisible(true);
- current_npc = dynamic_cast<NPC*>(beingManager->findBeing(msg->readInt32()));
- break;
+ return;
+ }
+
+ current_npc = static_cast< NPC * >(being);
- case SMSG_NPC_BUY:
- msg->readInt16(); // length
- n_items = (msg->getLength() - 4) / 11;
+ switch (msg.getId())
+ {
+ case GPMSG_NPC_BUY:
buyDialog->reset();
- buyDialog->setMoney(player_node->mGp);
+ buyDialog->setMoney(player_node->getMoney());
buyDialog->setVisible(true);
- for (int k = 0; k < n_items; k++)
+ while (msg.getUnreadLength())
{
- Sint32 value = msg->readInt32();
- msg->readInt32(); // DCvalue
- msg->readInt8(); // type
- Sint16 itemId = msg->readInt16();
- buyDialog->addItem(itemId, value);
+ int itemId = msg.readInt16();
+ int amount = msg.readInt16();
+ int value = msg.readInt16();
+ buyDialog->addItem(itemId, amount, value);
}
break;
- case SMSG_NPC_SELL:
- msg->readInt16(); // length
- n_items = (msg->getLength() - 4) / 10;
- if (n_items > 0) {
- sellDialog->setMoney(player_node->mGp);
- sellDialog->reset();
- sellDialog->setVisible(true);
-
- for (int k = 0; k < n_items; k++)
- {
- Sint16 index = msg->readInt16();
- Sint32 value = msg->readInt32();
- msg->readInt32(); // OCvalue
-
- Item *item = player_node->getInventory()->getItem(index);
- if (item && !(item->isEquipped())) {
- sellDialog->addItem(item, value);
- }
- }
- }
- else {
- chatWindow->chatLog(_("Nothing to sell"), BY_SERVER);
- if (current_npc) current_npc->handleDeath();
- }
- break;
-
- case SMSG_NPC_BUY_RESPONSE:
- if (msg->readInt8() == 0) {
- chatWindow->chatLog(_("Thanks for buying"), BY_SERVER);
- } else {
- // Reset player money since buy dialog already assumed purchase
- // would go fine
- buyDialog->setMoney(player_node->mGp);
- chatWindow->chatLog(_("Unable to buy"), BY_SERVER);
- }
- break;
+ case GPMSG_NPC_SELL:
+ sellDialog->setMoney(player_node->getMoney());
+ sellDialog->reset();
+ sellDialog->setVisible(true);
- case SMSG_NPC_SELL_RESPONSE:
- if (msg->readInt8() == 0) {
- chatWindow->chatLog(_("Thanks for selling"), BY_SERVER);
- } else {
- chatWindow->chatLog(_("Unable to sell"), BY_SERVER);
+ while (msg.getUnreadLength())
+ {
+ int itemId = msg.readInt16();
+ int amount = msg.readInt16();
+ int value = msg.readInt16();
+ sellDialog->addItem(itemId, amount, value);
}
break;
}