查看: 7801|回复: 31

[源码]CS中文ID插件大集合

  [复制链接]
发表于 2012-12-22 02:23:47 | 显示全部楼层 |阅读模式

作者:Simen.newbie

用法: 安装中文聊天软件 http://bbs.simen.cn/viewthread.php?tid=42429extra=page%3D1

进入游戏按Y输入
name 中文ID
注意name后面有空格
运行需要memhack这个module

name.zip - amxx插件/代码
memhack.rar - memhack
memhack_source.rar - memhack代码

CVars:
utf8name 1 开启按Y输入"name 中文ID" 改名功能(默认)
utf8name 0 关闭

u_needaccess 1 需要权限ADMIN_RESERVATION才能改中文ID
u_needaccess 0 不检查用户权限(默认)

u_autoname 1 登录时根据英文ID自动改名
u_autoname 0 关闭此功能(默认)

使用这个功能要在addons\amxmodx\data目录下建立一个文件names_utf8.txt并以utf-8编码保存
格式如下

英文名1
中文名1
英文名2
中文名2
英文名3
中文名3

依此类推


更新日志:
12/1/2008
v0.18
- 修正一些错误
- 如果想在改中文名后自动恢复原有权限,可以将251-256行以及264-274行的代码的注释标记(/*和*/)去掉.(如果op的中文帐号没有密码保护而又要开自动恢复权限功能的话,建议禁止改名玩家自行改名(utf8name 0),以防其他玩家冒名顶替)


4/27/2008
v0.15
- CVar utf8name以及u_needaccess作用改变, utf8name改为玩家按Y输入"name 中文ID" 改名功能的开关而非所有功能的开关(因作者疏忽此功能没实现,v0.18已修正),u_needaccess对于登录服务器改名以及动态改名功能均有效
- 如果中文名字有重复,会在前面加上类似"(1)"的标记
- 玩家进入游戏以后才会检查是否要自动换中文名

3/25/2008
v0.12
- 检查名字中是否含有字符'\'
- 修改get_name()函数以方便修改其他有冲突的插件.用它直接替换get_user_name()即可

3/24/2008
v0.11
- 修正再次改名以后不能换回原来中文ID的bug

3/19/2008
v0.10
- 增加一个CVar  u_autoname

3/17/2008
v0.08
增加一个CVar  u_needaccess
改进查找/name/键位的算法

v0.06:
- 支持32人服务器
- 死后禁止改名




插件下载

http://bbs.simen.cn/viewthread.php?tid=43055extra=page%3D1

- 中文ID可以拥有权限,但要注意,users.ini文件/数据库里的数据一定要用UTF-8编码
- 某些插件不支持UTF-8编码,中文ID可能会显示为乱码
- linux用的memhack可以到这里下载:
http://forums.alliedmods.net/sho ... 56postcount=62
我没在linux下测试过

已知问题:

语音时名字显示为乱码(无法解决,貌似要修改客户端关于语音那个dll文件)

某些插件top排名显示为乱码(强制使用UTF-8编码应该就能解决问题,我不懂html~~嘻嘻)

关于TOP15乱码的问题,其实只要强制使用utf8编码就成了
以statsx.amxx为例
打开statsx.sma
大约在749行,找到iLen = format(sBuffer, MAX_BUFFER_LENGTH, "<body bgcolor=#000000><font color=#FFB000><pre>")

        iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "%2s %-22.22s %6s %6s %6s %6s %4s %4s %4s^n", "#", "Nick",
复制代码在<body bgcolor=#000000>
复制代码的前面,加上<meta http-equiv=Content-Type content=charset=utf-8>
复制代码应该就可以了

[ 本帖最后由 pj001234 于 2008-3-27 01:19 编辑 ]

本插件可能会跟某些插件冲突导致
解决方法:修改插件代码,用下面这个函数代替get_user_name()
#include <fakemeta>
#include <memhack>

