BunnyHugger writes, "I. Zombies, II. The Nature of Rooms, III. Room Basics, IV. Using Environment Rooms (if time)." J.P. wavies to Beltrami. Claude purr! Nuzzles Joshua. Beltrami smiles to J.P. J.P. chitters! BunnyHugger says, "Welcome class!" Airborn says, "Welcome BunnyHugger" Claude earperks. BunnyHugger says, "The homework from last time was to put an @action on an object that allowed it to have some interactive element, as well as setting the succ/fail/drop on the object. Did anyone bring in a completed homework for us to poke?" Joshua runs his bacth commands to see if he does... Claude raises a paw. BunnyHugger says, "Great, Claude! Can you demonstrate your homework?" You say, "Certainly!" You carefully set down the House of Cats. It rattles a little. Joshua does now. You say, "Care to do the honors?" Joshua ruffs, "Who, me?" BunnyHugger says, "I think he meant me?" You say, "Anyone." Joshua ruffs, "Go for it :)" BunnyHugger inspects the clock. It's cool! You say, "Thank you!" BunnyHugger says, "What's the command for using it?" Royce steps off of the floating disk that carried him up. Royce has arrived. You say, "It's hidden. :P" J.P. fuzzles Royce! You say, "Seriously, press spring. I should highlight it." Beltrami waves to Royce! Royce snugs J.P.! You say, "Hello, Royce." BunnyHugger says, "Ah! I tried 'press' and 'press clock' -- I would've gotten it third try, I'm sure. >;)" BunnyHugger fiddles with the House of Cats until they find the hidden spring and press it. The cats come to life in a concert of of whirring noises and cheerful musical chimes. In the backyard, a kitten bounces around in circles, tail in the air; the one in the top floor window is licking her paws, while the tom on the roof swishes his tail, watching a bird. Next to him, the weather vane sways back and forth with a tick-tock noise, while on the side of the building the water wheel turns. The entire show lasts less than a minute, then it all winds down neatly. Message set. BunnyHugger says, "Wow, that was neat." You say, "Oops, I "fixed" the typo on another message." Claude blushes. ^o^ J.P. grins. J.P. says, "Cool." Joshua pulls a refrigerator out of his pants and installs it here. Chitter can't seem to figure out how best to pick up the House of Cats. BunnyHugger says, "Chitter, what are you doing trying to pick up the House?" Chitter says, "I dunno, it seemed like a good idea." Message set. BunnyHugger can't seem to figure out how best to pick up the House of Cats. BunnyHugger says, "I see the house is locked so Chitter and I can't pick it up. Is the lock to yourself, Claude?" You say, "Yes. Let me unlock it." Unlocked. You say, "There!" Chitter carefully picks up the House of Cats after a few attempts. Chitter teeters under the heavy thing. Chitter carefully sets down the House of Cats. It rattles a little. BunnyHugger says, "Good job! You set all the messages on your object, I can see." You say, "You're very kind." BunnyHugger says, "Of course it's a good idea to lock stuff so it doesn't get carried off. n.n Though you can always retrieve a lost object via @teleport if it does get 'stolen,' so long as you own the object." You say, "Oh, I trust the present company." Joshua nuzzles Claude. BunnyHugger says, "Anyone else have homework to show?" Joshua gestures to his fridge here. Claude licks Joshua. :3 Joshua ruffs, "I installed it in the room already." BunnyHugger says, "I see!" This cooler of foods is highly stylish. It has a sleek, brushed aluminum look with an LCD display that catalogs stored food, when it will expire, and gives alerts on what is short in its stock. It is also able to tabulate most frequently used items and look up the closest stores which have them on sale. You might be able to 'open' it. BunnyHugger says, "Anyone want to 'open' the fridge?" Airborn opens the fridge and retrieves a cupcake. PatchO'Black's cat basket appears and Patchy hops out! PatchO'Black has arrived. You say, "Hello, Patchy." Airborn looks at the cupcake and offers it to Patchy, "Hi". BunnyHugger tries to open the fridge, but before she can, a gloved paw slips out of it to slap her paw away. BunnyHugger says, "Hey!" Joshua smirks. Joshua opens the fridge and retrieves a cupcake. Joshua hands it to BunnyHugger. PatchO'Black takes the cupcake, "Hi, Airborn! Claude giggles at the fridge. Joshua fixes something on it.. BunnyHugger says, "Thanks." Joshua pulls a refrigerator out of his pants and installs it here. BunnyHugger giggles. Joshua picks up the refrigerator and shoves it into his pants. J.P. blinks. Joshua pulls a refrigerator out of his pants and installs it here. BunnyHugger grabs hold of the fridge and grunts, trying to pick it up, but it's far too heavy! BunnyHugger says, "Aw." BunnyHugger smiles. Joshua grins. Claude laughs! "And I thought my pockets were big." BunnyHugger says, "I see you have your various messages including your failure ones set." PatchO'Black meows... Joshua mhmms! BunnyHugger says, "Good job!" Joshua ruffs, "Thank you, professor." Claude boops Patchy's nose. BunnyHugger says, "Anyone else got a widget?" Austin says, "I have, yes." BunnyHugger says, "Go ahead and show it, Austin." Austin says, "Now, this is fully untested, but, what the heck." Austin puts the record player down. BunnyHugger says, "Ooh." Beltrami grins. It's a fairly small turntable, barely more than a foot on each side, with a ridged rubber platter, a thin tone arm, a speed and an on switch. Claude peeks at it curiously. Austin says, "You should be able to 'play record', although, of course, it's fully coon-proof." BunnyHugger starts the record; it's 'Adventures in Modern Recording'. BunnyHugger turns her ear toward it. Austin grins. BunnyHugger sings, o/~ Every day my metal friend / Shakes my bed at 6 a.m. o/~ You say, "Hee!" J.P. grins. Austin says, "I know how to get in good with the teacher." J.P. giggles. BunnyHugger grabs the record player. Chitter says, "Hey!" BunnyHugger puts the record player down. BunnyHugger says, "OK, sorry." Joshua grabs the record player. PatchO'Black ums... Joshua puts the record player down. Joshua snickers at the @drop message. BunnyHugger says, "Now you say it's coon proof..." J.P. grins. BunnyHugger says, "Did you lock it against the species property, or just against a list of known raccoons?" Royce tries to open the record player's plastic shell, but can't get at it, and so gives up on starting the record player. J.P. grins. Austin says, "Actually, just against Royce." Royce meh. No foods in there, anyway. J.P. giggles. J.P. offers Royce some sugar cookies? Royce yay! Coon-Bot steps off of the floating disk that carried it up. Coon-Bot has arrived. BunnyHugger says, "Oh no!!!" J.P. giggles. Room: Classroom 1 -Stat-Name----------------Sex---------Species--------------------------------- >Coon-Bot neuter Raccoon robot |BunnyHugger ---[ Found 1 character. ( 1 Zombie ) ]---------------------------------------- Austin says, "See, I didn't think Skyler was going to be here, so ... oh, hi there." Royce ooh. Beltrami grins and waves to Coon-Bot? Coon-Bot lumbers in, sparking worryingly and with flashing eyes.... Coon-Bot starts the record; it's 'Adventures in Modern Recording'. A shiny, silver, mechanical raccoon with glowing green eyes. It clanks slightly as it moves. Carrying: a coon cookie J.P. offers Austin a record of the Star Wars theme? Coon-Bot takes the record off the platter and starts trying to eat it with metal jaws... BunnyHugger says, "Arghhh!!!!" J.P. frowns. BunnyHugger gets a ruler and starts chasing Coon-Bot. J.P. tries to steal the record from the Coon-Bot. Coon-Bot drops the record because it isn't food. J.P. hands it to BunnyHugger. Coon-Bot lumbers away, making freakish {{{*cCHiIrRr*}}} sounds. Coon-Bot has left. J.P. giggles. BunnyHugger ahems. Claude climbs on the refrigerator and watches the mayhem. PatchO'Black mews, "Has the class already begun? I don't want to interrupt." BunnyHugger says, "Sorry, that's, uh, a robot I built that's kind of gone rogue and appears when there's food around or someone says something about 'coon proof.'" You say, "You just said it again. :P And it's all right, Patchy." BunnyHugger says, "Well, we're showing our homework, so this is class, I think! I hope so anyway. At least, I have lots of class." BunnyHugger tugs on her tie. BunnyHugger says, "All right, any other homework assignments?" J.P. grins. Joshua blinks, and scratches his head at all the antics. BunnyHugger says, "I originally created Coon-Bot to get around a lock on Jaxen's coon-proof cookie jar." PatchO'Black will save his question, which is unrelated to BunnyHugger's class. BunnyHugger says, "Then things got out of hand." You say, "Ironic, isn't it?" BunnyHugger says, "Jaxen fixed the lock, and then Morticon brought in Coon-Bot Pro and got in that way." BunnyHugger says, "But Coon-Bot got tossed into the fountain and went haywire and now stalks the world ignoring my remote control." J.P. grins. BunnyHugger says, "And actually is an example of a simple zombie, so it's totally relevant. I whipped him up fast to annoy Jaxen. n.n" Joshua has some ideas on how coons could be properly locked out. SquirrelPlushie grins. BunnyHugger says, "Jaxen just created the lock so that it locked out a list of 'coons that he knew." Joshua ruffs, "A very simple MUF program could do a quick smatch on both the name and species field of the attempting character, and produce a false value if they matched." BunnyHugger says, "I wondered about that, and that's why I sent in Coon-Bot. He could have locked out folks with the species 'raccoon' or 'coon' or similar instead... but it would be hard to do without a program." BunnyHugger says, "As Joshua is saying, a program could do it easily." BunnyHugger says, "You can lock against species properties, but if you locked against 'raccoon' my 'raccoon robot' would still get in." You say, "So you can't do partial matches with just the lock syntax?" BunnyHugger says, "As far as I know you can't, but Joshua might know better...?" Joshua ruffs, "I've not tried. Only way to know is to try. I /do/ know that properties can be searched for with smatch syntax." Joshua ex me=_* BunnyHugger says, "The help file for @lock does not suggest that it works... and * at the start of something, at least, will cause it to look for a player." BunnyHugger says, "But, I haven't tested fully!" BunnyHugger says, "It will accept Boolean syntax, so you could do 'coon or raccoon or coati or...' but you'd still miss lots of partials that are likely to come up." Joshua nods. BunnyHugger says, "Let's see..." Claude grins. "The problem with word filters online." BunnyHugger carefully sets down her stereo camera. BunnyHugger decides not to pick up the stereo camera. Chitter picks up the stereo camera. BunnyHugger says, "Aha!" BunnyHugger says, "It works." BunnyHugger smiles. BunnyHugger says, "You can use * for wildcard! A new discovery for me." BunnyHugger says, "I locked to 'species:*uirre*' and Chitter got it OK!" Austin says, "Hooray!" You say, "Cool!" BunnyHugger says, "So what Jaxen could have done was locked against 'species:*coon*' though that might have gotten a few false hits." Joshua ruffs, "Wonderful!" Austin says, "The procyonids would get him yet." Chitter carefully sets down her stereo camera. Chitter decides not to pick up the stereo camera. BunnyHugger says, "OK, I got this. Cool." BunnyHugger says, "'@lock =!species:*coon*' would have done it. He would've excluded both Royce and my raccoon robot that way." Royce churrs, "Oh, yes. We will. We are just waiting for him to go grocery shopping, first." BunnyHugger says, "Neat! I learned something." BunnyHugger says, "OK! Let's see here." BunnyHugger says, "Beltrami, is your 'You Are Here' Map completed?" Beltrami's ears flicker and she looks, embarrassed, down. She shakes no. BunnyHugger says, "That's OK. You can bring it next time." Beltrami touches her chin. BunnyHugger says, "All right, if there's no other homework to demonstrate we'll move on to today's topic: ZOMBIES." PatchO'Black eeps! PatchO'Black go and hides! PatchO'Black is glommed down and swept away by a plastic hippopotamus mouth. PatchO'Black has left. BunnyHugger says, "In MUCK terms, what's a zombie? Anyone?" Claude raises a paw. BunnyHugger says, "Claude?" You say, "It's a Thing." BunnyHugger says, "That's right!" BunnyHugger says, "And what makes a Thing a Zombie?" Claude looks around. BunnyHugger says, "Don't worry about saying it in front of Chitter, he's used to it." You say, "Having the Z flag set." BunnyHugger says, "Yep, the Z flag on a thing makes it into a Zombie. Aaaaaand.... who knows what is special about a Zombie?" BunnyHugger looks around to see if anyone else wants to answer. Joshua knows. But lets someone else answer if they would like to :) Chitter says, "No voting rights." BunnyHugger says, "Chitter, you're getting dangerously close to being out of character." Chitter says, "It's out of character for me to complain?" Austin says, "Sometimes you just poke BunnyHugger instead." BunnyHugger says, "All right, Professor Joshua, what's a Zombie do?" Joshua ruffs, "A zombie relies any notifications it receives back to the player who owns it." Joshua relays BunnyHugger says, "Yep!" BunnyHugger says, "It listens for you and reports what it hears, essentially. I was having Chitter pick up and drop stuff earlier because then I saw both the @succ, through his eyes, and the @osucc, through mine." BunnyHugger says, "Fortunately, it doesn't repeat everything that's going on in a room you're already in. But for a room you're not in, it will. So when Chitter goes off on his own, which believe it or not he does sometimes, I see what's going on with him, prepended by his name." BunnyHugger says, "I have my own MU* client configured so that stuff with Chitter's name in the front is colored differently so I can separate it from everything else that's going on." Claude hmm! BunnyHugger says, "Now, to be really useful, you're also going to want to be able to direct your zombie -- tell it where to go, actions to perform, and so on. In other words, act sort of like a substitute player. The Z flag doesn't actually allow you to do that. You have to set a second flag for your zombie to be 'forcible.'" SquirrelPlushie chitters. BunnyHugger says, "J.P., what other flag did you have to set on your Plushie so you could use it? Do you know?" Joshua drops Kelketek'. BunnyHugger says, "Oh no!" Kelketek' looks confused. Claude blinks! J.P. says, "Not off the top of my head." Kelketek' sniffsniffsniffs all over Claude. J.P. says, "It was a while ago." Claude schlurp! the fox. BunnyHugger says, "OK! Well, I would bet your Plushie also has the X flag." SquirrelPlushie pulls a digital piano out of his pocket and starts playing The Pawpet Song. BunnyHugger says, "X is the flag for 'Xforcible.' Which... is a sign they were really running out of flags." J.P. says, "Yup." J.P. says, "Heh." Kelketek' merps, and fuzzles the cat. "We in school now, Professor Farstrike?" Joshua nods to Kel, and sends him to a seat. BunnyHugger says, "Hi Kelketek Jr.!" Claude purrs! BunnyHugger says, "They couldn't use F since that's the flag for a Forth program (MUF)." BunnyHugger says, "Xforcible is a flag that can be set on either a player or a thing. It has no meaning for other kinds of objects." Kelketek' makes a face at being called 'Junior', but takes a seat, his tail flitting back and forth. Niny'ah steps off of the floating disk that carried her up. Niny'ah has arrived. BunnyHugger says, "It states that the object is permitted to be 'forced.' Forcing is a way to make an object carry out some command." J.P. bats at Kelketek''s tail. BunnyHugger says, "Hi Niny'ah!" Sonja has teleported in. Sonja has arrived. Kelketek' bops a silly squirrel with it! Also, waves to Niny'ah. Beltrami smiles to Niny'ah and Sonja. You say, "Hello, Niny'ah." Niny'ah ruffles Claude Claude purr! Niny'ah says, "how much did I miss? aside from the announcement" You say, "And Sonja." BunnyHugger says, "The basic syntax for forcing something is: '@force ='. can be the name of thing or its DBREF#." BunnyHugger says, "Well, you missed folks demonstrating their homework assignments, but we're just getting started on the main lesson." Joshua ruffs, "Niny'ah, we went over homework and we've gone over the basics of what a zombie is and how forcing works." Chitter scratches his head. BunnyHugger says, "I just entered '@force chitter=:scratches his head.'" BunnyHugger says, "In order to do that, Chitter had to be set X. And, he also had to be force-locked to me. So what I want to do first, to make sure everyone knows all the nuts and bolts of stuff here on the MUCK, is to talk to you a little about locks. I'm going to hit both chown-lock and force-lock at this point, because they both kind of work the same way." Sonja makes a face at Chitter BunnyHugger says, "Now, you all already know about @lock, or at least folks who were here last time do. The lock on an object does different things depending on what type of object, but in general, it sets who can 'use' that object, including go through an exit. We were talking about the coon lock earlier. n.n" BunnyHugger says, "With @lock-s, if something has NO lock on it, that actually means anyone can use it. An unlocked exit is usable by anyone; but if I @lock something to me, it means only I can use it, or lock it to Austin, or whomever. Once you lock something, the lock says who's permitted to use it or not." Claude nodnods and scribbles. BunnyHugger says, "OK, so there are a couple of special kinds of locks. The first is chown-lock, and the command for setting it is '@chlock ='." BunnyHugger says, "For instance if I want to chown-lock Chitter to me: '@chlock chitter=me'" BunnyHugger says, "If there is NO chown-lock set, then it is unlocked for chowning, and anyone can use @chown to take possession of the object PROVIDED the C flag is also set. C means 'Chown_OK'." BunnyHugger says, "So an object set C but with no chown-lock can be @chowned by anyone. An object set C and with a chown-lock set can only be chowned by those who pass the lock. And an object without C cannot be chowned at all, regardless of the lock." BunnyHugger says, "This is the careful way to transfer ownership. If you have a thing you want to give your friend, you can leave it in your friend's room with C set on it but @chlock-ed to your friend so no one else can nab it." BunnyHugger says, "It's also a useful way to transfer ownership back and forth during a building project. You can @chlock a room to multiple people, such as 'me|*Austin', so the two of you can pass ownership back and forth when needed." BunnyHugger says, "(Or any object, room is just an example there.)" Niny'ah drops Trinket. You see nothing special. Claude peeks! BunnyHugger says, "So that's everything I think you need to know about @chlock. Any questions on that? Oh, and it can be removed with '@chlock =' with nothing after that." You say, "Seems pretty clear to me." BunnyHugger says, "OK! Now, I told you this to contrast it with force-locks, which work somewhat differently and somewhat the same." BunnyHugger says, "Force-locks are set with @flock; the syntax is the same as with other locks." BunnyHugger says, "Now, if something has no force-lock set on it, who can @force it? Anyone?" Austin says, "I believe that's so, yes." BunnyHugger says, "Actually, that's not the case! If no force-lock is set on something, NO ONE can force it." Joshua ruffs, "Right. It's a security feature default." BunnyHugger says, "This works differently from other locks so is worth noting. It's because forcing is so dangerous." BunnyHugger says, "Even the owner of something can't force it without a @flock." BunnyHugger says, "So when you set up a zombie, the easiest thing to forget to do is @flock it to yourself. At least, I always forget that." BunnyHugger says, "Even if it's set X, it can't be @forced until you '@flock zombie=me' or whatever." BunnyHugger says, "Now, because force-locks can take Boolean syntax, it's possible to write a force-lock that amounts to 'everyone can force it.' But you have to at least take that step. It's also a crazy thing to do." BunnyHugger says, "GreenKai once, as a parlor trick, force-locked herself to 'me or not-me' or something similar to that, allowing everyone to @force her." BunnyHugger says, "This is craaaaaaaaazy dangerous. Can anyone see why?" You say, "Well... anyone can @force you to do anything... such as change your password." BunnyHugger says, "Right. @force can be used to force any action you can take. Someone could delete all your stuff or worse." Austin says, "I would think they'd need your old password to change it, but that's about all that has going for you." BunnyHugger says, "This is also why you have to be VERY CAREFUL with the @flock on your zombie. Your zombie has your permissions." Joshua ruffs, "They would. Same with your name, if I recall." BunnyHugger says, "Someone forcing your zombie could cause it to mess with your stuff." BunnyHugger says, "Right. But they could read your mail, at least, and destroy all your worldly possessions, and anything else you can think of." BunnyHugger says, "Zombies can't @create objects because they have no builder bit. But they can do stuff like set descriptions, remove flags, and recycle things!" You say, "So you can recycle even without a builder bit?" BunnyHugger says, "So yeah, be careful! Always @flock your zombie to yourself -- and leave the force-lock on anything you don't need to @force unset." BunnyHugger says, "Yes, you can. Weird, huh?" You say, "Indeed." BunnyHugger says, "Only stuff you own, or your owner owns if it's a zombie." Joshua ruffs, "Your zombie can recycle itself." BunnyHugger says, "I guess the idea is that if someone's builder bit has been taken away, there's no harm in letting them delete their stuff." Joshua ruffs, "And if you've ever wanted to feel like a tyrant, try it sometime." BunnyHugger says, "True. I also sometimes have my zombie remove its own Z flag to stop listening." Joshua ruffs, "You'll find an interesting... side effect." BunnyHugger says, "A zombie can also set itself dark but can't remove the dark flag because once something is dark it can't be @forced. n.n" BunnyHugger says, "One last security note about @flocks." BunnyHugger says, "The force-lock on something is NOT changed or removed when the object is @chowned." BunnyHugger says, "I'm working on a 'ChownPlus' program that will avoid this danger, if the wizards decide to let me install it here." You say, "Interesting." Joshua ruffs, "That means if someone gives you a zombie to chown, they have your permissions." Joshua ruffs, "And can act as you." BunnyHugger says, "But! The built in @chown doesn't change that property. So be careful! When someone @chowns an object to you, if the object is set X, make sure there's no force-lock set on it." BunnyHugger says, "Right." You say, "The Trojan Zombie." BunnyHugger says, "I think this is a big danger for inexperienced players because it allows someone to give them a Trojan Horse." BunnyHugger nods. BunnyHugger says, "Exactly." Joshua ruffs, "The worst part of that is that the @flock cannot be changed by you until /after/ you chown it, so there's always a gap of insecure time with the built-in commands." BunnyHugger says, "Right." Royce has been here 14 years or so, and didn't know that. BunnyHugger says, "So, be very careful with @flocks and things set X!" BunnyHugger says, "That's the big lesson for today really! But, let's move on and finish learning to make a zombie." Beltrami nods. BunnyHugger says, "OK, so the basic things you would need to do to make a very basic zombie from scratch are: @create , @set =Z, @set =X, @flock =me . At that point you have a zombie. You could then make your zombie do stuff with @force =." BunnyHugger says, "Like, '@force Chitter=:rolls his eyes.'" Chitter rolls his eyes. BunnyHugger says, "Your zombie can carry out all the in-built commands and can also use many of the global commands (programs)." fluffy polishs Beltrami, from afar! BunnyHugger says, "Whether or not it can use a program is dependent largely on whether the program writer thought to, or bothered to, or was practically able to, allow zombies to use it." J.P. pets Beltrami. BunnyHugger says, "My pet peeve is programs that are denied to zombies for no good reason, because the person had the program check for 'player' rather than 'player or zombie'." BunnyHugger says, "But you didn't come to hear about my MUF pet peeves. n.n" Joshua ruffs, "If you're going to allow zombies, easier just not to check for either player or zombie." Joshua ruffs, "Just let it run." BunnyHugger says, "It used to be the case that zombies couldn't use 'mumble' and this annoyed me so much I eventually pestered Austin into fixing the MUF." Joshua ruffs, "Unless you think a room is going to be running a program..." Claude chuckles. Joshua ruffs, "Which it could." BunnyHugger says, "Well, if it's something you want to limit to plausible 'people', it's easy, because there's a macro .person? you can use instead of player?" Joshua ruffs, "But I'd be more like 'Why not?' rather than preemptively banning it :P" BunnyHugger says, "My sternlooker will only aim at 'persons' because it gives you a message telling you you're silly if you point it at other stuff. n.n" Joshua nodnods. BunnyHugger says, "Anyway! So you can now all build and force a zombie from scratch. But who the blazes wants to enter a @force command every time you want your zombie to do something?" BunnyHugger says, "That's be a huge pain in the tail." Claude swishes his. Austin says, "Well, it improves your skill at typing @ marks." BunnyHugger says, "So just about everyone who uses a zombie, uses an @action to command it. This includes if you use the zombie-hammer or other zombie programs to automate this stuff." BunnyHugger says, "So if you want to make a shortcut to command your zombie, and you will, the best thing to do is to start by making an @action with a short name that you won't mind typing over and over. Chitter's control command is 'chi'." BunnyHugger says, "It used to be 'ch' in the days of yore, but that conflicted with global exits around here." BunnyHugger says, "So that's a good reason not to make it TOO short." Claude grins. BunnyHugger says, "So where do you think you would want to attach your zombie-controlling action?" You say, "On me." BunnyHugger says, "Yep! If you want it always accessible, on your own fur makes the most sense." BunnyHugger says, "Er, or scales, or whatever." You say, "Since I can't forget myself at home." BunnyHugger says, "And as you know from last time, the way you create and attach an action to yourself is like this: @action =me ." BunnyHugger says, "So in my example, '@action chi=me' would make 'chi' and attach it to me." BunnyHugger says, "So here's where it gets hard." BunnyHugger says, "Now we need to make it so the @action forces Chitter to do something. Anyone know how to do that?" Claude looks around the classroom again. Joshua does. BunnyHugger says, "Anyone besides Claude and Joshua want to get a chance to talk? >:)" Austin says, "By pure action or by way of interloper muf?" BunnyHugger says, "For this demonstration, I'd like to just use an action that anyone can make without MUF assistance, Austin." BunnyHugger says, "Although as Austin notes, if the @action were attached to a zombie-controlling MUF, you could do that. There is at least one such MUF in the public library." BunnyHugger says, "Er, @linked I mean, not attached." Kelketek' leans forward and listens. BunnyHugger says, "Well, Claude, have you got an answer?" Austin says, "OK. Well, without MUF, then I'd fall back on the {force: } mpi acommand." You say, "I don't know by heart, but since I have such an action I can always take a peek." BunnyHugger says, "Ah, Austin's got it." BunnyHugger nods. BunnyHugger says, "So, that leads to another topic related to our exploration of zombies: MPI." BunnyHugger says, "MPI either stands for 'Message Parsing Interpreter' or 'My Personal Insanity.'" BunnyHugger says, "I'm not good with it at all, and my understanding is that when building class is complete and you all graduate, Prof. Joshua is going to run an MPI class, which I will attend." Joshua nods. Joshua ruffs, "Would you like to see the MPI I use for this purpose?" Beltrami nodnods. BunnyHugger says, "MPI is a programming language that doesn't require a MUCKER bit or any sort of bit at all (except, indirectly, a builder bit) to run. It lurks in properties on objects, triggered when those properties are retrieved (e.g. when a @succ is run)." BunnyHugger says, "Sure!" Joshua's @fail message for yonder fox is: {with:puppet,$kel,{if:{&arg},{force:{&puppet}, {&arg}},You must enter something for {name:{&puppet}} to do.}} Joshua ruffs, "This also relies on a @reg name. Have we gone over those?" BunnyHugger says, "I haven't yet. Do you want to explain it for folks briefly?" Joshua ruffs, "Sure. Most of you may not be familiar with the command @register." Joshua ruffs, "@register is the first program and first command a wizard sets up on a standard MUCK installation." BunnyHugger turns her ears toward Joshua. Joshua ruffs, "It is used to create 'registered names' for objects which need to be referenced. Consider the following scenario:" Joshua ruffs, "You have a room that you're building. Once you create it, you have its DBREF. Let's say you create 'Kitchen', and it comes back with #23453." Niny'ah has disconnected. Sonja falls asleep. Joshua ruffs, "That's difficult to remember. BUt you can do it if you keep scrolling up, copying and pasting. You make your little exits with @act (O) Out;out;o=#23453, or what have you. But it's hard to keep track of that random number," Joshua ruffs, "Why not instead, be able to refer to it by its name?" Joshua ruffs, "@register lets you do that." BunnyHugger nodsQ Joshua ruffs, "If you're a wizard, you can do @register #23453=kitchen, and then everyone could reference it as $kitchen across the whole MUCK. But in our case, we usually want to use @register #me #23453=kitchen" Joshua ruffs, "Since that will make it to where it's on our local registry instead." BunnyHugger says, "And, you've all actually seen an example last week when I explained about setting the @success on your actions to $nothing . $nothing is the regname of do-nothing.muf, pretty universal across MUCKs." Joshua ruffs, "If you want to look up what things have been registered on the MUCK, you can type @register" Joshua ruffs, "There are a lot of things there :) [Connection froze here.] Claude looks from Joshua to BunnyHugger. Tick tock. BunnyHugger says, "Now MPI can be on the @succ, or the @osucc, or the @fail, or... etc., etc. Mine for Coon-Bot is on @succ, and I have the @action @linked to $nothing, just like with the actions I taught you about last week." Joshua ruffs, "That contains all of the libraries, which is what @register is most useful for, when getting down to the architecture of a MUCK. After all, if a hundred programs rely on your program, and your program is accidentally recycled, you're in trouble if you have to refer to it by DBREF, but that DBREF is not what your program gets next time you create it." BunnyHugger nods. Joshua ruffs, "Any object can have a registered name, and all the creation command have the ability to register on creation" Joshua @CREATE [=[=]] Joshua ruffs, "If you use @archive, you'll see that @archive does this." Joshua ruffs, "Also, you can use @reg #me to see what items are registered on you." BunnyHugger says, "Thank you, Professor." BunnyHugger says, "All right. Now, my zombie command is much simpler (and less nice) than Joshua's. Mine doesn't give a nice message if you forget to enter an argument, for instance; it just gives a failure message (i.e. it crashes), and I'm fine with that, since this was just something I made quick and dirty to bother Jaxen. So let me show you how simple this can be and still work..." Claude earperks. BunnyHugger says, "Coon-bot's action is 'cbt.' So I just did: @link cbt=$nothing , meaning that the action is linked to do-nothing.muf and thus will 'succeed' when I perform it, and then when the success triggers, this bit of MPI 'goes off': @succ cbt={force:#24019,{&arg}}" ck(#20218E) Owner: Claude Type: EXIT/ACTION Key: Claude(#19879PBCJM1) Chown_OK Key: *UNLOCKED* Container Key: *UNLOCKED* Force Key: *UNLOCKED* Success: {null:{force:#20219,{&arg}}} Created: Tue Feb 23 00:50:47 PST 2010 Modified: Tue May 4 08:57:22 PDT 2010 Lastused: Tue Sep 18 00:36:57 PDT 2012 Usecount: 1873 [ Use 'examine =/' to list root properties. ] Memory used: 234 bytes Source: Claude(#19879PBCJM1) Destination: do-nothing.muf(#108FLVM3) BunnyHugger says, "Force: is the MPI force command, and &arg tells it 'the argument that was entered,' meaning whatever I put in after 'cbt'. The number is, of course, Coon-Bot's DBREF#." BunnyHugger says, "So I do get an angry message if I forget to enter an argument." You say, "Mine is wrapped in a call to {null}." BunnyHugger says, "If I just type 'cbt' I get an MPI exception: '(@Succ) {FORCE}: Null command string. (arg2)'" Joshua nods, "Even with that simple command, though, I would lock the action me&!me, and then set the MPI on @fail. This is because @suc launches do-nothing, and while do-nothing does do nothing, it still bothers to launch a program. BunnyHugger says, "But you still link it to $nothing, correct?" Joshua ruffs, "Or rather, the action launches do-nothing when successful." BunnyHugger says, "Because it has to be linked to something, of course." Joshua ruffs, "Certainly. You don't want someone chowning your unlinked action" BunnyHugger says, "Right." BunnyHugger says, "In any case, you'll all learn lots more about MPI from the Professor here. It really is not my strong suit." BunnyHugger says, "But you will run across it everywhere. Anytime you see those tell-tale curly braces you're probably looking at MPI. You probably have some in your desc, I'd bet. Most folks do." You say, "{list:redesc} is used for any desc longer than a couple of lines, I bet." Joshua nods, "And most users also have the looknotify+ macro. Joshua {looknotify+}{eval:{muf:$mpi-color,{list:redesc}}} BunnyHugger says, "Yes, descriptions are one place you can have it." Joshua ruffs, "I don't really remember $mpi-color being in there, but maybe that's a relatively recent addition." BunnyHugger says, "Then it runs when someone looks at the thing/room/you. >:)" BunnyHugger says, "I wrote my Bugglizer using it, which is the most MPI I've ever written." BunnyHugger says, "It alters my description based on randomly selecting clothing from a few lists." BunnyHugger says, "And it also uses that to create a message so folks know what I changed into." BunnyHugger says, "But I gotta say, I like MUF loads better." Joshua nods, "I do as well." BunnyHugger says, "OK! So, that's my little lesson about zombies and their nature and how to command them. You have a couple of examples of MPI that can be used on them, and an explanation of why it might be less system intensive to use the @fail rather than @succ to run your zombie MPI, even though to be honest I was taught to use @succ and, er, always have." BunnyHugger ahems. BunnyHugger says, "Hopefully from this you've also learned some stuff about force-locks, chown-locks, and a little bit about what MPI is." BunnyHugger says, "As well as the Z and X flag. So that was kind of my list of goals for this lesson." Joshua nodnods. Claude nod nod nods! Beltrami nods. Claude noses Beltrami. BunnyHugger says, "If we had time I'd have gone on to talking a bit about rooms, but our time is up. So, my homework assignment for you for next time is to build a zombie without using the zombie-hammer program. In other words, taking the steps to build a zombie from scratch." You say, "What if we already did that?" BunnyHugger says, "Well! Then you're ahead of the game and you can just bring your friend with you. n.n" Beltrami nods. BunnyHugger says, "Next time, we'll begin learning stuff about making structures, i.e. rooms. This is a big topic because a lot of people really don't understand it as well as they could, and thus don't get the most out of the environment rooms." Claude giggles. BunnyHugger says, "I did building stuff for years before I realized what environment rooms really are." BunnyHugger closes her notes. "Class is dismissed for now! We will meet again next week."