--- deliantra/server/common/material.C 2010/04/28 19:49:50 1.13 +++ deliantra/server/common/material.C 2010/04/29 12:24:04 1.14 @@ -77,17 +77,10 @@ density = 1000; } -/* convert materialname to materialtype_t */ -materialtype_t * -name_to_material (const shstr_tmp name) +// create a new material of the given name +static materialtype_t * +dummy_material (shstr_tmp name) { - for (materialtype_t *mt = materialt; mt; mt = mt->next) - if (name == mt->name) - return mt; - - LOG (llevError, "name_to_material called with nonexistent material '%s'\n", &name); - - // create a new material of the given name materialtype_t *mt = new materialtype_t; mt->name = name; @@ -103,6 +96,37 @@ return mt; } +/* convert materialname to materialtype_t */ +materialtype_t * +name_to_material (const shstr_tmp name) +{ + for (materialtype_t *mt = materialt; mt; mt = mt->next) + if (name == mt->name) + return mt; + + LOG (llevError, "name_to_material called with nonexistent material '%s'\n", &name); + + return dummy_material (name); +} + +void +object_thawer::get (materialtype_t *&m) const +{ + shstr name; + get (name); + + for (materialtype_t *mt = materialt; mt; mt = mt->next) + if (name == mt->name) + { + m = mt; + return; + } + + parse_error (format ("material called %s requested, but not found, creating dummy material.\n", &name)); + + m = dummy_material (name); +} + /* when doing transmutation of objects, we have to recheck the resistances, * as some that did not apply previously, may apply now. */