SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Русский/Russian > Релизы/Releases

Reply
 
Thread Tools Display Modes
Old 24/06/2012, 11:24 AM   #1
Bombo
Huge Clucker
 
Bombo's Avatar
 
Join Date: Jun 2012
Posts: 264
Reputation: 76
Lightbulb Глобальный поиск игроков по серверам + глобальный БАН

ПОИСК ИГРОКОВ ПО НИКУ, НА ВСЕХ СЕРВЕРАХ


Выглядит это следующим образом:

На команды
/find Wore1
/find swatt
/find DniX

будет получен следующий ответ:




ГЛОБАЛЬНЫЙ БАН ИГРОКОВ


Этот же скрипт позволяет забанить злостного читера так, чтобы он не смог зайти ни на один сервер (на котором установлен данный скрипт, разумеется)

Работает это так:

Допустим, на одном из серверов SA:MP выполняется команда
/gbanip 12.34.56.78
Тогда читер с ip-адресом 12.34.56.78 не зайдёт ни на один сервер с данным скриптом

Все команды глобального бана:
/gban [id]
/gbanip [ip]
/gunban [id]
/gunbanip [ip]


В скором времени добавлю бан по маске подсети и по нику, а также временный бан.

Смысл:

Отрезает читеров и спамеров, кочующих от сервака к серваку.


Всю работу выполняет удалённый сервер, т.ч. скрипт практически не занимает ресурсов.

Code:
//1.1b SA:MP GPS - Global Player Search by Bombo

#include <a_samp>
#include <a_http>

#include "../include/gl_common.inc"


forward FindPlayer(index, code, data[]);
forward CheckIP(index, code, data[]);

new UName[]="test";
new Pass[]="test";

public OnFilterScriptInit()
{
	print("\n--------------------------------------");
	print(" Global Player Search by Bombo");
	print("--------------------------------------\n");

	SendClientMessageToAll(9424500, "\n--------------------------------------");
	SendClientMessageToAll(9424500, "Поиск игроков от Bombo");
	SendClientMessageToAll(9424500, "--------------------------------------\n");
	return 1;
}

public OnGameModeInit()
{
	// Don't use these lines if it's a filterscript
	SetGameModeText("Blank Script");
	AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
	return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
	SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
	SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
	SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
	return 1;
}

public OnPlayerConnect(playerid)
{
	new PlayerIP[16];
	new PlayerName[48];
	new http_msg[256];
	new str_id[8];

	GetPlayerIp(playerid, PlayerIP, sizeof(PlayerIP));

	http_msg = "Playerid=";
	valstr(str_id, playerid);
	strcat(http_msg, str_id);
	strcat(http_msg, "&CheckIP=");
	strcat(http_msg, PlayerIP);
	strcat(http_msg, "&Uname=");
	strcat(http_msg, UName);
	strcat(http_msg, "&Pwd=");
	strcat(http_msg, Pass);
	strcat(http_msg, "&PlayerName=");
	GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
	strcat(http_msg, PlayerName);

    HTTP(0, HTTP_POST, "botinform.com:9797", http_msg, "CheckIP"); //проверка на БАН

	SendClientMessage(playerid, 9324500, "Для поиска игрока на всех серверах SAMP наберите: /find ник_игрока");
	return 1;
}

