Редактиране на no retry plugin

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
BaDBlo0D
Извън линия
Потребител
Потребител
Мнения: 2
Регистриран на: 14 Дек 2017, 19:14

Редактиране на no retry plugin

Мнение от BaDBlo0D » 26 Дек 2017, 13:25

Здравейте!
Този плъгин киква играчите при повторна кънекция в сървъра за определен брой секунди. Има два проблема, от които единия е критичен.
Първият проблем се появява когато играч се кънектне, но трябва да изтегли карта или модел. В този случай след изтеглянето той се кънектна повторно и сървъра го киква за X секунди.
Втория проблем е свързан със самия таймер - когато играч бива кикнат, той трябва да изчака X на брой секунди преди да може да влезне в сървъра без да бъде кикнат повторно, обаче ако реши да се пробва да влезне преди да са изминали тези X секунди, освен че бива кикнат, таймерът се ресетва отново на X на брой секунди. Ако amx_retrytime е сложен на 40 секунди, а аз се опитвам да вляза през 20 секунди, всеки път този таймер ще бъде връщан по начална стойнсот за мен (40 секунди) и никога няма да мога да вляза в сървъра.
Първият проблем е критичен.
Възможно ли е да се оправят?

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <amxmisc>

#define MAX_PLAYERS 32

new pID[MAX_PLAYERS][22]

public plugin_init() {
	register_plugin("No retry","1.16","Priski") 
	register_cvar("amx_retrytime","40")
	register_cvar("amx_retrykick","1")
	register_cvar("amx_retryshow","1")
	register_cvar("amx_retrychat","1")
	
	register_cvar("amx_retrymsg","No retry allowed here, %s")
	register_cvar("amx_retrykickmsg","Too fast reconnect is not allowed")
	register_cvar("amx_retrychatmsg","%s was kicked: reconnect in %t seconds")
		
	return PLUGIN_HANDLED
}

public client_putinserver(id) {
	new ip[22]
	get_user_ip(id,ip,21)
	
	for(new i = 1; i < MAX_PLAYERS; i++) {
		if (equal(ip, pID[i], 21)) {
			
			new name[34]
			get_user_name(id, name, 33)
			
			if (get_cvar_num("amx_retryshow")) {
				new uID[1]
				uID[0] = id
				set_task(2.0,"showMsg", id, uID, 1)
			}
			
			if (get_cvar_num("amx_retrychat")) {
				new txt[128]
				get_cvar_string("amx_retrychatmsg", txt, 127)
				new sec[6]
				num_to_str(get_cvar_num("amx_retrytime"),sec, 5)
				
				replace(txt, 127, "%s", name)
				replace(txt, 127, "%t", sec)
				
				client_print( 0, print_chat, "[AMXX] %s", txt)
			}
						
			if (get_cvar_num("amx_retrykick")) {
				new uID[1]
				uID[0] = get_user_userid(id)
								
				// delayed kick
				set_task(7.0,"kick",77,uID,1)
				
			}
			
			break
		}
	}
	
	return PLUGIN_HANDLED;
}

public client_disconnected(id) {
	new ip[22]
	get_user_ip(id,ip,21)
	new found = 0;
	
	for(new i = 1; i < MAX_PLAYERS; i++) {
		if (equal(ip, pID[i], 21)) {
			// this user has been already kicked
			found = 1
			break
		}
	}
	
	if (found == 0) {
		for(new i = 1; i < MAX_PLAYERS; i++) {
			if (pID[i][0] == 0) {	// found empty slot
				get_user_ip(id, pID[i], 21)
				new aID[1]
				aID[0] = i
				set_task( get_cvar_float("amx_retrytime"), "cleanID", (id + MAX_PLAYERS),aID,1)
						
				break
			}
		}
	}
	return PLUGIN_HANDLED;
}


public cleanID(i[]) {
	pID[i[0]][0] = 0
}

public showMsg(pID[]) {
	new txt[128]
	get_cvar_string("amx_retrymsg", txt, 127)
	
	new playername[34]
	get_user_name(pID[0], playername, 33)
	
	new sec[6]
	num_to_str(get_cvar_num("amx_retrytime"),sec, 5)
	
	replace(txt, 127, "%s", playername)
	replace(txt, 127, "%t", sec)
	
	set_hudmessage(255, 255, 255, 0.05, 0.72, 0, 5.0, 10.0, 2.0, 0.15, 3)
	show_hudmessage(pID[0],txt)
}

public kick(id[]) {
	new txt[128]
	get_cvar_string("amx_retrykickmsg", txt, 127)
	server_cmd("kick #%d ^"%s^"", id[0], txt)
}

Аватар
deadlylord
Извън линия
Потребител
Потребител
Мнения: 572
Регистриран на: 04 Апр 2017, 16:35
Местоположение: Бургас, България
Получена благодарност: 2 пъти
Обратна връзка:

Редактиране на no retry plugin

Мнение от deadlylord » 26 Дек 2017, 17:13

Можеш да ползваш този плъгин

Код за потвърждение: Избери целия код

