搜索
查看: 17486|回复: 36

读取mysql的cs中文名字问题?

[复制链接]
发表于 2010-7-25 01:48:17 | 显示全部楼层 |阅读模式 来自 中国–广东–惠州
本帖最后由 cslover 于 2010-7-25 05:13 编辑
  1. 数据库: `amx`
  2. 表的结构 `admins`

  3. CREATE TABLE IF NOT EXISTS `admins` (
  4.   `auth` varchar(32) NOT NULL,
  5.   `cnname` varchar(32) NOT NULL,
  6.   `password` varchar(32) NOT NULL,
  7.   `access` varchar(32) NOT NULL,
  8.   `flags` varchar(32) NOT NULL
  9. ) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='AMX Mod X Admins';

  10. INSERT INTO `admins` (`auth`, `cnname`, `password`, `access`, `flags`) VALUES
  11. ('123', '一二三', '123', 'abcdefghijklmnopqrstu', 'a');
复制代码
用admin_sql.amxx和chinese_id.amxx使用一个表。读取玩家权限没有问题,但是中文名字读取不了(就是不改为中文名字)?
提示
L 07/25/2010 - 01:39:15: [chinese_id.amxx] Sorry,No DataBase or Table
L 07/25/2010 - 01:39:09: [admin.amxx] Login: "123<2><STEAM_ID_LAN><>" became an
admin (account "123") (access "abcdefghijklmnopqrstu") (address "127.0.0.1")
这个不太可能吧?权限都没问题,怎么可能没有数据库或者表呢?
不知道问题出在哪儿?
使用的是下面这个mysql中文名字插件。
http://www.dt-club.net/forum/vie ... amp;highlight=mysql郁闷了好久。。。
发表于 2010-7-25 04:08:56 | 显示全部楼层 来自 中国–广西–南宁
老友记的那个dll
  1. CREATE TABLE `admins` ( `uid` int(8) NOT NULL auto_increment,  `auth` varchar(32) NOT NULL,  `password` varchar(32) NOT NULL,  `access` varchar(32) NOT NULL,  `flags` varchar(32) NOT NULL,  `cnid` varchar(33) NOT NULL,  `regtime` datetime NOT NULL,  PRIMARY KEY  (`uid`)) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COMMENT='AMX Mod X Admins' AUTO_INCREMENT=13 ;
