Skip to content

방만들고 핀들잡고나서는 에러가 뜨면서 멈춰버리는군요.
NTItemparser.ntl문장 전체입니다. 수정해야 할 부분이 어떤것인지 알려주세요..

/*

[Item-parser Syntax Information]

1. [Keyword] separates into two groups
- [Property Keywords] : [Type], [Name], [Class], [Quality], [Flag], [Level], [Prefix], [Suffix]
- [Stat Keywords] : [Number or Alias]

2. [Keyword] must be surrounded by '[' and ']'

3. [Property Keywords] must be placed first

4. Insert '#' symbol between [Property Keywords] and [Stat Keywords]

5. Use '+', '-', '*', '/', '(', ')', '&&', '||', '>', '>=', '<', '<=', '==', '!=' symbols for comparison

6. Use '//' symbol for comment

*/

Include("libs/common/NTItemAlias.ntl");

var _NTIP_CheckList = new Array();

function NTIPOpenFile(filepath)
{
 var _nipfile;
 var _line;

 _nipfile = FileOpen(filepath, 0);

 if(!_nipfile)
 return false;

 while(!_nipfile.eof)
 {
 _line = NTIPParseLineInt(_nipfile.ReadLine());

 if(_line)
 _NTIP_CheckList.push(_line);
 }

 _nipfile.Close();

 return true;
}

function NTIPCheckItem(item)
{
 var i;
 var _identified;
 var _result = 0;

 _identified = item.itemflag & 0x10;

 for(i = 0 ; i < _NTIP_CheckList.length ; i++)
 {
 if(_NTIP_CheckList[i][0].length > 0)
 {
 if(eval(_NTIP_CheckList[i][0]))
 {
 if(_NTIP_CheckList[i][1].length > 0)
 {
 if(eval(_NTIP_CheckList[i][1]))
 return 1;
 else if(!_identified && _result == 0)
 _result = -1;
 }
 else
 return 1;
 }
 }
 else if(_NTIP_CheckList[i][1].length > 0)
 {
 if(eval(_NTIP_CheckList[i][1]))
 return 1;
 else if(!_identified && _result == 0)
 _result = -1;
 }
 }

 return _result;
}

// Internal function
function NTIPParseLineInt(input)
{
 var i;
 var _start, _end;
 var _section, _keyword;
 var _result;

 _end = input.indexOf("//");
 if(_end != -1)
 input = input.substring(0, _end);

 input = input.replace(/ |;/g, "").toLowerCase();

 if(input.length < 5)
 return null;

 _result = input.split("#");

 if(_result[0] && _result[0].length > 4)
 {
 _section = _result[0].split("[");

 _result[0] = _section[0];

 for(i = 1 ; i < _section.length ; i++)
 {
 _end = _section[i].indexOf("]") + 1;

 switch(_section[i][0])
 {
 case 't':
 _result[0] += "item.itemtype";
 break;
 case 'n':
 _result[0] += "item.classid";
 break;
 case 'c':
 _result[0] += "item.itemclass";
 break;
 case 'q':
 _result[0] += "item.quality";
 break;
 case 'f':
 if(_section[i][_end] == '!')
 _result[0] += "!(item.itemflag&";
 else
 _result[0] += "(item.itemflag&";

 _end += 2;
 break;
 case 'l':
 _result[0] += "item.itemlevel";
 break;
 case 'p':
 _result[0] += "item.itemprefix";
 break;
 case 's':
 _result[0] += "item.itemsuffix";
 break;
 default:
 Print("Unknown Keyword : " + input);
 break;
 }

 for(_start = _end ; _end < _section[i].length ; _end++)
 {
 if(!NTIPIsSyntaxInt(_section[i][_end]))
 break;
 }

 _result[0] += _section[i].substring(_start, _end);

 for(_start = _end ; _end < _section[i].length ; _end++)
 {
 if(NTIPIsSyntaxInt(_section[i][_end]))
 break;
 }

 _keyword = _section[i].substring(_start, _end);

 if(isNaN(_keyword))
 {
 switch(_section[i][0])
 {
 case 't':
 _result[0] += _NTIPAliasType[_keyword];
 break;
 case 'n':
 _result[0] += _NTIPAliasClassID[_keyword];
 break;
 case 'c':
 _result[0] += _NTIPAliasClass[_keyword];
 break;
 case 'q':
 _result[0] += _NTIPAliasQuality[_keyword];
 break;
 case 'f':
 _result[0] += _NTIPAliasFlag[_keyword] + ")";
 break;
 }
 }
 else
 {
 if(_section[i][0] == 'f')
 _result[0] += _keyword + ")";
 else
 _result[0] += _keyword;
 }

 _result[0] += _section[i].substring(_end);
 }
 }
 else
 _result[0] = "";

 if(_result[1] && _result[1].length > 4)
 {
 _section = _result[1].split("[");

 _result[1] = _section[0];

 for(i = 1 ; i < _section.length ; i++)
 {
 _end = _section[i].indexOf("]");

 _keyword = _section[i].substring(0, _end);

 if(isNaN(_keyword))
 _result[1] += "item.GetStat(" + _NTIPAliasStat[_keyword] + ")";
 else
 _result[1] += "item.GetStat(" + _keyword + ")";

 _result[1] += _section[i].substring(_end+1);
 }
 }
 else
 _result[1] = "";

 return _result;
}

function NTIPIsSyntaxInt(ch)
{
 return (ch == '!' || ch == '%' || ch == '&' || (ch >= '(' && ch <= '+') || ch == '-' || ch == '/' || (ch >= ':' && ch <= '?') || ch == '|');
}