/* AMX Mod X
*   Anti Reconnect Plugin 3.0
*   
*   Версии антиреконнекта:
	3.0 - два режима работы: отсчёт времени после попытки зайти или отсчёт времени после использования команды reconnect
		задаётся командой amx_reconnect_static <0|1> 0 - каждый раз заного отсчитывать время, запрещающее заходить.
		1 - отсчитывать время только после выхода с сервера
		amx_reconnect_stime - кол-во секунд, на протяжении которых сохраняется счёт для пользователя по ip юзера.
	    - перед киком проверка производится так же на ip пользователя... если зашёдший имеет другой ip - он не кикается.
      2.0 - исправлен баг с уведомлением о том, что надо подождать, прежде чем войти на сервер
   	    - добавлена команда amx_reconnect_ss <1|0> - запоминать счёт игрока или нет (работает при amx_reconnect_can 1)
      1.01 - кикает всех, кто заходит раньше установленного времени после того как вышел (т.е. использует реконнект)
           - поддерживаемые команды:
             amx_reconnect_can <1|0> - можно или нет реконнектиться
             amx_reconnect_time <sec> - время в секундах, которое нужно ждать после ухода с сервера, чтобы сного на него зайти

*/

#include <amxmodx>
#include <cstrike>
#include <fun>

new PLUGIN[]="Anti reconnect"
new AUTHOR[]="JohnJ"
new VERSION[]="3.0"

new RTIME[]="amx_reconnect_time"
new RCAN[]="amx_reconnect_can"
new SCORESAVE[]="amx_reconnect_ss"
new RSTATIC[]="amx_reconnect_static"
new RSTIME[]="amx_reconnect_stime"

new t_disconnect[33] = {0, ...}
new t_scoresave[33] = {0, ...}
new ips[33][24]
new sfrags[33] = {0, ...}
new sdeaths[33] = {0, ...}
new useretry[33] = {0, ...}

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_cvar(RTIME, "10")
	register_cvar(RCAN, "0")
	register_cvar(SCORESAVE, "0")
	register_cvar(RSTATIC, "1")
	register_cvar(RSTIME, "7")
	register_event("TeamInfo","outspec","a") 	// восстанавливает счёт игроку в соответствии с настройками как только тот зайдёт за команду
}

public client_connect(id)
{

new maxexit = get_cvar_num(RTIME)
new maxstata = get_cvar_num(RSTIME)
new canreconnect = get_cvar_num(RCAN)
new ssave = get_cvar_num(SCORESAVE)
new ip[24]
get_user_ip(id,ip,23,0)

if ((maxexit>0) && (canreconnect==0) && (equali(ip,ips[id])))
{
new Float:nexTime = get_gametime()

if (t_disconnect[id] > nexTime)
{
new stat = get_cvar_num(RSTATIC)
new timewait
if (stat==0)
{
t_disconnect[id] = floatround(nexTime) + maxexit
t_scoresave[id] = floatround(nexTime) + maxstata
timewait=maxexit
}
else
{
timewait=t_disconnect[id]-floatround(nexTime)
}
server_cmd("kick #%d  You can re-join the server in %d sec.", get_user_userid(id), timewait) 
return PLUGIN_CONTINUE
}
}
if (ssave==1)
{
new Float:nexTime = get_gametime()
if (t_scoresave[id] <= nexTime)
{
sdeaths[id]=0
sfrags[id]=0
useretry[id]=0
}
return PLUGIN_CONTINUE
}
return PLUGIN_CONTINUE
}

public outspec()
{
 new id=read_data(1)
 if ((useretry[id]==1) && (is_user_connected(id)))
 {
  cs_set_user_deaths(id,sdeaths[id])
  set_user_frags(id,sfrags[id])
  useretry[id]=0
  sdeaths[id]=0
  sfrags[id]=0
 }
 return PLUGIN_CONTINUE
}

public client_disconnect(id)
{
	new maxexit = get_cvar_num(RTIME)
	new maxstata = get_cvar_num(RSTIME)
	new ssave = get_cvar_num(SCORESAVE)

	new Float:theTime = get_gametime()
	t_disconnect[id] = floatround(theTime) + maxexit
	t_scoresave[id] = floatround(theTime) + maxstata
	get_user_ip(id,ips[id],23,0)
	
 	if (ssave==1)
	{
	 sdeaths[id] = get_user_deaths(id)
	 sfrags[id] = get_user_frags(id)
	 useretry[id]=1
	}
	return PLUGIN_CONTINUE
}

register_cvar(RTIME, "10") - Колко време да продължи connect бан-а
register_cvar(RCAN, "0") - При 0, човека не може да влиза, при 1, човека може да влиза
register_cvar(SCORESAVE, "0") - При 0, резултата на човека не се запазва, при 1 резултата се запазва
register_cvar(RSTATIC, "1") - При 0, времето се рестартира, при 1 времето няма да се рестартира .... имаш 5 секунди останали, влизаш и ти изписва 4 секунди, вместо да се върне до 10(което става при 0)
register_cvar(RSTIME, "7") - Колко време да пази резултата на човека, ако SCORESAVE е направено на 1
Последно промяна от deadlylord на 27 Дек 2017, 02:36, променено общо 1 път.

Аватар
BaDBlo0D
Извън линия
Потребител
Потребител
Мнения: 2
Регистриран на: 14 Дек 2017, 19:14

Редактиране на no retry plugin

Мнение от BaDBlo0D » 26 Дек 2017, 22:46

Мерси,пич! Плъгина реши втория проблем с таймера, обаче първия проблем си остава.

Публикувай отговор
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Заявки за плъгини”

Кой е на линия

Потребители разглеждащи този форум: Semrush [Bot] и 10 госта