搜索
查看: 51279|回复: 76

[AMXX 带源码] 修改的老友记中文ID2.1.兼容游戏中改名(有更新)

[复制链接]
发表于 2010-1-1 14:27:44 | 显示全部楼层 |阅读模式 来自 中国–广东–广州
本帖最后由 xuwenqi 于 2011-1-8 23:11 编辑

注意事项
本插件经过修改
使用环境有所要求
需要服务器支持中文ID(swds.dll控制的,4554的可用ru发的中文补丁)
经过修改,免去了各种修改模块的支持.用AMXX自身的文件编译即可
  1. /*
  2.    名称:CS中文ID插件
  3.    作者:PooHoo@老友记
  4.    来源:http://cs-friends.com.cn
  5.    [2008-3-15](AMXX1.76 以上测试通过)

  6.    功能:
  7.       实现 CS 中文ID功能
  8.       简单的样例插件,从文本文件里读取中文ID设置
  9.       如果数据量大,建议改用数据库比较理想,管理也比较方便

  10.    插件安装说明:
  11.       1,需要使用 ig 修改过的 fakemeta_amxx.dll 模块配合使用
  12.          替换你原来的`fakemeta_amxx.dll 即可,不影响 fakemeta 里的任何功能
  13.       2,chinese_id.ini 为中文ID设置文件,放到 \amxmodx\configs\ 目录下
  14.          按里面的说明添加信息,记住要保存为 UTF8 无签名格式
  15.       3,把本插件配置放到 plugin.ini 文件的最上面

  16.    插件开发使用者说明:
  17.       1,主要是使用 ig_setname 函数,实现中文ID的名字更换
  18.          其他更好的方法?等待你来发掘。。。
  19.       2,在你的 fakemeta.ini 里最下面增加下面的函数定义,否则无法编译
  20.          // 设置玩家名字
  21.          // name = 玩家新的名字(超过31个字节无效)
  22.          native ig_setname(id, const newname[])

  23.    中文ID使用的已知问题:
  24.       1,按麦克风通话时,中文ID的玩家名字为乱码,无法正确显示。
  25.       2,玩家在游戏里的改名功能被禁用,如果要改名,需要离线改好再进。
  26.       3,是否有其他问题???

  27.    鸣谢:
  28.       [ig & 老友记] 的技术支持与帮助
  29.       http://cs-friends.com.cn

  30.         修改by Nicky.xu
  31.      经过修改后,只需要swds.dll文件支持中文ID,Fakemeta这个模块可以用amxx自带的原版
  32.        

  33. */


  34. new const PLUGINNAME[] = "中文ID"
  35. new const VERSION[]    = "2.1"
  36. new const AUTHORS[]    = "poohoo @ 老友记"

  37. #include <amxmodx>
  38. #include <amxmisc>
  39. #include <fakemeta>


  40. new g_SetName[33][32]
  41. new g_SetAllow[33]
  42. new FILE[256]

  43. public plugin_init()
  44. {
  45.    register_plugin(PLUGINNAME, VERSION, AUTHORS)

  46.    new configsdir[128]
  47.    get_configsdir(configsdir, sizeof(configsdir)-1)
  48.    formatex(FILE, sizeof(FILE)-1, "%s/chinese_id.ini", configsdir)

  49.    if (!file_exists(FILE))
  50.       set_fail_state("File (configs/chinese_id.ini) open error.")
  51. }



  52. // 设置 id 需要的名字
  53. public set_name(id, const newname[])
  54. {
  55.    if (strlen(newname)<1)
  56.       return

  57.    g_SetAllow[id] = 1
  58.    copy(g_SetName[id], 31, newname)
  59.    //one_name(id, g_SetName[id], 31)
  60.    set_user_info(id, "name", g_SetName[id])
  61. }

  62. public client_connect(id)
  63. {
  64.    remove_task(id)
  65.    g_SetAllow[id] = 0
  66. }

  67. public client_putinserver(id)
  68. {
  69.    // 延时足够的时间,等待 admin 权限认证插件完成权限设置后,再执行更换名字
  70.    set_task(random_float(3.0,3.0), "get_name_from_file", id)
  71. }

  72. // 从文件里检查是否有对应的中文ID
  73. public get_name_from_file(id)
  74. {
  75.    if (!is_user_connected(id))
  76.       return
  77.    
  78.    new name[32]
  79.    get_user_name(id, name, 31)

  80.    new set = 0
  81.    new hFile = fopen(FILE, "r")
  82.    if (hFile)
  83.    {
  84.       new line[128], tmpName[64], tmpNameCN[64]

  85.       while (fgets(hFile, line, sizeof(line)-1))
  86.       {
  87.          tmpName = ""
  88.          tmpNameCN = ""
  89.          trim(line)
  90.          if (line[0]==';' || line[0]=='/') continue

  91.          parse(line, tmpName,sizeof(tmpName)-1, tmpNameCN,sizeof(tmpNameCN)-1)
  92.          trim(tmpName)
  93.          trim(tmpNameCN)

  94.          if (strcmp(name, tmpName)==0)
  95.          {
  96.             copy(name, 31, tmpNameCN)
  97.             set = 1
  98.             break
  99.          }
  100.       }
  101.    }
  102.    fclose(hFile)

  103.    // 完成后,设置新的名字
  104.    if (set)
  105.       set_name(id, name)
  106. }