复制代码
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <fakemeta>
  4. #include <cstrike>
  5. #include <dbi>

  6. #define _MAX 32
  7. new g_cmdLoopback[16];
  8. new bool:g_CaseSensitiveName[33];
  9. new bool:Dbid[33];
  10. new amx_mode;
  11. new amx_username_field,amx_password_field;
  12. new g_SetAllow[33],g_SetName[35][32];
  13. new g_host[_MAX], g_user[_MAX], g_pass[_MAX], g_dbname[_MAX], g_error[_MAX],g_tabname[_MAX],Sql:g_dbc,Result:g_result

  14. public plugin_init()
  15. {
  16.         register_plugin("Admin Base (SQL)", AMXX_VERSION_STR, "AMXX Dev Team && LoveHuai")
  17.         register_forward(FM_ClientUserInfoChanged, "on_FM_ClientUserInfoChanged")
  18.         register_dictionary("admin.txt")
  19.         register_dictionary("common.txt")
  20.         amx_mode=register_cvar("amx_mode", "1")
  21.         amx_password_field=register_cvar("amx_password_field", "_pw")
  22.         amx_username_field=register_cvar("amx_username_field", "_id")
  23. //------------------------------------------------------
  24.         register_cvar("amx_vote_ratio", "0.02")
  25.         register_cvar("amx_vote_time", "10")
  26.         register_cvar("amx_vote_answers", "1")
  27.         register_cvar("amx_vote_delay", "60")
  28.         register_cvar("amx_last_voting", "0")
  29.         register_cvar("amx_show_activity", "2")
  30.         register_cvar("amx_votekick_ratio", "0.40")
  31.         register_cvar("amx_voteban_ratio", "0.40")
  32.         register_cvar("amx_votemap_ratio", "0.40")
  33.        
  34.         register_cvar("amx_sql_host", "127.0.0.1")
  35.         register_cvar("amx_sql_user", "root")
  36.         register_cvar("amx_sql_pass", "love")
  37.         register_cvar("amx_sql_db", "amx")
  38.         register_cvar("amx_sql_table", "admins")
  39. //-----------------------------------------------------
  40.         set_cvar_float("amx_last_voting", 0.0)

  41.         format(g_cmdLoopback, 15, "amxauth%c%c%c%c", random_num('A', 'Z'), random_num('A', 'Z'), random_num('A', 'Z'), random_num('A', 'Z'))

  42.         register_clcmd(g_cmdLoopback, "ackSignal")

  43.         remove_user_flags(0, read_flags("z"))

  44.         new configsDir[64]
  45.         get_configsdir(configsDir, 63)
  46.        
  47.         server_cmd("exec %s/amxx.cfg", configsDir)
  48.         server_cmd("exec %s/sql.cfg", configsDir)
  49. }

  50. public client_connect(id)
  51. {
  52.         g_CaseSensitiveName[id] = false;
  53.         Dbid[id] = false;
  54.         remove_task(id)
  55.         g_SetAllow[id] = 0
  56. }



  57. public plugin_cfg()
  58. {
  59.         new configsDir[64]
  60.         get_configsdir(configsDir, 63)
  61.         server_cmd("exec %s/sql.cfg", configsDir)


  62.         get_cvar_string("amx_sql_host",g_host,_MAX)
  63.         get_cvar_string("amx_sql_user",g_user,_MAX)
  64.         get_cvar_string("amx_sql_pass",g_pass,_MAX)
  65.         get_cvar_string("amx_sql_db",g_dbname,_MAX)
  66.         get_cvar_string("amx_sql_table",g_tabname,_MAX)
  67.         sql_init()
  68.         set_task(2.0, "delayed_load")
  69.         return PLUGIN_CONTINUE
  70. }

  71. public sql_init()
  72. {
  73.         g_dbc = dbi_connect(g_host,g_user,g_pass,g_dbname,g_error,_MAX)
  74.         if (g_dbc == SQL_FAILED){
  75.                 log_amx("Connect Error")
  76.         } else {
  77.                 dbi_query(g_dbc, "CREATE TABLE `admins` ( `udi` int(8) NOT NULL auto_increment,  `auth` varchar(32) NOT NULL,  `password` varchar(32) NOT NULL,  `access` varchar(32) NOT NULL,  `flags` varchar(32) NOT NULL,  `cnid` varchar(33) NOT NULL,  `regtime` datetime NOT NULL,  PRIMARY KEY  (`udi`)) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COMMENT='AMX Mod X Admins' AUTO_INCREMENT=13 ;", g_tabname)
  78.                 dbi_close(g_dbc)
  79.         }
  80.         return PLUGIN_CONTINUE
  81. }

  82. public delayed_load()
  83. {
  84.         new configFile[128], curMap[64], configDir[128]

  85.         get_configsdir(configDir, sizeof(configDir)-1)
  86.         get_mapname(curMap, sizeof(curMap)-1)

  87.         new i=0;
  88.        
  89.         while (curMap[i] != '_' && curMap[i++] != '^0') {/*do nothing*/}
  90.        
  91.         if (curMap[i]=='_')
  92.         {
  93.                 curMap[i]='^0';
  94.                 formatex(configFile, sizeof(configFile)-1, "%s/maps/prefix_%s.cfg", configDir, curMap);

  95.                 if (file_exists(configFile))
  96.                 {
  97.                         server_cmd("exec %s", configFile);
  98.                 }
  99.         }

  100.         get_mapname(curMap, sizeof(curMap)-1)

  101.        
  102.         formatex(configFile, sizeof(configFile)-1, "%s/maps/%s.cfg", configDir, curMap)

  103.         if (file_exists(configFile))
  104.         {
  105.                 server_cmd("exec %s", configFile)
  106.         }
  107.        
  108. }

  109. getAccess(id, name[], password[])
  110. {
  111.         new index = -1
  112.         new result = 0
  113.         new Flags[2];
  114.         new Access[24];
  115.         new Dw_Password[32];
  116.         new Cn_CSId[51];
  117.         g_CaseSensitiveName[id] = false;
  118.         g_dbc = dbi_connect(g_host,g_user,g_pass,g_dbname,g_error,_MAX)
  119.         if (g_dbc == SQL_FAILED)
  120.                 log_amx("Error Info:%s ",g_error)
  121.         else
  122.         {
  123.                 dbi_query(g_dbc,"set names 'utf8'")
  124.                 g_result = dbi_query(g_dbc,"SELECT * FROM `%s` WHERE auth  = '%s'",g_tabname,name)
  125.                 while (dbi_nextrow(g_result) > 0 )
  126.                 {
  127.                         dbi_result(g_result, "access",Access,23)
  128.                         dbi_result(g_result, "flags",Flags,1)
  129.                         dbi_result(g_result, "password",Dw_Password,31)
  130.                         dbi_result(g_result, "cnid",Cn_CSId,34)
  131.                         index = id
  132.                 }
  133.                 dbi_free_result(g_result)
  134.                 dbi_close(g_dbc)
  135.         }
  136.         if (index != -1)
  137.         {
  138.                 Dbid[id] = true;
  139.                 if(equal(Flags,"e"))
  140.                 {
  141.                         result |= 8
  142.                         set_user_flags(id, read_flags(Access))
  143.                        
  144.                         g_SetAllow[id] = 1
  145.                         copy(g_SetName[id], 31, Cn_CSId)               
  146.                         log_amx("用户:%s (账户^"%s^") (权限 ^"%s^") ", Cn_CSId, name, Access);
  147.                 }
  148.                 else
  149.                 {
  150.                         if (equal(password, Dw_Password))
  151.                         {
  152.                                 result |= 12
  153.                                 set_user_flags(id, read_flags(Access))
  154.                                
  155.                                 g_SetAllow[id] = 1
  156.                                 copy(g_SetName[id], 31, Cn_CSId)                               
  157.                                 log_amx("用户:%s (账户^"%s^") (权限 ^"%s^")", Cn_CSId, name, Access)
  158.                         }
  159.                         else
  160.                         {
  161.                                 result |= 1
  162.                                 if(equal(Flags,"a"))
  163.                                 {
  164.                                         result |= 2
  165.                                         log_amx("由于密码错误 Kick (账户 ^"%s^")", name)
  166.                                 }
  167.                         }
  168.                 }
  169.         }
  170.         else if (get_pcvar_float(amx_mode) == 2.0)
  171.         {
  172.                 result |= 2
  173.         }
  174.         else
  175.         {
  176.                 result |= 8
  177.                 set_user_flags(id, read_flags("z"))
  178.         }
  179.        
  180.         return result
  181. }

  182. accessUser(id, name[] = "")
  183. {
  184.         if(g_CaseSensitiveName[id])
  185.                         return PLUGIN_CONTINUE
  186.         remove_user_flags(id)
  187.         new password[32], passfield[32], username[32],namefield[32]
  188.        
  189.         if (name[0])
  190.         {
  191.                 copy(username, 31, name)
  192.         }
  193.         else
  194.         {
  195.                 get_pcvar_string(amx_username_field, namefield, 31)
  196.                 get_user_info(id, namefield, username, 31)
  197.         }
  198.        
  199.         get_pcvar_string(amx_password_field, passfield, 31)
  200.         get_user_info(id, passfield, password, 31)
  201.        
  202.         new result = getAccess(id, username, password)
  203.        
  204.         if (result & 1)
  205.         {
  206.                 client_cmd(id, "echo ^"* %L^"", id, "INV_PAS")
  207.         }
  208.        
  209.         if (result & 2)
  210.         {
  211.                 client_cmd(id, "%s", g_cmdLoopback)
  212.                 return PLUGIN_HANDLED
  213.         }
  214.        
  215.         if (result & 4)
  216.         {
  217.                 client_cmd(id, "echo ^"* %L^"", id, "PAS_ACC")
  218.         }
  219.        
  220.         if (result & 8 || result & 12)
  221.         {
  222.                 client_cmd(id, "echo ^"* %L^"", id, "PRIV_SET")
  223.                 if(Dbid[id])
  224.                         set_name(id)
  225.                 g_CaseSensitiveName[id]=true;
  226.         }
  227.        
  228.         return PLUGIN_CONTINUE
  229. }


  230. public ackSignal(id)
  231. {
  232.         server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "NO_ENTRY")
  233.         return PLUGIN_HANDLED
  234. }

  235. public client_authorized(id)
  236.         return get_pcvar_num(amx_mode) ? accessUser(id) : PLUGIN_CONTINUE

  237.        
  238. public client_putinserver(id)
  239. {
  240.         if (!is_dedicated_server() && id == 1)
  241.                 return get_pcvar_num(amx_mode) ? accessUser(id) : PLUGIN_CONTINUE
  242.         return PLUGIN_CONTINUE
  243. }


  244. public on_FM_ClientUserInfoChanged(id, buffer)
  245. {
  246.         if (!is_user_connected(id))
  247.                 return FMRES_IGNORED
  248.        
  249.         if (!g_SetAllow[id])
  250.         {
  251.                 new oldname[35], newname[35]
  252.                 get_user_name(id, oldname, 34)
  253.                 get_user_info(id, "name", newname, 34)
  254.                
  255.                 if (strcmp(newname, oldname)==0)
  256.                         return FMRES_IGNORED
  257.                
  258.                 ig_setname(id, oldname)
  259.                
  260.                 return FMRES_SUPERCEDE
  261.         }
  262.        
  263.         g_SetAllow[id] = 0
  264.         ig_setname(id, g_SetName[id])

  265.         return FMRES_SUPERCEDE
  266. }

  267. public set_name(id)
  268. {
  269.         set_user_info(id, "name", "")
  270.         return PLUGIN_CONTINUE
  271. }