public OnPlayerSpawn(playerid)
{
    SendClientMessage(playerid, 9324500, "Для поиска игрока на всех серверах SAMP наберите: /find ник_игрока");
	return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
    new cmd[256+1];
    new idx;

    cmd = strtok(cmdtext, idx);

    //if(!IsPlayerAdmin(playerid)) return 0; // this is an admin only script

	//Команда "/help"
    if(strcmp(cmd, "/help", true) == 0)
    {
        SendClientMessage(playerid, 9324500, "/find [ник_игрока] - поиск по всем серверам!");
  	    if(IsPlayerAdmin(playerid))
  	    {
	        SendClientMessage(playerid, 9324500, "/gban [id] - бан по всем серверам с данным модом");
            SendClientMessage(playerid, 9324500, "/gbanip [ip] - бан по ip на все сервера с данным модом");
            SendClientMessage(playerid, 9324500, "/gunban [id] - разбан по всем серверам с данным модом");
            SendClientMessage(playerid, 9324500, "/gunbanip [ip] - разбан по всем серверам с данным модом");
 	    }
	    return 1;
    }

    //команда /find [ник]
    if(strcmp(cmd, "/find", true) == 0)
    {
		new tmp[256];
		new http_msg[512];
		new str_id[8];

		tmp = strtok(cmdtext,idx);
		http_msg = "Playerid=";
		valstr(str_id, playerid);
		strcat(http_msg, str_id);
		strcat(http_msg, "&Uname=");
		strcat(http_msg, UName);
		strcat(http_msg, "&Pwd=");
		strcat(http_msg, Pass);
		strcat(http_msg, "&Search=");
		strcat(http_msg, tmp);

        SendClientMessage(playerid, 9324500, "Searching...");
        HTTP(0, HTTP_POST, "botinform.com:9797", http_msg, "FindPlayer");
        return 1;
    }

    //команда "/gunban [player id]"
    if(IsPlayerAdmin(playerid))
    if(strcmp(cmd, "/gunban", true) == 0)
    {
	new tmp[256];
	new nPlayerId;
	new strPlayerIp[16];
	new http_msg[512];
  	new str_id[8];

	tmp = strtok(cmdtext,idx);
	nPlayerId = strval(tmp);
	GetPlayerIp(nPlayerId, strPlayerIp, sizeof(strPlayerIp));
	http_msg = "Playerid=";
	valstr(str_id, playerid);
	strcat(http_msg, str_id);
	strcat(http_msg, "&Uname=");
	strcat(http_msg, UName);
	strcat(http_msg, "&Pwd=");
	strcat(http_msg, Pass);
	strcat(http_msg, "&GUnban=");
	strcat(http_msg, strPlayerIp);

    SendClientMessage(playerid, 9324500, "Banning...");
	HTTP(0, HTTP_POST, "botinform.com:9797", http_msg, "FindPlayer");
	return 1;
    }

    //команда "/gunbanip [ip]"
    if(IsPlayerAdmin(playerid))
    if(strcmp(cmd, "/gunbanip", true) == 0)
    {
		new tmp[256];
	  	new http_msg[512];
	  	new str_id[8];

		tmp = strtok(cmdtext,idx);
		http_msg = "Playerid=";
		valstr(str_id, playerid);
		strcat(http_msg, str_id);
		strcat(http_msg, "&Uname=");
		strcat(http_msg, UName);
		strcat(http_msg, "&Pwd=");
		strcat(http_msg, Pass);
		strcat(http_msg, "&GUnban=");
		strcat(http_msg, tmp);

        SendClientMessage(playerid, 9324500, "Unbanning...");
		HTTP(0, HTTP_POST, "botinform.com:9797", http_msg, "FindPlayer");
		return 1;
    }

    //команда "/gbanip [ip] [ник]"
    if(IsPlayerAdmin(playerid))
    if(strcmp(cmd, "/gbanip", true) == 0)
    {
		new tmp[256];
	  	new http_msg[512];
	  	new str_id[8];
	  	new strPlayerIp[16];
	  	new strPlayerName[24];
	  	new strAdminName[24];

		tmp = strtok(cmdtext,idx);
		http_msg = "Playerid=";
		valstr(str_id, playerid);
		strcat(http_msg, str_id);
		strcat(http_msg, "&Uname=");
		strcat(http_msg, UName);
		strcat(http_msg, "&Pwd=");
		strcat(http_msg, Pass);
		strcat(http_msg, "&GBan=");
		strcat(http_msg, tmp);
		strcat(http_msg, "&AdminIP=");
		GetPlayerIp(playerid, strPlayerIp, sizeof(strPlayerIp));
		strcat(http_msg, strPlayerIp);
		strcat(http_msg, "&PlayerName=");
		strPlayerName = strtok(cmdtext,idx);
		strcat(http_msg, strPlayerName);
		strcat(http_msg, "&Admin=");
		GetPlayerName(playerid, strAdminName, sizeof(strAdminName));
		strcat(http_msg, strAdminName);

        SendClientMessage(playerid, 9324500, "Banning...");
		HTTP(0, HTTP_POST, "botinform.com:9797", http_msg, "FindPlayer");
		return 1;
    }

    //команда "/gban [player id]"
    if(IsPlayerAdmin(playerid))
    if(strcmp(cmd, "/gban", true) == 0)
    {
		new tmp[256];
		new nPlayerId;
		new strPlayerIp[16];
	  	new http_msg[512];
  		new str_id[8];
	  	new strPlayerName[24];
	  	new strAdminName[24];

		tmp = strtok(cmdtext,idx);
		nPlayerId = strval(tmp);
		http_msg = "Playerid=";
		valstr(str_id, playerid);
		strcat(http_msg, str_id);
		strcat(http_msg, "&Uname=");
		strcat(http_msg, UName);
		strcat(http_msg, "&Pwd=");
		strcat(http_msg, Pass);
		strcat(http_msg, "&GBan=");
		GetPlayerIp(nPlayerId, strPlayerIp, sizeof(strPlayerIp));
		strcat(http_msg, strPlayerIp);
		strcat(http_msg, "&AdminIP=");
		GetPlayerIp(playerid, strPlayerIp, sizeof(strPlayerIp));
		strcat(http_msg, strPlayerIp);
		strcat(http_msg, "&Admin=");
		GetPlayerName(playerid, strAdminName, sizeof(strAdminName));
		strcat(http_msg, strAdminName);
		strcat(http_msg, "&PlayerName=");
		GetPlayerName(nPlayerId, strPlayerName, sizeof(strPlayerName));
		strcat(http_msg, strPlayerName);

        SendClientMessage(playerid, 9324500, "Banning...");
		HTTP(0, HTTP_POST, "botinform.com:9797", http_msg, "FindPlayer");
		return 1;
    }

    return 0;
}

