Item conditions and Damage
< Newer Topic
:: Older Topic >
Pages:<< prev 1 next >>
#1 Sep 4, 2022 10:30 pm
Fledgling
GroupMembers
Posts41
JoinedFeb 21, 2021
Hey Everyone,
As I have been recently delving into much area building I came across a rather bothersome issue. All gear I create with Area-Editor or in-game seems to get destroyed in intense combat. I almost want to remove it, I mean completely losing an item seems a bit extreme. Is there a setting or flag that can increase durability or some alternative?
As I have been recently delving into much area building I came across a rather bothersome issue. All gear I create with Area-Editor or in-game seems to get destroyed in intense combat. I almost want to remove it, I mean completely losing an item seems a bit extreme. Is there a setting or flag that can increase durability or some alternative?
#2 Sep 4, 2022 10:58 pm
Fledgling
GroupMembers
Posts41
JoinedFeb 21, 2021
/* * Damage an object. -Thoric * Affect player's AC if necessary. * Make object into scraps if necessary. * Send message about damaged object. */ obj_ret damage_obj( OBJ_DATA * obj ) { CHAR_DATA *ch; obj_ret objcode; if( IS_OBJ_STAT( obj, ITEM_PERMANENT ) ) return rNONE; ch = obj->carried_by; objcode = rNONE; separate_obj( obj ); if( !IS_NPC( ch ) && ( !IS_PKILL( ch ) || ( IS_PKILL( ch ) && !IS_SET( ch->pcdata->flags, PCFLAG_GAG ) ) ) ) act( AT_OBJECT, "($p gets damaged)", ch, obj, NULL, TO_CHAR ); else if( obj->in_room && ( ch = obj->in_room->first_person ) != NULL ) { act( AT_OBJECT, "($p gets damaged)", ch, obj, NULL, TO_ROOM ); act( AT_OBJECT, "($p gets damaged)", ch, obj, NULL, TO_CHAR ); ch = NULL; } if( obj->item_type != ITEM_LIGHT ) oprog_damage_trigger( ch, obj ); else if( !in_arena( ch ) ) oprog_damage_trigger( ch, obj ); if( obj_extracted( obj ) ) return global_objcode; switch ( obj->item_type ) { default: make_scraps( obj ); objcode = rOBJ_SCRAPPED; break; case ITEM_CONTAINER: case ITEM_KEYRING: case ITEM_QUIVER: if( --obj->value[3] <= 0 ) { if( !in_arena( ch ) ) { make_scraps( obj ); objcode = rOBJ_SCRAPPED; } else obj->value[3] = 1; } break; case ITEM_LIGHT: if( --obj->value[0] <= 0 ) { if( !in_arena( ch ) ) { make_scraps( obj ); objcode = rOBJ_SCRAPPED; } else obj->value[0] = 1; } break; case ITEM_ARMOR: if( ch && obj->value[0] >= 1 ) ch->armor += apply_ac( obj, obj->wear_loc ); if( --obj->value[0] <= 0 ) { if( !IS_PKILL( ch ) && !in_arena( ch ) ) { make_scraps( obj ); objcode = rOBJ_SCRAPPED; } else { obj->value[0] = 1; ch->armor -= apply_ac( obj, obj->wear_loc ); } } else if( ch && obj->value[0] >= 1 ) ch->armor -= apply_ac( obj, obj->wear_loc ); break; case ITEM_WEAPON: if( --obj->value[0] <= 0 ) { if( !IS_PKILL( ch ) && !in_arena( ch ) ) { make_scraps( obj ); objcode = rOBJ_SCRAPPED; } else obj->value[0] = 1; } break; } if( ch != NULL ) save_char_obj( ch ); /* Stop scrap duping - Samson 1-2-00 */ if( objcode == rOBJ_SCRAPPED && !IS_NPC( ch ) ) log_printf( "%s scrapped %s (vnum: %d)", ch->name, obj->short_descr, obj->pIndexData->vnum ); return objcode; }
I am currently looking at the object condition and scrap code itself. I don't know about tweaking it much as I am still learning C programming. Has anyone made changes to this mechanic to at least keep players from losing a piece of equipment? I know Bless and Metal flags give +20% condition bonus. But I can't find in-game or in editor the total points of Condition an item has to make a change. I know condition flag goes from 13 (super condition) down to 0 (broken) So I assume all items have 13 condition points? Which in theory is fine, but could I remove 0 (broken). I know if doing so, it would render the system a bit redundant, but it would still lower the AC of the items so it wouldn't be an entire loss? o.o
#3 Sep 17, 2022 4:01 pm
Apprentice
GroupMembers
Posts86
JoinedAug 25, 2003
objects have values (if I remember correctly from value0 to value5) with different meanings based on the type of object (weapon, armor, light, food, etc). According to the code you posted for weapons and armor the value0 defines the condition of the object (for containers eg value3 is used). If you reach 0 you want the object not to be deleted, just intervene on the conditions that invoke the make_scraps function. If you want the system to keep a sense globally you could consider making that when a worn object is destined to be eliminated, it is instead simply removed from wear (unequip). in wear_obj functions make sure items with "broken" value cannot be worn until repaired (blacksmith?)
It's an idea...
Bye
It's an idea...
Bye
Pages:<< prev 1 next >>