搜索
查看: 13445|回复: 22

[AMXX 带源码] 【分享】解决语音乱码的笨办法!!!

[复制链接]
发表于 2009-1-26 19:39:47 | 显示全部楼层 |阅读模式 来自 中国–湖北–十堰
本帖最后由 [Grief.QQ] 于 2009-1-26 20:01 编辑

语音乱码,是因为记分板用UTF8处理,语音标签用ANSI处理,确切的说,是系统的默认编码处理。(by AXOT)
那么,最笨的办法就是在语音之前用ANSI改名,然后再改回UTF8。
既然插件不能追踪到语音事件,那么就只有替客户端绑定按键来解决了。
唯一的好处就是可以解决乱码,缺点很多,需要绑定某个按键,而且客户端不能决定,如果你有登录器,不妨在登录器中增加设置语音键,附上测试代码,至于ANSI和utf8之间的转换我就不说了。
环境:使用 AXOT 破解的 SWDS.DLL
#include <amxmodx>
#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "AXOT & [Grief.QQ]"

new asi_name[50]
new utf_name[50]
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)

register_clcmd("+mic","micON")
register_clcmd("-mic","micOFF")
         
format(asi_name,49,"^xD6^xD0^xCE^xC4^xB2^xE2^xCA^xD4")
format(utf_name,49,"^xE4^xB8^xAD^xE6^x96^x87^xE6^xB5^x8B^xE8^xAF^x95")
}
public client_connect(id)
{
client_cmd(id,"bind i ^"+voicerecord;+mic^"")
client_cmd(id,"voice_loopback 1")
set_user_info(id,"name",utf_name)  
}
public client_putinserver(id)
{
set_user_info(id,"name",utf_name)  
}
public micON(id)
{
client_cmd(id,"bind i ^"+mic^"")
set_user_info(id,"name",asi_name)
client_cmd(id,"+voicerecord")
set_task(0.1,"ChangeName1",id,_,_,_,_)
set_task(0.3,"ChangeName",id,_,_,_,_)
return PLUGIN_HANDLED
}
public ChangeName1(id)
{
set_user_info(id,"name",asi_name)
}
public ChangeName(id)
{
set_user_info(id,"name",utf_name)
}
public micOFF(id)
{
client_cmd(id,"-voicerecord")
client_cmd(id,"bind i ^"+voicerecord;+mic^"")
return PLUGIN_HANDLED
}

这是测试代码,如果你用登录器解决的,可以不必这么麻烦。
发表于 2009-1-26 19:49:39 | 显示全部楼层 来自 中国–广东–韶关
好人就是多、175这些吖,唉
回复

使用道具 举报

发表于 2009-1-26 19:52:37 | 显示全部楼层 来自 中国–广东–深圳
顶。。。。。。。。好东东。。
没有事件触发的话,比较占用资源吧。
回复

使用道具 举报

 楼主| 发表于 2009-1-26 20:01:08 | 显示全部楼层 来自 中国–湖北–十堰
你可以限制只有中文ID的才用这个过程, setinfo 不占资源。
回复

使用道具 举报

发表于 2009-1-26 20:18:56 | 显示全部楼层 来自 日本
set_task(0.1,"ChangeName1",id,_,_,_,_)
set_task(0.3,"ChangeName",id,_,_,_,_)

这个没有延迟环境中测试 申明一下
回复

使用道具 举报

发表于 2009-1-26 22:55:00 | 显示全部楼层 来自 中国–广东–深圳–宝安区
让暴风雨来的更猛烈些吧....谢谢老板们的努力
回复

使用道具 举报

发表于 2009-1-27 02:14:14 | 显示全部楼层 来自 中国–湖北–武汉
非常感谢您的辛勤劳动
我等无能,只能顶一下
回复

使用道具 举报

发表于 2009-1-27 07:40:50 | 显示全部楼层 来自 中国–广东–东莞
来晚了,不错咯    顶一下QQ的PP
回复

使用道具 举报

发表于 2009-1-27 18:21:34 | 显示全部楼层 来自 中国–湖北–武汉
set_task(0.1,"ChangeName1",id,_,_,_,_)
set_task(0.3,"ChangeName",id,_,_,_,_)

这个没有延迟环境中测试 申明一下
axot 发表于 2009-1-26 20:18


想弱弱地问一下,这时间的设定不太好控制吧
谁知道一个玩家要说多长时间啊
不过我对set_task后面的参数不太清楚,如果说得不靠谱请无视
回复

使用道具 举报

 楼主| 发表于 2009-1-27 19:13:09 | 显示全部楼层 来自 中国–湖北–襄阳
语音标签15-20秒才更新一次,所以,语音之后的瞬间改回UTF8,语音标签在一定时间内不变,除非说话超过20秒以上。。。
回复

使用道具 举报

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

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