First of all, a word on exits: all the Herdercraft rooms are 'exitless.' That means that there are built-in exits for the cardinal directions: north, northeast, east, up, down, etc. For now, since we don't have that many Journeymen and Masters, everyone will be some cardinal direction off of the staff suite. Now, an exit has several messages that are displayed when someone passes through them, and it is your responsibility to set the messages on the exit out of you room. Do +messages (exit) to see those messages. Please note:
+arrive - displayed to the player when he/she arrives on other side.
+oarrive - announced to people on other side when player arrives.
+leave - displayed to player when he/she leaves the room.
+oleave - displayed to others when the player leaves.
The last three of these messages must be set. The way you do this is to type +(message name) (exit) is (message). The (message) for the messages displayed to the *user* - that is, the ones not beginning with 'o' - should start with 'You,' like in 'You enter the room.' The others leave out the subject of the sentce, and should look like 'enters the room.'
You should also give your exit a decent name; it will probably have some name like 'southeast'; to rename it, type: +rename se to (new name).
Finally, feel free to ask anyone how to set these things, and don't be afraid to consult 'help.' All of the stuff about the exitless rooms is contained in 'help #1570.'
Description --> When describing a pet, please stay within the realm of possibility, and keep in mind how much money the client is willing to pay for this animal. Low prices bring in less-than-perfect animals. Most importantly, there should be NO typos, grammatical errors, or spelling mistakes in a description. Spend the time to get it right, and if you're not certain of it, have someone else double-check your work. Take pride in your product so we can all be pourd of our services.
Gender --> The gender of a pet is set with the following command: gender (pet) is male|female|neuter. Don't forget to set this.
Age --> You'll also want to give the pet an age; remember to keep it beyond the age when the animal can be safely removed from its mother. The command for this is: @setage (pet) to 1T 2MN 3D - this example would set the pet's age to 1 Turn, 2 months, and 3 days.
Animal --> You now need to set the 'animal' property of the pet as well. So setup (pet) to do this.
Getting ready to sell --> See the chapter on Herdercraft verbs and the section on sales for information.
A note on size --> Newly-created objects inherit from their parents the property containing their size, and so may appear larger than they really are. When you use the @audit command, you see this size reported. To keep child objects from looking huge, use the command @measure new, which will fix the measurements of all new objects. They should not be more than 1 or 2 k.
Overall --> Enjoy this part of your Herder status, because it gives us the opportunity for great RP and probably the highest level of interaction - and definitely the highest level of income - of any Craft. Exercise professionalism when you sell, however, and don't steal clients away from other Herders, or harrass clients with a hard sell. Just have fun.
Gender --> Runners are assigned a random gender upon creation as part of my initialization code. You can change this, of course, or go with the random setting. If you decide to change the gender, the code is the same as with the pets: gender (runner) is male|female|neuter.
Age --> You must either set the .hatchsecs to 0 so no age is reported at all, or set the age by one of the many ways available. The simplest is probably setage, used this way: @setage (runner) to 5T 4MN 3D - that would set the runner's age to 5 Turns, 4 months, and 3 days.
Descriptions --> Try to be realistic. Don't always make them incredible, especially if the buyer isn't paying much. Vary the size, the build, the temperament, and stay away from superlatives and gorgeousness unless the buyes is really doling out some serious cash. Also, set the .odesc_msg to something other than "X looks over at Y." That's awfully boring. Make it fit the rest of the description if you can. Also look at the .forage_msg and personalize that as well.
Name --> If you give the runner a name, keep it IC. If you want to give it a fancy name and then a shorter one for the barn name, put the fancy one in the runner's .fullname property, and it will show up in assorted code I am writing for them. If you don't want to give the runnerbeast a name, I usually use 'Runner [Clientname]' -- like, "Runner [Britt]"
Look at the Runner--> Finally, make sure you check the runner out before you show the buyer. Watch for mistakes! The same policy goes for runner descriptions as for pet descriptions; typos and spelling errors are just unacceptable. I don't appreciate sloppy work, because you should be able to catch it before giving the runner over. Make the Herdercraft look good!
You should be able to answer any questions on #139, the Generic Runnerbeast parent, and how it works. Here is the helpfile on it:
Use 'do (action)' to make the runner act while you are mounted. This includes using exits, so "do (exit)" is how you ride from place to place. To make a runner act while you are not mounted, make the runner a puppet. (See "help puppets.")
To lead your runner somewhere, type: lead (runner) to (exit)
Saddling and bridling --> All runners have definable equipment. The standard complement is a saddle, a bridle, a halter, and a blanket. To see what is defined on your runner, type: showe*quipment (runner)
To place any of this equipment on your runner, type: pute*quipment (item) on (runner)
And to remove it, type: reme*quipment (item) on (runner)
To customize your runner's equipment, you can use @adde*quipment (item) to (runner) and define an item on your runner. See the help on that command. You can also @dele*quipment (item) from (runner) to eliminate that piece of equipment. If you desire to edit the description of an existing piece of equipment, use @edite*quipment (item) on (runner).
You can also place objects on runners' backs: put/place/pack (obj) on/onto/on top of (runner) or remove/take (obj) from (runner)
If your runner is hungry: feed (runner)
Properties to customize on your runner:
odesc_msg : announced to all in the room when the runner is looked at
hatchsecs : set just like your own; if zero, it's ignored
mount_msg / omount_msg : message announced when you mount
dismount_msg / odismount_msg : message announced when you dismount
obuck_msg : message announced when someone fails to mount
temperament : a number from 0 to ten. 0 = anyone can ride it, 10 = only the
most advanced of riders can ride it
feed_msg : announced to all when the runner is fed
forage_msg : announced to all when the runner grazes
hungry_msgs : A list of messages ranging from slightly hungry to dying of
starvation. Default is five messages, but there can be any number.
idesc : description from on the runner's back
If you set your runner's temperament to anything greater than the default, which is 0, you'll need to add a property to yourself called 'riding' with a value greater than or equal to your runner's temperament. Acceptable values range from 1 to 10, an keep realism in mind. If you know how to make a runner stop and go and turn sometimes, you're a 1. If you're comfortable on a runner, you're around a 4. If you're a really advanced rider, you're around 6. 8, 9, and 10 are equivalent to Olympic and World-class level. Keep these levels in mind when you set your runner's temperament, too. :)
Generic Pet Help
Generic PUTM Pet (#2201) is a generic animal, which (at the moment) does three things: follows a player (heel or stay), produces random messages (spam), and produces specific reactions in response to poses or speech from a player. You can set it to be a puppet and use it with the cu commands (see help cu). This includes general posing when you are not holding the animal and the use of 'frem' to pose when you are; 'frem' works for pets the same way that it does for FLs, and there is a .frem_msg to customize as well.
Please note that the random messages are triggered by any noise in the room and should not use specific words like 'you' or character's names. The spam level should also be kept fairly low, because it can get really annoying. The react verbs are more specific, and you can see the separate helpfile on them for more assistance.
Initialization:
gender (pet) is neuter|male|female - sets the pets gender and approprate pronouns. setup - NEW!! Sets up a pet's animal (canine, feline, etc.) Must be done for breeding to work. [For more info on breeding, do 'help :breed']
Follow verbs:
heel (pet) - Will make that pet follow you around, if it can. If it cannot move
to follow you, it will stay where it is.
stay (pet) - Stops a pet following you.
Message verbs:
setspam (pet) to (number) - Sets the delay between random spam messages. High
number - fewer messages.
addspam (pet) is (messages) - Adds the message given to pet's list of spammy
messages, and gives an example of that messages as if the pet is reacting to
you.
listspam (pet) - Gives a numbered list of the pets messages.
rmspam (number) from (pet) - Removes a message from the pets list of spammy
messages. The number is the number of the message as given by listspam.
Reaction verbs:
addreact (pet) is (match) : (reaction) - Sets pet to react to any occurence of
(match) with (reaction), and shows an example.
listreact (pet) - lists current reactions.
rmreact (number) from (pet) - Removes a reaction from the pet's list of words
and reactions. The number is as given by listreact.
Pet messages and reactions are always preceded by the pet's name, and pronoun substitution can be used. The substitution is made with the player to whom the pet is reacting as the person, and the pet as the object. In addition, reactions allow * wildcards to be used. These will be matched to single words in a sentence, regardless of punctuation. The matches made with the *'s can be substituted into the reactions using %1, %2, %3 etc for each successive *.
addreact (pet) is (match) : (reaction)
The (match) here should be a string without commas to which the pet will react. It can be as short as one word, but this may cause reactions to unexpected sentences. If you have a pet named Eve, for instance, and you want her to react to being petted, if you have her react to 'pets,' she will react to any pose or spoken sentence containing 'pets,' which might not have anything to do with her - it might even be the noun form of the word being used. Rather, you might want a longer phrase, specifying that someone is petting *your* pet. That's when you use what are called 'wildcards,' or blanks into which anything can be filled:
addreact Eve is *pets Eve* :snuggles into the kind hand.
This means that we don't care what comes before or after the phrase 'pets Eve,' but if it occurs, we want Eve to react. We can be more specific than this, though; if we separate the *'s out by spaces, they can represent specific words. In '* pets Eve *,' the first * will be the word right before 'pets' (and the rest we don't care about), and the second * is the word that comes afterwards. In the reaction, we refer to these as %1 and %2. We can now write: addreact Eve is * pets Eve :snuggles into %1's hand.
This will react to any sentence ending in 'pets Eve.' The period can be there, but unfortunately, it won't work with any ending word like 'pets Eve affectionately,' and the way this verb is coded, you can't mix word-*s and anything-*s in one reaction; you need one or the other. To be able to react to a sentence with a word after 'pets Eve,' just add another reaction: addreact Eve is * pets Eve * :snuggles into %1's hand.
Specific Information about Generic Pet(#2201):breed
Usage: breed (pet) to (pet)
Both pets must be the same animal, and not generic. (Use 'setup (pet) to set the animal.) They must be of opposite gender, and neither can be fixed. The female's desc will indicate the state of her pregnancy after some time has passed. It will take about 2 RL weeks, or 2 IC months, for full gestation for canines and felines. For help on birth, see 'help #2201:birth.'
Specific Information about Generic Pet(#2201):birth
(For help on generic Exitless Cardinal-Point rooms, see the help on #1570.)
Herdercraft rooms have several custom features:
CLEANING --> Herdercraft rooms also get dirty, and the verb 'clean' will clean it up a little. The property .public_area, when set to 1, will cause the verb :report_clean to be called on the room whenever the :looks_self verb is called.
The property .last_cleaned holds the system time when the room was last cleaned, and is used to determine how dirty it is. To START a room on this self-dirtying feature, use the verb '@start*dirty,' or @sd for short. To stop it, use '@end*dirty,' or @ed.
To customize the dirtying/cleaning process, you will want to customize the .dirty_msg and the .clean_msg. The .dirty_msg should just be a range of descriptions to be reported based on the condition of the room; each line in the property is a description, and it ranges from just-cleaed to flithy. It can have any number of different descriptions, as long as they from that range. The .clean_msg property is a list of strings that don't have nay order; those are just lines that are randomly chosen from when the 'clean' verb is emitting. Customize these as well to be appropriate actions to clean that room.
RUNNERS IN THE ROOM --> The .runner_msg property is also customizable, and it is the prefix to a report of what runners are in the room, something I added so it's easy to tell what is a runner and what is some other object.
HELP ON THE GENERIC STALLS OBJECT v2: This is one object, designed be to placed in a room, within which can be built any number of stalls. The stalls have been designed with many properties: they are 'enterable,' with appropriate entering and leaving messages; their doors can be opened and closed, which both effects coming in and out and effects what the runners inside hear, for if a door is closed no one in that stall hears what goes on outside, allthough the runners can be heard outside; the stalls get dirty as time passes, but only while occupied; the stalls can be cleaned; actions and spoken words inside are reported outside with appropriate prefixes; people inside with puppets outside and people outside with puppets inside will not be spammed by double messages; each occupied stall has a nameplate, which may in the future be editable; and potentially more.
Jad's Note: I cleaned up the code, and converted alot of it to use stall numbers, instead of trying to match the names. The latter method provided too many abiguous matching errors. I also change the cleaning to be less complex, and faster to compute. There is now a trash verb, allowing stalls to be removed and not just emptied as it was before.
The following verbs are defined on the Generic Stalls Object:
open in