搜索
查看: 6469|回复: 25

[AMXX 带源码] [已解决]点通的高手前辈们,我写的插件错在哪里,谢谢

[复制链接]
发表于 2010-1-12 13:14:32 | 显示全部楼层 |阅读模式 来自 中国–天津–天津
本帖最后由 epic 于 2010-2-3 10:43 编辑

在baili1258的帮助下,我解决了这个问题,问题就在于我对于CAVR值的调用没有用到正确的方法,把代码中的
public CheckPing(id)
{
   new p, l
   get_user_ping(id, p, l)
   if (p > High_ping)
   {
      new frags
      frags = get_user_frags(id)
      set_user_frags(id, frags+Extra_frags)
   }
   return PLUGIN_CONTINUE
}
改为:
public CheckPing(killerId)
{
        new p, l
        get_user_ping(killerId, p, l)
        if (p > get_pcvar_num(High_ping))
        {
                new frags
                frags = get_user_frags(killerId)
                set_user_frags(killerId, frags + get_pcvar_num(Extra_frags))
        }
        return PLUGIN_CONTINUE
}
即可
当然把CVAR改为定义全局变量,即#define也是可以的
以上彩字部分,为epic于2010.2.3写


点通的各位朋友。大家好!
我想做一个将PING值折算成战绩的插件,即:当一位玩家的PING值高于一定数值时(比如高于100),那么这时他杀一个人将得到2个战绩(也就是frags),这个插件的好处是,对一些高PING的CS玩家会公平一些,因为那些高PING却坚持玩CS的人都是爱CS的,所以想做这样的一个插件献给那些高PING的CS玩家

插件源码我写好了,可以compile,而且在CS插件列表中显示正在运行,可是却没有产生我希望发生的效果,所以请点通里的高手前辈们,帮我指点一下,具体我哪里写错了?谢谢了
  1. #include <amxmodx>
  2. #include <fun>
  3. #define PLUGIN  "Convert ping to frags"
  4. #define VERSION "0.1"
  5. #define AUTHOR  "epic"
  6. new High_ping
  7. new Extra_frags
  8. public plugin_init()
  9. {
  10.    register_plugin(PLUGIN, VERSION, AUTHOR)
  11.    register_event("DeathMsg", "DeathEvent", "a")
  12.    High_ping = register_cvar( "Convertpingtofrags_Highping", "100" )
  13.    Extra_frags = register_cvar( "Convertpingtofrags_Extrafrags", "2" )
  14. }
  15. public DeathEvent()
  16. {
  17.    new victimId = read_data(2)
  18.    new killerId = read_data(1)
  19.    if (!killerId || killerId==victimId)
  20.       return PLUGIN_CONTINUE
  21.    if (get_user_team(killerId)==get_user_team(victimId))
  22.       return PLUGIN_CONTINUE
  23.    CheckPing(killerId)
  24.    return PLUGIN_CONTINUE
  25. }
  26. public CheckPing(id)
  27. {
  28.    new p, l
  29.    get_user_ping(id, p, l)
  30.    if (p > High_ping)
  31.    {
  32.       new frags
  33.       frags = get_user_frags(id)
  34.       set_user_frags(id, frags+Extra_frags)
  35.    }
  36.    return PLUGIN_CONTINUE
  37. }
复制代码
发表于 2010-1-12 14:02:18 | 显示全部楼层 来自 中国–广东–深圳
本帖最后由 baili1258 于 2010-1-12 14:04 编辑
  1. #include <amxmodx>
  2. #include <fun>

  3. #define PLUGIN  "Convert ping to frags"
  4. #define VERSION "0.1"
  5. #define AUTHOR  "epic"
  6. new High_ping
  7. new Extra_frags
  8. public plugin_init()
  9. {
  10.    register_plugin(PLUGIN, VERSION, AUTHOR)
  11.    register_event("DeathMsg", "DeathEvent", "a")
  12.    High_ping = register_cvar( "Convertpingtofrags_Highping", "100" )
  13.    Extra_frags = register_cvar( "Convertpingtofrags_Extrafrags", "2" )
  14. }
  15. public DeathEvent()
  16. {
  17.    new victimId = read_data(2)
  18.    new killerId = read_data(1)
  19.    if (!killerId || killerId==victimId)
  20.       return PLUGIN_CONTINUE
  21.    if (get_user_team(killerId)==get_user_team(victimId))
  22.       return PLUGIN_CONTINUE
  23.    CheckPing(killerId)
  24.    return PLUGIN_CONTINUE
  25. }
  26. public CheckPing(id)
  27. {
  28.    new ping, loss
  29.    get_user_ping(id, ping, loss)
  30.    if (ping >= High_ping)
  31.    {
  32.       set_user_frags(id, get_user_frags(id)+Extra_frags)
  33.    }else{
  34.      console_print(0, "ping:%d",ping)        //测试下看能正确获得用户ping值不!
  35.    }
  36. }
