Переименовывание игрока через плагин.
|
|
Sony_uw
|
Дата: Суббота, 05.10.2013, 22:16:46 | Сообщение # 1 |
|
Сообщений: 10
Репутация: 0 [ +/- ]
|
|
Такая проблема, пишу фильтр скрипт для никнеймов, чтобы не было рекламных ников, не могли бы помочь с функцией переименовывания игрока через плагин, в соурс павн мало что знаю, можно сказать что все основы из С++. Примерный алгоритм был таков, создаем переменную name и присваеваем ей имя игрока, далее если оно совпадает с одним из элементов массива то мы меняем его ник на другой, проблема в переименовывании, нашел команду на сервере sm_rename <name> [newname] думал запустить команду через ServerCommand или как то по другому но проблема в том что пользоваться этим не умею :с вобщем подскажите кто нибудь что нибудь) Вот мой бред если нужно: Код public OnPluginStart() { NicknameFilter(); }
public NicknameFilter(client) { decl String:name[MAX_NAME_LENGTH]; GetClientName(client, name, MAX_NAME_LENGTH); new String:FilterName[3] = {"www.club-astr.com", "zloy.pl.ua", "marcoserv.ru"}; new String:RS_name="redstar-servers.com"; for (new i = 0; i < 3; i++) { if (name == FilterName[i]) { ClientCommand(setname [RS_name]); PrintToChat(client,"\x03Смените пожалуйста никнейм!"); PrintToChatAll("Игрок %N был переименован в %d!", client, RS_name); } } return Plugin_Handled; } И сам файл на всякий случай..
Гости не могут скачивать файлы
|
|
|
| |
Nintoler
|
Дата: Суббота, 05.10.2013, 22:27:36 | Сообщение # 2 |
|
Сообщений: 15
Репутация: 0 [ +/- ]
|
|
Код SetClientInfo(client, "name", "Новое Имя");
|
|
| |
Scarface_slv
|
Дата: Суббота, 05.10.2013, 23:00:37 | Сообщение # 3 |
|
Сообщений: 737
Репутация: 61 [ +/- ]
|
|
1. public OnPluginStart() { NicknameFilter(); }
public NicknameFilter(client) Не правильно, ты не передал client да и нет ее там и не должно быть. Проверку нужно делать при подключении игрока а не при запуске плагина. В общем пользуйся например этим public OnClientPutInServer(client) вместо public OnPluginStart() public OnClientPutInServer(client) NicknameFilter(client); 2. new String:FilterName[3]. не правильно, должно быть хотя бы так new String:FilterName[3][32]; new String:RS_name="redstar-servers.com"; Тоже не прав., не указал размер строки. new String:RS_name[20] = ... 3. if (name == FilterName[i]). не правильно. так проверяют один символ ну или число. Проверку строк на совпадение, нужно делать так if(StrEqual(name, FilterName[i], false)) 4. PrintToChatAll("Игрок %N был переименован в %d!", client, RS_name); %d- он получает числа а не строки отоброзит не правильно, вместо нее %s 5. return Plugin_Handled здесь думаю не нужен=) Может что то упустил, если не исправишь не скомпилируется
Сообщение отредактировал Scarface_slv - Суббота, 05.10.2013, 23:56:37 |
|
| |
TEIN
|
Дата: Воскресенье, 06.10.2013, 05:37:15 | Сообщение # 4 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
тест Код #include <sourcemod>
new String:STRING_BannedName[][] = {"blabla.ru", "blabla.com"};
new String:STRING_NewName[] = "neblabla.ru";
new NUMERIC_SizeArray = 0;
public OnPluginStart() { for (new i = 1; i <= MaxClients; i++) { if (IsClientInGame(i) && !IsFakeClient(i)) { OnClientPutInServer(i); } }
NUMERIC_SizeArray = sizeof(STRING_BannedName); }
public OnClientPutInServer(client) { decl String:name[50]; GetClientName(client, name, sizeof(name));
for (new i = 0; i < NUMERC_SizeArray; i++) { if (strcmp(STRING_BannedName[i], name, false) == 0) { SetClientInfo(client, "name", name); break; } } }
|
|
| |
Sony_uw
|
Дата: Воскресенье, 06.10.2013, 12:56:21 | Сообщение # 5 |
|
Сообщений: 10
Репутация: 0 [ +/- ]
|
|
TEIN, спасибо огромное) еще один вопрос можно ли сделать проверку не только при заходе игрока, а допустим пока раунд не кончился идет проверка, чтобы нельзя было переименовываться обратно)
|
|
| |
TEIN
|
Дата: Воскресенье, 06.10.2013, 13:04:22 | Сообщение # 6 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
Можно
|
|
| |
Sony_uw
|
Дата: Воскресенье, 06.10.2013, 18:46:57 | Сообщение # 7 |
|
Сообщений: 10
Репутация: 0 [ +/- ]
|
|
TEIN, ты не знаешь как определить через код игрока STEAM или NOSTEAM?
|
|
| |
TEIN
|
Дата: Понедельник, 07.10.2013, 11:43:42 | Сообщение # 8 |
|
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
Код public OnClientAuthorized(client, const String:auth[]) { PrintToChat(client, "Ваш SteamID: %s (%sSTEAM)", auth, strlen(auth) > 18 ? "NO-", ""); }
|
|
| |