66影视 - 最新电影 安致窝 - Android 小窝 漫娱动漫
返回列表 回复 发帖

求人写个代码..获取玩家config里某参数..

由于有些网吧客户端的cl_cmdrate被设置成太低..
导致服务器上别的玩家看他都一卡一卡的..

想弄个插件..
能获取玩家的cl_cmdrate值.
如果cl_cmdrate<40
服务器就用client_cmd(id,cl_cmdrate 99)来帮其设置cl_cmdrate值
如果cl_cmdrate>40
则不做任何动作
好像是可以实现的,不过加这个功能之后,要求客户端版本都大于或等于3382,否则无法进入服务器。
new configsDir[64]
        get_configsdir(configsDir, 63)

不知道是不是用来读区config
好像是可以实现的,不过加这个功能之后,要求客户端版本都大于或等于3382,否则无法进入服务器。
Rulzy 发表于 2010-3-8 23:18
嗯,今天测试了下
3266出错了
用get_user_info只能获取setinfo 信息.可惜了..
例子:
  1. #include <amxmodx>

  2. public plugin_init()
  3. {
  4.         register_plugin("test", "1", "PM");
  5. }

  6. public client_connect(id)
  7. {
  8.         if (!is_user_bot(id))
  9.                 query_client_cvar(id, "rate", "cvar_result_func");
  10. }

  11. public cvar_result_func(id, const cvar[], const value[])
  12. {
  13.         new name[32];
  14.         get_user_name(id, name, 31);
  15.         log_amx("Client %d(%s)'s rate is ^"%s^"", id, name, value);
  16. }
复制代码
query_client_cvar 命令客户端低于3382会有报错日志并且功能无用
但是可以进 要想办法获取客户端的版本低于 3382就再他初始化游戏之前就Kick掉提示升级版本
哎 很囧!~
娱乐混战服 loli.cc:27015
幽灵服 loli.cc:27016
http://loli.cc:88/ 中文ID注册
/* Yet another High Ping Kicker
About:
This plugin kick players that have to high a ping, or to low a cl_updaterate setting. It also has a
option to adds X amount to the max ping when the clock is goes over 24.

Forum Thread: http://www.amxmodx.org/forums/viewtopic.php?t=7865

Credits:
Ops in #AMXmod @ Quakenet for alot of help ( + AssKicker & CheesyPeteza )

Install:
Install the plugin like any other
Put these into your amxx.cfg with the correct vaules
amx_maxping 125
amx_minrate 40
amx_maxping_add 50

Changelog:
1.1.2
        - Added ADMIN_IMMUNITY and ADMIN_RESERVATION immunity
1.1.1
        - Fixed: Task not being removed when player left.
1.1.0
        - Added: Shows a menu to ppl with to low a cl_updaterate settings
         
1.0.0
        - First released version
*/

#include <amxmodx>

//#define TaskTime 15.0
//#define HowManyChecks 10
//#define ExtraPing 150                // ExtraPing + g_MaxPing : If a user has a ping above this, his ping Offense counter goes up 5 instead of 1

#define MAXPLAYERS 32

new g_PingOffence[MAXPLAYERS+1]
new g_CheckPlayer[MAXPLAYERS+1]                // To save the poor cpu having to keep track of the connected players
new g_MaxPing
new g_MinRate
new g_MaxPlayers

public plugin_init()
{
        register_plugin("High Ping Kicker","1.1.2","skywalker|EKS")
        register_menucmd(register_menuid("\ycl_updaterate 设置太低:"),1023,"MenuCheckSelection")
       
          register_cvar("amx_maxping","125")
           register_cvar("amx_minrate","40")
        register_cvar("amx_maxping_add","75")
        register_cvar("amx_hpk_Time","20.0")
        register_cvar("amx_hpk_counter","10")
        set_task(float(get_cvar_num("amx_hpk_Time")),"Task_CheckPlayers",64,_,_,"b")
        return PLUGIN_CONTINUE
}
public plugin_cfg()
{
        g_MaxPlayers = get_maxplayers()
        g_MaxPing = get_cvar_num("amx_maxping")
        g_MinRate = get_cvar_num("amx_minrate")
        //new sTimeH[4] // Contains the hour in a sting
        //get_time("%H",sTimeH,3)
        //new TimeH = str_to_num(sTimeH)
        //if (TimeH < 14)
        //{
        //        g_MaxPing = g_MaxPing + get_cvar_num("amx_maxping_add")
        //        server_print("[HPK] Time is %d, added +%d to maxping(%d)",TimeH,get_cvar_num("amx_maxping_add"),g_MaxPing)
        //}
        //else
        //        server_print("[HPK] Time is %d, maxping(%d)",TimeH,g_MaxPing)
}
public client_putinserver(id)
{
        if(is_user_connected(id) && !is_user_bot(id) && !is_user_hltv(id))
                set_task(20.0,"Task_ActivatePingCheck",id,_,_,"a",1)                // Since when the user "just" connected, his ping is high, we dont want to get a false detection
}
public Task_ActivatePingCheck(id)
{
        g_PingOffence[id] = 0
        g_CheckPlayer[id] = 1
        g_MaxPing = get_cvar_num("amx_maxping")
        g_MinRate = get_cvar_num("amx_minrate")
        client_print(id,print_chat,"[HPK] 最高 ping 是%dms, 最低能接受的cl_updaterate是 %d",g_MaxPing,g_MinRate)
}

