Този плъгин киква играчите при повторна кънекция в сървъра за определен брой секунди. Има два проблема, от които единия е критичен.
Първият проблем се появява когато играч се кънектне, но трябва да изтегли карта или модел. В този случай след изтеглянето той се кънектна повторно и сървъра го киква за 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)
}