diff --git a/zlang.inc b/zlang.inc index 6e4e4df..6d4363f 100644 --- a/zlang.inc +++ b/zlang.inc @@ -698,32 +698,35 @@ stock Lang_ReturnCode(Lang:lang) stock Lang_GetCodes(result[], const size = sizeof(result), const separator = '/', const bool:isuppercase = false) { - new - lang, - i, - length, - sep[2]; + static + Lang:lang, + pos, + i; - result[0] = '\0'; - sep[0] = separator; + pos = 0; - for (lang = 0; lang < MAX_LANGS; lang += 1) { - strcat(result, gLangInfo[lang][e_zlCode], size); - strcat(result, sep, size); + for (lang = Lang:0; lang < Lang:MAX_LANGS; _:lang += 1) { + if (!Lang_IsValid(lang)) { + continue; + } - for (i = (MAX_LANG_CODE + 1) * lang; i < (MAX_LANG_CODE + 1) * (lang + 1) - 1; i += 1) { - if (isuppercase) { - result[i] = toupper(result[i]); - } else { - result[i] = tolower(result[i]); - } + for (i = 0; i < MAX_LANG_CODE && pos < size - 1; i += 1) { + result[pos] = isuppercase + ? toupper(gLangInfo[_:lang][e_zlCode][i]) + : tolower(gLangInfo[_:lang][e_zlCode][i]); + pos += 1; + } + + if (pos < size - 1) { + result[pos] = separator; + pos += 1; } } - length = strlen(result); - if (length != 0) { - result[length - 1] = '\0'; + if (pos != 0) { + pos -= 1; } + result[pos] = '\0'; } stock Lang_ReturnCodes(const separator = '/', const bool:isuppercase = false) @@ -980,12 +983,9 @@ stock Lang_printf(const var[], lang_args<>) stock Lang_printfex(Lang:lang, const var[], lang_args<>) { static - Lang:lang, text[MAX_LANG_MFORMAT_STRING], success; - lang = Lang_GetDefaultLang(); - success = Lang_GetText(lang, var, text); if (numargs() > 2) { @@ -1063,21 +1063,21 @@ stock Lang_SendTextToAll(const var[], lang_args<>) static playerid, Lang:lang, - text[Lang:MAX_LANGS][MAX_LANG_FORMAT_STRING + 1]; + text[MAX_LANGS][MAX_LANG_FORMAT_STRING + 1]; for (lang = Lang:0; lang < Lang:MAX_LANGS; _:lang += 1) { if (!Lang_IsValid(lang)) { continue; } - Lang_GetText(lang, var, text[lang]); + Lang_GetText(lang, var, text[_:lang]); if (numargs() > 1) { - Lang_format(text[lang], sizeof(text[]), text[lang], lang_start<1>); + Lang_format(text[_:lang], sizeof(text[]), text[_:lang], lang_start<1>); } #if defined ENABLE_LANG_DYNAMIC_VARS - Lang_ProcessDynamicVars(lang, text[lang]); + Lang_ProcessDynamicVars(lang, text[_:lang]); #endif } @@ -1093,7 +1093,7 @@ stock Lang_SendTextToAll(const var[], lang_args<>) continue; } #endif - SendClientMessage(playerid, -1, text[Lang_GetPlayerLang(playerid)]); + SendClientMessage(playerid, -1, text[_:Lang_GetPlayerLang(playerid)]); } } @@ -1102,26 +1102,26 @@ stock Lang_SendTextToPlayers(const players[], const var[], lang_args<>) static idx, Lang:lang, - text[Lang:MAX_LANGS][MAX_LANG_FORMAT_STRING + 1]; + text[MAX_LANGS][MAX_LANG_FORMAT_STRING + 1]; for (lang = Lang:0; lang < Lang:MAX_LANGS; _:lang += 1) { if (!Lang_IsValid(lang)) { continue; } - Lang_GetText(lang, var, text[lang]); + Lang_GetText(lang, var, text[_:lang]); if (numargs() > 2) { - Lang_format(text[lang], sizeof(text[]), text[lang], lang_start<2>); + Lang_format(text[_:lang], sizeof(text[]), text[_:lang], lang_start<2>); } #if defined ENABLE_LANG_DYNAMIC_VARS - Lang_ProcessDynamicVars(lang, text[lang]); + Lang_ProcessDynamicVars(lang, text[_:lang]); #endif } for (idx = 0; players[idx] != INVALID_PLAYER_ID; idx += 1) { - SendClientMessage(players[idx], -1, text[Lang_GetPlayerLang(players[idx])]); + SendClientMessage(players[idx], -1, text[_:Lang_GetPlayerLang(players[idx])]); } } @@ -1130,26 +1130,26 @@ stock Lang_SendTextToPlayersEx(const players[], const size = sizeof(players), co static idx, Lang:lang, - text[Lang:MAX_LANGS][MAX_LANG_FORMAT_STRING + 1]; + text[MAX_LANGS][MAX_LANG_FORMAT_STRING + 1]; for (lang = Lang:0; lang < Lang:MAX_LANGS; _:lang += 1) { if (!Lang_IsValid(lang)) { continue; } - Lang_GetText(lang, var, text[lang]); + Lang_GetText(lang, var, text[_:lang]); if (numargs() > 3) { - Lang_format(text[lang], sizeof(text[]), text[lang], lang_start<3>); + Lang_format(text[_:lang], sizeof(text[]), text[_:lang], lang_start<3>); } #if defined ENABLE_LANG_DYNAMIC_VARS - Lang_ProcessDynamicVars(lang, text[lang]); + Lang_ProcessDynamicVars(lang, text[_:lang]); #endif } for (idx = 0; idx < size && players[idx] != INVALID_PLAYER_ID; idx += 1) { - SendClientMessage(players[idx], -1, text[Lang_GetPlayerLang(players[idx])]); + SendClientMessage(players[idx], -1, text[_:Lang_GetPlayerLang(players[idx])]); } } @@ -1211,21 +1211,21 @@ stock Lang_GameTextForAll(time, style, const var[], lang_args<>) static playerid, Lang:lang, - text[Lang:MAX_LANGS][MAX_LANG_FORMAT_STRING + 1]; + text[MAX_LANGS][MAX_LANG_FORMAT_STRING + 1]; for (lang = Lang:0; lang < Lang:MAX_LANGS; _:lang += 1) { if (!Lang_IsValid(lang)) { continue; } - Lang_GetText(lang, var, text[lang]); + Lang_GetText(lang, var, text[_:lang]); if (numargs() > 3) { - Lang_format(text[lang], sizeof(text[]), text[lang], lang_start<3>); + Lang_format(text[_:lang], sizeof(text[]), text[_:lang], lang_start<3>); } #if defined ENABLE_LANG_DYNAMIC_VARS - Lang_ProcessDynamicVars(lang, text[lang]); + Lang_ProcessDynamicVars(lang, text[_:lang]); #endif } @@ -1241,7 +1241,7 @@ stock Lang_GameTextForAll(time, style, const var[], lang_args<>) continue; } #endif - GameTextForPlayer(playerid, text[Lang_GetPlayerLang(playerid)], time, style); + GameTextForPlayer(playerid, text[_:Lang_GetPlayerLang(playerid)], time, style); } } @@ -1646,7 +1646,7 @@ static stock _Lang_ProcessVars(Lang:lang, strings_with_vars) epos = strfind(varvalue, ")", true, spos); if (epos == -1) { next_iteration = false; - printf("Error: error with using language variables, example of usage: \\v(VARIABLE)"); + printf("Error: invalid language variable found \"%s\" in \"%s\". Please use the following format: \\v(VARIABLE).", varvalue[spos + 3], varname); break; } @@ -1683,7 +1683,7 @@ stock Lang_ProcessDynamicVars(Lang:lang, text[], const size = sizeof(text)) while ((spos = strfind(text, "\\v(", true)) != -1) { epos = strfind(text, ")", true, spos); if (epos == -1) { - printf("Error: error with using language variables, example of usage: \\v(VARIABLE)"); + printf("Error: invalid language variable found \"%s\". Please use the following format: \\v(VARIABLE).", text[spos + 3]); break; }