Hello. I am trying to parse a bsp file to get the keys and values of each entity, but ti doesn't seem to work well. No text is parsed.
PHP Code:
stock int strtok(const char[] szText, char[] szLeft, const int iLeftLen, char[] szRight, const int iRightLen, const char[] szToken, const int iTrimSpaces = 0) // from max_utils.inc
{
int iPosLen = 0;
iPosLen = StrContains(szText, szToken);
if(!iPosLen)
return 0;
SplitString(szText, szToken, szLeft, iLeftLen);
strcopy(szRight, iRightLen, szText[iPosLen + strlen(szToken)]);
if(iTrimSpaces)
{
TrimString(szLeft);
TrimString(szRight);
}
return strlen(szText);
}
void ParseEntities()
{
char szMapName[128], szMapPath[512], szFileLine[2048];
int iEntID = START_ENTITY;
GetCurrentMap(szMapName, charsmax(szMapName));
FormatEx(szMapPath, charsmax(szMapPath), "maps/%s.bsp", szMapName);
Handle hFile = OpenFile(szMapPath, "r");
if(hFile == INVALID_HANDLE)
{
LogError("Error parsing map '%s'!", szMapName);
return;
}
while(!IsEndOfFile(hFile) && ReadFileLine(hFile, szFileLine, charsmax(szFileLine)))
{
if(strlen(szFileLine) == 0)
continue;
if(StrContains(szFileLine, "\"classname\"") != -1)
{
if(StrContains(szFileLine, "\"hammerid\"") != -1) // on Fortress Forever hammerid doesn't exist
continue;
while(!IsEndOfFile(hFile) && ReadFileLine(hFile, szFileLine, charsmax(szFileLine)))
{
if(strlen(szFileLine) == 0)
continue;
if(szFileLine[0] != '"' && szFileLine[0] != '{' && szFileLine[0] != '}')
break;
if(iEntID == START_ENTITY)
PrintToServer(szFileLine);
if(!IsArrayValid(g_aEntVars[iEntID]))
g_aEntVars[iEntID] = CreateArray(g_iArrayLen, g_iArraySize);
char szLeft[128], szRight[128], szText[256];
strtok(szFileLine, szLeft, charsmax(szLeft), szRight, charsmax(szRight), " ");
StripQuotes(szLeft);
StripQuotes(szRight);
FormatEx(szText, charsmax(szText), "%s*%s", szLeft, szRight);
PushArrayString(g_aEntVars[iEntID], szText);
// DEBUG
if(iEntID == START_ENTITY)
PrintToServer(szText);
if(szFileLine[0] == '}')
iEntID++;
}
break;
}
}
CloseHandle(hFile);
}