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

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

  • Страница 1 из 2
  • 1
  • 2
  • »
блокировка любого ип в чате
Scarface_slv Дата: Четверг, 05.07.2012, 14:21:42 | Сообщение # 1
Сообщений: 737
Репутация: 61 [ +/- ]
как это делается не могу понять WS помоги плиз
 
ЙОДА Дата: Четверг, 05.07.2012, 14:48:06 | Сообщение # 2
Сообщений: 41
Репутация: 0 [ +/- ]
Чего конкретно ты хочешь?
 
Scarface_slv Дата: Четверг, 05.07.2012, 15:39:17 | Сообщение # 3
Сообщений: 737
Репутация: 61 [ +/- ]
Пример, написал ип в чате и его заблокировало, не показывало вообщем

Добавлено (05.07.2012, 15:39:17)
---------------------------------------------
я нашел ответ, сорри за не нужную тему

 
ЙОДА Дата: Четверг, 05.07.2012, 16:47:14 | Сообщение # 4
Сообщений: 41
Репутация: 0 [ +/- ]
plach
 
Scarface_slv Дата: Четверг, 05.07.2012, 19:00:03 | Сообщение # 5
Сообщений: 737
Репутация: 61 [ +/- ]
ты чего :D
 
ЙОДА Дата: Пятница, 06.07.2012, 01:31:42 | Сообщение # 6
Сообщений: 41
Репутация: 0 [ +/- ]
не дали помочь plach
 
Scarface_slv Дата: Пятница, 06.07.2012, 18:33:19 | Сообщение # 7
Сообщений: 737
Репутация: 61 [ +/- ]
WS помоги, вот так запрещает ип при заходе
как сделать чтоб он запрещал тока 5 чисел...
а если возможно чтоб числа вообще запрещены были
Code

#include <regex>

new Handle:ipcb_Regex = INVALID_HANDLE;

public OnPluginStart() ipcb_Regex = CompileRegex("\\d+\\.\\d+\\.\\d+\\.\\d+(:\\d+)?");

public OnClientPutInServer(client)
{
decl String:Name[125];
GetClientName(client, Name, 125);
if (MatchRegex(ipcb_Regex, Name) > 0) KickClient(client, "KICK");
}


Сообщение отредактировал Scarface_slv - Пятница, 06.07.2012, 18:33:39
 
ЙОДА Дата: Пятница, 06.07.2012, 19:53:11 | Сообщение # 8
Сообщений: 41
Репутация: 0 [ +/- ]
Тебе нужно писать айпи в чат или ия игрока?

Добавлено (06.07.2012, 19:50:44)
---------------------------------------------

Code
new size = 0;   //количество айпи, которые уже в блоке
new String:Blocked_ips[][];  //массив заблоченных айпи

public OnPluginStart()
{
         RegConsoleCmd("say", Command_Say);   
}

public Action:Command_Say(i, args)
{
         decl String:text[256];

         GetCmdArgString(text, sizeof(text)-1);
         StripQuotes(text);   //
         TrimString(text);    // лишние пробелы отдаем на съедение бобрам
     
         if (StrContains(text, "!blockip ", true) == 0)  //если строка начинается с "!blockip ", начинаем проверку
         {
                 decl Sting:IP[3][20];

                 if ((ExplodeString(text, " ", IP, 3, 20)) == 2)  
                 {
                         return Block_This_IP(IP[2]);  //если  больше нет пробелов  
                 }
                 else  
                 {
                         PrintToChat(i,"Какая странная однако сточка. Ты пробелы лишние поубирай, а потом пиши, умник.");   
                         return Plugin_Handled;
                 }
         }
          
         return Plugin_Continue;
}

stock Action:Block_This_IP(String:IPtoBlock[])
{
         decl String:Cash_IP[20];

         size++;  //увеличиваем счетчик заблоченных айпи
         Blocked_ips[size] = IP[2];  //добавляем айпи в массив

         for (new j = 1; j <= MaxClients; j++)
         {
                 GetClientIP(j, Cash_IP, sizeof(Cash_IP));
                 if (StrEqual(IP, Cash_IP, false))
                 {
                         KickClient(j, "Ибо не*уй.");    //если игрок с таким айпи сейчас онлайн, отдаем его на съедение бобрам
                         break;
                 }
         }
   
         return Plugin_Handled;
}

public OnClientAuthorized(client, const String:steamid[])
{
         decl String:Connect_IP[20];

         GetClientIP(client, Connect_IP, sizeof(Connect_IP));

         for (new j = 1; j <= size; j++)
         {
                 if (StrEqual(Connect_IP, Blocked_ips[j], false))    // проверка на приналежность айпи конектющегося раба к нашему массиву
                 {
                         KickClient(client, "С мопеда на*уй.");  // при совпадении, оскорбаляем его полностью
                         break;
                 }
         }         
}


Самое простое, что я смог придумать. Без проверки вводимого на то, является ли оно айпи внешне или же считает себя айпи в глубине души :3

Добавлено (06.07.2012, 19:53:11)
---------------------------------------------
Внешне, вроде код правлильный)

 
Scarface_slv Дата: Пятница, 06.07.2012, 20:03:23 | Сообщение # 9
Сообщений: 737
Репутация: 61 [ +/- ]
xd Спасибо конечно что потрудился=) но мне не это нужно)) ты попробуй мой код или просто посмотри на него)
там такое условие,

