mirror of
https://github.com/tbamud/tbamud.git
synced 2025-09-22 05:50:48 +02:00
184 lines
8 KiB
Text
184 lines
8 KiB
Text
If you have any additions, corrections, ideas, or bug reports please stop by the
|
||
Builder Academy at telnet://tbamud.com:9091 or email rumble@tbamud.com -- Rumble
|
||
|
||
The act() Function
|
||
Originally by Alex Fletcher. Based on text from the DikuMud authors
|
||
|
||
This document is intended to give an overview of the act()function and give a
|
||
summary of the various flags and the associated descriptive control characters.
|
||
The act() function is one of the primary functions for sending a message from
|
||
the game to a character or number of characters in a room.
|
||
|
||
Contents
|
||
|
||
1 The act()Function
|
||
|
||
1.1 Overview
|
||
1.2 The Function
|
||
1.3 TheParameters
|
||
1.4 Control Characters
|
||
1.5 Examples
|
||
|
||
1 The act()Function
|
||
|
||
1.1 Overview
|
||
The act() function is used to process and send strings of text to characters
|
||
in a room. It can be used to send the same basic string to a number of
|
||
characters filling in certain segments – designated by control characters –
|
||
in different ways, dependant on what each character can see and who each
|
||
character is. Once the text string passed to the function has been parsed, it
|
||
is capitalized and a newline is added to its tail.
|
||
|
||
1.2 The Function
|
||
The act()function is found in the comm.c source file and is described as:
|
||
|
||
void act(const char *str, int hide_invisible, struct char_data *ch,
|
||
struct obj_data *obj, const void *vict_obj, int type)
|
||
|
||
These pieces are used as follows:
|
||
|
||
str: This is the basic string, a null terminated character array, including
|
||
control characters (see section 1.4 on ‘Control Characters’), to be sent to
|
||
characters designated by the targets.
|
||
|
||
hide_invisible: A TRUE or FALSE value indicating whether or not to hide the
|
||
entire output from any characters that cannot see the “performing character”.
|
||
|
||
ch: The “performing character”. This is the character that the output string
|
||
is associated with. The character is used to determine the room for the output
|
||
of the action in question.
|
||
|
||
obj: An object (an actual item – obj_data) used in the course of the action.
|
||
|
||
vict_obj: This can be either a character involved in the action, another
|
||
object, or even a predefined string of text.
|
||
|
||
type: One of TO_VICT, TO_CHAR, TO_NOTVICT, or TO_ROOM. This indicates who it
|
||
is to be targeted at.
|
||
|
||
1.3 The Parameters
|
||
Of the various parameters passed to the act() function, the str is the most
|
||
important, as it is the basis for the actual final output. If this parameter
|
||
is a null-pointer or points to a null-character, then the function returns
|
||
immediately. The next important parameter is the ch parameter. This, as
|
||
mentioned, points to the central character associated with the output string
|
||
and action.
|
||
|
||
obj is an object of type struct obj_data *that is passed to the function. If
|
||
there is no object to pass to the function, then a NULL or 0 should be passed
|
||
in this location.
|
||
|
||
The next parameter vict_objcan be a number of things ranging from a game object
|
||
(strcut obj_data *), through to a character (struct char_data *), and even a
|
||
null terminated character array (char *).
|
||
|
||
Do note, however, that obj and vict_obj are both ignored if there is no control
|
||
character reference (see section 1.4 ‘Control Characters’) to them and the type
|
||
is set to TO_ROOM or TO_CHAR. In these cases, NULL should be supplied as the
|
||
input to the function.
|
||
|
||
The hide_invisible flag dictates whether or not the action output should be
|
||
hidden from characters that cannot see ch. If the flag is set to TRUE
|
||
(non-zero), then this is the case.
|
||
|
||
The type determines who the output is to be sent to. There are four options for
|
||
this (all defined in comm.h) described below:
|
||
|
||
TO_ROOM: This sends the output to everybody in the room, except ch.
|
||
|
||
TO_VICT: This option sends the output to the character pointed to by vict_obj.
|
||
In this case, vict_obj must point at a character rather than an object.
|
||
|
||
TO_NOTVICT: In another case where vict_obj must point to a character. This
|
||
sends the output to everybody in the room except ch and vict_obj.
|
||
|
||
TO_CHAR: Finally, this option sends the output to the ch.
|
||
|
||
TO_SLEEP: This is a special option that must be combined with one of the above
|
||
options. It tells act() that the output is to be sent even to characters that
|
||
are sleeping. It is combined with a bitwise ‘or’. i.e. TO_VICT | TO_SLEEP.
|
||
|
||
When the string has been parsed, it is capitalized and a newline is added.
|
||
|
||
1.4 Control Characters
|
||
In a manner similar to the printf() family of functions, act() uses control
|
||
characters. However, instead of using the % symbol, act() uses the $ character
|
||
to indicate control characters.
|
||
|
||
$n Write name, short description, or “someone”, for ch, depending on whether
|
||
ch is a PC, a NPC, or an invisible PC/NPC.
|
||
$N Like $n, except insert the text for vict_obj.*
|
||
$m “him,” “her,” or “it,” depending on the gender of ch.
|
||
$M Like $m, for vict_obj.*
|
||
$s “his,” “her,”or “it,” depending on the gender of ch.
|
||
$S Like $s, for vict_obj.*
|
||
$e “he,” “she,” “it,” depending on the gender of ch.
|
||
$E Like $e, for vict_obj.*
|
||
$o Name or “something” for obj, depending on visibility.
|
||
$O Like $o, for vict_obj.*
|
||
$p Short description or “something” for obj.
|
||
$P Like $p for vict_obj.*
|
||
$a “an” or“a”, depending on the first character of obj’s name.
|
||
$A Like $a, for vict_obj.*
|
||
$T Prints the string pointed to by vict_obj.*
|
||
$F Processes the string pointed to by vict_obj with the fname() function prior
|
||
to printing.*
|
||
$u Processes the buffer and uppercases the first letter of the previous word
|
||
(the word immediately prior to the control code). If there is no previous word,
|
||
no action is taken.
|
||
$U Processes the buffer and uppercases the first letter of the following word
|
||
(the word immediately after to the control code). If there is no following
|
||
word, no action is taken.
|
||
$$ Print the character ‘$’.
|
||
|
||
NOTE*: vict_obj must be a pointer of type struct char_data *.
|
||
|
||
1.5 Examples
|
||
In all of the following examples, ch points to male character Ras, vict always
|
||
points to the female character Anna. obj1 is a small sword, and obj2 is a small
|
||
sack.
|
||
|
||
act("$n smiles happily.", TRUE, ch, NULL, NULL, TO_ROOM);
|
||
This is sent to the room that Ras is currently in, and the string that they see
|
||
if they can see him is:
|
||
Ras smiles happily.
|
||
If a character cannot see Ras, then they will not see the action at all.
|
||
|
||
act("You kiss $M.", FALSE, ch, NULL, vict, TO_CHAR);
|
||
In this action, Ras is kissing Anna, and Ras will see:
|
||
You kiss her.
|
||
|
||
act("$n gives $p to $N.", TRUE, ch, obj1, vict, TO_NOTVICT);
|
||
The output from this string is sent to everyone in the room except for Ras and
|
||
Anna. Of course, if they cannot see Ras, then they will not see any output at
|
||
all. The string that each character in the room will see is:
|
||
Ras gives a small sword to Anna.
|
||
If a character cannot see Anna, then someone will be used in place of her name,
|
||
and if they cannot see the small sword, then something will be used in its
|
||
place.
|
||
|
||
act("$n gives you $p.", FALSE, ch, obj1, vict, TO_VICT);
|
||
Similar to the prior example, this is the output for Anna. She will see this
|
||
even if she cannot see Ras, and the output that she will get is:
|
||
Ras gives you a small sword.
|
||
Just as per the last example, if she cannot see Ras, someone will be used in
|
||
place of his name, and if she cannot see the sword, then something will be
|
||
used in its place.
|
||
|
||
act("$n puts $p in $s $O.", TRUE, ch, obj1, obj2, TO_ROOM);
|
||
This action uses two objects rather than two characters, and is displayed to
|
||
the entire room (with the exception of Ras of course). If the character can
|
||
see Ras, they will see:
|
||
Ras puts a small sword in his small sack.
|
||
Otherwise, they will see nothing. Again, as per the prior two examples,
|
||
something will be used in place of any objects that the viewing character
|
||
cannot see.
|
||
|
||
act("The $F opens quietly.", FALSE, ch, NULL, EXIT(ch, door)->keyword, TO_ROOM);
|
||
If the keywords for the door were gate wooden, then this would send the output
|
||
string of:
|
||
The gate opens quietly.
|
||
to all of the characters in the room with the exception of Ras.
|
||
|
||
In addition to these examples, a multitude of other examples can be found
|
||
scattered throughout the tbaMUD source code.
|