(wire-exits! (wrap-apply room-wire-exits!))
(cmd-go (wrap-apply room-cmd-go))
(cmd-go-where (wrap-apply room-cmd-go-where))
+ (announce-entrance (wrap-apply room-announce-entrance))
(look-room (wrap-apply room-look-room))
(tell-room (wrap-apply room-act-tell-room))
;; in this case the command is the same version as the normal
(lambda (exit)
(equal? (exit-name exit) direct-obj))
(room-exits room)))
+ (define to-address (slot-ref exit 'to-address))
+ (define player-name
+ (message-ref (<-wait room (message-from message)
+ 'get-name) 'val))
(cond
(exit
;; Set the player's new location
(<-wait room (message-from message) 'set-loc!
- #:loc (slot-ref exit 'to-address))
+ #:loc to-address)
+ ;; Tell everyone else the person walked away
+ (room-tell-room
+ room
+ (format #f "~a wanders ~a.\n"
+ player-name direct-obj))
+ (<- room to-address 'announce-entrance
+ #:who-entered (message-from message))
;; Have the new room update the player to the new location
(<- room (slot-ref exit 'to-address) 'look-room
#:to-id (message-from message)))
(define message-to-send
(format #f "~a says: ~a\n" player-name phrase))
(room-tell-room room message-to-send))
+
+(define-mhandler (room-announce-entrance room message who-entered)
+ (define player-name
+ (message-ref (<-wait room who-entered 'get-name)
+ 'val))
+ (define message-to-send
+ (format #f "~a enters the room.\n" player-name))
+ (room-tell-room room message-to-send
+ #:exclude who-entered))