Ok, got the first step done in the fixing of generic find (and one other procedure as well). Now, if you want to deal with equipped items and numbers, you can. Instead of having to remove 2 rings, just to get the second one removed, you can now type "remove 2.ring" However, I am at a bigger stage of the game, the integration into the generic_find. What I am working on is to make it so that if you want to look at the first ring in your inventory. Unfortunately, you have 2 rings in your eq, and the generic_find will get them first. So, what I want to be able to do is either specify where to look first, or go 3.ring so that it skips the first 2 rings in your eq, and goes to the one in your inventory. However, this will mean changing the variable passed to the find functions at the end of each function. For example, here is a preliminary code I have at the end of every find function, just before the return NULL. if (number > 1) { sprintf(tmpname, "%d.%s", (number - j), tmp); strcpy(name, tmpname); } As you can see, if the number is > 1 (ie. it's a #.something) it will take the number found, subtract it from the number desired, and add the name on the end. So, if you send "3.sword" to the function, and you only find 2, it will make the name be "1.sword" so that the next function will find it. However, I am wondering what kind of problems this may cause. One I have already seen is that if the function is the only one called, and it can't find the right number, any message back to the player will look wrong. In the example above, it might say "You cannot find 1.sword" even though the player was looking for 3.sword. What kind of suggestions does everyone have on what to do with this. I am especially interested in George's & Jeremy's opinions, as I would like to see this kind of functionality in the stock CircleMUD. Oh, that reminds me. Here is the change in the get_object_in_equip_vis function that allows for numbers. struct obj_data *get_object_in_equip_vis(struct char_data * ch, char *arg, struct obj_data * equipment[], int *j) { int number, k = 0; char tmpname[MAX_INPUT_LENGTH], *tmp = tmpname; strcpy(tmp, arg); number = get_number(&tmp); for ((*j) = 0; (*j) < NUM_WEARS; (*j)++) if (equipment[(*j)]) if (CAN_SEE_OBJ(ch, equipment[(*j)])) if (isname(tmp, equipment[(*j)]->name)) if (++k == number) return (equipment[(*j)]); return NULL; } --- "One hundred years from now, none of this will matter because you and I will be dead -- unless the Grim Reaper has switched his record-keeping to a Windows 95-based system, in which case we all might live forever. " -- Associated Press +------------------------------------------------------------+ | 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