ACMD(do_compare) { char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; struct obj_data *obj1, *obj2; int value1; int value2, dotmode; char *msg; two_arguments(argument, arg1, arg2); if ( arg1[0] == '\0' ) { send_to_char( "Compare what to what?\n\r", ch ); return; } if (!(obj1 = get_obj_in_list_vis(ch, arg1, ch->carrying))) { send_to_char( "You do not have that item.\n\r", ch ); return; } if (arg2[0] == '\0') { for (obj2 = ch->carrying; obj2 != NULL; obj2 = obj2->next_content) { if (obj2->worn_on != NOWHERE && CAN_SEE_OBJ(ch,obj2) && GET_OBJ_TYPE(obj1) == GET_OBJ_TYPE(obj2) && CAN_WEAR(obj1 ,ITEM_WEAR_TAKE) && CAN_WEAR(obj2 ,ITEM_WEAR_TAKE) != 0) break; } if (obj2 == NULL) { send_to_char("You aren't wearing anything comparable.\n\r",ch); return; } } else if (!(obj2 = get_obj_in_list_vis(ch, arg2, ch->carrying))) { send_to_char("You do not have that item.\n\r",ch); return; } msg = NULL; value1 = 0; value2 = 0; if ( obj1 == obj2 ) { msg = "You compare $p to itself. It looks about the same."; } else if (GET_OBJ_TYPE(obj1) != GET_OBJ_TYPE(obj2)) { msg = "You can't compare $p and $P."; } else { switch ( GET_OBJ_TYPE(obj1) ) { default: msg = "You can't compare $p and $P."; break; case ITEM_ARMOR: value1 = GET_OBJ_VAL(obj1, 0); value2 = GET_OBJ_VAL(obj2, 0);; break; case ITEM_WEAPON: value1 = (1 + GET_OBJ_VAL(obj1, 2)) * GET_OBJ_VAL(obj1, 1); value2 = (1 + GET_OBJ_VAL(obj2, 2)) * GET_OBJ_VAL(obj2, 1); break; } } if ( msg == NULL ) { if ( value1 == value2 ) msg = "$p and $P look about the same."; else if ( value1 > value2 ) msg = "$p looks better than $P."; else msg = "$p looks worse than $P."; } act( msg, FALSE, ch, obj1, obj2, TO_CHAR ); return; }