summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-12-24 17:06:53 +0300
committerAndrei Karas <akaras@inbox.ru>2014-12-24 17:06:53 +0300
commit81020303571b9421b3ef1c8d2ec5f5d36599540d (patch)
tree78c0b3400ebca0d370aba332ec95d8da027de618
parent2f91a45e4c0c59a962059890ed5ab708a059788f (diff)
downloadmv-81020303571b9421b3ef1c8d2ec5f5d36599540d.tar.gz
mv-81020303571b9421b3ef1c8d2ec5f5d36599540d.tar.bz2
mv-81020303571b9421b3ef1c8d2ec5f5d36599540d.tar.xz
mv-81020303571b9421b3ef1c8d2ec5f5d36599540d.zip
eathena: impliment packet SMSG_NPC_CASH_SHOP_OPEN 0x0287.
-rw-r--r--src/gui/windows/buydialog.h3
-rw-r--r--src/net/eathena/cashshophandler.cpp21
-rw-r--r--src/net/eathena/cashshophandler.h4
-rw-r--r--src/net/eathena/markethandler.cpp1
4 files changed, 25 insertions, 4 deletions
diff --git a/src/gui/windows/buydialog.h b/src/gui/windows/buydialog.h
index 088e9c2ba..514eee4d0 100644
--- a/src/gui/windows/buydialog.h
+++ b/src/gui/windows/buydialog.h
@@ -80,7 +80,8 @@ class BuyDialog final : public Window,
{
Nick = -1,
Items = -2,
- Market = -3
+ Market = -3,
+ Cash = -4
};
void init();
diff --git a/src/net/eathena/cashshophandler.cpp b/src/net/eathena/cashshophandler.cpp
index 2ae0c67be..63cd03a04 100644
--- a/src/net/eathena/cashshophandler.cpp
+++ b/src/net/eathena/cashshophandler.cpp
@@ -20,6 +20,11 @@
#include "net/eathena/cashshophandler.h"
+#include "being/attributes.h"
+#include "being/playerinfo.h"
+
+#include "gui/windows/buydialog.h"
+
#include "net/eathena/messageout.h"
#include "net/eathena/protocol.h"
@@ -30,6 +35,8 @@ extern Net::CashShopHandler *cashShopHandler;
namespace EAthena
{
+BuyDialog *CashShopHandler::mBuyDialog = nullptr;
+
CashShopHandler::CashShopHandler() :
MessageHandler()
{
@@ -41,6 +48,7 @@ CashShopHandler::CashShopHandler() :
};
handledMessages = _messages;
cashShopHandler = this;
+ mBuyDialog = nullptr;
}
void CashShopHandler::handleMessage(Net::MessageIn &msg)
@@ -63,15 +71,22 @@ void CashShopHandler::handleMessage(Net::MessageIn &msg)
void CashShopHandler::processCashShopOpen(Net::MessageIn &msg)
{
const int count = (msg.readInt16("len") - 12) / 11;
+
+ mBuyDialog = new BuyDialog(BuyDialog::Cash);
+ mBuyDialog->setMoney(PlayerInfo::getAttribute(Attributes::MONEY));
+
msg.readInt32("cash points");
msg.readInt32("kafra points");
for (int f = 0; f < count; f ++)
{
msg.readInt32("price");
- msg.readInt32("discount price");
- msg.readUInt8("item type");
- msg.readInt16("item id");
+ const int value = msg.readInt32("discount price");
+ const int type = msg.readUInt8("item type");
+ const int itemId = msg.readInt16("item id");
+ const int color = 1;
+ mBuyDialog->addItem(itemId, type, color, 0, value);
}
+ mBuyDialog->sort();
}
void CashShopHandler::processCashShopBuyAck(Net::MessageIn &msg)
diff --git a/src/net/eathena/cashshophandler.h b/src/net/eathena/cashshophandler.h
index 00f272d69..ae99d8e9e 100644
--- a/src/net/eathena/cashshophandler.h
+++ b/src/net/eathena/cashshophandler.h
@@ -25,6 +25,8 @@
#include "net/eathena/messagehandler.h"
+class BuyDialog;
+
namespace EAthena
{
class CashShopHandler final : public MessageHandler,
@@ -46,6 +48,8 @@ class CashShopHandler final : public MessageHandler,
static void processCashShopOpen(Net::MessageIn &msg);
static void processCashShopBuyAck(Net::MessageIn &msg);
+
+ static BuyDialog *mBuyDialog;
};
} // namespace EAthena
diff --git a/src/net/eathena/markethandler.cpp b/src/net/eathena/markethandler.cpp
index 3c5c873ce..4e2dfc5cf 100644
--- a/src/net/eathena/markethandler.cpp
+++ b/src/net/eathena/markethandler.cpp
@@ -89,6 +89,7 @@ void MarketHandler::processMarketOpen(Net::MessageIn &msg)
const unsigned char color = 1;
mBuyDialog->addItem(itemId, type, color, amount, value);
}
+ mBuyDialog->sort();
}
void MarketHandler::processMarketBuyAck(Net::MessageIn &msg)