summaryrefslogtreecommitdiff
path: root/src/actions/commands.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/actions/commands.cpp')
-rw-r--r--src/actions/commands.cpp42
1 files changed, 38 insertions, 4 deletions
diff --git a/src/actions/commands.cpp b/src/actions/commands.cpp
index cd35ba9aa..eafd0b82b 100644
--- a/src/actions/commands.cpp
+++ b/src/actions/commands.cpp
@@ -713,19 +713,34 @@ impHandler0(fireHomunculus)
return true;
}
-impHandler(buy)
+static Being *findBeing(const std::string &name)
{
- const std::string args = event.args;
Being *being = nullptr;
- if (args.empty())
+ if (name.empty())
{
being = localPlayer->getTarget();
}
else
{
being = actorManager->findBeingByName(
- args, ActorType::Unknown);
+ name, ActorType::Unknown);
+ }
+ if (!being)
+ {
+ being = actorManager->findNearestLivingBeing(
+ localPlayer, 1, ActorType::Npc, true);
+ }
+ if (!being)
+ {
+ being = actorManager->findNearestLivingBeing(
+ localPlayer, 1, ActorType::Player, true);
}
+ return being;
+}
+
+impHandler(buy)
+{
+ Being *being = findBeing(event.args);
if (!being)
return false;
@@ -742,4 +757,23 @@ impHandler(buy)
return false;
}
+impHandler(sell)
+{
+ Being *being = findBeing(event.args);
+ if (!being)
+ return false;
+
+ if (being->getType() == ActorType::Npc)
+ {
+ npcHandler->sell(being->getId());
+ return true;
+ }
+ else if (being->getType() == ActorType::Player)
+ {
+ buySellHandler->requestBuyList(being->getName());
+ return true;
+ }
+ return false;
+}
+
} // namespace Actions