diff options
-rw-r--r-- | src/game/base/game.cc | 44 |
1 files changed, 26 insertions, 18 deletions
diff --git a/src/game/base/game.cc b/src/game/base/game.cc index b115d70..7f2fb40 100644 --- a/src/game/base/game.cc +++ b/src/game/base/game.cc @@ -516,24 +516,32 @@ void Game::func_give(core::Player *player, const std::string &args) core::Item *item = 0; - if ( (weapon->subtype() == Weapon::Ammo) || (weapon->subtype() == Weapon::Mine)) { - item = player->control()->inventory()->find(weapon); - if (!item) { - item = new core::Item(weapon); - item->set_flag(core::Item::Unrestricted); - player->control()->inventory()->add(item); - } else { - assert(item->info() == weapon); - } - item->inc_amount(amount); - } else { - for (int n = 0; n < amount; n++) { - item = new core::Item(weapon); - item->set_flag(core::Item::Unique); - item->set_flag(core::Item::Unrestricted); - item->set_amount(1); - player->control()->inventory()->add(item); - } + switch (weapon->subtype()) { + + case Weapon::Ammo: + case Weapon::Mine: + item = player->control()->inventory()->find(weapon); + if (!item) { + item = new core::Item(weapon); + item->set_flag(core::Item::Unrestricted); + player->control()->inventory()->add(item); + } else { + assert(item->info() == weapon); + } + item->inc_amount(amount); + break; + + case Weapon::Cannon: + case Weapon::Turret: + for (int n = 0; n < amount; n++) { + item = new core::Item(weapon); + item->set_flag(core::Item::Unique); + item->set_flag(core::Item::Mountable); + item->set_flag(core::Item::Unrestricted); + item->set_amount(1); + player->control()->inventory()->add(item); + } + break; } player->control()->inventory()->set_dirty(); |