--- deliantra/server/common/arch.C 2009/10/12 14:00:57 1.89 +++ deliantra/server/common/arch.C 2009/10/27 01:38:39 1.91 @@ -143,11 +143,10 @@ get_archetype_by_object_name (const char *name) { char tmpname[MAX_BUF]; - int i; assign (tmpname, name); - for (i = strlen (tmpname); i > 0; i--) + for (int i = strlen (tmpname); i > 0; i--) { tmpname[i] = 0; @@ -196,6 +195,7 @@ /* unpaid is a little more specific */ if (!strcmp (cp, "unpaid") && QUERY_FLAG (op, FLAG_UNPAID)) return 2; + if (!strcmp (cp, "cursed") && QUERY_FLAG (op, FLAG_KNOWN_CURSED) && (QUERY_FLAG (op, FLAG_CURSED) || QUERY_FLAG (op, FLAG_DAMNED))) return 2; @@ -227,30 +227,32 @@ * later. So keep it in descending order here, so we try for the best * match first, and work downward. */ + const char *qbn0, *qbn1, *qsn; // query base name/short name caches + if (!strcasecmp (cp, query_name (op))) retval = 20; - else if (!strcasecmp (cp, query_short_name (op))) + else if (!strcasecmp (cp, qsn = query_short_name (op))) retval = 18; - else if (!strcasecmp (cp, query_base_name (op, 0))) + else if (!strcasecmp (cp, qbn0 = query_base_name (op, 0))) retval = 16; - else if (!strcasecmp (cp, query_base_name (op, 1))) + else if (!strcasecmp (cp, qbn1 = query_base_name (op, 1))) retval = 16; else if (op->custom_name && !strcasecmp (cp, op->custom_name)) retval = 15; - else if (!strncasecmp (cp, query_base_name (op, 0), strlen (cp))) + else if (!strncasecmp (cp, qbn0, strlen (cp))) retval = 14; - else if (!strncasecmp (cp, query_base_name (op, 1), strlen (cp))) + else if (!strncasecmp (cp, qbn1, strlen (cp))) retval = 14; /* Do substring checks, so things like 'Str+1' will match. * retval of these should perhaps be lower - they are lower * then the specific strcasecmp aboves, but still higher than * some other match criteria. */ - else if (strstr (query_base_name (op, 1), cp)) + else if (strstr (qbn1, cp)) retval = 12; - else if (strstr (query_base_name (op, 0), cp)) + else if (strstr (qbn0, cp)) retval = 12; - else if (strstr (query_short_name (op), cp)) + else if (strstr (qsn, cp)) retval = 12; /* Check against plural/non plural based on count. */ else if (count > 1 && !strcasecmp (cp, op->name_pl))