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下的设置密码吧?
页: 1 [2] 3 4
查看完整版本: 读取mysql的cs中文名字问题?