复制代码

评分

参与人数 1点通币 +20 收起 理由
xiaolysh + 20

查看全部评分

 楼主| 发表于 2010-1-1 14:28:30 | 显示全部楼层 来自 中国–广东–广州
忘了说,要加载多个memhack_amxx.dll
包里都有.
回复

使用道具 举报

发表于 2010-1-1 15:20:24 | 显示全部楼层 来自 中国–广东–深圳
你好 提示load失败
AMXMODX v1.76b
OooH Team Flashed  1.0      PooHoo@cs-friend  3389_Team_Flash  running
unknown            unknown  unknown           chinese_id_2.am  bad load
回复

使用道具 举报

发表于 2010-1-1 15:20:41 | 显示全部楼层 来自 中国–广东–深圳
本帖最后由 amyvox 于 2010-1-1 15:28 编辑

已经搞定 少加载一个文件
谢谢楼主的 提供
回复

使用道具 举报

发表于 2010-1-1 16:09:27 | 显示全部楼层 来自 中国–福建–泉州–石狮市
修改版出来拉.
回复

使用道具 举报

发表于 2010-1-1 17:45:15 | 显示全部楼层 来自 中国–四川–成都
本帖最后由 qiang_zhong 于 2010-1-1 17:49 编辑

通过一个文件管理英文名字,中文名字和其他的,全部实现SQL文件缓存,无需多次读取数据库。只需要在换图的时候读取1次数据库,就把英文名字和中文名字缓存到AMXX里面,当用英文名字进入服务器,优先检查是否有匹配的中文名字,有的话,更换,更换后,在验证权限。全部由admin_sql.amxx实现。数据库采用多级验证方式,使用了冗余模式,可配置多个数据库,当A数据故障时,插件自动判断,然后转向B数据库读取数据。现阶段,可设置3个数据库冗余。

本帖子中包含更多资源

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

×
回复

使用道具 举报

 楼主| 发表于 2010-1-1 17:53:50 | 显示全部楼层 来自 中国–广东–广州
没玩过数据库
回复

使用道具 举报

发表于 2010-1-1 19:21:24 | 显示全部楼层 来自 中国–福建–泉州–安溪县
作个记号  以后用
回复

使用道具 举报

发表于 2010-1-2 10:38:44 | 显示全部楼层 来自 中国–广东–深圳
6# qiang_zhong


請問有詳細教程嗎?
回复

使用道具 举报

 楼主| 发表于 2010-1-2 11:03:11 | 显示全部楼层 来自 中国–广东–广州
9# 260009610


比分按 你所改的ID算,因为admin.amxx只是读权限,跟比分无关
admin.amxx所支持的会员数我暂时没试过有多少个,因为这个不是我改的
10个中文字,是CS内核问题,解决请找服务端某DLL文件
6楼的功能与我这些插件无关(一个读数据库权限,一个读ini的,有啥联系?)
回复

使用道具 举报

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

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