From c56c79efdea710eb0c8724987b56fbc06f0efb12 Mon Sep 17 00:00:00 2001 From: R1KO Date: Mon, 2 May 2022 22:37:49 +0300 Subject: [PATCH] fix line breaks in csgo --- addons/sourcemod/scripting/vip/Clients.sp | 2 +- addons/sourcemod/scripting/vip/Colors.sp | 53 ++-- addons/sourcemod/scripting/vip/Debug.sp | 8 + addons/sourcemod/scripting/vip/Info.sp | 306 +++++++++++----------- 4 files changed, 193 insertions(+), 176 deletions(-) diff --git a/addons/sourcemod/scripting/vip/Clients.sp b/addons/sourcemod/scripting/vip/Clients.sp index 0e0de87..73ae901 100644 --- a/addons/sourcemod/scripting/vip/Clients.sp +++ b/addons/sourcemod/scripting/vip/Clients.sp @@ -11,7 +11,7 @@ public void OnClientPutInServer(int iClient) { // g_iClientInfo[iClient] = 0; DBG_Clients("OnClientPutInServer %N (%d): %b", iClient, iClient, g_iClientInfo[iClient]) - + if(!IsFakeClient(iClient) && !IsClientSourceTV(iClient)) { Clients_CheckVipAccess(iClient, true, true); diff --git a/addons/sourcemod/scripting/vip/Colors.sp b/addons/sourcemod/scripting/vip/Colors.sp index a0e0706..e53844c 100644 --- a/addons/sourcemod/scripting/vip/Colors.sp +++ b/addons/sourcemod/scripting/vip/Colors.sp @@ -1,6 +1,6 @@ void Colors_Print(int iClient, const char[] szFormat) { - char szMessage[512]; + char szMessage[1024]; FormatEx(SZF(szMessage), g_EngineVersion == Engine_CSGO ? " \x01%t %s":"\x01%t %s", "VIP_CHAT_PREFIX", szFormat); ReplaceString(SZF(szMessage), "\\n", "\n"); @@ -9,21 +9,18 @@ void Colors_Print(int iClient, const char[] szFormat) switch (g_EngineVersion) { - case Engine_SourceSDK2006, Engine_Left4Dead, Engine_Left4Dead2: + case Engine_SourceSDK2006, Engine_Left4Dead, Engine_Left4Dead2: { ReplaceString(SZF(szMessage), "{LIGHTGREEN}", "\x03"); int iColor = Colors_ReplaceColors(SZF(szMessage)); switch (iColor) { - case -1: Colors_SayText2(iClient, 0, szMessage); - case 0: Colors_SayText2(iClient, iClient, szMessage); - default: - { - Colors_SayText2(iClient, Colors_FindPlayerByTeam(iColor), szMessage); - } + case -1: Colors_SayText2(iClient, 0, szMessage); + case 0: Colors_SayText2(iClient, iClient, szMessage); + default: Colors_SayText2(iClient, Colors_FindPlayerByTeam(iColor), szMessage); } } - case Engine_CSS, Engine_TF2, Engine_DODS, Engine_HL2DM: + case Engine_CSS, Engine_TF2, Engine_DODS, Engine_HL2DM: { ReplaceString(SZF(szMessage), "#", "\x07"); if (ReplaceString(SZF(szMessage), "{TEAM}", "\x03")) @@ -36,7 +33,7 @@ void Colors_Print(int iClient, const char[] szFormat) Colors_SayText2(iClient, 0, szMessage); } } - case Engine_CSGO: + case Engine_CSGO: { static const char szColorName[][] = { @@ -69,30 +66,45 @@ void Colors_Print(int iClient, const char[] szFormat) { ReplaceString(SZF(szMessage), szColorName[i], szColorCode[i]); } - + + int iSender = 0, iLastStart = 0, i = 0; if (ReplaceString(SZF(szMessage), "{TEAM}", "\x03")) { - Colors_SayText2(iClient, iClient, szMessage); + iSender = iClient; } - else + + char szText[512]; + while(szMessage[i]) { - Colors_SayText2(iClient, 0, szMessage); + if (szMessage[i] == '\n') + { + szMessage[i] = 0; + FormatEx(SZF(szText), " %s", szMessage[iLastStart]); + Colors_SayText2(iClient, iSender, szText); + iLastStart = i+1; + } + + i++; } + + FormatEx(SZF(szText), " %s", szMessage[iLastStart]); + Colors_SayText2(iClient, iSender, szText); } - default: + default: { ReplaceString(SZF(szMessage), "{TEAM}", "\x03"); + PrintToChat(iClient, szMessage); } } } int Colors_ReplaceColors(char[] sMsg, int MaxLength) { - if (ReplaceString(sMsg, MaxLength, "{TEAM}", "\x03"))return 0; + if (ReplaceString(sMsg, MaxLength, "{TEAM}", "\x03")) return 0; - if (ReplaceString(sMsg, MaxLength, "{BLUE}", "\x03"))return 3; - if (ReplaceString(sMsg, MaxLength, "{RED}", "\x03"))return 2; - if (ReplaceString(sMsg, MaxLength, "{GRAY}", "\x03"))return 1; + if (ReplaceString(sMsg, MaxLength, "{BLUE}", "\x03")) return 3; + if (ReplaceString(sMsg, MaxLength, "{RED}", "\x03")) return 2; + if (ReplaceString(sMsg, MaxLength, "{GRAY}", "\x03")) return 1; return -1; } @@ -101,7 +113,8 @@ int Colors_FindPlayerByTeam(int iTeam) { for (int i = 1; i <= MaxClients; i++) { - if (IsClientInGame(i) && GetClientTeam(i) == iTeam)return i; + if (IsClientInGame(i) && GetClientTeam(i) == iTeam) + return i; } return 0; diff --git a/addons/sourcemod/scripting/vip/Debug.sp b/addons/sourcemod/scripting/vip/Debug.sp index 7134ebd..33049df 100644 --- a/addons/sourcemod/scripting/vip/Debug.sp +++ b/addons/sourcemod/scripting/vip/Debug.sp @@ -19,6 +19,7 @@ void DebugMsg(const char[] sMsg, any ...) // #define LOG_FEATURES // FEATURES // #define LOG_CLIENTS // CLIENTS // #define LOG_DB // DB +// #define LOG_INFO // INFO #else #define DebugMessage(%0) @@ -65,3 +66,10 @@ void DebugMsg(const char[] sMsg, any ...) #else #define DBG_Database(%0) #endif + + +#if defined LOG_INFO +#define DBG_Info(%0) DebugMsg("Info: " ... %0); +#else +#define DBG_Info(%0) +#endif diff --git a/addons/sourcemod/scripting/vip/Info.sp b/addons/sourcemod/scripting/vip/Info.sp index b8a083f..f8b677c 100644 --- a/addons/sourcemod/scripting/vip/Info.sp +++ b/addons/sourcemod/scripting/vip/Info.sp @@ -1,192 +1,188 @@ + void DisplayClientInfo(int iClient, const char[] szEvent) { - DebugMessage("DisplayClientInfo: Client: %N (%i) -> '%s'", iClient, iClient, szEvent) - - static char szServLang[4]; + DBG_Info("DisplayClientInfo: Client: %N (%i) -> '%s'", iClient, iClient, szEvent) + + g_hInfo.Rewind(); + if (!g_hInfo.JumpToKey(szEvent)) + return; + + DBG_Info("KvJumpToKey: %s", szEvent) + + char szServLang[4], szClientLang[4]; if (!szServLang[0]) { GetLanguageInfo(GetServerLanguage(), SZF(szServLang)); } - DebugMessage("szServLang = '%s'", szServLang) - - g_hInfo.Rewind(); - if (g_hInfo.JumpToKey(szEvent)) - { - DebugMessage("KvJumpToKey: %s", szEvent) - static char szClientLang[4], szBuffer[1028]; - GetLanguageInfo(GetClientLanguage(iClient), SZF(szClientLang)); - DebugMessage("szClientLang = '%s'", szClientLang) - DisplayInfo(iClient, szEvent, "chat", SZF(szBuffer), szClientLang, szServLang); - DisplayInfo(iClient, szEvent, "menu", SZF(szBuffer), szClientLang, szServLang); - DisplayInfo(iClient, szEvent, "url", SZF(szBuffer), szClientLang, szServLang); - } + + GetLanguageInfo(GetClientLanguage(iClient), SZF(szClientLang)); + + DBG_Info("szServLang = '%s'", szServLang) + DBG_Info("szClientLang = '%s'", szClientLang) + + DisplayInfo(iClient, szEvent, "chat", szClientLang, szServLang); + DisplayInfo(iClient, szEvent, "menu", szClientLang, szServLang); + DisplayInfo(iClient, szEvent, "url", szClientLang, szServLang); } -void DisplayInfo(int iClient, const char[] szEvent, const char[] szType, char[] szBuffer, int iBufLen, char[] szClientLang, char[] szServLang) +void DisplayInfo(int iClient, const char[] szEvent, const char[] szType, const char[] szClientLang, const char[] szDefaultLang) { - DebugMessage("DisplayInfo: Client: %N (%i) -> '%s', '%s', '%s', '%s'", iClient, iClient, szEvent, szType, szClientLang, szServLang) + DBG_Info("DisplayInfo: Client: %N (%i) -> '%s', '%s', '%s', '%s'", iClient, iClient, szEvent, szType, szClientLang, szDefaultLang) g_hInfo.Rewind(); - if (g_hInfo.JumpToKey(szEvent) && g_hInfo.JumpToKey(szType)) + if (!g_hInfo.JumpToKey(szEvent) || !g_hInfo.JumpToKey(szType)) + { + return; + } + + KeyValues hKeyValues = new KeyValues(szType); + KvCopySubkeys(g_hInfo, hKeyValues); + switch(CreateForward_OnShowClientInfo(iClient, szEvent, szType, hKeyValues)) { - KeyValues hKeyValues = new KeyValues(szType); - KvCopySubkeys(g_hInfo, hKeyValues); - switch(CreateForward_OnShowClientInfo(iClient, szEvent, szType, hKeyValues)) + case Plugin_Stop, Plugin_Handled: { - case Plugin_Stop, Plugin_Handled: - { - return; - } - case Plugin_Continue: - { - delete hKeyValues; - hKeyValues = g_hInfo; - } + return; } + } - DebugMessage("KvJumpToKey: %s", szType) - switch (szType[0]) + DBG_Info("KvJumpToKey: %s", szType) + switch (szType[0]) + { + case 'c': { - case 'c': - { - DebugMessage("case 'c'") - if (KvGetLangString(szBuffer, iBufLen, szClientLang, szServLang)) - { - DebugMessage("KvGetLangString: (%s, %s) = '%s'", szClientLang, szServLang, szBuffer) - ReplaceString(szBuffer, iBufLen, "\\n", " \n"); - if (szEvent[0] == 'c') - { - ReplaceValues(iClient, szBuffer, iBufLen, (szEvent[13] == 't')); - } - VIP_PrintToChatClient(iClient, szBuffer); - } - } - case 'm': - { - DebugMessage("case 'm'") - - int iTime = g_hInfo.GetNum("time", 0); - if (!g_hInfo.JumpToKey(szClientLang)) - { - if (!g_hInfo.JumpToKey(szServLang)) - { - if (!g_hInfo.GotoFirstSubKey()) - { - if(hKeyValues != g_hInfo) - { - delete hKeyValues; - } - return; - } - } - } - - DebugMessage("KvJumpToKey: (%s|%s)", szClientLang, szServLang) - if (g_hInfo.GotoFirstSubKey(false)) - { - DebugMessage("KvGotoFirstSubKey") - Panel hPanel = new Panel(); - do - { - g_hInfo.GetSectionName(szBuffer, 32); - if (strcmp(szBuffer, "item")) - { - continue; - } - - g_hInfo.GetString(NULL_STRING, szBuffer, 128); - DebugMessage("KvGetString = '%s'", szBuffer) - if (szBuffer[0]) - { - if (!strcmp(szBuffer, "SPACER")) - { - hPanel.DrawText(" \n"); - continue; - } - - if (szEvent[0] == 'c') - { - ReplaceValues(iClient, szBuffer, iBufLen, (szEvent[13] == 't')); - } - hPanel.DrawText(szBuffer); - } - } while (g_hInfo.GotoNextKey(false)); - - g_hInfo.GoBack(); - - hPanel.DrawText(" \n"); - - hPanel.CurrentKey = g_hInfo.GetNum("exit_button", g_iMaxPageItems); - - FormatEx(szBuffer, 128, "%T", "Exit", iClient); - hPanel.DrawItem(szBuffer, ITEMDRAW_CONTROL); - - hPanel.Send(iClient, SelectInfoPanel, iTime); - delete hPanel; - } - } - case 'u': - { - DebugMessage("case 'u'") - if (g_EngineVersion != Engine_CSGO) - { - if (KvGetLangString(szBuffer, iBufLen, szClientLang, szServLang)) - { - DebugMessage("KvGetLangString: (%s, %s) = '%s'", szClientLang, szServLang, szBuffer) - if (strncmp(szBuffer, "http://", 7, true) != 0) - { - Format(szBuffer, 256, "http://%s", szBuffer); - } - - ShowMOTDPanel(iClient, "VIP_INFO", szBuffer, MOTDPANEL_TYPE_URL); - } - } - } + DBG_Info("case 'c'") + DisplayChatInfo(iClient, hKeyValues, szClientLang, szDefaultLang); } - - if(hKeyValues != g_hInfo) + case 'm': { - delete hKeyValues; + DBG_Info("case 'm'") + DisplayMenuInfo(iClient, hKeyValues, szClientLang, szDefaultLang); + } + case 'u': + { + DBG_Info("case 'u'") + DisplayUrlInfo(iClient, hKeyValues, szClientLang, szDefaultLang); } } + + delete hKeyValues; } -bool KvGetLangString(char[] szBuffer, int iBufLen, char[] szClientLang, char[] szServLang) +void DisplayChatInfo(int iClient, KeyValues hKeyValues, const char[] szClientLang, const char[] szDefaultLang) { - DebugMessage("KvGetLangString: '%s', '%s'", szClientLang, szServLang) - g_hInfo.GetString(szClientLang, szBuffer, iBufLen); - DebugMessage("KvGetString (%s) = '%s'", szClientLang, szBuffer) - if (!szBuffer[0]) + char szBuffer[1024]; + if (!KvGetLangString(hKeyValues, SZF(szBuffer), szClientLang, szDefaultLang)) + return; + + DBG_Info("KvGetLangString: (%s, %s) = '%s'", szClientLang, szDefaultLang, szBuffer) + ReplaceString(SZF(szBuffer), "{NL}", "\n"); + ReplaceValues(iClient, SZF(szBuffer)); + DBG_Info("ReplaceValues: '%s'", szBuffer) + + VIP_PrintToChatClient(iClient, szBuffer); +} + +void DisplayMenuInfo(int iClient, KeyValues hKeyValues, const char[] szClientLang, const char[] szDefaultLang) +{ + int iTime = hKeyValues.GetNum("time", 0); + if (!hKeyValues.JumpToKey(szClientLang) && !hKeyValues.JumpToKey(szDefaultLang)) + return; + + DBG_Info("KvJumpToKey: (%s|%s)", szClientLang, szDefaultLang) + if (!hKeyValues.GotoFirstSubKey(false)) + return; + + DBG_Info("KvGotoFirstSubKey") + Panel hPanel = new Panel(); + char szBuffer[PMP]; + do { - g_hInfo.GetString(szServLang, szBuffer, iBufLen); - DebugMessage("KvGetString (%s) = '%s'", szServLang, szBuffer) + hKeyValues.GetSectionName(SZF(szBuffer)); + if (strcmp(szBuffer, "item")) + continue; + + hKeyValues.GetString(NULL_STRING, SZF(szBuffer)); + DBG_Info("KvGetString = '%s'", szBuffer) if (!szBuffer[0]) + continue; + + if (!strcmp(szBuffer, "SPACER")) { - return false; + hPanel.DrawText(" \n"); + continue; } + + ReplaceValues(iClient, SZF(szBuffer)); + hPanel.DrawText(szBuffer); + } while (hKeyValues.GotoNextKey(false)); + + hPanel.DrawText(" \n "); + + hPanel.CurrentKey = g_hInfo.GetNum("exit_button", g_iMaxPageItems); + + FormatEx(szBuffer, 128, "%T", "Exit", iClient); + hPanel.DrawItem(szBuffer, ITEMDRAW_CONTROL); + + hPanel.Send(iClient, SelectInfoPanel, iTime); + delete hPanel; +} + +void DisplayUrlInfo(int iClient, KeyValues hKeyValues, const char[] szClientLang, const char[] szDefaultLang) +{ + if (g_EngineVersion == Engine_CSGO) + return; + + char szBuffer[PMP]; + if (!KvGetLangString(hKeyValues, SZF(szBuffer), szClientLang, szDefaultLang)) + return; + + DBG_Info("KvGetLangString: (%s, %s) = '%s'", szClientLang, szDefaultLang, szBuffer) + if (strncmp(szBuffer, "http://", 7, true) != 0 && strncmp(szBuffer, "https://", 7, true) != 0) + { + Format(SZF(szBuffer), "http://%s", szBuffer); } - return true; + + ShowMOTDPanel(iClient, "VIP_INFO", szBuffer, MOTDPANEL_TYPE_URL); +} + +bool KvGetLangString(KeyValues hKeyValues, char[] szBuffer, int iBufLen, const char[] szClientLang, const char[] szDefaultLang) +{ + DBG_Info("KvGetLangString: '%s', '%s'", szClientLang, szDefaultLang) + hKeyValues.GetString(szClientLang, szBuffer, iBufLen); + DBG_Info("KvGetString (%s) = '%s'", szClientLang, szBuffer) + if (szBuffer[0]) + return true; + + hKeyValues.GetString(szDefaultLang, szBuffer, iBufLen); + DBG_Info("KvGetString (%s) = '%s'", szDefaultLang, szBuffer) + + if (szBuffer[0]) + return true; + + return false; } -void ReplaceValues(int iClient, char[] szBuffer, int iBufLen, bool bExt) +void ReplaceValues(int iClient, char[] szBuffer, int iBufLen) { - char szName[MAX_NAME_LENGTH]; char szGroup[64]; + if (FindCharInString(szBuffer, '{') == -1) + return; + + char szName[MAX_NAME_LENGTH], szGroup[64]; GetClientName(iClient, SZF(szName)); ReplaceString(szBuffer, iBufLen, "{NAME}", szName); g_hFeatures[iClient].GetString(KEY_GROUP, SZF(szGroup)); ReplaceString(szBuffer, iBufLen, "{GROUP}", szGroup); - if (bExt) - { - int iExpires; - g_hFeatures[iClient].GetValue(KEY_EXPIRES, iExpires); - DebugMessage("GetValue(%s) = %d", KEY_EXPIRES, iExpires) - DebugMessage("GetTime() = %d", GetTime()) - DebugMessage("TIMELEFT = %d", iExpires - GetTime()) - char szExpires[64]; - FormatTime(SZF(szExpires), "%d/%m/%Y - %H:%M", iExpires); - ReplaceString(szBuffer, iBufLen, "{EXPIRES}", szExpires); - UTIL_GetTimeFromStamp(SZF(szExpires), iExpires - GetTime(), iClient); - ReplaceString(szBuffer, iBufLen, "{TIMELEFT}", szExpires); - } + + int iExpires; + g_hFeatures[iClient].GetValue(KEY_EXPIRES, iExpires); + DBG_Info("GetValue(%s) = %d", KEY_EXPIRES, iExpires) + DBG_Info("GetTime() = %d", GetTime()) + DBG_Info("TIMELEFT = %d", iExpires - GetTime()) + char szExpires[64]; + FormatTime(SZF(szExpires), "%d/%m/%Y - %H:%M", iExpires); + ReplaceString(szBuffer, iBufLen, "{EXPIRES}", szExpires); + UTIL_GetTimeFromStamp(SZF(szExpires), iExpires - GetTime(), iClient); + ReplaceString(szBuffer, iBufLen, "{TIMELEFT}", szExpires); + // {NAME} - Ник игрока // {GROUP} - Группа игрока // {TIMELEFT} - Через сколько истекает VIP-статус