char *format_obj_to_char(struct gameobject *obj, struct char_data *ch, bool fShort) { static char buf[MAX_STRING_LENGTH * 2]; buf[0] = '\0'; if ((fShort && (obj->short_descr == NULL || obj->short_descr[0] == '\0')) || (obj->description == NULL || obj->description[0] == '\0')) return buf; if (IS_OBJ_STAT(obj, ITEM_INVIS) || (IS_AFFECTED(ch, AFF_DETECT_MAGIC) && IS_OBJ_STAT(obj, ITEM_MAGIC)) || IS_OBJ_STAT(obj, ITEM_GLOW) || IS_OBJ_STAT(obj, ITEM_HUM) || IS_OBJ_STAT(obj, ITEM_CACHE) || IS_OBJ_STAT(obj, ITEM_INLAY1) || IS_OBJ_STAT2(obj, ITEM2_RELIC) || IS_OBJ_STAT(obj, ITEM_INLAY2)) strcat(buf, "("); ; if (IS_OBJ_STAT(obj, ITEM_INVIS)) strcat(buf, "```8I``"); if (IS_AFFECTED(ch, AFF_DETECT_MAGIC) && IS_OBJ_STAT(obj, ITEM_MAGIC)) strcat(buf, "```^M``"); if (IS_OBJ_STAT(obj, ITEM_GLOW)) strcat(buf, "```@G``"); if (IS_OBJ_STAT(obj, ITEM_HUM)) strcat(buf, "```PH``"); if (IS_OBJ_STAT(obj, ITEM_CACHE)) strcat(buf, "`@C``"); if (IS_OBJ_STAT(obj, ITEM_INLAY1)) strcat(buf, "```2G``"); if (IS_OBJ_STAT2(obj, ITEM2_RELIC)) strcat(buf, "`!Relic``"); if (IS_OBJ_STAT(obj, ITEM_INLAY2)) strcat(buf, "```4B``"); if (IS_OBJ_STAT(obj, ITEM_INVIS) || (IS_AFFECTED(ch, AFF_DETECT_MAGIC) && IS_OBJ_STAT(obj, ITEM_MAGIC)) || IS_OBJ_STAT(obj, ITEM_GLOW) || IS_OBJ_STAT(obj, ITEM_HUM) || IS_OBJ_STAT(obj, ITEM_CACHE) || IS_OBJ_STAT(obj, ITEM_INLAY1) || IS_OBJ_STAT2(obj, ITEM2_RELIC) || IS_OBJ_STAT(obj, ITEM_INLAY2)) strcat(buf, ") "); ; if (fShort) { if (obj->short_descr != NULL) strcat(buf, obj->short_descr); } else { if (obj->description != NULL) strcat(buf, obj->description); } return buf; }
int invalid_char_class(struct creature *ch, struct obj_data *obj) { // Protected object if (IS_PC(ch) && obj->shared->owner_id != 0 && obj->shared->owner_id != GET_IDNUM(ch)) { return true; } // Unapproved object if (!OBJ_APPROVED(obj) && !is_tester(ch) && GET_LEVEL(ch) < LVL_IMMORT) return true; // Anti class restrictions if ((IS_OBJ_STAT(obj, ITEM_ANTI_MAGIC_USER) && IS_MAGIC_USER(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_CLERIC) && IS_CLERIC(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_WARRIOR) && IS_WARRIOR(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_THIEF) && IS_THIEF(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_BARB) && IS_BARB(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_PSYCHIC) && IS_PSYCHIC(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_PHYSIC) && IS_PHYSIC(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_CYBORG) && IS_CYBORG(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_KNIGHT) && IS_KNIGHT(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_RANGER) && IS_RANGER(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_BARD) && IS_BARD(ch)) || (IS_OBJ_STAT(obj, ITEM_ANTI_MONK) && IS_MONK(ch)) || (IS_OBJ_STAT2(obj, ITEM2_ANTI_MERC) && IS_MERC(ch))) return true; // Required class restrictions - any one of them must be met if ((IS_OBJ_STAT3(obj, ITEM3_REQ_MAGE) && IS_MAGE(ch)) || (IS_OBJ_STAT3(obj, ITEM3_REQ_CLERIC) && IS_CLERIC(ch)) || (IS_OBJ_STAT3(obj, ITEM3_REQ_THIEF) && IS_THIEF(ch)) || (IS_OBJ_STAT3(obj, ITEM3_REQ_WARRIOR) && IS_WARRIOR(ch)) || (IS_OBJ_STAT3(obj, ITEM3_REQ_BARB) && IS_BARB(ch)) || (IS_OBJ_STAT3(obj, ITEM3_REQ_PSIONIC) && IS_PSIONIC(ch)) || (IS_OBJ_STAT3(obj, ITEM3_REQ_PHYSIC) && IS_PHYSIC(ch)) || (IS_OBJ_STAT3(obj, ITEM3_REQ_CYBORG) && IS_CYBORG(ch)) || (IS_OBJ_STAT3(obj, ITEM3_REQ_KNIGHT) && IS_KNIGHT(ch)) || (IS_OBJ_STAT3(obj, ITEM3_REQ_RANGER) && IS_RANGER(ch)) || (IS_OBJ_STAT3(obj, ITEM3_REQ_BARD) && IS_BARD(ch)) || (IS_OBJ_STAT3(obj, ITEM3_REQ_MONK) && IS_MONK(ch)) || (IS_OBJ_STAT3(obj, ITEM3_REQ_VAMPIRE) && IS_VAMPIRE(ch)) || (IS_OBJ_STAT3(obj, ITEM3_REQ_MERCENARY) && IS_MERC(ch)) || (IS_OBJ_STAT3(obj, ITEM3_REQ_SPARE1) && IS_SPARE1(ch)) || (IS_OBJ_STAT3(obj, ITEM3_REQ_SPARE2) && IS_SPARE2(ch)) || (IS_OBJ_STAT3(obj, ITEM3_REQ_SPARE3) && IS_SPARE3(ch))) return false; // A required class existed and the creature didn't fulfill any if (IS_OBJ_STAT3(obj, ITEM3_REQ_MAGE | ITEM3_REQ_CLERIC | ITEM3_REQ_THIEF | ITEM3_REQ_WARRIOR | ITEM3_REQ_BARB | ITEM3_REQ_PSIONIC | ITEM3_REQ_PHYSIC | ITEM3_REQ_CYBORG | ITEM3_REQ_KNIGHT | ITEM3_REQ_RANGER | ITEM3_REQ_BARD | ITEM3_REQ_MONK | ITEM3_REQ_VAMPIRE | ITEM3_REQ_MERCENARY | ITEM3_REQ_SPARE1 | ITEM3_REQ_SPARE2 | ITEM3_REQ_SPARE3)) return true; // Passes all tests return false; }