复制代码
你这样试下,看看能不能这确获得ping值
回复

使用道具 举报

 楼主| 发表于 2010-1-12 14:23:11 | 显示全部楼层 来自 中国–天津–天津
好的,我晚上组织朋友一起测试一下,谢谢

我感觉也是最后一个return PLUGIN_CONTINUE有点问题
回复

使用道具 举报

 楼主| 发表于 2010-1-12 22:12:45 | 显示全部楼层 来自 中国–天津–天津
我刚测试了,为了方便测试我先把High_ping 的值改为2了,也就是说只要我的ping大于2 就应该有效果

可是,战绩还是没有额外的效果出现...console里倒是有ping值反应,如图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注个册吧

×
回复

使用道具 举报

发表于 2010-1-13 09:57:45 | 显示全部楼层 来自 中国–广东–深圳
那我再看下
回复

使用道具 举报

发表于 2010-1-13 10:01:44 | 显示全部楼层 来自 中国–广东–深圳
  1. #include <amxmodx>
  2. #include <fakemeta>


  3. #define PLUGIN  "Convert ping to frags"
  4. #define VERSION "0.1"
  5. #define AUTHOR  "epic"
  6. new High_ping
  7. new Extra_frags
  8. public plugin_init()
  9. {
  10.    register_plugin(PLUGIN, VERSION, AUTHOR)
  11.    register_event("DeathMsg", "DeathEvent", "a")
  12.    High_ping = register_cvar( "Convertpingtofrags_Highping", "10" )
  13.    Extra_frags = register_cvar( "Convertpingtofrags_Extrafrags", "2" )
  14. }
  15. public DeathEvent()
  16. {
  17.    new victimId = read_data(2)
  18.    new killerId = read_data(1)
  19.    if (!killerId || killerId==victimId)
  20.       return PLUGIN_CONTINUE
  21.    if (get_user_team(killerId)==get_user_team(victimId))
  22.       return PLUGIN_CONTINUE
  23.    CheckPing(killerId)
  24.    return PLUGIN_CONTINUE
  25. }
  26. public CheckPing(id)
  27. {
  28.    new ping, loss
  29.    get_user_ping(id, ping, loss)
  30.    if (ping >= High_ping)
  31.    {
  32.       set_pev(id, pev_frags, float(pev(id, pev_frags) + Extra_frags))
  33.    }else{
  34.      console_print(0, "ping:%d",ping)   
  35.    }
  36. }
复制代码
回复

使用道具 举报

 楼主| 发表于 2010-1-13 10:36:46 | 显示全部楼层 来自 中国–天津–天津
好的,晚上用fakemeta再测试一下

我昨天晚上是自己建的服,然后用服务器一样的IP进的服,会不会影响测试呢?是不是应该找一个与服务器IP不同的人来帮我测试。。。昨天没找到帮我测试的人- -

而且是不是我设置成ping大于2就加战绩,这里的2ping是不是过底也会造成影响呢?

今天晚上再测试一下,先谢谢baili1258 了
回复

使用道具 举报

