On Wed, 18 Apr 2001, Kras Kresh wrote:
>This is a pl18 bug, so ignore this if you are not using it.
>I seemed to have fixed the bug in which you can't do remove #.item.
>Also, this also seems to fix the do_stat bug in which if you want to
>stat something with the same alias as the object you wear, you only
>get the first one. The fix provided to me by George Greer for the stat bug
>didn't fix it but I'll include it because it looks right. If anyone can
>improve on my code please send me a copy.
Oh yeah, that was the 2nd half of the fix. ('stat obj') Here's a semi-patch
format for the do_remove part. Basically, get_obj_pos_in_equip_vis() wasn't
number-ized because of it's historical baggage.
--- act.item.c 2001/01/26 00:50:43 1.36
+++ act.item.c 2001/04/11 00:07:16
@@ -1475,8 +1472,7 @@ ACMD(do_remove)
}
}
} else {
- /* Returns object pointer but we don't need it, just true/false. */
- if (!get_object_in_equip_vis(ch, arg, ch->equipment, &i)) {
+ if ((i = get_obj_pos_in_equip_vis(ch, arg, NULL, ch->equipment)) <
0) {
sprintf(buf, "You don't seem to be using %s %s.\r\n", AN(arg), arg);
send_to_char(buf, ch);
} else
Then to handler.c:
-struct obj_data *get_object_in_equip_vis(struct char_data * ch, char *arg,
struct obj_data *equipment[], int *j)
+struct obj_data *get_obj_in_equip_vis(struct char_data * ch, char *arg,
int *numbr, struct obj_data *equipment[])
{
- for ((*j) = 0; (*j) < NUM_WEARS; (*j)++)
- if (equipment[(*j)])
- if (CAN_SEE_OBJ(ch, equipment[(*j)]))
- if (isname(arg, equipment[(*j)]->name))
- return (equipment[(*j)]);
+ int j, num;
+
+ if (!numbr) {
+ numbr = #
+ num = get_number(&arg);
+ }
+
+ if (*numbr == 0)
+ return (NULL);
+
+ for (j = 0; j < NUM_WEARS; j++)
+ if (equipment[j] && CAN_SEE_OBJ(ch, equipment[j]) && isname(arg,
equipment[j]->name))
+ if (--(*numbr) == 0)
+ return (equipment[j]);
return (NULL);
}
+int get_obj_pos_in_equip_vis(struct char_data * ch, char *arg, int *numbr,
struct obj_data *equipment[])
+{
+ int j, num;
+
+ if (!numbr) {
+ numbr = #
+ num = get_number(&arg);
+ }
+
+ if (*numbr == 0)
+ return (-1);
+
+ for (j = 0; j < NUM_WEARS; j++)
+ if (equipment[j] && CAN_SEE_OBJ(ch, equipment[j]) && isname(arg,
equipment[j]->name))
+ if (--(*numbr) == 0)
+ return (j);
+
+ return (-1);
+}
--
George Greer
greerga@circlemud.org
--
+---------------------------------------------------------------+
| FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
| Archives: http://post.queensu.ca/listserv/wwwarch/circle.html |
+---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/05/01 PST