Let me quickly make some comments here in the code.
>
> ACMD(do_chown)
> {
> struct char_data *victim;
> struct obj_data *obj;
>
> two_arguments(argument, buf, buf2);
>
> if (!*buf)
> send_to_char("Syntax: chown <object> <character>.\r\n", ch);
> else if (!(victim = get_char_vis(ch, buf2)))
> send_to_char("No one by that name here.\r\n", ch);
> else if (victim == ch)
> send_to_char("Are you sure you're feeling ok?\r\n", ch);
> else if (GET_LEVEL(victim) >= GET_LEVEL(ch))
> send_to_char("That's really not such a good idea.\r\n", ch);
> else if (!*buf2)
> send_to_char("Syntax: chown <object> <character>.\r\n", ch);
Whoa. What happened to the object? You never located it. try
something like this:
if (!(obj = get_obj_in_list_vis(ch, buf, ch->carrying))) {
sprintf(buf, "You don't seem to have any %ss.\r\n", buf);
send_to_char(buf, ch);
}
> else {
> act("$n makes a gesture and $p flies from $N to $m.",
> FALSE,ch,0,0,TO_ROOM);
Okay.. Uhm. Understand how act() works. .... EVERYONE WHO DOSEN"T
KNOW, TAKE A QUICK LESSON:
act takes 6 arguments. Here's what they are:
1 - String that you're going to send out.
2 - Boolean value - true/false used to determine if act()s that
are triggered by an invisible person sends out will be seen by those w/o
invisibility.
3 - The triggering character
4 - The target object
5 - The target character (well, could be other, but we'll keep it
simple for now)
6 - The recievers of the messages....
the room, the victim, everyone but the victim, the char,
and of course, the "TO_SLEEP" which sends even if the guy
is alseep.
from your code...
> act("$n makes a gesture and $p flies from $N to $m.",
> FALSE,ch,0,0,TO_ROOM);
you'd want something like..
act("$n makes a gesture and $p flies from $N to $m.",
FALSE,ch,obj,victim,TO_ROOM);
Else, the program will break when it gets to lookup the name of a
null pointer (it thinks its an object or person...)
> send_to_char("You make a gesture and $p flies from $N to you.\r\n", ch);
> send_to_char("$N makes a gesture and $p flies from you to $m.\r\n", victim); obj_from_char(obj);
Secondly, send_to_char != act. It dosen't know anything but the
string, and the person receiving it. You can't reference a)victims,
b)objects, through it. You CAN do something like
sprintf(buf,"You make a gesture and %s flies from you to %s\r\n",
GET_OBJ_NAME(obj), GET_NAME(victim));
send_to_char(buf,ch);
> obj_to_char(obj, ch);
Now, you also want to probably remove the obj from the character
before you give it to the next person....
obj_from_char(obj,ch);
obj_to_char(obj,vict);
> } > }
>
> only problem is it's saying that obj may be un-initialized.. i thought
> struct did that... *shrug*.. i'll keep working on it :)
>
And its uninitilized, because it really is uninitilized.. you
declared space and a name for it in struct, but you never filled it up.
Lucky for you that the functions that I said to add will initilize it with
the needed values huh?
These are the kind of mistakes I make ever so often, though, not
as frequently as it seems others may =)
PjD
+------------------------------------------------------------+
| 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