那个那个谁 发表于 2006-11-9 22:04:28

再谈预留通道问题

代码如下,是经过修正的,在AMXX 1.7下编译完之后放到windows平台上有效,拿到Linux下就不好用了,请达人指点。:burn:



#include <amxmodx>
#include <amxmisc>

new g_cmdLoopback
public plugin_init() {
register_plugin("Slots Reservation",AMXX_VERSION_STR,"AMXX Dev Team")
register_dictionary("adminslots.txt")
register_dictionary("common.txt")
register_cvar("amx_reservation","0")
/* Provide server admin with cvar to hide slots, 0 or 1 */
register_cvar("amx_hideslots", "0")
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 plugin_cfg() {
if ( get_cvar_num("amx_hideslots") == 1 ) {
    new maxplayers = get_maxplayers()
    new players = get_playersnum(1)
    new limit = maxplayers - get_cvar_num("amx_reservation")
    setVisibleSlots(players, maxplayers, limit)
}
}
public ackSignal(id) {
new lReason
format(lReason,63,"%L",id,"DROPPED_RES")
server_cmd("kick #%d ^"%s^"", get_user_userid(id), lReason )
}
public client_authorized(id) {
new maxplayers = get_maxplayers()
new players = get_playersnum( 1 )
new limit = maxplayers - get_cvar_num("amx_reservation")
if ( access(id,ADMIN_RESERVATION) || (players <= limit) )
{
    if ( get_cvar_num("amx_hideslots") == 1 )
      setVisibleSlots( players , maxplayers, limit )
    return PLUGIN_CONTINUE
}
client_cmd(id,g_cmdLoopback)
return PLUGIN_HANDLED
}
public client_disconnect(id)
{
if ( get_cvar_num("amx_hideslots") == 1 ) {
    new maxplayers = get_maxplayers()
    setVisibleSlots( get_playersnum(1) - 1 , maxplayers , maxplayers - get_cvar_num("amx_reservation"))
}
return PLUGIN_CONTINUE
}
setVisibleSlots( players , maxplayers , limit )
{
new num = players + 1
if ( players == maxplayers )
    num = maxplayers
else if ( players < limit )
    num = limit
set_cvar_num( "sv_visiblemaxplayers" , num )
}

Rulzy 发表于 2006-11-10 01:03:55

回复: 再谈预留通道问题

到官方下载一个最新的for Linux 的 1.76b 版本,然后再试试。你可以对它进行修改,但建议在 Linux 下编译它。
页: [1]
查看完整版本: 再谈预留通道问题