блокировка любого ип в чате
| |
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 [ +/- ]
|
|
|
|
| |
Scarface_slv
|
Дата: Четверг, 05.07.2012, 19:00:03 | Сообщение # 5 |
|
Сообщений: 737
Репутация: 61 [ +/- ]
|
|
ты чего :D
|
|
| |
ЙОДА
|
Дата: Пятница, 06.07.2012, 01:31:42 | Сообщение # 6 |
|
Сообщений: 41
Репутация: 0 [ +/- ]
|
|
не дали помочь
|
|
| |
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) --------------------------------------------- Внешне, вроде код правлильный)
|
|
| | |
ЙОДА
|
Дата: Пятница, 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
|
|
| |
|