----- Original Message -----
From: "Josh Harris" <jharris2@ACSU.BUFFALO.EDU>
> It compiled fine, but when I actually tried to use the bail command it
> crashed my mud. Here is my bail command:
>
A couple of things need to be adressed in this piece of code;
- remember to skip out of the function when a check fails (return!)
- remember to initialise vict before checking on it. You crashed due
to dereferencing a NULL pointer.
- be consistent in your code; either use 'if () {} else if () {} else
if () {} else {}' chains or (as in my example here) 'if () {}'
'if () {}' 'if () {}' seperate if statements. The combination will
often result in loss of overview.
ACMD(do_bail)
{
struct char_data *vict;
char arg[MAX_INPUT_LENGTH];
one_argument(argument, arg);
skip_spaces(&arg);
delete_doubledollar(arg);
if(!*arg) {
send_to_char("Were you going to try and bail someone out?\r\n", ch);
return; /* important ! */
}
if (!(vict = get_char_vis(ch, arg, FIND_CHAR_WORLD))) {
send_to_char("Player isn't playing, try again...\r\n", ch);
return; /* important too! */
}
if(ch==vict) {
send_to_char("You can't bail yourself out of this one...\r\n", ch);
return; /* still important ! */
}
if (GET_LEVEL(ch)<=GET_LEVEL(vict)) {
send_to_char("You aren't high enough level to bail them out!\r\n", ch);
return; /* if you don't return bad things will happen */
}
if (!PLR_FLAGGED(vict, PLR_CRIMINAL)) {
send_to_char("There not in jail, their just visiting!\r\n", ch);
return;
}
if (GET_GOLD(ch)<GET_BAIL(vict)) {
send_to_char("You can't afford to get them out of jail!\r\n",ch);
return; /* chose to do it this way for consistency */
}
/* we know now that everything is as it's supposed to */
GET_GOLD(ch) = GET_GOLD(ch)-GET_BAIL(vict);
GET_BAIL(vict)=0; /* only do this _after_ the bail is substracted */
send_to_char("The door on the cell begins to slowly open, someone has"
" bailed you out!\r\n", vict);
send_to_char("You bail your friend out of jail!\r\n", ch);
REMOVE_BIT(PLR_FLAGS(vict), PLR_CRIMINAL);
}
--
+---------------------------------------------------------------+
| FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
| Archives: http://post.queensu.ca/listserv/wwwarch/circle.html |
| Newbie List: http://groups.yahoo.com/group/circle-newbies/ |
+---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 06/25/03 PDT