Перейти к содержанию

Бонус за онлайн с проверкой от Gepard Shield


ocelote

Рекомендуемые сообщения

Каждый день входим в игру -> получаем бонус. Расчитано на 31 день.

Создаем таблицу в базе :


create table `daily_bonus` (
`unique_id` int(11),
`ip` varchar (100),
`account_id` int(11),
`day` tinyint (2)
);

Сам скрипт: GitHub.

Проверка на мультов идет по IP + UniqueID от Gepard Shield

Изменено пользователем ocelote
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Не совсем понял насчет блока аккаунта из этой системы

Ну и

dispbottom "≈жедневные награды активированы.";

Изменено пользователем botka4aet
Ссылка на комментарий
Поделиться на другие сайты

В общем, заходишь в игру > идет проверка если в базе есть данный IP или UniqueID то текущего персонажа блокируют, и он не будет получать бонусов.

#blocked_from_bonus = 0; // игрока нет в системе

#blocked_from_bonus = 1; // игрок прошел проверку, получает бонус

#blocked_from_bonus = 2; // игрок забанен в системе и не будет получать бонусов.

Ссылка на комментарий
Поделиться на другие сайты

Но эта проверка происходит только в первый раз. Те главное в первый раз зайти на новый аккаунт с другого компа, а после ничто не помешает тебе фармить на одном компе любое число акков, тк проверки на гепард и айпи потом просто нет

Ссылка на комментарий
Поделиться на другие сайты

Нет, смотри.

Берем 2 аккаунта назовем их 1 и 2

1 заходит в игру, активирует бонусы, тем самым занося свой аккаунт, IP, UniqueID в базу

2 заходит в игру > идет проверка его IP + UniqueID. Система находит его IP ИЛИ UniqueID в базе и сразу блокирует его.

Ну а вообще так как ты сказал это да, но можно будет конечно еще одну влепить проверку, это не проблема)

Изменено пользователем ocelote
Ссылка на комментарий
Поделиться на другие сайты

Обновил скрипт, добавил проверку при каждом входе, теперь будет блокировать каждый раз после захода, если найдет идентичный IP или UniqueID в базе.

Залил все на Github.

  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Снова обновил.

Добавил еще проверок:

Теперь IP и ID будут сверяться каждый раз при входе в игру.

Например : Игрок имеет 2 ПК, 1 дома 1 на работе.

Идет на работу, входит первый раз в игру и его IP+ID записываются в базу, затем он идет домой и на следующий день хочет забрать бонус из дому. Но не тут то было! Скрипт сверяет IP + ID которые записаны в базе (с работы) с текущими (с дому) и если они не соответствуют друг другу - игрока блокирует и он больше не получает бонусы.

В общем, больше я не знаю что придумать, чтоб не жульничали. Если уже у человека 2 разных пк и 2 разных инета дома то мне кажется это уже никак не проверить)

Ссылка на комментарий
Поделиться на другие сайты

К примеру:

- ставишь непися

- при разговоре с неписем можно активировать N компов, с которых можно забирать награду

- записывается ID

- при добавлении компа дается задержка на активацию подарка

А с айпи может быть шляпа из-за динамического

  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

Можно, но это я делаю для своего сервера, поэтому мне так более подходит.

Возможно когда-нибудь и реализую, а сейчас тупо не для кого. Мало кто юзает уже неписей с паблика.

Ссылка на комментарий
Поделиться на другие сайты

Апну чтоль, опыт подсказал что использование аккаунтских переменных на такие скрипты - плохая затея, чуток изменил скрипт + добавил массив с белым списком, если внести туда ID аккаунтов они будут получать бонусы без проверки ID+IP. Вроде пока проблем не возникло, и если что-то пойдет не так, и скрипт заблокирует не того персонажа, то можно изменить в таблице значение blocked с 1 на 0, и все будет отлично.

Ссылка на комментарий
Поделиться на другие сайты

  • 5 месяцев спустя...
В 24.09.2015в4:44 PM, ocelote сказал:

