cslover
发表于 2010-7-26 15:33:40
本帖最后由 cslover 于 2010-7-26 15:50 编辑
首先,开启admin_sql.amxx
然后把字段Csid改为auth,使插件从auth字段读取英文名。
然后新建一个名为cnname,类型为varchar,字符集设置为utf8
这样就可以读取中文名了! ...
cuikejie 发表于 2010-7-25 09:20 http://www.dt-club.net/forum/images/common/back.gif
最关键的是,这些步骤没问题,还是读取不了。
admin_sql.amxx和chinese_id.amxx确定开了。。。模块也没问题,之前有搞成功过,但是后来数据库什么的都重装了,就不行了,还是不清楚问题在哪儿?
cuikejie
发表于 2010-7-26 19:52:46
把源码发上来。
cuikejie
发表于 2010-7-26 19:59:09
8# cuikejie
name 最大长度32
中文字符UTF-8占3
32/3=10
我的服里
AcFun.Gaming|芙兰朵露
好像就这样了再长没事过如果太长就会出现密码错误
lovehuai 发表于 2010-7-26 13:27 http://www.dt-club.net/forum/images/common/back.gif
楼主你看看我给你的回贴,你都不回答!!额的神啊,你把需要的东西打包下吧,,问题找了很久了。。也没头绪。
你的帖子
http://www.dt-club.net/forum/viewthread.php?tid=48953&page=1#pid394753
cslover
发表于 2010-7-27 01:22:46
把源码发上来。
cuikejie 发表于 2010-7-26 19:52 http://www.dt-club.net/forum/images/common/back.gifchinese_id.smanew const PLUGINNAME[] = "中文ID"
new const VERSION[] = "2.1"
new const AUTHORS[] = "poohoo @ 老友记"
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <cstrike>
#include <dbi>
new g_RetryOnce
new g_SetName
new g_SetFlags
new g_SetAllow
new g_host
new g_user
new g_pass
new g_dbname
new g_tabname
new Sql:g_dbc
new Result:result
public plugin_init()
{
register_plugin(PLUGINNAME, VERSION, AUTHORS)
register_forward(FM_ClientUserInfoChanged, "on_FM_ClientUserInfoChanged")
register_cvar("amx_sql_host", "127.0.0.1")
register_cvar("amx_sql_user", "root")
register_cvar("amx_sql_pass", "")
register_cvar("amx_sql_db", "amx")
register_cvar("amx_sql_table", "admins")
new configsDir
get_configsdir(configsDir, 63)
server_cmd("exec %s/sql.cfg", configsDir)
server_exec()
return PLUGIN_CONTINUE
}
public plugin_cfg()
{
get_cvar_string("amx_sql_host",g_host,32)
get_cvar_string("amx_sql_user",g_user,32)
get_cvar_string("amx_sql_pass",g_pass,32)
get_cvar_string("amx_sql_db",g_dbname,32)
get_cvar_string("amx_sql_table",g_tabname,32)
return PLUGIN_CONTINUE
}
public on_FM_ClientUserInfoChanged(id, buffer)
{
if (!is_user_connected(id))
return FMRES_IGNORED
if (!g_SetAllow)
{
new oldname, newname
get_user_name(id, oldname, 31)
get_user_info(id, "name", newname, 31)
if (strcmp(newname, oldname)==0)
return FMRES_IGNORED
if (containi(newname, "")!=-1)
{
formatex(newname, 31, " %s", oldname)
ig_setname(id, newname)
}
else
ig_setname(id, oldname)
return FMRES_SUPERCEDE
}
g_SetAllow = 0
ig_setname(id, g_SetName)
set_task(5, "getusernew", id)
return FMRES_SUPERCEDE
}
public getusernew(id)
{
if (!(get_user_flags(id)==g_SetFlags)) {
//这里杯具哈哈不懂C语法所以在也不管他是否规定了
remove_user_flags(id)
set_user_flags(id,g_SetFlags)
//log_amx("set user flags")
}
new sflags
get_flags(get_user_flags(id),sflags,31)
//log_amx("getusernew %s",sflags)
}
one_name(id, name[], len)
{
new sample, s
copy(sample, 31, name)
for (new i=0; i<33; i++)
{
if (s>0)
formatex(sample, 31, "(%d)%s", s, name)
if (!is_name_inuse(id, sample))
break
s++
}
copy(name, len, sample)
}
is_name_inuse(id, const sample[])
{
new name
for (new i=1; i<=get_maxplayers(); i++)
{
if (!is_user_connected(i)) continue
if (id==i) continue
get_user_name(i, name, 31)
if (strcmp(name, sample)==0)
return 1
}
return 0
}
public set_name(id, const newname[])
{
if (strlen(newname)<1)
return
g_SetAllow = 1
g_SetFlags=get_user_flags(id)
new sflags
get_flags(g_SetFlags,sflags,31)
//log_amx("old %s",sflags)
copy(g_SetName, 31, newname)
one_name(id, g_SetName, 31)
set_user_info(id, "name", "")
}
public client_connect(id)
{
remove_task(id)
g_SetAllow = 0
if (!g_RetryOnce)
{
g_RetryOnce = 1
g_SetFlags = 0
client_cmd(id, "retry")
}
}
public client_putinserver(id)
{
set_task(1, "get_name_from_file", id)
}
public get_name_from_file(id)
{
if (!is_user_connected(id))
return
new name
get_user_name(id, name, 31)
new set = 0
g_dbc = dbi_connect(g_host,g_user,g_pass,g_dbname)
if (g_dbc == SQL_FAILED)
log_amx("SQL Connection Failed")
else
{
result = dbi_query(g_dbc,"SET NAMES 'UTF8'")
result = dbi_query(g_dbc,"select * from `%s` where auth = '%s'", g_tabname, name)
if (result == RESULT_FAILED)
{
log_amx("Sorry,No DataBase or Table")
}
else if(result == RESULT_NONE)
{
client_print(id, print_chat, "not cnid")
}
else
{
new tmpNameCN
dbi_result(result, "cnid",tmpNameCN,31)
dbi_free_result(result)
parse(tmpNameCN,sizeof(tmpNameCN)-1)
trim(tmpNameCN)
copy(name, 31, tmpNameCN)
set = 1
dbi_close(g_dbc)
if (set) {
set_name(id, name)
}
}
}
}
cuikejie
发表于 2010-7-27 02:34:12
new const PLUGINNAME[] = "中文ID"
new const VERSION[] = "2.1"
new const AUTHORS[] = "poohoo @ 老友记"
#include
#include
#include
#include
#include
new g_RetryOnce
new g_SetName[32 ...
cslover 发表于 2010-7-27 01:22 http://www.dt-club.net/forum/images/common/back.gif
老友记那个fakemeta_amxx.dll文件你加载了没?
cslover
发表于 2010-7-27 05:29:55
15# cuikejie
有的,我控制台看了,模块运行了,如果没加载模块,那么插件应该也运行不了吧。
我觉得,是不是我的数据库有问题了?
cuikejie
发表于 2010-7-27 08:50:13
15# cuikejie
有的,我控制台看了,模块运行了,如果没加载模块,那么插件应该也运行不了吧。
我觉得,是不是我的数据库有问题了?
cslover 发表于 2010-7-27 05:29 http://www.dt-club.net/forum/images/common/back.gif
不会的,,你把你的admin_sql源码发上来的,我的都好了。。我帮你看看。。
cslover
发表于 2010-7-28 00:01:55
17# cuikejie
很感谢cuikejie!:loveliness:
我传上来,你试试能不能用。最好是能用,证明我的数据库有问题。:L 表只要添加cnid字段就行了,其他的会自动建立。
lovehuai
发表于 2010-7-28 04:19:20
18# cslover
代码都给你了
你根本就没看代码
你看代码的话肯定知道咋用的
单独用这个就行了
控制台
setinfo _id 你的auth
setinfo _pw 你的password
这个
setinfo _id lovehuai
setinfo _pw xxoxx
因为现在的一些平台都会修改name
所以就不使用原英文name 进行对比数据库里的auth
毕竟不是每个人进你服之前就改下 英文name的
cuikejie
发表于 2010-7-28 14:46:02
18# cslover
代码都给你了
你根本就没看代码
你看代码的话肯定知道咋用的
单独用这个就行了
控制台
setinfo _id 你的auth
setinfo _pw 你的password
23795
这个
setinfo _id lovehuai
setinfo _pw xxoxx
因为现在 ...
lovehuai 发表于 2010-7-28 04:19 http://www.dt-club.net/forum/images/common/back.gif
setinfo _pw xxoxx 中的“_pw”应该是amxx。cfg下的设置密码吧?