Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/base/shipmodel.cc')
-rw-r--r--src/game/base/shipmodel.cc32
1 files changed, 24 insertions, 8 deletions
diff --git a/src/game/base/shipmodel.cc b/src/game/base/shipmodel.cc
index 6fd809b..1edd9d2 100644
--- a/src/game/base/shipmodel.cc
+++ b/src/game/base/shipmodel.cc
@@ -303,7 +303,7 @@ void ShipModel::list()
}
// a player buys a ship
-void ShipModel::buy(core::EntityControlable *buyer, core::Entity *seller)
+void ShipModel::buy(core::EntityControlable *buyer, core::Entity *seller, bool confirm)
{
if (!buyer || !seller)
return;
@@ -317,7 +317,7 @@ void ShipModel::buy(core::EntityControlable *buyer, core::Entity *seller)
if (!buyer->owner())
return;
- if (!seller->inventory()) {
+ if (!seller->has_flag(core::Entity::Dockable) || !seller->inventory()) {
buyer->owner()->send("^BCan not buy here");
return;
}
@@ -335,25 +335,41 @@ void ShipModel::buy(core::EntityControlable *buyer, core::Entity *seller)
assert(seller_item->info() == this);
}
+ // possible refund
+ const long refund = 0;
+
+ // check price
+ if (price() - refund > player->credits()) {
+ std::ostringstream ostr;
+ ostr << "You need another " << (price() - refund - player->credits()) << " credits to buy a " << name() << "!";
+ player->messagebox(ostr.str().c_str(), "Close");
+ return;
+ }
+
// check if there's enough space available to transfer inventory
if (player->control() && (maxcargo() < player->control()->inventory()->capacity_used())) {
- player->send("^WNot enough cargo space to transfer inventory!");
+ player->messagebox("Not enough cargo space to transfer inventory!", "Close");
return;
}
- // check price
- if (price() > player->credits()) {
- player->send("^WCan not afford transaction!");
+ // needs confirmation
+ if (!confirm) {
+ std::ostringstream ostrtxt;
+ ostrtxt << "Buy a " << name() << " for " << price() -refund << " credits?";
+
+ std::ostringstream ostrcmd;
+ ostrcmd << "buy " << seller_item->id() << " 1 confirm";
+
+ player->messagebox(ostrtxt.str().c_str(), "OK", ostrcmd.str().c_str(), "Cancel", "");
return;
}
-
+
Ship * ship = new Ship(player, this);
ship->set_zone(seller->zone());
ship->get_location().assign(seller->location());
ship->get_axis().assign(seller->axis());
ship->get_axis().change_direction(180.0f);
ship->set_dock(seller);
- //ship->reset(); // reset() is done by set_dock()
// transfer inventory
for (core::Inventory::Items::iterator it = player->control()->inventory()->items().begin(); it != player->control()->inventory()->items().end(); it++) {