Просмотр исходного кода

- Made the map server abort when it can't open the mapcache file.
- Added a normalizing function to map.c which handles removing the extension of the map name.
- Applied said function when reading maps from maps_athena, since the mapcache lookup fails without it (maps are stored there without extensions)
- TODO: Apply the normalizing function everywhere when parsing map related scripts.


git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@9973 54d463be-8e91-2dee-dedb-b68131a5f0ec

skotlex 18 лет назад
Родитель
Сommit
c350fe1318
2 измененных файлов с 21 добавлено и 2 удалено
  1. 20 2
      src/map/map.c
  2. 1 0
      src/map/map.h

+ 20 - 2
src/map/map.c

@@ -2447,6 +2447,20 @@ struct map_cache_info {
 
 FILE *map_cache_fp;
 
+char *map_normalize_name(char *mapname)
+{
+	char *ptr, *ptr2;
+	ptr = strchr(mapname, '.');
+	if (ptr) { //Check and remove extension.
+		while (ptr[1] && (ptr2 = strchr(ptr+1, '.')))
+			ptr = ptr2; //Skip to the last dot.
+		if(stricmp(ptr,".gat") == 0 ||
+			stricmp(ptr,".afm") == 0)
+			*ptr = '\0'; //Remove extension.
+	}
+	return mapname;
+}
+
 int map_readmap(struct map_data *m)
 {
 	int i;
@@ -2489,7 +2503,8 @@ int map_addmap(char *mapname) {
 		CL_WHITE"%s"CL_RESET"', the limit of maps has been reached.\n",mapname);
 		return 1;
 	}
-	memcpy(map[map_num].name, mapname, MAP_NAME_LENGTH-1);
+
+	memcpy(map[map_num].name, map_normalize_name(mapname), MAP_NAME_LENGTH-1);
 	map_num++;
 	return 0;
 }
@@ -2529,7 +2544,10 @@ int map_readallmaps()
 	int maps_removed = 0;
 
 	if(!(map_cache_fp = fopen(map_cache_file, "rb")))
-		ShowError("Unable to open map cache file "CL_WHITE"%s"CL_RESET"\n", map_cache_file);
+	{
+		ShowFatalError("Unable to open map cache file "CL_WHITE"%s"CL_RESET"\n", map_cache_file);
+		exit(1); //No use launching server if maps can't be read.
+	}
 
 	ShowStatus("Loading maps...\n");
 

+ 1 - 0
src/map/map.h

@@ -1388,6 +1388,7 @@ int map_foreachiddb(int (*)(DBKey,void*,va_list),...);
 void map_addnickdb(struct map_session_data *);
 struct map_session_data * map_nick2sd(char*);
 int compare_item(struct item *a, struct item *b);
+char *map_normalize_name(char *mapname);
 
 // ‚»‚Ì‘¼
 int map_check_dir(int s_dir,int t_dir);