--- deliantra/server/common/arch.C 2008/10/05 14:54:05 1.86
+++ deliantra/server/common/arch.C 2009/11/05 15:43:21 1.92
@@ -5,18 +5,19 @@
* Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team
* Copyright (©) 1992,2007 Frank Tore Johansen
*
- * Deliantra is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
+ * Deliantra is free software: you can redistribute it and/or modify it under
+ * the terms of the Affero GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or (at your
+ * option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
+ * You should have received a copy of the Affero GNU General Public License
+ * and the GNU General Public License along with this program. If not, see
+ * .
*
* The authors can be reached via e-mail to
*/
@@ -52,6 +53,8 @@
// the vector of loaded but not yet committed archetypes
static std::vector postponed_arch;
+//+GPL
+
/**
* GROS - This function retrieves an archetype given the name that appears
* during the game (for example, "writing pen" instead of "stylus").
@@ -142,11 +145,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;
@@ -195,6 +197,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;
@@ -226,30 +229,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))
@@ -260,7 +265,7 @@
else if (strcasecmp (cp, op->name) == 0 && !count)
retval = 4;
/* Check for partial custom name, but give a real low priority */
- else if (op->custom_name && strstr (op->custom_name, cp))
+ else if (op->custom_name.contains (cp))
retval = 3;
if (retval)
@@ -275,6 +280,8 @@
return 0;
}
+//-GPL
+
archetype::archetype (const char *name)
{
arch = this;
@@ -540,6 +547,8 @@
return op;
}
+//+GPL
+
/*
* Creates an object. This function is called by get_archetype()
* if it fails to find the appropriate archetype.
@@ -642,3 +651,5 @@
return head;
}
+//-GPL
+