From 793c5d77e23357c5880e1422c539e5e0cd581eb7 Mon Sep 17 00:00:00 2001 From: momacabu Date: Thu, 27 Dec 2012 22:00:14 +0000 Subject: * Fixed bugreport:7052, npcs with monster sprite now work. * Follow up to r17052, now it properly resets the x and y coordinate for every npc and checks it after the map. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@17053 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/npc.c | 17 +++++++++++++++-- src/map/status.c | 4 ++-- 2 files changed, 17 insertions(+), 4 deletions(-) (limited to 'src/map') diff --git a/src/map/npc.c b/src/map/npc.c index 0443c81f1..67eff6f8c 100644 --- a/src/map/npc.c +++ b/src/map/npc.c @@ -3487,10 +3487,11 @@ void npc_parsesrcfile(const char* filepath, bool runOnInit) if( strcmp(w1,"-") !=0 && strcasecmp(w1,"function") != 0 ) {// w1 = ,,, char mapname[MAP_NAME_LENGTH*2]; + x = y = 0; sscanf(w1,"%23[^,],%d,%d[^,]",mapname,&x,&y); - if( !mapindex_name2id(mapname) || (x < 0 || x >= map[map_mapname2mapid(mapname)].xs || y < 0 || y >= map[map_mapname2mapid(mapname)].ys) ) + if( !mapindex_name2id(mapname) ) {// Incorrect map, we must skip the script info... - ShowError("npc_parsesrcfile: Unknown map '%s' or coordinates ('%d', '%d') in file '%s', line '%d'. Skipping line...\n", mapname, x, y, filepath, strline(buffer,p-buffer)); + ShowError("npc_parsesrcfile: Unknown map '%s' in file '%s', line '%d'. Skipping line...\n", mapname, filepath, strline(buffer,p-buffer)); if( strcasecmp(w2,"script") == 0 && count > 3 ) { if((p = npc_skip_script(p,buffer,filepath)) == NULL) @@ -3514,6 +3515,18 @@ void npc_parsesrcfile(const char* filepath, bool runOnInit) p = strchr(p,'\n');// next line continue; } + if (x < 0 || x >= map[m].xs || y < 0 || y >= map[m].ys) { + ShowError("npc_parsesrcfile: Unknown coordinates ('%d', '%d') for map '%s' in file '%s', line '%d'. Skipping line...\n", x, y, mapname, filepath, strline(buffer,p-buffer)); + if( strcasecmp(w2,"script") == 0 && count > 3 ) + { + if((p = npc_skip_script(p,buffer,filepath)) == NULL) + { + break; + } + } + p = strchr(p,'\n');// next line + continue; + } } if( strcasecmp(w2,"warp") == 0 && count > 3 ) diff --git a/src/map/status.c b/src/map/status.c index 7047906e1..df30516ca 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -5805,7 +5805,7 @@ struct status_data *status_get_status_data(struct block_list *bl) case BL_HOM: return &((TBL_HOM*)bl)->battle_status; case BL_MER: return &((TBL_MER*)bl)->battle_status; case BL_ELEM: return &((TBL_ELEM*)bl)->battle_status; - case BL_NPC: return &((TBL_NPC*)bl)->status; + case BL_NPC: return ((mobdb_checkid(((TBL_NPC*)bl)->class_) == 0) ? &((TBL_NPC*)bl)->status : &dummy_status); default: return &dummy_status; } @@ -5821,7 +5821,7 @@ struct status_data *status_get_base_status(struct block_list *bl) case BL_HOM: return &((TBL_HOM*)bl)->base_status; case BL_MER: return &((TBL_MER*)bl)->base_status; case BL_ELEM: return &((TBL_ELEM*)bl)->base_status; - case BL_NPC: return &((TBL_NPC*)bl)->status; + case BL_NPC: return ((mobdb_checkid(((TBL_NPC*)bl)->class_) == 0) ? &((TBL_NPC*)bl)->status : NULL); default: return NULL; } -- cgit v1.2.3-70-g09d2