guys,i want to make the slots for LAN in Day of Defeat, it will kick the high ping player when a LAN user join the "full" server . but it doesn't work .pls help me.
codes based on xxAvalanchexx and f117bomb.
PHP Code:
#include <amxmodx>
// filename of LAN ips
#define FILENAME "addons/amxmodx/data/lan.ini"
// load the battering ram!
public plugin_init() {
set_cvar_num("sv_maxvisibleplayers %i",get_maxplayers()-1);
}
// zomg someone is connecting
public client_authorized(id) {
// full house and a LAN user is connecting
if(get_playersnum(1) == get_maxplayers() && is_user_LAN(id)) {
new lagPlayer = lag_player();
if(lagPlayer) {
server_cmd("kick #%i ^"Make room for the LAN users!
^"",get_user_userid(lagPlayer));
checkSlots();
}
else {
server_cmd("kick #%i ^"There are no available slots left!
^"",get_user_userid(id));
}
}
else if(get_playersnum(1) == get_maxplayers()) {
server_cmd("kick #%i ^"There are no available slots left!
^"",get_user_userid(id));
}
else {
checkSlots();
}
}
public client_disconnect(id) {
checkSlots();
}
public checkSlots() {
if(get_playersnum(1) == get_maxplayers()-1) {
set_cvar_num("sv_maxvisibleplayers %i",get_maxplayers());
}
else {
set_cvar_num("sv_maxvisibleplayers %i",get_maxplayers()-1);
}
}
public lag_player() {
new lagPlayer = 0, ping, loss, lag = -1
new maxplayers = get_maxplayers()
for(new i = 1; i <= maxplayers; ++i) {
if ( !is_user_connected(i) && !is_user_connecting(i) )
continue // not used slot
if (get_user_flags(i)& is_user_LAN(i))
continue // has reservation, skip him
get_user_ping(i,ping,loss) // get ping
if ( ping > lag ) {
lag = ping
lagPlayer = i
}
}
if(lagPlayer)
if ( is_user_bot(lagPlayer) )
server_cmd("kick #%d", get_user_userid(lagPlayer) )
else
client_cmd(lagPlayer,"echo ^"Dropped due to high ping to free
slot for LAN users^";disconnect")
return lagPlayer
}
// see if this player is a member of the LAN
public bool:is_user_LAN(id) {
new ip[32];
get_user_ip(id,ip,31,0);
new line, text[64], txtlen;
while( (line = read_file(FILENAME,line,text,63,txtlen)) != 0 ) {
trim(text);
if( equali(ip,text,strlen(text)) ) {
return true;
}
}
return false;
}