From 88abcd89d46df811910cf5aa250bbb8a8db6816e Mon Sep 17 00:00:00 2001 From: R1KO Date: Tue, 11 Jun 2019 12:27:52 +0300 Subject: [PATCH 01/20] fix phrase --- .gitignore | 1 + addons/sourcemod/translations/vip_core.phrases.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 1d74e21..81cca17 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .vscode/ +*.smx diff --git a/addons/sourcemod/translations/vip_core.phrases.txt b/addons/sourcemod/translations/vip_core.phrases.txt index ef13113..9114b3e 100644 --- a/addons/sourcemod/translations/vip_core.phrases.txt +++ b/addons/sourcemod/translations/vip_core.phrases.txt @@ -186,6 +186,7 @@ } "LOG_ADMIN_SET_EXPIRATION" { + "#format" "{1:L},{2:s},{3:s}" "en" "Admin {1} has set {2} VIP's duration to {3}" "fi" "Admin {1} on asettanut VIP-pelaajalle {2} VIP keston tilalle {3}" "de" "Admin {1} {2}s VIP-Dauer um {3} eingestellt" From d44f44d6054b64382fb7bb999cd7529281cc9944 Mon Sep 17 00:00:00 2001 From: R1KO Date: Tue, 11 Jun 2019 12:28:03 +0300 Subject: [PATCH 02/20] fix api features --- addons/sourcemod/scripting/VIP_Core.sp | 2 +- .../sourcemod/scripting/include/vip_core.inc | 5 +- addons/sourcemod/scripting/vip/API.sp | 215 +++++++----------- addons/sourcemod/scripting/vip/Features.sp | 6 + addons/sourcemod/scripting/vip/VipMenu.sp | 6 - 5 files changed, 97 insertions(+), 137 deletions(-) diff --git a/addons/sourcemod/scripting/VIP_Core.sp b/addons/sourcemod/scripting/VIP_Core.sp index 0ee428e..67baa68 100644 --- a/addons/sourcemod/scripting/VIP_Core.sp +++ b/addons/sourcemod/scripting/VIP_Core.sp @@ -6,7 +6,7 @@ #include #include -#define VIP_VERSION "3.0 R" +#define VIP_VERSION "3.1 DEV" #define DEBUG_MODE 0 // Режим отладки diff --git a/addons/sourcemod/scripting/include/vip_core.inc b/addons/sourcemod/scripting/include/vip_core.inc index b65d6b4..892c329 100644 --- a/addons/sourcemod/scripting/include/vip_core.inc +++ b/addons/sourcemod/scripting/include/vip_core.inc @@ -419,9 +419,10 @@ native void VIP_RegisterFeature(const char[] szFeature, * - * @param szFeature Уникальное имя ф-и. * - - * @noreturn + * @return true - VIP-функция существовала и была удалена. + * false - VIP-функция не существовала. */ -native void VIP_UnregisterFeature(const char[] szFeature); +native bool VIP_UnregisterFeature(const char[] szFeature); /** * Удаляет все VIP-функции зарегистрированные плагином (вызывать в OnPluginEnd()). diff --git a/addons/sourcemod/scripting/vip/API.sp b/addons/sourcemod/scripting/vip/API.sp index b410ab9..6a0185c 100644 --- a/addons/sourcemod/scripting/vip/API.sp +++ b/addons/sourcemod/scripting/vip/API.sp @@ -780,11 +780,10 @@ public int Native_RegisterFeature(Handle hPlugin, int iNumParams) CreateForward_OnFeatureRegistered(szFeature); DebugMessage("Feature \"%s\" registered", szFeature) + return 0; } - else - { - ThrowNativeError(SP_ERROR_NATIVE, "Feature \"%s\" already defined/Функция \"%s\" уже существует", szFeature, szFeature); - } + + return ThrowNativeError(SP_ERROR_NATIVE, "Feature \"%s\" already defined/Функция \"%s\" уже существует", szFeature, szFeature); } public int Native_UnregisterFeature(Handle hPlugin, int iNumParams) @@ -792,148 +791,108 @@ public int Native_UnregisterFeature(Handle hPlugin, int iNumParams) char szFeature[FEATURE_NAME_LENGTH]; GetNativeString(1, SZF(szFeature)); - if (IsValidFeature(szFeature)) + if (!IsValidFeature(szFeature)) { - ArrayList hArray; - if (GLOBAL_TRIE.GetValue(szFeature, hArray) && view_as(hArray.Get(FEATURES_PLUGIN)) == hPlugin) - { - VIP_FeatureType eType = view_as(hArray.Get(FEATURES_ITEM_TYPE)); - if (eType == TOGGLABLE) - { - delete view_as(hArray.Get(FEATURES_COOKIE)); - } - - if (eType != HIDE) - { - DataPack hDataPack = view_as(hArray.Get(FEATURES_MENU_CALLBACKS)); - delete hDataPack; - } - - delete hArray; - - GLOBAL_TRIE.Remove(szFeature); - - int i = g_hFeaturesArray.FindString(szFeature); - if (i != -1) - { - g_hFeaturesArray.Erase(i); - } - - if (eType != HIDE) - { - char szItemInfo[FEATURE_NAME_LENGTH]; - int iSize; - iSize = (g_hVIPMenu).ItemCount; - for (i = 0; i < iSize; ++i) - { - g_hVIPMenu.GetItem(i, SZF(szItemInfo)); - if (!strcmp(szItemInfo, szFeature, true)) - { - g_hVIPMenu.RemoveItem(i); - break; - } - } - - if (g_hVIPMenu.ItemCount == 0) - { - g_hVIPMenu.AddItem("NO_FEATURES", "NO_FEATURES", ITEMDRAW_DISABLED); - } - } - - for (i = 1; i <= MaxClients; ++i) - { - if (IsClientInGame(i)) - { - if (g_iClientInfo[i] & IS_VIP) - { - g_hFeatures[i].Remove(szFeature); - g_hFeatureStatus[i].Remove(szFeature); - } - } - } - } - - CreateForward_OnFeatureUnregistered(szFeature); - DebugMessage("Feature \"%s\" unregistered", szFeature) + return 0; } - else + + int i = g_hFeaturesArray.FindString(szFeature); + if (i != -1) { - ThrowNativeError(SP_ERROR_NATIVE, "Feature \"%s\" is invalid/Функция \"%s\" не существует", szFeature, szFeature); + g_hFeaturesArray.Erase(i); } + + UnregisterFeature(szFeature); + + // ThrowNativeError(SP_ERROR_NATIVE, "Feature \"%s\" is invalid/Функция \"%s\" не существует", szFeature, szFeature); + + return 0; } public int Native_UnregisterMe(Handle hPlugin, int iNumParams) { DebugMessage("FeaturesArraySize: %d", g_hFeaturesArray.Length) - if (g_hFeaturesArray.Length > 0) + if (!g_hFeaturesArray.Length) { - char szFeature[FEATURE_NAME_LENGTH]; - ArrayList hArray; - VIP_FeatureType eType; - int i, j; + return 0; + } + + char szFeature[FEATURE_NAME_LENGTH]; + + for (int i = 0, iSize = g_hFeaturesArray.Length; i < iSize; ++i) + { + g_hFeaturesArray.GetString(i, SZF(szFeature)); + g_hFeaturesArray.Erase(i); + --i; + --iSize; + + UnregisterFeature(szFeature, hPlugin); + } + + return 0; +} - for (i = 0; i < g_hFeaturesArray.Length; ++i) +void UnregisterFeature(const char[] szFeature, Handle hPlugin = null) +{ + ArrayList hArray; + VIP_FeatureType eType = TOGGLABLE; + + if (GLOBAL_TRIE.GetValue(szFeature, hArray)) + { + if (hPlugin && hPlugin != view_as(hArray.Get(FEATURES_PLUGIN))) { - g_hFeaturesArray.GetString(i, SZF(szFeature)); + return; + } - if (GLOBAL_TRIE.GetValue(szFeature, hArray)) - { - eType = view_as(hArray.Get(FEATURES_ITEM_TYPE)); - if (eType == TOGGLABLE) - { - delete view_as(hArray.Get(FEATURES_COOKIE)); - } - - if (eType != HIDE) - { - delete view_as(hArray.Get(FEATURES_MENU_CALLBACKS)); - } - - delete hArray; - - GLOBAL_TRIE.Remove(szFeature); - - g_hFeaturesArray.Erase(i); - --i; + GLOBAL_TRIE.Remove(szFeature); - if (eType != HIDE) - { - char szItemInfo[FEATURE_NAME_LENGTH]; - int iSize; - iSize = (g_hVIPMenu).ItemCount; - for (j = 0; j < iSize; ++j) - { - g_hVIPMenu.GetItem(j, SZF(szItemInfo)); - if (strcmp(szItemInfo, szFeature, true) == 0) - { - g_hVIPMenu.RemoveItem(j); - break; - } - } - - if (g_hVIPMenu.ItemCount == 0) - { - g_hVIPMenu.AddItem("NO_FEATURES", "NO_FEATURES", ITEMDRAW_DISABLED); - } - } - - for (j = 1; j <= MaxClients; ++j) - { - if (IsClientInGame(j)) - { - if (g_iClientInfo[j] & IS_VIP) - { - g_hFeatures[j].Remove(szFeature); - g_hFeatureStatus[j].Remove(szFeature); - } - } - } + eType = view_as(hArray.Get(FEATURES_ITEM_TYPE)); + if (eType == TOGGLABLE) + { + delete view_as(hArray.Get(FEATURES_COOKIE)); + } + + if (eType != HIDE) + { + delete view_as(hArray.Get(FEATURES_MENU_CALLBACKS)); + } + + delete hArray; + } + + int i; + + if (eType != HIDE) + { + char szItemInfo[FEATURE_NAME_LENGTH]; + int iSize = g_hVIPMenu.ItemCount; + for (i = 0; i < iSize; ++i) + { + g_hVIPMenu.GetItem(i, SZF(szItemInfo)); + if (strcmp(szItemInfo, szFeature, true) == 0) + { + g_hVIPMenu.RemoveItem(i); + break; } + } + + if (iSize-1 == 0) + { + g_hVIPMenu.AddItem("NO_FEATURES", "NO_FEATURES", ITEMDRAW_DISABLED); + } + } - CreateForward_OnFeatureUnregistered(szFeature); - DebugMessage("Feature \"%s\" unregistered", szFeature) + for (i = MaxClients; i != 0; --i) + { + if (g_iClientInfo[i] & IS_VIP && IsClientInGame(i)) + { + g_hFeatures[i].Remove(szFeature); + g_hFeatureStatus[i].Remove(szFeature); } } + + DebugMessage("Feature \"%s\" unregistered", szFeature) + CreateForward_OnFeatureUnregistered(szFeature); } public int Native_IsValidFeature(Handle hPlugin, int iNumParams) diff --git a/addons/sourcemod/scripting/vip/Features.sp b/addons/sourcemod/scripting/vip/Features.sp index c3c6b9f..a152449 100644 --- a/addons/sourcemod/scripting/vip/Features.sp +++ b/addons/sourcemod/scripting/vip/Features.sp @@ -1,4 +1,10 @@ +bool IsValidFeature(const char[] szFeature) +{ + DebugMessage("IsValidFeature:: FindStringInArray -> %i", g_hFeaturesArray.FindString(szFeature)) + return (g_hFeaturesArray.FindString(szFeature) != -1); +} + void Features_TurnOffAll(int iClient) { DebugMessage("Features_TurnOffAll %N (%i)", iClient, iClient) diff --git a/addons/sourcemod/scripting/vip/VipMenu.sp b/addons/sourcemod/scripting/vip/VipMenu.sp index 0e1efe9..58b9f98 100644 --- a/addons/sourcemod/scripting/vip/VipMenu.sp +++ b/addons/sourcemod/scripting/vip/VipMenu.sp @@ -319,12 +319,6 @@ public int Handler_VIPMenu(Menu hMenu, MenuAction action, int iClient, int iOpti return 0; } -bool IsValidFeature(const char[] szFeature) -{ - DebugMessage("IsValidFeature:: FindStringInArray -> %i", g_hFeaturesArray.FindString(szFeature)) - return (g_hFeaturesArray.FindString(szFeature) != -1); -} - bool OnVipMenuFlood(int iClient) { static float fLastTime[MAXPLAYERS + 1]; From ae684c1f10af4ad3a50d667d150f760e2a9ff6b7 Mon Sep 17 00:00:00 2001 From: R1KO Date: Tue, 11 Jun 2019 12:31:47 +0300 Subject: [PATCH 03/20] fix inc --- addons/sourcemod/scripting/include/vip_core.inc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/sourcemod/scripting/include/vip_core.inc b/addons/sourcemod/scripting/include/vip_core.inc index 892c329..158f8a8 100644 --- a/addons/sourcemod/scripting/include/vip_core.inc +++ b/addons/sourcemod/scripting/include/vip_core.inc @@ -419,8 +419,7 @@ native void VIP_RegisterFeature(const char[] szFeature, * - * @param szFeature Уникальное имя ф-и. * - - * @return true - VIP-функция существовала и была удалена. - * false - VIP-функция не существовала. + * @noreturn */ native bool VIP_UnregisterFeature(const char[] szFeature); From abf1077a7f9887c49a329c89d8ca7fa785508cfd Mon Sep 17 00:00:00 2001 From: R1KO Date: Wed, 18 Sep 2019 10:28:35 +0000 Subject: [PATCH 04/20] Fix lang error --- addons/sourcemod/scripting/vip/AdminMenu.sp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/sourcemod/scripting/vip/AdminMenu.sp b/addons/sourcemod/scripting/vip/AdminMenu.sp index bca5ae0..84afb26 100644 --- a/addons/sourcemod/scripting/vip/AdminMenu.sp +++ b/addons/sourcemod/scripting/vip/AdminMenu.sp @@ -302,7 +302,7 @@ void ShowTimeMenu(int iClient) if (iMenuType != TIME_SET && szTime[0] == '0') continue; - hKv.GetString(szClientLang, SZF(szBuffer), "LangError"); + hKv.GetString(szClientLang, SZF(szBuffer)); if (!szBuffer[0]) { hKv.GetString(szServerLang, SZF(szBuffer), "LangError"); From 2f368890eac5f884dbe7e99b460e95ad45aa1e4c Mon Sep 17 00:00:00 2001 From: R1KO Date: Wed, 18 Sep 2019 10:39:40 +0000 Subject: [PATCH 05/20] Add sort_menu.ini --- addons/sourcemod/data/vip/cfg/sort_menu.ini | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 addons/sourcemod/data/vip/cfg/sort_menu.ini diff --git a/addons/sourcemod/data/vip/cfg/sort_menu.ini b/addons/sourcemod/data/vip/cfg/sort_menu.ini new file mode 100644 index 0000000..e69de29 From a347fd5db1b76e71ecbfab7296fcb976c9373f8c Mon Sep 17 00:00:00 2001 From: R1KO Date: Wed, 18 Sep 2019 10:40:11 +0000 Subject: [PATCH 06/20] Add times.ini --- addons/sourcemod/data/vip/cfg/times.ini | 38 +++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 addons/sourcemod/data/vip/cfg/times.ini diff --git a/addons/sourcemod/data/vip/cfg/times.ini b/addons/sourcemod/data/vip/cfg/times.ini new file mode 100644 index 0000000..1750c83 --- /dev/null +++ b/addons/sourcemod/data/vip/cfg/times.ini @@ -0,0 +1,38 @@ +"TIMES" +{ + "0" // Время в секундах + { + "ru" "Навсегда" // Отображение в меню + "en" "Permanent" // Отображение в меню + } + + "3600" // Время в секундах + { + "ru" "1 Час" // Отображение в меню + "en" "1 Hour" // Отображение в меню + } + + "86400" // Время в секундах + { + "ru" "1 Сутки" // Отображение в меню + "en" "1 Day" // Отображение в меню + } + + "604800" // Время в секундах + { + "ru" "1 Неделя" // Отображение в меню + "en" "1 Week" // Отображение в меню + } + + "2592000" // Время в секундах + { + "ru" "1 Месяц" // Отображение в меню + "en" "1 Month" // Отображение в меню + } + + "15552000" // Время в секундах + { + "ru" "6 Месяцев" // Отображение в меню + "en" "6 Months" // Отображение в меню + } +} \ No newline at end of file From e0321a69fa94bd19b421a211725da12936f37d99 Mon Sep 17 00:00:00 2001 From: R1KO Date: Wed, 18 Sep 2019 10:40:39 +0000 Subject: [PATCH 07/20] Add groups.ini --- addons/sourcemod/data/vip/cfg/groups.ini | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 addons/sourcemod/data/vip/cfg/groups.ini diff --git a/addons/sourcemod/data/vip/cfg/groups.ini b/addons/sourcemod/data/vip/cfg/groups.ini new file mode 100644 index 0000000..f5f3b22 --- /dev/null +++ b/addons/sourcemod/data/vip/cfg/groups.ini @@ -0,0 +1,14 @@ +"VIP_GROUPS" +{ + "vip1" + { + // Параметры + + } + + "vip2" + { + // Параметры + + } +} \ No newline at end of file From c028d9342a33b0016f22afa6b3c59d4dcd5778e6 Mon Sep 17 00:00:00 2001 From: R1KO Date: Wed, 18 Sep 2019 10:41:05 +0000 Subject: [PATCH 08/20] Update groups.ini --- addons/sourcemod/data/vip/cfg/groups.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/sourcemod/data/vip/cfg/groups.ini b/addons/sourcemod/data/vip/cfg/groups.ini index f5f3b22..06ce800 100644 --- a/addons/sourcemod/data/vip/cfg/groups.ini +++ b/addons/sourcemod/data/vip/cfg/groups.ini @@ -1,12 +1,12 @@ "VIP_GROUPS" { - "vip1" + "vip1" // Имя группы { // Параметры } - "vip2" + "vip2" // Имя группы { // Параметры From 801968154e2c755a95c6f2d32ff60da0b664e9e3 Mon Sep 17 00:00:00 2001 From: R1KO Date: Tue, 24 Sep 2019 12:53:08 +0000 Subject: [PATCH 09/20] fix native "VIP_OnShowClientInfo" --- addons/sourcemod/scripting/vip/API.sp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/addons/sourcemod/scripting/vip/API.sp b/addons/sourcemod/scripting/vip/API.sp index 6a0185c..ca89d47 100644 --- a/addons/sourcemod/scripting/vip/API.sp +++ b/addons/sourcemod/scripting/vip/API.sp @@ -1,4 +1,3 @@ - static Handle g_hGlobalForward_OnVIPLoaded; static Handle g_hGlobalForward_OnClientPreLoad; static Handle g_hGlobalForward_OnClientLoaded; @@ -93,19 +92,19 @@ void CreateForward_OnPlayerSpawn(int iClient, int iTeam) Call_Finish(); } -bool CreateForward_OnShowClientInfo(int iClient, const char[] szEvent, const char[] szType, KeyValues hKeyValues) +Action CreateForward_OnShowClientInfo(int iClient, const char[] szEvent, const char[] szType, KeyValues hKeyValues) { DBG_API("CreateForward_OnShowClientInfo(%N (%d), '%s', '%s')", iClient, iClient, szEvent, szType) - bool bResult = true; + Action eResult = true; Call_StartForward(g_hGlobalForward_OnShowClientInfo); Call_PushCell(iClient); Call_PushString(szEvent); Call_PushString(szType); Call_PushCell(hKeyValues); - Call_Finish(bResult); - DBG_API("CreateForward_OnShowClientInfo = %b", bResult) + Call_Finish(eResult); + DBG_API("CreateForward_OnShowClientInfo = %d", eResult) - return bResult; + return eResult; } VIP_ToggleState CreateForward_OnFeatureToggle(int iClient, const char[] szFeature, VIP_ToggleState eOldStatus, VIP_ToggleState eNewStatus) From 7fe04744499530bec5a161eaecafb6c2375ee9bc Mon Sep 17 00:00:00 2001 From: R1KO Date: Thu, 17 Oct 2019 16:34:23 +0000 Subject: [PATCH 10/20] Update vip_core.inc --- addons/sourcemod/scripting/include/vip_core.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/sourcemod/scripting/include/vip_core.inc b/addons/sourcemod/scripting/include/vip_core.inc index 158f8a8..ff078e9 100644 --- a/addons/sourcemod/scripting/include/vip_core.inc +++ b/addons/sourcemod/scripting/include/vip_core.inc @@ -188,7 +188,7 @@ forward void VIP_OnVIPClientLoaded(int iClient); * Вызывается когда игрок получает VIP-статус. * - * @param iClient Индекс игрока. - * @param iAdmin Индекс админа (0 - сервер). + * @param iAdmin Индекс админа (0 - сервер, -1 - плагин). * - * @noreturn */ @@ -202,7 +202,7 @@ forward void VIP_OnVIPClientAdded(int iClient, int iAdmin); * "Expired" - Истек; * "Removed by Admin" - Удален админом; * "Removed by native" - Удален нативом. - * @param iAdmin Индекс админа (0 - сервер). + * @param iAdmin Индекс админа (0 - сервер, -1 - плагин). * - * @noreturn */ From 9ee6326d9c79de1ceb6d3694ad7f9f6085a5626e Mon Sep 17 00:00:00 2001 From: R1KO Date: Thu, 17 Oct 2019 16:38:34 +0000 Subject: [PATCH 11/20] Update API.sp --- addons/sourcemod/scripting/vip/API.sp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/addons/sourcemod/scripting/vip/API.sp b/addons/sourcemod/scripting/vip/API.sp index ca89d47..f092e48 100644 --- a/addons/sourcemod/scripting/vip/API.sp +++ b/addons/sourcemod/scripting/vip/API.sp @@ -63,7 +63,7 @@ void CreateForward_OnVIPClientLoaded(int iClient) Call_Finish(); } -void CreateForward_OnVIPClientAdded(int iClient, int iAdmin = 0) +void CreateForward_OnVIPClientAdded(int iClient, int iAdmin = OWNER_SERVER) { DBG_API("CreateForward_OnVIPClientAdded(%N (%d), %d)", iClient, iClient, iAdmin) Call_StartForward(g_hGlobalForward_OnVIPClientAdded); @@ -72,7 +72,7 @@ void CreateForward_OnVIPClientAdded(int iClient, int iAdmin = 0) Call_Finish(); } -void CreateForward_OnVIPClientRemoved(int iClient, const char[] sReason, int iAdmin = 0) +void CreateForward_OnVIPClientRemoved(int iClient, const char[] sReason, int iAdmin = OWNER_SERVER) { DBG_API("CreateForward_OnVIPClientRemoved(%N (%d), %d, '%s')", iClient, iClient, iAdmin, sReason) Call_StartForward(g_hGlobalForward_OnVIPClientRemoved); @@ -562,7 +562,7 @@ public int Native_SetClientVIP(Handle hPlugin, int iNumParams) char szGroup[64]; GetNativeString(4, SZF(szGroup)); - return API_GiveClientVIP(hPlugin, REASON_PLUGIN, iClient, iTime, szGroup, bAddToDB); + return API_GiveClientVIP(hPlugin, OWNER_PLUGIN, iClient, iTime, szGroup, bAddToDB); } int API_GiveClientVIP(Handle hPlugin, @@ -676,7 +676,7 @@ int API_RemoveClientVIP(Handle hPlugin, int iClientID; if (g_hFeatures[iClient].GetValue(KEY_CID, iClientID) && iClientID != -1) { - DB_RemoveClientFromID(REASON_PLUGIN, iClient, _, true, _, _, szPluginName); + DB_RemoveClientFromID(OWNER_PLUGIN, iClient, _, true, _, _, szPluginName); } } @@ -1221,7 +1221,7 @@ public int Native_GetTimeFromStamp(Handle hPlugin, int iNumParams) if (iTimeStamp > 0) { int iClient = GetNativeCell(4); - if (iClient == 0 || CheckValidClient(iClient, false)) + if (iClient == LANG_SERVER || CheckValidClient(iClient, false)) { char szBuffer[64]; UTIL_GetTimeFromStamp(SZF(szBuffer), iTimeStamp, iClient); From e5d50c1deb3da5fbe5aaf31ec3ec9f2e97ddd121 Mon Sep 17 00:00:00 2001 From: R1KO Date: Thu, 17 Oct 2019 16:38:57 +0000 Subject: [PATCH 12/20] Update Global.sp --- addons/sourcemod/scripting/vip/Global.sp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/addons/sourcemod/scripting/vip/Global.sp b/addons/sourcemod/scripting/vip/Global.sp index 32a7000..83a6e34 100644 --- a/addons/sourcemod/scripting/vip/Global.sp +++ b/addons/sourcemod/scripting/vip/Global.sp @@ -35,6 +35,10 @@ #define REASON_EXPIRED -3 #define REASON_OUTDATED -4 + +#define OWNER_SERVER 0 +#define OWNER_PLUGIN -1 + char KEY_CID[] = "Core->ClientID"; char KEY_EXPIRES[] = "Core->Expires"; char KEY_GROUP[] = "Core->Group"; From 8b142af649d36ce63d29d8c4bec01f99e25a2f34 Mon Sep 17 00:00:00 2001 From: R1KO Date: Thu, 17 Oct 2019 16:41:04 +0000 Subject: [PATCH 13/20] Update UTIL.sp --- addons/sourcemod/scripting/vip/UTIL.sp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/addons/sourcemod/scripting/vip/UTIL.sp b/addons/sourcemod/scripting/vip/UTIL.sp index d7878b3..7bdfee8 100644 --- a/addons/sourcemod/scripting/vip/UTIL.sp +++ b/addons/sourcemod/scripting/vip/UTIL.sp @@ -1,5 +1,4 @@ - int GET_UID(int iClient) { return iClient > 0 ? UID(iClient):iClient; @@ -36,7 +35,7 @@ stock int UTIL_ReplaceChars(char[] szBuffer, int InChar, int OutChar) if (szBuffer[i] == InChar) { szBuffer[i] = OutChar; - iNum++; + ++iNum; } } @@ -48,13 +47,10 @@ bool UTIL_StrCmpEx(const char[] szString1, const char[] szString2) int iLen = strlen(szString1); if (iLen != strlen(szString2)) { - // i don't see any reason, why we should compare strings, - // if length is different because this fact means: they - // different too. return false; } - for (int i = 0; i < iLen; i++) + for (int i = 0; i < iLen; ++i) { if (szString1[i] != szString2[i]) { @@ -256,7 +252,7 @@ void UTIL_ReloadVIPPlayers(int iClient, bool bNotify) } } /* -void UTIL_REM_VIP_PLAYER(int iClient = 0, int iTarget = 0, int iAccID = 0, int iClientID, const char[] szReason) +void UTIL_REM_VIP_PLAYER(int iClient = OWNER_SERVER, int iTarget = 0, int iAccID = 0, int iClientID, const char[] szReason) { if (g_CVAR_bLogsEnable) { @@ -297,7 +293,7 @@ void UTIL_Reply(int iClient, const char[] szMsg, any ...) } } -void UTIL_ADD_VIP_PLAYER(int iAdmin = 0, +void UTIL_ADD_VIP_PLAYER(int iAdmin = OWNER_SERVER, int iTarget = 0, int iAccID = 0, int iDuration, @@ -338,11 +334,11 @@ void UTIL_ADD_VIP_PLAYER(int iAdmin = 0, switch(iAdmin) { - case REASON_PLUGIN: + case OWNER_PLUGIN: { FormatEx(SZF(szAdmin), "%T %s", "BY_PLUGIN", LANG_SERVER, szByWho); } - case 0: + case OWNER_SERVER: { FormatEx(SZF(szAdmin), "%T", "BY_SERVER", LANG_SERVER); } From 63be9e4a8ddeec60a93056c6e2872e2ba6309981 Mon Sep 17 00:00:00 2001 From: R1KO Date: Tue, 29 Oct 2019 09:00:03 +0000 Subject: [PATCH 14/20] Add VIP_BuildModulesPath func --- addons/sourcemod/scripting/include/vip_core.inc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/addons/sourcemod/scripting/include/vip_core.inc b/addons/sourcemod/scripting/include/vip_core.inc index ff078e9..044b921 100644 --- a/addons/sourcemod/scripting/include/vip_core.inc +++ b/addons/sourcemod/scripting/include/vip_core.inc @@ -632,6 +632,20 @@ native bool VIP_GetTimeFromStamp(char[] szBuffer, int iMaxLength, int iTimeStamp */ native void VIP_AddStringToggleStatus(const char[] szInput, char[] szBuffer, int iMaxLength, const char[] szFeature, int iClient); +/** + * Формирует путь к файлу с настройками модуля. + * - + * @param szBuffer Буфер, в который будет помещен результат. + * @param iMaxLength Размер буфера. + * @param szFileName Имя файла. + * - + * @noreturn +*/ +stock void VIP_BuildModulesPath(char[] szBuffer, int iMaxLen, const char[] szFileName) +{ + BuildPath(Path_SM, szBuffer, iMaxLen, "data/vip/modules/%s", szFileName); +} + public SharedPlugin __pl_vip_core= { name = "vip_core", From 215ef54780fdf3fcd346ee7f38bdf504b8130b67 Mon Sep 17 00:00:00 2001 From: R1KO Date: Tue, 7 Jan 2020 22:30:17 +0000 Subject: [PATCH 15/20] Update CMD.sp --- addons/sourcemod/scripting/vip/CMD.sp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/sourcemod/scripting/vip/CMD.sp b/addons/sourcemod/scripting/vip/CMD.sp index 171dedb..6df2f35 100644 --- a/addons/sourcemod/scripting/vip/CMD.sp +++ b/addons/sourcemod/scripting/vip/CMD.sp @@ -1,4 +1,3 @@ - void CMD_Setup() { RegConsoleCmd("sm_refresh_vips", ReloadVIPPlayers_CMD); @@ -58,7 +57,7 @@ public Action ReloadVIPCfg_CMD(int iClient, int iArgs) ReadConfigs(); UTIL_ReloadVIPPlayers(iClient, false); - UTIL_Reply(iClient, "[VIP] %t", "VIP_CFG_REFRESHED"); + UTIL_Reply(iClient, "%t", "VIP_CFG_REFRESHED"); return Plugin_Handled; } From 342dfe8944f8e6014f5160e78f20991a375278e0 Mon Sep 17 00:00:00 2001 From: R1KO Date: Sat, 2 Jan 2021 15:20:44 +0200 Subject: [PATCH 16/20] fix .inc style --- addons/sourcemod/scripting/include/vip_core.inc | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/addons/sourcemod/scripting/include/vip_core.inc b/addons/sourcemod/scripting/include/vip_core.inc index db25ef1..ead756c 100644 --- a/addons/sourcemod/scripting/include/vip_core.inc +++ b/addons/sourcemod/scripting/include/vip_core.inc @@ -159,7 +159,6 @@ forward void VIP_OnFeatureUnregistered(const char[] szFeature); * * @param iClient Индекс игрока. * - * @return true - продолжить. * false - не выполнять проверку. */ @@ -199,7 +198,7 @@ forward void VIP_OnClientDisconnect(int iClient, bool bIsVIP); * * @param iClient Индекс игрока. * @param iAdmin Индекс админа (0 - сервер, -1 - плагин). - * - + * * @noreturn */ forward void VIP_OnVIPClientAdded(int iClient, int iAdmin = -1); @@ -213,7 +212,7 @@ forward void VIP_OnVIPClientAdded(int iClient, int iAdmin = -1); * "Removed by Admin" - Удален админом; * "Removed by native" - Удален нативом. * @param iAdmin Индекс админа (0 - сервер, -1 - плагин). - * - + * * @noreturn */ forward void VIP_OnVIPClientRemoved(int iClient, const char[] szReason, int iAdmin = -1); @@ -428,7 +427,7 @@ native void VIP_RegisterFeature(const char[] szFeature, * Удаляет VIP-функцию. * * @param szFeature Уникальное имя ф-и. - * - + * * @noreturn */ native void VIP_UnregisterFeature(const char[] szFeature); @@ -644,11 +643,11 @@ native void VIP_AddStringToggleStatus(const char[] szInput, char[] szBuffer, int /** * Формирует путь к файлу с настройками модуля. - * - + * * @param szBuffer Буфер, в который будет помещен результат. * @param iMaxLength Размер буфера. * @param szFileName Имя файла. - * - + * * @noreturn */ stock void VIP_BuildModulesPath(char[] szBuffer, int iMaxLen, const char[] szFileName) From 3f53affb85b79fb25c5bc75b97b0038531e1ab39 Mon Sep 17 00:00:00 2001 From: R1KO Date: Sat, 2 Jan 2021 15:23:55 +0200 Subject: [PATCH 17/20] fix end files --- addons/sourcemod/data/vip/cfg/groups.ini | 2 +- addons/sourcemod/data/vip/cfg/times.ini | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/sourcemod/data/vip/cfg/groups.ini b/addons/sourcemod/data/vip/cfg/groups.ini index 06ce800..f5b3a89 100644 --- a/addons/sourcemod/data/vip/cfg/groups.ini +++ b/addons/sourcemod/data/vip/cfg/groups.ini @@ -11,4 +11,4 @@ // Параметры } -} \ No newline at end of file +} diff --git a/addons/sourcemod/data/vip/cfg/times.ini b/addons/sourcemod/data/vip/cfg/times.ini index 1750c83..53ba111 100644 --- a/addons/sourcemod/data/vip/cfg/times.ini +++ b/addons/sourcemod/data/vip/cfg/times.ini @@ -35,4 +35,4 @@ "ru" "6 Месяцев" // Отображение в меню "en" "6 Months" // Отображение в меню } -} \ No newline at end of file +} From cd7a76fa0a4263a0dd1025468ec439f311e976a6 Mon Sep 17 00:00:00 2001 From: R1KO Date: Sat, 2 Jan 2021 15:25:02 +0200 Subject: [PATCH 18/20] fix inc forwards --- addons/sourcemod/scripting/include/vip_core.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/sourcemod/scripting/include/vip_core.inc b/addons/sourcemod/scripting/include/vip_core.inc index ead756c..233f118 100644 --- a/addons/sourcemod/scripting/include/vip_core.inc +++ b/addons/sourcemod/scripting/include/vip_core.inc @@ -201,7 +201,7 @@ forward void VIP_OnClientDisconnect(int iClient, bool bIsVIP); * * @noreturn */ -forward void VIP_OnVIPClientAdded(int iClient, int iAdmin = -1); +forward void VIP_OnVIPClientAdded(int iClient, int iAdmin); /** * Вызывается когда игрок лишается VIP-статуса. @@ -215,7 +215,7 @@ forward void VIP_OnVIPClientAdded(int iClient, int iAdmin = -1); * * @noreturn */ -forward void VIP_OnVIPClientRemoved(int iClient, const char[] szReason, int iAdmin = -1); +forward void VIP_OnVIPClientRemoved(int iClient, const char[] szReason, int iAdmin); /** * Запускает проверку игрока на наличие VIP прав. From 01f54c32ccbedea8122442db786e7bfda4254e18 Mon Sep 17 00:00:00 2001 From: R1KO Date: Sat, 2 Jan 2021 15:41:14 +0200 Subject: [PATCH 19/20] refactor VIP Menu --- addons/sourcemod/scripting/VIP_Core.sp | 4 + addons/sourcemod/scripting/vip/Global.sp | 1 + addons/sourcemod/scripting/vip/VipMenu.sp | 186 ++++++++++------------ 3 files changed, 89 insertions(+), 102 deletions(-) diff --git a/addons/sourcemod/scripting/VIP_Core.sp b/addons/sourcemod/scripting/VIP_Core.sp index b4e620f..2971112 100644 --- a/addons/sourcemod/scripting/VIP_Core.sp +++ b/addons/sourcemod/scripting/VIP_Core.sp @@ -86,6 +86,10 @@ public void OnPluginStart() ITEM_DRAW = hDataPack.Position; delete hDataPack; + + g_bIsTranslationPhraseExistsAvailable = (CanTestFeatures() && + GetFeatureStatus(FeatureType_Native, "TranslationPhraseExists") == FeatureStatus_Available); + ReadConfigs(); VIPMenu_Setup(); diff --git a/addons/sourcemod/scripting/vip/Global.sp b/addons/sourcemod/scripting/vip/Global.sp index 94425ed..527f9bd 100644 --- a/addons/sourcemod/scripting/vip/Global.sp +++ b/addons/sourcemod/scripting/vip/Global.sp @@ -122,6 +122,7 @@ bool g_CVAR_bDefaultStatus; bool g_CVAR_bLogsEnable; EngineVersion g_EngineVersion; +bool g_bIsTranslationPhraseExistsAvailable; char g_szSID[64]; diff --git a/addons/sourcemod/scripting/vip/VipMenu.sp b/addons/sourcemod/scripting/vip/VipMenu.sp index e72d28e..eecf330 100644 --- a/addons/sourcemod/scripting/vip/VipMenu.sp +++ b/addons/sourcemod/scripting/vip/VipMenu.sp @@ -8,30 +8,29 @@ void VIPMenu_Setup() void AddFeatureToVIPMenu(const char[] szFeature) { DebugMessage("AddFeatureToVIPMenu: %s", szFeature) - if (g_hSortArray != null) - { - ResortFeaturesArray(); - - g_hVIPMenu.RemoveAllItems(); - - int i, iSize; - char szItemInfo[128]; - ArrayList hArray; - iSize = g_hFeaturesArray.Length; - for (i = 0; i < iSize; ++i) - { - g_hFeaturesArray.GetString(i, SZF(szItemInfo)); - if (GLOBAL_TRIE.GetValue(szItemInfo, hArray) && view_as(hArray.Get(FEATURES_ITEM_TYPE)) != HIDE) - { - DebugMessage("AddMenuItem: %s", szItemInfo) - g_hVIPMenu.AddItem(szItemInfo, szItemInfo); - } - } - } - else + if (g_hSortArray == null) { DebugMessage("AddMenuItem") g_hVIPMenu.AddItem(szFeature, szFeature); + return; + } + + ResortFeaturesArray(); + + g_hVIPMenu.RemoveAllItems(); + + int i, iSize; + char szMenuFeature[FEATURE_NAME_LENGTH]; + ArrayList hArray; + iSize = g_hFeaturesArray.Length; + for (i = 0; i < iSize; ++i) + { + g_hFeaturesArray.GetString(i, SZF(szMenuFeature)); + if (GLOBAL_TRIE.GetValue(szMenuFeature, hArray) && view_as(hArray.Get(FEATURES_ITEM_TYPE)) != HIDE) + { + DebugMessage("AddMenuItem: %s", szMenuFeature) + g_hVIPMenu.AddItem(szMenuFeature, szMenuFeature); + } } } @@ -39,7 +38,7 @@ void ResortFeaturesArray() { DebugMessage("ResortFeaturesArray\n \n ") - if ((g_hFeaturesArray).Length < 2) + if (g_hFeaturesArray.Length < 2) { return; } @@ -53,12 +52,12 @@ void ResortFeaturesArray() #endif*/ x = 0; - char szItemInfo[128]; + char szFeature[128]; for (i = 0; i < iSize; ++i) { - g_hSortArray.GetString(i, SZF(szItemInfo)); - DebugMessage("GetSortArrayString: %s (i: %i, x: %i)", szItemInfo, i, x) - index = g_hFeaturesArray.FindString(szItemInfo); + g_hSortArray.GetString(i, SZF(szFeature)); + DebugMessage("GetSortArrayString: %s (i: %i, x: %i)", szFeature, i, x) + index = g_hFeaturesArray.FindString(szFeature); DebugMessage("FindStringInGlobalArray: index: %i", index) if (index != -1) { @@ -84,11 +83,11 @@ stock void PrintArray(ArrayList &hArray) iSize = hArray.Length; if (iSize) { - char szItemInfo[128]; + char szFeature[128]; for (i = 0; i < iSize; ++i) { - hArray.GetString(i, SZF(szItemInfo)); - DebugMessage("%i: %s", i, szItemInfo) + hArray.GetString(i, SZF(szFeature)); + DebugMessage("%i: %s", i, szFeature) } } } @@ -96,34 +95,20 @@ stock void PrintArray(ArrayList &hArray) */ public int Handler_VIPMenu(Menu hMenu, MenuAction action, int iClient, int iOption) { - if(action == MenuAction_Display || + if((action == MenuAction_Display || action == MenuAction_DisplayItem || action == MenuAction_DrawItem || - action == MenuAction_Select) - { - if(!(g_iClientInfo[iClient] & IS_VIP) || !g_hFeatures[iClient]) + action == MenuAction_Select) && + (!(g_iClientInfo[iClient] & IS_VIP) || !g_hFeatures[iClient])) { - return 0; - } + return 0; } - static char szItemInfo[FEATURE_NAME_LENGTH]; - ArrayList hBuffer; - Function fCallback; - Handle hPlugin; - /* - switch (action) - { - case MenuAction_Display, MenuAction_DrawItem, MenuAction_DisplayItem, MenuAction_Select: - { - if (!(g_iClientInfo[iClient] & IS_VIP)) - { - (g_hVIPMenu).Cancel(); - DisplayClientInfo(iClient, "expired_info"); - return 0; - } - } - } - */ + + static char szFeature[FEATURE_NAME_LENGTH]; + static ArrayList hBuffer; + static Function fCallback; + static Handle hPlugin; + switch (action) { case MenuAction_Cancel: @@ -150,8 +135,6 @@ public int Handler_VIPMenu(Menu hMenu, MenuAction action, int iClient, int iOpti } else { - // FakeClientCommand(iClient, "menuselect 0"); - // DisplayClientInfo(iClient, "expired_info"); Clients_ExpiredClient(iClient); return 0; } @@ -167,13 +150,13 @@ public int Handler_VIPMenu(Menu hMenu, MenuAction action, int iClient, int iOpti case MenuAction_DrawItem: { int iStyle; - g_hVIPMenu.GetItem(iOption, SZF(szItemInfo), iStyle); + g_hVIPMenu.GetItem(iOption, SZF(szFeature), iStyle); - DebugMessage("MenuAction_DrawItem: Client: %i, Feature: %s, iStyle: %i", iClient, szItemInfo, iStyle) + DebugMessage("MenuAction_DrawItem: Client: %i, Feature: %s, iStyle: %i", iClient, szFeature, iStyle) - if (GLOBAL_TRIE.GetValue(szItemInfo, hBuffer)) + if (GLOBAL_TRIE.GetValue(szFeature, hBuffer)) { - if (view_as(hBuffer.Get(FEATURES_VALUE_TYPE)) != VIP_NULL && Features_GetStatus(iClient, szItemInfo) == NO_ACCESS) + if (view_as(hBuffer.Get(FEATURES_VALUE_TYPE)) != VIP_NULL && Features_GetStatus(iClient, szFeature) == NO_ACCESS) { iStyle = g_CVAR_bHideNoAccessItems ? ITEMDRAW_RAWLINE:ITEMDRAW_DISABLED; DebugMessage("NO_ACCESS -> iStyle: %i", iStyle) @@ -187,7 +170,7 @@ public int Handler_VIPMenu(Menu hMenu, MenuAction action, int iClient, int iOpti hPlugin = view_as(hBuffer.Get(FEATURES_PLUGIN)); Call_StartFunction(hPlugin, fCallback); Call_PushCell(iClient); - Call_PushString(szItemInfo); + Call_PushString(szFeature); Call_PushCell(iStyle); Call_Finish(iStyle); DebugMessage("Function_Draw -> iStyle: %i", iStyle) @@ -201,13 +184,18 @@ public int Handler_VIPMenu(Menu hMenu, MenuAction action, int iClient, int iOpti case MenuAction_DisplayItem: { - g_hVIPMenu.GetItem(iOption, SZF(szItemInfo)); - - DebugMessage("MenuAction_DisplayItem: Client: %i, Feature: %s", iClient, szItemInfo) + g_hVIPMenu.GetItem(iOption, SZF(szFeature)); + DebugMessage("MenuAction_DisplayItem: Client: %i, Feature: %s", iClient, szFeature) + char szDisplay[128]; - - if (GLOBAL_TRIE.GetValue(szItemInfo, hBuffer)) + if (strcmp(szFeature, "NO_FEATURES") == 0) + { + FormatEx(SZF(szDisplay), "%T", "NO_FEATURES", iClient); + return RedrawMenuItem(szDisplay); + } + + if (GLOBAL_TRIE.GetValue(szFeature, hBuffer)) { DataPack hDataPack = view_as(hBuffer.Get(FEATURES_MENU_CALLBACKS)); hDataPack.Position = ITEM_DISPLAY; @@ -216,11 +204,10 @@ public int Handler_VIPMenu(Menu hMenu, MenuAction action, int iClient, int iOpti { hPlugin = view_as(hBuffer.Get(FEATURES_PLUGIN)); - szDisplay[0] = 0; bool bResult; Call_StartFunction(hPlugin, fCallback); Call_PushCell(iClient); - Call_PushString(szItemInfo); + Call_PushString(szFeature); Call_PushStringEx(SZF(szDisplay), SM_PARAM_STRING_UTF8 | SM_PARAM_STRING_COPY, SM_PARAM_COPYBACK); Call_PushCell(sizeof(szDisplay)); Call_Finish(bResult); @@ -232,49 +219,34 @@ public int Handler_VIPMenu(Menu hMenu, MenuAction action, int iClient, int iOpti return RedrawMenuItem(szDisplay); } } - - if (view_as(hBuffer.Get(FEATURES_ITEM_TYPE)) == TOGGLABLE) + + static char szFeatureName[128]; + if(IsTranslationPhraseExists(szFeature)) { - if(CanTestFeatures() && GetFeatureStatus(FeatureType_Native, "TranslationPhraseExists") == FeatureStatus_Available) - { - if(!TranslationPhraseExists(szItemInfo)) - { - FormatEx(SZF(szDisplay), "%s [%T]", szItemInfo, g_szToggleStatus[view_as(Features_GetStatus(iClient, szItemInfo))], iClient); - return RedrawMenuItem(szDisplay); - } - } - FormatEx(SZF(szDisplay), "%T [%T]", szItemInfo, iClient, g_szToggleStatus[view_as(Features_GetStatus(iClient, szItemInfo))], iClient); - return RedrawMenuItem(szDisplay); + FormatEx(SZF(szFeatureName), "%T", szFeature, iClient); } - - if(CanTestFeatures() && GetFeatureStatus(FeatureType_Native, "TranslationPhraseExists") == FeatureStatus_Available) + else { - if(!TranslationPhraseExists(szItemInfo)) - { - strcopy(SZF(szDisplay), szItemInfo); - return RedrawMenuItem(szDisplay); - } + strcopy(SZF(szFeatureName), szFeature); + } + + if (view_as(hBuffer.Get(FEATURES_ITEM_TYPE)) == TOGGLABLE) + { + FormatEx(SZF(szDisplay), "%s [%T]", szFeatureName, g_szToggleStatus[view_as(Features_GetStatus(iClient, szFeature))], iClient); } - FormatEx(SZF(szDisplay), "%T", szItemInfo, iClient); return RedrawMenuItem(szDisplay); } - if (strcmp(szItemInfo, "NO_FEATURES") == 0) - { - FormatEx(SZF(szItemInfo), "%T", "NO_FEATURES", iClient); - } - - return RedrawMenuItem(szItemInfo); } case MenuAction_Select: { - g_hVIPMenu.GetItem(iOption, SZF(szItemInfo)); + g_hVIPMenu.GetItem(iOption, SZF(szFeature)); - if (GLOBAL_TRIE.GetValue(szItemInfo, hBuffer)) + if (GLOBAL_TRIE.GetValue(szFeature, hBuffer)) { PlaySound(iClient, ITEM_TOGGLE_SOUND); - DebugMessage("MenuAction_Select: Client: %i, Feature: %s", iClient, szItemInfo) + DebugMessage("MenuAction_Select: Client: %i, Feature: %s", iClient, szFeature) DataPack hDataPack = view_as(hBuffer.Get(FEATURES_MENU_CALLBACKS)); hDataPack.Position = ITEM_SELECT; @@ -285,19 +257,19 @@ public int Handler_VIPMenu(Menu hMenu, MenuAction action, int iClient, int iOpti char szBuffer[4]; VIP_ToggleState eOldStatus, eNewStatus; - eOldStatus = Features_GetStatus(iClient, szItemInfo); + eOldStatus = Features_GetStatus(iClient, szFeature); eNewStatus = (eOldStatus == ENABLED) ? DISABLED:ENABLED; if (fCallback != INVALID_FUNCTION) { - eNewStatus = Function_OnItemToggle(hPlugin, fCallback, iClient, szItemInfo, eOldStatus, eNewStatus); + eNewStatus = Function_OnItemToggle(hPlugin, fCallback, iClient, szFeature, eOldStatus, eNewStatus); } if (eNewStatus != eOldStatus) { - eNewStatus = CreateForward_OnFeatureToggle(iClient, szItemInfo, eOldStatus, eNewStatus); + eNewStatus = CreateForward_OnFeatureToggle(iClient, szFeature, eOldStatus, eNewStatus); if (eNewStatus != eOldStatus) { - Features_SetStatus(iClient, szItemInfo, eNewStatus); + Features_SetStatus(iClient, szFeature, eNewStatus); IntToString(view_as(eNewStatus), SZF(szBuffer)); SetClientCookie(iClient, view_as(GetArrayCell(hBuffer, FEATURES_COOKIE)), szBuffer); } @@ -308,7 +280,7 @@ public int Handler_VIPMenu(Menu hMenu, MenuAction action, int iClient, int iOpti } g_hFeatures[iClient].SetValue(KEY_MENUITEM, hMenu.Selection); - if (Function_OnItemSelect(hPlugin, fCallback, iClient, szItemInfo)) + if (Function_OnItemSelect(hPlugin, fCallback, iClient, szFeature)) { hMenu.DisplayAt(iClient, hMenu.Selection, MENU_TIME_FOREVER); } @@ -329,4 +301,14 @@ bool OnVipMenuFlood(int iClient) fLastTime[iClient] = fSec; } return false; -} \ No newline at end of file +} + +bool IsTranslationPhraseExists(const char[] szPhrase) +{ + if (g_bIsTranslationPhraseExistsAvailable) + { + return TranslationPhraseExists(szPhrase); + } + + return true; +} \ No newline at end of file From c9694cf20ab4a81b69e6813f53f30c55c8cbf815 Mon Sep 17 00:00:00 2001 From: R1KO Date: Sat, 2 Jan 2021 15:46:11 +0200 Subject: [PATCH 20/20] fix codestyle --- addons/sourcemod/data/vip/cfg/times.ini | 30 +++++++++++------------ addons/sourcemod/scripting/vip/VipMenu.sp | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/addons/sourcemod/data/vip/cfg/times.ini b/addons/sourcemod/data/vip/cfg/times.ini index 53ba111..bae4f80 100644 --- a/addons/sourcemod/data/vip/cfg/times.ini +++ b/addons/sourcemod/data/vip/cfg/times.ini @@ -6,33 +6,33 @@ "en" "Permanent" // Отображение в меню } - "3600" // Время в секундах + "3600" { - "ru" "1 Час" // Отображение в меню - "en" "1 Hour" // Отображение в меню + "ru" "1 Час" + "en" "1 Hour" } - "86400" // Время в секундах + "86400" { - "ru" "1 Сутки" // Отображение в меню - "en" "1 Day" // Отображение в меню + "ru" "1 Сутки" + "en" "1 Day" } - "604800" // Время в секундах + "604800" { - "ru" "1 Неделя" // Отображение в меню - "en" "1 Week" // Отображение в меню + "ru" "1 Неделя" + "en" "1 Week" } - "2592000" // Время в секундах + "2592000" { - "ru" "1 Месяц" // Отображение в меню - "en" "1 Month" // Отображение в меню + "ru" "1 Месяц" + "en" "1 Month" } - "15552000" // Время в секундах + "15552000" { - "ru" "6 Месяцев" // Отображение в меню - "en" "6 Months" // Отображение в меню + "ru" "6 Месяцев" + "en" "6 Months" } } diff --git a/addons/sourcemod/scripting/vip/VipMenu.sp b/addons/sourcemod/scripting/vip/VipMenu.sp index eecf330..d828e21 100644 --- a/addons/sourcemod/scripting/vip/VipMenu.sp +++ b/addons/sourcemod/scripting/vip/VipMenu.sp @@ -311,4 +311,4 @@ bool IsTranslationPhraseExists(const char[] szPhrase) } return true; -} \ No newline at end of file +}