X-Git-Url: https://jxself.org/git/?p=mudsync.git;a=blobdiff_plain;f=mudsync%2Fplayer.scm;h=8b9a22f5c72c5de58370db5843ee11bce20b0035;hp=3fb0136d0a59b47db234cbafe5bab7bb65a3105e;hb=43b6ac4e8ceff7aad909294b1b00ebdd6a38ec15;hpb=7248fd4470039dab59a8e3a95829952e91c0fd19 diff --git a/mudsync/player.scm b/mudsync/player.scm index 3fb0136..8b9a22f 100644 --- a/mudsync/player.scm +++ b/mudsync/player.scm @@ -39,7 +39,8 @@ (build-actions (init (wrap-apply player-init)) (handle-input (wrap-apply player-handle-input)) - (tell (wrap-apply player-tell)))) + (tell (wrap-apply player-tell)) + (disconnect-self-destruct (wrap-apply player-disconnect-self-destruct)))) (define player-actions* (append player-actions @@ -71,19 +72,18 @@ (define-mhandler (player-handle-input player message input) (define split-input (split-verb-and-rest input)) - (define input-verb (pk 'input-verb (car split-input))) - (define input-rest (pk 'input-rest (cdr split-input))) + (define input-verb (car split-input)) + (define input-rest (cdr split-input)) (define command-candidates - (pk 'candidates - (player-gather-command-handlers player input-verb))) + (player-gather-command-handlers player input-verb)) (define winner - (pk 'winner (find-command-winner command-candidates input-rest))) + (find-command-winner command-candidates input-rest)) (match winner ((cmd-action winner-id message-args) - (apply send-message player (pk 'winner-id winner-id) (pk 'cmd-action cmd-action) (pk 'message-args message-args))) + (apply send-message player winner-id cmd-action message-args)) (#f (<- player (gameobj-gm player) 'write-home #:text "Huh?\n")))) @@ -92,6 +92,16 @@ (<- player (gameobj-gm player) 'write-home #:text text)) +(define-mhandler (player-disconnect-self-destruct player message) + "Action routine for being told to disconnect and self destruct." + (define loc (gameobj-loc player)) + (when loc + (<- player loc 'tell-room + #:exclude (actor-id player) + #:text (format #f "~a disappears in a puff of entropy!\n" + (slot-ref player 'name)))) + (gameobj-self-destruct player)) + ;;; Command handling ;;; ================ @@ -135,12 +145,10 @@ ;; returns false for in the command response (fold (lambda (co-occupant prev) - (display "pre-message\n") (let* ((result (<-wait player co-occupant 'get-commands #:verb verb)) (commands (message-ref result 'commands)) (goes-by (message-ref result 'goes-by))) - (display "post-message\n") (append (map (lambda (command) (list command goes-by co-occupant)) @@ -157,7 +165,7 @@ ;; Now return a big ol sorted list of ((actor-id . command)) (append - (sort-commands-append-actor (pk 'room-commands room-commands) + (sort-commands-append-actor room-commands player-loc '()) ; room doesn't go by anything (sort-commands-multi-actors co-occupant-commands) (sort-commands-append-actor our-commands @@ -171,8 +179,6 @@ (sort actors-and-commands (lambda (x y) - (pk 'x x) - (pk 'y y) (> (command-priority (car x)) (command-priority (car y)))))) @@ -196,7 +202,7 @@ actor-goes-by matched)) ; matched is kwargs if truthy (return (list (command-action command) - (pk 'earlier-actor-id actor-id) matched)) + actor-id matched)) #f)))) sorted-candidates) #f)))