发表于 2010-1-13 11:31:08 | 显示全部楼层 来自 中国–广东–深圳
  1. #include <amxmodx>
  2. #include <fakemeta>


  3. #define PLUGIN  "Convert ping to frags"
  4. #define VERSION "0.1"
  5. #define AUTHOR  "epic"
  6. new High_ping
  7. new Extra_frags
  8. public plugin_init()
  9. {
  10.    register_plugin(PLUGIN, VERSION, AUTHOR)
  11.    register_event("DeathMsg", "DeathEvent", "a")
  12.    High_ping = register_cvar( "Convertpingtofrags_Highping", "10" )
  13.    Extra_frags = register_cvar( "Convertpingtofrags_Extrafrags", "2" )
  14. }
  15. public DeathEvent()
  16. {
  17.    new victimId = read_data(2)
  18.    new killerId = read_data(1)
  19.    if (!killerId || killerId==victimId)
  20.       return PLUGIN_CONTINUE
  21.    if (get_user_team(killerId)==get_user_team(victimId))
  22.       return PLUGIN_CONTINUE
  23.    CheckPing(killerId)
  24.    return PLUGIN_CONTINUE
  25. }

  26. public CheckPing(id)

  27. {

  28.    new ping, loss

  29.    get_user_ping(id, ping, loss)

  30.    if (ping >= High_ping)

  31.    {

  32.       set_pev(id, pev_frags, float(pev(id, pev_frags) + Extra_frags))
  33.           client_print ( id, print_chat,"frags:%d",pev(id, pev_frags))

  34.    }else{

  35.      console_print(0, "ping:%d",ping)   

  36.    }

  37. }
复制代码
如果上面的还不行的话,这样试下,看下获得杀人数,是否和得分版的一样!
不行的话,估计要更新一下得分版
回复

使用道具 举报

 楼主| 发表于 2010-1-13 11:41:41 | 显示全部楼层 来自 中国–天津–天津
好的,昨天晚上想这个问题,想得我都睡不觉了,哈哈

想不明白的就是,既然ping已经大于2了,为什么不set_pev(id, pev_frags, float(pev(id, pev_frags) + Extra_frags)),反而去执行console_print(0, "ping:%d",ping),吼吼,现在仍然没想明白
回复

使用道具 举报

发表于 2010-1-13 11:45:00 | 显示全部楼层 来自 中国–广东–深圳
  1. #include <amxmodx>
  2. #include <fakemeta>



  3. #define PLUGIN  "Convert ping to frags"
  4. #define VERSION "0.1"
  5. #define AUTHOR  "epic"


  6. new High_ping
  7. new Extra_frags

  8. // CS Teams
  9. enum
  10. {
  11.         CS_TEAM_UNASSIGNED = 0,
  12.         CS_TEAM_T,
  13.         CS_TEAM_CT,
  14.         CS_TEAM_SPECTATOR
  15. }

  16. public plugin_init()
  17. {
  18.         register_plugin(PLUGIN, VERSION, AUTHOR)
  19.         register_event("DeathMsg", "DeathEvent", "a")
  20.         High_ping = register_cvar( "Convertpingtofrags_Highping", "10" )
  21.         Extra_frags = register_cvar( "Convertpingtofrags_Extrafrags", "2" )
  22. }
  23. public DeathEvent()
  24. {
  25.         new victimId = read_data(2)
  26.         new killerId = read_data(1)
  27.         if (!killerId || killerId==victimId)
  28.                 return PLUGIN_CONTINUE
  29.         if (get_user_team(killerId)==get_user_team(victimId))
  30.                 return PLUGIN_CONTINUE
  31.         CheckPing(killerId)
  32.         return PLUGIN_CONTINUE
  33. }

  34. public CheckPing(id)

  35. {
  36.        
  37.         new ping, loss
  38.        
  39.         get_user_ping(id, ping, loss)
  40.        
  41.         if (ping >= High_ping)
  42.        
  43.         {
  44.                
  45.                 set_pev(id, pev_frags, float(pev(id, pev_frags) + Extra_frags))
  46.                 //  client_print ( id, print_chat,"frags:%d",pev(id, pev_frags))
  47.                 // update scoreboard
  48.                 message_begin(MSG_BROADCAST,get_user_msgid("ScoreInfo"));
  49.                 write_byte(id);
  50.                 write_short(pev(id, pev_frags));
  51.                 write_short(fm_get_user_deaths(id));
  52.                 write_short(0);
  53.                 write_short(fm_get_user_team(id));
  54.                 message_end();
  55.                
  56.         }
  57.        
  58. }
  59. // Get User Deaths
  60. stock fm_get_user_deaths(id)
  61. {
  62.         return get_pdata_int(id, 444, 5);
  63. }
  64. // Get User Team
  65. stock fm_get_user_team(id)
  66. {
  67.         return get_pdata_int(id, 114, 5);
  68. }

复制代码
试试这个吧
应该行的
回复

使用道具 举报

游客
回复
您需要登录后才可以回帖 登录 | 注个册吧

快速回复 返回顶部 返回列表