On Thu, 18 Nov 1999, Ryan Kahn wrote: > I added the checks in handler.c and objsave.c where the game checked > to see if the item was wearable by that specific person. Everything > over ITEM_ANTI_HUMAN, which is (1 << 19) .. Does strange things. If > the item is ITEM_ANTI_ for each race except one, above human, that > race cannot wear it... Well, I was a bit short on rent this month, so I pawned the ol' crystal ball for a few bucks. In other words, you'll need to provide me with a bit more information for an actual analysis. But what this sounds like (and I'm only guessing) is a problem with your implementation of the flags. Not that it couldn't be some mysterious architecture problem, but there's not a very good chance of that at all. So the question is, what are these ITEM_ANTI_xxx flags defined as? And, moreover, how are you checking them? Basically, the definitions should look something like (where 'a', 'b', etc., are filling in for the appropriate numerical literal): #define RACE_HUMAN 0 #define RACE_ELF 1 #define RACE_DWARF 2 #define RACE_DRACONIAN 3 #define RACE_HALFGIANT 4 #define NUM_RACES 5 . . . #define ITEM_ANTI_HUMAN (1 << a) #define ITEM_ANTI_ELF (1 << b) #define ITEM_ANTI_DWARF (1 << c) #define ITEM_ANTI_DRACONIAN (1 << d) #define ITEM_ANTI_HALFGIANT (1 << e) You'd have some macros in utils.h like these, #define IS_HUMAN(ch) (GET_RACE(ch) == RACE_HUMAN) #define IS_ELF(ch) (GET_RACE(ch) == RACE_ELF) #define IS_DWARF(ch) (GET_RACE(ch) == RACE_DWARF) . . . and the code checking for these flags would be something like: int invalid_race (struct char_data *ch, struct obj_data *obj) { if ((IS_OBJ_STAT(obj, ITEM_ANTI_HUMAN) && IS_HUMAN(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_ELF) && IS_ELF(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_DWARF) && IS_DWARF(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_DRACONIAN && IS_DRACONIAN(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_HALFGIANT && IS_HALFGIANT(ch))) return (1); else return (0); } Then you'd call invalid_race() in the same manner as invalid_align() and invalid_class() are called in equip_char(), handler.c. It's all Mailer Code(tm), of course. -dak +------------------------------------------------------------+ | Ensure that you have read the CircleMUD Mailing List FAQ: | | http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html | +------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/15/00 PST