--- deliantra/server/common/region.C 2007/01/25 03:54:44 1.17 +++ deliantra/server/common/region.C 2007/01/27 23:59:29 1.18 @@ -22,10 +22,19 @@ * The authors can be reached via e-mail at */ - #include #include +region * +region::default_region () +{ + for (region *reg = first_region; reg; reg = reg->next) + if (reg->fallback) + return reg; + + return first_region; +} + /* * Pass a char array, returns a pointer to the region of the same name. * if it can't find a region of the same name it returns the first region @@ -35,34 +44,22 @@ * used by the map parsing code. */ region * -get_region_by_name (const char *region_name) +region::find (const char *name) { - region *reg; - char *p = strchr (region_name, '\n'); - - if (p) - *p = '\0'; - for (reg = first_region; reg != NULL; reg = reg->next) - if (!strcmp (reg->name, region_name)) + for (region *reg = first_region; reg; reg = reg->next) + if (!strcmp (reg->name, name)) return reg; - for (reg = first_region; reg != NULL; reg = reg->next) - { - if (reg->fallback) - { - LOG (llevDebug, "region called %s requested, but not found, fallback used.\n", region_name); - return reg; - } - } - LOG (llevInfo, "Got no region or fallback for region %s.\n", region_name); - return NULL; + LOG (llevError, "region called %s requested, but not found, using fallback.\n", name); + + return default_region (); } /* This might need optimising at some point. */ region * get_region_by_map (maptile *m) { - return get_region_by_name (get_name_of_region_for_map (m)); + return region::find (get_name_of_region_for_map (m)); } /* @@ -447,10 +444,12 @@ { if (reg->parent_name != NULL) { - reg->parent = get_region_by_name (reg->parent_name); + reg->parent = region::find (reg->parent_name); parent_count++; } + region_count++; } + LOG (llevDebug, "Assigned %u regions with %u parents.\n", region_count, parent_count); }