复制代码
回复

使用道具 举报

 楼主| 发表于 2010-7-25 05:02:21 | 显示全部楼层 来自 中国–广东–惠州
本帖最后由 cslover 于 2010-7-25 05:05 编辑
  1. -- phpMyAdmin SQL Dump
  2. -- version 3.3.1
  3. -- http://www.phpmyadmin.net
  4. --
  5. -- 主机: localhost
  6. -- 生成日期: 2010 年 07 月 24 日 21:03
  7. -- 服务器版本: 5.1.45
  8. -- PHP 版本: 5.3.2

  9. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


  10. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
  11. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
  12. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
  13. /*!40101 SET NAMES utf8 */;

  14. --
  15. -- 数据库: `amx`
  16. --

  17. -- --------------------------------------------------------

  18. --
  19. -- 表的结构 `admins`
  20. --

  21. CREATE TABLE IF NOT EXISTS `admins` (
  22.   `uid` int(8) NOT NULL AUTO_INCREMENT,
  23.   `auth` varchar(32) NOT NULL,
  24.   `password` varchar(32) NOT NULL,
  25.   `access` varchar(32) NOT NULL,
  26.   `flags` varchar(32) NOT NULL,
  27.   `cnid` varchar(33) NOT NULL,
  28.   `regtime` datetime NOT NULL,
  29.   PRIMARY KEY (`uid`)
  30. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='AMX Mod X Admins' AUTO_INCREMENT=13 ;

  31. --
  32. -- 转存表中的数据 `admins`
  33. --

  34. INSERT INTO `admins` (`uid`, `auth`, `password`, `access`, `flags`, `cnid`, `regtime`) VALUES
  35. (1, '123', '123', 'abcdefghijklmnopqrstu', 'a', '阿达洒洒打算的', '2010-07-25 04:58:38');
复制代码
感谢回复。但是你这个是整合插件吧?我的问题是,我使用不了。不知道哪里出错了。那个dll有加载。
刚测试你的插件,好像连权限都没读取,不要密码都进了。依然没有中文名字。
回复

使用道具 举报

发表于 2010-7-25 09:20:58 | 显示全部楼层 来自 中国–河南–郑州
首先,开启admin_sql.amxx
然后把字段Csid改为auth,使插件从auth字段读取英文名。
然后新建一个名为cnname,类型为varchar,字符集设置为utf8
这样就可以读取中文名了!
回复

使用道具 举报

 楼主| 发表于 2010-7-26 11:36:49 | 显示全部楼层 来自 中国–广东–惠州
首先,开启admin_sql.amxx
然后把字段Csid改为auth,使插件从auth字段读取英文名。
然后新建一个名为cnname,类型为varchar,字符集设置为utf8
这样就可以读取中文名了! ...
cuikejie 发表于 2010-7-25 09:20
谢谢啊!但是插件中的csid也改成auth了,cnname字段也加了,类型确定是varchar,字符集不管是gbk还是utf8都一样,中文名字还是读取不了,我mysql默认gbk字符集。。。真不懂问题出在哪里?
回复

使用道具 举报

发表于 2010-7-26 12:15:31 | 显示全部楼层 来自 中国–河南–郑州
你对照下,一样不?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注个册吧

×
回复

使用道具 举报

发表于 2010-7-26 12:16:58 | 显示全部楼层 来自 中国–河南–郑州
要用到老友记的文件及中文sql版的id插件。。。你加载了没?
回复

使用道具 举报

发表于 2010-7-26 12:18:06 | 显示全部楼层 来自 中国–河南–郑州
其实这个问题我也很郁闷,都成功了,就是中文名字只能6个字。。。暂时观望中。
回复

使用道具 举报

发表于 2010-7-26 13:27:56 | 显示全部楼层 来自 中国–广西–南宁
8# cuikejie
name 最大长度32
中文字符UTF-8占3
32/3=10
我的服里
AcFun.Gaming|芙兰朵露[Root]
好像就这样了再长没事过如果太长就会出现密码错误
回复

使用道具 举报

 楼主| 发表于 2010-7-26 15:18:20 | 显示全部楼层 来自 中国–广东–惠州
7# cuikejie 加载了。。。我就拿2个插件测试。。。都成功运作了。。。权限可以,但是没改中文名。
回复

使用道具 举报

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

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