|
Игрок с клиент мода, как его определить?
|
|
|
Karandachik
|
Дата: Понедельник, 05.02.2024, 12:17:45 | Сообщение # 1 |
 |
Сообщений: 62
Репутация: 3 [ +/- ]
|
|
Привет, задумала я значит сделать плагин оверлей в конце раунда. Ничего сложного, но фишечка в том, что хочу выделить игроков с клиент мода. Схема такая. если простой игрок то ему один оверлей, а если с клиент мода то другой. Нашла в интернете много плагинов где используется распознавание по квару или просто способ вывода текста, но не видела нигде простого логического определения игрока с клиент мода. По типу если игрок жив + он в игре+ с клиент мода - оверлей, если нет то другой оверлей. Помогите с определением игрока клиентмода пожалуйста.
|
| |
| |
|
_wS_
|
Дата: Понедельник, 05.02.2024, 19:47:24 | Сообщение # 2 |
|
Код bool g_bClientMod[MAXPLAYERS + 1];
public void OnPluginStart() { for (int client = 1; client <= MaxClients; ++client) { if (IsClientInGame(client)) { OnClientPutInServer(client); } } }
public void OnClientPutInServer(int client) { // Этот вариант уже не работает. //char s[4]; //g_bClientMod[client] = GetClientInfo(client, "~clientmod", s, sizeof(s)) && s[0];
// Этот должен работать. char s[12]; g_bClientMod[client] = GetClientInfo(client, "_client_version", s, sizeof(s)) && s[2]/*strlen(s) > 2*/ && StringToInt(s) > 0; }
/* if (g_bClientMod[client]) { ClientMod } */
|
| |
| |
|
Karandachik
|
Дата: Понедельник, 12.02.2024, 13:28:48 | Сообщение # 3 |
 |
Сообщений: 62
Репутация: 3 [ +/- ]
|
|
Цитата _wS_ (  ) public void OnClientConnected(int client) { char s[4]; g_bClientMod[client] = GetClientInfo(client, "~clientmod", s, sizeof(s)) && s[0]; } Я думала есть что-то проще, по типу if (IsClientInGame(client) && !IsClientmodClient(client) && !IsPlayerAlive(client))
|
| |
| |
|
_wS_
|
Дата: Понедельник, 12.02.2024, 22:09:28 | Сообщение # 4 |
|
Это и есть простой вариант, чтобы зря не ставить дополнительный plugin. После этого просто if (g_bClientMod[client]) ..
Если хочется if (CM_IsClientModUser(client)), то ставим clientmod.sp plugin и берём там .inc.
|
| |
| |
|
Karandachik
|
Дата: Вторник, 13.02.2024, 10:13:36 | Сообщение # 5 |
 |
Сообщений: 62
Репутация: 3 [ +/- ]
|
|
Цитата _wS_ (  ) Это и есть простой вариант, чтобы зря не ставить дополнительный plugin. После этого просто if (g_bClientMod[client]) ..
Если хочется if (CM_IsClientModUser(client)), то ставим clientmod.sp plugin и берём там .inc. Спасибо, я знала что есть что-то очень простое и гениальное.
Добавлено (05.03.2026, 12:23:02) ---------------------------------------------
Цитата _wS_ (  ) Если хочется if (CM_IsClientModUser(client)), то ставим clientmod.sp plugin и берём там .inc. А есть что-то для старого синтаксиса на 164 или 170??? Там инклуд на новом синтаксисе, мне нужно именно под старый сделать код. Может у кого то завалялся способ определить игрока с криент мода он или нет под sourcemod 163 ???
Код new bool:g_bClientMod[MAXPLAYERS + 1];
public OnPluginStart() { for (new client = 1; client <= MaxClients; ++client) { if (IsClientConnected(client)) { OnClientConnected(client); } } }
public OnClientConnected(client) { new String:s[4]; g_bClientMod[client] = GetClientInfo(client, "~clientmod", s, sizeof(s)) && s[0]; }
КакаяТоФункция(client) { if (g_bClientMod[client]) { Клиент мод } else { Не клиент мод } }
|
| |
| |
|
_wS_
|
Дата: Суббота, 09.05.2026, 06:09:34 | Сообщение # 6 |
|
Цитата TXCodding (  ) Это не сработает Это работало раньше, а сейчас нужно проверять _client_version и GetClientInfo с этим справляется.
---
Код char s[12]; g_bClientMod[client] = GetClientInfo(client, "_client_version", s, sizeof(s)) && s[2]/*strlen(s) > 2*/ && StringToInt(s) > 0;
|
| |
| |
|
_wS_
|
Дата: Суббота, 09.05.2026, 16:14:00 | Сообщение # 7 |
|
Цитата TXCodding (  ) // Небольшая задержка, чтобы ClientMod успел отправить данные Это подтолкнуло покопать исх и узнать нового Как раз именно перед OnClientPutInServer игроку ставится SIGNONSTATE_FULL (игрок полностью подключен, все userinfo переменные передал и т.д.), а значит таймер в OnClientPutInServer не нужен. Хоть часто и работает в OnClientConnected, но, получается, может стрелять, а значит лучше юзать OnClientPutInServer.
Кст GetClientOfUserId уже проверяет на Connected (IsClientConnected лишнее). Бывают ещё странные моменты, когда может пригодиться IsClientInGame, но это если игрок между OnClientConnect и OnClientPutInServer (маловероятно).
--- Ещё с sVersion[2] может быть проблема, если GetClientInfo записало < 3 символов. Старый decl не занулял переменные/массивы и в них был мусор:
Код public void OnPluginStart() { decl s[4]; for (int i = 0; i < sizeof(s); ++i) { PrintToServer("%d", s[i] == '\0'); } // Мне выдало: // 1 // 1 // 0 привет.. // 1 }
|
| |
| |