So I was running through act.comm.c (I finally got off my lazy ass and
installed Linux and CircleMUD earlier today) and I noticed that
do_spec_comm could be tightened. While I agree with the comment that it
could be tied in with do_tell(), as the comment suggests, the do_tell()
function is called often and should be kept as clean as possible. On
the other hand, perform_tell() can go a ways towards creating more
function do_tell() like commands without complicating or confusing the
code.
All that is needed is the addition of two char pointer arguments to
perform_tell() that accept the verb to use (one time for "You <verb>
$N" and another for "$N <verbs> you"). This requires very minimal
change to perform_tell(). Just the addition of the two arguments and
then a change to the sprintf() statements.
Next, in do_tell() you change perform_tell() to account for the two
new arguments; same as in do_reply(). In do_reply() I actually
decided to change it to "reply" and "replies" instead of "tell" and
"tells" (and added a bool so that you can have "You reply" or "$N
replies" instead of "You reply to $N" or "$N replies to you").
Next, I went down to do_spec_comm() and changed that block of code
starting at the last "else {" and going down to the
"act(action_others, . . . .)" line to just a single
perform_tell(ch, vict, argument, action_sing, action_plur, TRUE).
Here's my new perform_tell():
void perform_tell(struct char_data *ch, struct char_data *vict,
char *arg, char *verb, char *sverb, bool targ)
{
sprintf(buf, "&B$n &w%s%s, &L'&W%s&L'&w", sverb, arg, (targ ? " you" : ""));
act(buf, FALSE, ch, 0, vict, TO_VICT | TO_SLEEP);
if (PRF_FLAGGED(ch, PRF_NOREPEAT))
send_to_char(OK, ch);
else {
sprintf(buf, "You %s%s, &L'&W%s&L'&w", verb, arg, (targ ? " &B$N" : ""));
act(buf, FALSE, ch, 0, vict, TO_CHAR | TO_SLEEP);
}
/* GET_LAST_TELL(vict) moved to do_tell() and do_reply() */
}
Passing TRUE for the last argument ('targ') appends the ' you' or ' $N'
for "$N tells you" or "You tell $N". If it is FALSE, they are left off,
so you get "$N tells" or "You tell" (which is only useful for "reply",
so far). Also, note that I'm using my own color code system. Change
to your liking or whatever. I did this to further "encapsulate" the
code. It doesn't necessarily give any "superior" functionality, but it
does cut down on the code in do_spec_comm() and makes do_reply() look
a bit nicer without so much code as it has now. Kind of like the recall
code encapsulation...:)~
--
Daniel Koepke -:- dkoepke@california.com -:- [Shadowlord/Nether]
Think.
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
+------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/08/00 PST