public FindPlayer(index, code, data[])
{
  new tmp[256];
  new len,i,j,k;
  new playerid;
  new num[8];

//  printf("%s", data);

  for(i = 0; i < sizeof(num); ++i)
	num[i] = '\0';

  k = 0;
  while(data[k] != ' ') //забираем playerid из начала сообщения
  {
	num[k] = data[k];
	k++;
  }

  playerid = strval(num);

  len = strlen(data);
  for(i = k+1, j = 0; i < len; ++i)
  {
	tmp[j] = data[i];
	if(tmp[j] == '\n' || tmp[j] == '\0')
	{
	  tmp[j] = '\0';
	  if(tmp[j-1] == '\r')
		tmp[j-1] = '\0';
      SendClientMessage(playerid, 11240000, tmp); //пересылаем ответ от сервера в чат
      j = 0;
      continue;
	}
	j++;
  }
}

public CheckIP(index, code, data[])
{
  new tmp[1024];
  new len,i,j,k;
  new playerid;
  new num[8];
  new banned;

//  printf("%s", data);

  for(i = 0; i < sizeof(num); ++i)
	num[i] = '\0';

  k = 0;
  while(data[k] != ' ') //забираем playerid из начала сообщения
  {
	num[k] = data[k];
	k++;
  }

  playerid = strval(num);

  for(i = k+1, j = 0; i < 6; ++i)
  {
	tmp[j] = data[i];
  }

  if(strcmp(tmp, "banned",true,6) == 0)
	banned = true;
  else
	banned = false;

  len = strlen(data);
  for(i = k+1, j = 0; i < len; ++i)
  {
	tmp[j] = data[i];
	if(tmp[j] == '\n' || tmp[j] == '\0')
	{
	  tmp[j] = '\0';
      SendClientMessage(playerid, 11240000, tmp); //пересылаем ответ от сервера в чат
      j = 0;
      continue;
    }
	j++;
  }

  // если игрок глобально забанен, ему кик:
  if(banned)
    Kick(playerid);
}
Это beta-версия, но вполне рабочая, требующая только дополнений. Trial-период - десять запросов на поиск.
Желающие потестить в полном объёме обратитесь ко мне за логином и паролем, в личку (поля UName[] и Pass[] в самом начале скрипта, если кто не просёк). Эта мера вынужденная, дабы не захламили/не повесили мне сервак.

Да, кстати, аренда сервера денюшку стоит, т.ч.:
R211309231066
Z841169965648,
E226595298971
буду весьма признателен

Опробовать поиск можно здесь: botinform.com:7797, либо так:

HTML Code:
<html>
<head>
<title>Поиск игроков</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
</head>
<body>
<div align=center>
<h2>ПОИСК ПО НИКУ</h2>
<FORM action="http://botinform.com:9797" method="post">
    <P>
    Введите ник: <INPUT type="text" name="Search">
    <INPUT type="submit" value="Поиск">
    <INPUT type="hidden" name="Browser">
    <INPUT type="hidden" name="Uname" value="test">
    <INPUT type="hidden" name="Pwd" value="test">
    </P>
 </FORM>
</div>
</body>
</html>
Добавлена поддержка русской кодировки.
Attached Files
File Type: amx anti.amx (6.4 KB, 1 views)
File Type: pwn anti.pwn (8.6 KB, 5 views)
File Type: zip anti.zip (4.5 KB, 31 views)

