/* Portions of this code were taken from Sundermud */ #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #include <sys/time.h> #endif #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> #include <time.h> #include "include.h" void show_obj_cond (CHAR_DATA *ch, OBJ_DATA *obj) { int condition = 0; if (IS_SET(obj->extra_flags, ITEM_NOCOND)) return; if (obj->condition == 100) condition = 0; else if (obj->condition > 90) condition = 1; else if (obj->condition > 75) condition = 2; else if (obj->condition > 50) condition = 3; else if (obj->condition > 25) condition = 4; else if (obj->condition > 10) condition = 5; else if (obj->condition > 0) condition = 6; else if (obj->condition == 0) condition = 7; printf_to_char( ch, "Condition: %s\n\r", cond_table[condition]); return; } void check_damage_obj (CHAR_DATA *ch, OBJ_DATA *obj, int chance) { bool damageall = FALSE; bool done = FALSE; int damage_pos; OBJ_DATA *damobj = NULL; int stop = 0; int newbie = 20; if (obj == NULL) damageall = TRUE; if (damageall) { if (number_percent () <= chance) { while ( ( !done ) && ( stop <= 30 ) ) { damage_pos = number_range (1, MAX_WEAR); if ((damobj = get_eq_char (ch, damage_pos)) != NULL) done = TRUE; stop++; } if (done) damage_obj(ch, damobj, 1); return; } else return; } if (IS_SET(obj->extra_flags, ITEM_QUEST ) ) return; if (ch->level <= newbie || IS_NPC( ch ) ) return; if (number_percent () <= chance) { damage_obj(ch, obj, 1); return; } return; } void damage_obj (CHAR_DATA *ch, OBJ_DATA *obj, int damage) { int i; if (obj == NULL) { bug ("NULL obj passed to damage_obj",0); return; } if(IS_SET(obj->extra2_flags, ITEM_SANC ) ) damage /= 2; obj->condition -= damage; obj->condition = URANGE (0, obj->condition, 100); if (obj->condition == 0) { printf_to_char( ch, "%s has become to badly damaged to use!\n\r", ( (obj->short_descr && obj->short_descr[0] != '\0') ? obj->short_descr : "Unknown") ); unequip_char (ch, obj); return; } if (obj->item_type == ITEM_ARMOR) { for ( i = 0 ; i < 4 ; i++) { ch->armor[i] += apply_ac (obj, obj->wear_loc, i); obj->value[i] = obj->valueorig[i] * (obj->condition)/100; if ((obj->value[i] == 0) && (obj->valueorig[i] != 0)) obj->value[i] = 1; ch->armor[i] -= apply_ac(obj, obj->wear_loc, i); } } return; } void set_obj_condition(OBJ_DATA *obj, int condition) { int i; obj->condition = condition; if (obj->item_type == ITEM_ARMOR) { for (i = 0; i <= 4; i++) { obj->value[i] = obj->valueorig[i]; } } return; }