设为首页收藏本站新闻投稿

MOD中国同盟社

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 482|回复: 0

[求助] 源码有中文保存UTF-无BOM格式转不了! [复制链接]

Rank: 3Rank: 3

帖子
251
精华
0
声望
876 点
金币
88 Mold
被赞许
0 次
注册时间
2009-9-11
发表于 2011-1-17 11:41:43 |显示全部楼层
一下是源码 源码有中文我用UTF-BOM 保存还是不行 ... 用了多个版本的,在线的compile.exe都转不成功!
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <fakemeta>
  4. #include <memhack>

  5. new lpBot[60][32];
  6. new bool:readend;
  7. new lpTotal;
  8. new bool:Lp_SetEnd[33];
  9. new Lp_SetName[32][32];

  10. public plugin_init() // 插件初始化
  11. {
  12.         register_plugin("Bot中文名", "20101004", "小坏")
  13.         register_forward(FM_ClientUserInfoChanged, "on_FM_ClientUserInfoChanged") // Hook
  14.         readend = false;
  15. }

  16. public plugin_cfg()
  17. {
  18.         new configfile[128]
  19.         get_configsdir(configfile,127)
  20.         format(configfile, 127, "%s/Cn_Bot_Id.ini", configfile)
  21.         if(file_exists(configfile))
  22.         {
  23.                 lpTotal = 0;
  24.                 new size = file_size(configfile, 1)
  25.                 if(size > sizeof(lpBot))
  26.                         size = sizeof(lpBot)
  27.                        
  28.                 new trash, names[191]
  29.                 for(new i=0;i<size;i++)
  30.                 {
  31.                         read_file(configfile, i, names, 191, trash);
  32.                         format(lpBot[lpTotal], 32, "%s", names);
  33.                         lpTotal++;
  34.                 }
  35.                 readend = true;
  36.                 log_amx("读取到 %d 个Bot中文ID", lpTotal)
  37.         } else {
  38.                 log_amx("没有找到Bot中文ID配置文件 (%s)", configfile);
  39.                 readend = false
  40.         }
  41.         return PLUGIN_CONTINUE;
  42. }

  43. public client_putinserver(id)
  44. {
  45.         Lp_SetEnd[id] = false;
  46.         if(is_user_bot(id) && readend)
  47.         {
  48.                 new i = id;
  49.                 format(Lp_SetName[id], 32, "%s", lpBot[i]);
  50.                 Set_Name(id);
  51.         }
  52.         return PLUGIN_CONTINUE;
  53. }


  54. public on_FM_ClientUserInfoChanged(id, buffer) // 改名
  55. {
  56.         if(!is_user_connected(id))
  57.                 return FMRES_IGNORED
  58.                
  59.         if(Lp_SetEnd[id])
  60.         {
  61.                 new oldname[35], newname[35]
  62.                 get_user_name(id, oldname, 34)
  63.                 get_user_info(id, "name", newname, 34)
  64.                 if (strcmp(newname, oldname)==0)
  65.                         return FMRES_IGNORED
  66.                
  67.                 if(containi(newname, "[NoACG]")!=-1)
  68.                 {
  69.                         replace_all(oldname, charsmax(oldname), "[NoACG]", "")
  70.                         formatex(newname, 31, "[NoACG]%s", oldname)
  71.                         new offset = get_name_offset(buffer)
  72.                         new namelen = strlen(newname)
  73.                         new i
  74.                         for (i = 0; i < namelen; i++)
  75.                         {
  76.                                 memhack_set_char(buffer + offset + i, MEM_NULLBASE, newname[i], MEMTYPE_DATA, MEM_SIGNED)
  77.                         }
  78.                         memhack_set_char(buffer + offset + i, MEM_NULLBASE, 0, MEMTYPE_DATA, MEM_SIGNED)
  79.                 } else {
  80.                         new offset = get_name_offset(buffer)
  81.                         new namelen = strlen(oldname)
  82.                         for (new i = 0; i < namelen; i++)
  83.                         {
  84.                                 memhack_set_char(buffer + offset + i, MEM_NULLBASE, oldname[i], MEMTYPE_DATA, MEM_SIGNED)
  85.                         }
  86.                 }
  87.                 return FMRES_SUPERCEDE
  88.         }
  89.         new offset = get_name_offset(buffer)
  90.         new namelen = strlen(Lp_SetName[id])
  91.         for (new i = 0; i < namelen; i++)
  92.         {
  93.                 memhack_set_char(buffer + offset + i, MEM_NULLBASE, Lp_SetName[id][i], MEMTYPE_DATA, MEM_SIGNED)
  94.         }
  95.         Lp_SetEnd[id] = true
  96.         return FMRES_SUPERCEDE
  97. }

  98. public Set_Name(id)
  99. {
  100.         Lp_SetEnd[id] = false
  101.         new fakename[32] = "0123456789012345678901234567890" // 初始化字符串防止缓冲区过短引发一些了蛋疼的问题
  102.         fakename[strlen(Lp_SetName[id])] = 0 // 以0结尾
  103.         set_user_info(id, "name", fakename) // 修改name 触发Hook来修改中文ID
  104.         return PLUGIN_CONTINUE
  105. }

  106. stock get_name_offset(buffer)
  107. {
  108.         new strtmp1[256]
  109.         copy_infokey_buffer(buffer, strtmp1, 255)
  110.         return contain(strtmp1, "\name\") + 6
  111. }
复制代码

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

回顶部