Last edited by Bombo; 15/10/2016 at 01:05 PM. Reason: Поменялись кошельки WMR и WMZ
Bombo is offline   Reply With Quote
Old 24/06/2012, 12:34 PM   #2
-Stranger-
Gangsta
 
-Stranger-'s Avatar
 
Join Date: Mar 2010
Location: TCP/IPv4
Posts: 766
Reputation: 40
Default Re: Глобальный поиск игроков по серверам + глобальный БАН

Bombo, идея хорошая, кто-то что-то подобное выкладывал тут.
Но вопрос остаётся такой-же как и к нему: Что мне мешает попросить у тебя пароль и потом циклом забанить подсеть 0.0.0.0/0 ?
__________________
[Mess with the best, die like the rest]
Помог? - жми на . Тебе один клик, а мне приятно
-Stranger- is offline   Reply With Quote
Old 24/06/2012, 05:42 PM   #3
OKStyle
High-roller
 
OKStyle's Avatar
 
Join Date: May 2008
Location: Russia, Orenburg Money: GTA$ 999,999,999
Posts: 3,114
Reputation: 140
Default Re: Глобальный поиск игроков по серверам + глобальный БАН

PunkBuster, называлась эта хрень, которая не получила популярности.
__________________
O.K.Style™ Laboratory
Kalcor: "... it's makes the game look like it's not GTA. This mod is called San Andreas Multiplayer. It's not a custom game engine which you can script..."
OKStyle is offline   Reply With Quote
Old 24/06/2012, 07:00 PM   #4
-Stranger-
Gangsta
 
-Stranger-'s Avatar
 
Join Date: Mar 2010
Location: TCP/IPv4
Posts: 766
Reputation: 40
Default Re: Глобальный поиск игроков по серверам + глобальный БАН

OKStyle, не вспомнил, там плагин был, а исходник автор выкладывать отказался. Но суть не меняется.
Идея имеет смысл, при жёстком контроле всех участников данной системы. Иначе 100% будут банить не читеров а из-за личной неприязни\выгоды или вообще по приколу.
__________________
[Mess with the best, die like the rest]
Помог? - жми на . Тебе один клик, а мне приятно
-Stranger- is offline   Reply With Quote
Old 25/06/2012, 01:54 AM   #5
jhonyxakep
Gangsta
 
jhonyxakep's Avatar
 
Join Date: May 2011
Location: Russia, Moscow
Posts: 790
Reputation: 43
Default Re: Глобальный поиск игроков по серверам + глобальный БАН

Тогда почему-бы не сделать добавление серверов принадлежащих одному владельцу (или по договоренности), с подтверждением.

Те пользователь добавляет все свои сервера, устанавливая на них этот скрипт, и используя логин для серверов.
jhonyxakep is offline   Reply With Quote
Old 25/06/2012, 08:35 AM   #6
-Stranger-
Gangsta
 
-Stranger-'s Avatar
 
Join Date: Mar 2010
Location: TCP/IPv4
Posts: 766
Reputation: 40
Default Re: Глобальный поиск игроков по серверам + глобальный БАН

jhonyxakep, но это не мешает мне забанить всех.
__________________
[Mess with the best, die like the rest]
Помог? - жми на . Тебе один клик, а мне приятно
-Stranger- is offline   Reply With Quote
Old 25/06/2012, 08:35 AM   #7
jhonyxakep
Gangsta
 
jhonyxakep's Avatar
 
Join Date: May 2011
Location: Russia, Moscow
Posts: 790
Reputation: 43
Default Re: Глобальный поиск игроков по серверам + глобальный БАН

На своих серверах. Не дальше.
jhonyxakep is offline   Reply With Quote
Old 25/06/2012, 10:58 AM   #8
-Stranger-
Gangsta
 
-Stranger-'s Avatar
 
Join Date: Mar 2010
Location: TCP/IPv4
Posts: 766
Reputation: 40
Default Re: Глобальный поиск игроков по серверам + глобальный БАН

jhonyxakep, ну а тогда смысл этого FS вообще? Это разрушает основной смысл данной системы.
__________________
[Mess with the best, die like the rest]
Помог? - жми на . Тебе один клик, а мне приятно
-Stranger- is offline   Reply With Quote
Old 25/06/2012, 11:25 AM   #9
Stepashka
Godfather
 
Stepashka's Avatar
 
