【分享】解决语音乱码的笨办法!!!
本帖最后由 于 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 & "
new asi_name
new utf_name
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
}
这是测试代码,如果你用登录器解决的,可以不必这么麻烦。 好人就是多、175这些吖,唉 顶。。。。。。。。好东东。。
没有事件触发的话,比较占用资源吧。 你可以限制只有中文ID的才用这个过程, setinfo 不占资源。 set_task(0.1,"ChangeName1",id,_,_,_,_)
set_task(0.3,"ChangeName",id,_,_,_,_)
这个没有延迟环境中测试 申明一下 让暴风雨来的更猛烈些吧....谢谢老板们的努力 非常感谢您的辛勤劳动
我等无能,只能顶一下 来晚了,不错咯 顶一下QQ的PP set_task(0.1,"ChangeName1",id,_,_,_,_)
set_task(0.3,"ChangeName",id,_,_,_,_)
这个没有延迟环境中测试 申明一下
axot 发表于 2009-1-26 20:18 http://www.dt-club.net/forum/images/common/back.gif
想弱弱地问一下,这时间的设定不太好控制吧
谁知道一个玩家要说多长时间啊
不过我对set_task后面的参数不太清楚,如果说得不靠谱请无视 语音标签15-20秒才更新一次,所以,语音之后的瞬间改回UTF8,语音标签在一定时间内不变,除非说话超过20秒以上。。。