int invalid_align(struct char_data *ch, struct obj_data *obj) { if (OBJ_FLAGGED(obj, ITEM_ANTI_EVIL) && IS_EVIL(ch)) return TRUE; if (OBJ_FLAGGED(obj, ITEM_ANTI_GOOD) && IS_GOOD(ch)) return TRUE; if (OBJ_FLAGGED(obj, ITEM_ANTI_NEUTRAL) && IS_NEUTRAL(ch)) return TRUE; return FALSE; }
/* invalid_class is used by handler.c to determine if a piece of equipment is * usable by a particular class, based on the ITEM_ANTI_{class} bitvectors. */ int invalid_class(struct char_data *ch, struct obj_data *obj) { if (OBJ_FLAGGED(obj, ITEM_ANTI_ADEPT) && IS_ADEPT(ch)) return TRUE; if (OBJ_FLAGGED(obj, ITEM_ANTI_MEDIC) && IS_MEDIC(ch)) return TRUE; if (OBJ_FLAGGED(obj, ITEM_ANTI_SOLDIER) && IS_SOLDIER(ch)) return TRUE; if (OBJ_FLAGGED(obj, ITEM_ANTI_BANDIT) && IS_BANDIT(ch)) return TRUE; return FALSE; }
/* * Fix all existing objects to have these values. * We need to run through each and every object currently in the * game to see which ones are pointing to this prototype. * if object is pointing to this prototype, then we need to replace it * with the new one. */ int update_objects(struct obj_data *refobj) { struct obj_data *obj, swap; int count = 0; for (obj = object_list; obj; obj = obj->next) { if (obj->item_number != refobj->item_number || OBJ_FLAGGED(obj, ITEM_UNIQUE_SAVE)) continue; count++; /* Update the existing object but save a copy for private information. */ swap = *obj; *obj = *refobj; /* Copy game-time dependent variables over. */ obj->in_room = swap.in_room; obj->carried_by = swap.carried_by; obj->worn_by = swap.worn_by; obj->worn_on = swap.worn_on; obj->in_obj = swap.in_obj; obj->contains = swap.contains; obj->next_content = swap.next_content; obj->next = swap.next; } return count; }
int invalid_race(struct char_data *ch, struct obj_data *obj) { if (GET_LEVEL(ch) >= LVL_IMMORT) return FALSE; if (OBJ_FLAGGED(obj, ITEM_ANTI_HUMAN) && IS_HUMAN(ch)) return (TRUE); if (OBJ_FLAGGED(obj, ITEM_ANTI_ELF) && IS_ELF(ch)) return (TRUE); if (OBJ_FLAGGED(obj, ITEM_ANTI_DWARF) && IS_DWARF(ch)) return (TRUE); if (OBJ_FLAGGED(obj, ITEM_ANTI_GNOME) && IS_GNOME(ch)) return (TRUE); return (FALSE); }
int Crash_is_unrentable(struct obj_data *obj) { if (!obj) return (0); if (OBJ_FLAGGED(obj, ITEM_NORENT) || GET_OBJ_RENT(obj) < 0 || GET_OBJ_RNUM(obj) == NOTHING || GET_OBJ_TYPE(obj) == ITEM_KEY) { log("Crash_is_unrentable: removing object %s", obj->short_description); return (1); } return (0); }
// update objects HASH_ITER(hh, object_table, obj, next_obj) { if (OBJ_FLAGGED(obj, OBJ_PLANTABLE) && GET_OBJ_VAL(obj, VAL_FOOD_CROP_TYPE) == vnum) { GET_OBJ_VAL(obj, VAL_FOOD_CROP_TYPE) = NOTHING; save_library_file_for_vnum(DB_BOOT_OBJ, GET_OBJ_VNUM(obj)); } }
void mag_alter_objs(int level, struct char_data *ch, struct obj_data *obj, int spellnum, int savetype) { const char *to_char = NULL, *to_room = NULL; if (obj == NULL) return; switch (spellnum) { case SPELL_BLESS: if (!OBJ_FLAGGED(obj, ITEM_BLESS) && (GET_OBJ_WEIGHT(obj) <= 5 * GET_LEVEL(ch))) { SET_BIT(GET_OBJ_EXTRA(obj), ITEM_BLESS); to_char = "$p glows briefly."; } break; case SPELL_CURSE: if (!OBJ_FLAGGED(obj, ITEM_NODROP)) { SET_BIT(GET_OBJ_EXTRA(obj), ITEM_NODROP); if (GET_OBJ_TYPE(obj) == ITEM_WEAPON) GET_OBJ_VAL(obj, 2)--; to_char = "$p briefly glows red."; } break; case SPELL_INVISIBLE: if (!OBJ_FLAGGED(obj, ITEM_NOINVIS | ITEM_INVISIBLE)) { SET_BIT(GET_OBJ_EXTRA(obj), ITEM_INVISIBLE); to_char = "$p vanishes."; } break; case SPELL_POISON: if (((GET_OBJ_TYPE(obj) == ITEM_DRINKCON) || (GET_OBJ_TYPE(obj) == ITEM_FOUNTAIN) || (GET_OBJ_TYPE(obj) == ITEM_FOOD)) && !GET_OBJ_VAL(obj, 3)) { GET_OBJ_VAL(obj, 3) = 1; to_char = "$p steams briefly."; } break; case SPELL_REMOVE_CURSE: if (OBJ_FLAGGED(obj, ITEM_NODROP)) { REMOVE_BIT(GET_OBJ_EXTRA(obj), ITEM_NODROP); if (GET_OBJ_TYPE(obj) == ITEM_WEAPON) GET_OBJ_VAL(obj, 2)++; to_char = "$p briefly glows blue."; } break; case SPELL_REMOVE_POISON: if (((GET_OBJ_TYPE(obj) == ITEM_DRINKCON) || (GET_OBJ_TYPE(obj) == ITEM_FOUNTAIN) || (GET_OBJ_TYPE(obj) == ITEM_FOOD)) && GET_OBJ_VAL(obj, 3)) { GET_OBJ_VAL(obj, 3) = 0; to_char = "$p steams briefly."; } break; } if (to_char == NULL) send_to_char(ch, "%s", NOEFFECT); else act(to_char, TRUE, ch, obj, 0, TO_CHAR); if (to_room != NULL) act(to_room, TRUE, ch, obj, 0, TO_ROOM); else if (to_char != NULL) act(to_char, TRUE, ch, obj, 0, TO_ROOM); }