diff options
Diffstat (limited to 'src/game/base/game.cc')
-rw-r--r-- | src/game/base/game.cc | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/src/game/base/game.cc b/src/game/base/game.cc index cebbe01..47fab0f 100644 --- a/src/game/base/game.cc +++ b/src/game/base/game.cc @@ -990,10 +990,11 @@ void Game::func_drop(core::Player *player, const std::string &args) // drop a mine // find a mine in inventory + const Weapon *weapon = 0; core::Item *item = 0; for (core::Inventory::Items::iterator it = ship->inventory()->items().begin(); (!item) && (it != ship->inventory()->items().end()); it++) { if ((*it)->info()->type() == Weapon::infotype()) { - const Weapon *weapon = static_cast<const Weapon *>((*it)->info()); + weapon = static_cast<const Weapon *>((*it)->info()); if (weapon->subtype() == Weapon::Mine) { item = (*it); @@ -1006,16 +1007,16 @@ void Game::func_drop(core::Player *player, const std::string &args) return; } - // create a spacemine entity - SpaceMine *spacemine = new SpaceMine(item->info()); + // create a spacemine entity using the Weapon instance as constructiong info + SpaceMine *spacemine = new SpaceMine(weapon); + spacemine->set_color(ship->color()); spacemine->set_color_second(ship->color_second()); spacemine->set_location(ship->location() + ship->axis().forward() * -1.0f * (ship->radius() + spacemine->radius())); spacemine->set_axis(ship->axis()); spacemine->set_zone(ship->zone()); - spacemine->set_info(item->info()); - player->send(item->info()->name() + " ejected"); + player->send(weapon->name() + " ejected"); player->sound("fx/eject"); spacemine->reset(); @@ -1283,7 +1284,8 @@ void Game::func_respawn(core::Player *player, std::string const &args) core::Entity *spawn = ship->spawn(); if (!spawn) { - spawn = player->control()->zone()->default_view(); + ship->set_zone(Default::zone); + spawn = ship->zone()->default_view(); } if (spawn && spawn->has_flag(core::Entity::Dockable)) { @@ -1291,14 +1293,13 @@ void Game::func_respawn(core::Player *player, std::string const &args) player->set_view(spawn); player->send("^BRespawning at " + spawn->name()); } else { + ship->set_zone(Default::zone); ship->get_location().clear(); ship->get_axis().clear(); ship->set_state(core::Entity::Normal); player->set_view(0); player->send("^BRespawning"); } - - ship->set_zone(Default::zone); } |