Just did a simple thing so that you can list multiple objects like this:- A bag is here. [3] A bag is here. [2] <invisible> etc Sorry, I dont know how to use the diff commands to add into the contrib section - besides, my base code is already modified too much to do so anyways. So, for those that want it, here are the easy steps:- 1. Near the top:- Change void show_obj_to_char(struct obj_data *obj, struct char_data *ch, int mode); TO void show_obj_to_char(struct obj_data *obj, struct char_data *ch, int mode, int list_view); Add: struct list_view_type { struct obj_data *obj; int count; struct list_view_type *next; }; 2. Change all calls of show_obj_to_char in act.informative so that list_view = 0; eg. original is show_obj_to_char(obj, ch, mode); change to show_obj_to_char(obj, ch, mode, 0); This needs to be applied to approx 4-6 calls. 3. Now in show_obj_to_char() function, add in the int list_view parameter. Then, right at the bottom of the function, add:- RIGHT ABOVE show_obj_modifiers(obj, ch); if (list_view > 1) { sprintf(buf, " [%d] ", list_view); send_to_char(buf, ch); } 4. Copy the functions below and replace the original list_obj_to_char to the one done below. And thats it. Have fun void create_list_view(struct obj_data *obj) { struct list_view_type *tmp; CREATE(tmp, struct list_view_type, 1); tmp->obj = obj; tmp->count = 1; if (list_view_top) tmp->next = list_view_top; else tmp->next = NULL; list_view_top = tmp; } void find_list_view(struct obj_data *obj) { struct list_view_type *tmp, *tmp_next; int found = 0, i =0; for (tmp = list_view_top; tmp; tmp = tmp_next) { i++; tmp_next = tmp->next; if ((tmp->obj->item_number == obj->item_number) && !strcmp(tmp->obj->name, obj->name) && !strcmp(tmp->obj->description, obj->description) && (GET_OBJ_EXTRA(tmp->obj) == GET_OBJ_EXTRA(obj))) { tmp->count++; found = 1; } } if (!found) create_list_view(obj); } void list_obj_to_char(struct obj_data *list, struct char_data *ch, int mode, int show) { struct obj_data *i; bool found = FALSE; struct list_view_type *tmp, *tmp_next, *tmp1; list_view_top = NULL; list_view_reverse = NULL; for (i = list; i; i = i->next_content) if (CAN_SEE_OBJ(ch, i)) find_list_view(i); for (tmp = list_view_top; tmp; tmp = tmp_next) { tmp_next = tmp->next; CREATE(tmp1, struct list_view_type, 1); if (list_view_reverse) tmp1->next = list_view_reverse; else tmp1->next = NULL; tmp1->count = tmp->count; tmp1->obj = tmp->obj; list_view_reverse = tmp1; free(tmp); } /* now reverse the orders to original order */ for (tmp = list_view_reverse; tmp; tmp = tmp_next) { tmp_next = tmp->next; show_obj_to_char(tmp->obj, ch, mode, tmp->count); found = TRUE; free(tmp); } if (!found && show) send_to_char(" Nothing.\r\n", ch); } -- +---------------------------------------------------------------+ | 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/24/03 PDT