搜索
查看: 2590|回复: 0

请Rulzy再次帮助

[复制链接]
发表于 2009-9-29 22:03:49 | 显示全部楼层 |阅读模式 来自 中国–广东–深圳–南山区
本帖最后由 702033080 于 2009-9-29 22:04 编辑

请帮忙修改成兼容(1)[NO-sXe-I] (2)[NO-sXe-I] (3)[NO-sXe-I] (4)[NO-sXe-I] (5)[NO-sXe-I]
我自己也修改过..但是提示错误.太深.看不懂..只能懂浅一点的
  1. new const PLUGINNAME[] = "中文ID"
  2. new const VERSION[]    = "2.1"
  3. new const AUTHORS[]    = "poohoo @ 老友记"


  4. #include <amxmodx>
  5. #include <amxmisc>
  6. #include <fakemeta>

  7. new g_RetryOnce[33]
  8. new g_SetName[33][32]
  9. new g_SetAllow[33]
  10. new FILE[256]

  11. public plugin_init()
  12. {
  13.    register_plugin(PLUGINNAME, VERSION, AUTHORS)

  14.    new configsdir[128]
  15.    get_configsdir(configsdir, sizeof(configsdir)-1)
  16.    formatex(FILE, sizeof(FILE)-1, "%s/chinese_id.ini", configsdir)

  17.    if (!file_exists(FILE))
  18.       set_fail_state("File (configs/chinese_id.ini) open error.")
  19. }

  20. // 名字更改消息
  21. public client_infochanged(id)
  22. {
  23.    if (!is_user_connected(id))
  24.       return PLUGIN_CONTINUE

  25.    // 更换限制标记
  26.    if (!g_SetAllow[id])
  27.    {
  28.       new oldname[32], newname[32]
  29.       get_user_name(id, oldname, 31)
  30.       get_user_info(id, "name", newname, 31)

  31.       if (strcmp(newname, oldname)==0)
  32.          return PLUGIN_CONTINUE

  33.       // 兼容 sXe 改名
  34.       if (equal(newname, "[NO-sXe-I]", 10))
  35.       {
  36.          replace(oldname, 31, "[NO-sXe-I] ", "")
  37.          formatex(newname, 31, "[NO-sXe-I] %s", oldname)
  38.          ig_setname(id, newname)
  39.       }
  40.       else
  41.          ig_setname(id, oldname)

  42.       return PLUGIN_CONTINUE
  43.    }

  44.    g_SetAllow[id] = 0
  45.    ig_setname(id, g_SetName[id])

  46.    return PLUGIN_CONTINUE
  47. }

  48. // 重名检查
  49. one_name(id, name[], len)
  50. {
  51.    new sample[32], s
  52.    copy(sample, 31, name)

  53.    for (new i=0; i<33; i++)
  54.    {
  55.       if (s>0)
  56.          formatex(sample, 31, "(%d)%s", s, name)

  57.       if (!is_name_inuse(id, sample))
  58.          break

  59.       s++
  60.    }
  61.    copy(name, len, sample)
  62. }

  63. is_name_inuse(id, const sample[])
  64. {
  65.    new name[32]
  66.    for (new i=1; i<=get_maxplayers(); i++)
  67.    {
  68.       if (!is_user_connected(i)) continue
  69.       if (id==i) continue

  70.       get_user_name(i, name, 31)
  71.       if (strcmp(name, sample)==0)
  72.          return 1
  73.    }

  74.    return 0
  75. }

  76. // 设置 id 需要的名字
  77. public set_name(id, const newname[])
  78. {
  79.    if (strlen(newname)<1)
  80.       return

  81.    g_SetAllow[id] = 1
  82.    copy(g_SetName[id], 31, newname)
  83.    one_name(id, g_SetName[id], 31)
  84.    set_user_info(id, "name", g_SetName[id])
  85. }

  86. public client_connect(id)
  87. {
  88.    remove_task(id)
  89.    g_SetAllow[id] = 0

  90.    // 强制重新连接一次,以解决因为换中文ID后,换图会出现权限认证问题
  91.    if (!g_RetryOnce[id])
  92.    {
  93.       g_RetryOnce[id] = 1
  94.       client_cmd(id, "retry")
  95.    }
  96. }

  97. public client_putinserver(id)
  98. {
  99.    // 延时足够的时间,等待 admin 权限认证插件完成权限设置后,再执行更换名字
  100.    set_task(random_float(5.0,15.0), "get_name_from_file", id)
  101. }

  102. // 从文件里检查是否有对应的中文ID
  103. public get_name_from_file(id)
  104. {
  105.    if (!is_user_connected(id))
  106.       return
  107.    
  108.    new name[32]
  109.    get_user_name(id, name, 31)

  110.    new set = 0
  111.    new hFile = fopen(FILE, "r")
  112.    if (hFile)
  113.    {
  114.       new line[128], tmpName[64], tmpNameCN[64]

  115.       while (fgets(hFile, line, sizeof(line)-1))
  116.       {
  117.          tmpName = ""
  118.          tmpNameCN = ""
  119.          trim(line)
  120.          if (line[0]==';' || line[0]=='/') continue

  121.          parse(line, tmpName,sizeof(tmpName)-1, tmpNameCN,sizeof(tmpNameCN)-1)
  122.          trim(tmpName)
  123.          trim(tmpNameCN)

  124.          if (strcmp(name, tmpName)==0)
  125.          {
  126.             copy(name, 31, tmpNameCN)
  127.             set = 1
  128.             break
  129.          }
  130.       }
  131.    }
  132.    fclose(hFile)

  133.    // 完成后,设置新的名字
  134.    if (set)
  135.       set_name(id, name)
  136. }



复制代码
请帮忙修改成兼容(1)[NO-sXe-I] (2)[NO-sXe-I] (3)[NO-sXe-I] (4)[NO-sXe-I] (5)[NO-sXe-I]
谢谢Rulzy帮忙
游客
回复
您需要登录后才可以回帖 登录 | 注个册吧

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