Join Date: Jul 2008
Location: near PC
Posts: 5,750
Reputation: 138
Default Re: Глобальный поиск игроков по серверам + глобальный БАН

В системе не продуманно многое:
  1. Зачем в системе банов информация о том где сейчас играет игрок с определенным ником?
  2. Как выше было озвучено:
    Quote:
    Originally Posted by -Stranger-
    Что мне мешает циклом забанить подсеть *.*.*.*?
    При этом забанить каждый IP отдельно и в маске, и повторить все 500 раз. Разбанивать потом замучаетесь!
  3. Кто мешает читерам завести свой сервер и через него разбаниваться?
  4. Мастер сервер не надежен, видно уже из первого поста:
    Quote:
    Originally Posted by Bombo
    Эта мера вынужденная, дабы не захламили/не повесили мне сервак.
  5. Система не жизнеспособна без уникального идентификатора пользователя. Напоминаю что в PunkBuster требуется установка клиентской части которая идентифицирует пользователя по железу!
__________________
Клятва Страуструпа: "Я обязуюсь прилежно комментировать свой код, не использовать goto и следить за состоянием своих потоков и выделяемой памяти. Я обязуюсь не оставлять мусора в системе и избегать однобуквенных переменных. Ресет." © Куч
M&M GM
Status: ON HOLD

Stepashka is offline   Reply With Quote
Old 26/06/2012, 04:58 PM   #10
Bombo
Huge Clucker
 
Bombo's Avatar
 
Join Date: Jun 2012
Posts: 264
Reputation: 76
Default Re: Глобальный поиск игроков по серверам + глобальный БАН

Система намного серьёзней, чем может показаться на первый взгляд.

Quote:
Зачем в системе банов информация о том где сейчас играет игрок с определенным ником?
Во-первых, всегда можно посмотреть откуда пришёл игрок, как часто меняет сервера. Во-вторых, сразу видно, если такой ник ни разу не использовался, т.к. система поиска выдаёт прежние посещения игрока. Ну, и в-третьих - просто удобная штука, если кого-то надо разыскать (кто свалил с сервака).

Quote:
Что мне мешает циклом забанить подсеть *.*.*.*?
При этом забанить каждый IP отдельно и в маске, и повторить все 500 раз. Разбанивать потом замучаетесь!
Циклом забанить подсеть мешает ограничение на количество банов в день (накладывается на каждого пользователя системы в отдельности, = 20). Причём, этот лимит уменьшается с каждым днём, если активность забаниваний слишком высока.
Ещё один механизм, пока находящийся в разработке - это система предупреждений. Т.е. читер сначала банится только на одном сервере, а остальные серваки получают предупреждение (мол, это нехороший чел), когда он к ним заглянет. А вот после второго раза этот гад банится по-полной!
И ещё момент: команда "/gbanip [ip]" будет доступна только проверенным серверам. Остальные же будут банить по id, т.е. только тех читеров, которые непосредственно сидят на сервере.

Quote:
Кто мешает читерам завести свой сервер и через него разбаниваться?
Самый щекотливый вопрос, который, однако, решается предельно просто - разбанить можно только с того сервера, который забанил. Найти банщика можно будет по спискам на сайте, либо наступит автоматический разбан через недельку-другую (месяц, год, ...).

Quote:
Мастер сервер не надежен, видно уже из первого поста:
Quote:
Сообщение от Bombo
Эта мера вынужденная, дабы не захламили/не повесили мне сервак.
Вот и сделал регистрацию, чтобы мастер-сервер был тип-топ. Без неё реально можно было захламить, насчёт повесить сам не уверен (в см. повесить его оччень непросто!).

Quote:
Система не жизнеспособна без уникального идентификатора пользователя. Напоминаю что в PunkBuster требуется установка клиентской части которая идентифицирует пользователя по железу!
Система банит также, как и любой отдельный SA:MP сервер, чего вполне хватает.
Bombo is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Коннект игроков Gettopro Русский/Russian 54 03/03/2012 05:32 AM
поиск объекта serpip Русский/Russian 10 28/12/2011 07:06 AM
Список Афк игроков... temka1993 Русский/Russian 7 25/08/2011 07:09 PM
Поиск матершинных слов в строке sk47 Русский/Russian 3 03/05/2011 11:52 AM
Поиск/запрос приватного скрипта ZaR Русский/Russian 12 29/05/2010 10:15 AM


All times are GMT. The time now is 09:06 PM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.