public client_disconnect(id)
{
        g_CheckPlayer[id] = 0
        remove_task(id)
}
public Task_CheckPlayers()
{
        for(new i=1;i<=g_MaxPlayers;i++) if(g_CheckPlayer)
                CheckPing(i)
}

stock CheckPing(id)
{
        if ((get_user_flags(id) & ADMIN_IMMUNITY) || (get_user_flags(id) & ADMIN_RESERVATION)) {
        remove_task(id)
        client_print(id, print_chat, "[HPK] 您对Ping检查有豁免权...")
        return PLUGIN_CONTINUE
        }
        new TempString[5]
        get_user_info(id,"cl_updaterate",TempString,4)
       
        new ping,loss
        get_user_ping(id,ping,loss)
        new clrate = str_to_num(TempString)
       
        if(ping > g_MaxPing)
        {
                if(ping >= get_cvar_num("amx_maxping_add")+g_MaxPing) g_PingOffence[id] = g_PingOffence[id] + 5                // If the user has a ping get_cvar_num("amx_maxping_add") + g_MaxPing, he gets +5 instead of +1 in his ping offence counter
                else g_PingOffence[id]++
               
                if(g_PingOffence[id] >= get_cvar_num("amx_hpk_counter"))
                {
                        new Name[32],Auth[35]
                        get_user_name(id,Name,31)
                        get_user_authid(id,Auth,34)
                        client_print(0,print_chat,"[HPK] %s 因为Ping超过 %d而被踢",Name,g_MaxPing)
                        server_cmd("kick #%d To high a ping",get_user_userid(id))
                        log_amx("%s<%s> was kicked for having to high a ping (was %d)",Name,Auth,ping)
                        return PLUGIN_CONTINUE
                }
                client_print(id,print_chat,"[HPK] 你的Ping超过了 %d, 想办法解决你的Ping或者离开",g_MaxPing)
        }
        if(clrate < g_MinRate &&  ( g_CheckPlayer[id] == 1 || g_CheckPlayer[id] == 3))
        {
                if(g_CheckPlayer[id] == 3)
                        g_CheckPlayer[id] = 2
                else
                {
                        g_CheckPlayer[id] = 2
                        ShowMenu(id)
                }
        }
        else if(clrate < g_MinRate && g_CheckPlayer[id] == 2)
        {
                new Name[32],Auth[35]
                get_user_name(id,Name,31)
                get_user_authid(id,Auth,34)
                client_print(0,print_chat,"[HPK] %s 因为cl_updaterate(%d)太低而被踢",Name,clrate)
                server_cmd("kick #%d To low a cl_updaterate",get_user_userid(id))       
                log_amx("%s<%s> was kicked for having to low a cl_updaterate (was %d)",Name,Auth,clrate)
                return PLUGIN_CONTINUE
        }
//        client_print(0,3,"%d had ping: %d(%d) loss %d clrate %d(%d)",id,ping,g_MaxPing,loss,clrate,g_MinRate)
        return PLUGIN_CONTINUE
}


public ShowMenu(id)
{
        new szMenuBody[151]
        new len,keys
        len = format(szMenuBody,255,"\ycl_updaterate 设置太低:^n 增大 cl_updaterate 的值或者离开服务器")
        len += format(szMenuBody[len],150 - len,"^n\w 1. 增加到 %d",g_MinRate)
        len += format(szMenuBody[len],150 - len,"^n\w 2. 离开")


        keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9)
        show_menu( id, keys, szMenuBody, -1 )
        return PLUGIN_CONTINUE
}
public MenuCheckSelection(id,key) // Called by ShowReadyMenu
{
        if(key == 0)
        {
                new Name[32],Auth[35]
                get_user_name(id,Name,31)
                get_user_authid(id,Auth,34)
                client_print(0,print_chat,"[HPK] %s 选择更新他的 cl_updaterate",Name)
                log_amx("%s<%s> choose to update his cl_updaterate",Name,Auth)               
                client_cmd(id,"cl_updaterate %d",g_MinRate)
        }
        else
        {
                new Name[32],Auth[35]
                get_user_name(id,Name,31)
                get_user_authid(id,Auth,34)
                client_print(0,print_chat,"[HPK] %s 选择不更新他的 cl_updaterate",Name)
                server_cmd("kick #%d To low a cl_updaterate",get_user_userid(id))
                log_amx("%s<%s> was kicked for having to low a cl_updaterate",Name,Auth)
        }
        return PLUGIN_CONTINUE
}
麻烦楼主把这个源码中的
cl_updaterate
改成
cl_cmdrate
测试一下。
因为有了点通,所以CS更加精彩
回楼上,cl_updaterate因为可以在setinfo 设置,你这个插件读取的是setinfo cl_updaterate
只能读到setinfo里的参数
比如

_cl_autowepswitch   0
bottomcolor         0
cl_dlmax            80
cl_lc               1
cl_lw               1
cl_updaterate       101
model               arctic
name               
topcolor            0
_vgui_menus         0
xredir              -1
lang                cn
rate                25000.000000


cl_cmdrate还是无法读取
现在也2010年了,上海世博会也要开了,无聊的话就看帖子顶起来!






















温州老虎 机上分器 老虎 机上分器 老虎 机干扰器 天津老虎 机上分器 老虎 机定位器 老虎 机遥控器 手机智能卡
返回列表