void set_wear_remove_func(string ob, string func) { wear_remove_func = ({ ob, func }); } /* set_wear_remove_func() */ void set_wear_effect( string effect_name ) { wear_effect = effect_name; } /* set_wear_effect() */ string query_wear_effect() { return wear_effect; } int query_armour() { return 1; } int query_ac( string type, int amount ) { int i, arm_class, damage; arm_class = ::query_ac( type, amount ); if ( arm_class > 100 ) arm_class = max_ac; else arm_class = ( arm_class * max_ac ) / 100; arm_class += ( arm_class * enchanted ) / query_max_enchant() + enchanted; if ( member_array( type, immune_to ) == -1 ) adjust_cond( ( -2 * random( damage_chance ) * amount ) / 1000 ); return ( arm_class * cond ) / max_cond; } /* query_ac() */ void setup_armour(int c) { set_cond(c); set_max_cond(c); set_lowest_cond(c); } /* setup_armour() */ void set_damage_chance(int i) { damage_chance = i; } int set_worn_by( object thing ) { if ( sizeof( wear_remove_func ) ) { if ( thing != worn_by ) { if ( worn_by ) call_other( wear_remove_func[ 0 ], wear_remove_func[ 1 ], 0 ); if ( thing ) call_other( wear_remove_func[ 0 ], wear_remove_func[ 1 ], thing ); } } if ( ( thing != worn_by ) && thing && wear_effect ) thing->add_effect( wear_effect ); if ( ( thing != worn_by ) && worn_by && wear_effect ) worn_by->taken_off( this_object(), wear_effect ); worn_by = thing; return 1; } /* set_worn_by() */ int query_damage_chance() { return damage_chance; } object query_worn_by() { return worn_by; } int query_worn() { return worn_by != 0; } string *query_immune_to() { return immune_to; } void add_immune_to(mixed arr) { int i; if (pointerp(arr)) for (i=0;i<sizeof(arr);i++) add_immune_to(arr[i]); else if (member_array(arr, immune_to) == -1) immune_to += ({ arr }); } /* add_immune_to() */ void remove_immune_to(mixed arr) { int i; if (pointerp(arr)) for (i=0;i<sizeof(arr);i++) remove_immune_to(arr[i]); else if ((i=member_array(arr, immune_to)) != -1) immune_to = delete(immune_to, i, 1); } /* remove_immune_to() */ void set_type(string str) { if (type) remove_alias(type); switch (str) { case "armour" : max_ac = 40; break; case "shield" : max_ac = 20; break; case "boot" : max_ac = 10; break; case "helmet" : max_ac = 10; break; case "cloak" : max_ac = 10; break; case "glove" : max_ac = 10; break; case "ring" : max_ac = 10; break; } add_alias(str); type = str; } /* set_type() */ string query_type() { return type; } int query_value() { int val; val = ::query_value(); return (val*10)/100 + (val*query_cond()*90)/(100*query_max_cond()); } /* query_value() */ int query_full_value() { return ::query_value(); } mixed *query_money_array() { return (mixed *)MONEY_HAND->create_money_array(query_value()); } /* query_money_array() */ int query_money(string type) { int i; mixed *m_a; m_a = (mixed *)MONEY_HAND->create_money_array(query_value()); if ((i=member_array(type, m_a)) == -1) return 0; return m_a[i+1]; } /* query_money() */ int query_no_limbs() { return no_limbs; } void set_no_limbs(int i) { no_limbs = i; } int set_holder(object ob, int pos) { held_in = pos; return 1; } /* set_holder() */ void player_wear() { if (!environment()) return ; if (no_limbs) environment()->set_hold(this_object(), held_in); else environment()->wear_armour(this_object()); } /* player_wear() */ void break_me() { if ( !worn_by ) /* Don't know how this could happen, but... */ return ::break_me(); tell_object( worn_by, "%^RED%^Your "+ short( 0 ) +" breaks into "+ "pieces!%^RESET%^\n" ); tell_room( environment( worn_by ), capitalize( (string)worn_by->the_short() ) +"'s "+ short( 0 ) + " breaks into pieces!\n", worn_by ); ::break_me(); } /* break_me() */