Addes STRTOKEN function to sphere;
Usage: <STRTOKEN text,n,seperator>
<STRTOKEN a.b.c.d.e,3,.> returns c
<STRTOKEN a.b.c.d.e,0,.> returns 5
<STRTOKEN a.b.c.d.e,6,.> returns null
You can also specify a range of tokens:
<STRTOKEN a.b.c.d.e,2-,.> returns 2nd token onwards = b.c.d.e
<STRTOKEN a.b.c.d.e,2-4,.> returns tokens 2 through 4 = b.c.d
Installation;
Note: Please backup your files before starting to edit.
Open File: src/common/CScriptObj.cpp
find:
add before:
Code:
case SSC_StrToken:
{
TCHAR * ppArgs[3];
size_t iQty = Str_ParseCmds(const_cast<TCHAR *>(pszKey), ppArgs, COUNTOF(ppArgs), ",");
if ( iQty < 3 )
return false;
if ( *ppArgs[2] == '"' )
ppArgs[2]++;
for (TCHAR * pEnd = ppArgs[2] + strlen(ppArgs[2]) - 1; pEnd >= ppArgs[2]; pEnd--)
{
if ( *pEnd == '"' )
{
*pEnd = '\0';
break;
}
}
TCHAR * iSep = ppArgs[2];
for (TCHAR *iSeperator = ppArgs[2] + strlen(ppArgs[2]) - 1; iSeperator > ppArgs[2]; iSeperator--)
*iSeperator = '\0';
if ( *ppArgs[0] == '"' )
ppArgs[0]++;
for (TCHAR * pEnd = ppArgs[0] + strlen(ppArgs[0]) - 1; pEnd >= ppArgs[0]; pEnd--)
{
if ( *pEnd == '"' )
{
*pEnd = '\0';
break;
}
}
sVal = "";
TCHAR *ppCmd[255];
size_t count = Str_ParseCmds(ppArgs[0], ppCmd, COUNTOF(ppCmd), iSep);
TCHAR * ppArrays[2];
size_t iArrays = Str_ParseCmds(ppArgs[1], ppArrays, COUNTOF(ppArrays), "-");
INT64 iValue = Exp_GetVal(ppArgs[1]);
INT64 iValueEnd = iValue;
if (iArrays > 1)
{
iValue = Exp_GetVal(ppArrays[0]);
iValueEnd = Exp_GetVal(ppArrays[1]);
if (iValueEnd <= 0 || iValueEnd > count)
iValueEnd = count;
}
if (iValue < 0)
return false;
else if (iValue > 0)
{
if (iValue > count)
return false;
else if (iValue == iValueEnd)
sVal = ppCmd[iValue - 1];
else
{
sVal.Add(ppCmd[iValue - 1]);
INT64 i = iValue + 1;
for ( ; i <= iValueEnd; i++)
{
sVal.Add(iSep);
sVal.Add(ppCmd[i - 1]);
}
}
}
else
sVal.FormatVal(static_cast<long>(count));
}
return true;
Open File: src/tables/CScriptObj_functions.tbl
find:
Code:
ADD(StrSub, "StrSub")
add after:
Code:
ADD(StrToken, "StrToken")