--- deliantra/server/common/arch.C 2010/03/26 00:59:20 1.100 +++ deliantra/server/common/arch.C 2012/01/03 11:25:30 1.110 @@ -1,7 +1,7 @@ /* * This file is part of Deliantra, the Roguelike Realtime MMORPG. * - * Copyright (©) 2005,2006,2007,2008 Marc Alexander Lehmann / Robin Redeker / the Deliantra team + * Copyright (©) 2005,2006,2007,2008,2009,2010,2011,2012 Marc Alexander Lehmann / Robin Redeker / the Deliantra team * Copyright (©) 2002 Mark Wedel & Crossfire Development Team * Copyright (©) 1992 Frank Tore Johansen * @@ -55,9 +55,9 @@ //+GPL /* - * Creates an object. This function is called by get_archetype () + * Creates an object. This function is called by archetype::get () * if it fails to find the appropriate archetype. - * Thus get_archetype() will be guaranteed to always return + * Thus archetype::get() will be guaranteed to always return * an object, and never NULL. */ static object * @@ -214,13 +214,13 @@ return 1; /* unpaid is a little more specific */ - if (!strcmp (cp, "unpaid") && QUERY_FLAG (op, FLAG_UNPAID)) + if (!strcmp (cp, "unpaid") && op->flag [FLAG_UNPAID]) return 2; - if (!strcmp (cp, "cursed") && QUERY_FLAG (op, FLAG_KNOWN_CURSED) && (QUERY_FLAG (op, FLAG_CURSED) || QUERY_FLAG (op, FLAG_DAMNED))) + if (!strcmp (cp, "cursed") && op->flag [FLAG_KNOWN_CURSED] && (op->flag [FLAG_CURSED] || op->flag [FLAG_DAMNED])) return 2; - if (!strcmp (cp, "unlocked") && !QUERY_FLAG (op, FLAG_INV_LOCKED)) + if (!strcmp (cp, "unlocked") && !op->flag [FLAG_INV_LOCKED]) return 2; /* Allow for things like '100 arrows' */ @@ -301,6 +301,12 @@ //-GPL +void +archetype::do_delete () +{ + delete this; +} + archetype::archetype (const char *name) { arch = this; @@ -353,9 +359,12 @@ void archetype::post_load_check () { - object::post_load_check (); - assert (("obj_original MUST NOT be set for archetypes", !flag [FLAG_OBJ_ORIGINAL])); + + if (type == SKILL) + add_skill_archetype (this); + + object::post_load_check (); } archetype * @@ -376,7 +385,7 @@ #if 0 // implementing it here in the server does neither allow multiple inheritence // nor does it cleanly "just override". it would allow use in map files, though, - // and other resource files dynamically laoded (as opposed to being preprocessed). + // and other resource files dynamically loaded (as opposed to being preprocessed). // not that any of this is relevant as of yet... if (f.kw == KW_inherit) { @@ -523,7 +532,7 @@ void archetype::gc () { - int cnt = max (1, min (allarch.size () / 128, dirtycnt)); + int cnt = max (1, min (allarch.size () / 128, dirtycnt)); dirtycnt = max (0, dirtycnt - cnt); do @@ -542,7 +551,7 @@ ++idx; else { - LOG (llevDebug, "garbage collect arch %s", &at->archname); + //LOG (llevDebug, "garbage collect arch %s", &at->archname); assert (at->arch == at); // verify that refcnt == 1 is truly valid allarch.erase (idx); @@ -577,12 +586,6 @@ * object containing a copy of the archetype. */ object * -get_archetype (const char *name) -{ - return archetype::get (name); -} - -object * archetype::get (const char *name) { archetype *at = find (name);