I've been writing code for CircleMUD for about two years now, and I've got a really good grasp on the game's code structure and mechanics.. but the one thing I never tried until now was to create a specproc. I made this item called "the cloak of the chameleon", and I wanted it to make the wearer blend into their surroundings. I made an AFF_ flag in structs.h and an appropriate addition to the affected_bits[] array. I do not want this to be a settable flag via OLC (as to prevent builders from creating copycats of the item), so I wrote a specproc. I tried two methods of doing this. First method: ------------- obj_from_char(cloak); equip_char(ch, cloak, ITEM_WEAR_ABOUT); This did take the obj from their inven but never equipped it to them. Second method: -------------- perform_wear(ch, cloak, ITEM_WEAR_ABOUT); This just crashes the server. I added "void perform_wear(blahblah);" at the top of spec_procs.c. Here's the whole specproc using the second method. I'm baffled as to what could be causing these problems, but it's sure annoying :) I'd like to get some insight from the CircleMUD community so I can actually start to write better specprocs (I'll be sending some code to the devel site as soon as I get snippets together :) SPECIAL(chameleon_cloak) { char arg1[MAX_STRING_LENGTH]; struct obj_data *cloak; skip_spaces(&argument); one_argument(argument, arg1); if(CMD_IS("wear")) { if(!(cloak = get_obj_in_list_vis(ch, arg1, NULL, ch- >carrying))) { return(FALSE); } act("$n wears a strange looking cloak and blends into $s surroundings.", FALSE, ch, NULL, NULL, TO_ROOM); act("You wear the chameleon cloak and feel completely hidden.", FALSE, ch, NULL, NULL, TO_CHAR); SET_BIT(AFF_FLAGS(ch), AFF_CHAMELEON); perform_wear(ch, cloak, ITEM_WEAR_ABOUT); return(TRUE); } else if(CMD_IS("remove")) { if(!(cloak = get_obj_in_list_vis(ch, arg1, NULL, GET_EQ(ch, ITEM_WEAR_ABOUT)))) { return(FALSE); } perform_remove(ch, ITEM_WEAR_ABOUT); act("$n is revealed as $e removes a strange looking cloak.", TRUE, ch, NULL, NULL, TO_ROOM); act("You feel completely revealed as you remove the cloak.", FALSE, ch, NULL, NULL, TO_CHAR); REMOVE_BIT(AFF_FLAGS(ch), AFF_CHAMELEON); return(TRUE); } return(FALSE); } I hope it's not too ugly since it's my first specproc :) -- +---------------------------------------------------------------+ | 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/26/03 PDT