mirror of
https://github.com/alliedmodders/amxmodx.git
synced 2025-01-12 06:48:04 +03:00
Fixed bugs
This commit is contained in:
parent
8811b56756
commit
9b2a1d204c
@ -484,7 +484,6 @@ const char *CLangMngr::Format(const char *src, ...)
|
|||||||
};
|
};
|
||||||
|
|
||||||
State curState = S_Normal;
|
State curState = S_Normal;
|
||||||
|
|
||||||
while (*src)
|
while (*src)
|
||||||
{
|
{
|
||||||
if (*src == '%' && curState == S_Normal)
|
if (*src == '%' && curState == S_Normal)
|
||||||
@ -500,36 +499,44 @@ const char *CLangMngr::Format(const char *src, ...)
|
|||||||
*outptr++ = *tmpArg++;
|
*outptr++ = *tmpArg++;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'd':
|
|
||||||
{
|
|
||||||
itoa(va_arg(argptr, int), outptr, 10);
|
|
||||||
outptr += strlen(outptr);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 'f':
|
case 'f':
|
||||||
case 'g':
|
case 'g':
|
||||||
{
|
{
|
||||||
double tmpArg = va_arg(argptr, double);
|
char format[16];
|
||||||
sprintf(outptr, "%f", tmpArg);
|
format[0] = '%';
|
||||||
|
char *ptr = format+1;
|
||||||
|
while (!isalpha(*ptr++ = *src++))
|
||||||
|
/*nothing*/;
|
||||||
|
--src;
|
||||||
|
*ptr = 0;
|
||||||
|
sprintf(outptr, format, va_arg(argptr, double));
|
||||||
outptr += strlen(outptr);
|
outptr += strlen(outptr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'L':
|
case 'L':
|
||||||
{
|
{
|
||||||
char *langName = va_arg(argptr, char*);
|
char *langName = va_arg(argptr, char*);
|
||||||
// Handle player ids (1-32)
|
const char *cpLangName=NULL;
|
||||||
if ((int)langName >= 1 && (int)langName <= 32)
|
// Handle player ids (1-32) and server language
|
||||||
langName = ENTITY_KEYVALUE(GET_PLAYER_POINTER_I((int)langName)->pEdict, "_language");
|
if ((int)langName == 0)
|
||||||
|
langName = (char*)m_CurGlobId;
|
||||||
|
if ((int)langName == -1)
|
||||||
|
cpLangName = g_vault.get("server_language");
|
||||||
|
else if ((int)langName >= 1 && (int)langName <= 32)
|
||||||
|
cpLangName = ENTITY_KEYVALUE(GET_PLAYER_POINTER_I((int)langName)->pEdict, "_language");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cpLangName = langName;
|
||||||
|
}
|
||||||
char *key = va_arg(argptr, char*);
|
char *key = va_arg(argptr, char*);
|
||||||
const char *def = GetDef(langName, key);
|
const char *def = GetDef(cpLangName, key);
|
||||||
while (*def)
|
while (*def)
|
||||||
{
|
{
|
||||||
switch (*def)
|
switch (*def)
|
||||||
{
|
{
|
||||||
case INSERT_NUMBER:
|
case INSERT_NUMBER:
|
||||||
{
|
{
|
||||||
itoa(va_arg(argptr, int), outptr, 10);
|
sprintf(outptr, "%d", va_arg(argptr, int));
|
||||||
outptr += strlen(outptr);
|
outptr += strlen(outptr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -554,12 +561,24 @@ const char *CLangMngr::Format(const char *src, ...)
|
|||||||
default:
|
default:
|
||||||
*outptr++ = *def;
|
*outptr++ = *def;
|
||||||
}
|
}
|
||||||
++def;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 'd':
|
||||||
|
{
|
||||||
|
char format[16];
|
||||||
|
format[0] = '%';
|
||||||
|
char *ptr = format+1;
|
||||||
|
while (!isalpha(*ptr++ = *src++))
|
||||||
|
/*nothing*/;
|
||||||
|
--src;
|
||||||
|
*ptr = 0;
|
||||||
|
sprintf(outptr, format, va_arg(argptr, int));
|
||||||
|
outptr += strlen(outptr);
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
*outptr++= '%';
|
*outptr++ = '%';
|
||||||
*outptr++ = *src;
|
*outptr++ = *src;
|
||||||
}
|
}
|
||||||
curState = S_Normal;
|
curState = S_Normal;
|
||||||
@ -623,7 +642,7 @@ char * CLangMngr::FormatAmxString(AMX *amx, cell *params, int parm, int &len)
|
|||||||
*pLangName = m_CurGlobId;
|
*pLangName = m_CurGlobId;
|
||||||
if (*pLangName == -1)
|
if (*pLangName == -1)
|
||||||
cpLangName = g_vault.get("server_language");
|
cpLangName = g_vault.get("server_language");
|
||||||
else if (*pLangName > 1 && *pLangName < 32)
|
else if (*pLangName >= 1 && *pLangName <= 32)
|
||||||
cpLangName = ENTITY_KEYVALUE(GET_PLAYER_POINTER_I(*pLangName)->pEdict, "_language");
|
cpLangName = ENTITY_KEYVALUE(GET_PLAYER_POINTER_I(*pLangName)->pEdict, "_language");
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -639,7 +658,7 @@ char * CLangMngr::FormatAmxString(AMX *amx, cell *params, int parm, int &len)
|
|||||||
{
|
{
|
||||||
case INSERT_NUMBER:
|
case INSERT_NUMBER:
|
||||||
{
|
{
|
||||||
itoa((float)*(REAL*)get_amxaddr(amx, params[parm++]), outptr, 10);
|
sprintf(outptr, "%d", *get_amxaddr(amx, params[parm++]));
|
||||||
outptr += strlen(outptr);
|
outptr += strlen(outptr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -996,4 +1015,4 @@ bool CLangMngr::LangExists(const char *langName)
|
|||||||
void CLangMngr::SetDefLang(int id)
|
void CLangMngr::SetDefLang(int id)
|
||||||
{
|
{
|
||||||
m_CurGlobId = id;
|
m_CurGlobId = id;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user