X-Git-Url: https://jxself.org/git/?p=mudsync.git;a=blobdiff_plain;f=mudsync%2Fgameobj.scm;h=0f4d7043e96918251bc1f70d85a63fde16c4566f;hp=cb844d1e65ab01a983ba81da808bd194c2e08993;hb=0017cbae1b76fb07101beda23b2a5c533a8d60f9;hpb=36042544b6defa138f348f093f895722a472e1ba diff --git a/mudsync/gameobj.scm b/mudsync/gameobj.scm index cb844d1..0f4d704 100644 --- a/mudsync/gameobj.scm +++ b/mudsync/gameobj.scm @@ -33,7 +33,9 @@ gameobj-occupants gameobj-actions - gameobj-self-destruct)) + gameobj-self-destruct + + dyn-ref)) ;;; Gameobj ;;; ======= @@ -114,6 +116,7 @@ (define occupants (message-ref replace-reply 'occupants #f)) ;; Snarf all the occupants! + (display "replacing occupant\n") (when occupants (for-each (lambda (occupant) @@ -125,7 +128,7 @@ (list gameobj-replace-step-occupants)) (define (run-replacement actor message replace-steps) - (define replaces (message-ref message 'replaces #f)) + (define replaces (message-ref message 'replace #f)) (when replaces (let ((replace-reply (<-wait actor replaces 'assist-replace))) @@ -134,7 +137,6 @@ (replace-step actor replace-reply)) replace-steps)))) - ;; @@: This could be kind of a messy way of doing gameobj-init ;; stuff. If only we had generic methods :( (define-mhandler (gameobj-init actor message) @@ -307,3 +309,21 @@ By default, this is whether or not the generally-visible flag is set." "Vanilla method for assisting in self-replacement for live hacking" (apply <-reply actor message (gameobj-replace-data* actor))) + + +;;; Utilities every gameobj has +;;; --------------------------- + +(define (dyn-ref gameobj special-symbol) + "Dynamically look up a special object from the gm" + (match special-symbol + ;; if it's a symbol, look it up dynamically + ((? symbol? _) + (message-ref + (<-wait gameobj (slot-ref gameobj 'gm) 'lookup-special + #:symbol special-symbol) + 'val)) + ;; if it's false, return nothing + ((#f #f)) + ;; otherwise it's probably an address, return it as-is + (_ special-symbol)))