浏览代码

* Cleanups at npc source file adding/removing. (one variable has been removed)

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@10195 54d463be-8e91-2dee-dedb-b68131a5f0ec
FlavioJS 18 年之前
父节点
当前提交
d6b4625e06
共有 4 个文件被更改,包括 82 次插入77 次删除
  1. 1 0
      Changelog-Trunk.txt
  2. 1 1
      src/map/atcommand.c
  3. 78 74
      src/map/npc.c
  4. 2 2
      src/map/npc.h

+ 1 - 0
Changelog-Trunk.txt

@@ -4,6 +4,7 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 2007/04/10
+	* Cleanups at npc source file adding/removing.
 	* Changed db key from 'unsigned char*' to 'const char*'.
 	* Defined out the dump function in util.h/c. [FlavioJS]
 	* As an experiment Corrected many /W4 warnings on the txt login server

+ 1 - 1
src/map/atcommand.c

@@ -5897,7 +5897,7 @@ int atcommand_loadnpc(const int fd, struct map_session_data* sd, const char* com
 	fclose(fp);
 
 	// add to list of script sources and run it
-	npc_addsrcfile((char *)message);
+	npc_addsrcfile(message);
 	npc_parsesrcfile((char *)message);
 	npc_read_event_script();
 

+ 78 - 74
src/map/npc.c

@@ -32,13 +32,13 @@
 
 
 
+// linked list of npc source files
 struct npc_src_list {
-	struct npc_src_list * next;
-	char name[4];
+	struct npc_src_list* next;
+	char name[4];// dynamic array, the structure is allocated with extra bytes (string length)
 };
+static struct npc_src_list* npc_src_files=NULL;
 
-static struct npc_src_list *npc_src_first=NULL;
-static struct npc_src_list *npc_src_last=NULL;
 static int npc_id=START_NPC_NUM;
 static int npc_warp=0;
 static int npc_shop=0;
@@ -1575,77 +1575,81 @@ int npc_unload(struct npc_data *nd)
 // 初期化関係
 //
 
-/*==========================================
- * 読み込むnpcファイルのクリア
- *------------------------------------------
- */
-void npc_clearsrcfile (void)
+//
+// NPC Source Files
+//
+
+/// Clears the npc source file list
+static void npc_clearsrcfile(void)
 {
-	struct npc_src_list *p = npc_src_first, *p2;
+	struct npc_src_list* file = npc_src_files;
+	struct npc_src_list* file_tofree;
 
-	while (p) {
-		p2 = p;
-		p = p->next;
-		aFree(p2);
+	while( file != NULL )
+	{
+		file_tofree = file;
+		file = file->next;
+		aFree(file_tofree);
 	}
-	npc_src_first = NULL;
-	npc_src_last = NULL;
+	npc_src_files = NULL;
 }
-/*==========================================
- * 読み込むnpcファイルの追加
- *------------------------------------------
- */
-void npc_addsrcfile (char *name)
+
+/// Adds a npc source file (or removes all)
+void npc_addsrcfile(const char* name)
 {
-	struct npc_src_list *nsl;
+	struct npc_src_list* file;
+	struct npc_src_list* file_prev = NULL;
 
-	if (strcmpi(name, "clear") == 0) {
+	if( strcmpi(name, "clear") == 0 )
+	{
 		npc_clearsrcfile();
 		return;
 	}
 
 	// prevent multiple insert of source files
-	nsl = npc_src_first;
-	while (nsl)
-	{   // found the file, no need to insert it again
-		if (0 == strcmp(name, nsl->name))
-			return;
-		nsl = nsl->next;
-	}
-
-	nsl = (struct npc_src_list *) aMalloc (sizeof(*nsl) + strlen(name));
-	nsl->next = NULL;
-	strncpy(nsl->name, name, strlen(name) + 1);
-	if (npc_src_first == NULL)
-		npc_src_first = nsl;
-	if (npc_src_last)
-		npc_src_last->next = nsl;
-	npc_src_last = nsl;
+	file = npc_src_files;
+	while( file != NULL )
+	{
+		if( strcmp(name, file->name) == 0 )
+			return;// found the file, no need to insert it again
+		file_prev = file;
+		file = file->next;
+	}
+
+	file = (struct npc_src_list*)aMalloc(sizeof(struct npc_src_list) + strlen(name));
+	file->next = NULL;
+	strncpy(file->name, name, strlen(name) + 1);
+	if( file_prev == NULL )
+		npc_src_files = file;
+	else
+		file_prev->next = file;
 }
-/*==========================================
- * 読み込むnpcファイルの削除
- *------------------------------------------
- */
-void npc_delsrcfile (char *name)
+
+/// Removes a npc source file (or all)
+void npc_delsrcfile(const char* name)
 {
-	struct npc_src_list *p = npc_src_first, *pp = NULL, **lp = &npc_src_first;
+	struct npc_src_list* file = npc_src_files;
+	struct npc_src_list* file_prev = NULL;
 
-	if (strcmpi(name, "all") == 0) {
+	if( strcmpi(name, "all") == 0 )
+	{
 		npc_clearsrcfile();
 		return;
 	}
 
-	while (p) {
-		if (strcmp(p->name, name) == 0) {
-			*lp = p->next;
-			if (npc_src_last == p)
-				npc_src_last = pp;
-			aFree(p);
+	while( file != NULL )
+	{
+		if( strcmp(file->name, name) == 0 )
+		{
+			if( npc_src_files == file )
+				npc_src_files = file->next;
+			else
+				file_prev->next = file->next;
+			aFree(file);
 			break;
 		}
-		lp = &p->next;
-		pp = p;
-		p = p->next;
+		file_prev = file;
+		file = file->next;
 	}
 }
 
@@ -3018,7 +3022,7 @@ int npc_reload (void)
 	npc_warp = npc_shop = npc_script = 0;
 	npc_mob = npc_cache_mob = npc_delay_mob = 0;
 
-	for (nsl = npc_src_first; nsl; nsl = nsl->next) {
+	for (nsl = npc_src_files; nsl; nsl = nsl->next) {
 		npc_parsesrcfile(nsl->name);
 		if (script_config.verbose_mode) {
 			printf("\r");
@@ -3040,14 +3044,14 @@ int npc_reload (void)
 		fflush(stdout);
 	}
 	printf("\r");
-	ShowInfo ("Done loading '"CL_WHITE"%d"CL_RESET"' NPCs:%30s\n\t-'"
-		CL_WHITE"%d"CL_RESET"' Warps\n\t-'"
-		CL_WHITE"%d"CL_RESET"' Shops\n\t-'"
-		CL_WHITE"%d"CL_RESET"' Scripts\n\t-'"
-		CL_WHITE"%d"CL_RESET"' Mobs\n\t-'"
-		CL_WHITE"%d"CL_RESET"' Mobs Cached\n\t-'"
-		CL_WHITE"%d"CL_RESET"' Mobs Not Cached\n",
-		npc_id - npc_new_min, "", npc_warp, npc_shop, npc_script, npc_mob, npc_cache_mob, npc_delay_mob);
+	ShowInfo ("Done loading '"CL_WHITE"%d"CL_RESET"' NPCs:\n"
+		"\t-'"CL_WHITE"%d"CL_RESET"' Warps\n"
+		"\t-'"CL_WHITE"%d"CL_RESET"' Shops\n"
+		"\t-'"CL_WHITE"%d"CL_RESET"' Scripts\n"
+		"\t-'"CL_WHITE"%d"CL_RESET"' Mobs\n"
+		"\t-'"CL_WHITE"%d"CL_RESET"' Mobs Cached\n"
+		"\t-'"CL_WHITE"%d"CL_RESET"' Mobs Not Cached\n",
+		npc_id - npc_new_min, npc_warp, npc_shop, npc_script, npc_mob, npc_cache_mob, npc_delay_mob);
 
 	//Re-read the NPC Script Events cache.
 	npc_read_event_script();
@@ -3151,7 +3155,7 @@ int do_init_npc(void)
 	memset(&ev_tm_b, -1, sizeof(ev_tm_b));
 	timer_event_ers = ers_new(sizeof(struct timer_event_data));
 
-	for (nsl = npc_src_first; nsl; nsl = nsl->next) {
+	for (nsl = npc_src_files; nsl; nsl = nsl->next) {
 		npc_parsesrcfile(nsl->name);
 		current_file = NULL;
 		printf("\r");
@@ -3173,21 +3177,21 @@ int do_init_npc(void)
 		fflush(stdout);
 	}
 	printf("\r");
-	ShowInfo ("Done loading '"CL_WHITE"%d"CL_RESET"' NPCs:%30s\n\t-'"
-		CL_WHITE"%d"CL_RESET"' Warps\n\t-'"
-		CL_WHITE"%d"CL_RESET"' Shops\n\t-'"
-		CL_WHITE"%d"CL_RESET"' Scripts\n\t-'"
-		CL_WHITE"%d"CL_RESET"' Mobs\n\t-'"
-		CL_WHITE"%d"CL_RESET"' Mobs Cached\n\t-'"
-		CL_WHITE"%d"CL_RESET"' Mobs Not Cached\n",
-		npc_id - START_NPC_NUM, "", npc_warp, npc_shop, npc_script, npc_mob, npc_cache_mob, npc_delay_mob);
+	ShowInfo ("Done loading '"CL_WHITE"%d"CL_RESET"' NPCs:\n"
+		"\t-'"CL_WHITE"%d"CL_RESET"' Warps\n"
+		"\t-'"CL_WHITE"%d"CL_RESET"' Shops\n"
+		"\t-'"CL_WHITE"%d"CL_RESET"' Scripts\n"
+		"\t-'"CL_WHITE"%d"CL_RESET"' Mobs\n"
+		"\t-'"CL_WHITE"%d"CL_RESET"' Mobs Cached\n"
+		"\t-'"CL_WHITE"%d"CL_RESET"' Mobs Not Cached\n",
+		npc_id - START_NPC_NUM, npc_warp, npc_shop, npc_script, npc_mob, npc_cache_mob, npc_delay_mob);
 
 	memset(script_event, 0, sizeof(script_event));
 	npc_read_event_script();
 	//Debug function to locate all endless loop warps.
 	if (battle_config.warp_point_debug)
 		npc_debug_warps();
-	
+
 	add_timer_func_list(npc_event_timer,"npc_event_timer");
 	add_timer_func_list(npc_event_do_clock,"npc_event_do_clock");
 	add_timer_func_list(npc_timerevent,"npc_timerevent");

+ 2 - 2
src/map/npc.h

@@ -63,8 +63,8 @@ struct npc_data* npc_name2id(const char *name);
 
 int npc_get_new_npc_id(void);
 
-void npc_addsrcfile(char *);
-void npc_delsrcfile(char *);
+void npc_addsrcfile(const char* name);
+void npc_delsrcfile(const char* name);
 void npc_parsesrcfile(char *);
 int do_final_npc(void);
 int do_init_npc(void);