From ff6f41503500c5569fe38c8d31ca06d92d07a4e4 Mon Sep 17 00:00:00 2001 From: Rustam Ismailov <46057609+rismailov@users.noreply.github.com> Date: Fri, 10 Jul 2026 05:32:04 +0300 Subject: [PATCH 1/6] Lang_GetCodes, Lang_printex and variable name --- zlang.inc | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/zlang.inc b/zlang.inc index 6e4e4df..6a62557 100644 --- a/zlang.inc +++ b/zlang.inc @@ -50,7 +50,7 @@ */ #if !defined MAX_LANGS - #define MAX_LANGS (2) + #define MAX_LANGS (5) #endif #if !defined LANG_VAR_OFFSET @@ -698,29 +698,30 @@ stock Lang_ReturnCode(Lang:lang) stock Lang_GetCodes(result[], const size = sizeof(result), const separator = '/', const bool:isuppercase = false) { - new - lang, - i, - length, + static + code[MAX_LANG_CODE + 1], + Lang:lang, sep[2]; result[0] = '\0'; sep[0] = separator; - 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: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]); - } + _Lang_strcpy(code, gLangInfo[lang][e_zlCode], MAX_LANG_CODE + 1); + + for (new i = 0; code[i] != '\0'; i += 1) { + code[i] = isuppercase ? toupper(code[i]) : tolower(code[i]); } + + strcat(result, code, size); + strcat(result, sep, size); } - length = strlen(result); + new length = strlen(result); if (length != 0) { result[length - 1] = '\0'; } @@ -980,12 +981,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) { @@ -1646,7 +1644,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: language variable (%s) is undefined\n", varname); break; } From e9dab727a8fb8733e7eda0ecff481d38177388d6 Mon Sep 17 00:00:00 2001 From: Rustam Ismailov <46057609+rismailov@users.noreply.github.com> Date: Fri, 10 Jul 2026 05:37:00 +0300 Subject: [PATCH 2/6] Update zlang.inc --- zlang.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zlang.inc b/zlang.inc index 6a62557..7ec36cc 100644 --- a/zlang.inc +++ b/zlang.inc @@ -50,7 +50,7 @@ */ #if !defined MAX_LANGS - #define MAX_LANGS (5) + #define MAX_LANGS (2) #endif #if !defined LANG_VAR_OFFSET From 207889655c15f937695efba1ba6a460c30308bfc Mon Sep 17 00:00:00 2001 From: Rustam Ismailov <46057609+rismailov@users.noreply.github.com> Date: Fri, 10 Jul 2026 12:40:15 +0300 Subject: [PATCH 3/6] simplify and optimize --- zlang.inc | 54 +++++++++++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/zlang.inc b/zlang.inc index 7ec36cc..629d0ad 100644 --- a/zlang.inc +++ b/zlang.inc @@ -698,33 +698,33 @@ stock Lang_ReturnCode(Lang:lang) stock Lang_GetCodes(result[], const size = sizeof(result), const separator = '/', const bool:isuppercase = false) { - static - code[MAX_LANG_CODE + 1], - Lang:lang, - sep[2]; - - result[0] = '\0'; - sep[0] = separator; - - for (lang = Lang:0; lang < Lang:MAX_LANGS; _:lang += 1) { - if (!Lang_IsValid(Lang:lang)) { - continue; - } - - _Lang_strcpy(code, gLangInfo[lang][e_zlCode], MAX_LANG_CODE + 1); - - for (new i = 0; code[i] != '\0'; i += 1) { - code[i] = isuppercase ? toupper(code[i]) : tolower(code[i]); - } - - strcat(result, code, size); - strcat(result, sep, size); - } - - new length = strlen(result); - if (length != 0) { - result[length - 1] = '\0'; - } + static + Lang:lang, + pos; + + pos = 0; + + for (lang = Lang:0; lang < Lang:MAX_LANGS; _:lang += 1) + { + if (!Lang_IsValid(Lang:lang)) { + continue; + } + + for (new i = 0; gLangInfo[lang][e_zlCode][i] != '\0' && pos < size - 1; i += 1) { + result[pos++] = isuppercase + ? toupper(gLangInfo[lang][e_zlCode][i]) + : tolower(gLangInfo[lang][e_zlCode][i]); + } + + if (pos < size - 1) { + result[pos++] = separator; + } + } + + if (pos != 0) { + pos--; + } + result[pos] = '\0'; } stock Lang_ReturnCodes(const separator = '/', const bool:isuppercase = false) From 57642d1dfd1ffdbfbc46a307ae714e0cb812b14b Mon Sep 17 00:00:00 2001 From: Rustam Ismailov <46057609+rismailov@users.noreply.github.com> Date: Fri, 10 Jul 2026 14:25:06 +0300 Subject: [PATCH 4/6] Lang_GetCount --- zlang.inc | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/zlang.inc b/zlang.inc index 629d0ad..3ad7d68 100644 --- a/zlang.inc +++ b/zlang.inc @@ -167,7 +167,6 @@ static gLangInfo[MAX_LANGS][e_ZLANG_INFO], gLangFiles[MAX_LANGS][MAX_LANG_FILES][MAX_LANG_FILENAME], gLangSlots[MAX_LANGS char], - gLangCount, Lang:gDefaultLang, Lang:gPlayerLang[MAX_PLAYERS]; @@ -278,8 +277,6 @@ static stock Lang_Load() if (_Lang_IsVarExists(LANG_SYSVAR_SLOT_STATUS, _:lang)) { status = _Lang_GetVarInt(LANG_SYSVAR_SLOT_STATUS, _:lang); _Lang_SetSlotStatus(lang, status); - - gLangCount += 1; } else { _Lang_SetSlotStatus(lang, LANG_SLOT_FREE); } @@ -324,7 +321,6 @@ stock Lang:Lang_Add(const code[], const name[]) Lang_SetName(lang, name); Lang_SetSlotStatus(lang, LANG_SLOT_BUSY); - gLangCount += 1; return lang; } @@ -342,7 +338,6 @@ stock Lang_Remove(Lang:lang) } Lang_SetSlotStatus(lang, LANG_SLOT_FREE); - gLangCount -= 1; return 1; } @@ -744,6 +739,14 @@ stock Lang_IsValid(Lang:lang) stock Lang_GetCount() { + new gLangCount; + + for (new Lang:lang; lang < Lang:MAX_LANGS; _:lang += 1) { + if (Lang_IsValid(lang)) { + gLangCount ++; + } + } + return gLangCount; } @@ -1415,12 +1418,6 @@ public zlang_SetCode(Lang:lang, const name[]) forward zlang_SetSlotStatus(Lang:lang, status); public zlang_SetSlotStatus(Lang:lang, status) { - if (_Lang_IsSlotHaveStatus(lang, LANG_SLOT_FREE) && (status & LANG_SLOT_BUSY)) { - gLangCount += 1; - } else if (_Lang_IsSlotHaveStatus(lang, LANG_SLOT_BUSY) && (status & LANG_SLOT_FREE)) { - gLangCount -= 1; - } - _Lang_SetSlotStatus(lang, status); } From 8182f87a5c4bc1d54fb3d8931ff108e8dbee6da6 Mon Sep 17 00:00:00 2001 From: Rustam Ismailov <46057609+rismailov@users.noreply.github.com> Date: Fri, 10 Jul 2026 15:13:40 +0300 Subject: [PATCH 5/6] Update zlang.inc --- zlang.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zlang.inc b/zlang.inc index 3ad7d68..d961364 100644 --- a/zlang.inc +++ b/zlang.inc @@ -1641,7 +1641,7 @@ static stock _Lang_ProcessVars(Lang:lang, strings_with_vars) epos = strfind(varvalue, ")", true, spos); if (epos == -1) { next_iteration = false; - printf("Error: language variable (%s) is undefined\n", varname); + printf("Error: language variable (%s) is undefined", varname); break; } From b932036f11cd01eb93ca790f09b121c5fc11bf2a Mon Sep 17 00:00:00 2001 From: Rustam Ismailov <46057609+rismailov@users.noreply.github.com> Date: Fri, 10 Jul 2026 15:34:03 +0300 Subject: [PATCH 6/6] dynamic variable name --- zlang.inc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zlang.inc b/zlang.inc index d961364..c14d259 100644 --- a/zlang.inc +++ b/zlang.inc @@ -1678,7 +1678,8 @@ 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)"); + strmid(vartmp, text, spos + 3, strlen(text)); + printf("Error: dynamic variable (%s) is undefined", vartmp); break; }