Каждый день входим в игру -> получаем бонус. Расчитано на 31 день.

Создаем таблицу в базе :

Где можно скачать етот скрипт

В 24.09.2015в4:44 PM, ocelote сказал:

 

 

create table `daily_bonus` (
`unique_id` int(11),
`ip` varchar (100),
`account_id` int(11),
`day` tinyint (2)
);

 

Сам скрипт: GitHub.

Проверка на мультов идет по IP + UniqueID от Gepard Shield

 

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, MalaX сказал:

Где можно скачать етот скрипт

// ALTER TABLE `daily_bonus` ADD `blocked` smallint(1) NOT NULL DEFAULT '0'

-	script	Bonus_DailyDB	-1,{
OnPCLoginEvent:
	if(#daily_bonus_block == 2) end;
	if(!#daily_bonus_block) {
		query_sql("SELECT last_ip, last_unique_id FROM `login` WHERE `account_id` = '"+getcharid(3)+"'", .@ip$, .@id$);
		query_sql("SELECT unique_id, ip FROM `daily_bonus` WHERE `unique_id`= '"+.@id$+"' OR `ip` = '"+.@ip$+"'", .@id_check$, .@ip_check$);
		// На всякий случай ----------
		if(.@ip$ == "" || .@id$ == "" || .@id_check$ != "" || .@ip_check$ != "") callfunc("Bonus_Block", getcharid(3));
		// ---------------------------
		query_sql("INSERT INTO `daily_bonus` (`unique_id`,`ip`,`account_id`,`day`,`blocked`) VALUES ('"+.@id$+"', '"+.@ip$+"', '"+getcharid(3)+"', '1', '0')");
		#daily_bonus_block = 1;
		message strcharinfo(0), "Система Ежедневных наград активирована!";
		#day ++;
		setd "#day_" + getcharid(3), #day;
		callfunc("Bonus_DB", getd("#day_" + getcharid(3)), getcharid(3), 0);
		end;
	} else if(#daily_bonus_block == 1) {
		query_sql("SELECT login.account_id, login.last_ip, login.last_unique_id, daily_bonus.unique_id, daily_bonus.ip, daily_bonus.account_id, daily_bonus.blocked FROM `daily_bonus`  LEFT JOIN `login` ON login.account_id = daily_bonus.account_id WHERE daily_bonus.account_id = '"+getcharid(3)+"'", .@laid, .@lip$, .@lid$, .@id$, .@ip$, .@aid, .@block);
		
		if(getarraysize(.@id$) > 1 || getarraysize(.@ip$) > 1) callfunc("Bonus_Block", getcharid(3));
		callfunc("Daily_Check", .@lip$, .@lid$, .@ip$, .@id$);
		if(getd("#day_" + getcharid(3)) == 0) setd "#day_" + getcharid(3), 1;
		callfunc("Bonus_DB", getd("#day_" + getcharid(3)), .@aid, .@block);		
		end;
	}
}

function	script	Daily_Check	{
	if(getarg(0) != getarg(2)) callfunc("Bonus_Block", getcharid(3));
	if(getarg(1) != getarg(3)) callfunc("Bonus_Block", getcharid(3));
	return;
}

function	script	Bonus_Block	{
	if(!getarg(0)) end;
	query_sql("UPDATE `daily_bonus` SET `blocked` = '1' WHERE `account_id` = '"+getarg(0)+"'");
	#daily_bonus_block = 2;
	message strcharinfo(0), "Вы были заблокированы в системе Ежедневных наград!";
	end;
}

function	script	Bonus_DB	{
	//	arg(0)		->	day
	//	arg(1)		->	acc_id
	//	arg(2)		->	blocked?
	if(getarg(0) > 31 || getarg(2) == 1) return;
	if(!getarg(0) || !getarg(1)) return;
	.@bonus_prize = .@amount_prize = .@switch_days = 0;
	if(getd("#delay_bonus_" + getarg(1)) > gettimetick(2)) return;
	if(getd("#day_" +  getarg(1)) == 0) setd "#day_" + getarg(1), 1;
	set .@switch_days, getd("#day_" + getarg(1));
	switch(.@switch_days) {
		case 0: return;
		case 1:
			.@bonus_prize = 14545;
			.@amount_prize = 1;
			break;
		case 2:
			.@bonus_prize = 12214;
			.@amount_prize = 1;
			break;
		case 3:
			.@bonus_prize = 12210;
			.@amount_prize = 1;
			break;
		case 4:
			.@bonus_prize = 7621;
			.@amount_prize = 1;
			break;
		case 5:
			.@bonus_prize = 7539;
			.@amount_prize = 10;
			break;
		case 6:
			.@bonus_prize = 12103;
			.@amount_prize = 1;
			break;
		case 7:
			.@bonus_prize = 6241;
			.@amount_prize = 1;
			break;
		case 8:
			.@bonus_prize = 6240;
			.@amount_prize = 1;
			break;
		case 9:
			.@bonus_prize = 7621;
			.@amount_prize = 2;
			break;
		case 10:
			.@bonus_prize = 14170;
			.@amount_prize = 1;
			break;
		case 11:
			.@bonus_prize = 14169;
			.@amount_prize = 1;
			break;
		case 12:
			.@bonus_prize = 12214;
			.@amount_prize = 3;
			break;
		case 13:
			.@bonus_prize = 7539;
			.@amount_prize = 30;
			break;
		case 14:
			.@bonus_prize = 12103;
			.@amount_prize = 3;
			break;
		case 15:
			.@bonus_prize = 14154;
			.@amount_prize = 1;
			break;
		case 16:
			.@bonus_prize = 675;
			.@amount_prize = 30;
			break;
		case 17:
			.@bonus_prize = 671;
			.@amount_prize = 200;
			break;
		case 18:
			.@bonus_prize = 7621;
			.@amount_prize = 5;
			break;
		case 19:
			.@bonus_prize = 6226;
			.@amount_prize = 1;
			break;	
		case 20:
			.@bonus_prize = 6225;
			.@amount_prize = 1;
			break;
		case 21:
			.@bonus_prize = 12214;
			.@amount_prize = 5;
			break;
		case 22:
			.@bonus_prize = 12103;
			.@amount_prize = 2;
			break;
		case 23:
			.@bonus_prize = 7539;
			.@amount_prize = 50;
			break;
		case 24:
			.@bonus_prize = 7828;
			.@amount_prize = 50;
			break;
		case 25:
			.@bonus_prize = 7829;
			.@amount_prize = 50;
			break;
		case 26:
			.@bonus_prize = 7773;
			.@amount_prize = 50;
			break;
		case 27:
			.@bonus_prize = 675;
			.@amount_prize = 50;
			break;
		case 28:
			.@bonus_prize = 671;
			.@amount_prize = 400;
			break;
		case 29:
			.@bonus_prize = 12103;
			.@amount_prize = 3;
			break;
		case 30:
			.@bonus_prize = 22721;
			.@amount_prize = 1;
			break;
		case 31:
			.@bonus_prize = 12246;
			.@amount_prize = 1;
			break;			
	}
	
	if(.@bonus_prize && .@amount_prize) getitem .@bonus_prize, .@amount_prize;
	setd "#delay_bonus_" + getarg(1), gettimetick(2) + 86400;
	message strcharinfo(0), "Система Ежедневных наград: День - "+getd("#day_" + getarg(1))+". Вы получили "+getitemname(.@bonus_prize)+", "+.@amount_prize+"шт.";
	#day ++;
	setd "#day_" + getarg(1), #day;
	return;
}

на гитхабе потерял.
 

Изменено пользователем Gendalf
  • Upvote 1
Ссылка на комментарий
Поделиться на другие сайты

То ли я идиот... То ли лыжи не те...

А если серьёзно, то что я пропустил в установке.

Это первый заход на сервер.

daily_bonus.jpg

 

Изменено пользователем Kreol89
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...
Яндекс.Метрика