* Restricted more the parsing of npc code. (fixes bugreport:317)
git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@11603 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
e29f5887de
commit
d51639d405
@ -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.
|
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
||||||
|
|
||||||
2007/10/28
|
2007/10/28
|
||||||
|
* Restricted more the parsing of npc code. (fixes bugreport:317) [FlavioJS]
|
||||||
* Fixed a bug sending on the attachment message [Zephyrus]
|
* Fixed a bug sending on the attachment message [Zephyrus]
|
||||||
2007/10/27
|
2007/10/27
|
||||||
* Fixed a typo in r11505 messing up the 'npcmove' command
|
* Fixed a typo in r11505 messing up the 'npcmove' command
|
||||||
|
@ -1736,6 +1736,11 @@ static const char* npc_skip_script(const char* start, const char* buffer, const
|
|||||||
return p+1;// return after the last '}'
|
return p+1;// return after the last '}'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Parses a npc script.
|
||||||
|
///
|
||||||
|
/// -%TAB%script%TAB%<NPC Name>%TAB%-1,{<code>}
|
||||||
|
/// <map name>,<x>,<y>,<facing>%TAB%script%TAB%<NPC Name>%TAB%<sprite id>,{<code>}
|
||||||
|
/// <map name>,<x>,<y>,<facing>%TAB%script%TAB%<NPC Name>%TAB%<sprite id>,<triggerX>,<triggerY>,{<code>}
|
||||||
static const char* npc_parse_script(char* w1, char* w2, char* w3, char* w4, const char* start, const char* buffer, const char* filepath)
|
static const char* npc_parse_script(char* w1, char* w2, char* w3, char* w4, const char* start, const char* buffer, const char* filepath)
|
||||||
{
|
{
|
||||||
int x, y, dir = 0, m, xs = 0, ys = 0, class_ = 0; // [Valaris] thanks to fov
|
int x, y, dir = 0, m, xs = 0, ys = 0, class_ = 0; // [Valaris] thanks to fov
|
||||||
@ -1758,10 +1763,9 @@ static const char* npc_parse_script(char* w1, char* w2, char* w3, char* w4, cons
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{// npc in a map
|
{// npc in a map
|
||||||
if( sscanf(w1, "%31[^,],%d,%d,%d", mapname, &x, &y, &dir) != 4
|
if( sscanf(w1, "%31[^,],%d,%d,%d", mapname, &x, &y, &dir) != 4 )
|
||||||
|| (strcasecmp(w2, "script") == 0 && strchr(w4,',') == NULL) )
|
|
||||||
{
|
{
|
||||||
ShowError("npc_parse_script: Unkown format for a script in file '%s', line '%d'. Skipping the rest of file...\n * w1=%s\n * w2=%s\n * w3=%s\n * w4=%s\n", filepath, strline(buffer,start-buffer), w1, w2, w3, w4);
|
ShowError("npc_parse_script: Invalid placement format for a script in file '%s', line '%d'. Skipping the rest of file...\n * w1=%s\n * w2=%s\n * w3=%s\n * w4=%s\n", filepath, strline(buffer,start-buffer), w1, w2, w3, w4);
|
||||||
return NULL;// unknown format, don't continue
|
return NULL;// unknown format, don't continue
|
||||||
}
|
}
|
||||||
m = map_mapname2mapid(mapname);
|
m = map_mapname2mapid(mapname);
|
||||||
@ -1769,14 +1773,20 @@ static const char* npc_parse_script(char* w1, char* w2, char* w3, char* w4, cons
|
|||||||
|
|
||||||
if( strcmp(w2, "script") == 0 )
|
if( strcmp(w2, "script") == 0 )
|
||||||
{// parsing script with curly
|
{// parsing script with curly
|
||||||
const char* real_start;
|
const char* script_start;
|
||||||
|
|
||||||
end = npc_skip_script(start, buffer, filepath);
|
if( strstr(w4,",{") == NULL )
|
||||||
|
{
|
||||||
|
ShowError("npc_parse_script: Missing left curly ',{' in file '%s', line '%d'. Skipping the rest of the file.\n * w1=%s\n * w2=%s\n * w3=%s\n * w4=%s\n", filepath, strline(buffer,start-buffer), w1, w2, w3, w4);
|
||||||
|
return NULL;// can't continue
|
||||||
|
}
|
||||||
|
script_start = strstr(start,",{")+1;
|
||||||
|
|
||||||
|
end = npc_skip_script(script_start, buffer, filepath);
|
||||||
if( end == NULL )
|
if( end == NULL )
|
||||||
return NULL;// (simple) parse error, don't continue
|
return NULL;// (simple) parse error, don't continue
|
||||||
|
|
||||||
real_start = strchr(start,'{');
|
script = parse_script(script_start, filepath, strline(buffer,script_start-buffer), SCRIPT_USE_LABEL_DB);
|
||||||
script = parse_script(real_start, filepath, strline(buffer,real_start-buffer), SCRIPT_USE_LABEL_DB);
|
|
||||||
label_list = NULL;
|
label_list = NULL;
|
||||||
label_list_num = 0;
|
label_list_num = 0;
|
||||||
src_id = 0;
|
src_id = 0;
|
||||||
@ -2015,6 +2025,13 @@ static const char* npc_parse_function(char* w1, char* w2, char* w3, char* w4, co
|
|||||||
struct script_code *oldscript;
|
struct script_code *oldscript;
|
||||||
const char* end;
|
const char* end;
|
||||||
|
|
||||||
|
start = strstr(start,"\t{");
|
||||||
|
if( *w4 != '{' || start == NULL )
|
||||||
|
{
|
||||||
|
ShowError("npc_parse_function: Missing left curly '%%TAB%%{' in file '%s', line '%d'. Skipping the rest of the file.\n * w1=%s\n * w2=%s\n * w3=%s\n * w4=%s\n", filepath, strline(buffer,start-buffer), w1, w2, w3, w4);
|
||||||
|
return NULL;// can't continue
|
||||||
|
}
|
||||||
|
|
||||||
end = npc_skip_script(start,buffer,filepath);
|
end = npc_skip_script(start,buffer,filepath);
|
||||||
if( end == NULL )
|
if( end == NULL )
|
||||||
return NULL;// (simple) parse error, don't continue
|
return NULL;// (simple) parse error, don't continue
|
||||||
|
Loading…
x
Reference in New Issue
Block a user