stock get_name(id, name[], len)
{
        new buffer = engfunc(EngFunc_GetInfoKeyBuffer, id)
        new strtmp1[256]
        copy_infokey_buffer(buffer, strtmp1, 255)
        new offset = contain(strtmp1, "\name\") + 6
        new thischr
        new i
        for (;;i++)
        {
                thischr = memhack_get_char(buffer + offset + i, MEM_NULLBASE, MEMTYPE_DATA, MEM_SIGNED)
                if (thischr == '\' || thischr == 0)
                {
                        name = 0
                        break
                }
                else
                {
                        name = thischr
                }

        }
        name[len - 1] = 0
}
解决方法2,可以试一下把这句
register_forward(FM_ClientUserInfoChanged, "fwdClientUserInfoChanged", 0)
改成
register_forward(FM_ClientUserInfoChanged, "fwdClientUserInfoChanged", 1)


不能从MySQL数据库读取中文id的解决办法:

在admin.sma里,找到
query = SQL_PrepareQuery(sql,"SELECT `auth`,`password`,`access`,`flags` FROM `%s`", table)
在这一行之前插入以下2句:
query = SQL_PrepareQuery(sql,"SET NAMES 'UTF8'")
SQL_Execute(query)
memhack.rar (41.27 KB)
下载次数:902

2008-3-17 11:00



memhack_source.rar (35.99 KB)
下载次数:744

2008-3-17 11:00



name.zip (13.61 KB)




********************************************************************************
请论坛的前辈务必帮忙
我用了中文ID插件,与显示在线OPVIP和前五名杀人奖励这两个插件冲突。而且根据英文名自动改名设置很多遍不能成功

那插件我怎么用了服务器直接崩溃的?修改代码
register_forward(FM_ClientUserInfoChanged, "fwdClientUserInfoChanged", 0)
改成
register_forward(FM_ClientUserInfoChanged, "fwdClientUserInfoChanged", 1)
可以用了,但是中文ID没有权限啊?如何解决??帮帮忙

我的服务器现在已经搞好了,中文ID也有权限.
设置中文OP要在user.ini里面设置两个,一个是英文ID,还有一个是中文ID,权限密码都一样,然后在addons\amxmodx\data目录下建立一个文件names_utf8.txt并以utf-8编码保存
格式如下

管理员英文ID
管理员中文ID
管理员英文ID
管理员中文ID

然后设置u_autoname为1,这样OP用英文ID登陆的时候进到服务器会自动改成中文ID的.对应的中文ID也有OP权限.
*****************************************************************************************************
这几天dz论坛绑定cs数据做好了,服务器也做好了。就是进入游戏更改中文后权限问题一直没解决,都怪当时学习的时候打cs了,哈哈。

话说正题,进入游戏时英文有权限,变更成中文id后没有权限。解决办法。

找到admin.sma文件
查找

public client_infochanged(id)

{

        if (!is_user_connected(id) || !get_cvar_num("amx_mode"))

        {

                return PLUGIN_CONTINUE

        }



        new newname[32], oldname[32]



        get_user_name(id, oldname, 31)

        get_user_info(id, "name", newname, 31)



        if (!equali(newname, oldname))

        {

                accessUser(id, newname)

        }



        return PLUGIN_CONTINUE

}
复制代码删除即可。。。

额的神啊,这几天可累死我了。。




2.jpg
1.jpg

老友记CS中文ID插件.rar

212.78 KB, 下载次数: 28

售价: 2 金钱  [记录]

老友记CS中文ID插件2.1.rar

89.41 KB, 下载次数: 15

售价: 2 金钱  [记录]

name.zip

13.61 KB, 下载次数: 10

售价: 2 金钱  [记录]

memhack_source.rar

35.99 KB, 下载次数: 4

售价: 2 金钱  [记录]

cs1.6中文ID插件.rar

896.04 KB, 下载次数: 29

售价: 2 金钱  [记录]

发表于 2012-12-22 08:25:20 | 显示全部楼层
初来乍到,请多多关照。。。  
发表于 2012-12-24 15:51:08 | 显示全部楼层
回复一下  
发表于 2012-12-25 18:22:15 | 显示全部楼层
哈哈 我支持你
5566 该用户已被删除
发表于 2012-12-30 04:04:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2012-12-30 22:44:22 | 显示全部楼层
加油站加油  
发表于 2012-12-31 02:14:49 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2013-1-1 12:42:53 | 显示全部楼层
朕要休息了..............  
发表于 2013-1-4 07:39:59 | 显示全部楼层
(*^__^*) 嘻嘻……  
发表于 2013-1-4 11:24:57 | 显示全部楼层
哈哈,顶你了哦.  
您需要登录后才可以回帖 登录 | 中文注册

本版积分规则