если ник игрока при заходе на сервер это- ип адрес, любой не важно какой (213.213.123.123:27088)
то кик
иначе пускаем его на сервер=)

теперь мне захотелось сделать так

если ник игрока при заходе на сервер это (12345) то есть 5 чисел.
то кик
иначе пускаем его на сервер=)

идеальный вариант:
если в нике игрока есть хоть одно число то при заходе на сервер(orel05)
кик)
иначе.... vshapke


Сообщение отредактировал Scarface_slv - Пятница, 06.07.2012, 20:09:51
 
ЙОДА Дата: Пятница, 06.07.2012, 20:13:55 | Сообщение # 10
Сообщений: 41
Репутация: 0 [ +/- ]
Еще проховато знаком с синтаксисом сурспавна, но алгоритм примерно такой:

Code
public OnClientAuthorized(client, const String:steamid[])
{
      decl String:Name[125];      
      GetClientName(client, Name, 125);      

             for (new j = 0; j <  strlen(Name); j++)
             {
                     if (Name[j] входит в множество ['0'..'9'])      
                     {
                    KickClient(client, "Пусть тебя съедят бобры, глупый любитель цифр в нике.");
                     }        
             }             
}


Добавлено (06.07.2012, 20:13:55)
---------------------------------------------
на паскале будет так

Code

if (Name[j] in ['0'..'9']) then (кик);



Сообщение отредактировал ЙОДА - Пятница, 06.07.2012, 20:55:25
 
nynCuKaH Дата: Пятница, 06.07.2012, 20:27:35 | Сообщение # 11
Сообщений: 110
Репутация: 0 [ +/- ]
Scarface_slv, тоже рекламщики задрали? ^_^
 
Scarface_slv Дата: Пятница, 06.07.2012, 20:27:37 | Сообщение # 12
Сообщений: 737
Репутация: 61 [ +/- ]
ты компилировал хоть?)
Code

  for (new j = 1; j <=  strlen(my_string); j++) предполож начало j=1 strlen проверяет сколько символов то есть 1 (незнаю зачем это=) )дальше j+j=2
  {
          if (Name[j] входит в множество [0..9]) Name[j] то есть 12345[2] или Scarface[2]  и уже вроде как понятно что он просто Name дает какое либо число из цикла так как он узнает что ник игрока это какое либо число?
         {
                           KickClient(client, "Пусть тебя съедят бобры, глупый любитель цифр в нике.");
          }     
}   

правильно ли я описал хз) но не работает то что написал
 
ЙОДА Дата: Пятница, 06.07.2012, 20:37:01 | Сообщение # 13
Сообщений: 41
Репутация: 0 [ +/- ]
Code
#include <string>

public OnClientAuthorized(client, const String:steamid[])   
{   
   decl String:Name[125];
   GetClientName(client, Name, 125);
   decl size = strlen(Name);       

            for (new j = 0; j < size; j++)   
            {   
                          if (    StrEqual(Name[j], "0", false) ||
                     StrEqual(Name[j], "1", false) ||
                     StrEqual(Name[j], "2", false) ||
                     StrEqual(Name[j], "3", false) ||
                     StrEqual(Name[j], "4", false) ||
                     StrEqual(Name[j], "5", false) ||
                     StrEqual(Name[j], "6", false) ||
                     StrEqual(Name[j], "7", false) ||
                     StrEqual(Name[j], "8", false) ||
                     StrEqual(Name[j], "9", false)
     
                             ) KickClient(client, "Пусть тебя съедят бобры, глупый любитель цифр в нике.");      
            }            
}


Можно так, но я не увеен, что символ будет читаться как строка)


Сообщение отредактировал ЙОДА - Пятница, 06.07.2012, 20:55:13
 
_wS_ Дата: Пятница, 06.07.2012, 20:44:32 | Сообщение # 14
Code
decl String:nick[32]; nick[0] = '\0'; GetClientName(client, nick, 32);
new symbols = strlen(nick);
for (new i = 0; i < symbols; i++)
{
     if (IsCharNumeric(nick[i]))
     {
         KickClient(client, "В имени не должно быть чисел");
         break;
     }
}

Ну а если совместить с той функцией проверки IP'а, то:

Code
public OnClientPutInServer(client)  
{
     decl String:nick[32]; nick[0] = '\0'; GetClientName(client, nick, 32);
     new symbols = strlen(nick);
     for (new i = 0; i < symbols; i++)
     {
         if (IsCharNumeric(nick[i]))
         {
             KickClient(client, "В имени не должно быть чисел");
             return;
         }
     }
     if (MatchRegex(ipcb_Regex, nick) > 0) KickClient(client, "KICK");  
}

Йода, перед тем как советы давать, надо быть уверенным, что это будет работать.
 
ЙОДА Дата: Пятница, 06.07.2012, 20:48:24 | Сообщение # 15
Сообщений: 41
Репутация: 0 [ +/- ]
Во-во-во. Этой функции мне и не хватало)

Code
IsCharNumeric(nick[i])


А первый вариант все равно будет работать :3
 
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: