From: Christopher Allan Webber Date: Fri, 13 May 2016 21:02:13 +0000 (-0500) Subject: fixed infinite recursion on clerk main loop X-Git-Tag: fosdem-2017~136 X-Git-Url: https://jxself.org/git/?a=commitdiff_plain;h=f5128570ac83cb01d5f64b92a6a8b5ef6885b550;p=mudsync.git fixed infinite recursion on clerk main loop --- diff --git a/worlds/bricabrac.scm b/worlds/bricabrac.scm index 12217bf..e0688d0 100644 --- a/worlds/bricabrac.scm +++ b/worlds/bricabrac.scm @@ -364,7 +364,7 @@ if this room is intended for children or child-like adults." ('thing:cuddles-plushie 'room:playroom #:name "a cuddles plushie" - #:goes-by '("plushie" "cuddles plushie") + #:goes-by '("plushie" "cuddles plushie" "cuddles") #:takeable #t #:desc " A warm and fuzzy cuddles plushie! It's a cuddlefish!"))) @@ -629,11 +629,13 @@ You can ask me about the following: #:text (format #f "\"Thanks ~a!\" says the clerk. \"I have somewhere I need to be.\" The clerk leaves the room in a hurry.\n" - player-name)) + player-name) + #:exclude (actor-id clerk)) (gameobj-set-loc! clerk (dyn-ref clerk 'room:break-room)) (slot-set! clerk 'state 'slacking) (<- clerk (gameobj-loc clerk) 'tell-room - #:text clerk-return-to-slacking-text)) + #:text clerk-return-to-slacking-text + #:exclude (actor-id clerk))) ('slacking (<- clerk (message-from message) 'tell #:text "The clerk sternly asks you to not be so dismissive.\n")))) @@ -666,39 +668,36 @@ attend to.\n") (define-mhandler (clerk-act-update-loop clerk message) (define (tell-room text) (<- clerk (gameobj-loc clerk) 'tell-room - #:text text)) - (define (loop return) - (define (stop-if-destructed) - (if (slot-ref clerk 'destructed) - (return #f))) - (match (slot-ref clerk 'state) - ('slacking - (tell-room (random-choice clerk-slacking-texts)) - (8sleep (+ (random 10) 10)) - (stop-if-destructed) - (loop return)) - ('on-duty - (if (> (slot-ref clerk 'patience) 0) - ;; Keep working but lose patience gradually - (begin - (tell-room (random-choice clerk-working-impatience-texts)) - (slot-set! clerk 'patience (- (slot-ref clerk 'patience) - (+ (random 2) 1))) - (8sleep (+ (random 25) 20)) - (stop-if-destructed) - (loop return)) - ;; Back to slacking - (begin - (tell-room clerk-slack-excuse-text) - ;; back bto the break room - (gameobj-set-loc! clerk (pk 'break-room (dyn-ref clerk 'room:break-room))) - (tell-room clerk-return-to-slacking-text) - ;; annnnnd back to slacking - (slot-set! clerk 'state 'slacking) - (8sleep (+ (random 30) 15)) - (stop-if-destructed) - (loop return)))))) - (call/ec loop)) + #:text text + #:exclude (actor-id clerk))) + (define (loop-if-not-destructed) + (if (not (slot-ref clerk 'destructed)) + (<- clerk (actor-id clerk) 'update-loop))) + (match (slot-ref clerk 'state) + ('slacking + (tell-room (random-choice clerk-slacking-texts)) + (8sleep (+ (random 10) 10)) + (loop-if-not-destructed)) + ('on-duty + (if (> (slot-ref clerk 'patience) 0) + ;; Keep working but lose patience gradually + (begin + (tell-room (random-choice clerk-working-impatience-texts)) + (slot-set! clerk 'patience (- (slot-ref clerk 'patience) + (+ (random 2) 1))) + (8sleep (+ (random 25) 20)) + (loop-if-not-destructed)) + ;; Back to slacking + (begin + (tell-room clerk-slack-excuse-text) + ;; back bto the break room + (gameobj-set-loc! clerk (pk 'break-room (dyn-ref clerk 'room:break-room))) + (tell-room clerk-return-to-slacking-text) + ;; annnnnd back to slacking + (slot-set! clerk 'state 'slacking) + (8sleep (+ (random 30) 15)) + (loop-if-not-destructed)))))) + (define break-room (lol