X-Git-Url: https://jxself.org/git/?p=mudsync.git;a=blobdiff_plain;f=worlds%2Fbricabrac.scm;h=3584e87c15dd0376bf91e3b5d16edfbd1936c6fc;hp=5797785579950f23f596cd8ace21b1f3f1ddb190;hb=43b6ac4e8ceff7aad909294b1b00ebdd6a38ec15;hpb=ccbe2f18eb338a77b9a1986a3a36c7c9af07389c diff --git a/worlds/bricabrac.scm b/worlds/bricabrac.scm index 5797785..3584e87 100644 --- a/worlds/bricabrac.scm +++ b/worlds/bricabrac.scm @@ -19,10 +19,12 @@ ;;; Hotel Bricabrac (use-modules (mudsync) + (mudsync parser) (8sync systems actors) (8sync agenda) (oop goops) - (ice-9 format)) + (ice-9 format) + (rx irregex)) @@ -117,6 +119,51 @@ or 'skribe'? Now *that's* composition!")) "a scroll of teletype paper holding the software Four Freedoms" "a telephone shaped like an orange cartoon cat")) +(define-class () + (commands + #:init-value + (list + (indir-as-direct-command "sign" 'cmd-sign-form + '("as")))) + (message-handler + #:init-value + (simple-dispatcher + (append + (build-actions + (cmd-sign-form (wrap-apply sign-cmd-sign-in))) + gameobj-actions)))) + + +(define name-sre + (sre->irregex '(: alpha (** 1 14 (or alphanum "-" "_"))))) + +(define forbidden-words + (append article preposition + '("and" "or" "but" "admin"))) + +(define (valid-name? name) + (and (irregex-match name-sre name) + (not (member name forbidden-words)))) + +(define-mhandler (sign-cmd-sign-in actor message direct-obj indir-obj) + (define old-name + (message-ref + (<-wait actor (message-from message) 'get-name) + 'val)) + (define name indir-obj) + (if (valid-name? indir-obj) + (begin + (<-wait actor (message-from message) 'set-name! + #:val name) + (<- actor (slot-ref actor 'loc) 'tell-room + #:text (format #f "~a signs the form!\n~a is now known as ~a\n" + old-name old-name name))) + (<- actor (message-from message) 'tell + "Sorry, that's not a valid name. +Alphanumerics, _ and - only, 2-15 characters, starts with an alphabetic +character."))) + + (define lobby (lol ('room:lobby @@ -180,7 +227,11 @@ Classy!" (format #f " The curio cabinet is full of all sorts of oddities! Something catches your eye! Ooh, ~a!" (random-choice random-bricabrac)))) - + ('thing:sign-in-form + 'room:lobby + #:name "sign-in form" + #:goes-by '("sign-in form" "form" "signin form") + #:desc "It looks like you could sign this form and set your name.") ;; Object: desk ;; - Object: bell ;; - Object: sign in form