Hi list...
I encountered a problem today in the fact that, when wearing an item, the
following occurs:
***SNIP***
1900H 500M 250V > wield sword
You wield a Slaying Sword.
1900H 500M 250V > i
You are carrying:
a Slaying Sword (glowing) (humming)
1900H 500M 250V > eq
You are using:
<wielded> a Slaying Sword (glowing) (humming)
***END SNIP*
Note that, after wielding the sword, the sword is on the eq list, but
still
in the inventory list. If I then "remove sword", the mud lags out until
it
gets killed. However, if I type "save", the following error message
appears in the syslogs...
Fri Nov 06 08:53:46 :: SYSERR: EQUIP: Obj is carried_by when equip.
The only things I've added recently were two new wear positions (ear,
ankle) and attempted to let "wear all" include wieldables. I have since
removed these things, however the error still exists.
Can anyone direct me to where I should be looking, or has anyone had this
problem? All help appreciated.
I've got the patch "autoeq.bpl11" installed, but that didnt seem to make
a
difference.
All associated code is following:
int find_eq_pos(struct char_data * ch, struct obj_data * obj, char *arg)
{
int where = -1;
static char *keywords[] = {
<< INSERT STOCK CM BPL12 KEYWORDS HERE >>
"face",
/* "ear",
"!RESERVED!",
"ankle", */
"\n"
};
if (!arg || !*arg) {
<< INSERT STOCK CM BPL12 WEAR DEFINES HERE >>
if (CAN_WEAR(obj, ITEM_WEAR_FACE)) where = WEAR_FACE;
/* if (CAN_WEAR(obj, ITEM_WEAR_EAR)) where = WEAR_EAR_R;
if (CAN_WEAR(obj, ITEM_WEAR_ANKLE)) where = WEAR_ANKLE; */
} else {
if ((where = search_block(arg, keywords, FALSE)) < 0) {
sprintf(buf, "'%s'? What part of your body is THAT?\r\n", arg);
send_to_char(buf, ch);
}
}
return where;
}
ACMD(do_wear)
{
char arg1[MAX_INPUT_LENGTH];
char arg2[MAX_INPUT_LENGTH];
struct obj_data *obj, *next_obj;
int where, dotmode, items_worn = 0;
two_arguments(argument, arg1, arg2);
if (!*arg1) {
send_to_char("Wear what?\r\n", ch);
return;
}
dotmode = find_all_dots(arg1);
if (*arg2 && (dotmode != FIND_INDIV)) {
send_to_char("You can't specify the same body location for more than
one item!\r\n", ch);
return;
}
if (dotmode == FIND_ALL) {
for (obj = ch->carrying; obj; obj = next_obj) {
next_obj = obj->next_content;
if (CAN_SEE_OBJ(ch, obj) && (where = find_eq_pos(ch, obj, 0)) >= 0)
{
items_worn++;
perform_wear(ch, obj, where);
}
}
if (!items_worn)
send_to_char("You don't seem to have anything wearable.\r\n", ch);
} else if (dotmode == FIND_ALLDOT) {
if (!*arg1) {
send_to_char("Wear all of what?\r\n", ch);
return;
}
if (!(obj = get_obj_in_list_vis(ch, arg1, ch->carrying))) {
sprintf(buf, "You don't seem to have any %ss.\r\n", arg1);
send_to_char(buf, ch);
} else
while (obj) {
next_obj = get_obj_in_list_vis(ch, arg1, obj->next_content);
if ((where = find_eq_pos(ch, obj, 0)) >= 0)
perform_wear(ch, obj, where);
else
act("You can't wear $p.", FALSE, ch, obj, 0, TO_CHAR);
obj = next_obj;
}
} else {
if (!(obj = get_obj_in_list_vis(ch, arg1, ch->carrying))) {
sprintf(buf, "You don't seem to have %s %s.\r\n", AN(arg1), arg1);
send_to_char(buf, ch);
} else if (GET_LEVEL(ch) < GET_OBJ_LEVEL(obj)) {
send_to_char("You are not experienced enough to use that.\r\n",
ch);
} else {
if ((where = find_eq_pos(ch, obj, arg2)) >= 0)
perform_wear(ch, obj, where);
else if (!*arg2)
act("You can't wear $p.", FALSE, ch, obj, 0, TO_CHAR);
}
}
}
ACMD(do_wield)
{
struct obj_data *obj;
one_argument(argument, arg);
if (!*arg)
send_to_char("Wield what?\r\n", ch);
else if (!(obj = get_obj_in_list_vis(ch, arg, ch->carrying))) {
sprintf(buf, "You don't seem to have %s %s.\r\n", AN(arg), arg);
send_to_char(buf, ch);
} else {
if (!CAN_WEAR(obj, ITEM_WEAR_WIELD))
send_to_char("You can't wield that.\r\n", ch);
else if (GET_OBJ_WEIGHT(obj) >
str_app[STRENGTH_APPLY_INDEX(ch)].wield_w)
send_to_char("It's too heavy for you to use.\r\n", ch);
else
perform_wear(ch, obj, WEAR_WIELD);
}
}
+------------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
+------------------------------------------------------------+
+------------------------------------------------------------+
| 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/15/00 PST