Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Переименовывание игрока через плагин.
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-", "");
}
 
  • Страница 1 из 1
  • 1
Поиск: