/* It works only with dproto >= 0.3.4 */ #include #include new pcv_dp_r_protocol new pcv_dp_r_id_provider new players_type[33] new players_timestamp[33] new g_cmdLoopback[16] public plugin_init() { register_plugin("dproto slot reservation", "0.1", "Qermit") // // Initialize cvar pointers // pcv_dp_r_protocol = get_cvar_pointer ("dp_r_protocol") pcv_dp_r_id_provider = get_cvar_pointer ("dp_r_id_provider") format(g_cmdLoopback, 15, "amxres%c%c%c%c", random_num('A', 'Z'), random_num('A', 'Z'), random_num('A', 'Z'), random_num('A', 'Z')) register_clcmd(g_cmdLoopback, "ackSignal") } public ackSignal(id) { new lReason[64] format(lReason, 63, "%L", id, "DROPPED_RES") server_cmd("kick #%d ^"%s^"", get_user_userid(id), lReason) } public client_authorized(id) { if (!pcv_dp_r_protocol || !pcv_dp_r_id_provider) { log_amx ("cant find dp_r_protocol or dp_r_id_provider cvars") return PLUGIN_HANDLED } players_timestamp[id] = get_systime() server_cmd("dp_clientinfo %d", id) server_exec() // new proto = get_pcvar_num(pcv_dp_r_protocol) new authprov = get_pcvar_num(pcv_dp_r_id_provider) switch (authprov) { case 0: players_type[id]=0 // not connected case 2: players_type[id]=2 // steam default: players_type[id]=1 // nonsteam } if (authprov == 0 ) return PLUGIN_CONTINUE if (access(id, ADMIN_RESERVATION)) players_type[id] = 3 // zarezerwowany slot log_amx ("[%d] %d - typ %d", get_systime(), id, players_type[id]) new maxplayers = get_maxplayers() new players = get_playersnum(1) if (maxplayers > players) return PLUGIN_CONTINUE if (players_type[id] == 1) { client_cmd(id, "%s", g_cmdLoopback) return PLUGIN_HANDLED } new dproto_player_time = 0 new dproto_player_id = 0 new steam_player_time = 0 new steam_player_id = 0 for(new i=1 ; i<=32; i++){ if (players_type[i] == 1) { if (players_timestamp[i] > dproto_player_time) { dproto_player_time = players_timestamp[i] dproto_player_id = i } } else if (players_type[i] == 2){ if (players_timestamp[i] > steam_player_time) { steam_player_time = players_timestamp[i] steam_player_id = i } } } if ( dproto_player_id > 0){ client_cmd(dproto_player_id, "%s", g_cmdLoopback) } else if ( steam_player_id > 0 ) { client_cmd(steam_player_id, "%s", g_cmdLoopback) } return PLUGIN_HANDLED } public client_disconnect(id) { players_type[id] = 0 players_timestamp[id] = 0 return PLUGIN_CONTINUE }