const void Get::Run( Character* character, const string& cmd, const string& arg ) const { Thing* object = NULL; Thing* target = NULL; string args, sobj, star; if ( character ) { args = arg; sobj = Utils::Argument( args ); star = Utils::Argument( args ); if ( sobj.empty() ) { character->Send( "Get what?" CRLF ); return; } // No 'from' target specified, so search the room if ( star.empty() ) { object = Handler::FindThing( sobj, THING_TYPE_OBJECT, HANDLER_SCOPE_LOCATION, character ); if ( object ) { character->Send( "You get " + object->gDescription( THING_DESCRIPTION_SHORT ) + "." + CRLF ); character->gContainer()->Send( character->gName() + " gets " + object->gDescription( THING_DESCRIPTION_SHORT ) + "." + CRLF, character ); object->Move( character->gContainer(), character ); } else { character->Send( "There is no " + arg + " here." CRLF ); return; } } else { target = Handler::FindThing( star, THING_TYPE_OBJECT, HANDLER_SCOPE_LOC_INV, character ); if ( !target ) { character->Send( "There is no " + star + " here." CRLF ); return; } object = Handler::FindThing( sobj, THING_TYPE_OBJECT, HANDLER_SCOPE_INVENTORY, target ); if ( object ) { character->Send( "You get " + object->gDescription( THING_DESCRIPTION_SHORT ) + " from " + target->gDescription( THING_DESCRIPTION_SHORT ) + "." CRLF ); character->gContainer()->Send( character->gName() + " gets " + object->gDescription( THING_DESCRIPTION_SHORT ) + " from " + target->gDescription( THING_DESCRIPTION_SHORT )+ "." CRLF, character ); object->Move( target, character ); } else { character->Send( "There is no " + sobj + " inside the " + target->gDescription( THING_DESCRIPTION_SHORT ) + "." CRLF ); return; } } } return; }