From 77a52b24c88dd113a74ff55cecb63a7214193fdf Mon Sep 17 00:00:00 2001
From: Andrei Karas <akaras@inbox.ru>
Date: Sun, 15 Feb 2015 15:08:47 +0300
Subject: Show buy or sell in player context menu based on enabled shop types.

---
 src/being/being.cpp          | 10 ++++++++++
 src/being/being.h            |  5 +++--
 src/gui/popups/popupmenu.cpp | 17 ++++++++++++-----
 3 files changed, 25 insertions(+), 7 deletions(-)

diff --git a/src/being/being.cpp b/src/being/being.cpp
index 97fad3c59..4a3e4d0cb 100644
--- a/src/being/being.cpp
+++ b/src/being/being.cpp
@@ -3551,3 +3551,13 @@ void Being::enableShop(const bool b)
     mShop = b;
     updateName();
 }
+
+bool Being::isBuyShopEnabled() const
+{
+    return mShop && (!serverFeatures->haveVending() || !mBuyBoard.empty());
+}
+
+bool Being::isSellShopEnabled() const
+{
+    return mShop && (!serverFeatures->haveVending() || !mSellBoard.empty());
+}
diff --git a/src/being/being.h b/src/being/being.h
index a6b588919..12b197a23 100644
--- a/src/being/being.h
+++ b/src/being/being.h
@@ -761,8 +761,9 @@ class Being notfinal : public ActorSprite,
         void setAdvanced(const bool n)
         { mAdvanced = n; addToCache(); }
 
-        bool isShopEnabled() const A_WARN_UNUSED
-        { return mShop; }
+        bool isBuyShopEnabled() const A_WARN_UNUSED;
+
+        bool isSellShopEnabled() const A_WARN_UNUSED;
 
         void enableShop(const bool b);
 
diff --git a/src/gui/popups/popupmenu.cpp b/src/gui/popups/popupmenu.cpp
index 188c8ae9a..d596f1a50 100644
--- a/src/gui/popups/popupmenu.cpp
+++ b/src/gui/popups/popupmenu.cpp
@@ -2366,20 +2366,27 @@ void PopupMenu::addBuySell(const Being *const being)
     if (player_relations.getDefault() & PlayerRelation::TRADE)
     {
         mBrowserBox->addRow("##3---");
-        if (being->isShopEnabled())
+        const bool haveVending = serverFeatures->haveVending();
+        if (being->isSellShopEnabled())
         {
             // TRANSLATORS: popup menu item
             // TRANSLATORS: buy item
             mBrowserBox->addRow("/buy 'NAME'", _("Buy"));
-            // TRANSLATORS: popup menu item
-            // TRANSLATORS: sell item
-            mBrowserBox->addRow("/sell 'NAME'", _("Sell"));
         }
-        else
+        else if (!haveVending)
         {
             // TRANSLATORS: popup menu item
             // TRANSLATORS: buy item
             mBrowserBox->addRow("/buy 'NAME'", _("Buy (?)"));
+        }
+        if (being->isBuyShopEnabled())
+        {
+            // TRANSLATORS: popup menu item
+            // TRANSLATORS: sell item
+            mBrowserBox->addRow("/sell 'NAME'", _("Sell"));
+        }
+        else if (!haveVending)
+        {
             // TRANSLATORS: popup menu item
             // TRANSLATORS: sell item
             mBrowserBox->addRow("/sell 'NAME'", _("Sell (?)"));
-- 
cgit v1.2.3-70-g09d2