+;; This one allows you to take from items that are proxied by it
+(define-actor <proxy-items> (<gameobj>)
+ ((cmd-take-from take-from-proxy))
+ (proxy-items #:init-keyword #:proxy-items))
+
+(define* (take-from-proxy gameobj message
+ #:key direct-obj indir-obj preposition
+ (player (message-from message)))
+ (call/ec
+ (lambda (escape)
+ (for-each
+ (lambda (obj-sym)
+ (define obj-id (dyn-ref gameobj obj-sym))
+ (define goes-by
+ (mbody-val (<-wait obj-id 'goes-by)))
+ (when (ci-member direct-obj goes-by)
+ (<- obj-id 'cmd-take #:direct-obj direct-obj #:player player)
+ (escape)))
+ (slot-ref gameobj 'proxy-items))
+
+ (<- player 'tell
+ #:text `("You don't see any such " ,direct-obj " to take "
+ ,preposition " " ,(slot-ref gameobj 'name) ".")))))
+
+