BunnyHugger writes on the board: "I. Properties, II. Success, fail, drop messages, III. Making a fun THING, IV. Zombies (if time)" Beltrami steps off of the floating disk that carried her up. Beltrami has arrived. Beltrami waves hello! You say, "Hello!" J.P. will be quite laggy - celebrating his player's Dad's birthday. Austin says, "Oh, happy birthday once removed!" Claude hurriedly starts logging. Beltrami grins. Casandro steps off of the floating disk that carried him up. Casandro has arrived. Beltrami waves to Casandro! Casandro says, "Servus" Claude wavewaves! Casandro says, "Ohh Beltrami, long time no see!" J.P. pets Beltrami. BunnyHugger looks down at herself. "Oops, I still have my weekend partying outfit on. That's embarrassing." BunnyHugger says, "Welcome to class everyone." Chandra pets on Claude with the arm that isn't in a sling. Garrison waves to Bel Claude nuzzles Chandra. o.o "What happened to you?" Chandra grins. "I got fixed up," he says with a chuckle. Garrison smiles and offers Beltrami the desk next to her's. BunnyHugger says, "Last time's homework was to create an object and give it a description, to get it ready for having an action put on it during today's lesson. If you didn't bring one that's OK, you can make one at your desk during the lesson. But, did anyone bring a THING type object that they'd like to show the class?" Beltrami sits beside her. BunnyHugger adds, "Last time we learned that 'THING' is one of the main object types on the MUCK and in fact it's the most basic one with the least special properties." Chandra says, "Sometimes the cure is a little more painful than the disease, but is worth it in the long run. Nice to have my own body back, for the most part."" Chandra quiets down. Beltrami nodnods to BunnyHugger. Claude lifts a paw. BunnyHugger says, "OK, Beltrami first. What did you bring for the class, Beltrami?" Beltrami taps on her palette and brings up a half-ellipsoid about two feet tall at the highest, and sets it beside BunnyHugger. Beltrami drops You Are Here Map. The map base is half an ellipsoid, skinny like a football, with the tall end poking into the air. The surface is a powder-blue matted surface, with several silvery patches, reflectie, and inviting a touch. GreenKai bounces a large ball on the ground, and smiles. BunnyHugger says, "Class, notice that if you examine the You Are Here Map, all it's going to tell you is that Beltrami owns it. 'ex you are here' should do it." Owner: Beltrami Garrison nods BunnyHugger says, "But if Beltrami examines it herself, she'll get allllll the goods on it, like what TYPE it is, its flags, and all its properties." BunnyHugger says, "It's probably type THING, which is just a basic object." Beltrami nods. BunnyHugger says, "By the way, 'here' and 'me' are universal variables the MUCK recognizes, as most of you probably already know. 'me' is the person using the command and 'here' is the location you're in." BunnyHugger says, "So 'ex here' will give you the owner of the current room." Owner: Argon BunnyHugger says, "You can also use the name of an object or exit that's in the room with you, or a DBREF number of something that isn't (or that is ambiguous, like if there are 3 things in the room with the same name)." BunnyHugger says, "Very good Beltrami! Thanks! Claude, what did you bring?" J.P. drops SquirrelPlushie. GreenKai writes down dutifully on her pad: /* here = here */ Dropped. J.P. grins. A small hand-knit squirrel plushie with a cookie. Image: http://d.facdn.net/art/jpt/1247060159.jpt_squirrel_plushie_1.png J.P. says, "Cute." BunnyHugger says, "Ooh, a cuckoo clock, but cats. Neat!" You say, "Likewise!" Casandro smiles. You say, "And thank you." BunnyHugger looks at J.P.'s plushie. "Ah, a stuffed animal, that was almost going to be my own example, but I ended up bringing my camera instead." BunnyHugger says, "Oh, I see, your plushie is actually a zombie." SquirrelPlushie pads over to BunnyHugger. BunnyHugger says, "I can't see its flags myself, but I know it's a zombie because 'WhoSpe' notes zombies and puts them on the list of people present." SquirrelPlushie chitters. BunnyHugger says, "Zombies are actually type THING just like the map and the clock, but once set as a Zombie (@set [item]=Z), they have the special property of allowing their owner to listen through them." Chitter sulks. BunnyHugger says, "Chitter is a Zombie too, of course." SquirrelPlushie pets Chitter. BunnyHugger says, "GreenKai, did you bring something?" GreenKai points to the ball on the ground. GreenKai picks up the large bouncy ball. GreenKai bounces a large ball on the ground, and smiles. BunnyHugger says, "Aha!" Beltrami waves to the ball! BunnyHugger says, "Toys are a good example to use for the little exercise we'll do in a bit." Casandro giggles at Beltrami. This green- and purple-striped bouncy ball is made for bouncing! Just give it a push and off it goes . . . just be careful not to let it get away from you! BunnyHugger says, "But first let me back up and give a bit of explanation. I made tables!" BunnyHugger says that as though she were ridiculously proud of her tables. And perhaps she is. Chandra also has an object to share, though its type has pretty much been reflected already. BunnyHugger says, "Oh, what did you bring, Chandra?" Chandra drops DSD/H-MK1. BunnyHugger says, "Ooh, that looks fancy." Chandra holds up a very small, matte-gray cylinder (LOOK DSD/H-MK1) You see a small, matte-gray cylinder about two-inches in length and about a quarter inch in diameter. It's smooth, cool to the touch, and has a small ochre-colored area near what might be called the 'mouth' of the device, which is sealed. You can see a tiny number on the side of the cylinder. There is a little window where you can visually check to see if the cylinder has anything in it. There is a small blue and gray area on the device. When you press the gray area, you see an Augmented Reality display that has some instructions, along with the word 'DSHDISPENSE'. INTRODUCTION TO THE DEHYDRATED SUSTENANCE DISPENSER/HYDRATOR -- MACHINE TYPE 8012 The Dehydrated Sustenance Dispenser/Hydrator is a device which is capable of dispensing and hydrating, all in one action, a small food tablet stored within the dispenser's internal magazine storage. In addition, the dispenser can be used to hydrate food items stored in tablet-form not dispensed by the magazine up to dimensions determined by model (with Feature Code 1408). Each model has different serving, storage, and hydration capacites. The Dehydrated Sustenance Dispensor/Hydrator Mark I (Model 100) is designed to store up to sixteen dehydrated food items in tablet form and rehydrate these and other tablets up to 1/8" thick by 1/4" in diameter. USAGE - DISPENSE AND HYDRATE FROM INTERNAL MAGAZINE To use the Dehydrated Sustenance Dispenser/Hydrator, place your finger on the ochre-colored area. This will begin the dispense and hydration process. The dispense and hydration process may take up to 30 seconds to complete, is totally silent, and generates no light, heat, or energy signatures. USAGE - HYDRATE TO EXTERNAL SOURCE To use the Dehydrated Sustenance Dispenser/Hydrator on external food tablets requires a slightly different procedure. Note that you must have Feature Code 1408 installed on your DSD/H in order to perform this action ... BunnyHugger looks a little intimidated by the technology. Casandro drops invader. BunnyHugger laughs at Casandro's homework. Casandro holds up a small matte-gray cube. BunnyHugger says, "I'm a little worried about you having that thing in the room, Casandro. >;)" Casandro looks at BunnyHugger, "Why?". A perfectly cubical black cube. BunnyHugger says, "'Cause I watched Doctor Who last night." Chandra says, "It's just a simple device that 'dispenses cakes.' of varying kinds. It was intended as a roleplaying device. It can't actually create cakes, since there's no MPI equivalent for 'mkobj' or '@create'" Chandra says, "Otherwise, I would have it create a cake in the player's inventory or, perhaps, on the ground. " BunnyHugger says, "Actually, you can probably use it with the 'makefakemunchies' program!" BunnyHugger says, "Hang on, here it is, 'fakemunchies.muf'" Chandra says, "Yeah, I've just recently started looking at a lot of the programs available via the @Plib facility."" BunnyHugger says, "So this is instructive, 'cause I found it in the public library." BunnyHugger says, "The public library is a library of MUF programs that anyone can use. You can attach them to actions you create, as we will do later, and they can do stuff for you." BunnyHugger says, "You can bring it up with 'plib' or search for a specific keyword or program with 'plib [keyword]' like I just did with 'plib fakemunchies'." Chandra chuckles. "So, this was one of the first complex objects that I created. I'll have to get it back to its owner at some point since I just 'borrowed' it." BunnyHugger says, "Good! All right, let me move on to my lecture." BunnyHugger says, "Last time Joshua suggested I ought to draw a chart to show what happens when you link what to what." BunnyHugger says, "@link is the command that links two database objects together, but what it does depends on types involved. Particularly, @linking actions can cause different effects depending on what you link them to." BunnyHugger says, "The basic syntax is '@link [item 1]=[item 2]'" BunnyHugger unrolls a chart. | Player | Thing | Room | Action | Program -------------------------------------------------------------------------------- Player | X | X | Sets home | X | X -------------------------------------------------------------------------------- Thing | Sets home | Sets home | Sets home | X | X -------------------------------------------------------------------------------- Room | X | Sets dropto | Sets dropto | X | X -------------------------------------------------------------------------------- Action | X |Summons thing| Creates door |Performs next| Runs program | |Or enters it | | action | -------------------------------------------------------------------------------- BunnyHugger stands there beaming. Casandro applauds. BunnyHugger says, "X means it's meaningless or impossible." SquirrelPlushie perches on GreenKai's head. Claude proceeds to copy the chart. BunnyHugger says, "So in the left column is 'item 1' from my above example, and the horizontal top row is 'item 2.'" GreenKai blinks sleepily, then looks up, patting around her ears. SquirrelPlushie chitters! BunnyHugger says, "So let me explain some of this stuff since this is shorthanded." SquirrelPlushie offers coffee? BunnyHugger says, "In the first row, Player, the only thing you can really do that has any meaning is link a Player to a Room." BunnyHugger says, "So I say that 'sets home' -- which -- you all know what your home is, right?" You say, "Sure!" BunnyHugger says, "So @link me=here sets your home to that room that you're in." BunnyHugger says, "However, you can only do this if you either own the room or the room is set with the flag A, 'Abode.'" BunnyHugger says, "Abode means anyone can home there. >:)" BunnyHugger says, "Now looking at the second column, you see something similar going on, but a Thing can be homed in a player or another thing as well as in a room. For instance, you could set one of your possessions' home to yourself, so it would always come home to your inventory if swept or dropped." GreenKai already has hot chocolate! She sips at it, while trying to copy down the graph. BunnyHugger says, "At the end of the Olympic events I would always badger people to '@link medal=me' which meant I was asking them to set its home to themselves so it would go back to them if lost." BunnyHugger says, "Or, Chitter could have a possession that homed to him, which would be an example of a THING having another THING for its home." Beltrami nods. BunnyHugger says, "By the way, there's no bottom column for 'program' because the whole thing would be Xs. Programs can't be linked to anything, though stuff can be linked to programs." BunnyHugger says, "Er, bottom row." BunnyHugger says, "OK, so the bottom two rows get more complicated..." BunnyHugger brings it up again. | Player | Thing | Room | Action | Program -------------------------------------------------------------------------------- Player | X | X | Sets home | X | X -------------------------------------------------------------------------------- Thing | Sets home | Sets home | Sets home | X | X -------------------------------------------------------------------------------- Room | X | Sets dropto | Sets dropto | X | X -------------------------------------------------------------------------------- Action | X |Summons thing| Creates door |Performs next| Runs program | |Or enters it | | action | -------------------------------------------------------------------------------- BunnyHugger says, "In the third row we see what happens to link rooms to things. The only two things that make sense there are linking a room to a thing or to another room. In either case it sets the room's 'dropto.' Anyone know what that means?" BunnyHugger says, "Anyone? ... Anyone? ... Chitter?" Chitter says, "What?" Chandra giggles madly at something he's written on his paper. Chitter says, "I'm not listening to any of this incomprehensible mumbling." Claude raises a paw. Chandra says, "It basically means that whenever you drop an object, it just goes there, if I recall."" BunnyHugger says, "Claude?" Austin says, "I do, but I got to look at her notes last night." You say, "Anything dropped in that room immediately goes elsewhere?" BunnyHugger says, "Claude and Chandra are both right." BunnyHugger says, "With a small exception that I'll note for technicality." Chandra says, "It's the ultimate in making sure you don't have a bunch of garbage in your rooms." BunnyHugger says, "When you drop an object in a room with a dropto, the object gets sent there. So if you don't want untidy stuff lying around in your property, you could send it to a lost and found." BunnyHugger says, "But! If you set the flag STICKY on the room and it has a dropto, then it has an interesting behavior." You say, "In text adventures, it's used for locations without a floor, such as high in the branches of a tree." BunnyHugger says, "STICKY will cause the dropto to be delayed until the last person leaves the room." You say, "Ooh!" BunnyHugger says, "That could be used if you want people to be able to drop stuff to show each other in a room like this classroom, but want it tidied up after class if anyone forgets anything." Casandro ohhs. BunnyHugger smiles. Garrison nods BunnyHugger says, "OK, last row, action/exit. That's the big one." BunnyHugger says, "Just to review from last time: action/exit are special kinds of objects. What makes them special is that they have to be 'attached' to something. So when you create an action, it's always attached to something -- usually, a room, yourself, or a thing. But then after it's attached, it also needs to be @link-ed to a second object in order to do anything." BunnyHugger says, "For the most part, what the action is attached to doesn't matter for its behavior, rather it's what it's linked to that matters. But there is an exception that I'll cover." BunnyHugger says, "So, second column -- linking an action to a thing. This has two possible results. Most of the time, it pulls the thing to you. Like if I had an action on me called 'chittercome' and @linked it to Chitter, then when I did 'chittercome' Chitter would be summoned to my inventory." BunnyHugger says, "Last time Royce explained he uses that to call Reggie to him." BunnyHugger says, "But! There's a weird special case." BunnyHugger says, "If an action is attached to a thing and also @linked to the SAME thing, AND if that thing has the VEHICLE (V) flag set, then it causes you to go inside that thing." BunnyHugger says, "This is the really primitive way to make vehicles, a relic of the old days." You say, "To the Catmobile!" J.P. grins. Chandra says, "Otherwise, if you link an action to yourself, it just complains that you would create a paradox since you'd suck yourself into your own inventory, which is 'impossible' within the context of the object framework." Casandro looks around for Bdam Vest. BunnyHugger says, "I'd reckon almost no one on the MUCK with a vehicle uses this method. Most people create vehicles using more sophisticated methods that have been built by programmers on the MUCKs over the years." BunnyHugger says, "It is on MUCK. On MUSH, fun fact, you can get inside your own inventory." J.P. blinks. Featherwing steps off of the floating disk that carried him up. Featherwing has arrived. Chandra nods. "That I've heard!" J.P. wavies. BunnyHugger says, "I used to do it as a parlor trick." Beltrami waves to Featherwing! BunnyHugger says, "You have to teleport to inside an object you're carrying and then leave the object." Chandra says, "I've also heard that you could enter other people's inventories on a MUSH if you were within an object that was in their inventory. But, I digress."" Austin says, "S'true. Chitter's tail used to have a love parlor." You say, "Hello!" Featherwing nosenoses those that want one and quietly sits down. BunnyHugger says, "You can, Chandra, and even more basically, on MUSH players can set themselves as vehicles and be enterable by other players; and players can literally pick up and carry others around like objects." GreenKai yays, "Objectification!" BunnyHugger says, "Yep." BunnyHugger says, "You have to @lock yourself on MUSH to stop people picking you up. It's a way to annoy newbies." Chandra is about to say something, then decides it would just take things off topic and instead quiets himself. BunnyHugger says, "OK, sorry, that's a digression." BunnyHugger says, "On MUCK, in any case, you can't do that kinda stuff and @locking yourself means something different. >:)" BunnyHugger says, "OK, so if an @action is linked to a room, it makes a familiar door. Often the action will also be attached to a room, but it can be attached to a thing or a player and work the same way." Niny'ah steps off of the floating disk that carried her up. Niny'ah has arrived. Claude waves. Niny'ah slinks in, apologises for tardiness BunnyHugger says, "So you could have a personal exit on yourself -- I have one on me that is attached to me but linked to my park so I can take a shortcut home -- or on an object." Beltrami waves to Niny'ah. BunnyHugger says, "Basically, where it's attached just determines where it's accessible. If it's on you, then only you can use it. If it's on the room, anyone in the room can use it. If it's on an object, then anyone carrying or in a room where that object is dropped can use it." BunnyHugger says, "The next column there is 'link an action to another action.' I had no idea this was possible until I was writing a MUF that checked what kind of thing an action is linked to. That was the first time I learned an action can be linked to another action, which boggled my mind." BunnyHugger says, "Prof. Joshua would probably be able to tell us what the devil that's actually good FOR, but I have no idea. I know what it does but not an example of why you'd use it." BunnyHugger says, "IT just basically causes the next action to do whatever it does." BunnyHugger says, "Making a chain reaction." Chandra says, "So it's almost like an alias to some other lower action." Casandro raises his hand. BunnyHugger says, "Right." BunnyHugger says, "Casandro?" Casandro says, "Can you make circular links then? What happens then?" BunnyHugger thinks about it. You say, "Maybe you can put an osucc/odrop with MPI in it on the first action, thus "wrapping" the second." BunnyHugger says, "I tested it!" BunnyHugger says, "It won't let you." BunnyHugger says, "'Destination action1(#192E) would create a loop, ignored.'" Chandra says, "Big question would be if an owner creates Action A (Room) and Action B (Object Somewhere Else), owns Action A and Action B, and a player actuates Action A, does the subsequent linked action execute as if it'd been run by the Executing player or the Owning player? The other question is, let's say Action B(Player-based action). Would Action B then become accessible to the Executor via Action A?""" Casandro says, "Ahh OK." Chandra says, "Because in that case, it becomes very useful if you want to write Private Actions that are accessible only in a Protected Means (i.e. another player linked action, if that's possible)" Chandra says, "Or, to have Public Accessors touch private actions in a controlled way." Niny'ah...ow GreenKai bops a little to her memory of "Chain Reaction", then has a thought, "I can't use that to make an object that makes me go to another person at their request, right? It can only affect the person triggering the action?" You say, "Something tells me it wasn't all that well thought out, Chandra. :)" GreenKai also wonders if it would stop you if you had three objects to create a loop. *grin* BunnyHugger says, "I THINK it will only have your permissions rather than that of the other action's owner, Chandra, but I admit I have not thought through all the complexities of this issue." Chandra says, "Actually, Kai, I did try linking an action on myself to myself. The MUCK object framework did cry paradox." BunnyHugger says, "Now GreenKai, actions can't be used to summon players the way they can be used to summon things, so I don't think that would be possible." Chandra chuckles. Dragoncat says, "I think even if you managed to make an infinite loop, the program would break it after so many iterations." GreenKai awws, "But I wanna be a genie-norn!" Chandra cackles. BunnyHugger says, "There are definitely some interesting technicalities here, but, for the sake of the folks who are just beginning learners, I'd like to set those aside for now. We can ask Prof. Farstrike if he attends a future class." Austin says, "I should expect so, but I'm not sure which setting is used for this, and I'd like people to test such things on the development muck if they're going to because I would really rather we not return to crashing SpinDizzy in experimentation." Chandra says, "Oh, is there a PTR?" BunnyHugger says, "Yes, by the way, I tested that loop theory on my private MUCK, not locally, so Austin doesn't have to give me a worried look." BunnyHugger says, "Weird and fun fact that's not really all that useful, but something I discovered while writing DoorCheck.muf:" BunnyHugger says, "An action can be linked to only one of the following group (player, program, room), but (at the same time) to an unlimited number of things and exits." BunnyHugger says, "Things and other actions, that is (since exit/action is the same thing)." You say, "So that's why you can link an action to another." BunnyHugger says, "To link an action to multiple things, you use pipe. @link action1=chitter|camera would link an action to both Chitter and my camera, and would summon them both when I ran it." You say, "Because if you link it to several at the same time..." Chandra says, "I guess that's what some of the internet guides mean by 'Multi-Action'" BunnyHugger says, "Most likely!" Chandra says, "Does different things based on certain preconditions -- perhaps linking is one of them, but I digress again." BunnyHugger says, "Finally, linking an action to a program runs the program. Those of you who have any actions linked to stuff in the library already know that. Like, I have a private action that runs karaoke.muf for me." BunnyHugger says, "That'll be how you'll really create sophisticated stuff!" BunnyHugger says, "Like if Chandra wanted to make his machine actually give you a cake, he could link an action on it to fakemunchies.muf (and follow the other directions for setting up that program)." BunnyHugger says, "OK, let's move on. I want to say a few things about properties, then move to our main topic for today, success and failure messages." fluffy snugs Niny'ah, from afar! BunnyHugger says, "All objects have properties, which are bits of information that are stored on the object and used by programs and by the basic commands of the MUCK for various things. Basically, they 'describe' the object and set the messages for that object. Your descriptions are all actually a property on you that the built-in look program knows to retrieve." BunnyHugger says, "Same with your sex. Species is not actually an idea built in to the MUCK architecture, but it's a really common property on furry type MUCKs, for obvious reasons. So that is also a property. And if you examine yourself you'll probably fine properties used by other programs here." BunnyHugger says, "ex me=/ -- that will show you all the properties (or directories of properties) that are on you!" - dir /_/:(no value) - dir /_bbsread/:(no value) - dir /_board/:(no value) - dir /_fake/:(no value) - dir /_feel/:(no value) - dir /_hand/:(no value) - dir /_images/:(no value) - str /_lastmorph:Captain Kitty - dir /_meet/:(no value) - dir /_morph#/:(no value) - dir /_page/:(no value) - dir /_prefs/:(no value) - str /_receive_ok:yes - dir /_reg/:(no value) - str /_regmorphs: OWL captain - str /_scent:Claude smells of vinyl, ink and oranges. Why oranges? Good question. - str /_sweep:sweeps the sleepers with an invisible broom. - str /_swept:scampers home with a flustered "Meow!" - dir /_tel/:(no value) - str /_throw_ok:yes - dir /_ui/:(no value) - dir /_verbatim/:(no value) - dir /_whisp/:(no value) - str /_xcondbref:10473 - str /_xconecho:y - str /gender:male - dir /muckstat/:(no value) - int /ratpoints:5 - str /redesc#/:3 - str /reflist:#3 #4 - dir /RIDE/:(no value) - dir /rose/:(no value) - str /sex:male - dir /snow/:(no value) - str /species:LOLcat - int /testlist#/:1 - dir /whereis/:(no value) - str /~status:meow 38 properties listed. BunnyHugger says, "I have toooooons of them that various programs have set on me." Chandra says, "You can also use lsprop me=/; they both do the same thing, just different ways of doing it." BunnyHugger nods. fluffy polishs Beltrami, from afar! BunnyHugger says, "Also, to see the subdirectories, you end with a trailing slash. So, 'ex _fake/' for instance will show me all the stuff in my _fake directory of props." BunnyHugger says, "I used that as an example to point out that properties are what the fake object program uses. Last night someone in the Rose Garden asked what's the difference between a real and fake object. Well, this is it! A real object is a database object with its own DBREF#. A fake object isn't an object at all -- it's a property that is stored on the person 'carrying' it or the room 'holding' it." BunnyHugger says, "That's why a room has to have a special permission set to allow dropping fake objects in it; because basically in dropping the object what you're really doing is writing a property onto it, which you normally can't do with stuff you don't own." Niny'ah says, "huh" BunnyHugger says, "Fake objects were invented to try to prevent database bloat -- people creating real objects just as decorations for their inventory when all they really wanted was a few lines of extra description." BunnyHugger says, "Now, properties are set a couple of ways. One way is, by programs or commands that you run. '@sex me=female' actually is a shortcut that tells the MUCK to set a certain property on you. Same with @desc." BunnyHugger says, "The other is manually! Props are set manually using the command @set. '@set me=species:Devilbunny' sets the property 'species' with the value 'devilbunny' on me." Royce steps off of the floating disk that carried him up. Royce has arrived. Beltrami smiles to Royce. You say, "Hello, Royce." BunnyHugger says, "You can also set subdirectories: '@set me=exampledir/example:boring example' would create a directory (or add to an existing directory) called 'exampledir' and in it would give me the prop 'example' and the value 'boring example'." Royce churrs, "Hello." Casandro waves to Royce. BunnyHugger says, "Now, a lot of properties are just things that custom programs, like the ones in the plib, use." BunnyHugger says, "Like, to put preferences on yourself for how the program should run, for example." BunnyHugger says, "But, what I want to focus on for the rest of our lesson, is the special properties known as success, failure, and drop." BunnyHugger says, "These properties can be set with shortcuts that all MUCKs use." BunnyHugger says, "So how many of you have used @success and @osuccess before? I usually abbreviate them @succ and @osucc, which also works." Claude raises a paw. Royce has. Austin says, "Used as in done something which used them, or used as in created something which used them?" Casandro raises a paw and adds, "But only with editroom.". BunnyHugger says, "Used as in created something that used them. We've all DONE something that used them, probably more often than we realized. >:D" Niny'ah headshakes, hasn't had cause BunnyHugger says, "OK! Many have, some haven't." Beltrami raises a hand. BunnyHugger says, "Claude, what have you used them for?" You say, "Most of the time, for setting messages on exits." BunnyHugger nods. BunnyHugger says, "That's the most common use!" Casandro nodnods. Claude tilts his head at Beltrami. BunnyHugger says, "On an exit/action, @success and @osuccess determine the message the action gives when you use it -- or rather, just before you use it." GreenKai points to her ball, "It's successful, too!" BunnyHugger says, "Anyone use it for anything besides setting messages on actions?" Beltrami nods! BunnyHugger says, "Beltrami?" Claude lifts his paw again. Beltrami tugs her shirt and taps her sneakers together. Claude peeks curiously. Chandra raises his hand. You say, "For when you dress/undress?" BunnyHugger says, "Oh, you use a @success property to dress?" Beltrami nods. Chandra says, "Had to use the osucc/ofail messages as part of making the DSD/H-MK1 and the Nondescript Bar" BunnyHugger says, "With MPI, I'd guess?" Beltrami nodnods. GreenKai says, "If you pick it up or drop it, it does stuff. I don't think it can fail, though." BunnyHugger says, "Yes, the other thing @succ/@osucc can be used for -- kind of beyond what the original designers probably realized it'd be used for! -- is to run MPI programs that can do lots of stuff." BunnyHugger says, "And GreenKai is also right. Success messages also will be given when you pick up an object." BunnyHugger says, "Although for dropping an object, another property called @drop is used." BunnyHugger says, "To elucidate all this, I HAVE A TABLE!!!1!" You say, "Which could fail, if you were locked out of picking it up." BunnyHugger says, "Correct." BunnyHugger unrolls another chart. | Player | Thing | Room | Action | Program -------------------------------------------------------------------------------- succ/osucc | Robbed | Picked up | Looked at |Before using | Picked up -------------------------------------------------------------------------------- drop/odrop | Killed | Dropped |Object dropped| After using | Dropped -------------------------------------------------------------------------------- Casandro ohhs at the chart. BunnyHugger says, "OK, so let me explain all this." BunnyHugger says, "This is the conditions under which the succ/osucc and drop/odrop messages are displayed." BunnyHugger says, "By the way: the 'o' means 'what other people see.'" Featherwing has a headache and must wait for the log, excuse me... Niny'ah says, "OtherSucc" Chandra nods. Niny'ah says, "Succ/Fail are Self message" Featherwing flutters off to his home... Featherwing has left. BunnyHugger says, "So, @succ [obj]=You do something successful! -- shown to the player. @osucc [obj]=does something successful! -- shown to the room. Name is always put first, so don't duplicate it." BunnyHugger says, "In osucc/odrop/ofail, the name of the player will be prepended. In succ/drop/fail, it isn't." BunnyHugger says, "So Niny'ah is right, it's O for Other." Claude copies this chart as well. Garrison nods BunnyHugger says, "So in this table, on the left we have succ and drop, and on the top row we have what kind of object you're setting it on." Royce churrs, "DIdn't there used to be another one? Live @vsucc or something like that?" BunnyHugger hrms. "I don't know that one!" Royce churrs, "I guess it doesn't exist, but I could have sworn that it did." BunnyHugger says, "It might have been a global..." Chandra says, "Maybe it was a custom message type for a specific program?" BunnyHugger says, "Sometimes the globals mimic the syntax of the built in property setting commands." Royce churrs, "It was like 'victim success', where it was the message shown only to the person that the action was done to." J.P. has disconnected. SquirrelPlushie falls asleep. BunnyHugger hrms. BunnyHugger says, "That makes sense as something that ought to exist, but I've somehow not heard of it." Chandra says, "So, for example, if you were robbed." Austin says, "Oh, yes. I think there's an echo of it in the custom hug settings." Austin says, "How you *can* set hug/ohug/vhug, but nobody sets vhug because *gads* it's too much work." Royce checks Furrymuck, but it doesn't exist there either. Royce churrs, "That must be what I'm thinking of, then." Austin says, "You set the vhug on yourself so that when you're hugged, you get that message." BunnyHugger says, "Sure sounds like it SHOULD exist, but I don't know of it!" BunnyHugger says, "So speaking of robbing, there's something a lot of people don't know exists." BunnyHugger says, "I can't rob Austin because I robbed him blind last night." Austin says, "Give it a try again. I just created some wealth." BunnyHugger says, "He only had four boms bom and I robbed him until I had all of them." BunnyHugger says, "Yay!" Chandra chuckles. BunnyHugger says, "Who wants money? Just 'rob austin' for some!" Austin says, "Go on, folks, give it a go." Chandra says, "Austin, apparently you're now object type ATM." Casandro yays. Royce hmm. "Yeah, I must have been thinking of vhug and such. Ah well." GreenKai giggles, "Try me! Casandro filches a few shinies from the unsuspecting norn. Austin hehs. BunnyHugger says, "Yes, in a weird relic of the MUD progenitors, you can in fact rob people of money." Chandra says, "Also, if you @lock yourself, you can't be robbed, from what I understand." BunnyHugger says, "However, if you lock yourself, then they can't." BunnyHugger says, "That's what @lock does here on MUCK." BunnyHugger says, "So @lock me=me sets your lock to 'only me' so no one else can rob you." Locked. BunnyHugger says, "If you leave yourself unlocked anyone can do it. Or, you can set it so only your pals can do it." BunnyHugger says, "I have my lock set to 'me and Austin' as a romantic gesture. You can set multiples with pipe, and you use asterisk to prefix player names. So '@lock me=me|*austin' is how I set that." GreenKai says, "There isn't a kill-lock, though?" Chandra says, "Locks are also great for other types of objects, too." BunnyHugger says, "The equivalent is to not be set K." Royce churrs, "Now you want to be careful of robbing people, too. I've seen instances where someone has set their rob @ofail message as something particularly nasty. So that's why I rarely rob people." BunnyHugger says, "Setting K allows being killed." Chandra says, "I think you just do @set me=!K" GreenKai says, "Right, but it can't discriminate is what I meant." BunnyHugger says, "It defaults off." Chandra says, "Don't think so." BunnyHugger says, "No, you're right, it can't. I don't think there's a way to do that." BunnyHugger says, "OK, so checking out the chart..." | Player | Thing | Room | Action | Program -------------------------------------------------------------------------------- succ/osucc | Robbed | Picked up | Looked at |Before using | Picked up -------------------------------------------------------------------------------- drop/odrop | Killed | Dropped |Object dropped| After using | Dropped -------------------------------------------------------------------------------- Casandro dawws at Royce and hands him a shiny voluntarily. Royce yay! "Thanks!" BunnyHugger says, "Succ/osucc on a player gives the message to the robber and to the room when you're robbed. Drop/odrop on a player gives the message to the killer and the room when you're successfully killed." BunnyHugger says, "On a thing, succ/osucc is the message when you pick up that thing. I could, for instance, do '@succ chitter=You pick up Chitter! He bites you for your trouble!' and '@osucc chitter=picks up Chitter! He looks really angry!'" BunnyHugger says, "Enter 'help %N' if you want to know how to do pronoun substitutions in messages, like if I wanted to say 'picks up Chitter! Chitter bites [appropriate pronoun]!'" Royce churrs, "I saw that on FM once. Someone set the @fail for rob as something innocuous, but the @ofail as something very much not appropriate for public spaces. I also don't use rob because anyone that I try to use it on usually has no sense of humour and has locked themselves already." Claude wraps his tail over his paws. o.o BunnyHugger says, "I'd think the wizards might not look kindly on a stunt like that, Royce." BunnyHugger says, "But I guess FM is basically a lawless post-apocalyptic world. >;)" Austin says, "Not perfectly lawless. I've seen wizards there in recent times." Royce churrs, "I'm not sure. I don't come out in public there much anymore. :)" Chandra says, "Would be amusing to use fail/succ on a rob action to tally up the number of robberies someone has committed" Chandra mutters something about global statistics, Big Data, and Analytics as he scribbles on a piece of paper. GreenKai killed GreenKai! GreenKai has left. BunnyHugger says, "And I could also put a drop message on Chitter: '@drop Chitter=You drop the troublesome squirrel.' '@odrop chitter=drops Chitter, with a look of relief.'" GreenKai arrives in the cable car. GreenKai has arrived. Chandra glances to GreenKai and chuckles. "Do you still have all your stuff on you? I believe when you're Killed, it goes back home, wherever that is. BunnyHugger says, "That's enough, GreenKai, I think we don't need any more suicidal tendencies around here. >;)" BunnyHugger says, "Chandra is correct." GreenKai giggles. Austin snickers. GreenKai says, "I tried to set a drop but I don't think it worked . . ." GreenKai only had fake objects and self-owned items anyway. Chandra chuckles. "Yeah, being killed can be annoying if you didn't link your stuff back to your home or to you, but I digress. Also, if someone kills you, you get Currency Units for it. BunnyHugger says, "No? I wonder why not?" Chandra says, "You may also spend Currency Units to kill someone; Wizards, however, cannot be killed, I don't believe. They're weird and mysterious like that." BunnyHugger says, "Wizards cannot be killed except when set Q." Royce churrs, "I thought that made them omnipotent and boring." Chandra chuckles. Garrison says, "Q can do anything." Royce churrs, "Except be an interesting character." Garrison nods Chandra says, "Anyway, back to the topic of success, fail, and drop actions..." You say, "It's hard to write such a powerful character well, in all honesty." BunnyHugger says, "Ah, now, I tested setting drop on myself and killing myself elsemuck and it did work. Did you '@drop me=Blah blah'? It's easy to miss in the spam of being sent home though." GreenKai says, "I had: str /_/odrop:makes the poor norn vanish in a puff of jingles and sparkles!" GreenKai says, "and an /_/drop and /_/fdrop too . . ." BunnyHugger says, "Ah, that's because that's not actually the prop for odrop." BunnyHugger says, "If you want to do it manually: '@set =_/odr:[text]'" BunnyHugger says, "But also '@odrop me=[message]' will set it." BunnyHugger says, "I know, I know, consistency. >;)" BunnyHugger says, "Now, back to rooms." BunnyHugger says, "Success determines what displays when you successfully 'use' an item. But 'use' is contextual." BunnyHugger says, "The weird thing is what counts as 'using' a room." BunnyHugger says, "And that's 'looking at it.'" BunnyHugger says, "So if you set a succ/osucc on a room, it fires whenever someone looks at the room, including when they walk into it." BunnyHugger says, "Weird, I know." BunnyHugger says, "This could be used for interesting effects, but it isn't very intuitive." BunnyHugger says, "But drop/odrop do what you'd think: they go off when someone drops an object in the room." BunnyHugger says, "Actions are the most common use of succ/drop messages. It's considered good building practice to always have them set on all your exits, and it's in the building code here actually." You say, "It's a lot more useful on a MUSH. They don't have lsedit, so you can use @succ on a room to add a second paragraph of description." BunnyHugger says, "Now, succ/osucc go off 'before' you take the exit/do the action, drop/odrop 'after.' If the action is a door, then 'succ' is what people in the room you're leaving see, and 'drop' what people in the destination room see." BunnyHugger says, "Here on SD, you can quickly set all that stuff generically with 'sge [exit]' which means 'set generic exit messages.' It's a global program here." BunnyHugger says, "And it says 'leaves for [name of room]' and 'arrives from [name of one you left]' or something similar to that." BunnyHugger says, "SGE also puts in generic descriptions of exits." You say, "It does?" BunnyHugger nods. BunnyHugger says, "It makes them 'On the other side you see... [desc of destination room].'" BunnyHugger says, "Or something close to that." BunnyHugger says, "'In that direction you see' maybe." BunnyHugger says, "Fun fact: technically the MUCK runs succ first, then osucc." BunnyHugger says, "Same with drop and then odrop, I assume. This is useful to know for advanced folks writing MPI because order can make a difference." BunnyHugger says, "OK, final column: Programs. The succ/drop stuff for programs is the same as though they were things." BunnyHugger says, "Basically what happens when you pick up the program object and when you drop the program object. It just treats them like normal things for that purpose." BunnyHugger says, "I bet this rarely gets set, because programs aren't usually chucked around like that. n.n" You say, "It's of little use, right?" BunnyHugger says, "Right. Just color if you like describing your programs as though they had an IC existence, which is a quirk I have." BunnyHugger drops SternLook.muf. BunnyHugger says, "Like that one. n.n" BunnyHugger says, "So! That's succ/drop stuff, but that leaves failure messages." Chandra says, "Weird." BunnyHugger says, "fail/ofail run whenever an object is locked against you and you try to "use" it (or when it cannot be used for any other reason). Since "use" is defined differently for different objects, fail/ofail are similarly contextual. The most common use is to give a message when a door action is locked. It also runs if you try to pick up an object that is locked (a good reason to lock your stuff if you want it to stay put) or if you fail in an attempt to rob someone." BunnyHugger says, "Oddly enough, you can 'fail' to use a room if you look at it when it's locked against you, but this has no significant effect other than causing the fail instead of succ to run after the room description. Despite what you'd think, it doesn't result in failing to see the room!" BunnyHugger says, "So this brings me around to the actual practical part of today's lesson." Chandra says, "Yeah, not being able to inspect the contents of a program within the world makes it of little use to have and In-World Object representations of them, sadly -- unless you just like flinging them around for fun. That would be neat if there were default read actions on programs so that people could use the action and just look at the code when it's in World-Instantiated object form, but I digress..." GreenKai drops SternLook.muf. BunnyHugger says, "Now that you know about succ/osucc, you have the information you need to make a working action on your object that you brought in today." BunnyHugger says, "Because the most popular way to make a very simple interactive element on your stuff is to create an action on it and use the @succ/@osucc messages to make it 'do' something." BunnyHugger says, "I have here a camera that's currently just a static object." Chandra drops SternLook.muf. BunnyHugger sniffs. "My sternlooker!!" GreenKai says, "Should've locked it!" Austin says, "Of all the things to be stolen you'd think that the most dangerous." BunnyHugger giggles. Claude gets a lightbulb above his head. BunnyHugger says, "So I'm going to put an action on my camera so that it makes a noise when I press the shutter." BunnyHugger says, "Let's say I'll call the action 'take picture'." BunnyHugger hrms. BunnyHugger says, "No, too ambiguous with 'take.' Let me call it..." BunnyHugger says, "'snap photo'" Niny'ah says, "Snap?" BunnyHugger grins. BunnyHugger says, "Yeah." BunnyHugger says, "So the first thing I need to do is create the action, which should be attached to my camera." BunnyHugger says, "'@action snap photo;snap;photo=camera' is what I just entered." BunnyHugger says, "The semicolons give you aliases for the same action." BunnyHugger says, "So I could do 'snap photo' or 'snap' or 'photo' and any of it would work." BunnyHugger says, "And it told me it created the action with dbref# 15945 and attached it to my camera." Beltrami has disconnected. BunnyHugger oopses. Beltrami has connected. BunnyHugger waits to see if... BunnyHugger ahas. Beltrami's ears wiggle. BunnyHugger says, "OK! So..." Claude paws at them! BunnyHugger says, "What will happen now if I do 'snap photo'? Anyone?" You say, "Nothing much?" GreenKai says, "The @succ for the camera will fire, if it's not locked against you?" BunnyHugger says, "It would, except..." Royce churrs, "Well, a bunch of people will hide, while the others will all make goofy faces." BunnyHugger says, "It's not linked to anything so it doesn't know what to do." BunnyHugger says, "I get 'You can't go that way.' which is a generic failure message." Austin says, "I believe it'd also change ownership to you, if you hadn't already owned it." BunnyHugger says, "I don't think it will -- I think it'd give a nonowner the failure message, BUT..." Austin says, "I may have this wrong. You can certainly chown unlinked exits, though." BunnyHugger says, "Yes. An unlinked exit can be chowned by ANYONE." BunnyHugger says, "So here's the wrong way to make my action, but a way people hit on sometimes by accident not realizing the problem with it." Claude raises a paw. BunnyHugger says, "Yes Claude?" Austin says, "Yes, I was wrong. It's chownable but it doesn't automatically change ownership." You say, "Last time, if I remember correctly, you said that actions and exits are actually the same type of object. Why, then, are there two different commands for creating them?" BunnyHugger says, "They amount to actually the same thing more or less... let me explain." Niny'ah says, "presets" You say, "Aah. *nod*" BunnyHugger says, "'@open [name]' is a shortcut for '@action [name]=here' -- it's just a quick way of saying 'I'm making an action and attaching it to this room.'" BunnyHugger says, "And it allows this additional parameter -- '@open [name]=[destination room #]' is also a shortcut for running two commands: '@action [name]=[here]' and '@link [name]=[destination room #]'" BunnyHugger says, "It's more useful in the context of building and making doors, but it's actually still the same thing under the hood." You say, "Right." BunnyHugger says, "So back to my camera. The wrong way to finish it would be to set a fail/ofail on it and leave it unlinked. That'd work, but would be dangerous." BunnyHugger says, "Because an unlinked action/exit has the weird quality of being chownable by anyone, so someone could chown my camera action if they wanted to be bothersome (or by accident maybe)." BunnyHugger says, "So what I want to do is to link it and put my camera action message on the @succ." BunnyHugger says, "But wait, link it to what? I don't actually want it to teleport me somewhere or anything like that, so what can I do to link it up but effectively not have the action DO anything?" Chandra says, "Link it against $nothing.muf." Chandra says, "Err, link it against $nothing, which I believe is global shorthand for nothing.muf." BunnyHugger says, "Indeed, that's why this silly trick of having a MUF that does nothing comes in." BunnyHugger says, "Almost all MUCKs will install a program called do-nothing.muf which has the alias $nothing." BunnyHugger says, "So you can link an action to it and thus safeguard the action from chowning, and then when you use it it 'successfully' runs the do-nothing program, but the real point is to get the @succ/@osucc to fire." BunnyHugger says, "So in my case I'm going to do this: @link snap photo=$nothing" Royce needs to get going for a bit. "Seeya later!" BunnyHugger says, "It says 'do-nothing.muf(#108FLVM3).' Good!" BunnyHugger says, "Er, it says 'Linked to do-nothing.muf(#108FLVM3).' that is." Beltrami waves to Royce. You say, "Take care, Royce." Royce has left. BunnyHugger says, "So now I can set messages on it!" BunnyHugger drops Stereo Camera. BunnyHugger snaps a photo with a satisfyingly old-fashioned clicking sound. Claude blinks at the flash. Garrison says,"Cheese!" GreenKai drops Cheese Wedge. BunnyHugger says, "There! I did '@succ snap photo=You snap a photo with a satisfyingly old-fashioned clicking sound.' and '@osucc snap photo=snaps a photo with a satisfyingly old-fashioned clicking sound.'" GreenKai take wedge Chitter snaps a photo with a satisfyingly old-fashioned clicking sound. BunnyHugger says, "Austin, would you like to try?" GreenKai hands Cheese Wedge to Claude. Austin says, "Oh, happily." Austin tries to snap a photo, but it's been coati-proofed! Austin aws! GreenKai giggles. BunnyHugger says, "Ha ha!" Casandro snaps a photo with a satisfyingly old-fashioned clicking sound. Garrison hehs Austin says, "We went through this with the coon-proof cookie jar!" BunnyHugger says, "Yes, we did." Casandro drops invader. [Connection froze here.] Casandro pokes the invader, it doesn't do anything. You say, "As a prank, I locked the action against Austin." You say, "'@lock snap photo=!*austin'" You say, "That says 'The lock is, you have to not be Austin.'" [And then I reconnected.] Claude sniffs the cheese. Hmm? Beltrami smiles to Claude. GreenKai grins, "It's dairyliffic!" BunnyHugger says, "Or if I only wanted me and Austin to be able to use it, I could have done '@lock snap photo=me|*austin'" Claude clings to Beltrami. BunnyHugger says, "And what you saw is the @ofail I set." BunnyHugger says, "Austin should have seen the @fail." Austin nods, "I saw 'Sorry, it's coati proof!' BunnyHugger says, "Yep!" BunnyHugger says, "To clear all locks, use '@unlock.'" BunnyHugger says, "I just '@unlock snap photo' to let Austin use it again." GreenKai says, "That wouldn't work against Natasha, though. Could you make it search for 'coati' in their species?" BunnyHugger says, "You can, actually." BunnyHugger says, "Do 'help @lock' to see some ways you can use it." BunnyHugger says, "One useful thing you can do is lock things to people who have certain properties set. Like if I wanted only people who can breathe underwater to be able to use my area, I might put a sign up saying you have to have 'breathe_underwater?:yes' set." BunnyHugger says, "There used to be areas on FM like that." BunnyHugger says, "So that's my lesson for today. Any questions before I give homework?" Austin says, "As a stylistic point, if you wanted to put a lock like that on an area, I'd recommend making it prefs/breathe_underwater?:yes so that when people examine themselves there aren't all sorts of bizarre little properties like that." Niny'ah says, "wait" Beltrami pats herself and shakes no. BunnyHugger says, "Yes, Austin is right." Claude yawnifies and shakes his head. BunnyHugger says, "Sure, Niny'ah." Niny'ah says, "would I be able to set breathe_underwater?:yes on an item and if carrying it, I could go there?" Niny'ah taps the rebreather GreenKai says, "Maybe you could make it put the pref on you when you picked it up, and take it off when you dropped it." BunnyHugger says, "Sadly not -- although if the item were your vehicle, that would work. Because it's going to evaluate it on the player or thing that actually takes the exit. But..." BunnyHugger says, "What GreenKai says. You could make it so your rebreather, when picked up, would use MPI to set a property on you, and when dropped, would remove the property from you. Or an action of turning the rebreather on and off could do the same thing." Niny'ah says, "ahhh" Niny'ah stops asking questions because headache BunnyHugger says, "Joshua's planning to run an MPI class when I'm done with this class, and you'd learn to do stuff like that in there." BunnyHugger says, "But I could probably actually show you how to do it simply next class, since it's a fairly quick little bit of code you could learn." BunnyHugger says, "MPI is NOT my strong suit but I know a little." BunnyHugger says, "I use it to Bugglize myself. n.n" BunnyHugger says, "OK, here's homework! This is something to actually DO with the object you created and brought in." Claude nodnodnods! Build a THING with the following features: 1) It gives a message when successfully picked up and if someone unauthorized tries to pick it up. 2) It gives a message when dropped. 3) It has an action on it that gives a message when used, and when someone unauthorized tries to use it. Chandra makes modifications to his existing object... BunnyHugger says, "If you want to work ahead at all:" BunnyHugger says, "We're going to talk about Zombies next time, and I'm going to teach how to make one from scratch. A lot of you may have zombies but have used the Zombie Hammer to make them, which is fine." BunnyHugger says, "But I think it's good practice to do it from scratch once to know how it 'works.'" Casandro nodnods. BunnyHugger says, "So if you want to try your hand at building a zombie from scratch you can, or just working as far into it as you know how." BunnyHugger says, "Of course feel free to page me for help with stuff, I like helping." You say, "I made mine from scratch, mostly by poking around blindly." GreenKai giggles, "It's just brain surgery, not rocket science!" You say, "Tee-hee!" BunnyHugger rolls up her beloved tables. BunnyHugger says, "Thanks for coming everyone! Sorry we ran over a bit." Beltrami touches her chin. You say, "Can I stop the log?" Chandra says, "Thank you!" Garrison nods Casandro says, "Thanks, BunnyHugger." Chandra sets his object aside for now and then wheels out. Chandra has left. You say, "Indeed, thank you, BunnyHugger." BunnyHugger says, "I think it's way too easy (and sort of entertaining) to hash out some of the oddities of the MUCK that stuff like my tables really makes apparent." BunnyHugger says, "Sure, Claude."